vskill 0.5.153 → 0.5.155

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.
@@ -46,7 +46,7 @@
46
46
  }
47
47
  })();
48
48
  </script>
49
- <script type="module" crossorigin src="/assets/index-CNgW8uSN.js"></script>
49
+ <script type="module" crossorigin src="/assets/index-DiqQRHFL.js"></script>
50
50
  <link rel="stylesheet" crossorigin href="/assets/index-CycZyHaL.css">
51
51
  <link rel="stylesheet" crossorigin href="/assets/fonts-i7Lkz2zN.css">
52
52
  </head>
@@ -12,6 +12,7 @@ import { registerRevertRoute } from "./revert.js";
12
12
  import { registerOpsRoutes } from "./ops.js";
13
13
  import { registerDetectEnginesRoute } from "../../eval-server/detect-engines-route.js";
14
14
  import { registerInstallEngineRoutes } from "../../eval-server/install-engine-routes.js";
15
+ import { registerInstallSkillRoutes } from "../../eval-server/install-skill-routes.js";
15
16
  export function registerScopeTransferRoutes(router, root) {
16
17
  registerPromoteRoute(router, root);
17
18
  registerTestInstallRoute(router, root);
@@ -19,5 +20,6 @@ export function registerScopeTransferRoutes(router, root) {
19
20
  registerOpsRoutes(router);
20
21
  registerDetectEnginesRoute(router, root);
21
22
  registerInstallEngineRoutes(router, root);
23
+ registerInstallSkillRoutes(router);
22
24
  }
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/studio/routes/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAC9E,wEAAwE;AACxE,4EAA4E;AAC5E,qEAAqE;AACrE,cAAc;AACd,8EAA8E;AAG9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAEzF,MAAM,UAAU,2BAA2B,CAAC,MAAc,EAAE,IAAY;IACtE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/studio/routes/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAC9E,wEAAwE;AACxE,4EAA4E;AAC5E,qEAAqE;AACrE,cAAc;AACd,8EAA8E;AAG9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,MAAM,UAAU,2BAA2B,CAAC,MAAc,EAAE,IAAY;IACtE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vskill",
3
- "version": "0.5.153",
3
+ "version": "0.5.155",
4
4
  "type": "module",
5
5
  "description": "Secure multi-platform AI skill installer — scan before you install",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- import{j as e,r as d,T as H}from"./index-CNgW8uSN.js";import{s as $}from"./skill-url-C4ekwoGs.js";/* empty css */const B={T0:{label:"BLOCKED",cssVar:"var(--trust-t0)"},T1:{label:"UNSCANNED",cssVar:"var(--trust-t1)"},T2:{label:"BASIC",cssVar:"var(--trust-t2)"},T3:{label:"VERIFIED",cssVar:"var(--trust-t3)"},T4:{label:"CERTIFIED",cssVar:"var(--trust-t4)"}};function K({tier:t}){const o=B[t]??B.T1;return e.jsxs("span",{"data-testid":"trust-badge","data-tier":t,style:{display:"inline-flex",alignItems:"center",gap:"0.3rem",padding:"0.15rem 0.5rem",borderRadius:"4px",fontFamily:"var(--font-geist-mono)",fontSize:"0.6875rem",fontWeight:600,letterSpacing:"0.03em",textTransform:"uppercase",whiteSpace:"nowrap",color:o.cssVar,backgroundColor:`color-mix(in srgb, ${o.cssVar} 10%, transparent)`,border:`1px solid color-mix(in srgb, ${o.cssVar} 25%, transparent)`,lineHeight:1,height:"22px"},children:[t," ",o.label]})}const q=/^https?:\/\/github\.com\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+?)(\.git)?(\/.*)?$/;function G(t){var x,h;const s=t.trim().match(q);if(!s)return null;const l=(x=s[1])==null?void 0:x.toLowerCase();let r=(h=s[2])==null?void 0:h.toLowerCase();if(!l||!r)return null;r=r.replace(/\.git$/,"");const m=`https://github.com/${l}/${r}`;return{owner:l,name:r,url:m}}function Z({repoUrl:t,mono:o="var(--font-geist-mono)",fontSize:s="0.75rem",showPlaceholder:l=!0}){if(!t)return l?e.jsx("span",{style:{color:"var(--text-faint)",fontSize:s},children:"--"}):null;const r=G(t);return r?e.jsxs("a",{"data-testid":"repo-link",href:r.url,target:"_blank",rel:"noopener noreferrer",onClick:m=>m.stopPropagation(),style:{color:"#0D9488",textDecoration:"none",fontSize:s,fontFamily:o},children:[r.owner,"/",r.name]}):e.jsx("span",{style:{color:"var(--text-faint)",fontSize:s,fontFamily:o},children:t})}const X="var(--font-geist-mono)",Y={ONLINE:"var(--status-success-text)",OFFLINE:"var(--status-danger-text)",STALE:"var(--status-neutral-text)"},J={ONLINE:"var(--status-success-bg)",OFFLINE:"var(--status-danger-bg)",STALE:"var(--status-neutral-bg)"};function Q({skillName:t,repoUrl:o}){const[s,l]=d.useState(null),[r,m]=d.useState(!1);if(d.useEffect(()=>{o&&(m(!0),fetch($(t,"repo-health")).then(g=>{if(!g.ok)throw new Error("fetch failed");return g.json()}).then(g=>{l(g.status),m(!1)}).catch(()=>{l(null),m(!1)}))},[t,o]),!o)return null;if(r)return e.jsx("span",{"data-testid":"repo-health-loading",style:{display:"inline-block",width:56,height:20,borderRadius:"4px",backgroundColor:"color-mix(in srgb, var(--text-faint) 20%, transparent)",animation:"pulse 1.5s ease-in-out infinite"}});if(!s||s==="UNKNOWN")return null;const x=Y[s]??"var(--status-neutral-text)",h=J[s]??"var(--status-neutral-bg)";return e.jsx("span",{"data-testid":"repo-health-badge",style:{fontFamily:X,fontSize:"0.75rem",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.03em",padding:"0.2rem 0.6rem",borderRadius:"999px",backgroundColor:h,color:x,whiteSpace:"nowrap"},children:s})}function ee({children:t,compact:o}){return e.jsx("pre",{"data-testid":"terminal-block",style:{background:"var(--bg-code, #161B22)",color:"#E6EDF3",fontFamily:"var(--font-geist-mono)",fontSize:o?"0.8rem":"0.875rem",lineHeight:1.6,padding:o?"1rem 1.25rem":"1.5rem 2rem",borderRadius:"6px",overflowX:"auto",margin:0},children:t})}const te="/api/v1/studio/telemetry/install-copy",re=/^[a-zA-Z0-9._@/-]+$/,ne=/^[a-zA-Z0-9._-]+$/,oe="https://verified-skill.com";function se(t){return`${t.owner}/${t.repo}/${t.slug}`}function ae(t,o){return t!=null&&t.ownerSlug&&(t!=null&&t.repoSlug)?`${t.ownerSlug}/${t.repoSlug}`:t!=null&&t.publisher?t.publisher:`${o.owner}/${o.repo}`}function ie(t,o,s){const l=s?`${t}/${o}@${s}`:`${t}/${o}`;if(!re.test(`${t}/${o}`))return{ok:!1,reason:"Invalid skill identifier"};if(s&&!ne.test(s))return{ok:!1,reason:"Invalid version identifier"};const r=`npx vskill@latest install ${l}`,m=[{label:"npm",comment:"# npm",command:r},{label:"bun",comment:"# bun",command:`bunx vskill@latest install ${l}`},{label:"pnpm",comment:"# pnpm",command:`pnpx vskill@latest install ${l}`},{label:"yarn",comment:"# yarn",command:`yarn dlx vskill@latest install ${l}`},{label:"alternative",comment:"# alternative (publisher + --skill flag)",command:s?`npx vskill@latest install ${t}@${s} --skill ${o}`:`npx vskill@latest install ${t} --skill ${o}`}];return{ok:!0,command:r,variants:m}}function z(t,o,s){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,kind:o,durationMs:s,severity:o==="error"?"error":"info"}}))}async function N(t){var o;if(typeof navigator<"u"&&((o=navigator.clipboard)!=null&&o.writeText))try{return await navigator.clipboard.writeText(t),!0}catch{}if(typeof document>"u")return!1;try{const s=document.createElement("textarea");s.value=t,s.setAttribute("readonly",""),s.style.position="fixed",s.style.left="-9999px",document.body.appendChild(s),s.select();const l=document.execCommand("copy");return document.body.removeChild(s),l}catch{return!1}}function _(t,o){try{fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),keepalive:!0}).catch(()=>{})}catch{}}function ue({selectedSkill:t,onClose:o,telemetryInstallCopyUrl:s=te,onToast:l}){const[r,m]=d.useState(null),[x,h]=d.useState([]),[g,j]=d.useState(!0),[S,R]=d.useState(null),[f,A]=d.useState(null),[V,O]=d.useState(0),C=d.useRef(null),I=d.useRef(null),D=d.useRef(null),y=se(t);d.useEffect(()=>(D.current=document.activeElement??null,()=>{const n=D.current;if(n&&typeof n.focus=="function")try{n.focus()}catch{}}),[]),d.useEffect(()=>{const n=setTimeout(()=>{var a;return(a=I.current)==null?void 0:a.focus()},50);return()=>clearTimeout(n)},[]),d.useEffect(()=>{let n=!1;j(!0),R(null);const a=$(y),c=$(y,"versions");return Promise.all([fetch(a).then(async i=>{if(!i.ok)throw new Error(`metadata ${i.status}`);return i.json()}),fetch(c).then(async i=>{if(!i.ok)throw new Error(`versions ${i.status}`);const u=await i.json();return Array.isArray(u)?u:(u==null?void 0:u.versions)??[]})]).then(([i,u])=>{if(n)return;m(i),h(u);const v=u.find(E=>E.isLatest)??u[0]??null;A(v?v.version:null),j(!1)}).catch(i=>{n||(R(i instanceof Error?i.message:String(i)),j(!1))}),()=>{n=!0}},[y,V]),d.useEffect(()=>{function n(a){if(a.key==="Escape")a.stopPropagation(),w();else if(a.key==="Tab"){const c=C.current;if(!c)return;const i=c.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])');if(i.length===0)return;const u=i[0],v=i[i.length-1],E=document.activeElement;a.shiftKey&&E===u?(a.preventDefault(),v.focus()):!a.shiftKey&&E===v&&(a.preventDefault(),u.focus())}}return window.addEventListener("keydown",n,!0),()=>window.removeEventListener("keydown",n,!0)},[]);const w=d.useCallback(()=>{o();let n="";try{typeof window<"u"&&window.sessionStorage&&(n=window.sessionStorage.getItem("find-skills:last-query")??"")}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("openFindSkills",{detail:{query:n}}))},[o]),T=ae(r,t),k=(r==null?void 0:r.skillSlug)??t.slug,L=(r==null?void 0:r.displayName)??t.displayName??k,U=(r==null?void 0:r.isBlocked)===!0,b=d.useMemo(()=>x.length===0?[]:[...x].sort((a,c)=>{const i=a.publishedAt?Date.parse(a.publishedAt):0;return(c.publishedAt?Date.parse(c.publishedAt):0)-i}).slice(0,5),[x]),F=d.useMemo(()=>!f||b.length===0?!0:b[0].version===f,[f,b]),p=d.useMemo(()=>f?ie(T,k,F?null:f):null,[T,k,f,F]),M=d.useCallback(async()=>{if(!p||!p.ok)return;const n=await N(p.command);_(s,{skillName:y,version:f??"",q:"",ts:Date.now()});const a=n?`Run ${p.command} in your terminal`:"Copy failed — please copy the command manually.";if(l)try{l(a,n?"success":"error")}catch{}else z(a,n?"success":"error",3500)},[p,s,y,f,T,k,F,l]),P=(r==null?void 0:r.trustTier)??"T1",W=(r==null?void 0:r.certTier)==="CERTIFIED"||(r==null?void 0:r.certTier)==="VERIFIED"?r.certTier:"VERIFIED";return e.jsxs("div",{ref:C,"data-testid":"skill-detail-panel",role:"dialog","aria-modal":"true","aria-label":`Skill detail — ${L}`,style:{position:"fixed",inset:0,zIndex:9998,display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"min(10vh, 80px)"},onClick:n=>{n.target===n.currentTarget&&w()},children:[e.jsx("div",{style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",backdropFilter:"blur(4px)"}}),e.jsxs("div",{onClick:n=>n.stopPropagation(),style:{position:"relative",width:"100%",maxWidth:720,margin:"0 1rem",background:"var(--bg-surface, #FFFFFF)",color:"var(--text-primary, #191919)",borderRadius:"8px",border:"1px solid var(--color-rule, #E8E1D6)",boxShadow:"0 20px 60px rgba(0,0,0,0.15)",overflow:"hidden",maxHeight:"80vh",display:"flex",flexDirection:"column"},children:[e.jsxs("div",{style:{padding:"0.75rem 1rem",borderBottom:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"space-between",flexShrink:0},children:[e.jsx("button",{ref:I,type:"button",onClick:w,"data-testid":"skill-detail-back",style:{background:"transparent",border:"none",padding:"4px 8px",borderRadius:4,cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:12,color:"var(--text-secondary, #5A5651)"},children:"← Back to results"}),e.jsx("kbd",{style:{fontFamily:"var(--font-mono, monospace)",fontSize:11,color:"var(--text-secondary, #5A5651)",border:"1px solid var(--color-rule, #E8E1D6)",borderRadius:4,padding:"1px 5px"},children:"Esc"})]}),e.jsxs("div",{style:{overflowY:"auto",padding:"1rem",flex:1},children:[g&&e.jsx("div",{"data-testid":"skill-detail-loading",style:{padding:"2rem",textAlign:"center",color:"var(--text-secondary, #5A5651)"},children:"Loading…"}),S&&!g&&e.jsxs("div",{"data-testid":"skill-detail-error",style:{padding:"1.5rem",textAlign:"center",fontFamily:"var(--font-mono, monospace)",fontSize:"0.875rem",color:"var(--red, #b54444)"},children:[e.jsxs("div",{style:{marginBottom:"0.75rem"},children:["Failed to load skill: ",S]}),e.jsx("button",{"data-testid":"skill-detail-retry",onClick:()=>O(n=>n+1),style:{fontFamily:"var(--font-mono, monospace)",fontSize:"0.8125rem",padding:"0.4rem 1rem",borderRadius:4,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-primary, #191919)",cursor:"pointer"},children:"Retry"})]}),!g&&!S&&e.jsxs(e.Fragment,{children:[e.jsxs("section",{"data-testid":"skill-detail-hero",style:{marginBottom:"1.25rem"},children:[e.jsx("h2",{style:{margin:"0 0 0.5rem",fontSize:"1.25rem",fontWeight:600},children:L}),(r==null?void 0:r.description)&&e.jsx("p",{style:{margin:"0 0 0.75rem",color:"var(--text-secondary, #5A5651)",fontSize:"0.875rem",lineHeight:1.5},children:r.description}),e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem",alignItems:"center"},children:[e.jsx(K,{tier:P}),e.jsx(H,{tier:W,isTainted:r==null?void 0:r.isTainted}),e.jsx(Z,{repoUrl:(r==null?void 0:r.repoUrl)??null}),e.jsx(Q,{skillName:y,repoUrl:r==null?void 0:r.repoUrl})]})]}),e.jsxs("section",{"data-testid":"skill-detail-versions",style:{marginBottom:"1.25rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-secondary, #5A5651)"},children:"Versions"}),b.length===0?e.jsx("div",{style:{color:"var(--text-secondary, #5A5651)",fontSize:"0.8125rem"},children:"No versions found."}):e.jsx("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:4},children:b.map(n=>{const a=n.version===f,c=n.publishedAt?n.publishedAt.slice(0,10):"",i=n.authorEmail??n.author??"";return e.jsx("li",{children:e.jsxs("button",{type:"button","data-testid":"skill-detail-version-row","data-version":n.version,"data-selected":a?"true":"false","aria-pressed":a,onClick:()=>A(n.version),style:{width:"100%",textAlign:"left",padding:"0.5rem 0.75rem",borderRadius:4,border:a?"1px solid var(--color-action, #2F5B8E)":"1px solid var(--color-rule, #E8E1D6)",background:a?"color-mix(in srgb, var(--color-action, #2F5B8E) 8%, transparent)":"transparent",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.8125rem",color:"var(--text-primary, #191919)",display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsx("span",{"aria-hidden":"true",style:{width:14,display:"inline-flex",justifyContent:"center"},children:a?"●":"○"}),e.jsxs("span",{style:{fontWeight:600},children:["v",n.version]}),c&&e.jsxs("span",{style:{color:"var(--text-secondary, #5A5651)"},children:["· ",c]}),i&&e.jsxs("span",{style:{color:"var(--text-secondary, #5A5651)"},children:["· ",i]}),a&&e.jsx("span",{"data-testid":"skill-detail-version-selected-tag",style:{marginLeft:"auto",fontSize:"0.6875rem",color:"var(--color-action, #2F5B8E)"},children:"Selected"})]})},n.version)})}),e.jsx("div",{style:{marginTop:"0.5rem",textAlign:"right"},children:e.jsx("a",{"data-testid":"skill-detail-see-all-versions",href:`${oe}/skills/${t.owner}/${t.repo}/${t.slug}/versions`,target:"_blank",rel:"noopener noreferrer",style:{fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",color:"var(--color-action, #2F5B8E)",textDecoration:"none"},children:"see all versions →"})})]}),U?e.jsxs("section",{"data-testid":"skill-detail-blocked",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--red, #b54444)"},children:"This skill is blocked"}),e.jsx("div",{style:{padding:"1rem",borderRadius:6,border:"1px solid var(--red, #b54444)",background:"var(--red-muted, color-mix(in srgb, #b54444 18%, transparent))",color:"var(--red, #b54444)",fontSize:"0.875rem"},children:(r==null?void 0:r.blockReason)??"This skill has been blocked by platform moderators and cannot be installed."})]}):p&&!p.ok?e.jsxs("section",{"data-testid":"skill-detail-install-error",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--red, #b54444)"},children:"Install command unavailable"}),e.jsxs("div",{style:{padding:"1rem",borderRadius:6,border:"1px solid var(--red, #b54444)",background:"var(--red-muted, color-mix(in srgb, #b54444 18%, transparent))",color:"var(--red, #b54444)",fontSize:"0.875rem"},children:[p.reason," — refusing to render the install panel for safety."]})]}):p&&p.ok?e.jsxs("section",{"data-testid":"skill-detail-install",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-secondary, #5A5651)"},children:"Install"}),e.jsx("button",{type:"button",onClick:M,"data-testid":"skill-detail-install-primary","aria-label":"Install skill — copy npm command to clipboard",style:{display:"inline-flex",alignItems:"center",marginBottom:"0.75rem",padding:"0.5rem 1rem",borderRadius:6,border:"1px solid var(--text-primary, #191919)",background:"var(--text-primary, #191919)",color:"var(--bg-surface, #FFFFFF)",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.875rem",fontWeight:600},children:"Install"}),e.jsx("div",{"data-testid":"skill-detail-install-command",style:{display:"block"},children:e.jsx(ee,{compact:!0,children:p.variants.map((n,a)=>e.jsxs("div",{"data-testid":`skill-detail-install-variant-${n.label}`,style:{display:"flex",gap:"0.75rem",alignItems:"flex-start",marginTop:a===0?0:"0.75rem"},children:[e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{color:"#8B949E",marginBottom:"0.125rem"},children:n.comment}),e.jsxs("div",{children:[e.jsx("span",{style:{color:"#8B949E",marginRight:"0.5rem"},children:"$"}),e.jsx("span",{"data-testid":`skill-detail-install-variant-cmd-${n.label}`,children:n.command})]})]}),e.jsx("button",{type:"button",onClick:async()=>{const c=await N(n.command),i=c?`Run ${n.command} in your terminal`:"Copy failed — please copy the command manually.";if(l)try{l(i,c?"success":"error")}catch{}else z(i,c?"success":"error",3500);c&&_(s,{skillName:y,version:f??"",q:"",ts:Date.now()})},"data-testid":`skill-detail-copy-${n.label}`,"aria-label":`Copy ${n.label} install command`,style:{flexShrink:0,padding:"0.25rem 0.6rem",borderRadius:4,border:"1px solid color-mix(in srgb, #E6EDF3 25%, transparent)",background:"color-mix(in srgb, #E6EDF3 8%, transparent)",color:"#E6EDF3",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.7rem",alignSelf:"flex-end"},children:"Copy"})]},n.label))})})]}):null]})]})]})]})}export{ue as SkillDetailPanel,ue as default};