vskill 1.0.14 → 1.0.16
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 +61 -0
- package/agents.json +1 -1
- package/dist/agents/agents-registry.d.ts +8 -3
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/bin.js +0 -0
- package/dist/clone/github-scaffold.d.ts +38 -0
- package/dist/clone/github-scaffold.js +108 -0
- package/dist/clone/github-scaffold.js.map +1 -0
- package/dist/clone/provenance-fork.d.ts +34 -0
- package/dist/clone/provenance-fork.js +97 -0
- package/dist/clone/provenance-fork.js.map +1 -0
- package/dist/clone/reference-scanner.d.ts +19 -0
- package/dist/clone/reference-scanner.js +144 -0
- package/dist/clone/reference-scanner.js.map +1 -0
- package/dist/clone/skill-locator.d.ts +26 -0
- package/dist/clone/skill-locator.js +248 -0
- package/dist/clone/skill-locator.js.map +1 -0
- package/dist/clone/target-router.d.ts +73 -0
- package/dist/clone/target-router.js +200 -0
- package/dist/clone/target-router.js.map +1 -0
- package/dist/clone/types.d.ts +82 -0
- package/dist/clone/types.js +11 -0
- package/dist/clone/types.js.map +1 -0
- package/dist/commands/add.js +96 -32
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/auth.d.ts +23 -0
- package/dist/commands/auth.js +273 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/clone-prompts.d.ts +13 -0
- package/dist/commands/clone-prompts.js +67 -0
- package/dist/commands/clone-prompts.js.map +1 -0
- package/dist/commands/clone.d.ts +70 -0
- package/dist/commands/clone.js +649 -0
- package/dist/commands/clone.js.map +1 -0
- package/dist/commands/eval/serve.js +8 -1
- package/dist/commands/eval/serve.js.map +1 -1
- package/dist/commands/keys.js +54 -2
- package/dist/commands/keys.js.map +1 -1
- package/dist/eval/skill-scanner.d.ts +2 -12
- package/dist/eval/skill-scanner.js +27 -5
- package/dist/eval/skill-scanner.js.map +1 -1
- package/dist/eval-server/api-routes.js +527 -35
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-server/data-events.d.ts +1 -1
- package/dist/eval-server/data-events.js.map +1 -1
- package/dist/eval-server/eval-server.js +8 -1
- package/dist/eval-server/eval-server.js.map +1 -1
- package/dist/eval-server/install-engine-routes-helpers.d.ts +1 -3
- package/dist/eval-server/install-engine-routes-helpers.js +6 -14
- package/dist/eval-server/install-engine-routes-helpers.js.map +1 -1
- package/dist/eval-server/install-state-routes.d.ts +21 -0
- package/dist/eval-server/install-state-routes.js +111 -0
- package/dist/eval-server/install-state-routes.js.map +1 -0
- package/dist/eval-server/origin-resolver.d.ts +42 -0
- package/dist/eval-server/origin-resolver.js +168 -0
- package/dist/eval-server/origin-resolver.js.map +1 -0
- package/dist/eval-server/platform-proxy.d.ts +10 -0
- package/dist/eval-server/platform-proxy.js +58 -2
- package/dist/eval-server/platform-proxy.js.map +1 -1
- package/dist/eval-server/skill-resolver.js +40 -0
- package/dist/eval-server/skill-resolver.js.map +1 -1
- package/dist/eval-server/utils/resolve-editor.d.ts +6 -1
- package/dist/eval-server/utils/resolve-editor.js +11 -26
- package/dist/eval-server/utils/resolve-editor.js.map +1 -1
- package/dist/eval-server/utils/scan-install-locations.d.ts +7 -0
- package/dist/eval-server/utils/scan-install-locations.js +20 -0
- package/dist/eval-server/utils/scan-install-locations.js.map +1 -1
- package/dist/eval-server/utils/which.d.ts +15 -0
- package/dist/eval-server/utils/which.js +76 -0
- package/dist/eval-server/utils/which.js.map +1 -0
- package/dist/eval-ui/assets/{CreateSkillPage-CKvqAya0.js → CreateSkillPage-CvdYq8Rr.js} +5 -5
- package/dist/eval-ui/assets/{FindSkillsPalette-B8pTa5NP.js → FindSkillsPalette-DsSgotS9.js} +2 -2
- package/dist/eval-ui/assets/{SearchPaletteCore-CkVRvaZk.js → SearchPaletteCore-Bf3PBC64.js} +2 -2
- package/dist/eval-ui/assets/SkillDetailPanel-DAD2yJO-.js +1 -0
- package/dist/eval-ui/assets/{UpdateDropdown-DA7OktXO.js → UpdateDropdown-h5Hg3h7Z.js} +1 -1
- package/dist/eval-ui/assets/{index-BKAvJDDF.css → index-CKLqBL52.css} +1 -1
- package/dist/eval-ui/assets/index-JaDg6FlU.js +124 -0
- package/dist/eval-ui/index.html +2 -2
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -1
- package/dist/installer/canonical.js +2 -11
- package/dist/installer/canonical.js.map +1 -1
- package/dist/installer/frontmatter.d.ts +26 -0
- package/dist/installer/frontmatter.js +91 -1
- package/dist/installer/frontmatter.js.map +1 -1
- package/dist/lib/github-fetch.d.ts +22 -0
- package/dist/lib/github-fetch.js +152 -0
- package/dist/lib/github-fetch.js.map +1 -0
- package/dist/lib/keychain.d.ts +41 -0
- package/dist/lib/keychain.js +232 -0
- package/dist/lib/keychain.js.map +1 -0
- package/dist/studio/lib/provenance.js +3 -2
- package/dist/studio/lib/provenance.js.map +1 -1
- package/dist/studio/lib/query.d.ts +1 -0
- package/dist/studio/lib/query.js +7 -0
- package/dist/studio/lib/query.js.map +1 -0
- package/dist/studio/lib/scope-transfer.d.ts +6 -0
- package/dist/studio/lib/scope-transfer.js +5 -2
- package/dist/studio/lib/scope-transfer.js.map +1 -1
- package/dist/studio/routes/index.js +3 -0
- package/dist/studio/routes/index.js.map +1 -1
- package/dist/studio/routes/ops.js +1 -3
- package/dist/studio/routes/ops.js.map +1 -1
- package/dist/studio/routes/promote.js +1 -3
- package/dist/studio/routes/promote.js.map +1 -1
- package/dist/studio/routes/revert.js +2 -17
- package/dist/studio/routes/revert.js.map +1 -1
- package/dist/studio/routes/test-install.js +1 -3
- package/dist/studio/routes/test-install.js.map +1 -1
- package/dist/studio/types.d.ts +13 -0
- package/dist/utils/claude-plugin.d.ts +26 -0
- package/dist/utils/claude-plugin.js +60 -0
- package/dist/utils/claude-plugin.js.map +1 -1
- package/dist/utils/skill-builder-detection.d.ts +14 -1
- package/dist/utils/skill-builder-detection.js +20 -8
- package/dist/utils/skill-builder-detection.js.map +1 -1
- package/dist/utils/skill-creator-detection.d.ts +10 -2
- package/dist/utils/skill-creator-detection.js +12 -43
- package/dist/utils/skill-creator-detection.js.map +1 -1
- package/package.json +2 -1
- package/dist/eval-ui/assets/SkillDetailPanel-d4_LquVH.js +0 -1
- package/dist/eval-ui/assets/index-DCbohW6l.js +0 -122
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-plugin.js","sourceRoot":"","sources":["../../src/utils/claude-plugin.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,QAAsC,MAAM,EAC5C,IAAuB;IAEvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,YAAY,CACV,MAAM,EACN,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,EACvD,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAC5E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,QAAsC,MAAM,EAC5C,IAAuB;IAEvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,YAAY,CACV,MAAM,EACN,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,EACzD,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,cAAwD,EACxD,IAAsC;IAEtC,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACrC,MAAM,SAAS,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,iBAAiB,CACpC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAC/C,cAAc,CACf,CAAC;IACF,MAAM,QAAQ,GAAG;QACf,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAe,EAAE,CAAC,CAAC;QAC1D,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAkB,EAAE,CAAC,CAAC;KACjE,CAAC;IAEF,MAAM,OAAO,GAAkE,EAAE,CAAC;IAClF,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"claude-plugin.js","sourceRoot":"","sources":["../../src/utils/claude-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,19 @@ export interface SkillBuilderDetection {
|
|
|
14
14
|
* 4. Project-local agent-native: {projectRoot}/{agent.localSkillsDir}/skill-builder
|
|
15
15
|
* for every agent in AGENTS_REGISTRY (covers .claude/skills, .cursor/skills, etc.)
|
|
16
16
|
* 5. Any registered agent's global skills directory
|
|
17
|
-
* 6. Any agent's plugin cache
|
|
17
|
+
* 6. Any agent's plugin cache (e.g. ~/.claude/plugins/cache/)
|
|
18
|
+
*
|
|
19
|
+
* 0786 (AC-US2-03/05): marketplace catalog at
|
|
20
|
+
* `~/.claude/plugins/marketplaces/<mkt>/plugins/<name>` is NOT treated as
|
|
21
|
+
* installed — it is the *available* plugin index. Only the plugin cache is
|
|
22
|
+
* evidence of installation. Pre-0786 the marketplace branch caused
|
|
23
|
+
* Studio's Engine Selector to label uninstalled engines as installed.
|
|
18
24
|
*/
|
|
19
25
|
export declare function isSkillBuilderInstalled(projectRoot?: string): SkillBuilderDetection;
|
|
26
|
+
/**
|
|
27
|
+
* 0786 AC-US2-03: thin wrapper exposing only the matched path. Mirrors
|
|
28
|
+
* findSkillCreatorPath in shape so route handlers and the Engine Selector
|
|
29
|
+
* can answer "where is skill-builder installed?" without inspecting the
|
|
30
|
+
* full SkillBuilderDetection record.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findSkillBuilderPath(projectRoot?: string): string | null;
|
|
@@ -20,7 +20,13 @@ import { AGENTS_REGISTRY } from "../agents/agents-registry.js";
|
|
|
20
20
|
* 4. Project-local agent-native: {projectRoot}/{agent.localSkillsDir}/skill-builder
|
|
21
21
|
* for every agent in AGENTS_REGISTRY (covers .claude/skills, .cursor/skills, etc.)
|
|
22
22
|
* 5. Any registered agent's global skills directory
|
|
23
|
-
* 6. Any agent's plugin cache
|
|
23
|
+
* 6. Any agent's plugin cache (e.g. ~/.claude/plugins/cache/)
|
|
24
|
+
*
|
|
25
|
+
* 0786 (AC-US2-03/05): marketplace catalog at
|
|
26
|
+
* `~/.claude/plugins/marketplaces/<mkt>/plugins/<name>` is NOT treated as
|
|
27
|
+
* installed — it is the *available* plugin index. Only the plugin cache is
|
|
28
|
+
* evidence of installation. Pre-0786 the marketplace branch caused
|
|
29
|
+
* Studio's Engine Selector to label uninstalled engines as installed.
|
|
24
30
|
*/
|
|
25
31
|
export function isSkillBuilderInstalled(projectRoot) {
|
|
26
32
|
const home = homedir();
|
|
@@ -48,7 +54,10 @@ export function isSkillBuilderInstalled(projectRoot) {
|
|
|
48
54
|
};
|
|
49
55
|
}
|
|
50
56
|
}
|
|
51
|
-
// Plugin cache
|
|
57
|
+
// Plugin cache search — same shape as skill-creator-detection.
|
|
58
|
+
// 0786: marketplace catalog branch removed (see JSDoc above). The
|
|
59
|
+
// findInPluginTree helper is kept as a reusable primitive but is no
|
|
60
|
+
// longer invoked with the marketplace root.
|
|
52
61
|
for (const agent of AGENTS_REGISTRY) {
|
|
53
62
|
if (agent.pluginCacheDir) {
|
|
54
63
|
const cacheDir = agent.pluginCacheDir.replace("~", home);
|
|
@@ -56,15 +65,18 @@ export function isSkillBuilderInstalled(projectRoot) {
|
|
|
56
65
|
if (match)
|
|
57
66
|
return { installed: true, path: match, version: parseVersionAt(match) };
|
|
58
67
|
}
|
|
59
|
-
if (agent.pluginMarketplaceDir) {
|
|
60
|
-
const mktRoot = agent.pluginMarketplaceDir.replace("~", home);
|
|
61
|
-
const match = findInPluginTree(mktRoot, /* hasPluginsSubdir */ true);
|
|
62
|
-
if (match)
|
|
63
|
-
return { installed: true, path: match, version: parseVersionAt(match) };
|
|
64
|
-
}
|
|
65
68
|
}
|
|
66
69
|
return { installed: false, path: null, version: null };
|
|
67
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* 0786 AC-US2-03: thin wrapper exposing only the matched path. Mirrors
|
|
73
|
+
* findSkillCreatorPath in shape so route handlers and the Engine Selector
|
|
74
|
+
* can answer "where is skill-builder installed?" without inspecting the
|
|
75
|
+
* full SkillBuilderDetection record.
|
|
76
|
+
*/
|
|
77
|
+
export function findSkillBuilderPath(projectRoot) {
|
|
78
|
+
return isSkillBuilderInstalled(projectRoot).path;
|
|
79
|
+
}
|
|
68
80
|
function findInPluginTree(rootDir, hasPluginsSubdir) {
|
|
69
81
|
try {
|
|
70
82
|
if (!existsSync(rootDir))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-builder-detection.js","sourceRoot":"","sources":["../../src/utils/skill-builder-detection.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAC9E,uEAAuE;AACvE,sEAAsE;AACtE,4BAA4B;AAC5B,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAQ/D
|
|
1
|
+
{"version":3,"file":"skill-builder-detection.js","sourceRoot":"","sources":["../../src/utils/skill-builder-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,13 @@
|
|
|
8
8
|
* for every agent in AGENTS_REGISTRY (covers .claude/skills, .cursor/skills, etc.)
|
|
9
9
|
* 3. Any registered agent's global skills directory
|
|
10
10
|
* 4. Any agent's plugin cache (e.g. Claude Code plugin cache at ~/.claude/plugins/cache/)
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* 0786 (AC-US2-01/02/04): the marketplace catalog at
|
|
13
|
+
* `~/.claude/plugins/marketplaces/<mkt>/plugins/<name>` is NOT installation —
|
|
14
|
+
* it is the *available* plugin index. Cache presence is the only evidence of
|
|
15
|
+
* installation. Pre-0786 detection treated the catalog as installed and the
|
|
16
|
+
* Engine Selector / `/api/skill-creator-status` mislabelled un-installed
|
|
17
|
+
* engines as installed.
|
|
13
18
|
*/
|
|
14
19
|
export declare function isSkillCreatorInstalled(projectRoot?: string): boolean;
|
|
15
20
|
/**
|
|
@@ -18,5 +23,8 @@ export declare function isSkillCreatorInstalled(projectRoot?: string): boolean;
|
|
|
18
23
|
* Same search order as isSkillCreatorInstalled() but returns the matched path
|
|
19
24
|
* (or null if not installed). Used by Studio's /api/studio/detect-engines route
|
|
20
25
|
* to surface the install location to the UI.
|
|
26
|
+
*
|
|
27
|
+
* 0786: marketplace catalog branch removed (catalog presence is availability,
|
|
28
|
+
* not installation).
|
|
21
29
|
*/
|
|
22
30
|
export declare function findSkillCreatorPath(projectRoot?: string): string | null;
|
|
@@ -15,8 +15,13 @@ import { AGENTS_REGISTRY } from "../agents/agents-registry.js";
|
|
|
15
15
|
* for every agent in AGENTS_REGISTRY (covers .claude/skills, .cursor/skills, etc.)
|
|
16
16
|
* 3. Any registered agent's global skills directory
|
|
17
17
|
* 4. Any agent's plugin cache (e.g. Claude Code plugin cache at ~/.claude/plugins/cache/)
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
*
|
|
19
|
+
* 0786 (AC-US2-01/02/04): the marketplace catalog at
|
|
20
|
+
* `~/.claude/plugins/marketplaces/<mkt>/plugins/<name>` is NOT installation —
|
|
21
|
+
* it is the *available* plugin index. Cache presence is the only evidence of
|
|
22
|
+
* installation. Pre-0786 detection treated the catalog as installed and the
|
|
23
|
+
* Engine Selector / `/api/skill-creator-status` mislabelled un-installed
|
|
24
|
+
* engines as installed.
|
|
20
25
|
*/
|
|
21
26
|
export function isSkillCreatorInstalled(projectRoot) {
|
|
22
27
|
const home = homedir();
|
|
@@ -34,8 +39,8 @@ export function isSkillCreatorInstalled(projectRoot) {
|
|
|
34
39
|
return true;
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
|
-
// 3 + 4
|
|
38
|
-
//
|
|
42
|
+
// 3 + 4. Check every registered agent's global skills dir and plugin cache.
|
|
43
|
+
// 0786: marketplace catalog branch removed — see JSDoc above.
|
|
39
44
|
for (const agent of AGENTS_REGISTRY) {
|
|
40
45
|
const resolved = agent.globalSkillsDir.replace("~", home);
|
|
41
46
|
if (existsSync(join(resolved, "skill-creator")))
|
|
@@ -56,25 +61,6 @@ export function isSkillCreatorInstalled(projectRoot) {
|
|
|
56
61
|
}
|
|
57
62
|
catch { /* ignore permission errors */ }
|
|
58
63
|
}
|
|
59
|
-
if (agent.pluginMarketplaceDir) {
|
|
60
|
-
const mktRoot = agent.pluginMarketplaceDir.replace("~", home);
|
|
61
|
-
try {
|
|
62
|
-
if (existsSync(mktRoot)) {
|
|
63
|
-
for (const mkt of readdirSync(mktRoot, { withFileTypes: true })) {
|
|
64
|
-
if (!mkt.isDirectory())
|
|
65
|
-
continue;
|
|
66
|
-
const pluginsDir = join(mktRoot, mkt.name, "plugins");
|
|
67
|
-
if (!existsSync(pluginsDir))
|
|
68
|
-
continue;
|
|
69
|
-
for (const plugin of readdirSync(pluginsDir, { withFileTypes: true })) {
|
|
70
|
-
if (plugin.isDirectory() && plugin.name.includes("skill-creator"))
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch { /* ignore permission errors */ }
|
|
77
|
-
}
|
|
78
64
|
}
|
|
79
65
|
return false;
|
|
80
66
|
}
|
|
@@ -84,6 +70,9 @@ export function isSkillCreatorInstalled(projectRoot) {
|
|
|
84
70
|
* Same search order as isSkillCreatorInstalled() but returns the matched path
|
|
85
71
|
* (or null if not installed). Used by Studio's /api/studio/detect-engines route
|
|
86
72
|
* to surface the install location to the UI.
|
|
73
|
+
*
|
|
74
|
+
* 0786: marketplace catalog branch removed (catalog presence is availability,
|
|
75
|
+
* not installation).
|
|
87
76
|
*/
|
|
88
77
|
export function findSkillCreatorPath(projectRoot) {
|
|
89
78
|
const home = homedir();
|
|
@@ -122,26 +111,6 @@ export function findSkillCreatorPath(projectRoot) {
|
|
|
122
111
|
}
|
|
123
112
|
catch { /* ignore permission errors */ }
|
|
124
113
|
}
|
|
125
|
-
if (agent.pluginMarketplaceDir) {
|
|
126
|
-
const mktRoot = agent.pluginMarketplaceDir.replace("~", home);
|
|
127
|
-
try {
|
|
128
|
-
if (existsSync(mktRoot)) {
|
|
129
|
-
for (const mkt of readdirSync(mktRoot, { withFileTypes: true })) {
|
|
130
|
-
if (!mkt.isDirectory())
|
|
131
|
-
continue;
|
|
132
|
-
const pluginsDir = join(mktRoot, mkt.name, "plugins");
|
|
133
|
-
if (!existsSync(pluginsDir))
|
|
134
|
-
continue;
|
|
135
|
-
for (const plugin of readdirSync(pluginsDir, { withFileTypes: true })) {
|
|
136
|
-
if (plugin.isDirectory() && plugin.name.includes("skill-creator")) {
|
|
137
|
-
return join(pluginsDir, plugin.name);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch { /* ignore permission errors */ }
|
|
144
|
-
}
|
|
145
114
|
}
|
|
146
115
|
return null;
|
|
147
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-creator-detection.js","sourceRoot":"","sources":["../../src/utils/skill-creator-detection.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D
|
|
1
|
+
{"version":3,"file":"skill-creator-detection.js","sourceRoot":"","sources":["../../src/utils/skill-creator-detection.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vskill",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Secure multi-platform AI skill installer — scan before you install",
|
|
6
6
|
"bin": {
|
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
85
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
86
|
+
"@napi-rs/keyring": "^1.3.0",
|
|
86
87
|
"commander": "^14.0.3",
|
|
87
88
|
"minimatch": "^9.0.9",
|
|
88
89
|
"openai": "^6.34.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,r as d,T as te}from"./index-DCbohW6l.js";import{s as D}from"./skill-url-C4ekwoGs.js";/* empty css */const M={T0:{label:"BLOCKED",cssVar:"var(--trust-t0)"},T1:{label:"UNSCANNED",cssVar:"var(--trust-t1)"},T2:{label:"BASIC",cssVar:"var(--trust-t2)"},T3:{label:"VERIFIED",cssVar:"var(--trust-t3)"},T4:{label:"CERTIFIED",cssVar:"var(--trust-t4)"}};function re({tier:r}){const o=M[r]??M.T1;return e.jsxs("span",{"data-testid":"trust-badge","data-tier":r,style:{display:"inline-flex",alignItems:"center",gap:"0.3rem",padding:"0.15rem 0.5rem",borderRadius:"4px",fontFamily:"var(--font-geist-mono)",fontSize:"0.6875rem",fontWeight:600,letterSpacing:"0.03em",textTransform:"uppercase",whiteSpace:"nowrap",color:o.cssVar,backgroundColor:`color-mix(in srgb, ${o.cssVar} 10%, transparent)`,border:`1px solid color-mix(in srgb, ${o.cssVar} 25%, transparent)`,lineHeight:1,height:"22px"},children:[r," ",o.label]})}const ne=/^https?:\/\/github\.com\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+?)(\.git)?(\/.*)?$/;function se(r){var g,x;const a=r.trim().match(ne);if(!a)return null;const c=(g=a[1])==null?void 0:g.toLowerCase();let n=(x=a[2])==null?void 0:x.toLowerCase();if(!c||!n)return null;n=n.replace(/\.git$/,"");const m=`https://github.com/${c}/${n}`;return{owner:c,name:n,url:m}}function oe({repoUrl:r,mono:o="var(--font-geist-mono)",fontSize:a="0.75rem",showPlaceholder:c=!0}){if(!r)return c?e.jsx("span",{style:{color:"var(--text-faint)",fontSize:a},children:"--"}):null;const n=se(r);return n?e.jsxs("a",{"data-testid":"repo-link",href:n.url,target:"_blank",rel:"noopener noreferrer",onClick:m=>m.stopPropagation(),style:{color:"#0D9488",textDecoration:"none",fontSize:a,fontFamily:o},children:[n.owner,"/",n.name]}):e.jsx("span",{style:{color:"var(--text-faint)",fontSize:a,fontFamily:o},children:r})}const ae="var(--font-geist-mono)",ie={ONLINE:"var(--status-success-text)",OFFLINE:"var(--status-danger-text)",STALE:"var(--status-neutral-text)"},le={ONLINE:"var(--status-success-bg)",OFFLINE:"var(--status-danger-bg)",STALE:"var(--status-neutral-bg)"};function ce({skillName:r,repoUrl:o}){const[a,c]=d.useState(null),[n,m]=d.useState(!1);if(d.useEffect(()=>{o&&(m(!0),fetch(D(r,"repo-health")).then(k=>{if(!k.ok)throw new Error("fetch failed");return k.json()}).then(k=>{c(k.status),m(!1)}).catch(()=>{c(null),m(!1)}))},[r,o]),!o)return null;if(n)return e.jsx("span",{"data-testid":"repo-health-loading",style:{display:"inline-block",width:56,height:20,borderRadius:"4px",backgroundColor:"color-mix(in srgb, var(--text-faint) 20%, transparent)",animation:"pulse 1.5s ease-in-out infinite"}});if(!a||a==="UNKNOWN")return null;const g=ie[a]??"var(--status-neutral-text)",x=le[a]??"var(--status-neutral-bg)";return e.jsx("span",{"data-testid":"repo-health-badge",style:{fontFamily:ae,fontSize:"0.75rem",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.03em",padding:"0.2rem 0.6rem",borderRadius:"999px",backgroundColor:x,color:g,whiteSpace:"nowrap"},children:a})}function de({children:r,compact:o}){return e.jsx("pre",{"data-testid":"terminal-block",style:{background:"var(--bg-code, #161B22)",color:"#E6EDF3",fontFamily:"var(--font-geist-mono)",fontSize:o?"0.8rem":"0.875rem",lineHeight:1.6,padding:o?"1rem 1.25rem":"1.5rem 2rem",borderRadius:"6px",overflowX:"auto",margin:0},children:r})}const ue="/api/v1/studio/telemetry/install-copy",me=/^[a-zA-Z0-9._@/-]+$/,pe=/^[a-zA-Z0-9._-]+$/,fe="https://verified-skill.com";function ye(r){return`${r.owner}/${r.repo}/${r.slug}`}function ge(r,o){return r!=null&&r.ownerSlug&&(r!=null&&r.repoSlug)?`${r.ownerSlug}/${r.repoSlug}`:r!=null&&r.publisher?r.publisher:`${o.owner}/${o.repo}`}function he(r){return r==="global"?" --global":` --scope ${r}`}function xe(r,o,a,c){const n=a?`${r}/${o}@${a}`:`${r}/${o}`;if(!me.test(`${r}/${o}`))return{ok:!1,reason:"Invalid skill identifier"};if(a&&!pe.test(a))return{ok:!1,reason:"Invalid version identifier"};const m=he(c),g=`npx vskill@latest install ${n}${m}`,x=[{label:"npm",comment:"# npm",command:g},{label:"bun",comment:"# bun",command:`bunx vskill@latest install ${n}${m}`},{label:"pnpm",comment:"# pnpm",command:`pnpx vskill@latest install ${n}${m}`},{label:"yarn",comment:"# yarn",command:`yarn dlx vskill@latest install ${n}${m}`},{label:"alternative",comment:"# alternative (publisher + --skill flag)",command:a?`npx vskill@latest install ${r}@${a} --skill ${o}${m}`:`npx vskill@latest install ${r} --skill ${o}${m}`}];return{ok:!0,command:g,variants:x}}function F(r,o,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:r,kind:o,durationMs:a,severity:o==="error"?"error":"info"}}))}async function P(r){var o;if(typeof navigator<"u"&&((o=navigator.clipboard)!=null&&o.writeText))try{return await navigator.clipboard.writeText(r),!0}catch{}if(typeof document>"u")return!1;try{const a=document.createElement("textarea");a.value=r,a.setAttribute("readonly",""),a.style.position="fixed",a.style.left="-9999px",document.body.appendChild(a),a.select();const c=document.execCommand("copy");return document.body.removeChild(a),c}catch{return!1}}function W(r,o){try{fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),keepalive:!0}).catch(()=>{})}catch{}}function Ee({selectedSkill:r,onClose:o,telemetryInstallCopyUrl:a=ue,onToast:c}){const[n,m]=d.useState(null),[g,x]=d.useState([]),[k,H]=d.useState(!1),[K,q]=d.useState(null),[T,I]=d.useState(!0),[A,L]=d.useState(null),[h,z]=d.useState(null),[E,G]=d.useState("project"),[Z,J]=d.useState(0),N=d.useRef(null),V=d.useRef(null),O=d.useRef(null),b=ye(r);d.useEffect(()=>(O.current=document.activeElement??null,()=>{const t=O.current;if(t&&typeof t.focus=="function")try{t.focus()}catch{}}),[]),d.useEffect(()=>{const t=setTimeout(()=>{var s;return(s=V.current)==null?void 0:s.focus()},50);return()=>clearTimeout(t)},[]),d.useEffect(()=>{let t=!1;I(!0),L(null);const s=D(b),u=D(b,"versions");return Promise.all([fetch(s).then(async i=>{if(!i.ok)throw new Error(`metadata ${i.status}`);return i.json()}),fetch(u).then(async i=>{if(!i.ok)throw new Error(`versions ${i.status}`);const l=await i.json(),p=Array.isArray(l)?l:(l==null?void 0:l.versions)??[],y=!Array.isArray(l)&&(l==null?void 0:l.unversioned)===!0,v=!Array.isArray(l)&&typeof(l==null?void 0:l.currentVersion)=="string"?l.currentVersion:null;return{list:p,unversioned:y,currentVersion:v}})]).then(([i,l])=>{if(t)return;m(i),x(l.list),H(l.unversioned),q(l.currentVersion);const p=l.list.find(y=>y.isLatest)??l.list[0]??null;z(p?p.version:null),I(!1)}).catch(i=>{t||(L(i instanceof Error?i.message:String(i)),I(!1))}),()=>{t=!0}},[b,Z]),d.useEffect(()=>{function t(s){if(s.key==="Escape")s.stopPropagation(),C();else if(s.key==="Tab"){const u=N.current;if(!u)return;const i=u.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])');if(i.length===0)return;const l=i[0],p=i[i.length-1],y=document.activeElement;s.shiftKey&&y===l?(s.preventDefault(),p.focus()):!s.shiftKey&&y===p&&(s.preventDefault(),l.focus())}}return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[]);const C=d.useCallback(()=>{o();let t="";try{typeof window<"u"&&window.sessionStorage&&(t=window.sessionStorage.getItem("find-skills:last-query")??"")}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("openFindSkills",{detail:{query:t}}))},[o]),j=ge(n,r),S=(n==null?void 0:n.skillSlug)??r.slug,_=(n==null?void 0:n.displayName)??r.displayName??S,X=(n==null?void 0:n.isBlocked)===!0,w=d.useMemo(()=>g.length===0?[]:[...g].sort((s,u)=>{const i=s.publishedAt?Date.parse(s.publishedAt):0;return(u.publishedAt?Date.parse(u.publishedAt):0)-i}).slice(0,5),[g]),R=d.useMemo(()=>!h||w.length===0?!0:w[0].version===h,[h,w]),f=d.useMemo(()=>h?xe(j,S,R?null:h,E):null,[j,S,h,R,E]),B=d.useCallback(async()=>{if(!f||!f.ok)return;const t=await P(f.command);W(a,{skillName:b,version:h??"",q:"",ts:Date.now()});const s=t?`Run ${f.command} in your terminal`:"Copy failed — please copy the command manually.";if(c)try{c(s,t?"success":"error")}catch{}else F(s,t?"success":"error",3500)},[f,a,b,h,j,S,R,c]),Y=d.useCallback(async()=>{if(!f||!f.ok)return;const t=`${j}/${S}`;if(c)try{c(`Installing ${t}…`,"info")}catch{}else F(`Installing ${t}…`,"info",5e3);let s=null;try{const p=await fetch("/api/studio/install-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({skill:t,scope:E})});if(p.status===404)return B();if(!p.ok){const $=(await p.json().catch(()=>({}))).error||`Install failed (HTTP ${p.status})`;if(c)try{c($,"error")}catch{}else F($,"error",6e3);return}const y=await p.json();s=(y==null?void 0:y.jobId)??null}catch{return B()}if(!s||typeof EventSource>"u")return;const u=new EventSource(`/api/studio/install-skill/${s}/stream`),l=setTimeout(()=>{try{u.close()}catch{}},2e5);u.addEventListener("done",p=>{var U;clearTimeout(l);try{u.close()}catch{}let y={};try{y=JSON.parse(p.data)}catch{}const v=y.success===!0,$=v?`Installed ${t} (${E})`:`Install failed: ${((U=y.stderr)==null?void 0:U.trim().split(/\r?\n/).slice(-1)[0])||"see terminal"}`;if(c)try{c($,v?"success":"error")}catch{}else F($,v?"success":"error",v?4e3:8e3)}),u.onerror=()=>{clearTimeout(l);try{u.close()}catch{}}},[f,j,S,E,c,B]),Q=(n==null?void 0:n.trustTier)??"T1",ee=(n==null?void 0:n.certTier)==="CERTIFIED"||(n==null?void 0:n.certTier)==="VERIFIED"?n.certTier:"VERIFIED";return e.jsxs("div",{ref:N,"data-testid":"skill-detail-panel",role:"dialog","aria-modal":"true","aria-label":`Skill detail — ${_}`,style:{position:"fixed",inset:0,zIndex:9998,display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"min(10vh, 80px)"},onClick:t=>{t.target===t.currentTarget&&C()},children:[e.jsx("div",{style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",backdropFilter:"blur(4px)"}}),e.jsxs("div",{onClick:t=>t.stopPropagation(),style:{position:"relative",width:"100%",maxWidth:720,margin:"0 1rem",background:"var(--bg-surface, #FFFFFF)",color:"var(--text-primary, #191919)",borderRadius:"8px",border:"1px solid var(--color-rule, #E8E1D6)",boxShadow:"0 20px 60px rgba(0,0,0,0.15)",overflow:"hidden",maxHeight:"80vh",display:"flex",flexDirection:"column"},children:[e.jsxs("div",{style:{padding:"0.75rem 1rem",borderBottom:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"space-between",flexShrink:0},children:[e.jsx("button",{ref:V,type:"button",onClick:C,"data-testid":"skill-detail-back",style:{background:"transparent",border:"none",padding:"4px 8px",borderRadius:4,cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:12,color:"var(--text-secondary, #5A5651)"},children:"← Back to results"}),e.jsx("kbd",{style:{fontFamily:"var(--font-mono, monospace)",fontSize:11,color:"var(--text-secondary, #5A5651)",border:"1px solid var(--color-rule, #E8E1D6)",borderRadius:4,padding:"1px 5px"},children:"Esc"})]}),e.jsxs("div",{style:{overflowY:"auto",padding:"1rem",flex:1},children:[T&&e.jsx("div",{"data-testid":"skill-detail-loading",style:{padding:"2rem",textAlign:"center",color:"var(--text-secondary, #5A5651)"},children:"Loading…"}),A&&!T&&e.jsxs("div",{"data-testid":"skill-detail-error",style:{padding:"1.5rem",textAlign:"center",fontFamily:"var(--font-mono, monospace)",fontSize:"0.875rem",color:"var(--red, #b54444)"},children:[e.jsxs("div",{style:{marginBottom:"0.75rem"},children:["Failed to load skill: ",A]}),e.jsx("button",{"data-testid":"skill-detail-retry",onClick:()=>J(t=>t+1),style:{fontFamily:"var(--font-mono, monospace)",fontSize:"0.8125rem",padding:"0.4rem 1rem",borderRadius:4,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-primary, #191919)",cursor:"pointer"},children:"Retry"})]}),!T&&!A&&e.jsxs(e.Fragment,{children:[e.jsxs("section",{"data-testid":"skill-detail-hero",style:{marginBottom:"1.25rem"},children:[e.jsx("h2",{style:{margin:"0 0 0.5rem",fontSize:"1.25rem",fontWeight:600},children:_}),(n==null?void 0:n.description)&&e.jsx("p",{style:{margin:"0 0 0.75rem",color:"var(--text-secondary, #5A5651)",fontSize:"0.875rem",lineHeight:1.5},children:n.description}),e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem",alignItems:"center"},children:[e.jsx(re,{tier:Q}),e.jsx(te,{tier:ee,isTainted:n==null?void 0:n.isTainted}),e.jsx(oe,{repoUrl:(n==null?void 0:n.repoUrl)??null}),e.jsx(ce,{skillName:b,repoUrl:n==null?void 0:n.repoUrl})]})]}),e.jsxs("section",{"data-testid":"skill-detail-versions",style:{marginBottom:"1.25rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-secondary, #5A5651)"},children:"Versions"}),w.length===0?k?e.jsxs("div",{"data-testid":"skill-detail-unversioned",style:{color:"var(--text-secondary, #5A5651)",fontSize:"0.8125rem"},children:["Discovered — no published version yet (currentVersion: ",K??"unknown",")."]}):e.jsx("div",{"data-testid":"skill-detail-no-versions",style:{color:"var(--text-secondary, #5A5651)",fontSize:"0.8125rem"},children:"No versions found."}):e.jsx("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:4},children:w.map(t=>{const s=t.version===h,u=t.publishedAt?t.publishedAt.slice(0,10):"",i=t.authorEmail??t.author??"";return e.jsx("li",{children:e.jsxs("button",{type:"button","data-testid":"skill-detail-version-row","data-version":t.version,"data-selected":s?"true":"false","aria-pressed":s,onClick:()=>z(t.version),style:{width:"100%",textAlign:"left",padding:"0.5rem 0.75rem",borderRadius:4,border:s?"1px solid var(--color-action, #2F5B8E)":"1px solid var(--color-rule, #E8E1D6)",background:s?"color-mix(in srgb, var(--color-action, #2F5B8E) 8%, transparent)":"transparent",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.8125rem",color:"var(--text-primary, #191919)",display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsx("span",{"aria-hidden":"true",style:{width:14,display:"inline-flex",justifyContent:"center"},children:s?"●":"○"}),e.jsxs("span",{style:{fontWeight:600},children:["v",t.version]}),u&&e.jsxs("span",{style:{color:"var(--text-secondary, #5A5651)"},children:["· ",u]}),i&&e.jsxs("span",{style:{color:"var(--text-secondary, #5A5651)"},children:["· ",i]}),s&&e.jsx("span",{"data-testid":"skill-detail-version-selected-tag",style:{marginLeft:"auto",fontSize:"0.6875rem",color:"var(--color-action, #2F5B8E)"},children:"Selected"})]})},t.version)})}),e.jsx("div",{style:{marginTop:"0.5rem",textAlign:"right"},children:e.jsx("a",{"data-testid":"skill-detail-see-all-versions",href:`${fe}/skills/${r.owner}/${r.repo}/${r.slug}/versions`,target:"_blank",rel:"noopener noreferrer",style:{fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",color:"var(--color-action, #2F5B8E)",textDecoration:"none"},children:"see all versions →"})})]}),X?e.jsxs("section",{"data-testid":"skill-detail-blocked",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--red, #b54444)"},children:"This skill is blocked"}),e.jsx("div",{style:{padding:"1rem",borderRadius:6,border:"1px solid var(--red, #b54444)",background:"var(--red-muted, color-mix(in srgb, #b54444 18%, transparent))",color:"var(--red, #b54444)",fontSize:"0.875rem"},children:(n==null?void 0:n.blockReason)??"This skill has been blocked by platform moderators and cannot be installed."})]}):f&&!f.ok?e.jsxs("section",{"data-testid":"skill-detail-install-error",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--red, #b54444)"},children:"Install command unavailable"}),e.jsxs("div",{style:{padding:"1rem",borderRadius:6,border:"1px solid var(--red, #b54444)",background:"var(--red-muted, color-mix(in srgb, #b54444 18%, transparent))",color:"var(--red, #b54444)",fontSize:"0.875rem"},children:[f.reason," — refusing to render the install panel for safety."]})]}):f&&f.ok?e.jsxs("section",{"data-testid":"skill-detail-install",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-secondary, #5A5651)"},children:"Install"}),e.jsxs("div",{role:"radiogroup","aria-label":"Install scope","data-testid":"skill-detail-install-scope",style:{display:"flex",gap:"0.5rem",alignItems:"center",marginBottom:"0.75rem",fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",color:"var(--text-secondary, #5A5651)"},children:[e.jsx("span",{children:"Scope:"}),["project","user","global"].map(t=>{const s=E===t,u=t==="project"?"Per-repo .claude/ — only this project":t==="user"?"~/.claude/ — every project on this account":"System agent dirs — every agent on this machine",i=t==="global"?"Global":t==="user"?"User":"Project";return e.jsx("button",{type:"button",role:"radio","aria-checked":s,"data-testid":`skill-detail-install-scope-${t}`,title:u,onClick:()=>G(t),style:{padding:"0.25rem 0.6rem",borderRadius:4,border:`1px solid ${s?"var(--text-primary, #191919)":"var(--color-rule, #E8E1D6)"}`,background:s?"var(--text-primary, #191919)":"transparent",color:s?"var(--bg-surface, #FFFFFF)":"var(--text-secondary, #5A5651)",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",fontWeight:s?600:400},children:i},t)})]}),e.jsx("button",{type:"button",onClick:Y,"data-testid":"skill-detail-install-primary","aria-label":"Install skill",style:{display:"inline-flex",alignItems:"center",marginBottom:"0.75rem",padding:"0.5rem 1rem",borderRadius:6,border:"1px solid var(--text-primary, #191919)",background:"var(--text-primary, #191919)",color:"var(--bg-surface, #FFFFFF)",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.875rem",fontWeight:600},children:"Install"}),e.jsx("div",{"data-testid":"skill-detail-install-command",style:{display:"block"},children:e.jsx(de,{compact:!0,children:f.variants.map((t,s)=>e.jsxs("div",{"data-testid":`skill-detail-install-variant-${t.label}`,style:{display:"flex",gap:"0.75rem",alignItems:"flex-start",marginTop:s===0?0:"0.75rem"},children:[e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{color:"#8B949E",marginBottom:"0.125rem"},children:t.comment}),e.jsxs("div",{children:[e.jsx("span",{style:{color:"#8B949E",marginRight:"0.5rem"},children:"$"}),e.jsx("span",{"data-testid":`skill-detail-install-variant-cmd-${t.label}`,children:t.command})]})]}),e.jsx("button",{type:"button",onClick:async()=>{const u=await P(t.command),i=u?`Run ${t.command} in your terminal`:"Copy failed — please copy the command manually.";if(c)try{c(i,u?"success":"error")}catch{}else F(i,u?"success":"error",3500);u&&W(a,{skillName:b,version:h??"",q:"",ts:Date.now()})},"data-testid":`skill-detail-copy-${t.label}`,"aria-label":`Copy ${t.label} install command`,style:{flexShrink:0,padding:"0.25rem 0.6rem",borderRadius:4,border:"1px solid color-mix(in srgb, #E6EDF3 25%, transparent)",background:"color-mix(in srgb, #E6EDF3 8%, transparent)",color:"#E6EDF3",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.7rem",alignSelf:"flex-end"},children:"Copy"})]},t.label))})})]}):null]})]})]})]})}export{Ee as SkillDetailPanel,Ee as default};
|