@tankpkg/mcp-server 0.7.0 → 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.
- package/README.md +11 -4
- package/dist/index.d.ts +1 -3
- package/dist/index.js +2215 -29
- package/dist/index.js.map +1 -1
- package/package.json +20 -14
- package/LICENSE +0 -21
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/api-client.d.ts +0 -45
- package/dist/lib/api-client.d.ts.map +0 -1
- package/dist/lib/api-client.js +0 -78
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/config.d.ts +0 -25
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -59
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/packer.d.ts +0 -34
- package/dist/lib/packer.d.ts.map +0 -1
- package/dist/lib/packer.js +0 -276
- package/dist/lib/packer.js.map +0 -1
- package/dist/tools/audit-skill.d.ts +0 -3
- package/dist/tools/audit-skill.d.ts.map +0 -1
- package/dist/tools/audit-skill.js +0 -213
- package/dist/tools/audit-skill.js.map +0 -1
- package/dist/tools/doctor.d.ts +0 -3
- package/dist/tools/doctor.d.ts.map +0 -1
- package/dist/tools/doctor.js +0 -158
- package/dist/tools/doctor.js.map +0 -1
- package/dist/tools/init-skill.d.ts +0 -3
- package/dist/tools/init-skill.d.ts.map +0 -1
- package/dist/tools/init-skill.js +0 -72
- package/dist/tools/init-skill.js.map +0 -1
- package/dist/tools/install-skill.d.ts +0 -3
- package/dist/tools/install-skill.d.ts.map +0 -1
- package/dist/tools/install-skill.js +0 -206
- package/dist/tools/install-skill.js.map +0 -1
- package/dist/tools/link-skill.d.ts +0 -3
- package/dist/tools/link-skill.d.ts.map +0 -1
- package/dist/tools/link-skill.js +0 -81
- package/dist/tools/link-skill.js.map +0 -1
- package/dist/tools/login.d.ts +0 -3
- package/dist/tools/login.d.ts.map +0 -1
- package/dist/tools/login.js +0 -104
- package/dist/tools/login.js.map +0 -1
- package/dist/tools/logout.d.ts +0 -3
- package/dist/tools/logout.d.ts.map +0 -1
- package/dist/tools/logout.js +0 -19
- package/dist/tools/logout.js.map +0 -1
- package/dist/tools/publish-skill.d.ts +0 -3
- package/dist/tools/publish-skill.d.ts.map +0 -1
- package/dist/tools/publish-skill.js +0 -166
- package/dist/tools/publish-skill.js.map +0 -1
- package/dist/tools/remove-skill.d.ts +0 -3
- package/dist/tools/remove-skill.d.ts.map +0 -1
- package/dist/tools/remove-skill.js +0 -110
- package/dist/tools/remove-skill.js.map +0 -1
- package/dist/tools/scan-skill.d.ts +0 -3
- package/dist/tools/scan-skill.d.ts.map +0 -1
- package/dist/tools/scan-skill.js +0 -200
- package/dist/tools/scan-skill.js.map +0 -1
- package/dist/tools/search-skills.d.ts +0 -3
- package/dist/tools/search-skills.d.ts.map +0 -1
- package/dist/tools/search-skills.js +0 -54
- package/dist/tools/search-skills.js.map +0 -1
- package/dist/tools/skill-info.d.ts +0 -3
- package/dist/tools/skill-info.d.ts.map +0 -1
- package/dist/tools/skill-info.js +0 -88
- package/dist/tools/skill-info.js.map +0 -1
- package/dist/tools/skill-permissions.d.ts +0 -3
- package/dist/tools/skill-permissions.d.ts.map +0 -1
- package/dist/tools/skill-permissions.js +0 -311
- package/dist/tools/skill-permissions.js.map +0 -1
- package/dist/tools/unlink-skill.d.ts +0 -3
- package/dist/tools/unlink-skill.d.ts.map +0 -1
- package/dist/tools/unlink-skill.js +0 -72
- package/dist/tools/unlink-skill.js.map +0 -1
- package/dist/tools/update-skill.d.ts +0 -3
- package/dist/tools/update-skill.d.ts.map +0 -1
- package/dist/tools/update-skill.js +0 -317
- package/dist/tools/update-skill.js.map +0 -1
- package/dist/tools/verify-skills.d.ts +0 -3
- package/dist/tools/verify-skills.d.ts.map +0 -1
- package/dist/tools/verify-skills.js +0 -121
- package/dist/tools/verify-skills.js.map +0 -1
- package/dist/tools/whoami.d.ts +0 -3
- package/dist/tools/whoami.d.ts.map +0 -1
- package/dist/tools/whoami.js +0 -29
- package/dist/tools/whoami.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish-skill.js","sourceRoot":"","sources":["../../src/tools/publish-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skill.d.ts","sourceRoot":"","sources":["../../src/tools/remove-skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4G/D"}
|
|
@@ -1,110 +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 registerRemoveSkillTool(server) {
|
|
6
|
-
server.tool('remove-skill', 'Remove an installed skill from the project. Removes from skills.json, skills.lock, and deletes skill files.', {
|
|
7
|
-
name: z.string().describe('Skill name in @org/name format'),
|
|
8
|
-
directory: z.string().optional().describe('Project directory (defaults to current working directory)'),
|
|
9
|
-
}, async ({ name, directory }) => {
|
|
10
|
-
if (!SCOPED_NAME_PATTERN.test(name)) {
|
|
11
|
-
return {
|
|
12
|
-
content: [{
|
|
13
|
-
type: 'text',
|
|
14
|
-
text: `Validation error: Skill name "${name}" must use the @org/name format (e.g. @acme/my-skill).`,
|
|
15
|
-
}],
|
|
16
|
-
isError: true,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const dir = directory ? path.resolve(directory) : process.cwd();
|
|
20
|
-
const results = [];
|
|
21
|
-
let skillFoundAnywhere = false;
|
|
22
|
-
const skillsJsonPath = path.join(dir, 'skills.json');
|
|
23
|
-
if (fs.existsSync(skillsJsonPath)) {
|
|
24
|
-
try {
|
|
25
|
-
const raw = fs.readFileSync(skillsJsonPath, 'utf-8');
|
|
26
|
-
const skillsJson = JSON.parse(raw);
|
|
27
|
-
const skills = (skillsJson.skills ?? {});
|
|
28
|
-
if (name in skills) {
|
|
29
|
-
skillFoundAnywhere = true;
|
|
30
|
-
delete skills[name];
|
|
31
|
-
skillsJson.skills = skills;
|
|
32
|
-
fs.writeFileSync(skillsJsonPath, JSON.stringify(skillsJson, null, 2) + '\n');
|
|
33
|
-
results.push(`Removed "${name}" from skills.json`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
results.push('Warning: Failed to read or parse skills.json');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
const lockPath = path.join(dir, 'skills.lock');
|
|
41
|
-
if (fs.existsSync(lockPath)) {
|
|
42
|
-
try {
|
|
43
|
-
const raw = fs.readFileSync(lockPath, 'utf-8');
|
|
44
|
-
const lock = JSON.parse(raw);
|
|
45
|
-
let removedFromLock = false;
|
|
46
|
-
for (const key of Object.keys(lock.skills)) {
|
|
47
|
-
const lastAt = key.lastIndexOf('@');
|
|
48
|
-
if (lastAt <= 0)
|
|
49
|
-
continue;
|
|
50
|
-
const keyName = key.slice(0, lastAt);
|
|
51
|
-
if (keyName === name) {
|
|
52
|
-
delete lock.skills[key];
|
|
53
|
-
removedFromLock = true;
|
|
54
|
-
skillFoundAnywhere = true;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (removedFromLock) {
|
|
58
|
-
const sortedSkills = {};
|
|
59
|
-
for (const key of Object.keys(lock.skills).sort()) {
|
|
60
|
-
sortedSkills[key] = lock.skills[key];
|
|
61
|
-
}
|
|
62
|
-
lock.skills = sortedSkills;
|
|
63
|
-
fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\n');
|
|
64
|
-
results.push(`Removed "${name}" from skills.lock`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
results.push('Warning: Failed to read or parse skills.lock');
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
const skillDir = getSkillDir(dir, name);
|
|
72
|
-
if (fs.existsSync(skillDir)) {
|
|
73
|
-
skillFoundAnywhere = true;
|
|
74
|
-
fs.rmSync(skillDir, { recursive: true, force: true });
|
|
75
|
-
results.push(`Deleted skill files from ${skillDir}`);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
results.push(`Skill files were already absent from ${skillDir}`);
|
|
79
|
-
}
|
|
80
|
-
const symlinkName = name.replace(/\//g, '__');
|
|
81
|
-
const agentSkillDir = path.join(dir, '.tank', 'agent-skills', symlinkName);
|
|
82
|
-
if (fs.existsSync(agentSkillDir)) {
|
|
83
|
-
fs.rmSync(agentSkillDir, { recursive: true, force: true });
|
|
84
|
-
results.push('Removed symlink from agent workspace');
|
|
85
|
-
}
|
|
86
|
-
if (!skillFoundAnywhere) {
|
|
87
|
-
return {
|
|
88
|
-
content: [{
|
|
89
|
-
type: 'text',
|
|
90
|
-
text: `Skill "${name}" is not installed. It was not found in skills.json, skills.lock, or .tank/skills/.`,
|
|
91
|
-
}],
|
|
92
|
-
isError: true,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
content: [{
|
|
97
|
-
type: 'text',
|
|
98
|
-
text: `Successfully removed ${name}.\n${results.join('\n')}`,
|
|
99
|
-
}],
|
|
100
|
-
};
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
function getSkillDir(projectDir, skillName) {
|
|
104
|
-
if (skillName.startsWith('@')) {
|
|
105
|
-
const [scope, name] = skillName.split('/');
|
|
106
|
-
return path.join(projectDir, '.tank', 'skills', scope, name);
|
|
107
|
-
}
|
|
108
|
-
return path.join(projectDir, '.tank', 'skills', skillName);
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=remove-skill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skill.js","sourceRoot":"","sources":["../../src/tools/remove-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEhE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6GAA6G,EAC7G;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;KACvG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,iCAAiC,IAAI,wDAAwD;qBACpG,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAChE,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;gBAC9D,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAA2B,CAAC;gBAEnE,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACnB,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC3B,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC7E,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;gBAC3C,IAAI,eAAe,GAAG,KAAK,CAAC;gBAE5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACpC,IAAI,MAAM,IAAI,CAAC;wBAAE,SAAS;oBAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACrC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;wBACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACxB,eAAe,GAAG,IAAI,CAAC;wBACvB,kBAAkB,GAAG,IAAI,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,EAAE,CAAC;oBACpB,MAAM,YAAY,GAA4B,EAAE,CAAC;oBACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;wBAClD,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvC,CAAC;oBACD,IAAI,CAAC,MAAM,GAAG,YAAoC,CAAC;oBACnD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACjE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,kBAAkB,GAAG,IAAI,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,qFAAqF;qBAC1G,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wBAAwB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC7D,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,SAAiB;IACxD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scan-skill.d.ts","sourceRoot":"","sources":["../../src/tools/scan-skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6N7D"}
|
package/dist/tools/scan-skill.js
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { TankApiClient } from '../lib/api-client.js';
|
|
5
|
-
import { pack, packForScan } from '../lib/packer.js';
|
|
6
|
-
import { getConfig } from '../lib/config.js';
|
|
7
|
-
export function registerScanSkillTool(server) {
|
|
8
|
-
server.tool('scan-skill', 'Scan a skill directory for security issues. Requires authentication.', {
|
|
9
|
-
directory: z.string().optional().describe('Directory to scan (default: current directory)'),
|
|
10
|
-
}, async ({ directory = '.' }) => {
|
|
11
|
-
const absDir = path.resolve(directory);
|
|
12
|
-
let client = new TankApiClient();
|
|
13
|
-
// Check auth, guide user to login if not authenticated
|
|
14
|
-
if (!client.isAuthenticated) {
|
|
15
|
-
return {
|
|
16
|
-
content: [
|
|
17
|
-
{
|
|
18
|
-
type: 'text',
|
|
19
|
-
text: 'You need to log in first. Use the login tool to authenticate with Tank.\n\nExample: "Log in to Tank"',
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// Verify auth is still valid
|
|
25
|
-
const authCheck = await client.verifyAuth();
|
|
26
|
-
if (!authCheck.valid) {
|
|
27
|
-
return {
|
|
28
|
-
content: [
|
|
29
|
-
{
|
|
30
|
-
type: 'text',
|
|
31
|
-
text: 'Your session has expired. Use the login tool to authenticate again.\n\nExample: "Log in to Tank"',
|
|
32
|
-
},
|
|
33
|
-
],
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
let packResult;
|
|
37
|
-
let usedSynthesisedManifest = false;
|
|
38
|
-
const skillsJsonPath = path.join(absDir, 'skills.json');
|
|
39
|
-
const hasSkillsJson = fs.existsSync(skillsJsonPath);
|
|
40
|
-
if (hasSkillsJson) {
|
|
41
|
-
try {
|
|
42
|
-
packResult = await pack(absDir);
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
return {
|
|
46
|
-
content: [
|
|
47
|
-
{
|
|
48
|
-
type: 'text',
|
|
49
|
-
text: `Failed to pack skill: ${err instanceof Error ? err.message : String(err)}`,
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
try {
|
|
57
|
-
packResult = await packForScan(absDir);
|
|
58
|
-
usedSynthesisedManifest = true;
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
return {
|
|
62
|
-
content: [
|
|
63
|
-
{
|
|
64
|
-
type: 'text',
|
|
65
|
-
text: `Failed to pack directory for scan: ${err instanceof Error ? err.message : String(err)}`,
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
const manifest = packResult.manifest;
|
|
72
|
-
const skillName = manifest.name ?? 'unknown';
|
|
73
|
-
const skillVersion = manifest.version ?? '0.0.0';
|
|
74
|
-
// Upload tarball and trigger scan
|
|
75
|
-
const formData = new FormData();
|
|
76
|
-
const blob = new Blob([packResult.tarball], { type: 'application/gzip' });
|
|
77
|
-
formData.append('tarball', blob, `${skillName}-${skillVersion}.tgz`);
|
|
78
|
-
formData.append('manifest', JSON.stringify(manifest));
|
|
79
|
-
const config = getConfig();
|
|
80
|
-
const scanRes = await fetch(`${config.registry}/api/v1/scan`, {
|
|
81
|
-
method: 'POST',
|
|
82
|
-
headers: {
|
|
83
|
-
Authorization: `Bearer ${client.token}`,
|
|
84
|
-
},
|
|
85
|
-
body: formData,
|
|
86
|
-
});
|
|
87
|
-
if (!scanRes.ok) {
|
|
88
|
-
const body = await scanRes.json().catch(() => ({}));
|
|
89
|
-
return {
|
|
90
|
-
content: [
|
|
91
|
-
{
|
|
92
|
-
type: 'text',
|
|
93
|
-
text: `Scan failed: ${body.error ?? scanRes.statusText}`,
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
const scanResult = (await scanRes.json());
|
|
99
|
-
// Format report
|
|
100
|
-
const verdictEmoji = {
|
|
101
|
-
pass: '✅',
|
|
102
|
-
pass_with_notes: '⚠️',
|
|
103
|
-
flagged: '🚩',
|
|
104
|
-
fail: '❌',
|
|
105
|
-
};
|
|
106
|
-
const severityEmoji = {
|
|
107
|
-
critical: '🔴',
|
|
108
|
-
high: '🟠',
|
|
109
|
-
medium: '🟡',
|
|
110
|
-
low: '🟢',
|
|
111
|
-
};
|
|
112
|
-
const lines = [
|
|
113
|
-
`## Scan Results for ${skillName}@${skillVersion}`,
|
|
114
|
-
'',
|
|
115
|
-
];
|
|
116
|
-
if (usedSynthesisedManifest) {
|
|
117
|
-
lines.push('> **Note:** No `skills.json` found. A synthesised manifest was used for scanning.');
|
|
118
|
-
lines.push('');
|
|
119
|
-
}
|
|
120
|
-
const auditScore = scanResult.audit_score ?? 0;
|
|
121
|
-
const durationMs = scanResult.duration_ms ?? 0;
|
|
122
|
-
lines.push(`**Verdict:** ${verdictEmoji[scanResult.verdict] ?? ''} ${scanResult.verdict.toUpperCase()}`, `**Score:** ${auditScore.toFixed(1)}/10`, `**Duration:** ${(durationMs / 1000).toFixed(1)}s`, `**Files:** ${packResult.fileCount} (${(packResult.totalSize / 1024).toFixed(1)}KB)`, '');
|
|
123
|
-
if (scanResult.findings.length > 0) {
|
|
124
|
-
lines.push(`### Findings (${scanResult.findings.length})`);
|
|
125
|
-
lines.push('');
|
|
126
|
-
// Group by severity
|
|
127
|
-
const bySeverity = {
|
|
128
|
-
critical: [],
|
|
129
|
-
high: [],
|
|
130
|
-
medium: [],
|
|
131
|
-
low: [],
|
|
132
|
-
};
|
|
133
|
-
for (const f of scanResult.findings) {
|
|
134
|
-
bySeverity[f.severity].push(f);
|
|
135
|
-
}
|
|
136
|
-
for (const severity of ['critical', 'high', 'medium', 'low']) {
|
|
137
|
-
const findings = bySeverity[severity];
|
|
138
|
-
if (findings.length === 0)
|
|
139
|
-
continue;
|
|
140
|
-
lines.push(`#### ${severityEmoji[severity]} ${severity.toUpperCase()} (${findings.length})`);
|
|
141
|
-
for (const f of findings) {
|
|
142
|
-
lines.push(`- **${f.type}**: ${f.description}`);
|
|
143
|
-
if (f.location)
|
|
144
|
-
lines.push(` - Location: ${f.location}`);
|
|
145
|
-
}
|
|
146
|
-
lines.push('');
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
lines.push('No findings. Your skill looks secure!');
|
|
151
|
-
lines.push('');
|
|
152
|
-
}
|
|
153
|
-
// Stages run
|
|
154
|
-
if (scanResult.stage_results?.length > 0) {
|
|
155
|
-
lines.push('### Scan Stages');
|
|
156
|
-
lines.push('');
|
|
157
|
-
for (const stage of scanResult.stage_results) {
|
|
158
|
-
const status = stage.status === 'passed' ? '✓' : '✗';
|
|
159
|
-
lines.push(`- ${status} ${stage.stage} (${stage.duration_ms}ms)`);
|
|
160
|
-
}
|
|
161
|
-
lines.push('');
|
|
162
|
-
}
|
|
163
|
-
// LLM Analysis
|
|
164
|
-
if (scanResult.llm_analysis && scanResult.llm_analysis.enabled) {
|
|
165
|
-
const llm = scanResult.llm_analysis;
|
|
166
|
-
lines.push('### LLM Analysis');
|
|
167
|
-
lines.push('');
|
|
168
|
-
lines.push(`**Mode:** ${llm.mode}`);
|
|
169
|
-
if (llm.provider_used) {
|
|
170
|
-
lines.push(`**Provider:** ${llm.provider_used}`);
|
|
171
|
-
}
|
|
172
|
-
if (llm.findings_reviewed !== undefined && llm.findings_reviewed > 0) {
|
|
173
|
-
lines.push(`**Findings Reviewed:** ${llm.findings_reviewed}`);
|
|
174
|
-
}
|
|
175
|
-
if (llm.findings_dismissed !== undefined && llm.findings_dismissed > 0) {
|
|
176
|
-
lines.push(`**False Positives Dismissed:** ${llm.findings_dismissed}`);
|
|
177
|
-
}
|
|
178
|
-
if (llm.findings_confirmed !== undefined && llm.findings_confirmed > 0) {
|
|
179
|
-
lines.push(`**Threats Confirmed:** ${llm.findings_confirmed}`);
|
|
180
|
-
}
|
|
181
|
-
if (llm.findings_uncertain !== undefined && llm.findings_uncertain > 0) {
|
|
182
|
-
lines.push(`**Uncertain:** ${llm.findings_uncertain}`);
|
|
183
|
-
}
|
|
184
|
-
if (llm.latency_ms) {
|
|
185
|
-
lines.push(`**Latency:** ${llm.latency_ms}ms`);
|
|
186
|
-
}
|
|
187
|
-
if (llm.error) {
|
|
188
|
-
lines.push(`**Error:** ${llm.error}`);
|
|
189
|
-
}
|
|
190
|
-
lines.push('');
|
|
191
|
-
}
|
|
192
|
-
if (scanResult.scan_id) {
|
|
193
|
-
lines.push(`View full report: https://tankpkg.dev/scans/${scanResult.scan_id}`);
|
|
194
|
-
}
|
|
195
|
-
return {
|
|
196
|
-
content: [{ type: 'text', text: lines.join('\n') }],
|
|
197
|
-
};
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
//# sourceMappingURL=scan-skill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scan-skill.js","sourceRoot":"","sources":["../../src/tools/scan-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-skills.d.ts","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgEhE"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { TankApiClient } from '../lib/api-client.js';
|
|
3
|
-
export function registerSearchSkillsTool(server) {
|
|
4
|
-
const client = new TankApiClient();
|
|
5
|
-
server.tool('search-skills', 'Search the Tank registry for AI agent skills', {
|
|
6
|
-
query: z.string().min(1).describe('Search query (skill name or keywords)'),
|
|
7
|
-
limit: z.number().min(1).max(50).optional().default(10).describe('Maximum results to return'),
|
|
8
|
-
}, async ({ query, limit }) => {
|
|
9
|
-
const result = await client.fetch(`/api/v1/search?q=${encodeURIComponent(query)}&limit=${limit}`);
|
|
10
|
-
if (!result.ok) {
|
|
11
|
-
return {
|
|
12
|
-
content: [
|
|
13
|
-
{
|
|
14
|
-
type: 'text',
|
|
15
|
-
text: `Search failed: ${result.error}`,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
const { results, total } = result.data;
|
|
21
|
-
if (results.length === 0) {
|
|
22
|
-
return {
|
|
23
|
-
content: [
|
|
24
|
-
{
|
|
25
|
-
type: 'text',
|
|
26
|
-
text: `No skills found matching "${query}". Try different keywords or browse the registry at https://tankpkg.dev`,
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
// Format as markdown table
|
|
32
|
-
const header = '| Skill | Score | Downloads | Description |\n|-------|-------|-----------|-------------|';
|
|
33
|
-
const rows = results.map((skill) => {
|
|
34
|
-
const score = skill.auditScore !== null ? skill.auditScore.toFixed(1) : '-';
|
|
35
|
-
const downloads = skill.downloads > 1000
|
|
36
|
-
? `${(skill.downloads / 1000).toFixed(1)}k`
|
|
37
|
-
: skill.downloads.toString();
|
|
38
|
-
const desc = skill.description?.slice(0, 50) ?? 'No description';
|
|
39
|
-
return `| ${skill.name} | ${score} | ${downloads} | ${desc} |`;
|
|
40
|
-
});
|
|
41
|
-
const text = [
|
|
42
|
-
`Found ${total} skill${total !== 1 ? 's' : ''} matching "${query}":`,
|
|
43
|
-
'',
|
|
44
|
-
header,
|
|
45
|
-
...rows,
|
|
46
|
-
'',
|
|
47
|
-
'View full results: https://tankpkg.dev/search?q=' + encodeURIComponent(query),
|
|
48
|
-
].join('\n');
|
|
49
|
-
return {
|
|
50
|
-
content: [{ type: 'text', text }],
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=search-skills.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-skills.js","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAgBrD,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnC,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8CAA8C,EAC9C;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAC9F,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAC/D,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kBAAkB,MAAM,CAAC,KAAK,EAAE;qBACvC;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6BAA6B,KAAK,yEAAyE;qBAClH;iBACF;aACF,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,MAAM,MAAM,GAAG,0FAA0F,CAAC;QAC1G,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5E,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI;gBACtC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC3C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC;YACjE,OAAO,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,MAAM,SAAS,MAAM,IAAI,IAAI,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG;YACX,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI;YACpE,EAAE;YACF,MAAM;YACN,GAAG,IAAI;YACP,EAAE;YACF,kDAAkD,GAAG,kBAAkB,CAAC,KAAK,CAAC;SAC/E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-info.d.ts","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkG7D"}
|
package/dist/tools/skill-info.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { TankApiClient } from '../lib/api-client.js';
|
|
3
|
-
export function registerSkillInfoTool(server) {
|
|
4
|
-
const client = new TankApiClient();
|
|
5
|
-
server.tool('skill-info', 'Get detailed information about a specific skill from the Tank registry', {
|
|
6
|
-
name: z.string().describe('Skill name (e.g., @org/skill-name or skill-name)'),
|
|
7
|
-
}, async ({ name }) => {
|
|
8
|
-
const result = await client.fetch(`/api/v1/skills/${encodeURIComponent(name)}`);
|
|
9
|
-
if (!result.ok) {
|
|
10
|
-
if (result.status === 404) {
|
|
11
|
-
return {
|
|
12
|
-
content: [
|
|
13
|
-
{
|
|
14
|
-
type: 'text',
|
|
15
|
-
text: `Skill "${name}" not found. Search for skills: https://tankpkg.dev/search`,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
content: [
|
|
22
|
-
{
|
|
23
|
-
type: 'text',
|
|
24
|
-
text: `Failed to get skill info: ${result.error}`,
|
|
25
|
-
},
|
|
26
|
-
],
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
const skill = result.data;
|
|
30
|
-
const score = skill.auditScore !== null ? `${skill.auditScore.toFixed(1)}/10` : 'Not scored';
|
|
31
|
-
const size = skill.versions[0]
|
|
32
|
-
? `${(skill.versions[0].tarballSize / 1024).toFixed(1)}KB`
|
|
33
|
-
: 'Unknown';
|
|
34
|
-
// Format permissions as readable text
|
|
35
|
-
let permsText = 'None declared';
|
|
36
|
-
if (skill.permissions) {
|
|
37
|
-
const perms = [];
|
|
38
|
-
const p = skill.permissions;
|
|
39
|
-
if (p.network?.outbound?.length) {
|
|
40
|
-
perms.push(`network: ${p.network.outbound.join(', ')}`);
|
|
41
|
-
}
|
|
42
|
-
if (p.filesystem?.read?.length || p.filesystem?.write?.length) {
|
|
43
|
-
const fsPerms = [];
|
|
44
|
-
if (p.filesystem.read?.length)
|
|
45
|
-
fsPerms.push(`read: ${p.filesystem.read.length} paths`);
|
|
46
|
-
if (p.filesystem.write?.length)
|
|
47
|
-
fsPerms.push(`write: ${p.filesystem.write.length} paths`);
|
|
48
|
-
perms.push(`filesystem (${fsPerms.join(', ')})`);
|
|
49
|
-
}
|
|
50
|
-
if (p.subprocess)
|
|
51
|
-
perms.push('subprocess: allowed');
|
|
52
|
-
if (perms.length > 0)
|
|
53
|
-
permsText = perms.join('\n - ');
|
|
54
|
-
}
|
|
55
|
-
const versionsList = skill.versions
|
|
56
|
-
.slice(0, 5)
|
|
57
|
-
.map((v) => {
|
|
58
|
-
const vScore = v.auditScore !== null ? v.auditScore.toFixed(1) : '-';
|
|
59
|
-
return `${v.version} (score: ${vScore})`;
|
|
60
|
-
})
|
|
61
|
-
.join('\n - ');
|
|
62
|
-
const text = [
|
|
63
|
-
`# ${skill.name}`,
|
|
64
|
-
'',
|
|
65
|
-
`**Publisher:** ${skill.publisher}`,
|
|
66
|
-
`**Latest:** ${skill.latestVersion}`,
|
|
67
|
-
`**Score:** ${score}`,
|
|
68
|
-
`**Size:** ${size}`,
|
|
69
|
-
`**Downloads:** ${skill.downloads}`,
|
|
70
|
-
'',
|
|
71
|
-
'**Description:**',
|
|
72
|
-
skill.description ?? 'No description available',
|
|
73
|
-
'',
|
|
74
|
-
'**Permissions:**',
|
|
75
|
-
` - ${permsText}`,
|
|
76
|
-
'',
|
|
77
|
-
'**Versions:**',
|
|
78
|
-
` - ${versionsList}`,
|
|
79
|
-
skill.versions.length > 5 ? `\n ... and ${skill.versions.length - 5} more` : '',
|
|
80
|
-
'',
|
|
81
|
-
`View on Tank: https://tankpkg.dev/skills/${skill.name}`,
|
|
82
|
-
].join('\n');
|
|
83
|
-
return {
|
|
84
|
-
content: [{ type: 'text', text }],
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=skill-info.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-info.js","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-permissions.d.ts","sourceRoot":"","sources":["../../src/tools/skill-permissions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsMzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2KpE"}
|