vskill 1.2.4 → 1.2.7
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 +51 -3
- package/agents.json +6 -1
- package/dist/agents/agents-registry.d.ts +43 -16
- package/dist/agents/agents-registry.js +119 -33
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/agents/global-dirs.d.ts +19 -0
- package/dist/agents/global-dirs.js +53 -0
- package/dist/agents/global-dirs.js.map +1 -0
- package/dist/audit/fix-suggestions.js +6 -0
- package/dist/audit/fix-suggestions.js.map +1 -1
- package/dist/commands/add-github-bundle.d.ts +29 -0
- package/dist/commands/add-github-bundle.js +135 -0
- package/dist/commands/add-github-bundle.js.map +1 -0
- package/dist/commands/add-lockfile.d.ts +2 -0
- package/dist/commands/add-lockfile.js +1 -1
- package/dist/commands/add-lockfile.js.map +1 -1
- package/dist/commands/add.d.ts +5 -7
- package/dist/commands/add.js +207 -111
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/audit-webmcp.d.ts +25 -0
- package/dist/commands/audit-webmcp.js +167 -0
- package/dist/commands/audit-webmcp.js.map +1 -0
- package/dist/commands/doctor.d.ts +69 -0
- package/dist/commands/doctor.js +760 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/remove.js +43 -8
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/scan.js +1 -1
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/update.js +12 -4
- package/dist/commands/update.js.map +1 -1
- package/dist/discovery/github-skill-bundle.d.ts +74 -0
- package/dist/discovery/github-skill-bundle.js +323 -0
- package/dist/discovery/github-skill-bundle.js.map +1 -0
- package/dist/eval/skill-scanner.js +7 -1
- package/dist/eval/skill-scanner.js.map +1 -1
- package/dist/eval-server/install-skill-routes.js +10 -3
- package/dist/eval-server/install-skill-routes.js.map +1 -1
- package/dist/eval-server/remove-skill-routes.js +262 -29
- package/dist/eval-server/remove-skill-routes.js.map +1 -1
- package/dist/eval-server/studio-privacy.js +2 -3
- package/dist/eval-server/studio-privacy.js.map +1 -1
- package/dist/eval-server/utils/scan-install-locations.js +22 -3
- package/dist/eval-server/utils/scan-install-locations.js.map +1 -1
- package/dist/eval-ui/assets/{CreateSkillPage-BUrgworx.js → CreateSkillPage-CXDd6gDN.js} +1 -1
- package/dist/eval-ui/assets/{FindSkillsPalette-BstJ22TI.js → FindSkillsPalette-DQ6uGhFP.js} +2 -2
- package/dist/eval-ui/assets/{SearchPaletteCore-Dagnc-E7.js → SearchPaletteCore-DpHCf0mf.js} +1 -1
- package/dist/eval-ui/assets/{SkillDetailPanel-DnujVk6g.js → SkillDetailPanel-BjHFjGxg.js} +1 -1
- package/dist/eval-ui/assets/{UpdateDropdown-B7D2vXrm.js → UpdateDropdown-Cn4Vsq5d.js} +1 -1
- package/dist/eval-ui/assets/main-BmB7Zj9I.js +86 -0
- package/dist/eval-ui/index.html +1 -1
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -1
- package/dist/installer/bundle-files.d.ts +39 -2
- package/dist/installer/bundle-files.js +80 -10
- package/dist/installer/bundle-files.js.map +1 -1
- package/dist/installer/canonical.d.ts +39 -4
- package/dist/installer/canonical.js +178 -24
- package/dist/installer/canonical.js.map +1 -1
- package/dist/installer/multi-install.d.ts +11 -2
- package/dist/installer/multi-install.js +41 -9
- package/dist/installer/multi-install.js.map +1 -1
- package/dist/installer/transformers/index.d.ts +8 -0
- package/dist/installer/yaml-safe-mutate.js +48 -2
- package/dist/installer/yaml-safe-mutate.js.map +1 -1
- package/dist/lib/github-fetch.js +2 -0
- package/dist/lib/github-fetch.js.map +1 -1
- package/dist/lib/private-source.d.ts +8 -0
- package/dist/lib/private-source.js +16 -2
- package/dist/lib/private-source.js.map +1 -1
- package/dist/scanner/hidden-content.d.ts +47 -0
- package/dist/scanner/hidden-content.js +904 -0
- package/dist/scanner/hidden-content.js.map +1 -0
- package/dist/scanner/installer-hosts.d.ts +26 -0
- package/dist/scanner/installer-hosts.js +92 -0
- package/dist/scanner/installer-hosts.js.map +1 -0
- package/dist/scanner/judge-guard.d.ts +119 -0
- package/dist/scanner/judge-guard.js +481 -0
- package/dist/scanner/judge-guard.js.map +1 -0
- package/dist/scanner/patterns.d.ts +12 -0
- package/dist/scanner/patterns.js +353 -113
- package/dist/scanner/patterns.js.map +1 -1
- package/dist/scanner/repo-scanner.d.ts +4 -0
- package/dist/scanner/repo-scanner.js +4 -1
- package/dist/scanner/repo-scanner.js.map +1 -1
- package/dist/scanner/tier1.js +37 -7
- package/dist/scanner/tier1.js.map +1 -1
- package/dist/scanner/tier2-llm.d.ts +22 -4
- package/dist/scanner/tier2-llm.js +163 -23
- package/dist/scanner/tier2-llm.js.map +1 -1
- package/dist/scanner/types.d.ts +8 -0
- package/dist/webmcp/args.d.ts +34 -0
- package/dist/webmcp/args.js +87 -0
- package/dist/webmcp/args.js.map +1 -0
- package/dist/webmcp/attribution.d.ts +38 -0
- package/dist/webmcp/attribution.js +141 -0
- package/dist/webmcp/attribution.js.map +1 -0
- package/dist/webmcp/enumerate.d.ts +81 -0
- package/dist/webmcp/enumerate.js +436 -0
- package/dist/webmcp/enumerate.js.map +1 -0
- package/dist/webmcp/format.d.ts +9 -0
- package/dist/webmcp/format.js +105 -0
- package/dist/webmcp/format.js.map +1 -0
- package/dist/webmcp/merge.d.ts +49 -0
- package/dist/webmcp/merge.js +167 -0
- package/dist/webmcp/merge.js.map +1 -0
- package/dist/webmcp/score.d.ts +70 -0
- package/dist/webmcp/score.js +586 -0
- package/dist/webmcp/score.js.map +1 -0
- package/dist/webmcp/types.d.ts +92 -0
- package/dist/webmcp/types.js +8 -0
- package/dist/webmcp/types.js.map +1 -0
- package/package.json +1 -1
- package/dist/eval-ui/assets/main-DjA5gpjV.js +0 -86
|
@@ -6,15 +6,18 @@
|
|
|
6
6
|
//
|
|
7
7
|
// Endpoint:
|
|
8
8
|
// POST /api/studio/remove-skill
|
|
9
|
-
// Body: { skill: string, agentIds: string[], scope: "project" | "user" }
|
|
9
|
+
// Body: { skill: string, agentIds: string[], scope: "project" | "user", all?: boolean }
|
|
10
|
+
// all (0894): remove the skill for every agent in the scope — the shared
|
|
11
|
+
// canonical copy, every agent's own link or copy, and the lockfile entry.
|
|
12
|
+
// agentIds is optional then.
|
|
10
13
|
// → 200 { removed: [{agentId, path}], skipped: [{agentId, reason}], errors: [{agentId, message}] }
|
|
11
|
-
import { existsSync, rmSync } from "node:fs";
|
|
14
|
+
import { existsSync, lstatSync, readdirSync, realpathSync, rmSync, unlinkSync } from "node:fs";
|
|
12
15
|
import { join, basename } from "node:path";
|
|
13
16
|
import { homedir } from "node:os";
|
|
14
17
|
import { sendJson, readBody } from "./router.js";
|
|
15
18
|
import { isLocalhost } from "./install-jobs.js";
|
|
16
|
-
import { getAgent } from "../agents/agents-registry.js";
|
|
17
|
-
import { resolveAgentSkillsDir } from "../installer/canonical.js";
|
|
19
|
+
import { getAgent, getInstallableAgents } from "../agents/agents-registry.js";
|
|
20
|
+
import { isSatisfiedByCanonical, resolveAgentSkillsDir, resolveCanonicalSkillsDir, } from "../installer/canonical.js";
|
|
18
21
|
import { readLockfile, removeSkillFromLock, writeLockfile, } from "../lockfile/lockfile.js";
|
|
19
22
|
const SAFE_NAME = /^[a-zA-Z0-9._@/\-]+$/;
|
|
20
23
|
const SAFE_AGENT_ID = /^[a-z0-9][a-z0-9-]*$/;
|
|
@@ -53,6 +56,7 @@ export function registerRemoveSkillRoutes(router, rootArg = () => process.cwd())
|
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
55
58
|
const body = (await readBody(req));
|
|
59
|
+
const all = body?.all === true;
|
|
56
60
|
const skill = typeof body?.skill === "string" ? body.skill.trim() : "";
|
|
57
61
|
const scope = typeof body?.scope === "string" ? body.scope : "";
|
|
58
62
|
if (!skill || skill.startsWith("-") || !SAFE_NAME.test(skill)) {
|
|
@@ -63,39 +67,96 @@ export function registerRemoveSkillRoutes(router, rootArg = () => process.cwd())
|
|
|
63
67
|
sendJson(res, { error: "invalid scope (must be project|user)" }, 400, req);
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
66
|
-
const v =
|
|
70
|
+
const v = all && (body.agentIds === undefined || (Array.isArray(body.agentIds) && body.agentIds.length === 0))
|
|
71
|
+
? { ok: true, ids: [] }
|
|
72
|
+
: validateAgentIds(body.agentIds);
|
|
67
73
|
if (!v.ok) {
|
|
68
74
|
sendJson(res, { error: v.error }, 400, req);
|
|
69
75
|
return;
|
|
70
76
|
}
|
|
71
77
|
const shortName = lastSegment(skill);
|
|
78
|
+
const slug = basename(shortName);
|
|
72
79
|
const removed = [];
|
|
73
80
|
const skipped = [];
|
|
74
81
|
const errors = [];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
82
|
+
const installOpts = { global: scope === "user", projectRoot: root };
|
|
83
|
+
const lockDir = scope === "user" ? userLockDir() : root;
|
|
84
|
+
const requested = new Set(v.ids);
|
|
85
|
+
const canonicalTarget = join(resolveCanonicalSkillsDir(installOpts), slug);
|
|
86
|
+
// 0894: agents in this request that load the skill from the shared
|
|
87
|
+
// canonical folder. That folder is deleted once, after the per-agent
|
|
88
|
+
// pass, and only when no other agent still loads it.
|
|
89
|
+
const canonicalAgents = [];
|
|
90
|
+
if (all) {
|
|
91
|
+
removeEverywhere(slug, installOpts, canonicalTarget, requested, readLockfile(lockDir)?.agents ?? [], removed, errors);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
for (const agentId of v.ids) {
|
|
95
|
+
const agent = getAgent(agentId);
|
|
96
|
+
if (!agent) {
|
|
97
|
+
skipped.push({ agentId, reason: "unknown agent" });
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (agent.installMode !== "filesystem") {
|
|
101
|
+
skipped.push({ agentId, reason: "cloud agent — nothing to remove on disk" });
|
|
92
102
|
continue;
|
|
93
103
|
}
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
try {
|
|
105
|
+
// Defense in depth: only remove a basename directory under the
|
|
106
|
+
// resolved agent dir. agent.id and shortName are both validated.
|
|
107
|
+
const own = join(resolveAgentSkillsDir(agent, installOpts), slug);
|
|
108
|
+
const readsCanonical = isSatisfiedByCanonical(agent, installOpts) || own === canonicalTarget;
|
|
109
|
+
if (readsCanonical) {
|
|
110
|
+
// A shared reader stops loading the skill only when the canonical
|
|
111
|
+
// copy goes; an old per-agent link of its own is cleaned up with it.
|
|
112
|
+
canonicalAgents.push(agentId);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (!lexists(own)) {
|
|
116
|
+
skipped.push({ agentId, reason: `not installed at ${own}` });
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
removeEntry(own);
|
|
120
|
+
removed.push({ agentId, path: own });
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
errors.push({ agentId, message: err instanceof Error ? err.message : String(err) });
|
|
124
|
+
}
|
|
96
125
|
}
|
|
97
|
-
|
|
98
|
-
|
|
126
|
+
if (canonicalAgents.length > 0) {
|
|
127
|
+
const canonicalPresent = lexists(canonicalTarget);
|
|
128
|
+
const users = canonicalUsers(canonicalTarget, slug, installOpts, requested, readLockfile(lockDir)?.agents ?? []);
|
|
129
|
+
for (const agentId of canonicalAgents) {
|
|
130
|
+
const agent = getAgent(agentId);
|
|
131
|
+
try {
|
|
132
|
+
const own = join(resolveAgentSkillsDir(agent, installOpts), slug);
|
|
133
|
+
const hasOwn = own !== canonicalTarget && lexists(own);
|
|
134
|
+
if (!hasOwn && !canonicalPresent) {
|
|
135
|
+
skipped.push({ agentId, reason: `not installed at ${canonicalTarget}` });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (users.length > 0) {
|
|
139
|
+
skipped.push({
|
|
140
|
+
agentId,
|
|
141
|
+
reason: `shared: ${canonicalTarget} is still used by ${users.join(", ")}`,
|
|
142
|
+
sharedWith: users,
|
|
143
|
+
});
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (hasOwn) {
|
|
147
|
+
removeEntry(own);
|
|
148
|
+
removed.push({ agentId, path: own });
|
|
149
|
+
}
|
|
150
|
+
if (canonicalPresent) {
|
|
151
|
+
if (lexists(canonicalTarget))
|
|
152
|
+
removeEntry(canonicalTarget);
|
|
153
|
+
removed.push({ agentId, path: canonicalTarget });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
errors.push({ agentId, message: err instanceof Error ? err.message : String(err) });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
99
160
|
}
|
|
100
161
|
}
|
|
101
162
|
// Lockfile cleanup. The 0850 contract: drop the skills[<name>] entry
|
|
@@ -103,13 +164,14 @@ export function registerRemoveSkillRoutes(router, rootArg = () => process.cwd())
|
|
|
103
164
|
// agent we tried was "not installed on disk" (idempotent recovery
|
|
104
165
|
// from a stale lockfile that survives a manual `rm`). We do NOT
|
|
105
166
|
// prune the `agents` list — it tracks any agent ever installed against
|
|
106
|
-
// in this dir and other skills may still depend on it.
|
|
167
|
+
// in this dir and other skills may still depend on it. (0894: agents
|
|
168
|
+
// left with no skill at all in this scope are pruned below.)
|
|
107
169
|
const isPurelyMissing = removed.length === 0 &&
|
|
108
170
|
errors.length === 0 &&
|
|
109
171
|
skipped.length > 0 &&
|
|
110
172
|
skipped.every((s) => s.reason.startsWith("not installed"));
|
|
111
|
-
|
|
112
|
-
|
|
173
|
+
// 0894: keep the entry while any agent in this scope still has the skill.
|
|
174
|
+
if ((removed.length > 0 || isPurelyMissing) && !installedAnywhere(slug, installOpts)) {
|
|
113
175
|
// Match the install side: lockfile stores by skill.name which is
|
|
114
176
|
// typically the last segment.
|
|
115
177
|
const lock = readLockfile(lockDir);
|
|
@@ -126,6 +188,12 @@ export function registerRemoveSkillRoutes(router, rootArg = () => process.cwd())
|
|
|
126
188
|
}
|
|
127
189
|
}
|
|
128
190
|
}
|
|
191
|
+
// 0894: an agent this request touched that no longer has any skill in
|
|
192
|
+
// the scope leaves the lockfile's `agents` list, so a stale entry
|
|
193
|
+
// does not keep counting as a user of the shared folder.
|
|
194
|
+
if (removed.length > 0) {
|
|
195
|
+
pruneLockAgents(lockDir, installOpts, new Set([...requested, ...removed.map((r) => r.agentId)]));
|
|
196
|
+
}
|
|
129
197
|
console.log("[remove-skill]", JSON.stringify({ skill, scope, removed: removed.length, skipped: skipped.length, errors: errors.length }));
|
|
130
198
|
const response = {
|
|
131
199
|
skill,
|
|
@@ -137,6 +205,171 @@ export function registerRemoveSkillRoutes(router, rootArg = () => process.cwd())
|
|
|
137
205
|
sendJson(res, response, 200, req);
|
|
138
206
|
});
|
|
139
207
|
}
|
|
208
|
+
function lexists(p) {
|
|
209
|
+
try {
|
|
210
|
+
lstatSync(p);
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function safeRealpath(p) {
|
|
218
|
+
try {
|
|
219
|
+
return realpathSync(p);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/** Remove a link itself (never what it points to) or a real folder. */
|
|
226
|
+
function removeEntry(p) {
|
|
227
|
+
if (lstatSync(p).isSymbolicLink())
|
|
228
|
+
unlinkSync(p);
|
|
229
|
+
else
|
|
230
|
+
rmSync(p, { recursive: true, force: true });
|
|
231
|
+
}
|
|
232
|
+
function filesystemAgents() {
|
|
233
|
+
return getInstallableAgents().filter((a) => (a.installMode ?? "filesystem") === "filesystem");
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* 0894: agents outside the request that still load `canonicalTarget`: a link
|
|
237
|
+
* of theirs resolves into it, or they read the shared folder in this scope
|
|
238
|
+
* and the scope's lockfile lists them as installed.
|
|
239
|
+
*/
|
|
240
|
+
function canonicalUsers(canonicalTarget, slug, opts, requested, lockAgents) {
|
|
241
|
+
const canonicalReal = safeRealpath(canonicalTarget);
|
|
242
|
+
const users = [];
|
|
243
|
+
for (const agent of filesystemAgents()) {
|
|
244
|
+
if (requested.has(agent.id))
|
|
245
|
+
continue;
|
|
246
|
+
let own;
|
|
247
|
+
try {
|
|
248
|
+
own = join(resolveAgentSkillsDir(agent, opts), slug);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
let linked = false;
|
|
254
|
+
if (own !== canonicalTarget && canonicalReal) {
|
|
255
|
+
try {
|
|
256
|
+
linked = lstatSync(own).isSymbolicLink() && safeRealpath(own) === canonicalReal;
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
linked = false;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const shared = (isSatisfiedByCanonical(agent, opts) || own === canonicalTarget) && lockAgents.includes(agent.id);
|
|
263
|
+
if (linked || shared)
|
|
264
|
+
users.push(agent.id);
|
|
265
|
+
}
|
|
266
|
+
return users;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* 0894: `all: true` — remove the skill for every agent in the scope: each
|
|
270
|
+
* agent's own entry (link or copy) and the shared canonical copy. The
|
|
271
|
+
* canonical row is credited to the requested agents plus every shared reader
|
|
272
|
+
* the lockfile lists, or to "all" when there are none.
|
|
273
|
+
*/
|
|
274
|
+
function removeEverywhere(slug, opts, canonicalTarget, requested, lockAgents, removed, errors) {
|
|
275
|
+
const seen = new Set([canonicalTarget]);
|
|
276
|
+
for (const agent of filesystemAgents()) {
|
|
277
|
+
let own;
|
|
278
|
+
try {
|
|
279
|
+
own = join(resolveAgentSkillsDir(agent, opts), slug);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
if (seen.has(own))
|
|
285
|
+
continue;
|
|
286
|
+
seen.add(own);
|
|
287
|
+
if (!lexists(own))
|
|
288
|
+
continue;
|
|
289
|
+
try {
|
|
290
|
+
removeEntry(own);
|
|
291
|
+
removed.push({ agentId: agent.id, path: own });
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
errors.push({ agentId: agent.id, message: err instanceof Error ? err.message : String(err) });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (!lexists(canonicalTarget))
|
|
298
|
+
return;
|
|
299
|
+
const credited = new Set(requested);
|
|
300
|
+
for (const id of lockAgents) {
|
|
301
|
+
const agent = getAgent(id);
|
|
302
|
+
if (agent && isSatisfiedByCanonical(agent, opts))
|
|
303
|
+
credited.add(id);
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
removeEntry(canonicalTarget);
|
|
307
|
+
for (const agentId of credited.size > 0 ? credited : ["all"]) {
|
|
308
|
+
removed.push({ agentId, path: canonicalTarget });
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
errors.push({ agentId: "all", message: err instanceof Error ? err.message : String(err) });
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* 0894: drop agents from the scope lockfile's `agents` list once they have
|
|
317
|
+
* no skill left at all in the scope: nothing in their own skills dir and,
|
|
318
|
+
* for shared readers, nothing in the canonical folder. Any entry counts (so
|
|
319
|
+
* plugin layouts whose folder names differ from lockfile keys keep their
|
|
320
|
+
* agent). Only `candidates` — the agents this request touched — are
|
|
321
|
+
* considered; agents the registry does not know are kept.
|
|
322
|
+
*/
|
|
323
|
+
function pruneLockAgents(lockDir, opts, candidates) {
|
|
324
|
+
const lock = readLockfile(lockDir);
|
|
325
|
+
if (!lock || !Array.isArray(lock.agents) || lock.agents.length === 0)
|
|
326
|
+
return;
|
|
327
|
+
const canonicalDir = resolveCanonicalSkillsDir(opts);
|
|
328
|
+
const keep = lock.agents.filter((id) => {
|
|
329
|
+
if (!candidates.has(id))
|
|
330
|
+
return true;
|
|
331
|
+
const agent = getAgent(id);
|
|
332
|
+
if (!agent)
|
|
333
|
+
return true;
|
|
334
|
+
let ownDir;
|
|
335
|
+
try {
|
|
336
|
+
ownDir = resolveAgentSkillsDir(agent, opts);
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
const readsCanonical = isSatisfiedByCanonical(agent, opts) || ownDir === canonicalDir;
|
|
342
|
+
return hasAnyEntry(ownDir) || (readsCanonical && hasAnyEntry(canonicalDir));
|
|
343
|
+
});
|
|
344
|
+
if (keep.length === lock.agents.length)
|
|
345
|
+
return;
|
|
346
|
+
lock.agents = keep;
|
|
347
|
+
writeLockfile(lock, lockDir);
|
|
348
|
+
}
|
|
349
|
+
function hasAnyEntry(dir) {
|
|
350
|
+
try {
|
|
351
|
+
return readdirSync(dir).some((n) => !n.startsWith("."));
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/** 0894: true while the skill still has a SKILL.md for any agent in the scope. */
|
|
358
|
+
function installedAnywhere(slug, opts) {
|
|
359
|
+
const dirs = new Set([join(resolveCanonicalSkillsDir(opts), slug)]);
|
|
360
|
+
for (const agent of filesystemAgents()) {
|
|
361
|
+
try {
|
|
362
|
+
dirs.add(join(resolveAgentSkillsDir(agent, opts), slug));
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// a crafted localSkillsDir that escapes the root is never an install
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
for (const d of dirs)
|
|
369
|
+
if (existsSync(join(d, "SKILL.md")))
|
|
370
|
+
return true;
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
140
373
|
export const __test__ = {
|
|
141
374
|
SAFE_NAME,
|
|
142
375
|
SAFE_AGENT_ID,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skill-routes.js","sourceRoot":"","sources":["../../src/eval-server/remove-skill-routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remove-skill-routes.js","sourceRoot":"","sources":["../../src/eval-server/remove-skill-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { homedir } from "node:os";
|
|
16
16
|
import { join } from "node:path";
|
|
17
17
|
import { readLockfile } from "../lockfile/lockfile.js";
|
|
18
|
-
import { isPrivateOrUnknownRepo, isPrivateSource, localDirGitHubRepo, } from "../lib/private-source.js";
|
|
18
|
+
import { isPrivateOrUnknownRepo, isPrivateSource, localDirGitHubRepo, lockFilesNameSkill, } from "../lib/private-source.js";
|
|
19
19
|
import { classifyOrigin } from "../eval/skill-scanner.js";
|
|
20
20
|
import { ANTHROPIC_SKILL_REGISTRY } from "./origin-resolver.js";
|
|
21
21
|
import { getSkillDirEntry } from "./skill-dir-registry.js";
|
|
@@ -53,9 +53,8 @@ export function findLockEntryForStudioSkill(locks, s) {
|
|
|
53
53
|
continue;
|
|
54
54
|
return entry;
|
|
55
55
|
}
|
|
56
|
-
const file = `${s.skill}/SKILL.md`;
|
|
57
56
|
for (const entry of Object.values(skills)) {
|
|
58
|
-
if (entry
|
|
57
|
+
if (lockFilesNameSkill(entry, s.skill))
|
|
59
58
|
return entry;
|
|
60
59
|
}
|
|
61
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio-privacy.js","sourceRoot":"","sources":["../../src/eval-server/studio-privacy.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,mEAAmE;AACnE,EAAE;AACF,oEAAoE;AACpE,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,gEAAgE;AAChE,wEAAwE;AACxE,+EAA+E;AAC/E,mEAAmE;AACnE,mEAAmE;AACnE,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAWtD,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,IAAI,GAAG,CAAC,GAAW,EAAqB,EAAE;QAC9C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA2C,EAC3C,CAAiB;IAEjB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAChD,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAC9C,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,CAAC,CAAC,iBAAiB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,iBAAiB;gBAAE,SAAS;YACpG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"studio-privacy.js","sourceRoot":"","sources":["../../src/eval-server/studio-privacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
import { existsSync, lstatSync, statSync } from "node:fs";
|
|
16
16
|
import { dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
17
17
|
import { getInstallableAgents, } from "../../agents/agents-registry.js";
|
|
18
|
+
import { agentGlobalInstallDirs } from "../../agents/global-dirs.js";
|
|
19
|
+
/** 0894: true when the agent reads the shared `.agents/skills` in a scope. */
|
|
20
|
+
function readsShared(agent, global) {
|
|
21
|
+
return agent.readsSharedSkills?.[global ? "global" : "project"] === true;
|
|
22
|
+
}
|
|
18
23
|
import { scanInstalledPluginSkills } from "../../eval/plugin-scanner.js";
|
|
19
24
|
const VALID_SLUG = /^[a-zA-Z0-9._-]+$/;
|
|
20
25
|
function expandHome(p) {
|
|
@@ -65,7 +70,11 @@ function projectAgentLocation(agent, projectRoot, slug) {
|
|
|
65
70
|
const localDir = isAbsolute(agent.localSkillsDir)
|
|
66
71
|
? agent.localSkillsDir
|
|
67
72
|
: join(projectRoot, agent.localSkillsDir);
|
|
68
|
-
|
|
73
|
+
let skillDir = safeJoinUnder(localDir, slug);
|
|
74
|
+
// 0894: a shared reader with no link of its own loads the canonical copy.
|
|
75
|
+
if ((!skillDir || !probeSkill(skillDir)) && readsShared(agent, false)) {
|
|
76
|
+
skillDir = safeJoinUnder(join(projectRoot, ".agents", "skills"), slug);
|
|
77
|
+
}
|
|
69
78
|
if (!skillDir || !probeSkill(skillDir))
|
|
70
79
|
return null;
|
|
71
80
|
return {
|
|
@@ -78,8 +87,18 @@ function projectAgentLocation(agent, projectRoot, slug) {
|
|
|
78
87
|
};
|
|
79
88
|
}
|
|
80
89
|
function personalAgentLocation(agent, slug) {
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
// 0894: every global dir vskill may have installed into (Antigravity's
|
|
91
|
+
// legacy ~/.gemini/antigravity/skills included), first hit wins.
|
|
92
|
+
let skillDir = null;
|
|
93
|
+
for (const globalDir of agentGlobalInstallDirs(agent, expandHome)) {
|
|
94
|
+
skillDir = safeJoinUnder(globalDir, slug);
|
|
95
|
+
if (skillDir && probeSkill(skillDir))
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
// 0894: a shared reader with no link of its own loads the canonical copy.
|
|
99
|
+
if ((!skillDir || !probeSkill(skillDir)) && readsShared(agent, true)) {
|
|
100
|
+
skillDir = safeJoinUnder(expandHome("~/.agents/skills"), slug);
|
|
101
|
+
}
|
|
83
102
|
if (!skillDir || !probeSkill(skillDir))
|
|
84
103
|
return null;
|
|
85
104
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-install-locations.js","sourceRoot":"","sources":["../../../src/eval-server/utils/scan-install-locations.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wCAAwC;AACxC,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,EAAE;AACF,UAAU;AACV,uDAAuD;AACvD,8EAA8E;AAC9E,EAAE;AACF,+EAA+E;AAC/E,qEAAqE;AACrE,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EACL,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAezE,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/D,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,aAAqB;IAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,oDAAoD;IACpD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACjC,OAAO,UAAU,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAY;IAClD,mEAAmE;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAsB,EACtB,WAAmB,EACnB,IAAY;IAEZ,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;QAC/C,CAAC,CAAC,KAAK,CAAC,cAAc;QACtB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5C,
|
|
1
|
+
{"version":3,"file":"scan-install-locations.js","sourceRoot":"","sources":["../../../src/eval-server/utils/scan-install-locations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as e,R as b,r as v}from"./globals-DmzftdEG.js";import{o as Z,u as X,b as ee,g as B,r as F,w as te,c as se,d as re,t as P,L as R,P as le,E as ae,e as ne,S as ie}from"./main-DjA5gpjV.js";import"./useDesktopBridge-Cm4zPght.js";/* empty css */const oe=[{key:"slashCommands",label:"Slash"},{key:"hooks",label:"Hooks"},{key:"mcp",label:"MCP"},{key:"customSystemPrompt",label:"Prompt"}];function de({supported:r,label:n}){return e.jsx("span",{style:{display:"inline-block",fontSize:10,padding:"1px 5px",borderRadius:3,marginRight:3,background:r?"var(--color-success-bg, #d4edda)":"var(--surface-3, #2a2a2a)",color:r?"var(--color-success, #28a745)":"var(--text-tertiary, #666)",border:`1px solid ${r?"var(--color-success, #28a745)":"var(--border-subtle, #333)"}`},children:n})}function D({agent:r,checked:n,onToggle:f}){return e.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",borderRadius:6,cursor:"pointer",border:r.installed?"1px solid var(--color-primary, #6366f1)":"1px solid var(--border-subtle, #333)",background:n?"var(--surface-2, #1e1e1e)":"transparent"},children:[e.jsx("input",{type:"checkbox",checked:n,onChange:f,style:{accentColor:"var(--color-primary, #6366f1)"}}),e.jsxs("div",{style:{flex:1},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[e.jsx("span",{style:{fontWeight:500,fontSize:13,color:"var(--text-primary, #fff)"},children:r.displayName}),r.installed&&e.jsx("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:3,background:"var(--color-primary-bg, #312e81)",color:"var(--color-primary, #6366f1)"},children:"installed"})]}),e.jsx("div",{style:{marginTop:3},children:oe.map(i=>e.jsx(de,{supported:r.featureSupport[i.key],label:i.label},i.key))})]})]})}function ce({agents:r,selectedIds:n,onChange:f}){const i=new Set(n),x=r.filter(a=>a.isUniversal),l=r.filter(a=>!a.isUniversal),p=a=>{const d=i.has(a)?n.filter(c=>c!==a):[...n,a];f(d)};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[x.length>0&&e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary, #999)",marginBottom:6},children:"Universal Agents"}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:x.map(a=>e.jsx(D,{agent:a,checked:i.has(a.id),onToggle:()=>p(a.id)},a.id))})]}),l.length>0&&e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary, #999)",marginBottom:6},children:"Other Agents"}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:l.map(a=>e.jsx(D,{agent:a,checked:i.has(a.id),onToggle:()=>p(a.id)},a.id))})]})]})}const ue="Cross-universal — emits the same skill to 8 universal agents (Claude, Codex, Cursor, Cline, Gemini CLI, OpenCode, Kimi, Amp). Constrains output to the common schema across all agents. Recommended for portable skills.",xe="Powerful Claude-native engine — Anthropic's built-in skill-creator with a slightly richer schema (more expressive on Claude) but Claude-only. Pick this when you only target Claude Code and want full expressiveness.",pe="Generate raw — no engine assistance, you provide the full SKILL.md body.";function me(r){return[{engine:"vskill",label:"VSkill skill-builder",caption:r.vskillSkillBuilder?`installed${r.vskillVersion?` v${r.vskillVersion}`:""}`:"not installed",tooltip:ue,detected:r.vskillSkillBuilder,installable:!0},{engine:"anthropic-skill-creator",label:"Anthropic skill-creator",caption:r.anthropicSkillCreator?"installed":"not installed",tooltip:xe,detected:r.anthropicSkillCreator,installable:!0},{engine:"none",label:"No engine — generate raw",caption:"always available",tooltip:pe,detected:!0,installable:!1}]}function ge(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function he(r){const{detection:n,selected:f,onSelect:i,onInstallClick:x}=r,l=b.useMemo(()=>ge(),[]),p=b.useMemo(()=>me(n),[n]),a=l?"":"transition-colors";return e.jsxs("fieldset",{className:"flex flex-col gap-2",children:[e.jsx("legend",{className:"text-xs font-semibold text-gray-700",children:"Authoring engine"}),e.jsx("div",{role:"tablist","aria-label":"Authoring engine",className:"flex flex-col gap-1.5",children:p.map(d=>{const c=f===d.engine,k=!d.detected&&d.installable,h=["flex items-center justify-between gap-3 rounded-md border px-3 py-2 text-sm cursor-pointer",a,c?"border-blue-600 bg-blue-50":"border-gray-300 bg-white hover:border-gray-400"].filter(Boolean).join(" "),u=d.detected?{}:{opacity:.6};return e.jsxs("div",{role:"tab",tabIndex:0,"data-testid":`engine-selector-${d.engine}`,"aria-selected":c?"true":"false",title:d.tooltip,style:u,className:h,onClick:()=>i(d.engine),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),i(d.engine))},children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium text-gray-900",children:d.label}),e.jsx("span",{className:"text-xs text-gray-500",children:d.caption})]}),k&&e.jsx("button",{type:"button","data-testid":`install-${d.engine}`,className:"rounded border border-blue-600 px-2 py-1 text-xs font-medium text-blue-700 hover:bg-blue-100",onClick:g=>{g.stopPropagation(),x(d.engine)},children:"Install"})]},d.engine)})})]})}const A="(?:0|[1-9]\\d*)",H="[0-9A-Za-z-]",$=`(?:${A}|\\d*[A-Za-z-]${H}*)`,z=`${H}+`,fe=`(?:-${$}(?:\\.${$})*)`,ye=`(?:\\+${z}(?:\\.${z})*)`,ve=new RegExp(`^${A}\\.${A}\\.${A}${fe}?${ye}?$`);function V(r){return typeof r!="string"?!1:ve.test(r.trim())}const be="Skill version (semver). Auto-bumps on update unless versioningMode=author.",je="Must be valid semver (e.g. 1.0.0, 2.1.3-beta.1)";function ke(r){const{value:n,onChange:f,mode:i,onValidityChange:x,versionsHref:l,disabled:p}=r,[a,d]=b.useState(!1),[c,k]=b.useState(()=>V(n)),h=V(n);b.useEffect(()=>{h!==c?(k(h),x==null||x(h)):x&&x(h)},[h]);const u=a&&!h,g=["w-full rounded-md border px-3 py-2 text-sm font-mono",u?"border-red-500 bg-red-50 focus:outline-red-600":"border-gray-300 bg-white focus:outline-blue-600",p?"opacity-60 cursor-not-allowed":""].join(" ");return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-xs font-semibold text-gray-700",htmlFor:"version-input",children:"Version"}),e.jsx("input",{id:"version-input","data-testid":"version-input",type:"text",title:be,value:n,onChange:m=>f(m.currentTarget.value),onBlur:()=>d(!0),"aria-invalid":u?"true":"false","aria-describedby":u?"version-input-helper":void 0,disabled:p,className:g,placeholder:"1.0.0"}),u&&e.jsx("span",{id:"version-input-helper","data-testid":"version-input-helper",className:"text-xs text-red-600",role:"alert",children:je}),i==="update"&&l&&e.jsx("a",{"data-testid":"version-input-versions-link",href:l,target:"_blank",rel:"noreferrer",className:"text-xs text-blue-600 hover:underline",children:"Versions →"})]})}const E={status:"idle",liveTail:"",progress:[],exitCode:null,stderr:"",error:null};function we(r={}){const n=r.fetchImpl??globalThis.fetch,[f,i]=b.useState(E),x=b.useRef(null),l=b.useRef(null);b.useEffect(()=>()=>{var c;(c=l.current)==null||c.close()},[]);const p=b.useCallback(()=>{var c;(c=l.current)==null||c.close(),l.current=null,x.current=null,i(E)},[]),a=b.useCallback(async c=>{x.current=c,i({...E,status:"spawning"});let k;try{const u=await n("/api/studio/install-engine",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({engine:c})});if(!u.ok){const m=await u.json().catch(()=>({}));i({...E,status:"failure",error:m.remediation??m.error??`HTTP ${u.status}`});return}k=(await u.json()).jobId}catch(u){i({...E,status:"failure",error:u.message});return}let h;h=Z(`/api/studio/install-engine/${k}/stream`,{fetchImpl:n,timeoutMessage:"install-engine SSE stream timed out",onEvent:({event:u,data:g})=>{if(u==="progress"){try{const m=JSON.parse(g);i(S=>({...S,liveTail:m.line.length>60?m.line.slice(0,60)+"…":m.line,progress:[...S.progress,m].slice(-200)}))}catch{}return}if(u==="done")try{const m=JSON.parse(g);h.close(),l.current=null,i(S=>({...S,status:m.success?"success":"failure",exitCode:m.exitCode,stderr:m.stderr,error:m.success?null:m.stderr||`exit ${m.exitCode}`}))}catch{h.close(),l.current=null,i(m=>({...m,status:"failure",error:"malformed done event"}))}},onError:u=>{l.current=null,i(g=>({...g,status:g.status==="streaming"?"failure":g.status,error:g.error??u.message}))}}),l.current=h,i(u=>({...u,status:"streaming"}))},[n]),d=b.useCallback(async()=>{const c=x.current;c&&await a(c)},[a]);return{state:f,install:a,retry:d,reset:p}}const Ne={vskill:"vskill install anton-abyzov/vskill/skill-builder","anthropic-skill-creator":"claude plugin install skill-creator"},Se={vskill:"VSkill skill-builder","anthropic-skill-creator":"Anthropic skill-creator"},Ce="This runs the command in your terminal as your user. Inspect before approving.";function Le(r){const{engine:n,onClose:f,onSuccess:i,hookOpts:x}=r,{state:l,install:p,retry:a}=we(x),d=Ne[n],c=Se[n],k=b.useRef(!1);return b.useEffect(()=>{l.status==="success"&&!k.current&&(k.current=!0,i())},[l.status,i]),e.jsx("div",{role:"dialog","aria-modal":"true","aria-labelledby":"install-engine-title","data-testid":"install-engine-modal",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",children:e.jsxs("div",{className:"w-full max-w-lg rounded-lg bg-white p-6 shadow-xl",children:[e.jsxs("h2",{id:"install-engine-title",className:"text-lg font-semibold text-gray-900",children:["Install ",c]}),l.status==="idle"&&e.jsx(Ee,{command:d,onCancel:f,onRun:()=>p(n)}),(l.status==="spawning"||l.status==="streaming")&&e.jsx(Pe,{command:d,liveTail:l.liveTail}),l.status==="success"&&e.jsx(Ie,{label:c,onClose:f}),l.status==="failure"&&e.jsx(Ae,{error:l.error??"Install failed",stderr:l.stderr,progress:l.progress,onRetry:()=>a(),onClose:f})]})})}function G({command:r}){return e.jsxs("pre",{"data-testid":"install-command-preview",className:"my-3 overflow-x-auto rounded bg-gray-900 px-3 py-2 font-mono text-xs text-green-300",children:["$ ",r]})}function Ee(r){return e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-2 text-sm text-gray-700",children:"Studio will run this command on your behalf:"}),e.jsx(G,{command:r.command}),e.jsx("p",{className:"text-xs text-amber-700","data-testid":"install-security-note",children:Ce}),e.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[e.jsx("button",{type:"button","data-testid":"install-cancel",className:"rounded border border-gray-300 px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-50",onClick:r.onCancel,children:"Cancel"}),e.jsx("button",{type:"button","data-testid":"install-run",className:"rounded bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700",onClick:r.onRun,children:"Run install"})]})]})}function Pe(r){return e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-2 text-sm text-gray-700",children:"Installing…"}),e.jsx(G,{command:r.command}),e.jsxs("div",{className:"mt-3 flex items-center gap-2 text-xs text-gray-600",children:[e.jsx("span",{"data-testid":"install-spinner",className:"inline-block h-3 w-3 animate-spin rounded-full border-2 border-gray-300 border-t-blue-600"}),e.jsx("span",{"data-testid":"install-live-tail",className:"font-mono",children:r.liveTail||"starting…"})]})]})}function Ie(r){return e.jsxs(e.Fragment,{children:[e.jsxs("p",{"data-testid":"install-success",className:"mt-3 text-sm font-medium text-green-700",children:["✓ ",r.label," installed"]}),e.jsx("div",{className:"mt-4 flex justify-end",children:e.jsx("button",{type:"button","data-testid":"install-close",className:"rounded bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700",onClick:r.onClose,children:"Done"})})]})}function Ae(r){const[n,f]=b.useState(!1),i=r.progress.filter(l=>l.stream==="stderr").map(l=>l.line),x=i.length>0?i.join(`
|
|
1
|
+
import{j as e,R as b,r as v}from"./globals-DmzftdEG.js";import{o as Z,u as X,b as ee,g as B,r as F,w as te,c as se,d as re,t as P,L as R,P as le,E as ae,e as ne,S as ie}from"./main-BmB7Zj9I.js";import"./useDesktopBridge-Cm4zPght.js";/* empty css */const oe=[{key:"slashCommands",label:"Slash"},{key:"hooks",label:"Hooks"},{key:"mcp",label:"MCP"},{key:"customSystemPrompt",label:"Prompt"}];function de({supported:r,label:n}){return e.jsx("span",{style:{display:"inline-block",fontSize:10,padding:"1px 5px",borderRadius:3,marginRight:3,background:r?"var(--color-success-bg, #d4edda)":"var(--surface-3, #2a2a2a)",color:r?"var(--color-success, #28a745)":"var(--text-tertiary, #666)",border:`1px solid ${r?"var(--color-success, #28a745)":"var(--border-subtle, #333)"}`},children:n})}function D({agent:r,checked:n,onToggle:f}){return e.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",borderRadius:6,cursor:"pointer",border:r.installed?"1px solid var(--color-primary, #6366f1)":"1px solid var(--border-subtle, #333)",background:n?"var(--surface-2, #1e1e1e)":"transparent"},children:[e.jsx("input",{type:"checkbox",checked:n,onChange:f,style:{accentColor:"var(--color-primary, #6366f1)"}}),e.jsxs("div",{style:{flex:1},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[e.jsx("span",{style:{fontWeight:500,fontSize:13,color:"var(--text-primary, #fff)"},children:r.displayName}),r.installed&&e.jsx("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:3,background:"var(--color-primary-bg, #312e81)",color:"var(--color-primary, #6366f1)"},children:"installed"})]}),e.jsx("div",{style:{marginTop:3},children:oe.map(i=>e.jsx(de,{supported:r.featureSupport[i.key],label:i.label},i.key))})]})]})}function ce({agents:r,selectedIds:n,onChange:f}){const i=new Set(n),x=r.filter(a=>a.isUniversal),l=r.filter(a=>!a.isUniversal),p=a=>{const d=i.has(a)?n.filter(c=>c!==a):[...n,a];f(d)};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[x.length>0&&e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary, #999)",marginBottom:6},children:"Universal Agents"}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:x.map(a=>e.jsx(D,{agent:a,checked:i.has(a.id),onToggle:()=>p(a.id)},a.id))})]}),l.length>0&&e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary, #999)",marginBottom:6},children:"Other Agents"}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:l.map(a=>e.jsx(D,{agent:a,checked:i.has(a.id),onToggle:()=>p(a.id)},a.id))})]})]})}const ue="Cross-universal — emits the same skill to 8 universal agents (Claude, Codex, Cursor, Cline, Gemini CLI, OpenCode, Kimi, Amp). Constrains output to the common schema across all agents. Recommended for portable skills.",xe="Powerful Claude-native engine — Anthropic's built-in skill-creator with a slightly richer schema (more expressive on Claude) but Claude-only. Pick this when you only target Claude Code and want full expressiveness.",pe="Generate raw — no engine assistance, you provide the full SKILL.md body.";function me(r){return[{engine:"vskill",label:"VSkill skill-builder",caption:r.vskillSkillBuilder?`installed${r.vskillVersion?` v${r.vskillVersion}`:""}`:"not installed",tooltip:ue,detected:r.vskillSkillBuilder,installable:!0},{engine:"anthropic-skill-creator",label:"Anthropic skill-creator",caption:r.anthropicSkillCreator?"installed":"not installed",tooltip:xe,detected:r.anthropicSkillCreator,installable:!0},{engine:"none",label:"No engine — generate raw",caption:"always available",tooltip:pe,detected:!0,installable:!1}]}function ge(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function he(r){const{detection:n,selected:f,onSelect:i,onInstallClick:x}=r,l=b.useMemo(()=>ge(),[]),p=b.useMemo(()=>me(n),[n]),a=l?"":"transition-colors";return e.jsxs("fieldset",{className:"flex flex-col gap-2",children:[e.jsx("legend",{className:"text-xs font-semibold text-gray-700",children:"Authoring engine"}),e.jsx("div",{role:"tablist","aria-label":"Authoring engine",className:"flex flex-col gap-1.5",children:p.map(d=>{const c=f===d.engine,k=!d.detected&&d.installable,h=["flex items-center justify-between gap-3 rounded-md border px-3 py-2 text-sm cursor-pointer",a,c?"border-blue-600 bg-blue-50":"border-gray-300 bg-white hover:border-gray-400"].filter(Boolean).join(" "),u=d.detected?{}:{opacity:.6};return e.jsxs("div",{role:"tab",tabIndex:0,"data-testid":`engine-selector-${d.engine}`,"aria-selected":c?"true":"false",title:d.tooltip,style:u,className:h,onClick:()=>i(d.engine),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),i(d.engine))},children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium text-gray-900",children:d.label}),e.jsx("span",{className:"text-xs text-gray-500",children:d.caption})]}),k&&e.jsx("button",{type:"button","data-testid":`install-${d.engine}`,className:"rounded border border-blue-600 px-2 py-1 text-xs font-medium text-blue-700 hover:bg-blue-100",onClick:g=>{g.stopPropagation(),x(d.engine)},children:"Install"})]},d.engine)})})]})}const A="(?:0|[1-9]\\d*)",H="[0-9A-Za-z-]",$=`(?:${A}|\\d*[A-Za-z-]${H}*)`,z=`${H}+`,fe=`(?:-${$}(?:\\.${$})*)`,ye=`(?:\\+${z}(?:\\.${z})*)`,ve=new RegExp(`^${A}\\.${A}\\.${A}${fe}?${ye}?$`);function V(r){return typeof r!="string"?!1:ve.test(r.trim())}const be="Skill version (semver). Auto-bumps on update unless versioningMode=author.",je="Must be valid semver (e.g. 1.0.0, 2.1.3-beta.1)";function ke(r){const{value:n,onChange:f,mode:i,onValidityChange:x,versionsHref:l,disabled:p}=r,[a,d]=b.useState(!1),[c,k]=b.useState(()=>V(n)),h=V(n);b.useEffect(()=>{h!==c?(k(h),x==null||x(h)):x&&x(h)},[h]);const u=a&&!h,g=["w-full rounded-md border px-3 py-2 text-sm font-mono",u?"border-red-500 bg-red-50 focus:outline-red-600":"border-gray-300 bg-white focus:outline-blue-600",p?"opacity-60 cursor-not-allowed":""].join(" ");return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-xs font-semibold text-gray-700",htmlFor:"version-input",children:"Version"}),e.jsx("input",{id:"version-input","data-testid":"version-input",type:"text",title:be,value:n,onChange:m=>f(m.currentTarget.value),onBlur:()=>d(!0),"aria-invalid":u?"true":"false","aria-describedby":u?"version-input-helper":void 0,disabled:p,className:g,placeholder:"1.0.0"}),u&&e.jsx("span",{id:"version-input-helper","data-testid":"version-input-helper",className:"text-xs text-red-600",role:"alert",children:je}),i==="update"&&l&&e.jsx("a",{"data-testid":"version-input-versions-link",href:l,target:"_blank",rel:"noreferrer",className:"text-xs text-blue-600 hover:underline",children:"Versions →"})]})}const E={status:"idle",liveTail:"",progress:[],exitCode:null,stderr:"",error:null};function we(r={}){const n=r.fetchImpl??globalThis.fetch,[f,i]=b.useState(E),x=b.useRef(null),l=b.useRef(null);b.useEffect(()=>()=>{var c;(c=l.current)==null||c.close()},[]);const p=b.useCallback(()=>{var c;(c=l.current)==null||c.close(),l.current=null,x.current=null,i(E)},[]),a=b.useCallback(async c=>{x.current=c,i({...E,status:"spawning"});let k;try{const u=await n("/api/studio/install-engine",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({engine:c})});if(!u.ok){const m=await u.json().catch(()=>({}));i({...E,status:"failure",error:m.remediation??m.error??`HTTP ${u.status}`});return}k=(await u.json()).jobId}catch(u){i({...E,status:"failure",error:u.message});return}let h;h=Z(`/api/studio/install-engine/${k}/stream`,{fetchImpl:n,timeoutMessage:"install-engine SSE stream timed out",onEvent:({event:u,data:g})=>{if(u==="progress"){try{const m=JSON.parse(g);i(S=>({...S,liveTail:m.line.length>60?m.line.slice(0,60)+"…":m.line,progress:[...S.progress,m].slice(-200)}))}catch{}return}if(u==="done")try{const m=JSON.parse(g);h.close(),l.current=null,i(S=>({...S,status:m.success?"success":"failure",exitCode:m.exitCode,stderr:m.stderr,error:m.success?null:m.stderr||`exit ${m.exitCode}`}))}catch{h.close(),l.current=null,i(m=>({...m,status:"failure",error:"malformed done event"}))}},onError:u=>{l.current=null,i(g=>({...g,status:g.status==="streaming"?"failure":g.status,error:g.error??u.message}))}}),l.current=h,i(u=>({...u,status:"streaming"}))},[n]),d=b.useCallback(async()=>{const c=x.current;c&&await a(c)},[a]);return{state:f,install:a,retry:d,reset:p}}const Ne={vskill:"vskill install anton-abyzov/vskill/skill-builder","anthropic-skill-creator":"claude plugin install skill-creator"},Se={vskill:"VSkill skill-builder","anthropic-skill-creator":"Anthropic skill-creator"},Ce="This runs the command in your terminal as your user. Inspect before approving.";function Le(r){const{engine:n,onClose:f,onSuccess:i,hookOpts:x}=r,{state:l,install:p,retry:a}=we(x),d=Ne[n],c=Se[n],k=b.useRef(!1);return b.useEffect(()=>{l.status==="success"&&!k.current&&(k.current=!0,i())},[l.status,i]),e.jsx("div",{role:"dialog","aria-modal":"true","aria-labelledby":"install-engine-title","data-testid":"install-engine-modal",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",children:e.jsxs("div",{className:"w-full max-w-lg rounded-lg bg-white p-6 shadow-xl",children:[e.jsxs("h2",{id:"install-engine-title",className:"text-lg font-semibold text-gray-900",children:["Install ",c]}),l.status==="idle"&&e.jsx(Ee,{command:d,onCancel:f,onRun:()=>p(n)}),(l.status==="spawning"||l.status==="streaming")&&e.jsx(Pe,{command:d,liveTail:l.liveTail}),l.status==="success"&&e.jsx(Ie,{label:c,onClose:f}),l.status==="failure"&&e.jsx(Ae,{error:l.error??"Install failed",stderr:l.stderr,progress:l.progress,onRetry:()=>a(),onClose:f})]})})}function G({command:r}){return e.jsxs("pre",{"data-testid":"install-command-preview",className:"my-3 overflow-x-auto rounded bg-gray-900 px-3 py-2 font-mono text-xs text-green-300",children:["$ ",r]})}function Ee(r){return e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-2 text-sm text-gray-700",children:"Studio will run this command on your behalf:"}),e.jsx(G,{command:r.command}),e.jsx("p",{className:"text-xs text-amber-700","data-testid":"install-security-note",children:Ce}),e.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[e.jsx("button",{type:"button","data-testid":"install-cancel",className:"rounded border border-gray-300 px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-50",onClick:r.onCancel,children:"Cancel"}),e.jsx("button",{type:"button","data-testid":"install-run",className:"rounded bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700",onClick:r.onRun,children:"Run install"})]})]})}function Pe(r){return e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-2 text-sm text-gray-700",children:"Installing…"}),e.jsx(G,{command:r.command}),e.jsxs("div",{className:"mt-3 flex items-center gap-2 text-xs text-gray-600",children:[e.jsx("span",{"data-testid":"install-spinner",className:"inline-block h-3 w-3 animate-spin rounded-full border-2 border-gray-300 border-t-blue-600"}),e.jsx("span",{"data-testid":"install-live-tail",className:"font-mono",children:r.liveTail||"starting…"})]})]})}function Ie(r){return e.jsxs(e.Fragment,{children:[e.jsxs("p",{"data-testid":"install-success",className:"mt-3 text-sm font-medium text-green-700",children:["✓ ",r.label," installed"]}),e.jsx("div",{className:"mt-4 flex justify-end",children:e.jsx("button",{type:"button","data-testid":"install-close",className:"rounded bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700",onClick:r.onClose,children:"Done"})})]})}function Ae(r){const[n,f]=b.useState(!1),i=r.progress.filter(l=>l.stream==="stderr").map(l=>l.line),x=i.length>0?i.join(`
|
|
2
2
|
`):r.stderr;return e.jsxs(e.Fragment,{children:[e.jsx("p",{"data-testid":"install-failure",className:"mt-3 text-sm font-medium text-red-700",children:"✗ Install failed"}),e.jsx("p",{className:"mt-1 text-xs text-gray-700",children:r.error}),x&&e.jsxs("details",{className:"mt-3 text-xs",open:n,onToggle:l=>f(l.currentTarget.open),children:[e.jsx("summary",{className:"cursor-pointer text-gray-600",children:"stderr"}),e.jsx("pre",{"data-testid":"install-stderr",className:"mt-2 overflow-x-auto rounded bg-gray-900 px-3 py-2 font-mono text-xs text-red-300",children:x})]}),e.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[e.jsx("button",{type:"button","data-testid":"install-close",className:"rounded border border-gray-300 px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-50",onClick:r.onClose,children:"Close"}),e.jsx("button",{type:"button","data-testid":"install-retry",className:"rounded bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700",onClick:r.onRetry,children:"Retry"})]})]})}const N={background:"var(--surface-3)",color:"var(--text-primary)",border:"1px solid var(--border-subtle)"};function Te(r){return r?/API usage limits|usage limit/i.test(r)&&/regain access|reset/i.test(r):!1}function Re(r){const n=r.match(/regain access on ([^"\\]+?)(?:\s*UTC)?["\\]/i)??r.match(/regain access on ([^"\\]+)/i);return n?`Resets ${n[1].trim()} UTC`:"Quota resets at the start of your next billing period"}function I(r){switch(r){case"claude-cli":return"Uses your logged-in Claude Code session — your existing CLI session handles quota. No API key needed. Overflow runs at standard API rates if extra usage is enabled in your account settings.";case"anthropic":return"Direct Anthropic API — pay-per-token. Full Opus / Sonnet / Haiku catalog. Requires ANTHROPIC_API_KEY.";case"openrouter":return"One API key → 300+ models from Anthropic, OpenAI (GPT-5 / o4-mini), Google (Gemini), Meta (Llama) and more. Same prices as direct.";case"ollama":return"Local models on your machine (Llama, Qwen, Mistral, etc.). Zero cost, zero data leaves your laptop.";case"lm-studio":return"Local models via LM Studio's OpenAI-compatible server. Works offline. Pick any model you've loaded in LM Studio.";default:return""}}function M({size:r=14,color:n="currentColor"}){return e.jsx("svg",{width:r,height:r,viewBox:"0 0 24 24",fill:"none",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"M12 3l1.912 5.813a2 2 0 001.275 1.275L21 12l-5.813 1.912a2 2 0 00-1.275 1.275L12 21l-1.912-5.813a2 2 0 00-1.275-1.275L3 12l5.813-1.912a2 2 0 001.275-1.275L12 3z"})})}function Fe(){const{config:r}=X(),{refreshSkills:n,revealSkill:f}=ee(),[i,x]=v.useState(null),l=b.useMemo(()=>{if(typeof window>"u")return{};const s=window.location.hash,o=s.indexOf("?");if(o===-1)return{};const w=new URLSearchParams(s.slice(o+1)),j={};for(const y of["mode","skillName","description","pluginName"]){const L=w.get(y);L&&(j[y]=L)}return j},[]),[p,a]=v.useState("claude-cli"),[d,c]=v.useState("sonnet"),[k,h]=v.useState(!1),[u,g]=v.useState(null),m=v.useRef(!1),[S,W]=v.useState([]),[U,K]=v.useState(()=>B("activeAgent",null));v.useEffect(()=>{function s(){K(B("activeAgent",null))}return window.addEventListener("studio:agent-changed",s),window.addEventListener("storage",s),()=>{window.removeEventListener("studio:agent-changed",s),window.removeEventListener("storage",s)}},[]);const Y=U!=="claude-code";v.useEffect(()=>{fetch("/api/agents/installed").then(s=>s.json()).then(s=>{s.agents&&W(s.agents)}).catch(()=>{})},[]),v.useEffect(()=>{var j;if(!r)return;const s=r.providers.filter(y=>y.available),o=F().skillGenModel;if(s.length===0){m.current=!0;return}if(o&&typeof o=="object"&&typeof o.provider=="string"&&typeof o.model=="string"){const y=s.find(T=>T.id===o.provider),L=y==null?void 0:y.models.some(T=>T.id===o.model);if(y&&L){a(o.provider),c(o.model),h(!0),m.current=!0;return}g({provider:o.provider,model:o.model})}if(s.find(y=>y.id==="claude-cli"))a("claude-cli"),c("sonnet");else{const y=s[0];a(y.id),c(((j=y.models[0])==null?void 0:j.id)??"")}h(!1),m.current=!0},[r]),v.useEffect(()=>{const s=o=>{if(o.key!==null&&!o.key.includes("vskill.studio.prefs"))return;const j=F().skillGenModel;j&&typeof j=="object"&&typeof j.provider=="string"&&typeof j.model=="string"&&(a(j.provider),c(j.model),h(!0))};return window.addEventListener("storage",s),()=>window.removeEventListener("storage",s)},[]);const O=v.useCallback((s,o)=>{te("skillGenModel",{provider:s,model:o}),h(!0)},[]),q=v.useCallback(()=>({provider:p,model:d}),[p,d]),Q=l.mode==="standalone"?3:void 0,{flushBySkillName:J}=se(),t=re({onCreated:(s,o)=>{n(),setTimeout(()=>f(s,o),500)},resolveAiConfigOverride:q,forceLayout:Q,flushPendingForSkillName:J});v.useEffect(()=>{l.skillName&&!t.name&&t.setName(P(l.skillName)),l.description&&!t.description&&t.setDescription(l.description),l.description&&!t.aiPrompt&&t.setAiPrompt(l.description),l.pluginName&&!t.plugin&&t.setPlugin(P(l.pluginName))},[]);const C=r==null?void 0:r.providers.find(s=>s.id===p&&s.available),_=v.useMemo(()=>{const s=["---"];return t.description?s.push(`description: "${t.description.replace(/"/g,'\\"')}"`):s.push('description: ""'),t.allowedTools.trim()&&s.push(`allowed-tools: ${t.allowedTools.trim()}`),t.model&&s.push(`model: ${t.model}`),t.targetAgents.length>0&&s.push(`target-agents: ${t.targetAgents.join(", ")}`),s.push("---"),s.push(""),t.body.trim()?s.push(t.body.trim()):(s.push(`# /${t.name||"skill-name"}`),s.push(""),s.push("You are a helpful assistant.")),s.join(`
|
|
3
3
|
`)},[t.name,t.description,t.model,t.allowedTools,t.body]);return e.jsxs("div",{className:"px-4 py-6 sm:px-6 sm:py-7 lg:px-10 lg:py-8 max-w-6xl mx-auto w-full overflow-x-hidden",children:[e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[12px] mb-3",style:{color:"var(--text-tertiary)"},children:[e.jsx(R,{to:"/",className:"hover:underline",style:{color:"var(--text-tertiary)"},children:"Skills"}),e.jsx("span",{children:"/"}),e.jsx("span",{style:{color:"var(--text-secondary)"},children:"New Skill"})]}),e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("h2",{className:"text-[22px] font-semibold tracking-tight",style:{color:"var(--text-primary)"},children:"Create a New Skill"}),t.standaloneLocked&&e.jsx("span",{className:"inline-flex items-center gap-1 text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded whitespace-nowrap",style:{background:"var(--accent-muted)",color:"var(--accent)",border:"1px solid var(--accent-muted)"},title:"You chose Standalone in the previous step. Plugin selection is disabled.",children:"Standalone"})]}),e.jsx("p",{className:"text-[13px] mt-1",style:{color:"var(--text-tertiary)"},children:"Define your skill's metadata, content, and placement"})]}),e.jsxs("div",{className:"inline-flex rounded-lg p-1 self-start sm:self-auto sm:flex-shrink-0 max-w-full",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},role:"tablist","aria-label":"Creation mode",children:[e.jsx("button",{onClick:()=>t.setMode("ai"),className:"px-4 py-2 rounded-md text-[13px] font-medium transition-all duration-200",style:{background:t.mode==="ai"?"var(--purple-muted)":"transparent",color:t.mode==="ai"?"var(--purple)":"var(--text-tertiary)",boxShadow:t.mode==="ai"?"0 1px 3px rgba(0,0,0,0.08)":"none"},children:e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(M,{size:14}),"AI-Assisted"]})}),e.jsx("button",{onClick:()=>t.setMode("manual"),className:"px-4 py-2 rounded-md text-[13px] font-medium transition-all duration-200",style:{background:t.mode==="manual"?"var(--surface-4, var(--surface-3))":"transparent",color:t.mode==="manual"?"var(--text-primary)":"var(--text-tertiary)",boxShadow:t.mode==="manual"?"0 1px 3px rgba(0,0,0,0.1)":"none"},children:"Manual"})]})]})]}),t.engineDetection&&e.jsx("div",{className:"mb-4",children:e.jsx(he,{detection:t.engineDetection,selected:t.engine,onSelect:s=>t.setEngine(s),onInstallClick:s=>x(s)})}),t.layoutLoading&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"skeleton h-10 w-full rounded-lg"}),e.jsx("div",{className:"skeleton h-10 w-full rounded-lg"}),e.jsx("div",{className:"skeleton h-10 w-full rounded-lg"})]}),!t.layoutLoading&&t.layout&&t.mode==="ai"&&e.jsxs("div",{className:"flex flex-col lg:flex-row gap-6 animate-fade-in",children:[e.jsxs("div",{className:"flex-1 min-w-0 space-y-5",children:[e.jsxs("div",{className:"glass-card p-5",children:[e.jsxs("h3",{className:"text-[13px] font-semibold mb-3 flex items-center gap-2",style:{color:"var(--text-primary)"},children:[e.jsx("div",{className:"w-6 h-6 rounded-md flex items-center justify-center",style:{background:"var(--purple-muted)"},children:e.jsx(M,{size:13,color:"var(--purple)"})}),"Describe Your Skill"]}),e.jsx("textarea",{ref:t.promptRef,value:t.aiPrompt,onChange:s=>t.setAiPrompt(s.target.value),placeholder:`e.g., A skill that helps format SQL queries, optimize them for performance, and explain query execution plans.
|
|
4
4
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SearchPaletteCore-
|
|
2
|
-
import{_ as f}from"./useDesktopBridge-Cm4zPght.js";import{r as t,j as d}from"./globals-DmzftdEG.js";const l=t.lazy(()=>f(()=>import("./SearchPaletteCore-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SearchPaletteCore-DpHCf0mf.js","assets/globals-DmzftdEG.js","assets/globals-BWCNQsMa.css","assets/main-BmB7Zj9I.js","assets/useDesktopBridge-Cm4zPght.js","assets/fonts-i7Lkz2zN.css","assets/skill-url-C4ekwoGs.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as f}from"./useDesktopBridge-Cm4zPght.js";import{r as t,j as d}from"./globals-DmzftdEG.js";const l=t.lazy(()=>f(()=>import("./SearchPaletteCore-DpHCf0mf.js"),__vite__mapDeps([0,1,2,3,4,5,6])));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(l,{initialOpen:!0,onSelect:c,onNavigate:u})})}):null}export{y as FindSkillsPalette,y as default};
|