vskill 0.5.88 → 0.5.89
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 +28 -0
- package/agents.json +124 -0
- package/dist/agents/agents-registry.d.ts +29 -5
- package/dist/agents/agents-registry.js +133 -12
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/commands/add.d.ts +2 -16
- package/dist/commands/add.js +3 -89
- package/dist/commands/add.js.map +1 -1
- package/dist/eval/plugin-scanner.d.ts +14 -0
- package/dist/eval/plugin-scanner.js +237 -0
- package/dist/eval/plugin-scanner.js.map +1 -0
- package/dist/eval/skill-scanner.d.ts +18 -0
- package/dist/eval/skill-scanner.js +82 -9
- package/dist/eval/skill-scanner.js.map +1 -1
- package/dist/eval/standalone-skill-scanner.d.ts +7 -0
- package/dist/eval/standalone-skill-scanner.js +76 -0
- package/dist/eval/standalone-skill-scanner.js.map +1 -0
- package/dist/eval-server/api-routes.d.ts +1 -0
- package/dist/eval-server/api-routes.js +12 -1
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-server/eval-server.d.ts +9 -1
- package/dist/eval-server/eval-server.js +51 -1
- package/dist/eval-server/eval-server.js.map +1 -1
- package/dist/eval-server/workspace-routes.d.ts +14 -0
- package/dist/eval-server/workspace-routes.js +108 -0
- package/dist/eval-server/workspace-routes.js.map +1 -0
- package/dist/eval-server/workspace-store.d.ts +36 -0
- package/dist/eval-server/workspace-store.js +144 -0
- package/dist/eval-server/workspace-store.js.map +1 -0
- package/dist/eval-ui/assets/{CommandPalette-B75Qr7kR.js → CommandPalette-DrPj2MN0.js} +1 -1
- package/dist/eval-ui/assets/{UpdateDropdown-C9KlPZnX.js → UpdateDropdown-CXwYZ5VE.js} +1 -1
- package/dist/eval-ui/assets/index-D5A8Jbqy.css +1 -0
- package/dist/eval-ui/assets/index-Dg6Nwzn_.js +90 -0
- package/dist/eval-ui/index.html +2 -2
- package/dist/shared/copy-plugin-filtered.d.ts +13 -0
- package/dist/shared/copy-plugin-filtered.js +97 -0
- package/dist/shared/copy-plugin-filtered.js.map +1 -0
- package/dist/studio/lib/ops-log.d.ts +10 -0
- package/dist/studio/lib/ops-log.js +99 -0
- package/dist/studio/lib/ops-log.js.map +1 -0
- package/dist/studio/lib/provenance.d.ts +4 -0
- package/dist/studio/lib/provenance.js +41 -0
- package/dist/studio/lib/provenance.js.map +1 -0
- package/dist/studio/lib/scope-transfer.d.ts +28 -0
- package/dist/studio/lib/scope-transfer.js +112 -0
- package/dist/studio/lib/scope-transfer.js.map +1 -0
- package/dist/studio/routes/index.d.ts +2 -0
- package/dist/studio/routes/index.js +19 -0
- package/dist/studio/routes/index.js.map +1 -0
- package/dist/studio/routes/ops.d.ts +2 -0
- package/dist/studio/routes/ops.js +63 -0
- package/dist/studio/routes/ops.js.map +1 -0
- package/dist/studio/routes/promote.d.ts +2 -0
- package/dist/studio/routes/promote.js +118 -0
- package/dist/studio/routes/promote.js.map +1 -0
- package/dist/studio/routes/revert.d.ts +2 -0
- package/dist/studio/routes/revert.js +97 -0
- package/dist/studio/routes/revert.js.map +1 -0
- package/dist/studio/routes/test-install.d.ts +2 -0
- package/dist/studio/routes/test-install.js +102 -0
- package/dist/studio/routes/test-install.js.map +1 -0
- package/dist/studio/types.d.ts +48 -0
- package/dist/studio/types.js +11 -0
- package/dist/studio/types.js.map +1 -0
- package/dist/utils/agent-filter.js +9 -1
- package/dist/utils/agent-filter.js.map +1 -1
- package/package.json +4 -1
- package/scripts/preuninstall.cjs +9 -2
- package/dist/eval-ui/assets/index-C4XKAX1s.css +0 -1
- package/dist/eval-ui/assets/index-D6QZl0bI.js +0 -89
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// 0698 T-004/T-005: Claude Code plugin scanners.
|
|
3
|
+
//
|
|
4
|
+
// T-004 scanInstalledPluginSkills — walks
|
|
5
|
+
// <home>/.claude/plugins/cache/<marketplace>/<plugin>/<version>/skills/<skill>/SKILL.md
|
|
6
|
+
// and emits SkillInfo with scope="installed" / scopeV2="available-plugin".
|
|
7
|
+
// When multiple versions of the same plugin coexist, the highest semver wins.
|
|
8
|
+
//
|
|
9
|
+
// T-005 scanAuthoredPluginSkills — walks a project root up to depth 4 for
|
|
10
|
+
// **/.claude-plugin/plugin.json, then reads sibling skills/<skill>/SKILL.md,
|
|
11
|
+
// emitting scope="own" / scopeV2="authoring-plugin".
|
|
12
|
+
//
|
|
13
|
+
// Both are Claude Code ONLY — non-CC agents receive [].
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
import { existsSync, readdirSync, statSync, readFileSync } from "node:fs";
|
|
16
|
+
import { join, basename, dirname } from "node:path";
|
|
17
|
+
const CLAUDE_CODE_AGENT_ID = "claude-code";
|
|
18
|
+
// Folders we never descend into when globbing for authored-plugin manifests.
|
|
19
|
+
const EXCLUDE_DIRS = new Set([
|
|
20
|
+
"node_modules",
|
|
21
|
+
".git",
|
|
22
|
+
"dist",
|
|
23
|
+
"build",
|
|
24
|
+
".next",
|
|
25
|
+
".turbo",
|
|
26
|
+
".vercel",
|
|
27
|
+
"coverage",
|
|
28
|
+
".specweave",
|
|
29
|
+
]);
|
|
30
|
+
export function scanInstalledPluginSkills(opts) {
|
|
31
|
+
if (opts.agentId !== CLAUDE_CODE_AGENT_ID)
|
|
32
|
+
return [];
|
|
33
|
+
const home = opts.home ?? process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
34
|
+
if (!home)
|
|
35
|
+
return [];
|
|
36
|
+
const cacheDir = join(home, ".claude", "plugins", "cache");
|
|
37
|
+
if (!existsSync(cacheDir))
|
|
38
|
+
return [];
|
|
39
|
+
const results = [];
|
|
40
|
+
const marketplaces = safeReaddir(cacheDir);
|
|
41
|
+
for (const marketplace of marketplaces) {
|
|
42
|
+
const marketplaceDir = join(cacheDir, marketplace);
|
|
43
|
+
if (!isDir(marketplaceDir))
|
|
44
|
+
continue;
|
|
45
|
+
const plugins = safeReaddir(marketplaceDir);
|
|
46
|
+
for (const pluginName of plugins) {
|
|
47
|
+
const pluginDir = join(marketplaceDir, pluginName);
|
|
48
|
+
if (!isDir(pluginDir))
|
|
49
|
+
continue;
|
|
50
|
+
// Find version dirs — pick highest semver.
|
|
51
|
+
const versions = safeReaddir(pluginDir).filter((v) => isDir(join(pluginDir, v)));
|
|
52
|
+
if (versions.length === 0)
|
|
53
|
+
continue;
|
|
54
|
+
const winner = pickHighestSemver(versions);
|
|
55
|
+
const versionDir = join(pluginDir, winner);
|
|
56
|
+
const skillsDir = join(versionDir, "skills");
|
|
57
|
+
if (!existsSync(skillsDir) || !isDir(skillsDir))
|
|
58
|
+
continue;
|
|
59
|
+
for (const skillName of safeReaddir(skillsDir)) {
|
|
60
|
+
const skillDir = join(skillsDir, skillName);
|
|
61
|
+
const skillMd = join(skillDir, "SKILL.md");
|
|
62
|
+
if (!existsSync(skillMd))
|
|
63
|
+
continue;
|
|
64
|
+
results.push({
|
|
65
|
+
plugin: pluginName,
|
|
66
|
+
skill: skillName,
|
|
67
|
+
dir: skillDir,
|
|
68
|
+
hasEvals: false,
|
|
69
|
+
hasBenchmark: false,
|
|
70
|
+
origin: "installed",
|
|
71
|
+
scope: "installed",
|
|
72
|
+
scopeV2: "available-plugin",
|
|
73
|
+
group: "available",
|
|
74
|
+
source: "plugin",
|
|
75
|
+
precedenceRank: -1,
|
|
76
|
+
installMethod: "symlinked",
|
|
77
|
+
sourceAgent: CLAUDE_CODE_AGENT_ID,
|
|
78
|
+
pluginName,
|
|
79
|
+
pluginNamespace: `${pluginName}:${skillName}`,
|
|
80
|
+
pluginMarketplace: marketplace,
|
|
81
|
+
pluginVersion: winner,
|
|
82
|
+
pluginManifestPath: maybePluginManifestPath(versionDir),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
export function scanAuthoredPluginSkills(opts) {
|
|
90
|
+
if (opts.agentId !== CLAUDE_CODE_AGENT_ID)
|
|
91
|
+
return [];
|
|
92
|
+
const root = opts.projectRoot;
|
|
93
|
+
if (!existsSync(root))
|
|
94
|
+
return [];
|
|
95
|
+
// Default depth 4: <root>/a/b/c/<plugin-name>/.claude-plugin/plugin.json
|
|
96
|
+
// where depth counts segments between root and the plugin-name folder.
|
|
97
|
+
const maxDepth = opts.maxDepth ?? 4;
|
|
98
|
+
const results = [];
|
|
99
|
+
const manifests = findPluginManifests(root, maxDepth);
|
|
100
|
+
for (const manifestPath of manifests) {
|
|
101
|
+
// manifestPath = <...>/<plugin-name>/.claude-plugin/plugin.json
|
|
102
|
+
const pluginSourceDir = dirname(dirname(manifestPath));
|
|
103
|
+
const pluginName = basename(pluginSourceDir);
|
|
104
|
+
const skillsDir = join(pluginSourceDir, "skills");
|
|
105
|
+
if (!existsSync(skillsDir) || !isDir(skillsDir))
|
|
106
|
+
continue;
|
|
107
|
+
for (const skillName of safeReaddir(skillsDir)) {
|
|
108
|
+
const skillDir = join(skillsDir, skillName);
|
|
109
|
+
const skillMd = join(skillDir, "SKILL.md");
|
|
110
|
+
if (!existsSync(skillMd))
|
|
111
|
+
continue;
|
|
112
|
+
results.push({
|
|
113
|
+
plugin: pluginName,
|
|
114
|
+
skill: skillName,
|
|
115
|
+
dir: skillDir,
|
|
116
|
+
hasEvals: false,
|
|
117
|
+
hasBenchmark: false,
|
|
118
|
+
origin: "source",
|
|
119
|
+
scope: "own",
|
|
120
|
+
scopeV2: "authoring-plugin",
|
|
121
|
+
group: "authoring",
|
|
122
|
+
source: "plugin",
|
|
123
|
+
precedenceRank: -1,
|
|
124
|
+
installMethod: "authored",
|
|
125
|
+
sourceAgent: null,
|
|
126
|
+
pluginName,
|
|
127
|
+
pluginNamespace: `${pluginName}:${skillName}`,
|
|
128
|
+
pluginMarketplace: null,
|
|
129
|
+
pluginVersion: extractVersionFromManifest(manifestPath),
|
|
130
|
+
pluginManifestPath: manifestPath,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
136
|
+
// -----------------------------------------------------------------------------
|
|
137
|
+
// Helpers
|
|
138
|
+
// -----------------------------------------------------------------------------
|
|
139
|
+
function isDir(p) {
|
|
140
|
+
try {
|
|
141
|
+
return statSync(p).isDirectory();
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function safeReaddir(p) {
|
|
148
|
+
try {
|
|
149
|
+
return readdirSync(p);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Walk `root` up to `maxDepth` levels looking for `.claude-plugin/plugin.json`.
|
|
157
|
+
* `maxDepth` counts segments between root and the PLUGIN folder (the one that
|
|
158
|
+
* contains `.claude-plugin/`). Folders in `EXCLUDE_DIRS` are skipped.
|
|
159
|
+
* Returns absolute paths to each found `plugin.json`.
|
|
160
|
+
*/
|
|
161
|
+
function findPluginManifests(root, maxDepth) {
|
|
162
|
+
const out = [];
|
|
163
|
+
function walk(dir, depth) {
|
|
164
|
+
// First, if this directory IS a plugin source, record it.
|
|
165
|
+
const manifestPath = join(dir, ".claude-plugin", "plugin.json");
|
|
166
|
+
if (existsSync(manifestPath)) {
|
|
167
|
+
out.push(manifestPath);
|
|
168
|
+
// Don't descend further inside a plugin source — its skills belong to it.
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (depth >= maxDepth)
|
|
172
|
+
return;
|
|
173
|
+
let entries;
|
|
174
|
+
try {
|
|
175
|
+
entries = readdirSync(dir);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
for (const name of entries) {
|
|
181
|
+
if (EXCLUDE_DIRS.has(name))
|
|
182
|
+
continue;
|
|
183
|
+
if (name.startsWith(".") && name !== ".claude-plugin") {
|
|
184
|
+
// skip hidden dirs except the one we explicitly care about at this level
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const childPath = join(dir, name);
|
|
188
|
+
if (!isDir(childPath))
|
|
189
|
+
continue;
|
|
190
|
+
walk(childPath, depth + 1);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
walk(root, 0);
|
|
194
|
+
return out;
|
|
195
|
+
}
|
|
196
|
+
function maybePluginManifestPath(versionDir) {
|
|
197
|
+
const manifest = join(versionDir, ".claude-plugin", "plugin.json");
|
|
198
|
+
return existsSync(manifest) ? manifest : null;
|
|
199
|
+
}
|
|
200
|
+
function extractVersionFromManifest(manifestPath) {
|
|
201
|
+
try {
|
|
202
|
+
const raw = readFileSync(manifestPath, "utf8");
|
|
203
|
+
const data = JSON.parse(raw);
|
|
204
|
+
return typeof data.version === "string" ? data.version : null;
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Pick the highest semver-like version from a list of directory names.
|
|
212
|
+
* Falls back to string-sort descending if parsing fails on any entry.
|
|
213
|
+
*/
|
|
214
|
+
function pickHighestSemver(versions) {
|
|
215
|
+
const parsed = versions
|
|
216
|
+
.map((v) => ({ v, parts: parseSemverTuple(v) }))
|
|
217
|
+
.filter((x) => x.parts !== null);
|
|
218
|
+
if (parsed.length === 0) {
|
|
219
|
+
// Fallback: lexicographic descending
|
|
220
|
+
return [...versions].sort().reverse()[0];
|
|
221
|
+
}
|
|
222
|
+
parsed.sort((a, b) => {
|
|
223
|
+
for (let i = 0; i < 3; i++) {
|
|
224
|
+
if (a.parts[i] !== b.parts[i])
|
|
225
|
+
return b.parts[i] - a.parts[i];
|
|
226
|
+
}
|
|
227
|
+
return 0;
|
|
228
|
+
});
|
|
229
|
+
return parsed[0].v;
|
|
230
|
+
}
|
|
231
|
+
function parseSemverTuple(v) {
|
|
232
|
+
const m = v.match(/^(\d+)\.(\d+)\.(\d+)/);
|
|
233
|
+
if (!m)
|
|
234
|
+
return null;
|
|
235
|
+
return [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=plugin-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-scanner.js","sourceRoot":"","sources":["../../src/eval/plugin-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/** Scope classification — where a skill lives in the three-part world. */
|
|
2
2
|
export type SkillScope = "own" | "installed" | "global";
|
|
3
|
+
/**
|
|
4
|
+
* 0698 T-001: new scope vocabulary aligned with Anthropic docs.
|
|
5
|
+
* Coexists with legacy `SkillScope`; api.ts boundary normalizer translates.
|
|
6
|
+
*/
|
|
7
|
+
export type SkillScopeV2 = "available-project" | "available-personal" | "available-plugin" | "authoring-project" | "authoring-plugin";
|
|
8
|
+
export type SkillGroup = "available" | "authoring";
|
|
9
|
+
export type SkillSource = "project" | "personal" | "plugin";
|
|
3
10
|
/** How the skill ended up on disk: authored in-project, copied from a cache,
|
|
4
11
|
* or symlinked to a canonical source (typically a plugin cache). */
|
|
5
12
|
export type SkillInstallMethod = "authored" | "copied" | "symlinked";
|
|
@@ -21,6 +28,17 @@ export interface SkillInfo {
|
|
|
21
28
|
/** 0686 sourceAgent — the registry agent id whose scope owns this skill.
|
|
22
29
|
* null for own-scope skills. */
|
|
23
30
|
sourceAgent?: string | null;
|
|
31
|
+
scopeV2?: SkillScopeV2;
|
|
32
|
+
group?: SkillGroup;
|
|
33
|
+
source?: SkillSource;
|
|
34
|
+
precedenceRank?: number;
|
|
35
|
+
shadowedBy?: SkillScopeV2 | null;
|
|
36
|
+
/** 0698 T-004/T-005 plugin metadata — set when source === "plugin". */
|
|
37
|
+
pluginName?: string | null;
|
|
38
|
+
pluginNamespace?: string | null;
|
|
39
|
+
pluginMarketplace?: string | null;
|
|
40
|
+
pluginManifestPath?: string | null;
|
|
41
|
+
pluginVersion?: string | null;
|
|
24
42
|
}
|
|
25
43
|
/**
|
|
26
44
|
* Classify a skill's origin based on its filesystem path relative to root.
|
|
@@ -13,18 +13,90 @@
|
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
14
|
import { readdirSync, existsSync, lstatSync, realpathSync, statSync } from "node:fs";
|
|
15
15
|
import { join, basename, dirname, relative, sep } from "node:path";
|
|
16
|
-
import { AGENTS_REGISTRY } from "../agents/agents-registry.js";
|
|
16
|
+
import { AGENTS_REGISTRY, NON_AGENT_CONFIG_DIRS, } from "../agents/agents-registry.js";
|
|
17
17
|
import { resolveGlobalSkillsDir } from "./path-utils.js";
|
|
18
|
+
/** 0698 T-002: translate legacy scope → new 5-value vocabulary. */
|
|
19
|
+
function legacyToV2(legacy) {
|
|
20
|
+
if (legacy === "installed")
|
|
21
|
+
return "available-project";
|
|
22
|
+
if (legacy === "global")
|
|
23
|
+
return "available-personal";
|
|
24
|
+
return "authoring-project"; // "own"
|
|
25
|
+
}
|
|
26
|
+
function groupFor(v2) {
|
|
27
|
+
return v2.startsWith("available-") ? "available" : "authoring";
|
|
28
|
+
}
|
|
29
|
+
function sourceFor(v2) {
|
|
30
|
+
return v2.slice(v2.indexOf("-") + 1);
|
|
31
|
+
}
|
|
32
|
+
function precedenceRankFor(v2) {
|
|
33
|
+
// Anthropic precedence: personal > project. Plugins orthogonal (-1).
|
|
34
|
+
// Lower wins within AVAILABLE.
|
|
35
|
+
if (v2 === "available-personal")
|
|
36
|
+
return 1;
|
|
37
|
+
if (v2 === "available-project")
|
|
38
|
+
return 2;
|
|
39
|
+
if (v2 === "available-plugin")
|
|
40
|
+
return -1;
|
|
41
|
+
if (v2 === "authoring-plugin")
|
|
42
|
+
return -1;
|
|
43
|
+
return 3; // authoring-project (no shadowing competition)
|
|
44
|
+
}
|
|
45
|
+
/** 0698 T-002: enrich a list of scanned skills with scopeV2/group/source/
|
|
46
|
+
* precedenceRank, then compute shadowing within AVAILABLE (same name collisions).
|
|
47
|
+
* Plugin-scope skills are orthogonal (never shadowed, never shadow).
|
|
48
|
+
* AUTHORING skills never get a shadowedBy.
|
|
49
|
+
*/
|
|
50
|
+
function enrichAndComputePrecedence(skills) {
|
|
51
|
+
// Phase 1: fill scopeV2, group, source, precedenceRank.
|
|
52
|
+
const enriched = skills.map((s) => {
|
|
53
|
+
const legacy = s.scope ?? "own";
|
|
54
|
+
const scopeV2 = legacyToV2(legacy);
|
|
55
|
+
return {
|
|
56
|
+
...s,
|
|
57
|
+
scopeV2,
|
|
58
|
+
group: groupFor(scopeV2),
|
|
59
|
+
source: sourceFor(scopeV2),
|
|
60
|
+
precedenceRank: precedenceRankFor(scopeV2),
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
// Phase 2: group AVAILABLE non-plugin entries by skill name, pick a winner,
|
|
64
|
+
// set shadowedBy on losers / null on winners.
|
|
65
|
+
const availableByName = new Map();
|
|
66
|
+
for (const s of enriched) {
|
|
67
|
+
if (s.group !== "available")
|
|
68
|
+
continue;
|
|
69
|
+
if (s.source === "plugin")
|
|
70
|
+
continue; // orthogonal
|
|
71
|
+
const bucket = availableByName.get(s.skill) ?? [];
|
|
72
|
+
bucket.push(s);
|
|
73
|
+
availableByName.set(s.skill, bucket);
|
|
74
|
+
}
|
|
75
|
+
for (const group of availableByName.values()) {
|
|
76
|
+
// Lowest precedenceRank wins.
|
|
77
|
+
const sorted = [...group].sort((a, b) => (a.precedenceRank ?? 99) - (b.precedenceRank ?? 99));
|
|
78
|
+
const winner = sorted[0];
|
|
79
|
+
winner.shadowedBy = null;
|
|
80
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
81
|
+
sorted[i].shadowedBy = winner.scopeV2 ?? null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Phase 3: winners in AVAILABLE that weren't in any collision still need
|
|
85
|
+
// shadowedBy=null explicitly. Plugin and AUTHORING entries leave it undefined.
|
|
86
|
+
for (const s of enriched) {
|
|
87
|
+
if (s.group === "available" && s.source !== "plugin" && s.shadowedBy === undefined) {
|
|
88
|
+
s.shadowedBy = null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return enriched;
|
|
92
|
+
}
|
|
18
93
|
// ---------------------------------------------------------------------------
|
|
19
94
|
// Origin classification — detect if a skill lives inside an agent config
|
|
20
95
|
// directory (installed/consumed) vs. a user's own project (source/editable).
|
|
21
96
|
// ---------------------------------------------------------------------------
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
".github", ".agents", ".agent",
|
|
26
|
-
];
|
|
27
|
-
/** Lazily built set of all known agent config directory prefixes. */
|
|
97
|
+
/** Lazily built set of all known agent config directory prefixes.
|
|
98
|
+
* Union of agent localSkillsDir first-segments + NON_AGENT_CONFIG_DIRS
|
|
99
|
+
* (the canonical non-agent config dirs co-located in agents-registry). */
|
|
28
100
|
let _installedPrefixes = null;
|
|
29
101
|
function getInstalledPrefixes() {
|
|
30
102
|
if (_installedPrefixes)
|
|
@@ -36,7 +108,7 @@ function getInstalledPrefixes() {
|
|
|
36
108
|
if (first)
|
|
37
109
|
prefixes.add(first);
|
|
38
110
|
}
|
|
39
|
-
for (const dir of
|
|
111
|
+
for (const dir of NON_AGENT_CONFIG_DIRS) {
|
|
40
112
|
prefixes.add(dir);
|
|
41
113
|
}
|
|
42
114
|
_installedPrefixes = prefixes;
|
|
@@ -184,7 +256,8 @@ export async function scanSkillsTriScope(root, opts) {
|
|
|
184
256
|
}
|
|
185
257
|
}
|
|
186
258
|
}
|
|
187
|
-
|
|
259
|
+
// 0698 T-002: enrich with new scope vocabulary + compute precedence/shadowing
|
|
260
|
+
return enrichAndComputePrecedence(results);
|
|
188
261
|
}
|
|
189
262
|
/** Convert a globalSkillsDir pattern like `~/.claude/skills` to just the
|
|
190
263
|
* after-the-tilde portion (`.claude/skills`) for joining onto an injected
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../src/eval/skill-scanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../src/eval/skill-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SkillInfo } from "./skill-scanner.js";
|
|
2
|
+
/**
|
|
3
|
+
* Scan the standalone authoring location (`<root>/skills/`).
|
|
4
|
+
* Returns SkillInfo entries with scope="own", scopeV2="authoring-project",
|
|
5
|
+
* group="authoring", source="project".
|
|
6
|
+
*/
|
|
7
|
+
export declare function scanStandaloneSkills(root: string): SkillInfo[];
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// 0698 T-003: Standalone authoring scanner
|
|
3
|
+
//
|
|
4
|
+
// Walks `<root>/skills/<skill>/SKILL.md` and emits SkillInfo entries as
|
|
5
|
+
// AUTHORING > Skills. Excludes any skill whose filesystem path sits under a
|
|
6
|
+
// plugin-source folder (i.e. a directory with `.claude-plugin/plugin.json`
|
|
7
|
+
// somewhere between it and the project root) — those are owned by T-005's
|
|
8
|
+
// authored-plugin scanner.
|
|
9
|
+
//
|
|
10
|
+
// Cross-agent: unlike T-004's installed-plugin scanner which is Claude Code
|
|
11
|
+
// only, standalone authoring works identically for every agent. No agentId
|
|
12
|
+
// parameter.
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
/**
|
|
17
|
+
* Scan the standalone authoring location (`<root>/skills/`).
|
|
18
|
+
* Returns SkillInfo entries with scope="own", scopeV2="authoring-project",
|
|
19
|
+
* group="authoring", source="project".
|
|
20
|
+
*/
|
|
21
|
+
export function scanStandaloneSkills(root) {
|
|
22
|
+
const skillsDir = join(root, "skills");
|
|
23
|
+
if (!existsSync(skillsDir))
|
|
24
|
+
return [];
|
|
25
|
+
let entries;
|
|
26
|
+
try {
|
|
27
|
+
entries = readdirSync(skillsDir);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const results = [];
|
|
33
|
+
for (const name of entries) {
|
|
34
|
+
const skillDir = join(skillsDir, name);
|
|
35
|
+
let isDir = false;
|
|
36
|
+
try {
|
|
37
|
+
isDir = statSync(skillDir).isDirectory();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (!isDir)
|
|
43
|
+
continue;
|
|
44
|
+
const skillMd = join(skillDir, "SKILL.md");
|
|
45
|
+
if (!existsSync(skillMd))
|
|
46
|
+
continue;
|
|
47
|
+
// Exclude: a skill is NOT standalone-authored if any ancestor directory
|
|
48
|
+
// (up to root) contains `.claude-plugin/plugin.json`. In our top-level
|
|
49
|
+
// scan of `<root>/skills/` the only meaningful check is whether root
|
|
50
|
+
// itself is a plugin source AND the scan is happening inside that plugin.
|
|
51
|
+
// For the top-level `<root>/skills/` path, this check reduces to: is
|
|
52
|
+
// `<root>/.claude-plugin/plugin.json` present?
|
|
53
|
+
if (hasPluginManifestAt(root))
|
|
54
|
+
continue;
|
|
55
|
+
results.push({
|
|
56
|
+
plugin: "",
|
|
57
|
+
skill: name,
|
|
58
|
+
dir: skillDir,
|
|
59
|
+
hasEvals: false,
|
|
60
|
+
hasBenchmark: false,
|
|
61
|
+
origin: "source",
|
|
62
|
+
scope: "own",
|
|
63
|
+
scopeV2: "authoring-project",
|
|
64
|
+
group: "authoring",
|
|
65
|
+
source: "project",
|
|
66
|
+
precedenceRank: 3,
|
|
67
|
+
installMethod: "authored",
|
|
68
|
+
sourceAgent: null,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return results;
|
|
72
|
+
}
|
|
73
|
+
function hasPluginManifestAt(dir) {
|
|
74
|
+
return existsSync(join(dir, ".claude-plugin", "plugin.json"));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=standalone-skill-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone-skill-scanner.js","sourceRoot":"","sources":["../../src/eval/standalone-skill-scanner.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2CAA2C;AAC3C,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,2BAA2B;AAC3B,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,aAAa;AACb,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEvC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAEnC,wEAAwE;QACxE,uEAAuE;QACvE,qEAAqE;QACrE,0EAA0E;QAC1E,qEAAqE;QACrE,+CAA+C;QAC/C,IAAI,mBAAmB,CAAC,IAAI,CAAC;YAAE,SAAS;QAExC,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,mBAAmB;YAC5B,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,UAAU;YACzB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -128,7 +128,12 @@ export async function buildAgentsResponse(opts) {
|
|
|
128
128
|
const localExists = existsSync(resolvedLocalDir);
|
|
129
129
|
const globalExists = existsSync(resolvedGlobalDir);
|
|
130
130
|
const binaryDetected = detectedBinaries.has(agent.id);
|
|
131
|
-
|
|
131
|
+
// 0694 (AC-US4-04): remote-only agents (Devin, bolt.new, v0, Replit) have
|
|
132
|
+
// no local CLI to detect. Surface them in the catalog so the UI can render
|
|
133
|
+
// a "Remote" badge and suppress install affordances. Without this, the
|
|
134
|
+
// presence filter below would drop them and the badge code path would be
|
|
135
|
+
// unreachable in production.
|
|
136
|
+
const hasPresence = localExists || globalExists || binaryDetected || agent.isRemoteOnly === true;
|
|
132
137
|
if (!hasPresence)
|
|
133
138
|
continue;
|
|
134
139
|
const localSkillCount = countSkillsIn(resolvedLocalDir);
|
|
@@ -147,6 +152,9 @@ export async function buildAgentsResponse(opts) {
|
|
|
147
152
|
featureSupport: agent.featureSupport,
|
|
148
153
|
isUniversal: agent.isUniversal,
|
|
149
154
|
parentCompany: agent.parentCompany,
|
|
155
|
+
// Remote-only agents are always "detected" in the catalog sense — the
|
|
156
|
+
// service exists, just not locally. UI keys off isRemoteOnly to render
|
|
157
|
+
// the appropriate affordance (badge, not install button).
|
|
150
158
|
detected: hasPresence,
|
|
151
159
|
isDefault,
|
|
152
160
|
localSkillCount,
|
|
@@ -155,6 +163,9 @@ export async function buildAgentsResponse(opts) {
|
|
|
155
163
|
resolvedGlobalDir,
|
|
156
164
|
lastSync,
|
|
157
165
|
health,
|
|
166
|
+
// 0694 (AC-US4-04): propagate the flag so the UI can render a "Remote"
|
|
167
|
+
// badge for web-only agents (suppresses install affordances).
|
|
168
|
+
isRemoteOnly: agent.isRemoteOnly,
|
|
158
169
|
});
|
|
159
170
|
}
|
|
160
171
|
// Sort: healthy + detected first, then by id.
|