@tankpkg/mcp-server 0.6.3 → 0.8.1

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 (87) hide show
  1. package/README.md +11 -4
  2. package/dist/index.d.ts +1 -3
  3. package/dist/index.js +2215 -29
  4. package/dist/index.js.map +1 -1
  5. package/package.json +20 -14
  6. package/LICENSE +0 -21
  7. package/dist/index.d.ts.map +0 -1
  8. package/dist/lib/api-client.d.ts +0 -45
  9. package/dist/lib/api-client.d.ts.map +0 -1
  10. package/dist/lib/api-client.js +0 -78
  11. package/dist/lib/api-client.js.map +0 -1
  12. package/dist/lib/config.d.ts +0 -25
  13. package/dist/lib/config.d.ts.map +0 -1
  14. package/dist/lib/config.js +0 -59
  15. package/dist/lib/config.js.map +0 -1
  16. package/dist/lib/packer.d.ts +0 -34
  17. package/dist/lib/packer.d.ts.map +0 -1
  18. package/dist/lib/packer.js +0 -276
  19. package/dist/lib/packer.js.map +0 -1
  20. package/dist/tools/audit-skill.d.ts +0 -3
  21. package/dist/tools/audit-skill.d.ts.map +0 -1
  22. package/dist/tools/audit-skill.js +0 -213
  23. package/dist/tools/audit-skill.js.map +0 -1
  24. package/dist/tools/doctor.d.ts +0 -3
  25. package/dist/tools/doctor.d.ts.map +0 -1
  26. package/dist/tools/doctor.js +0 -158
  27. package/dist/tools/doctor.js.map +0 -1
  28. package/dist/tools/init-skill.d.ts +0 -3
  29. package/dist/tools/init-skill.d.ts.map +0 -1
  30. package/dist/tools/init-skill.js +0 -72
  31. package/dist/tools/init-skill.js.map +0 -1
  32. package/dist/tools/install-skill.d.ts +0 -3
  33. package/dist/tools/install-skill.d.ts.map +0 -1
  34. package/dist/tools/install-skill.js +0 -206
  35. package/dist/tools/install-skill.js.map +0 -1
  36. package/dist/tools/link-skill.d.ts +0 -3
  37. package/dist/tools/link-skill.d.ts.map +0 -1
  38. package/dist/tools/link-skill.js +0 -81
  39. package/dist/tools/link-skill.js.map +0 -1
  40. package/dist/tools/login.d.ts +0 -3
  41. package/dist/tools/login.d.ts.map +0 -1
  42. package/dist/tools/login.js +0 -104
  43. package/dist/tools/login.js.map +0 -1
  44. package/dist/tools/logout.d.ts +0 -3
  45. package/dist/tools/logout.d.ts.map +0 -1
  46. package/dist/tools/logout.js +0 -19
  47. package/dist/tools/logout.js.map +0 -1
  48. package/dist/tools/publish-skill.d.ts +0 -3
  49. package/dist/tools/publish-skill.d.ts.map +0 -1
  50. package/dist/tools/publish-skill.js +0 -166
  51. package/dist/tools/publish-skill.js.map +0 -1
  52. package/dist/tools/remove-skill.d.ts +0 -3
  53. package/dist/tools/remove-skill.d.ts.map +0 -1
  54. package/dist/tools/remove-skill.js +0 -110
  55. package/dist/tools/remove-skill.js.map +0 -1
  56. package/dist/tools/scan-skill.d.ts +0 -3
  57. package/dist/tools/scan-skill.d.ts.map +0 -1
  58. package/dist/tools/scan-skill.js +0 -200
  59. package/dist/tools/scan-skill.js.map +0 -1
  60. package/dist/tools/search-skills.d.ts +0 -3
  61. package/dist/tools/search-skills.d.ts.map +0 -1
  62. package/dist/tools/search-skills.js +0 -54
  63. package/dist/tools/search-skills.js.map +0 -1
  64. package/dist/tools/skill-info.d.ts +0 -3
  65. package/dist/tools/skill-info.d.ts.map +0 -1
  66. package/dist/tools/skill-info.js +0 -88
  67. package/dist/tools/skill-info.js.map +0 -1
  68. package/dist/tools/skill-permissions.d.ts +0 -3
  69. package/dist/tools/skill-permissions.d.ts.map +0 -1
  70. package/dist/tools/skill-permissions.js +0 -311
  71. package/dist/tools/skill-permissions.js.map +0 -1
  72. package/dist/tools/unlink-skill.d.ts +0 -3
  73. package/dist/tools/unlink-skill.d.ts.map +0 -1
  74. package/dist/tools/unlink-skill.js +0 -72
  75. package/dist/tools/unlink-skill.js.map +0 -1
  76. package/dist/tools/update-skill.d.ts +0 -3
  77. package/dist/tools/update-skill.d.ts.map +0 -1
  78. package/dist/tools/update-skill.js +0 -317
  79. package/dist/tools/update-skill.js.map +0 -1
  80. package/dist/tools/verify-skills.d.ts +0 -3
  81. package/dist/tools/verify-skills.d.ts.map +0 -1
  82. package/dist/tools/verify-skills.js +0 -121
  83. package/dist/tools/verify-skills.js.map +0 -1
  84. package/dist/tools/whoami.d.ts +0 -3
  85. package/dist/tools/whoami.d.ts.map +0 -1
  86. package/dist/tools/whoami.js +0 -29
  87. package/dist/tools/whoami.js.map +0 -1
@@ -1,311 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { z } from 'zod';
4
- function parseSkillName(key) {
5
- const lastAt = key.lastIndexOf('@');
6
- if (lastAt > 0) {
7
- return key.slice(0, lastAt);
8
- }
9
- return key;
10
- }
11
- function collectPermissions(lockfile) {
12
- const networkMap = new Map();
13
- const fsReadMap = new Map();
14
- const fsWriteMap = new Map();
15
- const subprocessSkills = [];
16
- const envMap = new Map();
17
- const execMap = new Map();
18
- for (const [key, entry] of Object.entries(lockfile.skills)) {
19
- const skillName = parseSkillName(key);
20
- const perms = entry.permissions;
21
- if (perms.network?.outbound) {
22
- for (const domain of perms.network.outbound) {
23
- const existing = networkMap.get(domain) ?? [];
24
- existing.push(skillName);
25
- networkMap.set(domain, existing);
26
- }
27
- }
28
- if (perms.filesystem?.read) {
29
- for (const p of perms.filesystem.read) {
30
- const existing = fsReadMap.get(p) ?? [];
31
- existing.push(skillName);
32
- fsReadMap.set(p, existing);
33
- }
34
- }
35
- if (perms.filesystem?.write) {
36
- for (const p of perms.filesystem.write) {
37
- const existing = fsWriteMap.get(p) ?? [];
38
- existing.push(skillName);
39
- fsWriteMap.set(p, existing);
40
- }
41
- }
42
- if (perms.subprocess === true) {
43
- subprocessSkills.push(skillName);
44
- }
45
- const rawPerms = perms;
46
- if (Array.isArray(rawPerms.env)) {
47
- for (const envVar of rawPerms.env) {
48
- const existing = envMap.get(envVar) ?? [];
49
- existing.push(skillName);
50
- envMap.set(envVar, existing);
51
- }
52
- }
53
- if (Array.isArray(rawPerms.exec)) {
54
- for (const cmd of rawPerms.exec) {
55
- const existing = execMap.get(cmd) ?? [];
56
- existing.push(skillName);
57
- execMap.set(cmd, existing);
58
- }
59
- }
60
- }
61
- const toEntries = (map) => Array.from(map.entries()).map(([value, skills]) => ({ value, skills }));
62
- return {
63
- networkOutbound: toEntries(networkMap),
64
- filesystemRead: toEntries(fsReadMap),
65
- filesystemWrite: toEntries(fsWriteMap),
66
- subprocess: subprocessSkills,
67
- env: toEntries(envMap),
68
- exec: toEntries(execMap),
69
- };
70
- }
71
- function formatAttribution(skills) {
72
- return '<- ' + skills.join(', ');
73
- }
74
- function formatSection(title, entries) {
75
- const lines = [];
76
- lines.push(`${title}:`);
77
- if (entries.length === 0) {
78
- lines.push(' none');
79
- }
80
- else {
81
- for (const entry of entries) {
82
- lines.push(` ${entry.value} ${formatAttribution(entry.skills)}`);
83
- }
84
- }
85
- return lines.join('\n');
86
- }
87
- // Wildcard matching: *.example.com matches sub.example.com, * matches all
88
- function isDomainAllowed(domain, allowedDomains) {
89
- for (const allowed of allowedDomains) {
90
- if (allowed === '*')
91
- return true;
92
- if (allowed === domain)
93
- return true;
94
- if (allowed.startsWith('*.')) {
95
- const suffix = allowed.slice(1);
96
- if (domain.endsWith(suffix) || domain === allowed.slice(2)) {
97
- return true;
98
- }
99
- if (domain === allowed)
100
- return true;
101
- }
102
- }
103
- return false;
104
- }
105
- // Glob matching: ./src/** matches ./src/foo/bar
106
- function isPathAllowed(requestedPath, allowedPaths) {
107
- for (const allowed of allowedPaths) {
108
- if (allowed === requestedPath)
109
- return true;
110
- if (allowed.endsWith('/**')) {
111
- const prefix = allowed.slice(0, -3);
112
- if (requestedPath.startsWith(prefix))
113
- return true;
114
- }
115
- }
116
- return false;
117
- }
118
- function checkBudget(resolved, budget) {
119
- const violations = [];
120
- const budgetDomains = budget.network?.outbound ?? [];
121
- for (const entry of resolved.networkOutbound) {
122
- if (!isDomainAllowed(entry.value, budgetDomains)) {
123
- violations.push({
124
- category: 'network outbound',
125
- value: entry.value,
126
- skills: entry.skills,
127
- });
128
- }
129
- }
130
- const budgetReadPaths = budget.filesystem?.read ?? [];
131
- for (const entry of resolved.filesystemRead) {
132
- if (!isPathAllowed(entry.value, budgetReadPaths)) {
133
- violations.push({
134
- category: 'filesystem read',
135
- value: entry.value,
136
- skills: entry.skills,
137
- });
138
- }
139
- }
140
- const budgetWritePaths = budget.filesystem?.write ?? [];
141
- for (const entry of resolved.filesystemWrite) {
142
- if (!isPathAllowed(entry.value, budgetWritePaths)) {
143
- violations.push({
144
- category: 'filesystem write',
145
- value: entry.value,
146
- skills: entry.skills,
147
- });
148
- }
149
- }
150
- if (resolved.subprocess.length > 0 && budget.subprocess !== true) {
151
- violations.push({
152
- category: 'subprocess',
153
- value: 'subprocess access',
154
- skills: resolved.subprocess,
155
- });
156
- }
157
- return violations;
158
- }
159
- export function registerSkillPermissionsTool(server) {
160
- server.tool('skill-permissions', 'Display resolved permission summary for installed skills. Shows what capabilities each skill requires and checks against the project permission budget.', {
161
- directory: z.string().optional().describe('Project directory path (defaults to current working directory)'),
162
- }, async ({ directory }) => {
163
- const dir = directory ? path.resolve(directory) : process.cwd();
164
- if (!fs.existsSync(dir)) {
165
- return {
166
- content: [{
167
- type: 'text',
168
- text: `Directory does not exist: ${dir}`,
169
- }],
170
- isError: true,
171
- };
172
- }
173
- const skillsJsonPath = path.join(dir, 'skills.json');
174
- if (!fs.existsSync(skillsJsonPath)) {
175
- return {
176
- content: [{
177
- type: 'text',
178
- text: 'No skills.json found. Run "init-skill" to create one.',
179
- }],
180
- isError: true,
181
- };
182
- }
183
- let skillsJson;
184
- try {
185
- const raw = fs.readFileSync(skillsJsonPath, 'utf-8');
186
- skillsJson = JSON.parse(raw);
187
- }
188
- catch {
189
- return {
190
- content: [{
191
- type: 'text',
192
- text: 'Failed to parse skills.json. The file may be corrupted.',
193
- }],
194
- isError: true,
195
- };
196
- }
197
- const skillDeps = skillsJson.skills ?? {};
198
- if (Object.keys(skillDeps).length === 0) {
199
- return {
200
- content: [{
201
- type: 'text',
202
- text: 'No skills with permissions to display. The project has no skill dependencies.',
203
- }],
204
- };
205
- }
206
- const lockfilePath = path.join(dir, 'skills.lock');
207
- if (!fs.existsSync(lockfilePath)) {
208
- return {
209
- content: [{
210
- type: 'text',
211
- text: 'No skills.lock found. Skills are declared but not installed. Run install to generate a lockfile.',
212
- }],
213
- };
214
- }
215
- let lockfile;
216
- try {
217
- const raw = fs.readFileSync(lockfilePath, 'utf-8');
218
- lockfile = JSON.parse(raw);
219
- }
220
- catch {
221
- return {
222
- content: [{
223
- type: 'text',
224
- text: 'Failed to parse skills.lock. The file may be corrupted.',
225
- }],
226
- isError: true,
227
- };
228
- }
229
- if (!lockfile.skills || Object.keys(lockfile.skills).length === 0) {
230
- return {
231
- content: [{
232
- type: 'text',
233
- text: 'No skills installed. The lockfile is empty.',
234
- }],
235
- };
236
- }
237
- const resolved = collectPermissions(lockfile);
238
- const lines = [];
239
- lines.push('Resolved permissions for this project:');
240
- lines.push('');
241
- lines.push(formatSection('Network (outbound)', resolved.networkOutbound));
242
- lines.push(formatSection('Filesystem (read)', resolved.filesystemRead));
243
- lines.push(formatSection('Filesystem (write)', resolved.filesystemWrite));
244
- lines.push('Subprocess:');
245
- if (resolved.subprocess.length === 0) {
246
- lines.push(' none');
247
- }
248
- else {
249
- lines.push(` allowed ${formatAttribution(resolved.subprocess)}`);
250
- }
251
- if (resolved.env.length > 0) {
252
- lines.push(formatSection('Environment variables', resolved.env));
253
- }
254
- if (resolved.exec.length > 0) {
255
- lines.push(formatSection('Exec', resolved.exec));
256
- }
257
- lines.push('');
258
- lines.push('Per-skill breakdown:');
259
- for (const [key, entry] of Object.entries(lockfile.skills)) {
260
- const skillName = parseSkillName(key);
261
- const perms = entry.permissions;
262
- const permParts = [];
263
- if (perms.network?.outbound && perms.network.outbound.length > 0) {
264
- permParts.push(`network: ${perms.network.outbound.join(', ')}`);
265
- }
266
- if (perms.filesystem?.read && perms.filesystem.read.length > 0) {
267
- permParts.push(`filesystem:read: ${perms.filesystem.read.join(', ')}`);
268
- }
269
- if (perms.filesystem?.write && perms.filesystem.write.length > 0) {
270
- permParts.push(`filesystem:write: ${perms.filesystem.write.join(', ')}`);
271
- }
272
- if (perms.subprocess === true) {
273
- permParts.push('subprocess: allowed');
274
- }
275
- const rawPerms = perms;
276
- if (Array.isArray(rawPerms.env) && rawPerms.env.length > 0) {
277
- permParts.push(`env: ${rawPerms.env.join(', ')}`);
278
- }
279
- if (Array.isArray(rawPerms.exec) && rawPerms.exec.length > 0) {
280
- permParts.push(`exec: ${rawPerms.exec.join(', ')}`);
281
- }
282
- if (permParts.length === 0) {
283
- lines.push(` ${skillName}: no special permissions`);
284
- }
285
- else {
286
- lines.push(` ${skillName}: ${permParts.join('; ')}`);
287
- }
288
- }
289
- const budget = skillsJson.permissions;
290
- lines.push('');
291
- if (!budget) {
292
- lines.push('Budget status: No budget defined');
293
- }
294
- else {
295
- const violations = checkBudget(resolved, budget);
296
- if (violations.length === 0) {
297
- lines.push('Budget status: PASS (all within budget)');
298
- }
299
- else {
300
- lines.push('Budget status: FAIL');
301
- for (const v of violations) {
302
- lines.push(` - ${v.category}: "${v.value}" not in budget (requested by ${v.skills.join(', ')})`);
303
- }
304
- }
305
- }
306
- return {
307
- content: [{ type: 'text', text: lines.join('\n') }],
308
- };
309
- });
310
- }
311
- //# sourceMappingURL=skill-permissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-permissions.js","sourceRoot":"","sources":["../../src/tools/skill-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAgBD,SAAS,kBAAkB,CAAC,QAAoB;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAEhC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC9B,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,QAAQ,GAAG,KAAgC,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,GAAe,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAgB,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAA0B,EAAqB,EAAE,CAClE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAE1E,OAAO;QACL,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC;QACtC,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC;QACpC,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC;QACtC,UAAU,EAAE,gBAAgB;QAC5B,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgB;IACzC,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,OAA0B;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,OAAO,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,0EAA0E;AAC1E,SAAS,eAAe,CAAC,MAAc,EAAE,cAAwB;IAC/D,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,OAAO,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,MAAM,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gDAAgD;AAChD,SAAS,aAAa,CAAC,aAAqB,EAAE,YAAsB;IAClE,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,KAAK,aAAa;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAQD,SAAS,WAAW,CAClB,QAA6B,EAC7B,MAAmB;IAEnB,MAAM,UAAU,GAAsB,EAAE,CAAC;IAEzC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ,EAAE,kBAAkB;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ,EAAE,iBAAiB;gBAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAClD,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ,EAAE,kBAAkB;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACjE,UAAU,CAAC,IAAI,CAAC;YACd,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,QAAQ,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,yJAAyJ,EACzJ;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;KAC5G,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEhE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6BAA6B,GAAG,EAAE;qBACzC,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uDAAuD;qBAC9D,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,UAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YACrD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,yDAAyD;qBAChE,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,+EAA+E;qBACtF,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kGAAkG;qBACzG,CAAC;aACH,CAAC;QACJ,CAAC;QAED,IAAI,QAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACnD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,yDAAyD;qBAChE,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6CAA6C;qBACpD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAE1E,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,gBAAgB,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;YAChC,MAAM,SAAS,GAAa,EAAE,CAAC;YAE/B,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,SAAS,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/D,SAAS,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,SAAS,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC9B,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,QAAQ,GAAG,KAAgC,CAAC;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAK,QAAQ,CAAC,GAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzE,SAAS,CAAC,IAAI,CAAC,QAAS,QAAQ,CAAC,GAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAK,QAAQ,CAAC,IAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3E,SAAS,CAAC,IAAI,CAAC,SAAU,QAAQ,CAAC,IAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,0BAA0B,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;oBAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,KAAK,iCAAiC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpG,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerUnlinkSkillTool(server: McpServer): void;
3
- //# sourceMappingURL=unlink-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unlink-skill.d.ts","sourceRoot":"","sources":["../../src/tools/unlink-skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqE/D"}
@@ -1,72 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { z } from 'zod';
4
- const SCOPED_NAME_PATTERN = /^@[a-z0-9-]+\/[a-z0-9][a-z0-9-]*$/;
5
- export function registerUnlinkSkillTool(server) {
6
- server.tool('unlink-skill', 'Unlink a skill from an agent workspace. Removes the symlink without deleting the installed skill files.', {
7
- name: z.string().describe('Skill name in @org/name format'),
8
- workspace: z.string().describe('Agent workspace directory path'),
9
- directory: z.string().optional().describe('Project directory where skills are installed (defaults to current working directory)'),
10
- }, async ({ name, workspace, directory }) => {
11
- if (!SCOPED_NAME_PATTERN.test(name)) {
12
- return {
13
- content: [{
14
- type: 'text',
15
- text: `Validation error: Skill name "${name}" must use the @org/name format (e.g. @acme/my-skill).`,
16
- }],
17
- isError: true,
18
- };
19
- }
20
- const projectDir = directory ? path.resolve(directory) : process.cwd();
21
- const workspaceDir = path.resolve(workspace);
22
- if (!fs.existsSync(workspaceDir)) {
23
- return {
24
- content: [{
25
- type: 'text',
26
- text: `Error: Workspace directory does not exist: ${workspaceDir}`,
27
- }],
28
- isError: true,
29
- };
30
- }
31
- const skillDir = getSkillDir(projectDir, name);
32
- if (!fs.existsSync(skillDir)) {
33
- return {
34
- content: [{
35
- type: 'text',
36
- text: `Skill "${name}" is not installed. It was not found in ${skillDir}.`,
37
- }],
38
- isError: true,
39
- };
40
- }
41
- const [scope, skillName] = name.split('/');
42
- const symlinkPath = path.join(workspaceDir, '.skills', scope, skillName);
43
- try {
44
- const stats = fs.lstatSync(symlinkPath);
45
- if (stats.isSymbolicLink()) {
46
- fs.unlinkSync(symlinkPath);
47
- return {
48
- content: [{
49
- type: 'text',
50
- text: `Successfully unlinked "${name}" from ${workspaceDir}.\nRemoved symlink: ${symlinkPath}`,
51
- }],
52
- };
53
- }
54
- }
55
- catch {
56
- }
57
- return {
58
- content: [{
59
- type: 'text',
60
- text: `No link exists for "${name}" in ${workspaceDir}.`,
61
- }],
62
- };
63
- });
64
- }
65
- function getSkillDir(projectDir, skillName) {
66
- if (skillName.startsWith('@')) {
67
- const [scope, name] = skillName.split('/');
68
- return path.join(projectDir, '.tank', 'skills', scope, name);
69
- }
70
- return path.join(projectDir, '.tank', 'skills', skillName);
71
- }
72
- //# sourceMappingURL=unlink-skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unlink-skill.js","sourceRoot":"","sources":["../../src/tools/unlink-skill.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerUpdateSkillTool(server: McpServer): void;
3
- //# sourceMappingURL=update-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-skill.d.ts","sourceRoot":"","sources":["../../src/tools/update-skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0BzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6U/D"}