vskill 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/agents.json +1 -1
  2. package/dist/eval-server/platform-proxy.js +28 -3
  3. package/dist/eval-server/platform-proxy.js.map +1 -1
  4. package/dist/eval-server/submission-guard.d.ts +26 -0
  5. package/dist/eval-server/submission-guard.js +103 -0
  6. package/dist/eval-server/submission-guard.js.map +1 -0
  7. package/dist/eval-ui/assets/{AdvancedTab-CSWhj_MZ.js → AdvancedTab-6VlfqCuD.js} +1 -1
  8. package/dist/eval-ui/assets/{CreateSkillPage-BJzNKgad.js → CreateSkillPage-BUrgworx.js} +1 -1
  9. package/dist/eval-ui/assets/{FindSkillsPalette-XckIggJi.js → FindSkillsPalette-BstJ22TI.js} +2 -2
  10. package/dist/eval-ui/assets/{GeneralTab-Gbc-K6UI.js → GeneralTab-BpFlJ2ue.js} +1 -1
  11. package/dist/eval-ui/assets/{PrivacyTab-BXCIX8cQ.js → PrivacyTab-UfO7QLy_.js} +1 -1
  12. package/dist/eval-ui/assets/{SearchPaletteCore-CTZ8CI14.js → SearchPaletteCore-Dagnc-E7.js} +1 -1
  13. package/dist/eval-ui/assets/{SkillDetailPanel-NPnDnA3H.js → SkillDetailPanel-DnujVk6g.js} +1 -1
  14. package/dist/eval-ui/assets/{UpdateDropdown-CPP1t9LD.js → UpdateDropdown-B7D2vXrm.js} +1 -1
  15. package/dist/eval-ui/assets/{UpdatesTab-BFGUaUtu.js → UpdatesTab-C38-n7V3.js} +1 -1
  16. package/dist/eval-ui/assets/globals-BWCNQsMa.css +1 -0
  17. package/dist/eval-ui/assets/globals-DmzftdEG.js +49 -0
  18. package/dist/eval-ui/assets/{index-DhhmQddr.js → index-DlQYQHDO.js} +1 -1
  19. package/dist/eval-ui/assets/{lifecycle-o_IRibOa.js → lifecycle-n00yue6r.js} +1 -1
  20. package/dist/eval-ui/assets/main-DjA5gpjV.js +86 -0
  21. package/dist/eval-ui/assets/{preferences-D2BPT0OT.js → preferences-BN-jNWS0.js} +2 -2
  22. package/dist/eval-ui/assets/{useDesktopBridge-BKz-gcRg.js → useDesktopBridge-Cm4zPght.js} +1 -1
  23. package/dist/eval-ui/index.html +4 -4
  24. package/dist/eval-ui/lifecycle.html +3 -3
  25. package/dist/eval-ui/preferences.html +4 -4
  26. package/package.json +6 -6
  27. package/dist/eval-ui/assets/globals-Dpf9KmYH.css +0 -1
  28. package/dist/eval-ui/assets/globals-hm1COkXX.js +0 -49
  29. package/dist/eval-ui/assets/main-jiMosYzo.js +0 -86
package/agents.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-10-09T08:31:13.288Z",
3
+ "generatedAt": "2026-10-11T05:02:04.318Z",
4
4
  "agentPrefixes": [
5
5
  ".adal",
6
6
  ".agent",
@@ -51,6 +51,7 @@ import * as http from "node:http";
51
51
  import * as https from "node:https";
52
52
  import { randomUUID } from "node:crypto";
53
53
  import { getDefaultKeychain } from "../lib/keychain.js";
54
+ import { isSubmissionCreate, screenSubmission, sendSubmissionRefusal } from "./submission-guard.js";
54
55
  const DEFAULT_PLATFORM_URL = "https://verified-skill.com";
55
56
  // Hop-by-hop headers per RFC 2616 §13.5.1 — never forward these on a proxy.
56
57
  const HOP_BY_HOP = new Set([
@@ -281,7 +282,25 @@ function isSseDebugEnabled() {
281
282
  * When the flag is unset (or "0"), no per-request logs and no header
282
283
  * injection — preserves the production hot path.
283
284
  */
284
- export function proxyToPlatform(req, res, baseUrl = getPlatformBaseUrl()) {
285
+ export async function proxyToPlatform(req, res, baseUrl = getPlatformBaseUrl()) {
286
+ // 0874 AC-06: a submission for a private or unconfirmed repo is answered
287
+ // here and never reaches the platform (see submission-guard.ts). A confirmed
288
+ // public one is forwarded with the buffered body, byte for byte.
289
+ if (isSubmissionCreate(req.method, req.url)) {
290
+ const screen = await screenSubmission(req);
291
+ if ("refusal" in screen) {
292
+ sendSubmissionRefusal(res, screen.refusal);
293
+ return;
294
+ }
295
+ // The client may have gone away during the GitHub visibility lookup; its
296
+ // close event has already fired, so do not start an upstream request.
297
+ if (res.destroyed || res.writableEnded || req.socket?.destroyed)
298
+ return;
299
+ return forwardToPlatform(req, res, baseUrl, screen.body);
300
+ }
301
+ return forwardToPlatform(req, res, baseUrl);
302
+ }
303
+ function forwardToPlatform(req, res, baseUrl, bufferedBody) {
285
304
  return new Promise((resolve) => {
286
305
  const target = new URL(req.url ?? "/", baseUrl);
287
306
  const transport = target.protocol === "https:" ? https : http;
@@ -382,8 +401,14 @@ export function proxyToPlatform(req, res, baseUrl = getPlatformBaseUrl()) {
382
401
  // Forward the request body (if any) — req is a readable stream.
383
402
  // Contract: callers MUST NOT pre-read the body before reaching this
384
403
  // proxy, otherwise pipe sends nothing. No middleware in eval-server
385
- // currently does, but new ones must respect this.
386
- req.pipe(upstreamReq);
404
+ // currently does, but new ones must respect this. The submission guard
405
+ // is the one reader: it hands over the body it buffered.
406
+ if (bufferedBody) {
407
+ upstreamReq.end(bufferedBody);
408
+ }
409
+ else {
410
+ req.pipe(upstreamReq);
411
+ }
387
412
  });
388
413
  }
389
414
  export async function submitSkillUpdateEvent(input, opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"platform-proxy.js","sourceRoot":"","sources":["../../src/eval-server/platform-proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-proxy.js","sourceRoot":"","sources":["../../src/eval-server/platform-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type * as http from "node:http";
2
+ /** Largest submission body the proxy buffers. Real bodies are a few hundred bytes. */
3
+ export declare const SUBMISSION_BODY_LIMIT: number;
4
+ export type SubmissionRefusalCode = "private_repository" | "unsupported_repository" | "request_too_large";
5
+ export interface SubmissionRefusal {
6
+ status: number;
7
+ error: SubmissionRefusalCode;
8
+ message: string;
9
+ }
10
+ export type SubmissionScreen = {
11
+ body: Buffer;
12
+ } | {
13
+ refusal: SubmissionRefusal;
14
+ };
15
+ /** True only for the submission create call: POST on the bare collection path. */
16
+ export declare function isSubmissionCreate(method: string | undefined, url: string | undefined): boolean;
17
+ /** Decide whether a submission for `repoUrl` may be sent. Null means it may. */
18
+ export declare function checkSubmissionRepo(repoUrl: unknown): Promise<SubmissionRefusal | null>;
19
+ /**
20
+ * Read the request body, keeping at most `limit` bytes. Resolves null when the
21
+ * body is larger; the rest is drained so the client can finish writing.
22
+ */
23
+ export declare function readCappedBody(req: http.IncomingMessage, limit?: number): Promise<Buffer | null>;
24
+ /** Buffer and screen a submission create request. */
25
+ export declare function screenSubmission(req: http.IncomingMessage): Promise<SubmissionScreen>;
26
+ export declare function sendSubmissionRefusal(res: http.ServerResponse, refusal: SubmissionRefusal): void;
@@ -0,0 +1,103 @@
1
+ // ---------------------------------------------------------------------------
2
+ // submission-guard.ts — screens Studio's `POST /api/v1/submissions` before the
3
+ // platform proxy forwards it to verified-skill.com (0874 AC-06).
4
+ //
5
+ // Rule (same as `vskill submit` and the 1.2.1 egress work): nothing about a
6
+ // private repo reaches the platform, not even its URL. A repo counts as
7
+ // private unless GitHub confirms it is public (isPrivateOrUnknownRepo, fail
8
+ // closed). A submission whose repo is private, unconfirmed, missing, not
9
+ // parsable or not on GitHub is answered locally and never sent upstream.
10
+ // Only the create call is screened; the stream and positions sub-resources
11
+ // carry no repo and pass through unchanged.
12
+ // ---------------------------------------------------------------------------
13
+ import { isPrivateOrUnknownRepo, parseGitHubRepoRef } from "../lib/private-source.js";
14
+ /** Largest submission body the proxy buffers. Real bodies are a few hundred bytes. */
15
+ export const SUBMISSION_BODY_LIMIT = 64 * 1024;
16
+ /** True only for the submission create call: POST on the bare collection path. */
17
+ export function isSubmissionCreate(method, url) {
18
+ if ((method ?? "").toUpperCase() !== "POST" || !url)
19
+ return false;
20
+ const path = url.split("?")[0].replace(/\/+$/, "");
21
+ return path === "/api/v1/submissions";
22
+ }
23
+ const PUBLIC_ONLY = "verified-skill.com only verifies public repos, so nothing was submitted.";
24
+ function unsupported(reason) {
25
+ return {
26
+ status: 422,
27
+ error: "unsupported_repository",
28
+ message: `${reason} verified-skill.com only verifies public GitHub repos, so nothing was submitted.`,
29
+ };
30
+ }
31
+ /** Decide whether a submission for `repoUrl` may be sent. Null means it may. */
32
+ export async function checkSubmissionRepo(repoUrl) {
33
+ if (typeof repoUrl !== "string" || repoUrl.trim() === "") {
34
+ return unsupported("The submission did not name a GitHub repository.");
35
+ }
36
+ const gh = parseGitHubRepoRef(repoUrl);
37
+ if (!gh)
38
+ return unsupported("The repository is not on GitHub.");
39
+ if (await isPrivateOrUnknownRepo(gh.owner, gh.repo)) {
40
+ return {
41
+ status: 422,
42
+ error: "private_repository",
43
+ message: `${gh.owner}/${gh.repo} is private, or GitHub could not confirm it is public. ${PUBLIC_ONLY}`,
44
+ };
45
+ }
46
+ return null;
47
+ }
48
+ /**
49
+ * Read the request body, keeping at most `limit` bytes. Resolves null when the
50
+ * body is larger; the rest is drained so the client can finish writing.
51
+ */
52
+ export function readCappedBody(req, limit = SUBMISSION_BODY_LIMIT) {
53
+ return new Promise((resolve) => {
54
+ const chunks = [];
55
+ let size = 0;
56
+ let tooLarge = false;
57
+ req.on("data", (chunk) => {
58
+ if (tooLarge)
59
+ return;
60
+ size += chunk.length;
61
+ if (size > limit) {
62
+ tooLarge = true;
63
+ chunks.length = 0;
64
+ return;
65
+ }
66
+ chunks.push(chunk);
67
+ });
68
+ req.on("end", () => resolve(tooLarge ? null : Buffer.concat(chunks)));
69
+ req.on("error", () => resolve(null));
70
+ });
71
+ }
72
+ /** Buffer and screen a submission create request. */
73
+ export async function screenSubmission(req) {
74
+ const body = await readCappedBody(req);
75
+ if (!body) {
76
+ return {
77
+ refusal: {
78
+ status: 413,
79
+ error: "request_too_large",
80
+ message: "The submission was too large to check, so nothing was submitted.",
81
+ },
82
+ };
83
+ }
84
+ let repoUrl;
85
+ try {
86
+ const parsed = JSON.parse(body.toString("utf8"));
87
+ repoUrl = parsed && typeof parsed === "object" ? parsed.repoUrl : undefined;
88
+ }
89
+ catch {
90
+ repoUrl = undefined;
91
+ }
92
+ const refusal = await checkSubmissionRepo(repoUrl);
93
+ return refusal ? { refusal } : { body };
94
+ }
95
+ export function sendSubmissionRefusal(res, refusal) {
96
+ if (!res.headersSent) {
97
+ res.writeHead(refusal.status, { "content-type": "application/json", "cache-control": "no-store" });
98
+ }
99
+ if (!res.writableEnded) {
100
+ res.end(JSON.stringify({ error: refusal.error, message: refusal.message }));
101
+ }
102
+ }
103
+ //# sourceMappingURL=submission-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submission-guard.js","sourceRoot":"","sources":["../../src/eval-server/submission-guard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{r as s,j as e}from"./globals-hm1COkXX.js";import{u as L,S as d,F as u,C as k,D as R}from"./preferences-D2BPT0OT.js";/* empty css */import"./useDesktopBridge-BKz-gcRg.js";const g="~/.vskill/settings.json";function S(t){switch(t){case"ask":return"Show the lifecycle modal whenever another studio instance is detected.";case"use-existing":return"Always switch to the running instance — no modal, no extra sidecar.";case"stop-and-replace":return"SIGTERM the existing instance (3s grace, then SIGKILL) and start this app's sidecar.";case"run-alongside":return"Start this app's sidecar on a fresh port; both instances coexist.";default:return""}}function E({bridge:t,snapshot:i,onSnapshotChanged:r,pushToast:l}){var p;const{t:a}=L("preferences"),n=!t.available,[x,o]=s.useState(!1),[v,f]=s.useState(g);s.useEffect(()=>{if(n){f(a("advanced.settingsPath.browserValue"));return}f(g)},[n,a]);const y=(i==null?void 0:i.advanced.logLevel)??"info",h=((p=i==null?void 0:i.studio)==null?void 0:p.lifecycleDefault)??"ask",b=s.useCallback(async c=>{try{await t.setSetting("advanced.logLevel",c),await r()}catch{l({message:"Couldn't update log level.",variant:"error"})}},[t,r,l]),m=s.useCallback(async c=>{try{await t.setSetting("studio.lifecycleDefault",c),await r()}catch{l({message:"Couldn't update studio lifecycle default.",variant:"error"})}},[t,r,l]),j=s.useCallback(async()=>{try{await t.copyToClipboard(v),l({message:a("advanced.settingsPath.copied")})}catch{l({message:"Couldn't copy.",variant:"error"})}},[t,l,v,a]),w=s.useCallback(async()=>{try{await t.revealSettingsFile()}catch{l({message:"Couldn't open settings file.",variant:"error"})}},[t,l]),C=s.useCallback(async()=>{try{await t.resetSettings(),await r(),l({message:a("advanced.factoryReset.done"),variant:"success"})}catch{l({message:"Couldn't reset preferences.",variant:"error"})}finally{o(!1)}},[t,r,l,a]);return e.jsxs(e.Fragment,{children:[e.jsxs("header",{className:"preferences-content__heading",children:[e.jsx("h1",{children:a("advanced.heading")}),e.jsx("p",{children:a("advanced.subheading")})]}),e.jsx(d,{title:a("advanced.logLevel.label"),children:e.jsx(u,{label:a("advanced.logLevel.label"),help:a("advanced.logLevel.help"),control:e.jsxs("select",{className:"pref-select",value:y,onChange:c=>b(c.target.value),disabled:n,"aria-disabled":n||void 0,"aria-label":a("advanced.logLevel.label"),children:[e.jsx("option",{value:"error",children:a("advanced.logLevel.error")}),e.jsx("option",{value:"warn",children:a("advanced.logLevel.warn")}),e.jsx("option",{value:"info",children:a("advanced.logLevel.info")}),e.jsx("option",{value:"debug",children:a("advanced.logLevel.debug")}),e.jsx("option",{value:"trace",children:a("advanced.logLevel.trace")})]})})}),e.jsx(d,{title:"Studio lifecycle",children:e.jsx(u,{label:"When another Skill Studio is already running",help:"Choose what the desktop app should do at launch when an existing instance is detected. 'Ask each time' shows the modal; the others run silently.",control:e.jsxs("select",{className:"pref-select",value:h,onChange:c=>m(c.target.value),disabled:n,"aria-disabled":n||void 0,"aria-label":"Studio lifecycle default",title:S(h),children:[e.jsx("option",{value:"ask",children:"Ask each time (default)"}),e.jsx("option",{value:"use-existing",children:"Use existing instance"}),e.jsx("option",{value:"stop-and-replace",children:"Stop existing + use this app"}),e.jsx("option",{value:"run-alongside",children:"Run alongside"})]})})}),e.jsx(d,{title:a("advanced.settingsPath.label"),children:e.jsx(u,{stacked:!0,label:a("advanced.settingsPath.label"),help:a("advanced.settingsPath.help"),control:e.jsxs("div",{style:{display:"flex",gap:8,marginTop:6,flexWrap:"wrap"},children:[e.jsx("code",{className:"pref-path-display",style:{flex:1,minWidth:200},children:v}),e.jsx("button",{type:"button",className:"pref-button",onClick:j,children:a("advanced.settingsPath.copy")}),e.jsx("button",{type:"button",className:"pref-button",onClick:w,disabled:n,"aria-disabled":n||void 0,children:a("advanced.settingsPath.reveal")})]})})}),e.jsx(d,{title:a("advanced.factoryReset.label"),children:e.jsx(u,{label:a("advanced.factoryReset.label"),help:a("advanced.factoryReset.help"),control:e.jsx("button",{type:"button",className:"pref-button pref-button--danger",onClick:()=>o(!0),children:a("advanced.factoryReset.button")})})}),n?e.jsx(k,{variant:"info",children:a("app.browserCallout")}):null,e.jsxs(R,{open:x,onDismiss:()=>o(!1),ariaLabel:a("advanced.factoryReset.confirmTitle"),children:[e.jsx("h2",{className:"pref-dialog__title",children:a("advanced.factoryReset.confirmTitle")}),e.jsx("p",{className:"pref-dialog__body",children:a("advanced.factoryReset.confirmBody")}),e.jsxs("div",{className:"pref-dialog__actions",children:[e.jsx("button",{type:"button",className:"pref-button",onClick:()=>o(!1),children:a("advanced.factoryReset.cancel")}),e.jsx("button",{type:"button",className:"pref-button pref-button--danger",onClick:C,children:a("advanced.factoryReset.confirm")})]})]})]})}export{E as AdvancedTab};
1
+ import{r as s,j as e}from"./globals-DmzftdEG.js";import{u as L,S as d,F as u,C as k,D as R}from"./preferences-BN-jNWS0.js";/* empty css */import"./useDesktopBridge-Cm4zPght.js";const g="~/.vskill/settings.json";function S(t){switch(t){case"ask":return"Show the lifecycle modal whenever another studio instance is detected.";case"use-existing":return"Always switch to the running instance — no modal, no extra sidecar.";case"stop-and-replace":return"SIGTERM the existing instance (3s grace, then SIGKILL) and start this app's sidecar.";case"run-alongside":return"Start this app's sidecar on a fresh port; both instances coexist.";default:return""}}function E({bridge:t,snapshot:i,onSnapshotChanged:r,pushToast:l}){var p;const{t:a}=L("preferences"),n=!t.available,[x,o]=s.useState(!1),[v,f]=s.useState(g);s.useEffect(()=>{if(n){f(a("advanced.settingsPath.browserValue"));return}f(g)},[n,a]);const y=(i==null?void 0:i.advanced.logLevel)??"info",h=((p=i==null?void 0:i.studio)==null?void 0:p.lifecycleDefault)??"ask",b=s.useCallback(async c=>{try{await t.setSetting("advanced.logLevel",c),await r()}catch{l({message:"Couldn't update log level.",variant:"error"})}},[t,r,l]),m=s.useCallback(async c=>{try{await t.setSetting("studio.lifecycleDefault",c),await r()}catch{l({message:"Couldn't update studio lifecycle default.",variant:"error"})}},[t,r,l]),j=s.useCallback(async()=>{try{await t.copyToClipboard(v),l({message:a("advanced.settingsPath.copied")})}catch{l({message:"Couldn't copy.",variant:"error"})}},[t,l,v,a]),w=s.useCallback(async()=>{try{await t.revealSettingsFile()}catch{l({message:"Couldn't open settings file.",variant:"error"})}},[t,l]),C=s.useCallback(async()=>{try{await t.resetSettings(),await r(),l({message:a("advanced.factoryReset.done"),variant:"success"})}catch{l({message:"Couldn't reset preferences.",variant:"error"})}finally{o(!1)}},[t,r,l,a]);return e.jsxs(e.Fragment,{children:[e.jsxs("header",{className:"preferences-content__heading",children:[e.jsx("h1",{children:a("advanced.heading")}),e.jsx("p",{children:a("advanced.subheading")})]}),e.jsx(d,{title:a("advanced.logLevel.label"),children:e.jsx(u,{label:a("advanced.logLevel.label"),help:a("advanced.logLevel.help"),control:e.jsxs("select",{className:"pref-select",value:y,onChange:c=>b(c.target.value),disabled:n,"aria-disabled":n||void 0,"aria-label":a("advanced.logLevel.label"),children:[e.jsx("option",{value:"error",children:a("advanced.logLevel.error")}),e.jsx("option",{value:"warn",children:a("advanced.logLevel.warn")}),e.jsx("option",{value:"info",children:a("advanced.logLevel.info")}),e.jsx("option",{value:"debug",children:a("advanced.logLevel.debug")}),e.jsx("option",{value:"trace",children:a("advanced.logLevel.trace")})]})})}),e.jsx(d,{title:"Studio lifecycle",children:e.jsx(u,{label:"When another Skill Studio is already running",help:"Choose what the desktop app should do at launch when an existing instance is detected. 'Ask each time' shows the modal; the others run silently.",control:e.jsxs("select",{className:"pref-select",value:h,onChange:c=>m(c.target.value),disabled:n,"aria-disabled":n||void 0,"aria-label":"Studio lifecycle default",title:S(h),children:[e.jsx("option",{value:"ask",children:"Ask each time (default)"}),e.jsx("option",{value:"use-existing",children:"Use existing instance"}),e.jsx("option",{value:"stop-and-replace",children:"Stop existing + use this app"}),e.jsx("option",{value:"run-alongside",children:"Run alongside"})]})})}),e.jsx(d,{title:a("advanced.settingsPath.label"),children:e.jsx(u,{stacked:!0,label:a("advanced.settingsPath.label"),help:a("advanced.settingsPath.help"),control:e.jsxs("div",{style:{display:"flex",gap:8,marginTop:6,flexWrap:"wrap"},children:[e.jsx("code",{className:"pref-path-display",style:{flex:1,minWidth:200},children:v}),e.jsx("button",{type:"button",className:"pref-button",onClick:j,children:a("advanced.settingsPath.copy")}),e.jsx("button",{type:"button",className:"pref-button",onClick:w,disabled:n,"aria-disabled":n||void 0,children:a("advanced.settingsPath.reveal")})]})})}),e.jsx(d,{title:a("advanced.factoryReset.label"),children:e.jsx(u,{label:a("advanced.factoryReset.label"),help:a("advanced.factoryReset.help"),control:e.jsx("button",{type:"button",className:"pref-button pref-button--danger",onClick:()=>o(!0),children:a("advanced.factoryReset.button")})})}),n?e.jsx(k,{variant:"info",children:a("app.browserCallout")}):null,e.jsxs(R,{open:x,onDismiss:()=>o(!1),ariaLabel:a("advanced.factoryReset.confirmTitle"),children:[e.jsx("h2",{className:"pref-dialog__title",children:a("advanced.factoryReset.confirmTitle")}),e.jsx("p",{className:"pref-dialog__body",children:a("advanced.factoryReset.confirmBody")}),e.jsxs("div",{className:"pref-dialog__actions",children:[e.jsx("button",{type:"button",className:"pref-button",onClick:()=>o(!1),children:a("advanced.factoryReset.cancel")}),e.jsx("button",{type:"button",className:"pref-button pref-button--danger",onClick:C,children:a("advanced.factoryReset.confirm")})]})]})]})}export{E as AdvancedTab};
@@ -1,4 +1,4 @@
1
- import{j as e,R as b,r as v}from"./globals-hm1COkXX.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-jiMosYzo.js";import"./useDesktopBridge-BKz-gcRg.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-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(`
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-CTZ8CI14.js","assets/globals-hm1COkXX.js","assets/globals-Dpf9KmYH.css","assets/main-jiMosYzo.js","assets/useDesktopBridge-BKz-gcRg.js","assets/fonts-i7Lkz2zN.css","assets/skill-url-C4ekwoGs.js"])))=>i.map(i=>d[i]);
2
- import{_ as f}from"./useDesktopBridge-BKz-gcRg.js";import{r as t,j as d}from"./globals-hm1COkXX.js";const l=t.lazy(()=>f(()=>import("./SearchPaletteCore-CTZ8CI14.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};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SearchPaletteCore-Dagnc-E7.js","assets/globals-DmzftdEG.js","assets/globals-BWCNQsMa.css","assets/main-DjA5gpjV.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-Dagnc-E7.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};
@@ -1 +1 @@
1
- import{r as o,j as l}from"./globals-hm1COkXX.js";import{u as S,C as P,S as k,F as y,a as C,T as A}from"./preferences-D2BPT0OT.js";/* empty css */import"./useDesktopBridge-BKz-gcRg.js";const L={title:"This is your home directory",body:"Skill Studio shows personal skills here. Pick a specific project subfolder instead."},R={title:"This is a personal-scope folder",body:"Skills under this directory are personal-scope (shared across all your projects). If you meant to open a specific project, pick a project subfolder instead."};function _({kind:a,path:t,onPickAgain:i,onProceed:c,onClose:e}){const d=o.useRef(null),u=o.useRef(null);o.useEffect(()=>{var r;(r=u.current)==null||r.focus()},[]),o.useEffect(()=>{const r=s=>{s.key==="Escape"&&(s.preventDefault(),e())};return document.addEventListener("keydown",r),()=>{document.removeEventListener("keydown",r)}},[e]);const g=a==="home_root"?L:R,f="folder-picker-warning-title",p="folder-picker-warning-body";return l.jsx("div",{"data-testid":"folder-picker-warning-overlay",role:"presentation",onClick:r=>{r.target===r.currentTarget&&e()},style:E,children:l.jsxs("div",{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":f,"aria-describedby":p,"data-testid":"folder-picker-warning-dialog","data-kind":a,style:F,children:[l.jsx("h2",{id:f,style:O,children:g.title}),l.jsx("p",{id:p,style:T,children:g.body}),l.jsx("code",{"data-testid":"folder-picker-warning-path",style:z,children:t}),l.jsxs("div",{style:I,children:[l.jsx("button",{ref:u,type:"button","data-testid":"folder-picker-warning-pick-again",onClick:i,style:B,children:"Pick again"}),l.jsx("button",{type:"button","data-testid":"folder-picker-warning-use-anyway",onClick:c,style:N,children:"Use this anyway"})]})]})})}const E={position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},F={background:"var(--color-surface, #ffffff)",color:"var(--color-text, #1a1a1a)",padding:"24px 28px",borderRadius:8,width:"min(480px, 90vw)",boxShadow:"0 20px 50px rgba(0,0,0,0.25)",fontFamily:"var(--font-system, -apple-system, system-ui)"},O={margin:"0 0 12px",fontSize:18,fontWeight:600},T={margin:"0 0 12px",fontSize:14,lineHeight:1.5,color:"var(--color-text-soft, #555)"},z={display:"block",padding:"8px 10px",background:"var(--color-pill-bg, rgba(0,0,0,0.05))",borderRadius:4,fontSize:12,marginBottom:18,wordBreak:"break-all"},I={display:"flex",gap:10,justifyContent:"flex-end"},B={background:"var(--color-accent, #2563eb)",color:"#fff",border:"none",borderRadius:4,padding:"8px 16px",fontSize:14,fontWeight:500,cursor:"pointer"},N={background:"transparent",color:"var(--color-text, #333)",border:"1px solid var(--color-border, #ccc)",borderRadius:4,padding:"8px 16px",fontSize:14,cursor:"pointer"};function U({bridge:a,snapshot:t,onSnapshotChanged:i,pushToast:c}){const{t:e}=S("preferences"),d=!a.available,[u,g]=o.useState((t==null?void 0:t.general.theme)??"system");o.useEffect(()=>{t!=null&&t.general.theme&&g(t.general.theme)},[t==null?void 0:t.general.theme]);const f=o.useCallback(async n=>{g(n);try{await a.setSetting("general.theme",n),await i()}catch{c({message:"Couldn't update theme.",variant:"error"})}},[a,i,c]),p=o.useCallback(async n=>{try{await a.setAutostart(n),await a.setSetting("general.launchAtLogin",n),await i()}catch{c({message:e("general.launchAtLogin.errorAdmin"),variant:"error",actions:[{label:e("general.launchAtLogin.openSettings"),onClick:()=>{}}]}),await i()}},[a,i,c,e]),[r,s]=o.useState(null),m=o.useCallback(async n=>{await a.setSetting("general.defaultProjectFolder",n),await i()},[a,i]),h=o.useCallback(async()=>{try{const n=await a.pickProjectFolder();if(!n)return;const{path:b,classification:x}=n;if(x.kind==="home_root"){s({kind:"home_root",path:b});return}if(x.kind==="personal_scope"){s({kind:"personal_scope",path:b});return}await m(b)}catch{c({message:"Couldn't open folder picker.",variant:"error"})}},[a,m,c]),j=u,w=(t==null?void 0:t.general.launchAtLogin)??!1,v=(t==null?void 0:t.general.defaultProjectFolder)??null;return l.jsxs(l.Fragment,{children:[l.jsxs("header",{className:"preferences-content__heading",children:[l.jsx("h1",{children:e("general.heading")}),l.jsx("p",{children:e("general.subheading")})]}),d?l.jsxs(P,{variant:"info",children:[l.jsx("strong",{children:e("common.browserMode")}),l.jsx("span",{children:e("app.browserCallout")}),l.jsx("a",{href:e("app.downloadUrl"),target:"_blank",rel:"noopener noreferrer",children:e("app.downloadLink")})]}):null,l.jsx(k,{title:e("general.theme.label"),children:l.jsx(y,{label:e("general.theme.label"),help:e("general.theme.help"),control:l.jsx(C,{ariaLabel:e("general.theme.label"),value:j,onChange:f,options:[{value:"system",label:e("general.theme.system")},{value:"light",label:e("general.theme.light")},{value:"dark",label:e("general.theme.dark")}]})})}),l.jsxs(k,{title:e("tabs.general"),children:[l.jsx(y,{label:e("general.launchAtLogin.label"),help:e(d?"general.launchAtLogin.browserDisabled":"general.launchAtLogin.help"),control:l.jsx(A,{ariaLabel:e("general.launchAtLogin.label"),checked:w,onChange:p,disabled:d})}),l.jsx(y,{stacked:!0,label:e("general.defaultProject.label"),help:e("general.defaultProject.help"),control:l.jsxs("div",{style:{display:"flex",gap:10,alignItems:"center",marginTop:6},children:[l.jsx("code",{className:"pref-path-display",style:{flex:1},children:v??e("general.defaultProject.notSet")}),l.jsx("button",{type:"button",className:"pref-button",disabled:d,"aria-disabled":d||void 0,onClick:h,children:e("general.defaultProject.choose")})]})}),l.jsx(y,{label:e("general.language.label"),help:e("general.language.help"),control:l.jsx("select",{className:"pref-select",defaultValue:"en","aria-label":e("general.language.label"),children:l.jsx("option",{value:"en",children:e("general.language.english")})})})]}),r?l.jsx(_,{kind:r.kind,path:r.path,onPickAgain:()=>{s(null),h()},onProceed:()=>{const n=r.path;s(null),m(n)},onClose:()=>s(null)}):null]})}export{U as GeneralTab};
1
+ import{r as o,j as l}from"./globals-DmzftdEG.js";import{u as S,C as P,S as k,F as y,a as C,T as A}from"./preferences-BN-jNWS0.js";/* empty css */import"./useDesktopBridge-Cm4zPght.js";const L={title:"This is your home directory",body:"Skill Studio shows personal skills here. Pick a specific project subfolder instead."},R={title:"This is a personal-scope folder",body:"Skills under this directory are personal-scope (shared across all your projects). If you meant to open a specific project, pick a project subfolder instead."};function _({kind:a,path:t,onPickAgain:i,onProceed:c,onClose:e}){const d=o.useRef(null),u=o.useRef(null);o.useEffect(()=>{var r;(r=u.current)==null||r.focus()},[]),o.useEffect(()=>{const r=s=>{s.key==="Escape"&&(s.preventDefault(),e())};return document.addEventListener("keydown",r),()=>{document.removeEventListener("keydown",r)}},[e]);const g=a==="home_root"?L:R,f="folder-picker-warning-title",p="folder-picker-warning-body";return l.jsx("div",{"data-testid":"folder-picker-warning-overlay",role:"presentation",onClick:r=>{r.target===r.currentTarget&&e()},style:E,children:l.jsxs("div",{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":f,"aria-describedby":p,"data-testid":"folder-picker-warning-dialog","data-kind":a,style:F,children:[l.jsx("h2",{id:f,style:O,children:g.title}),l.jsx("p",{id:p,style:T,children:g.body}),l.jsx("code",{"data-testid":"folder-picker-warning-path",style:z,children:t}),l.jsxs("div",{style:I,children:[l.jsx("button",{ref:u,type:"button","data-testid":"folder-picker-warning-pick-again",onClick:i,style:B,children:"Pick again"}),l.jsx("button",{type:"button","data-testid":"folder-picker-warning-use-anyway",onClick:c,style:N,children:"Use this anyway"})]})]})})}const E={position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},F={background:"var(--color-surface, #ffffff)",color:"var(--color-text, #1a1a1a)",padding:"24px 28px",borderRadius:8,width:"min(480px, 90vw)",boxShadow:"0 20px 50px rgba(0,0,0,0.25)",fontFamily:"var(--font-system, -apple-system, system-ui)"},O={margin:"0 0 12px",fontSize:18,fontWeight:600},T={margin:"0 0 12px",fontSize:14,lineHeight:1.5,color:"var(--color-text-soft, #555)"},z={display:"block",padding:"8px 10px",background:"var(--color-pill-bg, rgba(0,0,0,0.05))",borderRadius:4,fontSize:12,marginBottom:18,wordBreak:"break-all"},I={display:"flex",gap:10,justifyContent:"flex-end"},B={background:"var(--color-accent, #2563eb)",color:"#fff",border:"none",borderRadius:4,padding:"8px 16px",fontSize:14,fontWeight:500,cursor:"pointer"},N={background:"transparent",color:"var(--color-text, #333)",border:"1px solid var(--color-border, #ccc)",borderRadius:4,padding:"8px 16px",fontSize:14,cursor:"pointer"};function U({bridge:a,snapshot:t,onSnapshotChanged:i,pushToast:c}){const{t:e}=S("preferences"),d=!a.available,[u,g]=o.useState((t==null?void 0:t.general.theme)??"system");o.useEffect(()=>{t!=null&&t.general.theme&&g(t.general.theme)},[t==null?void 0:t.general.theme]);const f=o.useCallback(async n=>{g(n);try{await a.setSetting("general.theme",n),await i()}catch{c({message:"Couldn't update theme.",variant:"error"})}},[a,i,c]),p=o.useCallback(async n=>{try{await a.setAutostart(n),await a.setSetting("general.launchAtLogin",n),await i()}catch{c({message:e("general.launchAtLogin.errorAdmin"),variant:"error",actions:[{label:e("general.launchAtLogin.openSettings"),onClick:()=>{}}]}),await i()}},[a,i,c,e]),[r,s]=o.useState(null),m=o.useCallback(async n=>{await a.setSetting("general.defaultProjectFolder",n),await i()},[a,i]),h=o.useCallback(async()=>{try{const n=await a.pickProjectFolder();if(!n)return;const{path:b,classification:x}=n;if(x.kind==="home_root"){s({kind:"home_root",path:b});return}if(x.kind==="personal_scope"){s({kind:"personal_scope",path:b});return}await m(b)}catch{c({message:"Couldn't open folder picker.",variant:"error"})}},[a,m,c]),j=u,w=(t==null?void 0:t.general.launchAtLogin)??!1,v=(t==null?void 0:t.general.defaultProjectFolder)??null;return l.jsxs(l.Fragment,{children:[l.jsxs("header",{className:"preferences-content__heading",children:[l.jsx("h1",{children:e("general.heading")}),l.jsx("p",{children:e("general.subheading")})]}),d?l.jsxs(P,{variant:"info",children:[l.jsx("strong",{children:e("common.browserMode")}),l.jsx("span",{children:e("app.browserCallout")}),l.jsx("a",{href:e("app.downloadUrl"),target:"_blank",rel:"noopener noreferrer",children:e("app.downloadLink")})]}):null,l.jsx(k,{title:e("general.theme.label"),children:l.jsx(y,{label:e("general.theme.label"),help:e("general.theme.help"),control:l.jsx(C,{ariaLabel:e("general.theme.label"),value:j,onChange:f,options:[{value:"system",label:e("general.theme.system")},{value:"light",label:e("general.theme.light")},{value:"dark",label:e("general.theme.dark")}]})})}),l.jsxs(k,{title:e("tabs.general"),children:[l.jsx(y,{label:e("general.launchAtLogin.label"),help:e(d?"general.launchAtLogin.browserDisabled":"general.launchAtLogin.help"),control:l.jsx(A,{ariaLabel:e("general.launchAtLogin.label"),checked:w,onChange:p,disabled:d})}),l.jsx(y,{stacked:!0,label:e("general.defaultProject.label"),help:e("general.defaultProject.help"),control:l.jsxs("div",{style:{display:"flex",gap:10,alignItems:"center",marginTop:6},children:[l.jsx("code",{className:"pref-path-display",style:{flex:1},children:v??e("general.defaultProject.notSet")}),l.jsx("button",{type:"button",className:"pref-button",disabled:d,"aria-disabled":d||void 0,onClick:h,children:e("general.defaultProject.choose")})]})}),l.jsx(y,{label:e("general.language.label"),help:e("general.language.help"),control:l.jsx("select",{className:"pref-select",defaultValue:"en","aria-label":e("general.language.label"),children:l.jsx("option",{value:"en",children:e("general.language.english")})})})]}),r?l.jsx(_,{kind:r.kind,path:r.path,onPickAgain:()=>{s(null),h()},onProceed:()=>{const n=r.path;s(null),m(n)},onClose:()=>s(null)}):null]})}export{U as GeneralTab};
@@ -1 +1 @@
1
- import{r as s,j as a}from"./globals-hm1COkXX.js";import{u as h,C as x,S as j,F as n,T as p}from"./preferences-D2BPT0OT.js";/* empty css */import"./useDesktopBridge-BKz-gcRg.js";function E({bridge:l,snapshot:r,onSnapshotChanged:i,pushToast:t}){const{t:e}=h("preferences"),y=!l.available,v=(r==null?void 0:r.privacy.telemetryEnabled)??!1,m=(r==null?void 0:r.privacy.crashReportingEnabled)??!1,o=s.useCallback(async(c,d,g)=>{try{await l.setSetting(c,d),await i()}catch{t({message:`Couldn't update ${g}.`,variant:"error"})}},[l,i,t]),b=s.useCallback(async()=>{try{await l.openLogsFolder()}catch{t({message:"Couldn't open logs folder.",variant:"error"})}},[l,t]);return a.jsxs(a.Fragment,{children:[a.jsxs("header",{className:"preferences-content__heading",children:[a.jsx("h1",{children:e("privacy.heading")}),a.jsx("p",{children:e("privacy.subheading")})]}),a.jsx(x,{variant:"info",children:e("privacy.disclosure")}),a.jsxs(j,{title:e("privacy.heading"),children:[a.jsx(n,{label:e("privacy.telemetry.label"),help:e("privacy.telemetry.help"),control:a.jsx(p,{ariaLabel:e("privacy.telemetry.label"),checked:v,onChange:c=>o("privacy.telemetryEnabled",c,"telemetry")})}),a.jsx(n,{label:e("privacy.crash.label"),help:e("privacy.crash.help"),control:a.jsx(p,{ariaLabel:e("privacy.crash.label"),checked:m,onChange:c=>o("privacy.crashReportingEnabled",c,"crash reporting")})}),y?null:a.jsx(n,{label:e("privacy.openLogs.label"),help:e("privacy.openLogs.help"),control:a.jsx("button",{type:"button",className:"pref-button",onClick:b,children:e("privacy.openLogs.label")})})]})]})}export{E as PrivacyTab};
1
+ import{r as s,j as a}from"./globals-DmzftdEG.js";import{u as h,C as x,S as j,F as n,T as p}from"./preferences-BN-jNWS0.js";/* empty css */import"./useDesktopBridge-Cm4zPght.js";function E({bridge:l,snapshot:r,onSnapshotChanged:i,pushToast:t}){const{t:e}=h("preferences"),y=!l.available,v=(r==null?void 0:r.privacy.telemetryEnabled)??!1,m=(r==null?void 0:r.privacy.crashReportingEnabled)??!1,o=s.useCallback(async(c,d,g)=>{try{await l.setSetting(c,d),await i()}catch{t({message:`Couldn't update ${g}.`,variant:"error"})}},[l,i,t]),b=s.useCallback(async()=>{try{await l.openLogsFolder()}catch{t({message:"Couldn't open logs folder.",variant:"error"})}},[l,t]);return a.jsxs(a.Fragment,{children:[a.jsxs("header",{className:"preferences-content__heading",children:[a.jsx("h1",{children:e("privacy.heading")}),a.jsx("p",{children:e("privacy.subheading")})]}),a.jsx(x,{variant:"info",children:e("privacy.disclosure")}),a.jsxs(j,{title:e("privacy.heading"),children:[a.jsx(n,{label:e("privacy.telemetry.label"),help:e("privacy.telemetry.help"),control:a.jsx(p,{ariaLabel:e("privacy.telemetry.label"),checked:v,onChange:c=>o("privacy.telemetryEnabled",c,"telemetry")})}),a.jsx(n,{label:e("privacy.crash.label"),help:e("privacy.crash.help"),control:a.jsx(p,{ariaLabel:e("privacy.crash.label"),checked:m,onChange:c=>o("privacy.crashReportingEnabled",c,"crash reporting")})}),y?null:a.jsx(n,{label:e("privacy.openLogs.label"),help:e("privacy.openLogs.help"),control:a.jsx("button",{type:"button",className:"pref-button",onClick:b,children:e("privacy.openLogs.label")})})]})]})}export{E as PrivacyTab};
@@ -1,4 +1,4 @@
1
- import{r as i,j as t}from"./globals-hm1COkXX.js";import{s as xe,h as ye}from"./main-jiMosYzo.js";import{a as me}from"./skill-url-C4ekwoGs.js";import"./useDesktopBridge-BKz-gcRg.js";/* empty css */function be(a){return a?a.replace(/<(?!\/?b>)[^>]+>/gi,""):""}function ve(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function $e(a,p){if(!a)return"";const d=ve(a);if(!p)return d;const u=p.trim().split(/\s+/).filter(Boolean);if(u.length===0)return d;const T=u.map(O=>O.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),b=new RegExp(`(${T})`,"gi");return d.replace(b,"<b>$1</b>")}function ke(a){return a?a<1e3?String(a):`${(a/1e3).toFixed(1)}k`:""}const Se=[{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"}],Ee=[{label:"Submit a skill",href:"/submit"},{label:"Browse all skills",href:"/skills"}],Y="var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif)",c="var(--font-mono, 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace)";function Fe({tier:a,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"}}[a];return b?t.jsx("span",{"data-testid":"mini-tier-badge","data-tier":a,style:{...u,color:b.color,background:b.bg,border:`1px solid ${b.border}`},children:ye(a)}):null}function W(){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 we(a){var d,u;const p=(d=a.target)==null?void 0:d.tagName;return!!(p==="INPUT"||p==="TEXTAREA"||p==="SELECT"||(u=a.target)!=null&&u.isContentEditable)}const je="/api/v1/studio/search",Ae="/api/v1/stats",Re="/api/v1/studio/telemetry/search-select",Ce=10,Q=20,De=150;function Ne({onSelect:a,onNavigate:p,searchUrl:d=je,trendingUrl:u=Ae,telemetrySelectUrl:T=Re,maxPages:b=Ce,initialOpen:O=!1}={}){const[L,E]=i.useState(O),[o,F]=i.useState(""),[I,h]=i.useState([]),[U,v]=i.useState(0),[w,B]=i.useState(!1),[_,j]=i.useState(1),[H,x]=i.useState(!1),[M,X]=i.useState(!1),[$,k]=i.useState(null),[A,R]=i.useState(!1),V=i.useRef(null),N=i.useRef(null),z=i.useRef(!1),Z=i.useRef(null),ee=i.useRef(null),K=i.useRef(new Map),S=i.useRef(null),[,ue]=i.useState(!1),te=i.useMemo(()=>typeof navigator<"u"&&/Mac|iPod|iPhone|iPad/.test(navigator.platform||""),[]),re=i.useRef(o);i.useEffect(()=>{re.current=o},[o]),i.useEffect(()=>{S.current||fetch(u).then(e=>e.json()).then(e=>{S.current=e.trendingSkills??[],ue(!0)}).catch(()=>{})},[u]),i.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&&!we(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]),i.useLayoutEffect(()=>{var n;if(!L){(n=N.current)==null||n.abort();return}if(z.current)z.current=!1,h([]),v(0),j(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),j(1),x(!1),B(!1),k(null),R(!1)}const e=V.current;if(e){e.focus({preventScroll:!0});const r=e.value.length;e.setSelectionRange(r,r)}},[L]),i.useEffect(()=>{if(!o.trim()||o.trim().length<2){h([]),x(!1),j(1),k(null);return}const e=6e4,n=o.trim().toLowerCase(),r=K.current.get(n);if(r&&Date.now()-r.timestamp<e){h(r.results),x(r.hasMore),j(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&&K.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),j(1),R(!1),K.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)}},De);return()=>{clearTimeout(y),l.abort()}},[o,d]);const C=_>=b,ne=i.useCallback(async()=>{var n,r;if(M||C)return;const e=_+1;X(!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),j(e)}catch(s){if(s instanceof DOMException&&s.name==="AbortError")return}finally{(r=N.current)!=null&&r.signal.aborted||X(!1)}},[_,o,M,C,d]);i.useEffect(()=>{const e=Z.current,n=ee.current;if(!e||!n||typeof IntersectionObserver>"u")return;const r=new IntersectionObserver(s=>{s[0].isIntersecting&&H&&!w&&!M&&!C&&ne()},{root:n,rootMargin:"100px"});return r.observe(e),()=>r.disconnect()},[H,w,M,C,ne]);const q=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}),P=(()=>{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(q)}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(q)}return e.length===0&&S.current?S.current.slice(0,10).map(q):[]})(),f=[...P.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:me(e.name),sourceResult:e}}),...!o&&P.length===0?Se.map(e=>({type:"category",label:e.label,publisher:"",name:"",meta:"",certTier:"",repoUrl:"",href:e.href})):[],...!o&&P.length===0?Ee.map(e=>({type:"action",label:e.label,publisher:"",name:"",meta:"",certTier:"",repoUrl:"",href:e.href})):[]],ie=i.useCallback(e=>{xe(T,{skillName:e,ts:Date.now()})},[T]),D=i.useCallback((e,n)=>{if(n&&(ie(n.name),a))try{a(n,re.current.trim())}catch{}if(E(!1),p)try{p(e)}catch{}},[a,p,ie]);i.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 ae="";const se=!w&&!$&&!A&&o.trim().length>=2&&I.length===0,G=w&&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:Y};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:`
1
+ import{r as i,j as t}from"./globals-DmzftdEG.js";import{s as xe,h as ye}from"./main-DjA5gpjV.js";import{a as me}from"./skill-url-C4ekwoGs.js";import"./useDesktopBridge-Cm4zPght.js";/* empty css */function be(a){return a?a.replace(/<(?!\/?b>)[^>]+>/gi,""):""}function ve(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function $e(a,p){if(!a)return"";const d=ve(a);if(!p)return d;const u=p.trim().split(/\s+/).filter(Boolean);if(u.length===0)return d;const T=u.map(O=>O.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),b=new RegExp(`(${T})`,"gi");return d.replace(b,"<b>$1</b>")}function ke(a){return a?a<1e3?String(a):`${(a/1e3).toFixed(1)}k`:""}const Se=[{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"}],Ee=[{label:"Submit a skill",href:"/submit"},{label:"Browse all skills",href:"/skills"}],Y="var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif)",c="var(--font-mono, 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace)";function Fe({tier:a,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"}}[a];return b?t.jsx("span",{"data-testid":"mini-tier-badge","data-tier":a,style:{...u,color:b.color,background:b.bg,border:`1px solid ${b.border}`},children:ye(a)}):null}function W(){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 we(a){var d,u;const p=(d=a.target)==null?void 0:d.tagName;return!!(p==="INPUT"||p==="TEXTAREA"||p==="SELECT"||(u=a.target)!=null&&u.isContentEditable)}const je="/api/v1/studio/search",Ae="/api/v1/stats",Re="/api/v1/studio/telemetry/search-select",Ce=10,Q=20,De=150;function Ne({onSelect:a,onNavigate:p,searchUrl:d=je,trendingUrl:u=Ae,telemetrySelectUrl:T=Re,maxPages:b=Ce,initialOpen:O=!1}={}){const[L,E]=i.useState(O),[o,F]=i.useState(""),[I,h]=i.useState([]),[U,v]=i.useState(0),[w,B]=i.useState(!1),[_,j]=i.useState(1),[H,x]=i.useState(!1),[M,X]=i.useState(!1),[$,k]=i.useState(null),[A,R]=i.useState(!1),V=i.useRef(null),N=i.useRef(null),z=i.useRef(!1),Z=i.useRef(null),ee=i.useRef(null),K=i.useRef(new Map),S=i.useRef(null),[,ue]=i.useState(!1),te=i.useMemo(()=>typeof navigator<"u"&&/Mac|iPod|iPhone|iPad/.test(navigator.platform||""),[]),re=i.useRef(o);i.useEffect(()=>{re.current=o},[o]),i.useEffect(()=>{S.current||fetch(u).then(e=>e.json()).then(e=>{S.current=e.trendingSkills??[],ue(!0)}).catch(()=>{})},[u]),i.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&&!we(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]),i.useLayoutEffect(()=>{var n;if(!L){(n=N.current)==null||n.abort();return}if(z.current)z.current=!1,h([]),v(0),j(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),j(1),x(!1),B(!1),k(null),R(!1)}const e=V.current;if(e){e.focus({preventScroll:!0});const r=e.value.length;e.setSelectionRange(r,r)}},[L]),i.useEffect(()=>{if(!o.trim()||o.trim().length<2){h([]),x(!1),j(1),k(null);return}const e=6e4,n=o.trim().toLowerCase(),r=K.current.get(n);if(r&&Date.now()-r.timestamp<e){h(r.results),x(r.hasMore),j(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&&K.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),j(1),R(!1),K.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)}},De);return()=>{clearTimeout(y),l.abort()}},[o,d]);const C=_>=b,ne=i.useCallback(async()=>{var n,r;if(M||C)return;const e=_+1;X(!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),j(e)}catch(s){if(s instanceof DOMException&&s.name==="AbortError")return}finally{(r=N.current)!=null&&r.signal.aborted||X(!1)}},[_,o,M,C,d]);i.useEffect(()=>{const e=Z.current,n=ee.current;if(!e||!n||typeof IntersectionObserver>"u")return;const r=new IntersectionObserver(s=>{s[0].isIntersecting&&H&&!w&&!M&&!C&&ne()},{root:n,rootMargin:"100px"});return r.observe(e),()=>r.disconnect()},[H,w,M,C,ne]);const q=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}),P=(()=>{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(q)}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(q)}return e.length===0&&S.current?S.current.slice(0,10).map(q):[]})(),f=[...P.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:me(e.name),sourceResult:e}}),...!o&&P.length===0?Se.map(e=>({type:"category",label:e.label,publisher:"",name:"",meta:"",certTier:"",repoUrl:"",href:e.href})):[],...!o&&P.length===0?Ee.map(e=>({type:"action",label:e.label,publisher:"",name:"",meta:"",certTier:"",repoUrl:"",href:e.href})):[]],ie=i.useCallback(e=>{xe(T,{skillName:e,ts:Date.now()})},[T]),D=i.useCallback((e,n)=>{if(n&&(ie(n.name),a))try{a(n,re.current.trim())}catch{}if(E(!1),p)try{p(e)}catch{}},[a,p,ie]);i.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 ae="";const se=!w&&!$&&!A&&o.trim().length>=2&&I.length===0,G=w&&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:Y};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
2
  @keyframes fsp-pulse {
3
3
  0%, 100% { opacity: 1; }
4
4
  50% { opacity: 0.45; }