vskill 0.1.1 → 0.1.2
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/agents/agents-registry.d.ts +48 -37
- package/dist/agents/agents-registry.js +206 -261
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/agents/agents-registry.test.d.ts +1 -0
- package/dist/agents/agents-registry.test.js +203 -0
- package/dist/agents/agents-registry.test.js.map +1 -0
- package/dist/api/client.test.d.ts +1 -0
- package/dist/api/client.test.js +204 -0
- package/dist/api/client.test.js.map +1 -0
- package/dist/blocklist/blocklist.d.ts +23 -0
- package/dist/blocklist/blocklist.js +116 -0
- package/dist/blocklist/blocklist.js.map +1 -0
- package/dist/blocklist/blocklist.test.d.ts +1 -0
- package/dist/blocklist/blocklist.test.js +259 -0
- package/dist/blocklist/blocklist.test.js.map +1 -0
- package/dist/blocklist/types.d.ts +18 -0
- package/dist/blocklist/types.js +5 -0
- package/dist/blocklist/types.js.map +1 -0
- package/dist/commands/add.d.ts +2 -0
- package/dist/commands/add.js +221 -6
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.test.d.ts +1 -0
- package/dist/commands/add.test.js +682 -0
- package/dist/commands/add.test.js.map +1 -0
- package/dist/commands/blocklist.d.ts +1 -0
- package/dist/commands/blocklist.js +87 -0
- package/dist/commands/blocklist.js.map +1 -0
- package/dist/commands/blocklist.test.d.ts +1 -0
- package/dist/commands/blocklist.test.js +158 -0
- package/dist/commands/blocklist.test.js.map +1 -0
- package/dist/commands/remove.d.ts +7 -0
- package/dist/commands/remove.js +91 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/remove.test.d.ts +1 -0
- package/dist/commands/remove.test.js +164 -0
- package/dist/commands/remove.test.js.map +1 -0
- package/dist/commands/submit.d.ts +1 -1
- package/dist/commands/submit.js +26 -16
- package/dist/commands/submit.js.map +1 -1
- package/dist/commands/submit.test.d.ts +1 -0
- package/dist/commands/submit.test.js +74 -0
- package/dist/commands/submit.test.js.map +1 -0
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/lockfile/lockfile.test.d.ts +1 -0
- package/dist/lockfile/lockfile.test.js +196 -0
- package/dist/lockfile/lockfile.test.js.map +1 -0
- package/dist/lockfile/types.d.ts +8 -0
- package/dist/marketplace/index.d.ts +2 -0
- package/dist/marketplace/index.js +2 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/marketplace.d.ts +34 -0
- package/dist/marketplace/marketplace.js +51 -0
- package/dist/marketplace/marketplace.js.map +1 -0
- package/dist/marketplace/marketplace.test.d.ts +1 -0
- package/dist/marketplace/marketplace.test.js +103 -0
- package/dist/marketplace/marketplace.test.js.map +1 -0
- package/dist/scanner/index.d.ts +4 -0
- package/dist/scanner/index.js +4 -0
- package/dist/scanner/index.js.map +1 -1
- package/dist/scanner/patterns.test.d.ts +1 -0
- package/dist/scanner/patterns.test.js +353 -0
- package/dist/scanner/patterns.test.js.map +1 -0
- package/dist/scanner/repo-scanner.d.ts +30 -0
- package/dist/scanner/repo-scanner.js +190 -0
- package/dist/scanner/repo-scanner.js.map +1 -0
- package/dist/scanner/tier1.test.d.ts +1 -0
- package/dist/scanner/tier1.test.js +182 -0
- package/dist/scanner/tier1.test.js.map +1 -0
- package/dist/scanner/tier2-llm.d.ts +28 -0
- package/dist/scanner/tier2-llm.js +130 -0
- package/dist/scanner/tier2-llm.js.map +1 -0
- package/dist/scanner/types.d.ts +58 -0
- package/dist/scanner/types.js +5 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.js +2 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/platform-security.d.ts +17 -0
- package/dist/security/platform-security.js +34 -0
- package/dist/security/platform-security.js.map +1 -0
- package/dist/security/platform-security.test.d.ts +1 -0
- package/dist/security/platform-security.test.js +92 -0
- package/dist/security/platform-security.test.js.map +1 -0
- package/dist/settings/index.d.ts +2 -0
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/settings.d.ts +16 -0
- package/dist/settings/settings.js +73 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/settings.test.d.ts +1 -0
- package/dist/settings/settings.test.js +103 -0
- package/dist/settings/settings.test.js.map +1 -0
- package/dist/utils/__tests__/paths.test.d.ts +1 -0
- package/dist/utils/__tests__/paths.test.js +22 -0
- package/dist/utils/__tests__/paths.test.js.map +1 -0
- package/dist/utils/__tests__/validation.test.d.ts +1 -0
- package/dist/utils/__tests__/validation.test.js +49 -0
- package/dist/utils/__tests__/validation.test.js.map +1 -0
- package/dist/utils/browser.d.ts +6 -0
- package/dist/utils/browser.js +37 -0
- package/dist/utils/browser.js.map +1 -0
- package/dist/utils/paths.d.ts +5 -0
- package/dist/utils/paths.js +13 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/validation.d.ts +14 -0
- package/dist/utils/validation.js +34 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +5 -2
- package/scripts/preuninstall.cjs +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.test.js","sourceRoot":"","sources":["../../src/commands/add.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function blocklistCommand(subcommand: string, name?: string): Promise<void>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// vskill blocklist -- manage the malicious skills blocklist
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { getCachedBlocklist, syncBlocklist, checkBlocklist, } from "../blocklist/blocklist.js";
|
|
5
|
+
import { bold, green, red, dim, table } from "../utils/output.js";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Subcommands
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
async function listBlocklist() {
|
|
10
|
+
const cache = getCachedBlocklist();
|
|
11
|
+
if (!cache) {
|
|
12
|
+
console.log(dim("No cached blocklist. Run `vskill blocklist sync` first."));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const ago = timeSince(new Date(cache.fetchedAt));
|
|
16
|
+
console.log(bold(`Malicious Skills Blocklist (${cache.count} entries, last synced: ${ago})`));
|
|
17
|
+
console.log("");
|
|
18
|
+
const headers = ["SKILL NAME", "THREAT TYPE", "SEVERITY", "SOURCE"];
|
|
19
|
+
const rows = cache.entries.map((e) => [
|
|
20
|
+
e.skillName,
|
|
21
|
+
e.threatType,
|
|
22
|
+
e.severity,
|
|
23
|
+
e.sourceRegistry || e.sourceUrl || "-",
|
|
24
|
+
]);
|
|
25
|
+
console.log(table(headers, rows));
|
|
26
|
+
}
|
|
27
|
+
async function syncBlocklistCmd() {
|
|
28
|
+
console.log(dim("Syncing blocklist from verified-skill.com..."));
|
|
29
|
+
try {
|
|
30
|
+
const cache = await syncBlocklist();
|
|
31
|
+
console.log(green(`Synced ${cache.count} entries (last updated: ${cache.lastUpdated})`));
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
console.error(red("Failed to sync blocklist: ") + dim(err.message));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function checkBlocklistCmd(name) {
|
|
38
|
+
if (!name) {
|
|
39
|
+
console.error(red("Usage: vskill blocklist check <name>"));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const entry = await checkBlocklist(name);
|
|
43
|
+
if (entry) {
|
|
44
|
+
console.log(red(`"${name}" is BLOCKED`));
|
|
45
|
+
console.log(red(` Threat: ${entry.threatType} (${entry.severity})`));
|
|
46
|
+
console.log(red(` Reason: ${entry.reason}`));
|
|
47
|
+
if (entry.sourceRegistry) {
|
|
48
|
+
console.log(dim(` Source: ${entry.sourceRegistry}`));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log(green(`"${name}" is not blocklisted`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Main entry
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
export async function blocklistCommand(subcommand, name) {
|
|
59
|
+
switch (subcommand) {
|
|
60
|
+
case "list":
|
|
61
|
+
return listBlocklist();
|
|
62
|
+
case "sync":
|
|
63
|
+
return syncBlocklistCmd();
|
|
64
|
+
case "check":
|
|
65
|
+
return checkBlocklistCmd(name);
|
|
66
|
+
default:
|
|
67
|
+
console.error(red(`Unknown subcommand: "${subcommand}"\n`) +
|
|
68
|
+
dim("Available: list, sync, check"));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Helpers
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
function timeSince(date) {
|
|
75
|
+
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
76
|
+
if (seconds < 60)
|
|
77
|
+
return "just now";
|
|
78
|
+
const minutes = Math.floor(seconds / 60);
|
|
79
|
+
if (minutes < 60)
|
|
80
|
+
return `${minutes} minute${minutes === 1 ? "" : "s"} ago`;
|
|
81
|
+
const hours = Math.floor(minutes / 60);
|
|
82
|
+
if (hours < 24)
|
|
83
|
+
return `${hours} hour${hours === 1 ? "" : "s"} ago`;
|
|
84
|
+
const days = Math.floor(hours / 24);
|
|
85
|
+
return `${days} day${days === 1 ? "" : "s"} ago`;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=blocklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../src/commands/blocklist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Mocks — vi.hoisted for ESM compatibility
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
const mocks = vi.hoisted(() => ({
|
|
6
|
+
getCachedBlocklist: vi.fn(),
|
|
7
|
+
syncBlocklist: vi.fn(),
|
|
8
|
+
checkBlocklist: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
vi.mock("../blocklist/blocklist.js", () => ({
|
|
11
|
+
getCachedBlocklist: (...args) => mocks.getCachedBlocklist(...args),
|
|
12
|
+
syncBlocklist: (...args) => mocks.syncBlocklist(...args),
|
|
13
|
+
checkBlocklist: (...args) => mocks.checkBlocklist(...args),
|
|
14
|
+
}));
|
|
15
|
+
vi.mock("../utils/output.js", () => ({
|
|
16
|
+
bold: (s) => s,
|
|
17
|
+
green: (s) => s,
|
|
18
|
+
red: (s) => s,
|
|
19
|
+
yellow: (s) => s,
|
|
20
|
+
dim: (s) => s,
|
|
21
|
+
cyan: (s) => s,
|
|
22
|
+
table: (headers, rows) => {
|
|
23
|
+
return [headers.join(" "), ...rows.map((r) => r.join(" "))].join("\n");
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Import module under test AFTER mocks
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
const { blocklistCommand } = await import("./blocklist.js");
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Helpers
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
function makeEntry(overrides = {}) {
|
|
34
|
+
return {
|
|
35
|
+
skillName: "evil-skill",
|
|
36
|
+
threatType: "credential-theft",
|
|
37
|
+
severity: "critical",
|
|
38
|
+
reason: "Steals AWS credentials",
|
|
39
|
+
evidenceUrls: ["https://example.com/report"],
|
|
40
|
+
discoveredAt: "2026-02-01T00:00:00Z",
|
|
41
|
+
...overrides,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function makeCache(overrides = {}) {
|
|
45
|
+
return {
|
|
46
|
+
entries: [makeEntry()],
|
|
47
|
+
count: 1,
|
|
48
|
+
lastUpdated: "2026-02-01T00:00:00Z",
|
|
49
|
+
fetchedAt: new Date().toISOString(),
|
|
50
|
+
...overrides,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Tests
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
beforeEach(() => {
|
|
57
|
+
vi.clearAllMocks();
|
|
58
|
+
vi.spyOn(console, "log").mockImplementation(() => { });
|
|
59
|
+
vi.spyOn(console, "error").mockImplementation(() => { });
|
|
60
|
+
});
|
|
61
|
+
describe("blocklist list", () => {
|
|
62
|
+
it("shows cached entries in a table", async () => {
|
|
63
|
+
const cache = makeCache({
|
|
64
|
+
entries: [
|
|
65
|
+
makeEntry({ skillName: "evil-bot", threatType: "credential-theft", severity: "critical", sourceRegistry: "clawhub" }),
|
|
66
|
+
makeEntry({ skillName: "bad-agent", threatType: "prompt-injection", severity: "high", sourceRegistry: "github" }),
|
|
67
|
+
],
|
|
68
|
+
count: 2,
|
|
69
|
+
});
|
|
70
|
+
mocks.getCachedBlocklist.mockReturnValue(cache);
|
|
71
|
+
await blocklistCommand("list");
|
|
72
|
+
const output = console.log.mock.calls
|
|
73
|
+
.map((c) => String(c[0]))
|
|
74
|
+
.join("\n");
|
|
75
|
+
expect(output).toContain("evil-bot");
|
|
76
|
+
expect(output).toContain("bad-agent");
|
|
77
|
+
expect(output).toContain("2 entries");
|
|
78
|
+
});
|
|
79
|
+
it("shows message when no cache exists", async () => {
|
|
80
|
+
mocks.getCachedBlocklist.mockReturnValue(null);
|
|
81
|
+
await blocklistCommand("list");
|
|
82
|
+
const output = console.log.mock.calls
|
|
83
|
+
.map((c) => String(c[0]))
|
|
84
|
+
.join("\n");
|
|
85
|
+
expect(output).toContain("No cached blocklist");
|
|
86
|
+
expect(output).toContain("vskill blocklist sync");
|
|
87
|
+
});
|
|
88
|
+
it("defaults to list when no subcommand given", async () => {
|
|
89
|
+
mocks.getCachedBlocklist.mockReturnValue(null);
|
|
90
|
+
await blocklistCommand("list");
|
|
91
|
+
expect(mocks.getCachedBlocklist).toHaveBeenCalled();
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe("blocklist sync", () => {
|
|
95
|
+
it("fetches from API and reports success", async () => {
|
|
96
|
+
const cache = makeCache({ count: 22 });
|
|
97
|
+
mocks.syncBlocklist.mockResolvedValue(cache);
|
|
98
|
+
await blocklistCommand("sync");
|
|
99
|
+
expect(mocks.syncBlocklist).toHaveBeenCalled();
|
|
100
|
+
const output = console.log.mock.calls
|
|
101
|
+
.map((c) => String(c[0]))
|
|
102
|
+
.join("\n");
|
|
103
|
+
expect(output).toContain("Synced");
|
|
104
|
+
expect(output).toContain("22");
|
|
105
|
+
});
|
|
106
|
+
it("reports error when API fails", async () => {
|
|
107
|
+
mocks.syncBlocklist.mockRejectedValue(new Error("Network error"));
|
|
108
|
+
await blocklistCommand("sync");
|
|
109
|
+
const output = console.error.mock.calls
|
|
110
|
+
.map((c) => String(c[0]))
|
|
111
|
+
.join("\n");
|
|
112
|
+
expect(output).toContain("Failed");
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe("blocklist check", () => {
|
|
116
|
+
it("reports when skill is blocked", async () => {
|
|
117
|
+
mocks.checkBlocklist.mockResolvedValue(makeEntry({
|
|
118
|
+
skillName: "evil-bot",
|
|
119
|
+
threatType: "credential-theft",
|
|
120
|
+
severity: "critical",
|
|
121
|
+
reason: "Steals credentials",
|
|
122
|
+
sourceRegistry: "clawhub",
|
|
123
|
+
}));
|
|
124
|
+
await blocklistCommand("check", "evil-bot");
|
|
125
|
+
const output = console.log.mock.calls
|
|
126
|
+
.map((c) => String(c[0]))
|
|
127
|
+
.join("\n");
|
|
128
|
+
expect(output).toContain("BLOCKED");
|
|
129
|
+
expect(output).toContain("evil-bot");
|
|
130
|
+
expect(output).toContain("credential-theft");
|
|
131
|
+
});
|
|
132
|
+
it("reports when skill is not blocked", async () => {
|
|
133
|
+
mocks.checkBlocklist.mockResolvedValue(null);
|
|
134
|
+
await blocklistCommand("check", "safe-skill");
|
|
135
|
+
const output = console.log.mock.calls
|
|
136
|
+
.map((c) => String(c[0]))
|
|
137
|
+
.join("\n");
|
|
138
|
+
expect(output).toContain("safe-skill");
|
|
139
|
+
expect(output).toContain("not blocklisted");
|
|
140
|
+
});
|
|
141
|
+
it("shows error when no name provided", async () => {
|
|
142
|
+
await blocklistCommand("check");
|
|
143
|
+
const output = console.error.mock.calls
|
|
144
|
+
.map((c) => String(c[0]))
|
|
145
|
+
.join("\n");
|
|
146
|
+
expect(output).toContain("Usage");
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe("blocklist unknown subcommand", () => {
|
|
150
|
+
it("shows usage hint for unknown subcommand", async () => {
|
|
151
|
+
await blocklistCommand("foobar");
|
|
152
|
+
const output = console.error.mock.calls
|
|
153
|
+
.map((c) => String(c[0]))
|
|
154
|
+
.join("\n");
|
|
155
|
+
expect(output).toContain("Unknown subcommand");
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=blocklist.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.test.js","sourceRoot":"","sources":["../../src/commands/blocklist.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// vskill remove -- remove an installed skill from all agents
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { existsSync, rmSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { createInterface } from "node:readline";
|
|
7
|
+
import { resolveTilde } from "../utils/paths.js";
|
|
8
|
+
import { detectInstalledAgents } from "../agents/agents-registry.js";
|
|
9
|
+
import { readLockfile, removeSkillFromLock } from "../lockfile/index.js";
|
|
10
|
+
import { bold, green, red, yellow, dim } from "../utils/output.js";
|
|
11
|
+
async function confirm(message) {
|
|
12
|
+
if (!process.stdin.isTTY)
|
|
13
|
+
return false;
|
|
14
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
rl.question(`${message} (y/N): `, (answer) => {
|
|
17
|
+
rl.close();
|
|
18
|
+
resolve(answer.trim().toLowerCase() === "y");
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export async function removeCommand(skillName, opts) {
|
|
23
|
+
// Read lockfile to check if skill exists
|
|
24
|
+
const lock = readLockfile();
|
|
25
|
+
const skillEntry = lock?.skills[skillName];
|
|
26
|
+
if (!skillEntry && !opts.force) {
|
|
27
|
+
console.error(red(`Skill "${skillName}" not found in lockfile.\n`) +
|
|
28
|
+
dim("Use --force to attempt removal anyway."));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
// Confirmation prompt
|
|
32
|
+
if (!opts.force) {
|
|
33
|
+
const yes = await confirm(`Remove skill ${bold(skillName)} from all agents?`);
|
|
34
|
+
if (!yes) {
|
|
35
|
+
console.log(dim("Cancelled."));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Detect installed agents
|
|
40
|
+
const agents = await detectInstalledAgents();
|
|
41
|
+
let removedCount = 0;
|
|
42
|
+
const removedFrom = [];
|
|
43
|
+
for (const agent of agents) {
|
|
44
|
+
const paths = [];
|
|
45
|
+
if (!opts.global) {
|
|
46
|
+
// Local dirs
|
|
47
|
+
paths.push({
|
|
48
|
+
label: `${agent.displayName} (local)`,
|
|
49
|
+
dir: join(process.cwd(), agent.localSkillsDir, skillName),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (!opts.local) {
|
|
53
|
+
// Global dirs
|
|
54
|
+
paths.push({
|
|
55
|
+
label: `${agent.displayName} (global)`,
|
|
56
|
+
dir: resolveTilde(join(agent.globalSkillsDir, skillName)),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
for (const { label, dir } of paths) {
|
|
60
|
+
if (existsSync(dir)) {
|
|
61
|
+
try {
|
|
62
|
+
rmSync(dir, { recursive: true, force: true });
|
|
63
|
+
removedFrom.push(label);
|
|
64
|
+
removedCount++;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error(yellow(`Failed to remove from ${label}: `) +
|
|
68
|
+
dim(err.message));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Update lockfile
|
|
74
|
+
if (skillEntry) {
|
|
75
|
+
removeSkillFromLock(skillName);
|
|
76
|
+
}
|
|
77
|
+
// Summary
|
|
78
|
+
if (removedCount > 0) {
|
|
79
|
+
console.log(green(`\nRemoved ${bold(skillName)} from ${removedCount} location${removedCount === 1 ? "" : "s"}:\n`));
|
|
80
|
+
for (const loc of removedFrom) {
|
|
81
|
+
console.log(` ${dim(">")} ${loc}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log(dim(`\nNo installed files found for "${skillName}".`));
|
|
86
|
+
}
|
|
87
|
+
if (skillEntry) {
|
|
88
|
+
console.log(dim("\nLockfile updated."));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Mock node:fs
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
const mockExistsSync = vi.fn();
|
|
6
|
+
const mockRmSync = vi.fn();
|
|
7
|
+
vi.mock("node:fs", () => ({
|
|
8
|
+
existsSync: (...args) => mockExistsSync(...args),
|
|
9
|
+
rmSync: (...args) => mockRmSync(...args),
|
|
10
|
+
readFileSync: vi.fn(),
|
|
11
|
+
writeFileSync: vi.fn(),
|
|
12
|
+
}));
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Mock agents registry
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const mockDetectInstalledAgents = vi.fn();
|
|
17
|
+
vi.mock("../agents/agents-registry.js", () => ({
|
|
18
|
+
detectInstalledAgents: (...args) => mockDetectInstalledAgents(...args),
|
|
19
|
+
}));
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Mock lockfile
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
const mockReadLockfile = vi.fn();
|
|
24
|
+
const mockRemoveSkillFromLock = vi.fn();
|
|
25
|
+
vi.mock("../lockfile/index.js", () => ({
|
|
26
|
+
readLockfile: (...args) => mockReadLockfile(...args),
|
|
27
|
+
removeSkillFromLock: (...args) => mockRemoveSkillFromLock(...args),
|
|
28
|
+
}));
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Mock paths
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
vi.mock("../utils/paths.js", () => ({
|
|
33
|
+
resolveTilde: (p) => p.startsWith("~/") ? `/home/testuser${p.slice(1)}` : p,
|
|
34
|
+
}));
|
|
35
|
+
// Import after mocks
|
|
36
|
+
const { removeCommand } = await import("./remove.js");
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Helpers
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
const MOCK_AGENTS = [
|
|
41
|
+
{
|
|
42
|
+
id: "claude-code",
|
|
43
|
+
displayName: "Claude Code",
|
|
44
|
+
localSkillsDir: ".claude/commands",
|
|
45
|
+
globalSkillsDir: "~/.claude/commands",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: "cursor",
|
|
49
|
+
displayName: "Cursor",
|
|
50
|
+
localSkillsDir: ".cursor/skills",
|
|
51
|
+
globalSkillsDir: "~/.cursor/skills",
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
function makeLockfile(skills = {}) {
|
|
55
|
+
return {
|
|
56
|
+
version: 1,
|
|
57
|
+
agents: ["claude-code", "cursor"],
|
|
58
|
+
skills,
|
|
59
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
60
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Tests
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
vi.clearAllMocks();
|
|
68
|
+
mockDetectInstalledAgents.mockResolvedValue(MOCK_AGENTS);
|
|
69
|
+
});
|
|
70
|
+
describe("removeCommand", () => {
|
|
71
|
+
it("removes skill from all detected agent directories", async () => {
|
|
72
|
+
mockReadLockfile.mockReturnValue(makeLockfile({
|
|
73
|
+
sw: {
|
|
74
|
+
version: "1.0.0",
|
|
75
|
+
sha: "abc123",
|
|
76
|
+
tier: "SCANNED",
|
|
77
|
+
installedAt: "2026-01-01T00:00:00.000Z",
|
|
78
|
+
source: "local:/path",
|
|
79
|
+
},
|
|
80
|
+
}));
|
|
81
|
+
// All dirs exist
|
|
82
|
+
mockExistsSync.mockReturnValue(true);
|
|
83
|
+
await removeCommand("sw", { force: true });
|
|
84
|
+
// Should attempt to remove from both agents (local + global = 4 paths)
|
|
85
|
+
expect(mockRmSync).toHaveBeenCalled();
|
|
86
|
+
expect(mockRemoveSkillFromLock).toHaveBeenCalledWith("sw");
|
|
87
|
+
});
|
|
88
|
+
it("errors when skill not in lockfile and no --force", async () => {
|
|
89
|
+
mockReadLockfile.mockReturnValue(makeLockfile({}));
|
|
90
|
+
const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
91
|
+
const exitSpy = vi
|
|
92
|
+
.spyOn(process, "exit")
|
|
93
|
+
.mockImplementation(() => undefined);
|
|
94
|
+
await removeCommand("unknown-skill", {});
|
|
95
|
+
expect(consoleSpy).toHaveBeenCalled();
|
|
96
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
97
|
+
consoleSpy.mockRestore();
|
|
98
|
+
exitSpy.mockRestore();
|
|
99
|
+
});
|
|
100
|
+
it("proceeds with --force even when skill not in lockfile", async () => {
|
|
101
|
+
mockReadLockfile.mockReturnValue(makeLockfile({}));
|
|
102
|
+
mockExistsSync.mockReturnValue(false);
|
|
103
|
+
// Should not throw or exit
|
|
104
|
+
await removeCommand("unknown-skill", { force: true });
|
|
105
|
+
// Still tries detection, just nothing to remove
|
|
106
|
+
expect(mockDetectInstalledAgents).toHaveBeenCalled();
|
|
107
|
+
});
|
|
108
|
+
it("only removes global dirs when --global flag set", async () => {
|
|
109
|
+
mockReadLockfile.mockReturnValue(makeLockfile({
|
|
110
|
+
sw: {
|
|
111
|
+
version: "1.0.0",
|
|
112
|
+
sha: "abc123",
|
|
113
|
+
tier: "SCANNED",
|
|
114
|
+
installedAt: "2026-01-01T00:00:00.000Z",
|
|
115
|
+
source: "local:/path",
|
|
116
|
+
},
|
|
117
|
+
}));
|
|
118
|
+
mockExistsSync.mockReturnValue(true);
|
|
119
|
+
await removeCommand("sw", { force: true, global: true });
|
|
120
|
+
// Should only remove from global dirs (tilde-resolved paths)
|
|
121
|
+
const removedPaths = mockRmSync.mock.calls.map((c) => c[0]);
|
|
122
|
+
for (const p of removedPaths) {
|
|
123
|
+
expect(p).toMatch(/^\/home\/testuser/);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
it("only removes local dirs when --local flag set", async () => {
|
|
127
|
+
mockReadLockfile.mockReturnValue(makeLockfile({
|
|
128
|
+
sw: {
|
|
129
|
+
version: "1.0.0",
|
|
130
|
+
sha: "abc123",
|
|
131
|
+
tier: "SCANNED",
|
|
132
|
+
installedAt: "2026-01-01T00:00:00.000Z",
|
|
133
|
+
source: "local:/path",
|
|
134
|
+
},
|
|
135
|
+
}));
|
|
136
|
+
mockExistsSync.mockReturnValue(true);
|
|
137
|
+
await removeCommand("sw", { force: true, local: true });
|
|
138
|
+
// Should only remove from local dirs (relative paths resolved with cwd)
|
|
139
|
+
const removedPaths = mockRmSync.mock.calls.map((c) => c[0]);
|
|
140
|
+
for (const p of removedPaths) {
|
|
141
|
+
expect(p).not.toMatch(/^\/home\/testuser/);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
it("handles missing directories gracefully", async () => {
|
|
145
|
+
mockReadLockfile.mockReturnValue(makeLockfile({
|
|
146
|
+
sw: {
|
|
147
|
+
version: "1.0.0",
|
|
148
|
+
sha: "abc123",
|
|
149
|
+
tier: "SCANNED",
|
|
150
|
+
installedAt: "2026-01-01T00:00:00.000Z",
|
|
151
|
+
source: "local:/path",
|
|
152
|
+
},
|
|
153
|
+
}));
|
|
154
|
+
// No dirs exist
|
|
155
|
+
mockExistsSync.mockReturnValue(false);
|
|
156
|
+
// Should not throw
|
|
157
|
+
await removeCommand("sw", { force: true });
|
|
158
|
+
// rmSync should not be called since dirs don't exist
|
|
159
|
+
expect(mockRmSync).not.toHaveBeenCalled();
|
|
160
|
+
// But lockfile should still be updated
|
|
161
|
+
expect(mockRemoveSkillFromLock).toHaveBeenCalledWith("sw");
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=remove.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.test.js","sourceRoot":"","sources":["../../src/commands/remove.test.ts"],"names":[],"mappings":"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"}
|