vskill 0.5.88 → 0.5.90

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 (70) hide show
  1. package/README.md +28 -0
  2. package/agents.json +124 -0
  3. package/dist/agents/agents-registry.d.ts +29 -5
  4. package/dist/agents/agents-registry.js +133 -12
  5. package/dist/agents/agents-registry.js.map +1 -1
  6. package/dist/commands/add.d.ts +2 -16
  7. package/dist/commands/add.js +3 -89
  8. package/dist/commands/add.js.map +1 -1
  9. package/dist/eval/plugin-scanner.d.ts +14 -0
  10. package/dist/eval/plugin-scanner.js +237 -0
  11. package/dist/eval/plugin-scanner.js.map +1 -0
  12. package/dist/eval/skill-scanner.d.ts +18 -0
  13. package/dist/eval/skill-scanner.js +82 -9
  14. package/dist/eval/skill-scanner.js.map +1 -1
  15. package/dist/eval/standalone-skill-scanner.d.ts +7 -0
  16. package/dist/eval/standalone-skill-scanner.js +76 -0
  17. package/dist/eval/standalone-skill-scanner.js.map +1 -0
  18. package/dist/eval-server/api-routes.d.ts +1 -0
  19. package/dist/eval-server/api-routes.js +12 -1
  20. package/dist/eval-server/api-routes.js.map +1 -1
  21. package/dist/eval-server/eval-server.d.ts +9 -1
  22. package/dist/eval-server/eval-server.js +51 -1
  23. package/dist/eval-server/eval-server.js.map +1 -1
  24. package/dist/eval-server/workspace-routes.d.ts +14 -0
  25. package/dist/eval-server/workspace-routes.js +108 -0
  26. package/dist/eval-server/workspace-routes.js.map +1 -0
  27. package/dist/eval-server/workspace-store.d.ts +36 -0
  28. package/dist/eval-server/workspace-store.js +144 -0
  29. package/dist/eval-server/workspace-store.js.map +1 -0
  30. package/dist/eval-ui/assets/{CommandPalette-B75Qr7kR.js → CommandPalette-DrPj2MN0.js} +1 -1
  31. package/dist/eval-ui/assets/{UpdateDropdown-C9KlPZnX.js → UpdateDropdown-CXwYZ5VE.js} +1 -1
  32. package/dist/eval-ui/assets/index-D5A8Jbqy.css +1 -0
  33. package/dist/eval-ui/assets/index-Dg6Nwzn_.js +90 -0
  34. package/dist/eval-ui/index.html +2 -2
  35. package/dist/shared/copy-plugin-filtered.d.ts +13 -0
  36. package/dist/shared/copy-plugin-filtered.js +97 -0
  37. package/dist/shared/copy-plugin-filtered.js.map +1 -0
  38. package/dist/studio/lib/ops-log.d.ts +10 -0
  39. package/dist/studio/lib/ops-log.js +99 -0
  40. package/dist/studio/lib/ops-log.js.map +1 -0
  41. package/dist/studio/lib/provenance.d.ts +4 -0
  42. package/dist/studio/lib/provenance.js +41 -0
  43. package/dist/studio/lib/provenance.js.map +1 -0
  44. package/dist/studio/lib/scope-transfer.d.ts +28 -0
  45. package/dist/studio/lib/scope-transfer.js +112 -0
  46. package/dist/studio/lib/scope-transfer.js.map +1 -0
  47. package/dist/studio/routes/index.d.ts +2 -0
  48. package/dist/studio/routes/index.js +19 -0
  49. package/dist/studio/routes/index.js.map +1 -0
  50. package/dist/studio/routes/ops.d.ts +2 -0
  51. package/dist/studio/routes/ops.js +63 -0
  52. package/dist/studio/routes/ops.js.map +1 -0
  53. package/dist/studio/routes/promote.d.ts +2 -0
  54. package/dist/studio/routes/promote.js +118 -0
  55. package/dist/studio/routes/promote.js.map +1 -0
  56. package/dist/studio/routes/revert.d.ts +2 -0
  57. package/dist/studio/routes/revert.js +97 -0
  58. package/dist/studio/routes/revert.js.map +1 -0
  59. package/dist/studio/routes/test-install.d.ts +2 -0
  60. package/dist/studio/routes/test-install.js +102 -0
  61. package/dist/studio/routes/test-install.js.map +1 -0
  62. package/dist/studio/types.d.ts +48 -0
  63. package/dist/studio/types.js +11 -0
  64. package/dist/studio/types.js.map +1 -0
  65. package/dist/utils/agent-filter.js +9 -1
  66. package/dist/utils/agent-filter.js.map +1 -1
  67. package/package.json +4 -1
  68. package/scripts/preuninstall.cjs +9 -2
  69. package/dist/eval-ui/assets/index-C4XKAX1s.css +0 -1
  70. 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
- /** Extra known config dirs not covered by agents-registry localSkillsDir. */
23
- const EXTRA_CONFIG_DIRS = [
24
- ".specweave", ".vscode", ".idea", ".zed", ".devcontainer",
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 EXTRA_CONFIG_DIRS) {
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
- return results;
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"}
@@ -32,6 +32,7 @@ export interface AgentScopeEntry {
32
32
  resolvedGlobalDir: string;
33
33
  lastSync: string | null;
34
34
  health: "ok" | "stale" | "missing";
35
+ isRemoteOnly?: boolean;
35
36
  }
36
37
  export interface AgentsResponse {
37
38
  agents: AgentScopeEntry[];
@@ -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
- const hasPresence = localExists || globalExists || binaryDetected;
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.