vskill 1.0.21 → 1.1.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 +2 -0
- package/agents.json +1 -1
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.js +93 -30
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/check.d.ts +41 -4
- package/dist/commands/check.js +112 -25
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/cleanup.d.ts +0 -1
- package/dist/commands/cleanup.js +71 -80
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/remove.js +55 -65
- package/dist/commands/remove.js.map +1 -1
- package/dist/discovery/github-tree.js +56 -0
- package/dist/discovery/github-tree.js.map +1 -1
- package/dist/eval-server/plugin-cli-routes.js +10 -1
- package/dist/eval-server/plugin-cli-routes.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lockfile/local-root.d.ts +7 -0
- package/dist/lockfile/local-root.js +25 -0
- package/dist/lockfile/local-root.js.map +1 -0
- package/dist/marketplace/manifest-conflict.d.ts +63 -0
- package/dist/marketplace/manifest-conflict.js +181 -0
- package/dist/marketplace/manifest-conflict.js.map +1 -0
- package/dist/utils/claude-plugin.js +8 -0
- package/dist/utils/claude-plugin.js.map +1 -1
- package/package.json +9 -4
package/dist/commands/check.js
CHANGED
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Reads a skill's SKILL.md frontmatter and verifies that every declared
|
|
5
5
|
// dependency is satisfied before the skill runs:
|
|
6
|
-
// - mcpDeps[] → present in
|
|
6
|
+
// - mcpDeps[] → present in any known Claude config: project .mcp.json /
|
|
7
|
+
// .claude/mcp.json, ~/.claude/mcp.json, Claude Desktop, or
|
|
8
|
+
// ~/.claude.json (both top-level mcpServers and the
|
|
9
|
+
// per-project projects[<dir>].mcpServers map)
|
|
7
10
|
// - secrets[] → resolvable via env or .env.local (resolveCredential)
|
|
8
11
|
// - runtime.python → `python3 --version` ≥ declared minimum
|
|
9
12
|
// - runtime.pip → declared (informational; we don't auto-install)
|
|
@@ -58,30 +61,95 @@ export function findSkillDir(name, root) {
|
|
|
58
61
|
}
|
|
59
62
|
return null;
|
|
60
63
|
}
|
|
64
|
+
function hasServer(container, serverName) {
|
|
65
|
+
return (!!container &&
|
|
66
|
+
typeof container === "object" &&
|
|
67
|
+
serverName in container);
|
|
68
|
+
}
|
|
69
|
+
function readJson(path) {
|
|
70
|
+
if (!existsSync(path))
|
|
71
|
+
return null;
|
|
72
|
+
try {
|
|
73
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null; // malformed config is treated as "not configured here"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
61
79
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
80
|
+
* Locate a named MCP server across every known Claude config layout, reporting
|
|
81
|
+
* WHERE it was found.
|
|
82
|
+
*
|
|
83
|
+
* Claude Code stores servers in three different shapes, and a skill can legally
|
|
84
|
+
* depend on any of them:
|
|
85
|
+
* - <projectRoot>/.mcp.json → checked-in project servers
|
|
86
|
+
* - <projectRoot>/.claude/mcp.json → local project servers
|
|
87
|
+
* - ~/.claude.json mcpServers → user-global servers
|
|
88
|
+
* - ~/.claude.json projects[<dir>].mcpServers → per-project servers (the common case
|
|
89
|
+
* for anything added with `claude mcp add`)
|
|
90
|
+
* - ~/.claude/mcp.json → user-global servers
|
|
91
|
+
* - Claude Desktop's claude_desktop_config.json
|
|
92
|
+
*
|
|
93
|
+
* `homeDir` is injectable so tests can exercise the user-level layouts without
|
|
94
|
+
* touching the real home directory.
|
|
65
95
|
*/
|
|
66
|
-
export function
|
|
67
|
-
const
|
|
68
|
-
join(projectRoot, ".
|
|
69
|
-
join(
|
|
70
|
-
join(
|
|
96
|
+
export function locateMcpServer(serverName, projectRoot, homeDir = homedir()) {
|
|
97
|
+
const fileCandidates = [
|
|
98
|
+
{ path: join(projectRoot, ".mcp.json"), scope: "project-file" },
|
|
99
|
+
{ path: join(projectRoot, ".claude", "mcp.json"), scope: "project-file" },
|
|
100
|
+
{ path: join(homeDir, ".claude", "mcp.json"), scope: "user-global" },
|
|
101
|
+
{
|
|
102
|
+
path: join(homeDir, "Library", "Application Support", "Claude", "claude_desktop_config.json"),
|
|
103
|
+
scope: "desktop",
|
|
104
|
+
},
|
|
71
105
|
];
|
|
72
|
-
for (const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
106
|
+
for (const { path, scope } of fileCandidates) {
|
|
107
|
+
const cfg = readJson(path);
|
|
108
|
+
if (cfg && hasServer(cfg.mcpServers, serverName)) {
|
|
109
|
+
return { status: "configured", scope, source: path };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ~/.claude.json carries BOTH a global map and a per-project map.
|
|
113
|
+
const claudeJsonPath = join(homeDir, ".claude.json");
|
|
114
|
+
const claudeJson = readJson(claudeJsonPath);
|
|
115
|
+
if (claudeJson) {
|
|
116
|
+
if (hasServer(claudeJson.mcpServers, serverName)) {
|
|
117
|
+
return { status: "configured", scope: "user-global", source: claudeJsonPath };
|
|
118
|
+
}
|
|
119
|
+
const projects = claudeJson.projects;
|
|
120
|
+
if (projects && typeof projects === "object") {
|
|
121
|
+
const entries = Object.entries(projects);
|
|
122
|
+
// Prefer the project being checked; fall back to any other project so the
|
|
123
|
+
// user is told the server exists but is scoped elsewhere.
|
|
124
|
+
const resolvedRoot = resolve(projectRoot);
|
|
125
|
+
let fallback = null;
|
|
126
|
+
for (const [dir, value] of entries) {
|
|
127
|
+
if (!value || typeof value !== "object")
|
|
128
|
+
continue;
|
|
129
|
+
if (!hasServer(value.mcpServers, serverName))
|
|
130
|
+
continue;
|
|
131
|
+
const hit = {
|
|
132
|
+
status: "configured",
|
|
133
|
+
scope: "project-scoped",
|
|
134
|
+
source: claudeJsonPath,
|
|
135
|
+
projectPath: dir,
|
|
136
|
+
};
|
|
137
|
+
if (resolve(dir) === resolvedRoot)
|
|
138
|
+
return hit;
|
|
139
|
+
fallback ??= { ...hit, otherProject: true };
|
|
80
140
|
}
|
|
141
|
+
if (fallback)
|
|
142
|
+
return fallback;
|
|
81
143
|
}
|
|
82
|
-
catch { /* ignore parse error */ }
|
|
83
144
|
}
|
|
84
|
-
return "missing";
|
|
145
|
+
return { status: "missing" };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Back-compatible wrapper: "configured" if the server is registered anywhere,
|
|
149
|
+
* "missing" otherwise. Prefer `locateMcpServer` when the scope matters.
|
|
150
|
+
*/
|
|
151
|
+
export function checkMcpConfigured(serverName, projectRoot, homeDir = homedir()) {
|
|
152
|
+
return locateMcpServer(serverName, projectRoot, homeDir).status;
|
|
85
153
|
}
|
|
86
154
|
/**
|
|
87
155
|
* Compare a `python3 --version` output line ("Python 3.11.4") against a
|
|
@@ -123,12 +191,31 @@ export function buildCheckReport(skillName, projectRoot) {
|
|
|
123
191
|
}
|
|
124
192
|
const meta = buildSkillMetadata(dir, "source", projectRoot);
|
|
125
193
|
const mcps = (meta.mcpDeps ?? []).map((name) => {
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
194
|
+
const found = locateMcpServer(name, projectRoot);
|
|
195
|
+
if (found.status === "missing") {
|
|
196
|
+
return {
|
|
197
|
+
name,
|
|
198
|
+
status: "missing",
|
|
199
|
+
message: "not configured in any known Claude config",
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
if (found.scope === "project-scoped") {
|
|
203
|
+
return found.otherProject
|
|
204
|
+
? {
|
|
205
|
+
name,
|
|
206
|
+
status: "warning",
|
|
207
|
+
message: `configured, but project-scoped to ${found.projectPath} — not this project`,
|
|
208
|
+
}
|
|
209
|
+
: {
|
|
210
|
+
name,
|
|
211
|
+
status: "ok",
|
|
212
|
+
message: `configured (project-scoped: ${found.projectPath})`,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const where = found.scope === "user-global" ? "user global"
|
|
216
|
+
: found.scope === "desktop" ? "Claude Desktop"
|
|
217
|
+
: found.source ?? "project";
|
|
218
|
+
return { name, status: "ok", message: `configured (${where})` };
|
|
132
219
|
});
|
|
133
220
|
const secretStatuses = resolveAllCredentials(meta.secrets ?? [], dir);
|
|
134
221
|
const secrets = secretStatuses.map((s) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/cleanup.js
CHANGED
|
@@ -1,97 +1,88 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
import { existsSync, readdirSync, rmSync } from "node:fs";
|
|
1
|
+
// Reconcile missing plugin registrations without claiming ownership of
|
|
2
|
+
// plugins installed by Claude, Codex, another project, or another installer.
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
5
4
|
import { join } from "node:path";
|
|
6
5
|
import { homedir } from "node:os";
|
|
7
6
|
import { readLockfile } from "../lockfile/index.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { resolveLocalSkillRoot } from "../lockfile/local-root.js";
|
|
8
|
+
import { purgeStalePlugins } from "../settings/index.js";
|
|
9
|
+
import { claudePluginUninstall } from "../utils/claude-plugin.js";
|
|
10
10
|
import { bold, cyan, green, dim, yellow } from "../utils/output.js";
|
|
11
|
+
/** Absence from vskill.lock alone is not evidence of an orphan. */
|
|
12
|
+
function registeredPluginIds() {
|
|
13
|
+
const registry = join(homedir(), ".claude", "plugins", "installed_plugins.json");
|
|
14
|
+
if (!existsSync(registry))
|
|
15
|
+
return new Set();
|
|
16
|
+
try {
|
|
17
|
+
const data = JSON.parse(readFileSync(registry, "utf8"));
|
|
18
|
+
if (!data?.plugins || typeof data.plugins !== "object" || Array.isArray(data.plugins))
|
|
19
|
+
return null;
|
|
20
|
+
return new Set(Object.keys(data.plugins));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Unreadable ownership data must never become a removal plan.
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function hasCachedPlugin(id) {
|
|
28
|
+
const at = id.lastIndexOf("@");
|
|
29
|
+
const name = id.slice(0, at);
|
|
30
|
+
const marketplace = id.slice(at + 1);
|
|
31
|
+
const safe = /^[a-z0-9][\w.-]*$/i;
|
|
32
|
+
if (at < 1 || !safe.test(name) || !safe.test(marketplace))
|
|
33
|
+
return true;
|
|
34
|
+
return existsSync(join(homedir(), ".claude", "plugins", "cache", marketplace, name));
|
|
35
|
+
}
|
|
11
36
|
export async function cleanupCommand(opts = {}) {
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
console.log(
|
|
22
|
-
const userStale = purgeStalePlugins({ scope: "user" }, skills);
|
|
23
|
-
const projectStale = purgeStalePlugins({ scope: "project", projectDir: process.cwd() }, skills);
|
|
24
|
-
if (userStale.length === 0 && projectStale.length === 0) {
|
|
25
|
-
console.log(dim("No stale plugin entries found in settings.json."));
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
for (const id of userStale) {
|
|
29
|
-
console.log(` ${dim(">")} ${cyan(`claude plugin uninstall --scope user -- ${id}`)}`);
|
|
30
|
-
}
|
|
31
|
-
for (const id of projectStale) {
|
|
32
|
-
console.log(` ${dim(">")} ${cyan(`claude plugin uninstall --scope project -- ${id}`)}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
console.log(`\n${green(`${userStale.length}`)} stale entries removed from user scope, ${green(`${projectStale.length}`)} from project scope, ${dim(`${inSyncCount}`)} in-sync skills left untouched.`);
|
|
37
|
+
const projectRoot = resolveLocalSkillRoot();
|
|
38
|
+
const projectSkills = readLockfile(projectRoot)?.skills ?? {};
|
|
39
|
+
// Older global installs wrote ~/vskill.lock; current installs use ~/.agents.
|
|
40
|
+
const userSkills = {
|
|
41
|
+
...(readLockfile(homedir())?.skills ?? {}),
|
|
42
|
+
...(readLockfile(join(homedir(), ".agents"))?.skills ?? {}),
|
|
43
|
+
};
|
|
44
|
+
const registered = registeredPluginIds();
|
|
45
|
+
if (registered === null) {
|
|
46
|
+
console.log(yellow("Plugin registry unreadable. Cleanup skipped; no files or registrations changed."));
|
|
36
47
|
return;
|
|
37
48
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const userStaleRemoved = results.filter((r) => r.scope === "user" && r.ok).length;
|
|
46
|
-
const projectStaleRemoved = results.filter((r) => r.scope === "project" && r.ok).length;
|
|
47
|
-
if (results.length > 0) {
|
|
48
|
-
console.log(green(`Removing ${results.length} stale plugin${results.length === 1 ? "" : "s"}:\n`));
|
|
49
|
-
for (const { id, ok } of results) {
|
|
50
|
-
console.log(` ${dim(">")} ${id}${ok ? "" : ` ${dim("(skipped — not registered via CLI)")}`}`);
|
|
49
|
+
const plans = [];
|
|
50
|
+
for (const scope of ["user", "project"]) {
|
|
51
|
+
const settings = scope === "user" ? { scope } : { scope, projectDir: projectRoot };
|
|
52
|
+
const skills = scope === "user" ? userSkills : projectSkills;
|
|
53
|
+
for (const id of purgeStalePlugins(settings, skills)) {
|
|
54
|
+
if (!registered.has(id) && !hasCachedPlugin(id))
|
|
55
|
+
plans.push({ id, scope });
|
|
51
56
|
}
|
|
52
57
|
}
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
const inSyncCount = new Set([...Object.keys(projectSkills), ...Object.keys(userSkills)]).size;
|
|
59
|
+
if (opts.dryRun) {
|
|
60
|
+
console.log(bold("Dry-run — preview of missing plugin registration cleanup:\n"));
|
|
61
|
+
for (const { id, scope } of plans) {
|
|
62
|
+
console.log(` ${dim(">")} ${cyan(`claude plugin uninstall --scope ${scope} -- ${id}`)}`);
|
|
63
|
+
}
|
|
64
|
+
if (!plans.length)
|
|
65
|
+
console.log(dim("No stale plugin entries found in settings.json."));
|
|
66
|
+
const user = plans.filter((p) => p.scope === "user").length;
|
|
67
|
+
const project = plans.filter((p) => p.scope === "project").length;
|
|
68
|
+
console.log(`\n${user} user and ${project} project entries would be removed; no changes made. ${inSyncCount} in-sync skills left untouched.`);
|
|
69
|
+
return;
|
|
55
70
|
}
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
if (existsSync(cacheBase)) {
|
|
71
|
+
console.log(bold("Cleaning up missing plugin registrations...\n"));
|
|
72
|
+
const removed = { user: 0, project: 0 };
|
|
73
|
+
for (const { id, scope } of plans) {
|
|
60
74
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const lockEntry = skills[pluginName];
|
|
65
|
-
if (!lockEntry || lockEntry.marketplace !== marketplace) {
|
|
66
|
-
const orphanDir = join(mktDir, pluginName);
|
|
67
|
-
try {
|
|
68
|
-
rmSync(orphanDir, { recursive: true, force: true });
|
|
69
|
-
orphanedCount++;
|
|
70
|
-
console.log(dim(` Removed orphaned cache: ${marketplace}/${pluginName}`));
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// non-fatal
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
75
|
+
claudePluginUninstall(id, scope, scope === "project" ? { cwd: projectRoot } : undefined);
|
|
76
|
+
removed[scope]++;
|
|
77
|
+
console.log(dim(` Removed missing registration: ${id} (${scope})`));
|
|
78
78
|
}
|
|
79
79
|
catch {
|
|
80
|
-
|
|
80
|
+
console.log(yellow(` ${id} (${scope}) could not be uninstalled; registration retained.`));
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
console.log(`\n${green(`${userStaleRemoved}`)} stale entries removed from user scope, ${green(`${projectStaleRemoved}`)} from project scope, ${dim(`${inSyncCount}`)} in-sync skills left untouched.`);
|
|
88
|
-
// Show remaining enabled plugins
|
|
89
|
-
const remaining = listEnabledPlugins({ scope: "user" });
|
|
90
|
-
if (remaining.length > 0) {
|
|
91
|
-
console.log(dim(`\n${remaining.length} enabled plugin${remaining.length === 1 ? "" : "s"} remaining: ${remaining.join(", ")}`));
|
|
92
|
-
}
|
|
93
|
-
if (results.length > 0) {
|
|
94
|
-
console.log(yellow("\nRestart Claude Code to reload its plugin settings."));
|
|
95
|
-
}
|
|
83
|
+
// Cache is shared with other projects and installers. Only a targeted
|
|
84
|
+
// uninstall can establish ownership; blanket lockfile-based GC is unsafe.
|
|
85
|
+
console.log(`\n${green(String(removed.user))} stale entries removed from user scope, ${green(String(removed.project))} from project scope, ${inSyncCount} in-sync skills left untouched.`);
|
|
86
|
+
console.log(dim("Shared plugin caches preserved. Use a targeted uninstall to remove a plugin."));
|
|
96
87
|
}
|
|
97
88
|
//# sourceMappingURL=cleanup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
// vskill remove -- remove an installed skill from all agents
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
import { existsSync, rmSync } from "node:fs";
|
|
5
|
-
import { join } from "node:path";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
6
|
import { createInterface } from "node:readline";
|
|
7
7
|
import { resolveTilde } from "../utils/paths.js";
|
|
8
8
|
import { detectInstalledAgents } from "../agents/agents-registry.js";
|
|
9
9
|
import { readLockfile, removeSkillFromLock } from "../lockfile/index.js";
|
|
10
|
+
import { resolveLocalSkillRoot } from "../lockfile/local-root.js";
|
|
10
11
|
import { claudePluginUninstall } from "../utils/claude-plugin.js";
|
|
11
12
|
import { isPluginEnabled } from "../settings/index.js";
|
|
12
13
|
import { buildPerAgentReport, resolvePluginId, } from "../lib/skill-lifecycle.js";
|
|
@@ -24,8 +25,20 @@ async function confirm(message) {
|
|
|
24
25
|
}
|
|
25
26
|
export async function removeCommand(skillName, opts) {
|
|
26
27
|
// Read lockfile to check if skill exists
|
|
27
|
-
const
|
|
28
|
-
const
|
|
28
|
+
const globalAgentsRoot = resolveTilde("~/.agents");
|
|
29
|
+
const projectRoot = resolveLocalSkillRoot();
|
|
30
|
+
const lock = readLockfile(opts.global ? globalAgentsRoot : projectRoot);
|
|
31
|
+
const projectEntry = opts.global ? undefined : lock?.skills[skillName];
|
|
32
|
+
const globalLock = opts.local ? null : opts.global ? lock : readLockfile(globalAgentsRoot);
|
|
33
|
+
let globalEntry = globalLock?.skills[skillName];
|
|
34
|
+
let globalLockRoot = globalAgentsRoot;
|
|
35
|
+
if (!opts.local && !globalEntry) {
|
|
36
|
+
const legacyRoot = dirname(globalAgentsRoot);
|
|
37
|
+
globalEntry = readLockfile(legacyRoot)?.skills[skillName];
|
|
38
|
+
if (globalEntry)
|
|
39
|
+
globalLockRoot = legacyRoot;
|
|
40
|
+
}
|
|
41
|
+
const skillEntry = projectEntry ?? globalEntry;
|
|
29
42
|
if (!skillEntry && !opts.force) {
|
|
30
43
|
console.error(red(`Skill "${skillName}" not found in lockfile.\n`) +
|
|
31
44
|
dim("Use --force to attempt removal anyway."));
|
|
@@ -52,7 +65,7 @@ export async function removeCommand(skillName, opts) {
|
|
|
52
65
|
// Local dirs
|
|
53
66
|
paths.push({
|
|
54
67
|
label: `${agent.displayName} (local)`,
|
|
55
|
-
dir: join(
|
|
68
|
+
dir: join(projectRoot, agent.localSkillsDir, skillName),
|
|
56
69
|
});
|
|
57
70
|
}
|
|
58
71
|
if (!opts.local) {
|
|
@@ -78,31 +91,31 @@ export async function removeCommand(skillName, opts) {
|
|
|
78
91
|
}
|
|
79
92
|
}
|
|
80
93
|
// Update lockfile
|
|
81
|
-
if (
|
|
82
|
-
removeSkillFromLock(skillName);
|
|
94
|
+
if (projectEntry) {
|
|
95
|
+
removeSkillFromLock(skillName, projectRoot);
|
|
83
96
|
}
|
|
84
97
|
// F5: clean up the canonical .agents/skills/<name> payload that
|
|
85
98
|
// installSymlink() writes. The loop above only deletes per-agent
|
|
86
99
|
// copies/symlinks — without this, the canonical store (the symlink
|
|
87
100
|
// target) is stranded on disk forever.
|
|
88
|
-
|
|
89
|
-
if (!opts.local && readLockfile(globalAgentsRoot)?.skills[skillName]) {
|
|
101
|
+
if (!opts.local && globalEntry) {
|
|
90
102
|
// Global installs keep their lockfile at ~/.agents/vskill.lock; drop the
|
|
91
103
|
// entry there too since the loop above deleted the global agent files.
|
|
92
|
-
removeSkillFromLock(skillName,
|
|
104
|
+
removeSkillFromLock(skillName, globalLockRoot);
|
|
93
105
|
}
|
|
94
106
|
const canonicalTargets = [];
|
|
95
107
|
if (!opts.global) {
|
|
96
108
|
canonicalTargets.push({
|
|
97
109
|
label: "canonical store (project)",
|
|
98
|
-
dir: join(
|
|
110
|
+
dir: join(projectRoot, ".agents", "skills", skillName),
|
|
111
|
+
lockDir: projectRoot,
|
|
99
112
|
});
|
|
100
113
|
}
|
|
101
114
|
if (!opts.local) {
|
|
102
115
|
canonicalTargets.push({
|
|
103
116
|
label: "canonical store (global)",
|
|
104
117
|
dir: join(globalAgentsRoot, "skills", skillName),
|
|
105
|
-
lockDir:
|
|
118
|
+
lockDir: globalLockRoot,
|
|
106
119
|
});
|
|
107
120
|
}
|
|
108
121
|
for (const { label, dir, lockDir } of canonicalTargets) {
|
|
@@ -120,62 +133,39 @@ export async function removeCommand(skillName, opts) {
|
|
|
120
133
|
console.error(yellow(`Failed to remove ${label}: `) + dim(err.message));
|
|
121
134
|
}
|
|
122
135
|
}
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
let
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
/* settings.json missing -> treat as not enabled */
|
|
153
|
-
}
|
|
154
|
-
try {
|
|
155
|
-
scopeStates[1].enabled = isPluginEnabled(pluginId, {
|
|
156
|
-
scope: "project",
|
|
157
|
-
projectDir: cwd,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
catch {
|
|
161
|
-
/* settings.json missing -> treat as not enabled */
|
|
162
|
-
}
|
|
163
|
-
let anyAttempted = false;
|
|
164
|
-
let allOk = true;
|
|
165
|
-
for (const { s, enabled } of scopeStates) {
|
|
166
|
-
if (!enabled)
|
|
167
|
-
continue;
|
|
168
|
-
anyAttempted = true;
|
|
169
|
-
try {
|
|
170
|
-
claudePluginUninstall(pluginId, s, s === "project" ? { cwd } : undefined);
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
allOk = false;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
pluginUninstallOk = anyAttempted ? allOk : null;
|
|
136
|
+
// Resolve each scope independently: the same name can come from different
|
|
137
|
+
// marketplaces, or be a plain skill in one scope and a plugin in another.
|
|
138
|
+
const scope = opts.local ? "project" : opts.global ? "user" : skillEntry?.scope ?? "user";
|
|
139
|
+
const scopedEntries = [
|
|
140
|
+
{ scope: "user", entry: globalEntry ?? (projectEntry?.scope === "user" ? projectEntry : undefined), allowed: !opts.local },
|
|
141
|
+
{ scope: "project", entry: projectEntry, allowed: !opts.global },
|
|
142
|
+
];
|
|
143
|
+
const pluginIds = [];
|
|
144
|
+
let anyAttempted = false;
|
|
145
|
+
let allOk = true;
|
|
146
|
+
for (const target of scopedEntries) {
|
|
147
|
+
if (!target.allowed || !target.entry)
|
|
148
|
+
continue;
|
|
149
|
+
const id = resolvePluginId(skillName, target.entry);
|
|
150
|
+
if (!id)
|
|
151
|
+
continue;
|
|
152
|
+
pluginIds.push(id);
|
|
153
|
+
const cwd = projectRoot;
|
|
154
|
+
try {
|
|
155
|
+
const settings = target.scope === "user"
|
|
156
|
+
? { scope: target.scope }
|
|
157
|
+
: { scope: target.scope, projectDir: cwd };
|
|
158
|
+
if (!isPluginEnabled(id, settings))
|
|
159
|
+
continue;
|
|
160
|
+
anyAttempted = true;
|
|
161
|
+
claudePluginUninstall(id, target.scope, target.scope === "project" ? { cwd } : undefined);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
allOk = false;
|
|
177
165
|
}
|
|
178
166
|
}
|
|
167
|
+
const pluginId = pluginIds[0] ?? null;
|
|
168
|
+
const pluginUninstallOk = anyAttempted ? allOk : null;
|
|
179
169
|
const action = pluginUninstallOk === true ? "disabled" : "not-applicable";
|
|
180
170
|
const perAgent = buildPerAgentReport({
|
|
181
171
|
skill: skillName,
|