@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.
Files changed (37) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/index.js +23 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/prompts/gitPrompts.d.ts +115 -0
  5. package/dist/prompts/gitPrompts.d.ts.map +1 -0
  6. package/dist/prompts/gitPrompts.js +299 -0
  7. package/dist/prompts/gitPrompts.js.map +1 -0
  8. package/dist/tools/gitChangelog.d.ts +1 -0
  9. package/dist/tools/gitChangelog.d.ts.map +1 -0
  10. package/dist/tools/gitChangelog.js +2 -0
  11. package/dist/tools/gitChangelog.js.map +1 -0
  12. package/dist/tools/gitHistory.d.ts +4 -43
  13. package/dist/tools/gitHistory.d.ts.map +1 -1
  14. package/dist/tools/gitHistory.js +104 -243
  15. package/dist/tools/gitHistory.js.map +1 -1
  16. package/dist/tools/gitLog.d.ts +1 -0
  17. package/dist/tools/gitLog.d.ts.map +1 -0
  18. package/dist/tools/gitLog.js +2 -0
  19. package/dist/tools/gitLog.js.map +1 -0
  20. package/dist/tools/gitPackages.d.ts +5 -155
  21. package/dist/tools/gitPackages.d.ts.map +1 -1
  22. package/dist/tools/gitPackages.js +250 -156
  23. package/dist/tools/gitPackages.js.map +1 -1
  24. package/dist/tools/gitRelease.js +1 -1
  25. package/dist/tools/gitRelease.js.map +1 -1
  26. package/dist/tools/gitTags.js +1 -1
  27. package/dist/tools/gitTags.js.map +1 -1
  28. package/dist/tools/gitUpdate.d.ts +0 -26
  29. package/dist/tools/gitUpdate.d.ts.map +1 -1
  30. package/dist/tools/gitUpdate.js +43 -306
  31. package/dist/tools/gitUpdate.js.map +1 -1
  32. package/dist/tools/gitUpload.d.ts +0 -1
  33. package/dist/tools/gitUpload.d.ts.map +1 -1
  34. package/dist/tools/gitUpload.js +2 -29
  35. package/dist/tools/gitUpload.js.map +1 -1
  36. package/package.json +1 -1
  37. 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":"AAEA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI/C,qBAAa,eAAgB,YAAW,IAAI;IAC1C,IAAI,SAAkB;IACtB,WAAW,SAAmC;IAE9C,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoCT;IAEI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiL1D"}
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 (auto-extracts repo name)"
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", "maven", "docker", "nuget", "rubygems"]
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
- if (!projectPath)
56
- throw new MCPError('VALIDATION_ERROR', 'projectPath is required');
57
- // Ler package.json
58
- try {
59
- const packageJsonPath = path.join(projectPath, 'package.json');
60
- const content = await fs.readFile(packageJsonPath, 'utf-8');
61
- const pkg = JSON.parse(content);
62
- return {
63
- success: true,
64
- name: pkg.name,
65
- version: pkg.version,
66
- dependencies: pkg.dependencies || {},
67
- devDependencies: pkg.devDependencies || {},
68
- scripts: pkg.scripts || {},
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
- catch (error) {
72
- throw new MCPError('FILE_ERROR', `Failed to read package.json: ${error.message}`);
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
- return {
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
- message: `Package info for ${packageName}`,
82
- note: 'Use npm view or yarn info for detailed package information',
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
- if (params.dependencies)
100
- packageData.dependencies = params.dependencies;
101
- if (params.devDependencies)
102
- packageData.devDependencies = params.devDependencies;
103
- try {
104
- await fs.writeFile(packageJsonPath, JSON.stringify(packageData, null, 2), 'utf-8');
105
- return {
106
- success: true,
107
- created: true,
108
- path: packageJsonPath,
109
- package: packageData,
110
- };
111
- }
112
- catch (error) {
113
- throw new MCPError('FILE_ERROR', `Failed to create package.json: ${error.message}`);
114
- }
115
- }
116
- case 'update': {
117
- if (!projectPath)
118
- throw new MCPError('VALIDATION_ERROR', 'projectPath is required');
119
- const packageJsonPath = path.join(projectPath, 'package.json');
120
- try {
121
- const content = await fs.readFile(packageJsonPath, 'utf-8');
122
- const pkg = JSON.parse(content);
123
- // Update fields if provided
124
- if (params.name)
125
- pkg.name = params.name;
126
- if (params.version)
127
- pkg.version = params.version;
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
- catch (error) {
169
- if (error.code === 'ENOENT') {
170
- return {
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
- message: 'package.json not found',
173
- path: packageJsonPath,
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 'publish': {
180
- if (!projectPath)
181
- throw new MCPError('VALIDATION_ERROR', 'projectPath is required');
182
- const registry = params.registry || 'https://registry.npmjs.org';
183
- const access = params.access || 'public'; // public or restricted
184
- const tag = params.tag || 'latest';
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
- message: 'To publish, run: npm publish in your terminal',
189
- instructions: {
190
- command: dryRun ? 'npm publish --dry-run' : 'npm publish',
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 'download': {
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 (!destination)
206
- throw new MCPError('VALIDATION_ERROR', 'destination is required');
207
- return {
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
- message: `To download ${packageName}@${version}, run: npm install ${packageName}@${version} in your terminal`,
210
- instructions: {
211
- command: `npm install ${packageName}@${version}`,
212
- package: packageName,
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}`);