vskill 0.5.154 → 0.5.156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents.json +1 -1
- package/dist/eval-server/install-skill-routes.d.ts +28 -0
- package/dist/eval-server/install-skill-routes.js +175 -0
- package/dist/eval-server/install-skill-routes.js.map +1 -0
- package/dist/eval-ui/assets/{CommandPalette-BdCTpuru.js → CommandPalette-BrxAwVSI.js} +1 -1
- package/dist/eval-ui/assets/{CreateSkillPage-BTmTAiqN.js → CreateSkillPage-D1IDP5ix.js} +1 -1
- package/dist/eval-ui/assets/{FindSkillsPalette-imZp5JFm.js → FindSkillsPalette-B-W-HPw_.js} +2 -2
- package/dist/eval-ui/assets/{SearchPaletteCore-Bkmmx8rW.js → SearchPaletteCore-D9sITLLq.js} +1 -1
- package/dist/eval-ui/assets/SkillDetailPanel-Ccg4ucCu.js +1 -0
- package/dist/eval-ui/assets/{UpdateDropdown-G1bDlsFU.js → UpdateDropdown-D63hnqu9.js} +1 -1
- package/dist/eval-ui/assets/index-BQc3jDn2.js +122 -0
- package/dist/eval-ui/index.html +1 -1
- package/dist/studio/routes/index.js +2 -0
- package/dist/studio/routes/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/eval-ui/assets/SkillDetailPanel-C_LuX-d1.js +0 -1
- package/dist/eval-ui/assets/index-BCpoveAO.js +0 -122
package/dist/eval-ui/index.html
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
}
|
|
47
47
|
})();
|
|
48
48
|
</script>
|
|
49
|
-
<script type="module" crossorigin src="/assets/index-
|
|
49
|
+
<script type="module" crossorigin src="/assets/index-BQc3jDn2.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;
|
|
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 +0,0 @@
|
|
|
1
|
-
import{j as e,r as l,T as q}from"./index-BCpoveAO.js";import{s as R}from"./skill-url-C4ekwoGs.js";/* empty css */const z={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 G({tier:r}){const o=z[r]??z.T1;return e.jsxs("span",{"data-testid":"trust-badge","data-tier":r,style:{display:"inline-flex",alignItems:"center",gap:"0.3rem",padding:"0.15rem 0.5rem",borderRadius:"4px",fontFamily:"var(--font-geist-mono)",fontSize:"0.6875rem",fontWeight:600,letterSpacing:"0.03em",textTransform:"uppercase",whiteSpace:"nowrap",color:o.cssVar,backgroundColor:`color-mix(in srgb, ${o.cssVar} 10%, transparent)`,border:`1px solid color-mix(in srgb, ${o.cssVar} 25%, transparent)`,lineHeight:1,height:"22px"},children:[r," ",o.label]})}const Z=/^https?:\/\/github\.com\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+?)(\.git)?(\/.*)?$/;function X(r){var p,y;const s=r.trim().match(Z);if(!s)return null;const c=(p=s[1])==null?void 0:p.toLowerCase();let n=(y=s[2])==null?void 0:y.toLowerCase();if(!c||!n)return null;n=n.replace(/\.git$/,"");const u=`https://github.com/${c}/${n}`;return{owner:c,name:n,url:u}}function Y({repoUrl:r,mono:o="var(--font-geist-mono)",fontSize:s="0.75rem",showPlaceholder:c=!0}){if(!r)return c?e.jsx("span",{style:{color:"var(--text-faint)",fontSize:s},children:"--"}):null;const n=X(r);return n?e.jsxs("a",{"data-testid":"repo-link",href:n.url,target:"_blank",rel:"noopener noreferrer",onClick:u=>u.stopPropagation(),style:{color:"#0D9488",textDecoration:"none",fontSize:s,fontFamily:o},children:[n.owner,"/",n.name]}):e.jsx("span",{style:{color:"var(--text-faint)",fontSize:s,fontFamily:o},children:r})}const J="var(--font-geist-mono)",Q={ONLINE:"var(--status-success-text)",OFFLINE:"var(--status-danger-text)",STALE:"var(--status-neutral-text)"},ee={ONLINE:"var(--status-success-bg)",OFFLINE:"var(--status-danger-bg)",STALE:"var(--status-neutral-bg)"};function te({skillName:r,repoUrl:o}){const[s,c]=l.useState(null),[n,u]=l.useState(!1);if(l.useEffect(()=>{o&&(u(!0),fetch(R(r,"repo-health")).then(x=>{if(!x.ok)throw new Error("fetch failed");return x.json()}).then(x=>{c(x.status),u(!1)}).catch(()=>{c(null),u(!1)}))},[r,o]),!o)return null;if(n)return e.jsx("span",{"data-testid":"repo-health-loading",style:{display:"inline-block",width:56,height:20,borderRadius:"4px",backgroundColor:"color-mix(in srgb, var(--text-faint) 20%, transparent)",animation:"pulse 1.5s ease-in-out infinite"}});if(!s||s==="UNKNOWN")return null;const p=Q[s]??"var(--status-neutral-text)",y=ee[s]??"var(--status-neutral-bg)";return e.jsx("span",{"data-testid":"repo-health-badge",style:{fontFamily:J,fontSize:"0.75rem",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.03em",padding:"0.2rem 0.6rem",borderRadius:"999px",backgroundColor:y,color:p,whiteSpace:"nowrap"},children:s})}function re({children:r,compact:o}){return e.jsx("pre",{"data-testid":"terminal-block",style:{background:"var(--bg-code, #161B22)",color:"#E6EDF3",fontFamily:"var(--font-geist-mono)",fontSize:o?"0.8rem":"0.875rem",lineHeight:1.6,padding:o?"1rem 1.25rem":"1.5rem 2rem",borderRadius:"6px",overflowX:"auto",margin:0},children:r})}const ne="/api/v1/studio/telemetry/install-copy",oe=/^[a-zA-Z0-9._@/-]+$/,se=/^[a-zA-Z0-9._-]+$/,ae="https://verified-skill.com";function ie(r){return`${r.owner}/${r.repo}/${r.slug}`}function le(r,o){return r!=null&&r.ownerSlug&&(r!=null&&r.repoSlug)?`${r.ownerSlug}/${r.repoSlug}`:r!=null&&r.publisher?r.publisher:`${o.owner}/${o.repo}`}function ce(r){return r==="global"?" --global":` --scope ${r}`}function de(r,o,s,c){const n=s?`${r}/${o}@${s}`:`${r}/${o}`;if(!oe.test(`${r}/${o}`))return{ok:!1,reason:"Invalid skill identifier"};if(s&&!se.test(s))return{ok:!1,reason:"Invalid version identifier"};const u=ce(c),p=`npx vskill@latest install ${n}${u}`,y=[{label:"npm",comment:"# npm",command:p},{label:"bun",comment:"# bun",command:`bunx vskill@latest install ${n}${u}`},{label:"pnpm",comment:"# pnpm",command:`pnpx vskill@latest install ${n}${u}`},{label:"yarn",comment:"# yarn",command:`yarn dlx vskill@latest install ${n}${u}`},{label:"alternative",comment:"# alternative (publisher + --skill flag)",command:s?`npx vskill@latest install ${r}@${s} --skill ${o}${u}`:`npx vskill@latest install ${r} --skill ${o}${u}`}];return{ok:!0,command:p,variants:y}}function N(r,o,s){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:r,kind:o,durationMs:s,severity:o==="error"?"error":"info"}}))}async function _(r){var o;if(typeof navigator<"u"&&((o=navigator.clipboard)!=null&&o.writeText))try{return await navigator.clipboard.writeText(r),!0}catch{}if(typeof document>"u")return!1;try{const s=document.createElement("textarea");s.value=r,s.setAttribute("readonly",""),s.style.position="fixed",s.style.left="-9999px",document.body.appendChild(s),s.select();const c=document.execCommand("copy");return document.body.removeChild(s),c}catch{return!1}}function V(r,o){try{fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),keepalive:!0}).catch(()=>{})}catch{}}function fe({selectedSkill:r,onClose:o,telemetryInstallCopyUrl:s=ne,onToast:c}){const[n,u]=l.useState(null),[p,y]=l.useState([]),[x,j]=l.useState(!0),[S,A]=l.useState(null),[g,C]=l.useState(null),[w,O]=l.useState("project"),[P,U]=l.useState(0),I=l.useRef(null),D=l.useRef(null),B=l.useRef(null),h=ie(r);l.useEffect(()=>(B.current=document.activeElement??null,()=>{const t=B.current;if(t&&typeof t.focus=="function")try{t.focus()}catch{}}),[]),l.useEffect(()=>{const t=setTimeout(()=>{var a;return(a=D.current)==null?void 0:a.focus()},50);return()=>clearTimeout(t)},[]),l.useEffect(()=>{let t=!1;j(!0),A(null);const a=R(h),d=R(h,"versions");return Promise.all([fetch(a).then(async i=>{if(!i.ok)throw new Error(`metadata ${i.status}`);return i.json()}),fetch(d).then(async i=>{if(!i.ok)throw new Error(`versions ${i.status}`);const m=await i.json();return Array.isArray(m)?m:(m==null?void 0:m.versions)??[]})]).then(([i,m])=>{if(t)return;u(i),y(m);const v=m.find(E=>E.isLatest)??m[0]??null;C(v?v.version:null),j(!1)}).catch(i=>{t||(A(i instanceof Error?i.message:String(i)),j(!1))}),()=>{t=!0}},[h,P]),l.useEffect(()=>{function t(a){if(a.key==="Escape")a.stopPropagation(),F();else if(a.key==="Tab"){const d=I.current;if(!d)return;const i=d.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])');if(i.length===0)return;const m=i[0],v=i[i.length-1],E=document.activeElement;a.shiftKey&&E===m?(a.preventDefault(),v.focus()):!a.shiftKey&&E===v&&(a.preventDefault(),m.focus())}}return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[]);const F=l.useCallback(()=>{o();let t="";try{typeof window<"u"&&window.sessionStorage&&(t=window.sessionStorage.getItem("find-skills:last-query")??"")}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("openFindSkills",{detail:{query:t}}))},[o]),T=le(n,r),k=(n==null?void 0:n.skillSlug)??r.slug,L=(n==null?void 0:n.displayName)??r.displayName??k,W=(n==null?void 0:n.isBlocked)===!0,b=l.useMemo(()=>p.length===0?[]:[...p].sort((a,d)=>{const i=a.publishedAt?Date.parse(a.publishedAt):0;return(d.publishedAt?Date.parse(d.publishedAt):0)-i}).slice(0,5),[p]),$=l.useMemo(()=>!g||b.length===0?!0:b[0].version===g,[g,b]),f=l.useMemo(()=>g?de(T,k,$?null:g,w):null,[T,k,g,$,w]),M=l.useCallback(async()=>{if(!f||!f.ok)return;const t=await _(f.command);V(s,{skillName:h,version:g??"",q:"",ts:Date.now()});const a=t?`Run ${f.command} in your terminal`:"Copy failed — please copy the command manually.";if(c)try{c(a,t?"success":"error")}catch{}else N(a,t?"success":"error",3500)},[f,s,h,g,T,k,$,c]),H=(n==null?void 0:n.trustTier)??"T1",K=(n==null?void 0:n.certTier)==="CERTIFIED"||(n==null?void 0:n.certTier)==="VERIFIED"?n.certTier:"VERIFIED";return e.jsxs("div",{ref:I,"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:t=>{t.target===t.currentTarget&&F()},children:[e.jsx("div",{style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",backdropFilter:"blur(4px)"}}),e.jsxs("div",{onClick:t=>t.stopPropagation(),style:{position:"relative",width:"100%",maxWidth:720,margin:"0 1rem",background:"var(--bg-surface, #FFFFFF)",color:"var(--text-primary, #191919)",borderRadius:"8px",border:"1px solid var(--color-rule, #E8E1D6)",boxShadow:"0 20px 60px rgba(0,0,0,0.15)",overflow:"hidden",maxHeight:"80vh",display:"flex",flexDirection:"column"},children:[e.jsxs("div",{style:{padding:"0.75rem 1rem",borderBottom:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"space-between",flexShrink:0},children:[e.jsx("button",{ref:D,type:"button",onClick:F,"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:[x&&e.jsx("div",{"data-testid":"skill-detail-loading",style:{padding:"2rem",textAlign:"center",color:"var(--text-secondary, #5A5651)"},children:"Loading…"}),S&&!x&&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:()=>U(t=>t+1),style:{fontFamily:"var(--font-mono, monospace)",fontSize:"0.8125rem",padding:"0.4rem 1rem",borderRadius:4,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-primary, #191919)",cursor:"pointer"},children:"Retry"})]}),!x&&!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}),(n==null?void 0:n.description)&&e.jsx("p",{style:{margin:"0 0 0.75rem",color:"var(--text-secondary, #5A5651)",fontSize:"0.875rem",lineHeight:1.5},children:n.description}),e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem",alignItems:"center"},children:[e.jsx(G,{tier:H}),e.jsx(q,{tier:K,isTainted:n==null?void 0:n.isTainted}),e.jsx(Y,{repoUrl:(n==null?void 0:n.repoUrl)??null}),e.jsx(te,{skillName:h,repoUrl:n==null?void 0:n.repoUrl})]})]}),e.jsxs("section",{"data-testid":"skill-detail-versions",style:{marginBottom:"1.25rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-secondary, #5A5651)"},children:"Versions"}),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(t=>{const a=t.version===g,d=t.publishedAt?t.publishedAt.slice(0,10):"",i=t.authorEmail??t.author??"";return e.jsx("li",{children:e.jsxs("button",{type:"button","data-testid":"skill-detail-version-row","data-version":t.version,"data-selected":a?"true":"false","aria-pressed":a,onClick:()=>C(t.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",t.version]}),d&&e.jsxs("span",{style:{color:"var(--text-secondary, #5A5651)"},children:["· ",d]}),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"})]})},t.version)})}),e.jsx("div",{style:{marginTop:"0.5rem",textAlign:"right"},children:e.jsx("a",{"data-testid":"skill-detail-see-all-versions",href:`${ae}/skills/${r.owner}/${r.repo}/${r.slug}/versions`,target:"_blank",rel:"noopener noreferrer",style:{fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",color:"var(--color-action, #2F5B8E)",textDecoration:"none"},children:"see all versions →"})})]}),W?e.jsxs("section",{"data-testid":"skill-detail-blocked",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--red, #b54444)"},children:"This skill is blocked"}),e.jsx("div",{style:{padding:"1rem",borderRadius:6,border:"1px solid var(--red, #b54444)",background:"var(--red-muted, color-mix(in srgb, #b54444 18%, transparent))",color:"var(--red, #b54444)",fontSize:"0.875rem"},children:(n==null?void 0:n.blockReason)??"This skill has been blocked by platform moderators and cannot be installed."})]}):f&&!f.ok?e.jsxs("section",{"data-testid":"skill-detail-install-error",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--red, #b54444)"},children:"Install command unavailable"}),e.jsxs("div",{style:{padding:"1rem",borderRadius:6,border:"1px solid var(--red, #b54444)",background:"var(--red-muted, color-mix(in srgb, #b54444 18%, transparent))",color:"var(--red, #b54444)",fontSize:"0.875rem"},children:[f.reason," — refusing to render the install panel for safety."]})]}):f&&f.ok?e.jsxs("section",{"data-testid":"skill-detail-install",style:{marginBottom:"0.5rem"},children:[e.jsx("h3",{style:{margin:"0 0 0.5rem",fontSize:"0.8125rem",textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-secondary, #5A5651)"},children:"Install"}),e.jsxs("div",{role:"radiogroup","aria-label":"Install scope","data-testid":"skill-detail-install-scope",style:{display:"flex",gap:"0.5rem",alignItems:"center",marginBottom:"0.75rem",fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",color:"var(--text-secondary, #5A5651)"},children:[e.jsx("span",{children:"Scope:"}),["project","user","global"].map(t=>{const a=w===t,d=t==="project"?"Per-repo .claude/ — only this project":t==="user"?"~/.claude/ — every project on this account":"System agent dirs — every agent on this machine",i=t==="global"?"Global":t==="user"?"User":"Project";return e.jsx("button",{type:"button",role:"radio","aria-checked":a,"data-testid":`skill-detail-install-scope-${t}`,title:d,onClick:()=>O(t),style:{padding:"0.25rem 0.6rem",borderRadius:4,border:`1px solid ${a?"var(--text-primary, #191919)":"var(--color-rule, #E8E1D6)"}`,background:a?"var(--text-primary, #191919)":"transparent",color:a?"var(--bg-surface, #FFFFFF)":"var(--text-secondary, #5A5651)",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.75rem",fontWeight:a?600:400},children:i},t)})]}),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(re,{compact:!0,children:f.variants.map((t,a)=>e.jsxs("div",{"data-testid":`skill-detail-install-variant-${t.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:t.comment}),e.jsxs("div",{children:[e.jsx("span",{style:{color:"#8B949E",marginRight:"0.5rem"},children:"$"}),e.jsx("span",{"data-testid":`skill-detail-install-variant-cmd-${t.label}`,children:t.command})]})]}),e.jsx("button",{type:"button",onClick:async()=>{const d=await _(t.command),i=d?`Run ${t.command} in your terminal`:"Copy failed — please copy the command manually.";if(c)try{c(i,d?"success":"error")}catch{}else N(i,d?"success":"error",3500);d&&V(s,{skillName:h,version:g??"",q:"",ts:Date.now()})},"data-testid":`skill-detail-copy-${t.label}`,"aria-label":`Copy ${t.label} install command`,style:{flexShrink:0,padding:"0.25rem 0.6rem",borderRadius:4,border:"1px solid color-mix(in srgb, #E6EDF3 25%, transparent)",background:"color-mix(in srgb, #E6EDF3 8%, transparent)",color:"#E6EDF3",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"0.7rem",alignSelf:"flex-end"},children:"Copy"})]},t.label))})})]}):null]})]})]})]})}export{fe as SkillDetailPanel,fe as default};
|