vskill 1.0.15 → 1.0.18
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 +84 -9
- package/agents.json +3 -1
- package/dist/agents/agents-registry.d.ts +69 -3
- package/dist/agents/agents-registry.js +203 -0
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/api/client.d.ts +85 -0
- package/dist/api/client.js +193 -24
- package/dist/api/client.js.map +1 -1
- package/dist/commands/add-lockfile.d.ts +6 -0
- package/dist/commands/add-lockfile.js +10 -0
- package/dist/commands/add-lockfile.js.map +1 -1
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.js +110 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/auth.d.ts +23 -0
- package/dist/commands/auth.js +105 -11
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/eval/serve.d.ts +2 -0
- package/dist/commands/eval/serve.js +126 -4
- package/dist/commands/eval/serve.js.map +1 -1
- package/dist/commands/orgs.d.ts +21 -0
- package/dist/commands/orgs.js +164 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/skill.js +14 -1
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/whoami.d.ts +29 -0
- package/dist/commands/whoami.js +119 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/discovery/github-tree.d.ts +23 -3
- package/dist/discovery/github-tree.js +172 -24
- package/dist/discovery/github-tree.js.map +1 -1
- package/dist/eval/anthropic-catalog.js +32 -2
- package/dist/eval/anthropic-catalog.js.map +1 -1
- package/dist/eval/batch-judge.js +1 -0
- package/dist/eval/batch-judge.js.map +1 -1
- package/dist/eval/llm.d.ts +1 -1
- package/dist/eval/llm.js +104 -2
- package/dist/eval/llm.js.map +1 -1
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.d.ts +2 -0
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.js +20 -0
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.js.map +1 -0
- package/dist/eval-server/active-tenant-routes.d.ts +15 -0
- package/dist/eval-server/active-tenant-routes.js +101 -0
- package/dist/eval-server/active-tenant-routes.js.map +1 -0
- package/dist/eval-server/api-routes.js +206 -6
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-server/desktop-open-routes.d.ts +8 -0
- package/dist/eval-server/desktop-open-routes.js +64 -0
- package/dist/eval-server/desktop-open-routes.js.map +1 -0
- package/dist/eval-server/eval-server.js +90 -6
- package/dist/eval-server/eval-server.js.map +1 -1
- package/dist/eval-server/export-skill-routes.d.ts +9 -0
- package/dist/eval-server/export-skill-routes.js +81 -0
- package/dist/eval-server/export-skill-routes.js.map +1 -0
- package/dist/eval-server/git-routes.d.ts +1 -0
- package/dist/eval-server/git-routes.js +101 -4
- package/dist/eval-server/git-routes.js.map +1 -1
- package/dist/eval-server/install-engine-routes.d.ts +3 -16
- package/dist/eval-server/install-engine-routes.js +9 -124
- package/dist/eval-server/install-engine-routes.js.map +1 -1
- package/dist/eval-server/install-jobs.d.ts +41 -0
- package/dist/eval-server/install-jobs.js +161 -0
- package/dist/eval-server/install-jobs.js.map +1 -0
- package/dist/eval-server/install-skill-routes.d.ts +74 -11
- package/dist/eval-server/install-skill-routes.js +506 -79
- package/dist/eval-server/install-skill-routes.js.map +1 -1
- package/dist/eval-server/install-state-routes.d.ts +25 -0
- package/dist/eval-server/install-state-routes.js +125 -0
- package/dist/eval-server/install-state-routes.js.map +1 -0
- package/dist/eval-server/oauth-github-routes.d.ts +2 -0
- package/dist/eval-server/oauth-github-routes.js +505 -0
- package/dist/eval-server/oauth-github-routes.js.map +1 -0
- package/dist/eval-server/platform-proxy.d.ts +17 -1
- package/dist/eval-server/platform-proxy.js +125 -13
- package/dist/eval-server/platform-proxy.js.map +1 -1
- package/dist/eval-server/plugin-cli-routes.js +9 -9
- package/dist/eval-server/plugin-cli-routes.js.map +1 -1
- package/dist/eval-server/remove-skill-routes.d.ts +18 -0
- package/dist/eval-server/remove-skill-routes.js +145 -0
- package/dist/eval-server/remove-skill-routes.js.map +1 -0
- package/dist/eval-server/router.d.ts +17 -3
- package/dist/eval-server/router.js +166 -9
- package/dist/eval-server/router.js.map +1 -1
- package/dist/eval-server/settings-store.js +1 -1
- package/dist/eval-server/settings-store.js.map +1 -1
- package/dist/eval-server/supported-agents-routes.d.ts +6 -0
- package/dist/eval-server/supported-agents-routes.js +41 -0
- package/dist/eval-server/supported-agents-routes.js.map +1 -0
- package/dist/eval-server/utils/spawn-env.d.ts +1 -0
- package/dist/eval-server/utils/spawn-env.js +47 -0
- package/dist/eval-server/utils/spawn-env.js.map +1 -0
- package/dist/eval-ui/assets/AdvancedTab-D8zbE5fH.js +1 -0
- package/dist/eval-ui/assets/{CreateSkillPage-BmbvQEzE.js → CreateSkillPage-DOBhKdgr.js} +5 -5
- package/dist/eval-ui/assets/FindSkillsPalette-CyMmNPr-.js +2 -0
- package/dist/eval-ui/assets/GeneralTab-DYR9NWC4.js +1 -0
- package/dist/eval-ui/assets/PrivacyTab-CXIqQokl.js +1 -0
- package/dist/eval-ui/assets/SearchPaletteCore-Dn5gQJS_.js +14 -0
- package/dist/eval-ui/assets/SkillDetailPanel-DTrRnyyJ.js +1 -0
- package/dist/eval-ui/assets/UpdateDropdown-Cvr2fe0z.js +1 -0
- package/dist/eval-ui/assets/UpdatesTab-DwJIUDPX.js +1 -0
- package/dist/eval-ui/assets/core-DZAvsxlC.js +1 -0
- package/dist/eval-ui/assets/event-CDYWU2X3.js +1 -0
- package/dist/eval-ui/assets/globals-BRZwPAPF.js +49 -0
- package/dist/eval-ui/assets/globals-C3oEdsJh.css +1 -0
- package/dist/eval-ui/assets/index-D7M0Jdss.js +1 -0
- package/dist/eval-ui/assets/lifecycle-DSleOV-l.js +1 -0
- package/dist/eval-ui/assets/lifecycle-d1Sm9Hts.css +1 -0
- package/dist/eval-ui/assets/main-D2shn1dH.js +87 -0
- package/dist/eval-ui/assets/preferences-BHZXB5dL.css +1 -0
- package/dist/eval-ui/assets/preferences-BKv6X7fK.js +2 -0
- package/dist/eval-ui/assets/useDesktopBridge-DxVWbYqK.js +2 -0
- package/dist/eval-ui/index.html +4 -2
- package/dist/eval-ui/lifecycle.html +33 -0
- package/dist/eval-ui/preferences.html +34 -0
- package/dist/index.js +47 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/bundle-files.d.ts +4 -0
- package/dist/installer/bundle-files.js +97 -0
- package/dist/installer/bundle-files.js.map +1 -0
- package/dist/installer/canonical.d.ts +31 -6
- package/dist/installer/canonical.js +50 -23
- package/dist/installer/canonical.js.map +1 -1
- package/dist/installer/clipboard-export.d.ts +19 -0
- package/dist/installer/clipboard-export.js +88 -0
- package/dist/installer/clipboard-export.js.map +1 -0
- package/dist/installer/frontmatter.js +1 -1
- package/dist/installer/frontmatter.js.map +1 -1
- package/dist/installer/multi-install.d.ts +43 -0
- package/dist/installer/multi-install.js +237 -0
- package/dist/installer/multi-install.js.map +1 -0
- package/dist/installer/transformers/aider.d.ts +2 -0
- package/dist/installer/transformers/aider.js +32 -0
- package/dist/installer/transformers/aider.js.map +1 -0
- package/dist/installer/transformers/continue-dev.d.ts +2 -0
- package/dist/installer/transformers/continue-dev.js +6 -0
- package/dist/installer/transformers/continue-dev.js.map +1 -0
- package/dist/installer/transformers/cursor.d.ts +2 -0
- package/dist/installer/transformers/cursor.js +24 -0
- package/dist/installer/transformers/cursor.js.map +1 -0
- package/dist/installer/transformers/github-copilot.d.ts +2 -0
- package/dist/installer/transformers/github-copilot.js +17 -0
- package/dist/installer/transformers/github-copilot.js.map +1 -0
- package/dist/installer/transformers/index.d.ts +78 -0
- package/dist/installer/transformers/index.js +13 -0
- package/dist/installer/transformers/index.js.map +1 -0
- package/dist/installer/transformers/junie.d.ts +2 -0
- package/dist/installer/transformers/junie.js +6 -0
- package/dist/installer/transformers/junie.js.map +1 -0
- package/dist/installer/transformers/kiro.d.ts +2 -0
- package/dist/installer/transformers/kiro.js +6 -0
- package/dist/installer/transformers/kiro.js.map +1 -0
- package/dist/installer/transformers/trae.d.ts +2 -0
- package/dist/installer/transformers/trae.js +6 -0
- package/dist/installer/transformers/trae.js.map +1 -0
- package/dist/installer/transformers/windsurf.d.ts +2 -0
- package/dist/installer/transformers/windsurf.js +12 -0
- package/dist/installer/transformers/windsurf.js.map +1 -0
- package/dist/installer/yaml-safe-mutate.d.ts +19 -0
- package/dist/installer/yaml-safe-mutate.js +184 -0
- package/dist/installer/yaml-safe-mutate.js.map +1 -0
- package/dist/lib/active-tenant.d.ts +36 -0
- package/dist/lib/active-tenant.js +120 -0
- package/dist/lib/active-tenant.js.map +1 -0
- package/dist/lib/github-fetch.d.ts +1 -0
- package/dist/lib/github-fetch.js +11 -1
- package/dist/lib/github-fetch.js.map +1 -1
- package/dist/lib/keychain.d.ts +15 -2
- package/dist/lib/keychain.js +156 -8
- package/dist/lib/keychain.js.map +1 -1
- package/dist/lib/migration/keychain-migration.d.ts +35 -0
- package/dist/lib/migration/keychain-migration.js +189 -0
- package/dist/lib/migration/keychain-migration.js.map +1 -0
- package/dist/lib/tenant-resolver.d.ts +38 -0
- package/dist/lib/tenant-resolver.js +79 -0
- package/dist/lib/tenant-resolver.js.map +1 -0
- package/dist/lockfile/types.d.ts +8 -0
- package/dist/sidecar/eval-ui-manifest.json +1 -0
- package/dist/sidecar/sea-config.json +57 -0
- package/dist/sidecar/sea-prep.blob +0 -0
- package/dist/sidecar/server.cjs +141627 -0
- package/dist/sidecar/vskill-version.txt +1 -0
- package/dist/studio/lib/ops-log.js +140 -57
- package/dist/studio/lib/ops-log.js.map +1 -1
- 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 +16 -0
- package/dist/studio/lib/scope-transfer.js +52 -25
- package/dist/studio/lib/scope-transfer.js.map +1 -1
- package/dist/studio/routes/index.js +13 -1
- package/dist/studio/routes/index.js.map +1 -1
- package/dist/studio/routes/ops.js +31 -9
- package/dist/studio/routes/ops.js.map +1 -1
- package/dist/studio/routes/promote.js +16 -11
- package/dist/studio/routes/promote.js.map +1 -1
- package/dist/studio/routes/revert.js +14 -18
- package/dist/studio/routes/revert.js.map +1 -1
- package/dist/studio/routes/test-install.js +14 -11
- package/dist/studio/routes/test-install.js.map +1 -1
- package/dist/studio-runtime/lockfile.d.ts +51 -0
- package/dist/studio-runtime/lockfile.js +216 -0
- package/dist/studio-runtime/lockfile.js.map +1 -0
- package/dist/updater/source-fetcher.js +2 -2
- package/dist/updater/source-fetcher.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 +17 -1
- package/dist/eval-ui/assets/FindSkillsPalette-D0Zjhm31.js +0 -2
- package/dist/eval-ui/assets/SearchPaletteCore-EhcN1xEa.js +0 -14
- package/dist/eval-ui/assets/SkillDetailPanel-B5J60ffv.js +0 -1
- package/dist/eval-ui/assets/UpdateDropdown-Celf0_Cr.js +0 -1
- package/dist/eval-ui/assets/index-BV7k6fdk.js +0 -124
- package/dist/eval-ui/assets/index-CKLqBL52.css +0 -1
- package/dist/eval-ui/assets/skill-studio-logo-CRyKgIrg.png +0 -0
|
@@ -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.18",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Secure multi-platform AI skill installer — scan before you install",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
"dev": "tsc --watch",
|
|
17
17
|
"dev:eval-ui": "vite dev --config src/eval-ui/vite.config.ts",
|
|
18
18
|
"test": "vitest run",
|
|
19
|
+
"verify": "node test/verify/run-verify.mjs",
|
|
20
|
+
"verify:matrix": "node --test test/verify/matrix.test.mjs",
|
|
19
21
|
"test:e2e": "playwright test",
|
|
22
|
+
"test:e2e:desktop": "playwright test --project=desktop",
|
|
20
23
|
"test:bundle-size": "npx tsx scripts/check-bundle-size.ts",
|
|
21
24
|
"test:lhci": "lhci autorun --config=./lighthouse.config.js",
|
|
22
25
|
"lint:shimmer": "npx tsx scripts/check-no-shimmer.ts",
|
|
@@ -25,6 +28,10 @@
|
|
|
25
28
|
"lint:bundle-size": "npx tsx scripts/check-bundle-size.ts",
|
|
26
29
|
"lint:skills-spec": "npx tsx scripts/validate-skills-spec.ts",
|
|
27
30
|
"clean": "rm -rf dist",
|
|
31
|
+
"tauri": "tauri",
|
|
32
|
+
"desktop:dev": "tauri dev",
|
|
33
|
+
"desktop:build": "tauri build",
|
|
34
|
+
"desktop:sidecar:build": "bash scripts/desktop/build-sidecar.sh",
|
|
28
35
|
"preuninstall": "node scripts/preuninstall.cjs",
|
|
29
36
|
"sync:readme-badges": "node scripts/sync-readme-badges.cjs",
|
|
30
37
|
"prepublishOnly": "npm run build && npm run build:eval-ui && node scripts/sync-readme-badges.cjs && git diff --exit-code README.md"
|
|
@@ -62,6 +69,7 @@
|
|
|
62
69
|
"@lhci/cli": "^0.15.1",
|
|
63
70
|
"@playwright/test": "^1.58.2",
|
|
64
71
|
"@tailwindcss/vite": "~4.2.1",
|
|
72
|
+
"@tauri-apps/cli": "^2",
|
|
65
73
|
"@types/node": "^25.2.3",
|
|
66
74
|
"@types/react": "^19.2.14",
|
|
67
75
|
"@types/react-dom": "^19.2.3",
|
|
@@ -84,9 +92,17 @@
|
|
|
84
92
|
"dependencies": {
|
|
85
93
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
86
94
|
"@napi-rs/keyring": "^1.3.0",
|
|
95
|
+
"@tauri-apps/api": "^2.11.0",
|
|
96
|
+
"@tauri-apps/plugin-autostart": "^2.5.1",
|
|
97
|
+
"@tauri-apps/plugin-dialog": "^2.7.1",
|
|
98
|
+
"@tauri-apps/plugin-process": "^2.3.1",
|
|
99
|
+
"@tauri-apps/plugin-shell": "^2.3.5",
|
|
100
|
+
"@tauri-apps/plugin-updater": "^2.10.1",
|
|
87
101
|
"commander": "^14.0.3",
|
|
102
|
+
"i18next": "^23.16.8",
|
|
88
103
|
"minimatch": "^9.0.9",
|
|
89
104
|
"openai": "^6.34.0",
|
|
105
|
+
"react-i18next": "^14.1.3",
|
|
90
106
|
"simple-git": "~3.33.0",
|
|
91
107
|
"trash": "^9.0.0"
|
|
92
108
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SearchPaletteCore-EhcN1xEa.js","assets/index-BV7k6fdk.js","assets/index-CKLqBL52.css","assets/fonts-i7Lkz2zN.css","assets/skill-url-C4ekwoGs.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as t,j as d,_ as l}from"./index-BV7k6fdk.js";/* empty css */const f=t.lazy(()=>l(()=>import("./SearchPaletteCore-EhcN1xEa.js"),__vite__mapDeps([0,1,2,3,4])));function w(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function y({onSelect:i,onNavigate:u}={}){const[n,o]=t.useState(!1),s=t.useRef(null),a=w();t.useEffect(()=>{function e(){s.current=document.activeElement??null,o(!0)}return window.addEventListener("openFindSkills",e),()=>window.removeEventListener("openFindSkills",e)},[]),t.useEffect(()=>{if(!n)return;function e(r){r.key==="Escape"&&o(!1)}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[n]),t.useEffect(()=>{if(n)return;const e=s.current;if(e&&typeof e.focus=="function")try{e.focus()}catch{}s.current=null},[n]);const c=t.useCallback((e,r)=>{try{typeof window<"u"&&window.sessionStorage&&window.sessionStorage.setItem("find-skills:last-query",r??"")}catch{}if(o(!1),i)try{i(e,r)}catch{}},[i]);return n?d.jsx("div",{"data-testid":"find-skills-palette-shell","data-reduced-motion":a?"true":"false",children:d.jsx(t.Suspense,{fallback:null,children:d.jsx(f,{initialOpen:!0,onSelect:c,onNavigate:u})})}):null}export{y as FindSkillsPalette,y as default};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import{r as a,j as t,h as xe}from"./index-BV7k6fdk.js";import{a as ye}from"./skill-url-C4ekwoGs.js";/* empty css */function me(i){return i?i.replace(/<(?!\/?b>)[^>]+>/gi,""):""}function be(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Ie(i,p){if(!i)return"";const d=be(i);if(!p)return d;const u=p.trim().split(/\s+/).filter(Boolean);if(u.length===0)return d;const T=u.map(W=>W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),b=new RegExp(`(${T})`,"gi");return d.replace(b,"<b>$1</b>")}function ve(i){return i?i<1e3?String(i):`${(i/1e3).toFixed(1)}k`:""}const ke=[{label:"Security",href:"/skills?category=security"},{label:"Coding",href:"/skills?category=development"},{label:"DevOps",href:"/skills?category=devops"},{label:"Testing",href:"/skills?category=testing"},{label:"Data",href:"/skills?category=data"},{label:"Design",href:"/skills?category=design"}],Se=[{label:"Submit a skill",href:"/submit"},{label:"Browse all skills",href:"/skills"}],J="var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif)",c="var(--font-mono, 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace)";function Ee({tier:i,isTainted:p,isBlocked:d}){const u={display:"inline-flex",alignItems:"center",padding:"1px 6px",height:16,borderRadius:3,fontFamily:c,fontSize:9.5,fontWeight:600,letterSpacing:"0.04em",whiteSpace:"nowrap",lineHeight:1,textTransform:"uppercase"};if(d)return t.jsx("span",{"data-testid":"mini-tier-badge","data-tier":"BLOCKED",style:{...u,color:"#7A1F1F",background:"#FBE8E5",border:"1px solid #E8B7B0"},children:"BLOCKED"});if(p)return t.jsx("span",{"data-testid":"mini-tier-badge","data-tier":"TAINTED",style:{...u,color:"#7A4A00",background:"#FBEFD3",border:"1px solid #E8C885"},children:"Tainted"});const b={CERTIFIED:{color:"var(--color-installed, #2F6A4A)",bg:"rgba(47,106,74,0.08)",border:"rgba(47,106,74,0.25)"},VERIFIED:{color:"var(--color-focus, #3B6EA8)",bg:"rgba(59,110,168,0.08)",border:"rgba(59,110,168,0.25)"},REJECTED:{color:"#7A1F1F",bg:"#FBE8E5",border:"#E8B7B0"},BLOCKED:{color:"#7A1F1F",bg:"#FBE8E5",border:"#E8B7B0"}}[i];return b?t.jsx("span",{"data-testid":"mini-tier-badge","data-tier":i,style:{...u,color:b.color,background:b.bg,border:`1px solid ${b.border}`},children:xe(i)}):null}function O(){return t.jsxs("div",{"data-testid":"skeleton-row",style:{padding:"10px 18px",display:"flex",alignItems:"center",gap:10},children:[t.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:6},children:[t.jsx("div",{style:{height:12,width:"32%",borderRadius:3,background:"var(--color-rule, #E8E1D6)",animation:"fsp-pulse 1.4s ease-in-out infinite"}}),t.jsx("div",{style:{height:9,width:"55%",borderRadius:3,background:"var(--color-rule, #E8E1D6)",animation:"fsp-pulse 1.4s ease-in-out infinite",animationDelay:"0.18s"}})]}),t.jsx("div",{style:{height:14,width:52,borderRadius:3,background:"var(--color-rule, #E8E1D6)",animation:"fsp-pulse 1.4s ease-in-out infinite",animationDelay:"0.36s"}})]})}function Fe(i){var d,u;const p=(d=i.target)==null?void 0:d.tagName;return!!(p==="INPUT"||p==="TEXTAREA"||p==="SELECT"||(u=i.target)!=null&&u.isContentEditable)}const je="/api/v1/studio/search",we="/api/v1/stats",Ae="/api/v1/studio/telemetry/search-select",Re=10,Q=20,Ce=150;function Be({onSelect:i,onNavigate:p,searchUrl:d=je,trendingUrl:u=we,telemetrySelectUrl:T=Ae,maxPages:b=Re,initialOpen:W=!1}={}){const[L,E]=a.useState(W),[o,F]=a.useState(""),[I,h]=a.useState([]),[U,v]=a.useState(0),[j,B]=a.useState(!1),[_,w]=a.useState(1),[H,x]=a.useState(!1),[M,V]=a.useState(!1),[$,k]=a.useState(null),[A,R]=a.useState(!1),Z=a.useRef(null),N=a.useRef(null),z=a.useRef(!1),ee=a.useRef(null),te=a.useRef(null),q=a.useRef(new Map),S=a.useRef(null),[,ue]=a.useState(!1),re=a.useMemo(()=>typeof navigator<"u"&&/Mac|iPod|iPhone|iPad/.test(navigator.platform||""),[]),K=a.useRef(o);a.useEffect(()=>{K.current=o},[o]),a.useEffect(()=>{S.current||fetch(u).then(e=>e.json()).then(e=>{S.current=e.trendingSkills??[],ue(!0)}).catch(()=>{})},[u]),a.useEffect(()=>{const e=r=>{if(r.key==="Escape"){E(!1);return}if(L&&(r.metaKey||r.ctrlKey)&&/^[1-9]$/.test(r.key)){r.preventDefault();const s=Number(r.key)-1;v(s),window.dispatchEvent(new CustomEvent("findSkillsActivateAt",{detail:{index:s}}));return}!r.metaKey&&!r.ctrlKey&&!r.altKey&&r.key.length===1&&!Fe(r)&&(z.current=!0,F(r.key),E(!0))},n=r=>{var y;const l=(y=r.detail)==null?void 0:y.query;l&&(z.current=!0,F(l)),E(!0)};return window.addEventListener("keydown",e),window.addEventListener("openFindSkills",n),()=>{window.removeEventListener("keydown",e),window.removeEventListener("openFindSkills",n)}},[L]),a.useLayoutEffect(()=>{var n;if(!L){(n=N.current)==null||n.abort();return}if(z.current)z.current=!1,h([]),v(0),w(1),x(!1),B(!1),k(null),R(!1);else{const r=(()=>{var s;try{return((s=window.sessionStorage)==null?void 0:s.getItem("find-skills:last-query"))??""}catch{return""}})();F(r),h([]),v(0),w(1),x(!1),B(!1),k(null),R(!1)}const e=Z.current;if(e){e.focus({preventScroll:!0});const r=e.value.length;e.setSelectionRange(r,r)}},[L]),a.useEffect(()=>{if(!o.trim()||o.trim().length<2){h([]),x(!1),w(1),k(null);return}const e=6e4,n=o.trim().toLowerCase(),r=q.current.get(n);if(r&&Date.now()-r.timestamp<e){h(r.results),x(r.hasMore),w(1),B(!1),k(null),fetch(`${d}?q=${encodeURIComponent(o)}&limit=${Q}&page=1`).then(m=>m.ok?m.json():null).then(m=>{var g;m&&q.current.set(n,{results:m.results||[],hasMore:((g=m.pagination)==null?void 0:g.hasMore)??!1,timestamp:Date.now()})}).catch(()=>{});return}B(!0),k(null);const l=new AbortController,y=setTimeout(async()=>{var m;try{const g=await fetch(`${d}?q=${encodeURIComponent(o)}&limit=${Q}&page=1`,{signal:l.signal});if(g.status>=500){R(!0),h([]),x(!1),k(null);return}if(!g.ok){h([]),x(!1),k(`search failed (${g.status})`);return}const ce=await g.json(),de=ce.results||[],pe=((m=ce.pagination)==null?void 0:m.hasMore)??!1;h(de),x(pe),w(1),R(!1),q.current.set(n,{results:de,hasMore:pe,timestamp:Date.now()})}catch(g){if(g instanceof DOMException&&g.name==="AbortError")return;R(!0),h([]),x(!1),k(null)}finally{l.signal.aborted||B(!1)}},Ce);return()=>{clearTimeout(y),l.abort()}},[o,d]);const C=_>=b,ne=a.useCallback(async()=>{var n,r;if(M||C)return;const e=_+1;V(!0),N.current=new AbortController;try{const s=await fetch(`${d}?q=${encodeURIComponent(o)}&limit=${Q}&page=${e}`,{signal:N.current.signal});if(!s.ok)return;const l=await s.json();h(y=>[...y,...l.results||[]]),x(((n=l.pagination)==null?void 0:n.hasMore)??!1),w(e)}catch(s){if(s instanceof DOMException&&s.name==="AbortError")return}finally{(r=N.current)!=null&&r.signal.aborted||V(!1)}},[_,o,M,C,d]);a.useEffect(()=>{const e=ee.current,n=te.current;if(!e||!n||typeof IntersectionObserver>"u")return;const r=new IntersectionObserver(s=>{s[0].isIntersecting&&H&&!j&&!M&&!C&&ne()},{root:n,rootMargin:"100px"});return r.observe(e),()=>r.disconnect()},[H,j,M,C,ne]);const P=e=>({name:e.name,displayName:e.displayName,author:e.author,repoUrl:e.repoUrl,certTier:e.certTier,githubStars:0,highlight:"",category:"",ownerSlug:e.ownerSlug,repoSlug:e.repoSlug,skillSlug:e.skillSlug}),G=(()=>{const e=o.trim();if(A&&e.length>=1&&S.current){const n=e.toLowerCase();return S.current.filter(r=>r.name.toLowerCase().includes(n)||(r.displayName??"").toLowerCase().includes(n)).slice(0,30).map(P)}if(e.length>=2)return I;if(e.length===1&&S.current){const n=e.toLowerCase();return S.current.filter(r=>r.name.toLowerCase().startsWith(n)||r.displayName.toLowerCase().startsWith(n)).slice(0,10).map(P)}return e.length===0&&S.current?S.current.slice(0,10).map(P):[]})(),f=[...G.map(e=>{const n=e.skillSlug||e.name.split("/").pop()||e.name,r=e.ownerSlug&&e.repoSlug?`${e.ownerSlug}/${e.repoSlug}`:e.author;return{type:"skill",label:n,publisher:r,name:e.name,command:e.command?e.pluginName?`${e.pluginName}:${e.command}`:e.command:void 0,pluginName:e.pluginName||void 0,meta:e.category||"",certTier:e.certTier,isTainted:e.isTainted,isBlocked:e.isBlocked,repoUrl:e.repoUrl,highlight:e.highlight,githubStars:e.githubStars,category:e.category,href:ye(e.name),sourceResult:e}}),...!o&&G.length===0?ke.map(e=>({type:"category",label:e.label,publisher:"",name:"",meta:"",certTier:"",repoUrl:"",href:e.href})):[],...!o&&G.length===0?Se.map(e=>({type:"action",label:e.label,publisher:"",name:"",meta:"",certTier:"",repoUrl:"",href:e.href})):[]],ae=a.useCallback(e=>{try{fetch(T,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({skillName:e,q:K.current.trim(),ts:Date.now()}),keepalive:!0}).catch(()=>{})}catch{}},[T]),D=a.useCallback((e,n)=>{if(n&&(ae(n.name),i))try{i(n,K.current.trim())}catch{}if(E(!1),p)try{p(e)}catch{}},[i,p,ae]);a.useEffect(()=>{function e(n){var l;const r=((l=n.detail)==null?void 0:l.index)??-1,s=f[r];s&&D(s.href,s.type==="skill"?s.sourceResult:void 0)}return window.addEventListener("findSkillsActivateAt",e),()=>window.removeEventListener("findSkillsActivateAt",e)},[f,D]);const fe=e=>{if(e.key==="ArrowDown")e.preventDefault(),v(n=>Math.min(n+1,f.length-1));else if(e.key==="ArrowUp")e.preventDefault(),v(n=>Math.max(n-1,0));else if(e.key==="Enter"&&f[U]){const n=f[U];D(n.href,n.type==="skill"?n.sourceResult:void 0)}};if(!L)return null;let ie="";const se=!j&&!$&&!A&&o.trim().length>=2&&I.length===0,Y=j&&I.length===0&&o.trim().length>=2&&!A,oe=o.trim(),le=()=>{R(!1);const e=o;F(""),setTimeout(()=>F(e),0)},ge={position:"fixed",inset:0,background:"color-mix(in srgb, var(--color-ink, #191919) 35%, transparent)",backdropFilter:"blur(6px) saturate(1.1)",WebkitBackdropFilter:"blur(6px) saturate(1.1)"},he={position:"relative",width:"100%",maxWidth:640,margin:"0 16px",background:"var(--bg-surface, #FFFFFF)",color:"var(--text-primary, #191919)",borderRadius:12,border:"1px solid var(--color-rule, #E8E1D6)",boxShadow:"0 1px 0 rgba(255,255,255,0.6) inset,0 24px 60px -12px rgba(25,20,15,0.28),0 12px 24px -8px rgba(25,20,15,0.18)",overflow:"hidden",fontFamily:J};return t.jsxs("div",{"data-testid":"find-skills-palette",role:"dialog","aria-modal":"true","aria-label":"Find verified skills",style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"min(18vh, 144px)"},onClick:()=>E(!1),children:[t.jsx("div",{style:ge}),t.jsx("style",{children:`
|
|
2
|
-
@keyframes fsp-pulse {
|
|
3
|
-
0%, 100% { opacity: 1; }
|
|
4
|
-
50% { opacity: 0.45; }
|
|
5
|
-
}
|
|
6
|
-
@keyframes fsp-rise {
|
|
7
|
-
from { opacity: 0; transform: translateY(-6px); }
|
|
8
|
-
to { opacity: 1; transform: translateY(0); }
|
|
9
|
-
}
|
|
10
|
-
@media (prefers-reduced-motion: reduce) {
|
|
11
|
-
.fsp-rise { animation: none !important; }
|
|
12
|
-
[data-testid="skeleton-row"] > div { animation: none !important; }
|
|
13
|
-
}
|
|
14
|
-
`}),t.jsxs("div",{className:"fsp-rise",style:{...he,animation:"fsp-rise 180ms cubic-bezier(0.2, 0, 0, 1)"},onClick:e=>e.stopPropagation(),children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"0 18px",borderBottom:"1px solid var(--color-rule, #E8E1D6)",background:"linear-gradient(180deg, var(--bg-surface, #FFFFFF) 0%, color-mix(in srgb, var(--bg-surface, #FFFFFF) 96%, var(--color-accent, #D4A27F) 4%) 100%)"},children:[t.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:18,height:18,marginRight:10,color:"var(--color-accent-ink, #7A4A24)"},children:t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("circle",{cx:"7",cy:"7",r:"4.5"}),t.jsx("path",{d:"m13.5 13.5-3.2-3.2"})]})}),t.jsx("input",{ref:Z,value:o,onChange:e=>{F(e.target.value),v(0)},onKeyDown:fe,placeholder:"Search verified skills…",role:"combobox","aria-expanded":"true","aria-controls":"find-skills-listbox","aria-autocomplete":"list",autoFocus:!0,spellCheck:!1,autoCorrect:"off",autoCapitalize:"off",style:{flex:1,border:"none",outline:"none",padding:"16px 0",fontFamily:J,fontSize:16,fontWeight:400,letterSpacing:"-0.005em",background:"transparent",color:"var(--text-primary, #191919)",minWidth:0}}),j&&t.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",marginRight:10,color:"var(--text-secondary, #5A5651)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14","aria-hidden":"true",children:[t.jsx("circle",{cx:"7",cy:"7",r:"5.5",stroke:"currentColor",strokeWidth:"1.4",fill:"none",opacity:"0.25"}),t.jsx("path",{d:"M12.5 7a5.5 5.5 0 0 0-5.5-5.5",stroke:"currentColor",strokeWidth:"1.4",fill:"none",strokeLinecap:"round",children:t.jsx("animateTransform",{attributeName:"transform",type:"rotate",from:"0 7 7",to:"360 7 7",dur:"0.7s",repeatCount:"indefinite"})})]})}),t.jsx("kbd",{style:{fontFamily:c,fontSize:10.5,fontWeight:500,color:"var(--text-secondary, #5A5651)",border:"1px solid var(--color-rule, #E8E1D6)",borderRadius:4,padding:"2px 6px",background:"var(--bg-canvas, #FBF8F3)"},children:"Esc"})]}),A&&t.jsxs("div",{"data-testid":"search-degraded-banner",role:"status",style:{display:"flex",alignItems:"center",gap:10,padding:"8px 18px",fontFamily:c,fontSize:11.5,color:"var(--color-accent-ink, #7A4A24)",background:"color-mix(in srgb, var(--color-accent, #D4A27F) 12%, transparent)",borderBottom:"1px solid color-mix(in srgb, var(--color-accent, #D4A27F) 30%, transparent)"},children:[t.jsx("span",{"aria-hidden":"true",children:"◐"}),t.jsx("span",{style:{flex:1},children:"Live search is offline — showing trending matches"}),t.jsx("button",{"data-testid":"search-retry",onClick:le,style:{fontFamily:c,fontSize:10.5,padding:"3px 8px",borderRadius:3,border:"1px solid var(--color-accent, #D4A27F)",background:"transparent",color:"var(--color-accent-ink, #7A4A24)",cursor:"pointer"},children:"Retry"})]}),t.jsxs("div",{ref:te,role:"listbox",id:"find-skills-listbox",style:{maxHeight:"min(56vh, 432px)",overflowY:"auto",padding:"6px 0"},children:[Y&&t.jsxs(t.Fragment,{children:[t.jsx(O,{}),t.jsx(O,{}),t.jsx(O,{}),t.jsx(O,{})]}),$&&!A&&t.jsxs("div",{"data-testid":"search-error",style:{padding:"20px 18px",textAlign:"center",fontFamily:c,fontSize:12.5,color:"var(--color-ink-muted, #5A5651)"},children:[t.jsx("div",{style:{marginBottom:8},children:$}),t.jsx("button",{"data-testid":"search-retry",onClick:le,style:{fontFamily:c,fontSize:11,padding:"4px 10px",borderRadius:4,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-primary, #191919)",cursor:"pointer"},children:"Retry"})]}),se&&t.jsxs("div",{style:{padding:"28px 18px",textAlign:"center"},children:[t.jsxs("div",{style:{fontFamily:J,fontSize:13,color:"var(--text-secondary, #5A5651)",marginBottom:6},children:["No matches for ",t.jsxs("span",{style:{color:"var(--text-primary, #191919)",fontFamily:c},children:['"',oe,'"']})]}),t.jsx("a",{href:"/skills",style:{fontFamily:c,fontSize:12,color:"var(--color-action, #2F5B8E)",textDecoration:"none",borderBottom:"1px solid currentColor",paddingBottom:1},onClick:e=>{e.preventDefault(),D("/skills")},children:"Browse by category →"})]}),!Y&&f.length===0&&!se&&!$&&t.jsx("div",{style:{padding:"20px 18px",textAlign:"center",fontFamily:c,fontSize:11.5,color:"var(--text-secondary, #5A5651)"},children:"Loading trending…"}),!Y&&f.map((e,n)=>{const r=e.type==="skill"?A?"TRENDING (FILTERED)":oe.length>=2?"RESULTS":"TRENDING":e.type==="category"?"CATEGORIES":"ACTIONS",s=r!==ie;s&&(ie=r);const l=n===U,y=n<9?`${re?"⌘":"Ctrl"} ${n+1}`:"";return t.jsxs("div",{children:[s&&t.jsx("div",{style:{padding:"10px 18px 4px",fontFamily:c,fontSize:9.5,fontWeight:600,color:"var(--text-secondary, #5A5651)",letterSpacing:"0.12em",textTransform:"uppercase"},children:r}),e.type==="skill"?t.jsxs("div",{role:"option","aria-selected":l,onClick:()=>D(e.href,e.sourceResult),onMouseEnter:()=>v(n),style:{position:"relative",padding:"8px 18px 8px 22px",cursor:"pointer",display:"flex",alignItems:"center",gap:12,background:l?"color-mix(in srgb, var(--color-accent, #D4A27F) 8%, transparent)":"transparent",transition:"background 120ms ease"},children:[l&&t.jsx("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:6,bottom:6,width:3,background:"var(--color-accent, #D4A27F)",borderRadius:"0 2px 2px 0"}}),t.jsxs("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:2},children:[t.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:8},children:[t.jsx("span",{style:{fontFamily:c,fontSize:13,fontWeight:600,color:"var(--text-primary, #191919)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100%"},children:e.label}),e.pluginName&&t.jsx("span",{style:{fontSize:9.5,padding:"1px 5px",borderRadius:3,color:"var(--color-action, #2F5B8E)",background:"rgba(47,91,142,0.08)",border:"1px solid rgba(47,91,142,0.22)",whiteSpace:"nowrap",flexShrink:0,fontFamily:c},children:e.pluginName})]}),t.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #5A5651)",fontFamily:c,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",opacity:.85},children:[e.publisher,e.highlight&&t.jsxs(t.Fragment,{children:[t.jsx("span",{style:{margin:"0 6px",opacity:.5},children:"·"}),t.jsx("span",{"data-testid":"search-highlight",dangerouslySetInnerHTML:{__html:me(e.highlight)}})]})]})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexShrink:0},children:[e.githubStars!=null&&e.githubStars>0&&t.jsxs("span",{"data-testid":"star-count",style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10.5,fontFamily:c,color:"var(--text-secondary, #5A5651)",whiteSpace:"nowrap"},children:[t.jsx("svg",{width:10,height:10,viewBox:"0 0 16 16",fill:"currentColor","aria-hidden":"true",children:t.jsx("path",{d:"M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"})}),ve(e.githubStars)]}),t.jsx(Ee,{tier:e.certTier,isTainted:e.isTainted,isBlocked:e.isBlocked}),l&&y&&t.jsx("span",{"aria-hidden":"true",style:{fontFamily:c,fontSize:9.5,color:"var(--text-secondary, #5A5651)",padding:"1px 5px",borderRadius:3,border:"1px solid var(--color-rule, #E8E1D6)",whiteSpace:"nowrap"},children:y})]})]}):t.jsxs("div",{role:"option","aria-selected":l,onClick:()=>D(e.href),onMouseEnter:()=>v(n),style:{position:"relative",padding:"7px 18px 7px 22px",cursor:"pointer",background:l?"color-mix(in srgb, var(--color-accent, #D4A27F) 8%, transparent)":"transparent",fontFamily:c,fontSize:12.5,color:"var(--text-primary, #191919)"},children:[l&&t.jsx("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:4,bottom:4,width:3,background:"var(--color-accent, #D4A27F)",borderRadius:"0 2px 2px 0"}}),e.label]})]},`${e.type}-${e.name||e.label}`)}),H&&!j&&I.length>0&&!C&&t.jsx("div",{ref:ee,"data-testid":"scroll-sentinel",style:{padding:"8px 18px",textAlign:"center"},children:M&&t.jsx("span",{style:{fontFamily:c,fontSize:11,color:"var(--text-secondary, #5A5651)"},children:"Loading…"})}),C&&I.length>0&&t.jsx("div",{"data-testid":"hard-cap-link",style:{padding:"12px 18px",textAlign:"center",fontFamily:c,fontSize:11.5},children:t.jsx("a",{href:`https://verified-skill.com/skills?q=${encodeURIComponent(o.trim())}`,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--color-action, #2F5B8E)",textDecoration:"none"},children:"See all results on verified-skill.com →"})})]}),t.jsxs("div",{"data-testid":"palette-footer",style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 18px",borderTop:"1px solid var(--color-rule, #E8E1D6)",background:"var(--bg-canvas, #FBF8F3)",fontFamily:c,fontSize:10.5,color:"var(--text-secondary, #5A5651)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:14},children:[t.jsx(X,{keys:["↑","↓"],label:"navigate"}),t.jsx(X,{keys:["↵"],label:"open"}),t.jsx(X,{keys:[re?"⌘":"Ctrl","1-9"],label:"jump"})]}),t.jsx("div",{style:{display:"flex",alignItems:"center",gap:6},children:t.jsx("span",{style:{opacity:.7},children:f.length>0?`${f.length} ${f.length===1?"result":"results"}`:""})})]})]})]})}function X({keys:i,label:p}){return t.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[t.jsx("span",{style:{display:"inline-flex",alignItems:"center",gap:2},children:i.map((d,u)=>t.jsx("kbd",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",minWidth:16,height:16,padding:"0 4px",fontFamily:c,fontSize:10,fontWeight:500,color:"var(--text-secondary, #5A5651)",background:"var(--bg-surface, #FFFFFF)",border:"1px solid var(--color-rule, #E8E1D6)",borderRadius:3,lineHeight:1},children:d},u))}),t.jsx("span",{children:p})]})}export{Be as default,ve as formatStarCount,Ie as highlightMatches};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,r as d,T as te}from"./index-BV7k6fdk.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 i=r.trim().match(ne);if(!i)return null;const c=(g=i[1])==null?void 0:g.toLowerCase();let n=(x=i[2])==null?void 0:x.toLowerCase();if(!c||!n)return null;n=n.replace(/\.git$/,"");const p=`https://github.com/${c}/${n}`;return{owner:c,name:n,url:p}}function oe({repoUrl:r,mono:o="var(--font-geist-mono)",fontSize:i="0.75rem",showPlaceholder:c=!0}){if(!r)return c?e.jsx("span",{style:{color:"var(--text-faint)",fontSize:i},children:"--"}):null;const n=se(r);return n?e.jsxs("a",{"data-testid":"repo-link",href:n.url,target:"_blank",rel:"noopener noreferrer",onClick:p=>p.stopPropagation(),style:{color:"#0D9488",textDecoration:"none",fontSize:i,fontFamily:o},children:[n.owner,"/",n.name]}):e.jsx("span",{style:{color:"var(--text-faint)",fontSize:i,fontFamily:o},children:r})}const ie="var(--font-geist-mono)",ae={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[i,c]=d.useState(null),[n,p]=d.useState(!1);if(d.useEffect(()=>{o&&(p(!0),fetch(D(r,"repo-health")).then(E=>{if(!E.ok)throw new Error("fetch failed");return E.json()}).then(E=>{c(E.status),p(!1)}).catch(()=>{c(null),p(!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(!i||i==="UNKNOWN")return null;const g=ae[i]??"var(--status-neutral-text)",x=le[i]??"var(--status-neutral-bg)";return e.jsx("span",{"data-testid":"repo-health-badge",style:{fontFamily:ie,fontSize:"0.75rem",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.03em",padding:"0.2rem 0.6rem",borderRadius:"999px",backgroundColor:x,color:g,whiteSpace:"nowrap"},children:i})}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",pe=/^[a-zA-Z0-9._@/-]+$/,me=/^[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,i,c){const n=i?`${r}/${o}@${i}`:`${r}/${o}`;if(!pe.test(`${r}/${o}`))return{ok:!1,reason:"Invalid skill identifier"};if(i&&!me.test(i))return{ok:!1,reason:"Invalid version identifier"};const p=he(c),g=`npx vskill@latest install ${n}${p}`,x=[{label:"npm",comment:"# npm",command:g},{label:"bun",comment:"# bun",command:`bunx vskill@latest install ${n}${p}`},{label:"pnpm",comment:"# pnpm",command:`pnpx vskill@latest install ${n}${p}`},{label:"yarn",comment:"# yarn",command:`yarn dlx vskill@latest install ${n}${p}`},{label:"alternative",comment:"# alternative (publisher + --skill flag)",command:i?`npx vskill@latest install ${r}@${i} --skill ${o}${p}`:`npx vskill@latest install ${r} --skill ${o}${p}`}];return{ok:!0,command:g,variants:x}}function T(r,o,i){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:r,kind:o,durationMs:i,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 i=document.createElement("textarea");i.value=r,i.setAttribute("readonly",""),i.style.position="fixed",i.style.left="-9999px",document.body.appendChild(i),i.select();const c=document.execCommand("copy");return document.body.removeChild(i),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:i=ue,onToast:c}){const[n,p]=d.useState(null),[g,x]=d.useState([]),[E,H]=d.useState(!1),[K,q]=d.useState(null),[I,A]=d.useState(!0),[C,L]=d.useState(null),[h,z]=d.useState(null),[v,G]=d.useState("project"),[Z,J]=d.useState(0),N=d.useRef(null),V=d.useRef(null),O=d.useRef(null),k=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;A(!0),L(null);const s=D(k),u=D(k,"versions");return Promise.all([fetch(s).then(async a=>{if(!a.ok)throw new Error(`metadata ${a.status}`);return a.json()}),fetch(u).then(async a=>{if(!a.ok)throw new Error(`versions ${a.status}`);const l=await a.json(),m=Array.isArray(l)?l:(l==null?void 0:l.versions)??[],y=!Array.isArray(l)&&(l==null?void 0:l.unversioned)===!0,b=!Array.isArray(l)&&typeof(l==null?void 0:l.currentVersion)=="string"?l.currentVersion:null;return{list:m,unversioned:y,currentVersion:b}})]).then(([a,l])=>{if(t)return;p(a),x(l.list),H(l.unversioned),q(l.currentVersion);const m=l.list.find(y=>y.isLatest)??l.list[0]??null;z(m?m.version:null),A(!1)}).catch(a=>{t||(L(a instanceof Error?a.message:String(a)),A(!1))}),()=>{t=!0}},[k,Z]),d.useEffect(()=>{function t(s){if(s.key==="Escape")s.stopPropagation(),j();else if(s.key==="Tab"){const u=N.current;if(!u)return;const a=u.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])');if(a.length===0)return;const l=a[0],m=a[a.length-1],y=document.activeElement;s.shiftKey&&y===l?(s.preventDefault(),m.focus()):!s.shiftKey&&y===m&&(s.preventDefault(),l.focus())}}return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[]);const j=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]),w=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,$=d.useMemo(()=>g.length===0?[]:[...g].sort((s,u)=>{const a=s.publishedAt?Date.parse(s.publishedAt):0;return(u.publishedAt?Date.parse(u.publishedAt):0)-a}).slice(0,5),[g]),R=d.useMemo(()=>!h||$.length===0?!0:$[0].version===h,[h,$]),f=d.useMemo(()=>h?xe(w,S,R?null:h,v):null,[w,S,h,R,v]),B=d.useCallback(async()=>{if(!f||!f.ok)return;const t=await P(f.command);W(i,{skillName:k,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 T(s,t?"success":"error",3500)},[f,i,k,h,w,S,R,c]),Y=d.useCallback(async()=>{if(!f||!f.ok)return;const t=`${w}/${S}`;if(c)try{c(`Installing ${t}…`,"info")}catch{}else T(`Installing ${t}…`,"info",5e3);let s=null;try{const m=await fetch("/api/studio/install-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({skill:t,scope:v})});if(m.status===404)return B();if(!m.ok){const F=(await m.json().catch(()=>({}))).error||`Install failed (HTTP ${m.status})`;if(c)try{c(F,"error")}catch{}else T(F,"error",6e3);return}const y=await m.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",m=>{var U;clearTimeout(l);try{u.close()}catch{}let y={};try{y=JSON.parse(m.data)}catch{}const b=y.success===!0,F=b?`Installed ${t} (${v})`:`Install failed: ${((U=y.stderr)==null?void 0:U.trim().split(/\r?\n/).slice(-1)[0])||"see terminal"}`;if(c)try{c(F,b?"success":"error")}catch{}else T(F,b?"success":"error",b?4e3:8e3);if(b){if(typeof window<"u")try{window.dispatchEvent(new CustomEvent("studio:skill-installed",{detail:{skill:t,scope:v}}))}catch{}j()}}),u.onerror=()=>{clearTimeout(l);try{u.close()}catch{}}},[f,w,S,v,c,B,j]),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&&j()},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:j,"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:[I&&e.jsx("div",{"data-testid":"skill-detail-loading",style:{padding:"2rem",textAlign:"center",color:"var(--text-secondary, #5A5651)"},children:"Loading…"}),C&&!I&&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: ",C]}),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"})]}),!I&&!C&&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:k,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"}),$.length===0?E?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:$.map(t=>{const s=t.version===h,u=t.publishedAt?t.publishedAt.slice(0,10):"",a=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]}),a&&e.jsxs("span",{style:{color:"var(--text-secondary, #5A5651)"},children:["· ",a]}),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=v===t,u=t==="project"?"Per-repo .claude/skills/ — only this repo can see it":t==="user"?"~/.claude/skills/ — every repo under your user, Claude Code only":"Every detected AI agent on this machine (~/.agents/skills/ + ~/.claude/skills/, ~/.cursor/skills/, …)",a=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:a},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),a=u?`Run ${t.command} in your terminal`:"Copy failed — please copy the command manually.";if(c)try{c(a,u?"success":"error")}catch{}else T(a,u?"success":"error",3500);u&&W(i,{skillName:k,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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as v,e as N,a as E,j as a,f as L}from"./index-BV7k6fdk.js";/* empty css */function M(l,d){const[c,u]=l.split("."),[w,f]=d.split("."),r=Number(c),m=Number(u),p=Number(w),y=Number(f);return!Number.isFinite(r)||!Number.isFinite(p)?(console.warn(`[semverBump] unparseable version: installed=${l} latest=${d}`),"patch"):p>r?"major":!Number.isFinite(m)||!Number.isFinite(y)?(console.warn(`[semverBump] unparseable minor: installed=${l} latest=${d}`),"patch"):y>m?"minor":"patch"}const F={major:{bg:"var(--red-muted)",text:"var(--red)"},minor:{bg:"var(--yellow-muted)",text:"var(--yellow)"},patch:{bg:"var(--green-muted)",text:"var(--green)"}},z=["project","personal","plugin"];function D(l,d={}){if(l.length===0)return"No tracked install — click to view details";const c=l.filter(n=>!n.readonly),u=l.filter(n=>n.readonly);if(c.length===0)return"Plugin-bundled — Update via plugin to refresh";const f=z.filter(n=>c.some(x=>x.scope===n)).join(" + "),m=Array.from(new Set(c.map(n=>n.agentLabel))).sort((n,x)=>n.localeCompare(x)).join(", "),p=c.length;let i=`Updates ${p} ${p===1?"location":"locations"}: ${f} (${m})`;if(d.pinned)return i+=" — pinned (skipped)",i;if(u.length>0){const n=Array.from(new Set(u.map(x=>x.pluginSlug??"?")));n.length===1&&n[0]!=="?"?i+=` — ${u.length} from plugin ${n[0]} (handled separately)`:i+=` — ${u.length} plugin-bundled (handled separately)`}return i}function O({updates:l,isRefreshing:d,onRefresh:c,onSelectSkill:u,onViewAll:w,onClose:f,anchorRef:r,diffSummariesById:m}){const p=v.useRef(null),y=v.useRef(null);v.useEffect(()=>{var e;(e=y.current)==null||e.focus()},[]),v.useEffect(()=>{function e(s){p.current&&(p.current.contains(s.target)||r!=null&&r.current&&r.current.contains(s.target)||f())}return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[f,r]),v.useEffect(()=>{function e(s){var g;s.key==="Escape"&&(s.preventDefault(),f(),(g=r==null?void 0:r.current)==null||g.focus())}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[f,r]);const i=l.filter(e=>e.updateAvailable),{toast:n}=N(),{onSkillUpdated:x}=E(),[j,k]=v.useState(()=>new Set);async function $(e){const s=e.installLocations??[],g=s.filter(t=>!t.readonly);if(s.length>0&&g.length===0){const t=s[0].pluginSlug??"the plugin";n({severity:"info",message:`This skill came from plugin ${t}. Update the plugin to refresh it.`});return}if(!j.has(e.name)){k(t=>{const o=new Set(t);return o.add(e.name),o});try{const t=e.name.split("/"),o=e.localPlugin??(t.length>=2?t[t.length-2]:t[0]),b=e.localSkill??t[t.length-1],h=await L.postSkillUpdate(o,b);if(h.ok){const S=g.length||1,U=S===1?"location":"locations";x(o,b),n({severity:"success",message:`Updated ${b} in ${S} ${U}.`,durationMs:4e3})}else n({severity:"error",message:`Couldn't update ${b} — HTTP ${h.status}`,durationMs:0})}catch(t){const o=t instanceof Error?t.message:"Network error";n({severity:"error",message:`Update failed: ${o}`,durationMs:0})}finally{k(t=>{const o=new Set(t);return o.delete(e.name),o})}}}return a.jsxs("div",{ref:p,role:"dialog","aria-modal":"false","aria-label":"Skill update summary","data-testid":"update-dropdown",style:{position:"absolute",top:"calc(100% + 6px)",right:0,width:440,maxHeight:400,overflow:"auto",background:"var(--bg-surface)",border:"1px solid var(--border-default)",borderRadius:8,padding:10,zIndex:1e3,fontFamily:"var(--font-sans)",display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"2px 4px 6px",borderBottom:"1px solid var(--border-default)"},children:[a.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:i.length===0?"No updates available":`${i.length} updates available`}),a.jsx("button",{type:"button","data-testid":"update-dropdown-refresh",onClick:c,disabled:d,style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:11,fontFamily:"var(--font-mono)",cursor:d?"not-allowed":"pointer",padding:"2px 6px"},children:d?"Refreshing…":"Refresh"})]}),i.length>0?a.jsx("ul",{role:"list",style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:i.map((e,s)=>{const g=e.latest?M(e.installed,e.latest):"patch",t=F[g],o=m==null?void 0:m.get(e.name),b=D(e.installLocations??[],{pinned:e.pinned??!1}),h=j.has(e.name);return a.jsxs("li",{style:{margin:0,display:"flex",alignItems:"stretch",gap:4},children:[a.jsxs("button",{ref:s===0?y:void 0,type:"button","data-testid":"update-dropdown-row","data-skill-name":e.name,onClick:()=>u(e),style:{display:"flex",alignItems:"flex-start",gap:8,width:"100%",padding:"6px 8px",background:"transparent",border:"none",borderRadius:4,cursor:"pointer",color:"var(--text-primary)",fontFamily:"inherit",fontSize:12,textAlign:"left"},children:[a.jsx("span",{"aria-hidden":"true","data-testid":"update-dropdown-bump-dot","data-bump":g,style:{width:8,height:8,borderRadius:"50%",background:t.text,flexShrink:0,marginTop:4}}),a.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:2,minWidth:0,flex:1},children:[a.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[a.jsx("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),a.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:[e.installed," → ",e.latest??"?"]})]}),o&&a.jsx("span",{"data-testid":"update-dropdown-diff-summary",style:{fontSize:11,color:"var(--text-secondary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o})]})]}),a.jsx("button",{type:"button","data-testid":"update-dropdown-row-update","data-skill-name":e.name,title:b,onClick:()=>{$(e)},disabled:h,style:{flexShrink:0,padding:"0 10px",background:"var(--color-ink)",color:"var(--color-paper)",border:"none",borderRadius:4,cursor:h?"not-allowed":"pointer",fontFamily:"var(--font-sans)",fontSize:11,fontWeight:500},children:h?"Updating…":"Update"})]},e.name)})}):a.jsx("div",{style:{padding:"12px 4px",fontSize:12,color:"var(--text-secondary)"},children:"All installed skills are up to date."}),a.jsx("div",{style:{display:"flex",justifyContent:"flex-end",padding:"4px 4px 0",borderTop:"1px solid var(--border-default)",marginTop:2},children:a.jsx("button",{type:"button","data-testid":"update-dropdown-view-all",onClick:w,style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:11,fontFamily:"var(--font-sans)",cursor:"pointer",padding:"4px 6px"},children:"View all"})})]})}export{O as default};
|