@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.
- 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 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +439 -262
- 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
package/dist/tools/git-tags.d.ts
CHANGED
|
@@ -1,19 +1,146 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/dist/tools/git-tags.js
CHANGED
|
@@ -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.
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|