vskill 0.5.82 → 0.5.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/agents-registry.d.ts +4 -0
- package/dist/agents/agents-registry.js +1 -0
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +30 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/eval/serve.js +3 -3
- package/dist/commands/eval/serve.js.map +1 -1
- package/dist/eval-server/api-routes.d.ts +33 -0
- package/dist/eval-server/api-routes.js +202 -0
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-ui/assets/CommandPalette-Zop9jgyY.js +1 -0
- package/dist/eval-ui/assets/fonts-i7Lkz2zN.css +1 -0
- package/dist/eval-ui/assets/index-DS30At-e.css +1 -0
- package/dist/eval-ui/assets/index-PsfutY7X.js +65 -0
- package/dist/eval-ui/assets/inter-tight-cyrillic-ext-wght-normal-okcGN4Nq.woff2 +0 -0
- package/dist/eval-ui/assets/inter-tight-cyrillic-wght-normal-BS41q_Tv.woff2 +0 -0
- package/dist/eval-ui/assets/inter-tight-greek-ext-wght-normal-DQgQPNk4.woff2 +0 -0
- package/dist/eval-ui/assets/inter-tight-greek-wght-normal-sS1B39LI.woff2 +0 -0
- package/dist/eval-ui/assets/inter-tight-latin-ext-wght-normal-B4u9PlvR.woff2 +0 -0
- package/dist/eval-ui/assets/inter-tight-latin-wght-normal-DX-nOvPD.woff2 +0 -0
- package/dist/eval-ui/assets/inter-tight-vietnamese-wght-normal-TKKdAiBA.woff2 +0 -0
- package/dist/eval-ui/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/dist/eval-ui/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/dist/eval-ui/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dist/eval-ui/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dist/eval-ui/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/dist/eval-ui/assets/source-serif-4-cyrillic-ext-wght-normal-cHuGMAiY.woff2 +0 -0
- package/dist/eval-ui/assets/source-serif-4-cyrillic-wght-normal-DwHjdM4S.woff2 +0 -0
- package/dist/eval-ui/assets/source-serif-4-greek-wght-normal-ece1310W.woff2 +0 -0
- package/dist/eval-ui/assets/source-serif-4-latin-ext-wght-normal-CxNHBx-q.woff2 +0 -0
- package/dist/eval-ui/assets/source-serif-4-latin-wght-normal-D9elroTD.woff2 +0 -0
- package/dist/eval-ui/assets/source-serif-4-vietnamese-wght-normal-D-yuW59g.woff2 +0 -0
- package/dist/eval-ui/index.html +45 -2
- package/dist/utils/skill-creator-detection.d.ts +5 -1
- package/dist/utils/skill-creator-detection.js +33 -2
- package/dist/utils/skill-creator-detection.js.map +1 -1
- package/package.json +17 -4
- package/dist/eval-ui/assets/index-D2OKy2AG.js +0 -74
- package/dist/eval-ui/assets/index-tEmr_c8l.css +0 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/eval-ui/index.html
CHANGED
|
@@ -4,8 +4,51 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Skill Studio</title>
|
|
7
|
-
<script
|
|
8
|
-
|
|
7
|
+
<script>
|
|
8
|
+
// FOUC-prevention: resolve theme + contrast BEFORE React mounts.
|
|
9
|
+
// Reads localStorage "vskill-theme" (values: "auto" | "light" | "dark").
|
|
10
|
+
// Falls back to prefers-color-scheme. Also sets data-contrast when
|
|
11
|
+
// prefers-contrast: more matches. try/catch wraps everything for
|
|
12
|
+
// private-browsing environments where localStorage throws.
|
|
13
|
+
(function () {
|
|
14
|
+
try {
|
|
15
|
+
var stored = null;
|
|
16
|
+
try {
|
|
17
|
+
stored = localStorage.getItem("vskill-theme");
|
|
18
|
+
} catch (e) {
|
|
19
|
+
stored = null;
|
|
20
|
+
}
|
|
21
|
+
var mode = stored === "light" || stored === "dark" || stored === "auto"
|
|
22
|
+
? stored
|
|
23
|
+
: "auto";
|
|
24
|
+
var systemDark = false;
|
|
25
|
+
try {
|
|
26
|
+
systemDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
27
|
+
} catch (e) {
|
|
28
|
+
systemDark = false;
|
|
29
|
+
}
|
|
30
|
+
var resolved = mode === "auto" ? (systemDark ? "dark" : "light") : mode;
|
|
31
|
+
document.documentElement.dataset.theme = resolved;
|
|
32
|
+
document.documentElement.dataset.themeMode = mode;
|
|
33
|
+
|
|
34
|
+
var highContrast = false;
|
|
35
|
+
try {
|
|
36
|
+
highContrast = window.matchMedia("(prefers-contrast: more)").matches;
|
|
37
|
+
} catch (e) {
|
|
38
|
+
highContrast = false;
|
|
39
|
+
}
|
|
40
|
+
if (highContrast) {
|
|
41
|
+
document.documentElement.dataset.contrast = "more";
|
|
42
|
+
}
|
|
43
|
+
} catch (e) {
|
|
44
|
+
// Defensive: never block render on theme detection failure.
|
|
45
|
+
document.documentElement.dataset.theme = "light";
|
|
46
|
+
}
|
|
47
|
+
})();
|
|
48
|
+
</script>
|
|
49
|
+
<script type="module" crossorigin src="/assets/index-PsfutY7X.js"></script>
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DS30At-e.css">
|
|
51
|
+
<link rel="stylesheet" crossorigin href="/assets/fonts-i7Lkz2zN.css">
|
|
9
52
|
</head>
|
|
10
53
|
<body>
|
|
11
54
|
<div id="root"></div>
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
* Detection order:
|
|
5
5
|
* 1. Global canonical: ~/.agents/skills/skill-creator
|
|
6
6
|
* 2. Project-local canonical: {projectRoot}/.agents/skills/skill-creator
|
|
7
|
+
* 2b. Project-local agent-native: {projectRoot}/{agent.localSkillsDir}/skill-creator
|
|
8
|
+
* for every agent in AGENTS_REGISTRY (covers .claude/skills, .cursor/skills, etc.)
|
|
7
9
|
* 3. Any registered agent's global skills directory
|
|
8
|
-
* 4. Any agent's plugin cache (e.g. Claude Code plugin cache)
|
|
10
|
+
* 4. Any agent's plugin cache (e.g. Claude Code plugin cache at ~/.claude/plugins/cache/)
|
|
11
|
+
* 4b. Any agent's plugin marketplace dir (e.g. ~/.claude/plugins/marketplaces/ — marketplace
|
|
12
|
+
* sources have an extra /plugins/ segment compared to the cache tree).
|
|
9
13
|
*/
|
|
10
14
|
export declare function isSkillCreatorInstalled(projectRoot?: string): boolean;
|
|
@@ -11,8 +11,12 @@ import { AGENTS_REGISTRY } from "../agents/agents-registry.js";
|
|
|
11
11
|
* Detection order:
|
|
12
12
|
* 1. Global canonical: ~/.agents/skills/skill-creator
|
|
13
13
|
* 2. Project-local canonical: {projectRoot}/.agents/skills/skill-creator
|
|
14
|
+
* 2b. Project-local agent-native: {projectRoot}/{agent.localSkillsDir}/skill-creator
|
|
15
|
+
* for every agent in AGENTS_REGISTRY (covers .claude/skills, .cursor/skills, etc.)
|
|
14
16
|
* 3. Any registered agent's global skills directory
|
|
15
|
-
* 4. Any agent's plugin cache (e.g. Claude Code plugin cache)
|
|
17
|
+
* 4. Any agent's plugin cache (e.g. Claude Code plugin cache at ~/.claude/plugins/cache/)
|
|
18
|
+
* 4b. Any agent's plugin marketplace dir (e.g. ~/.claude/plugins/marketplaces/ — marketplace
|
|
19
|
+
* sources have an extra /plugins/ segment compared to the cache tree).
|
|
16
20
|
*/
|
|
17
21
|
export function isSkillCreatorInstalled(projectRoot) {
|
|
18
22
|
const home = homedir();
|
|
@@ -23,7 +27,15 @@ export function isSkillCreatorInstalled(projectRoot) {
|
|
|
23
27
|
if (projectRoot && existsSync(join(projectRoot, ".agents", "skills", "skill-creator"))) {
|
|
24
28
|
return true;
|
|
25
29
|
}
|
|
26
|
-
//
|
|
30
|
+
// 2b. Project-local agent-native install dirs (.claude/skills, .cursor/skills, …)
|
|
31
|
+
if (projectRoot) {
|
|
32
|
+
for (const agent of AGENTS_REGISTRY) {
|
|
33
|
+
if (existsSync(join(projectRoot, agent.localSkillsDir, "skill-creator")))
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// 3 + 4 + 4b. Check every registered agent's global skills dir, plugin cache,
|
|
38
|
+
// and marketplace source dir.
|
|
27
39
|
for (const agent of AGENTS_REGISTRY) {
|
|
28
40
|
const resolved = agent.globalSkillsDir.replace("~", home);
|
|
29
41
|
if (existsSync(join(resolved, "skill-creator")))
|
|
@@ -44,6 +56,25 @@ export function isSkillCreatorInstalled(projectRoot) {
|
|
|
44
56
|
}
|
|
45
57
|
catch { /* ignore permission errors */ }
|
|
46
58
|
}
|
|
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
|
+
}
|
|
47
78
|
}
|
|
48
79
|
return false;
|
|
49
80
|
}
|
|
@@ -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,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vskill",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.83",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Secure multi-platform AI skill installer — scan before you install",
|
|
6
6
|
"bin": {
|
|
7
|
-
"vskill": "./dist/
|
|
7
|
+
"vskill": "./dist/bin.js"
|
|
8
8
|
},
|
|
9
9
|
"main": "./dist/index.js",
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
"dev:eval-ui": "vite dev --config src/eval-ui/vite.config.ts",
|
|
16
16
|
"test": "vitest run",
|
|
17
17
|
"test:e2e": "playwright test",
|
|
18
|
+
"test:bundle-size": "npx tsx scripts/check-bundle-size.ts",
|
|
19
|
+
"test:lhci": "lhci autorun --config=./lighthouse.config.js",
|
|
20
|
+
"lint:shimmer": "npx tsx scripts/check-no-shimmer.ts",
|
|
21
|
+
"lint:serif-scope": "npx tsx scripts/check-serif-scope.ts",
|
|
22
|
+
"lint:voice": "npx tsx scripts/check-strings-voice.ts",
|
|
23
|
+
"lint:bundle-size": "npx tsx scripts/check-bundle-size.ts",
|
|
18
24
|
"clean": "rm -rf dist",
|
|
19
25
|
"preuninstall": "node scripts/preuninstall.cjs",
|
|
20
26
|
"prepublishOnly": "npm run build && npm run build:eval-ui"
|
|
@@ -43,17 +49,24 @@
|
|
|
43
49
|
"README.md"
|
|
44
50
|
],
|
|
45
51
|
"devDependencies": {
|
|
52
|
+
"@axe-core/playwright": "^4.11.2",
|
|
46
53
|
"@figma/code-connect": "^1.4.2",
|
|
54
|
+
"@fontsource-variable/inter-tight": "^5.1.0",
|
|
55
|
+
"@fontsource-variable/jetbrains-mono": "^5.1.0",
|
|
56
|
+
"@fontsource-variable/source-serif-4": "^5.1.0",
|
|
57
|
+
"@lhci/cli": "^0.15.1",
|
|
47
58
|
"@playwright/test": "^1.58.2",
|
|
48
|
-
"@tailwindcss/vite": "
|
|
59
|
+
"@tailwindcss/vite": "~4.2.1",
|
|
49
60
|
"@types/node": "^25.2.3",
|
|
50
61
|
"@types/react": "^19.2.14",
|
|
51
62
|
"@types/react-dom": "^19.2.3",
|
|
52
63
|
"@vitejs/plugin-react": "^4.7.0",
|
|
64
|
+
"axe-core": "^4.11.3",
|
|
53
65
|
"react": "^19.2.4",
|
|
54
66
|
"react-dom": "^19.2.4",
|
|
55
67
|
"react-router-dom": "^7.13.1",
|
|
56
|
-
"
|
|
68
|
+
"react-virtuoso": "^4.18.5",
|
|
69
|
+
"tailwindcss": "~4.2.1",
|
|
57
70
|
"typescript": "^5.7.0",
|
|
58
71
|
"vite": "^6.4.1",
|
|
59
72
|
"vitest": "^3.0.0"
|