vskill 0.2.25 → 0.2.26
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/commands/add.js +63 -9
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.test.js +12 -9
- package/dist/commands/add.test.js.map +1 -1
- package/dist/marketplace/index.d.ts +2 -2
- package/dist/marketplace/index.js +1 -1
- package/dist/marketplace/index.js.map +1 -1
- package/dist/marketplace/marketplace.d.ts +16 -0
- package/dist/marketplace/marketplace.js +37 -0
- package/dist/marketplace/marketplace.js.map +1 -1
- package/dist/marketplace/marketplace.test.js +51 -1
- package/dist/marketplace/marketplace.test.js.map +1 -1
- package/dist/utils/claude-cli.d.ts +16 -2
- package/dist/utils/claude-cli.js +37 -2
- package/dist/utils/claude-cli.js.map +1 -1
- package/dist/utils/claude-cli.test.js +53 -11
- package/dist/utils/claude-cli.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
* Check if `claude` CLI binary is available in PATH.
|
|
3
3
|
*/
|
|
4
4
|
export declare function isClaudeCliAvailable(): boolean;
|
|
5
|
+
export interface RegisterResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
stderr?: string;
|
|
8
|
+
}
|
|
5
9
|
/**
|
|
6
10
|
* Register a Claude Code plugin marketplace.
|
|
7
11
|
*
|
|
@@ -10,9 +14,19 @@ export declare function isClaudeCliAvailable(): boolean;
|
|
|
10
14
|
* bug where a temp directory is deleted after registration.
|
|
11
15
|
*
|
|
12
16
|
* @param source - Git URL (e.g. "https://github.com/owner/repo") or absolute path
|
|
13
|
-
* @returns
|
|
17
|
+
* @returns RegisterResult with success flag and optional stderr on failure
|
|
18
|
+
*/
|
|
19
|
+
export declare function registerMarketplace(source: string): RegisterResult;
|
|
20
|
+
/**
|
|
21
|
+
* Deregister a Claude Code plugin marketplace.
|
|
22
|
+
* Used to clean up stale registrations before retrying.
|
|
23
|
+
*/
|
|
24
|
+
export declare function deregisterMarketplace(source: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* List registered Claude Code plugin marketplaces.
|
|
27
|
+
* Returns marketplace source paths/URLs, or empty array on failure.
|
|
14
28
|
*/
|
|
15
|
-
export declare function
|
|
29
|
+
export declare function listMarketplaces(): string[];
|
|
16
30
|
/**
|
|
17
31
|
* Install a plugin from a registered marketplace.
|
|
18
32
|
*
|
package/dist/utils/claude-cli.js
CHANGED
|
@@ -19,20 +19,55 @@ export function isClaudeCliAvailable() {
|
|
|
19
19
|
* bug where a temp directory is deleted after registration.
|
|
20
20
|
*
|
|
21
21
|
* @param source - Git URL (e.g. "https://github.com/owner/repo") or absolute path
|
|
22
|
-
* @returns
|
|
22
|
+
* @returns RegisterResult with success flag and optional stderr on failure
|
|
23
23
|
*/
|
|
24
24
|
export function registerMarketplace(source) {
|
|
25
25
|
try {
|
|
26
26
|
execSync(`claude plugin marketplace add "${source}"`, {
|
|
27
|
-
stdio: "
|
|
27
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
28
28
|
timeout: 15_000,
|
|
29
29
|
});
|
|
30
|
+
return { success: true };
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const stderr = err?.stderr?.toString().trim();
|
|
34
|
+
return { success: false, stderr: stderr || err.message };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Deregister a Claude Code plugin marketplace.
|
|
39
|
+
* Used to clean up stale registrations before retrying.
|
|
40
|
+
*/
|
|
41
|
+
export function deregisterMarketplace(source) {
|
|
42
|
+
try {
|
|
43
|
+
execSync(`claude plugin marketplace remove "${source}"`, {
|
|
44
|
+
stdio: "ignore",
|
|
45
|
+
timeout: 10_000,
|
|
46
|
+
});
|
|
30
47
|
return true;
|
|
31
48
|
}
|
|
32
49
|
catch {
|
|
33
50
|
return false;
|
|
34
51
|
}
|
|
35
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* List registered Claude Code plugin marketplaces.
|
|
55
|
+
* Returns marketplace source paths/URLs, or empty array on failure.
|
|
56
|
+
*/
|
|
57
|
+
export function listMarketplaces() {
|
|
58
|
+
try {
|
|
59
|
+
const output = execSync("claude plugin marketplace list", {
|
|
60
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
61
|
+
timeout: 10_000,
|
|
62
|
+
}).toString().trim();
|
|
63
|
+
if (!output)
|
|
64
|
+
return [];
|
|
65
|
+
return output.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
36
71
|
/**
|
|
37
72
|
* Install a plugin from a registered marketplace.
|
|
38
73
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../src/utils/claude-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../src/utils/claude-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ const mockExecSync = vi.fn();
|
|
|
3
3
|
vi.mock("node:child_process", () => ({
|
|
4
4
|
execSync: (...args) => mockExecSync(...args),
|
|
5
5
|
}));
|
|
6
|
-
const { isClaudeCliAvailable, registerMarketplace, installNativePlugin, uninstallNativePlugin, } = await import("./claude-cli.js");
|
|
6
|
+
const { isClaudeCliAvailable, registerMarketplace, deregisterMarketplace, listMarketplaces, installNativePlugin, uninstallNativePlugin, } = await import("./claude-cli.js");
|
|
7
7
|
beforeEach(() => {
|
|
8
8
|
vi.clearAllMocks();
|
|
9
9
|
});
|
|
@@ -30,16 +30,25 @@ describe("isClaudeCliAvailable", () => {
|
|
|
30
30
|
// registerMarketplace
|
|
31
31
|
// ---------------------------------------------------------------------------
|
|
32
32
|
describe("registerMarketplace", () => {
|
|
33
|
-
it("
|
|
33
|
+
it("returns success result with correct path", () => {
|
|
34
34
|
mockExecSync.mockReturnValue(Buffer.from(""));
|
|
35
|
-
|
|
36
|
-
expect(
|
|
35
|
+
const result = registerMarketplace("/path/to/repo");
|
|
36
|
+
expect(result).toEqual({ success: true });
|
|
37
|
+
expect(mockExecSync).toHaveBeenCalledWith('claude plugin marketplace add "/path/to/repo"', { stdio: ["pipe", "pipe", "pipe"], timeout: 15_000 });
|
|
37
38
|
});
|
|
38
|
-
it("returns
|
|
39
|
+
it("returns failure result with stderr on error", () => {
|
|
40
|
+
const err = new Error("failed");
|
|
41
|
+
err.stderr = Buffer.from("marketplace not found");
|
|
42
|
+
mockExecSync.mockImplementation(() => { throw err; });
|
|
43
|
+
const result = registerMarketplace("/path/to/repo");
|
|
44
|
+
expect(result).toEqual({ success: false, stderr: "marketplace not found" });
|
|
45
|
+
});
|
|
46
|
+
it("returns failure with error message when no stderr", () => {
|
|
39
47
|
mockExecSync.mockImplementation(() => {
|
|
40
|
-
throw new Error("failed");
|
|
48
|
+
throw new Error("command failed");
|
|
41
49
|
});
|
|
42
|
-
|
|
50
|
+
const result = registerMarketplace("/path/to/repo");
|
|
51
|
+
expect(result).toEqual({ success: false, stderr: "command failed" });
|
|
43
52
|
});
|
|
44
53
|
it("quotes paths with spaces", () => {
|
|
45
54
|
mockExecSync.mockReturnValue(Buffer.from(""));
|
|
@@ -48,13 +57,46 @@ describe("registerMarketplace", () => {
|
|
|
48
57
|
});
|
|
49
58
|
it("accepts GitHub HTTPS URL as source", () => {
|
|
50
59
|
mockExecSync.mockReturnValue(Buffer.from(""));
|
|
51
|
-
|
|
52
|
-
expect(
|
|
60
|
+
const result = registerMarketplace("https://github.com/owner/repo");
|
|
61
|
+
expect(result).toEqual({ success: true });
|
|
62
|
+
expect(mockExecSync).toHaveBeenCalledWith('claude plugin marketplace add "https://github.com/owner/repo"', { stdio: ["pipe", "pipe", "pipe"], timeout: 15_000 });
|
|
53
63
|
});
|
|
54
64
|
it("accepts GitHub owner/repo shorthand as source", () => {
|
|
55
65
|
mockExecSync.mockReturnValue(Buffer.from(""));
|
|
56
|
-
|
|
57
|
-
expect(
|
|
66
|
+
const result = registerMarketplace("owner/repo");
|
|
67
|
+
expect(result).toEqual({ success: true });
|
|
68
|
+
expect(mockExecSync).toHaveBeenCalledWith('claude plugin marketplace add "owner/repo"', { stdio: ["pipe", "pipe", "pipe"], timeout: 15_000 });
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// deregisterMarketplace
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
describe("deregisterMarketplace", () => {
|
|
75
|
+
it("calls claude plugin marketplace remove", () => {
|
|
76
|
+
mockExecSync.mockReturnValue(Buffer.from(""));
|
|
77
|
+
expect(deregisterMarketplace("https://github.com/owner/repo")).toBe(true);
|
|
78
|
+
expect(mockExecSync).toHaveBeenCalledWith('claude plugin marketplace remove "https://github.com/owner/repo"', { stdio: "ignore", timeout: 10_000 });
|
|
79
|
+
});
|
|
80
|
+
it("returns false on failure", () => {
|
|
81
|
+
mockExecSync.mockImplementation(() => { throw new Error("fail"); });
|
|
82
|
+
expect(deregisterMarketplace("https://github.com/owner/repo")).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// listMarketplaces
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
describe("listMarketplaces", () => {
|
|
89
|
+
it("parses marketplace list output", () => {
|
|
90
|
+
mockExecSync.mockReturnValue(Buffer.from("https://github.com/a/b\nhttps://github.com/c/d\n"));
|
|
91
|
+
expect(listMarketplaces()).toEqual(["https://github.com/a/b", "https://github.com/c/d"]);
|
|
92
|
+
});
|
|
93
|
+
it("returns empty array on failure", () => {
|
|
94
|
+
mockExecSync.mockImplementation(() => { throw new Error("fail"); });
|
|
95
|
+
expect(listMarketplaces()).toEqual([]);
|
|
96
|
+
});
|
|
97
|
+
it("returns empty array for empty output", () => {
|
|
98
|
+
mockExecSync.mockReturnValue(Buffer.from(""));
|
|
99
|
+
expect(listMarketplaces()).toEqual([]);
|
|
58
100
|
});
|
|
59
101
|
});
|
|
60
102
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-cli.test.js","sourceRoot":"","sources":["../../src/utils/claude-cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7B,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACxD,CAAC,CAAC,CAAC;AAEJ,MAAM,EACJ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEpC,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAC9E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;YAC5D,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAC9E,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"claude-cli.test.js","sourceRoot":"","sources":["../../src/utils/claude-cli.test.ts"],"names":[],"mappings":"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"}
|