@andrebuzeli/git-mcp 5.0.4 → 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 -4
  40. package/dist/server.d.ts.map +1 -1
  41. package/dist/server.js +439 -262
  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
@@ -1,19 +1,146 @@
1
- import { UniversalResponse } from '../utils/auto-detection.js';
2
- export declare const gitTagsTool: {
3
- name: string;
4
- description: string;
5
- inputSchema: {
6
- type: string;
7
- properties: {
8
- action: {
9
- type: string;
10
- };
11
- projectPath: {
12
- type: string;
1
+ /**
2
+ * Git Tags Tool
3
+ *
4
+ * Tag management tool providing comprehensive Git tag operations.
5
+ * Supports both local Git operations and remote provider operations.
6
+ *
7
+ * Operations: create, list, get, delete, search
8
+ */
9
+ import { ToolParams } from '../utils/parameter-validator.js';
10
+ import { ToolResult } from '../utils/operation-error-handler.js';
11
+ import { ProviderConfig } from '../providers/types.js';
12
+ export interface GitTagsParams extends ToolParams {
13
+ action: 'create' | 'list' | 'get' | 'delete' | 'search';
14
+ tagName?: string;
15
+ message?: string;
16
+ commit?: string;
17
+ pattern?: string;
18
+ query?: string;
19
+ force?: boolean;
20
+ annotated?: boolean;
21
+ lightweight?: boolean;
22
+ owner?: string;
23
+ repo?: string;
24
+ remote?: string;
25
+ }
26
+ export declare class GitTagsTool {
27
+ private gitExecutor;
28
+ private providerHandler?;
29
+ constructor(providerConfig?: ProviderConfig);
30
+ /**
31
+ * Execute git-tags operation
32
+ */
33
+ execute(params: GitTagsParams): Promise<ToolResult>;
34
+ /**
35
+ * Execute local Git tag operations
36
+ */
37
+ private executeLocalOperation;
38
+ /**
39
+ * Execute remote provider operations
40
+ */
41
+ private executeRemoteOperation;
42
+ /**
43
+ * Handle create tag operation
44
+ */
45
+ private handleCreateTag;
46
+ /**
47
+ * Handle list tags operation
48
+ */
49
+ private handleListTags;
50
+ /**
51
+ * Handle get tag operation
52
+ */
53
+ private handleGetTag;
54
+ /**
55
+ * Handle delete tag operation
56
+ */
57
+ private handleDeleteTag;
58
+ /**
59
+ * Handle search tags operation
60
+ */
61
+ private handleSearchTags;
62
+ /**
63
+ * Check if operation is a remote operation
64
+ */
65
+ private isRemoteOperation;
66
+ /**
67
+ * Extract parameters for remote operations
68
+ */
69
+ private extractRemoteParameters;
70
+ /**
71
+ * Map git-tags actions to provider operations
72
+ */
73
+ private mapActionToProviderOperation;
74
+ /**
75
+ * Get tool schema for MCP registration
76
+ */
77
+ static getToolSchema(): {
78
+ name: string;
79
+ description: string;
80
+ inputSchema: {
81
+ type: string;
82
+ properties: {
83
+ action: {
84
+ type: string;
85
+ enum: string[];
86
+ description: string;
87
+ };
88
+ projectPath: {
89
+ type: string;
90
+ description: string;
91
+ };
92
+ provider: {
93
+ type: string;
94
+ enum: string[];
95
+ description: string;
96
+ };
97
+ tagName: {
98
+ type: string;
99
+ description: string;
100
+ };
101
+ message: {
102
+ type: string;
103
+ description: string;
104
+ };
105
+ commit: {
106
+ type: string;
107
+ description: string;
108
+ };
109
+ pattern: {
110
+ type: string;
111
+ description: string;
112
+ };
113
+ query: {
114
+ type: string;
115
+ description: string;
116
+ };
117
+ force: {
118
+ type: string;
119
+ description: string;
120
+ };
121
+ annotated: {
122
+ type: string;
123
+ description: string;
124
+ };
125
+ lightweight: {
126
+ type: string;
127
+ description: string;
128
+ };
129
+ owner: {
130
+ type: string;
131
+ description: string;
132
+ };
133
+ repo: {
134
+ type: string;
135
+ description: string;
136
+ };
137
+ remote: {
138
+ type: string;
139
+ description: string;
140
+ };
13
141
  };
142
+ required: string[];
14
143
  };
15
- required: string[];
16
144
  };
17
- handler(input: any): Promise<UniversalResponse>;
18
- };
145
+ }
19
146
  //# sourceMappingURL=git-tags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-tags.d.ts","sourceRoot":"","sources":["../../src/tools/git-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,iBAAiB,EAAc,MAAM,4BAA4B,CAAC;AAEpG,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;mBAID,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAItD,CAAC"}
1
+ {"version":3,"file":"git-tags.d.ts","sourceRoot":"","sources":["../../src/tools/git-tags.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAsB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAyB,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAExF,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAE1E,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAGxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAC,CAA2B;gBAEvC,cAAc,CAAC,EAAE,cAAc;IAO3C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDzD;;OAEG;YACW,qBAAqB;IAuBnC;;OAEG;YACW,sBAAsB;IA4DpC;;OAEG;YACW,eAAe;IAuE7B;;OAEG;YACW,cAAc;IAuD5B;;OAEG;YACW,YAAY;IAiE1B;;OAEG;YACW,eAAe;IAqE7B;;OAEG;YACW,gBAAgB;IAiE9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAYpC;;OAEG;IACH,MAAM,CAAC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsErB"}
@@ -1,14 +1,474 @@
1
1
  "use strict";
2
+ /**
3
+ * Git Tags Tool
4
+ *
5
+ * Tag management tool providing comprehensive Git tag operations.
6
+ * Supports both local Git operations and remote provider operations.
7
+ *
8
+ * Operations: create, list, get, delete, search
9
+ */
2
10
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gitTagsTool = void 0;
4
- const auto_detection_js_1 = require("../utils/auto-detection.js");
5
- exports.gitTagsTool = {
6
- name: 'git-tags',
7
- description: '🏷️ TAGS - Gerenciamento de tags',
8
- inputSchema: { type: 'object', properties: { action: { type: 'string' }, projectPath: { type: 'string' } }, required: ['action', 'projectPath'] },
9
- async handler(input) {
10
- const detection = (0, auto_detection_js_1.autoDetect)(input.projectPath);
11
- return (0, auto_detection_js_1.createUniversalResponse)(true, input.action, 'Tag processada', detection, 'git-tags', { tags: [] });
12
- }
13
- };
11
+ exports.GitTagsTool = void 0;
12
+ const git_command_executor_js_1 = require("../utils/git-command-executor.js");
13
+ const parameter_validator_js_1 = require("../utils/parameter-validator.js");
14
+ const operation_error_handler_js_1 = require("../utils/operation-error-handler.js");
15
+ const provider_operation_handler_js_1 = require("../providers/provider-operation-handler.js");
16
+ class GitTagsTool {
17
+ gitExecutor;
18
+ providerHandler;
19
+ constructor(providerConfig) {
20
+ this.gitExecutor = new git_command_executor_js_1.GitCommandExecutor();
21
+ if (providerConfig) {
22
+ this.providerHandler = new provider_operation_handler_js_1.ProviderOperationHandler(providerConfig);
23
+ }
24
+ }
25
+ /**
26
+ * Execute git-tags operation
27
+ */
28
+ async execute(params) {
29
+ const startTime = Date.now();
30
+ try {
31
+ // Validate basic parameters
32
+ const validation = parameter_validator_js_1.ParameterValidator.validateToolParams('git-tags', params);
33
+ if (!validation.isValid) {
34
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('VALIDATION_ERROR', `Parameter validation failed: ${validation.errors.join(', ')}`, params.action, { validationErrors: validation.errors }, validation.suggestions);
35
+ }
36
+ // Validate operation-specific parameters
37
+ const operationValidation = parameter_validator_js_1.ParameterValidator.validateOperationParams('git-tags', params.action, params);
38
+ if (!operationValidation.isValid) {
39
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('VALIDATION_ERROR', `Operation validation failed: ${operationValidation.errors.join(', ')}`, params.action, { validationErrors: operationValidation.errors }, operationValidation.suggestions);
40
+ }
41
+ // Route to appropriate handler
42
+ const isRemoteOperation = this.isRemoteOperation(params.action);
43
+ if (isRemoteOperation && params.provider) {
44
+ return await this.executeRemoteOperation(params, startTime);
45
+ }
46
+ else {
47
+ return await this.executeLocalOperation(params, startTime);
48
+ }
49
+ }
50
+ catch (error) {
51
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
52
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('EXECUTION_ERROR', `Failed to execute ${params.action}: ${errorMessage}`, params.action, { error: errorMessage }, ['Check the error details and try again']);
53
+ }
54
+ }
55
+ /**
56
+ * Execute local Git tag operations
57
+ */
58
+ async executeLocalOperation(params, startTime) {
59
+ switch (params.action) {
60
+ case 'create':
61
+ return await this.handleCreateTag(params, startTime);
62
+ case 'list':
63
+ return await this.handleListTags(params, startTime);
64
+ case 'get':
65
+ return await this.handleGetTag(params, startTime);
66
+ case 'delete':
67
+ return await this.handleDeleteTag(params, startTime);
68
+ case 'search':
69
+ return await this.handleSearchTags(params, startTime);
70
+ default:
71
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('UNSUPPORTED_OPERATION', `Local operation '${params.action}' is not supported`, params.action, {}, ['Use one of: create, list, get, delete, search']);
72
+ }
73
+ }
74
+ /**
75
+ * Execute remote provider operations
76
+ */
77
+ async executeRemoteOperation(params, startTime) {
78
+ if (!this.providerHandler) {
79
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('PROVIDER_NOT_CONFIGURED', 'Provider handler is not configured for remote operations', params.action, {}, ['Configure GitHub or Gitea provider to use remote operations']);
80
+ }
81
+ if (!params.provider) {
82
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('PROVIDER_REQUIRED', 'Provider parameter is required for remote operations', params.action, {}, ['Specify provider as: github, gitea, or both']);
83
+ }
84
+ const operation = {
85
+ provider: params.provider,
86
+ operation: this.mapActionToProviderOperation(params.action),
87
+ parameters: this.extractRemoteParameters(params),
88
+ requiresAuth: true,
89
+ isRemoteOperation: true
90
+ };
91
+ try {
92
+ const result = await this.providerHandler.executeOperation(operation);
93
+ return {
94
+ success: result.success,
95
+ data: result.partialFailure ? result : result.results[0]?.data,
96
+ error: result.success ? undefined : {
97
+ code: result.errors[0]?.error?.code || 'REMOTE_OPERATION_ERROR',
98
+ message: result.errors[0]?.error?.message || 'Remote operation failed',
99
+ details: result.errors,
100
+ suggestions: ['Check provider configuration and credentials']
101
+ },
102
+ metadata: {
103
+ provider: params.provider,
104
+ operation: params.action,
105
+ timestamp: new Date().toISOString(),
106
+ executionTime: Date.now() - startTime
107
+ }
108
+ };
109
+ }
110
+ catch (error) {
111
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
112
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('REMOTE_OPERATION_ERROR', `Remote operation failed: ${errorMessage}`, params.action, { error: errorMessage }, ['Check provider configuration and network connectivity']);
113
+ }
114
+ }
115
+ /**
116
+ * Handle create tag operation
117
+ */
118
+ async handleCreateTag(params, startTime) {
119
+ try {
120
+ if (!params.tagName) {
121
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('MISSING_PARAMETER', 'tagName is required for tag creation', 'create', {}, ['Provide a name for the new tag']);
122
+ }
123
+ // Check if tag already exists
124
+ const existingTags = await this.gitExecutor.listTags(params.projectPath);
125
+ if (existingTags.success && existingTags.tags?.includes(params.tagName)) {
126
+ if (!params.force) {
127
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('TAG_EXISTS', `Tag '${params.tagName}' already exists`, 'create', { tagName: params.tagName }, ['Use force=true to overwrite the existing tag or choose a different name']);
128
+ }
129
+ }
130
+ // Determine tag type
131
+ const isAnnotated = Boolean(params.annotated || (params.message && !params.lightweight));
132
+ const result = await this.gitExecutor.createTag(params.projectPath, params.tagName, {
133
+ message: params.message,
134
+ commit: params.commit,
135
+ annotated: isAnnotated,
136
+ force: Boolean(params.force)
137
+ });
138
+ if (!result.success) {
139
+ return operation_error_handler_js_1.OperationErrorHandler.handleGitError(result.stderr, 'create tag', params.projectPath);
140
+ }
141
+ return {
142
+ success: true,
143
+ data: {
144
+ message: `Tag '${params.tagName}' created successfully`,
145
+ tagName: params.tagName,
146
+ type: isAnnotated ? 'annotated' : 'lightweight',
147
+ commit: params.commit || 'HEAD',
148
+ tagMessage: params.message,
149
+ output: result.stdout
150
+ },
151
+ metadata: {
152
+ operation: 'create',
153
+ timestamp: new Date().toISOString(),
154
+ executionTime: Date.now() - startTime
155
+ }
156
+ };
157
+ }
158
+ catch (error) {
159
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
160
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('CREATE_TAG_ERROR', `Failed to create tag: ${errorMessage}`, 'create', { error: errorMessage, projectPath: params.projectPath });
161
+ }
162
+ }
163
+ /**
164
+ * Handle list tags operation
165
+ */
166
+ async handleListTags(params, startTime) {
167
+ try {
168
+ const result = await this.gitExecutor.listTags(params.projectPath, {
169
+ pattern: params.pattern,
170
+ sort: 'version:refname'
171
+ });
172
+ if (!result.success) {
173
+ return operation_error_handler_js_1.OperationErrorHandler.handleGitError(result.stderr, 'list tags', params.projectPath);
174
+ }
175
+ // Get detailed information for each tag
176
+ const tagDetails = [];
177
+ if (result.tags && result.tags.length > 0) {
178
+ for (const tag of result.tags.slice(0, 50)) { // Limit to 50 tags for performance
179
+ const tagInfo = await this.gitExecutor.getTagInfo(params.projectPath, tag);
180
+ if (tagInfo.success) {
181
+ tagDetails.push({
182
+ name: tag,
183
+ type: tagInfo.type,
184
+ commit: tagInfo.commit,
185
+ message: tagInfo.message,
186
+ tagger: tagInfo.tagger,
187
+ date: tagInfo.date
188
+ });
189
+ }
190
+ }
191
+ }
192
+ return {
193
+ success: true,
194
+ data: {
195
+ tags: result.tags || [],
196
+ tagDetails,
197
+ total: result.tags?.length || 0,
198
+ pattern: params.pattern,
199
+ raw: result.stdout
200
+ },
201
+ metadata: {
202
+ operation: 'list',
203
+ timestamp: new Date().toISOString(),
204
+ executionTime: Date.now() - startTime
205
+ }
206
+ };
207
+ }
208
+ catch (error) {
209
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
210
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('LIST_TAGS_ERROR', `Failed to list tags: ${errorMessage}`, 'list', { error: errorMessage, projectPath: params.projectPath });
211
+ }
212
+ }
213
+ /**
214
+ * Handle get tag operation
215
+ */
216
+ async handleGetTag(params, startTime) {
217
+ try {
218
+ if (!params.tagName) {
219
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('MISSING_PARAMETER', 'tagName is required for get tag operation', 'get', {}, ['Provide the name of the tag to get information about']);
220
+ }
221
+ // Get tag information
222
+ const tagInfo = await this.gitExecutor.getTagInfo(params.projectPath, params.tagName);
223
+ if (!tagInfo.success) {
224
+ return operation_error_handler_js_1.OperationErrorHandler.handleGitError(tagInfo.stderr, 'get tag info', params.projectPath);
225
+ }
226
+ if (!tagInfo.exists) {
227
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('TAG_NOT_FOUND', `Tag '${params.tagName}' does not exist`, 'get', { tagName: params.tagName }, ['Check the tag name or list available tags first']);
228
+ }
229
+ // Get commit information for the tag
230
+ const commitInfo = await this.gitExecutor.getCommitInfo(params.projectPath, tagInfo.commit || params.tagName);
231
+ return {
232
+ success: true,
233
+ data: {
234
+ tagName: params.tagName,
235
+ type: tagInfo.type,
236
+ commit: tagInfo.commit,
237
+ message: tagInfo.message,
238
+ tagger: tagInfo.tagger,
239
+ date: tagInfo.date,
240
+ commitInfo: commitInfo.success ? {
241
+ hash: commitInfo.hash,
242
+ author: commitInfo.author,
243
+ date: commitInfo.date,
244
+ message: commitInfo.message
245
+ } : null
246
+ },
247
+ metadata: {
248
+ operation: 'get',
249
+ timestamp: new Date().toISOString(),
250
+ executionTime: Date.now() - startTime
251
+ }
252
+ };
253
+ }
254
+ catch (error) {
255
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
256
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('GET_TAG_ERROR', `Failed to get tag information: ${errorMessage}`, 'get', { error: errorMessage, projectPath: params.projectPath });
257
+ }
258
+ }
259
+ /**
260
+ * Handle delete tag operation
261
+ */
262
+ async handleDeleteTag(params, startTime) {
263
+ try {
264
+ if (!params.tagName) {
265
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('MISSING_PARAMETER', 'tagName is required for tag deletion', 'delete', {}, ['Provide the name of the tag to delete']);
266
+ }
267
+ // Check if tag exists
268
+ const tagInfo = await this.gitExecutor.getTagInfo(params.projectPath, params.tagName);
269
+ if (tagInfo.success && !tagInfo.exists) {
270
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('TAG_NOT_FOUND', `Tag '${params.tagName}' does not exist`, 'delete', { tagName: params.tagName }, ['Check the tag name or list available tags first']);
271
+ }
272
+ const result = await this.gitExecutor.deleteTag(params.projectPath, params.tagName, {
273
+ force: Boolean(params.force)
274
+ });
275
+ if (!result.success) {
276
+ return operation_error_handler_js_1.OperationErrorHandler.handleGitError(result.stderr, 'delete tag', params.projectPath);
277
+ }
278
+ // Also delete from remote if specified
279
+ let remoteDeleteResult = null;
280
+ if (params.remote) {
281
+ remoteDeleteResult = await this.gitExecutor.deleteRemoteTag(params.projectPath, params.remote, params.tagName);
282
+ }
283
+ return {
284
+ success: true,
285
+ data: {
286
+ message: `Tag '${params.tagName}' deleted successfully`,
287
+ tagName: params.tagName,
288
+ deletedFromRemote: params.remote ? remoteDeleteResult?.success : false,
289
+ remote: params.remote,
290
+ output: result.stdout,
291
+ remoteOutput: remoteDeleteResult?.stdout
292
+ },
293
+ metadata: {
294
+ operation: 'delete',
295
+ timestamp: new Date().toISOString(),
296
+ executionTime: Date.now() - startTime
297
+ }
298
+ };
299
+ }
300
+ catch (error) {
301
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
302
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('DELETE_TAG_ERROR', `Failed to delete tag: ${errorMessage}`, 'delete', { error: errorMessage, projectPath: params.projectPath });
303
+ }
304
+ }
305
+ /**
306
+ * Handle search tags operation
307
+ */
308
+ async handleSearchTags(params, startTime) {
309
+ try {
310
+ const searchPattern = params.pattern || params.query || '*';
311
+ const result = await this.gitExecutor.listTags(params.projectPath, {
312
+ pattern: searchPattern,
313
+ sort: 'version:refname'
314
+ });
315
+ if (!result.success) {
316
+ return operation_error_handler_js_1.OperationErrorHandler.handleGitError(result.stderr, 'search tags', params.projectPath);
317
+ }
318
+ // Filter tags based on query if provided
319
+ let filteredTags = result.tags || [];
320
+ if (params.query && params.query !== searchPattern) {
321
+ const queryLower = params.query.toLowerCase();
322
+ filteredTags = filteredTags.filter(tag => tag.toLowerCase().includes(queryLower));
323
+ }
324
+ // Get detailed information for matching tags
325
+ const tagDetails = [];
326
+ for (const tag of filteredTags.slice(0, 20)) { // Limit to 20 tags for performance
327
+ const tagInfo = await this.gitExecutor.getTagInfo(params.projectPath, tag);
328
+ if (tagInfo.success) {
329
+ tagDetails.push({
330
+ name: tag,
331
+ type: tagInfo.type,
332
+ commit: tagInfo.commit,
333
+ message: tagInfo.message,
334
+ tagger: tagInfo.tagger,
335
+ date: tagInfo.date
336
+ });
337
+ }
338
+ }
339
+ return {
340
+ success: true,
341
+ data: {
342
+ query: params.query || params.pattern,
343
+ pattern: searchPattern,
344
+ matches: filteredTags,
345
+ tagDetails,
346
+ total: filteredTags.length,
347
+ totalTags: result.tags?.length || 0
348
+ },
349
+ metadata: {
350
+ operation: 'search',
351
+ timestamp: new Date().toISOString(),
352
+ executionTime: Date.now() - startTime
353
+ }
354
+ };
355
+ }
356
+ catch (error) {
357
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
358
+ return operation_error_handler_js_1.OperationErrorHandler.createToolError('SEARCH_TAGS_ERROR', `Failed to search tags: ${errorMessage}`, 'search', { error: errorMessage, projectPath: params.projectPath });
359
+ }
360
+ }
361
+ /**
362
+ * Check if operation is a remote operation
363
+ */
364
+ isRemoteOperation(action) {
365
+ // Tags can be synchronized with remote, but core operations are local
366
+ // Remote operations would be handled through provider APIs for releases
367
+ return false;
368
+ }
369
+ /**
370
+ * Extract parameters for remote operations
371
+ */
372
+ extractRemoteParameters(params) {
373
+ const remoteParams = {
374
+ projectPath: params.projectPath
375
+ };
376
+ if (params.owner)
377
+ remoteParams.owner = params.owner;
378
+ if (params.repo)
379
+ remoteParams.repo = params.repo;
380
+ if (params.tagName)
381
+ remoteParams.tagName = params.tagName;
382
+ if (params.message)
383
+ remoteParams.message = params.message;
384
+ return remoteParams;
385
+ }
386
+ /**
387
+ * Map git-tags actions to provider operations
388
+ */
389
+ mapActionToProviderOperation(action) {
390
+ const actionMap = {
391
+ 'list': 'tag-list',
392
+ 'get': 'tag-get',
393
+ 'create': 'tag-create',
394
+ 'delete': 'tag-delete',
395
+ 'search': 'tag-search'
396
+ };
397
+ return actionMap[action] || action;
398
+ }
399
+ /**
400
+ * Get tool schema for MCP registration
401
+ */
402
+ static getToolSchema() {
403
+ return {
404
+ name: 'git-tags',
405
+ description: 'Git tag management tool for tag operations. Supports create, list, get, delete, and search operations for both lightweight and annotated tags.',
406
+ inputSchema: {
407
+ type: 'object',
408
+ properties: {
409
+ action: {
410
+ type: 'string',
411
+ enum: ['create', 'list', 'get', 'delete', 'search'],
412
+ description: 'The tag operation to perform'
413
+ },
414
+ projectPath: {
415
+ type: 'string',
416
+ description: 'Absolute path to the project directory'
417
+ },
418
+ provider: {
419
+ type: 'string',
420
+ enum: ['github', 'gitea', 'both'],
421
+ description: 'Provider for remote operations (optional)'
422
+ },
423
+ tagName: {
424
+ type: 'string',
425
+ description: 'Name of the tag (required for create, get, delete)'
426
+ },
427
+ message: {
428
+ type: 'string',
429
+ description: 'Tag message for annotated tags (for create action)'
430
+ },
431
+ commit: {
432
+ type: 'string',
433
+ description: 'Specific commit to tag (default: HEAD, for create action)'
434
+ },
435
+ pattern: {
436
+ type: 'string',
437
+ description: 'Pattern to filter tags (for list, search actions)'
438
+ },
439
+ query: {
440
+ type: 'string',
441
+ description: 'Search query for tags (for search action)'
442
+ },
443
+ force: {
444
+ type: 'boolean',
445
+ description: 'Force operation (for create, delete actions)'
446
+ },
447
+ annotated: {
448
+ type: 'boolean',
449
+ description: 'Create annotated tag (for create action)'
450
+ },
451
+ lightweight: {
452
+ type: 'boolean',
453
+ description: 'Create lightweight tag (for create action)'
454
+ },
455
+ owner: {
456
+ type: 'string',
457
+ description: 'Repository owner (for remote operations)'
458
+ },
459
+ repo: {
460
+ type: 'string',
461
+ description: 'Repository name (for remote operations)'
462
+ },
463
+ remote: {
464
+ type: 'string',
465
+ description: 'Remote name for remote tag operations (default: origin)'
466
+ }
467
+ },
468
+ required: ['action', 'projectPath']
469
+ }
470
+ };
471
+ }
472
+ }
473
+ exports.GitTagsTool = GitTagsTool;
14
474
  //# sourceMappingURL=git-tags.js.map