@andrebuzeli/git-mcp 8.0.2 → 8.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.js +23 -2
- package/dist/index.js.map +1 -1
- package/dist/prompts/gitPrompts.d.ts +115 -0
- package/dist/prompts/gitPrompts.d.ts.map +1 -0
- package/dist/prompts/gitPrompts.js +299 -0
- package/dist/prompts/gitPrompts.js.map +1 -0
- package/dist/tools/gitChangelog.d.ts +1 -0
- package/dist/tools/gitChangelog.d.ts.map +1 -0
- package/dist/tools/gitChangelog.js +2 -0
- package/dist/tools/gitChangelog.js.map +1 -0
- package/dist/tools/gitHistory.d.ts +4 -43
- package/dist/tools/gitHistory.d.ts.map +1 -1
- package/dist/tools/gitHistory.js +104 -243
- package/dist/tools/gitHistory.js.map +1 -1
- package/dist/tools/gitLog.d.ts +1 -0
- package/dist/tools/gitLog.d.ts.map +1 -0
- package/dist/tools/gitLog.js +2 -0
- package/dist/tools/gitLog.js.map +1 -0
- package/dist/tools/gitPackages.d.ts +5 -155
- package/dist/tools/gitPackages.d.ts.map +1 -1
- package/dist/tools/gitPackages.js +250 -156
- package/dist/tools/gitPackages.js.map +1 -1
- package/dist/tools/gitRelease.js +1 -1
- package/dist/tools/gitRelease.js.map +1 -1
- package/dist/tools/gitTags.js +1 -1
- package/dist/tools/gitTags.js.map +1 -1
- package/dist/tools/gitUpdate.d.ts +0 -26
- package/dist/tools/gitUpdate.d.ts.map +1 -1
- package/dist/tools/gitUpdate.js +43 -306
- package/dist/tools/gitUpdate.js.map +1 -1
- package/dist/tools/gitUpload.d.ts +0 -1
- package/dist/tools/gitUpload.d.ts.map +1 -1
- package/dist/tools/gitUpload.js +2 -29
- package/dist/tools/gitUpload.js.map +1 -1
- package/package.json +1 -1
- package/UNIVERSAL-IDE-SETUP.md +0 -328
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Tool, MCPContext } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Git Packages Tool - DUAL-PROVIDER (GitHub + Gitea)
|
|
4
|
+
* Manages packages published to GitHub Packages and Gitea Packages
|
|
5
|
+
*/
|
|
2
6
|
export declare class GitPackagesTool implements Tool {
|
|
3
7
|
name: string;
|
|
4
8
|
description: string;
|
|
@@ -14,10 +18,6 @@ export declare class GitPackagesTool implements Tool {
|
|
|
14
18
|
description: string;
|
|
15
19
|
enum: string[];
|
|
16
20
|
};
|
|
17
|
-
repo: {
|
|
18
|
-
type: string;
|
|
19
|
-
description: string;
|
|
20
|
-
};
|
|
21
21
|
packageType: {
|
|
22
22
|
type: string;
|
|
23
23
|
description: string;
|
|
@@ -27,10 +27,6 @@ export declare class GitPackagesTool implements Tool {
|
|
|
27
27
|
type: string;
|
|
28
28
|
description: string;
|
|
29
29
|
};
|
|
30
|
-
packageId: {
|
|
31
|
-
type: string;
|
|
32
|
-
description: string;
|
|
33
|
-
};
|
|
34
30
|
confirm: {
|
|
35
31
|
type: string;
|
|
36
32
|
description: string;
|
|
@@ -39,152 +35,6 @@ export declare class GitPackagesTool implements Tool {
|
|
|
39
35
|
required: string[];
|
|
40
36
|
additionalProperties: boolean;
|
|
41
37
|
};
|
|
42
|
-
handle(params: Record<string, any>, ctx: MCPContext): Promise<
|
|
43
|
-
success: boolean;
|
|
44
|
-
name: any;
|
|
45
|
-
version: any;
|
|
46
|
-
dependencies: any;
|
|
47
|
-
devDependencies: any;
|
|
48
|
-
scripts: any;
|
|
49
|
-
message?: undefined;
|
|
50
|
-
note?: undefined;
|
|
51
|
-
created?: undefined;
|
|
52
|
-
path?: undefined;
|
|
53
|
-
package?: undefined;
|
|
54
|
-
updated?: undefined;
|
|
55
|
-
deleted?: undefined;
|
|
56
|
-
instructions?: undefined;
|
|
57
|
-
projectPath?: undefined;
|
|
58
|
-
} | {
|
|
59
|
-
success: boolean;
|
|
60
|
-
message: string;
|
|
61
|
-
note: string;
|
|
62
|
-
name?: undefined;
|
|
63
|
-
version?: undefined;
|
|
64
|
-
dependencies?: undefined;
|
|
65
|
-
devDependencies?: undefined;
|
|
66
|
-
scripts?: undefined;
|
|
67
|
-
created?: undefined;
|
|
68
|
-
path?: undefined;
|
|
69
|
-
package?: undefined;
|
|
70
|
-
updated?: undefined;
|
|
71
|
-
deleted?: undefined;
|
|
72
|
-
instructions?: undefined;
|
|
73
|
-
projectPath?: undefined;
|
|
74
|
-
} | {
|
|
75
|
-
success: boolean;
|
|
76
|
-
created: boolean;
|
|
77
|
-
path: string;
|
|
78
|
-
package: any;
|
|
79
|
-
name?: undefined;
|
|
80
|
-
version?: undefined;
|
|
81
|
-
dependencies?: undefined;
|
|
82
|
-
devDependencies?: undefined;
|
|
83
|
-
scripts?: undefined;
|
|
84
|
-
message?: undefined;
|
|
85
|
-
note?: undefined;
|
|
86
|
-
updated?: undefined;
|
|
87
|
-
deleted?: undefined;
|
|
88
|
-
instructions?: undefined;
|
|
89
|
-
projectPath?: undefined;
|
|
90
|
-
} | {
|
|
91
|
-
success: boolean;
|
|
92
|
-
updated: boolean;
|
|
93
|
-
path: string;
|
|
94
|
-
package: any;
|
|
95
|
-
name?: undefined;
|
|
96
|
-
version?: undefined;
|
|
97
|
-
dependencies?: undefined;
|
|
98
|
-
devDependencies?: undefined;
|
|
99
|
-
scripts?: undefined;
|
|
100
|
-
message?: undefined;
|
|
101
|
-
note?: undefined;
|
|
102
|
-
created?: undefined;
|
|
103
|
-
deleted?: undefined;
|
|
104
|
-
instructions?: undefined;
|
|
105
|
-
projectPath?: undefined;
|
|
106
|
-
} | {
|
|
107
|
-
success: boolean;
|
|
108
|
-
deleted: boolean;
|
|
109
|
-
path: string;
|
|
110
|
-
name?: undefined;
|
|
111
|
-
version?: undefined;
|
|
112
|
-
dependencies?: undefined;
|
|
113
|
-
devDependencies?: undefined;
|
|
114
|
-
scripts?: undefined;
|
|
115
|
-
message?: undefined;
|
|
116
|
-
note?: undefined;
|
|
117
|
-
created?: undefined;
|
|
118
|
-
package?: undefined;
|
|
119
|
-
updated?: undefined;
|
|
120
|
-
instructions?: undefined;
|
|
121
|
-
projectPath?: undefined;
|
|
122
|
-
} | {
|
|
123
|
-
success: boolean;
|
|
124
|
-
message: string;
|
|
125
|
-
path: string;
|
|
126
|
-
name?: undefined;
|
|
127
|
-
version?: undefined;
|
|
128
|
-
dependencies?: undefined;
|
|
129
|
-
devDependencies?: undefined;
|
|
130
|
-
scripts?: undefined;
|
|
131
|
-
note?: undefined;
|
|
132
|
-
created?: undefined;
|
|
133
|
-
package?: undefined;
|
|
134
|
-
updated?: undefined;
|
|
135
|
-
deleted?: undefined;
|
|
136
|
-
instructions?: undefined;
|
|
137
|
-
projectPath?: undefined;
|
|
138
|
-
} | {
|
|
139
|
-
success: boolean;
|
|
140
|
-
message: string;
|
|
141
|
-
instructions: {
|
|
142
|
-
command: string;
|
|
143
|
-
registry: any;
|
|
144
|
-
access: any;
|
|
145
|
-
tag: any;
|
|
146
|
-
note: string;
|
|
147
|
-
package?: undefined;
|
|
148
|
-
version?: undefined;
|
|
149
|
-
destination?: undefined;
|
|
150
|
-
};
|
|
151
|
-
projectPath: any;
|
|
152
|
-
name?: undefined;
|
|
153
|
-
version?: undefined;
|
|
154
|
-
dependencies?: undefined;
|
|
155
|
-
devDependencies?: undefined;
|
|
156
|
-
scripts?: undefined;
|
|
157
|
-
note?: undefined;
|
|
158
|
-
created?: undefined;
|
|
159
|
-
path?: undefined;
|
|
160
|
-
package?: undefined;
|
|
161
|
-
updated?: undefined;
|
|
162
|
-
deleted?: undefined;
|
|
163
|
-
} | {
|
|
164
|
-
success: boolean;
|
|
165
|
-
message: string;
|
|
166
|
-
instructions: {
|
|
167
|
-
command: string;
|
|
168
|
-
package: any;
|
|
169
|
-
version: any;
|
|
170
|
-
destination: any;
|
|
171
|
-
note: string;
|
|
172
|
-
registry?: undefined;
|
|
173
|
-
access?: undefined;
|
|
174
|
-
tag?: undefined;
|
|
175
|
-
};
|
|
176
|
-
name?: undefined;
|
|
177
|
-
version?: undefined;
|
|
178
|
-
dependencies?: undefined;
|
|
179
|
-
devDependencies?: undefined;
|
|
180
|
-
scripts?: undefined;
|
|
181
|
-
note?: undefined;
|
|
182
|
-
created?: undefined;
|
|
183
|
-
path?: undefined;
|
|
184
|
-
package?: undefined;
|
|
185
|
-
updated?: undefined;
|
|
186
|
-
deleted?: undefined;
|
|
187
|
-
projectPath?: undefined;
|
|
188
|
-
}>;
|
|
38
|
+
handle(params: Record<string, any>, ctx: MCPContext): Promise<any>;
|
|
189
39
|
}
|
|
190
40
|
//# sourceMappingURL=gitPackages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitPackages.d.ts","sourceRoot":"","sources":["../../src/tools/gitPackages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitPackages.d.ts","sourceRoot":"","sources":["../../src/tools/gitPackages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI/C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,IAAI;IAC1C,IAAI,SAAkB;IACtB,WAAW,SAAuE;IAElF,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA4BT;IAEI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU;CAyU1D"}
|
|
@@ -1,40 +1,34 @@
|
|
|
1
|
-
import fs from 'fs/promises';
|
|
2
|
-
import path from 'path';
|
|
3
1
|
import { MCPError } from '../utils/errors.js';
|
|
4
2
|
import { normalizeToolParams } from '../utils/repoHelpers.js';
|
|
3
|
+
/**
|
|
4
|
+
* Git Packages Tool - DUAL-PROVIDER (GitHub + Gitea)
|
|
5
|
+
* Manages packages published to GitHub Packages and Gitea Packages
|
|
6
|
+
*/
|
|
5
7
|
export class GitPackagesTool {
|
|
6
8
|
constructor() {
|
|
7
9
|
this.name = 'git-packages';
|
|
8
|
-
this.description = 'Package management operations';
|
|
10
|
+
this.description = 'Package management operations - automatic dual-provider execution';
|
|
9
11
|
this.inputSchema = {
|
|
10
12
|
type: "object",
|
|
11
13
|
properties: {
|
|
12
14
|
projectPath: {
|
|
13
15
|
type: "string",
|
|
14
|
-
description: "Absolute path to the project/repository (
|
|
16
|
+
description: "Absolute path to the project/repository (REQUIRED)"
|
|
15
17
|
},
|
|
16
18
|
action: {
|
|
17
19
|
type: "string",
|
|
18
20
|
description: "Package operation to perform (REQUIRED)",
|
|
19
21
|
enum: ["list", "get", "delete", "versions"]
|
|
20
22
|
},
|
|
21
|
-
repo: {
|
|
22
|
-
type: "string",
|
|
23
|
-
description: "Repository name (auto-detected from projectPath)"
|
|
24
|
-
},
|
|
25
23
|
packageType: {
|
|
26
24
|
type: "string",
|
|
27
25
|
description: "Package type (required for operations)",
|
|
28
|
-
enum: ["npm", "
|
|
26
|
+
enum: ["npm", "container", "maven", "nuget", "rubygems"]
|
|
29
27
|
},
|
|
30
28
|
packageName: {
|
|
31
29
|
type: "string",
|
|
32
30
|
description: "Package name (required for get/delete/versions)"
|
|
33
31
|
},
|
|
34
|
-
packageId: {
|
|
35
|
-
type: "number",
|
|
36
|
-
description: "Package ID (required for delete)"
|
|
37
|
-
},
|
|
38
32
|
confirm: {
|
|
39
33
|
type: "boolean",
|
|
40
34
|
description: "Confirm destructive operations (optional for delete)"
|
|
@@ -47,174 +41,274 @@ export class GitPackagesTool {
|
|
|
47
41
|
async handle(params, ctx) {
|
|
48
42
|
params = normalizeToolParams(params);
|
|
49
43
|
const action = params.action;
|
|
50
|
-
const projectPath = params.projectPath;
|
|
51
44
|
if (!action)
|
|
52
45
|
throw new MCPError('VALIDATION_ERROR', 'action is required');
|
|
46
|
+
const githubOwner = process.env.GITHUB_USERNAME;
|
|
47
|
+
const giteaOwner = process.env.GITEA_USERNAME;
|
|
53
48
|
switch (action) {
|
|
54
49
|
case 'list': {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
50
|
+
const results = {
|
|
51
|
+
success: true,
|
|
52
|
+
providers: {},
|
|
53
|
+
summary: {
|
|
54
|
+
total: 0,
|
|
55
|
+
byProvider: {},
|
|
56
|
+
byType: {}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
// GitHub Packages
|
|
60
|
+
if (ctx.providerManager.github && githubOwner) {
|
|
61
|
+
try {
|
|
62
|
+
// GitHub Packages API endpoint
|
|
63
|
+
const response = await ctx.providerManager.github.request('GET /users/{username}/packages', {
|
|
64
|
+
username: githubOwner,
|
|
65
|
+
package_type: params.packageType || 'npm'
|
|
66
|
+
});
|
|
67
|
+
results.providers.github = {
|
|
68
|
+
success: true,
|
|
69
|
+
packages: response.data.map((pkg) => ({
|
|
70
|
+
name: pkg.name,
|
|
71
|
+
package_type: pkg.package_type,
|
|
72
|
+
visibility: pkg.visibility,
|
|
73
|
+
created_at: pkg.created_at,
|
|
74
|
+
updated_at: pkg.updated_at,
|
|
75
|
+
repository: pkg.repository?.full_name,
|
|
76
|
+
url: pkg.html_url
|
|
77
|
+
})),
|
|
78
|
+
count: response.data.length
|
|
79
|
+
};
|
|
80
|
+
results.summary.byProvider.github = response.data.length;
|
|
81
|
+
results.summary.total += response.data.length;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
results.providers.github = {
|
|
85
|
+
success: false,
|
|
86
|
+
error: error.message,
|
|
87
|
+
note: 'GitHub Packages may require specific permissions'
|
|
88
|
+
};
|
|
89
|
+
}
|
|
70
90
|
}
|
|
71
|
-
|
|
72
|
-
|
|
91
|
+
// Gitea Packages
|
|
92
|
+
if (ctx.providerManager.gitea && giteaOwner) {
|
|
93
|
+
try {
|
|
94
|
+
const packageType = params.packageType || 'npm';
|
|
95
|
+
const response = await ctx.providerManager.gitea.request(`GET /packages/${giteaOwner}`, {
|
|
96
|
+
type: packageType
|
|
97
|
+
});
|
|
98
|
+
const packages = Array.isArray(response.data) ? response.data : [];
|
|
99
|
+
results.providers.gitea = {
|
|
100
|
+
success: true,
|
|
101
|
+
packages: packages.map((pkg) => ({
|
|
102
|
+
name: pkg.name,
|
|
103
|
+
version: pkg.version,
|
|
104
|
+
package_type: pkg.type,
|
|
105
|
+
created_at: pkg.created_at,
|
|
106
|
+
repository: pkg.repository?.full_name,
|
|
107
|
+
url: `${process.env.GITEA_URL}/${giteaOwner}/-/packages/${pkg.type}/${pkg.name}`
|
|
108
|
+
})),
|
|
109
|
+
count: packages.length
|
|
110
|
+
};
|
|
111
|
+
results.summary.byProvider.gitea = packages.length;
|
|
112
|
+
results.summary.total += packages.length;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
results.providers.gitea = {
|
|
116
|
+
success: false,
|
|
117
|
+
error: error.message,
|
|
118
|
+
note: 'Gitea Packages API may not be available or enabled'
|
|
119
|
+
};
|
|
120
|
+
}
|
|
73
121
|
}
|
|
122
|
+
if (!ctx.providerManager.github && !ctx.providerManager.gitea) {
|
|
123
|
+
throw new MCPError('VALIDATION_ERROR', 'No providers configured. Set GITHUB_TOKEN and/or GITEA_TOKEN');
|
|
124
|
+
}
|
|
125
|
+
return results;
|
|
74
126
|
}
|
|
75
127
|
case 'get': {
|
|
76
128
|
const packageName = params.packageName;
|
|
77
129
|
if (!packageName)
|
|
78
|
-
throw new MCPError('VALIDATION_ERROR', 'packageName is required');
|
|
79
|
-
|
|
130
|
+
throw new MCPError('VALIDATION_ERROR', 'packageName is required for get action');
|
|
131
|
+
const packageType = params.packageType || 'npm';
|
|
132
|
+
const results = {
|
|
80
133
|
success: true,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
case 'create': {
|
|
86
|
-
if (!projectPath)
|
|
87
|
-
throw new MCPError('VALIDATION_ERROR', 'projectPath is required');
|
|
88
|
-
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
89
|
-
const packageData = {
|
|
90
|
-
name: params.name || path.basename(projectPath),
|
|
91
|
-
version: params.version || '1.0.0',
|
|
92
|
-
description: params.description || '',
|
|
93
|
-
main: params.main || 'index.js',
|
|
94
|
-
scripts: params.scripts || {},
|
|
95
|
-
keywords: params.keywords || [],
|
|
96
|
-
author: params.author || '',
|
|
97
|
-
license: params.license || 'MIT',
|
|
134
|
+
packageName,
|
|
135
|
+
packageType,
|
|
136
|
+
providers: {}
|
|
98
137
|
};
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (params.description)
|
|
129
|
-
pkg.description = params.description;
|
|
130
|
-
if (params.main)
|
|
131
|
-
pkg.main = params.main;
|
|
132
|
-
if (params.scripts)
|
|
133
|
-
pkg.scripts = { ...pkg.scripts, ...params.scripts };
|
|
134
|
-
if (params.keywords)
|
|
135
|
-
pkg.keywords = params.keywords;
|
|
136
|
-
if (params.author)
|
|
137
|
-
pkg.author = params.author;
|
|
138
|
-
if (params.license)
|
|
139
|
-
pkg.license = params.license;
|
|
140
|
-
if (params.dependencies)
|
|
141
|
-
pkg.dependencies = { ...pkg.dependencies, ...params.dependencies };
|
|
142
|
-
if (params.devDependencies)
|
|
143
|
-
pkg.devDependencies = { ...pkg.devDependencies, ...params.devDependencies };
|
|
144
|
-
await fs.writeFile(packageJsonPath, JSON.stringify(pkg, null, 2), 'utf-8');
|
|
145
|
-
return {
|
|
146
|
-
success: true,
|
|
147
|
-
updated: true,
|
|
148
|
-
path: packageJsonPath,
|
|
149
|
-
package: pkg,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
throw new MCPError('FILE_ERROR', `Failed to update package.json: ${error.message}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
case 'delete': {
|
|
157
|
-
if (!projectPath)
|
|
158
|
-
throw new MCPError('VALIDATION_ERROR', 'projectPath is required');
|
|
159
|
-
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
160
|
-
try {
|
|
161
|
-
await fs.unlink(packageJsonPath);
|
|
162
|
-
return {
|
|
163
|
-
success: true,
|
|
164
|
-
deleted: true,
|
|
165
|
-
path: packageJsonPath,
|
|
166
|
-
};
|
|
138
|
+
// GitHub Package Details
|
|
139
|
+
if (ctx.providerManager.github && githubOwner) {
|
|
140
|
+
try {
|
|
141
|
+
const response = await ctx.providerManager.github.request('GET /users/{username}/packages/{package_type}/{package_name}', {
|
|
142
|
+
username: githubOwner,
|
|
143
|
+
package_type: packageType,
|
|
144
|
+
package_name: packageName
|
|
145
|
+
});
|
|
146
|
+
results.providers.github = {
|
|
147
|
+
success: true,
|
|
148
|
+
package: {
|
|
149
|
+
name: response.data.name,
|
|
150
|
+
package_type: response.data.package_type,
|
|
151
|
+
visibility: response.data.visibility,
|
|
152
|
+
version_count: response.data.version_count,
|
|
153
|
+
created_at: response.data.created_at,
|
|
154
|
+
updated_at: response.data.updated_at,
|
|
155
|
+
repository: response.data.repository?.full_name,
|
|
156
|
+
url: response.data.html_url
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
results.providers.github = {
|
|
162
|
+
success: false,
|
|
163
|
+
error: error.message,
|
|
164
|
+
note: error.status === 404 ? 'Package not found on GitHub' : error.message
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
167
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
// Gitea Package Details
|
|
169
|
+
if (ctx.providerManager.gitea && giteaOwner) {
|
|
170
|
+
try {
|
|
171
|
+
const response = await ctx.providerManager.gitea.request(`GET /packages/${giteaOwner}/${packageType}/${packageName}`);
|
|
172
|
+
results.providers.gitea = {
|
|
173
|
+
success: true,
|
|
174
|
+
package: {
|
|
175
|
+
name: response.data.name,
|
|
176
|
+
version: response.data.version,
|
|
177
|
+
package_type: response.data.type,
|
|
178
|
+
created_at: response.data.created_at,
|
|
179
|
+
repository: response.data.repository?.full_name,
|
|
180
|
+
url: `${process.env.GITEA_URL}/${giteaOwner}/-/packages/${packageType}/${packageName}`
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
results.providers.gitea = {
|
|
171
186
|
success: false,
|
|
172
|
-
|
|
173
|
-
|
|
187
|
+
error: error.message,
|
|
188
|
+
note: error.status === 404 ? 'Package not found on Gitea' : error.message
|
|
174
189
|
};
|
|
175
190
|
}
|
|
176
|
-
throw new MCPError('FILE_ERROR', `Failed to delete package.json: ${error.message}`);
|
|
177
191
|
}
|
|
192
|
+
return results;
|
|
178
193
|
}
|
|
179
|
-
case '
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
const dryRun = params.dryRun || false;
|
|
186
|
-
return {
|
|
194
|
+
case 'versions': {
|
|
195
|
+
const packageName = params.packageName;
|
|
196
|
+
if (!packageName)
|
|
197
|
+
throw new MCPError('VALIDATION_ERROR', 'packageName is required for versions action');
|
|
198
|
+
const packageType = params.packageType || 'npm';
|
|
199
|
+
const results = {
|
|
187
200
|
success: true,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
registry,
|
|
192
|
-
access,
|
|
193
|
-
tag,
|
|
194
|
-
note: 'Make sure you are logged in with: npm login',
|
|
195
|
-
},
|
|
196
|
-
projectPath,
|
|
201
|
+
packageName,
|
|
202
|
+
packageType,
|
|
203
|
+
providers: {}
|
|
197
204
|
};
|
|
205
|
+
// GitHub Package Versions
|
|
206
|
+
if (ctx.providerManager.github && githubOwner) {
|
|
207
|
+
try {
|
|
208
|
+
const response = await ctx.providerManager.github.request('GET /users/{username}/packages/{package_type}/{package_name}/versions', {
|
|
209
|
+
username: githubOwner,
|
|
210
|
+
package_type: packageType,
|
|
211
|
+
package_name: packageName
|
|
212
|
+
});
|
|
213
|
+
results.providers.github = {
|
|
214
|
+
success: true,
|
|
215
|
+
versions: response.data.map((v) => ({
|
|
216
|
+
id: v.id,
|
|
217
|
+
name: v.name,
|
|
218
|
+
created_at: v.created_at,
|
|
219
|
+
updated_at: v.updated_at,
|
|
220
|
+
url: v.html_url
|
|
221
|
+
})),
|
|
222
|
+
count: response.data.length
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
results.providers.github = {
|
|
227
|
+
success: false,
|
|
228
|
+
error: error.message
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Gitea Package Versions
|
|
233
|
+
if (ctx.providerManager.gitea && giteaOwner) {
|
|
234
|
+
try {
|
|
235
|
+
const response = await ctx.providerManager.gitea.request(`GET /packages/${giteaOwner}/${packageType}/${packageName}/versions`);
|
|
236
|
+
const versions = Array.isArray(response.data) ? response.data : [];
|
|
237
|
+
results.providers.gitea = {
|
|
238
|
+
success: true,
|
|
239
|
+
versions: versions.map((v) => ({
|
|
240
|
+
version: v.version,
|
|
241
|
+
created_at: v.created_at,
|
|
242
|
+
url: `${process.env.GITEA_URL}/${giteaOwner}/-/packages/${packageType}/${packageName}/${v.version}`
|
|
243
|
+
})),
|
|
244
|
+
count: versions.length
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
results.providers.gitea = {
|
|
249
|
+
success: false,
|
|
250
|
+
error: error.message
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return results;
|
|
198
255
|
}
|
|
199
|
-
case '
|
|
256
|
+
case 'delete': {
|
|
200
257
|
const packageName = params.packageName;
|
|
201
|
-
const version = params.version || 'latest';
|
|
202
|
-
const destination = params.destination || projectPath;
|
|
203
258
|
if (!packageName)
|
|
204
|
-
throw new MCPError('VALIDATION_ERROR', 'packageName is required');
|
|
205
|
-
if (!
|
|
206
|
-
throw new MCPError('VALIDATION_ERROR', '
|
|
207
|
-
|
|
259
|
+
throw new MCPError('VALIDATION_ERROR', 'packageName is required for delete action');
|
|
260
|
+
if (!params.confirm) {
|
|
261
|
+
throw new MCPError('VALIDATION_ERROR', 'confirm must be true to delete packages (destructive operation)');
|
|
262
|
+
}
|
|
263
|
+
const packageType = params.packageType || 'npm';
|
|
264
|
+
const results = {
|
|
208
265
|
success: true,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
version,
|
|
214
|
-
destination,
|
|
215
|
-
note: 'Run this command in your project directory',
|
|
216
|
-
},
|
|
266
|
+
packageName,
|
|
267
|
+
packageType,
|
|
268
|
+
providers: {},
|
|
269
|
+
warning: 'Package deleted from remote registries'
|
|
217
270
|
};
|
|
271
|
+
// Delete from GitHub
|
|
272
|
+
if (ctx.providerManager.github && githubOwner) {
|
|
273
|
+
try {
|
|
274
|
+
await ctx.providerManager.github.request('DELETE /users/{username}/packages/{package_type}/{package_name}', {
|
|
275
|
+
username: githubOwner,
|
|
276
|
+
package_type: packageType,
|
|
277
|
+
package_name: packageName
|
|
278
|
+
});
|
|
279
|
+
results.providers.github = {
|
|
280
|
+
success: true,
|
|
281
|
+
deleted: true,
|
|
282
|
+
message: `Package ${packageName} deleted from GitHub Packages`
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
results.providers.github = {
|
|
287
|
+
success: false,
|
|
288
|
+
error: error.message,
|
|
289
|
+
note: error.status === 404 ? 'Package not found' : 'Failed to delete'
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Delete from Gitea
|
|
294
|
+
if (ctx.providerManager.gitea && giteaOwner) {
|
|
295
|
+
try {
|
|
296
|
+
await ctx.providerManager.gitea.request(`DELETE /packages/${giteaOwner}/${packageType}/${packageName}`);
|
|
297
|
+
results.providers.gitea = {
|
|
298
|
+
success: true,
|
|
299
|
+
deleted: true,
|
|
300
|
+
message: `Package ${packageName} deleted from Gitea Packages`
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
results.providers.gitea = {
|
|
305
|
+
success: false,
|
|
306
|
+
error: error.message,
|
|
307
|
+
note: error.status === 404 ? 'Package not found' : 'Failed to delete'
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return results;
|
|
218
312
|
}
|
|
219
313
|
default:
|
|
220
314
|
throw new MCPError('VALIDATION_ERROR', `Unsupported action: ${action}`);
|