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.
Files changed (110) hide show
  1. package/dist/agents/agents-registry.d.ts +48 -37
  2. package/dist/agents/agents-registry.js +206 -261
  3. package/dist/agents/agents-registry.js.map +1 -1
  4. package/dist/agents/agents-registry.test.d.ts +1 -0
  5. package/dist/agents/agents-registry.test.js +203 -0
  6. package/dist/agents/agents-registry.test.js.map +1 -0
  7. package/dist/api/client.test.d.ts +1 -0
  8. package/dist/api/client.test.js +204 -0
  9. package/dist/api/client.test.js.map +1 -0
  10. package/dist/blocklist/blocklist.d.ts +23 -0
  11. package/dist/blocklist/blocklist.js +116 -0
  12. package/dist/blocklist/blocklist.js.map +1 -0
  13. package/dist/blocklist/blocklist.test.d.ts +1 -0
  14. package/dist/blocklist/blocklist.test.js +259 -0
  15. package/dist/blocklist/blocklist.test.js.map +1 -0
  16. package/dist/blocklist/types.d.ts +18 -0
  17. package/dist/blocklist/types.js +5 -0
  18. package/dist/blocklist/types.js.map +1 -0
  19. package/dist/commands/add.d.ts +2 -0
  20. package/dist/commands/add.js +221 -6
  21. package/dist/commands/add.js.map +1 -1
  22. package/dist/commands/add.test.d.ts +1 -0
  23. package/dist/commands/add.test.js +682 -0
  24. package/dist/commands/add.test.js.map +1 -0
  25. package/dist/commands/blocklist.d.ts +1 -0
  26. package/dist/commands/blocklist.js +87 -0
  27. package/dist/commands/blocklist.js.map +1 -0
  28. package/dist/commands/blocklist.test.d.ts +1 -0
  29. package/dist/commands/blocklist.test.js +158 -0
  30. package/dist/commands/blocklist.test.js.map +1 -0
  31. package/dist/commands/remove.d.ts +7 -0
  32. package/dist/commands/remove.js +91 -0
  33. package/dist/commands/remove.js.map +1 -0
  34. package/dist/commands/remove.test.d.ts +1 -0
  35. package/dist/commands/remove.test.js +164 -0
  36. package/dist/commands/remove.test.js.map +1 -0
  37. package/dist/commands/submit.d.ts +1 -1
  38. package/dist/commands/submit.js +26 -16
  39. package/dist/commands/submit.js.map +1 -1
  40. package/dist/commands/submit.test.d.ts +1 -0
  41. package/dist/commands/submit.test.js +74 -0
  42. package/dist/commands/submit.test.js.map +1 -0
  43. package/dist/index.js +21 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/lockfile/lockfile.test.d.ts +1 -0
  46. package/dist/lockfile/lockfile.test.js +196 -0
  47. package/dist/lockfile/lockfile.test.js.map +1 -0
  48. package/dist/lockfile/types.d.ts +8 -0
  49. package/dist/marketplace/index.d.ts +2 -0
  50. package/dist/marketplace/index.js +2 -0
  51. package/dist/marketplace/index.js.map +1 -0
  52. package/dist/marketplace/marketplace.d.ts +34 -0
  53. package/dist/marketplace/marketplace.js +51 -0
  54. package/dist/marketplace/marketplace.js.map +1 -0
  55. package/dist/marketplace/marketplace.test.d.ts +1 -0
  56. package/dist/marketplace/marketplace.test.js +103 -0
  57. package/dist/marketplace/marketplace.test.js.map +1 -0
  58. package/dist/scanner/index.d.ts +4 -0
  59. package/dist/scanner/index.js +4 -0
  60. package/dist/scanner/index.js.map +1 -1
  61. package/dist/scanner/patterns.test.d.ts +1 -0
  62. package/dist/scanner/patterns.test.js +353 -0
  63. package/dist/scanner/patterns.test.js.map +1 -0
  64. package/dist/scanner/repo-scanner.d.ts +30 -0
  65. package/dist/scanner/repo-scanner.js +190 -0
  66. package/dist/scanner/repo-scanner.js.map +1 -0
  67. package/dist/scanner/tier1.test.d.ts +1 -0
  68. package/dist/scanner/tier1.test.js +182 -0
  69. package/dist/scanner/tier1.test.js.map +1 -0
  70. package/dist/scanner/tier2-llm.d.ts +28 -0
  71. package/dist/scanner/tier2-llm.js +130 -0
  72. package/dist/scanner/tier2-llm.js.map +1 -0
  73. package/dist/scanner/types.d.ts +58 -0
  74. package/dist/scanner/types.js +5 -0
  75. package/dist/scanner/types.js.map +1 -0
  76. package/dist/security/index.d.ts +2 -0
  77. package/dist/security/index.js +2 -0
  78. package/dist/security/index.js.map +1 -0
  79. package/dist/security/platform-security.d.ts +17 -0
  80. package/dist/security/platform-security.js +34 -0
  81. package/dist/security/platform-security.js.map +1 -0
  82. package/dist/security/platform-security.test.d.ts +1 -0
  83. package/dist/security/platform-security.test.js +92 -0
  84. package/dist/security/platform-security.test.js.map +1 -0
  85. package/dist/settings/index.d.ts +2 -0
  86. package/dist/settings/index.js +2 -0
  87. package/dist/settings/index.js.map +1 -0
  88. package/dist/settings/settings.d.ts +16 -0
  89. package/dist/settings/settings.js +73 -0
  90. package/dist/settings/settings.js.map +1 -0
  91. package/dist/settings/settings.test.d.ts +1 -0
  92. package/dist/settings/settings.test.js +103 -0
  93. package/dist/settings/settings.test.js.map +1 -0
  94. package/dist/utils/__tests__/paths.test.d.ts +1 -0
  95. package/dist/utils/__tests__/paths.test.js +22 -0
  96. package/dist/utils/__tests__/paths.test.js.map +1 -0
  97. package/dist/utils/__tests__/validation.test.d.ts +1 -0
  98. package/dist/utils/__tests__/validation.test.js +49 -0
  99. package/dist/utils/__tests__/validation.test.js.map +1 -0
  100. package/dist/utils/browser.d.ts +6 -0
  101. package/dist/utils/browser.js +37 -0
  102. package/dist/utils/browser.js.map +1 -0
  103. package/dist/utils/paths.d.ts +5 -0
  104. package/dist/utils/paths.js +13 -0
  105. package/dist/utils/paths.js.map +1 -0
  106. package/dist/utils/validation.d.ts +14 -0
  107. package/dist/utils/validation.js +34 -0
  108. package/dist/utils/validation.js.map +1 -0
  109. package/package.json +5 -2
  110. 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,7 @@
1
+ interface RemoveOptions {
2
+ global?: boolean;
3
+ local?: boolean;
4
+ force?: boolean;
5
+ }
6
+ export declare function removeCommand(skillName: string, opts: RemoveOptions): Promise<void>;
7
+ export {};
@@ -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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"}
@@ -1,5 +1,5 @@
1
1
  interface SubmitOptions {
2
- email?: string;
2
+ skill?: string;
3
3
  }
4
4
  export declare function submitCommand(source: string, opts: SubmitOptions): Promise<void>;
5
5
  export {};