vskill 1.2.4 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +51 -3
  2. package/agents.json +6 -1
  3. package/dist/agents/agents-registry.d.ts +43 -16
  4. package/dist/agents/agents-registry.js +119 -33
  5. package/dist/agents/agents-registry.js.map +1 -1
  6. package/dist/agents/global-dirs.d.ts +19 -0
  7. package/dist/agents/global-dirs.js +53 -0
  8. package/dist/agents/global-dirs.js.map +1 -0
  9. package/dist/audit/fix-suggestions.js +6 -0
  10. package/dist/audit/fix-suggestions.js.map +1 -1
  11. package/dist/commands/add-github-bundle.d.ts +29 -0
  12. package/dist/commands/add-github-bundle.js +135 -0
  13. package/dist/commands/add-github-bundle.js.map +1 -0
  14. package/dist/commands/add-lockfile.d.ts +2 -0
  15. package/dist/commands/add-lockfile.js +1 -1
  16. package/dist/commands/add-lockfile.js.map +1 -1
  17. package/dist/commands/add.d.ts +5 -7
  18. package/dist/commands/add.js +207 -111
  19. package/dist/commands/add.js.map +1 -1
  20. package/dist/commands/audit-webmcp.d.ts +25 -0
  21. package/dist/commands/audit-webmcp.js +167 -0
  22. package/dist/commands/audit-webmcp.js.map +1 -0
  23. package/dist/commands/doctor.d.ts +69 -0
  24. package/dist/commands/doctor.js +760 -0
  25. package/dist/commands/doctor.js.map +1 -0
  26. package/dist/commands/remove.js +43 -8
  27. package/dist/commands/remove.js.map +1 -1
  28. package/dist/commands/scan.js +1 -1
  29. package/dist/commands/scan.js.map +1 -1
  30. package/dist/commands/update.js +12 -4
  31. package/dist/commands/update.js.map +1 -1
  32. package/dist/discovery/github-skill-bundle.d.ts +74 -0
  33. package/dist/discovery/github-skill-bundle.js +323 -0
  34. package/dist/discovery/github-skill-bundle.js.map +1 -0
  35. package/dist/eval/skill-scanner.js +7 -1
  36. package/dist/eval/skill-scanner.js.map +1 -1
  37. package/dist/eval-server/install-skill-routes.js +10 -3
  38. package/dist/eval-server/install-skill-routes.js.map +1 -1
  39. package/dist/eval-server/remove-skill-routes.js +262 -29
  40. package/dist/eval-server/remove-skill-routes.js.map +1 -1
  41. package/dist/eval-server/studio-privacy.js +2 -3
  42. package/dist/eval-server/studio-privacy.js.map +1 -1
  43. package/dist/eval-server/utils/scan-install-locations.js +22 -3
  44. package/dist/eval-server/utils/scan-install-locations.js.map +1 -1
  45. package/dist/eval-ui/assets/{CreateSkillPage-BUrgworx.js → CreateSkillPage-CXDd6gDN.js} +1 -1
  46. package/dist/eval-ui/assets/{FindSkillsPalette-BstJ22TI.js → FindSkillsPalette-DQ6uGhFP.js} +2 -2
  47. package/dist/eval-ui/assets/{SearchPaletteCore-Dagnc-E7.js → SearchPaletteCore-DpHCf0mf.js} +1 -1
  48. package/dist/eval-ui/assets/{SkillDetailPanel-DnujVk6g.js → SkillDetailPanel-BjHFjGxg.js} +1 -1
  49. package/dist/eval-ui/assets/{UpdateDropdown-B7D2vXrm.js → UpdateDropdown-Cn4Vsq5d.js} +1 -1
  50. package/dist/eval-ui/assets/main-BmB7Zj9I.js +86 -0
  51. package/dist/eval-ui/index.html +1 -1
  52. package/dist/index.js +34 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/installer/bundle-files.d.ts +39 -2
  55. package/dist/installer/bundle-files.js +80 -10
  56. package/dist/installer/bundle-files.js.map +1 -1
  57. package/dist/installer/canonical.d.ts +39 -4
  58. package/dist/installer/canonical.js +178 -24
  59. package/dist/installer/canonical.js.map +1 -1
  60. package/dist/installer/multi-install.d.ts +11 -2
  61. package/dist/installer/multi-install.js +41 -9
  62. package/dist/installer/multi-install.js.map +1 -1
  63. package/dist/installer/transformers/index.d.ts +8 -0
  64. package/dist/installer/yaml-safe-mutate.js +48 -2
  65. package/dist/installer/yaml-safe-mutate.js.map +1 -1
  66. package/dist/lib/github-fetch.js +2 -0
  67. package/dist/lib/github-fetch.js.map +1 -1
  68. package/dist/lib/private-source.d.ts +8 -0
  69. package/dist/lib/private-source.js +16 -2
  70. package/dist/lib/private-source.js.map +1 -1
  71. package/dist/scanner/hidden-content.d.ts +47 -0
  72. package/dist/scanner/hidden-content.js +904 -0
  73. package/dist/scanner/hidden-content.js.map +1 -0
  74. package/dist/scanner/installer-hosts.d.ts +26 -0
  75. package/dist/scanner/installer-hosts.js +92 -0
  76. package/dist/scanner/installer-hosts.js.map +1 -0
  77. package/dist/scanner/judge-guard.d.ts +119 -0
  78. package/dist/scanner/judge-guard.js +481 -0
  79. package/dist/scanner/judge-guard.js.map +1 -0
  80. package/dist/scanner/patterns.d.ts +12 -0
  81. package/dist/scanner/patterns.js +353 -113
  82. package/dist/scanner/patterns.js.map +1 -1
  83. package/dist/scanner/repo-scanner.d.ts +4 -0
  84. package/dist/scanner/repo-scanner.js +4 -1
  85. package/dist/scanner/repo-scanner.js.map +1 -1
  86. package/dist/scanner/tier1.js +37 -7
  87. package/dist/scanner/tier1.js.map +1 -1
  88. package/dist/scanner/tier2-llm.d.ts +22 -4
  89. package/dist/scanner/tier2-llm.js +163 -23
  90. package/dist/scanner/tier2-llm.js.map +1 -1
  91. package/dist/scanner/types.d.ts +8 -0
  92. package/dist/webmcp/args.d.ts +34 -0
  93. package/dist/webmcp/args.js +87 -0
  94. package/dist/webmcp/args.js.map +1 -0
  95. package/dist/webmcp/attribution.d.ts +38 -0
  96. package/dist/webmcp/attribution.js +141 -0
  97. package/dist/webmcp/attribution.js.map +1 -0
  98. package/dist/webmcp/enumerate.d.ts +81 -0
  99. package/dist/webmcp/enumerate.js +436 -0
  100. package/dist/webmcp/enumerate.js.map +1 -0
  101. package/dist/webmcp/format.d.ts +9 -0
  102. package/dist/webmcp/format.js +105 -0
  103. package/dist/webmcp/format.js.map +1 -0
  104. package/dist/webmcp/merge.d.ts +49 -0
  105. package/dist/webmcp/merge.js +167 -0
  106. package/dist/webmcp/merge.js.map +1 -0
  107. package/dist/webmcp/score.d.ts +70 -0
  108. package/dist/webmcp/score.js +586 -0
  109. package/dist/webmcp/score.js.map +1 -0
  110. package/dist/webmcp/types.d.ts +92 -0
  111. package/dist/webmcp/types.js +8 -0
  112. package/dist/webmcp/types.js.map +1 -0
  113. package/package.json +1 -1
  114. package/dist/eval-ui/assets/main-DjA5gpjV.js +0 -86
@@ -0,0 +1,86 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DlQYQHDO.js","assets/core-DZjBCfjp.js","assets/UpdateDropdown-Cn4Vsq5d.js","assets/globals-DmzftdEG.js","assets/globals-BWCNQsMa.css","assets/useDesktopBridge-Cm4zPght.js","assets/fonts-i7Lkz2zN.css","assets/index-DDNzcrhv.js","assets/FindSkillsPalette-DQ6uGhFP.js","assets/SkillDetailPanel-BjHFjGxg.js","assets/skill-url-C4ekwoGs.js","assets/CreateSkillPage-CXDd6gDN.js"])))=>i.map(i=>d[i]);
2
+ import{r as c,a as Vu,g as Gu,j as t,R as ge,c as Ku}from"./globals-DmzftdEG.js";import{h as qu,o as Xn,_ as ar,u as xn,n as Ba,l as Tn}from"./useDesktopBridge-Cm4zPght.js";/* empty css *//**
3
+ * react-router v7.18.4
4
+ *
5
+ * Copyright (c) Remix Software Inc.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE.md file in the root directory of this source tree.
9
+ *
10
+ * @license MIT
11
+ */var Zo=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,Ol=/^[\\/]{2}/;function Yu(e,r){return r+e.replace(/\\/g,"/")}var _a="popstate";function Oa(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function Ju(e={}){function r(o,a){let{pathname:i="/",search:l="",hash:d=""}=Dr(o.location.hash.substring(1));return!i.startsWith("/")&&!i.startsWith(".")&&(i="/"+i),Co("",{pathname:i,search:l,hash:d},a.state&&a.state.usr||null,a.state&&a.state.key||"default")}function n(o,a){let i=o.document.querySelector("base"),l="";if(i&&i.getAttribute("href")){let d=o.location.href,u=d.indexOf("#");l=u===-1?d:d.slice(0,u)}return l+"#"+(typeof a=="string"?a:Pr(a))}function s(o,a){Dt(o.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(a)})`)}return Xu(r,n,s,e)}function ot(e,r){if(e===!1||e===null||typeof e>"u")throw new Error(r)}function Dt(e,r){if(!e){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function Qu(){return Math.random().toString(36).substring(2,10)}function Wa(e,r){return{usr:e.state,key:e.key,idx:r,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Co(e,r,n=null,s,o){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof r=="string"?Dr(r):r,state:n,key:r&&r.key||s||Qu(),mask:o}}function Pr({pathname:e="/",search:r="",hash:n=""}){return r&&r!=="?"&&(e+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function Dr(e){let r={};if(e){let n=e.indexOf("#");n>=0&&(r.hash=e.substring(n),e=e.substring(0,n));let s=e.indexOf("?");s>=0&&(r.search=e.substring(s),e=e.substring(0,s)),e&&(r.pathname=e)}return r}function Xu(e,r,n,s={}){let{window:o=document.defaultView,v5Compat:a=!1}=s,i=o.history,l="POP",d=null,u=p();u==null&&(u=0,i.replaceState({...i.state,idx:u},""));function p(){return(i.state||{idx:null}).idx}function f(){l="POP";let g=p(),b=g==null?null:g-u;u=g,d&&d({action:l,location:x.location,delta:b})}function h(g,b){l="PUSH";let y=Oa(g)?g:Co(x.location,g,b);n&&n(y,g),u=p()+1;let j=Wa(y,u),S=x.createHref(y.mask||y);try{i.pushState(j,"",S)}catch(k){if(k instanceof DOMException&&k.name==="DataCloneError")throw k;o.location.assign(S)}a&&d&&d({action:l,location:x.location,delta:1})}function m(g,b){l="REPLACE";let y=Oa(g)?g:Co(x.location,g,b);n&&n(y,g),u=p();let j=Wa(y,u),S=x.createHref(y.mask||y);i.replaceState(j,"",S),a&&d&&d({action:l,location:x.location,delta:0})}function v(g){return Zu(o,g)}let x={get action(){return l},get location(){return e(o,i)},listen(g){if(d)throw new Error("A history only accepts one active listener");return o.addEventListener(_a,f),d=g,()=>{o.removeEventListener(_a,f),d=null}},createHref(g){return r(o,g)},createURL:v,encodeLocation(g){let b=v(g);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:h,replace:m,go(g){return i.go(g)}};return x}function Zu(e,r,n=!1){let s="http://localhost";e&&(s=e.location.origin!=="null"?e.location.origin:e.location.href),ot(s,"No window.location.(origin|href) available to create URL");let o=typeof r=="string"?r:Pr(r);return o=o.replace(/ $/,"%20"),!n&&Ol.test(o)&&(o=s+o),new URL(o,s)}function Wl(e,r,n="/"){return ep(e,r,n,!1)}function ep(e,r,n,s,o){let a=typeof r=="string"?Dr(r):r,i=qt(a.pathname||"/",n);if(i==null)return null;let l=tp(e),d=null,u=pp(i);for(let p=0;d==null&&p<l.length;++p)d=up(l[p],u,s);return d}function tp(e){let r=Ul(e);return rp(r),r}function Ul(e,r=[],n=[],s="",o=!1){let a=(i,l,d=o,u)=>{let p={relativePath:u===void 0?i.path||"":u,caseSensitive:i.caseSensitive===!0,childrenIndex:l,route:i};if(p.relativePath.startsWith("/")){if(!p.relativePath.startsWith(s)&&d)return;ot(p.relativePath.startsWith(s),`Absolute route path "${p.relativePath}" nested under path "${s}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),p.relativePath=p.relativePath.slice(s.length)}let f=Mt([s,p.relativePath]),h=n.concat(p);i.children&&i.children.length>0&&(ot(i.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${f}".`),Ul(i.children,r,h,f,d)),!(i.path==null&&!i.index)&&r.push({path:f,score:cp(f,i.index),routesMeta:h.map((m,v)=>{let[x,g]=Gl(m.relativePath,m.caseSensitive,v===h.length-1);return{...m,matcher:x,compiledParams:g}})})};return e.forEach((i,l)=>{var d;if(i.path===""||!((d=i.path)!=null&&d.includes("?")))a(i,l);else for(let u of Hl(i.path))a(i,l,!0,u)}),r}function Hl(e){let r=e.split("/");if(r.length===0)return[];let[n,...s]=r,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(s.length===0)return o?[a,""]:[a];let i=Hl(s.join("/")),l=[];return l.push(...i.map(d=>d===""?a:[a,d].join("/"))),o&&l.push(...i),l.map(d=>e.startsWith("/")&&d===""?"/":d)}function rp(e){e.sort((r,n)=>r.score!==n.score?n.score-r.score:dp(r.routesMeta.map(s=>s.childrenIndex),n.routesMeta.map(s=>s.childrenIndex)))}var np=/^:[\w-]+$/,sp=3,op=2,ap=1,ip=10,lp=-2,Ua=e=>e==="*";function cp(e,r){let n=e.split("/"),s=n.length;return n.some(Ua)&&(s+=lp),r&&(s+=op),n.filter(o=>!Ua(o)).reduce((o,a)=>o+(np.test(a)?sp:a===""?ap:ip),s)}function dp(e,r){return e.length===r.length&&e.slice(0,-1).every((s,o)=>s===r[o])?e[e.length-1]-r[r.length-1]:0}function up(e,r,n=!1){let{routesMeta:s}=e,o={},a="/",i=[];for(let l=0;l<s.length;++l){let d=s[l],u=l===s.length-1,p=a==="/"?r:r.slice(a.length)||"/",f={path:d.relativePath,caseSensitive:d.caseSensitive,end:u},h=d.matcher&&d.compiledParams?Vl(f,p,d.matcher,d.compiledParams):Zn(f,p),m=d.route;if(!h&&u&&n&&!s[s.length-1].route.index&&(h=Zn({path:d.relativePath,caseSensitive:d.caseSensitive,end:!1},p)),!h)return null;Object.assign(o,h.params),i.push({params:o,pathname:Mt([a,h.pathname]),pathnameBase:mp(Mt([a,h.pathnameBase])),route:m}),h.pathnameBase!=="/"&&(a=Mt([a,h.pathnameBase]))}return i}function Zn(e,r){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[n,s]=Gl(e.path,e.caseSensitive,e.end);return Vl(e,r,n,s)}function Vl(e,r,n,s){let o=r.match(n);if(!o)return null;let a=o[0],i=$r(a,1),l=o.slice(1);return{params:s.reduce((u,{paramName:p,isOptional:f},h)=>{if(p==="*"){let v=l[h]||"";i=$r(a.slice(0,a.length-v.length),1)}const m=l[h];return f&&!m?u[p]=void 0:u[p]=(m||"").replace(/%2F/g,"/"),u},{}),pathname:a,pathnameBase:i,pattern:e}}function Gl(e,r=!1,n=!0){Dt(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let s=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,l,d,u,p)=>{if(s.push({paramName:l,isOptional:d!=null}),d){let f=p.charAt(u+i.length);return f&&f!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(s.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,r?void 0:"i"),s]}function pp(e){try{return e.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return Dt(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),e}}function qt(e,r){if(r==="/")return e;if(!e.toLowerCase().startsWith(r.toLowerCase()))return null;let n=r.endsWith("/")?r.length-1:r.length,s=e.charAt(n);return s&&s!=="/"?null:e.slice(n)||"/"}function fp(e,r="/"){let{pathname:n,search:s="",hash:o=""}=typeof e=="string"?Dr(e):e,a;return n?(n=ql(n),n.startsWith("/")||n.startsWith("\\")?a=Ha(n.substring(1),"/"):a=Ha(n,r)):a=r,{pathname:a,search:xp(s),hash:gp(o)}}function Ha(e,r){let n=$r(r).split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function ws(e,r,n,s){return`Cannot include a '${e}' character in a manually specified \`to.${r}\` field [${JSON.stringify(s)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function hp(e){return e.filter((r,n)=>n===0||r.route.path&&r.route.path.length>0)}function Kl(e){let r=hp(e);return r.map((n,s)=>s===r.length-1?n.pathname:n.pathnameBase)}function ea(e,r,n,s=!1){let o;typeof e=="string"?o=Dr(e):(o={...e},ot(!o.pathname||!o.pathname.includes("?"),ws("?","pathname","search",o)),ot(!o.pathname||!o.pathname.includes("#"),ws("#","pathname","hash",o)),ot(!o.search||!o.search.includes("#"),ws("#","search","hash",o)));let a=e===""||o.pathname==="",i=a?"/":o.pathname,l;if(i==null)l=n;else{let f=r.length-1;if(!s&&i.startsWith("..")){let h=i.split("/");for(;h[0]==="..";)h.shift(),f-=1;o.pathname=h.join("/")}l=f>=0?r[f]:"/"}let d=fp(o,l),u=i&&i!=="/"&&i.endsWith("/"),p=(a||i===".")&&n.endsWith("/");return!d.pathname.endsWith("/")&&(u||p)&&(d.pathname+="/"),d}var ql=e=>e.replace(/[\\/]{2,}/g,"/"),Mt=e=>ql(e.join("/"));function $r(e,r=0){let n=e.length;for(;n>r&&e.charCodeAt(n-1)===47;)n--;return n===e.length?e:e.slice(0,n)}var mp=e=>$r(e).replace(/^\/*/,"/"),xp=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,gp=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,vp=class{constructor(e,r,n,s=!1){this.status=e,this.statusText=r||"",this.internal=s,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function yp(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function bp(e){let r=e.map(n=>n.route.path).filter(Boolean);return Mt(r)||"/"}var Yl=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Jl(e,r){let n=e;if(typeof n!="string"||!Zo.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let s=n,o=!1;if(Yl)try{let a=new URL(window.location.href),i=Ol.test(n)?new URL(Yu(n,a.protocol)):new URL(n),l=qt(i.pathname,r);i.origin===a.origin&&l!=null?n=l+i.search+i.hash:o=!0}catch{Dt(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:s,isExternal:o,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Va=new URL("http://localhost");function Ql(e){if(e.createURL)return e.createURL("/");try{return new URL(e.createHref("/"),Va)}catch{return Va}}function Ss(e,r){return e.origin===r.origin&&(e.origin!=="null"||e.protocol===r.protocol&&e.host===r.host)}function kp(e,r){if(e.startsWith("//"))return!0;let n=r.protocol.toLowerCase();return e.toLowerCase().startsWith(n)?r.host===""||e.slice(n.length).startsWith("//"):!1}function Xl(e,r,n,s){let o=null;try{o=e==null?null:new URL(e,n)}catch{}let a=new URL(r,n),i=o!=null&&!Ss(o,n),l=!Ss(a,n);if(s==="reject"){if(i||l)throw new Error("External navigation is not allowed")}else if(l&&(o==null||!kp(e,o)||!Ss(o,a)))throw new Error("External navigation is not allowed")}var Zl=["POST","PUT","PATCH","DELETE"];new Set(Zl);var jp=["GET",...Zl];new Set(jp);var wp=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function Sp(e){try{return wp.includes(new URL(e).protocol)}catch{return!1}}var zr=c.createContext(null);zr.displayName="DataRouter";var as=c.createContext(null);as.displayName="DataRouterState";var ec=c.createContext(!1);function Cp(){return c.useContext(ec)}var tc=c.createContext({isTransitioning:!1});tc.displayName="ViewTransition";var Ep=c.createContext(new Map);Ep.displayName="Fetchers";var Np=c.createContext(null);Np.displayName="Await";var It=c.createContext(null);It.displayName="Navigation";var is=c.createContext(null);is.displayName="Location";var Yt=c.createContext({outlet:null,matches:[],isDataRoute:!1});Yt.displayName="Route";var ta=c.createContext(null);ta.displayName="RouteError";var rc="REACT_ROUTER_ERROR",Rp="REDIRECT",Tp="ROUTE_ERROR_RESPONSE";function Ip(e){if(e.startsWith(`${rc}:${Rp}:{`))try{let r=JSON.parse(e.slice(28));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.location=="string"&&typeof r.reloadDocument=="boolean"&&typeof r.replace=="boolean")return r}catch{}}function Lp(e){if(e.startsWith(`${rc}:${Tp}:{`))try{let r=JSON.parse(e.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new vp(r.status,r.statusText,r.data)}catch{}}function Ap(e,{relative:r}={}){ot(gn(),"useHref() may be used only in the context of a <Router> component.");let{basename:n,navigator:s}=c.useContext(It),{hash:o,pathname:a,search:i}=vn(e,{relative:r}),l=a;return n!=="/"&&(l=a==="/"?n:Mt([n,a])),s.createHref({pathname:l,search:i,hash:o})}function gn(){return c.useContext(is)!=null}function Jt(){return ot(gn(),"useLocation() may be used only in the context of a <Router> component."),c.useContext(is).location}var nc="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function sc(e){c.useContext(It).static||c.useLayoutEffect(e)}function Pp(){let{isDataRoute:e}=c.useContext(Yt);return e?Gp():$p()}function $p(){ot(gn(),"useNavigate() may be used only in the context of a <Router> component.");let e=c.useContext(zr),{basename:r,navigator:n}=c.useContext(It),{matches:s}=c.useContext(Yt),{pathname:o}=Jt(),a=JSON.stringify(Kl(s)),i=c.useRef(!1);return sc(()=>{i.current=!0}),c.useCallback((d,u={})=>{if(Dt(i.current,nc),!i.current)return;if(typeof d=="number"){n.go(d);return}let p=ea(d,JSON.parse(a),o,u.relative==="path");e==null&&r!=="/"&&(p.pathname=p.pathname==="/"?r:Mt([r,p.pathname])),Xl(typeof d=="string"?d:Pr(d),n.createHref(p),Ql(n),"reject"),(u.replace?n.replace:n.push)(p,u.state,u)},[r,n,a,o,e])}c.createContext(null);function vn(e,{relative:r}={}){let{matches:n}=c.useContext(Yt),{pathname:s}=Jt(),o=JSON.stringify(Kl(n));return c.useMemo(()=>ea(e,JSON.parse(o),s,r==="path"),[e,o,s,r])}function Mp(e,r,n){ot(gn(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:s}=c.useContext(It),{matches:o}=c.useContext(Yt),a=o[o.length-1],i=a?a.params:{},l=a?a.pathname:"/",d=a?a.pathnameBase:"/",u=a&&a.route;{let g=u&&u.path||"";ac(l,!u||g.endsWith("*")||g.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${l}" (under <Route path="${g}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
12
+
13
+ Please change the parent <Route path="${g}"> to <Route path="${g==="/"?"*":`${g}/*`}">.`)}let p=Jt(),f;f=p;let h=f.pathname||"/",m=h;if(d!=="/"){let g=d.replace(/^\//,"").split("/");m="/"+h.replace(/^\//,"").split("/").slice(g.length).join("/")}let v=n&&n.state.matches.length?n.state.matches.map(g=>Object.assign(g,{route:n.manifest[g.route.id]||g.route})):Wl(e,{pathname:m});return Dt(u||v!=null,`No routes matched location "${f.pathname}${f.search}${f.hash}" `),Dt(v==null||v[v.length-1].route.element!==void 0||v[v.length-1].route.Component!==void 0||v[v.length-1].route.lazy!==void 0,`Matched leaf route at location "${f.pathname}${f.search}${f.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`),_p(v&&v.map(g=>Object.assign({},g,{params:Object.assign({},i,g.params),pathname:Mt([d,s.encodeLocation?s.encodeLocation(g.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:g.pathname]),pathnameBase:g.pathnameBase==="/"?d:Mt([d,s.encodeLocation?s.encodeLocation(g.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:g.pathnameBase])})),o,n)}function Fp(){let e=Vp(),r=yp(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,s="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:s},a={padding:"2px 4px",backgroundColor:s},i=null;return console.error("Error handled by React Router default ErrorBoundary:",e),i=c.createElement(c.Fragment,null,c.createElement("p",null,"💿 Hey developer 👋"),c.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",c.createElement("code",{style:a},"ErrorBoundary")," or"," ",c.createElement("code",{style:a},"errorElement")," prop on your route.")),c.createElement(c.Fragment,null,c.createElement("h2",null,"Unexpected Application Error!"),c.createElement("h3",{style:{fontStyle:"italic"}},r),n?c.createElement("pre",{style:o},n):null,i)}var Dp=c.createElement(Fp,null),oc=class extends c.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,r){return r.location!==e.location||r.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:r.error,location:r.location,revalidation:e.revalidation||r.revalidation}}componentDidCatch(e,r){this.props.onError?this.props.onError(e,r):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const n=Lp(e.digest);n&&(e=n)}let r=e!==void 0?c.createElement(Yt.Provider,{value:this.props.routeContext},c.createElement(ta.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?c.createElement(zp,{error:e},r):r}};oc.contextType=ec;var Cs=new WeakMap;function zp({children:e,error:r}){let{basename:n,navigator:s}=c.useContext(It);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let o=Ip(r.digest);if(o){let a=Cs.get(r);if(a)throw a;let i=Jl(o.location,n),l=i.absoluteURL||i.to;if(Xl(o.location,l,Ql(s),"allow-explicit"),Sp(l))throw new Error("Invalid redirect location");if(Yl&&!Cs.get(r))if(i.isExternal||o.reloadDocument)window.location.href=l;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:o.replace}));throw Cs.set(r,d),d}return c.createElement("meta",{httpEquiv:"refresh",content:`0;url=${l}`})}}return e}function Bp({routeContext:e,match:r,children:n}){let s=c.useContext(zr);return s&&s.static&&s.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(s.staticContext._deepestRenderedBoundaryId=r.route.id),c.createElement(Yt.Provider,{value:e},n)}function _p(e,r=[],n){let s=n==null?void 0:n.state;if(e==null){if(!s)return null;if(s.errors)e=s.matches;else if(r.length===0&&!s.initialized&&s.matches.length>0)e=s.matches;else return null}let o=e,a=s==null?void 0:s.errors;if(a!=null){let p=o.findIndex(f=>f.route.id&&(a==null?void 0:a[f.route.id])!==void 0);ot(p>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(",")}`),o=o.slice(0,Math.min(o.length,p+1))}let i=!1,l=-1;if(n&&s){i=s.renderFallback;for(let p=0;p<o.length;p++){let f=o[p];if((f.route.HydrateFallback||f.route.hydrateFallbackElement)&&(l=p),f.route.id){let{loaderData:h,errors:m}=s,v=f.route.loader&&!h.hasOwnProperty(f.route.id)&&(!m||m[f.route.id]===void 0);if(f.route.lazy||v){n.isStatic&&(i=!0),l>=0?o=o.slice(0,l+1):o=[o[0]];break}}}}let d=n==null?void 0:n.onError,u=s&&d?(p,f)=>{var h,m;d(p,{location:s.location,params:((m=(h=s.matches)==null?void 0:h[0])==null?void 0:m.params)??{},pattern:bp(s.matches),errorInfo:f})}:void 0;return o.reduceRight((p,f,h)=>{let m,v=!1,x=null,g=null;s&&(m=a&&f.route.id?a[f.route.id]:void 0,x=f.route.errorElement||Dp,i&&(l<0&&h===0?(ac("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),v=!0,g=null):l===h&&(v=!0,g=f.route.hydrateFallbackElement||null)));let b=r.concat(o.slice(0,h+1)),y=()=>{let j;return m?j=x:v?j=g:f.route.Component?j=c.createElement(f.route.Component,null):f.route.element?j=f.route.element:j=p,c.createElement(Bp,{match:f,routeContext:{outlet:p,matches:b,isDataRoute:s!=null},children:j})};return s&&(f.route.ErrorBoundary||f.route.errorElement||h===0)?c.createElement(oc,{location:s.location,revalidation:s.revalidation,component:x,error:m,children:y(),routeContext:{outlet:null,matches:b,isDataRoute:!0},onError:u}):y()},null)}function ra(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Op(e){let r=c.useContext(zr);return ot(r,ra(e)),r}function Wp(e){let r=c.useContext(as);return ot(r,ra(e)),r}function Up(e){let r=c.useContext(Yt);return ot(r,ra(e)),r}function na(e){let r=Up(e),n=r.matches[r.matches.length-1];return ot(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Hp(){return na("useRouteId")}function Vp(){var s;let e=c.useContext(ta),r=Wp("useRouteError"),n=na("useRouteError");return e!==void 0?e:(s=r.errors)==null?void 0:s[n]}function Gp(){let{router:e}=Op("useNavigate"),r=na("useNavigate"),n=c.useRef(!1);return sc(()=>{n.current=!0}),c.useCallback(async(o,a={})=>{Dt(n.current,nc),n.current&&(typeof o=="number"?await e.navigate(o):await e.navigate(o,{fromRouteId:r,...a}))},[e,r])}var Ga={};function ac(e,r,n){!r&&!Ga[e]&&(Ga[e]=!0,Dt(!1,n))}c.memo(Kp);function Kp({routes:e,manifest:r,future:n,state:s,isStatic:o,onError:a}){return Mp(e,void 0,{manifest:r,state:s,isStatic:o,onError:a})}function qp({basename:e="/",children:r=null,location:n,navigationType:s="POP",navigator:o,static:a=!1,useTransitions:i}){ot(!gn(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let l=e.replace(/^\/*/,"/"),d=c.useMemo(()=>({basename:l,navigator:o,static:a,useTransitions:i,future:{}}),[l,o,a,i]);typeof n=="string"&&(n=Dr(n));let{pathname:u="/",search:p="",hash:f="",state:h=null,key:m="default",mask:v}=n,x=c.useMemo(()=>{let g=qt(u,l);return g==null?null:{location:{pathname:g,search:p,hash:f,state:h,key:m,mask:v},navigationType:s}},[l,u,p,f,h,m,s,v]);return Dt(x!=null,`<Router basename="${l}"> is not able to match the URL "${u}${p}${f}" because it does not start with the basename, so the <Router> won't render anything.`),x==null?null:c.createElement(It.Provider,{value:d},c.createElement(is.Provider,{children:r,value:x}))}var Vn="get",Gn="application/x-www-form-urlencoded";function ls(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function Yp(e){return ls(e)&&e.tagName.toLowerCase()==="button"}function Jp(e){return ls(e)&&e.tagName.toLowerCase()==="form"}function Qp(e){return ls(e)&&e.tagName.toLowerCase()==="input"}function Xp(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Zp(e,r){return e.button===0&&(!r||r==="_self")&&!Xp(e)}var In=null;function ef(){if(In===null)try{new FormData(document.createElement("form"),0),In=!1}catch{In=!0}return In}var tf=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Es(e){return e!=null&&!tf.has(e)?(Dt(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Gn}"`),null):e}function rf(e,r){let n,s,o,a,i;if(Jp(e)){let l=e.getAttribute("action");s=l?qt(l,r):null,n=e.getAttribute("method")||Vn,o=Es(e.getAttribute("enctype"))||Gn,a=new FormData(e)}else if(Yp(e)||Qp(e)&&(e.type==="submit"||e.type==="image")){let l=e.form;if(l==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let d=e.getAttribute("formaction")||l.getAttribute("action");if(s=d?qt(d,r):null,n=e.getAttribute("formmethod")||l.getAttribute("method")||Vn,o=Es(e.getAttribute("formenctype"))||Es(l.getAttribute("enctype"))||Gn,a=new FormData(l,e),!ef()){let{name:u,type:p,value:f}=e;if(p==="image"){let h=u?`${u}.`:"";a.append(`${h}x`,"0"),a.append(`${h}y`,"0")}else u&&a.append(u,f)}}else{if(ls(e))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');n=Vn,s=null,o=Gn,i=e}return a&&o==="text/plain"&&(i=a,a=void 0),{action:s,method:n.toLowerCase(),encType:o,formData:a,body:i}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function sa(e,r){if(e===!1||e===null||typeof e>"u")throw new Error(r)}function ic(e,r,n,s){let o=typeof e=="string"?new URL(e,typeof window>"u"?"server://singlefetch/":window.location.origin):e;return n?o.pathname.endsWith("/")?o.pathname=`${o.pathname}_.${s}`:o.pathname=`${o.pathname}.${s}`:o.pathname==="/"?o.pathname=`_root.${s}`:r&&qt(o.pathname,r)==="/"?o.pathname=`${$r(r)}/_root.${s}`:o.pathname=`${$r(o.pathname)}.${s}`,o}async function nf(e,r){if(e.id in r)return r[e.id];try{let n=await import(e.module);return r[e.id]=n,n}catch(n){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(n),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function sf(e){return e==null?!1:e.href==null?e.rel==="preload"&&typeof e.imageSrcSet=="string"&&typeof e.imageSizes=="string":typeof e.rel=="string"&&typeof e.href=="string"}async function of(e,r,n){let s=await Promise.all(e.map(async o=>{let a=r.routes[o.route.id];if(a){let i=await nf(a,n);return i.links?i.links():[]}return[]}));return df(s.flat(1).filter(sf).filter(o=>o.rel==="stylesheet"||o.rel==="preload").map(o=>o.rel==="stylesheet"?{...o,rel:"prefetch",as:"style"}:{...o,rel:"prefetch"}))}function Ka(e,r,n,s,o,a){let i=(d,u)=>n[u]?d.route.id!==n[u].route.id:!0,l=(d,u)=>{var p;return n[u].pathname!==d.pathname||((p=n[u].route.path)==null?void 0:p.endsWith("*"))&&n[u].params["*"]!==d.params["*"]};return a==="assets"?r.filter((d,u)=>i(d,u)||l(d,u)):a==="data"?r.filter((d,u)=>{var f;let p=s.routes[d.route.id];if(!p||!p.hasLoader)return!1;if(i(d,u)||l(d,u))return!0;if(d.route.shouldRevalidate){let h=d.route.shouldRevalidate({currentUrl:new URL(o.pathname+o.search+o.hash,window.origin),currentParams:((f=n[0])==null?void 0:f.params)||{},nextUrl:new URL(e,window.origin),nextParams:d.params,defaultShouldRevalidate:!0});if(typeof h=="boolean")return h}return!0}):[]}function af(e,r,{includeHydrateFallback:n}={}){return lf(e.map(s=>{let o=r.routes[s.route.id];if(!o)return[];let a=[o.module];return o.clientActionModule&&(a=a.concat(o.clientActionModule)),o.clientLoaderModule&&(a=a.concat(o.clientLoaderModule)),n&&o.hydrateFallbackModule&&(a=a.concat(o.hydrateFallbackModule)),o.imports&&(a=a.concat(o.imports)),a}).flat(1))}function lf(e){return[...new Set(e)]}function cf(e){let r={},n=Object.keys(e).sort();for(let s of n)r[s]=e[s];return r}function df(e,r){let n=new Set;return new Set(r),e.reduce((s,o)=>{let a=JSON.stringify(cf(o));return n.has(a)||(n.add(a),s.push({key:a,link:o})),s},[])}function oa(){let e=c.useContext(zr);return sa(e,"You must render this element inside a <DataRouterContext.Provider> element"),e}function uf(){let e=c.useContext(as);return sa(e,"You must render this element inside a <DataRouterStateContext.Provider> element"),e}var aa=c.createContext(void 0);aa.displayName="FrameworkContext";function cs(){let e=c.useContext(aa);return sa(e,"You must render this element inside a <HydratedRouter> element"),e}function pf(e,r){let n=c.useContext(aa),[s,o]=c.useState(!1),[a,i]=c.useState(!1),{onFocus:l,onBlur:d,onMouseEnter:u,onMouseLeave:p,onTouchStart:f}=r,h=c.useRef(null);c.useEffect(()=>{if(e==="render"&&i(!0),e==="viewport"){let x=b=>{b.forEach(y=>{i(y.isIntersecting)})},g=new IntersectionObserver(x,{threshold:.5});return h.current&&g.observe(h.current),()=>{g.disconnect()}}},[e]),c.useEffect(()=>{if(s){let x=setTimeout(()=>{i(!0)},100);return()=>{clearTimeout(x)}}},[s]);let m=()=>{o(!0)},v=()=>{o(!1),i(!1)};return n?e!=="intent"?[a,h,{}]:[a,h,{onFocus:Hr(l,m),onBlur:Hr(d,v),onMouseEnter:Hr(u,m),onMouseLeave:Hr(p,v),onTouchStart:Hr(f,m)}]:[!1,h,{}]}function Hr(e,r){return n=>{e&&e(n),n.defaultPrevented||r(n)}}function ff({page:e,...r}){let n=Cp(),{nonce:s}=cs(),{router:o}=oa(),a=c.useMemo(()=>Wl(o.routes,e,o.basename),[o.routes,e,o.basename]);return a?(r.nonce==null&&s&&(r={...r,nonce:s}),n?c.createElement(mf,{page:e,matches:a,...r}):c.createElement(xf,{page:e,matches:a,...r})):null}function hf(e){let{manifest:r,routeModules:n}=cs(),[s,o]=c.useState([]);return c.useEffect(()=>{let a=!1;return of(e,r,n).then(i=>{a||o(i)}),()=>{a=!0}},[e,r,n]),s}function mf({page:e,matches:r,...n}){let s=Jt(),{future:o}=cs(),{basename:a}=oa(),i=c.useMemo(()=>{if(e===s.pathname+s.search+s.hash)return[];let l=ic(e,a,o.v8_trailingSlashAwareDataRequests,"rsc"),d=!1,u=[];for(let p of r)typeof p.route.shouldRevalidate=="function"?d=!0:u.push(p.route.id);return d&&u.length>0&&l.searchParams.set("_routes",u.join(",")),[l.pathname+l.search]},[a,o.v8_trailingSlashAwareDataRequests,e,s,r]);return c.createElement(c.Fragment,null,i.map(l=>c.createElement("link",{key:l,rel:"prefetch",as:"fetch",href:l,...n})))}function xf({page:e,matches:r,...n}){let s=Jt(),{future:o,manifest:a,routeModules:i}=cs(),{basename:l}=oa(),{loaderData:d,matches:u}=uf(),p=c.useMemo(()=>Ka(e,r,u,a,s,"data"),[e,r,u,a,s]),f=c.useMemo(()=>Ka(e,r,u,a,s,"assets"),[e,r,u,a,s]),h=c.useMemo(()=>{if(e===s.pathname+s.search+s.hash)return[];let x=new Set,g=!1;if(r.forEach(y=>{var S;let j=a.routes[y.route.id];!j||!j.hasLoader||(!p.some(k=>k.route.id===y.route.id)&&y.route.id in d&&((S=i[y.route.id])!=null&&S.shouldRevalidate)||j.hasClientLoader?g=!0:x.add(y.route.id))}),x.size===0)return[];let b=ic(e,l,o.v8_trailingSlashAwareDataRequests,"data");return g&&x.size>0&&b.searchParams.set("_routes",r.filter(y=>x.has(y.route.id)).map(y=>y.route.id).join(",")),[b.pathname+b.search]},[l,o.v8_trailingSlashAwareDataRequests,d,s,a,p,r,e,i]),m=c.useMemo(()=>af(f,a),[f,a]),v=hf(f);return c.createElement(c.Fragment,null,h.map(x=>c.createElement("link",{key:x,rel:"prefetch",as:"fetch",href:x,...n})),m.map(x=>c.createElement("link",{key:x,rel:"modulepreload",href:x,...n})),v.map(({key:x,link:g})=>c.createElement("link",{key:x,nonce:n.nonce,...g,crossOrigin:g.crossOrigin??n.crossOrigin})))}function gf(...e){return r=>{e.forEach(n=>{typeof n=="function"?n(r):n!=null&&(n.current=r)})}}var vf=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{vf&&(window.__reactRouterVersion="7.18.4")}catch{}function yf({basename:e,children:r,useTransitions:n,window:s}){let o=c.useRef();o.current==null&&(o.current=Ju({window:s,v5Compat:!0}));let a=o.current,[i,l]=c.useState({action:a.action,location:a.location}),d=c.useCallback(u=>{n===!1?l(u):c.startTransition(()=>l(u))},[n]);return c.useLayoutEffect(()=>a.listen(d),[a,d]),c.createElement(qp,{basename:e,children:r,location:i.location,navigationType:i.action,navigator:a,useTransitions:n})}var lc=c.forwardRef(function({onClick:r,discover:n="render",prefetch:s="none",relative:o,reloadDocument:a,replace:i,mask:l,state:d,target:u,to:p,preventScrollReset:f,viewTransition:h,defaultShouldRevalidate:m,...v},x){let{basename:g,navigator:b,useTransitions:y}=c.useContext(It),j=typeof p=="string"&&Zo.test(p),S=Jl(p,g);p=S.to;let k=Ap(p,{relative:o}),T=Jt(),w=null;if(l){let C=ea(l,[],T.mask?T.mask.pathname:"/",!0);g!=="/"&&(C.pathname=C.pathname==="/"?g:Mt([g,C.pathname])),w=b.createHref(C)}let[E,R,N]=pf(s,v),I=wf(p,{replace:i,mask:l,state:d,target:u,preventScrollReset:f,relative:o,viewTransition:h,defaultShouldRevalidate:m,useTransitions:y});function A(C){r&&r(C),C.defaultPrevented||I(C)}let $=!(S.isExternal||a),W=c.createElement("a",{...v,...N,href:($?w:void 0)||S.absoluteURL||k,onClick:$?A:r,ref:gf(x,R),target:u,"data-discover":!j&&n==="render"?"true":void 0});return E&&!j?c.createElement(c.Fragment,null,W,c.createElement(ff,{page:k})):W});lc.displayName="Link";var bf=c.forwardRef(function({"aria-current":r="page",caseSensitive:n=!1,className:s="",end:o=!1,style:a,to:i,viewTransition:l,children:d,...u},p){let f=vn(i,{relative:u.relative}),h=Jt(),m=c.useContext(as),{navigator:v,basename:x}=c.useContext(It),g=m!=null&&Rf(f)&&l===!0,b=v.encodeLocation?v.encodeLocation(f).pathname:f.pathname,y=h.pathname,j=m&&m.navigation&&m.navigation.location?m.navigation.location.pathname:null;n||(y=y.toLowerCase(),j=j?j.toLowerCase():null,b=b.toLowerCase()),j&&x&&(j=qt(j,x)||j);const S=b!=="/"&&b.endsWith("/")?b.length-1:b.length;let k=y===b||!o&&y.startsWith(b)&&y.charAt(S)==="/",T=j!=null&&(j===b||!o&&j.startsWith(b)&&j.charAt(b.length)==="/"),w={isActive:k,isPending:T,isTransitioning:g},E=k?r:void 0,R;typeof s=="function"?R=s(w):R=[s,k?"active":null,T?"pending":null,g?"transitioning":null].filter(Boolean).join(" ");let N=typeof a=="function"?a(w):a;return c.createElement(lc,{...u,"aria-current":E,className:R,ref:p,style:N,to:i,viewTransition:l},typeof d=="function"?d(w):d)});bf.displayName="NavLink";var kf=c.forwardRef(({discover:e="render",fetcherKey:r,navigate:n,reloadDocument:s,replace:o,state:a,method:i=Vn,action:l,onSubmit:d,relative:u,preventScrollReset:p,viewTransition:f,defaultShouldRevalidate:h,...m},v)=>{let{useTransitions:x}=c.useContext(It),g=Ef(),b=Nf(l,{relative:u}),y=i.toLowerCase()==="get"?"get":"post",j=typeof l=="string"&&Zo.test(l),S=k=>{if(d&&d(k),k.defaultPrevented)return;k.preventDefault();let T=k.nativeEvent.submitter,w=(T==null?void 0:T.getAttribute("formmethod"))||i,E=()=>g(T||k.currentTarget,{fetcherKey:r,method:w,navigate:n,replace:o,state:a,relative:u,preventScrollReset:p,viewTransition:f,defaultShouldRevalidate:h});x&&n!==!1?c.startTransition(()=>E()):E()};return c.createElement("form",{ref:v,method:y,action:b,onSubmit:s?d:S,...m,"data-discover":!j&&e==="render"?"true":void 0})});kf.displayName="Form";function jf(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function cc(e){let r=c.useContext(zr);return ot(r,jf(e)),r}function wf(e,{target:r,replace:n,mask:s,state:o,preventScrollReset:a,relative:i,viewTransition:l,defaultShouldRevalidate:d,useTransitions:u}={}){let p=Pp(),f=Jt(),h=vn(e,{relative:i});return c.useCallback(m=>{if(Zp(m,r)){m.preventDefault();let v=n!==void 0?n:Pr(f)===Pr(h),x=()=>p(e,{replace:v,mask:s,state:o,preventScrollReset:a,relative:i,viewTransition:l,defaultShouldRevalidate:d});u?c.startTransition(()=>x()):x()}},[f,p,h,n,s,o,r,e,a,i,l,d,u])}var Sf=0,Cf=()=>`__${String(++Sf)}__`;function Ef(){let{router:e}=cc("useSubmit"),{basename:r}=c.useContext(It),n=Hp(),s=e.fetch,o=e.navigate;return c.useCallback(async(a,i={})=>{let{action:l,method:d,encType:u,formData:p,body:f}=rf(a,r);if(i.navigate===!1){let h=i.fetcherKey||Cf();await s(h,n,i.action||l,{defaultShouldRevalidate:i.defaultShouldRevalidate,preventScrollReset:i.preventScrollReset,formData:p,body:f,formMethod:i.method||d,formEncType:i.encType||u,flushSync:i.flushSync})}else await o(i.action||l,{defaultShouldRevalidate:i.defaultShouldRevalidate,preventScrollReset:i.preventScrollReset,formData:p,body:f,formMethod:i.method||d,formEncType:i.encType||u,replace:i.replace,state:i.state,fromRouteId:n,flushSync:i.flushSync,viewTransition:i.viewTransition})},[s,o,r,n])}function Nf(e,{relative:r}={}){let{basename:n}=c.useContext(It),s=c.useContext(Yt);ot(s,"useFormAction must be used inside a RouteContext");let[o]=s.matches.slice(-1),a={...vn(e||".",{relative:r})},i=Jt();if(e==null){a.search=i.search;let l=new URLSearchParams(a.search),d=l.getAll("index");if(d.some(p=>p==="")){l.delete("index"),d.filter(f=>f).forEach(f=>l.append("index",f));let p=l.toString();a.search=p?`?${p}`:""}}return(!e||e===".")&&o.route.index&&(a.search=a.search?a.search.replace(/^\?/,"?index&"):"?index"),n!=="/"&&(a.pathname=a.pathname==="/"?n:Mt([n,a.pathname])),Pr(a)}function Rf(e,{relative:r}={}){let n=c.useContext(tc);ot(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:s}=cc("useViewTransitionState"),o=vn(e,{relative:r});if(!n.isTransitioning)return!1;let a=qt(n.currentLocation.pathname,s)||n.currentLocation.pathname,i=qt(n.nextLocation.pathname,s)||n.nextLocation.pathname;return Zn(o.pathname,i)!=null||Zn(o.pathname,a)!=null}var Br=Vu();const Tf=Gu(Br),If=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function Ln(e){if(typeof e!="string")return null;const r=e.trim();return r===""||!If.test(r)||r==="0.0.0"?null:r}function dc(e){if(e.preferInstalled){const o=Ln(e.installedCurrentVersion);if(o)return{version:o,versionSource:"registry"}}const r=Ln(e.frontmatterVersion);if(r)return{version:r,versionSource:"frontmatter"};const n=Ln(e.registryCurrentVersion);if(n)return{version:n,versionSource:"registry"};const s=Ln(e.pluginVersion);return s?{version:s,versionSource:"plugin"}:{version:"1.0.0",versionSource:"default"}}const Lf=new Set(["private_repository","unsupported_repository"]),Af=new Set(["private_publishing_unavailable","draft_persistence_unavailable"]);class Eo extends Error{constructor(r,n,s){super(n),this.name="SubmissionRefusedError",this.code=r,this.status=s}}function uc(e){return e instanceof Eo||e instanceof Error&&e.name==="SubmissionRefusedError"&&typeof e.code=="string"}function Pf(e){var o,a;const r=e,n=typeof((o=r==null?void 0:r.details)==null?void 0:o.error)=="string"?r.details.error:"",s=typeof((a=r==null?void 0:r.details)==null?void 0:a.message)=="string"?r.details.message:"";throw(r==null?void 0:r.status)===422&&Lf.has(n)?new Eo(n,s||"Nothing was submitted to verified-skill.com.",422):(r==null?void 0:r.status)===503&&Af.has(n)?new Eo(n,s||"Hosted private publishing is not open yet.",503):e}const $f={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},qa={own:"authoring-project",installed:"available-project",global:"available-personal"},No=new Set(["available-project","available-personal","available-plugin","authoring-project","authoring-plugin"]);function Mf(e){if(typeof e=="string"){if(No.has(e))return e;if(Object.prototype.hasOwnProperty.call(qa,e))return qa[e]}return"authoring-project"}function Ff(e){return e.startsWith("available-")?"available":"authoring"}function Df(e){const r=e.indexOf("-");return e.slice(r+1)}const wt="";function An(e,r){try{let n=!1;const s=$f;if(s&&(s.VITE_VSKILL_DEBUG_SSE==="1"||s.VITE_VSKILL_DEBUG_SSE==="true")&&(n=!0),!n&&typeof window<"u"&&typeof window.location<"u"&&new URLSearchParams(window.location.search).get("debugSse")==="1"&&(n=!0),!n)return;console.warn(`[vskill api] ${e}`,r)}catch{}}class Kt extends Error{constructor(r,n,s){super(r),this.name="ApiError",this.status=n,this.details=s}}async function ye(e,r){const n=await fetch(`${wt}${e}`,r);if(!n.ok){const s=await n.json().catch(()=>({error:n.statusText})),o=s&&typeof s=="object"?s:void 0;throw new Kt((s==null?void 0:s.error)||`HTTP ${n.status}`,n.status,o)}return n.json()}async function Ya(e,r){const n=await fetch(e,r);return n.status>=502&&n.status<=504?(await new Promise(s=>setTimeout(s,250)),fetch(e,r)):n}const Ja=100;function Qa(e,r){if(e.length===0||r<=0)return[];const n=[];for(let s=0;s<e.length;s+=r)n.push(e.slice(s,s+r));return n}function Qe(e){return typeof e=="string"&&e.length>0?e:null}function zf(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Rr(e){if(!Array.isArray(e))return null;const r=e.filter(n=>typeof n=="string"&&n.length>0);return r.length>0?r:null}function Bf(e){if(!e||typeof e!="object")return null;const r=e,n=Qe(r.python)??void 0,s=Rr(r.pip)??void 0,o=Qe(r.node)??void 0;return!n&&!s&&!o?null:{python:n,pip:s,node:o}}function _f(e){if(!e||typeof e!="object")return null;const r=e,n=r.runner;return n!=="vitest"&&n!=="pytest"&&n!=="none"?null:{runner:n,file:Qe(r.file)??void 0,requires:Rr(r.requires)??void 0}}function Of(e){const r=e??{};let n;r.origin==="source"||r.origin==="installed"?n=r.origin:(n="source",console.warn(`[api.getSkills] skill ${String(r.plugin)}/${String(r.skill)} has invalid origin=${JSON.stringify(r.origin)}; defaulting to 'source'`));let s;r.scope==="own"||r.scope==="installed"||r.scope==="global"?s=r.scope:s=n==="installed"?"installed":"own";let o;r.installMethod==="authored"||r.installMethod==="copied"||r.installMethod==="symlinked"?o=r.installMethod:o=s==="own"?"authored":"copied";const a=typeof r.scopeV2=="string"&&No.has(r.scopeV2)?r.scopeV2:Mf(r.scope),i=Ff(a),l=Df(a),d=typeof r.precedenceRank=="number"?r.precedenceRank:void 0;let u;r.shadowedBy===null?u=null:typeof r.shadowedBy=="string"&&No.has(r.shadowedBy)?u=r.shadowedBy:u=void 0;const p={plugin:typeof r.plugin=="string"?r.plugin:"",skill:typeof r.skill=="string"?r.skill:"",dir:typeof r.dir=="string"?r.dir:"",hasEvals:!!r.hasEvals,hasBenchmark:!!r.hasBenchmark,evalCount:typeof r.evalCount=="number"?r.evalCount:0,assertionCount:typeof r.assertionCount=="number"?r.assertionCount:0,benchmarkStatus:r.benchmarkStatus==="pass"||r.benchmarkStatus==="fail"||r.benchmarkStatus==="pending"||r.benchmarkStatus==="stale"||r.benchmarkStatus==="missing"?r.benchmarkStatus:"missing",lastBenchmark:typeof r.lastBenchmark=="string"?r.lastBenchmark:null,origin:n,...r.sourcePrivate===!0?{sourcePrivate:!0}:{},scope:s,isSymlink:typeof r.isSymlink=="boolean"?r.isSymlink:!1,symlinkTarget:Qe(r.symlinkTarget),installMethod:o,sourcePath:Qe(r.sourcePath),scopeV2:a,group:i,source:l,pluginName:Qe(r.pluginName),pluginNamespace:Qe(r.pluginNamespace),pluginMarketplace:Qe(r.pluginMarketplace),pluginManifestPath:Qe(r.pluginManifestPath),pluginVersion:Qe(r.pluginVersion),...typeof r.pluginDisplay=="string"&&r.pluginDisplay?{pluginDisplay:r.pluginDisplay}:{},precedenceRank:d,shadowedBy:u,description:Qe(r.description),version:Qe(r.version),category:Qe(r.category),author:Qe(r.author),license:Qe(r.license),homepage:Qe(r.homepage),repoUrl:Qe(r.repoUrl),skillPath:Qe(r.skillPath),tags:Rr(r.tags),deps:Rr(r.deps),mcpDeps:Rr(r.mcpDeps),entryPoint:Qe(r.entryPoint),lastModified:Qe(r.lastModified),sizeBytes:zf(r.sizeBytes),sourceAgent:Qe(r.sourceAgent),secrets:Rr(r.secrets),runtime:Bf(r.runtime),integrationTests:_f(r.integrationTests)};if(r.provenance&&typeof r.provenance=="object"){const h=r.provenance;(h.promotedFrom==="installed"||h.promotedFrom==="global")&&typeof h.sourcePath=="string"&&typeof h.promotedAt=="number"?p.provenance={promotedFrom:h.promotedFrom,sourcePath:h.sourcePath,promotedAt:h.promotedAt,sourceSkillVersion:typeof h.sourceSkillVersion=="string"?h.sourceSkillVersion:void 0}:p.provenance=null}else r.provenance===null&&(p.provenance=null);typeof r.updateAvailable=="boolean"&&(p.updateAvailable=r.updateAvailable),typeof r.currentVersion=="string"&&(p.currentVersion=r.currentVersion),typeof r.latestVersion=="string"&&(p.latestVersion=r.latestVersion),typeof r.pinnedVersion=="string"&&(p.pinnedVersion=r.pinnedVersion);const f=dc({frontmatterVersion:p.version??null,registryCurrentVersion:p.currentVersion??null,pluginVersion:p.pluginVersion??null,installedCurrentVersion:p.currentVersion??null,preferInstalled:p.origin==="installed"});return p.resolvedVersion=f.version,p.versionSource=f.versionSource,p}const de={getConfig(){return ye("/api/config")},setConfig(e,r){return ye("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e,model:r})})},revealInEditor(e,r,n){return ye("/api/skills/reveal-in-editor",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n?{plugin:e,skill:r,file:n}:{plugin:e,skill:r})})},async getSkills(e){const r=new URLSearchParams;e!=null&&e.scope&&r.set("scope",e.scope),e!=null&&e.agent&&r.set("agent",e.agent);const n=r.toString(),s=await ye(`/api/skills${n?"?"+n:""}`);return Array.isArray(s)?s.map(Of):[]},getSkillInstallState(e){return ye(`/api/studio/install-state?skill=${encodeURIComponent(e)}`)},async convertToPlugin(e){return ye("/api/authoring/convert-to-plugin",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})},getAgents(){return ye("/api/agents")},getSkillDetail(e,r){return ye(`/api/skills/${e}/${r}`)},async getEvals(e,r){const n=await ye(`/api/skills/${e}/${r}/evals`);if(n&&typeof n=="object"&&"exists"in n){if(n.exists===!1)return{skill_name:r,evals:[]};const{exists:s,...o}=n;return o}return n},getEvalsEnvelope(e,r){return ye(`/api/skills/${e}/${r}/evals`)},getActivationHistoryEnvelope(e,r){return ye(`/api/skills/${e}/${r}/activation-history`)},saveEvals(e,r,n){return ye(`/api/skills/${e}/${r}/evals`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})},generateEvals(e,r){return ye(`/api/skills/${e}/${r}/generate-evals`,{method:"POST"})},async getLatestBenchmark(e,r){const n=await fetch(`${wt}/api/skills/${e}/${r}/benchmark/latest`);if(!n.ok){const s=await n.json().catch(()=>({error:n.statusText}));throw new Kt(s.error||`HTTP ${n.status}`,n.status)}return n.json()},getHistory(e,r,n){const s=new URLSearchParams;n!=null&&n.model&&s.set("model",n.model),n!=null&&n.type&&s.set("type",n.type),n!=null&&n.from&&s.set("from",n.from),n!=null&&n.to&&s.set("to",n.to);const o=s.toString();return ye(`/api/skills/${e}/${r}/history${o?"?"+o:""}`)},getHistoryEntry(e,r,n){return ye(`/api/skills/${e}/${r}/history/${encodeURIComponent(n)}`)},compareRuns(e,r,n,s){return ye(`/api/skills/${e}/${r}/history-compare?a=${encodeURIComponent(n)}&b=${encodeURIComponent(s)}`)},getCaseHistory(e,r,n,s){const o=new URLSearchParams;s&&o.set("model",s);const a=o.toString();return ye(`/api/skills/${e}/${r}/history/case/${n}${a?"?"+a:""}`)},deleteHistoryEntry(e,r,n){return ye(`/api/skills/${e}/${r}/history/${encodeURIComponent(n)}`,{method:"DELETE"})},deleteSkill(e,r){return ye(`/api/skills/${e}/${r}`,{method:"DELETE"})},uninstallSkill(e,r){return ye(`/api/skills/${e}/${r}/uninstall`,{method:"POST"})},improveSkill(e,r,n){return ye(`/api/skills/${e}/${r}/improve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})},instructEdit(e,r,n){return ye(`/api/skills/${e}/${r}/improve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:"instruct",...n})})},applyImprovement(e,r,n){return ye(`/api/skills/${e}/${r}/apply-improvement`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:n})})},getStats(e,r){return ye(`/api/skills/${e}/${r}/stats`)},getDependencies(e,r){return ye(`/api/skills/${e}/${r}/dependencies`)},getProjectLayout(){return ye("/api/project-layout")},getProjectGitHubStatus(){return ye("/api/project/github-status")},createSkill(e){return ye("/api/skills/create",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})},detectEngines(){return ye("/api/studio/detect-engines")},saveDraft(e){return ye("/api/skills/save-draft",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})},getSkillCreatorStatus(){return ye("/api/skill-creator-status")},generateSkill(e){return ye("/api/skills/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})},getSkillFiles(e,r){return ye(`/api/skills/${e}/${r}/files`)},getSkillFile(e,r,n){return ye(`/api/skills/${e}/${r}/file?path=${encodeURIComponent(n)}`)},saveSkillFile(e,r,n,s){return ye(`/api/skills/${e}/${r}/file`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:n,content:s})})},getLeaderboard(e,r){return ye(`/api/skills/${e}/${r}/leaderboard`)},getLeaderboardEntry(e,r,n){return ye(`/api/skills/${e}/${r}/leaderboard/${encodeURIComponent(n)}`)},startSweep(e,r,n){const s=`${wt}/api/skills/${e}/${r}/sweep`,o=new EventSource(s);return fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify(n)}),o},getCredentials(e,r){return ye(`/api/credentials/${e}/${r}`)},setCredential(e,r,n,s){return ye(`/api/credentials/${e}/${r}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:n,value:s})})},getParams(e,r){return ye(`/api/credentials/${e}/${r}/params`)},getParamsRevealed(e,r,n){const s=n?`reveal=true&key=${encodeURIComponent(n)}`:"reveal=true";return ye(`/api/credentials/${e}/${r}/params?${s}`)},searchModels(){return ye("/api/openrouter/models")},async getSkillVersions(e,r){const n=await ye(`/api/skills/${e}/${r}/versions`);return Array.isArray(n)?n:Array.isArray(n.versions)?n.versions:[]},getSkillVersionsEnvelope(e,r){return ye(`/api/skills/${e}/${r}/versions`)},getVersionDiff(e,r,n,s){return ye(`/api/skills/${e}/${r}/versions/diff?from=${n}&to=${s}`)},startBatchUpdate(e){const r=`${wt}/api/skills/batch-update`,n=new EventSource(r);return fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({skills:e})}),n},startSkillUpdate(e,r){const n=`${wt}/api/skills/${e}/${r}/update`,s=new EventSource(n);return fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"}}),s},async postSkillUpdate(e,r,n){let s,o;if(n&&typeof n.aborted=="boolean")s=n;else if(n&&typeof n=="object"){const p=n;s=p.signal,o=p.agentId}const a=o?`?agent=${encodeURIComponent(o)}`:"",i=`${wt}/api/skills/${e}/${r}/update${a}`,l=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},signal:s});let d,u="";if(l.body){const p=l.body.getReader(),f=new TextDecoder;let h=!1,m="";for(;!h;){const x=await p.read();if(h=x.done,x.value){const g=f.decode(x.value,{stream:!h});m+=g,u.length<200&&(u+=g)}}const v=m.match(/event:\s*done[\s\S]*?data:\s*(\{[^\n]+\})/);if(v)try{d=JSON.parse(v[1]).version}catch{}u=u.slice(0,200)}else{const p=await l.text();u=p.slice(0,200);const f=p.match(/event:\s*done[\s\S]*?data:\s*(\{[^\n]+\})/);if(f)try{d=JSON.parse(f[1]).version}catch{}}return{ok:l.ok,status:l.status,body:u,version:d}},async rescanSkill(e,r){const n=`${e}/${r}`,s=await fetch(`${wt}/api/v1/skills/${encodeURIComponent(n)}/rescan`,{method:"POST",headers:{"Content-Type":"application/json"}});if(!s.ok)throw new Error(`rescan failed: HTTP ${s.status}`);return await s.json()},async getSkillUpdates(){try{const e=await fetch(`${wt}/api/skills/updates`);return e.ok?await e.json():[]}catch{return[]}},async checkSkillUpdates(e){if(e.length===0)return[];const r=[...e].sort(),n=Qa(r,Ja),s=async a=>{try{const i=await Ya(`${wt}/api/v1/skills/check-updates`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({skills:a.map(d=>({name:d,currentVersion:"0.0.0"}))})});if(!i.ok)return[];const l=await i.json().catch(()=>null);return Array.isArray(l)?l:l&&typeof l=="object"&&Array.isArray(l.results)?l.results.map(d=>({skillId:typeof d.skillId=="string"?d.skillId:typeof d.name=="string"?d.name:"",version:typeof d.version=="string"?d.version:typeof d.latest=="string"?d.latest:"",eventId:typeof d.eventId=="string"?d.eventId:"",publishedAt:typeof d.publishedAt=="string"?d.publishedAt:"",diffSummary:typeof d.diffSummary=="string"?d.diffSummary:void 0,trackedForUpdates:typeof d.trackedForUpdates=="boolean"?d.trackedForUpdates:void 0,updateAvailable:typeof d.updateAvailable=="boolean"?d.updateAvailable:void 0,installed:typeof d.installed=="string"&&d.installed!=="0.0.0"?d.installed:void 0,latest:typeof d.latest=="string"?d.latest:void 0,name:typeof d.name=="string"?d.name:void 0})):[]}catch{return[]}};return(await Promise.all(n.map(s))).flat()},async resolveInstalledSkillIds(e){if(e.length===0)return[];const r=Qa(e,Ja),n=async a=>{try{const i=await Ya(`${wt}/api/v1/skills/check-updates`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({skills:a.map(u=>({name:u.name,currentVersion:u.currentVersion??"0.0.0"}))})});if(!i.ok)return{ok:!1,map:new Map};const l=await i.json().catch(()=>null),d=Array.isArray(l)?l:Array.isArray(l==null?void 0:l.results)?l.results:[];return{ok:!0,map:new Map(d.filter(u=>typeof u.name=="string"&&u.name.length>0).map(u=>[u.name,u]))}}catch{return{ok:!1,map:new Map}}},s=await Promise.all(r.map(n));if(s.length>0&&s.every(a=>!a.ok))throw new Error("resolveInstalledSkillIds: all chunks failed");const o=new Map;for(const a of s)for(const[i,l]of a.map)o.set(i,l);return e.map(a=>{const i=o.get(a.name);return{plugin:a.plugin,skill:a.skill,uuid:typeof(i==null?void 0:i.id)=="string"&&i.id.length>0?i.id:void 0,slug:typeof(i==null?void 0:i.slug)=="string"&&i.slug.length>0?i.slug:void 0}})},async lookupSkillsByName(e){if(!Array.isArray(e)||e.length===0)return[];const r=e.slice(0,50);try{const n=await fetch(`${wt}/api/v1/skills/lookup-by-name`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({entries:r})});if(!n.ok)return An("lookup-by-name-error",{status:n.status}),[];const s=await n.json().catch(a=>(An("lookup-by-name-parse-error",{message:a instanceof Error?a.message:String(a)}),null)),o=s&&typeof s=="object"&&"results"in s?s.results:null;return Array.isArray(o)?o.filter(a=>a!==null&&typeof a=="object").map(a=>({name:typeof a.name=="string"?a.name:"",author:typeof a.author=="string"?a.author:"",uuid:typeof a.uuid=="string"&&a.uuid.length>0?a.uuid:void 0,slug:typeof a.slug=="string"&&a.slug.length>0?a.slug:void 0})).filter(a=>a.name.length>0):(s!==null&&An("lookup-by-name-no-results-array",{}),[])}catch(n){return An("lookup-by-name-fetch-error",{message:n instanceof Error?n.message:String(n)}),[]}},promoteSkill(e,r,n){const s=n!=null&&n.overwrite?"?overwrite=true":"";return Ns(`/api/skills/${e}/${r}/promote${s}`,n==null?void 0:n.onEvent,n==null?void 0:n.signal)},testInstallSkill(e,r,n){const s=new URLSearchParams;(n==null?void 0:n.dest)==="global"&&s.set("dest","global"),n!=null&&n.overwrite&&s.set("overwrite","true");const o=s.toString();return Ns(`/api/skills/${e}/${r}/test-install${o?"?"+o:""}`,n==null?void 0:n.onEvent,n==null?void 0:n.signal)},revertSkill(e,r,n){return Ns(`/api/skills/${e}/${r}/revert`,n==null?void 0:n.onEvent,n==null?void 0:n.signal)},listStudioOps(e){const r=new URLSearchParams;(e==null?void 0:e.before)!=null&&r.set("before",String(e.before)),(e==null?void 0:e.limit)!=null&&r.set("limit",String(e.limit));const n=r.toString();return ye(`/api/studio/ops${n?"?"+n:""}`)},deleteStudioOp(e){return ye(`/api/studio/ops/${encodeURIComponent(e)}`,{method:"DELETE"})},studioOpsStream(){return new EventSource(`${wt}/api/studio/ops/stream`)},gitRemote(){return ye("/api/git/remote")},gitDiff(){return ye("/api/git/diff",{method:"POST"})},gitStatus(){return ye("/api/git/status")},gitCommitMessage(e){return ye("/api/git/commit-message",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e??{})})},gitPublish(e){return ye("/api/git/publish",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e??{})})},async submitToQueue(e){const r=await ye("/api/v1/submissions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).catch(Pf);return r.alreadyVerified===!0?{kind:"alreadyVerified",skillId:typeof r.skillId=="string"?r.skillId:void 0,skillName:typeof r.skillName=="string"?r.skillName:void 0}:r.blocked===!0?{kind:"blocked",submissionId:String(r.submissionId??r.id??"")}:r.requeued===!0?{kind:"requeued",id:String(r.id??""),state:String(r.state??"RECEIVED")}:r.duplicate===!0?{kind:"duplicate",id:String(r.id??""),state:String(r.state??"")}:{kind:"created",id:String(r.id??""),skillName:String(r.skillName??e.skillName),skillPath:String(r.skillPath??e.skillPath??""),state:String(r.state??"RECEIVED"),createdAt:String(r.createdAt??new Date().toISOString())}},getMyQueue(){return ye("/api/v1/submissions?mine=1")},getSubmission(e){return ye(`/api/v1/submissions/${encodeURIComponent(e)}`)},getPositions(e){const r=e&&e.length>0?`?ids=${encodeURIComponent(e.join(","))}`:"";return ye(`/api/v1/submissions/positions${r}`)},async getAccountTenants(){return ye("/api/v1/account/tenants")},async getActiveTenant(){return ye("/__internal/active-tenant")},async setActiveTenant(e){return ye("/__internal/active-tenant",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentTenant:e})})}};async function Ns(e,r,n){const s=await fetch(`${wt}${e}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},signal:n});if(!s.ok||!s.body){let p=`HTTP ${s.status}`,f;try{const m=await s.json();m.error&&(p=m.error),typeof m.code=="string"&&(f=m.code)}catch{}const h=new Kt(p,s.status);throw f&&(h.code=f),h}const o=s.body.getReader(),a=new TextDecoder;let i="",l="",d=null,u=null;for(;;){const{done:p,value:f}=await o.read();if(p)break;i+=a.decode(f,{stream:!0});const h=i.split(`
14
+ `);i=h.pop()??"";for(const m of h)if(m.startsWith("event: "))l=m.slice(7).trim();else if(m.startsWith("data: ")){let v={};try{v=JSON.parse(m.slice(6))}catch{l="";continue}if(l==="started"||l==="copied"||l==="deleted"||l==="indexed"||l==="done"||l==="error"){const x={type:l,...v};r==null||r(x),x.type==="done"&&(d=x),x.type==="error"&&(u=x)}l=""}}if(u){const p=new Kt(u.message,500);throw p.code=u.code,p}if(!d)throw new Kt("Transfer stream ended without 'done' event",500);return d}function Wf(e,r){if(!e||!r)return!1;const n=/^(\d+)\.(\d+)\.(\d+)/,s=e.match(n),o=r.match(n);if(!s||!o)return!1;const[,a,i,l]=s.map(Number),[,d,u,p]=o.map(Number);return a!==d?a>d:i!==u?i>u:l>=p}function Uf(e,r){if(!r.length)return e;const n=new Map,s=new Map;for(const o of r){const a=o.name.split("/"),i=a.pop()||o.name;if(s.set(i,o),a.length>=1){const l=a[a.length-1];n.set(`${l}/${i}`,o)}}return e.map(o=>{if(o.origin!=="installed")return o;let a;if(o.pluginName?a=n.get(`${o.pluginName}/${o.skill}`):a=s.get(o.skill),!a)return o;const i=a.updateAvailable&&!Wf(o.version,a.latest),l=a.installed&&a.installed!=="0.0.0"?a.installed:null,d={...o,updateAvailable:i,currentVersion:l??o.currentVersion,latestVersion:a.latest??void 0};typeof a.trackedForUpdates=="boolean"&&(d.trackedForUpdates=a.trackedForUpdates);const u=dc({frontmatterVersion:d.version??null,registryCurrentVersion:d.currentVersion??null,pluginVersion:d.pluginVersion??null,installedCurrentVersion:d.currentVersion??null,preferInstalled:!0});return d.resolvedVersion=u.version,d.versionSource=u.versionSource,d})}const Kn=new Map,pr=new Map,Zr=new Map;function Ue(e){Kn.delete(e),pr.delete(e);const r=Zr.get(e);if(r)for(const n of r)n()}function Rt(e,r,n={}){const{ttl:s=3e4,enabled:o=!0}=n,[,a]=c.useState(0),[i,l]=c.useState(void 0),[d,u]=c.useState(0),p=c.useRef(!0),f=c.useRef(e);f.current=e;const h=()=>{l(void 0),Ue(e),u(x=>x+1)};c.useEffect(()=>(p.current=!0,()=>{p.current=!1}),[]),c.useEffect(()=>{if(!o)return;const x=()=>{p.current&&u(g=>g+1)};return Zr.has(e)||Zr.set(e,new Set),Zr.get(e).add(x),()=>{var g;(g=Zr.get(e))==null||g.delete(x)}},[e,o]),c.useEffect(()=>{if(!o)return;const x=Kn.get(e);if(!(!x||Date.now()-x.fetchedAt>s))return;if(pr.has(e)){const j=pr.get(e),S=()=>{p.current&&f.current===e&&a(k=>k+1)};j.subscribers.push(S);return}const b={promise:Promise.resolve(),subscribers:[]},y=r().then(j=>{Kn.set(e,{data:j,fetchedAt:Date.now()}),pr.delete(e),p.current&&f.current===e&&(l(void 0),a(S=>S+1));for(const S of b.subscribers)S()},j=>{pr.delete(e);const S=j instanceof Error?j:new Error(String(j));p.current&&f.current===e&&(l(S),a(k=>k+1));for(const k of b.subscribers)k()});b.promise=y,pr.set(e,b)},[e,r,s,o,d]);const m=Kn.get(e),v=o&&!m&&!i&&pr.has(e);return{data:m==null?void 0:m.data,loading:v,error:i,revalidate:h}}function Hf(e){const[r,n]=c.useState(()=>typeof window>"u"?!1:window.matchMedia(e).matches);return c.useEffect(()=>{const s=window.matchMedia(e);n(s.matches);const o=a=>n(a.matches);return s.addEventListener("change",o),()=>s.removeEventListener("change",o)},[e]),r}async function Vf(e,r){try{if(!await qu())return;const{q:n,...s}=r;await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s),keepalive:!0})}catch{}}const Gf=500,Ro="vskill.updates.seenLastId";function Kf(){if(typeof window>"u")return null;try{return window.localStorage.getItem(Ro)}catch{return null}}function Rs(e){if(!(typeof window>"u"))try{e==null?window.localStorage.removeItem(Ro):window.localStorage.setItem(Ro,e)}catch{}}function qf(){let e=new Map;const r=new Set,n=new Set,s=[];let o=Kf();o&&(n.add(o),s.push(o));function a(){e=new Map(e);for(const l of Array.from(r))l()}function i(l){if(!n.has(l)){if(n.add(l),s.push(l),s.length>Gf){const d=s.shift();d&&n.delete(d)}o=l,Rs(l)}}return{getSnapshot(){return e},subscribe(l){return r.add(l),()=>{r.delete(l)}},ingest(l){return n.has(l.eventId)?"duplicate":(i(l.eventId),e.set(l.skillId,{skillId:l.skillId,version:l.version,diffSummary:l.diffSummary,eventId:l.eventId,publishedAt:l.publishedAt,receivedAt:Date.now()}),a(),"stored")},dismiss(l){e.has(l)&&(e.delete(l),a())},clearSeen(){n.clear(),s.length=0,o=null,Rs(null)},mergeBulk(l){if(l.length!==0){for(const d of l)e.set(d.skillId,d);a()}},getSeenLastId(){return o},reset(){e=new Map,n.clear(),s.length=0,o=null,Rs(null),a()}}}const tr=qf(),pc="vskill:toast-queue",Yf=10,Jf=1800*1e3;function ds(){return typeof window<"u"&&typeof window.localStorage<"u"}function fc(){if(!ds())return[];try{const e=window.localStorage.getItem(pc);if(!e)return[];const r=JSON.parse(e);return Array.isArray(r)?r.filter(n=>n&&typeof n=="object"&&typeof n.eventId=="string"&&typeof n.skillId=="string"&&typeof n.version=="string"&&typeof n.enqueuedAt=="number"&&typeof n.message=="string"):[]}catch{return[]}}function hc(e){if(ds())try{window.localStorage.setItem(pc,JSON.stringify(e))}catch{}}function Qf(e){if(!ds())return"enqueued";const r=fc();if(r.some(o=>o.eventId===e.eventId))return"deduped";let n=!1;const s=[...r,e];for(;s.length>Yf;)s.shift(),n=!0;return hc(s),n?"evicted":"enqueued"}function Xf(){if(!ds())return[];const e=fc();if(e.length===0)return[];hc([]);const r=Date.now()-Jf;return e.filter(n=>n.enqueuedAt>=r)}const Zf="X-Studio-Token";let mr=null,Vr=null,Xa=!1,Pn=null;function eh(){var e;return typeof window>"u"?!1:!!((e=window.__TAURI_INTERNALS__)!=null&&e.invoke)}function ia(){if(typeof document>"u")return null;const e=document.getElementById("__vskill_studio_token__");if(!e||!e.textContent)return null;try{const r=JSON.parse(e.textContent);if(typeof r.token=="string"&&r.token.length>0)return r.token}catch{}return null}async function th(){var n;if(typeof window>"u")return null;const r=(n=window.__TAURI_INTERNALS__)==null?void 0:n.invoke;if(!r)return null;try{const s=await r("get_studio_token");return typeof s=="string"&&s.length>0?s:null}catch{return null}}async function rh(){if(mr)return mr;const e=ia();return e?(mr=e,e):Vr||(Vr=th().then(r=>(r&&(mr=r),Vr=null,r)),Vr)}function nh(e){if(typeof window>"u")return!1;if(e.startsWith("/api/"))return!0;try{const r=window.location.origin;if(e.startsWith(`${r}/api/`))return!0}catch{}return!1}function sh(){Xa||typeof globalThis.fetch!="function"||!(ia()!==null)&&!eh()||(Xa=!0,Pn=globalThis.fetch.bind(globalThis),globalThis.fetch=async(r,n)=>{let s;if(typeof r=="string"?s=r:r instanceof URL?s=r.toString():s=r.url,!nh(s))return Pn(r,n);const o=await rh();if(!o)return Pn(r,n);const a={...n??{}},i=new Headers(a.headers??{});return i.set(Zf,o),a.headers=i,Pn(r,a)})}function oh(){if(mr)return mr;const e=ia();return e?(mr=e,e):null}const us=new Set(["PUBLISHED","AUTO_APPROVED","VENDOR_APPROVED"]),la=new Set(["REJECTED","TIER1_FAILED","BLOCKED"]),To=new Set;function mc(e,r){return`${e}::${r}`}function xc(e,r){const n=mc(e,r);return To.has(n)?!1:(To.add(n),!0)}function ah(e,r){To.add(mc(e,r))}function ih(e){return`https://verified-skill.com/submit/${encodeURIComponent(e)}`}function lh(e,r,n){const s=r||"Your skill";return us.has(n)?{outcome:"approved",title:"Skill approved",body:`${s} is now published on verified-skill.com`}:la.has(n)?{outcome:"rejected",title:"Skill rejected",body:`${s} ${n==="BLOCKED"?"was blocked":"was rejected"}. Tap to see why.`,clickUrl:ih(e)}:null}function ch(){return typeof window<"u"&&"__TAURI_INTERNALS__"in window}async function dh(){try{return await ar(()=>import("./index-DlQYQHDO.js"),__vite__mapDeps([0,1]))}catch{return null}}async function uh(e){try{let r=await e.isPermissionGranted();return r||(r=await e.requestPermission()==="granted"),r}catch{return!1}}async function gc(e,r,n){const s=lh(e,r,n);if(!s||!ch())return!1;const o=await dh();if(!o||!await uh(o))return!1;if(s.outcome==="rejected"&&s.clickUrl&&typeof o.onAction=="function")try{const i=s.clickUrl;let l=null;l=await o.onAction(()=>{Xn(i);try{l==null||l()}catch{}})}catch{}try{return o.sendNotification({title:s.title,body:s.body}),!0}catch{return!1}}function Za(e){return typeof e=="string"&&e.length>0}function ph(e){if(typeof e!="string")return null;const r=e.trim();return r.length>0?`usr_${r}`:null}function fh(e){const r=[];for(const n of e){const s=Za(n.uuid),o=Za(n.slug);if(!s&&!o)continue;const a={};s&&(a.uuid=n.uuid),o&&(a.slug=n.slug),r.push(a)}return r}const hh=3e5,mh=500,xh=15e3,gh=6e4,vh=6e4,yh="/api/v1/skills/stream",bh=250,kh=500,jh="/api/v1/studio/telemetry/sse",ei="vskill.studio.sse.sessionId";function vc(){var e;try{const r=(e=import.meta)==null?void 0:e.env;if(r&&typeof r=="object")return r}catch{}return{}}function wh(){if(typeof window>"u")return!1;const e=vc();if(e.VITE_VSKILL_DEBUG_SSE==="1"||e.VITE_VSKILL_DEBUG_SSE==="true")return!0;try{if(new URLSearchParams(window.location.search).get("debugSse")==="1")return!0}catch{}return!1}function Sh(){if(typeof window>"u")return!0;const e=vc();if(e.VITE_VSKILL_DISABLE_TELEMETRY==="1"||e.VITE_VSKILL_DISABLE_TELEMETRY==="true")return!0;try{if(new URLSearchParams(window.location.search).get("disableTelemetry")==="1")return!0}catch{}return!1}function bt(e,r){if(wh())try{const n=new Date().toISOString();r?console.debug(`[sse] ${n} ${e}`,r):console.debug(`[sse] ${n} ${e}`)}catch{}}function ti(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")try{return crypto.randomUUID()}catch{}const e=[];for(let r=0;r<16;r++)e.push(Math.floor(Math.random()*256).toString(16).padStart(2,"0"));return e[6]=(parseInt(e[6],16)&15|64).toString(16).padStart(2,"0"),e[8]=(parseInt(e[8],16)&63|128).toString(16).padStart(2,"0"),e.slice(0,4).join("")+"-"+e.slice(4,6).join("")+"-"+e.slice(6,8).join("")+"-"+e.slice(8,10).join("")+"-"+e.slice(10,16).join("")}function Ch(){if(typeof window>"u")return"";try{const e=window.sessionStorage.getItem(ei);if(e)return e;const r=ti();return window.sessionStorage.setItem(ei,r),r}catch{return ti()}}function ri(e){const r=new Map;for(const s of e)r.set(s.name,s);const n=new Map;for(const s of e){const o=s.name.split("/").pop()||s.name;o!==s.name&&n.set(o,(n.get(o)??0)+1)}for(const s of e){const o=s.name.split("/").pop()||s.name;o!==s.name&&((n.get(o)??0)>1||r.has(o)||r.set(o,s))}return r}function ni(e){let r=0;for(const n of e)n.updateAvailable&&r++;return r}function Eh(e){if(!e||typeof e!="object")return!1;const r=e;return r.type==="skill.updated"&&typeof r.eventId=="string"&&typeof r.skillId=="string"&&typeof r.version=="string"}function Nh(e){if(!e||typeof e!="object")return!1;const r=e;return typeof r.submissionId=="string"&&r.submissionId.length>0&&typeof r.state=="string"&&r.state.length>0}function Rh(e){const r=(e==null?void 0:e.intervalMs)??hh,n=(e==null?void 0:e.debounceMs)??mh,s=(e==null?void 0:e.timeoutMs)??xh,o=(e==null?void 0:e.staleAfterMs)??gh,a=(e==null?void 0:e.disconnectFallbackMs)??vh,i=(e==null?void 0:e.streamUrlBase)??yh,l=(e==null?void 0:e.replayIntervalMs)??bh,d=ph(e==null?void 0:e.userId),u=c.useMemo(()=>{const O=(e==null?void 0:e.skillIds)??[];if(O.length===0&&!d)return"";const G=d?1:0,K=[...new Set(O)].filter(ee=>ee!==d).sort().slice(0,kh-G),te=d?[...K,d]:K;return te.length===0?"":te.sort().join(",")},[e==null?void 0:e.skillIds,d]),p=c.useMemo(()=>{const O=(e==null?void 0:e.trackingSkillIds)??(e==null?void 0:e.skillIds)??[];return O.length===0?"":[...O].sort().join(",")},[e==null?void 0:e.trackingSkillIds,e==null?void 0:e.skillIds]),[f,h]=c.useState([]),[m,v]=c.useState(()=>new Map),[x,g]=c.useState(0),[b,y]=c.useState(!1),[j,S]=c.useState(null),[k,T]=c.useState(null),w=c.useRef(null),E=c.useRef(null),R=c.useRef(null),N=c.useRef(null),I=c.useRef(!0),A=c.useRef(new Set),[$,W]=c.useState(()=>u?"connecting":"fallback"),C=c.useRef($);C.current=$;const L=c.useRef(new Set),P=c.useRef(null),F=c.useSyncExternalStore(O=>tr.subscribe(O),()=>tr.getSnapshot(),()=>tr.getSnapshot()),V=F.size,le=c.useCallback(O=>{if(Sh()||L.current.has(O))return;L.current.add(O);const G=Ch(),K=Date.now(),te={event:O,sessionId:G,sourceTier:"platform-proxy",timestamp:K};O!=="connected"&&P.current!=null&&(te.durationSinceOpenMs=K-P.current),Vf(jh,te)},[]),H=c.useCallback(async()=>{y(!0);const O=new AbortController,G=setTimeout(()=>O.abort(),s);try{const K=await Promise.race([de.getSkillUpdates(),new Promise((te,ee)=>{O.signal.addEventListener("abort",()=>{ee(new Error("TIMEOUT"))})})]);if(K==="TIMEOUT")throw new Error("TIMEOUT");if(!I.current)return;h(K),v(ri(K)),g(ni(K)),E.current=Date.now(),S(E.current),T(null)}catch(K){if(!I.current)return;T(K instanceof Error?K:new Error(String(K)))}finally{clearTimeout(G),I.current&&y(!1)}},[s]),U=c.useCallback(()=>{if(w.current)return w.current;const O=H().finally(()=>{w.current=null});return w.current=O,O},[H]),re=c.useCallback(()=>{R.current==null&&(R.current=setInterval(()=>{U()},r))},[r,U]),xe=c.useCallback(()=>{R.current!=null&&(clearInterval(R.current),R.current=null)},[]),he=c.useCallback(()=>{if(typeof window>"u")return;const O=Xf();O.length!==0&&(bt("queue-drain",{count:O.length}),O.forEach((G,K)=>{let te;te=setTimeout(()=>{if(A.current.delete(te),!I.current)return;const q=tr.getSnapshot().get(G.skillId);if(q&&q.eventId!==G.eventId){bt("queue-replay-skip-superseded",{queuedEventId:G.eventId,currentEventId:q.eventId});return}try{window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:G.message,severity:G.severity,skillId:G.skillId,version:G.version,eventId:G.eventId}})),bt("queue-replay",{eventId:G.eventId})}catch{}},K*l),A.current.add(te)}))},[l]),z=c.useCallback(()=>{for(const O of A.current)clearTimeout(O);A.current.clear()},[]);c.useEffect(()=>{I.current=!0,(E.current==null||Date.now()-E.current>o)&&U(),(typeof document>"u"||document.visibilityState!=="hidden")&&re();const K=()=>{if(N.current&&(clearTimeout(N.current),N.current=null),document.visibilityState==="hidden"){xe();return}he(),N.current=setTimeout(()=>{N.current=null,(E.current==null||Date.now()-E.current>o)&&U(),re()},n)};return typeof document<"u"&&document.addEventListener("visibilitychange",K),()=>{I.current=!1,typeof document<"u"&&document.removeEventListener("visibilitychange",K),N.current&&clearTimeout(N.current),z(),xe()}},[]);const X=c.useCallback(async O=>{if(O.length!==0)try{const G=await de.checkSkillUpdates(O);if(!I.current||G.length===0)return;const K=Date.now(),te=G.filter(q=>q.skillId&&q.eventId&&q.version).map(q=>({skillId:q.skillId,version:q.version,eventId:q.eventId,publishedAt:q.publishedAt,diffSummary:q.diffSummary,receivedAt:K}));te.length>0&&tr.mergeBulk(te);const ee=G.filter(q=>typeof q.trackedForUpdates=="boolean"||typeof q.updateAvailable=="boolean").map(q=>({name:q.name??q.skillId,installed:q.installed??"",latest:q.latest??null,updateAvailable:q.updateAvailable??!1,trackedForUpdates:typeof q.trackedForUpdates=="boolean"?q.trackedForUpdates:void 0}));ee.length>0&&h(q=>{const oe=new Map;for(const _ of q)oe.set(_.name,_);let ve=0;for(const _ of ee){const Y=_.name,Z=oe.get(Y);if(Z){const ne={...Z};Z.trackedForUpdates===void 0&&_.trackedForUpdates!==void 0&&(ne.trackedForUpdates=_.trackedForUpdates),oe.set(Y,ne)}else oe.set(Y,{name:_.name,installed:_.installed??"",latest:_.latest??null,updateAvailable:_.updateAvailable??!1,trackedForUpdates:_.trackedForUpdates}),ve+=1}if(ve===0&&oe.size===q.length)return q;const ke=[...oe.values()];return v(ri(ke)),g(ni(ke)),ke})}catch{}},[]);c.useEffect(()=>{const O=u||p;if(!O){W("fallback");return}if(typeof window>"u"||typeof EventSource>"u"){W("fallback");return}W("connecting");const G=O.split(",");let K=`${i}?skills=${encodeURIComponent(O)}`;const te=oh();te&&(K+=`&studioToken=${encodeURIComponent(te)}`);let ee=null,q=null,oe=null;const ve=()=>{q==null&&(q=setTimeout(()=>{q=null,I.current&&C.current!=="connected"&&(W("fallback"),bt("fallback-flipped",{reason:"watchdog-timeout"}),le("fallback"))},a),bt("fallback-armed",{fallbackMs:a}))},ke=()=>{q!=null&&(clearTimeout(q),q=null)};ve();const _=1e3,Y=()=>{I.current&&oe==null&&(oe=setTimeout(()=>{if(oe=null,!!I.current&&!(ee&&ee.readyState!==EventSource.CLOSED)){if(ee)try{ee.close()}catch{}bt("reconnect-scheduled",{backoffMs:_}),le("reconnect-scheduled"),me()}},_))},Z=ce=>{if(!I.current)return;let ue;try{ue=JSON.parse(ce.data)}catch{return}if(!Eh(ue))return;const je=tr.ingest(ue);if(bt("message",{eventId:ue.eventId,skillId:ue.skillId,outcome:je}),je==="duplicate")return;const Re=typeof document>"u"||document.visibilityState!=="hidden",Ae=`${ue.skillId} updated to ${ue.version}`;if(Re)try{window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:Ae,severity:"info",skillId:ue.skillId,version:ue.version,eventId:ue.eventId}}))}catch{}else{const Me={message:Ae,severity:"info",skillId:ue.skillId,version:ue.version,eventId:ue.eventId,enqueuedAt:Date.now()},_e=Qf(Me);bt("queue-enqueue",{eventId:ue.eventId,outcome:_e})}},ne=()=>{I.current&&(bt("gone",{skillsCount:G.length}),le("gone-frame-received"),tr.clearSeen(),X(G))},fe=ce=>{if(!I.current)return;let ue;try{ue=JSON.parse(ce.data)}catch{return}if(Nh(ue)){if(!xc(ue.submissionId,ue.state)){bt("submission-decision-duplicate",{submissionId:ue.submissionId,state:ue.state});return}bt("submission-decision",{submissionId:ue.submissionId,state:ue.state}),gc(ue.submissionId,ue.skillName??"",ue.state),us.has(ue.state)&&U()}},me=()=>{I.current&&(ee=new EventSource(K),bt("open-attempt",{url:K}),ee.onopen=()=>{I.current&&(ke(),W("connected"),P.current=Date.now(),bt("open",{url:K}),le("connected"))},ee.onerror=()=>{I.current&&(bt("error",{readyState:ee==null?void 0:ee.readyState}),ve(),ee&&ee.readyState===EventSource.CLOSED&&Y())},ee.onmessage=Z,ee.addEventListener("gone",ne),ee.addEventListener("submission_decision",fe))};return me(),()=>{if(ke(),oe!=null&&(clearTimeout(oe),oe=null),ee){try{ee.removeEventListener("gone",ne)}catch{}try{ee.removeEventListener("submission_decision",fe)}catch{}try{ee.close()}catch{}}z()}},[u,p,i,a,X,le,z]),c.useEffect(()=>{if(!p)return;const O=p.split(",");X(O)},[p,X]);const M=c.useCallback(O=>{tr.dismiss(O)},[]);return{updates:f,updatesMap:m,updateCount:x,isRefreshing:b,lastFetchAt:j,error:k,refresh:U,updatesById:F,pushUpdateCount:V,status:$,dismiss:M}}async function Th(){return yc("account_get_platform_url"),{platformBaseUrl:"",authMode:"cookie",getAuthHeader:async()=>null}}async function Ih(){const e=await yc("account_get_user_summary");return e&&typeof e=="object"?e:{signedIn:!1,login:null,avatarUrl:null,tier:"free"}}async function yc(e){var s;if(typeof window>"u")return null;const n=(s=window.__TAURI_INTERNALS__)==null?void 0:s.invoke;if(!n)return null;try{return await n(e)}catch(o){return console.warn(`[AccountTauriBridge] ${e} failed:`,o),null}}function bc(){var e;return typeof window>"u"?!1:!!((e=window.__TAURI_INTERNALS__)!=null&&e.invoke)}const Lh={signedIn:!1,login:null,avatarUrl:null,tier:"free"};function kc(){const[e,r]=c.useState(Lh);return c.useEffect(()=>{let n=!1;const s=()=>{Ih().then(o=>{n||r(o)})};return s(),typeof window>"u"?()=>{n=!0}:(window.addEventListener("studio:account-summary-refresh",s),()=>{n=!0,window.removeEventListener("studio:account-summary-refresh",s)})},[]),e}const Ah={selectedSkill:null,mode:"browse",searchQuery:"",skills:[],skillsLoading:!0,skillsError:null,isMobile:!1,mobileView:"list",updateNotificationDismissed:!1,revealSkillId:null};function Ph(e,r){switch(r.type){case"SELECT_SKILL":return{...e,selectedSkill:r.skill,mode:"browse",mobileView:e.isMobile?"detail":e.mobileView};case"CLEAR_SELECTION":return{...e,selectedSkill:null};case"SET_MODE":return{...e,mode:r.mode,selectedSkill:r.mode==="create"?null:e.selectedSkill};case"SET_SEARCH":return{...e,searchQuery:r.query};case"SET_SKILLS":return{...e,skills:r.skills,skillsLoading:!1,skillsError:null};case"SET_SKILLS_ERROR":return{...e,skillsError:r.error,skillsLoading:!1};case"SET_SKILLS_LOADING":return{...e,skillsLoading:r.loading};case"SET_MOBILE":return{...e,isMobile:r.isMobile};case"SET_MOBILE_VIEW":return{...e,mobileView:r.view};case"DISMISS_UPDATE_NOTIFICATION":return{...e,updateNotificationDismissed:!0};case"REVEAL_SKILL":return{...e,selectedSkill:r.skill,revealSkillId:`${r.skill.plugin}/${r.skill.skill}`,mode:"browse",mobileView:e.isMobile?"detail":e.mobileView};case"CLEAR_REVEAL":return{...e,revealSkillId:null};default:return e}}const jc=c.createContext(null),wc=jc;function Lt(){const e=c.useContext(wc);if(!e)throw new Error("useStudio must be used within StudioProvider");return e}function $h({children:e}){const[r,n]=c.useReducer(Ph,Ah),s=Hf("(max-width: 767px)");c.useEffect(()=>{n({type:"SET_MOBILE",isMobile:s})},[s]);const[o,a]=c.useState(()=>{try{const z=window.localStorage.getItem("vskill.studio.prefs");if(!z)return null;const X=JSON.parse(z);return typeof X.activeAgent=="string"?X.activeAgent:null}catch{return null}}),[i,l]=c.useState(o!==null);c.useEffect(()=>{function z(X){if(!(X instanceof CustomEvent))return;const M=X.detail;M!=null&&M.agentId&&(a(M.agentId),l(!0))}return window.addEventListener("studio:agent-changed",z),()=>window.removeEventListener("studio:agent-changed",z)},[]),c.useEffect(()=>{if(i)return;let z=!1;return de.getAgents().then(X=>{if(z)return;const M=(X==null?void 0:X.suggested)??"claude-code";a(O=>O??M),l(!0)}).catch(()=>{z||(a(X=>X??"claude-code"),l(!0))}),()=>{z=!0}},[i]);const d=c.useCallback(()=>{if(!i||!o)return Promise.resolve();n({type:"SET_SKILLS_LOADING",loading:!0});const z={agent:o};return de.getSkills(z).then(X=>{n({type:"SET_SKILLS",skills:X});const M=window.location.hash,O=M.match(/^#\/skills\/(project|personal|plugin)\/([^/]+)\/([^/?]+)/);if(O){const[,K,te,ee]=O,q=K,oe=X.find(ke=>ke.plugin===te&&ke.skill===ee&&ke.source===q);if(oe){n({type:"SELECT_SKILL",skill:{plugin:te,skill:ee,origin:oe.origin,source:oe.source}});return}const ve=X.find(ke=>ke.plugin===te&&ke.skill===ee);ve&&n({type:"SELECT_SKILL",skill:{plugin:te,skill:ee,origin:ve.origin,source:ve.source}});return}const G=M.match(/^#\/skills\/([^/]+)\/([^/?]+)/);if(G){const[,K,te]=G,ee=X.find(q=>q.plugin===K&&q.skill===te);ee&&n({type:"SELECT_SKILL",skill:{plugin:K,skill:te,origin:ee.origin,source:ee.source}})}}).catch(X=>n({type:"SET_SKILLS_ERROR",error:X.message}))},[o,i]);c.useEffect(()=>{d()},[d]),c.useEffect(()=>{function z(){d()}return window.addEventListener("studio:project-changed",z),()=>window.removeEventListener("studio:project-changed",z)},[d]);const u=c.useCallback(z=>{n({type:"SELECT_SKILL",skill:z}),window.location.hash=z.source?`/skills/${z.source}/${z.plugin}/${z.skill}`:`/skills/${z.plugin}/${z.skill}`},[]),p=c.useRef(r.skills);c.useEffect(()=>{p.current=r.skills},[r.skills]);const f=c.useCallback((z,X)=>{const M=p.current,O=z?M.find(ee=>ee.plugin===z&&ee.skill===X):M.find(ee=>ee.skill===X&&ee.source!=="plugin");if(!z&&!O){typeof console<"u"&&console.warn(`[StudioContext] revealSkill: no plugin provided and skill "${X}" not yet in state — skipping reveal`);return}const G=(O==null?void 0:O.plugin)??z,K=(O==null?void 0:O.origin)??"source",te=O==null?void 0:O.source;n({type:"REVEAL_SKILL",skill:{plugin:G,skill:X,origin:K,source:te}}),window.location.hash=te?`/skills/${te}/${G}/${X}`:`/skills/${G}/${X}`},[]),h=c.useCallback(()=>{n({type:"CLEAR_REVEAL"})},[]),m=c.useCallback(()=>{n({type:"CLEAR_SELECTION"}),window.location.hash.startsWith("#/skills/")&&history.replaceState(null,"",window.location.pathname+window.location.search)},[]),v=c.useCallback(z=>{n({type:"SET_MODE",mode:z})},[]),x=c.useCallback(z=>{n({type:"SET_SEARCH",query:z})},[]),g=c.useCallback(z=>{n({type:"SET_MOBILE_VIEW",view:z})},[]),b=c.useCallback(()=>{n({type:"DISMISS_UPDATE_NOTIFICATION"})},[]),y=c.useRef(new Map),j=c.useRef(""),S=c.useRef(!1),[k,T]=c.useState(""),w=c.useRef(""),E=c.useRef(""),[R,N]=c.useState(""),I=c.useMemo(()=>r.skills.filter(z=>!z.sourcePrivate).map(z=>`${z.plugin}/${z.skill}`),[r.skills]),A=c.useMemo(()=>{const z=k?k.split(",").filter(Boolean):[],X=R?R.split(",").filter(Boolean):[];return z.length===0&&X.length===0?[]:[...new Set([...z,...X])]},[k,R]),$=kc(),W=$.signedIn?$.userId:void 0,C=Rh({skillIds:A,trackingSkillIds:I,userId:W}),L=c.useMemo(()=>A.length,[A]),P=c.useRef("");c.useEffect(()=>{const z=r.skills.filter(K=>K.origin==="installed"&&!K.sourcePrivate);if(z.length===0){T(""),P.current="";return}const X=new Map;for(const K of C.updates)X.set(K.name.split("/").pop()||K.name,K);const M=z.map(K=>{const te=X.get(K.skill),ee=K.currentVersion??(te==null?void 0:te.installed)??K.version??K.pluginVersion??"1.0.0";return{plugin:K.plugin,skill:K.skill,name:(te==null?void 0:te.name)??K.skill,currentVersion:ee}}),O=M.map(K=>`${K.plugin}/${K.skill}@${K.currentVersion}#${K.name}`).sort().join("|");if(O===P.current)return;P.current=O;let G=!1;return de.resolveInstalledSkillIds(M).then(K=>{if(G)return;const q=[...fh(K).flatMap(oe=>[oe.uuid,oe.slug].filter(Boolean))].sort().join(",");q!==j.current&&(j.current=q,y.current=new Map(K.map(oe=>[`${oe.plugin}/${oe.skill}`,{uuid:oe.uuid,slug:oe.slug}])),T(q))}).catch(K=>{if(G||(P.current=""),!S.current){S.current=!0;const te=K instanceof Error?K.message:String(K);console.warn("[studio] resolveInstalledSkillIds failed (using polling fallback):",te)}}),()=>{G=!0}},[r.skills,C.updates]),c.useEffect(()=>{const z=r.skills.filter(G=>G.origin==="source"&&!G.sourcePrivate&&typeof G.author=="string"&&G.author.length>0);if(z.length===0){w.current!==""&&(w.current="",N("")),E.current="";return}const X=z.map(G=>({name:G.skill,author:G.author})),M=X.map(G=>`${G.name.toLowerCase()}|${G.author}`).sort().join(`
15
+ `);if(M===E.current)return;E.current=M;let O=!1;return de.lookupSkillsByName(X).then(G=>{if(O)return;const K=G.flatMap(ee=>[ee.uuid,ee.slug]).filter(ee=>typeof ee=="string"&&ee.length>0),te=[...new Set(K)].sort().join(",");te!==w.current&&(w.current=te,N(te))}).catch(()=>{O||(E.current="")}),()=>{O=!0}},[r.skills]);const F=c.useMemo(()=>{const z=r.skills.map(X=>{if(!X.updateAvailable&&X.latestVersion===void 0&&X.trackedForUpdates===void 0)return X;const M={...X};return delete M.updateAvailable,delete M.currentVersion,delete M.latestVersion,delete M.trackedForUpdates,M});return Uf(z,C.updates)},[r.skills,C.updates]),V=c.useMemo(()=>{const z={source:0,installed:0};for(const X of F)X.updateAvailable&&(z[X.origin]+=1);return z},[F]),le=c.useMemo(()=>({...r,skills:F}),[r,F]),H=C.updateCount,U=C.refresh,re=C.isRefreshing,xe=c.useCallback((z,X)=>{U(),d(),Ue(`versions/${z}/${X}`),C.dismiss(`${z}/${X}`)},[U,d,C]),he=c.useMemo(()=>({state:le,selectSkill:u,clearSelection:m,setMode:v,setSearch:x,setMobileView:g,refreshSkills:d,updateCount:H,dismissUpdateNotification:b,updates:C.updates,outdatedByOrigin:V,isRefreshingUpdates:re,refreshUpdates:U,revealSkill:f,clearReveal:h,updatesById:C.updatesById,pushUpdateCount:C.pushUpdateCount,updateStreamStatus:C.status,dismissPushUpdate:C.dismiss,activeAgent:o,onSkillUpdated:xe,trackedSkillCount:L}),[le,u,m,v,x,g,d,H,b,C.updates,V,re,U,f,h,C.updatesById,C.pushUpdateCount,C.status,C.dismiss,o,xe,L]);return t.jsx(wc.Provider,{value:he,children:e})}const Mh={config:null,loading:!0};function Fh(e,r){switch(r.type){case"SET_CONFIG":return{config:r.config,loading:!1};case"SET_LOADING":return{...e,loading:!0};default:return e}}const Sc=c.createContext(null);function yr(){const e=c.useContext(Sc);if(!e)throw new Error("useConfig must be used within ConfigProvider");return e}function Dh({children:e}){const[r,n]=c.useReducer(Fh,Mh),s=c.useCallback(()=>{de.getConfig().then(i=>n({type:"SET_CONFIG",config:i})).catch(()=>{})},[]);c.useEffect(()=>{s()},[s]);const o=c.useCallback(async(i,l)=>{const d=await de.setConfig(i,l);return n({type:"SET_CONFIG",config:d}),d},[]),a=c.useMemo(()=>({config:r.config,loading:r.loading,updateConfig:o,refreshConfig:s}),[r,o,s]);return t.jsx(Sc.Provider,{value:a,children:e})}function zh({topRail:e,sidebar:r,main:n,statusBar:s,resizeHandle:o,banner:a,liveMessage:i,sidebarWidth:l=320,sidebarHidden:d=!1}){const u={"--top-rail-height":"48px","--status-bar-height":"28px","--sidebar-width":`${l}px`,display:"grid",gridTemplateRows:"var(--top-rail-height) 1fr var(--status-bar-height)",height:"100vh",overflow:"hidden",background:"var(--bg-canvas)",color:"var(--text-primary)"},p={display:"grid",gridTemplateColumns:d?"1fr":"var(--sidebar-width) auto 1fr",minHeight:0,overflow:"hidden"};return t.jsxs("div",{className:"studio-shell",style:u,children:[a,t.jsx("header",{style:{borderBottom:"1px solid var(--border-default)",background:"var(--bg-canvas)",display:"flex",alignItems:"center",minHeight:0},children:e}),t.jsxs("div",{style:p,children:[!d&&t.jsx("aside",{"aria-label":"Skills sidebar",style:{minHeight:0,overflow:"hidden",borderRight:o?"none":"1px solid var(--border-default)",background:"var(--bg-canvas)",display:"flex",flexDirection:"column"},children:r}),!d&&o,t.jsx("main",{style:{minHeight:0,overflow:"auto",background:"var(--bg-canvas)"},children:n})]}),t.jsx("footer",{role:"contentinfo",style:{borderTop:"1px solid var(--border-default)",background:"var(--bg-canvas)",display:"flex",alignItems:"center",minHeight:0},children:s}),t.jsx("div",{"aria-live":"polite",role:"status",style:{position:"absolute",width:1,height:1,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",border:0},children:i??""})]})}const Bh={sectionOwn:"Own",sectionInstalled:"Installed",searchPlaceholder:"Search skills",searchShortcutHint:"Press / to search",emptyOwnHeadline:"No skills yet.",emptyOwnBody:"Run vskill new <name> to create one.",emptyInstalledHeadline:"No installed skills.",emptyInstalledBody:"Run vskill install <skill> to add one.",emptyFilteredHeadline:"No matches in this section.",emptyFilteredBody:"Clear the search or try another query.",loadErrorHeadline:"Couldn't load skills.",loadErrorRetry:"Retry",duplicateBadge:"synced from Own",updateAvailableBadge:"Update available",countBadgeFiltered:(e,r)=>`${e} of ${r}`},_h={appTitle:"Skill Studio",commandPaletteButtonLabel:"Open command palette",commandPaletteHint:"⌘K",themeToggleLight:"Switch to light theme",themeToggleDark:"Switch to dark theme",themeToggleAuto:"Switch to auto theme",projectPathLabel:"Project",modelLabel:"Model",healthLabel:"Health"},Oh={tabOverview:"Overview",tabVersions:"Versions",tabBenchmark:"Benchmark",emptyHeadline:"Select a skill to see details.",emptyBody:"Pick one from the sidebar.",loadErrorHeadline:e=>`Couldn't load SKILL.md for ${e}.`,loadErrorBody:"Check the file path and your workspace permissions.",openInEditor:"Open in editor",copyPath:"Copy path",copyConfigSnippet:"Copy config snippet",depNotInstalledTooltip:"Not installed",missingValue:"—",announceViewingOwn:e=>`Viewing ${e} (Own)`,announceViewingInstalled:e=>`Viewing ${e} (Installed)`,moreFields:"More fields",sourceAgent:"Source agent",noMcpDependencies:"No MCP dependencies.",filesystemGroup:"Filesystem",benchmarkGroup:"Benchmark",metadataGroup:"Frontmatter"},Wh={open:"Open",copyPath:"Copy Path",revealInEditor:"Reveal in Editor",edit:"Edit",duplicate:"Duplicate",cloneToAuthoring:"Clone to authoring…",runBenchmark:"Run Benchmark",update:"Update",uninstall:"Uninstall",retry:"Retry",delete:"Delete",deletePluginTooltip:"Plugin skills are managed by their owning plugin — uninstall the plugin to remove.",undo:"Undo"},Uh={inputPlaceholder:"Type a command or search",emptyResults:"No matches. Try a different query.",groupNavigation:"Navigation",groupActions:"Actions",groupTheme:"Theme",actionSelectSkill:"Select skill",actionRunBenchmark:"Run benchmark",actionSwitchTheme:"Switch theme",actionNewSkill:"New skill",closeLabel:"Close palette"},Hh={title:"Keyboard shortcuts",closeLabel:"Close shortcuts",groupNavigation:"Navigation",groupActions:"Actions",groupTheme:"Theme",search:"Focus search",moveDown:"Move selection down",moveUp:"Move selection up",openSelected:"Open selected skill",openPalette:"Open command palette",openShortcuts:"Open this cheatsheet",toggleSidebar:"Toggle sidebar",toggleTheme:"Toggle theme"},Vh={pathCopied:"Path copied.",configCopied:"Config copied.",skillDuplicated:"Skill duplicated.",cloneStarted:"Cloning to authoring…",cloneSucceeded:"Cloned to authoring.",cloneFailed:"Clone failed. Check eval-server logs.",benchmarkQueued:"Benchmark queued.",themeUpdated:"Theme updated.",skillUpdated:"Skill updated.",openingInEditor:"Opening in editor…",noEditor:"No editor found. Set $VISUAL or $EDITOR, or install code/cursor.",openFailed:"Could not open in editor.",skillNotFound:"Skill not found on disk.",uninstallNotImplemented:"Uninstall is not yet available from this menu.",actionFailed:"Action failed. Retry or check logs.",networkError:"Network error. Check your connection.",permissionDenied:"Permission denied. Check file access.",unknownError:"Something went wrong. Retry or check logs."},Gh={disconnected:"Disconnected — reconnecting…",reconnected:"Reconnected.",loading:"Loading skills…",loadingPlaceholderCount:"—"},Kh={fieldRequired:"This field is required.",nameInvalid:"Use letters, numbers, and hyphens.",descriptionRequired:"Description is required.",saveFailed:"Save failed. Check the form for errors."},qh={boundaryHeadline:"Something broke in this view.",boundaryBody:"Reload the page to recover.",boundaryAction:"Reload"},Yh={triggerLabel:"Agent and model",popoverTitle:"Select agent and model",footerHint:"↑↓ navigate · Enter select · Esc close",settingsButton:"Settings",keyboardShortcut:"⌘K",noModelsYet:"No models yet.",searchPlaceholder:"Search 300+ models…",noMatches:e=>`No models match "${e}"`,clearSearch:"Clear",currentlyActive:"Currently active"},Jh={claudeCli:{name:"Claude Code",caption:"Delegates to the `claude` CLI — your existing Claude Code session handles quota.",missingBinary:"Claude Code not found. Install it: `npm install -g @anthropic-ai/claude-code`. Or choose a provider with an API key.",installCta:"Install Claude Code →",installUrl:"https://docs.claude.com/en/docs/claude-code"},anthropic:{name:"Anthropic API",caption:"Direct access via your Anthropic API key.",addKeyCta:"Add API key →",keyIssuanceUrl:"https://platform.claude.com/settings/keys",keyPrefix:"sk-ant-"},openai:{name:"OpenAI",caption:"GPT-4, GPT-5, and the o-series reasoning models.",addKeyCta:"Add API key →",keyIssuanceUrl:"https://platform.openai.com/api-keys",keyPrefix:"sk-",pastePlaceholder:"Paste OpenAI API key (sk-proj-...)"},openrouter:{name:"OpenRouter",caption:"300+ models from every major vendor.",addKeyCta:"Add API key →",emptyCardBody:"Add your OpenRouter API key to browse 300+ models",keyIssuanceUrl:"https://openrouter.ai/settings/keys",keyPrefix:"sk-or-"},cursor:{name:"Cursor",caption:"Cursor IDE composer.",installCta:"Install Cursor →"},codexCli:{name:"Codex CLI",caption:"OpenAI Codex CLI.",installCta:"Install Codex CLI →"},geminiCli:{name:"Gemini CLI",caption:"Google Gemini CLI.",installCta:"Install Gemini CLI →"},copilot:{name:"GitHub Copilot",caption:"GitHub Copilot CLI.",installCta:"Install Copilot →"},zed:{name:"Zed",caption:"Zed editor.",installCta:"Install Zed →"},ollama:{name:"Ollama",caption:"Local models, free.",startServiceCta:"Start service →"},lmStudio:{name:"LM Studio",caption:"Local models, free.",startServiceCta:"Start LM Studio server →",startServiceTooltip:"Open LM Studio → Developer tab → Start Server (default port 1234)."}},Qh={subscriptionBilling:"· subscription",free:"· free"},Xh={title:"Settings",sectionApiKeys:"API Keys",banner:"Keys are stored locally on this device only. Never synced, never committed to git, never transmitted off-device except to the provider's own API.",storagePath:e=>`Keys stored at ${e} · protected by file permissions (0600 on macOS/Linux)`,storagePathFallback:"Keys stored locally on this device.",copyPath:"Copy path",pathCopied:"Path copied.",show:"Show",hide:"Hide",paste:"Paste",save:"Save",remove:"Remove",removeConfirm:e=>`Remove ${e} API key?`,keyStoredAt:e=>`Key stored locally — updated ${e}`,noKey:"No key stored",enterNonEmpty:"Enter a non-empty key",prefixWarn:e=>`This doesn't look like a typical ${e} key. Save anyway?`,keySaved:e=>`${e} API key saved (local only, never synced)`,keyRemoved:e=>`${e} API key removed`},Zh={providersLabel:"Providers",providerSummary:(e,r)=>`${e}/${r} providers`,locked:e=>`${e} — locked. Click to add a key.`,lockedCli:e=>`${e} — locked. Click for install instructions.`,unlocked:e=>`${e} — unlocked.`},em={triggerAriaLabel:"Choose active agent for the sidebar",popoverTitle:"Choose active agent",statsInstalled:"Installed",statsGlobal:"Global",statsPlugins:"Plugins",statsLastSync:"Last sync",statsHealthOk:"Fresh",statsHealthStale:"Updates available",statsHealthMissing:"Not detected",switchCta:"Switch for this studio session",notDetectedSubheading:"Not detected",setUpCta:e=>`Set up ${e}`,sharedFolderBanner:e=>`Shared folder — consumed by ${e}`},tm={ownLabel:"Own",installedLabel:"Installed",globalLabel:"Global",emptyOwn:"No authored skills — run vskill new.",emptyInstalled:e=>`No skills installed for ${e} in this project — run vskill install.`,emptyGlobal:e=>`No global skills for ${e} — run vskill install --global.`},rm={compactLabel:"Uses your Claude Code session · overflow billed at API rates",tooltip:"vSkill delegates to the `claude` CLI — your existing Claude Code session handles quota. If you've enabled extra usage in your account settings, excess runs at standard API rates. Run /usage in Claude Code or visit claude.com Settings → Usage to see remaining quota — vskill can't display it directly.",firstUseBanner:"Claude Code uses your existing session. No API key needed — vskill just runs the official claude binary on your behalf.",learnMore:"Learn more"},nm={title:e=>`Set up ${e}`,close:"Close",copy:"Copy",copied:"Copied",requiredEnv:"Required env vars",getKey:"Get a key",installRun:"Install & run",learnMore:"Learn more",fallbackTitle:"No setup guide available",fallbackBody:"We don't ship a setup guide for this provider yet."},sm={groupAvailable:"Available",groupAuthoring:"Authoring",sourceProject:"Project",sourcePersonal:"Personal",sourcePlugin:"Plugins",authoringSkills:"Skills"},om={anthropic:{name:"Anthropic API",description:"Direct API access to Claude via your Anthropic API key. Pay-per-token billing.",envVars:["ANTHROPIC_API_KEY"],keyUrl:"https://platform.claude.com/settings/keys",learnMoreUrl:"https://docs.claude.com/en/docs/get-started"},openai:{name:"OpenAI",description:"Access to GPT-4, GPT-5 and the o-series reasoning models via your OpenAI API key.",envVars:["OPENAI_API_KEY"],keyUrl:"https://platform.openai.com/api-keys",learnMoreUrl:"https://platform.openai.com/docs"},openrouter:{name:"OpenRouter",description:"One API key, 300+ models from Anthropic, OpenAI, Google, Meta, and more.",envVars:["OPENROUTER_API_KEY"],keyUrl:"https://openrouter.ai/keys",learnMoreUrl:"https://openrouter.ai/docs"},gemini:{name:"Gemini",description:"Google Gemini models (2.5 Pro, Flash) via Google AI Studio. Free tier available.",envVars:["GEMINI_API_KEY"],keyUrl:"https://aistudio.google.com/apikey",learnMoreUrl:"https://ai.google.dev/gemini-api/docs"},ollama:{name:"Ollama",description:"Local models on your own machine. Zero external calls, zero cost after download.",envVars:["OLLAMA_HOST"],installCmd:"curl -fsSL https://ollama.com/install.sh | sh",startCmd:"ollama serve",pullExample:"ollama pull llama3.2",learnMoreUrl:"https://ollama.com/download"},lmStudio:{name:"LM Studio",description:"Desktop app + local server for running open models with a GUI. Compatible with the OpenAI API.",envVars:["LM_STUDIO_BASE_URL"],installCmd:"Download from https://lmstudio.ai and launch the app, then start the local server.",startCmd:"# In LM Studio: Developer → Start Server (default port 1234)",pullExample:"# In LM Studio: Discover → download any GGUF model",learnMoreUrl:"https://lmstudio.ai/docs"},claudeCode:{name:"Claude Code",description:"No API key needed if you're logged into Claude Code. vskill just runs the official claude binary on your behalf — your existing Claude Code session handles quota.",loginHint:"If you're not logged in, run claude in your terminal and authenticate with your Anthropic account.",learnMoreUrl:"https://docs.claude.com/en/docs/claude-code"}},B={sidebar:Bh,shell:_h,detail:Oh,actions:Wh,palette:Uh,shortcuts:Hh,toasts:Vh,connection:Gh,forms:Kh,errors:qh,picker:Yh,providers:Jh,models:Qh,settings:Xh,statusBar:Zh,scopePicker:em,scopeSection:tm,claudeCodeLabel:rm,setupDrawer:nm,setupProviders:om,scopeLabels:sm},si=["claude-cli","anthropic","openai","openrouter","cursor","codex-cli","gemini-cli","copilot","zed","ollama","lm-studio"],am={"claude-cli":".claude",cursor:".cursor","codex-cli":".codex","gemini-cli":".gemini",copilot:".github",zed:".zed"},im={"claude-cli":"claude",cursor:"cursor","codex-cli":"codex","gemini-cli":"gemini"},lm={"claude-cli":"cli-install",anthropic:"api-key",openai:"api-key",openrouter:"api-key",cursor:"cli-install","codex-cli":"cli-install","gemini-cli":"cli-install",copilot:"cli-install",zed:"cli-install",ollama:"start-service","lm-studio":"start-service"},cm={"claude-cli":"subscription",anthropic:"per-token",openai:"per-token",openrouter:"per-token",cursor:"subscription","codex-cli":"subscription","gemini-cli":"subscription",copilot:"subscription",zed:"subscription",ollama:"free","lm-studio":"free"};function dm(e,r){var l,d;const n=am[e.id]??null,s=im[e.id]??null,o=n?!!((l=r==null?void 0:r.wrapperFolders)!=null&&l[n]):!1,a=s?!!((d=r==null?void 0:r.binaries)!=null&&d[s]):!0,i=e.models.map(u=>({id:u.id,displayName:u.label,billingMode:cm[e.id]??"per-token",...u.pricing?{pricing:u.pricing}:{},...u.resolvedId?{resolvedId:u.resolvedId}:{}}));return{id:e.id,displayName:um(e.id,e.label),wrapperFolder:n,wrapperFolderPresent:o,binaryAvailable:a,endpointReachable:e.id==="ollama"||e.id==="lm-studio"?e.available:null,available:e.available,ctaType:e.available?null:lm[e.id]??null,models:i,resolvedModel:e.resolvedModel??null}}function um(e,r){return{"claude-cli":"Claude Code",anthropic:"Anthropic API",openai:"OpenAI API",openrouter:"OpenRouter",cursor:"Cursor","codex-cli":"Codex CLI","gemini-cli":"Gemini CLI",copilot:"GitHub Copilot",zed:"Zed",ollama:"Ollama","lm-studio":"LM Studio"}[e]??r}function pm(e){const r=new Map(e.map(s=>[s.id,s])),n=[];for(const s of si){const o=r.get(s);o&&n.push(o)}for(const s of e)si.includes(s.id)||n.push(s);return n}function Cc(e){const[r,n]=c.useState(null),[s,o]=c.useState("loading"),[a,i]=c.useState(null),[l,d]=c.useState(null),u=c.useRef(null),p=c.useRef(0),f=c.useRef(e==null?void 0:e.onStaleCatalog),h=c.useRef(e==null?void 0:e.onSetActiveError);c.useEffect(()=>{f.current=e==null?void 0:e.onStaleCatalog,h.current=e==null?void 0:e.onSetActiveError},[e==null?void 0:e.onStaleCatalog,e==null?void 0:e.onSetActiveError]);const m=c.useCallback(async()=>{try{const y=await fetch("/api/config");if(!y.ok)throw new Error(`/api/config returned ${y.status}`);const j=await y.json(),S=pm((j.providers||[]).map(k=>dm(k,j.detection)));n({agents:S,activeAgent:j.provider??null,activeModel:j.model??null}),o("ready"),i(null)}catch(y){o("error"),i(y.message)}},[]);c.useEffect(()=>{m()},[m]);const v=c.useCallback(async()=>{var j;const y=Date.now();if(!(y-p.current<5*6e4))try{const S=await fetch("/api/openrouter/models");if(!S.ok){S.status!==400&&d(`OpenRouter catalog fetch failed (${S.status})`);return}const k=await S.json();p.current=y,d(null),n(E=>{if(!E)return E;const R=E.agents.map(N=>{if(N.id!=="openrouter")return N;const A=(Array.isArray(k.models)?k.models:[]).filter(W=>W.id||W.name).map(W=>{const C=W.id||W.name;return{id:C,displayName:W.name??C,contextWindow:W.contextWindow,pricing:W.pricing,billingMode:"per-token"}});return{...N,models:A,catalogAgeMs:k.ageSec?k.ageSec*1e3:0,cacheStale:!!k.stale}});return{...E,agents:R}});const T=k.ageSec??0;(k.stale===!0||T>600)&&((j=f.current)==null||j.call(f,"openrouter",T*1e3))}catch(S){d(`OpenRouter catalog unreachable: ${S.message}`)}},[]),x=c.useCallback(y=>{u.current=y,y==="openrouter"&&v()},[v]),g=c.useCallback(()=>{p.current=0,m()},[m]),b=c.useCallback(async(y,j)=>{var T,w;let S;try{S=await fetch("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:y,model:j})})}catch(E){(T=h.current)==null||T.call(h,`Network error while setting ${y}: ${E.message}`);return}if(S.ok){n(E=>E&&{...E,activeAgent:y,activeModel:j});return}let k=`Failed to set ${y} (${S.status})`;try{const E=await S.json();E&&typeof E.error=="string"&&(k=E.error)}catch{}(w=h.current)==null||w.call(h,k)},[]);return{status:s,catalog:r,error:a,openRouterError:l,focusAgent:x,refresh:g,activeAgentId:(r==null?void 0:r.activeAgent)??null,activeModelId:(r==null?void 0:r.activeModel)??null,setActive:b}}function Ts({variant:e,label:r,onActivate:n,installUrl:s,tooltip:o}){function a(l){if(l.stopPropagation(),e==="cli-install"&&s){window.open(s,"_blank","noopener,noreferrer");return}n()}function i(l){(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),a(l))}return t.jsx("button",{type:"button","data-testid":`locked-cta-${e}`,onClick:a,onKeyDown:i,className:"inline-flex items-center gap-1.5 px-0 py-0 text-[11px] font-medium",style:{color:"var(--accent, var(--text-primary))",background:"transparent",border:"none",cursor:"pointer"},"aria-label":r,...o?{title:o}:{},children:r})}function Io({unlocked:e=!1,size:r=10}){return e?t.jsxs("svg",{width:r,height:r,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1"}),t.jsx("path",{d:"M5 7V4.5A3 3 0 0 1 11 3.5"})]}):t.jsxs("svg",{width:r,height:r,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1"}),t.jsx("path",{d:"M5 7V4.5A3 3 0 0 1 11 4.5V7"})]})}const fm=new Set(["claude-cli","claude-code"]);function oi(e){return fm.has(e)}const ai=new Set(["claude-cli","claude-code","anthropic","openai","openrouter","cursor","codex-cli","gemini-cli","copilot","zed"]);function hm({agents:e,activeAgentId:r,focusedAgentId:n,onFocus:s,onSelect:o,onOpenSettings:a}){const i=e.filter(d=>ai.has(d.id)),l=e.filter(d=>!ai.has(d.id));return t.jsxs("div",{role:"listbox","aria-label":"Agent","data-testid":"agent-list",style:{width:240,borderRight:"1px solid var(--border-default, var(--border-subtle))",display:"flex",flexDirection:"column",overflowY:"auto"},children:[i.map(d=>t.jsx(ii,{agent:d,isActive:d.id===r,isFocused:d.id===n,onFocus:s,onSelect:o,onOpenSettings:a},d.id)),l.length>0&&t.jsx("div",{style:{borderTop:"1px solid var(--border-default, var(--border-subtle))",margin:"4px 0"},"aria-hidden":"true"}),l.map(d=>t.jsx(ii,{agent:d,isActive:d.id===r,isFocused:d.id===n,onFocus:s,onSelect:o,onOpenSettings:a},d.id))]})}function ii({agent:e,isActive:r,isFocused:n,onFocus:s,onSelect:o,onOpenSettings:a}){const{providers:i}=B,l={"claude-cli":i.claudeCli.caption,anthropic:i.anthropic.caption,openrouter:i.openrouter.caption},d={"claude-cli":{label:i.claudeCli.installCta,url:i.claudeCli.installUrl},cursor:{label:i.cursor.installCta},"codex-cli":{label:i.codexCli.installCta},"gemini-cli":{label:i.geminiCli.installCta},copilot:{label:i.copilot.installCta},zed:{label:i.zed.installCta}},u=oi(e.id),p={minHeight:36,height:u?"auto":36,padding:u?"6px 12px":"0 12px",display:"flex",alignItems:"center",gap:8,cursor:"pointer",position:"relative",background:n?"var(--surface-muted, var(--surface-3))":"transparent",borderLeft:r?"1px solid var(--accent, var(--color-accent))":"1px solid transparent",fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif",fontSize:13,fontWeight:r?500:400,color:"var(--text-primary)"};return r&&(p.background="color-mix(in srgb, var(--accent, var(--color-accent)) 10%, transparent)"),t.jsxs("div",{role:"option","aria-selected":r,"data-testid":`agent-row-${e.id}`,"data-focused":n||void 0,tabIndex:n?0:-1,onMouseEnter:()=>s(e.id),onFocus:()=>s(e.id),onClick:()=>o(e.id),style:p,children:[e.wrapperFolder&&t.jsx("span",{"data-testid":`wrapper-dot-${e.id}`,"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",flexShrink:0,background:e.wrapperFolderPresent?"var(--accent, var(--color-accent))":"transparent",border:e.wrapperFolderPresent?"none":"1px solid var(--border-default, var(--border-subtle))"}}),!e.wrapperFolder&&t.jsx("span",{style:{width:6,height:6,flexShrink:0},"aria-hidden":"true"}),t.jsxs("span",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.displayName}),oi(e.id)&&t.jsx("span",{"data-testid":"claude-code-billing-label",title:B.claudeCodeLabel.tooltip,style:{fontSize:10,color:"var(--text-secondary, var(--text-tertiary))",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:1},children:B.claudeCodeLabel.compactLabel})]}),t.jsx("span",{"aria-label":e.available?"available":"locked",style:{color:e.available?"var(--accent, var(--color-accent))":"var(--text-muted, var(--text-tertiary))",flexShrink:0},children:e.available?t.jsx(Io,{unlocked:!0,size:10}):t.jsx(Io,{size:10})}),r&&t.jsx("span",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600,color:"var(--accent-ink, var(--accent))",flexShrink:0},"data-testid":`active-badge-${e.id}`,children:B.picker.currentlyActive}),!e.available&&e.ctaType==="api-key"&&t.jsx(Ts,{variant:"api-key",label:e.id==="anthropic"?i.anthropic.addKeyCta:i.openrouter.addKeyCta,onActivate:()=>a(e.id)}),!e.available&&e.ctaType==="cli-install"&&d[e.id]&&t.jsx(Ts,{variant:"cli-install",label:d[e.id].label,installUrl:d[e.id].url,onActivate:()=>{}}),!e.available&&e.ctaType==="start-service"&&t.jsx(Ts,{variant:"start-service",label:e.id==="ollama"?i.ollama.startServiceCta:i.lmStudio.startServiceCta,onActivate:()=>a(e.id)}),l[e.id]&&t.jsx("span",{className:"sr-only","data-testid":`caption-${e.id}`,children:l[e.id]})]})}function mm(e,r,n,s){const i=e>=80,l=c.useRef(null),[d,u]=c.useState(0),p=c.useCallback(m=>{u(m.currentTarget.scrollTop)},[]),{visibleStart:f,visibleEnd:h}=c.useMemo(()=>{if(!i)return{visibleStart:0,visibleEnd:e};const m=Math.max(0,Math.floor(d/r)-4),v=Math.ceil(n/r)+8,x=Math.min(e,m+v);return{visibleStart:m,visibleEnd:x}},[i,d,r,n,e,4]);return{visibleStart:f,visibleEnd:h,totalHeight:e*r,offsetTop:f*r,virtualised:i,containerProps:{onScroll:p,ref:l,style:{overflowY:"auto",maxHeight:n,willChange:i?"transform":void 0}}}}const Ec=44,xm=352,gm=60,li=480;function vm(e){var a,i;const r=e.contextWindow?e.contextWindow>=1e6?`${Math.round(e.contextWindow/1e6)}M`:e.contextWindow>=1e3?`${Math.round(e.contextWindow/1e3)}k`:String(e.contextWindow):null;if(e.billingMode==="subscription")return r?`${r} ctx ${B.models.subscriptionBilling}`:B.models.subscriptionBilling.trim();if(e.billingMode==="free")return r?`local · ${r} ctx · free`:"local · free";const n=((a=e.pricing)==null?void 0:a.prompt)??0,s=((i=e.pricing)==null?void 0:i.completion)??0,o=`$${n.toFixed(2)} / $${s.toFixed(2)} per 1M tokens`;return r?`${r} ctx · ${o}`:o}function Is(e){return e.displayName??e.id??""}function ym(e,r){if(!r)return e;const n=r.toLowerCase();return e.filter(o=>Is(o).toLowerCase().includes(n)).sort((o,a)=>{const i=Is(o),l=Is(a),d=i.toLowerCase().indexOf(n),u=l.toLowerCase().indexOf(n);return d!==u?d-u:i.length-l.length})}function bm({agent:e,activeModelId:r,focusedIndex:n=-1,onSelect:s,onOpenSettings:o}){const[a,i]=c.useState(""),[l,d]=c.useState(""),u=c.useRef(null);c.useEffect(()=>{const h=setTimeout(()=>d(a),gm);return()=>clearTimeout(h)},[a]),c.useEffect(()=>{e.id==="openrouter"&&e.available&&u.current&&u.current.focus()},[e.id,e.available]);const p=c.useMemo(()=>ym(e.models,l),[e.models,l]),f=mm(p.length,Ec,xm);return e.id==="openrouter"&&!e.available?t.jsxs("div",{"data-testid":"openrouter-empty-card",style:{width:li,padding:20,display:"flex",flexDirection:"column",gap:12},children:[t.jsx("p",{style:{margin:0,color:"var(--text-primary)",fontSize:13,lineHeight:1.5},children:B.providers.openrouter.emptyCardBody}),t.jsx("button",{type:"button",onClick:()=>o("openrouter"),style:{alignSelf:"flex-start",padding:"6px 10px",borderRadius:6,background:"var(--accent, var(--color-accent))",color:"var(--bg-surface, white)",border:"none",fontSize:12,fontWeight:500,cursor:"pointer"},children:B.providers.openrouter.addKeyCta})]}):t.jsxs("div",{role:"listbox","aria-label":"Model","data-testid":"model-list",style:{width:li,display:"flex",flexDirection:"column"},children:[e.id==="openrouter"&&t.jsx("div",{style:{padding:8,borderBottom:"1px solid var(--border-default, var(--border-subtle))"},children:t.jsx("input",{ref:u,type:"text",placeholder:B.picker.searchPlaceholder,value:a,onChange:h=>i(h.target.value),"data-testid":"model-search-input","aria-label":B.picker.searchPlaceholder,style:{width:"100%",padding:"6px 8px",background:"var(--surface-2, var(--bg-surface))",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif"}})}),p.length===0&&l?t.jsxs("div",{style:{padding:16},"data-testid":"no-matches",children:[t.jsx("div",{style:{color:"var(--text-muted, var(--text-tertiary))",fontSize:12,marginBottom:8},children:B.picker.noMatches(l)}),t.jsx("button",{type:"button",onClick:()=>i(""),style:{padding:"4px 8px",background:"transparent",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},children:B.picker.clearSearch})]}):p.length===0?t.jsx("div",{style:{padding:16,color:"var(--text-muted, var(--text-tertiary))",fontSize:12},children:B.picker.noModelsYet}):t.jsx("div",{...f.containerProps,children:t.jsx("div",{style:{height:f.virtualised?f.totalHeight:"auto",position:"relative"},children:t.jsx("div",{style:{transform:f.virtualised?`translateY(${f.offsetTop}px)`:void 0},children:p.slice(f.visibleStart,f.visibleEnd).map((h,m)=>{const v=f.visibleStart+m;return t.jsx(jm,{model:h,isActive:h.id===r,isFocused:n===v,onSelect:()=>s(h.id),resolvedModel:e.id==="claude-cli"?e.resolvedModel??null:null},h.id)})})})})]})}function km(e,r,n){return r&&r.toLowerCase().includes(e.toLowerCase())?r:n??null}function jm({model:e,isActive:r,isFocused:n,onSelect:s,resolvedModel:o}){const a=vm(e),i=km(e.id,o,e.resolvedId),l=i!==null,d=r?"color-mix(in srgb, var(--accent, var(--color-accent)) 10%, transparent)":n?"var(--surface-muted, var(--surface-3))":"transparent",u=r?"1px solid var(--accent, var(--color-accent))":"1px solid transparent";return t.jsxs("button",{type:"button",role:"option","aria-selected":r,"data-testid":`model-row-${e.id}`,"data-focused":n||void 0,onClick:s,title:e.id,style:{width:"100%",minHeight:Ec,padding:"4px 12px",display:"flex",flexDirection:"column",alignItems:"flex-start",justifyContent:"center",gap:2,background:d,borderLeft:u,cursor:"pointer",fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif",textAlign:"left"},children:[t.jsx("span",{style:{fontSize:14,fontWeight:500,color:"var(--text-primary)"},children:e.displayName}),t.jsx("span",{style:{fontSize:12,fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace",fontVariantNumeric:"tabular-nums",color:"var(--text-muted, var(--text-tertiary))"},children:a}),l&&t.jsxs("span",{"data-testid":`model-row-${e.id}-resolved`,style:{fontSize:11,fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace",color:"var(--text-muted, var(--text-tertiary))"},children:["routing to ",i]})]})}const ci={anthropic:{stored:!1,updatedAt:null},openai:{stored:!1,updatedAt:null},openrouter:{stored:!1,updatedAt:null}};function wm(){const[e,r]=c.useState(null),[n,s]=c.useState(!0),[o,a]=c.useState(null),i=c.useCallback(async()=>{s(!0);try{const u=await fetch("/api/settings/keys");if(!u.ok)throw new Error(`GET /api/settings/keys returned ${u.status}`);const p=await u.json();r({...ci,...p}),a(null)}catch(u){a(u.message),r(ci)}finally{s(!1)}},[]);c.useEffect(()=>{i()},[i]);const l=c.useCallback(async(u,p)=>{const f=await fetch("/api/settings/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:u,key:p})});if(!f.ok){const m=await f.json().catch(()=>({error:f.statusText}));throw new Error(m.error||`POST /api/settings/keys returned ${f.status}`)}const h=await f.json();return await i(),h},[i]),d=c.useCallback(async u=>{const p=await fetch(`/api/settings/keys/${u}`,{method:"DELETE"});if(!p.ok)throw new Error(`DELETE /api/settings/keys/${u} returned ${p.status}`);await i()},[i]);return{state:e,loading:n,error:o,save:l,remove:d,refresh:i}}function Sm({onMigrated:e,fetchImpl:r}){const[n,s]=c.useState({kind:"loading"}),o=r??globalThis.fetch,a=c.useCallback(async()=>{var u;try{const p=await o("/api/settings/migration-status");if(!p.ok){s({kind:"hidden"});return}const f=await p.json();f.pending&&(((u=f.darwinKeys)==null?void 0:u.length)??0)>0?s({kind:"visible",darwinKeys:f.darwinKeys??[]}):s({kind:"hidden"})}catch{s({kind:"hidden"})}},[o]);c.useEffect(()=>{a()},[a]);const i=c.useCallback(async()=>{s({kind:"working"});try{const u=await o("/api/settings/migration-perform",{method:"POST",headers:{"Content-Type":"application/json"}});if(!u.ok){s({kind:"error",message:`Migration failed (${u.status})`});return}const p=await u.json().catch(()=>({migrated:[]}));e==null||e(p.migrated??[]),await a()}catch(u){s({kind:"error",message:u.message})}},[o,a,e]),l=c.useCallback(async()=>{s({kind:"hidden"});try{await o("/api/settings/migration-acknowledge",{method:"POST",headers:{"Content-Type":"application/json"}})}catch{}},[o]);if(n.kind==="loading"||n.kind==="hidden")return null;if(n.kind==="error")return t.jsxs("div",{role:"status","data-testid":"migration-banner",style:{padding:"10px 12px",borderRadius:6,background:"color-mix(in srgb, var(--danger, #b33) 15%, transparent)",color:"var(--text-primary)",fontSize:12,marginBottom:12,display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{style:{flex:1},children:n.message}),t.jsx("button",{type:"button",onClick:()=>void a(),"data-testid":"migration-retry",style:Ls,children:"Retry"})]});const d=n.kind==="working";return t.jsxs("div",{role:"note","data-testid":"migration-banner",style:{padding:"10px 12px",borderRadius:6,background:"color-mix(in srgb, var(--accent, var(--color-accent)) 12%, transparent)",color:"var(--text-primary)",fontSize:12,marginBottom:12,display:"flex",alignItems:"center",gap:8},children:[t.jsxs("div",{style:{flex:1},children:[t.jsx("strong",{style:{display:"block",marginBottom:2},children:"Migrate from macOS Keychain"}),t.jsx("span",{style:{color:"var(--text-muted, var(--text-tertiary))"},children:"We found stored credentials from a previous vskill version. Import them into the new on-disk store."})]}),t.jsx("button",{type:"button",onClick:()=>void i(),disabled:d,"data-testid":"migration-migrate",style:{...Ls,background:"var(--accent, var(--color-accent))",color:"white",opacity:d?.6:1},children:d?"Importing…":"Migrate"}),t.jsx("button",{type:"button",onClick:()=>void l(),"data-testid":"migration-dismiss",style:{...Ls,background:"transparent",border:"none",color:"var(--text-muted, var(--text-tertiary))",textDecoration:"underline",padding:"4px 6px"},children:"Dismiss for 30 days"})]})}const Ls={padding:"4px 10px",background:"var(--surface-2, transparent)",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},Cm=[{id:"anthropic",name:B.providers.anthropic.name,keyIssuanceUrl:B.providers.anthropic.keyIssuanceUrl,prefix:B.providers.anthropic.keyPrefix,placeholder:`Paste ${B.providers.anthropic.name} key`},{id:"openai",name:B.providers.openai.name,keyIssuanceUrl:B.providers.openai.keyIssuanceUrl,prefix:B.providers.openai.keyPrefix,placeholder:B.providers.openai.pastePlaceholder},{id:"openrouter",name:B.providers.openrouter.name,keyIssuanceUrl:B.providers.openrouter.keyIssuanceUrl,prefix:B.providers.openrouter.keyPrefix,placeholder:`Paste ${B.providers.openrouter.name} key`}];function Em(e){const r=Date.now()-new Date(e).getTime();return r<6e4?"just now":r<36e5?`${Math.round(r/6e4)}m ago`:r<864e5?`${Math.round(r/36e5)}h ago`:new Date(e).toLocaleString()}function Nc({open:e,onClose:r,initialProvider:n,onToast:s}){const{state:o,save:a,remove:i,refresh:l}=wm(),d=c.useRef(null),u=c.useRef(null),[p,f]=c.useState(null);c.useEffect(()=>{if(!e)return;let m=!1;return(async()=>{try{const v=await fetch("/api/settings/storage-path");if(!v.ok)throw new Error(`GET /api/settings/storage-path returned ${v.status}`);const x=await v.json();m||f(x.path??null)}catch{m||f(null)}})(),()=>{m=!0}},[e]),c.useEffect(()=>{if(!e)return;const m=document.activeElement,v=setTimeout(()=>{var b;const x=n?`input[data-provider="${n}"]`:"input[data-provider]",g=(b=d.current)==null?void 0:b.querySelector(x);g==null||g.focus()},0);return()=>{var x;clearTimeout(v),(x=m==null?void 0:m.focus)==null||x.call(m)}},[e,n]),c.useEffect(()=>{if(!e)return;const m=v=>{if(v.key==="Escape"){v.preventDefault(),v.stopPropagation(),r();return}if(v.key==="Tab"&&d.current){v.stopPropagation();const x=d.current.querySelectorAll("button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])");if(x.length===0)return;const g=x[0],b=x[x.length-1];v.shiftKey&&document.activeElement===g?(v.preventDefault(),b.focus()):!v.shiftKey&&document.activeElement===b&&(v.preventDefault(),g.focus())}};return document.addEventListener("keydown",m,!0),()=>document.removeEventListener("keydown",m,!0)},[e,r]);const h=c.useCallback(async()=>{var m,v;if(p)try{await((v=(m=navigator.clipboard)==null?void 0:m.writeText)==null?void 0:v.call(m,p)),s==null||s(B.settings.pathCopied)}catch{}},[s,p]);return e?t.jsx("div",{role:"dialog","aria-modal":"true","aria-labelledby":"settings-modal-title","data-testid":"settings-modal",style:{position:"fixed",inset:0,background:"color-mix(in srgb, black 40%, transparent)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:10080},onClick:m=>{m.target===m.currentTarget&&r()},children:t.jsxs("div",{ref:d,style:{background:"var(--bg-surface, var(--surface-1))",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:8,width:560,maxHeight:"80vh",overflowY:"auto",padding:20,fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif",color:"var(--text-primary)"},onClick:m=>m.stopPropagation(),children:[t.jsx("h2",{id:"settings-modal-title",style:{margin:"0 0 16px 0",fontSize:16,fontWeight:600},children:B.settings.title}),t.jsx(Sm,{onMigrated:()=>{l()}}),t.jsx("div",{role:"note","data-testid":"settings-banner",style:{padding:"8px 12px",borderRadius:6,background:"color-mix(in srgb, var(--info, var(--accent-muted)) 20%, transparent)",color:"var(--text-primary)",fontSize:12,marginBottom:16},children:B.settings.banner}),t.jsxs("section",{"aria-labelledby":"settings-api-keys-title",style:{marginBottom:20},children:[t.jsx("h3",{id:"settings-api-keys-title",style:{fontSize:13,fontWeight:600,margin:"0 0 12px 0"},children:B.settings.sectionApiKeys}),Cm.map(m=>t.jsx(Nm,{providerId:m.id,providerName:m.name,keyIssuanceUrl:m.keyIssuanceUrl,prefix:m.prefix,placeholder:m.placeholder,metadata:o==null?void 0:o[m.id],onSave:async v=>{const x=await a(m.id,v);return s==null||s(B.settings.keySaved(m.name)),x},onRemove:async()=>{await i(m.id),s==null||s(B.settings.keyRemoved(m.name))},inputRef:m.id===(n??"anthropic")?u:void 0},m.id))]}),t.jsxs("div",{"data-testid":"settings-storage-path",style:{fontSize:11,color:"var(--text-muted, var(--text-tertiary))",fontStyle:"italic",display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[t.jsx("span",{style:{flex:1},children:p?B.settings.storagePath(p):B.settings.storagePathFallback}),t.jsx("button",{type:"button",onClick:h,disabled:!p,"data-testid":"settings-copy-path",style:{...fr,opacity:p?1:.5,cursor:p?"pointer":"not-allowed"},children:B.settings.copyPath})]}),t.jsx("div",{style:{marginTop:20,display:"flex",justifyContent:"flex-end"},children:t.jsx("button",{type:"button",onClick:r,style:{padding:"6px 12px",background:"var(--surface-2, transparent)",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:6,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},children:"Close"})})]})}):null}function Nm({providerId:e,providerName:r,keyIssuanceUrl:n,prefix:s,placeholder:o,metadata:a,onSave:i,onRemove:l,inputRef:d}){const[u,p]=c.useState(""),[f,h]=c.useState(!1),[m,v]=c.useState(!1),[x,g]=c.useState(!1),[b,y]=c.useState(null),j=u.trim(),S=j.length===0,k=j.length>0&&!j.startsWith(s),T=c.useCallback(async()=>{if(S)return;v(!0);const R=j;p("");try{const N=await i(R);N.warning?y(N.warning):y(null)}finally{v(!1)}},[S,i,j]),w=c.useCallback(async()=>{var R;try{if(!((R=navigator.clipboard)!=null&&R.readText))return;const N=await navigator.clipboard.readText();p(N)}catch{}},[]),E=c.useCallback(async()=>{g(!1),await l()},[l]);return t.jsxs("div",{"data-testid":`provider-row-${e}`,style:{padding:12,border:"1px solid var(--border-subtle)",borderRadius:6,marginBottom:8,display:"flex",flexDirection:"column",gap:8},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[t.jsx("strong",{style:{fontSize:13},children:r}),t.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",style:{fontSize:12,color:"var(--accent, var(--color-accent))"},children:"Get a key →"})]}),t.jsxs("div",{style:{display:"flex",gap:6},children:[t.jsx("input",{ref:d,type:f?"text":"password",value:u,onChange:R=>{p(R.target.value),y(null)},"data-provider":e,placeholder:o,style:{flex:1,padding:"6px 8px",border:"1px solid var(--border-subtle)",borderRadius:4,background:"var(--surface-2, var(--bg-surface))",color:"var(--text-primary)",fontSize:12,fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace"}}),t.jsx("button",{type:"button",onClick:()=>h(!f),style:fr,children:f?B.settings.hide:B.settings.show}),t.jsx("button",{type:"button",onClick:w,style:fr,children:B.settings.paste})]}),k&&t.jsx("div",{role:"status","data-testid":`prefix-warn-${e}`,style:di,children:B.settings.prefixWarn(r)}),b&&t.jsx("div",{role:"status",style:di,children:b}),t.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[t.jsx("button",{type:"button",onClick:T,disabled:S||m,"data-testid":`save-${e}`,style:{...fr,background:S?"var(--surface-2)":"var(--accent, var(--color-accent))",color:S?"var(--text-muted)":"white",cursor:S?"not-allowed":"pointer"},children:B.settings.save}),(a==null?void 0:a.stored)&&t.jsx(t.Fragment,{children:x?t.jsxs(t.Fragment,{children:[t.jsx("span",{style:{fontSize:12},children:B.settings.removeConfirm(r)}),t.jsx("button",{type:"button",onClick:E,"data-testid":`remove-confirm-${e}`,style:{...fr,background:"var(--danger, #b33)",color:"white"},children:"Confirm"}),t.jsx("button",{type:"button",onClick:()=>g(!1),style:fr,children:"Cancel"})]}):t.jsx("button",{type:"button",onClick:()=>g(!0),"data-testid":`remove-${e}`,style:{...fr,color:"var(--text-muted)"},children:B.settings.remove})}),t.jsx("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-muted, var(--text-tertiary))"},"data-testid":`status-${e}`,children:a!=null&&a.stored&&a.updatedAt?B.settings.keyStoredAt(Em(a.updatedAt)):B.settings.noKey})]})]})}const fr={padding:"4px 8px",background:"var(--surface-2, transparent)",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},di={fontSize:11,color:"var(--warning, var(--text-muted))"};function Rm(){return typeof window>"u"||!window.matchMedia?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function Tm({onToast:e}){const{status:r,catalog:n,focusAgent:s,setActive:o}=Cc({onStaleCatalog:(N,I)=>{const A=Math.round(I/6e4);e==null||e(`Using cached ${N} catalog (${A} min old)`)},onSetActiveError:N=>e==null?void 0:e(N)}),[a,i]=c.useState(!1),[l,d]=c.useState(!1),[u,p]=c.useState(),[f,h]=c.useState(null),[m,v]=c.useState("agents"),[x,g]=c.useState(0),b=c.useRef(null);c.useRef(null),c.useEffect(()=>{var N;n&&!f&&h(n.activeAgent??((N=n.agents[0])==null?void 0:N.id)??null)},[n,f]);const y=(n==null?void 0:n.agents)??[],j=c.useMemo(()=>y.find(N=>N.id===f)??y[0],[y,f]);c.useEffect(()=>{g(0)},[f]);const S=c.useCallback(()=>{var N;i(!0),v("agents"),h((n==null?void 0:n.activeAgent)??((N=y[0])==null?void 0:N.id)??null),g(0)},[n,y]),k=c.useCallback(()=>{var N;i(!1),(N=b.current)==null||N.focus()},[]);c.useEffect(()=>{const N=()=>i(I=>!I);return window.addEventListener("openAgentModelPicker",N),()=>{window.removeEventListener("openAgentModelPicker",N)}},[]),c.useEffect(()=>{if(!a)return;const N=A=>{if(A.key==="Escape"){A.preventDefault(),k();return}if(A.key==="ArrowDown"){A.preventDefault(),I(1);return}if(A.key==="ArrowUp"){A.preventDefault(),I(-1);return}if(A.key==="ArrowRight"&&m==="agents"){A.preventDefault(),v("models"),g($=>{const W=((j==null?void 0:j.models.length)??1)-1;return Math.max(0,Math.min($,Math.max(0,W)))});return}if(A.key==="ArrowLeft"&&m==="models"){A.preventDefault(),v("agents");return}if(A.key==="Enter"){if(A.preventDefault(),m==="agents"&&j)v("models"),g(0);else if(m==="models"&&j){const $=Math.max(0,Math.min(j.models.length-1,x)),W=j.models[$];W&&(o(j.id,W.id),k())}return}};function I(A){if(m==="agents"){const $=y.findIndex(C=>C.id===f),W=y[Math.max(0,Math.min(y.length-1,$+A))];W&&(h(W.id),s(W.id));return}if(m==="models"&&j){const $=j.models.length;if($===0)return;g(W=>{const C=W+A;return Math.max(0,Math.min($-1,C))})}}return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[a,m,y,f,j,x,k,s,o]);const T=c.useCallback(N=>{p(N==="anthropic"||N==="openrouter"?N:void 0),d(!0),i(!1)},[]),w=y.find(N=>N.id===(n==null?void 0:n.activeAgent)),E=w==null?void 0:w.models.find(N=>N.id===(n==null?void 0:n.activeModel)),R=c.useMemo(()=>{if(r!=="ready"||!n)return"Loading…";const N=(w==null?void 0:w.displayName)??"Agent",I=(E==null?void 0:E.displayName)??n.activeModel??"Model";return`${N} · ${I}`},[r,n,w,E]);return t.jsxs(t.Fragment,{children:[t.jsxs("button",{ref:b,type:"button","data-testid":"agent-model-picker-trigger",onClick:()=>a?k():S(),"aria-haspopup":"listbox","aria-expanded":a,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 10px",background:"var(--surface-2, var(--bg-surface))",border:"1px solid var(--border-subtle)",borderRadius:6,color:"var(--text-primary)",fontSize:12,cursor:"pointer",fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif"},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:w!=null&&w.available?"var(--accent, var(--color-accent))":"var(--text-muted, var(--text-tertiary))",flexShrink:0}}),t.jsx("span",{children:R})]}),a&&typeof document<"u"&&Br.createPortal(t.jsxs(Im,{reducedMotion:Rm(),onClickOutside:k,children:[t.jsxs("div",{style:{display:"flex",height:440,maxHeight:"60vh"},children:[t.jsx(hm,{agents:y,activeAgentId:(n==null?void 0:n.activeAgent)??null,focusedAgentId:f,onFocus:N=>{h(N),s(N)},onSelect:N=>{h(N),s(N),v("models")},onOpenSettings:T}),j&&t.jsx(bm,{agent:j,activeModelId:(n==null?void 0:n.activeModel)??null,focusedIndex:m==="models"?x:-1,onSelect:N=>{o(j.id,N),k()},onOpenSettings:T})]}),t.jsxs("div",{style:{height:32,borderTop:"1px solid var(--border-default, var(--border-subtle))",padding:"0 12px",display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:11,color:"var(--text-muted, var(--text-tertiary))"},children:[t.jsx("button",{type:"button",onClick:()=>T(),"data-testid":"picker-footer-settings",style:{background:"transparent",border:"none",color:"var(--text-primary)",fontSize:11,cursor:"pointer",padding:"0 4px"},children:B.picker.settingsButton}),t.jsx("span",{style:{fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace"},children:B.picker.footerHint})]})]}),document.body),t.jsx(Nc,{open:l,onClose:()=>d(!1),initialProvider:u,onToast:e})]})}function Im({children:e,reducedMotion:r,onClickOutside:n}){const s=c.useRef(null);return c.useEffect(()=>{const o=a=>{s.current&&!s.current.contains(a.target)&&n()};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[n]),t.jsxs("div",{ref:s,"data-testid":"agent-model-picker-popover",role:"dialog","aria-label":"Select agent and model",style:{position:"fixed",top:56,left:"50%",transform:"translateX(-50%)",width:720,background:"var(--bg-surface, var(--surface-1))",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:8,overflow:"hidden",zIndex:90,animation:r?void 0:"agentPickerFadeIn 120ms cubic-bezier(0.2, 0, 0, 1)"},children:[e,t.jsx("style",{children:`@keyframes agentPickerFadeIn {
16
+ from { opacity: 0; transform: translateX(-50%) translateY(2px); }
17
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
18
+ }`})]})}const As="#F25F1C";function ui(){typeof window>"u"||(window.location.hash="#/")}function Lm({onHome:e}){const[r,n]=c.useState(!1),[s,o]=c.useState(!1),a=l=>{l.metaKey||l.ctrlKey||l.shiftKey||l.button!==0||(l.preventDefault(),ui(),e==null||e())},i=l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),ui(),e==null||e())};return t.jsxs("a",{href:"#/",role:"link","data-testid":"studio-logo","aria-label":"Skill Studio — home",onClick:a,onKeyDown:i,onFocus:()=>n(!0),onBlur:()=>n(!1),onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),style:{display:"inline-flex",alignItems:"center",gap:8,flexShrink:0,padding:"4px 8px",margin:"-4px -8px",borderRadius:8,textDecoration:"none",color:"inherit",cursor:"pointer",outline:r?"2px solid var(--border-focus)":"none",outlineOffset:2,background:s?"color-mix(in srgb, var(--text-primary) 4%, transparent)":"transparent",transition:"background-color var(--duration-fast, 120ms) var(--ease-standard, ease)"},children:[t.jsxs("svg",{width:22,height:22,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",style:{display:"block",flexShrink:0,overflow:"visible"},children:[t.jsx("path",{d:"M12 3.25c-3.59 0-6.5 2.91-6.5 6.5v3.18c0 .67-.21 1.32-.6 1.86l-1.27 1.78c-.49.69 0 1.65.84 1.65h15.06c.84 0 1.33-.96.84-1.65l-1.27-1.78c-.39-.54-.6-1.19-.6-1.86V9.75c0-3.59-2.91-6.5-6.5-6.5z",fill:As}),t.jsx("path",{d:"M9.75 19.4h4.5a2.25 2.25 0 11-4.5 0z",fill:As}),t.jsx("circle",{cx:"18.5",cy:"5.5",r:"2.75",fill:As,stroke:"var(--surface-base, #ffffff)",strokeWidth:"1"})]}),t.jsx("span",{style:{fontSize:13,fontWeight:600,letterSpacing:"-0.01em",lineHeight:1,color:"var(--text-primary)"},children:"Skill Studio"})]})}const pi=c.memo(function({message:r,politeness:n="polite",role:s}){const o=s??(n==="assertive"?"alert":"status");return t.jsx("div",{"aria-live":n,"aria-atomic":"true",role:o,"data-testid":"aria-live","data-politeness":n,style:{position:"absolute",width:1,height:1,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",border:0,padding:0,margin:-1},children:r})});function Am({toast:e,onDismiss:r}){const[n,s]=c.useState(!0),o=c.useRef(null);c.useEffect(()=>(o.current=requestAnimationFrame(()=>{o.current=requestAnimationFrame(()=>s(!1))}),()=>{o.current!=null&&cancelAnimationFrame(o.current)}),[]);const a={success:"var(--status-installed)",info:"var(--text-secondary)",error:"var(--color-accent, var(--accent-surface))"};return t.jsxs("div",{role:e.severity==="error"?"alert":"status","data-testid":"toast-item","data-severity":e.severity,style:{display:"flex",alignItems:"center",gap:12,padding:"10px 12px",minWidth:240,maxWidth:360,background:"var(--bg-canvas)",color:"var(--text-primary)",border:"1px solid var(--border-default)",borderLeft:`3px solid ${a[e.severity]}`,borderRadius:6,boxShadow:"0 8px 24px rgba(0,0,0,0.12)",fontFamily:"var(--font-sans)",fontSize:12,transform:n?"translateY(8px)":"translateY(0)",opacity:n?0:1,transition:"transform var(--duration-base, 180ms) var(--ease-standard, ease), opacity var(--duration-base, 180ms) var(--ease-standard, ease)"},children:[t.jsx("span",{style:{flex:1,minWidth:0},children:e.message}),e.action&&t.jsx("button",{type:"button",onClick:()=>{e.action.onInvoke(),r(e.id)},style:{background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,padding:"3px 8px",color:"var(--text-primary)",cursor:"pointer",fontSize:11,fontFamily:"var(--font-sans)"},children:e.action.label}),t.jsx("button",{type:"button","aria-label":"Dismiss",onClick:()=>r(e.id),style:{background:"transparent",border:"none",padding:2,color:"var(--text-secondary)",cursor:"pointer",fontSize:14,lineHeight:1},children:"×"})]})}function Pm({toasts:e,onDismiss:r,liveMessage:n,liveAssertiveMessage:s}){return t.jsxs(t.Fragment,{children:[t.jsx(pi,{politeness:"polite",message:n}),t.jsx(pi,{politeness:"assertive",message:s}),e.length>0&&t.jsx("div",{"data-testid":"toast-stack",style:{position:"fixed",right:16,bottom:16,display:"flex",flexDirection:"column-reverse",gap:8,zIndex:2e4,pointerEvents:"none"},children:e.map(o=>t.jsx("div",{style:{pointerEvents:"auto"},children:t.jsx(Am,{toast:o,onDismiss:r})},o.id))})]})}const Rc=c.createContext(null);function ps(){const e=c.useContext(Rc);if(!e)throw new Error("useToast must be used inside <ToastProvider>.");return e}function $m({children:e,maxVisible:r=4,defaultDurationMs:n=4e3}){const[s,o]=c.useState([]),[a,i]=c.useState(""),[l,d]=c.useState(""),u=c.useRef(new Map),p=c.useCallback(g=>{const b=u.current.get(g);b&&(clearTimeout(b),u.current.delete(g)),o(y=>y.filter(j=>j.id!==g))},[]),f=c.useCallback((g,b)=>{if(b<=0)return;const y=setTimeout(()=>{p(g)},b);u.current.set(g,y)},[p]),h=c.useCallback(g=>{const b=g.id??`toast-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,y={id:b,message:g.message,severity:g.severity??"info",durationMs:g.durationMs??n,action:g.action};return o(j=>[...j,y]),y.severity==="error"?d(y.message):i(y.message),f(b,y.durationMs),b},[n,f]),m=c.useCallback(()=>{for(const g of u.current.values())clearTimeout(g);u.current.clear(),o([])},[]);c.useEffect(()=>{function g(b){b.key==="Escape"&&o(y=>{if(y.length===0)return y;const j=y.slice(0,r),S=j[j.length-1],k=u.current.get(S.id);return k&&(clearTimeout(k),u.current.delete(S.id)),y.filter(T=>T.id!==S.id)})}return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[r]),c.useEffect(()=>()=>{for(const g of u.current.values())clearTimeout(g);u.current.clear()},[]);const v=s.slice(0,r),x=c.useMemo(()=>({toast:h,dismiss:p,clear:m}),[h,p,m]);return t.jsxs(Rc.Provider,{value:x,children:[e,t.jsx(Pm,{toasts:v,onDismiss:p,liveMessage:a,liveAssertiveMessage:l})]})}function Mm(){const{data:e,loading:r}=Rt("platform-health",async()=>{const n=await fetch("/api/platform/health");return n.ok?await n.json():{degraded:!1,reason:"platform-unreachable",statsAgeMs:0,oldestActiveAgeMs:0}},{ttl:6e4});return{data:e,loading:r}}const Fm=c.lazy(()=>ar(()=>import("./UpdateDropdown-Cn4Vsq5d.js"),__vite__mapDeps([2,3,4,5,6])));function Dm(e){switch(e){case"connected":return"connected";case"fallback":return"reconnecting";case"connecting":default:return"connecting"}}function zm(e){switch(e){case"connected":return"var(--status-success-text)";case"fallback":return"var(--color-own)";case"connecting":default:return"var(--text-secondary)"}}function Bm(){const{updateCount:e,updates:r,isRefreshingUpdates:n,refreshUpdates:s,selectSkill:o,revealSkill:a,skills:i,updatesById:l,activeAgent:d,updateStreamStatus:u,trackedSkillCount:p}=Lt(),{toast:f}=ps(),{data:h}=Mm(),m=(h==null?void 0:h.degraded)===!0,v=c.useId(),x=u??"connecting",g=typeof p=="number"?p:null,b=g===null?!0:g>0,y=c.useMemo(()=>{if(!l||l.size===0)return;const A=new Map;for(const[$,W]of l)W.diffSummary&&A.set($,W.diffSummary);return A.size>0?A:void 0},[l]),[j,S]=c.useState(!1),k=c.useRef(null),T=c.useCallback(()=>S(!1),[]),w=m?"var(--color-own)":e>0?"var(--text-primary)":"var(--text-secondary)",E=e>9?"9+":String(e),R=e===0?"No updates available":`${e} updates available, open summary`,N=m?`${R} — platform crawler degraded`:R,I=m?"Update checks paused — verified-skill.com crawler is degraded. Your submissions are queued.":void 0;return t.jsxs("span",{"data-testid":"update-bell-anchor",style:{position:"relative",display:"inline-flex"},children:[t.jsxs("button",{ref:k,type:"button","data-testid":"update-bell","aria-label":N,"aria-haspopup":"dialog","aria-expanded":j,"aria-describedby":v,title:I,onClick:()=>S(A=>!A),style:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:26,width:26,padding:0,borderRadius:4,border:"1px solid transparent",background:"transparent",color:w,cursor:"pointer"},children:[t.jsxs("svg",{"data-testid":"update-bell-icon",width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.75,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",focusable:"false",style:{display:"block",opacity:e>0||m?1:.75,color:w},children:[t.jsx("path",{d:"M5.5 17h11l-1.2-1.8a2 2 0 0 1-.3-1.1V10a4 4 0 1 0-8 0v4.1a2 2 0 0 1-.3 1.1L5.5 17Z"}),t.jsx("path",{d:"M10 20a2 2 0 0 0 4 0"}),t.jsx("circle",{cx:"17",cy:"7",r:"2.2",fill:"currentColor",stroke:"none"})]}),e>0&&t.jsx("span",{"data-testid":"update-bell-badge","aria-hidden":"true",style:{position:"absolute",top:-2,right:-2,minWidth:14,height:14,padding:"0 3px",borderRadius:999,background:"var(--color-own)",color:"var(--color-paper)",fontSize:9,fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums",display:"inline-flex",alignItems:"center",justifyContent:"center",fontWeight:600,lineHeight:1},children:E}),b&&t.jsx("span",{"data-testid":"update-bell-status-pip","aria-hidden":"true",style:{position:"absolute",bottom:-1,right:-1,width:6,height:6,borderRadius:999,background:zm(x),border:"1px solid var(--color-paper)",display:"inline-block",lineHeight:0}})]}),t.jsx("span",{id:v,"data-testid":"update-bell-status-text",style:{position:"absolute",width:1,height:1,margin:-1,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",whiteSpace:"nowrap",border:0},children:`Live updates: ${Dm(x)}`}),j&&t.jsx(c.Suspense,{fallback:t.jsx("span",{"data-testid":"update-bell-fallback",children:"Loading…"}),children:t.jsx(Fm,{updates:r,isRefreshing:n,diffSummariesById:y,onRefresh:()=>s(),onSelectSkill:A=>{const $=A.localSkill??A.name.split("/").pop()??"",W=A.localPlugin??"";if(a)a(W,$);else{const L=A.name.split("/"),P=L.length>=2?L[L.length-2]:L[0];o({plugin:P,skill:$,origin:"installed"})}if(!(i??[]).some(L=>L.skill===$&&(W===""||L.plugin===W))){const L=A.installLocations??[];if(L.length>0){const P=d?L.filter(V=>V.agent===d):[],F=d?L.filter(V=>V.agent!==d):L;if(P.length>0&&F.length>0){const V=F.length>=2?`Also installed under ${F.length} other locations.`:`Also installed under ${F[0].agentLabel}.`;f({severity:"info",message:V})}else{const V=L[0].agentLabel;f({severity:"info",message:`Skill installed under ${V} — switch to ${V} to view details.`})}}}T()},onViewAll:()=>{window.location.hash="#/updates",T()},onClose:T,anchorRef:k})})]})}function fi(e){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:navigate-scope",{detail:e}))}function _m(e){return e.source==="project"?B.scopeLabels.sourceProject:e.source==="personal"?B.scopeLabels.sourcePersonal:e.source==="plugin"?B.scopeLabels.sourcePlugin:e.origin==="installed"?B.scopeLabels.sourcePersonal:B.scopeLabels.sourceProject}function Om(e){return e.source==="project"?"var(--status-installed)":e.source==="plugin"?"var(--color-accent-ink)":"var(--status-own)"}function Wm({projectName:e,selected:r,onHome:n,projectPickerSlot:s,onRequestCreateSkill:o,findSkillsSlot:a,userDropdownSlot:i,appUpdateSlot:l}){const d=r?_m(r):null,u=r?Om(r):"var(--text-secondary)";return t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,height:"100%",width:"100%",padding:"0 16px",fontFamily:"var(--font-sans)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[t.jsx(Lm,{onHome:n}),s?t.jsx("div",{style:{borderLeft:"1px solid var(--border-default)",paddingLeft:10,display:"flex",alignItems:"center"},children:s}):e&&t.jsx("span",{title:e,style:{fontSize:12,color:"var(--text-secondary)",borderLeft:"1px solid var(--border-default)",paddingLeft:10,maxWidth:220,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),l&&t.jsx("span",{"data-slot":"app-update",style:{display:"inline-flex",flexShrink:0},children:l})]}),t.jsx("nav",{"aria-label":"Breadcrumb",style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:6,fontSize:12,color:"var(--text-secondary)"},children:r&&d&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{segment:"origin",onClick:()=>fi({scope:"origin",origin:r.origin}),style:{textTransform:"uppercase",letterSpacing:"0.06em",fontWeight:600,color:u},children:d}),t.jsx(mi,{}),t.jsx(hi,{segment:"plugin",onClick:()=>fi({scope:"plugin",plugin:r.plugin}),style:{fontFamily:"var(--font-mono)",fontSize:11},children:r.plugin}),t.jsx(mi,{}),t.jsx("span",{"data-breadcrumb-segment":"skill","aria-current":"page",style:{color:"var(--text-primary)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.skill})]})}),t.jsxs("div",{"data-toprail-right":"true",style:{display:"flex",alignItems:"center",gap:12,flexShrink:0},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a,o&&t.jsxs("button",{type:"button","data-slot":"create-skill-button",onClick:o,"aria-label":"Create a new skill",title:"Create a new skill",style:{display:"inline-flex",alignItems:"center",gap:6,height:28,padding:"0 12px",borderRadius:6,border:"1px solid var(--color-action, #2F5B8E)",background:"var(--color-action, #2F5B8E)",color:"var(--color-action-ink, #FFFFFF)",fontSize:12,fontWeight:600,fontFamily:"var(--font-sans)",cursor:"pointer",letterSpacing:"0.01em",boxShadow:"0 1px 2px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.12)"},children:[t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"New Skill"]})]}),t.jsx("span",{"aria-hidden":"true",style:{width:1,height:18,background:"var(--border-default)"}}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{"data-slot":"agent-model-picker",style:{minWidth:200},children:t.jsx(Tm,{})}),t.jsx("span",{"data-slot":"update-bell",style:{display:"inline-flex"},children:t.jsx(Bm,{})}),i&&t.jsx("span",{"data-slot":"user-dropdown",style:{display:"inline-flex"},children:i})]})]})]})}function hi({segment:e,onClick:r,style:n,children:s}){return t.jsx("button",{type:"button","data-breadcrumb-segment":e,onClick:r,style:{background:"transparent",border:"none",padding:0,cursor:"pointer",color:"var(--text-secondary)",fontFamily:"inherit",...n},onMouseEnter:o=>{o.currentTarget.style.color="var(--color-accent-ink)"},onMouseLeave:o=>{const a=(n==null?void 0:n.color)??"var(--text-secondary)";o.currentTarget.style.color=a},children:s})}function mi(){return t.jsx("span",{"aria-hidden":"true",style:{color:"var(--border-default)",fontSize:10},children:"›"})}const fs="vskill-theme";function Tc(e){return e==="light"||e==="dark"||e==="auto"?e:"auto"}function Um(e,r){return e==="light"||e==="dark"?e:r?"dark":"light"}function Hm(e){try{const r=e.getItem(fs);return Tc(r)}catch{return"auto"}}function Vm(e,r){try{e.setItem(fs,r)}catch{}}function Gm(e,r,n){e.dataset.theme=n,e.dataset.themeMode=r}function Km(e){if(!e)return!1;try{return e("(prefers-color-scheme: dark)").matches}catch{return!1}}const Ic=c.createContext(null);function qm({storage:e,matchMedia:r,target:n,children:s}){const o=e??(typeof window<"u"?window.localStorage:void 0),a=r??(typeof window<"u"?window.matchMedia.bind(window):void 0),i=n??(typeof document<"u"?document.documentElement:void 0),[l,d]=c.useState(()=>o?Hm(o):"auto"),[u,p]=c.useState(()=>Km(a)),f=c.useMemo(()=>Um(l,u),[l,u]);c.useEffect(()=>{i&&Gm(i,l,f)},[i,l,f]),c.useEffect(()=>{if(!a)return;const v=a("(prefers-color-scheme: dark)"),x=b=>p(b.matches);if(typeof v.addEventListener=="function")return v.addEventListener("change",x),()=>v.removeEventListener("change",x);const g=v;return g.addListener(x),()=>g.removeListener(x)},[a]),c.useEffect(()=>{if(typeof window>"u")return;const v=x=>{x.key===fs&&d(Tc(x.newValue))};return window.addEventListener("storage",v),()=>window.removeEventListener("storage",v)},[]),c.useEffect(()=>{if(!a||!i)return;let v;try{v=a("(prefers-contrast: more)")}catch{return}const x=y=>{y?i.dataset.contrast="more":i.dataset.contrast==="more"&&delete i.dataset.contrast};x(v.matches);const g=y=>x(y.matches);if(typeof v.addEventListener=="function")return v.addEventListener("change",g),()=>v.removeEventListener("change",g);const b=v;return b.addListener(g),()=>b.removeListener(g)},[a,i]);const h=c.useCallback(v=>{d(v),o&&Vm(o,v)},[o]),m=c.useMemo(()=>({mode:l,resolvedTheme:f,setTheme:h}),[l,f,h]);return t.jsx(Ic.Provider,{value:m,children:s})}function Lc(){const e=c.useContext(Ic);if(!e)throw new Error("useTheme must be used inside <ThemeProvider>. Wrap the app root in main.tsx.");return e}const xi=["claude-cli","anthropic","openrouter","ollama","lm-studio"];function Ym(e){const r=new Map(e.map(s=>[s.id,s])),n=[];for(const s of xi){const o=r.get(s);o&&n.push(o)}for(const s of e)xi.includes(s.id)||n.push(s);return n}function Jm(e){const[r,n]=c.useState(()=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(`(max-width: ${e}px)`).matches);return c.useEffect(()=>{var a;if(typeof window>"u"||!window.matchMedia)return;const s=window.matchMedia(`(max-width: ${e}px)`),o=()=>n(s.matches);return(a=s.addEventListener)==null||a.call(s,"change",o),()=>{var i;return(i=s.removeEventListener)==null?void 0:i.call(s,"change",o)}},[e]),r}function Qm({providers:e,onOpenSettings:r,onOpenInstallHelp:n}){const s=Ym(e),o=Jm(640),[a,i]=c.useState(!1),l=c.useCallback(d=>{d.available||d.kind==="api-key"?r==null||r(d.id):n==null||n(d.id)},[r,n]);if(o){const d=s.filter(u=>u.available).length;return t.jsxs("div",{"data-testid":"providers-segment",style:{position:"relative",display:"inline-flex",alignItems:"center"},children:[t.jsx("button",{type:"button","data-testid":"providers-summary",onClick:()=>i(!a),"aria-label":B.statusBar.providerSummary(d,s.length),style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:11,cursor:"pointer",padding:"0 4px"},children:B.statusBar.providerSummary(d,s.length)}),a&&t.jsx("div",{role:"menu",style:{position:"absolute",bottom:"120%",right:0,background:"var(--bg-surface, var(--surface-1))",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:6,padding:6,minWidth:180,display:"flex",flexDirection:"column",gap:2,zIndex:80},children:s.map(u=>t.jsx(gi,{p:u,onClick:l},u.id))})]})}return t.jsx("div",{"data-testid":"providers-segment",style:{display:"inline-flex",alignItems:"center",gap:4},children:s.map(d=>t.jsx(gi,{p:d,onClick:l,compact:!0},d.id))})}function gi({p:e,onClick:r,compact:n}){const s=e.available?B.statusBar.unlocked(e.label):e.kind==="cli-install"?B.statusBar.lockedCli(e.label):B.statusBar.locked(e.label);return t.jsxs("button",{type:"button","data-testid":`provider-glyph-${e.id}`,"data-available":e.available,"aria-label":s,title:s,onClick:()=>r(e),style:{display:"inline-flex",alignItems:"center",gap:4,background:"transparent",border:"none",color:e.available?"var(--status-installed)":"var(--text-muted, var(--text-tertiary))",cursor:"pointer",padding:n?"2px":"4px 6px",fontSize:11},children:[t.jsx(Io,{unlocked:e.available,size:10}),!n&&t.jsx("span",{children:e.label})]})}function Xm(){try{return typeof localStorage>"u"?null:localStorage.getItem(fs)}catch{return null}}function Zm({projectPath:e,modelName:r,health:n="ok",onPathClick:s,providers:o,onOpenProviderSettings:a,onOpenProviderInstallHelp:i}){const{mode:l,resolvedTheme:d,setTheme:u}=Lc(),f=Xm()==="auto",h=ex(l,d,f),m=n==="down"||n==="degraded"?"var(--status-own)":"var(--status-installed)";return t.jsxs("div",{role:"contentinfo",style:{display:"flex",alignItems:"center",gap:12,height:"100%",width:"100%",padding:"0 12px",fontSize:11,fontFamily:"var(--font-sans)",color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:[t.jsx("span",{title:r??"",style:{fontFamily:"var(--font-mono)"},children:r??"—"}),t.jsx(vi,{}),t.jsxs("span",{"aria-label":`Health: ${n}`,style:{display:"inline-flex",alignItems:"center",gap:6},children:[t.jsx(tx,{color:m}),t.jsx("span",{style:{textTransform:"capitalize"},children:n})]}),o&&o.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(vi,{}),t.jsx(Qm,{providers:o,onOpenSettings:a,onOpenInstallHelp:i})]}),t.jsx("div",{style:{flex:1}}),t.jsxs("button",{type:"button","data-testid":"theme-toggle",onClick:()=>u(h),"aria-label":`Switch to ${h} theme`,title:`Theme: ${l} — click for ${h}`,style:{display:"inline-flex",alignItems:"center",gap:6,background:"transparent",border:"1px solid var(--border-default)",padding:"2px 8px",borderRadius:4,color:"var(--text-secondary)",cursor:"pointer",fontSize:11,height:20},children:[t.jsx(rx,{mode:l}),t.jsx("span",{style:{textTransform:"capitalize"},children:l})]})]})}function ex(e,r,n){return e==="light"?"dark":e==="dark"?"auto":n?"light":r==="light"?"dark":"light"}function tx({color:e}){return t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:e,display:"inline-block",flexShrink:0}})}function vi(){return t.jsx("span",{"aria-hidden":"true",style:{color:"var(--border-default)"},children:"|"})}function rx({mode:e}){return e==="dark"?t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):e==="light"?t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"4"}),t.jsx("path",{d:"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"})]}):t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"9"}),t.jsx("path",{d:"M12 3a9 9 0 0 0 0 18z",fill:"currentColor"})]})}const Lo=new Set;function Ac(){for(const e of Lo)e()}const nx=5,sx=1e3,ox=6e4;function ax(){const[e,r]=c.useState(void 0),[n,s]=c.useState(!1),[o,a]=c.useState(!0),i=c.useRef(0),l=c.useRef(null),d=c.useRef(null),u=c.useRef(!0),p=c.useRef(0),[f,h]=c.useState(0),m=()=>{d.current!==null&&(clearTimeout(d.current),d.current=null)},v=c.useCallback(()=>{l.current&&(l.current.abort(),l.current=null)},[]),x=c.useCallback(async()=>{if(!u.current||document.visibilityState==="hidden")return;v();const b=new AbortController;l.current=b;try{const y=await fetch("/api/plugins",{signal:b.signal});if(!u.current)return;const j=await y.json();if(!u.current)return;i.current=0,r(j.plugins??[]),a(!1),s(!1),d.current=setTimeout(()=>{u.current&&h(S=>S+1)},ox)}catch(y){if(!u.current||y instanceof DOMException&&y.name==="AbortError")return;if(i.current+=1,a(!1),i.current>nx){s(!0);return}const j=sx*Math.pow(2,i.current-1);d.current=setTimeout(()=>{u.current&&h(S=>S+1)},j)}},[v]);c.useEffect(()=>(u.current=!0,()=>{u.current=!1,m(),v()}),[v]),c.useEffect(()=>{document.visibilityState!=="hidden"&&(m(),x())},[f,x]),c.useEffect(()=>{const b=()=>{document.visibilityState==="hidden"?(m(),v()):(i.current=0,s(!1),h(y=>y+1))};return document.addEventListener("visibilitychange",b),()=>{document.removeEventListener("visibilitychange",b)}},[v]);const g=c.useCallback(()=>{i.current=0,s(!1),m(),p.current+=1,h(b=>b+1)},[]);return c.useEffect(()=>(Lo.add(g),()=>{Lo.delete(g)}),[g]),{plugins:e,paused:n,loading:o,retry:g}}const hs=0,ir=1,_r=2,Pc=4;function yi(e){return()=>e}function ix(e){e()}function $c(e,r){return n=>e(r(n))}function bi(e,r){return()=>e(r)}function lx(e,r){return n=>e(r,n)}function ca(e){return e!==void 0}function cx(...e){return()=>{e.map(ix)}}function Or(){}function ms(e,r){return r(e),e}function dx(e,r){return r(e)}function Ke(...e){return e}function Fe(e,r){return e(ir,r)}function Ne(e,r){e(hs,r)}function da(e){e(_r)}function qe(e){return e(Pc)}function be(e,r){return Fe(e,lx(r,hs))}function Ft(e,r){const n=e(ir,s=>{n(),r(s)});return n}function ki(e){let r,n;return s=>o=>{r=o,n&&clearTimeout(n),n=setTimeout(()=>{s(r)},e)}}function Mc(e,r){return e===r}function Ge(e=Mc){let r;return n=>s=>{e(r,s)||(r=s,n(s))}}function Se(e){return r=>n=>{e(n)&&r(n)}}function pe(e){return r=>$c(r,e)}function _t(e){return r=>()=>{r(e)}}function Q(e,...r){const n=ux(...r);return((s,o)=>{switch(s){case _r:da(e);return;case ir:return Fe(e,n(o))}})}function Wt(e,r){return n=>s=>{n(r=e(r,s))}}function vr(e){return r=>n=>{e>0?e--:r(n)}}function Gt(e){let r=null,n;return s=>o=>{r=o,!n&&(n=setTimeout(()=>{n=void 0,s(r)},e))}}function Ie(...e){const r=Array.from({length:e.length});let n=0,s=null;const o=2**e.length-1;return e.forEach((a,i)=>{const l=2**i;Fe(a,d=>{const u=n;n|=l,r[i]=d,u!==o&&n===o&&s&&(s(),s=null)})}),a=>i=>{const l=()=>{a([i].concat(r))};n===o?l():s=l}}function ux(...e){return r=>e.reduceRight(dx,r)}function px(e){let r,n;const s=()=>r==null?void 0:r();return function(o,a){switch(o){case ir:return a?n===a?void 0:(s(),n=a,r=Fe(e,a),r):(s(),Or);case _r:s(),n=null;return}}}function se(e){let r=e;const n=Le();return((s,o)=>{switch(s){case hs:r=o;break;case ir:{o(r);break}case Pc:return r}return n(s,o)})}function pt(e,r){return ms(se(r),n=>be(e,n))}function Le(){const e=[];return((r,n)=>{switch(r){case hs:e.slice().forEach(s=>{s(n)});return;case _r:e.splice(0);return;case ir:return e.push(n),()=>{const s=e.indexOf(n);s>-1&&e.splice(s,1)}}})}function Et(e){return ms(Le(),r=>be(e,r))}const fx={singleton:!0};function $e(e,r=[],n=fx){const{singleton:s}=n;return{constructor:e,dependencies:r,id:hx(),singleton:s}}const hx=()=>Symbol("id");function mx(e){const r=new Map,n=({constructor:s,dependencies:o,id:a,singleton:i})=>{if(i&&r.has(a))return r.get(a);const l=s(o.map(d=>n(d)));return i&&r.set(a,l),l};return n(e)}function Xe(...e){const r=Le(),n=Array.from({length:e.length});let s=0;const o=2**e.length-1;return e.forEach((a,i)=>{const l=2**i;Fe(a,d=>{n[i]=d,s|=l,s===o&&Ne(r,n)})}),function(a,i){switch(a){case _r:{da(r);return}case ir:return s===o&&i(n),Fe(r,i)}}}function we(e,r=Mc){return Q(e,Ge(r))}function Ao(...e){return function(r,n){switch(r){case _r:return;case ir:return cx(...e.map(s=>Fe(s,n)))}}}const st={DEBUG:0,INFO:1,WARN:2,ERROR:3},xx={[st.DEBUG]:"debug",[st.ERROR]:"error",[st.INFO]:"log",[st.WARN]:"warn"},gx=()=>typeof globalThis>"u"?window:globalThis,lr=$e(()=>{const e=se(st.ERROR);return{log:se((r,n,s=st.INFO)=>{const o=gx().VIRTUOSO_LOG_LEVEL??qe(e);s>=o&&console[xx[s]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",r,n)}),logLevel:e}},[],{singleton:!0});function vx(e){return"self"in e?e.document.documentElement:e}function Fc(e){const r=vx(e);return r.ownerDocument.defaultView.getComputedStyle(r).direction==="rtl"}function xr(e,r){return Fc(e)?-r:r}function ji(e,r){return Fc(e)?-r:r}function br(e,r,n){return ua(e,r,n).callbackRef}function ua(e,r,n){const s=ge.useRef(null);let o=i=>{};const a=ge.useMemo(()=>typeof ResizeObserver<"u"?new ResizeObserver(i=>{const l=()=>{const d=i[0].target;d.offsetParent!==null&&e(d)};n?l():requestAnimationFrame(l)}):null,[e,n]);return o=i=>{i&&r?(a==null||a.observe(i),s.current=i):(s.current&&(a==null||a.unobserve(s.current)),s.current=null)},{callbackRef:o,ref:s}}function yx(e,r,n,s,o,a,i,l,d){const u=ge.useCallback(p=>{var y;const f=bx(p.children,r,l?"offsetWidth":"offsetHeight",o);let h=p.parentElement;for(;h.dataset.virtuosoScroller===void 0;)h=h.parentElement;const m=((y=h.lastElementChild)==null?void 0:y.dataset.viewportType)==="window";let v;m&&(v=h.ownerDocument.defaultView);const x=i?l?i.scrollWidth:i.scrollHeight:m?l?v.document.documentElement.scrollWidth:v.document.documentElement.scrollHeight:l?h.scrollWidth:h.scrollHeight,g=i?l?i.offsetWidth:i.offsetHeight:m?l?v.innerWidth:v.innerHeight:l?h.offsetWidth:h.offsetHeight,b=i?l?xr(i,i.scrollLeft):i.scrollTop:m?l?xr(v,v.scrollX||v.document.documentElement.scrollLeft):v.scrollY||v.document.documentElement.scrollTop:l?xr(h,h.scrollLeft):h.scrollTop;s({scrollHeight:x,scrollTop:Math.max(b,0),viewportHeight:g}),a==null||a(l?wi("column-gap",getComputedStyle(p).columnGap,o):wi("row-gap",getComputedStyle(p).rowGap,o)),f!==null&&e(f)},[e,r,o,a,i,s,l]);return ua(u,n,d)}function bx(e,r,n,s){const o=e.length;if(o===0)return null;const a=[];for(let i=0;i<o;i++){const l=e.item(i);if(l.dataset.index===void 0)continue;const d=parseInt(l.dataset.index,10),u=parseFloat(l.dataset.knownSize),p=r(l,n);if(p===0&&s("Zero-sized element, this should not happen",{child:l},st.ERROR),p===u)continue;const f=a[a.length-1];a.length===0||f.size!==p||f.endIndex!==d-1?a.push({endIndex:d,size:p,startIndex:d}):a[a.length-1].endIndex++}return a}function wi(e,r,n){return r!=="normal"&&(r==null?void 0:r.endsWith("px"))!==!0&&n(`${e} was not resolved to pixel value correctly`,r,st.WARN),r==="normal"?0:parseInt(r??"0",10)}const pa=typeof document>"u"?ge.useEffect:ge.useLayoutEffect;function Dc(e,r,n){const s=ge.useRef(null),o=ge.useCallback(d=>{if(!(d!=null&&d.offsetParent))return;const u=d.getBoundingClientRect(),p=u.width;let f,h;if(r){const m=r.getBoundingClientRect(),v=u.top-m.top;h=m.height-Math.max(0,v),f=v+r.scrollTop}else{const m=i.current.ownerDocument.defaultView;h=m.innerHeight-Math.max(0,u.top),f=u.top+m.scrollY}s.current={listHeight:u.height,offsetTop:f,visibleHeight:h,visibleWidth:p},e(s.current)},[e,r]),{callbackRef:a,ref:i}=ua(o,!0,n),l=ge.useCallback(()=>{o(i.current)},[o,i]);return ge.useEffect(()=>{var u;if(r){r.addEventListener("scroll",l);const p=new ResizeObserver(()=>{requestAnimationFrame(l)});return p.observe(r),()=>{r.removeEventListener("scroll",l),p.unobserve(r)}}const d=(u=i.current)==null?void 0:u.ownerDocument.defaultView;return d==null||d.addEventListener("scroll",l),d==null||d.addEventListener("resize",l),()=>{d==null||d.removeEventListener("scroll",l),d==null||d.removeEventListener("resize",l)}},[l,r,i]),a}const xt=$e(()=>{const e=Le(),r=Le(),n=se(0),s=Le(),o=Le(),a=se(0),i=Le(),l=Le(),d=se(0),u=se(0),p=se(0),f=se(0),h=Le(),m=Le(),v=se(!1),x=se(!1),g=se(!1);return be(Q(e,pe(({scrollTop:b})=>b)),r),be(Q(e,pe(({scrollHeight:b})=>b)),l),be(r,a),{deviation:n,deviationCommitted:s,fixedFooterHeight:p,fixedHeaderHeight:u,footerHeight:f,headerHeight:d,horizontalDirection:x,scrollBy:m,scrollContainerState:e,scrollHeight:l,scrollingInProgress:v,scrollTo:h,scrollTop:r,skipAnimationFrameInResizeObserver:g,smoothScrollTargetReached:o,statefulScrollTop:a,viewportHeight:i}},[],{singleton:!0}),cn={lvl:0};function zc(e,r){const n=e.length;if(n===0)return[];let{index:s,value:o}=r(e[0]);const a=[];for(let i=1;i<n;i++){const{index:l,value:d}=r(e[i]);a.push({end:l-1,start:s,value:o}),s=l,o=d}return a.push({end:1/0,start:s,value:o}),a}function Be(e){return e===cn}function dn(e,r){if(!Be(e))return r===e.k?e.v:r<e.k?dn(e.l,r):dn(e.r,r)}function zt(e,r,n="k"){if(Be(e))return[-1/0,void 0];if(Number(e[n])===r)return[e.k,e.v];if(Number(e[n])<r){const s=zt(e.r,r,n);return s[0]===-1/0?[e.k,e.v]:s}return zt(e.l,r,n)}function St(e,r,n){return Be(e)?Oc(r,n,1):r===e.k?rt(e,{k:r,v:n}):r<e.k?Si(rt(e,{l:St(e.l,r,n)})):Si(rt(e,{r:St(e.r,r,n)}))}function Ir(){return cn}function Lr(e,r,n){if(Be(e))return[];const s=zt(e,r)[0];return kx($o(e,s,n))}function Po(e,r){if(Be(e))return cn;const{k:n,l:s,r:o}=e;if(r===n){if(Be(s))return o;if(Be(o))return s;const[a,i]=_c(s);return qn(rt(e,{k:a,l:Bc(s),v:i}))}return r<n?qn(rt(e,{l:Po(s,r)})):qn(rt(e,{r:Po(o,r)}))}function gr(e){return Be(e)?[]:[...gr(e.l),{k:e.k,v:e.v},...gr(e.r)]}function $o(e,r,n){if(Be(e))return[];const{k:s,l:o,r:a,v:i}=e;let l=[];return s>r&&(l=l.concat($o(o,r,n))),s>=r&&s<=n&&l.push({k:s,v:i}),s<=n&&(l=l.concat($o(a,r,n))),l}function qn(e){const{l:r,lvl:n,r:s}=e;if(s.lvl>=n-1&&r.lvl>=n-1)return e;if(n>s.lvl+1){if(Ps(r))return Wc(rt(e,{lvl:n-1}));if(!Be(r)&&!Be(r.r))return rt(r.r,{l:rt(r,{r:r.r.l}),lvl:n,r:rt(e,{l:r.r.r,lvl:n-1})});throw new Error("Unexpected empty nodes")}if(Ps(e))return Mo(rt(e,{lvl:n-1}));if(!Be(s)&&!Be(s.l)){const o=s.l,a=Ps(o)?s.lvl-1:s.lvl;return rt(o,{l:rt(e,{lvl:n-1,r:o.l}),lvl:o.lvl+1,r:Mo(rt(s,{l:o.r,lvl:a}))})}throw new Error("Unexpected empty nodes")}function rt(e,r){return Oc(r.k===void 0?e.k:r.k,r.v===void 0?e.v:r.v,r.lvl===void 0?e.lvl:r.lvl,r.l===void 0?e.l:r.l,r.r===void 0?e.r:r.r)}function Bc(e){return Be(e.r)?e.l:qn(rt(e,{r:Bc(e.r)}))}function Ps(e){return Be(e)||e.lvl>e.r.lvl}function _c(e){return Be(e.r)?[e.k,e.v]:_c(e.r)}function Oc(e,r,n,s=cn,o=cn){return{k:e,l:s,lvl:n,r:o,v:r}}function Si(e){return Mo(Wc(e))}function Wc(e){const{l:r}=e;return!Be(r)&&r.lvl===e.lvl?rt(r,{r:rt(e,{l:r.r})}):e}function Mo(e){const{lvl:r,r:n}=e;return!Be(n)&&!Be(n.r)&&n.lvl===r&&n.r.lvl===r?rt(n,{l:rt(e,{r:n.l}),lvl:r+1}):e}function kx(e){return zc(e,({k:r,v:n})=>({index:r,value:n}))}function Uc(e,r){return!!(e&&e.startIndex===r.startIndex&&e.endIndex===r.endIndex)}function un(e,r){return!!(e&&e[0]===r[0]&&e[1]===r[1])}const fa=$e(()=>({recalcInProgress:se(!1)}),[],{singleton:!0});function Hc(e,r,n){return e[es(e,r,n)]}function es(e,r,n,s=0){let o=e.length-1;for(;s<=o;){const a=Math.floor((s+o)/2),i=e[a],l=n(i,r);if(l===0)return a;if(l===-1){if(o-s<2)return a-1;o=a-1}else{if(o===s)return a;s=a+1}}throw new Error(`Failed binary finding record in array - ${e.join(",")}, searched for ${r}`)}function jx(e,r,n,s){const o=es(e,r,s),a=es(e,n,s,o);return e.slice(o,a+1)}function or(e,r){return Math.round(e.getBoundingClientRect()[r])}function xs(e){return!Be(e.groupOffsetTree)}function ha({index:e},r){return r===e?0:r<e?-1:1}function wx(){return{groupIndices:[],groupOffsetTree:Ir(),lastIndex:0,lastOffset:0,lastSize:0,offsetTree:[],sizeTree:Ir()}}function Sx(e,r){let n=Be(e)?0:1/0;for(const s of r){const{endIndex:o,size:a,startIndex:i}=s;if(n=Math.min(n,i),Be(e)){e=St(e,0,a);continue}const l=Lr(e,i-1,o+1);if(l.some(Lx(s)))continue;let d=!1,u=!1;for(const{end:p,start:f,value:h}of l)d?(o>=f||a===h)&&(e=Po(e,f)):(u=h!==a,d=!0),p>o&&o>=f&&h!==a&&(e=St(e,o+1,h));u&&(e=St(e,i,a))}return[e,n]}function Cx(e){return e.groupIndex!==void 0}function Ex({offset:e},r){return r===e?0:r<e?-1:1}function pn(e,r,n){if(r.length===0)return 0;const{index:s,offset:o,size:a}=Hc(r,e,ha),i=e-s,l=a*i+(i-1)*n+o;return l>0?l+n:l}function Vc(e,r){if(!xs(r))return e;let n=0;for(;r.groupIndices[n]<=e+n;)n++;return e+n}function Gc(e,r,n){if(Cx(e))return r.groupIndices[e.groupIndex]+1;const s=e.index==="LAST"?n:e.index;let o=Vc(s,r);return o=Math.max(0,Math.min(n,o)),o}function Nx(e,r,n,s=0){return s>0&&(r=Math.max(r,Hc(e,s,ha).offset)),zc(jx(e,r,n,Ex),Ix)}function Rx(e,[r,n,s,o]){r.length>0&&s("received item sizes",r,st.DEBUG);const a=e.sizeTree;let i=a,l=0;if(n.length>0&&Be(a)&&r.length===2){const h=r[0].size,m=r[1].size;i=n.reduce((v,x)=>St(St(v,x,h),x+1,m),i)}else[i,l]=Sx(i,r);if(i===a)return e;const{lastIndex:d,lastOffset:u,lastSize:p,offsetTree:f}=Fo(e.offsetTree,l,i,o);return{groupIndices:n,groupOffsetTree:n.reduce((h,m)=>St(h,m,pn(m,f,o)),Ir()),lastIndex:d,lastOffset:u,lastSize:p,offsetTree:f,sizeTree:i}}function Tx(e){return gr(e).map(({k:r,v:n},s,o)=>{const a=o[s+1];return{endIndex:a===void 0?1/0:a.k-1,size:n,startIndex:r}})}function Ci(e,r){let n=0,s=0;for(;n<e;)n+=r[s+1]-r[s]-1,s++;return s-(n===e?0:1)}function Fo(e,r,n,s){let o=e,a=0,i=0,l=0,d=0;if(r===0)o=[];else{d=es(o,r-1,ha),l=o[d].offset;const u=zt(n,r-1);a=u[0],i=u[1],o.length&&o[d].size===zt(n,r)[1]&&(d-=1),o=o.slice(0,d+1)}for(const{start:u,value:p}of Lr(n,r,1/0)){const f=u-a,h=f*i+l+f*s;o.push({index:u,offset:h,size:p}),a=u,l=h,i=p}return{lastIndex:a,lastOffset:l,lastSize:i,offsetTree:o}}function Ix(e){return{index:e.index,value:e}}function Lx(e){const{endIndex:r,size:n,startIndex:s}=e;return o=>o.start===s&&(o.end===r||o.end===1/0)&&o.value===n}const Ax={offsetHeight:"height",offsetWidth:"width"},Ht=$e(([{log:e},{recalcInProgress:r}])=>{const n=Le(),s=Le(),o=pt(s,0),a=Le(),i=Le(),l=se(0),d=se([]),u=se(void 0),p=se(void 0),f=se(void 0),h=se(void 0),m=se((w,E)=>or(w,Ax[E])),v=se(void 0),x=se(0),g=wx(),b=pt(Q(n,Ie(d,e,x),Wt(Rx,g),Ge()),g),y=pt(Q(d,Ge(),Wt((w,E)=>({current:E,prev:w.current}),{current:[],prev:[]}),pe(({prev:w})=>w)),[]);be(Q(d,Se(w=>w.length>0),Ie(b,x),pe(([w,E,R])=>{const N=w.reduce((I,A,$)=>St(I,A,pn(A,E.offsetTree,R)||$),Ir());return{...E,groupIndices:w,groupOffsetTree:N}})),b),be(Q(s,Ie(b),Se(([w,{lastIndex:E}])=>w<E),pe(([w,{lastIndex:E,lastSize:R}])=>[{endIndex:E,size:R,startIndex:w}])),n),be(u,p);const j=pt(Q(u,pe(w=>w===void 0)),!0);be(Q(p,Se(w=>w!==void 0&&Be(qe(b).sizeTree)),pe(w=>{const E=qe(f),R=qe(d).length>0;return E!==void 0&&E!==0?R?[{endIndex:0,size:E,startIndex:0},{endIndex:1,size:w,startIndex:1}]:[]:[{endIndex:0,size:w,startIndex:0}]})),n),be(Q(h,Se(w=>w!==void 0&&w.length>0&&Be(qe(b).sizeTree)),pe(w=>{const E=[];let R=w[0],N=0;for(let I=1;I<w.length;I++){const A=w[I];A!==R&&(E.push({endIndex:I-1,size:R,startIndex:N}),R=A,N=I)}return E.push({endIndex:w.length-1,size:R,startIndex:N}),E})),n),be(Q(d,Ie(f,p),Se(([,w,E])=>w!==void 0&&E!==void 0),pe(([w,E,R])=>{const N=[];for(let I=0;I<w.length;I++){const A=w[I],$=w[I+1];N.push({startIndex:A,endIndex:A,size:E}),$!==void 0&&N.push({startIndex:A+1,endIndex:$-1,size:R})}return N})),n);const S=Et(Q(n,Ie(b),Wt(({sizes:w},[E,R])=>({changed:R!==w,sizes:R}),{changed:!1,sizes:g}),pe(w=>w.changed)));Fe(Q(l,Wt((w,E)=>({diff:w.prev-E,prev:E}),{diff:0,prev:0}),pe(w=>w.diff)),w=>{const{groupIndices:E}=qe(b);if(w>0)Ne(r,!0),Ne(a,w+Ci(w,E));else if(w<0){const R=qe(y);R.length>0&&(w-=Ci(-w,R)),Ne(i,w)}}),Fe(Q(l,Ie(e)),([w,E])=>{w<0&&E("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:l},st.ERROR)});const k=Et(a);be(Q(a,Ie(b),pe(([w,E])=>{const R=E.groupIndices.length>0,N=[],I=E.lastSize;if(R){const A=dn(E.sizeTree,0);let $=0,W=0;for(;$<w;){const L=E.groupIndices[W],P=E.groupIndices.length===W+1?1/0:E.groupIndices[W+1]-L-1;N.push({endIndex:L,size:A,startIndex:L}),N.push({endIndex:L+1+P-1,size:I,startIndex:L+1}),W++,$+=P+1}const C=gr(E.sizeTree);return $!==w&&C.shift(),C.reduce((L,{k:P,v:F})=>{let V=L.ranges;return L.prevSize!==0&&(V=[...L.ranges,{endIndex:P+w-1,size:L.prevSize,startIndex:L.prevIndex}]),{prevIndex:P+w,prevSize:F,ranges:V}},{prevIndex:w,prevSize:0,ranges:N}).ranges}return gr(E.sizeTree).reduce((A,{k:$,v:W})=>({prevIndex:$+w,prevSize:W,ranges:[...A.ranges,{endIndex:$+w-1,size:A.prevSize,startIndex:A.prevIndex}]}),{prevIndex:0,prevSize:I,ranges:[]}).ranges})),n);const T=Et(Q(i,Ie(b,x),pe(([w,{offsetTree:E},R])=>{const N=-w;return pn(N,E,R)})));return be(Q(i,Ie(b,x),pe(([w,E,R])=>{if(E.groupIndices.length>0){if(Be(E.sizeTree))return E;let I=Ir();const A=qe(y);let $=0,W=0,C=0;for(;$<-w;){C=A[W];const L=A[W+1]-C-1;W++,$+=L+1}if(I=gr(E.sizeTree).reduce((L,{k:P,v:F})=>St(L,Math.max(0,P+w),F),I),$!==-w){const L=dn(E.sizeTree,C);I=St(I,0,L);const P=zt(E.sizeTree,-w+1)[1];I=St(I,1,P)}return{...E,sizeTree:I,...Fo(E.offsetTree,0,I,R)}}const N=gr(E.sizeTree).reduce((I,{k:A,v:$})=>St(I,Math.max(0,A+w),$),Ir());return{...E,sizeTree:N,...Fo(E.offsetTree,0,N,R)}})),b),{beforeUnshiftWith:k,data:v,defaultItemSize:p,firstItemIndex:l,fixedItemSize:u,fixedGroupSize:f,gap:x,groupIndices:d,heightEstimates:h,itemSize:m,listRefresh:S,shiftWith:i,shiftWithOffset:T,sizeRanges:n,sizes:b,statefulTotalCount:o,totalCount:s,trackItemSizes:j,unshiftWith:a}},Ke(lr,fa),{singleton:!0});function Px(e){return e.reduce((r,n)=>(r.groupIndices.push(r.totalCount),r.totalCount+=n+1,r),{groupIndices:[],totalCount:0})}const Kc=$e(([{groupIndices:e,sizes:r,totalCount:n},{headerHeight:s,scrollTop:o}])=>{const a=Le(),i=Le(),l=Et(Q(a,pe(Px)));return be(Q(l,pe(d=>d.totalCount)),n),be(Q(l,pe(d=>d.groupIndices)),e),be(Q(Xe(o,r,s),Se(([d,u])=>xs(u)),pe(([d,u,p])=>zt(u.groupOffsetTree,Math.max(d-p,0),"v")[0]),Ge(),pe(d=>[d])),i),{groupCounts:a,topItemsIndexes:i}},Ke(Ht,xt)),cr=$e(([{log:e}])=>{const r=se(!1),n=Et(Q(r,Se(s=>s),Ge()));return Fe(r,s=>{s&&qe(e)("props updated",{},st.DEBUG)}),{didMount:n,propsReady:r}},Ke(lr),{singleton:!0}),$x=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function qc(e){const r=typeof e=="number"?{index:e}:{...e};return r.align||(r.align="start"),(!r.behavior||!$x)&&(r.behavior="auto"),r.offset===void 0&&(r.offset=0),r}const yn=$e(([{gap:e,listRefresh:r,sizes:n,totalCount:s},{fixedFooterHeight:o,fixedHeaderHeight:a,footerHeight:i,headerHeight:l,scrollingInProgress:d,scrollTo:u,smoothScrollTargetReached:p,viewportHeight:f},{log:h}])=>{const m=Le(),v=Le(),x=se(0);let g=null,b=null,y=null;function j(){g!==null&&(g(),g=null),y!==null&&(y(),y=null),b&&(clearTimeout(b),b=null),Ne(d,!1)}return be(Q(m,Ie(n,f,s,x,l,i,h),Ie(e,a,o),pe(([[S,k,T,w,E,R,N,I],A,$,W])=>{const C=qc(S),{align:L,behavior:P,offset:F}=C,V=w-1,le=Gc(C,k,V);let H=pn(le,k.offsetTree,A)+R;L==="end"?(H+=$+zt(k.sizeTree,le)[1]-T+W,le===V&&(H+=N)):L==="center"?H+=($+zt(k.sizeTree,le)[1]-T+W)/2:H-=E,F!==void 0&&F!==0&&(H+=F);const U=re=>{j(),re?(I("retrying to scroll to",{location:S},st.DEBUG),Ne(m,S)):(Ne(v,!0),I("list did not change, scroll successful",{},st.DEBUG))};if(j(),P==="smooth"){let re=!1;y=Fe(r,xe=>{re=re||xe}),g=Ft(p,()=>{U(re)})}else g=Ft(Q(r,Mx(150)),U);return b=setTimeout(()=>{j()},1200),Ne(d,!0),I("scrolling from index to",{behavior:P,index:le,top:H},st.DEBUG),{behavior:P,top:H}})),u),{scrollTargetReached:v,scrollToIndex:m,topListHeight:x}},Ke(Ht,xt,lr),{singleton:!0});function Mx(e){return r=>{const n=setTimeout(()=>{r(!1)},e);return s=>{s&&(r(!0),clearTimeout(n))}}}function ma(e,r){e===0?r():requestAnimationFrame(()=>{ma(e-1,r)})}function xa(e,r){if(e===void 0)return 0;const n=r-1,s=typeof e=="number"?e:e.index==="LAST"?n:e.index;return Math.max(0,Math.min(s,n))}function Do(e){return e===void 0?!0:typeof e=="number"?e===0:e.index===0&&(e.align===void 0||e.align==="start")&&(e.offset===void 0||e.offset===0)}const bn=$e(([{defaultItemSize:e,listRefresh:r,sizes:n},{scrollTop:s},{scrollTargetReached:o,scrollToIndex:a},{didMount:i}])=>{const l=se(!0),d=se(0),u=se(!0);return be(Q(i,Ie(d),Se(([p,f])=>!Do(f)),_t(!1)),l),be(Q(i,Ie(d),Se(([p,f])=>!Do(f)),_t(!1)),u),Fe(Q(Xe(r,i),Ie(l,n,e,u),Se(([[,p],f,{sizeTree:h},m,v])=>p&&(!Be(h)||ca(m))&&!f&&!v),Ie(d)),([,p])=>{if(p===void 0){Ne(l,!0),Ne(u,!0);return}Ft(o,()=>{Ne(u,!0)}),ma(4,()=>{Ft(s,()=>{Ne(l,!0)}),Ne(a,p)})}),{initialItemFinalLocationReached:u,initialTopMostItemIndex:d,scrolledToInitialItem:l}},Ke(Ht,xt,yn,cr),{singleton:!0});function Yc(e,r){return Math.abs(e-r)<1.01}const fn="up",nn="down",Fx="none",Dx={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollHeight:0,scrollTop:0,viewportHeight:0}},zx=0,kn=$e(([{footerHeight:e,headerHeight:r,scrollBy:n,scrollContainerState:s,scrollTop:o,viewportHeight:a}])=>{const i=se(!1),l=se(!0),d=Le(),u=Le(),p=se(4),f=se(zx),h=pt(Q(Ao(Q(we(o),vr(1),_t(!0)),Q(we(o),vr(1),_t(!1),ki(100))),Ge()),!1),m=pt(Q(Ao(Q(n,_t(!0)),Q(n,_t(!1),ki(200))),Ge()),!1);be(Q(Xe(we(o),we(f)),pe(([y,j])=>y<=j),Ge()),l),be(Q(l,Gt(50)),u);const v=Et(Q(Xe(s,we(a),we(r),we(e),we(p)),Wt((y,[{scrollHeight:j,scrollTop:S},k,T,w,E])=>{const R=S+k-j>-E,N={scrollHeight:j,scrollTop:S,viewportHeight:k};if(R){let A,$;return S>y.state.scrollTop?(A="SCROLLED_DOWN",$=y.state.scrollTop-S):(A="SIZE_DECREASED",$=y.state.scrollTop-S||y.scrollTopDelta),{atBottom:!0,atBottomBecause:A,scrollTopDelta:$,state:N}}let I;return N.scrollHeight>y.state.scrollHeight?I="SIZE_INCREASED":k<y.state.viewportHeight?I="VIEWPORT_HEIGHT_DECREASING":S<y.state.scrollTop?I="SCROLLING_UPWARDS":I="NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM",{atBottom:!1,notAtBottomBecause:I,state:N}},Dx),Ge((y,j)=>y!==void 0&&y.atBottom===j.atBottom))),x=pt(Q(s,Wt((y,{scrollHeight:j,scrollTop:S,viewportHeight:k})=>{if(!Yc(y.scrollHeight,j)){const T=j-(S+k)<1;return y.scrollTop!==S&&T?{changed:!0,jump:y.scrollTop-S,scrollHeight:j,scrollTop:S}:{changed:!0,jump:0,scrollHeight:j,scrollTop:S}}return{changed:!1,jump:0,scrollHeight:j,scrollTop:S}},{changed:!1,jump:0,scrollHeight:0,scrollTop:0}),Se(y=>y.changed),pe(y=>y.jump)),0);be(Q(v,pe(y=>y.atBottom)),i),be(Q(i,Gt(50)),d);const g=se(nn);be(Q(s,pe(({scrollTop:y})=>y),Ge(),Wt((y,j)=>qe(m)?{direction:y.direction,prevScrollTop:j}:{direction:j<y.prevScrollTop?fn:nn,prevScrollTop:j},{direction:nn,prevScrollTop:0}),pe(y=>y.direction)),g),be(Q(s,Gt(50),_t(Fx)),g);const b=se(0);return be(Q(h,Se(y=>!y),_t(0)),b),be(Q(o,Gt(100),Ie(h),Se(([y,j])=>j),Wt(([y,j],[S])=>[j,S],[0,0]),pe(([y,j])=>j-y)),b),{atBottomState:v,atBottomStateChange:d,atBottomThreshold:p,atTopStateChange:u,atTopThreshold:f,isAtBottom:i,isAtTop:l,isScrolling:h,lastJumpDueToItemResize:x,scrollDirection:g,scrollVelocity:b}},Ke(xt)),hn="top",mn="bottom",Ei="none";function Ni(e,r,n){return typeof e=="number"?n===fn&&r===hn||n===nn&&r===mn?e:0:n===fn?r===hn?e.main:e.reverse:r===mn?e.main:e.reverse}function Ri(e,r){return typeof e=="number"?e:e[r]??0}const ga=$e(([{deviation:e,fixedHeaderHeight:r,headerHeight:n,scrollTop:s,viewportHeight:o}])=>{const a=Le(),i=se(0),l=se(0),d=se(0),u=pt(Q(Xe(we(s),we(o),we(n),we(a,un),we(d),we(i),we(r),we(e),we(l)),pe(([p,f,h,[m,v],x,g,b,y,j])=>{const S=p-y,k=g+b,T=Math.max(h-S,0);let w=Ei;const E=Ri(j,hn),R=Ri(j,mn);return m-=y,m+=h+b,v+=h+b,v-=y,m>p+k-E&&(w=fn),v<p-T+f+R&&(w=nn),w!==Ei?[Math.max(S-h-Ni(x,hn,w)-E,0),S-T-b+f+Ni(x,mn,w)+R]:null}),Se(p=>p!==null),Ge(un)),[0,0]);return{increaseViewportBy:l,listBoundary:a,overscan:d,topListHeight:i,visibleRange:u}},Ke(xt),{singleton:!0});function Bx(e,r,n){if(xs(r)){const s=Vc(e,r);return[{index:zt(r.groupOffsetTree,s)[0],offset:0,size:0},{data:n==null?void 0:n[0],index:s,offset:0,size:0}]}return[{data:n==null?void 0:n[0],index:e,offset:0,size:0}]}const $s={bottom:0,firstItemIndex:0,items:[],offsetBottom:0,offsetTop:0,top:0,topItems:[],topListHeight:0,totalCount:0};function Yn(e,r,n,s,o,a){const{lastIndex:i,lastOffset:l,lastSize:d}=o;let u=0,p=0;if(e.length>0){u=e[0].offset;const x=e[e.length-1];p=x.offset+x.size}const f=n-i,h=l+f*d+(f-1)*s,m=u,v=h-p;return{bottom:p,firstItemIndex:a,items:Ti(e,o,a),offsetBottom:v,offsetTop:u,top:m,topItems:Ti(r,o,a),topListHeight:r.reduce((x,g)=>g.size+x,0),totalCount:n}}function Jc(e,r,n,s,o,a){let i=0;if(n.groupIndices.length>0)for(const m of n.groupIndices){if(m-i>=e)break;i++}const l=e+i,d=a!==void 0,u=(a==null?void 0:a.length)??0,p=xa(r,d?u:l),f=d?Math.max(0,Math.min(l,u-p)):l,h=Array.from({length:f}).map((m,v)=>({data:a==null?void 0:a[v+p],index:v+p,offset:0,size:0}));return Yn(h,[],f,o,n,s)}function Ti(e,r,n){if(e.length===0)return[];if(!xs(r))return e.map(u=>({...u,index:u.index+n,originalIndex:u.index}));const s=e[0].index,o=e[e.length-1].index,a=[],i=Lr(r.groupOffsetTree,s,o);let l,d=0;for(const u of e){(!l||l.end<u.index)&&(l=i.shift(),d=r.groupIndices.indexOf(l.start));let p;u.index===l.start?p={index:d,type:"group"}:p={groupIndex:d,index:u.index-(d+1)+n},a.push({...p,data:u.data,offset:u.offset,originalIndex:u.index,size:u.size})}return a}function Ii(e,r){return e===void 0?0:typeof e=="number"?e:e[r]??0}const kr=$e(([{data:e,firstItemIndex:r,gap:n,sizes:s,totalCount:o},a,{listBoundary:i,topListHeight:l,visibleRange:d},{initialTopMostItemIndex:u,scrolledToInitialItem:p},{topListHeight:f},h,{didMount:m},{recalcInProgress:v}])=>{const x=se([]),g=se(0),b=Le(),y=se(0);be(a.topItemsIndexes,x);const j=pt(Q(Xe(m,v,we(d,un),we(o),we(s),we(u),p,we(x),we(r),we(n),we(y),e,we(g)),Se(([w,E,,R,,,,,,,,N])=>{const I=N!==void 0&&N.length!==R;return w&&!E&&!I}),pe(([,,[w,E],R,N,I,A,$,W,C,L,P,F])=>{var O,G;const V=N,{offsetTree:le,sizeTree:H}=V;if(R===0)return{...$s,totalCount:R};if(w===0&&E===0)return F===0?{...$s,totalCount:R}:Jc(F,I,N,W,C,P);if(Be(H))return F>0?null:Yn(Bx(xa(I,R),V,P),[],R,C,V,W);const U=[];if($.length>0){const K=$[0],te=$[$.length-1];let ee=0;for(const q of Lr(H,K,te)){const oe=q.value,ve=Math.max(q.start,K),ke=Math.min(q.end,te);for(let _=ve;_<=ke;_++)U.push({data:P==null?void 0:P[_],index:_,offset:ee,size:oe}),ee+=oe}}if(!A)return Yn([],U,R,C,V,W);const re=$.length>0?$[$.length-1]+1:0,xe=Nx(le,w,E,re);if(xe.length===0)return null;const he=R-1,z=ms([],K=>{for(const te of xe){const ee=te.value;let q=ee.offset,oe=te.start;const ve=ee.size;if(ee.offset<w){oe+=Math.floor((w-ee.offset+C)/(ve+C));const _=oe-te.start;q+=_*ve+_*C}oe<re&&(q+=(re-oe)*ve,oe=re);const ke=Math.min(te.end,he);for(let _=oe;_<=ke&&!(q>=E);_++)K.push({data:P==null?void 0:P[_],index:_,offset:q,size:ve}),q+=ve+C}}),X=Ii(L,hn),M=Ii(L,mn);if(z.length>0&&(X>0||M>0)){const K=z[0],te=z[z.length-1];if(X>0&&K.index>re){const ee=Math.min(X,K.index-re),q=[];let oe=K.offset;for(let ve=K.index-1;ve>=K.index-ee;ve--){const ke=((O=Lr(H,ve,ve)[0])==null?void 0:O.value)??K.size;oe-=ke+C,q.unshift({data:P==null?void 0:P[ve],index:ve,offset:oe,size:ke})}z.unshift(...q)}if(M>0&&te.index<he){const ee=Math.min(M,he-te.index);let q=te.offset+te.size+C;for(let oe=te.index+1;oe<=te.index+ee;oe++){const ve=((G=Lr(H,oe,oe)[0])==null?void 0:G.value)??te.size;z.push({data:P==null?void 0:P[oe],index:oe,offset:q,size:ve}),q+=ve+C}}}return Yn(z,U,R,C,V,W)}),Se(w=>w!==null),Ge()),$s);be(Q(e,Se(ca),pe(w=>w==null?void 0:w.length)),o),be(Q(j,pe(w=>w.topListHeight)),f),be(f,l),be(Q(j,pe(w=>[w.top,w.bottom])),i),be(Q(j,pe(w=>w.items)),b);const S=Et(Q(j,Se(({items:w})=>w.length>0),Ie(o,e),Se(([{items:w},E])=>w[w.length-1].originalIndex===E-1),pe(([,w,E])=>[w-1,E]),Ge(un),pe(([w])=>w))),k=Et(Q(j,Gt(200),Se(({items:w,topItems:E})=>w.length>0&&w[0].originalIndex===E.length),pe(({items:w})=>w[0].index),Ge())),T=Et(Q(j,Se(({items:w})=>w.length>0),pe(({items:w})=>{let E=0,R=w.length-1;for(;w[E].type==="group"&&E<R;)E++;for(;w[R].type==="group"&&R>E;)R--;return{endIndex:w[R].index,startIndex:w[E].index}}),Ge(Uc)));return{endReached:S,initialItemCount:g,itemsRendered:b,listState:j,minOverscanItemCount:y,rangeChanged:T,startReached:k,topItemsIndexes:x,...h}},Ke(Ht,Kc,ga,bn,yn,kn,cr,fa),{singleton:!0}),Qc=$e(([{fixedFooterHeight:e,fixedHeaderHeight:r,footerHeight:n,headerHeight:s},{listState:o}])=>{const a=Le(),i=pt(Q(Xe(n,e,s,r,o),pe(([l,d,u,p,f])=>l+d+u+p+f.offsetBottom+f.bottom)),0);return be(we(i),a),{totalListHeight:i,totalListHeightChanged:a}},Ke(xt,kr),{singleton:!0}),_x=$e(([{viewportHeight:e},{totalListHeight:r}])=>{const n=se(!1),s=pt(Q(Xe(n,e,r),Se(([o])=>o),pe(([,o,a])=>Math.max(0,o-a)),Gt(0),Ge()),0);return{alignToBottom:n,paddingTopAddition:s}},Ke(xt,Qc),{singleton:!0}),Xc=$e(()=>({context:se(null)})),Ox=({itemBottom:e,itemTop:r,locationParams:{align:n,behavior:s,...o},viewportBottom:a,viewportTop:i})=>r<i?{...o,align:n??"start",...s===void 0?{}:{behavior:s}}:e>a?{...o,align:n??"end",...s===void 0?{}:{behavior:s}}:null,Zc=$e(([{gap:e,sizes:r,totalCount:n},{fixedFooterHeight:s,fixedHeaderHeight:o,headerHeight:a,scrollingInProgress:i,scrollTop:l,viewportHeight:d},{scrollToIndex:u}])=>{const p=Le();return be(Q(p,Ie(r,d,n,a,o,s,l),Ie(e),pe(([[f,h,m,v,x,g,b,y],j])=>{const{calculateViewLocation:S=Ox,done:k,...T}=f,w=Gc(f,h,v-1),E=pn(w,h.offsetTree,j)+x+g,R=E+zt(h.sizeTree,w)[1],N=y+g,I=y+m-b,A=S({itemBottom:R,itemTop:E,locationParams:T,viewportBottom:I,viewportTop:N});return A===null?k==null||k():k&&Ft(Q(i,Se($=>!$),vr(qe(i)?1:2)),k),A}),Se(f=>f!==null)),u),{scrollIntoView:p}},Ke(Ht,xt,yn,kr,lr),{singleton:!0});function Li(e){return e===!1?!1:e==="smooth"?"smooth":"auto"}const Wx=(e,r)=>typeof e=="function"?Li(e(r)):r&&Li(e),Ux=$e(([{listRefresh:e,totalCount:r,fixedItemSize:n,data:s},{atBottomState:o,isAtBottom:a},{scrollToIndex:i},{scrolledToInitialItem:l},{didMount:d,propsReady:u},{log:p},{scrollingInProgress:f},{context:h},{scrollIntoView:m}])=>{const v=se(!1),x=Le();let g=null;function b(k){Ne(i,{align:"end",behavior:k,index:"LAST"})}Fe(Q(Xe(Q(we(r),vr(1)),d),Ie(we(v),a,l,f),pe(([[k,T],w,E,R,N])=>{let I=T&&R,A="auto";return I&&(A=Wx(w,E||N),I=I&&A!==!1),{followOutputBehavior:A,shouldFollow:I,totalCount:k}}),Se(({shouldFollow:k})=>k)),({followOutputBehavior:k,totalCount:T})=>{g!==null&&(g(),g=null),qe(n)===void 0?g=Ft(e,()=>{qe(p)("following output to ",{totalCount:T},st.DEBUG),b(k),g=null}):requestAnimationFrame(()=>{qe(p)("following output to ",{totalCount:T},st.DEBUG),b(k)})});function y(k){const T=Ft(o,w=>{k&&!w.atBottom&&w.notAtBottomBecause==="SIZE_INCREASED"&&g===null&&(qe(p)("scrolling to bottom due to increased size",{},st.DEBUG),b("auto"))});setTimeout(T,100)}Fe(Q(Xe(we(v),r,u),Se(([k,,T])=>k!==!1&&T),Wt(({value:k},[,T])=>({refreshed:k===T,value:T}),{refreshed:!1,value:0}),Se(({refreshed:k})=>k),Ie(v,r)),([,k])=>{qe(l)&&y(k!==!1)}),Fe(x,()=>{y(qe(v)!==!1)}),Fe(Xe(we(v),o),([k,T])=>{k!==!1&&!T.atBottom&&T.notAtBottomBecause==="VIEWPORT_HEIGHT_DECREASING"&&b("auto")});const j=se(null),S=Le();return be(Ao(Q(we(s),pe(k=>(k==null?void 0:k.length)??0)),Q(we(r))),S),Fe(Q(Xe(Q(S,vr(1)),d),Ie(we(j),l,f,h),pe(([[k,T],w,E,R,N])=>T&&E&&(w==null?void 0:w({context:N,totalCount:k,scrollingInProgress:R}))),Se(k=>!!k),Gt(0)),k=>{g!==null&&(g(),g=null),qe(n)===void 0?g=Ft(e,()=>{qe(p)("scrolling into view",{}),Ne(m,k),g=null}):requestAnimationFrame(()=>{qe(p)("scrolling into view",{}),Ne(m,k)})}),{autoscrollToBottom:x,followOutput:v,scrollIntoViewOnChange:j}},Ke(Ht,kn,yn,bn,cr,lr,xt,Xc,Zc)),Hx=$e(([{data:e,firstItemIndex:r,gap:n,sizes:s},{initialTopMostItemIndex:o},{initialItemCount:a,listState:i},{didMount:l}])=>(be(Q(l,Ie(a),Se(([,d])=>d!==0),Ie(o,s,r,n,e),pe(([[,d],u,p,f,h,m])=>Jc(d,u,p,f,h,m))),i),{}),Ke(Ht,bn,kr,cr),{singleton:!0}),Vx=$e(([{didMount:e},{scrollTo:r},{listState:n}])=>{const s=se(0);return Fe(Q(e,Ie(s),Se(([,o])=>o!==0),pe(([,o])=>({top:o}))),o=>{Ft(Q(n,vr(1),Se(a=>a.items.length>1)),()=>{requestAnimationFrame(()=>{Ne(r,o)})})}),{initialScrollTop:s}},Ke(cr,xt,kr),{singleton:!0}),ed=$e(([{scrollVelocity:e}])=>{const r=se(!1),n=Le(),s=se(!1);return be(Q(e,Ie(s,r,n),Se(([o,a])=>a!==!1&&a!==void 0),pe(([o,a,i,l])=>{const{enter:d,exit:u}=a;if(i){if(u(o,l))return!1}else if(d(o,l))return!0;return i}),Ge()),r),Fe(Q(Xe(r,e,n),Ie(s)),([[o,a,i],l])=>{o&&l!==!1&&l!==void 0&&l.change&&l.change(a,i)}),{isSeeking:r,scrollSeekConfiguration:s,scrollSeekRangeChanged:n,scrollVelocity:e}},Ke(kn),{singleton:!0}),va=$e(([{scrollContainerState:e,scrollTo:r}])=>{const n=Le(),s=Le(),o=Le(),a=se(!1),i=se(void 0);return be(Q(Xe(n,s),pe(([{scrollTop:l,viewportHeight:d},{offsetTop:u,listHeight:p}])=>({scrollHeight:p,scrollTop:Math.max(0,l-u),viewportHeight:d}))),e),be(Q(r,Ie(s),pe(([l,{offsetTop:d}])=>({...l,top:l.top+d}))),o),{customScrollParent:i,useWindowScroll:a,windowScrollContainerState:n,windowScrollTo:o,windowViewportRect:s}},Ke(xt)),Gx=$e(([{sizeRanges:e,sizes:r},{headerHeight:n,scrollTop:s},{initialTopMostItemIndex:o},{didMount:a},{useWindowScroll:i,windowScrollContainerState:l,windowViewportRect:d}])=>{const u=Le(),p=se(void 0),f=se(null),h=se(null);return be(l,f),be(d,h),Fe(Q(u,Ie(r,s,i,f,h,n)),([m,v,x,g,b,y,j])=>{const S=Tx(v.sizeTree);g&&b!==null&&y!==null&&(x=b.scrollTop-y.offsetTop),x-=j,m({ranges:S,scrollTop:x})}),be(Q(p,Se(ca),pe(Kx)),o),be(Q(a,Ie(p),Se(([,m])=>m!==void 0),Ge(),pe(([,m])=>m.ranges)),e),{getState:u,restoreStateFrom:p}},Ke(Ht,xt,bn,cr,va));function Kx(e){return{align:"start",index:0,offset:e.scrollTop}}const qx=$e(([{topItemsIndexes:e}])=>{const r=se(0);return be(Q(r,Se(n=>n>=0),pe(n=>Array.from({length:n}).map((s,o)=>o))),e),{topItemCount:r}},Ke(kr));function td(e){let r=!1,n;return(()=>(r||(r=!0,n=e()),n))}const Yx=td(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),Jx=$e(([{deviation:e,deviationCommitted:r,scrollBy:n,scrollingInProgress:s,scrollTop:o},{isAtBottom:a,isScrolling:i,lastJumpDueToItemResize:l,scrollDirection:d},{listState:u},{beforeUnshiftWith:p,gap:f,shiftWithOffset:h,sizes:m},{log:v},{recalcInProgress:x}])=>{const g=Et(Q(u,Ie(l),Wt(([,S,k,T],[{bottom:w,items:E,offsetBottom:R,totalCount:N},I])=>{const A=w+R;let $=0;return k===N&&S.length>0&&E.length>0&&(E[0].originalIndex===0&&S[0].originalIndex===0||($=A-T,$!==0&&($+=I))),[$,E,N,A]},[0,[],0,0]),Se(([S])=>S!==0),Ie(o,d,s,a,v,x),Se(([,S,k,T,,,w])=>!w&&!T&&S!==0&&k===fn),pe(([[S],,,,,k])=>(k("Upward scrolling compensation",{amount:S},st.DEBUG),S))));function b(S){S>0?(Ne(n,{behavior:"auto",top:-S}),Ne(e,0)):(Ne(e,0),Ne(n,{behavior:"auto",top:-S}))}Fe(Q(g,Ie(e,i)),([S,k,T])=>{T&&Yx()?Ne(e,k-S):b(-S)}),Fe(Q(Xe(pt(i,!1),e,x),Se(([S,k,T])=>!S&&!T&&k!==0),pe(([S,k])=>k),Gt(1)),b),be(Q(h,pe(S=>({top:-S}))),n);let y=null;function j(){if(y===null)return;const{offset:S}=y;y=null,Ne(n,{top:S}),requestAnimationFrame(()=>{Ne(e,0),Ne(x,!1)})}return Fe(r,S=>{y===null||!y.acknowledgeable||S===y.offset&&j()}),Fe(Q(p,Ie(m,f),pe(([S,{groupIndices:k,lastSize:T,sizeTree:w},E])=>{function R(W){return W*(T+E)}if(k.length===0)return R(S);let N=0;const I=dn(w,0);let A=0,$=0;for(;A<S;){A++,N+=I;let W=k.length===$+1?1/0:k[$+1]-k[$]-1;A+W>S&&(N-=I,W=S-A+1),A+=W,N+=R(W),$++}return N})),S=>{y={acknowledgeable:qe(e)!==S,offset:S},Ne(e,S),requestAnimationFrame(j)}),{deviation:e}},Ke(xt,kn,kr,Ht,lr,fa)),Qx=$e(([e,r,n,s,o,a,i,l,d,u,p])=>({...e,...r,...n,...s,...o,...a,...i,...l,...d,...u,...p}),Ke(ga,Hx,cr,ed,Qc,Vx,_x,va,Zc,lr,Xc)),rd=$e(([{data:e,defaultItemSize:r,firstItemIndex:n,fixedItemSize:s,fixedGroupSize:o,gap:a,groupIndices:i,heightEstimates:l,itemSize:d,sizeRanges:u,sizes:p,statefulTotalCount:f,totalCount:h,trackItemSizes:m},{initialItemFinalLocationReached:v,initialTopMostItemIndex:x,scrolledToInitialItem:g},b,y,j,S,{scrollToIndex:k},T,{topItemCount:w},{groupCounts:E},R])=>{const{listState:N,minOverscanItemCount:I,topItemsIndexes:A,rangeChanged:$,...W}=S;return be($,R.scrollSeekRangeChanged),be(Q(Xe(R.windowViewportRect,b.headerHeight,b.fixedHeaderHeight),pe(([C,L,P])=>Math.max(L+P+1,C.visibleHeight))),b.viewportHeight),{data:e,defaultItemHeight:r,firstItemIndex:n,fixedItemHeight:s,fixedGroupHeight:o,gap:a,groupCounts:E,heightEstimates:l,initialItemFinalLocationReached:v,initialTopMostItemIndex:x,scrolledToInitialItem:g,sizeRanges:u,topItemCount:w,topItemsIndexes:A,totalCount:h,...j,groupIndices:i,itemSize:d,listState:N,minOverscanItemCount:I,scrollToIndex:k,statefulTotalCount:f,trackItemSizes:m,rangeChanged:$,...W,...R,...b,sizes:p,...y}},Ke(Ht,bn,xt,Gx,Ux,kr,yn,Jx,qx,Kc,Qx));function Xx(e,r){const n={},s={};let o=0;const a=e.length;for(;o<a;)s[e[o]]=1,o+=1;for(const i in r)Object.hasOwn(s,i)||(n[i]=r[i]);return n}const $n=typeof document>"u"?ge.useEffect:ge.useLayoutEffect;function nd(e,r,n){const s=Object.keys(r.required||{}),o=Object.keys(r.optional||{}),a=Object.keys(r.methods||{}),i=Object.keys(r.events||{}),l=ge.createContext({});function d(g,b){g.propsReady!==void 0&&Ne(g.propsReady,!1);for(const y of s){const j=g[r.required[y]];Ne(j,b[y])}for(const y of o)if(y in b){const j=g[r.optional[y]];Ne(j,b[y])}g.propsReady!==void 0&&Ne(g.propsReady,!0)}function u(g){return a.reduce((b,y)=>(b[y]=j=>{const S=g[r.methods[y]];Ne(S,j)},b),{})}function p(g){return i.reduce((b,y)=>(b[y]=px(g[r.events[y]]),b),{})}const f=ge.forwardRef(function(g,b){const{children:y,...j}=g,[S]=ge.useState(()=>ms(mx(e),w=>{d(w,j)})),[k]=ge.useState(bi(p,S));$n(()=>{for(const w of i)w in j&&Fe(k[w],j[w]);return()=>{Object.values(k).map(da)}},[j,k,S]),$n(()=>{d(S,j)}),ge.useImperativeHandle(b,yi(u(S)));const T=n;return t.jsx(l.Provider,{value:S,children:n===void 0?y:t.jsx(T,{...Xx([...s,...o,...i],j),children:y})})}),h=g=>{const b=ge.useContext(l);return ge.useCallback(y=>{Ne(b[g],y)},[b,g])},m=g=>{const b=ge.useContext(l)[g],y=ge.useCallback(j=>Fe(b,j),[b]);return ge.useSyncExternalStore(y,()=>qe(b),()=>qe(b))},v=g=>{const b=ge.useContext(l)[g],[y,j]=ge.useState(bi(qe,b));return $n(()=>Fe(b,S=>{S!==y&&j(yi(S))}),[b,y]),y},x=parseInt(ge.version,10)>=18?m:v;return{Component:f,useEmitter:(g,b)=>{const y=ge.useContext(l)[g];$n(()=>Fe(y,b),[b,y])},useEmitterValue:x,usePublisher:h}}const sd=ge.createContext(void 0),od=ge.createContext(void 0),Ms="-webkit-sticky",Ai="sticky",ya=td(()=>{if(typeof document>"u")return Ai;const e=document.createElement("div");return e.style.position=Ms,e.style.position===Ms?Ms:Ai});function Fs(e){return"self"in e}function Zx(e){return"body"in e}function ad(e,r,n,s=Or,o,a){const i=ge.useRef(null),l=ge.useRef(null),d=ge.useRef(null),u=ge.useCallback(f=>{let h,m,v;const x=f.target;if(Zx(x)||Fs(x)){const b=Fs(x)?x:x.defaultView;v=a===!0?xr(b,b.scrollX):b.scrollY,h=a===!0?b.document.documentElement.scrollWidth:b.document.documentElement.scrollHeight,m=a===!0?b.innerWidth:b.innerHeight}else v=a===!0?xr(x,x.scrollLeft):x.scrollTop,h=a===!0?x.scrollWidth:x.scrollHeight,m=a===!0?x.offsetWidth:x.offsetHeight;const g=()=>{e({scrollHeight:h,scrollTop:Math.max(v,0),viewportHeight:m})};f.suppressFlushSync===!0?g():Tf.flushSync(g),l.current!==null&&(v===l.current||v<=0||v===h-m)&&(l.current=null,r(!0),d.current&&(clearTimeout(d.current),d.current=null))},[e,r,a]);ge.useEffect(()=>{const f=o??i.current;return s(o??i.current),u({suppressFlushSync:!0,target:f}),f.addEventListener("scroll",u,{passive:!0}),()=>{s(null),f.removeEventListener("scroll",u)}},[i,u,n,s,o]);function p(f){const h=i.current;if(!h||(a===!0?"offsetWidth"in h&&h.offsetWidth===0:"offsetHeight"in h&&h.offsetHeight===0))return;const m=f.behavior==="smooth";let v,x,g;Fs(h)?(x=Math.max(or(h.document.documentElement,a===!0?"width":"height"),a===!0?h.document.documentElement.scrollWidth:h.document.documentElement.scrollHeight),v=a===!0?h.innerWidth:h.innerHeight,g=a===!0?xr(h,h.scrollX):h.scrollY):(x=h[a===!0?"scrollWidth":"scrollHeight"],v=or(h,a===!0?"width":"height"),g=a===!0?xr(h,h.scrollLeft):h.scrollTop);const b=x-v;if(f.top===void 0){h.scrollTo(f);return}const y=Math.ceil(Math.max(Math.min(b,f.top),0));if(f.top=y,Yc(v,x)||y===g){e({scrollHeight:x,scrollTop:g,viewportHeight:v}),m&&r(!0);return}m?(l.current=y,d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{d.current=null,l.current=null,r(!0)},1e3)):l.current=null,a===!0&&(f={...f.behavior===void 0?{}:{behavior:f.behavior},left:ji(h,y)}),h.scrollTo(f)}return{scrollByCallback:ge.useCallback(f=>{a===!0&&(f={...f.behavior===void 0?{}:{behavior:f.behavior},...f.top===void 0?{}:{left:ji(i.current,f.top)}}),i.current.scrollBy(f)},[a]),scrollerRef:i,scrollToCallback:p}}function ba(e){return e}const eg=$e(()=>{const e=se(l=>`Item ${l}`),r=se(l=>`Group ${l}`),n=se({}),s=se(ba),o=se("div"),a=se(Or),i=(l,d=null)=>pt(Q(n,pe(u=>u[l]),Ge()),d);return{components:n,computeItemKey:s,EmptyPlaceholder:i("EmptyPlaceholder"),FooterComponent:i("Footer"),GroupComponent:i("Group","div"),groupContent:r,HeaderComponent:i("Header"),HeaderFooterTag:o,ItemComponent:i("Item","div"),itemContent:e,ListComponent:i("List","div"),ScrollerComponent:i("Scroller","div"),scrollerRef:a,ScrollSeekPlaceholder:i("ScrollSeekPlaceholder"),TopItemListComponent:i("TopItemList")}}),tg=$e(([e,r])=>({...e,...r}),Ke(rd,eg)),rg=({height:e})=>t.jsx("div",{style:{height:e}}),ng={overflowAnchor:"none",position:ya(),zIndex:1},id={overflowAnchor:"none"},sg={...id,display:"inline-block",height:"100%"},Pi=ge.memo(function({showTopList:e=!1}){const r=Ce("listState"),n=Ct("sizeRanges"),s=Ce("useWindowScroll"),o=Ce("customScrollParent"),a=Ct("windowScrollContainerState"),i=Ct("scrollContainerState"),l=o||s?a:i,d=Ce("itemContent"),u=Ce("context"),p=Ce("groupContent"),f=Ce("trackItemSizes"),h=Ce("itemSize"),m=Ce("log"),v=Ct("gap"),x=Ce("horizontalDirection"),{callbackRef:g}=yx(n,h,f,e?Or:l,m,v,o,x,Ce("skipAnimationFrameInResizeObserver")),[b,y]=ge.useState(0);ja("deviation",C=>{b!==C&&y(C)});const j=Ct("deviationCommitted");pa(()=>{j(b)},[b,j]);const S=Ce("EmptyPlaceholder"),k=Ce("ScrollSeekPlaceholder")??rg,T=Ce("ListComponent"),w=Ce("ItemComponent"),E=Ce("GroupComponent"),R=Ce("computeItemKey"),N=Ce("isSeeking"),I=Ce("groupIndices").length>0,A=Ce("alignToBottom"),$=Ce("initialItemFinalLocationReached"),W=e?{}:{boxSizing:"border-box",...x?{display:"inline-block",height:"100%",marginInlineStart:b===0?A?"auto":0:b,paddingInlineEnd:r.offsetBottom,paddingInlineStart:r.offsetTop,whiteSpace:"nowrap"}:{marginTop:b===0?A?"auto":0:b,paddingBottom:r.offsetBottom,paddingTop:r.offsetTop},...$?{}:{visibility:"hidden"}};return!e&&r.totalCount===0&&S!==null&&S!==void 0?t.jsx(S,{...ut(S,u)}):t.jsx(T,{...ut(T,u),"data-testid":e?"virtuoso-top-item-list":"virtuoso-item-list",ref:g,style:W,children:(e?r.topItems:r.items).map(C=>{const L=C.originalIndex,P=R(L+r.firstItemIndex,C.data,u);return N?c.createElement(k,{...ut(k,u),height:C.size,index:C.index,key:P,type:C.type||"item",...C.type==="group"?{}:{groupIndex:C.groupIndex}}):C.type==="group"?c.createElement(E,{...ut(E,u),"data-index":L,"data-item-index":C.index,"data-known-size":C.size,key:P,style:ng},p(C.index,u)):c.createElement(w,{...ut(w,u),...lg(w,C.data),"data-index":L,"data-item-group-index":C.groupIndex,"data-item-index":C.index,"data-known-size":C.size,key:P,style:x?sg:id},I?d(C.index,C.groupIndex,C.data,u):d(C.index,C.data,u))})})}),og={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},ag={outline:"none",overflowX:"auto",position:"relative"},ka=e=>({height:"100%",position:"absolute",top:0,width:"100%",...e?{display:"flex",flexDirection:"column"}:void 0}),ld=(e,r,n=0)=>({...ka(e),position:r?"relative":"absolute",top:r?-n:0}),ig={position:ya(),top:0,width:"100%",zIndex:1};function ut(e,r){if(typeof e!="string")return{context:r}}function lg(e,r){return{item:typeof e=="string"?void 0:r}}const cg=ge.memo(function(){const e=Ce("HeaderComponent"),r=Ct("headerHeight"),n=Ce("HeaderFooterTag"),s=br(ge.useMemo(()=>a=>{r(or(a,"height"))},[r]),!0,Ce("skipAnimationFrameInResizeObserver")),o=Ce("context");return e!=null?t.jsx(n,{ref:s,children:t.jsx(e,{...ut(e,o)})}):null}),dg=ge.memo(function(){const e=Ce("FooterComponent"),r=Ct("footerHeight"),n=Ce("HeaderFooterTag"),s=br(ge.useMemo(()=>a=>{r(or(a,"height"))},[r]),!0,Ce("skipAnimationFrameInResizeObserver")),o=Ce("context");return e!=null?t.jsx(n,{ref:s,children:t.jsx(e,{...ut(e,o)})}):null});function cd({useEmitter:e,useEmitterValue:r,usePublisher:n}){return ge.memo(function({children:s,style:o,context:a,...i}){const l=n("scrollContainerState"),d=r("ScrollerComponent"),u=n("smoothScrollTargetReached"),p=r("scrollerRef"),f=r("horizontalDirection")||!1,{scrollByCallback:h,scrollerRef:m,scrollToCallback:v}=ad(l,u,d,p,void 0,f);return e("scrollTo",v),e("scrollBy",h),t.jsx(d,{"data-testid":"virtuoso-scroller","data-virtuoso-scroller":!0,ref:m,style:{...f?ag:og,...o},tabIndex:0,...i,...ut(d,a),children:s})})}function dd({useEmitter:e,useEmitterValue:r,usePublisher:n}){return ge.memo(function({children:s,style:o,context:a,...i}){const l=n("windowScrollContainerState"),d=r("ScrollerComponent"),u=n("smoothScrollTargetReached"),p=r("totalListHeight"),f=r("deviation"),h=r("customScrollParent"),m=ge.useRef(null),v=r("scrollerRef"),{scrollByCallback:x,scrollerRef:g,scrollToCallback:b}=ad(l,u,d,v,h);return pa(()=>{var y;return g.current=h??((y=m.current)==null?void 0:y.ownerDocument.defaultView),()=>{g.current=null}},[g,h]),e("windowScrollTo",b),e("scrollBy",x),t.jsx(d,{ref:m,"data-virtuoso-scroller":!0,style:{position:"relative",...o,...p===0?void 0:{height:p+f}},...i,...ut(d,a),children:s})})}const ug=({children:e})=>{const r=ge.useContext(sd),n=Ct("viewportHeight"),s=Ct("fixedItemHeight"),o=Ce("alignToBottom"),a=Ce("horizontalDirection"),i=ge.useMemo(()=>$c(n,d=>or(d,a?"width":"height")),[n,a]),l=br(i,!0,Ce("skipAnimationFrameInResizeObserver"));return ge.useEffect(()=>{r&&(n(r.viewportHeight),s(r.itemHeight))},[r,n,s]),t.jsx("div",{"data-viewport-type":"element",ref:l,style:ka(o),children:e})},pg=({children:e})=>{const r=ge.useContext(sd),n=Ct("windowViewportRect"),s=Ct("fixedItemHeight"),o=Ce("customScrollParent"),a=Ce("useWindowScroll"),i=Ce("topListHeight"),l=Dc(n,o,Ce("skipAnimationFrameInResizeObserver")),d=Ce("alignToBottom");return ge.useEffect(()=>{r&&(s(r.itemHeight),n({listHeight:0,offsetTop:0,visibleHeight:r.viewportHeight,visibleWidth:100}))},[r,n,s]),t.jsx("div",{"data-viewport-type":"window",ref:l,style:ld(d,a,i),children:e})},fg=({children:e})=>{const r=Ce("TopItemListComponent")??"div",n=Ce("headerHeight"),s={...ig,marginTop:`${n}px`},o=Ce("context");return t.jsx(r,{style:s,...ut(r,o),children:e})},hg=ge.memo(function(e){const r=Ce("useWindowScroll"),n=Ce("topItemsIndexes").length>0,s=Ce("customScrollParent"),o=Ce("context");return t.jsxs(s||r?gg:xg,{...e,context:o,children:[n&&t.jsx(fg,{children:t.jsx(Pi,{showTopList:!0})}),t.jsxs(s||r?pg:ug,{children:[t.jsx(cg,{}),t.jsx(Pi,{}),t.jsx(dg,{})]})]})}),{Component:mg,useEmitter:ja,useEmitterValue:Ce,usePublisher:Ct}=nd(tg,{optional:{restoreStateFrom:"restoreStateFrom",context:"context",followOutput:"followOutput",scrollIntoViewOnChange:"scrollIntoViewOnChange",itemContent:"itemContent",groupContent:"groupContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",minOverscanItemCount:"minOverscanItemCount",totalCount:"totalCount",groupCounts:"groupCounts",topItemCount:"topItemCount",firstItemIndex:"firstItemIndex",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedGroupHeight:"fixedGroupHeight",fixedItemHeight:"fixedItemHeight",heightEstimates:"heightEstimates",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"HeaderFooterTag",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",horizontalDirection:"horizontalDirection",skipAnimationFrameInResizeObserver:"skipAnimationFrameInResizeObserver"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",autoscrollToBottom:"autoscrollToBottom",getState:"getState"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},hg),xg=cd({useEmitter:ja,useEmitterValue:Ce,usePublisher:Ct}),gg=dd({useEmitter:ja,useEmitterValue:Ce,usePublisher:Ct}),vg=mg,yg=$e(()=>{const e=se(u=>t.jsxs("td",{children:["Item $",u]})),r=se(null),n=se(u=>t.jsxs("td",{colSpan:1e3,children:["Group ",u]})),s=se(null),o=se(null),a=se({}),i=se(ba),l=se(Or),d=(u,p=null)=>pt(Q(a,pe(f=>f[u]),Ge()),p);return{components:a,computeItemKey:i,context:r,EmptyPlaceholder:d("EmptyPlaceholder"),FillerRow:d("FillerRow"),fixedFooterContent:o,fixedHeaderContent:s,itemContent:e,groupContent:n,ScrollerComponent:d("Scroller","div"),scrollerRef:l,ScrollSeekPlaceholder:d("ScrollSeekPlaceholder"),TableBodyComponent:d("TableBody","tbody"),TableComponent:d("Table","table"),TableFooterComponent:d("TableFoot","tfoot"),TableHeadComponent:d("TableHead","thead"),TableRowComponent:d("TableRow","tr"),GroupComponent:d("Group","tr")}});Ke(rd,yg);ya();const $i={bottom:0,itemHeight:0,items:[],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},bg={bottom:0,itemHeight:0,items:[{index:0}],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},{ceil:Mi,floor:ts,max:sn,min:Ds,round:Fi}=Math;function Di(e,r,n){return Array.from({length:r-e+1}).map((s,o)=>({data:n===null?null:n[o+e],index:o+e}))}function kg(e){return{...bg,items:e}}function Mn(e,r){return e!==void 0&&e.width===r.width&&e.height===r.height}function jg(e,r){return e!==void 0&&e.column===r.column&&e.row===r.row}const wg=$e(([{increaseViewportBy:e,listBoundary:r,overscan:n,visibleRange:s},{footerHeight:o,headerHeight:a,scrollBy:i,scrollContainerState:l,scrollTo:d,scrollTop:u,smoothScrollTargetReached:p,viewportHeight:f},h,m,{didMount:v,propsReady:x},{customScrollParent:g,useWindowScroll:b,windowScrollContainerState:y,windowScrollTo:j,windowViewportRect:S},k])=>{const T=se(0),w=se(0),E=se($i),R=se({height:0,width:0}),N=se({height:0,width:0}),I=Le(),A=Le(),$=se(0),W=se(null),C=se({column:0,row:0}),L=Le(),P=Le(),F=se(!1),V=se(0),le=se(!0),H=se(!1),U=se(!1);Fe(Q(v,Ie(V),Se(([M,O])=>!Do(O))),()=>{Ne(le,!1)}),Fe(Q(Xe(v,le,N,R,V,H),Se(([M,O,G,K,,te])=>M&&!O&&G.height!==0&&K.height!==0&&!te)),([,,,,M])=>{if(M===void 0){Ne(le,!0);return}Ne(H,!0),ma(1,()=>{Ne(I,M)}),Ft(Q(u),()=>{Ne(r,[0,0]),Ne(le,!0)})}),be(Q(P,Se(M=>M!=null&&M.scrollTop>0),_t(0)),w),Fe(Q(v,Ie(P),Se(([,M])=>M!=null)),([,M])=>{M&&(Ne(R,M.viewport),Ne(N,M.item),Ne(C,M.gap),M.scrollTop>0&&(Ne(F,!0),Ft(Q(u,vr(1)),O=>{Ne(F,!1)}),Ne(d,{top:M.scrollTop})))}),be(Q(R,pe(({height:M})=>M)),f),be(Q(Xe(we(R,Mn),we(N,Mn),we(C,(M,O)=>M!==void 0&&M.column===O.column&&M.row===O.row),we(u)),pe(([M,O,G,K])=>({gap:G,item:O,scrollTop:K,viewport:M}))),L),be(Q(Xe(we(T),s,we(C,jg),we(N,Mn),we(R,Mn),we(W),we(w),we(F),we(le),we(V)),Se(([,,,,,,,M])=>!M),pe(([M,[O,G],K,te,ee,q,oe,,ve,ke])=>{const{column:_,row:Y}=K,{height:Z,width:ne}=te,{width:fe}=ee;if(oe===0&&(M===0||fe===0))return $i;if(ne===0){const Oe=xa(ke,M),J=Oe+Math.max(oe-1,0);return kg(Di(Oe,J,q))}const me=ud(fe,ne,_);let ce,ue;ve?O===0&&G===0&&oe>0?(ce=0,ue=oe-1):(ce=me*ts((O+Y)/(Z+Y)),ue=me*Mi((G+Y)/(Z+Y))-1,ue=Ds(M-1,sn(ue,me-1)),ce=Ds(ue,sn(0,ce))):(ce=0,ue=-1);const je=Di(ce,ue,q),{bottom:Re,top:Ae}=zi(ee,K,te,je),Me=Mi(M/me),_e=Me*Z+(Me-1)*Y-Re;return{bottom:Re,itemHeight:Z,items:je,itemWidth:ne,offsetBottom:_e,offsetTop:Ae,top:Ae}})),E),be(Q(W,Se(M=>M!==null),pe(M=>M.length)),T),be(Q(Xe(R,N,E,C),Se(([M,O,{items:G}])=>G.length>0&&O.height!==0&&M.height!==0),pe(([M,O,{items:G},K])=>{const{bottom:te,top:ee}=zi(M,K,O,G);return[ee,te]}),Ge(un)),r);const re=se(!1);be(Q(u,Ie(re),pe(([M,O])=>O||M!==0)),re);const xe=Et(Q(Xe(E,T),Se(([{items:M}])=>M.length>0),Ie(re),Se(([[M,O],G])=>{const K=M.items[M.items.length-1].index===O-1;return(G||M.bottom>0&&M.itemHeight>0&&M.offsetBottom===0&&M.items.length===O)&&K}),pe(([[,M]])=>M-1),Ge())),he=Et(Q(we(E),Se(({items:M})=>M.length>0&&M[0].index===0),_t(0),Ge())),z=Et(Q(we(E),Ie(F),Se(([{items:M},O])=>M.length>0&&!O),pe(([{items:M}])=>({endIndex:M[M.length-1].index,startIndex:M[0].index})),Ge(Uc),Gt(0)));be(z,m.scrollSeekRangeChanged),be(Q(I,Ie(R,N,T,C),pe(([M,O,G,K,te])=>{const ee=qc(M),{align:q,behavior:oe,offset:ve}=ee;let ke=ee.index;ke==="LAST"&&(ke=K-1),ke=sn(0,ke,Ds(K-1,ke));let _=zo(O,te,G,ke);return q==="end"?_=Fi(_-O.height+G.height):q==="center"&&(_=Fi(_-O.height/2+G.height/2)),ve!==void 0&&ve!==0&&(_+=ve),{behavior:oe,top:_}})),d);const X=pt(Q(E,pe(M=>M.offsetBottom+M.bottom)),0);return be(Q(S,pe(M=>({height:M.visibleHeight,width:M.visibleWidth}))),R),{customScrollParent:g,data:W,deviation:$,footerHeight:o,gap:C,headerHeight:a,increaseViewportBy:e,initialItemCount:w,itemDimensions:N,overscan:n,restoreStateFrom:P,scrollBy:i,scrollContainerState:l,scrollHeight:A,scrollTo:d,scrollToIndex:I,scrollTop:u,smoothScrollTargetReached:p,totalCount:T,useWindowScroll:b,viewportDimensions:R,windowScrollContainerState:y,windowScrollTo:j,windowViewportRect:S,...m,gridState:E,horizontalDirection:U,initialTopMostItemIndex:V,totalListHeight:X,...h,endReached:xe,propsReady:x,rangeChanged:z,startReached:he,stateChanged:L,stateRestoreInProgress:F,...k}},Ke(ga,xt,kn,ed,cr,va,lr));function ud(e,r,n){return sn(1,ts((e+n)/(ts(r)+n)))}function zi(e,r,n,s){const{height:o}=n;if(o===void 0||s.length===0)return{bottom:0,top:0};const a=zo(e,r,n,s[0].index);return{bottom:zo(e,r,n,s[s.length-1].index)+o,top:a}}function zo(e,r,n,s){const o=ud(e.width,n.width,r.column),a=ts(s/o),i=a*n.height+sn(0,a-1)*r.row;return i>0?i+r.row:i}const Sg=$e(()=>{const e=se(f=>`Item ${f}`),r=se({}),n=se(null),s=se("virtuoso-grid-item"),o=se("virtuoso-grid-list"),a=se(ba),i=se("div"),l=se(Or),d=(f,h=null)=>pt(Q(r,pe(m=>m[f]),Ge()),h),u=se(!1),p=se(!1);return be(we(p),u),{components:r,computeItemKey:a,context:n,FooterComponent:d("Footer"),HeaderComponent:d("Header"),headerFooterTag:i,itemClassName:s,ItemComponent:d("Item","div"),itemContent:e,listClassName:o,ListComponent:d("List","div"),readyStateChanged:u,reportReadyState:p,ScrollerComponent:d("Scroller","div"),scrollerRef:l,ScrollSeekPlaceholder:d("ScrollSeekPlaceholder","div")}}),Cg=$e(([e,r])=>({...e,...r}),Ke(wg,Sg)),Eg=ge.memo(function(){const e=Ve("gridState"),r=Ve("listClassName"),n=Ve("itemClassName"),s=Ve("itemContent"),o=Ve("computeItemKey"),a=Ve("isSeeking"),i=Tt("scrollHeight"),l=Ve("ItemComponent"),d=Ve("ListComponent"),u=Ve("ScrollSeekPlaceholder"),p=Ve("context"),f=Tt("itemDimensions"),h=Tt("gap"),m=Ve("log"),v=Ve("stateRestoreInProgress"),x=Tt("reportReadyState"),g=br(ge.useMemo(()=>b=>{const y=b.parentElement.parentElement.scrollHeight;i(y);const j=b.firstChild;if(j!==null){const{height:S,width:k}=j.getBoundingClientRect();f({height:S,width:k})}h({column:Bi("column-gap",getComputedStyle(b).columnGap,m),row:Bi("row-gap",getComputedStyle(b).rowGap,m)})},[i,f,h,m]),!0,!1);return pa(()=>{e.itemHeight>0&&e.itemWidth>0&&x(!0)},[e]),v?null:t.jsx(d,{className:r,ref:g,...ut(d,p),"data-testid":"virtuoso-item-list",style:{paddingBottom:e.offsetBottom,paddingTop:e.offsetTop},children:e.items.map(b=>{const y=o(b.index,b.data,p);return a?t.jsx(u,{...ut(u,p),height:e.itemHeight,index:b.index,width:e.itemWidth},y):c.createElement(l,{...ut(l,p),className:n,"data-index":b.index,key:y},s(b.index,b.data,p))})})}),Ng=ge.memo(function(){const e=Ve("HeaderComponent"),r=Tt("headerHeight"),n=Ve("headerFooterTag"),s=br(ge.useMemo(()=>a=>{r(or(a,"height"))},[r]),!0,!1),o=Ve("context");return e!=null?t.jsx(n,{ref:s,children:t.jsx(e,{...ut(e,o)})}):null}),Rg=ge.memo(function(){const e=Ve("FooterComponent"),r=Tt("footerHeight"),n=Ve("headerFooterTag"),s=br(ge.useMemo(()=>a=>{r(or(a,"height"))},[r]),!0,!1),o=Ve("context");return e!=null?t.jsx(n,{ref:s,children:t.jsx(e,{...ut(e,o)})}):null}),Tg=({children:e})=>{const r=ge.useContext(od),n=Tt("itemDimensions"),s=Tt("viewportDimensions"),o=br(ge.useMemo(()=>a=>{s(a.getBoundingClientRect())},[s]),!0,!1);return ge.useEffect(()=>{r&&(s({height:r.viewportHeight,width:r.viewportWidth}),n({height:r.itemHeight,width:r.itemWidth}))},[r,s,n]),t.jsx("div",{ref:o,style:ka(!1),children:e})},Ig=({children:e})=>{const r=ge.useContext(od),n=Tt("windowViewportRect"),s=Tt("itemDimensions"),o=Ve("customScrollParent"),a=Ve("useWindowScroll"),i=Dc(n,o,!1);return ge.useEffect(()=>{r&&(s({height:r.itemHeight,width:r.itemWidth}),n({listHeight:0,offsetTop:0,visibleHeight:r.viewportHeight,visibleWidth:r.viewportWidth}))},[r,n,s]),t.jsx("div",{ref:i,style:ld(!1,a),children:e})},Lg=ge.memo(function({...e}){const r=Ve("useWindowScroll"),n=Ve("customScrollParent"),s=n||r?Pg:Ag,o=n||r?Ig:Tg,a=Ve("context");return t.jsx(s,{...e,...ut(s,a),children:t.jsxs(o,{children:[t.jsx(Ng,{}),t.jsx(Eg,{}),t.jsx(Rg,{})]})})}),{useEmitter:pd,useEmitterValue:Ve,usePublisher:Tt}=nd(Cg,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex",increaseViewportBy:"increaseViewportBy"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged",readyStateChanged:"readyStateChanged"}},Lg),Ag=cd({useEmitter:pd,useEmitterValue:Ve,usePublisher:Tt}),Pg=dd({useEmitter:pd,useEmitterValue:Ve,usePublisher:Tt});function Bi(e,r,n){return r!=="normal"&&(r==null?void 0:r.endsWith("px"))!==!0&&n(`${e} was not resolved to pixel value correctly`,r,st.WARN),r==="normal"?0:parseInt(r??"0",10)}const $g={source:"vskill-sidebar-own-collapsed",installed:"vskill-sidebar-installed-collapsed"},fd={source:"Own",installed:"Installed"};function Mg(e){try{const r=localStorage.getItem(e);if(r!=null)return r==="true"}catch{}try{if(typeof sessionStorage<"u"){const r=sessionStorage.getItem(e);if(r!=null)return r==="true"}}catch{}return!1}function Fg(e,r){const n=r?"true":"false";try{localStorage.setItem(e,n)}catch{}try{typeof sessionStorage<"u"&&sessionStorage.setItem(e,n)}catch{}}function _i({origin:e,count:r,filteredCount:n,updateCount:s,children:o}){const a=$g[e],[i,l]=c.useState(()=>Mg(a)),d=c.useCallback(()=>{l(h=>{const m=!h;return Fg(a,m),m})},[a]),u=fd[e],p=`sidebar-section-${e}-header`,f=`sidebar-section-${e}-group`;return t.jsxs("section",{"aria-labelledby":p,style:{display:"flex",flexDirection:"column",minHeight:0},children:[t.jsxs("button",{id:p,type:"button","data-testid":"sidebar-section-header","aria-expanded":!i,"aria-controls":f,onClick:d,style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"8px 12px 6px 14px",background:"transparent",border:"none",cursor:"pointer",color:"var(--text-primary)",fontFamily:"var(--font-sans)",textAlign:"left"},children:[t.jsx(zg,{collapsed:i}),t.jsx("h2",{"aria-level":2,style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-primary)",margin:0},children:u}),t.jsx("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:n!=null&&n!==r?`(${n} of ${r})`:`(${r})`}),s!=null&&s>0&&t.jsx(Dg,{origin:e,updateCount:s})]}),!i&&t.jsx("div",{id:f,role:"group","aria-labelledby":p,style:{display:"flex",flexDirection:"column",minHeight:0},children:o})]})}function Dg({origin:e,updateCount:r}){const[n,s]=c.useState(!1),o=fd[e].toLowerCase(),a=`${r} updates available in ${o} section, view all`;return t.jsxs("span",{role:"link",tabIndex:0,"data-testid":"sidebar-section-update-chip","aria-label":a,onClick:i=>{i.stopPropagation(),window.location.hash="#/updates"},onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),i.stopPropagation(),window.location.hash="#/updates")},onFocus:()=>s(!0),onBlur:()=>s(!1),style:{display:"inline-flex",alignItems:"center",gap:2,fontSize:10,color:"var(--color-own)",fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums",cursor:"pointer",padding:"0 4px",borderRadius:3,outline:n?"2px solid var(--border-focus)":"none",outlineOffset:2},children:[r," updates",t.jsx("span",{"aria-hidden":"true",style:{fontSize:9,marginLeft:2},children:"▾"})]})}function zg({collapsed:e}){return t.jsx("svg",{"aria-hidden":"true",width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-secondary)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:e?"rotate(0deg)":"rotate(90deg)",transition:"transform var(--duration-fast, 120ms) var(--ease-standard, ease)",flexShrink:0},children:t.jsx("polyline",{points:"9 18 15 12 9 6"})})}function wa(e,r){const n=r.trim().toLowerCase();return n?e.skill.toLowerCase().includes(n)||e.plugin.toLowerCase().includes(n)||e.dir.toLowerCase().includes(n):!0}function Bg({value:e,onChange:r,placeholder:n="Filter skills…",validationPattern:s,validationMessage:o="Invalid filter expression"}){const a=c.useRef(null),i=c.useId(),l=!!s&&e.trim()!==""&&!s.test(e);return c.useEffect(()=>{function d(u){var h;if(u.key!=="/")return;const p=u.target;if(!p)return;const f=p.tagName;f==="INPUT"||f==="TEXTAREA"||p.isContentEditable||(u.preventDefault(),(h=a.current)==null||h.focus())}return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[]),t.jsxs("div",{role:"search",style:{display:"flex",alignItems:"center",gap:6,padding:"6px 12px",borderBottom:"1px solid var(--border-default)"},children:[t.jsxs("svg",{"aria-hidden":"true",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-secondary)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0},children:[t.jsx("circle",{cx:"11",cy:"11",r:"8"}),t.jsx("path",{d:"M21 21l-4.35-4.35"})]}),t.jsx("input",{ref:a,type:"search","aria-label":"Filter skills","aria-invalid":l?!0:void 0,"aria-describedby":l?i:void 0,value:e,placeholder:n,onChange:d=>r(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(r(""),d.currentTarget.blur())},style:{flex:1,minWidth:0,border:"none",outline:"none",background:"transparent",color:"var(--text-primary)",fontFamily:"var(--font-sans)",fontSize:12,padding:"2px 0"}}),l&&t.jsx("span",{id:i,role:"alert","aria-live":"polite",style:{fontFamily:"var(--font-sans)",fontSize:10,color:"var(--text-error, #B42318)",marginLeft:4,whiteSpace:"nowrap"},children:o}),t.jsx("kbd",{"aria-hidden":"true",style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",border:"1px solid var(--border-default)",padding:"1px 5px",borderRadius:3,display:e?"none":"inline-block"},children:"/"})]})}function _g({target:e}){const r=typeof e=="string"&&e.length>0,n=r?`symlinked → ${e}`:"symlinked — cycle detected or target unresolved",s=r?`symlinked from ${e}`:"symlinked, target unresolved";return t.jsx("span",{"data-testid":"symlink-chip",role:"img","aria-label":s,title:n,tabIndex:0,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,borderRadius:3,color:"var(--text-secondary)",flexShrink:0},children:t.jsxs("svg",{"data-testid":"symlink-glyph",width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}),t.jsx("path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"})]})})}function Og({skill:e}){if(!e.updateAvailable)return null;const r=e.currentVersion??"",n=e.latestVersion,s=n?`Update available: ${r} → ${n}`.trim():"Update available";return t.jsx("span",{"data-testid":"skill-row-update-glyph",title:s,"aria-label":"Update available",style:{color:"var(--color-own)",display:"inline-flex",flexShrink:0},children:t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M12 19V5"}),t.jsx("path",{d:"M5 12l7-7 7 7"})]})})}function Wg({skillId:e,trackedForUpdates:r}){let n=null;try{n=c.useContext(jc)}catch{n=null}const s=n==null?void 0:n.updatesById.get(e);if(s){const o=`Update available → ${s.version}${s.diffSummary?` — ${s.diffSummary}`:""}`;return t.jsx("span",{"data-testid":"update-chip-update-dot","aria-label":`Update available: ${s.version}`,title:o,style:{display:"inline-block",width:8,height:8,borderRadius:999,background:"var(--color-accent, #2563eb)",flexShrink:0}})}return r?null:t.jsx("span",{"data-testid":"update-chip-untracked-dot","aria-label":"Not tracked for updates",title:"Not tracked — run `vskill outdated` manually",style:{display:"inline-block",width:6,height:6,borderRadius:999,background:"var(--text-muted, var(--text-secondary))",opacity:.55,flexShrink:0}})}function Ug(e,r,n){if(!(!e||e==="frontmatter"))return e==="plugin"?`Inherited from ${n&&n.trim()!==""?n:"plugin"} plugin v${r}`:e==="registry"?"Inherited from registry":"No version declared"}function jn(e){const{version:r,showPrefix:n=!0,size:s="md",source:o,pluginName:a}=e,i=typeof r=="string"?r.trim():"",l=i===""||i==="0.0.0"?"1.0.0":i,d=n&&!l.startsWith("v")?`v${l}`:l,u=s==="sm"?10:12,p=s==="sm"?1:2,f=s==="sm"?5:8,h=o==="registry"||o==="plugin",m=Ug(o,l,a),v=e.title??m,x={display:"inline-flex",alignItems:"center",padding:`${p}px ${f}px`,border:"1px solid var(--border, var(--border-default))",borderRadius:4,background:"var(--bg-subtle, var(--surface-1, transparent))",color:"var(--text-secondary)",fontFamily:"var(--font-mono, var(--font-geist-mono))",fontSize:u,fontVariantNumeric:"tabular-nums",lineHeight:1.2,whiteSpace:"nowrap",flexShrink:0};return h&&(x.fontStyle="italic"),t.jsx("span",{"data-testid":e["data-testid"]??"version-badge","data-version":l,"data-version-source":o,title:v,style:x,children:d})}const Hg={small:{fontSize:"0.625rem",padX:"0.4rem",padY:"0.1rem",height:"18px",icon:10,showName:!1},inline:{fontSize:"0.6875rem",padX:"0.5rem",padY:"0.15rem",height:"22px",icon:12,showName:!0},large:{fontSize:"0.8125rem",padX:"0.65rem",padY:"0.25rem",height:"28px",icon:14,showName:!0}};function Sa({size:e}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 16 16",fill:"none","aria-hidden":!0,children:[t.jsx("rect",{x:"2.75",y:"7",width:"10.5",height:"6.75",rx:"1.25",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.25"}),t.jsx("path",{d:"M5 7V5.25C5 3.59 6.34 2.25 8 2.25C9.66 2.25 11 3.59 11 5.25V7",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",fill:"none"}),t.jsx("circle",{cx:"8",cy:"10.25",r:"0.9",fill:"currentColor"})]})}function Vg({tenantName:e,variant:r="inline"}){const n=Hg[r],s={display:"inline-flex",alignItems:"center",gap:"0.3rem",padding:`${n.padY} ${n.padX}`,height:n.height,borderRadius:"4px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:n.fontSize,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",whiteSpace:"nowrap",lineHeight:1,color:"#92400E",backgroundColor:"#FFFBEB",border:"1px solid #FCD34D"};return t.jsxs("span",{role:"status","aria-label":`Private skill — visible to ${e} members only`,style:s,"data-private":"true",children:[t.jsx(Sa,{size:n.icon}),t.jsx("span",{children:"Private"}),n.showName&&t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-hidden":!0,style:{opacity:.55,fontWeight:500},children:"·"}),t.jsx("span",{style:{fontWeight:500,textTransform:"none",letterSpacing:"0.01em"},children:e})]})]})}function Gg({repoFullName:e,variant:r="row"}){const n=e?`From private repo: ${e}`:"From a private repo",s={display:"inline-flex",alignItems:"center",gap:r==="tag"?4:0,height:18,padding:r==="tag"?"0 6px":"0 3px",borderRadius:4,color:"var(--private-fg, #92400e)",backgroundColor:"var(--private-bg, rgba(245,158,11,0.12))",border:"1px solid var(--private-border-soft, rgba(245,158,11,0.35))",fontFamily:"var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace)",fontSize:10,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",lineHeight:1,flexShrink:0};return t.jsxs("span",{role:"status","aria-label":n,title:n,"data-testid":"skill-row-private-chip","data-private":"true","data-variant":r,style:s,children:[t.jsx(Sa,{size:11}),r==="tag"?t.jsx("span",{children:"Private"}):null]})}function Kg({skill:e,isSelected:r,onSelect:n,onContextMenu:s,dirty:o,repoVisibility:a,repoFullName:i}){const l=e.origin==="installed"?"var(--status-installed)":"var(--status-own)";return t.jsxs("button",{type:"button",onClick:n,onContextMenu:s?d=>{d.preventDefault(),s(d,e)}:void 0,"aria-current":r?"true":void 0,"aria-selected":!!r,"data-testid":"skill-row","data-selected":r,"data-origin":e.origin,"data-skill-id":`${e.plugin}/${e.skill}`,style:{display:"flex",alignItems:"center",gap:8,width:"100%",height:36,padding:"0 12px 0 14px",background:r?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent",boxShadow:r?"inset 2px 0 0 var(--color-accent, var(--accent-surface))":"none",border:"none",borderRadius:0,color:"var(--text-primary)",cursor:"pointer",fontFamily:"var(--font-sans)",fontSize:13,textAlign:"left",transition:"background-color var(--duration-fast, 120ms) var(--ease-standard, ease), box-shadow var(--duration-base, 180ms) var(--ease-standard, ease)"},children:[t.jsx("span",{"aria-hidden":"true","aria-label":e.updateAvailable?"Update available":void 0,title:e.updateAvailable?`Update available${e.latestVersion?` → ${e.latestVersion}`:""}`:void 0,style:{width:e.updateAvailable?10:6,height:e.updateAvailable?10:6,borderRadius:"50%",background:l,display:"inline-block",flexShrink:0,boxShadow:e.updateAvailable?"0 0 0 2px var(--color-own, #d97706)":"none",transition:"box-shadow 180ms ease, width 180ms ease, height 180ms ease"}}),t.jsx("span",{title:e.skill,style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.skill}),o&&t.jsx("span",{"aria-label":"Uncommitted changes","data-testid":"skill-row-dirty-dot",title:"Uncommitted changes — open this skill, click Publish to commit & push",style:{width:7,height:7,borderRadius:"50%",background:"var(--color-warning, #f59e0b)",display:"inline-block",flexShrink:0,boxShadow:"0 0 0 1px rgba(245,158,11,0.25)"}}),t.jsx(jn,{version:e.resolvedVersion??e.version??"1.0.0",source:e.versionSource??(e.version?"frontmatter":"default"),pluginName:e.pluginName??null,size:"sm",showPrefix:!1,"data-testid":"skill-row-version"}),a==="private"&&t.jsx(Gg,{repoFullName:i??null}),e.isSymlink&&t.jsx(_g,{target:e.symlinkTarget??null}),t.jsx(Og,{skill:e}),t.jsx(Wg,{skillId:`${e.plugin}/${e.skill}`,trackedForUpdates:e.trackedForUpdates??!0})]})}const on=c.memo(Kg),hd={platformBaseUrl:"",authMode:"cookie",getAuthHeader:async()=>null},md=c.createContext(hd);function qg({value:e,children:r}){const n=c.useMemo(()=>({...hd,...e??{}}),[e==null?void 0:e.platformBaseUrl,e==null?void 0:e.authMode,e==null?void 0:e.getAuthHeader,e==null?void 0:e.fetchImpl]);return t.jsx(md.Provider,{value:n,children:r})}function gt(){return c.useContext(md)}function Yg(e,r){const n=e.platformBaseUrl.replace(/\/+$/,""),s=r.startsWith("/")?r:`/${r}`;return`${n}${s}`}const Wr=6e4,nt={profile:()=>"account:profile",repos:()=>"account:repos",tokens:()=>"account:tokens",skills:()=>"account:skills",notifications:()=>"account:notifications",exports:()=>"account:exports"};async function vt(e,r,n={}){const s=e.fetchImpl??globalThis.fetch.bind(globalThis),o=new Headers(n.headers??{});if(n.body&&!o.has("Content-Type")&&o.set("Content-Type","application/json"),e.authMode==="bearer"){const l=await e.getAuthHeader();l&&o.set("Authorization",l)}const a=e.authMode==="cookie"?"include":"omit",i=await s(Yg(e,r),{...n,headers:o,credentials:a});if(!i.ok){let l="";try{l=await i.text()}catch{}const d=new Error(`Request to ${r} failed (${i.status}): ${l.slice(0,240)}`);throw d.status=i.status,d}if(i.status!==204)return await i.json()}function wn(){const e=gt();return Rt(nt.profile(),()=>vt(e,"/api/v1/account/profile"),{ttl:Wr})}function xd(){const e=gt();return c.useCallback(async r=>{const n=await vt(e,"/api/v1/account/profile",{method:"PATCH",body:JSON.stringify(r)});return Ue(nt.profile()),n},[e])}function gs(){const e=gt();return Rt(nt.repos(),async()=>Jg(await vt(e,"/api/v1/account/repos")),{ttl:Wr})}function Ca(e){return(e==null?void 0:e.repos)??[]}function Jg(e){if(Array.isArray(e))return{repos:e,totalCount:e.length,publicCount:e.filter(n=>!n.isPrivate).length,privateCount:e.filter(n=>n.isPrivate).length};const r=Array.isArray(e==null?void 0:e.repos)?e.repos:[];return{repos:r,totalCount:(e==null?void 0:e.totalCount)??r.length,publicCount:(e==null?void 0:e.publicCount)??r.filter(n=>!n.isPrivate).length,privateCount:(e==null?void 0:e.privateCount)??r.filter(n=>n.isPrivate).length}}function gd(){const e=gt();return c.useCallback(async r=>{await vt(e,`/api/v1/account/repos/${r}/resync`,{method:"POST"}),Ue(nt.repos())},[e])}function vd(){const e=gt();return c.useCallback(async r=>{await vt(e,`/api/v1/account/repos/${r}`,{method:"DELETE"}),Ue(nt.repos())},[e])}function yd(){const e=gt();return Rt(nt.tokens(),async()=>Qg(await vt(e,"/api/v1/account/tokens")),{ttl:Wr})}function Qg(e){return Array.isArray(e)?e:e.tokens??[]}function bd(){const e=gt();return c.useCallback(async r=>{const n=await vt(e,"/api/v1/account/tokens",{method:"POST",body:JSON.stringify(r)});return Ue(nt.tokens()),n},[e])}function kd(){const e=gt();return c.useCallback(async r=>{await vt(e,`/api/v1/account/tokens/${r}`,{method:"DELETE"}),Ue(nt.tokens())},[e])}function jd(){const e=gt();return Rt(nt.notifications(),()=>vt(e,"/api/v1/account/notifications"),{ttl:Wr})}function wd(){const e=gt();return c.useCallback(async r=>{const n=await vt(e,"/api/v1/account/notifications",{method:"PATCH",body:JSON.stringify(r)});return Ue(nt.notifications()),n},[e])}function Xg(){const e=gt();return Rt(nt.skills(),()=>vt(e,"/api/v1/account/skills/summary"),{ttl:Wr})}function Sd(){const e=gt();return Rt(nt.exports(),async()=>(await vt(e,"/api/v1/account/export")).exports,{ttl:Wr})}function Cd(){const e=gt();return c.useCallback(async()=>{await vt(e,"/api/v1/account/sign-out-all",{method:"POST"}),Ue(nt.profile()),Ue(nt.repos()),Ue(nt.tokens()),Ue(nt.notifications()),Ue(nt.skills()),Ue(nt.exports())},[e])}function Ed(){const e=gt();return c.useCallback(async()=>{const r=await vt(e,"/api/v1/account/export",{method:"POST"});return Ue(nt.exports()),r},[e])}function Nd(){const e=gt();return c.useCallback(async r=>{await vt(e,"/api/v1/account/delete",{method:"POST",body:JSON.stringify({confirmHandle:r})})},[e])}function Zg(){return{profile:wn(),repos:gs(),tokens:yd(),skills:Xg(),notifications:jd(),exports:Sd(),updateProfile:xd(),resyncRepo:gd(),disconnectRepo:vd(),createToken:bd(),revokeToken:kd(),updateNotificationPrefs:wd(),signOutAll:Cd(),requestExport:Ed(),deleteAccount:Nd()}}const ev=/^https?:\/\/(?:www\.)?github\.com\/([^/]+)\/([^/?#]+?)(?:\.git)?\/?$/i,tv=/^git@github\.com:([^/]+)\/([^/?#]+?)(?:\.git)?$/i;function Sn(e){if(!e)return null;const r=e.trim(),n=ev.exec(r);if(n)return`${n[1].toLowerCase()}/${n[2].toLowerCase()}`;const s=tv.exec(r);return s?`${s[1].toLowerCase()}/${s[2].toLowerCase()}`:null}function Rd(e){const r=new Map;for(const n of e)r.set(n.repoFullName.toLowerCase(),n);return r}function rv(e,r){const n=Sn(e);if(!n)return{visibility:"unknown",repo:null};const s=r.get(n);return s?{visibility:s.isPrivate?"private":"public",repo:s}:{visibility:"unknown",repo:null}}function nv(e){const{data:r}=gs(),n=c.useMemo(()=>Rd(Ca(r)),[r]);return rv(e,n)}function Td(){const{data:e,loading:r}=gs(),n=Ca(e);return{lookup:c.useMemo(()=>Rd(n),[n]),repos:n,loading:!!r,privateCount:(e==null?void 0:e.privateCount)??n.filter(o=>o.isPrivate).length,publicCount:(e==null?void 0:e.publicCount)??n.filter(o=>!o.isPrivate).length}}function Id({plugin:e,skills:r,selectedKey:n,onSelect:s,onContextMenu:o,dirtySkillIds:a,repoVisibilityLookup:i}){var p;const l=[...r].sort((f,h)=>f.skill.localeCompare(h.skill)),d=(p=r[0])==null?void 0:p.pluginDisplay,u=!!d&&d.toLowerCase()!==e.toLowerCase();return t.jsxs("div",{role:"group","aria-label":`${e} (${r.length})`,children:[t.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:8,padding:"8px 12px 4px 14px"},children:[t.jsx("span",{style:{fontSize:10,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",fontFamily:"var(--font-sans)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:e,children:e}),t.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",r.length,")"]}),u&&t.jsx("span",{style:{fontSize:9,color:"var(--text-tertiary, var(--text-secondary))",opacity:.75,fontFamily:"var(--font-sans)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:d,children:d})]}),t.jsx("div",{role:"list",children:l.map(f=>{const h=!!n&&n.plugin===f.plugin&&n.skill===f.skill,m=i?Sn(f.repoUrl):null,v=m?i.get(m)??null:null,x=v?v.isPrivate?"private":"public":"unknown";return t.jsx("div",{role:"listitem",children:t.jsx(on,{skill:f,isSelected:h,onSelect:()=>s(f),onContextMenu:o,dirty:a==null?void 0:a.has(`${f.plugin}/${f.skill}`),repoVisibility:x,repoFullName:(v==null?void 0:v.repoFullName)??null})},`${f.plugin}/${f.skill}`)})})]})}function sv(e,r){if(!r)return!1;const n=Sn(e.repoUrl);if(!n)return!1;const s=r.get(n);return(s==null?void 0:s.isPrivate)===!0}function ov(e,r){const n=[],s=[];let o=0,a=0;for(const[i,l]of e){const d=[],u=[];for(const p of l)sv(p,r)?d.push(p):u.push(p);d.length>0&&(n.push([i,d]),o+=d.length),u.length>0&&(s.push([i,u]),a+=u.length)}return{privateItems:n,publicItems:s,privateCount:o,publicCount:a}}function av(e){try{const r=localStorage.getItem(e);if(r!=null)return r==="true"}catch{}return!1}function iv(e,r){try{localStorage.setItem(e,r?"true":"false")}catch{}}function lv({items:e,agentId:r,sectionName:n,repoVisibilityLookup:s,selectedKey:o,onSelect:a,onContextMenu:i,dirtySkillIds:l,children:d}){const{privateItems:u,publicItems:p,privateCount:f,publicCount:h}=ov(e,s);if(f===0||h===0)return t.jsx(t.Fragment,{children:d});const m=`vskill-sidebar-${r}-section-${n}-private-collapsed`,v=`vskill-sidebar-${r}-section-${n}-public-collapsed`;return t.jsxs("div",{"data-testid":"section-privacy-subgroups",children:[t.jsx(Oi,{testId:"sidebar-subgroup-private",storageKey:m,icon:"🔒",label:"Private repos",count:f,items:u,repoVisibilityLookup:s,selectedKey:o,onSelect:a,onContextMenu:i,dirtySkillIds:l}),t.jsx(Oi,{testId:"sidebar-subgroup-public",storageKey:v,icon:"🌐",label:"Public repos",count:h,items:p,repoVisibilityLookup:s,selectedKey:o,onSelect:a,onContextMenu:i,dirtySkillIds:l})]})}function Oi({testId:e,storageKey:r,icon:n,label:s,count:o,items:a,repoVisibilityLookup:i,selectedKey:l,onSelect:d,onContextMenu:u,dirtySkillIds:p}){const[f,h]=c.useState(()=>av(r)),m=c.useCallback(()=>{h(x=>{const g=!x;return iv(r,g),g})},[r]),v=`${e}-group`;return t.jsxs("div",{children:[t.jsxs("button",{type:"button","data-testid":e,"aria-expanded":!f,"aria-controls":v,onClick:m,style:{display:"flex",alignItems:"center",gap:6,width:"100%",padding:"6px 12px 4px 14px",background:"transparent",border:"none",cursor:"pointer",color:"var(--text-secondary)",fontFamily:"var(--font-sans)",textAlign:"left"},children:[t.jsx("span",{"aria-hidden":"true",style:{fontSize:11},children:n}),t.jsx("span",{style:{fontSize:10,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-secondary)"},children:s}),t.jsxs("span",{style:{fontSize:10,color:"var(--text-tertiary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",o,")"]})]}),!f&&t.jsx("div",{id:v,role:"group",children:a.map(([x,g])=>t.jsx(Id,{plugin:x,skills:g,selectedKey:l,onSelect:d,onContextMenu:u,dirtySkillIds:p,repoVisibilityLookup:i},x))})]})}function cv(e,r){if(!e||typeof window>"u")return r;try{const n=window.localStorage.getItem(e);return n===null?r:n==="true"}catch{return r}}function zs({skills:e,pluginName:r,initialCollapsed:n=!1,persistKey:s,renderSkill:o,headerActionSlot:a,forceOpen:i=!1}){var m;const l=r??((m=e[0])==null?void 0:m.pluginName)??"unknown-plugin",[d,u]=c.useState(()=>cv(s,n)),p=i?!1:d,f=c.useCallback(()=>{u(v=>{const x=!v;if(s&&typeof window<"u")try{window.localStorage.setItem(s,String(x))}catch{}return x})},[s]),h=p?"▸":"▾";return t.jsxs("div",{"data-vskill-plugin-tree":l,role:"group","aria-label":`${l} (${e.length})`,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",paddingRight:6},children:[t.jsxs("button",{type:"button",onClick:f,"aria-expanded":!p,style:{display:"flex",alignItems:"center",gap:6,flex:1,padding:"4px 4px 4px 18px",background:"transparent",border:"none",cursor:"pointer",textAlign:"left",color:"var(--text-primary)",fontSize:12,fontWeight:500},children:[t.jsx("span",{"aria-hidden":!0,className:"vskill-chevron tabular-nums",style:{width:16,display:"inline-block",textAlign:"center",fontSize:14,fontWeight:700,color:"var(--color-ink, var(--text-primary))"},children:h}),t.jsx("span",{className:"vskill-plugin-name",style:{fontFamily:"var(--font-mono)"},children:l}),t.jsxs("span",{className:"vskill-plugin-count tabular-nums",style:{marginLeft:"auto",fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-mono)"},children:["(",e.length,")"]})]}),a&&t.jsx("div",{style:{display:"inline-flex",alignItems:"center",flexShrink:0},children:a})]}),!p&&t.jsx("div",{className:"vskill-plugin-tree-children",style:{paddingLeft:36,borderLeft:"1px solid var(--border-subtle, rgba(128,128,128,0.2))",marginLeft:24},children:e.map(v=>t.jsx("div",{"data-vskill-plugin-skill":v.pluginNamespace??v.skill,children:o(v)},`${v.pluginNamespace??v.skill}`))})]})}function Jn({open:e,title:r,body:n,confirmLabel:s="Confirm",cancelLabel:o="Cancel",variant:a="default",onConfirm:i,onCancel:l}){const d=c.useRef(null),u=c.useRef(null),p=c.useRef(null);if(c.useEffect(()=>{if(e)return p.current=document.activeElement??null,requestAnimationFrame(()=>{var v;(v=u.current)==null||v.focus()}),()=>{var v,x;(x=(v=p.current)==null?void 0:v.focus)==null||x.call(v),p.current=null}},[e]),c.useEffect(()=>{if(!e)return;function v(x){if(x.key==="Escape"){x.preventDefault(),l();return}if(x.key==="Tab"&&d.current){const g=d.current.querySelectorAll("button:not([disabled])");if(g.length===0)return;const b=g[0],y=g[g.length-1];x.shiftKey&&document.activeElement===b?(x.preventDefault(),y.focus()):!x.shiftKey&&document.activeElement===y&&(x.preventDefault(),b.focus())}}return window.addEventListener("keydown",v,!0),()=>window.removeEventListener("keydown",v,!0)},[e,l]),!e)return null;const f="confirm-dialog-title",h="confirm-dialog-body",m=a==="destructive"?{background:"var(--red, #d92d20)",color:"#fff",border:"1px solid var(--red, #d92d20)"}:{background:"var(--accent-surface)",color:"var(--text-primary)",border:"1px solid var(--border-default)"};return t.jsx("div",{"data-testid":"confirm-dialog-overlay",onMouseDown:v=>{v.target===v.currentTarget&&l()},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:100},children:t.jsxs("div",{ref:d,role:"alertdialog","aria-modal":"true","aria-labelledby":f,"aria-describedby":h,"data-testid":"confirm-dialog",style:{background:"var(--bg-canvas)",color:"var(--text-primary)",border:"1px solid var(--border-default)",borderRadius:8,padding:20,width:"min(440px, 92vw)",boxShadow:"0 20px 48px rgba(0,0,0,0.32)",fontFamily:"var(--font-sans)"},children:[t.jsx("h2",{id:f,style:{margin:0,fontSize:16,fontWeight:600,marginBottom:8},children:r}),t.jsx("p",{id:h,style:{margin:0,fontSize:13,color:"var(--text-secondary)",marginBottom:16,lineHeight:1.5},children:n}),t.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8},children:[t.jsx("button",{ref:u,type:"button","data-testid":"confirm-dialog-cancel",onClick:l,style:{padding:"6px 14px",borderRadius:6,cursor:"pointer",background:"transparent",color:"var(--text-primary)",border:"1px solid var(--border-default)",fontSize:13},children:o}),t.jsx("button",{type:"button","data-testid":"confirm-dialog-confirm",onClick:i,style:{padding:"6px 14px",borderRadius:6,cursor:"pointer",fontSize:13,...m},children:s})]})]})})}function dv(e){const r=(typeof navigator<"u"?navigator.platform:"").toLowerCase();return r.includes("mac")?"system Trash":r.includes("win")?"Recycle Bin":"Trash"}function Bs(e,r){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:e,severity:r}}))}function uv({pluginName:e,enabled:r,onAfterAction:n}){const[s,o]=c.useState(!1),[a,i]=c.useState(null),[l,d]=c.useState(null),[u,p]=c.useState(!1),f=c.useRef(null);c.useEffect(()=>{if(!s)return;function v(x){f.current&&!f.current.contains(x.target)&&o(!1)}return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[s]);async function h(v){i(v),d(null);try{const x=await fetch(`/api/plugins/${encodeURIComponent(e)}/${v}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),g=await x.json().catch(()=>({}));if(!x.ok||!g.ok){const b=g.error??`${v} failed (${x.status})`;d(b),v==="uninstall"&&Bs(`Failed to uninstall ${e}: ${b}`,"error");return}if(v==="uninstall"){const b=g.fallback==="orphan-cache-removed"?`Removed orphaned ${e}`:`Uninstalled ${e}`;Bs(b,"success")}Ue("skills"),Ac(),n==null||n(),o(!1)}catch(x){const g=x instanceof Error?x.message:String(x);d(g),v==="uninstall"&&Bs(`Failed to uninstall ${e}: ${g}`,"error")}finally{i(null)}}function m(){p(!0)}return t.jsxs("div",{ref:f,style:{position:"relative",display:"inline-flex"},children:[t.jsx("button",{type:"button","aria-label":`Manage ${e}`,title:`Manage ${e}`,onClick:v=>{v.stopPropagation(),o(x=>!x)},"data-vskill-plugin-action-trigger":e,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:22,height:22,padding:0,marginLeft:4,border:"none",background:s?"var(--surface-2, rgba(0,0,0,0.08))":"transparent",color:"var(--text-tertiary)",borderRadius:4,cursor:"pointer",fontSize:14,lineHeight:1},onMouseEnter:v=>{v.currentTarget.style.color="var(--text-primary)",v.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.06))"},onMouseLeave:v=>{v.currentTarget.style.color="var(--text-tertiary)",v.currentTarget.style.background=s?"var(--surface-2, rgba(0,0,0,0.08))":"transparent"},children:"⋯"}),s&&t.jsxs("div",{role:"menu",style:{position:"absolute",top:"calc(100% + 2px)",right:0,minWidth:160,background:"var(--color-paper, #fff)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:6,boxShadow:"0 4px 6px -1px rgba(0,0,0,0.08), 0 8px 14px -4px rgba(0,0,0,0.12)",padding:4,zIndex:30,fontFamily:"var(--font-sans)"},children:[r?t.jsx(_s,{onClick:()=>void h("disable"),disabled:a!==null,busy:a==="disable",label:"Disable",hint:"Keep installed, turn off"}):t.jsx(_s,{onClick:()=>void h("enable"),disabled:a!==null,busy:a==="enable",label:"Enable",hint:"Activate plugin"}),t.jsx(_s,{onClick:m,disabled:a!==null,busy:a==="uninstall",label:"Uninstall",hint:"Remove plugin + skills",danger:!0}),l&&t.jsx("div",{style:{padding:"6px 8px",fontSize:11,color:"var(--color-error, #b91c1c)",background:"color-mix(in oklch, var(--color-error, #b91c1c) 8%, transparent)",borderRadius:4,marginTop:4,lineHeight:1.4,maxWidth:240,wordBreak:"break-word"},children:l})]}),t.jsx(Jn,{open:u,title:`Uninstall ${e}?`,body:`This removes the ${e} plugin and all of its skills. You can reinstall it later from the marketplace.`,confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onCancel:()=>{p(!1),o(!1)},onConfirm:()=>{p(!1),h("uninstall")}})]})}function _s({onClick:e,disabled:r,busy:n,label:s,hint:o,danger:a}){return t.jsxs("button",{type:"button",onClick:i=>{i.stopPropagation(),e()},disabled:r,role:"menuitem",style:{display:"block",width:"100%",padding:"6px 10px",textAlign:"left",border:"none",background:"transparent",borderRadius:4,cursor:r?"not-allowed":"pointer",color:a?"var(--color-error, #b91c1c)":"var(--text-primary)",opacity:r&&!n?.5:1,fontFamily:"inherit"},onMouseEnter:i=>{r||(i.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.05))")},onMouseLeave:i=>{i.currentTarget.style.background="transparent"},children:[t.jsx("div",{style:{fontSize:12,fontWeight:500},children:n?`${s}…`:s}),t.jsx("div",{style:{fontSize:10,color:"var(--text-tertiary)"},children:o})]})}const pv=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function fv({anchorSkillDir:e,candidateLabel:r,initialName:n,initialDescription:s,onConverted:o,onCancel:a}){const[i,l]=c.useState(n),[d,u]=c.useState(s??""),[p,f]=c.useState(!1),[h,m]=c.useState(null),[v,x]=c.useState(null),g=pv.test(i),b=p||!g,y=c.useCallback(async j=>{if(j.preventDefault(),!b){f(!0),m(null),x(null);try{const S=await de.convertToPlugin({anchorSkillDir:e,pluginName:i.trim(),description:d.trim()});o({pluginDir:S.pluginDir,manifestPath:S.manifestPath,validation:S.validation})}catch(S){if(S instanceof Kt){m(S.message);const k=S.details;k&&typeof k.stderr=="string"&&x(k.stderr)}else m(S instanceof Error?S.message:String(S));f(!1)}}},[b,e,i,d,o]);return t.jsx("div",{role:"dialog","aria-modal":"true","aria-labelledby":"vskill-convert-dialog-title",style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.45)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},onClick:j=>{j.target===j.currentTarget&&!p&&a()},children:t.jsxs("form",{onSubmit:y,style:{background:"var(--bg-primary, #fff)",color:"var(--text-primary, #111)",borderRadius:8,padding:20,width:"min(540px, 92vw)",boxShadow:"0 12px 48px rgba(0,0,0,0.25)",fontFamily:"var(--font-sans)"},children:[t.jsxs("h2",{id:"vskill-convert-dialog-title",style:{margin:0,fontSize:16,fontWeight:600},children:["Convert ",t.jsxs("span",{style:{fontFamily:"var(--font-mono)"},children:[r,"/"]})," to a plugin"]}),t.jsxs("p",{style:{marginTop:8,marginBottom:16,fontSize:13,color:"var(--text-secondary)"},children:["Writes ",t.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:".claude-plugin/plugin.json"})," into this folder and validates it via ",t.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:"claude plugin validate"}),". The skills already on disk will appear nested under the new plugin."]}),t.jsx("label",{style:{display:"block",fontSize:12,fontWeight:500,marginBottom:4},children:"Plugin name"}),t.jsx("input",{type:"text",value:i,onChange:j=>l(j.target.value),disabled:p,autoFocus:!0,style:{width:"100%",padding:"6px 8px",fontSize:13,fontFamily:"var(--font-mono)",boxSizing:"border-box",border:"1px solid var(--border-subtle)",borderRadius:4}}),!g&&t.jsx("div",{style:{fontSize:11,color:"var(--color-error, #c00)",marginTop:4},children:"Must be kebab-case (lowercase letters, digits, hyphens; 2–64 chars)."}),t.jsx("label",{style:{display:"block",fontSize:12,fontWeight:500,marginTop:12,marginBottom:4},children:"Description"}),t.jsx("input",{type:"text",value:d,onChange:j=>u(j.target.value),disabled:p,style:{width:"100%",padding:"6px 8px",fontSize:13,boxSizing:"border-box",border:"1px solid var(--border-subtle)",borderRadius:4}}),h&&t.jsxs("div",{role:"alert",style:{marginTop:12,padding:8,fontSize:12,background:"var(--color-error-bg, #fee)",color:"var(--color-error, #c00)",borderRadius:4},children:[t.jsx("div",{style:{fontWeight:500},children:h}),v&&t.jsx("pre",{style:{marginTop:6,padding:6,fontSize:11,fontFamily:"var(--font-mono)",whiteSpace:"pre-wrap",background:"rgba(0,0,0,0.04)",borderRadius:3,maxHeight:160,overflow:"auto"},children:v})]}),t.jsxs("div",{style:{marginTop:16,display:"flex",justifyContent:"flex-end",gap:8},children:[t.jsx("button",{type:"button",onClick:a,disabled:p,style:{padding:"6px 12px",fontSize:13,background:"transparent",border:"1px solid var(--border-subtle)",borderRadius:4,cursor:p?"not-allowed":"pointer"},children:"Cancel"}),t.jsx("button",{type:"submit",disabled:b,style:{padding:"6px 12px",fontSize:13,background:"var(--color-accent, #2b6cb0)",color:"white",border:"none",borderRadius:4,cursor:b?"not-allowed":"pointer",opacity:b?.5:1},children:p?"Converting…":"Convert"})]})]})})}function Wi({name:e,count:r,className:n,variant:s,collapsed:o,onToggle:a,action:i}){const l=s==="authoring"?"var(--color-own, #f59e0b)":"var(--color-accent, #2f6f8f)",d=s==="authoring"?"color-mix(in oklch, var(--color-own, #f59e0b) 10%, var(--color-paper, #fff))":"color-mix(in oklch, var(--color-accent, #2f6f8f) 8%, var(--color-paper, #fff))",u=typeof a=="function",p={position:"sticky",top:0,zIndex:4,backdropFilter:"saturate(1.4) blur(10px)",WebkitBackdropFilter:"saturate(1.4) blur(10px)",background:d,borderLeft:`3px solid ${l}`,borderBottom:"1px solid var(--border-subtle, rgba(128,128,128,0.2))",padding:"7px 10px 7px 9px",fontFamily:"var(--font-serif, ui-serif)",fontSize:13,fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-primary)",display:"flex",alignItems:"center",gap:8,width:"100%",cursor:u?"pointer":"default",border:"none",textAlign:"left"},f=o?"▸":"▾",h=t.jsxs(t.Fragment,{children:[u&&t.jsx("span",{"aria-hidden":!0,style:{fontSize:15,fontWeight:700,color:l,width:16,display:"inline-block",textAlign:"center",letterSpacing:0,textTransform:"none"},children:f}),t.jsx("span",{className:"vskill-group-header-name",children:e}),t.jsxs("span",{className:"vskill-group-header-count tabular-nums",style:{fontFamily:"var(--font-mono)",fontSize:11,fontWeight:500,color:"var(--text-secondary)",letterSpacing:0,textTransform:"none"},children:["(",r,")"]}),i&&t.jsx("span",{style:{marginLeft:"auto"},children:t.jsx(hv,{label:i.label,title:i.title,icon:i.icon,onClick:i.onClick,accent:l})})]});return u?t.jsx("button",{type:"button","data-vskill-group-header":e,className:["vskill-group-header select-none",n??""].join(" ").trim(),style:p,onClick:()=>a(!o),"aria-expanded":!o,children:h}):t.jsx("div",{"data-vskill-group-header":e,role:"heading","aria-level":3,className:["vskill-group-header select-none",n??""].join(" ").trim(),style:p,children:h})}function hv({label:e,title:r,icon:n,onClick:s,accent:o}){return t.jsxs("button",{type:"button","aria-label":e,title:r??e,onClick:a=>{a.stopPropagation(),s()},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,height:22,padding:"0 7px",border:`1px solid ${o}`,background:"transparent",color:o,borderRadius:4,fontSize:10,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",cursor:"pointer",fontFamily:"inherit"},onMouseEnter:a=>{a.currentTarget.style.background=`color-mix(in oklch, ${o} 15%, transparent)`},onMouseLeave:a=>{a.currentTarget.style.background="transparent"},children:[n,e]})}function mv(){return t.jsxs("div",{"aria-hidden":"true",role:"presentation",style:{display:"flex",alignItems:"center",gap:8,height:36,padding:"0 12px 0 14px"},children:[t.jsx("span",{className:"placeholder",style:{width:6,height:6,borderRadius:"50%",flexShrink:0}}),t.jsx("span",{className:"placeholder",style:{height:10,flex:1,borderRadius:3,maxWidth:180}})]})}function xv(e){const r=e.key.split("+").map(l=>l.trim()).filter(Boolean);let n=!!e.meta,s=!!e.ctrl,o=!!e.shift,a=!!e.alt,i=e.key;if(r.length>1){for(const l of r.slice(0,-1)){const d=l.toLowerCase();d==="cmd"||d==="meta"||d==="⌘"?n=!0:d==="ctrl"||d==="control"?s=!0:d==="shift"?o=!0:(d==="alt"||d==="option")&&(a=!0)}i=r[r.length-1]}return{key:i.length===1?i.toLowerCase():i,meta:n,ctrl:s,shift:o,alt:a,allowInInputs:!!e.allowInInputs,handler:e.handler}}function gv(e){if(!e||!(e instanceof HTMLElement))return!1;const r=e.tagName;if(r==="INPUT"||r==="TEXTAREA"||e.isContentEditable)return!0;const n=e.getAttribute("contenteditable");return n!=null&&n!=="false"||e.getAttribute("role")==="textbox"}function vv(e,r){const n=!!e.metaKey,s=!!e.ctrlKey,o=!!e.shiftKey,a=!!e.altKey;return n!==r.meta||s!==r.ctrl||o!==r.shift||a!==r.alt?!1:(e.key.length===1?e.key.toLowerCase():e.key)===r.key}function Bo(e,r={}){const{enabled:n=!0,target:s}=r,o=c.useRef([]),a=Array.isArray(e)?e:[e];o.current=a.map(xv),c.useEffect(()=>{if(!n)return;const i=s??(typeof window<"u"?window:void 0);if(!i)return;function l(d){const u=d,p=gv(u.target);for(const f of o.current){if(!vv(u,f))continue;const h=f.meta||f.ctrl||f.alt;if(!(p&&!f.allowInInputs&&!h)){f.handler(u);return}}}return i.addEventListener("keydown",l),()=>{i.removeEventListener("keydown",l)}},[n,s])}function Ld(){const{data:e,loading:r,error:n,revalidate:s}=Rt("project-github-status",()=>de.getProjectGitHubStatus());return{status:e,loading:r,error:n,revalidate:s}}function yv(e){if(typeof window>"u")return!1;try{return window.localStorage.getItem(`vskill-github-hint-dismissed-${e}`)==="true"}catch{return!1}}function bv({projectRoot:e}){const{status:r,loading:n}=Ld();if(n||!r||r.status==="github"||yv(e))return null;const s=r.status==="no-git"?"GitHub not connected — run `gh repo create ...` to publish your skills":"Origin is not GitHub — add a github.com remote to publish",o=()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:focus-publish-row"))};return t.jsx("button",{type:"button","data-testid":"sidebar-github-not-connected","aria-label":"GitHub not connected — click for help",title:s,onClick:o,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:20,height:20,padding:0,background:"transparent",border:"none",cursor:"pointer",color:"var(--color-own, #f59e0b)"},children:t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("path",{d:"m2 2 20 20"}),t.jsx("path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193"}),t.jsx("path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07"})]})})}const kv=3e4;async function jv(e){const r={name:null,branch:null,is_private:null,sync_state:{kind:"no_remote"}};if(typeof window>"u")return r;try{const n=await fetch(`/api/git/repo-info?folder=${encodeURIComponent(e)}`);return n.ok?await n.json():r}catch{return r}}const Ad=c.forwardRef(function({folder:r,fetchRepoInfo:n=jv,pollIntervalMs:s=kv,tier:o,onConnectPrivateClick:a},i){const l=o==="pro"||o==="enterprise"?o:"free",[d,u]=c.useState(null),[p,f]=c.useState(!1),[h,m]=c.useState(null),v=c.useRef(n);v.current=n;const x=async()=>{if(!r){u(null);return}f(!0),m(null);try{const g=await v.current(r);u(g)}catch(g){m(g instanceof Error?g.message:String(g))}finally{f(!1)}};return c.useImperativeHandle(i,()=>({refresh:x}),[r]),c.useEffect(()=>{if(!r){u(null);return}let g=!1,b=null;const y=async()=>{if(!g&&!(typeof document<"u"&&document.visibilityState!=="visible"))try{const S=await v.current(r);g||u(S)}catch(S){g||m(S instanceof Error?S.message:String(S))}};y(),b=setInterval(y,s);const j=()=>{typeof document<"u"&&document.visibilityState==="visible"&&y()};return typeof document<"u"&&document.addEventListener("visibilitychange",j),()=>{g=!0,b!==null&&clearInterval(b),typeof document<"u"&&document.removeEventListener("visibilitychange",j)}},[r,s]),r?h?t.jsx("div",{"data-testid":"connected-repo-widget","data-state":"error",style:Gr,children:t.jsxs("span",{style:{color:"var(--color-error, #c0392b)",fontSize:12},children:["Couldn't load repo info: ",h]})}):d?!d.name&&d.sync_state.kind==="no_remote"?t.jsx("div",{"data-testid":"connected-repo-widget","data-state":"not-git",style:Gr,children:t.jsx("span",{style:{color:"var(--color-muted, #999)",fontSize:12},children:"No git remote"})}):t.jsxs("div",{"data-testid":"connected-repo-widget","data-state":"connected","data-tier":l,style:Gr,children:[t.jsx("span",{style:Nv,"data-testid":"repo-name",children:d.name??"Local-only"}),d.branch?t.jsxs("span",{style:Rv,"data-testid":"repo-branch",children:[t.jsx(wv,{})," ",d.branch]}):null,t.jsx(Ev,{state:d.sync_state}),t.jsx(Pd,{isPrivate:d.is_private,onConnectPrivateClick:a})]}):t.jsx("div",{"data-testid":"connected-repo-widget","data-state":"loading","aria-busy":p||void 0,style:Gr,children:t.jsx("span",{style:{color:"var(--color-muted, #999)",fontSize:12},children:"Loading…"})}):t.jsx("div",{"data-testid":"connected-repo-widget","data-state":"empty",style:Gr,children:t.jsx("span",{style:{color:"var(--color-muted, #999)",fontSize:12},children:"No project folder selected"})})});function Pd({isPrivate:e,onConnectPrivateClick:r}){return e!==!0?t.jsx(Cv,{isPrivate:e}):t.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[t.jsxs("span",{style:Tv,role:"status",title:"Private GitHub repository","aria-label":"Private repository","data-testid":"visibility-pill","data-visibility":"private","data-private":"true",children:[t.jsx(Sa,{size:11}),t.jsx("span",{children:"Private"})]}),r?t.jsx("button",{type:"button",onClick:r,"data-testid":"repo-connect-private",title:"Install the verified-skill GitHub App to enable read/write access on this private repo.","aria-label":"Connect private repos via GitHub App",style:Iv,children:"Connect"}):null]})}function wv(){return t.jsx("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,style:{verticalAlign:"middle",marginRight:4},children:t.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function Sv(){return t.jsx("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})}function Cv({isPrivate:e}){return e===null?t.jsx("span",{style:{...hr,color:"var(--color-muted, #999)"},"data-testid":"visibility-pill","data-visibility":"unknown",children:"unknown"}):e?t.jsx(Pd,{isPrivate:!0}):t.jsxs("span",{style:{...hr,color:"var(--color-public, #2aa198)"},"data-testid":"visibility-pill","data-visibility":"public","aria-label":"Public repository",children:[t.jsx(Sv,{})," public"]})}function Ev({state:e}){return e.kind==="clean"?t.jsx("span",{style:{...hr,color:"var(--color-clean, #859900)"},"data-testid":"sync-state-pill","data-sync":"clean",children:"in sync"}):e.kind==="no_remote"?t.jsx("span",{style:{...hr,color:"var(--color-muted, #999)"},"data-testid":"sync-state-pill","data-sync":"no_remote",children:"no remote"}):e.kind==="dirty"?t.jsxs("span",{style:{...hr,color:"var(--color-warn, #cb4b16)"},"data-testid":"sync-state-pill","data-sync":"dirty",title:`${e.count} uncommitted ${e.count===1?"change":"changes"}`,children:[e.count," dirty"]}):e.kind==="ahead"?t.jsxs("span",{style:{...hr,color:"var(--color-ahead, #268bd2)"},"data-testid":"sync-state-pill","data-sync":"ahead",children:["+",e.count," ahead"]}):t.jsxs("span",{style:{...hr,color:"var(--color-behind, #6c71c4)"},"data-testid":"sync-state-pill","data-sync":"behind",children:["-",e.count," behind"]})}const Gr={display:"inline-flex",alignItems:"center",gap:6,flexWrap:"wrap",fontSize:12,fontFamily:"var(--font-system, -apple-system, system-ui)"},Nv={fontWeight:500,color:"var(--color-text, #333)"},Rv={display:"inline-flex",alignItems:"center",gap:2,padding:"1px 6px",borderRadius:9999,background:"var(--color-pill-bg, rgba(0,0,0,0.05))",color:"var(--color-text-soft, #555)",fontSize:11},hr={display:"inline-flex",alignItems:"center",gap:3,padding:"1px 6px",borderRadius:9999,background:"var(--color-pill-bg, rgba(0,0,0,0.05))",fontSize:11,fontWeight:500},Tv={display:"inline-flex",alignItems:"center",gap:4,height:18,padding:"0 6px",borderRadius:4,color:"var(--private-fg, #92400e)",backgroundColor:"var(--private-bg, rgba(245,158,11,0.12))",border:"1px solid var(--private-border-soft, rgba(245,158,11,0.35))",fontFamily:"var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace)",fontSize:10,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",lineHeight:1,flexShrink:0},Iv={marginLeft:4,padding:"0px 6px",borderRadius:9999,border:"1px solid currentColor",background:"transparent",color:"inherit",fontSize:10,fontWeight:500,cursor:"pointer",fontFamily:"inherit"},Lv=200;function Av(e){return e.scope==="own"||e.scope==="installed"||e.scope==="global"?e.scope:e.origin==="installed"?"installed":"own"}function Pv(e,r){const n={availableProject:[],availablePersonal:[],availablePlugin:[],authoringProject:[],authoringPlugin:[]};for(const i of e){const l=i.scopeV2??(i.scope==="installed"?"available-project":i.scope==="global"?"available-personal":"authoring-project");l==="available-project"?n.availableProject.push(i):l==="available-personal"?n.availablePersonal.push(i):l==="available-plugin"?n.availablePlugin.push(i):l==="authoring-plugin"?n.authoringPlugin.push(i):n.authoringProject.push(i)}function s(i){const l=i.filter(p=>wa(p,r)),d={};for(const p of l){const f=p.pluginName??p.plugin;(d[f]||(d[f]=[])).push(p)}const u=Object.entries(d).sort((p,f)=>p[0].localeCompare(f[0]));return{total:i.length,filtered:l.length,byPlugin:u}}const o=s(n.authoringProject),a=o.byPlugin.filter(([i,l])=>l.length>=2&&i.trim().length>=2).map(([i,l])=>({groupKey:i,skills:l,anchorSkillDir:l[0].dir}));return{availableProject:s(n.availableProject),availablePersonal:s(n.availablePersonal),availablePlugin:s(n.availablePlugin),authoringProject:o,authoringPlugin:s(n.authoringPlugin),authoringCandidatePlugins:a}}function $v(e,r){const n=[],s=[],o=[];for(const i of e){const l=Av(i);l==="global"?o.push(i):l==="installed"?s.push(i):n.push(i)}function a(i){var p;const l=i.filter(f=>wa(f,r)),d={};for(const f of l)(d[p=f.plugin]||(d[p]=[])).push(f);const u=Object.entries(d).sort((f,h)=>f[0].localeCompare(h[0]));return{total:i.length,filtered:l.length,byPlugin:u}}return{own:a(n),installed:a(s),global:a(o)}}function Mv(e,r){const n=[],s=[];for(const a of e)(a.origin==="installed"?s:n).push(a);function o(a){var u;const i=a.filter(p=>wa(p,r)),l={};for(const p of i)(l[u=p.plugin]||(l[u]=[])).push(p);const d=Object.entries(l).sort((p,f)=>p[0].localeCompare(f[0]));return{total:a.length,filtered:i.length,byPlugin:d}}return{own:o(n),installed:o(s)}}function Fv({skills:e,selectedKey:r,onSelect:n,isLoading:s,error:o,onRetry:a,onContextMenu:i,outdatedByOrigin:l,activeAgentId:d,outdatedByScope:u,topSlot:p,revealSkillId:f,onRevealComplete:h,dirtySkillIds:m,onSkillsChanged:v}){const[x,g]=c.useState(null),b=!!d||e.some(M=>M.scope!==void 0&&M.scope!==null),y=d??"claude-cli",[j,S]=c.useState(""),k=c.useDeferredValue(j),T=c.useMemo(()=>$v(e,k),[e,k]),w=c.useMemo(()=>Pv(e,k),[e,k]),E=y==="claude-code",{plugins:R}=ax(),N=E?{plugins:R??[]}:void 0,I=c.useMemo(()=>{const M=new Map;for(const O of(N==null?void 0:N.plugins)??[]){const G=M.get(O.name);M.set(O.name,!!G||!!O.enabled)}return M},[N==null?void 0:N.plugins]),[A,$]=c.useState(()=>_o(`vskill-sidebar-${y}-group-available-collapsed`)),[W,C]=c.useState(()=>_o(`vskill-sidebar-${y}-group-authoring-collapsed`)),L=c.useCallback(M=>{$(M);try{window.localStorage.setItem(`vskill-sidebar-${y}-group-available-collapsed`,String(M))}catch{}},[y]),P=c.useCallback(M=>{C(M);try{window.localStorage.setItem(`vskill-sidebar-${y}-group-authoring-collapsed`,String(M))}catch{}},[y]),{own:F,installed:V}=c.useMemo(()=>Mv(e,k),[e,k]),H=T.own.filtered+T.installed.filtered+T.global.filtered>=Lv,{lookup:U}=Td(),re=c.useMemo(()=>{const M=O=>{const G=[];for(const[,K]of O){const te=[...K].sort((ee,q)=>ee.skill.localeCompare(q.skill));G.push(...te)}return G};return b?[...M(T.own.byPlugin),...M(T.installed.byPlugin),...M(T.global.byPlugin)]:[...M(F.byPlugin),...M(V.byPlugin)]},[b,T.own.byPlugin,T.installed.byPlugin,T.global.byPlugin,F.byPlugin,V.byPlugin]),xe=c.useMemo(()=>r?re.findIndex(M=>M.plugin===r.plugin&&M.skill===r.skill):-1,[re,r]),he=c.useCallback(M=>{if(re.length===0)return;const O=xe<0?M>0?0:re.length-1:Math.min(Math.max(xe+M,0),re.length-1);n(re[O])},[re,xe,n]),z=c.useMemo(()=>{if(!f)return null;const[M,O]=f.split("/");if(!M||!O)return null;const G=e.find(ee=>ee.plugin===M&&ee.skill===O);if(!G)return{plugin:M,skill:O,bucket:null,pluginName:null};const K=G.source==="plugin"?"plugin":"project",te=K==="plugin"?G.pluginName??M:null;return{plugin:M,skill:O,bucket:K,pluginName:te}},[f,e]),X=c.useRef(null);return c.useEffect(()=>{if(!f){X.current=null;return}if(X.current===f)return;const M=typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(f):f.replace(/["\\]/g,"\\$&"),O=document.querySelector(`[data-skill-id="${M}"]`);O&&(X.current=f,O.scrollIntoView({behavior:"smooth",block:"nearest"}),h==null||h())},[f,h,e]),Bo([{key:"j",handler:()=>he(1)},{key:"k",handler:()=>he(-1)},{key:"Enter",handler:()=>{xe>=0&&n(re[xe])}}],{enabled:!s&&!o}),t.jsxs("div",{"data-testid":"sidebar",style:{display:"flex",flexDirection:"column",minHeight:0,height:"100%",fontFamily:"var(--font-sans)"},children:[p,t.jsx(Bg,{value:j,onChange:S}),s&&t.jsx(Uv,{}),!s&&o&&t.jsx(Hv,{error:o,onRetry:a}),!s&&!o&&b&&t.jsxs("div",{style:{flex:1,overflowY:"auto",minHeight:0},children:[t.jsx(Wi,{name:B.scopeLabels.groupAvailable.toUpperCase(),variant:"available",collapsed:A,onToggle:L,count:w.availableProject.total+w.availablePersonal.total+w.availablePlugin.total}),!A&&t.jsxs(t.Fragment,{children:[t.jsx(Kr,{label:B.scopeLabels.sourceProject,storageKey:`vskill-sidebar-${y}-available-project-collapsed`,count:w.availableProject.total,filteredCount:j?w.availableProject.filtered:null,updateCount:(u==null?void 0:u.installed)??(l==null?void 0:l.installed),headerRightSlot:E?t.jsx(Gv,{projectRoot:y}):null,children:w.availableProject.filtered===0?t.jsx(Hi,{queryActive:!!j,agentId:y}):t.jsx(qr,{items:w.availableProject.byPlugin,selectedKey:r,onSelect:n,onContextMenu:i,useVirtual:H,dirtySkillIds:m,repoVisibilityLookup:U,agentId:y,sectionName:"available-project"})}),t.jsx(Kr,{label:B.scopeLabels.sourcePersonal,storageKey:`vskill-sidebar-${y}-available-personal-collapsed`,count:w.availablePersonal.total,filteredCount:j?w.availablePersonal.filtered:null,updateCount:u==null?void 0:u.global,children:w.availablePersonal.filtered===0?t.jsx(zv,{queryActive:!!j,agentId:y}):t.jsx(qr,{items:w.availablePersonal.byPlugin,selectedKey:r,onSelect:n,onContextMenu:i,useVirtual:H,dirtySkillIds:m,repoVisibilityLookup:U,agentId:y,sectionName:"available-personal"})}),E&&t.jsxs(Kr,{label:B.scopeLabels.sourcePlugin,storageKey:`vskill-sidebar-${y}-available-plugin-collapsed`,count:w.availablePlugin.total,filteredCount:j?w.availablePlugin.filtered:null,children:[t.jsxs("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("studio:open-marketplace")),style:{display:"flex",alignItems:"center",gap:6,margin:"4px 14px 6px",padding:"4px 8px",fontSize:11,fontWeight:500,border:"1px dashed var(--color-accent, #2f6f8f)",borderRadius:4,background:"transparent",color:"var(--color-accent, #2f6f8f)",cursor:"pointer"},children:[t.jsx("span",{"aria-hidden":!0,children:"🛒"})," Browse marketplaces…"]}),w.availablePlugin.filtered===0?t.jsx(Bv,{queryActive:!!j,hasInstalled:w.availablePlugin.total>0}):w.availablePlugin.byPlugin.map(([M,O])=>t.jsx(zs,{pluginName:M,skills:O,persistKey:`vskill-plugin-available-${M}-collapsed`,headerActionSlot:E?t.jsx(uv,{pluginName:M,enabled:I.get(M)??!0}):void 0,renderSkill:G=>t.jsx(on,{skill:G,isSelected:(r==null?void 0:r.plugin)===G.plugin&&(r==null?void 0:r.skill)===G.skill,onSelect:()=>n(G),onContextMenu:i,dirty:m==null?void 0:m.has(`${G.plugin}/${G.skill}`)})},`available-${M}`))]})]}),t.jsx(Wv,{}),t.jsx(Wi,{name:B.scopeLabels.groupAuthoring.toUpperCase(),variant:"authoring",collapsed:z?!1:W,onToggle:P,count:w.authoringProject.total+w.authoringPlugin.total,action:{label:"New",title:"Create a new skill (standalone or plugin)",icon:t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),onClick:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:request-create-skill",{detail:{mode:"standalone"}}))}}}),(!W||z)&&t.jsxs(t.Fragment,{children:[t.jsx(Kr,{label:B.scopeLabels.authoringSkills,storageKey:`vskill-sidebar-${y}-authoring-project-collapsed`,count:w.authoringProject.total,filteredCount:j?w.authoringProject.filtered:null,updateCount:(u==null?void 0:u.own)??(l==null?void 0:l.source),forceOpen:(z==null?void 0:z.bucket)==="project",children:w.authoringProject.filtered===0?t.jsx(Ui,{queryActive:!!j}):t.jsxs(t.Fragment,{children:[w.authoringCandidatePlugins.map(M=>t.jsx(zs,{pluginName:M.groupKey,skills:M.skills,persistKey:`vskill-candidate-plugin-${M.groupKey}-collapsed`,headerActionSlot:t.jsx("button",{type:"button",onClick:O=>{O.stopPropagation(),g({candidateLabel:M.groupKey,initialName:M.groupKey,anchorSkillDir:M.anchorSkillDir})},title:"Write .claude-plugin/plugin.json into this folder so Claude Code recognizes it as a plugin",style:{fontSize:10,fontWeight:500,padding:"2px 8px",borderRadius:10,border:"1px solid var(--border-subtle, rgba(128,128,128,0.3))",background:"transparent",color:"var(--text-secondary)",cursor:"pointer",fontFamily:"var(--font-sans)"},children:"Not a plugin yet · Convert →"}),renderSkill:O=>t.jsx(on,{skill:O,isSelected:(r==null?void 0:r.plugin)===O.plugin&&(r==null?void 0:r.skill)===O.skill,onSelect:()=>n(O),onContextMenu:i,dirty:m==null?void 0:m.has(`${O.plugin}/${O.skill}`)})},`candidate-${M.groupKey}`)),t.jsx(qr,{items:w.authoringProject.byPlugin.filter(([M])=>!w.authoringCandidatePlugins.some(O=>O.groupKey===M)),selectedKey:r,onSelect:n,onContextMenu:i,useVirtual:H,dirtySkillIds:m,repoVisibilityLookup:U,agentId:y,sectionName:"authoring-project"})]})}),E&&t.jsx(Kr,{label:B.scopeLabels.sourcePlugin,storageKey:`vskill-sidebar-${y}-authoring-plugin-collapsed`,count:w.authoringPlugin.total,filteredCount:j?w.authoringPlugin.filtered:null,forceOpen:(z==null?void 0:z.bucket)==="plugin",children:w.authoringPlugin.filtered===0?t.jsx(_v,{queryActive:!!j,hasSources:w.authoringPlugin.total>0,candidates:w.authoringCandidatePlugins,onPromote:M=>g({candidateLabel:M.groupKey,initialName:M.groupKey,anchorSkillDir:M.anchorSkillDir})}):w.authoringPlugin.byPlugin.map(([M,O])=>t.jsx(zs,{pluginName:M,skills:O,persistKey:`vskill-plugin-authoring-${M}-collapsed`,forceOpen:(z==null?void 0:z.bucket)==="plugin"&&z.pluginName===M,renderSkill:G=>t.jsx(on,{skill:G,isSelected:(r==null?void 0:r.plugin)===G.plugin&&(r==null?void 0:r.skill)===G.skill,onSelect:()=>n(G),onContextMenu:i,dirty:m==null?void 0:m.has(`${G.plugin}/${G.skill}`)})},`authoring-${M}`))})]})]}),!s&&!o&&!b&&t.jsxs("div",{style:{flex:1,overflowY:"auto",minHeight:0},children:[t.jsx(_i,{origin:"source",count:F.total,filteredCount:j?F.filtered:null,updateCount:l==null?void 0:l.source,children:F.filtered===0?t.jsx(Ui,{queryActive:!!j}):t.jsx(qr,{items:F.byPlugin,selectedKey:r,onSelect:n,onContextMenu:i,useVirtual:H,dirtySkillIds:m,repoVisibilityLookup:U,agentId:y,sectionName:"own"})}),t.jsx(Ov,{}),t.jsx(_i,{origin:"installed",count:V.total,filteredCount:j?V.filtered:null,updateCount:l==null?void 0:l.installed,children:V.filtered===0?t.jsx(Hi,{queryActive:!!j}):t.jsx(qr,{items:V.byPlugin,selectedKey:r,onSelect:n,onContextMenu:i,useVirtual:H,dirtySkillIds:m,repoVisibilityLookup:U,agentId:y,sectionName:"installed"})})]}),x&&t.jsx(fv,{anchorSkillDir:x.anchorSkillDir,candidateLabel:x.candidateLabel,initialName:x.initialName,onCancel:()=>g(null),onConverted:M=>{g(null),v==null||v(),M.validation==="skipped"&&window.alert("Plugin manifest written, but schema validation was skipped because the 'claude' CLI is not on PATH. Install Claude Code to enable plugin schema validation.")}})]})}function _o(e){if(typeof window>"u")return!1;try{return window.localStorage.getItem(e)==="true"}catch{return!1}}function Kr({label:e,storageKey:r,count:n,filteredCount:s,updateCount:o,children:a,forceOpen:i=!1,headerRightSlot:l}){const[d,u]=c.useState(()=>_o(r)),p=i?!1:d,f=c.useCallback(()=>{u(m=>{const v=!m;if(typeof window<"u")try{window.localStorage.setItem(r,String(v))}catch{}return v})},[r]),h=s!=null&&s!==n?`${s} of ${n}`:String(n);return t.jsxs("section",{"data-vskill-named-scope":e,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",width:"100%",padding:"6px 12px",gap:8},children:[t.jsxs("button",{type:"button",onClick:f,"aria-expanded":!p,style:{display:"flex",alignItems:"center",gap:8,flex:1,minWidth:0,padding:0,background:"transparent",border:"none",cursor:"pointer",fontFamily:"var(--font-sans)",textAlign:"left"},children:[t.jsx("span",{"aria-hidden":!0,style:{fontSize:14,fontWeight:700,color:"var(--color-ink, var(--text-primary))",width:16,display:"inline-block",textAlign:"center"},children:p?"▸":"▾"}),t.jsx("span",{style:{fontSize:12,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-primary)"},children:e}),t.jsxs("span",{style:{fontSize:11,color:"var(--text-tertiary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",h,")"]}),o!=null&&o>0&&t.jsxs("span",{style:{marginLeft:"auto",fontSize:10,color:"var(--color-own, #f59e0b)"},children:[o," update",o!==1?"s":""]})]}),l]}),!p&&t.jsx("div",{style:{paddingLeft:18},children:a})]})}function Dv(e){const r=[];for(const[n,s]of e){const o=[...s].sort((a,i)=>a.skill.localeCompare(i.skill));r.push({kind:"header",plugin:n,count:o.length});for(const a of o)r.push({kind:"row",skill:a})}return r}function qr({items:e,selectedKey:r,onSelect:n,onContextMenu:s,useVirtual:o,dirtySkillIds:a,repoVisibilityLookup:i,agentId:l,sectionName:d}){if(o){const p=Dv(e);return t.jsx("div",{"data-virtualized":"true",style:{height:420,minHeight:200},children:t.jsx(vg,{overscan:4,totalCount:p.length,itemContent:f=>{const h=p[f];if(!h)return null;if(h.kind==="header")return t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px 4px 14px"},children:[t.jsx("span",{style:{fontSize:10,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",fontFamily:"var(--font-sans)"},children:h.plugin}),t.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",h.count,")"]})]});const m=h.skill,v=!!r&&r.plugin===m.plugin&&r.skill===m.skill,x=i?Sn(m.repoUrl):null,g=x?i.get(x)??null:null,b=g?g.isPrivate?"private":"public":"unknown";return t.jsx(on,{skill:m,isSelected:v,onSelect:()=>n(m),onContextMenu:s,dirty:a==null?void 0:a.has(`${m.plugin}/${m.skill}`),repoVisibility:b,repoFullName:(g==null?void 0:g.repoFullName)??null})}})})}const u=e.map(([p,f])=>t.jsx(Id,{plugin:p,skills:f,selectedKey:r,onSelect:n,onContextMenu:s,dirtySkillIds:a,repoVisibilityLookup:i},p));return t.jsx("div",{"data-virtualized":"false",children:t.jsx(lv,{items:e,agentId:l??"claude-cli",sectionName:d??"section",repoVisibilityLookup:i,selectedKey:r,onSelect:n,onContextMenu:s,dirtySkillIds:a,children:u})})}function Ui({queryActive:e}){return e?t.jsx(Ut,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):t.jsx(Ut,{headline:"No skills yet.",body:t.jsxs(t.Fragment,{children:["Create one with ",t.jsx(Mr,{children:"vskill new"})," or the"," ",t.jsx("strong",{style:{color:"var(--text-primary)"},children:"New skill"})," action in the top rail."]})})}function Hi({queryActive:e,agentId:r}){return e?t.jsx(Ut,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):t.jsx(Ut,{headline:r?`No skills installed for ${r} in this project.`:"No installed skills.",body:t.jsxs(t.Fragment,{children:["Run ",t.jsx(Mr,{children:"vskill install <skill>"})," to add one."]})})}function zv({queryActive:e,agentId:r}){return e?t.jsx(Ut,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):t.jsx(Ut,{headline:`No global skills for ${r}.`,body:t.jsxs(t.Fragment,{children:["Run ",t.jsx(Mr,{children:"vskill install --global <skill>"})," to add one."]})})}function Bv({queryActive:e,hasInstalled:r}){return e&&r?t.jsx(Ut,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):t.jsx(Ut,{headline:"No plugin skills installed yet.",body:t.jsxs(t.Fragment,{children:["Click ",t.jsx(Mr,{children:"Browse marketplaces…"})," above to add one."]})})}function _v({queryActive:e,hasSources:r,candidates:n,onPromote:s}){return e&&r?t.jsx(Ut,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):t.jsxs(t.Fragment,{children:[t.jsx(Ut,{headline:"No plugin sources in this project.",body:t.jsxs(t.Fragment,{children:["Add ",t.jsx(Mr,{children:"<plugin>/.claude-plugin/plugin.json"})," to author one, or ",t.jsx(Mr,{children:"vskill plugin new"})," from the terminal."]})}),n&&n.length>0&&t.jsxs("div",{style:{padding:"0 14px 12px",display:"flex",flexDirection:"column",gap:6},children:[t.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary)",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:2},children:["Candidate folders (",n.length,")"]}),n.map(o=>t.jsxs("button",{type:"button",onClick:()=>s==null?void 0:s(o),title:`Promote ${o.groupKey}/ to a Claude Code plugin`,style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:8,padding:"6px 8px",fontSize:12,background:"transparent",border:"1px dashed var(--border-subtle, rgba(128,128,128,0.35))",borderRadius:4,color:"var(--text-primary)",cursor:"pointer",textAlign:"left",fontFamily:"var(--font-mono)"},children:[t.jsxs("span",{children:[o.groupKey,"/ ",t.jsxs("span",{style:{color:"var(--text-tertiary)"},children:["(",o.skills.length," skills)"]})]}),t.jsx("span",{style:{fontFamily:"var(--font-sans)",fontSize:11,color:"var(--text-secondary)"},children:"Promote →"})]},`promote-${o.groupKey}`))]})]})}function Ut({headline:e,body:r}){return t.jsxs("div",{style:{padding:"12px 14px 16px",fontSize:12,color:"var(--text-secondary)",lineHeight:1.5},children:[t.jsx("div",{style:{fontWeight:500,color:"var(--text-primary)",marginBottom:4},children:e}),t.jsx("div",{children:r})]})}function Mr({children:e}){return t.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-primary)",background:"color-mix(in srgb, var(--border-default) 45%, transparent)",padding:"1px 4px",borderRadius:3},children:e})}function Ov(){return t.jsx("div",{"aria-hidden":"true",style:{height:1,background:"var(--border-default)",margin:"4px 14px"}})}function Wv(){return t.jsx("div",{"aria-hidden":"true","data-testid":"scope-bold-divider",style:{height:3,background:"var(--color-rule)",boxShadow:"inset 0 1px 0 color-mix(in srgb, var(--color-rule) 50%, transparent)",margin:"12px 0"}})}function Uv(){return t.jsx("div",{style:{padding:"8px 0"},children:[0,1,2,3,4,5].map(e=>t.jsx(mv,{},e))})}function Hv({error:e,onRetry:r}){return t.jsxs("div",{role:"alert",style:{margin:"12px 14px",padding:12,border:"1px solid var(--border-default)",borderRadius:6,background:"var(--bg-canvas)",color:"var(--text-primary)",fontSize:12},children:[t.jsx("div",{style:{fontWeight:600,marginBottom:4},children:"Couldn't load skills."}),t.jsxs("details",{children:[t.jsx("summary",{style:{cursor:"pointer",color:"var(--text-secondary)",fontSize:11,marginBottom:4},children:Vv(e)}),t.jsx("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",margin:"6px 0 0"},children:e})]}),r&&t.jsx("button",{type:"button",onClick:r,style:{marginTop:8,background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,padding:"4px 10px",color:"var(--text-primary)",cursor:"pointer",fontSize:11,fontFamily:"var(--font-sans)"},children:"Retry"})]})}function Vv(e){const r=e.split(`
19
+ `)[0]??e;return r.length>80?r.slice(0,77)+"…":r}function Gv({projectRoot:e}){const{signedIn:r,tier:n}=kc();return r?t.jsx("span",{"data-testid":"sidebar-connected-repo-widget",onClick:()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:open-account-tab",{detail:{tab:"repos",initialPath:e}}))},style:{display:"inline-flex",cursor:"pointer"},children:t.jsx(Ad,{folder:e,tier:n})}):t.jsx(bv,{projectRoot:e})}const $d=240,Md=480,Fd="vskill-sidebar-width",an=320;function Ea(e){return Number.isFinite(e)?Math.round(Math.max($d,Math.min(Md,e))):an}function Kv(){try{const e=localStorage.getItem(Fd);if(!e)return an;const r=Number(e);return Number.isFinite(r)?Ea(r):an}catch{return an}}function qv(e){try{localStorage.setItem(Fd,String(Ea(e)))}catch{}}function Yv({initialWidth:e,onChange:r}){const n=c.useRef({startX:0,startWidth:e,pointerId:null}),s=c.useRef(e);return c.useEffect(()=>{s.current=e},[e]),c.useEffect(()=>{function o(i){if(n.current.pointerId==null||i.pointerId!==n.current.pointerId)return;const l=i.clientX-n.current.startX,d=Ea(n.current.startWidth+l);s.current=d,r(d)}function a(i){n.current.pointerId==null||i.pointerId!==n.current.pointerId||(n.current.pointerId=null,qv(s.current))}return window.addEventListener("pointermove",o),window.addEventListener("pointerup",a),window.addEventListener("pointercancel",a),()=>{window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",a),window.removeEventListener("pointercancel",a)}},[r]),t.jsx("div",{role:"separator","aria-orientation":"vertical","aria-valuemin":$d,"aria-valuemax":Md,"aria-valuenow":e,"aria-label":"Resize sidebar",title:"Drag to resize sidebar",onPointerDown:o=>{const a=o.currentTarget;n.current.startX=o.clientX,n.current.startWidth=s.current,n.current.pointerId=o.pointerId;try{a.setPointerCapture(o.pointerId)}catch{}},style:{width:4,alignSelf:"stretch",cursor:"col-resize",background:"var(--border-default)",userSelect:"none",touchAction:"none"}})}const Jv=/^[ MADRCU?!]{1,2} +/;function Qv(e){return e.replace(Jv,"")}function Xv(e,r){const n=e.endsWith("/")?e:e+"/";return r===e?"":r.startsWith(n)?r.slice(n.length):null}function Zv(e,r,n){const s=new Set;if(r.length===0||e.length===0)return s;const o=r.map(a=>Qv(a).trim()).filter(a=>a.length>0);for(const a of e){const i=a.dir;if(!i)continue;const l=Xv(n,i);if(l===null)continue;const d=`${a.plugin}/${a.skill}`;if(l===""){o.length>0&&s.add(d);continue}const u=l+"/";for(const p of o)if(p===l||p.startsWith(u)){s.add(d);break}}return s}const ey=5e3;function ty(e,r,n=ey){const[s,o]=c.useState([]),a=c.useRef(e);return a.current=e,c.useEffect(()=>{if(!r){o([]);return}let i=!1,l=null;const d=async()=>{try{const p=await de.gitStatus();i||o(p.paths??[])}catch{i||o([])}i||(l=setTimeout(d,n))};d();const u=()=>{d()};return typeof window<"u"&&window.addEventListener("studio:content-saved",u),()=>{i=!0,l&&clearTimeout(l),typeof window<"u"&&window.removeEventListener("studio:content-saved",u)}},[r,n]),r?Zv(a.current,s,r):new Set}function ry({connected:e,hint:r,onRetry:n}){return e?null:t.jsxs("aside",{"aria-live":"assertive",role:"alert",style:{display:"flex",alignItems:"center",gap:10,padding:"6px 12px",background:"color-mix(in srgb, var(--status-own) 15%, transparent)",borderBottom:"1px solid var(--border-default)",color:"var(--text-primary)",fontFamily:"var(--font-sans)",fontSize:12},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--status-own)",display:"inline-block",flexShrink:0}}),t.jsx("span",{style:{fontWeight:500},children:"Disconnected — reconnecting…"}),r&&t.jsx("span",{style:{color:"var(--text-secondary)",fontSize:11},children:r}),t.jsx("div",{style:{flex:1}}),n&&t.jsx("button",{type:"button",onClick:n,style:{background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,padding:"2px 8px",color:"var(--text-primary)",cursor:"pointer",fontSize:11,fontFamily:"var(--font-sans)"},children:"Retry now"})]})}function Dd(e,r){if(e!==401||typeof window>"u"||!r||typeof r!="object")return;const n=r;n.error==="invalid_api_key"&&(n.provider!=="anthropic"&&n.provider!=="openai"&&n.provider!=="openrouter"||window.dispatchEvent(new CustomEvent("studio:api-key-error",{detail:{provider:n.provider}})))}function zd(e){if(e!==void 0)try{return JSON.stringify(e)}catch(r){console.error("Failed to serialize request body:",r);try{const n=new WeakSet;return JSON.stringify(e,(s,o)=>{if(typeof o=="object"&&o!==null){if(n.has(o))return"[Circular]";n.add(o)}return o})}catch{return JSON.stringify({error:"Request body could not be serialized"})}}}function Os(){const[e,r]=c.useState([]),[n,s]=c.useState(!1),[o,a]=c.useState(!1),[i,l]=c.useState(null),d=c.useRef(null),u=c.useCallback(async(f,h)=>{r([]),s(!0),a(!1),l(null);const m=new AbortController;d.current=m;try{const v=zd(h),x=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:v,signal:m.signal});if(!x.ok||!x.body){let S=`HTTP ${x.status}`,k;try{k=await x.json(),k&&typeof k=="object"&&"error"in k&&typeof k.error=="string"&&(S=k.error)}catch{}throw Dd(x.status,k),new Error(S)}const g=x.body.getReader(),b=new TextDecoder;let y="",j="";for(;;){const{done:S,value:k}=await g.read();if(S)break;y+=b.decode(k,{stream:!0});const T=y.split(`
20
+ `);y=T.pop()||"";for(const w of T)if(w.startsWith("event: "))j=w.slice(7).trim();else if(w.startsWith("data: ")){try{const E=JSON.parse(w.slice(6)),R={event:j,data:E};j==="done"?(a(!0),r(N=>[...N,R])):r(N=>[...N,R])}catch{}j=""}}}catch(v){v.name!=="AbortError"&&l(v.message)}finally{s(!1),d.current=null}},[]),p=c.useCallback(()=>{var f;(f=d.current)==null||f.abort()},[]);return{events:e,running:n,done:o,error:i,start:u,stop:p}}function ny(e){const r=c.useRef(e);r.current=e;const[n,s]=c.useState(new Set),o=c.useRef(new Map),a=c.useCallback(async(u,p,f)=>{var m;(m=o.current.get(u))==null||m.abort();const h=new AbortController;o.current.set(u,h),s(v=>{const x=new Set(v);return x.add(u),x});try{const v=zd(f),x=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json"},body:v,signal:h.signal});if(!x.ok||!x.body){let S=`HTTP ${x.status}`,k;try{k=await x.json(),k&&typeof k=="object"&&"error"in k&&typeof k.error=="string"&&(S=k.error)}catch{}throw Dd(x.status,k),new Error(S)}const g=x.body.getReader(),b=new TextDecoder;let y="",j="";for(;;){const{done:S,value:k}=await g.read();if(S)break;y+=b.decode(k,{stream:!0});const T=y.split(`
21
+ `);y=T.pop()||"";for(const w of T)if(w.startsWith("event: "))j=w.slice(7).trim();else if(w.startsWith("data: ")){try{const E=JSON.parse(w.slice(6)),R={event:j,data:E};r.current.onEvent(u,R)}catch{}j=""}}r.current.onDone(u)}catch(v){v.name!=="AbortError"&&r.current.onError(u,v.message)}finally{s(v=>{const x=new Set(v);return x.delete(u),x}),o.current.delete(u)}},[]),i=c.useCallback(u=>{var p;(p=o.current.get(u))==null||p.abort()},[]),l=c.useCallback(()=>{for(const u of o.current.values())u.abort()},[]),d=n.size>0;return{runningSet:n,startCase:a,stopCase:i,stopAll:l,isAnyCaseRunning:d}}const sy={plugin:"",skill:"",skillContent:"",savedContent:"",isDirty:!1,evals:null,evalsError:null,activePanel:"tests",selectedCaseId:null,caseRunStates:new Map,bulkRunActive:!1,runMode:null,latestBenchmark:null,inlineResults:new Map,improveTarget:null,aiEditOpen:!1,aiEditLoading:!1,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null,generateEvalsLoading:!1,generateEvalsProgress:[],generateEvalsError:null,regressions:[],iterationCount:0,activationPrompts:"",activationResults:[],activationSummary:null,activationRunning:!1,activationError:null,activationTotalPrompts:0,activationStartedAt:null,activationClassifyingStatus:null,generatingPrompts:!1,generatingPromptsError:null,activationPromptsSource:null,activationPromptsCanonical:"",savingTestCases:!1,savingTestCasesError:null,savingTestCasesSuccess:null,activationHistory:null,activationHistoryLoading:!1,loading:!0,error:null};function oy(e,r){var n,s;switch(r.type){case"SET_LOADING":return{...e,loading:r.loading};case"SET_ERROR":return{...e,error:r.error};case"INIT_DATA":{const o=new Map;if(r.benchmark)for(const i of r.benchmark.cases)o.set(i.eval_id,{status:i.status,passRate:i.pass_rate,errorMessage:i.error_message||void 0,durationMs:i.durationMs,tokens:i.tokens,output:i.output,assertions:i.assertions.map(l=>({assertion_id:l.id,text:l.text,pass:l.pass,reasoning:l.reasoning}))});const a=((s=(n=r.evals)==null?void 0:n.evals[0])==null?void 0:s.id)??null;return{...e,skillContent:r.skillContent,savedContent:r.skillContent,isDirty:!1,evals:r.evals,evalsError:r.evalsError??null,latestBenchmark:r.benchmark,inlineResults:o,selectedCaseId:a,loading:!1,error:null}}case"SET_PANEL":return{...e,activePanel:r.panel};case"SET_CONTENT":return{...e,skillContent:r.content,isDirty:r.content!==e.savedContent};case"CONTENT_SAVED":return{...e,savedContent:e.skillContent,isDirty:!1};case"SET_EVALS":return{...e,evals:r.evals};case"SELECT_CASE":return{...e,selectedCaseId:r.caseId};case"CASE_RUN_START":{const o=new Map(e.caseRunStates);return o.set(r.caseId,{status:"running",startedAt:Date.now(),mode:r.mode}),{...e,caseRunStates:o,runMode:r.mode,activePanel:"run"}}case"CASE_RUN_COMPLETE":{const o=new Map(e.caseRunStates),a=o.get(r.caseId);o.set(r.caseId,{status:"complete",mode:a==null?void 0:a.mode});const i=new Map(e.inlineResults);return i.set(r.caseId,r.result),{...e,caseRunStates:o,inlineResults:i}}case"CASE_RUN_ERROR":{const o=new Map(e.caseRunStates),a=o.get(r.caseId);o.set(r.caseId,{status:"error",mode:a==null?void 0:a.mode});const i=new Map(e.inlineResults);return i.set(r.caseId,{status:"error",errorMessage:r.error,assertions:[]}),{...e,caseRunStates:o,inlineResults:i}}case"CASE_RUN_CANCEL":{const o=new Map(e.caseRunStates),a=o.get(r.caseId);return o.set(r.caseId,{status:"cancelled",mode:a==null?void 0:a.mode}),{...e,caseRunStates:o}}case"BULK_RUN_START":{const o=new Map(e.caseRunStates);for(const a of r.caseIds)o.set(a,{status:"queued",mode:r.mode});return{...e,caseRunStates:o,bulkRunActive:!0,runMode:r.mode,activePanel:"run"}}case"BULK_RUN_COMPLETE":return{...e,bulkRunActive:!1,latestBenchmark:r.benchmark??e.latestBenchmark,iterationCount:e.iterationCount+1};case"CANCEL_ALL":{const o=new Map(e.caseRunStates);for(const[a,i]of o)(i.status==="running"||i.status==="queued")&&o.set(a,{status:"cancelled"});return{...e,caseRunStates:o,bulkRunActive:!1}}case"UPDATE_INLINE_RESULT":{const o=new Map(e.inlineResults);return o.set(r.evalId,r.result),{...e,inlineResults:o}}case"OPEN_IMPROVE":return{...e,improveTarget:r.evalId,activePanel:"editor"};case"CLOSE_IMPROVE":return{...e,improveTarget:null};case"OPEN_AI_EDIT":return{...e,aiEditOpen:!0,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null};case"CLOSE_AI_EDIT":return{...e,aiEditOpen:!1,aiEditLoading:!1,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null};case"AI_EDIT_LOADING":return{...e,aiEditLoading:!0,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[]};case"AI_EDIT_PROGRESS":return{...e,aiEditProgress:[...e.aiEditProgress,r.entry]};case"AI_EDIT_RESULT":{const o=r.evalChanges??[],a=new Map;for(let i=0;i<o.length;i++)a.set(i,!0);return{...e,aiEditLoading:!1,aiEditResult:{improved:r.improved,reasoning:r.reasoning,evalChanges:o},aiEditEvalChanges:o,aiEditEvalSelections:a}}case"AI_EDIT_ERROR":return{...e,aiEditLoading:!1,aiEditError:r.message,aiEditClassifiedError:r.classified??null};case"GENERATE_EVALS_START":return{...e,generateEvalsLoading:!0,generateEvalsProgress:[],generateEvalsError:null};case"GENERATE_EVALS_PROGRESS":return{...e,generateEvalsProgress:[...e.generateEvalsProgress,r.entry]};case"GENERATE_EVALS_DONE":return{...e,generateEvalsLoading:!1,evals:r.evals};case"GENERATE_EVALS_ERROR":return{...e,generateEvalsLoading:!1,generateEvalsError:r.classified};case"TOGGLE_EVAL_CHANGE":{const o=new Map(e.aiEditEvalSelections);return o.set(r.index,!o.get(r.index)),{...e,aiEditEvalSelections:o}}case"SELECT_ALL_EVAL_CHANGES":{const o=new Map(e.aiEditEvalSelections);for(const a of o.keys())o.set(a,!0);return{...e,aiEditEvalSelections:o}}case"DESELECT_ALL_EVAL_CHANGES":{const o=new Map(e.aiEditEvalSelections);for(const a of o.keys())o.set(a,!1);return{...e,aiEditEvalSelections:o}}case"SET_EVALS_RETRY":return{...e,aiEditEvalsRetry:r.evalsFile};case"SET_REGRESSIONS":return{...e,regressions:r.regressions};case"INCREMENT_ITERATION":return{...e,iterationCount:e.iterationCount+1};case"SET_ACTIVATION_PROMPTS":{const o=r.prompts===e.activationPromptsCanonical;return{...e,activationPrompts:r.prompts,activationPromptsSource:o?e.activationPromptsSource:e.activationPromptsSource===null||e.activationPromptsSource==="skill-md"||e.activationPromptsSource==="ai-generated"?"user-typed":e.activationPromptsSource}}case"SET_PROMPTS_SOURCE":return{...e,activationPromptsSource:r.source,activationPromptsCanonical:r.canonical??e.activationPromptsCanonical};case"ACTIVATION_START":return{...e,activationRunning:!0,activationResults:[],activationSummary:null,activationError:null,activationClassifyingStatus:null,activationStartedAt:Date.now()};case"ACTIVATION_RESULT":return{...e,activationResults:[...e.activationResults,r.result]};case"ACTIVATION_DONE":return{...e,activationRunning:!1,activationSummary:r.summary,activationClassifyingStatus:null};case"ACTIVATION_CLASSIFYING":return{...e,activationClassifyingStatus:`Classifying prompt ${r.index}/${r.total}...`};case"ACTIVATION_ERROR":return{...e,activationRunning:!1,activationError:r.error,activationClassifyingStatus:null};case"ACTIVATION_RESET":return{...e,activationResults:[],activationSummary:null,activationError:null};case"ACTIVATION_TIMEOUT":return{...e,activationRunning:!1,activationError:"Activation test timed out after 120 seconds"};case"ACTIVATION_CANCEL":return{...e,activationRunning:!1};case"GENERATE_PROMPTS_START":return{...e,generatingPrompts:!0,generatingPromptsError:null};case"GENERATE_PROMPTS_DONE":return{...e,generatingPrompts:!1};case"GENERATE_PROMPTS_ERROR":return{...e,generatingPrompts:!1,generatingPromptsError:r.error};case"SAVE_TEST_CASES_START":return{...e,savingTestCases:!0,savingTestCasesError:null,savingTestCasesSuccess:null};case"SAVE_TEST_CASES_SUCCESS":return{...e,savingTestCases:!1,savingTestCasesSuccess:`Saved ${r.count} test case${r.count===1?"":"s"} to SKILL.md`,activationPromptsSource:"skill-md",activationPromptsCanonical:e.activationPrompts};case"SAVE_TEST_CASES_ERROR":return{...e,savingTestCases:!1,savingTestCasesError:r.error};case"CLEAR_SAVE_TEST_CASES_FEEDBACK":return{...e,savingTestCasesSuccess:null,savingTestCasesError:null};case"ACTIVATION_HISTORY_LOADED":return{...e,activationHistory:r.runs,activationHistoryLoading:!1};default:return e}}function ay(e,r){if(!e)return{canEdit:!1,canRun:!1};const n=e.origin==="source",s=r.exists&&r.cases.length>0;return{canEdit:n,canRun:s}}function iy(e){if(e==="unit"||e==="integration")return e}function ly(e,r){const n=r.data;if(r.event==="output_ready"&&(e.output=n.output,n.durationMs!=null&&(e.durationMs=n.durationMs),n.tokens!=null&&(e.tokens=n.tokens)),r.event==="outputs_ready"&&(e.output=n.skillOutput,n.skillDurationMs!=null&&(e.durationMs=n.skillDurationMs),n.skillTokens!=null&&(e.tokens=n.skillTokens)),r.event==="assertion_result"){const s={assertion_id:n.assertion_id,text:n.text,pass:n.pass,reasoning:n.reasoning};e.assertions.find(o=>o.assertion_id===s.assertion_id)||e.assertions.push(s)}r.event==="case_complete"&&(e.status=n.status,e.passRate=n.pass_rate,e.errorMessage=n.error_message||void 0,e.classifiedError=n.classified_error||void 0)}const Bd=c.createContext(null);function yt(){const e=c.useContext(Bd);if(!e)throw new Error("useWorkspace must be used within WorkspaceProvider");return e}function cy({plugin:e,skill:r,origin:n,children:s}){var ke;const o=n==="installed",{config:a}=yr(),[i,l]=c.useReducer(oy,{...sy,plugin:e,skill:r}),d=ay({origin:n},{exists:i.evals!=null,cases:((ke=i.evals)==null?void 0:ke.evals)??[]}),u=d.canEdit,p=d.canRun,f=c.useRef(new Set),h=c.useRef(new Set),m=c.useRef(new Map),v=c.useCallback((_,Y)=>{let Z=m.current.get(_);Z||(Z={assertions:[]},m.current.set(_,Z)),ly(Z,Y),l({type:"UPDATE_INLINE_RESULT",evalId:_,result:{...Z,assertions:[...Z.assertions]}})},[]),x=c.useCallback(_=>{if(h.current.has(_))return;h.current.add(_);const Y=m.current.get(_)??{assertions:[]};l({type:"CASE_RUN_COMPLETE",caseId:_,result:{...Y,assertions:[...Y.assertions]}}),f.current.has(_)&&(f.current.delete(_),f.current.size===0&&de.getLatestBenchmark(e,r).then(Z=>l({type:"BULK_RUN_COMPLETE",benchmark:Z})).catch(()=>l({type:"BULK_RUN_COMPLETE",benchmark:null})))},[e,r]),g=c.useCallback((_,Y)=>{h.current.has(_)||(h.current.add(_),l({type:"CASE_RUN_ERROR",caseId:_,error:Y}),f.current.has(_)&&(f.current.delete(_),f.current.size===0&&de.getLatestBenchmark(e,r).then(Z=>l({type:"BULK_RUN_COMPLETE",benchmark:Z})).catch(()=>l({type:"BULK_RUN_COMPLETE",benchmark:null}))))},[e,r]),{startCase:b,stopCase:y,stopAll:j}=ny({onEvent:v,onDone:x,onError:g});c.useEffect(()=>()=>{j()},[j]);const S=c.useCallback(async()=>{try{const _=await fetch(`/api/skills/${e}/${r}/activation-history`);if(!_.ok){if(_.status===404){l({type:"ACTIVATION_HISTORY_LOADED",runs:[]});return}return}const Y=await _.json();l({type:"ACTIVATION_HISTORY_LOADED",runs:Y.runs||[]})}catch{}},[e,r]);c.useEffect(()=>{let _=!1;async function Y(){try{const[Z,ne,fe]=await Promise.allSettled([de.getSkillDetail(e,r),de.getEvals(e,r),de.getLatestBenchmark(e,r)]);if(_)return;let me=null,ce=null;if(ne.status==="fulfilled")me=ne.value;else{const ue=ne.reason;ce=(ue==null?void 0:ue.message)??"Failed to load test cases"}l({type:"INIT_DATA",skillContent:Z.status==="fulfilled"?Z.value.skillContent:"",evals:me,evalsError:ce,benchmark:fe.status==="fulfilled"?fe.value:null})}catch(Z){_||l({type:"SET_ERROR",error:Z.message})}}return Y(),S(),()=>{_=!0}},[e,r,S]);const k=c.useCallback(async _=>{if(o)return;const Y=_??i.skillContent;try{await de.applyImprovement(e,r,Y),_!==void 0&&_!==i.skillContent&&l({type:"SET_CONTENT",content:_}),l({type:"CONTENT_SAVED"})}catch(Z){l({type:"SET_ERROR",error:Z.message})}},[o,e,r,i.skillContent]),T=c.useCallback(async _=>{if(!o)try{const Y=await de.saveEvals(e,r,_);l({type:"SET_EVALS",evals:Y})}catch(Y){l({type:"SET_ERROR",error:Y.message})}},[o,e,r]),w=c.useCallback((_,Y="benchmark")=>{const Z=i.caseRunStates.get(_);if((Z==null?void 0:Z.status)==="running")return;m.current.delete(_),h.current.delete(_),l({type:"CASE_RUN_START",caseId:_,mode:Y});const ne=Y==="comparison"?{eval_ids:[_]}:Y==="baseline"?{mode:"baseline"}:{};if(a!=null&&a.provider&&(ne.provider=a.provider),a!=null&&a.model&&(ne.model=a.model),Y==="comparison"){const fe=`/api/skills/${e}/${r}/compare`;b(_,fe,ne)}else{const fe=`/api/skills/${e}/${r}/benchmark/case/${_}`;b(_,fe,Object.keys(ne).length>0?ne:void 0)}},[e,r,i.caseRunStates,b,a]),E=c.useCallback((_="benchmark")=>{var ne;const Y=((ne=i.evals)==null?void 0:ne.evals)??[];if(Y.length===0)return;const Z=Y.map(fe=>fe.id);for(const fe of Z)m.current.delete(fe),h.current.delete(fe);l({type:"BULK_RUN_START",caseIds:Z,mode:_}),f.current=new Set(Z);for(const fe of Z){const me=_==="comparison"?{eval_ids:[fe]}:_==="baseline"?{mode:"baseline"}:{};if(a!=null&&a.provider&&(me.provider=a.provider),a!=null&&a.model&&(me.model=a.model),_==="comparison")b(fe,`/api/skills/${e}/${r}/compare`,me);else{const ce=`/api/skills/${e}/${r}/benchmark/case/${fe}`;b(fe,ce,Object.keys(me).length>0?me:void 0)}}},[e,r,i.evals,b,a]),R=c.useCallback(_=>{y(_),l({type:"CASE_RUN_CANCEL",caseId:_}),f.current.delete(_),h.current.add(_)},[y]),N=c.useCallback(()=>{j(),l({type:"CANCEL_ALL"}),f.current.clear()},[j]),I=c.useCallback(async(_,Y)=>{l({type:"OPEN_IMPROVE",evalId:_})},[]),A=c.useCallback(async(_,Y)=>{try{await de.applyImprovement(e,r,Y),l({type:"SET_CONTENT",content:Y}),l({type:"CONTENT_SAVED"}),l({type:"CLOSE_IMPROVE"}),w(_,"benchmark")}catch(Z){l({type:"SET_ERROR",error:Z.message})}},[e,r,w]),$=Os(),W=c.useRef(null),C=c.useRef(0);c.useEffect(()=>{const _=$.events;for(let Y=C.current;Y<_.length;Y++){const Z=_[Y],ne=Z.data;if(Z.event==="progress"&&l({type:"AI_EDIT_PROGRESS",entry:{timestamp:Date.now(),phase:ne.phase,message:ne.message}}),Z.event==="done"){const fe=ne.improved,me=ne.reasoning,ce=ne.evalChanges??[];l({type:"AI_EDIT_RESULT",improved:fe,reasoning:me,evalChanges:ce})}if(Z.event==="error"){const fe=ne;l({type:"AI_EDIT_ERROR",message:fe.description||"Unknown error",classified:fe})}}C.current=_.length},[$.events]),c.useEffect(()=>{$.error&&l({type:"AI_EDIT_ERROR",message:$.error})},[$.error]),c.useEffect(()=>()=>{$.stop()},[$.stop]);const L=c.useCallback(async(_,Y,Z)=>{o||(C.current=0,l({type:"AI_EDIT_LOADING"}),W.current=$.stop,$.start(`/api/skills/${e}/${r}/improve?sse`,{mode:"instruct",instruction:_,content:i.skillContent,evals:i.evals??{skill_name:r,evals:[]},provider:Y,model:Z}))},[o,e,r,i.skillContent,i.evals,$]),P=c.useCallback(()=>{$.stop(),l({type:"AI_EDIT_ERROR",message:"Cancelled"})},[$]),F=c.useCallback(async()=>{const _=i.aiEditResult;if(_!=null&&_.improved)try{if(await de.applyImprovement(e,r,_.improved),l({type:"SET_CONTENT",content:_.improved}),l({type:"CONTENT_SAVED"}),i.aiEditEvalChanges.length>0&&Array.from(i.aiEditEvalSelections.values()).some(Boolean)){const{mergeEvalChanges:Z}=await ar(async()=>{const{mergeEvalChanges:me}=await import("./mergeEvalChanges-Dpbbs4d4.js");return{mergeEvalChanges:me}},[]),ne=i.evals??{skill_name:r,evals:[]},fe=Z(ne,i.aiEditEvalChanges,i.aiEditEvalSelections);try{const me=await de.saveEvals(e,r,fe);l({type:"SET_EVALS",evals:me})}catch(me){l({type:"SET_EVALS_RETRY",evalsFile:fe}),l({type:"SET_ERROR",error:`SKILL.md saved, but test cases failed to save: ${me.message}. You can retry from the AI Edit panel.`});return}}l({type:"CLOSE_AI_EDIT"})}catch(Y){l({type:"SET_ERROR",error:Y.message})}},[e,r,i.aiEditResult,i.evals,i.aiEditEvalChanges,i.aiEditEvalSelections]),V=c.useCallback(()=>{l({type:"CLOSE_AI_EDIT"})},[]),le=c.useCallback(_=>{l({type:"TOGGLE_EVAL_CHANGE",index:_})},[]),H=c.useCallback(()=>{l({type:"SELECT_ALL_EVAL_CHANGES"})},[]),U=c.useCallback(()=>{l({type:"DESELECT_ALL_EVAL_CHANGES"})},[]),re=c.useCallback(async()=>{const _=i.aiEditEvalsRetry;if(_)try{const Y=await de.saveEvals(e,r,_);l({type:"SET_EVALS",evals:Y}),l({type:"SET_ERROR",error:null}),l({type:"CLOSE_AI_EDIT"})}catch(Y){l({type:"SET_ERROR",error:`Retry failed: ${Y.message}`})}},[e,r,i.aiEditEvalsRetry]),xe=c.useCallback(async()=>{try{const _=await de.getSkillDetail(e,r);l({type:"SET_CONTENT",content:_.skillContent}),l({type:"CONTENT_SAVED"})}catch{}},[e,r]),he=Os(),z=c.useRef(0);c.useEffect(()=>{const _=he.events;for(let Y=z.current;Y<_.length;Y++){const Z=_[Y],ne=Z.data;if(Z.event==="progress"&&l({type:"GENERATE_EVALS_PROGRESS",entry:{timestamp:Date.now(),phase:ne.phase,message:ne.message}}),Z.event==="done"){const fe=ne;de.saveEvals(e,r,fe).then(me=>l({type:"GENERATE_EVALS_DONE",evals:me})).catch(me=>l({type:"SET_ERROR",error:me.message}))}Z.event==="error"&&l({type:"GENERATE_EVALS_ERROR",classified:ne})}z.current=_.length},[he.events,e,r]),c.useEffect(()=>{he.error&&l({type:"SET_ERROR",error:he.error})},[he.error]),c.useEffect(()=>()=>{he.stop()},[he.stop]);const X=c.useCallback(async _=>{if(o)return;z.current=0,l({type:"GENERATE_EVALS_START"});const Y={};a!=null&&a.provider&&(Y.provider=a.provider),a!=null&&a.model&&(Y.model=a.model);const Z=iy(_==null?void 0:_.testType);Z&&(Y.testType=Z),he.start(`/api/skills/${e}/${r}/generate-evals?sse`,Object.keys(Y).length>0?Y:void 0)},[o,e,r,he,a]),M=Os(),O=c.useRef(0);c.useEffect(()=>()=>{M.stop()},[M.stop]),c.useEffect(()=>{const _=M.events;for(let Y=O.current;Y<_.length;Y++){const Z=_[Y];if(Z.event==="classifying"){const ne=Z.data;l({type:"ACTIVATION_CLASSIFYING",index:ne.index,total:ne.total})}if(Z.event==="prompt_result"&&l({type:"ACTIVATION_RESULT",result:Z.data}),Z.event==="done"){G.current&&(clearTimeout(G.current),G.current=null);const ne=Z.data;if(ne.error)l({type:"ACTIVATION_ERROR",error:ne.error});else{l({type:"ACTIVATION_DONE",summary:ne});const fe={id:`run-${Date.now()}`,timestamp:new Date().toISOString(),model:(a==null?void 0:a.model)||"unknown",provider:(a==null?void 0:a.provider)||"unknown",promptCount:ne.total,summary:{precision:ne.precision,recall:ne.recall,reliability:ne.reliability,tp:ne.tp,tn:ne.tn,fp:ne.fp,fn:ne.fn}};l({type:"ACTIVATION_HISTORY_LOADED",runs:[fe,...i.activationHistory??[]]})}}}O.current=_.length},[M.events,a,i.activationHistory]),c.useEffect(()=>{M.error&&(G.current&&(clearTimeout(G.current),G.current=null),l({type:"ACTIVATION_ERROR",error:M.error}))},[M.error]);const G=c.useRef(null),K=c.useCallback(()=>{G.current&&(clearTimeout(G.current),G.current=null),M.stop(),l({type:"ACTIVATION_CANCEL",totalPrompts:0})},[M]),te=c.useCallback(_=>{const Z=_.trim().split(`
22
+ `).filter(Boolean).map(fe=>fe.startsWith("!")?{prompt:fe.slice(1).trim(),expected:"should_not_activate"}:fe.startsWith("+")?{prompt:fe.slice(1).trim(),expected:"should_activate"}:{prompt:fe.trim(),expected:"auto"});O.current=0,l({type:"ACTIVATION_START"}),l({type:"SET_ACTIVATION_PROMPTS",prompts:_});const ne={prompts:Z};a!=null&&a.provider&&(ne.provider=a.provider),a!=null&&a.model&&(ne.model=a.model),M.start(`/api/skills/${e}/${r}/activation-test`,ne),G.current&&clearTimeout(G.current),G.current=setTimeout(()=>{M.stop(),l({type:"ACTIVATION_TIMEOUT"}),G.current=null},12e4)},[e,r,M,a]),ee=c.useCallback(async(_=8)=>{l({type:"GENERATE_PROMPTS_START"});try{const Y={count:_};a!=null&&a.provider&&(Y.provider=a.provider),a!=null&&a.model&&(Y.model=a.model);const Z=await fetch(`/api/skills/${e}/${r}/activation-prompts`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!Z.ok){let Re=`HTTP ${Z.status}`;try{const Ae=await Z.json();Ae.error&&(Re=Ae.error)}catch{}throw new Error(Re)}const ne=Z.body.getReader(),fe=new TextDecoder;let me="",ce="",ue=[];for(;;){const{done:Re,value:Ae}=await ne.read();if(Re)break;me+=fe.decode(Ae,{stream:!0});const Me=me.split(`
23
+ `);me=Me.pop()||"";for(const _e of Me)if(_e.startsWith("event: "))ce=_e.slice(7).trim();else if(_e.startsWith("data: ")){try{const Oe=JSON.parse(_e.slice(6));if(ce==="done"){if(Oe.error)throw new Error(Oe.error);ue=Oe.prompts||[]}if(ce==="error")throw new Error(Oe.message||Oe.description||"Generation failed")}catch(Oe){if(!(Oe instanceof SyntaxError))throw Oe}ce=""}}const je=ue.map(Re=>`${Re.expected==="should_activate"?"+":"!"}${Re.prompt}`).join(`
24
+ `);l({type:"SET_PROMPTS_SOURCE",source:"ai-generated",canonical:je}),l({type:"SET_ACTIVATION_PROMPTS",prompts:je}),l({type:"GENERATE_PROMPTS_DONE"})}catch(Y){l({type:"GENERATE_PROMPTS_ERROR",error:Y.message})}},[e,r,a]),q=c.useCallback(async()=>{try{const _=await fetch(`/api/skills/${e}/${r}/test-cases`);if(!_.ok)return;const Y=await _.json();if(!Y.prompts||Y.prompts.length===0)return;const Z=Y.prompts.map(ne=>ne.expected==="should_activate"?`+${ne.prompt}`:ne.expected==="should_not_activate"?`!${ne.prompt}`:ne.prompt).join(`
25
+ `);l({type:"SET_PROMPTS_SOURCE",source:"skill-md",canonical:Z}),l({type:"SET_ACTIVATION_PROMPTS",prompts:Z})}catch{}},[e,r]),oe=c.useCallback(async()=>{l({type:"SAVE_TEST_CASES_START"});try{const Y=i.activationPrompts.split(`
26
+ `).map(fe=>fe.trim()).filter(Boolean).map(fe=>fe.startsWith("!")?{prompt:fe.slice(1).trim(),expected:"should_not_activate"}:fe.startsWith("+")?{prompt:fe.slice(1).trim(),expected:"should_activate"}:{prompt:fe,expected:"auto"}),Z=await fetch(`/api/skills/${e}/${r}/test-cases`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompts:Y})}),ne=await Z.json().catch(()=>({}));if(!Z.ok||!ne.ok)throw new Error(ne.error||`HTTP ${Z.status}`);l({type:"SAVE_TEST_CASES_SUCCESS",count:ne.count??Y.length}),setTimeout(()=>l({type:"CLEAR_SAVE_TEST_CASES_FEEDBACK"}),3e3)}catch(_){l({type:"SAVE_TEST_CASES_ERROR",error:_.message})}},[e,r,i.activationPrompts]),ve=c.useMemo(()=>({state:i,dispatch:l,isReadOnly:o,canEdit:u,canRun:p,saveContent:k,saveEvals:T,runCase:w,runAll:E,cancelCase:R,cancelAll:N,improveForCase:I,applyImproveAndRerun:A,refreshSkillContent:xe,generateEvals:X,runActivationTest:te,cancelActivation:K,generateActivationPrompts:ee,fetchActivationHistory:S,loadTestCasesFromSkillMd:q,saveTestCasesToSkillMd:oe,submitAiEdit:L,cancelAiEdit:P,applyAiEdit:F,discardAiEdit:V,toggleEvalChange:le,selectAllEvalChanges:H,deselectAllEvalChanges:U,retryEvalsSave:re}),[i,o,u,p,k,T,w,E,R,N,I,A,xe,X,te,K,ee,S,q,oe,L,P,F,V,le,H,U,re]);return t.jsx(Bd.Provider,{value:ve,children:s})}function _d(e){const r=e.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);if(!r)return{metadata:{},body:e};const n=r[1],s=r[2].trim(),o={},a=n.split(`
27
+ `);let i="",l=!1;for(const d of a){const u=d.match(/^[ \t]+([\w-]+):\s*(.*)$/);if(u&&i&&l){const h=u[1],m=u[2].trim();let v=o[i];if((typeof v!="object"||Array.isArray(v))&&(v={},o[i]=v),!m)v[h]=[];else{const x=m.match(/^\[(.+)\]$/);x?v[h]=x[1].split(",").map(g=>g.trim().replace(/^["']|["']$/g,"")).filter(Boolean):v[h]=m.replace(/^["']|["']$/g,"")}continue}const p=d.match(/^\s+-\s+(.+)$/);if(p&&i){l=!1;const h=o[i];Array.isArray(h)?h.push(p[1].trim().replace(/^["']|["']$/g,"")):o[i]=[p[1].trim().replace(/^["']|["']$/g,"")];continue}const f=d.match(/^([\w-]+):\s*(.*)$/);if(f){i=f[1];const h=f[2].trim();if(l=!1,!h){o[i]={},l=!0;continue}const m=h.match(/^\[(.+)\]$/);if(m){o[i]=m[1].split(",").map(v=>v.trim().replace(/^["']|["']$/g,"")).filter(Boolean);continue}o[i]=h.replace(/^["']|["']$/g,"")}}return{metadata:o,body:s}}function Cn(e){if(!e)return"";try{let r=e.replace(/^---\n[\s\S]*?\n---\n?/,""),n=dy(r);return n=n.replace(/```(\w*)\n([\s\S]*?)```/g,'<pre style="background:var(--surface-2);padding:0.75rem;border-radius:6px;overflow-x:auto;font-size:12px;line-height:1.5;margin:0.5rem 0;border:1px solid var(--border-subtle)"><code>$2</code></pre>'),n=n.replace(/^### (.+)$/gm,'<div style="font-weight:600;font-size:14px;margin:0.75rem 0 0.25rem;color:var(--text-primary)">$1</div>'),n=n.replace(/^## (.+)$/gm,'<div style="font-weight:700;font-size:15px;margin:0.75rem 0 0.25rem;color:var(--text-primary)">$1</div>'),n=n.replace(/^# (.+)$/gm,'<div style="font-weight:700;font-size:1rem;margin:0.75rem 0 0.25rem;color:var(--text-primary)">$1</div>'),n=n.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer" style="color:var(--accent);text-decoration:underline">$1</a>'),n=n.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),n=n.replace(/\*([^*]+)\*/g,"<em>$1</em>"),n=n.replace(/`([^`]+)`/g,'<code style="background:var(--surface-3);padding:0.1rem 0.3rem;border-radius:3px;font-size:0.85em">$1</code>'),n=n.replace(/^- (.+)$/gm,'<div style="padding-left:1rem;margin:0.15rem 0">• $1</div>'),n=n.replace(/^(\d+)\. (.+)$/gm,'<div style="padding-left:1rem;margin:0.15rem 0">$1. $2</div>'),n=n.replace(/\n\n/g,'<div style="height:0.5rem"></div>'),n=n.replace(/\n/g,"<br/>"),n}catch{return`<pre style="white-space:pre-wrap;font-size:12px;line-height:1.5">${e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}</pre>`}}function dy(e){const r=e.split(`
28
+ `),n=[];let s=0;for(;s<r.length;)if(r[s].trim().startsWith("|")&&s+1<r.length&&r[s+1].trim().startsWith("|")&&/\|[\s-:]+\|/.test(r[s+1])){const o=Vi(r[s]);s+=2;const a=[];for(;s<r.length&&r[s].trim().startsWith("|");)a.push(Vi(r[s])),s++;const i='style="text-align:left;padding:0.4rem 0.6rem;font-weight:600;font-size:12px;color:var(--text-primary);border-bottom:1px solid var(--border-default)"',l='style="padding:0.4rem 0.6rem;font-size:12px;color:var(--text-secondary);border-bottom:1px solid var(--border-subtle)"';let d='<table style="width:100%;border-collapse:collapse;margin:0.5rem 0;border:1px solid var(--border-subtle);border-radius:6px;overflow:hidden">';d+="<thead><tr>";for(const u of o)d+=`<th ${i}>${u}</th>`;d+="</tr></thead><tbody>";for(const u of a){d+="<tr>";for(const p of u)d+=`<td ${l}>${p}</td>`;d+="</tr>"}d+="</tbody></table>",n.push(d)}else n.push(r[s]),s++;return n.join(`
29
+ `)}function Vi(e){return e.split("|").map(r=>r.trim()).filter(r=>r.length>0)}function vs(e,r){const n=e.split(`
30
+ `),s=r.split(`
31
+ `);if(n.length>1e3||s.length>1e3)return[...n.map(p=>({type:"unchanged",content:p}))];const o=n.length,a=s.length,i=Array.from({length:o+1},()=>new Array(a+1).fill(0));for(let p=1;p<=o;p++)for(let f=1;f<=a;f++)n[p-1]===s[f-1]?i[p][f]=i[p-1][f-1]+1:i[p][f]=Math.max(i[p-1][f],i[p][f-1]);const l=[];let d=o,u=a;for(;d>0||u>0;)d>0&&u>0&&n[d-1]===s[u-1]?(l.push({type:"unchanged",content:n[d-1]}),d--,u--):u>0&&(d===0||i[d][u-1]>=i[d-1][u])?(l.push({type:"added",content:s[u-1]}),u--):(l.push({type:"removed",content:n[d-1]}),d--);return l.reverse()}function uy(e,r){if(r&&new Set(["generating","comparing","judging","judging_assertion","preparing","parsing","generating_skill","generating_baseline","scoring","action_items"]).has(e))return t.jsx("div",{className:"spinner",style:{width:10,height:10,flexShrink:0}});const s=new Set(["generating","comparing","preparing","generating_skill","generating_baseline","scoring","action_items"]);return t.jsx("div",{className:"w-2.5 h-2.5 rounded-full flex-shrink-0",style:{background:s.has(e)?"var(--accent)":"var(--green)"}})}function En({entries:e,isRunning:r}){const[n,s]=c.useState(!1),o=c.useRef(null);return c.useEffect(()=>{o.current&&!n&&(o.current.scrollTop=o.current.scrollHeight)},[e,n]),e.length===0&&!r?null:t.jsxs("div",{className:"mt-2 animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)"},children:[t.jsxs("button",{onClick:()=>s(!n),className:"w-full flex items-center justify-between px-3 py-2 text-[11px] font-medium transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:a=>{a.currentTarget.style.color="var(--text-primary)"},onMouseLeave:a=>{a.currentTarget.style.color="var(--text-tertiary)"},children:[t.jsxs("span",{className:"flex items-center gap-2",children:[r&&t.jsx("div",{className:"spinner",style:{width:10,height:10}}),"Progress Log (",e.length,")"]}),t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",style:{transform:n?"rotate(0)":"rotate(180deg)",transition:"transform 0.2s ease"},children:t.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),!n&&t.jsx("div",{ref:o,className:"px-3 pb-3 space-y-1 max-h-48 overflow-y-auto",children:e.map((a,i)=>{const l=i===e.length-1&&r,d=i===0?"0s":`+${((a.timestamp-e[0].timestamp)/1e3).toFixed(1)}s`;return t.jsxs("div",{className:"flex items-center gap-2 text-[11px] animate-fade-in",style:{opacity:l?1:.7},children:[uy(a.phase,l),t.jsx("span",{className:"font-mono flex-shrink-0",style:{color:"var(--text-tertiary)",width:40},children:d}),t.jsx("span",{style:{color:l?"var(--text-primary)":"var(--text-secondary)"},children:a.message}),a.current!=null&&a.total!=null&&t.jsxs("span",{className:"font-mono flex-shrink-0",style:{color:"var(--text-tertiary)"},children:["[",a.current,"/",a.total,"]"]})]},i)})})]})}const Gi={rate_limit:{icon:"⏱",color:"var(--amber, #f59e0b)"},context_window:{icon:"⚠",color:"var(--amber, #f59e0b)"},auth:{icon:"🔒",color:"var(--red, #ef4444)"},timeout:{icon:"⌛",color:"var(--amber, #f59e0b)"},model_not_found:{icon:"🔍",color:"var(--red, #ef4444)"},provider_unavailable:{icon:"⚡",color:"var(--red, #ef4444)"},parse_error:{icon:"❓",color:"var(--amber, #f59e0b)"},unknown:{icon:"❌",color:"var(--red, #ef4444)"}};function ys({error:e,onRetry:r,onDismiss:n}){const[s,o]=c.useState(null),a=c.useRef(null);c.useEffect(()=>(e.category==="rate_limit"&&e.retryAfterMs?o(Math.ceil(e.retryAfterMs/1e3)):o(null),()=>{a.current&&clearInterval(a.current)}),[e]),c.useEffect(()=>{if(!(s==null||s<=0))return a.current=setInterval(()=>{o(d=>d==null||d<=1?(a.current&&clearInterval(a.current),0):d-1)},1e3),()=>{a.current&&clearInterval(a.current)}},[s!=null&&s>0]);const i=Gi[e.category]||Gi.unknown,l=s!=null&&s>0;return t.jsxs("div",{className:"rounded-lg overflow-hidden animate-fade-in",style:{border:`1px solid color-mix(in srgb, ${i.color} 30%, transparent)`,background:`color-mix(in srgb, ${i.color} 6%, var(--surface-1))`},children:[t.jsxs("div",{className:"flex items-center justify-between px-3.5 py-2.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{style:{fontSize:14},children:i.icon}),t.jsx("span",{className:"text-[12px] font-semibold",style:{color:i.color},children:e.title})]}),n&&t.jsx("button",{onClick:n,className:"w-5 h-5 rounded flex items-center justify-center",style:{color:"var(--text-tertiary)"},children:t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),t.jsxs("div",{className:"px-3.5 pb-3",children:[t.jsx("p",{className:"text-[11.5px] mb-1.5",style:{color:"var(--text-secondary)"},children:e.description}),t.jsx("p",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:e.hint}),(r||s!=null)&&t.jsx("div",{className:"flex items-center gap-2 mt-2.5",children:r&&t.jsx("button",{onClick:r,disabled:l,className:"btn btn-secondary text-[11px]",style:{padding:"4px 10px",opacity:l?.5:1},children:l?`Retry in ${s}s`:"Retry"})})]})]})}function py({plugin:e,skill:r,skillContent:n,onApplied:s}){const[o,a]=c.useState("closed"),{config:i}=yr(),[l,d]=c.useState("claude-cli"),[u,p]=c.useState("opus"),[f,h]=c.useState([]),[m,v]=c.useState(""),[x,g]=c.useState(""),[b,y]=c.useState(null),[j,S]=c.useState(null),[k,T]=c.useState([]),[w,E]=c.useState(!1),R=c.useRef(null);c.useEffect(()=>{if(!i)return;i.providers.find(P=>P.id==="claude-cli"&&P.available)&&(d("claude-cli"),p("opus"))},[i]),c.useEffect(()=>()=>{var L;(L=R.current)==null||L.abort()},[]);function N(){return i==null?void 0:i.providers.find(L=>L.id===l&&L.available)}const I=c.useCallback(()=>{var L;(L=R.current)==null||L.abort(),a("open")},[]);async function A(){a("loading"),y(null),S(null),T([]);const L=new AbortController;R.current=L;try{const P=await fetch(`/api/skills/${encodeURIComponent(e)}/${encodeURIComponent(r)}/improve?sse`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:l,model:u}),signal:L.signal});if(!P.ok||!P.body){let U=`HTTP ${P.status}`;try{const re=await P.json();re.error&&(U=re.error)}catch{}throw new Error(U)}const F=P.body.getReader(),V=new TextDecoder;let le="",H="";for(;;){const{done:U,value:re}=await F.read();if(U)break;le+=V.decode(re,{stream:!0});const xe=le.split(`
32
+ `);le=xe.pop()||"";for(const he of xe)if(he.startsWith("event: "))H=he.slice(7).trim();else if(he.startsWith("data: ")){try{const z=JSON.parse(he.slice(6));H==="progress"?T(X=>[...X,{phase:z.phase,message:z.message,timestamp:Date.now()}]):H==="done"||H==="complete"?(v(z.improved),g(z.reasoning||""),h(vs(z.original||n,z.improved)),a("diff_shown")):H==="error"&&(y(z.message||z.description||"Unknown error"),z.category&&S(z),a("open"))}catch{}H=""}}}catch(P){P.name!=="AbortError"&&(y(P.message),a("open"))}finally{R.current=null}}async function $(){E(!0);try{await de.applyImprovement(e,r,m),s(m),a("closed")}catch(L){y(L.message)}finally{E(!1)}}function W(){a("closed"),h([]),v(""),g(""),y(null)}if(o==="closed")return t.jsxs("button",{onClick:()=>a("open"),className:"btn btn-secondary mb-5",disabled:!n,children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),t.jsx("path",{d:"M2 17l10 5 10-5"}),t.jsx("path",{d:"M2 12l10 5 10-5"})]}),"Improve Skill"]});const C=N();return t.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden animate-fade-in",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3.5",style:{background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center gap-2.5",children:[t.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#a855f7",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),t.jsx("path",{d:"M2 17l10 5 10-5"}),t.jsx("path",{d:"M2 12l10 5 10-5"})]})}),t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"AI Skill Improvement"})]}),t.jsx("button",{onClick:W,className:"w-7 h-7 rounded-lg flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:L=>{L.currentTarget.style.background="var(--surface-3)"},onMouseLeave:L=>{L.currentTarget.style.background="transparent"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),t.jsxs("div",{className:"px-5 py-4",children:[(o==="open"||o==="loading")&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-end gap-3 mb-4",children:[t.jsxs("div",{className:"flex-1",children:[t.jsx("label",{className:"text-[11px] font-medium mb-1 block",style:{color:"var(--text-tertiary)"},children:"Provider"}),t.jsx("select",{className:"input-field text-[12px] py-1.5",value:l,onChange:L=>{d(L.target.value);const P=i==null?void 0:i.providers.find(F=>F.id===L.target.value);P!=null&&P.models[0]&&p(P.models[0].id)},disabled:o==="loading",children:i==null?void 0:i.providers.filter(L=>L.available).map(L=>t.jsx("option",{value:L.id,children:L.label},L.id))})]}),t.jsxs("div",{className:"flex-1",children:[t.jsx("label",{className:"text-[11px] font-medium mb-1 block",style:{color:"var(--text-tertiary)"},children:"Model"}),t.jsx("select",{className:"input-field text-[12px] py-1.5",value:u,onChange:L=>p(L.target.value),disabled:o==="loading",children:C==null?void 0:C.models.map(L=>t.jsx("option",{value:L.id,children:L.label},L.id))})]}),o==="loading"?t.jsx("button",{onClick:I,className:"btn btn-secondary flex-shrink-0",children:"Cancel"}):t.jsx("button",{onClick:A,className:"btn btn-primary flex-shrink-0",children:"Improve"})]}),o==="loading"&&k.length>0&&t.jsx("div",{className:"mt-3",children:t.jsx(En,{entries:k,isRunning:!0})})]}),b&&t.jsx("div",{className:"mb-4",children:j?t.jsx(ys,{error:j,onRetry:A,onDismiss:()=>{y(null),S(null)}}):t.jsx("div",{className:"px-4 py-3 rounded-lg text-[13px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:b})}),o==="diff_shown"&&t.jsxs(t.Fragment,{children:[x&&t.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg text-[12px]",style:{background:"rgba(168,85,247,0.08)",color:"var(--text-secondary)",border:"1px solid rgba(168,85,247,0.2)"},children:[t.jsx("span",{className:"font-semibold",style:{color:"#a855f7"},children:"AI Reasoning: "}),x]}),t.jsx("div",{className:"rounded-lg overflow-hidden mb-4",style:{border:"1px solid var(--border-subtle)",maxHeight:"400px",overflowY:"auto"},children:f.map((L,P)=>t.jsxs("div",{className:"px-3 py-0.5 text-[11px] font-mono",style:{background:L.type==="added"?"rgba(34,197,94,0.1)":L.type==="removed"?"rgba(239,68,68,0.1)":"transparent",color:L.type==="added"?"var(--green)":L.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:L.type==="added"?"3px solid var(--green)":L.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[t.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:L.type==="added"?"+":L.type==="removed"?"-":" "}),L.content]},P))}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:$,disabled:w,className:"btn btn-primary",children:w?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"spinner",style:{width:12,height:12}})," Applying..."]}):t.jsxs(t.Fragment,{children:[t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})," Apply"]})}),t.jsx("button",{onClick:W,className:"btn btn-secondary",children:"Discard"})]})]})]})]})}const Ki={remove:{bg:"var(--red-muted)",color:"var(--red)",label:"REMOVE"},modify:{bg:"rgba(251,191,36,0.15)",color:"#fbbf24",label:"MODIFY"},add:{bg:"var(--green-muted)",color:"var(--green)",label:"ADD"}},fy={remove:"var(--red)",modify:"#fbbf24",add:"var(--green)"};function hy({change:e,index:r,selected:n,onToggle:s,originalEval:o}){var f;const[a,i]=c.useState(!1),l=Ki[e.action]??Ki.add,d=fy[e.action]??"var(--border-subtle)",u=e.action==="remove"?(o==null?void 0:o.name)??`Eval #${e.evalId}`:((f=e.eval)==null?void 0:f.name)??"Unnamed",p=c.useCallback(()=>s(r),[s,r]);return t.jsxs("div",{className:"rounded-lg transition-all duration-150",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)",borderLeft:`3px solid ${d}`,opacity:n?1:.5},children:[t.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[t.jsx("input",{type:"checkbox",checked:n,onChange:p,className:"flex-shrink-0",style:{accentColor:"var(--accent)"}}),t.jsx("span",{className:"pill text-[9px] font-bold flex-shrink-0",style:{background:l.bg,color:l.color,padding:"1px 6px"},children:l.label}),t.jsx("span",{className:"text-[12px] font-medium truncate",style:{color:"var(--text-primary)"},children:u}),t.jsx("span",{className:"text-[11px] truncate flex-1",style:{color:"var(--text-tertiary)"},children:e.reason}),t.jsx("button",{onClick:()=>i(!a),className:"flex-shrink-0 w-5 h-5 flex items-center justify-center rounded transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:h=>{h.currentTarget.style.background="var(--surface-3)"},onMouseLeave:h=>{h.currentTarget.style.background="transparent"},children:t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:a?"rotate(90deg)":"rotate(0)",transition:"transform 0.15s ease"},children:t.jsx("polyline",{points:"9 18 15 12 9 6"})})})]}),a&&t.jsxs("div",{className:"px-4 pb-3 animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)"},children:[e.action==="add"&&e.eval&&t.jsx(my,{evalCase:e.eval}),e.action==="modify"&&e.eval&&o&&t.jsx(xy,{original:o,proposed:e.eval}),e.action==="remove"&&o&&t.jsx(gy,{evalCase:o})]})]})}function my({evalCase:e}){var r;return t.jsxs("div",{className:"pt-2.5 space-y-2",children:[t.jsx(Oo,{label:"Prompt",value:e.prompt}),t.jsx(Oo,{label:"Expected",value:e.expected_output}),t.jsxs("div",{children:[t.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:["Assertions (",((r=e.assertions)==null?void 0:r.length)??0,")"]}),t.jsx("div",{className:"mt-1 space-y-1",children:(e.assertions??[]).map(n=>t.jsxs("div",{className:"text-[11px] flex items-start gap-1.5",style:{color:"var(--text-secondary)"},children:[t.jsx("span",{style:{color:"var(--green)"},children:"+"})," ",n.text]},n.id))})]})]})}function xy({original:e,proposed:r}){const n=[];e.name!==r.name&&n.push({label:"Name",old:e.name,new:r.name}),e.prompt!==r.prompt&&n.push({label:"Prompt",old:e.prompt,new:r.prompt}),e.expected_output!==r.expected_output&&n.push({label:"Expected",old:e.expected_output,new:r.expected_output});const s=e.assertions??[],o=r.assertions??[],a=new Set(s.map(u=>u.text)),i=new Set(o.map(u=>u.text)),l=o.filter(u=>!a.has(u.text)),d=s.filter(u=>!i.has(u.text));return t.jsxs("div",{className:"pt-2.5 space-y-2",children:[n.map(u=>t.jsxs("div",{children:[t.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:u.label}),t.jsxs("div",{className:"mt-1 text-[11px] font-mono rounded p-2",style:{background:"var(--surface-1)"},children:[t.jsxs("div",{style:{color:"var(--red)",textDecoration:"line-through"},children:["- ",Wo(u.old,120)]}),t.jsxs("div",{style:{color:"var(--green)"},children:["+ ",Wo(u.new,120)]})]})]},u.label)),(l.length>0||d.length>0)&&t.jsxs("div",{children:[t.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Assertions"}),t.jsxs("div",{className:"mt-1 space-y-0.5",children:[d.map(u=>t.jsxs("div",{className:"text-[11px]",style:{color:"var(--red)"},children:["- ",u.text]},u.id)),l.map(u=>t.jsxs("div",{className:"text-[11px]",style:{color:"var(--green)"},children:["+ ",u.text]},u.id))]})]}),n.length===0&&l.length===0&&d.length===0&&t.jsx("div",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"No visible field changes"})]})}function gy({evalCase:e}){var r;return t.jsxs("div",{className:"pt-2.5 space-y-2",style:{opacity:.7},children:[t.jsx(Oo,{label:"Prompt",value:e.prompt}),t.jsxs("div",{children:[t.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:["Assertions (",((r=e.assertions)==null?void 0:r.length)??0,")"]}),t.jsx("div",{className:"mt-1 space-y-0.5",children:(e.assertions??[]).map(n=>t.jsx("div",{className:"text-[11px]",style:{color:"var(--red)",textDecoration:"line-through"},children:n.text},n.id))})]})]})}function Oo({label:e,value:r}){return t.jsxs("div",{children:[t.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:e}),t.jsx("div",{className:"mt-0.5 text-[11px] p-2 rounded font-mono",style:{background:"var(--surface-1)",color:"var(--text-secondary)",whiteSpace:"pre-wrap"},children:Wo(r,300)})]})}function Wo(e,r){return e.length>r?e.slice(0,r)+"...":e}const qi={remove:0,modify:1,add:2};function vy({changes:e,selections:r,currentEvals:n,onToggle:s,onSelectAll:o,onDeselectAll:a}){if(e.length===0)return null;const i=e.map((d,u)=>({change:d,originalIndex:u}));i.sort((d,u)=>(qi[d.change.action]??2)-(qi[u.change.action]??2));const l=Array.from(r.values()).filter(Boolean).length;return t.jsxs("div",{className:"mt-3 animate-fade-in",children:[t.jsxs("div",{className:"flex items-center justify-between mb-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[11px] font-semibold",style:{color:"var(--text-primary)"},children:"Test Case Changes"}),t.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["(",l,"/",e.length," selected)"]})]}),t.jsxs("div",{className:"flex gap-1.5",children:[t.jsx("button",{onClick:o,className:"text-[10px] px-2 py-0.5 rounded transition-colors duration-150",style:{color:"var(--accent)",background:"transparent"},onMouseEnter:d=>{d.currentTarget.style.background="var(--accent-muted)"},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:"Select All"}),t.jsx("button",{onClick:a,className:"text-[10px] px-2 py-0.5 rounded transition-colors duration-150",style:{color:"var(--text-tertiary)",background:"transparent"},onMouseEnter:d=>{d.currentTarget.style.background="var(--surface-3)"},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:"Deselect All"})]})]}),t.jsx("div",{className:"space-y-1.5 overflow-auto",style:{maxHeight:240},children:i.map(({change:d,originalIndex:u})=>t.jsx(hy,{change:d,index:u,selected:r.get(u)??!1,onToggle:s,originalEval:d.evalId!=null?n.find(p=>p.id===d.evalId):void 0},u))})]})}function yy(){var L;const{state:e,dispatch:r,submitAiEdit:n,applyAiEdit:s,discardAiEdit:o,cancelAiEdit:a,toggleEvalChange:i,selectAllEvalChanges:l,deselectAllEvalChanges:d,retryEvalsSave:u}=yt(),{aiEditLoading:p,aiEditResult:f,aiEditError:h,aiEditClassifiedError:m,aiEditProgress:v,aiEditEvalChanges:x,aiEditEvalSelections:g,aiEditEvalsRetry:b}=e,[y,j]=c.useState(""),{config:S}=yr(),[k,T]=c.useState("claude-cli"),[w,E]=c.useState("opus"),R=c.useRef(null);c.useEffect(()=>{var P;(P=R.current)==null||P.focus()},[]),c.useEffect(()=>{if(!S)return;S.providers.find(F=>F.id==="claude-cli"&&F.available)&&(T("claude-cli"),E("opus"))},[S]);const N=S==null?void 0:S.providers.find(P=>P.id===k&&P.available),I=c.useCallback(()=>{const P=y.trim();!P||p||n(P,k,w)},[y,p,n,k,w]),A=c.useCallback(P=>{P.key==="Enter"&&!P.shiftKey&&(P.preventDefault(),I()),P.key==="Escape"&&(P.preventDefault(),p?a():o())},[I,p,a,o]),$=c.useCallback(()=>{r({type:"CLOSE_AI_EDIT"}),r({type:"OPEN_AI_EDIT"})},[r]),W=f?vs(e.skillContent,f.improved):[],C=((L=e.evals)==null?void 0:L.evals)??[];return t.jsxs("div",{className:"animate-fade-in",style:{background:"var(--surface-1)",borderTop:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5",style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-2)"},children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("div",{className:"w-6 h-6 rounded-md flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#a855f7",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M15 4V2"}),t.jsx("path",{d:"M15 16v-2"}),t.jsx("path",{d:"M8 9h2"}),t.jsx("path",{d:"M20 9h2"}),t.jsx("path",{d:"M17.8 11.8L19 13"}),t.jsx("path",{d:"M15 9h.01"}),t.jsx("path",{d:"M17.8 6.2L19 5"}),t.jsx("path",{d:"M11 6.2L9.7 5"}),t.jsx("path",{d:"M3 21l9-9"})]})}),t.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"AI Edit"}),t.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:"Describe what to change — Enter to submit, Esc to dismiss"})]}),t.jsx("button",{onClick:o,className:"w-6 h-6 rounded-md flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:P=>{P.currentTarget.style.background="var(--surface-3)"},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),t.jsxs("div",{className:"px-4 py-3",children:[!f&&t.jsxs(t.Fragment,{children:[t.jsx("textarea",{ref:R,value:y,onChange:P=>j(P.target.value),onKeyDown:A,placeholder:"e.g., Add an error handling section...",disabled:p,rows:4,className:"w-full resize-y outline-none",style:{background:"var(--surface-0)",color:"var(--text-primary)",border:"1px solid var(--border-subtle)",borderRadius:6,padding:"10px 12px",fontSize:12.5,lineHeight:1.5,fontFamily:"var(--font-mono, 'JetBrains Mono', ui-monospace, monospace)",minHeight:96,maxHeight:240}}),t.jsxs("div",{className:"flex items-end gap-2.5 mt-2",children:[t.jsxs("div",{style:{minWidth:200},children:[t.jsx("label",{className:"text-[10px] font-medium mb-0.5 block",style:{color:"var(--text-tertiary)"},children:"Provider"}),t.jsx("select",{className:"input-field text-[11px] py-1",value:k,onChange:P=>{T(P.target.value);const F=S==null?void 0:S.providers.find(V=>V.id===P.target.value);F!=null&&F.models[0]&&E(F.models[0].id)},disabled:p,style:{width:"100%"},children:S==null?void 0:S.providers.filter(P=>P.available).map(P=>t.jsx("option",{value:P.id,children:P.label},P.id))})]}),t.jsxs("div",{style:{minWidth:200},children:[t.jsx("label",{className:"text-[10px] font-medium mb-0.5 block",style:{color:"var(--text-tertiary)"},children:"Model"}),t.jsx("select",{className:"input-field text-[11px] py-1",value:w,onChange:P=>E(P.target.value),disabled:p,style:{width:"100%"},children:N==null?void 0:N.models.map(P=>t.jsx("option",{value:P.id,children:P.label},P.id))})]}),t.jsx("div",{className:"flex-1"}),p?t.jsx("button",{onClick:a,className:"btn btn-secondary flex-shrink-0 text-[11px]",style:{padding:"6px 14px"},children:"Cancel"}):t.jsx("button",{onClick:I,disabled:!y.trim(),className:"btn btn-primary flex-shrink-0 text-[11px]",style:{padding:"6px 14px"},children:"Submit"})]}),p&&v.length>0&&t.jsx("div",{className:"mt-2.5",children:t.jsx(En,{entries:v,isRunning:!0})})]}),h&&t.jsx("div",{className:"mt-3",children:m?t.jsx(ys,{error:m,onRetry:$,onDismiss:o}):t.jsx("div",{className:"px-3 py-2.5 rounded-lg text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:h})}),f&&t.jsxs("div",{className:"animate-fade-in",children:[f.reasoning&&t.jsxs("div",{className:"mb-3 px-3 py-2.5 rounded-lg text-[11.5px]",style:{background:"rgba(168,85,247,0.08)",color:"var(--text-secondary)",border:"1px solid rgba(168,85,247,0.2)"},children:[t.jsx("span",{className:"font-semibold",style:{color:"#a855f7"},children:"AI Reasoning: "}),f.reasoning]}),t.jsx("div",{className:"mb-1",children:t.jsx("span",{className:"text-[11px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md Changes"})}),t.jsx("div",{className:"rounded-lg overflow-hidden mb-3",style:{border:"1px solid var(--border-subtle)",maxHeight:300,overflowY:"auto"},children:W.map((P,F)=>t.jsxs("div",{className:"px-3 py-0.5 text-[10.5px] font-mono",style:{background:P.type==="added"?"rgba(34,197,94,0.1)":P.type==="removed"?"rgba(239,68,68,0.1)":"transparent",color:P.type==="added"?"var(--green)":P.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:P.type==="added"?"3px solid var(--green)":P.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[t.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:P.type==="added"?"+":P.type==="removed"?"-":" "}),P.content]},F))}),t.jsx(vy,{changes:x,selections:g,currentEvals:C,onToggle:i,onSelectAll:l,onDeselectAll:d}),b&&t.jsxs("div",{className:"mt-3 px-3 py-2.5 rounded-lg text-[12px] flex items-center justify-between",style:{background:"rgba(251,191,36,0.12)",border:"1px solid rgba(251,191,36,0.3)",color:"#fbbf24"},children:[t.jsx("span",{children:"Test case save failed. SKILL.md was saved successfully."}),t.jsx("button",{onClick:u,className:"btn text-[11px]",style:{background:"rgba(251,191,36,0.2)",color:"#fbbf24",padding:"3px 10px"},children:"Retry Save"})]}),t.jsxs("div",{className:"flex gap-2 mt-3",children:[t.jsxs("button",{onClick:s,className:"btn btn-primary text-[11px]",style:{padding:"5px 12px"},children:[t.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Apply"]}),t.jsx("button",{onClick:o,className:"btn btn-secondary text-[11px]",style:{padding:"5px 12px"},children:"Discard"}),t.jsx("button",{onClick:$,className:"btn btn-ghost text-[11px]",style:{padding:"5px 12px"},children:"Try Again"})]})]})]})]})}function by(e,r){const[n,s]=c.useState([]),[o,a]=c.useState("SKILL.md"),[i,l]=c.useState(null),[d,u]=c.useState(!1),[p,f]=c.useState(null),[h,m]=c.useState(null),v=c.useCallback(async()=>{try{const b=await de.getSkillFiles(e,r);s(b.files),m(null)}catch(b){s([]),m(b.message??"Unable to load skill files")}},[e,r]);c.useEffect(()=>{a("SKILL.md"),l(null),f(null),m(null),v()},[e,r,v]);const x=c.useCallback(async b=>{if(a(b),b==="SKILL.md"){l(null),f(null);return}u(!0),f(null);try{const y=await de.getSkillFile(e,r,b);l(y)}catch(y){f(`Unable to open file: ${y.message}`),l(null)}finally{u(!1)}},[e,r]),g=c.useCallback(()=>{v()},[v]);return{files:n,activeFile:o,secondaryContent:i,loading:d,error:p,loadError:h,selectFile:x,refresh:g,isSkillMd:o==="SKILL.md"}}function ky(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function jy(e){const r=[],n=new Map;for(const s of e){const o=s.path.split("/"),i={name:o[o.length-1],path:s.path,type:s.type,size:s.size,children:[]};n.set(s.path,i)}for(const s of e){const o=s.path.split("/");if(o.length===1){const a=n.get(s.path);a&&r.push(a)}else{const a=o.slice(0,-1).join("/"),i=n.get(a),l=n.get(s.path);i&&l&&i.children.push(l)}}return r}function Od({expanded:e}){return t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:e?"rotate(90deg)":"rotate(0deg)",transition:"transform 0.15s"},children:t.jsx("polyline",{points:"9 18 15 12 9 6"})})}function Wd(){return t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function wy(){return t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t.jsx("polyline",{points:"14 2 14 8 20 8"})]})}function Sy(){return t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("polyline",{points:"23 4 23 10 17 10"}),t.jsx("polyline",{points:"1 20 1 14 7 14"}),t.jsx("path",{d:"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"})]})}function Ud({node:e,depth:r,activeFile:n,onSelect:s}){const[o,a]=c.useState(!0),i=e.path===n;return e.type==="dir"?t.jsxs("div",{children:[t.jsxs("button",{onClick:()=>a(!o),style:{display:"flex",alignItems:"center",gap:4,width:"100%",paddingLeft:`${4+r*14}px`,paddingTop:2,paddingBottom:2,background:"none",border:"none",cursor:"pointer",color:"var(--text-secondary)",fontSize:11,fontFamily:"var(--font-mono, monospace)",textAlign:"left"},children:[t.jsx(Od,{expanded:o}),t.jsx(Wd,{}),t.jsxs("span",{children:[e.name,"/"]})]}),o&&e.children.map(l=>t.jsx(Ud,{node:l,depth:r+1,activeFile:n,onSelect:s},l.path))]}):t.jsxs("button",{onClick:()=>s(e.path),style:{display:"flex",alignItems:"center",gap:4,width:"100%",paddingLeft:`${4+r*14}px`,paddingTop:2,paddingBottom:2,background:i?"var(--accent-muted)":"none",border:"none",cursor:"pointer",color:i?"var(--accent)":"var(--text-tertiary)",fontSize:11,fontFamily:"var(--font-mono, monospace)",textAlign:"left",borderRadius:3},children:[t.jsx("span",{style:{width:10}}),t.jsx(wy,{}),t.jsx("span",{style:{flex:1},children:e.name}),t.jsx("span",{style:{fontSize:9,color:"var(--text-tertiary)",marginRight:4,whiteSpace:"nowrap"},children:ky(e.size)})]})}function Cy({files:e,activeFile:r,onSelect:n,onRefresh:s,loadError:o}){const[a,i]=c.useState(!1),l=c.useMemo(()=>jy(e),[e]);return t.jsxs("div",{style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-0)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 8px",cursor:"pointer",userSelect:"none"},onClick:()=>i(!a),children:[t.jsx(Od,{expanded:a}),t.jsx(Wd,{}),t.jsx("span",{style:{fontSize:11,fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r}),t.jsx("button",{onClick:d=>{d.stopPropagation(),s()},style:{background:"none",border:"none",cursor:"pointer",color:"var(--text-tertiary)",padding:"2px 4px",display:"flex",alignItems:"center",borderRadius:3},title:"Refresh file list",children:t.jsx(Sy,{})})]}),a&&t.jsx("div",{style:{maxHeight:240,overflowY:"auto",padding:"2px 4px 4px"},children:o?t.jsx("div",{style:{fontSize:11,color:"var(--text-warning, var(--text-tertiary))",padding:"4px 8px"},title:o,children:"Skill files not accessible from this workspace"}):l.length===0?t.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",padding:"4px 8px"},children:"No files found"}):l.map(d=>t.jsx(Ud,{node:d,depth:0,activeFile:r,onSelect:n},d.path))})]})}function Fn(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Ey(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function Ny(e){const r=e.toLowerCase();return r.endsWith(".json")?"json":r.endsWith(".md")?"md":"other"}function Yi({content:e}){return t.jsx("textarea",{readOnly:!0,value:e,style:{flex:1,width:"100%",resize:"none",background:"var(--surface-1)",color:"var(--text-primary)",border:"none",outline:"none",padding:"12px 16px",fontSize:12,fontFamily:"var(--font-mono, monospace)",lineHeight:1.6}})}function Ji({content:e,fileType:r}){if(r==="json"){const n=Ey(e);return t.jsx("pre",{style:{flex:1,margin:0,padding:"12px 16px",overflow:"auto",background:"var(--surface-0)",color:"var(--text-primary)",fontSize:12,fontFamily:"var(--font-mono, monospace)",lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n})}return r==="md"?t.jsx("div",{style:{flex:1,overflow:"auto",padding:"16px 20px",background:"var(--surface-0)",color:"var(--text-primary)",fontSize:13,lineHeight:1.6},dangerouslySetInnerHTML:{__html:Cn(e)}}):t.jsx("pre",{style:{flex:1,margin:0,padding:"12px 16px",overflow:"auto",background:"var(--surface-0)",color:"var(--text-primary)",fontSize:12,fontFamily:"var(--font-mono, monospace)",lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e})}function Qi(e){try{return JSON.stringify(JSON.parse(e),null,2).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"([^"\\]|\\.)*"\s*:/g,n=>`<span style="color:#6383ff">${n}</span>`).replace(/:\s*"([^"\\]|\\.)*"/g,n=>`<span style="color:#22c55e">${n.slice(0,2)}<span style="color:#22c55e">${n.slice(2)}</span></span>`).replace(/:\s*(-?\d+\.?\d*)/g,(n,s)=>`: <span style="color:#fb923c">${s}</span>`).replace(/:\s*(true|false|null)/g,(n,s)=>`: <span style="color:#a855f7">${s}</span>`)}catch{return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}}function Ry({file:e,loading:r,error:n,viewMode:s,plugin:o,skill:a,onSaved:i,onDirtyChange:l}){const[d,u]=c.useState(s),[p,f]=c.useState(!1),[h,m]=c.useState(""),[v,x]=c.useState(!1),[g,b]=c.useState(null),y=s!==d?s:d;c.useEffect(()=>{l==null||l(p)},[p,l]);const j=c.useCallback(()=>{(e==null?void 0:e.content)!=null&&(m(e.content),f(!0))},[e]),S=c.useCallback(()=>{f(!1)},[]),k=c.useCallback(async()=>{if(!(!o||!a||!e)){x(!0);try{await de.saveSkillFile(o,a,e.path,h),b("Saved"),f(!1),i==null||i(),setTimeout(()=>b(null),2e3)}catch(E){b(`Save failed: ${E.message}`),setTimeout(()=>b(null),3e3)}finally{x(!1)}}},[o,a,e,h,i]);if(c.useEffect(()=>{if(!p)return;const E=R=>{(R.ctrlKey||R.metaKey)&&R.key==="s"&&(R.preventDefault(),k())};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[p,k]),r)return t.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-tertiary)",fontSize:13},children:"Loading…"});if(n)return t.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:24},children:t.jsxs("div",{style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)",borderRadius:8,padding:"16px 20px",maxWidth:400,textAlign:"center"},children:[t.jsx("div",{style:{fontSize:13,color:"var(--text-primary)",fontWeight:600,marginBottom:6},children:"Unable to open file"}),t.jsx("div",{style:{fontSize:12,color:"var(--text-tertiary)"},children:n})]})});if(!e)return null;if(e.binary)return t.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-tertiary)",fontSize:13},children:["Binary file (",Fn(e.size),") — cannot be displayed"]});const T=e.content??"",w=Ny(e.path);return t.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",minHeight:0},children:[e.truncated&&t.jsxs("div",{style:{padding:"4px 12px",background:"var(--warning-muted, #fef3c7)",borderBottom:"1px solid var(--border-subtle)",fontSize:11,color:"var(--warning-text, #92400e)"},children:["File truncated at ",Fn(512*1024)," — ",Fn(e.size)," total"]}),t.jsxs("div",{style:{display:"flex",gap:4,padding:"4px 8px",borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-0)"},children:[(w==="md"||w==="json")&&["raw","split","preview"].map(E=>t.jsx("button",{onClick:()=>u(E),style:{padding:"2px 8px",fontSize:11,background:y===E?"var(--accent-muted)":"none",color:y===E?"var(--accent)":"var(--text-tertiary)",border:"none",borderRadius:3,cursor:"pointer",textTransform:"capitalize"},children:E},E)),t.jsxs("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-tertiary)",display:"flex",alignItems:"center",gap:6},children:[Fn(e.size),o&&a&&!e.binary&&!p&&t.jsx("button",{onClick:j,style:{padding:"1px 6px",fontSize:10,background:"var(--accent-muted)",color:"var(--accent)",border:"none",borderRadius:3,cursor:"pointer"},children:"Edit"}),p&&t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:k,disabled:v,style:{padding:"1px 6px",fontSize:10,background:"var(--accent)",color:"#fff",border:"none",borderRadius:3,cursor:"pointer",opacity:v?.6:1},children:v?"Saving...":"Save"}),t.jsx("button",{onClick:S,style:{padding:"1px 6px",fontSize:10,background:"var(--surface-3)",color:"var(--text-tertiary)",border:"none",borderRadius:3,cursor:"pointer"},children:"Cancel"})]})]})]}),g&&t.jsx("div",{style:{padding:"4px 12px",background:g.startsWith("Save failed")?"var(--red-muted)":"var(--green-muted)",borderBottom:"1px solid var(--border-subtle)",fontSize:11,color:g.startsWith("Save failed")?"var(--red)":"var(--green)"},children:g}),t.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",minHeight:0},children:p?t.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"auto"},children:[t.jsx("textarea",{value:h,onChange:E=>m(E.target.value),style:{flex:1,width:"100%",resize:"none",background:"var(--surface-0)",color:"var(--text-primary)",border:"none",outline:"none",padding:"12px 16px",fontSize:12,fontFamily:"var(--font-mono, monospace)",lineHeight:1.6}}),t.jsxs("div",{style:{position:"sticky",bottom:0,display:"flex",alignItems:"center",gap:8,padding:"6px 12px",background:"var(--surface-1)",borderTop:"1px solid var(--border-subtle)"},children:[t.jsx("span",{style:{flex:1,fontSize:11,color:"var(--text-tertiary)"},children:"Unsaved changes"}),t.jsx("button",{onClick:k,disabled:v,style:{padding:"3px 12px",fontSize:11,background:"var(--accent)",color:"#fff",border:"none",borderRadius:4,cursor:"pointer",opacity:v?.6:1},children:v?"Saving...":"Save"}),t.jsx("button",{onClick:S,style:{padding:"3px 12px",fontSize:11,background:"var(--surface-3)",color:"var(--text-tertiary)",border:"none",borderRadius:4,cursor:"pointer"},children:"Cancel"})]})]}):y==="split"&&w!=="other"?t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",borderRight:"1px solid var(--border-subtle)"},children:t.jsx(Yi,{content:T})}),t.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"auto"},children:w==="json"?t.jsx("pre",{style:{flex:1,margin:0,padding:"12px 16px",overflow:"auto",background:"var(--surface-0)",fontSize:12,fontFamily:"var(--font-mono, monospace)",lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word"},dangerouslySetInnerHTML:{__html:Qi(T)}}):t.jsx(Ji,{content:T,fileType:w})})]}):y==="preview"&&w!=="other"?w==="json"?t.jsx("pre",{style:{flex:1,margin:0,padding:"12px 16px",overflow:"auto",background:"var(--surface-0)",fontSize:12,fontFamily:"var(--font-mono, monospace)",lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word"},dangerouslySetInnerHTML:{__html:Qi(T)}}):t.jsx(Ji,{content:T,fileType:w}):t.jsx(Yi,{content:T})})]})}const Ty=/^git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/,Iy=/^https:\/\/github\.com\/([^/]+)\/(.+?)(?:\.git)?$/;function Na(e){const r=e.trim();if(!r)throw new Error("normalizeRemoteUrl: empty input");let n=r.match(Ty);if(n)return`https://github.com/${n[1]}/${n[2]}`;if(n=r.match(Iy),n)return`https://github.com/${n[1]}/${n[2]}`;throw new Error(`normalizeRemoteUrl: unrecognized remote URL: ${e}`)}function Ly(e){const r=Na(e);return`https://verified-skill.com/submit?repo=${encodeURIComponent(r)}`}const Hd=c.createContext(null);function Ay(e){if(typeof window>"u")return()=>{};if(!window.__TAURI_INTERNALS__)return()=>{};const n=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",n),()=>{document.removeEventListener("visibilitychange",n)}}function Py({children:e,projectRoots:r=[]}){const n=xn(),[s,o]=c.useState(null),[a,i]=c.useState(!1),[l,d]=c.useState(null),u=c.useRef(r);u.current=r;const p=c.useRef(n);p.current=n;const f=c.useCallback(async()=>{i(!0),d(null);try{const x=await p.current.quotaGet(u.current);o(x)}catch(x){d(x instanceof Error?x.message:String(x))}finally{i(!1)}},[]),h=c.useCallback(async(x=!1)=>{i(!0),d(null);try{const g=await p.current.quotaForceSync(u.current,x);o(g)}catch(g){d(g instanceof Error?g.message:String(g));try{const b=await p.current.quotaGet(u.current);o(b)}catch{}}finally{i(!1)}},[]),m=c.useCallback(async()=>p.current.quotaCanCreateSkill(u.current),[]);c.useEffect(()=>{f();const x=Ay(()=>{f()}),g=setInterval(()=>{f()},6e4);return()=>{x(),clearInterval(g)}},[f]);const v=c.useMemo(()=>({snapshot:s,refreshing:a,error:l,forceSync:h,canCreateSkill:m}),[s,a,l,h,m]);return t.jsx(Hd.Provider,{value:v,children:e})}function Ra(){const e=c.useContext(Hd);if(!e)throw new Error("useQuota() called outside <QuotaProvider>");return e}function Vd(){const{snapshot:e}=Ra();if(!e)return{tier:"free",isPro:!1,isFree:!0,isEnterprise:!1,skillCount:0,skillLimit:null,isUnlimited:!0,gracePeriodDaysRemaining:0,isFresh:!1,loaded:!1,localSkillCount:0};const r=e.cache;if(!r)return{tier:"free",isPro:!1,isFree:!0,isEnterprise:!1,skillCount:0,skillLimit:null,isUnlimited:!0,gracePeriodDaysRemaining:e.daysRemaining,isFresh:e.isFresh,loaded:!0,localSkillCount:e.localSkillCount};const n=r.response.tier,s=n==="pro"||n==="enterprise",o=r.response.skillLimit;return{tier:n,isPro:s,isFree:n==="free",isEnterprise:n==="enterprise",skillCount:r.response.skillCount,skillLimit:o,isUnlimited:o===null,gracePeriodDaysRemaining:e.daysRemaining,isFresh:e.isFresh,loaded:!0,localSkillCount:e.localSkillCount}}const Ta="https://verified-skill.com/pricing",Xi="paywall-modal-title",Ws="paywall-modal-body";function Gd({open:e,onClose:r,onProceed:n,skillName:s,context:o="connect"}){const a=xn(),{forceSync:i,snapshot:l}=Ra(),d=c.useRef(null),u=c.useRef(null),p=c.useRef(null);c.useEffect(()=>{if(!e)return;let h=!1;return(async()=>{try{await i(!0)}catch{}})(),()=>{h=!0}},[e,i]),c.useEffect(()=>{var m;if(!e)return;const h=(m=l==null?void 0:l.cache)==null?void 0:m.response.tier;(h==="pro"||h==="enterprise")&&(n==null||n(),r())},[e,l,n,r]),c.useEffect(()=>{if(!e)return;p.current=typeof document<"u"?document.activeElement:null;const h=setTimeout(()=>{var v;return(v=u.current)==null?void 0:v.focus()},0),m=v=>{if(v.key==="Escape"){v.preventDefault(),r();return}if(v.key!=="Tab")return;const x=d.current;if(!x)return;const g=Array.from(x.querySelectorAll('button:not([disabled]),[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])'));if(g.length===0)return;const b=g[0],y=g[g.length-1],j=typeof document<"u"?document.activeElement:null;v.shiftKey&&j===b?(v.preventDefault(),y.focus()):!v.shiftKey&&j===y&&(v.preventDefault(),b.focus())};return document.addEventListener("keydown",m),()=>{clearTimeout(h),document.removeEventListener("keydown",m),p.current instanceof HTMLElement&&p.current.focus()}},[e,r]);const f=c.useCallback(()=>{a.openExternalUrl(Ta)},[a]);return e?t.jsxs("div",{role:"dialog","aria-modal":"true","aria-labelledby":Xi,"aria-describedby":Ws,"data-testid":"paywall-modal",style:$y,children:[t.jsx("div",{onClick:r,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.45)"}}),t.jsxs("div",{ref:d,style:My,children:[t.jsx("h2",{id:Xi,style:Fy,children:o==="publish"?"Publish private skills with Skill Studio Pro":"Connect private repositories with Skill Studio Pro"}),o==="publish"?t.jsx("p",{id:Ws,style:Zi,children:"Pro lets you publish a skill privately, so only your org can see, search, or install it. Publishing publicly stays free."}):t.jsxs("p",{id:Ws,style:Zi,children:["Pro adds private repo connections, priority support, and unlimited skills. Free users keep all current features for public repos.",s?t.jsxs(t.Fragment,{children:[" ",t.jsxs("span",{style:{color:"var(--color-muted, #888)"},children:["(",s," won’t connect until you upgrade.)"]})]}):null]}),t.jsxs("div",{style:Dy,children:[t.jsx("button",{type:"button",onClick:r,"data-testid":"paywall-maybe-later",style:By,children:"Maybe later"}),t.jsx("button",{ref:u,type:"button",onClick:f,"data-testid":"paywall-upgrade",style:zy,children:"Upgrade to Pro"})]})]})]}):null}const $y={position:"fixed",inset:0,zIndex:1e3,display:"flex",alignItems:"center",justifyContent:"center"},My={position:"relative",width:"min(420px, 92vw)",background:"var(--color-bg, #ffffff)",color:"var(--color-text, #111111)",borderRadius:12,padding:"24px 24px 16px",boxShadow:"0 16px 48px rgba(0,0,0,0.25)",fontFamily:"var(--font-system, -apple-system, system-ui)"},Fy={margin:0,fontSize:18,fontWeight:600},Zi={marginTop:12,marginBottom:24,fontSize:14,lineHeight:1.5,color:"var(--color-text-soft, #444)"},Dy={display:"flex",justifyContent:"flex-end",gap:12},Kd={padding:"8px 16px",borderRadius:6,fontSize:13,fontWeight:500,cursor:"pointer",border:"1px solid transparent"},zy={...Kd,background:"var(--color-accent, #cb4b16)",color:"#ffffff"},By={...Kd,background:"transparent",color:"var(--color-text, #111111)",borderColor:"var(--color-border, #cccccc)"},Uo=!1,_y=`${Ta}#hosted-waitlist`;function ur(e,r){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:e,severity:r}}))}const Ho="https://verified-skill.com/submit";function el(e){try{return Ly(e)}catch{return Ho}}function Oy({remoteUrl:e,fileCount:r,provider:n,model:s,onClose:o,defaultMode:a="manual",skillName:i,skillPath:l,privacy:d,tenantId:u}){const[p,f]=c.useState(a),[h,m]=c.useState(""),[v,x]=c.useState(!1),[g,b]=c.useState(!1),[y,j]=c.useState(d??"public"),[S,k]=c.useState(!1),{isFree:T}=Vd(),w=Uo,E="public",R=void 0,[N,I]=c.useState(null),[A,$]=c.useState(null),[W,C]=c.useState(null),{catalog:L}=Cc(),P=c.useMemo(()=>{if(!(L!=null&&L.activeAgent)||!L.activeModel)return null;const q=L.agents.find(ve=>ve.id===L.activeAgent),oe=q==null?void 0:q.models.find(ve=>ve.id===L.activeModel);return{provider:L.activeAgent,model:L.activeModel,displayName:(oe==null?void 0:oe.displayName)??L.activeModel}},[L]),F=(P==null?void 0:P.provider)??n,V=(P==null?void 0:P.model)??s,le=(P==null?void 0:P.displayName)??V,H=c.useCallback(async()=>{x(!0),I(null);try{const q=await de.gitCommitMessage({provider:F,model:V});m(q.message)}catch(q){const oe=q instanceof Error?q.message:String(q);I(oe)}finally{x(!1)}},[F,V]);c.useEffect(()=>{a==="ai"&&!h&&H()},[]);const U=c.useCallback(()=>{f("ai"),$(null),h.trim()||H()},[h,H]),re=c.useCallback(()=>{f("manual"),I(null)},[]),xe=c.useCallback(async()=>{const q=h.trim();if(!(!q||g)){b(!0),$(null),C(null);try{const oe=await de.gitPublish({commitMessage:q});if(oe.conflict){const Z=oe.conflictedFiles??[],ne=oe.error??(Z.length>0?`Remote has changes that conflict with yours in: ${Z.join(", ")}. Pull and resolve manually, then publish again.`:"Remote has changes that conflict with yours. Pull and resolve manually, then publish again.");$(ne);const fe=oe.reason==="rebase_failed"?"Publish blocked: could not rebase onto the remote — pull manually and retry":"Publish blocked: remote conflict — resolve and retry";ur(fe,"error");return}const ve=oe.remoteUrl??e,ke=(oe.commitSha??"").slice(0,7),_=oe.branch??"",Y=oe.reconciled?" (reconciled with remote)":"";if(i){let Z;try{Z=Na(ve)}catch{C({ok:!1,websiteUrl:el(ve)}),ur(`Pushed ${ke} on ${_}${Y} — open the website to submit`,"info");return}let ne;try{ne=await de.submitToQueue({repoUrl:Z,skillName:i,skillPath:l,source:"studio-submit",privacy:E,tenantId:R})}catch(me){if(uc(me)){C({ok:!1,notSubmitted:me.message}),ur(`Pushed ${ke} on ${_}${Y}. Not submitted to verified-skill.com.`,"info");return}const ce=me==null?void 0:me.status;C({ok:!1,websiteUrl:typeof ce=="number"&&ce!==413?el(ve):Ho}),ur(`Pushed ${ke} on ${_}${Y} — sign in or finish on the website to submit`,"info");return}const fe=`https://verified-skill.com/submit?repo=${encodeURIComponent(Z)}`;C({ok:!0,result:ne,submitUrl:fe}),ur(`Submitted ${i} — ${ke} on ${_}`,"info")}else C({ok:!1,websiteUrl:Ho}),ur(`Pushed ${ke} on ${_}${Y} — open the website to submit`,"info")}catch(oe){const ve=oe instanceof Error?oe.message:String(oe),ke=ve.length>200?ve.slice(0,200)+"…":ve;$(ke),ur(`Publish failed: ${ke}`,"error")}finally{b(!1)}}},[h,g,e,i,l,E,R]),he=c.useCallback(q=>{Xn(q)},[]),z=h.trim().length>0&&!g&&!v,X="#E6EDF3",M="#9CA3AF",O="rgba(255,255,255,0.12)",G="#0F1115",K={fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:M,fontFamily:"var(--font-mono, monospace)",marginBottom:6,display:"block"},te={flex:1,height:32,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,fontSize:12,fontFamily:"var(--font-mono, monospace)",background:"transparent",color:M,border:"none",cursor:"pointer",transition:"background 120ms ease, color 120ms ease"},ee={...te,background:"rgba(255,255,255,0.08)",color:X,fontWeight:600};return t.jsxs(t.Fragment,{children:[t.jsx("div",{"aria-hidden":"true",onClick:g?void 0:o,style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.55)",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",zIndex:999,animation:"publishDrawerBackdropIn 150ms ease-out"}}),t.jsx("div",{role:"presentation",style:{position:"fixed",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,padding:24,pointerEvents:"none"},children:t.jsxs("div",{role:"dialog","aria-label":"Publish","aria-modal":"true",style:{pointerEvents:"auto",width:520,maxWidth:"calc(100vw - 48px)",maxHeight:"80vh",overflowY:"auto",background:"#1A1D24",border:`1px solid ${O}`,borderRadius:10,padding:24,boxShadow:"0 24px 64px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.05)",color:X,fontFamily:"var(--font-mono, monospace)",animation:"publishDrawerIn 180ms cubic-bezier(0.2, 0.8, 0.2, 1)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:4},children:[t.jsx("strong",{style:{fontSize:16,fontWeight:700,letterSpacing:"-0.01em",color:X,fontFamily:"var(--font-sans, var(--font-mono, sans-serif))"},children:"Publish skill"}),t.jsx("button",{type:"button","aria-label":"Dismiss",onClick:g?void 0:o,disabled:g,style:{background:"none",border:"none",color:M,fontSize:22,lineHeight:1,cursor:g?"not-allowed":"pointer",padding:0,opacity:g?.4:1},children:"×"})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:12,color:M,fontVariantNumeric:"tabular-nums",marginBottom:18},children:[t.jsx("span",{"aria-hidden":"true",style:{color:"#F59E0B",fontFamily:"monospace"},children:"▮"}),t.jsxs("span",{children:[r," file",r===1?"":"s"," changed"]})]}),t.jsx("div",{style:{height:1,background:O,margin:"0 -24px 18px"}}),t.jsx("span",{style:K,children:"Mode"}),t.jsxs("div",{role:"tablist","aria-label":"Commit message mode","data-testid":"publish-mode-toggle",style:{display:"flex",border:`1px solid ${O}`,borderRadius:6,overflow:"hidden",marginBottom:16,background:G},children:[t.jsx("button",{type:"button",role:"tab","aria-selected":p==="manual","data-testid":"publish-mode-manual",onClick:re,disabled:g,style:p==="manual"?ee:te,children:"Write yourself"}),t.jsx("div",{style:{width:1,background:O}}),t.jsx("button",{type:"button",role:"tab","aria-selected":p==="ai","data-testid":"publish-mode-ai",onClick:U,disabled:g,style:p==="ai"?ee:te,children:v&&p==="ai"?"Generating…":"Generate with AI"})]}),t.jsx("span",{style:K,children:"Visibility"}),t.jsx(Wy,{value:E,onChange:j,isFree:T,gateOpen:w,onUpgrade:()=>k(!0),onWaitlist:()=>he(_y),disabled:g,border:O,text:X,textMuted:M,inputBg:G}),t.jsx("label",{htmlFor:"commit-message",style:K,children:"Commit message"}),t.jsx("textarea",{id:"commit-message",value:h,onChange:q=>m(q.target.value),rows:5,disabled:v||g,placeholder:v?"Generating with AI…":p==="ai"?"Click Generate to draft a message":"Type your commit message…",style:{width:"100%",background:G,border:`1px solid ${O}`,borderRadius:6,padding:"10px 12px",fontFamily:"var(--font-mono, monospace)",fontSize:13,lineHeight:1.6,color:X,resize:"vertical",outline:"none"}}),p==="ai"&&le&&t.jsxs("div",{"data-testid":"publish-ai-model",style:{marginTop:10,fontSize:11,color:M,fontFamily:"var(--font-mono, monospace)"},children:["Using ",le]}),p==="ai"&&t.jsx("button",{type:"button",onClick:H,disabled:v||g,"data-testid":"publish-generate-button",style:{marginTop:10,padding:"8px 14px",background:v?"rgba(255,255,255,0.06)":"#2563EB",color:v?M:"#FFFFFF",border:"1px solid "+(v?O:"#2563EB"),borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:600,cursor:v||g?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6},children:v?"Generating…":"Generate with AI"}),N&&p==="ai"&&t.jsxs("div",{role:"alert","data-testid":"publish-error-generate",style:{marginTop:10,padding:"8px 12px",border:"1px solid oklch(65% 0.14 25 / 0.35)",background:"oklch(65% 0.14 25 / 0.06)",borderRadius:4,fontSize:11,color:"oklch(70% 0.14 25)",fontFamily:"var(--font-mono, monospace)",lineHeight:1.5},children:[t.jsx("strong",{style:{fontWeight:600},children:"AI generation failed."})," ",N," ",t.jsx("button",{type:"button",onClick:H,disabled:v,style:{background:"none",border:"none",color:"var(--color-accent)",cursor:v?"not-allowed":"pointer",fontFamily:"inherit",fontSize:"inherit",textDecoration:"underline",padding:0},children:"Retry"})]}),A&&t.jsxs("div",{role:"alert","data-testid":"publish-error-push",style:{marginTop:10,padding:"8px 12px",border:"1px solid oklch(65% 0.14 25 / 0.35)",background:"oklch(65% 0.14 25 / 0.06)",borderRadius:4,fontSize:11,color:"oklch(70% 0.14 25)",fontFamily:"var(--font-mono, monospace)",lineHeight:1.5},children:[t.jsx("strong",{style:{fontWeight:600},children:"Publish failed."})," ",A]}),W&&t.jsx(Uy,{outcome:W,onOpenWebsite:he,border:O,textMuted:M}),t.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:18,gap:6},children:[t.jsx("div",{style:{minHeight:28},children:p==="ai"&&t.jsx("button",{type:"button","aria-label":"Regenerate",onClick:H,disabled:v||g,className:"btn btn-ghost text-[11px]",style:{padding:"4px 10px"},children:v?"Generating…":"Regenerate"})}),t.jsx("div",{style:{display:"flex",gap:8},children:W?t.jsx("button",{type:"button","aria-label":"Done",onClick:o,"data-testid":"publish-done",style:{padding:"8px 16px",background:"#22C55E",color:"#0B0F12",border:"1px solid #22C55E",borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:700,cursor:"pointer"},children:"Done"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button","aria-label":"Cancel",onClick:o,disabled:g,style:{padding:"8px 14px",background:"transparent",color:X,border:`1px solid ${O}`,borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:500,cursor:g?"not-allowed":"pointer",opacity:g?.5:1},children:"Cancel"}),t.jsx("button",{type:"button","aria-label":"Commit & Push",onClick:xe,disabled:!z,"data-testid":"publish-commit-push",style:{padding:"8px 16px",background:z?"#22C55E":"rgba(255,255,255,0.06)",color:z?"#0B0F12":M,border:"1px solid "+(z?"#22C55E":O),borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:700,cursor:z?"pointer":"not-allowed"},children:g?"Publishing…":"Commit & Push"})]})})]})]})}),t.jsx("style",{children:`
33
+ @keyframes publishDrawerBackdropIn { from { opacity: 0 } to { opacity: 1 } }
34
+ @keyframes publishDrawerIn {
35
+ from { opacity: 0; transform: translateY(4px) }
36
+ to { opacity: 1; transform: translateY(0) }
37
+ }
38
+ @media (prefers-reduced-motion: reduce) {
39
+ [role="dialog"][aria-label="Publish"],
40
+ [role="dialog"][aria-label="Publish"] + * { animation: none !important }
41
+ }
42
+ `}),t.jsx(Gd,{open:S,onClose:()=>k(!1),onProceed:()=>j("private"),skillName:i,context:"publish"})]})}function Wy({value:e,onChange:r,isFree:n,gateOpen:s,onUpgrade:o,onWaitlist:a,disabled:i,border:l,text:d,textMuted:u,inputBg:p}){const f=v=>({flex:1,minWidth:120,display:"flex",flexDirection:"column",gap:4,padding:"10px 12px",border:`1px solid ${v?"#22C55E":l}`,borderRadius:6,background:v?"rgba(34,197,94,0.08)":p,color:d,cursor:i?"not-allowed":"pointer",textAlign:"left",fontFamily:"var(--font-mono, monospace)"}),h={fontSize:12,fontWeight:600,color:d},m={fontSize:10.5,color:u,lineHeight:1.4};return t.jsxs("div",{role:"radiogroup","aria-label":"Visibility",style:{display:"flex",gap:8,flexWrap:"wrap",marginBottom:16},children:[t.jsxs("button",{type:"button",role:"radio","aria-checked":e==="public","data-testid":"publish-privacy-public",onClick:()=>!i&&r("public"),disabled:i,style:f(e==="public"),children:[t.jsx("span",{style:h,children:"Public"}),t.jsx("span",{style:m,children:"Visible to everyone on verified-skill.com."})]}),s?n?t.jsxs("button",{type:"button",role:"radio","aria-checked":e==="private","data-testid":"publish-privacy-locked",onClick:()=>!i&&o(),disabled:i,style:{...f(!1),opacity:.85},children:[t.jsx("span",{style:h,children:"🔒 Private"}),t.jsx("span",{style:{...m,color:"#F59E0B"},children:"Upgrade to publish privately"})]}):t.jsxs("button",{type:"button",role:"radio","aria-checked":e==="private","data-testid":"publish-privacy-private",onClick:()=>!i&&r("private"),disabled:i,style:f(e==="private"),children:[t.jsx("span",{style:h,children:"🔒 Private"}),t.jsx("span",{style:m,children:"Only your org can see, search, or install it."})]}):t.jsxs("div",{"aria-disabled":"true","data-testid":"publish-privacy-unavailable",style:{...f(!1),cursor:"default",opacity:.85},children:[t.jsx("span",{style:h,children:"🔒 Private"}),t.jsx("span",{style:m,children:"Hosted private publishing is not open yet."}),t.jsx("button",{type:"button","data-testid":"publish-privacy-waitlist",onClick:()=>!i&&a(),disabled:i,style:{...Vo(),fontSize:10.5,alignSelf:"flex-start"},children:"Join the waitlist ↗"})]}),s&&t.jsxs("button",{type:"button",role:"radio","aria-checked":e==="decide-later","data-testid":"publish-privacy-decide-later",onClick:()=>!i&&r("decide-later"),disabled:i,style:f(e==="decide-later"),children:[t.jsx("span",{style:h,children:"Decide later"}),t.jsx("span",{style:m,children:"Submit without choosing visibility yet."})]})]})}function Uy({outcome:e,onOpenWebsite:r,border:n,textMuted:s}){if(!e.ok&&"notSubmitted"in e)return t.jsxs("div",{role:"status","data-testid":"publish-outcome","data-outcome":"not-submitted",style:Us(n,"#F59E0B"),children:[t.jsx("strong",{style:{fontWeight:600,color:"#F59E0B"},children:"Pushed to GitHub."})," ",t.jsxs("span",{style:{color:s},children:["Nothing was submitted to verified-skill.com. ",e.notSubmitted]})]});if(!e.ok)return t.jsxs("div",{role:"status","data-testid":"publish-outcome","data-outcome":"website-fallback",style:Us(n,"#F59E0B"),children:[t.jsx("strong",{style:{fontWeight:600,color:"#F59E0B"},children:"Pushed to GitHub."})," ",t.jsx("span",{style:{color:s},children:"Sign in to submit in-app, or finish on the website."})," ",t.jsx("button",{type:"button","data-testid":"publish-open-website",onClick:()=>r(e.websiteUrl),style:Vo(),children:"Open on website ↗"})]});const{result:o,submitUrl:a}=e;let i="#22C55E",l="Submitted to the queue.",d="";switch(o.kind){case"created":i="#22C55E",l="Submitted to the queue.",d=`${o.skillName} is now ${o.state}. We’ll notify you when review completes.`;break;case"requeued":i="#22C55E",l="Re-queued for review.",d=`This skill was already submitted — it’s back in the queue (${o.state}).`;break;case"duplicate":i="#F59E0B",l="Already in the queue.",d=`This skill is already submitted (${o.state}). No new entry was created.`;break;case"alreadyVerified":i="#3B82F6",l="Already verified.",d=`${o.skillName??"This skill"} is already published — nothing to submit.`;break;case"blocked":i="#EF4444",l="Submission blocked.",d="This skill is on the blocklist and can’t be submitted. Tap to see why.";break}return t.jsxs("div",{role:"status","data-testid":"publish-outcome","data-outcome":o.kind,style:Us(n,i),children:[t.jsx("strong",{style:{fontWeight:600,color:i},children:l})," ",t.jsx("span",{style:{color:s},children:d})," ",t.jsx("button",{type:"button","data-testid":"publish-open-website",onClick:()=>r(a),style:Vo(),children:"Open on website ↗"})]})}function Us(e,r){return{marginTop:10,padding:"8px 12px",border:`1px solid ${e}`,borderLeft:`3px solid ${r}`,background:"rgba(255,255,255,0.03)",borderRadius:4,fontSize:11,fontFamily:"var(--font-mono, monospace)",lineHeight:1.55}}function Vo(){return{background:"none",border:"none",color:"var(--color-accent, #60A5FA)",cursor:"pointer",fontFamily:"inherit",fontSize:"inherit",textDecoration:"underline",padding:0}}function Yr(e,r){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:e,severity:r}}))}const tl="https://verified-skill.com/submit";function qd({remoteUrl:e,provider:r,model:n,skillName:s,skillPath:o,privacy:a,tenantId:i}){const[l,d]=c.useState(!1),[u,p]=c.useState(!1),[f,h]=c.useState(0),m=c.useCallback(async()=>{if(!(l||u)){d(!0);try{let x=!1,g=0;try{const k=await de.gitDiff();x=!!k.hasChanges,g=k.fileCount??0}catch{}if(x){h(g),p(!0);return}const b=await de.gitPublish(),y=b.remoteUrl??e,j=(b.commitSha??"").slice(0,7),S=b.branch??"";if(s){let k=null;try{k=Na(y)}catch{k=null}if(k){let T;try{T=await de.submitToQueue({repoUrl:k,skillName:s,skillPath:o,source:"studio-submit",privacy:Uo?a??"public":"public",tenantId:Uo?i:void 0})}catch(w){if(!uc(w))throw w;Yr(`Pushed ${j} on ${S}. Not submitted to verified-skill.com: ${w.message}`,"info");return}Yr(Hy(T,s,j,S),"info")}else Xn(tl),Yr(`Pushed ${j} on ${S} — open the website to submit`,"info")}else Xn(tl),Yr(`Opening verified-skill.com — ${j} on ${S}`,"info")}catch(x){const g=x instanceof Error?x.message:String(x),b=g.length>200?g.slice(0,200)+"…":g;Yr(`Publish failed: ${b}`,"error")}finally{d(!1)}}},[l,u,e,s,o,a,i]),v=c.useCallback(()=>p(!1),[]);return t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button","aria-label":"Publish",onClick:m,disabled:l,className:"btn btn-primary text-[11px]",style:{padding:"5px 14px"},title:"Commit, push, and submit to the review queue — in-app, no browser redirect",children:l?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"spinner",style:{width:11,height:11,borderWidth:1.5}})," Publishing…"]}):"Publish"}),u&&t.jsx(Oy,{remoteUrl:e,fileCount:f,provider:r,model:n,skillName:s,skillPath:o,privacy:a,tenantId:i,onClose:v})]})}function Hy(e,r,n,s){switch(e.kind){case"created":return`Submitted ${r} — ${n} on ${s}`;case"requeued":return`Re-queued ${r} for review — ${n}`;case"duplicate":return`${r} is already in the queue`;case"alreadyVerified":return`${r} is already verified`;case"blocked":return`${r} is blocked and can’t be submitted`}}const Vy={hasRemote:!1,remoteUrl:null,branch:null,loading:!0,error:null};function Gy(){const[e,r]=c.useState(Vy);return c.useEffect(()=>{let n=!1;return de.gitRemote().then(s=>{n||r({hasRemote:!!s.hasRemote,remoteUrl:s.remoteUrl??null,branch:s.branch??null,loading:!1,error:null})}).catch(s=>{n||r({hasRemote:!1,remoteUrl:null,branch:null,loading:!1,error:s instanceof Error?s:new Error(String(s))})}),()=>{n=!0}},[]),e}const Ky=/^v?(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function Go(e){if(typeof e!="string")return null;const r=e.trim().match(Ky);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3])}:null}function en(e,r){const n=Go(e);if(!n)throw new Error(`bumpVersion: not a valid semver: ${JSON.stringify(e)}`);switch(r){case"patch":return`${n.major}.${n.minor}.${n.patch+1}`;case"minor":return`${n.major}.${n.minor+1}.0`;case"major":return`${n.major+1}.0.0`}}function qy(e,r){const n=Go(r);if(!n)return{valid:!1,reason:`Invalid semver: ${JSON.stringify(r)}`};if(e==null)return{valid:!0};const s=Go(e);return s?s.major===n.major&&s.minor===n.minor&&s.patch===n.patch?{valid:!0}:n.major<s.major||n.major===s.major&&n.minor<s.minor||n.major===s.major&&n.minor===s.minor&&n.patch<s.patch?{valid:!1,reason:`Version cannot decrease (from ${e} → ${r}). Use the same or higher version.`}:n.major!==s.major?n.major!==s.major+1?{valid:!1,reason:`Major version can only increase by 1 at a time (got ${s.major} → ${n.major}).`}:n.minor!==0||n.patch!==0?{valid:!1,reason:`When bumping major, minor and patch must be reset to 0 (got ${r}; expected ${n.major}.0.0).`}:{valid:!0}:n.minor!==s.minor?n.minor!==s.minor+1?{valid:!1,reason:`Minor version can only increase by 1 at a time (got ${s.minor} → ${n.minor}).`}:n.patch!==0?{valid:!1,reason:`When bumping minor, patch must be reset to 0 (got ${r}; expected ${n.major}.${n.minor}.0).`}:{valid:!0}:n.patch!==s.patch+1?{valid:!1,reason:`Patch version can only increase by 1 at a time (got ${s.patch} → ${n.patch}).`}:{valid:!0}:{valid:!0}}const Yd=/^(---[ \t]*\r?\n)([\s\S]*?)(\r?\n---[ \t]*(?=\r?\n|$))/;function Jd(e){const r=e.findIndex(u=>/^version[ \t]*:/.test(u)),n=e.findIndex(u=>/^metadata[ \t]*:[ \t]*(?:#.*)?$/.test(u));let s=n+1;for(;s<e.length&&(!e[s].trim()||/^\s|^#/.test(e[s]));)s++;const o=n<0?[]:e.slice(n+1,s),a=o.filter(u=>/^ +[^ #]/.test(u)).map(u=>u.length-u.trimStart().length),i=a.length?Math.min(...a):2,l=new RegExp(`^ {${i}}version[ \\t]*:`),d=o.findIndex(u=>l.test(u));return{root:r,metadata:n,nested:d<0?-1:n+1+d,indent:i}}function Yy(e){const r=e.match(Yd);if(!r)return[];const n=r[2].split(/\r?\n/),{root:s,nested:o}=Jd(n);return[s,o].filter(a=>a>=0).map(a=>{var d;const l=n[a].slice(n[a].indexOf(":")+1).trim().match(/^(?:"([^"]*)"|'([^']*)'|([^#]*))/);return((d=(l==null?void 0:l[1])??(l==null?void 0:l[2])??(l==null?void 0:l[3]))==null?void 0:d.trim())||void 0})}function Jy(e){return Yy(e).find(r=>r!==void 0)}function Qd(e,r){const n=e.match(Yd),s=JSON.stringify(r);if(!n)return`---
43
+ metadata:
44
+ version: ${s}
45
+ ---
46
+ ${e}`;const[,o,a,i]=n,l=o.includes(`\r
47
+ `)?`\r
48
+ `:`
49
+ `,d=a.split(/\r?\n/);if(d.some(v=>/^[ \t]*["'][^\r\n]*["'][ \t]*:/.test(v)))throw new Error("Cannot update version: quoted keys need a YAML-aware edit");const{root:u,metadata:p,nested:f,indent:h}=Jd(d),m=u>=0?u:f;if(m>=0){const v=d[m].slice(d[m].indexOf(":")+1).trim(),x=u>=0?0:h;if(/^[|>]/.test(v))throw new Error("Cannot update version: multiline version needs a YAML-aware edit");for(let g=m+1;g<d.length;g++)if(!(!d[g].trim()||/^[ \t]*#/.test(d[g]))){if(d[g].length-d[g].trimStart().length>x)throw new Error("Cannot update version: multiline version needs a YAML-aware edit");break}}if(u>=0)d[u]=`version: ${s}`;else if(f>=0)d[f]=`${" ".repeat(h)}version: ${s}`;else if(p>=0)d.splice(p+1,0,`${" ".repeat(h)}version: ${s}`);else{if(d.some(v=>/^metadata[ \t]*:/.test(v)))throw new Error("Cannot update version: metadata must use a block mapping");d.push("metadata:",` version: ${s}`)}return`${o}${d.join(l)}${i}${e.slice(n[0].length)}`}function rs(e){return Jy(e)??null}function Qy(e,r){const n=rs(r),s=rs(e);if(n!==null&&s!==null&&n===s)try{const o=en(n,"patch");return{contentToSave:Qd(e,o),version:o,fromVersion:n}}catch{return{contentToSave:e,version:s,fromVersion:n}}return{contentToSave:e,version:s,fromVersion:n}}function Er(e){return e.testType==="integration"?"integration":"unit"}function Fr(e){return e>=.8?"var(--green)":e>=.5?"var(--yellow)":"var(--red)"}function Xd(e){const r=new Date(e);return r.toLocaleDateString(void 0,{month:"short",day:"numeric"})+", "+r.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1})}function Zd(e){return e==null?"--":e>=1e3?`${(e/1e3).toFixed(1)}s`:`${e}ms`}const Xy=new Set(["benchmark","comparison","baseline"]);function rl(e,r,n,s){return e.map(({rate:o,idx:a,total:i})=>{const l=s+a/(i-1)*(r-s*2),d=s+(n-s*2)-o*(n-s*2);return`${l},${d}`})}function eu({entries:e}){const r=e.filter(f=>Xy.has(f.type)).slice().reverse(),n=r.map((f,h,m)=>({rate:f.pass_rate,idx:h,total:m.length})).filter((f,h)=>{const m=r[h].type;return m==="benchmark"||m==="comparison"}),s=r.flatMap((f,h)=>f.type==="baseline"?[{rate:f.pass_rate,idx:h,total:r.length}]:f.type==="comparison"&&f.baselinePassRate!=null?[{rate:f.baselinePassRate,idx:h,total:r.length}]:[]);if(n.length<2&&s.length<2)return null;const o=80,a=24,i=2,l=n.length>=2?rl(n,o,a,i):[],d=s.length>=2?rl(s,o,a,i):[],u=l[l.length-1],p=d[d.length-1];return t.jsxs("svg",{width:o,height:a,style:{display:"block",flexShrink:0},children:[d.length>0&&t.jsx("polyline",{points:d.join(" "),fill:"none",stroke:"var(--text-tertiary)",strokeWidth:1.5,strokeLinejoin:"round",strokeDasharray:"3 2"}),l.length>0&&t.jsx("polyline",{points:l.join(" "),fill:"none",stroke:"var(--accent)",strokeWidth:1.5,strokeLinejoin:"round"}),p&&t.jsx("circle",{cx:parseFloat(p.split(",")[0]),cy:parseFloat(p.split(",")[1]),r:2.5,fill:"var(--text-tertiary)"}),u&&t.jsx("circle",{cx:parseFloat(u.split(",")[0]),cy:parseFloat(u.split(",")[1]),r:2.5,fill:"var(--accent)"})]})}function tu(e,r,n){const s=isNaN(r)?0:r,o=[],a=[],i=[];if((e==="PASS"||e==="EFFECTIVE")&&s>=.7){const u=o.length>0?` Met criteria: ${o.map(p=>p.criterion).join(", ")}.`:"";return{explanation:`${e} (score ${s.toFixed(2)}): evaluation met expectations.${u}`}}if(e==="FAIL"||e==="DEGRADING"){const u=a.length>0?` Failed criteria: ${a.map(f=>f.criterion).join(", ")}.`:"",p=[...a.map(f=>`Improve "${f.criterion}" (score: ${f.score.toFixed(2)})`),...i.map(f=>`Strengthen "${f.criterion}" (score: ${f.score.toFixed(2)})`)];return p.length===0&&p.push("Review prompt instructions and add more specific guidance"),{explanation:`${e} (score ${s.toFixed(2)}): evaluation did not meet expectations.${u}`,recommendations:p}}if(e==="INEFFECTIVE"){if(s<.2){const p=[...a.map(f=>`Rework "${f.criterion}" — currently at ${f.score.toFixed(2)}`),"Consider adding examples to your system prompt","Review the rubric criteria for achievability"];return{explanation:`${e} (score ${s.toFixed(2)}): evaluation is significantly below expectations.`,recommendations:p}}const u=[...a.map(p=>`Rework "${p.criterion}" — currently at ${p.score.toFixed(2)}`),...i.map(p=>`Strengthen "${p.criterion}" (score: ${p.score.toFixed(2)})`)];return u.length===0&&u.push("Consider restructuring your prompt approach"),{explanation:`${e} (score ${s.toFixed(2)}): below expectations but showing some capability.`,recommendations:u}}if(e==="MARGINAL"){const u=[...i.map(p=>`Strengthen "${p.criterion}" (score: ${p.score.toFixed(2)})`),...a.map(p=>`Improve "${p.criterion}" (score: ${p.score.toFixed(2)})`)];return u.length===0&&u.push(o.length>0?"Assertion pass rate is below target despite strong rubric scores — review test case alignment":"Review prompt instructions for areas of improvement"),{explanation:`${e} (score ${s.toFixed(2)}): moderate improvement detected.`,recommendations:u}}if(e==="EMERGING"){const u=[...a.map(p=>`Improve "${p.criterion}" (score: ${p.score.toFixed(2)})`),...i.map(p=>`Strengthen "${p.criterion}" (score: ${p.score.toFixed(2)})`)];return u.length===0&&u.push(o.length>0?"Assertion pass rate is below target despite strong rubric scores — review test case alignment":"Add more specific guidance to your prompt instructions"),{explanation:`${e} (score ${s.toFixed(2)}): early promise — focus on weak areas to improve.`,recommendations:u}}const l=o.length>0?` Passing: ${o.map(u=>u.criterion).join(", ")}.`:"",d=i.length>0?` Needs improvement: ${i.map(u=>u.criterion).join(", ")}.`:"";return{explanation:`${e} (score ${s.toFixed(2)}): mixed results.${l}${d}`}}const ru={EFFECTIVE:"Strong Improvement",MARGINAL:"Moderate Improvement",EMERGING:"Early Promise",INEFFECTIVE:"Needs Work",DEGRADING:"Regression"};function Zy(e){return Object.hasOwn(ru,e)}function eb(e){return Zy(e)?ru[e]:e}function tb(){const{state:e}=yt(),{plugin:r,skill:n}=e,[s,o]=c.useState([]),[a,i]=c.useState([]),[l,d]=c.useState(!0),[u,p]=c.useState(null),[f,h]=c.useState(new Set),[m,v]=c.useState({}),[x,g]=c.useState(null),[b,y]=c.useState(""),[j,S]=c.useState(!1),[k,T]=c.useState(""),[w,E]=c.useState(""),R=c.useCallback(async()=>{d(!0),p(null);try{const[C,L]=await Promise.all([de.getCredentials(r,n),de.getParams(r,n)]);o(C.credentials),i(L.params)}catch(C){p(C instanceof Error?C.message:"Failed to load parameters"),o([]),i([])}finally{d(!1)}},[r,n]);c.useEffect(()=>{R()},[R]);const N=c.useCallback(async(C,L)=>{S(!0),p(null);try{await de.setCredential(r,n,C,L),g(null),y(""),await R()}catch(P){p(P instanceof Error?P.message:`Failed to save ${C}`)}finally{S(!1)}},[r,n,R]),I=c.useCallback(async()=>{const C=k.trim().toUpperCase(),L=w.trim();if(!(!C||!L)){S(!0),p(null);try{await de.setCredential(r,n,C,L),T(""),E(""),await R()}catch(P){p(P instanceof Error?P.message:`Failed to add ${C}`)}finally{S(!1)}}},[r,n,k,w,R]),A=c.useCallback(async C=>{if(f.has(C)){h(L=>{const P=new Set(L);return P.delete(C),P}),v(L=>{const P={...L};return delete P[C],P});return}try{const P=(await de.getParamsRevealed(r,n,C)).params.find(F=>F.name===C);P!=null&&P.value&&(v(F=>({...F,[C]:P.value})),h(F=>new Set(F).add(C)))}catch{}},[r,n,f]),$=new Set(s.map(C=>C.name)),W=[...s.map(C=>{const L=a.find(P=>P.name===C.name);return{name:C.name,status:C.status,maskedValue:(L==null?void 0:L.maskedValue)??""}}),...a.filter(C=>!$.has(C.name)).map(C=>({name:C.name,status:C.status,maskedValue:C.maskedValue}))];return t.jsxs("div",{className:"py-2 px-3",children:[t.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Parameters"}),u&&t.jsx("div",{className:"text-[10px] px-2 py-1.5 rounded mb-2",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},role:"alert",children:u}),l&&W.length===0&&t.jsx("div",{className:"text-[11px] py-2",style:{color:"var(--text-tertiary)"},children:"Loading..."}),!l&&W.length===0&&!u&&t.jsx("div",{className:"text-[11px] py-2",style:{color:"var(--text-tertiary)"},children:"No parameters configured"}),W.map(C=>t.jsxs("div",{className:"flex items-center gap-2 py-1.5",style:{borderBottom:"1px solid var(--border-subtle)"},children:[t.jsx("span",{className:"text-[10px] font-mono flex-1 truncate",style:{color:"var(--text-primary)"},children:C.name}),t.jsx("span",{className:"text-[9px] font-semibold px-1.5 py-0.5 rounded-full",style:{background:C.status==="ready"?"var(--green-muted)":"var(--red-muted)",color:C.status==="ready"?"var(--green)":"var(--red)"},children:C.status}),(C.maskedValue||C.status==="ready")&&t.jsxs("span",{className:"text-[10px] font-mono",style:{color:"var(--text-secondary)"},children:[f.has(C.name)?m[C.name]??C.maskedValue:C.maskedValue||"***",t.jsx("button",{onClick:()=>A(C.name),className:"text-[9px] ml-1",style:{color:"var(--accent)",cursor:"pointer",background:"none",border:"none"},"aria-label":`${f.has(C.name)?"Hide":"Reveal"} value for ${C.name}`,children:f.has(C.name)?"hide":"show"})]}),x===C.name?t.jsxs("div",{className:"flex gap-1",children:[t.jsx("input",{value:b,onChange:L=>y(L.target.value),onKeyDown:L=>{L.key==="Enter"&&b.trim()&&N(C.name,b)},className:"input-field text-[10px] font-mono",style:{width:120},placeholder:"New value...","aria-label":`New value for ${C.name}`,autoFocus:!0}),t.jsx("button",{onClick:()=>N(C.name,b),disabled:j||!b.trim(),className:"text-[10px] font-medium",style:{color:"var(--green)",background:"none",border:"none",cursor:"pointer"},children:"Save"}),t.jsx("button",{onClick:()=>{g(null),y("")},className:"text-[10px]",style:{color:"var(--text-tertiary)",background:"none",border:"none",cursor:"pointer"},children:"Cancel"})]}):t.jsx("button",{onClick:()=>{g(C.name),y("")},className:"text-[10px]",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"Edit"})]},C.name)),t.jsxs("div",{className:"mt-3 pt-2",style:{borderTop:"1px solid var(--border-subtle)"},children:[t.jsx("div",{className:"text-[10px] font-medium mb-1.5",style:{color:"var(--text-secondary)"},children:"Add New Parameter"}),t.jsxs("div",{className:"flex gap-1.5",children:[t.jsx("input",{value:k,onChange:C=>T(C.target.value),className:"input-field text-[10px] font-mono flex-1",placeholder:"KEY_NAME","aria-label":"Parameter key name"}),t.jsx("input",{value:w,onChange:C=>E(C.target.value),onKeyDown:C=>{C.key==="Enter"&&k.trim()&&w.trim()&&I()},className:"input-field text-[10px] font-mono flex-1",placeholder:"value",type:"password","aria-label":"Parameter value"}),t.jsx("button",{onClick:I,disabled:j||!k.trim()||!w.trim(),className:"text-[10px] font-medium px-2 py-1 rounded",style:{background:"var(--accent-muted)",color:"var(--accent)",border:"none",cursor:j?"not-allowed":"pointer"},children:"Add"})]})]})]})}function nu(e,r,n){const[s,o]=c.useState(null),[a,i]=c.useState(!1),l=c.useRef("");c.useEffect(()=>{const u=`${e}/${r}/${n}`;l.current!==u&&(l.current=u,i(!0),de.getCaseHistory(e,r,n).then(p=>o(p)).catch(()=>o([])).finally(()=>i(!1)))},[e,r,n]);const d=c.useCallback(()=>{i(!0),l.current="",de.getCaseHistory(e,r,n).then(u=>o(u)).catch(()=>o([])).finally(()=>i(!1))},[e,r,n]);return{entries:s,loading:a,refetch:d}}function rb(e,r,n){const s={flaky:!1,nonDiscriminating:!1,regression:!1};if(!n||n.length===0)return s;const a=n.slice(0,10).map(d=>d.assertions.find(u=>u.id===e)).filter(Boolean);if(a.length>=2){const u=a.filter(p=>p.pass).length/a.length;u>=.3&&u<=.7&&(s.flaky=!0)}const i=n.find(d=>d.type==="benchmark"),l=n.find(d=>d.type==="baseline");if(i&&l){const d=i.assertions.find(p=>p.id===e),u=l.assertions.find(p=>p.id===e);d!=null&&d.pass&&(u!=null&&u.pass)&&(s.nonDiscriminating=!0)}if(r&&!r.pass&&n.length>=1){const u=n[0].assertions.find(p=>p.id===e);u!=null&&u.pass&&(s.regression=!0)}return s}function su({embedded:e=!1}={}){var H;const{state:r,dispatch:n,saveEvals:s,runCase:o,runAll:a,cancelCase:i,cancelAll:l,generateEvals:d,canEdit:u,canRun:p}=yt(),{evals:f,evalsError:h,selectedCaseId:m,inlineResults:v,caseRunStates:x,generateEvalsLoading:g,generateEvalsProgress:b,generateEvalsError:y}=r,j=c.useMemo(()=>{for(const U of x.values())if(U.status==="running"||U.status==="queued")return!0;return!1},[x]),[S,k]=c.useState(!1),[T,w]=c.useState("all"),E={skill_name:r.skill,evals:[]},R=f??E,N=R.evals,I=c.useMemo(()=>T==="all"?N:N.filter(U=>Er(U)===T),[T,N]),A=I.find(U=>U.id===m)??null;c.useEffect(()=>{m!==null&&!I.find(U=>U.id===m)&&n({type:"SELECT_CASE",caseId:I.length>0?I[0].id:null})},[I,m,n]);const[$,W]=c.useState([]),C=c.useMemo(()=>N.some(U=>Er(U)==="integration"),[N]);c.useEffect(()=>{C&&de.getCredentials(r.plugin,r.skill).then(U=>W(U.credentials)).catch(()=>W([]))},[r.plugin,r.skill,C]);const L=c.useMemo(()=>new Set($.filter(U=>U.status==="missing").map(U=>U.name)),[$]),[P,F]=c.useState(!1),V=c.useCallback(U=>{F(!1),d(U?{testType:U}:void 0)},[d]);if(!f||N.length===0)return t.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-4 px-8",children:[t.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center",style:{background:h?"var(--red-muted)":"var(--accent-muted)"},children:h?t.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),t.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}):t.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M9 11l3 3L22 4"}),t.jsx("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})]})}),t.jsx("div",{className:"text-center",children:h?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--red)"},children:"Invalid evals.json"}),t.jsx("div",{className:"text-[11px] font-mono px-3 py-2 rounded mt-1 max-w-sm text-left break-words",style:{color:"var(--text-secondary)",background:"var(--surface-2)"},children:h}),t.jsx("div",{className:"text-[12px] mt-2",style:{color:"var(--text-tertiary)"},children:"Fix the evals.json file and reload, or regenerate test cases with AI"})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No test cases yet"}),t.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Create test cases to start evaluating your skill"})]})}),u&&t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:()=>k(!0),className:"btn btn-primary text-[12px]",children:"Create Test Case"}),t.jsxs("div",{style:{position:"relative"},children:[t.jsxs("div",{className:"flex",children:[t.jsx("button",{onClick:()=>V("unit"),disabled:g,className:"btn btn-secondary text-[12px]",style:{borderTopRightRadius:0,borderBottomRightRadius:0},children:g?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"spinner",style:{width:12,height:12,borderWidth:1.5}})," Generating..."]}):"Generate Unit Tests"}),t.jsx("button",{onClick:()=>F(!P),disabled:g,className:"btn btn-secondary text-[12px]",style:{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:"1px solid var(--border-default)",padding:"4px 6px"},children:t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:t.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),P&&t.jsx("div",{className:"absolute right-0 mt-1 rounded-lg py-1 z-50",style:{background:"var(--surface-1)",border:"1px solid var(--border-default)",minWidth:180,boxShadow:"0 4px 12px rgba(0,0,0,0.3)"},children:t.jsx("button",{onClick:()=>V("integration"),className:"w-full text-left px-3 py-2 text-[12px] transition-colors duration-100",style:{color:"var(--text-secondary)",background:"transparent"},onMouseEnter:U=>{U.currentTarget.style.background="var(--surface-2)"},onMouseLeave:U=>{U.currentTarget.style.background="transparent"},children:"Generate Integration Tests"})})]})]}),g&&b.length>0&&t.jsx("div",{className:"w-full max-w-md mt-3",children:t.jsx(En,{entries:b,isRunning:!0})}),y&&t.jsx("div",{className:"w-full max-w-md mt-3",children:t.jsx(ys,{error:y,onRetry:()=>V()})}),S&&t.jsx(nl,{evals:R,onSave:U=>{s(U),k(!1)},onCancel:()=>k(!1)})]});const le=!u&&!e&&f!=null&&t.jsxs("div",{role:"status","data-testid":"tests-readonly-banner",style:{padding:"10px 16px",background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)",fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",lineHeight:1.5},children:["Read-only — to author or modify tests, install this skill as source via"," ",t.jsx("code",{style:{background:"var(--surface-1)",padding:"1px 5px",borderRadius:3,fontFamily:"var(--font-mono)"},children:"vskill plugin new"}),"."]});return t.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden"},children:[le,t.jsxs("div",{className:"eval-cases-grid",children:[t.jsxs("div",{className:"overflow-auto",style:{borderRight:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[t.jsxs("div",{className:"px-3 py-2",style:{borderBottom:"1px solid var(--border-subtle)",display:"flex",flexWrap:"wrap",alignItems:"center",rowGap:6,columnGap:8},children:[t.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",flex:"1 1 auto",minWidth:0},children:["Test Cases (",I.length,")"]}),t.jsx("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,marginLeft:"auto",flexShrink:0},children:!e&&(j?t.jsx("button",{onClick:l,className:"btn text-[10px] px-2 py-0.5",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)",whiteSpace:"nowrap"},children:"Cancel All"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:()=>a("benchmark"),disabled:!p,className:"btn btn-primary text-[10px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Run All"}),u&&t.jsx("button",{onClick:()=>a("comparison"),disabled:!p,className:"btn btn-secondary text-[10px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Compare All"})]}))})]}),t.jsx("div",{className:"flex px-3 py-1.5 gap-1",style:{borderBottom:"1px solid var(--border-subtle)"},children:["all","unit","integration"].map(U=>t.jsx("button",{onClick:()=>w(U),style:{padding:"2px 8px",fontSize:10,fontWeight:T===U?600:400,background:T===U?"var(--accent-muted)":"transparent",color:T===U?"var(--accent)":"var(--text-tertiary)",border:"none",borderRadius:4,cursor:"pointer",textTransform:"capitalize"},children:U==="all"?`All (${N.length})`:U==="unit"?`Unit (${N.filter(re=>Er(re)==="unit").length})`:`Integration (${N.filter(re=>Er(re)==="integration").length})`},U))}),t.jsxs("div",{className:"py-1",children:[I.length===0&&N.length>0&&t.jsxs("div",{className:"flex items-center justify-center py-8 px-3 text-[12px]",style:{color:"var(--text-tertiary)"},children:["No ",T==="all"?"":T+" ","tests yet"]}),I.map(U=>{var z;const re=v.get(U.id),xe=m===U.id,he=Er(U);return t.jsxs("button",{onClick:()=>n({type:"SELECT_CASE",caseId:U.id}),className:"w-full text-left px-3 py-2.5 transition-all duration-150",style:{background:xe?"var(--accent-muted)":"transparent",borderLeft:xe?"3px solid var(--accent)":"3px solid transparent"},onMouseEnter:X=>{xe||(X.currentTarget.style.background="var(--surface-2)")},onMouseLeave:X=>{xe||(X.currentTarget.style.background="transparent")},children:[t.jsxs("div",{className:"flex items-center justify-between gap-2 mb-0.5 min-w-0",children:[t.jsxs("span",{className:"text-[12px] font-medium flex items-center gap-1.5 min-w-0 flex-1",style:{color:xe?"var(--text-primary)":"var(--text-secondary)"},children:[t.jsxs("span",{className:"truncate min-w-0 flex-1",children:["#",U.id," ",U.name]}),t.jsx("span",{title:he==="unit"?"Unit test":"Integration test","aria-label":he==="unit"?"Unit test":"Integration test",style:{flexShrink:0,fontSize:9,fontWeight:600,padding:"1px 5px",borderRadius:9999,background:he==="unit"?"var(--accent-muted)":"var(--orange-muted)",color:he==="unit"?"var(--accent)":"var(--orange)",whiteSpace:"nowrap",letterSpacing:"0.02em"},children:he==="unit"?"U":"I"}),he==="integration"&&((z=U.requiredCredentials)==null?void 0:z.some(X=>L.has(X)))&&t.jsx("span",{title:"Configure credentials to run",style:{flexShrink:0,display:"inline-flex"},children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})})]}),t.jsx(ou,{result:re})]}),t.jsxs("div",{className:"text-[11px] flex items-center gap-2",style:{color:"var(--text-tertiary)"},children:[U.assertions.length," assertion",U.assertions.length!==1?"s":"",(re==null?void 0:re.passRate)!=null&&t.jsx(ob,{passRate:re.passRate})]})]},U.id)})]}),t.jsx("div",{className:"px-3 py-2",children:u&&t.jsx("button",{onClick:()=>k(!0),className:"w-full py-2 rounded-lg text-[12px] font-medium transition-all duration-150",style:{border:"1px dashed var(--border-default)",color:"var(--text-tertiary)",background:"transparent"},onMouseEnter:U=>{U.currentTarget.style.borderColor="var(--accent)",U.currentTarget.style.color="var(--accent)"},onMouseLeave:U=>{U.currentTarget.style.borderColor="var(--border-default)",U.currentTarget.style.color="var(--text-tertiary)"},children:"+ Add Test Case"})}),t.jsx("div",{style:{borderTop:"1px solid var(--border-subtle)"},children:t.jsx(tb,{})})]}),t.jsx("div",{className:"overflow-auto",children:A?t.jsx(nb,{evalCase:A,result:v.get(A.id),evals:f,caseStatus:((H=x.get(A.id))==null?void 0:H.status)??"idle",onSaveEvals:s,onRun:U=>o(U,"benchmark"),onCompare:U=>o(U,"comparison"),onCancel:U=>i(U),onImprove:U=>n({type:"OPEN_IMPROVE",evalId:U}),embedded:e}):t.jsx("div",{className:"flex items-center justify-center h-full text-[13px]",style:{color:"var(--text-tertiary)"},children:"Select a test case"})}),S&&t.jsx(nl,{evals:R,onSave:U=>{s(U),k(!1)},onCancel:()=>k(!1)})]})]})}function nb({evalCase:e,result:r,evals:n,caseStatus:s,onSaveEvals:o,onRun:a,onCompare:i,onCancel:l,onImprove:d,embedded:u=!1}){const{state:p,canEdit:f,canRun:h}=yt(),{plugin:m,skill:v}=p,{entries:x,loading:g}=nu(m,v,e.id),[b,y]=c.useState(!1),[j,S]=c.useState(e.prompt),[k,T]=c.useState(!1),[w,E]=c.useState(e.expected_output);c.useState(()=>{S(e.prompt),E(e.expected_output)});const R=c.useCallback(H=>{o({...n,evals:n.evals.map(U=>U.id===H.id?H:U)})},[n,o]),N=c.useCallback(()=>{R({...e,prompt:j}),y(!1)},[e,j,R]),I=c.useCallback(()=>{R({...e,expected_output:w}),T(!1)},[e,w,R]),A=c.useCallback(()=>{R({...e,assertions:[...e.assertions,{id:`assert-${Date.now()}`,text:"New assertion",type:"boolean"}]})},[e,R]),$=c.useCallback((H,U)=>{R({...e,assertions:e.assertions.map(re=>re.id===H?{...re,text:U}:re)})},[e,R]),W=c.useCallback(H=>{R({...e,assertions:e.assertions.filter(U=>U.id!==H)})},[e,R]),C=c.useCallback(()=>{confirm("Delete this test case?")&&o({...n,evals:n.evals.filter(H=>H.id!==e.id)})},[n,e.id,o]),L=r&&r.assertions.length>0&&r.assertions.every(H=>H.pass),P=r&&r.assertions.some(H=>!H.pass),F=Er(e),V=e.requiredCredentials??[],le=F==="integration"&&V.length>0;return t.jsxs("div",{className:"p-5 animate-fade-in",children:[t.jsxs("div",{className:"mb-4",style:{display:"flex",flexWrap:"wrap",alignItems:"center",rowGap:8,columnGap:12},children:[t.jsxs("div",{className:"flex items-center gap-2",style:{flex:"1 1 240px",minWidth:0},children:[t.jsxs("span",{className:"text-[16px] font-semibold",title:`#${e.id} ${e.name}`,style:{color:"var(--text-primary)",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["#",e.id," ",e.name]}),f?t.jsx("button",{onClick:()=>{if((F==="unit"?"integration":"unit")==="unit"){const{requiredCredentials:U,requirements:re,cleanup:xe,...he}=e;R({...he,testType:"unit"})}else R({...e,testType:"integration"})},title:`Click to switch to ${F==="unit"?"integration":"unit"}`,style:{fontSize:10,fontWeight:600,padding:"2px 7px",borderRadius:9999,background:F==="unit"?"var(--accent-muted)":"var(--orange-muted)",color:F==="unit"?"var(--accent)":"var(--orange)",border:"none",cursor:"pointer"},children:F==="unit"?"Unit":"Integration"}):t.jsx("span",{style:{fontSize:10,fontWeight:600,padding:"2px 7px",borderRadius:9999,background:F==="unit"?"var(--accent-muted)":"var(--orange-muted)",color:F==="unit"?"var(--accent)":"var(--orange)"},children:F==="unit"?"Unit":"Integration"}),t.jsx(ou,{result:r})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:8,marginLeft:"auto",flexShrink:0},children:[!u&&(s==="running"||s==="queued"?t.jsxs("button",{onClick:()=>l(e.id),className:"btn text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)",whiteSpace:"nowrap"},children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"1"})}),"Cancel"]}):t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:()=>a(e.id),disabled:!h,className:"btn btn-primary text-[12px]",style:{whiteSpace:"nowrap"},children:"Run"}),f&&t.jsx("button",{onClick:()=>i(e.id),disabled:!h,className:"btn btn-secondary text-[12px]",style:{whiteSpace:"nowrap"},children:"A/B Compare"})]})),P&&f&&s!=="running"&&s!=="queued"&&t.jsx("button",{onClick:()=>d(e.id),className:"btn btn-secondary text-[12px]",style:{whiteSpace:"nowrap"},children:"Fix with AI"}),f&&s!=="running"&&s!=="queued"&&t.jsx("button",{onClick:C,className:"btn btn-ghost text-[12px]","aria-label":"Delete test case",title:"Delete test case",style:{color:"var(--red)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("polyline",{points:"3 6 5 6 21 6"}),t.jsx("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]})})]})]}),!f&&F==="integration"&&t.jsxs("div",{"data-testid":"platform-integration-note",className:"mb-4 px-4 py-3 rounded-xl flex items-center gap-3",style:{background:"var(--accent-muted)",border:"1px solid var(--accent-muted)"},children:[t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),t.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),t.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]}),t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--accent)"},children:"Run locally in Skill Studio"})]}),L&&t.jsxs("div",{className:"mb-4 px-4 py-3 rounded-xl flex items-center gap-3",style:{background:"var(--green-muted)",border:"1px solid var(--green-muted)"},children:[t.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"2.5",children:[t.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),t.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),t.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--green)"},children:"All assertions passing"})]}),le&&t.jsxs("div",{className:"mb-4 px-4 py-3 rounded-xl",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),t.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--orange)"},children:"Required Credentials"})]}),t.jsx("div",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:"This integration test requires the following environment variables:"}),t.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1.5",children:V.map(H=>t.jsx("span",{style:{fontSize:10,fontFamily:"var(--font-mono, monospace)",padding:"2px 6px",borderRadius:4,background:"var(--orange-muted)",color:"var(--orange)"},children:H},H))})]}),f&&F==="integration"&&t.jsx(ib,{evalCase:e,onUpdate:R}),t.jsx(Dn,{title:"Prompt",children:b?t.jsxs("div",{children:[t.jsx("textarea",{value:j,onChange:H=>S(H.target.value),className:"input-field w-full",rows:4,style:{fontFamily:"var(--font-mono, ui-monospace, monospace)",fontSize:12},autoFocus:!0}),t.jsxs("div",{className:"flex gap-2 mt-2",children:[t.jsx("button",{onClick:N,className:"btn btn-primary text-[12px]",children:"Save"}),t.jsx("button",{onClick:()=>{S(e.prompt),y(!1)},className:"btn btn-ghost text-[12px]",children:"Cancel"})]})]}):t.jsx("div",{className:"p-3 rounded-lg text-[12px] transition-all duration-150",style:{background:"var(--surface-2)",color:"var(--text-secondary)",fontFamily:"var(--font-mono, ui-monospace, monospace)",whiteSpace:"pre-wrap",border:"1px solid var(--border-subtle)",maxHeight:200,overflowY:"auto",cursor:f?"pointer":"default"},onClick:()=>{f&&y(!0)},onMouseEnter:H=>{f&&(H.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:H=>{H.currentTarget.style.borderColor="var(--border-subtle)"},children:e.prompt||t.jsx("span",{style:{color:"var(--text-tertiary)",fontStyle:"italic"},children:f?"Click to edit prompt...":"No prompt"})})}),t.jsx(Dn,{title:"Expected Output",children:k?t.jsxs("div",{children:[t.jsx("textarea",{value:w,onChange:H=>E(H.target.value),className:"input-field w-full",rows:3,style:{fontFamily:"var(--font-mono, ui-monospace, monospace)",fontSize:12},autoFocus:!0}),t.jsxs("div",{className:"flex gap-2 mt-2",children:[t.jsx("button",{onClick:I,className:"btn btn-primary text-[12px]",children:"Save"}),t.jsx("button",{onClick:()=>{E(e.expected_output),T(!1)},className:"btn btn-ghost text-[12px]",children:"Cancel"})]})]}):t.jsx("div",{className:"p-3 rounded-lg text-[12px] transition-all duration-150",style:{background:"var(--surface-2)",color:"var(--text-tertiary)",fontFamily:"var(--font-mono, ui-monospace, monospace)",whiteSpace:"pre-wrap",border:"1px solid var(--border-subtle)",maxHeight:200,overflowY:"auto",cursor:f?"pointer":"default"},onClick:()=>{f&&T(!0)},onMouseEnter:H=>{f&&(H.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:H=>{H.currentTarget.style.borderColor="var(--border-subtle)"},children:e.expected_output||t.jsx("span",{style:{fontStyle:"italic"},children:f?"Click to edit expected output...":"No expected output"})})}),t.jsx(Dn,{title:`Assertions (${e.assertions.length})`,action:f?t.jsx("button",{onClick:A,className:"btn btn-ghost text-[11px]",children:"+ Add"}):void 0,children:e.assertions.length===0?t.jsx("div",{className:"text-[12px] text-center py-4",style:{color:"var(--text-tertiary)"},children:'No assertions. Click "+ Add" to create one.'}):t.jsx("div",{className:"space-y-2",children:e.assertions.map(H=>{const U=r==null?void 0:r.assertions.find(xe=>xe.assertion_id===H.id),re=rb(H.id,U,x);return t.jsx(sb,{assertion:H,result:U,badges:re,isReadOnly:!f,onUpdate:xe=>$(H.id,xe),onDelete:()=>W(H.id)},H.id)})})}),(r==null?void 0:r.output)&&t.jsx(ab,{output:r.output,durationMs:r.durationMs,tokens:r.tokens}),r&&r.passRate!=null&&r.passRate<.2&&(()=>{const H=tu("INEFFECTIVE",r.passRate);return H.recommendations&&H.recommendations.length>0?t.jsx(Dn,{title:"Recommendations",children:t.jsxs("div",{className:"rounded-xl p-4",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[t.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),t.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),t.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--orange)"},children:"This eval is significantly below expectations"})]}),t.jsx("ul",{className:"space-y-1.5 ml-1",children:H.recommendations.map((U,re)=>t.jsxs("li",{className:"flex items-start gap-2 text-[12px]",style:{color:"var(--text-secondary)"},children:[t.jsx("span",{style:{color:"var(--orange)",fontWeight:600,flexShrink:0},children:"•"}),U]},re))})]})}):null})(),!u&&t.jsx(au,{evalId:e.id,sharedEntries:x,sharedLoading:g})]},e.id)}function sb({assertion:e,result:r,badges:n,isReadOnly:s,onUpdate:o,onDelete:a}){const[i,l]=c.useState(!1),[d,u]=c.useState(e.text),[p,f]=c.useState(!1),h=()=>{o(d),l(!1)};return t.jsx("div",{className:"rounded-lg px-3 py-2.5 transition-all duration-150",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:t.jsxs("div",{className:"flex items-start gap-2",children:[r?t.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:18,height:18,display:"flex",alignItems:"center",justifyContent:"center",background:r.pass?"var(--green-muted)":"var(--red-muted)"},children:r.pass?t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"3",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})}):t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}):t.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:18,height:18,border:"1.5px dashed var(--text-tertiary)",background:"transparent"},title:"Not run yet"}),(n==null?void 0:n.regression)&&t.jsx("span",{className:"mt-0.5 flex-shrink-0",title:"Regression: was passing, now failing",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:16,height:18,color:"var(--red)",fontSize:14,fontWeight:700,lineHeight:1},children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("polyline",{points:"19 12 12 19 5 12"})]})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[t.jsx("span",{className:"text-[10px] font-mono font-semibold",style:{color:"var(--text-tertiary)"},children:e.id}),(n==null?void 0:n.flaky)&&t.jsx("span",{title:"Flaky: 30-70% pass rate across recent runs",style:{display:"inline-block",fontSize:9,fontWeight:600,lineHeight:1,padding:"2px 6px",borderRadius:9999,background:"var(--yellow-muted)",color:"var(--yellow)",whiteSpace:"nowrap"},children:"Flaky"}),(n==null?void 0:n.nonDiscriminating)&&t.jsx("span",{title:"Non-discriminating: passes on both skill and baseline runs",style:{display:"inline-block",fontSize:9,fontWeight:600,lineHeight:1,padding:"2px 6px",borderRadius:9999,background:"var(--surface-3)",color:"var(--text-tertiary)",whiteSpace:"nowrap"},children:"Non-Discrim."})]}),i?t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:d,onChange:m=>u(m.target.value),onKeyDown:m=>{m.key==="Enter"&&h(),m.key==="Escape"&&l(!1)},className:"input-field flex-1 text-[12px]",autoFocus:!0}),t.jsx("button",{onClick:h,className:"btn btn-primary text-[11px]",children:"Save"})]}):t.jsx("div",{className:"text-[12px]",style:{color:"var(--text-secondary)",cursor:s?"default":"pointer"},onClick:()=>{s||(u(e.text),l(!0))},children:e.text}),(r==null?void 0:r.reasoning)&&t.jsx("button",{onClick:()=>f(!p),className:"text-[11px] mt-1 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:p?"Hide reasoning":"Show reasoning"}),p&&(r==null?void 0:r.reasoning)&&t.jsx("div",{className:"mt-1 text-[11px] p-2 rounded",style:{background:"var(--surface-1)",color:"var(--text-tertiary)"},children:r.reasoning})]}),!s&&t.jsx("button",{onClick:a,className:"btn btn-ghost p-1 opacity-0 group-hover:opacity-100",style:{color:"var(--text-tertiary)"},onMouseEnter:m=>{m.currentTarget.style.color="var(--red)",m.currentTarget.style.opacity="1"},onMouseLeave:m=>{m.currentTarget.style.color="var(--text-tertiary)",m.currentTarget.style.opacity=""},children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})})}function Dn({title:e,action:r,children:n}){return t.jsxs("div",{className:"mb-5",children:[t.jsxs("div",{className:"flex items-center justify-between mb-2",children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:e}),r]}),n]})}function ou({result:e}){const[r,n]=c.useState(!1),s={padding:"2px 8px",borderRadius:9999,flexShrink:0,minWidth:44,justifyContent:"center",position:"relative",cursor:"default"};if(!e||e.status==null)return t.jsx("span",{className:"pill text-[10px]",title:"Not run yet","aria-label":"Not run yet",style:{...s,background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"--"});const o=e.status==="pass",a=e.passRate??0,i=o?"PASS":"FAIL",l=tu(i,a),d=e.passRate!=null?`${Math.round(e.passRate*100)}%`:i;return t.jsxs("span",{className:"pill text-[10px]",style:{...s,background:o?"var(--green-muted)":"var(--red-muted)",color:o?"var(--green)":"var(--red)",fontWeight:600},onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),"aria-label":`${i} ${d}`,"aria-describedby":r?"verdict-tooltip":void 0,children:[d,r&&t.jsx("div",{id:"verdict-tooltip",role:"tooltip",style:{position:"absolute",bottom:"calc(100% + 6px)",right:0,padding:"6px 10px",background:"var(--surface-4)",border:"1px solid var(--border-subtle)",borderRadius:6,fontSize:11,color:"var(--text-secondary)",whiteSpace:"nowrap",zIndex:50,maxWidth:300,width:"max-content",boxShadow:"0 4px 12px rgba(0,0,0,0.15)"},children:l.explanation})]})}function ob({passRate:e}){const r=Math.round(e*100);return t.jsx("div",{className:"flex items-center gap-1",children:t.jsx("div",{className:"rounded-full overflow-hidden",style:{width:32,height:4,background:"var(--surface-4)"},children:t.jsx("div",{className:"h-full rounded-full",style:{width:`${r}%`,background:r>=80?"var(--green)":r>=50?"var(--yellow)":"var(--red)"}})})})}function ab({output:e,durationMs:r,tokens:n}){const[s,o]=c.useState(!1);return t.jsxs("div",{className:"mb-5",children:[t.jsxs("button",{onClick:()=>o(!s),className:"flex items-center gap-2 text-[11px] font-semibold uppercase tracking-wider mb-2 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:s?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease"},children:t.jsx("polyline",{points:"9 18 15 12 9 6"})}),"LLM Output",r!=null&&t.jsxs("span",{style:{fontWeight:400},children:["(",(r/1e3).toFixed(1),"s)"]}),n!=null&&t.jsxs("span",{style:{fontWeight:400},children:["(",n," tokens)"]})]}),s&&t.jsx("pre",{className:"text-[12px] p-4 rounded-lg overflow-auto animate-fade-in",style:{background:"var(--surface-1)",color:"var(--text-secondary)",border:"1px solid var(--border-subtle)",maxHeight:400,fontFamily:"var(--font-mono, ui-monospace, monospace)",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e})]})}function Hs(e){return e==="baseline"?"right":e==="comparison"?"full":"left"}function Vs({entry:e}){return t.jsxs("div",{className:"rounded-lg px-3 py-2.5",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:Xd(e.timestamp)}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:e.model}),t.jsx("span",{className:"pill",style:{fontSize:9,padding:"1px 6px",background:e.type==="benchmark"?"var(--accent-muted)":e.type==="comparison"?"var(--purple-muted)":"var(--orange-muted)",color:e.type==="benchmark"?"var(--accent)":e.type==="comparison"?"var(--purple)":"var(--orange)"},children:e.type}),t.jsxs("span",{className:"text-[12px] font-semibold ml-auto",style:{color:Fr(e.pass_rate)},children:[Math.round(e.pass_rate*100),"%"]})]}),t.jsxs("div",{className:"flex items-center gap-4 mb-1.5 text-[10px]",style:{fontFamily:"var(--font-mono, monospace)",color:"var(--text-tertiary)"},children:[e.durationMs!=null&&t.jsx("span",{children:Zd(e.durationMs)}),e.tokens!=null&&t.jsxs("span",{children:[e.tokens>=1e3?`${(e.tokens/1e3).toFixed(1)}k`:e.tokens," tok"]})]}),e.type==="comparison"&&e.baselinePassRate!=null&&(()=>{const r=e.pass_rate-e.baselinePassRate,n=r>.001?"skill":r<-.001?"baseline":"tie",s=r>0?"+":"",o=n==="skill"?"var(--green)":n==="baseline"?"var(--red)":"var(--text-tertiary)";return t.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"vs baseline:"}),t.jsxs("span",{className:"text-[11px] font-semibold",style:{color:r>=0?"var(--green)":"var(--red)"},children:[s,(r*100).toFixed(1),"%"]}),t.jsx("span",{className:"pill text-[9px]",style:{padding:"1px 5px",background:"var(--surface-3)",color:o},children:n})]})})(),t.jsx("div",{className:"space-y-0.5",children:e.assertions.map(r=>t.jsxs("div",{className:"flex items-start gap-1.5",children:[t.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:14,height:14,display:"flex",alignItems:"center",justifyContent:"center",background:r.pass?"var(--green-muted)":"var(--red-muted)"},children:r.pass?t.jsx("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"3",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})}):t.jsxs("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:r.text})]},r.id))})]})}function au({evalId:e,sharedEntries:r,sharedLoading:n}){const{state:s,dispatch:o}=yt(),{plugin:a,skill:i}=s,[l,d]=c.useState(!0),u=r??null,p=n??!1,f=c.useCallback(()=>{d(x=>!x)},[]),h=u?u.slice(0,10):[],m=h.some(x=>{const g=Hs(x.type);return g==="left"||g==="full"}),v=h.some(x=>{const g=Hs(x.type);return g==="right"||g==="full"});return t.jsxs("div",{className:"mb-5",children:[t.jsxs("button",{onClick:f,className:"flex items-center gap-2 text-[11px] font-semibold uppercase tracking-wider mb-2 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:l?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease"},children:t.jsx("polyline",{points:"9 18 15 12 9 6"})}),"Execution History",u&&u.length>0&&t.jsxs("span",{style:{fontWeight:400},children:["(",u.length," run",u.length!==1?"s":"",")"]})]}),l&&t.jsx("div",{className:"animate-fade-in",children:p?t.jsxs("div",{className:"flex items-center gap-2 py-3",children:[t.jsx("div",{className:"spinner",style:{width:14,height:14,borderWidth:1.5}}),t.jsx("span",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Loading history..."})]}):!u||u.length===0?t.jsx("div",{className:"text-[12px] py-3",style:{color:"var(--text-tertiary)"},children:"No history for this case"}):t.jsxs("div",{children:[h.length>=2&&t.jsx("div",{className:"mb-2",children:t.jsx(eu,{entries:h})}),t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[t.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",gridColumn:"1"},children:"Skill"}),t.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",gridColumn:"2"},children:"Baseline"}),!m&&t.jsx("div",{style:{gridColumn:"1",fontSize:12,color:"var(--text-tertiary)"},children:"No skill runs"}),!v&&t.jsx("div",{style:{gridColumn:"2",fontSize:12,color:"var(--text-tertiary)"},children:"No baseline runs"}),h.map((x,g)=>{const b=Hs(x.type);return b==="full"?t.jsx("div",{style:{gridColumn:"1 / -1"},children:t.jsx(Vs,{entry:x})},g):b==="left"?t.jsxs(c.Fragment,{children:[t.jsx("div",{style:{gridColumn:"1"},children:t.jsx(Vs,{entry:x})}),t.jsx("div",{style:{gridColumn:"2"}})]},g):t.jsxs(c.Fragment,{children:[t.jsx("div",{style:{gridColumn:"1"}}),t.jsx("div",{style:{gridColumn:"2"},children:t.jsx(Vs,{entry:x})})]},g)})]}),t.jsx("button",{onClick:()=>o({type:"SET_PANEL",panel:"history"}),className:"mt-2 text-[11px] font-medium transition-colors duration-150",style:{color:"var(--accent)"},onMouseEnter:x=>{x.currentTarget.style.textDecoration="underline"},onMouseLeave:x=>{x.currentTarget.style.textDecoration="none"},children:"View full history →"})]})})]})}function nl({evals:e,onSave:r,onCancel:n}){const[s,o]=c.useState(""),[a,i]=c.useState(""),[l,d]=c.useState(""),[u,p]=c.useState([{id:`assert-${Date.now()}`,text:"",type:"boolean"}]),[f,h]=c.useState("unit"),[m,v]=c.useState(""),[x,g]=c.useState([]),[b,y]=c.useState(""),[j,S]=c.useState(""),k=Math.max(0,...e.evals.map(R=>R.id))+1,T=R=>{h(R),R==="unit"&&(g([]),v(""),y(""),S(""))},w=()=>{const R=m.trim().toUpperCase();R&&!x.includes(R)&&g([...x,R]),v("")},E=()=>{if(!s.trim()||!a.trim())return;const R={id:k,name:s.trim(),prompt:a.trim(),expected_output:l.trim(),files:[],assertions:u.filter(N=>N.text.trim()),...f==="integration"?{testType:"integration",...x.length>0?{requiredCredentials:x}:{},...b||j?{requirements:{...b?{platform:b}:{},...j?{chromeProfile:j}:{}}}:{}}:{}};r({...e,evals:[...e.evals,R]})};return t.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center animate-overlay-in",style:{background:"rgba(0,0,0,0.6)"},children:t.jsxs("div",{className:"w-full max-w-lg rounded-xl p-6 animate-modal-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)",maxHeight:"85vh",overflowY:"auto"},children:[t.jsx("div",{className:"text-[15px] font-semibold mb-4",style:{color:"var(--text-primary)"},children:"New Test Case"}),t.jsxs("div",{className:"mb-3",children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1.5 block",style:{color:"var(--text-tertiary)"},children:"Type"}),t.jsx("div",{className:"flex gap-1 p-0.5 rounded-lg",style:{background:"var(--surface-2)",display:"inline-flex"},children:["unit","integration"].map(R=>t.jsx("button",{onClick:()=>T(R),className:"px-3 py-1 rounded-md text-[12px] font-medium transition-all duration-150",style:{background:f===R?R==="unit"?"var(--accent-muted)":"var(--orange-muted)":"transparent",color:f===R?R==="unit"?"var(--accent)":"var(--orange)":"var(--text-tertiary)",border:"none",cursor:"pointer",textTransform:"capitalize"},children:R},R))})]}),t.jsxs("label",{className:"block mb-3",children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Name"}),t.jsx("input",{value:s,onChange:R=>o(R.target.value),className:"input-field",placeholder:"e.g., auth-check",autoFocus:!0})]}),t.jsxs("label",{className:"block mb-3",children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Prompt"}),t.jsx("textarea",{value:a,onChange:R=>i(R.target.value),className:"input-field",rows:3,placeholder:"User prompt to test..."})]}),t.jsxs("label",{className:"block mb-3",children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Expected Output"}),t.jsx("textarea",{value:l,onChange:R=>d(R.target.value),className:"input-field",rows:2,placeholder:"Description of expected behavior..."})]}),t.jsxs("div",{className:"mb-4",children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Assertions"}),u.map((R,N)=>t.jsxs("div",{className:"flex gap-2 mb-2",children:[t.jsx("input",{value:R.text,onChange:I=>p(u.map((A,$)=>$===N?{...A,text:I.target.value}:A)),className:"input-field flex-1 text-[12px]",placeholder:"e.g., Output includes a greeting"}),u.length>1&&t.jsx("button",{onClick:()=>p(u.filter((I,A)=>A!==N)),className:"btn btn-ghost p-1",style:{color:"var(--text-tertiary)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},R.id)),t.jsx("button",{onClick:()=>p([...u,{id:`assert-${Date.now()}`,text:"",type:"boolean"}]),className:"text-[11px] mt-1 transition-colors duration-150",style:{color:"var(--accent)"},children:"+ Add Assertion"})]}),f==="integration"&&t.jsxs("div",{className:"mb-4 p-3 rounded-lg",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--orange)"},children:"Integration Settings"}),t.jsxs("div",{className:"mb-3",children:[t.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Required Credentials"}),t.jsx("div",{className:"flex flex-wrap gap-1.5 mb-1.5",children:x.map(R=>t.jsxs("span",{className:"flex items-center gap-1 px-2 py-0.5 rounded-md text-[10px] font-mono",style:{background:"var(--orange-muted)",color:"var(--orange)"},children:[R,t.jsx("button",{onClick:()=>g(x.filter(N=>N!==R)),style:{color:"var(--orange)",lineHeight:1},children:t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},R))}),t.jsxs("div",{className:"flex gap-1.5",children:[t.jsx("input",{value:m,onChange:R=>v(R.target.value),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w())},className:"input-field flex-1 text-[11px] font-mono",placeholder:"e.g., SLACK_BOT_TOKEN"}),t.jsx("button",{onClick:w,className:"btn btn-ghost text-[11px]",style:{color:"var(--orange)"},children:"Add"})]})]}),t.jsxs("label",{className:"block mb-3",children:[t.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Platform"}),t.jsx("input",{value:b,onChange:R=>y(R.target.value),className:"input-field text-[11px]",placeholder:"e.g., linkedin, twitter"})]}),t.jsxs("label",{className:"block",children:[t.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Chrome Profile"}),t.jsx("input",{value:j,onChange:R=>S(R.target.value),className:"input-field text-[11px]",placeholder:"e.g., Default"})]})]}),t.jsxs("div",{className:"flex justify-end gap-2",children:[t.jsx("button",{onClick:n,className:"btn btn-secondary text-[12px]",children:"Cancel"}),t.jsx("button",{onClick:E,disabled:!s.trim()||!a.trim(),className:"btn btn-primary text-[12px]",children:"Save"})]})]})})}function ib({evalCase:e,onUpdate:r}){var i,l;const[n,s]=c.useState(""),o=()=>{const d=n.trim().toUpperCase();d&&!(e.requiredCredentials??[]).includes(d)&&r({...e,requiredCredentials:[...e.requiredCredentials??[],d]}),s("")},a=d=>{const u=(e.requiredCredentials??[]).filter(p=>p!==d);r({...e,requiredCredentials:u.length>0?u:void 0})};return t.jsxs("div",{className:"mb-4 p-3 rounded-lg",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--orange)"},children:"Integration Settings"}),t.jsxs("div",{className:"mb-2.5",children:[t.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Required Credentials"}),t.jsx("div",{className:"flex flex-wrap gap-1.5 mb-1.5",children:(e.requiredCredentials??[]).map(d=>t.jsxs("span",{className:"flex items-center gap-1 px-2 py-0.5 rounded-md text-[10px] font-mono",style:{background:"var(--orange-muted)",color:"var(--orange)"},children:[d,t.jsx("button",{onClick:()=>a(d),style:{color:"var(--orange)",lineHeight:1},children:t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},d))}),t.jsxs("div",{className:"flex gap-1.5",children:[t.jsx("input",{value:n,onChange:d=>s(d.target.value),onKeyDown:d=>{d.key==="Enter"&&(d.preventDefault(),o())},className:"input-field flex-1 text-[11px] font-mono",placeholder:"e.g., GITHUB_TOKEN"}),t.jsx("button",{onClick:o,className:"btn btn-ghost text-[11px]",style:{color:"var(--orange)"},children:"Add"})]})]}),t.jsxs("div",{className:"mb-2.5",children:[t.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Platform"}),t.jsx("input",{value:((i=e.requirements)==null?void 0:i.platform)??"",onChange:d=>r({...e,requirements:{...e.requirements,platform:d.target.value||void 0}}),className:"input-field text-[11px]",placeholder:"e.g., linkedin, twitter"})]}),t.jsxs("div",{children:[t.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Chrome Profile"}),t.jsx("input",{value:((l=e.requirements)==null?void 0:l.chromeProfile)??"",onChange:d=>r({...e,requirements:{...e.requirements,chromeProfile:d.target.value||void 0}}),className:"input-field text-[11px]",placeholder:"e.g., Default"})]})]})}function Gs(e,r){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:e,severity:r}}))}function lb({size:e=15}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("polyline",{points:"16 18 22 12 16 6"}),t.jsx("polyline",{points:"8 6 2 12 8 18"})]})}function cb({size:e=15}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),t.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"21"})]})}function db({size:e=15}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),t.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function ub({size:e=15}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M15 4V2"}),t.jsx("path",{d:"M15 16v-2"}),t.jsx("path",{d:"M8 9h2"}),t.jsx("path",{d:"M20 9h2"}),t.jsx("path",{d:"M17.8 11.8L19 13"}),t.jsx("path",{d:"M15 9h.01"}),t.jsx("path",{d:"M17.8 6.2L19 5"}),t.jsx("path",{d:"M11 6.2L9.7 5"}),t.jsx("path",{d:"M3 21l9-9"})]})}function Ks({size:e=15}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M12 3l1.5 5.5L19 10l-5.5 1.5L12 17l-1.5-5.5L5 10l5.5-1.5L12 3z"})})}function pb(){var Oe;const{state:e,dispatch:r,saveContent:n,isReadOnly:s}=yt(),{plugin:o,skill:a,skillContent:i,isDirty:l,improveTarget:d,aiEditOpen:u}=e,{state:p}=Lt(),f=((Oe=p.skills.find(J=>J.plugin===o&&J.skill===a))==null?void 0:Oe.skillPath)??void 0,[h,m]=c.useState("split"),[v,x]=c.useState(!1),g=c.useRef(null),[b,y]=c.useState(!1),[j,S]=c.useState(""),[k,T]=c.useState(!1),[w,E]=c.useState(null),[R,N]=c.useState([]),[I,A]=c.useState([]),[$,W]=c.useState(null),C=c.useRef(null),{config:L}=yr(),P=Gy(),{files:F,activeFile:V,secondaryContent:le,loading:H,error:U,loadError:re,selectFile:xe,refresh:he,isSkillMd:z}=by(o??"",a??""),[X,M]=c.useState(!1),O=c.useCallback(J=>{X&&!window.confirm("You have unsaved changes. Discard?")||xe(J)},[X,xe]);c.useEffect(()=>()=>{var J;(J=C.current)==null||J.abort()},[]);const{metadata:G,body:K}=_d(i),te=G["allowed-tools"],ee=Array.isArray(te)?te:typeof te=="string"?[te]:[],q=G.name,oe=G.description,ve=G.metadata,ke=typeof ve=="object"&&!Array.isArray(ve)?ve:null,_=G.version||(ke==null?void 0:ke.version),Y=G.tags||(ke==null?void 0:ke.tags),Z=Array.isArray(Y)?Y:typeof Y=="string"?Y.split(",").map(J=>J.trim()).filter(Boolean):[],ne=new Set(["name","description","metadata","allowed-tools","version","tags"]),fe=Object.entries(G).filter(([J])=>!ne.has(J)),me=c.useCallback(async()=>{const{contentToSave:J,version:Pe,fromVersion:Je}=Qy(i,e.savedContent);if(Pe!==null){const De=qy(Je,Pe);if(!De.valid){Gs(`Save blocked: ${De.reason??"invalid version transition"}`,"error");return}}x(!0),await n(J),x(!1),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:content-saved",{detail:{plugin:o,skill:a,version:Pe}}))},[n,i,e.savedContent,o,a]),ce=c.useCallback(J=>{const Pe=rs(i)??"1.0.0";let Je;try{Je=en(Pe,J)}catch(Ze){const et=Ze instanceof Error?Ze.message:String(Ze);Gs(`Bump failed: ${et}`,"error");return}const De=Qd(i,Je);r({type:"SET_CONTENT",content:De}),Gs(`Bumped to v${Je} (${J}). Click Save to commit.`,"info")},[i,r]),ue=c.useCallback(J=>{(J.ctrlKey||J.metaKey)&&J.key==="s"&&(J.preventDefault(),J.stopPropagation(),l&&me()),(J.ctrlKey||J.metaKey)&&J.key==="i"&&(J.preventDefault(),J.stopPropagation(),r({type:u?"CLOSE_AI_EDIT":"OPEN_AI_EDIT"}))},[l,me,u,r]),je=c.useCallback(async()=>{var Pe,Je;if(!j.trim())return;(Pe=C.current)==null||Pe.abort();const J=new AbortController;C.current=J,T(!0),W(null),A([]),E(null),N([]);try{const De=(L==null?void 0:L.provider)||"claude-cli",Ze=(L==null?void 0:L.model)||"sonnet",et=await fetch("/api/skills/generate?sse",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:j,provider:De,model:Ze}),signal:J.signal});if(!et.ok||!et.body){let kt=`HTTP ${et.status}`;try{const jt=await et.json();jt.error&&(kt=jt.error)}catch{}throw new Error(kt)}const ft=et.body.getReader(),Ye=new TextDecoder;let at="",it="";for(;;){const{done:kt,value:jt}=await ft.read();if(kt)break;at+=Ye.decode(jt,{stream:!0});const At=at.split(`
50
+ `);at=At.pop()||"";for(const Te of At)if(Te.startsWith("event: "))it=Te.slice(7).trim();else if(Te.startsWith("data: ")){try{const Ee=JSON.parse(Te.slice(6));if(it==="progress")A(We=>[...We,{phase:Ee.phase,message:Ee.message,timestamp:Date.now()}]);else if(it==="done"||it==="complete"){const We=["---"];Ee.name&&We.push(`name: ${Ee.name}`),Ee.description&&We.push(`description: "${Ee.description.replace(/"/g,'\\"')}"`),Ee.model&&We.push(`model: ${Ee.model}`),(Je=Ee.allowedTools)!=null&&Je.trim()&&We.push(`allowed-tools: ${Ee.allowedTools.trim()}`),We.push("---","",Ee.body||"");const lt=We.join(`
51
+ `);E(lt),N(vs(i,lt)),T(!1)}else it==="error"&&(W(Ee.message||Ee.description||"Generation failed"),T(!1))}catch{}it=""}}}catch(De){De.name!=="AbortError"&&W(De.message)}finally{T(!1),C.current=null}},[j,L,i]),Re=c.useCallback(()=>{w&&r({type:"SET_CONTENT",content:w}),y(!1),E(null),N([]),S(""),A([])},[w,r]),Ae=c.useCallback(()=>{y(!1),E(null),N([]),S(""),A([]),W(null)},[]),Me=c.useCallback(()=>{var J;b?((J=C.current)==null||J.abort(),Ae()):(u&&r({type:"CLOSE_AI_EDIT"}),y(!0))},[b,u,r,Ae]),_e=[{mode:"raw",icon:t.jsx(lb,{}),label:"Editor"},{mode:"split",icon:t.jsx(cb,{}),label:"Split"},{mode:"preview",icon:t.jsx(db,{}),label:"Preview"}];return t.jsxs("div",{className:"flex flex-col",style:{height:"100%",overflow:"auto"},onKeyDown:ue,tabIndex:-1,children:[t.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5",style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[t.jsx("div",{className:"flex items-center",style:{background:"var(--surface-2)",borderRadius:8,padding:2,gap:1},children:_e.map(({mode:J,icon:Pe,label:Je})=>t.jsxs("button",{onClick:()=>m(J),title:Je,className:"flex items-center gap-1.5 rounded-md transition-all duration-150",style:{padding:"5px 10px",background:h===J?"var(--surface-4)":"transparent",color:h===J?"var(--text-primary)":"var(--text-tertiary)",fontSize:11,fontWeight:h===J?600:400,border:"none",cursor:"pointer"},children:[Pe,t.jsx("span",{style:{letterSpacing:"0.01em"},children:Je})]},J))}),z?s?t.jsx("div",{className:"flex items-center gap-2",children:t.jsxs("span",{className:"flex items-center gap-1.5 text-[11px]",style:{color:"var(--text-tertiary)"},children:[t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Read-only"]})}):t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("button",{onClick:()=>{u?r({type:"CLOSE_AI_EDIT"}):(b&&Ae(),r({type:"OPEN_AI_EDIT"}))},title:"Edit with AI (Ctrl+K)",className:"flex items-center gap-1.5 rounded-md transition-all duration-150",style:{padding:"4px 10px",fontSize:11,fontWeight:u?600:400,border:"none",cursor:"pointer",color:u?"var(--purple)":"var(--text-tertiary)",background:u?"var(--purple-muted)":"transparent"},children:[t.jsx(ub,{size:13}),t.jsx("span",{children:"AI Edit"})]}),t.jsxs("button",{onClick:Me,title:"Regenerate skill from prompt",className:"flex items-center gap-1.5 rounded-md transition-all duration-150",style:{padding:"4px 10px",fontSize:11,fontWeight:b?600:400,border:"none",cursor:"pointer",color:b?"var(--purple)":"var(--text-tertiary)",background:b?"var(--purple-muted)":"transparent"},children:[t.jsx(Ks,{size:13}),t.jsx("span",{children:"Regenerate"})]}),t.jsx("div",{style:{width:1,height:16,background:"var(--border-subtle)"}}),!s&&(()=>{const J=rs(i)??"1.0.0";let Pe=J,Je=J,De=J;try{Pe=en(J,"patch"),Je=en(J,"minor"),De=en(J,"major")}catch{}const Ze={padding:"4px 8px"};return t.jsxs("div",{style:{display:"inline-flex",gap:2,alignItems:"center"},"aria-label":"Version bump","data-testid":"version-bump-controls",children:[t.jsx("button",{type:"button",onClick:()=>ce("patch"),title:`Bump patch: ${J} → ${Pe}`,"aria-label":"Bump patch version",className:"btn btn-ghost text-[11px]",style:Ze,children:"+patch"}),t.jsx("button",{type:"button",onClick:()=>ce("minor"),title:`Bump minor: ${J} → ${Je}`,"aria-label":"Bump minor version",className:"btn btn-ghost text-[11px]",style:Ze,children:"+minor"}),t.jsx("button",{type:"button",onClick:()=>ce("major"),title:`Bump major: ${J} → ${De}`,"aria-label":"Bump major version",className:"btn btn-ghost text-[11px]",style:Ze,children:"+major"})]})})(),l&&t.jsx("button",{onClick:()=>r({type:"SET_CONTENT",content:e.savedContent}),className:"btn btn-ghost text-[11px]",style:{padding:"4px 8px"},children:"Discard"}),t.jsx("button",{onClick:me,disabled:!l||v,className:"btn btn-primary text-[11px]",style:{padding:"5px 14px"},children:v?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"spinner",style:{width:11,height:11,borderWidth:1.5}})," Saving..."]}):"Save"}),P.hasRemote&&P.remoteUrl&&t.jsx(qd,{remoteUrl:P.remoteUrl,provider:L==null?void 0:L.provider,model:L==null?void 0:L.model,skillName:a||void 0,skillPath:f,privacy:"public"})]}):null]}),o&&a&&t.jsx(Cy,{files:F,activeFile:V,onSelect:O,onRefresh:he,loadError:re}),!z&&t.jsx(Ry,{file:le,loading:H,error:U,viewMode:h,plugin:o??void 0,skill:a??void 0,onSaved:()=>{xe(V),he()},onDirtyChange:M}),z&&t.jsxs("div",{className:"flex-1 overflow-hidden",style:{display:"grid",gridTemplateColumns:h==="raw"||h==="preview"?"1fr":"1fr 1fr",minHeight:"60vh"},children:[h!=="preview"&&t.jsx("div",{className:"flex flex-col overflow-hidden",style:{borderRight:h==="split"?"1px solid var(--border-subtle)":"none"},children:t.jsx("textarea",{ref:g,"data-testid":"skill-editor-textarea",value:i,onChange:J=>{!s&&!v&&r({type:"SET_CONTENT",content:J.target.value})},onKeyDown:ue,spellCheck:!1,readOnly:s||v,className:"flex-1 w-full resize-none outline-none",style:{background:"var(--surface-0)",color:"var(--text-primary)",fontFamily:"var(--font-mono, 'JetBrains Mono', ui-monospace, monospace)",fontSize:12.5,lineHeight:1.7,tabSize:2,border:"none",padding:"16px 20px",opacity:s?.7:1}})}),h!=="raw"&&t.jsx("div",{className:"overflow-auto",style:{background:"var(--surface-0)"},children:t.jsxs("div",{className:"animate-fade-in",style:{padding:"20px 24px",maxWidth:720},children:[(q||_||oe)&&t.jsxs("div",{style:{marginBottom:20},children:[t.jsxs("div",{className:"flex items-baseline gap-3",style:{marginBottom:8},children:[q&&t.jsx("h2",{style:{fontSize:18,fontWeight:700,color:"var(--text-primary)",letterSpacing:"-0.02em",lineHeight:1.2,margin:0},children:q}),_&&t.jsxs("span",{style:{fontSize:10,fontWeight:600,color:"var(--accent)",background:"var(--accent-muted)",padding:"2px 7px",borderRadius:4,letterSpacing:"0.03em",fontFamily:"var(--font-mono, ui-monospace, monospace)"},children:["v",_]})]}),oe&&t.jsx("p",{style:{fontSize:12.5,lineHeight:1.65,color:"var(--text-secondary)",margin:0,paddingLeft:12,borderLeft:"2px solid var(--accent)",maxWidth:600},children:oe})]}),Z.length>0&&t.jsx("div",{className:"flex flex-wrap items-center gap-1.5",style:{marginBottom:16},children:Z.map(J=>t.jsx("span",{style:{fontSize:10,fontWeight:500,color:"var(--text-tertiary)",background:"var(--surface-2)",padding:"3px 8px",borderRadius:4,letterSpacing:"0.02em"},children:J},J))}),ee.length>0&&t.jsx("div",{style:{marginBottom:16},children:t.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[t.jsx("span",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-tertiary)",marginRight:4},children:"Tools"}),ee.map(J=>t.jsx("span",{style:{fontSize:10.5,fontFamily:"var(--font-mono, ui-monospace, monospace)",color:"var(--accent)",background:"var(--accent-muted)",padding:"2px 7px",borderRadius:4},children:J},J))]})}),fe.length>0&&t.jsx("div",{style:{marginBottom:16,padding:"8px 0",borderTop:"1px solid var(--border-subtle)",borderBottom:"1px solid var(--border-subtle)"},children:fe.map(([J,Pe],Je)=>{const De=Array.isArray(Pe)?Pe.join(", "):typeof Pe=="object"?Object.entries(Pe).map(([Ze,et])=>`${Ze}: ${Array.isArray(et)?et.join(", "):et}`).join(" | "):Pe;return t.jsxs("div",{className:"flex items-baseline gap-3",style:{padding:"4px 0",borderTop:Je>0?"1px solid var(--border-subtle)":"none"},children:[t.jsx("span",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-tertiary)",minWidth:80,flexShrink:0},children:J}),t.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:De})]},J)})}),(q||oe||Z.length>0||ee.length>0||fe.length>0)&&K&&t.jsx("div",{style:{height:1,background:"linear-gradient(90deg, var(--accent) 0%, var(--border-subtle) 40%, transparent 100%)",marginBottom:20,opacity:.5}}),K&&t.jsx("div",{className:"text-[13px] leading-relaxed overflow-x-auto",style:{color:"var(--text-secondary)",wordBreak:"break-word"},dangerouslySetInnerHTML:{__html:Cn(K)}})]})})]}),z&&u&&t.jsx(yy,{}),z&&b&&t.jsx("div",{className:"animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:t.jsxs("div",{className:"px-4 py-3",children:[!w&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[t.jsx(Ks,{size:14}),t.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"Regenerate Skill"})]}),t.jsx("div",{className:"flex gap-2 mb-2",children:t.jsx("textarea",{value:j,onChange:J=>S(J.target.value),placeholder:"Describe what this skill should do...",rows:2,disabled:k,className:"flex-1 px-3 py-2 rounded-lg text-[12px] resize-none",style:{background:"var(--surface-0)",color:"var(--text-primary)",border:"1px solid var(--border-subtle)",outline:"none",opacity:k?.5:1},onKeyDown:J=>{J.key==="Enter"&&(J.ctrlKey||J.metaKey)&&j.trim()&&!k&&(J.preventDefault(),je())}})}),t.jsxs("div",{className:"flex items-center gap-2",children:[k?t.jsx("button",{onClick:()=>{var J;(J=C.current)==null||J.abort(),T(!1)},className:"btn btn-secondary text-[11px]",style:{padding:"4px 12px"},children:"Cancel"}):t.jsx("button",{onClick:je,disabled:!j.trim(),className:"btn btn-primary text-[11px]",style:{padding:"4px 12px"},children:"Generate"}),t.jsx("button",{onClick:Ae,className:"btn btn-ghost text-[11px]",style:{padding:"4px 8px"},children:"Close"})]}),k&&I.length>0&&t.jsx("div",{className:"mt-2",children:t.jsx(En,{entries:I,isRunning:!0})}),$&&t.jsxs("div",{className:"mt-2 px-3 py-2 rounded-lg text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:[$,t.jsx("button",{onClick:je,className:"ml-2 underline",style:{color:"var(--red)"},children:"Retry"})]})]}),w&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[t.jsx(Ks,{size:14}),t.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"Regenerated — Review Changes"})]}),t.jsx("div",{className:"rounded-lg overflow-hidden mb-3",style:{border:"1px solid var(--border-subtle)",maxHeight:"300px",overflowY:"auto"},children:R.map((J,Pe)=>t.jsxs("div",{className:"px-3 py-0.5 text-[11px] font-mono",style:{background:J.type==="added"?"var(--green-muted)":J.type==="removed"?"var(--red-muted)":"transparent",color:J.type==="added"?"var(--green)":J.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:J.type==="added"?"3px solid var(--green)":J.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[t.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:J.type==="added"?"+":J.type==="removed"?"-":" "}),J.content]},Pe))}),t.jsxs("div",{className:"flex gap-2",children:[t.jsxs("button",{onClick:Re,className:"btn btn-primary text-[11px]",style:{padding:"4px 12px"},children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Apply"]}),t.jsx("button",{onClick:Ae,className:"btn btn-secondary text-[11px]",style:{padding:"4px 12px"},children:"Discard"})]})]})]})}),z&&d!==null&&o&&a&&t.jsx("div",{style:{borderTop:"1px solid var(--border-subtle)"},children:t.jsx(py,{plugin:o,skill:a,skillContent:i,onApplied:J=>{r({type:"SET_CONTENT",content:J}),r({type:"CONTENT_SAVED"}),r({type:"CLOSE_IMPROVE"})}})}),z&&t.jsx(fb,{})]})}function fb(){var d;const[e,r]=c.useState(()=>{var u;return typeof window>"u"?!1:((u=window.localStorage)==null?void 0:u.getItem("vskill:editor-eval-cases-open"))==="1"}),{state:n,canEdit:s}=yt(),o=((d=n.evals)==null?void 0:d.evals)??[],a=u=>{var f;const p=u.currentTarget.open;if(r(p),typeof window<"u")try{(f=window.localStorage)==null||f.setItem("vskill:editor-eval-cases-open",p?"1":"0")}catch{}},i=c.useCallback(u=>{var h;if((h=u.preventDefault)==null||h.call(u),typeof window>"u")return;const p=new URLSearchParams(window.location.search);p.set("tab","run"),p.set("mode","benchmark"),p.set("autorun","1");const f=`${window.location.pathname}?${p.toString()}${window.location.hash}`;window.history.replaceState(null,"",f),window.dispatchEvent(new PopStateEvent("popstate"))},[]),l=s&&o.length>0;return t.jsxs("details",{"data-testid":"editor-eval-cases-section",open:e,onToggle:a,style:{borderTop:"1px solid var(--border-subtle)",background:"var(--bg-canvas)"},children:[t.jsxs("summary",{style:{padding:"10px 16px",fontFamily:"var(--font-sans)",fontSize:13,fontWeight:500,color:"var(--text-primary)",cursor:"pointer",userSelect:"none",background:"var(--surface-1)",borderBottom:e?"1px solid var(--border-subtle)":"none",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[t.jsx("span",{children:"Eval cases"}),l&&t.jsx("button",{type:"button","data-testid":"editor-eval-cases-run-all",onClick:i,title:"Run all → opens Run tab",className:"btn btn-primary text-[11px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Run all"})]}),e&&t.jsx("div",{"data-testid":"editor-eval-cases-body",style:{height:520,overflow:"hidden"},children:t.jsx(su,{embedded:!0})})]})}function hb(e){if(e==null||!Number.isFinite(e))return"—";if(e<1024)return`${e} B`;const r=e/1024;if(r<1024)return r>=10?`${Math.round(r)} KB`:`${r.toFixed(1).replace(/\.0$/,"")} KB`;const n=r/1024;return n>=10?`${Math.round(n)} MB`:`${n.toFixed(1).replace(/\.0$/,"")} MB`}const mb={vskill:{label:"vskill",bg:"var(--accent-muted, #e0f2fe)",fg:"var(--accent, #0369a1)",border:"var(--accent, #0369a1)"},anthropic:{label:"Anthropic",bg:"var(--orange-muted, #fff1e0)",fg:"var(--orange, #c2410c)",border:"var(--orange, #c2410c)"},local:{label:"Local",bg:"var(--surface-3, #e5e5e5)",fg:"var(--text-tertiary, #666)",border:"var(--border-default, #ccc)"}};function Ko({provider:e,size:r="sm"}){if(!e)return null;const n=mb[e],s=r==="md"?11:9;return t.jsx("span",{"data-testid":`provider-chip-${e}`,"data-provider":e,style:{display:"inline-flex",alignItems:"center",padding:r==="md"?"2px 8px":"1.5px 6px",fontSize:s,fontWeight:500,fontFamily:"var(--font-sans)",background:n.bg,color:n.fg,border:`1px solid ${n.border}`,borderRadius:999,lineHeight:1.4,whiteSpace:"nowrap"},children:n.label})}function xb({content:e,defaultExpanded:r=!0}){const[n,s]=c.useState(r),{metadata:o,body:a}=_d(e);if(!e.trim())return null;const i=Object.keys(o).length>0,l=o["allowed-tools"],d=Array.isArray(l)?l:typeof l=="string"?[l]:[],u=Object.entries(o).filter(([p])=>p!=="allowed-tools");return t.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[t.jsxs("button",{onClick:()=>s(!n),className:"w-full flex items-center justify-between px-5 py-3.5 text-left transition-colors duration-150",style:{background:"var(--surface-2)"},onMouseEnter:p=>{p.currentTarget.style.background="var(--surface-3)"},onMouseLeave:p=>{p.currentTarget.style.background="var(--surface-2)"},children:[t.jsxs("div",{className:"flex items-center gap-2.5",children:[t.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"var(--accent-muted)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t.jsx("polyline",{points:"14 2 14 8 20 8"}),t.jsx("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),t.jsx("line",{x1:"16",y1:"17",x2:"8",y2:"17"})]})}),t.jsxs("div",{children:[t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md"}),t.jsx("span",{className:"text-[11px] ml-2",style:{color:"var(--text-tertiary)"},children:"Skill Definition"})]})]}),t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",style:{transform:n?"rotate(180deg)":"rotate(0)",transition:"transform 0.2s ease"},children:t.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),n&&t.jsxs("div",{className:"px-5 py-4 animate-fade-in",children:[i&&t.jsx("div",{className:"grid grid-cols-2 gap-3 mb-4",children:u.map(([p,f])=>{const h=Array.isArray(f)?f.join(", "):typeof f=="object"?Object.entries(f).map(([m,v])=>`${m}: ${Array.isArray(v)?v.join(", "):v}`).join(" | "):f;return t.jsxs("div",{className:"px-3 py-2.5 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[t.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--text-tertiary)"},children:p}),t.jsx("div",{className:"text-[12px]",style:{color:"var(--text-primary)"},children:h})]},p)})}),d.length>0&&t.jsxs("div",{className:"mb-4",children:[t.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Allowed Tools"}),t.jsx("div",{className:"flex flex-wrap gap-1.5",children:d.map(p=>t.jsx("span",{className:"px-2 py-1 rounded-md text-[11px] font-mono",style:{background:"var(--accent-muted)",color:"var(--accent)"},children:p},p))})]}),a&&t.jsx("div",{className:"text-[12px] leading-relaxed p-4 rounded-lg overflow-x-auto",style:{background:"var(--surface-0)",color:"var(--text-secondary)",border:"1px solid var(--border-subtle)",maxHeight:"400px",overflowY:"auto"},dangerouslySetInnerHTML:{__html:Cn(a)}})]})]})}function gb(e){const r={name:"",path:"",type:"dir",size:0,children:[]};for(const s of e){if(s.type!=="file")continue;const o=s.path.split("/");let a=r;for(let i=0;i<o.length;i++){const l=o[i],d=i===o.length-1;let u=a.children.find(p=>p.name===l);u||(u={name:l,path:o.slice(0,i+1).join("/"),type:d?"file":"dir",size:d?s.size:0,children:[]},a.children.push(u)),a=u}}const n=s=>{s.children.sort((o,a)=>o.type!==a.type?o.type==="dir"?-1:1:o.name.localeCompare(a.name)),s.children.forEach(n)};return n(r),r}function vb(e){const r=e.lastIndexOf(".");return r>=0?e.slice(r+1).toLowerCase():""}function yb(e){const r=vb(e);return e==="SKILL.md"?"📘":r==="md"?"📄":r==="ts"||r==="tsx"||r==="js"||r==="jsx"?"📜":r==="json"||r==="yaml"||r==="yml"||r==="toml"?"🔧":r==="sh"||r==="bash"?"🖥":r==="png"||r==="jpg"||r==="jpeg"||r==="gif"||r==="webp"||r==="svg"?"🖼":"📄"}function iu({node:e,depth:r,activePath:n,focusedPath:s,onSelect:o,expanded:a,onToggle:i}){if(e.type==="dir"){const u=a.has(e.path),p=e.path===s;return t.jsxs("div",{children:[t.jsxs("button",{type:"button","data-testid":"source-tree-item","data-path":e.path,"data-type":"dir","data-focused":p?"true":"false",role:"treeitem","aria-expanded":u,onClick:()=>i(e.path),style:{width:"100%",textAlign:"left",background:p?"var(--surface-2)":"transparent",border:"none",padding:`4px 8px 4px ${r*12+8}px`,color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:12,cursor:"pointer",display:"flex",alignItems:"center",gap:6},children:[t.jsx("span",{style:{width:10,display:"inline-block"},children:u?"▾":"▸"}),t.jsx("span",{children:"📁"}),t.jsx("span",{children:e.name})]}),u&&t.jsx("div",{role:"group",children:e.children.map(f=>t.jsx(iu,{node:f,depth:r+1,activePath:n,focusedPath:s,onSelect:o,expanded:a,onToggle:i},f.path))})]})}const l=e.path===n,d=e.path===s;return t.jsxs("button",{type:"button","data-testid":"source-tree-item","data-path":e.path,"data-type":"file","data-active":l?"true":"false","data-focused":d?"true":"false",role:"treeitem","aria-selected":l,onClick:()=>o(e.path),style:{width:"100%",textAlign:"left",background:l?"var(--surface-3)":d?"var(--surface-2)":"transparent",border:"none",padding:`4px 8px 4px ${r*12+8}px`,color:l?"var(--text-primary)":"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:12,fontWeight:l?600:400,cursor:"pointer",display:"flex",alignItems:"center",gap:6},children:[t.jsx("span",{style:{width:10,display:"inline-block"},children:" "}),t.jsx("span",{children:yb(e.name)}),t.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis"},children:e.name})]})}function bb({files:e,activePath:r,onSelect:n}){const s=c.useMemo(()=>gb(e),[e]),o=c.useMemo(()=>{const m=new Set;if(r&&r.includes("/")){const v=r.split("/");for(let x=1;x<v.length;x++)m.add(v.slice(0,x).join("/"))}return s.children.forEach(v=>{v.type==="dir"&&m.add(v.path)}),m},[s,r]),[a,i]=c.useState(o);c.useEffect(()=>{i(m=>{const v=new Set(m);let x=!1;return o.forEach(g=>{v.has(g)||(v.add(g),x=!0)}),x?v:m})},[o]);const l=m=>{i(v=>{const x=new Set(v);return x.has(m)?x.delete(m):x.add(m),x})},d=c.useMemo(()=>{const m=[],v=x=>{for(const g of x)m.push({path:g.path,type:g.type}),g.type==="dir"&&a.has(g.path)&&v(g.children)};return v(s.children),m},[s,a]),u=c.useRef(null),[p,f]=c.useState(()=>Math.max(0,d.findIndex(m=>m.path===r)));c.useEffect(()=>{const m=d.findIndex(v=>v.path===r);m>=0&&f(m)},[r,d]);const h=m=>{var v;if(d.length!==0)if(m.key==="ArrowDown")m.preventDefault(),f(x=>Math.min(d.length-1,x+1));else if(m.key==="ArrowUp")m.preventDefault(),f(x=>Math.max(0,x-1));else if(m.key==="Enter"){m.preventDefault();const x=d[p];if(!x)return;x.type==="dir"?l(x.path):n(x.path)}else m.key==="Escape"&&(m.preventDefault(),(v=u.current)==null||v.blur())};return s.children.length===0?t.jsx("div",{"data-testid":"source-tree-empty",style:{padding:16,fontSize:12,color:"var(--text-tertiary)",fontFamily:"var(--font-sans)"},children:"No files found."}):t.jsx("div",{"data-testid":"source-file-tree",ref:u,tabIndex:0,onKeyDown:h,role:"tree","aria-label":"Skill files",style:{paddingTop:4,paddingBottom:4,outline:"none"},children:s.children.map(m=>{var v;return t.jsx(iu,{node:m,depth:0,activePath:r,focusedPath:(v=d[p])==null?void 0:v.path,onSelect:n,expanded:a,onToggle:l},m.path)})})}const kb=new Set(["md","txt","json","yaml","yml","toml","ini","env","ts","tsx","js","jsx","mjs","cjs","py","rb","go","rs","java","c","cc","cpp","h","hpp","sh","bash","zsh","fish","html","css","scss","less","xml","csv","tsv","log","diff","patch","lock","gitignore","dockerfile"]),jb=new Set(["png","jpg","jpeg","gif","webp","ico"]);function wb(e){const r=e.lastIndexOf(".");return r>=0?e.slice(r+1).toLowerCase():""}function Sb(e){const r=wb(e);return r==="md"?"markdown":jb.has(r)?"image":kb.has(r)?"text":"binary"}function Cb({content:e}){return t.jsx("div",{"data-testid":"source-md-viewer",children:t.jsx(xb,{content:e})})}function Eb({content:e,path:r}){const n=e.split(`
52
+ `),s=n.length>5e3,o=s?n.slice(0,5e3).join(`
53
+ `):e;return t.jsxs("div",{"data-testid":"source-text-viewer",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)",borderRadius:8,overflow:"auto",maxHeight:"70vh"},children:[t.jsxs("div",{style:{padding:"8px 12px",background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)",fontFamily:"var(--font-sans)",fontSize:11,color:"var(--text-tertiary)"},children:[r," · ",n.length," ",n.length===1?"line":"lines",s&&" (truncated for display)"]}),t.jsx("pre",{style:{margin:0,padding:12,fontFamily:"var(--font-mono, monospace)",fontSize:12,lineHeight:1.5,color:"var(--text-primary)",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:o})]})}function Nb({plugin:e,skill:r,path:n}){const s=`/api/skills/${e}/${r}/file?path=${encodeURIComponent(n)}&raw=1`;return t.jsxs("div",{"data-testid":"source-image-viewer",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)",borderRadius:8,padding:16,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[t.jsx("img",{src:s,alt:n,style:{maxWidth:"100%",maxHeight:"60vh",objectFit:"contain"}}),t.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-sans)"},children:n})]})}function Rb({path:e,size:r}){return t.jsxs("div",{"data-testid":"source-binary-placeholder",style:{background:"var(--surface-1)",border:"1px dashed var(--border-default)",borderRadius:8,padding:24,textAlign:"center",color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:13},children:[t.jsxs("div",{style:{fontSize:14,fontWeight:500,marginBottom:6},children:["Binary file — ",hb(r)]}),t.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)"},children:e})]})}function Tb({plugin:e,skill:r,provider:n}){const[s,o]=c.useState([]),[a,i]=c.useState("SKILL.md"),[l,d]=c.useState(null),[u,p]=c.useState(!0),[f,h]=c.useState(null),[m,v]=c.useState(null),x=n??m;c.useEffect(()=>{if(n!==void 0)return;let b=!1;return de.getSkillVersionsEnvelope(e,r).then(y=>{b||v(y.provider??null)}).catch(()=>{}),()=>{b=!0}},[e,r,n]),c.useEffect(()=>{let b=!1;return p(!0),h(null),de.getSkillFiles(e,r).then(y=>{var k;if(b)return;o(y.files);const S=y.files.some(T=>T.path==="SKILL.md")?"SKILL.md":((k=y.files.find(T=>T.type==="file"))==null?void 0:k.path)??"";i(S),S||p(!1)}).catch(y=>{b||(h(y instanceof Error?y.message:String(y)),p(!1))}),()=>{b=!0}},[e,r]),c.useEffect(()=>{if(!a)return;let b=!1;return p(!0),h(null),de.getSkillFile(e,r,a).then(y=>{b||(d(y),p(!1))}).catch(y=>{b||(h(y instanceof Error?y.message:String(y)),p(!1))}),()=>{b=!0}},[e,r,a]);const g=()=>{if(f)return t.jsxs("div",{"data-testid":"source-error",style:{padding:16,color:"var(--danger, #c00)",fontFamily:"var(--font-sans)",fontSize:13},children:["Failed to load: ",f]});if(u||!l)return t.jsx("div",{"data-testid":"source-loading",style:{padding:16,color:"var(--text-tertiary)",fontFamily:"var(--font-sans)",fontSize:13},children:"Loading…"});const b=Sb(a);return b==="markdown"?t.jsx(Cb,{content:l.content??""}):b==="text"&&!l.binary?t.jsx(Eb,{content:l.content??"",path:a}):b==="image"?t.jsx(Nb,{plugin:e,skill:r,path:a}):t.jsx(Rb,{path:a,size:l.size})};return t.jsxs("div",{"data-testid":"source-panel",style:{display:"flex",flexDirection:"column",height:"100%",minHeight:400,gap:12},children:[x&&t.jsxs("div",{"data-testid":"source-panel-header",style:{display:"flex",alignItems:"center",gap:8,paddingLeft:4},children:[t.jsx("span",{style:{fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-sans)",textTransform:"uppercase",letterSpacing:"0.05em"},children:"Provider:"}),t.jsx(Ko,{provider:x})]}),t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"260px 1fr",gap:16,flex:1,minHeight:0},children:[t.jsx("aside",{style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)",borderRadius:8,overflow:"auto",maxHeight:"75vh"},children:t.jsx(bb,{files:s,activePath:a,onSelect:i})}),t.jsx("main",{style:{minWidth:0},children:g()})]})]})}function Nt(e,r){return r==="free"?"Free":r==="subscription"&&e==null?"Included":e==null?"N/A":e>=1?`$${e.toFixed(2)}`:e===0?"$0.00":e>=.001?`$${e.toFixed(4)}`:`$${e.toPrecision(3).replace(/0+$/,"").replace(/\.$/,"")}`}function lu(e,r){return e==null||r==null?"N/A":`${e.toLocaleString("en-US")} in / ${r.toLocaleString("en-US")} out`}function Ib({evalId:e}){const{state:r}=yt(),{entries:n,loading:s}=nu(r.plugin,r.skill,e),o=!!n&&n.length>0;return!s&&!o?null:t.jsx("div",{"data-testid":`run-case-history-${e}`,className:"mt-2 ml-3 pl-3",style:{borderLeft:"1px solid var(--border-subtle)"},children:t.jsx(au,{evalId:e,sharedEntries:n,sharedLoading:s})})}function Lb(e){return e==="baseline"?"Baseline Pass Rate":"Skill Pass Rate"}function Ab(e,r){let n="";if(r){const o=new Date(r);isNaN(o.getTime())||(n=o.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}))}return[e,n].filter(Boolean).join(" · ")}function Pb(e,r,n){const s=n===1?"test case":"test cases";if(e===0)return`Your skill performs the same as the baseline across ${n} ${s}`;const o=Math.round(Math.abs(e)*r);if(o===0)return`Your skill performs the same as the baseline across ${n} ${s}`;const a=e>0?"more":"fewer";return`Your skill passes ${o} ${a} assertions across ${n} ${s}`}function sl(e,r){const n=s=>{const o=s/5*100;return isFinite(o)?Math.round(Math.min(100,Math.max(0,o))):0};return{skill:n(e),baseline:n(r)}}function $b(e){return e==="skill"?{text:"Skill wins",isSkill:!0}:e==="baseline"?{text:"Baseline wins",isSkill:!1}:{text:"Tie",isSkill:!1}}function Mb(e,r){const n=e+r,s=n*10,o=n*25,a=i=>i>=60?`${Math.round(i/60)}m`:`${i}s`;return`${a(s)}–${a(o)}`}const Fb={anthropic:.01,openrouter:.01,ollama:0,"lm-studio":0,"claude-cli":0,"codex-cli":0,"gemini-cli":0};function Db(e,r){if(!e)return null;const n=Fb[e];if(n==null||n===0)return null;const s=n*r*.5,o=n*r*2;return`${Nt(s)}–${Nt(o)}`}function zb(){const{state:e,runCase:r,runAll:n,cancelCase:s,cancelAll:o,canEdit:a,canRun:i}=yt(),{evals:l,caseRunStates:d,bulkRunActive:u,latestBenchmark:p,inlineResults:f}=e,{config:h}=yr(),m=(l==null?void 0:l.evals)??[],v=c.useMemo(()=>{for(const E of d.values())if(E.status==="running"||E.status==="queued")return!0;return!1},[d]),x=m.filter(E=>{const R=d.get(E.id);return R&&(R.status==="complete"||R.status==="error"||R.status==="cancelled")}).length,g=m.filter(E=>{const R=d.get(E.id);return R&&(R.status==="running"||R.status==="queued")}).length,b=c.useRef(null),[y,j]=c.useState(0);c.useEffect(()=>{if(v&&!b.current&&(b.current=Date.now()),!v){b.current=null,j(0);return}const E=setInterval(()=>{b.current&&j(Math.round((Date.now()-b.current)/1e3))},1e3);return()=>clearInterval(E)},[v]);const S=m.reduce((E,R)=>E+R.assertions.length,0),k=m.length+S,T=c.useMemo(()=>Mb(m.length,S),[m.length,S]),w=c.useMemo(()=>Db((h==null?void 0:h.provider)??null,k),[h==null?void 0:h.provider,k]);return t.jsxs("div",{className:"p-5",children:[!a&&l!=null&&t.jsxs("div",{role:"status","data-testid":"tests-readonly-banner",className:"flex items-center gap-2 px-3 py-2 rounded-lg mb-4 text-[11px]",style:{background:"var(--surface-2)",color:"var(--text-tertiary)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),t.jsxs("span",{children:["Read-only — to author or modify tests, install this skill as source via"," ",t.jsx("code",{style:{background:"var(--surface-1)",padding:"1px 5px",borderRadius:3,fontFamily:"var(--font-mono)"},children:"vskill plugin new"}),"."]})]}),t.jsxs("div",{className:"rounded-xl p-4 mb-5",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between mb-3",children:[t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"Benchmark"}),v&&t.jsxs("span",{className:"text-[11px] font-medium",style:{color:"var(--accent)"},children:[g," running"]})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[v&&t.jsxs("button",{onClick:o,className:"btn text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"1"})}),"Cancel All"]}),a&&t.jsx("button",{onClick:()=>n("comparison"),disabled:!i||v,className:"btn btn-primary text-[12px]",title:"Runs both your skill and the baseline, then compares results side by side",children:"Run A/B Test"}),t.jsx("button",{onClick:()=>n("benchmark"),disabled:!i||v,className:a?"btn btn-secondary text-[12px]":"btn btn-primary text-[12px]",title:a?"Runs benchmark using your skill only":"Run all author-shipped eval cases",children:a?"Test Skill":"Run All"}),a&&t.jsx("button",{onClick:()=>n("baseline"),disabled:!i||v,className:"btn btn-secondary text-[12px]",title:"Runs benchmark using the baseline (no skill) for reference",children:"Test Baseline"})]}),!v&&m.length>0&&t.jsxs("div",{className:"flex items-center gap-3 mt-2 text-[10px]",style:{color:"var(--text-tertiary)"},children:[t.jsxs("span",{children:["Est. duration: ",T]}),w&&t.jsxs("span",{children:["Est. cost: ",w]}),!w&&(h==null?void 0:h.provider)&&(h.provider==="claude-cli"||h.provider==="codex-cli")&&t.jsx("span",{children:"Cost: Included"}),!w&&(h==null?void 0:h.provider)&&(h.provider==="ollama"||h.provider==="lm-studio"||h.provider==="gemini-cli")&&t.jsx("span",{children:"Cost: Free"})]})]}),v&&m.length>0&&t.jsxs("div",{className:"mb-5",children:[t.jsxs("div",{className:"flex items-center justify-between mb-2",children:[t.jsxs("span",{className:"text-[12px] font-medium",style:{color:"var(--text-secondary)"},children:["Progress: ",x,"/",m.length," cases"]}),t.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[Math.round(x/m.length*100),"%"]})]}),t.jsx("div",{className:"rounded-full overflow-hidden",style:{height:6,background:"var(--surface-3)"},children:t.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${x/m.length*100}%`,background:"var(--accent)"}})}),t.jsxs("div",{className:"flex items-center justify-between mt-1.5",children:[t.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Elapsed: ",y>=60?`${Math.floor(y/60)}m ${y%60}s`:`${y}s`]}),t.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Est. total: ",T]})]})]}),t.jsx("div",{className:"space-y-3 stagger-children",children:m.map(E=>{const R=f.get(E.id),N=d.get(E.id),I=(N==null?void 0:N.status)??"idle",A=p==null?void 0:p.cases.find($=>$.eval_id===E.id);return t.jsxs(c.Fragment,{children:[t.jsx(_b,{name:E.name,evalId:E.id,result:R,caseCost:A==null?void 0:A.cost,caseBillingMode:A==null?void 0:A.billingMode,caseInputTokens:A==null?void 0:A.inputTokens,caseOutputTokens:A==null?void 0:A.outputTokens,caseStatus:I,runMode:(N==null?void 0:N.mode)??null,comparisonDetail:A==null?void 0:A.comparisonDetail,canEdit:a,onRun:$=>r($,"benchmark"),onBaseline:$=>r($,"baseline"),onCompare:$=>r($,"comparison"),onCancel:$=>s($)}),t.jsx(Ib,{evalId:E.id})]},E.id)})}),!v&&p&&p.cases.length>0&&t.jsxs("div",{className:"mt-5",children:[t.jsxs("div",{className:"rounded-xl p-4 mb-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:Lb(p.type)}),t.jsx("span",{className:"text-[20px] font-bold",style:{color:(p.overall_pass_rate??0)>=.8?"var(--green)":(p.overall_pass_rate??0)>=.5?"var(--yellow)":"var(--red)"},children:p.overall_pass_rate!=null?`${Math.round(p.overall_pass_rate*100)}%`:"--"})]}),p.totalDurationMs!=null&&t.jsxs("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:["Total: ",(p.totalDurationMs/1e3).toFixed(1),"s",p.model&&` | Model: ${p.model}`,p.totalInputTokens!=null&&p.totalOutputTokens!=null&&` | Tokens: ${lu(p.totalInputTokens,p.totalOutputTokens)}`,p.totalCost!=null&&` | Cost: ${Nt(p.totalCost)}`]}),a&&p.overall_pass_rate>=.9999&&!p.comparison&&t.jsx("button",{onClick:()=>n("comparison"),disabled:!i,className:"text-[13px] font-semibold mt-3 w-full rounded-lg transition-opacity duration-150",style:{padding:"10px 0",background:"var(--green)",color:"var(--color-paper)",border:"none",cursor:"pointer",opacity:m.length===0?.5:1},children:"Run Final A/B Comparison"})]}),p.comparison&&t.jsxs("div",{className:"rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Skill vs Baseline"}),(()=>{const E=Ab(p.model,p.timestamp);return E?t.jsx("div",{className:"text-[10px] mt-0.5 mb-3",style:{color:"var(--text-tertiary)"},children:E}):t.jsx("div",{className:"mb-3"})})(),t.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[t.jsx(ol,{label:"Skill",value:p.comparison.skillPassRate,color:"var(--accent)"}),t.jsx(ol,{label:"Baseline",value:p.comparison.baselinePassRate,color:"var(--text-tertiary)"})]}),t.jsxs("div",{className:"mt-3 text-[12px] font-medium",style:{color:p.comparison.delta>0?"var(--green)":p.comparison.delta<0?"var(--red)":"var(--text-tertiary)"},children:["Delta: ",p.comparison.delta>0?"+":"",(p.comparison.delta*100).toFixed(1),"%",p.verdict&&` | ${eb(p.verdict)}`]}),(()=>{const E=p.cases.reduce((N,I)=>N+I.assertions.length,0),R=Pb(p.comparison.delta,E,p.cases.length);return t.jsx("div",{className:"mt-1 text-[11px]",style:{color:"var(--text-tertiary)"},children:R})})()]})]})]})}const Bb={benchmark:{label:"Skill",bg:"var(--accent-muted)",color:"var(--accent)"},baseline:{label:"Baseline",bg:"var(--surface-3)",color:"var(--text-tertiary)"},comparison:{label:"Compare",bg:"var(--purple-muted)",color:"var(--purple)"}};function _b({name:e,evalId:r,result:n,caseCost:s,caseBillingMode:o,caseInputTokens:a,caseOutputTokens:i,caseStatus:l,runMode:d,comparisonDetail:u,canEdit:p=!1,onRun:f,onBaseline:h,onCompare:m,onCancel:v}){const[x,g]=c.useState(!1),b=l==="running"||l==="queued",y=l==="complete"||l==="error";return t.jsxs("div",{className:"rounded-xl overflow-hidden transition-all duration-200",style:{background:"var(--surface-1)",border:b?"1px solid var(--accent)":"1px solid var(--border-subtle)",boxShadow:b?"0 0 12px rgba(99, 131, 255, 0.15)":"none"},children:[t.jsxs("div",{className:"flex items-center justify-between px-4 py-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[l==="running"&&t.jsx("span",{className:"spinner",style:{width:14,height:14,borderWidth:1.5}}),l==="queued"&&t.jsx("span",{className:"text-[10px] font-medium",style:{color:"var(--text-tertiary)"},children:"queued"}),t.jsxs("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:["#",r," ",e]}),d&&(b||y)&&(()=>{const j=Bb[d];return j?t.jsx("span",{className:"pill text-[9px] font-semibold",style:{background:j.bg,color:j.color,padding:"1px 6px"},children:j.label}):null})()]}),t.jsxs("div",{className:"flex items-center gap-2",children:[b?t.jsx("button",{onClick:()=>v(r),className:"btn text-[10px] px-2 py-1",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:"Cancel"}):t.jsxs(t.Fragment,{children:[p&&t.jsx("button",{onClick:()=>m(r),className:"btn btn-primary text-[10px] px-2 py-1",children:"Compare"}),t.jsx("button",{onClick:()=>f(r),className:p?"btn btn-secondary text-[10px] px-2 py-1":"btn btn-primary text-[10px] px-2 py-1",children:p?"Skill":"Run"}),p&&t.jsx("button",{onClick:()=>h(r),className:"btn btn-secondary text-[10px] px-2 py-1",children:"Base"})]}),n&&n.status!=null&&t.jsx("span",{className:"pill text-[10px]",style:{background:n.status==="pass"?"var(--green-muted)":"var(--red-muted)",color:n.status==="pass"?"var(--green)":"var(--red)"},children:n.passRate!=null?`${Math.round(n.passRate*100)}%`:n.status}),a!=null&&i!=null&&t.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:lu(a,i)}),s!=null&&t.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:Nt(s,o)}),l==="cancelled"&&t.jsx("span",{className:"pill text-[10px]",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"cancelled"})]})]}),n&&n.assertions.length>0&&t.jsxs("div",{className:"px-4 pb-3",children:[t.jsx("div",{className:"space-y-1",children:n.assertions.map(j=>t.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[t.jsx("span",{style:{color:j.pass?"var(--green)":"var(--red)"},children:j.pass?"PASS":"FAIL"}),t.jsx("span",{style:{color:"var(--text-secondary)"},children:j.text})]},j.assertion_id))}),n.output&&t.jsx("button",{onClick:()=>g(!x),className:"text-[11px] mt-2 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:x?"Hide output":"Show output"}),x&&n.output&&t.jsx("pre",{className:"text-[11px] mt-2 p-3 rounded-lg overflow-auto",style:{background:"var(--surface-0)",color:"var(--text-secondary)",border:"1px solid var(--border-subtle)",maxHeight:200,fontFamily:"var(--font-mono, ui-monospace, monospace)",whiteSpace:"pre-wrap"},children:n.output})]}),u&&t.jsx("div",{className:"px-4 pb-3",children:t.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:t.jsx("div",{className:"flex items-center gap-4 text-[11px] flex-wrap",children:(()=>{const j=sl(u.skillContentScore,u.baselineContentScore),S=sl(u.skillStructureScore,u.baselineStructureScore),k=$b(u.winner);return t.jsxs(t.Fragment,{children:[t.jsxs("span",{style:{color:"var(--text-secondary)"},children:["Content: Skill ",j.skill,"% / Baseline ",j.baseline,"%"]}),t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),t.jsxs("span",{style:{color:"var(--text-secondary)"},children:["Structure: Skill ",S.skill,"% / Baseline ",S.baseline,"%"]}),t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),t.jsx("span",{style:{color:k.isSkill?"var(--accent)":"var(--text-tertiary)",fontWeight:500},children:k.text})]})})()})})}),n&&n.errorMessage&&t.jsx(Ob,{errorMessage:n.errorMessage,classifiedError:n.classifiedError})]})}const qs={rate_limit:"⏱",context_window:"⚠",auth:"🔒",timeout:"⌛",provider_unavailable:"⚡",parse_error:"❓",unknown:"❌"};function Ob({errorMessage:e,classifiedError:r}){const[n,s]=c.useState(!1),o=(r==null?void 0:r.title)??"Error",a=r==null?void 0:r.hint,i=r?qs[r.category]??qs.unknown:qs.unknown;return t.jsx("div",{className:"px-4 pb-3",children:t.jsxs("div",{className:"rounded-lg overflow-hidden",style:{background:"var(--red-muted)",border:"1px solid var(--red-muted)"},children:[t.jsxs("div",{className:"flex items-center gap-2 px-3 py-2",children:[t.jsx("span",{style:{fontSize:12},children:i}),t.jsx("span",{className:"text-[11.5px] font-semibold flex-1",style:{color:"var(--red)"},children:o}),t.jsx("button",{onClick:()=>s(!n),className:"text-[10px] px-1.5 py-0.5 rounded transition-colors duration-150",style:{color:"var(--text-tertiary)",background:"transparent"},children:n?"Hide details":"Details"})]}),a&&t.jsx("div",{className:"px-3 pb-2 text-[10.5px]",style:{color:"var(--text-secondary)"},children:a}),n&&t.jsx("pre",{className:"text-[10px] px-3 pb-2.5 overflow-auto",style:{color:"var(--text-tertiary)",maxHeight:120,fontFamily:"var(--font-mono, ui-monospace, monospace)",whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0},children:e})]})})}function ol({label:e,value:r,color:n}){return t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center justify-between mb-1",children:[t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:e}),t.jsxs("span",{className:"text-[12px] font-semibold",style:{color:n},children:[Math.round(r*100),"%"]})]}),t.jsx("div",{className:"rounded-full overflow-hidden",style:{height:6,background:"var(--surface-3)"},children:t.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${r*100}%`,background:n}})})]})}const al={TP:{bg:"var(--green-muted)",text:"var(--green)"},TN:{bg:"var(--green-muted)",text:"var(--green)"},FP:{bg:"var(--red-muted)",text:"var(--red)"},FN:{bg:"var(--red-muted)",text:"var(--red)"},SCOPE_WARNING:{bg:"var(--yellow-muted)",text:"var(--yellow)"},DRIFT_WARNING:{bg:"var(--yellow-muted)",text:"var(--yellow)"}},Wb={scope_warning:"Description claims broader scope than name+tags suggest. Either narrow the description or add explicit '+' prefix to confirm intended scope.",drift_warning:"Description omits intent that classifier inferred from name+tags. Description may need to mention this case explicitly."};function Ub(){const{state:e,dispatch:r,runActivationTest:n,cancelActivation:s,generateActivationPrompts:o,loadTestCasesFromSkillMd:a,saveTestCasesToSkillMd:i}=yt(),{plugin:l,skill:d,activationPrompts:u,activationResults:p,activationSummary:f,activationRunning:h,activationError:m,activationStartedAt:v,activationClassifyingStatus:x,generatingPrompts:g,generatingPromptsError:b,activationPromptsSource:y,savingTestCases:j,savingTestCasesError:S,savingTestCasesSuccess:k,activationHistory:T}=e,{state:w}=Lt(),E=w.skills.find(z=>z.plugin===l&&z.skill===d),R=(E==null?void 0:E.resolvedVersion)??(E==null?void 0:E.version)??null,[N,I]=c.useState(u),[A,$]=c.useState(null),[W,C]=c.useState(!1);c.useEffect(()=>{u&&u!==N&&I(u)},[u]),c.useEffect(()=>{r({type:"SET_ACTIVATION_PROMPTS",prompts:N})},[N,r]),c.useEffect(()=>{fetch(`/api/skills/${l}/${d}/description`).then(z=>z.json()).then(z=>$(z.rawContent||z.description||null)).catch(()=>$(null))},[l,d]),c.useEffect(()=>{(!u||u.trim().length===0)&&a()},[l,d]);function L(){n(N)}function P(){o(8)}function F(){i()}const V=N.trim().split(`
54
+ `).filter(Boolean).length,le=z=>z.verdict==="scope_warning"||z.verdict==="drift_warning",H=p.filter(z=>(z.classification==="TP"||z.classification==="TN")&&!le(z)),U=p.filter(z=>(z.classification==="FP"||z.classification==="FN")&&!le(z));p.filter(le);const re=(A==null?void 0:A.replace(/^---[\s\S]*?---\s*/,"").trim())??null,xe=N.trim().length>0,he=re?Cn(re):"";return t.jsxs("div",{className:"p-5 space-y-5",children:[t.jsxs("div",{children:[t.jsx("div",{className:"text-[14px] font-semibold",style:{color:"var(--text-primary)"},children:"Activation Test"}),t.jsx("div",{className:"text-[12px] mt-0.5",style:{color:"var(--text-tertiary)"},children:"Test whether this skill's description activates for relevant prompts and stays silent for irrelevant ones."})]}),t.jsxs("div",{className:"grid grid-cols-[3fr_2fr] gap-4 items-stretch",children:[t.jsxs("div",{className:"glass-card p-4 flex flex-col gap-3",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("label",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:"Test Prompts"}),y==="skill-md"&&t.jsx("span",{className:"pill",style:{background:"var(--green-muted)",color:"var(--green)",fontSize:"9px",padding:"1px 5px"},title:"Loaded from the ## Test Cases block in SKILL.md. Save back any edits to persist them.",children:"from SKILL.md"}),y==="ai-generated"&&t.jsx("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)",fontSize:"9px",padding:"1px 5px"},title:"AI-generated. Save as test cases to persist into SKILL.md.",children:"AI-generated"})]}),t.jsxs("div",{className:"flex gap-1.5",children:[t.jsx("button",{onClick:F,disabled:j||!xe||h,className:"text-[10px] px-2.5 py-1 rounded-md transition-colors duration-150 flex items-center gap-1.5",style:{background:j?"var(--surface-3)":"var(--surface-2)",color:xe?"var(--green)":"var(--text-tertiary)",border:"1px solid var(--border-subtle)",opacity:xe?1:.5,cursor:xe?"pointer":"not-allowed"},title:xe?"Write the current prompts back to SKILL.md as a ## Test Cases block":"No prompts to save",onMouseEnter:z=>{xe&&!j&&(z.currentTarget.style.background="var(--surface-3)")},onMouseLeave:z=>{j||(z.currentTarget.style.background="var(--surface-2)")},children:j?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"spinner",style:{borderTopColor:"var(--green)",borderColor:"var(--border-subtle)",width:10,height:10}}),"Saving..."]}):t.jsxs(t.Fragment,{children:[t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),t.jsx("polyline",{points:"17 21 17 13 7 13 7 21"}),t.jsx("polyline",{points:"7 3 7 8 15 8"})]}),"Save as test cases"]})}),t.jsx("button",{onClick:P,disabled:g||!re||h,className:"text-[10px] px-2.5 py-1 rounded-md transition-colors duration-150 flex items-center gap-1.5",style:{background:g?"var(--surface-3)":"var(--surface-2)",color:re?"var(--accent)":"var(--text-tertiary)",border:"1px solid var(--border-subtle)",opacity:re?1:.5,cursor:re?"pointer":"not-allowed"},title:re?void 0:"No skill description available",onMouseEnter:z=>{re&&!g&&(z.currentTarget.style.background="var(--surface-3)")},onMouseLeave:z=>{g||(z.currentTarget.style.background="var(--surface-2)")},children:g?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"spinner",style:{borderTopColor:"var(--accent)",borderColor:"var(--border-subtle)",width:10,height:10}}),"Generating..."]}):t.jsxs(t.Fragment,{children:[t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M12 3v3m6.36.64l-2.12 2.12M21 12h-3m-.64 6.36l-2.12-2.12M12 21v-3m-4.24.64l2.12-2.12M3 12h3m.64-6.36l2.12 2.12"})}),xe?"Regenerate":"Generate"," Test Prompts"]})})]})]}),k&&t.jsx("div",{className:"text-[11px] px-2 py-1 rounded",style:{color:"var(--green)",background:"var(--green-muted)"},"aria-live":"polite",children:k}),S&&t.jsxs("div",{className:"text-[11px] px-2 py-1 rounded",style:{color:"var(--red)",background:"var(--red-muted)"},"aria-live":"polite",children:["Save failed: ",S]}),!re&&!h&&t.jsx("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},"aria-live":"polite",children:"Add a description to your skill's frontmatter to enable prompt generation."}),b&&t.jsx("div",{className:"text-[11px] px-2 py-1 rounded",style:{color:"var(--red)",background:"var(--red-muted)"},children:b}),t.jsx("textarea",{className:"input-field resize-y font-mono text-[12px]",style:{minHeight:140,height:140},value:N,onChange:z=>I(z.target.value),placeholder:`How do I write a unit test?
55
+ What edge cases should I test?
56
+ +Deploy this to production
57
+ !What's the weather like today?
58
+ !Write me a poem about flowers`}),t.jsxs("div",{className:"flex items-center flex-wrap gap-x-3 gap-y-1 text-[11px]",style:{color:"var(--text-tertiary)"},children:[t.jsx("span",{children:"One prompt per line"}),t.jsx(zn,{}),t.jsx("span",{children:"No prefix = auto-classify"}),t.jsx(zn,{}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("code",{className:"px-1 rounded",style:{background:"var(--surface-2)"},children:"+"}),"= must activate"]}),t.jsx(zn,{}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("code",{className:"px-1 rounded",style:{background:"var(--surface-2)"},children:"!"}),"= must NOT activate"]}),t.jsx(zn,{}),t.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[V," prompt",V!==1?"s":""]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("button",{onClick:L,disabled:h||!N.trim(),className:"btn btn-primary",children:h?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"spinner",style:{borderTopColor:"var(--color-paper)",borderColor:"var(--border-default)",width:14,height:14}}),"Testing..."]}):t.jsxs(t.Fragment,{children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("circle",{cx:"12",cy:"12",r:"6"}),t.jsx("circle",{cx:"12",cy:"12",r:"2"})]}),"Run Activation Test"]})}),h&&t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:s,className:"btn btn-secondary text-[12px]",children:"Cancel"}),t.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[x||`${p.length} / ${V} prompts tested`,v&&t.jsx(Kb,{startedAt:v})]})]})]})]}),t.jsxs("div",{className:"glass-card flex flex-col overflow-hidden",children:[t.jsx("div",{className:"px-4 pt-3.5 pb-2.5 flex-shrink-0",style:{borderBottom:"1px solid var(--border-subtle)"},children:t.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:"Skill Description"})}),t.jsx("div",{className:"flex-1 overflow-auto px-4 py-3",style:{minHeight:0},children:re?t.jsx("div",{className:"text-[12px] leading-relaxed",style:{color:"var(--text-secondary)"},dangerouslySetInnerHTML:{__html:he}}):t.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"No description available"})})]})]}),m&&t.jsx("div",{className:"px-4 py-3 rounded-lg text-[13px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:m}),h&&p.length===0&&t.jsxs("div",{className:"text-center py-12 animate-fade-in",children:[t.jsx("div",{className:"spinner-lg mx-auto mb-4"}),t.jsx("p",{className:"text-[14px]",style:{color:"var(--text-secondary)"},children:"Testing activation against skill description..."})]}),p.length>0&&t.jsxs("div",{className:"space-y-5",children:[U.length>0&&t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),t.jsx("line",{x1:"9",y1:"9",x2:"15",y2:"15"})]}),t.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--red)"},children:["Incorrect (",U.length,")"]}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"— These need attention"})]}),t.jsx("div",{className:"space-y-1.5 stagger-children",children:U.map((z,X)=>t.jsx(il,{result:z},`incorrect-${X}`))})]}),H.length>0&&t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("polyline",{points:"16 10 11 15 8 12"})]}),t.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--green)"},children:["Correct (",H.length,")"]})]}),t.jsx("div",{className:"space-y-1.5 stagger-children",children:H.map((z,X)=>t.jsx(il,{result:z},`correct-${X}`))})]})]}),f&&t.jsxs("div",{className:"glass-card p-6 animate-fade-in-scale",style:{borderColor:"var(--border-active)",borderWidth:2},children:[t.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-widest mb-2",style:{color:"var(--text-tertiary)"},children:"Summary"}),f.autoClassifiedCount!=null&&f.autoClassifiedCount>0&&t.jsxs("div",{className:"text-[11px] mb-3",style:{color:"var(--text-tertiary)"},children:[f.autoClassifiedCount," of ",f.total," prompts auto-classified from skill name and tags"]}),t.jsxs("div",{className:"grid grid-cols-3 gap-6 mb-5",children:[t.jsx(Ys,{label:"Precision",value:f.precision,description:"Of all activations, how many were correct?",detail:`${f.tp} true / ${f.tp+f.fp} total activations`}),t.jsx(Ys,{label:"Recall",value:f.recall,description:"Of expected activations, how many fired?",detail:`${f.tp} activated / ${f.tp+f.fn} expected`}),t.jsx(Ys,{label:"Reliability",value:f.reliability,description:"Overall correct classification rate",detail:`${f.tp+f.tn} correct / ${f.total} total`})]}),t.jsxs("div",{className:"pt-4",style:{borderTop:"1px solid var(--border-subtle)"},children:[t.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-widest mb-3 text-center",style:{color:"var(--text-tertiary)"},children:"Confusion Matrix"}),t.jsxs("div",{className:"grid grid-cols-2 gap-2 max-w-xs mx-auto",children:[t.jsx(Bn,{label:"True Positive",abbr:"TP",count:f.tp,bg:"var(--green-muted)",color:"var(--green)",description:"Correctly activated"}),t.jsx(Bn,{label:"False Positive",abbr:"FP",count:f.fp,bg:"var(--red-muted)",color:"var(--red)",description:"Wrongly activated"}),t.jsx(Bn,{label:"False Negative",abbr:"FN",count:f.fn,bg:"var(--red-muted)",color:"var(--red)",description:"Missed activation"}),t.jsx(Bn,{label:"True Negative",abbr:"TN",count:f.tn,bg:"var(--green-muted)",color:"var(--green)",description:"Correctly silent"})]}),t.jsxs("div",{className:"mt-3 max-w-xs mx-auto text-center text-[11px]",style:{color:"var(--text-tertiary)"},title:"Auto-classified disagreements: not real failures, but worth reviewing. Hover a yellow row for details.",children:["Warnings:"," ",t.jsxs("span",{style:{color:(f.scopeWarnings??0)>0?"var(--yellow)":"var(--text-tertiary)"},children:[f.scopeWarnings??0," scope"]}),", ",t.jsxs("span",{style:{color:(f.driftWarnings??0)>0?"var(--yellow)":"var(--text-tertiary)"},children:[f.driftWarnings??0," drift"]})]})]})]}),t.jsx(Hb,{history:T,expanded:W,onToggle:()=>C(!W),skillVersion:R})]})}function Hb({history:e,expanded:r,onToggle:n,skillVersion:s}){return e===null?null:t.jsxs("div",{className:"glass-card overflow-hidden",children:[t.jsxs("button",{className:"w-full px-4 py-3 flex items-center justify-between text-left",style:{borderBottom:r?"1px solid var(--border-subtle)":"none"},onClick:n,children:[t.jsxs("span",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:["Test History",e.length>0&&t.jsxs("span",{className:"ml-2 font-normal",style:{color:"var(--text-tertiary)"},children:["(",e.length," run",e.length!==1?"s":"",")"]})]}),t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:r?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"},children:t.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),r&&t.jsx("div",{className:"px-4 py-3",children:e.length===0?t.jsx("div",{className:"text-[12px] py-4 text-center",style:{color:"var(--text-tertiary)"},children:"No test runs yet"}):t.jsx("div",{className:"space-y-2",children:e.map(o=>t.jsx(Vb,{run:o,skillVersion:s},o.id))})})]})}function Vb({run:e,skillVersion:r}){const n=Math.round(e.summary.reliability*100),s=n>=80?"var(--green)":n>=60?"var(--yellow)":"var(--red)",o=n>=80?"Good":n>=60?"Needs Work":"Poor",a=s;return t.jsxs("div",{className:"flex items-center gap-3 px-3 py-2.5 rounded-lg",style:{background:"var(--surface-1)"},children:[t.jsx("div",{className:"flex-1 min-w-0",children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:Gb(e.timestamp)}),t.jsx(jn,{version:r??null,size:"sm","data-testid":"activation-row-version"}),t.jsx("span",{className:"pill text-[9px] px-1.5",style:{background:"var(--surface-2)",color:"var(--text-tertiary)"},children:e.model||e.provider}),t.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:[e.promptCount," prompts"]})]})}),t.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[t.jsxs("span",{className:"text-[12px] font-semibold",style:{color:s,fontVariantNumeric:"tabular-nums"},children:[n,"%"]}),t.jsx("span",{className:"text-[10px] font-medium px-2 py-0.5 rounded",style:{color:a,background:`color-mix(in srgb, ${a} 10%, transparent)`},children:o})]})]})}function Gb(e){const r=Date.now(),n=new Date(e).getTime(),s=Math.floor((r-n)/1e3);if(s<60)return"just now";const o=Math.floor(s/60);if(o<60)return`${o}m ago`;const a=Math.floor(o/60);if(a<24)return`${a}h ago`;const i=Math.floor(a/24);return i<7?`${i}d ago`:new Date(e).toLocaleDateString()}function zn(){return t.jsx("span",{style:{color:"var(--border-subtle)",userSelect:"none"},children:"·"})}function il({result:e}){const r=e.verdict==="scope_warning"||e.verdict==="drift_warning",n=r?e.verdict==="scope_warning"?"SCOPE_WARNING":"DRIFT_WARNING":e.classification,s=al[n]||al.FN,o=!r&&(e.classification==="TP"||e.classification==="TN"),a=e.verdict==="scope_warning"?"scope warn":e.verdict==="drift_warning"?"drift warn":null,i=e.verdict&&e.verdict!=="ok"?Wb[e.verdict]:void 0;return t.jsxs("div",{className:"flex items-start gap-3 p-4 rounded-xl transition-all duration-200",style:{background:s.bg,border:"1px solid transparent"},children:[t.jsx("div",{className:"flex-shrink-0 mt-0.5",children:t.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:`color-mix(in srgb, ${s.text} 20%, transparent)`},children:o?t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:s.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})}):r?t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:s.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),t.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),t.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}):t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:s.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("div",{className:"flex items-center gap-2 mb-1",children:t.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:e.prompt})}),t.jsxs("div",{className:"flex items-center gap-3 text-[12px]",children:[t.jsx("span",{className:"pill",style:{background:"var(--surface-3)",color:s.text,fontWeight:700,fontSize:"10px",padding:"1px 6px"},title:i,children:a??e.classification}),t.jsx("span",{style:{color:e.activate?"var(--green)":"var(--text-tertiary)"},children:e.activate?"Activated":"Silent"}),t.jsxs("span",{style:{color:"var(--text-tertiary)"},children:["Expected: ",e.expected==="should_activate"?"activate":"stay silent"]}),t.jsxs("span",{style:{color:"var(--text-tertiary)"},children:[e.confidence," confidence"]}),e.autoClassified&&t.jsx("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)",fontSize:"9px",padding:"1px 5px"},children:"auto"})]}),e.reasoning&&t.jsx("div",{className:"text-[11px] mt-1.5",style:{color:"var(--text-tertiary)"},children:e.reasoning})]})]})}function Ys({label:e,value:r,description:n,detail:s}){const o=Math.round(r*100),a=o>=80?"var(--green)":o>=60?"var(--yellow)":"var(--red)";return t.jsxs("div",{className:"text-center",children:[t.jsxs("div",{className:"text-[28px] font-bold tracking-tight",style:{color:a},children:[o,"%"]}),t.jsx("div",{className:"text-[12px] font-medium mt-0.5",style:{color:"var(--text-secondary)"},children:e}),t.jsx("div",{className:"text-[10px] mt-1",style:{color:"var(--text-tertiary)"},children:n}),t.jsx("div",{className:"text-[10px] mt-0.5 font-mono",style:{color:"var(--text-tertiary)"},children:s})]})}function Bn({abbr:e,count:r,bg:n,color:s,description:o}){return t.jsxs("div",{className:"text-center p-3 rounded-lg",style:{background:n},children:[t.jsx("div",{className:"text-[20px] font-bold",style:{color:s},children:r}),t.jsx("div",{className:"text-[11px] font-semibold",style:{color:s},children:e}),t.jsx("div",{className:"text-[9px] mt-0.5",style:{color:"var(--text-tertiary)"},children:o})]})}function Kb({startedAt:e}){const[r,n]=c.useState(0);return c.useEffect(()=>{const s=setInterval(()=>n(Math.floor((Date.now()-e)/1e3)),1e3);return()=>clearInterval(s)},[e]),t.jsxs("span",{className:"ml-2",children:["(",r,"s)"]})}function qb(e){return e==="benchmark"||e==="activation"||e==="ab"}function Yb({mode:e}){var l;const{state:r,runAll:n}=yt(),s=c.useRef(!1),a=(((l=r.evals)==null?void 0:l.evals)??[]).length,i=r.evals!=null;return c.useEffect(()=>{if(e!=="benchmark"||typeof window>"u"||s.current)return;const d=new URLSearchParams(window.location.search);if(d.get("autorun")!=="1"||!i||a===0)return;s.current=!0,n("benchmark"),d.delete("autorun");const u=d.toString(),p=`${window.location.pathname}${u?"?"+u:""}${window.location.hash}`;window.history.replaceState(null,"",p)},[e,i,a,n]),e==="activation"?t.jsx(Ub,{}):t.jsx(zb,{})}const Js={benchmark:"#6383ff",comparison:"#a78bfa",baseline:"#fb923c"},ll={benchmark:"Benchmark",comparison:"Comparison",baseline:"Baseline"},qo=600,Yo=180,ht=40,Qs=qo-ht*2,rr=Yo-ht*2,Jb=[25,50,75,100];function cl(e){return new Date(e).toLocaleDateString(void 0,{month:"short",day:"numeric"})}function Qb(e){return e==null?"--":`${(e/1e3).toFixed(1)}s`}function Xb({entries:e,onPointClick:r}){const[n,s]=c.useState(null),o=c.useMemo(()=>[...e].reverse(),[e]);if(o.length<2)return null;const a=o.length,i=o.map((u,p)=>{const f=ht+p/(a-1)*Qs,h=u.passRate*100,m=ht+rr-h/100*rr;return{x:f,y:m,pct:h,entry:u}}),l=i.map(u=>`${u.x},${u.y}`).join(" "),d=Array.from(new Set(o.map(u=>u.type)));return t.jsxs("div",{className:"glass-card p-5 animate-fade-in",style:{position:"relative",overflowX:a>=20?"auto":void 0},children:[t.jsx("div",{className:"text-[13px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"Pass Rate Trend"}),t.jsx("div",{className:"flex items-center gap-5 mb-3",children:d.map(u=>t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx("div",{className:"w-3 h-3 rounded-full",style:{background:Js[u]??"var(--text-tertiary)"}}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:ll[u]??u})]},u))}),t.jsxs("svg",{width:qo,height:Yo,viewBox:`0 0 ${qo} ${Yo}`,style:{display:"block",overflow:"visible"},children:[Jb.map(u=>{const p=ht+rr-u/100*rr;return t.jsxs("g",{children:[t.jsx("line",{x1:ht,y1:p,x2:ht+Qs,y2:p,stroke:"var(--border-subtle)",strokeWidth:.5,strokeDasharray:"4 4"}),t.jsxs("text",{x:ht-8,y:p+3.5,textAnchor:"end",style:{fill:"var(--text-tertiary)",fontSize:10},children:[u,"%"]})]},u)}),t.jsx("line",{x1:ht,y1:ht+rr,x2:ht+Qs,y2:ht+rr,stroke:"var(--border-subtle)",strokeWidth:1}),t.jsx("text",{x:ht-8,y:ht+rr+3.5,textAnchor:"end",style:{fill:"var(--text-tertiary)",fontSize:10},children:"0%"}),t.jsx("polyline",{points:l,fill:"none",stroke:"var(--border-subtle)",strokeWidth:1.5,strokeLinejoin:"round"}),i.map((u,p)=>t.jsx("circle",{cx:u.x,cy:u.y,r:5,fill:Js[u.entry.type]??"var(--text-tertiary)",stroke:"var(--surface-2)",strokeWidth:2,style:{cursor:"pointer",transition:"r 0.15s ease"},onMouseEnter:f=>{f.currentTarget.setAttribute("r","7"),s({x:u.x,y:u.y,entry:u.entry})},onMouseLeave:f=>{f.currentTarget.setAttribute("r","5"),s(null)},onClick:()=>r==null?void 0:r(u.entry)},p)),Zb(a).map(u=>t.jsx("text",{x:i[u].x,y:ht+rr+16,textAnchor:"middle",style:{fill:"var(--text-tertiary)",fontSize:10},children:cl(o[u].timestamp)},u))]}),n&&t.jsxs("div",{style:{position:"absolute",left:n.x,top:n.y-12,transform:"translate(-50%, -100%)",background:"var(--surface-3)",border:"1px solid var(--border-subtle)",borderRadius:8,padding:"8px 12px",pointerEvents:"none",zIndex:10,whiteSpace:"nowrap"},children:[t.jsx("div",{className:"text-[11px] font-medium",style:{color:"var(--text-primary)"},children:cl(n.entry.timestamp)}),t.jsx("div",{className:"text-[11px] mt-0.5",style:{color:"var(--text-tertiary)"},children:n.entry.model}),t.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[t.jsx("span",{className:"text-[9px] font-semibold px-1.5 py-0.5 rounded-full",style:{background:Js[n.entry.type]??"var(--text-tertiary)",color:"#fff"},children:ll[n.entry.type]??n.entry.type}),t.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:[Math.round(n.entry.passRate*100),"%"]})]}),t.jsxs("div",{className:"text-[10px] mt-1.5 flex items-center gap-3",style:{color:"var(--text-tertiary)"},children:[t.jsx("span",{children:Qb(n.entry.totalDurationMs)}),t.jsx("span",{children:n.entry.totalTokens!=null?`${n.entry.totalTokens} tokens`:"--"})]})]})]})}function Zb(e){if(e<=3)return Array.from({length:e},(s,o)=>o);if(e<=6)return[0,Math.floor(e/2),e-1];if(e<20)return[0,Math.floor(e/3),Math.floor(2*e/3),e-1];const r=Math.ceil(e/10),n=[0];for(let s=r;s<e-1;s+=r)n.push(s);return n.push(e-1),n}const tn=new Map;let mt=null,Qn=null,_n=1e3,Nr=0;function cu(){if(mt)return;mt=new EventSource("/api/events");const e=r=>n=>{let s={};try{s=n.data?JSON.parse(n.data):{}}catch{}const o=tn.get(r);if(o)for(const a of o)a(s)};mt.addEventListener("benchmark:complete",e("benchmark:complete")),mt.addEventListener("history:written",e("history:written")),mt.addEventListener("leaderboard:updated",e("leaderboard:updated")),mt.onerror=()=>{mt==null||mt.close(),mt=null,Nr>0&&(Qn=setTimeout(()=>{_n=Math.min(_n*2,3e4),cu()},_n))},mt.onopen=()=>{_n=1e3}}function e1(){Qn!=null&&(clearTimeout(Qn),Qn=null),mt==null||mt.close(),mt=null}function t1(e,r){return tn.has(e)||tn.set(e,new Set),tn.get(e).add(r),Nr++,cu(),()=>{var n;(n=tn.get(e))==null||n.delete(r),Nr--,Nr<=0&&(Nr=0,queueMicrotask(()=>{Nr<=0&&e1()}))}}function ns(e,r){const n=c.useRef(r);n.current=r,c.useEffect(()=>t1(e,o=>n.current(o)),[e])}function ss(e){return e>=.8?"var(--green)":e>=.5?"var(--yellow)":"var(--red)"}function r1(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${Math.round(e)}ms`}function n1({rate:e,label:r}){const n=Math.round(e*100);return t.jsx("div",{className:"flex items-center gap-3",children:t.jsxs("div",{className:"flex-1",children:[t.jsxs("div",{className:"flex items-center justify-between mb-1",children:[t.jsx("span",{className:"text-[11px] truncate",style:{color:"var(--text-primary)",maxWidth:"70%"},children:r}),t.jsxs("span",{className:"text-[11px] font-semibold",style:{color:ss(e)},children:[n,"%"]})]}),t.jsx("div",{className:"h-1.5 rounded-full overflow-hidden",style:{background:"var(--surface-3)"},children:t.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${n}%`,background:ss(e)}})})]})})}function s1({points:e}){if(e.length<2)return null;const r=200,n=48,s=4,o=e.length,a=e.map((d,u)=>{const p=s+u/(o-1)*(r-s*2),f=s+(n-s*2)-d.passRate*(n-s*2);return{x:p,y:f}}),i=`M ${a[0].x},${n-s} `+a.map(d=>`L ${d.x},${d.y}`).join(" ")+` L ${a[a.length-1].x},${n-s} Z`,l=a.map((d,u)=>`${u===0?"M":"L"} ${d.x},${d.y}`).join(" ");return t.jsxs("svg",{width:r,height:n,style:{display:"block"},children:[t.jsx("path",{d:i,fill:"var(--accent-muted)"}),t.jsx("path",{d:l,fill:"none",stroke:"var(--accent)",strokeWidth:1.5,strokeLinejoin:"round"}),t.jsx("circle",{cx:a[a.length-1].x,cy:a[a.length-1].y,r:3,fill:"var(--accent)"})]})}function o1({plugin:e,skill:r}){const n=`stats/${e}/${r}`,s=c.useCallback(()=>de.getStats(e,r),[e,r]),{data:o,loading:a}=Rt(n,s),i=c.useCallback(()=>Ue(n),[n]);if(ns("benchmark:complete",i),ns("history:written",i),a)return t.jsxs("div",{className:"space-y-4",children:[t.jsx("div",{className:"skeleton h-24 rounded-xl"}),t.jsx("div",{className:"skeleton h-48 rounded-xl"}),t.jsx("div",{className:"skeleton h-36 rounded-xl"})]});if(!o||o.totalRuns===0)return t.jsxs("div",{className:"text-center py-12",children:[t.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center mx-auto mb-3",style:{background:"var(--surface-2)"},children:t.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"1.5",children:[t.jsx("path",{d:"M18 20V10"}),t.jsx("path",{d:"M12 20V4"}),t.jsx("path",{d:"M6 20v-6"})]})}),t.jsx("p",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No benchmark data yet"}),t.jsx("p",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:"Run some benchmarks to see statistics"})]});const l=o.trendPoints.length>0?o.trendPoints[o.trendPoints.length-1].passRate:0,d=o.trendPoints.length>0?o.trendPoints[0].passRate:0,u=l-d,p=o.assertionStats.slice(0,10);return t.jsxs("div",{className:"space-y-4 stagger-children",children:[t.jsxs("div",{className:"grid grid-cols-4 gap-3",children:[t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Total Runs"}),t.jsx("div",{className:"text-[24px] font-bold",style:{color:"var(--text-primary)"},children:o.totalRuns})]}),t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Latest Pass Rate"}),t.jsxs("div",{className:"text-[24px] font-bold",style:{color:ss(l)},children:[Math.round(l*100),"%"]})]}),t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Trend"}),t.jsxs("div",{className:"text-[24px] font-bold",style:{color:u>=0?"var(--green)":"var(--red)"},children:[u>=0?"+":"",Math.round(u*100),"%"]})]}),t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Models Tested"}),t.jsx("div",{className:"text-[24px] font-bold",style:{color:"var(--text-primary)"},children:o.modelStats.length})]}),o.totalCost!=null&&t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Total Cost"}),t.jsx("div",{className:"text-[20px] font-bold",style:{color:"var(--text-primary)"},children:Nt(o.totalCost)})]}),o.costPerRun!=null&&t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Avg Cost/Run"}),t.jsx("div",{className:"text-[20px] font-bold",style:{color:"var(--text-primary)"},children:Nt(o.costPerRun)})]})]}),o.trendPoints.length>=2&&t.jsxs("div",{className:"glass-card p-5",children:[t.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Pass Rate Over Time"}),t.jsx(s1,{points:o.trendPoints})]}),o.modelStats.length>0&&t.jsxs("div",{className:"glass-card p-5",children:[t.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Model Performance"}),t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:[t.jsx("th",{style:{textAlign:"left",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Model"}),t.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Runs"}),t.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Pass Rate"}),t.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Duration"}),t.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Cost"})]})}),t.jsx("tbody",{children:o.modelStats.map(f=>t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:[t.jsx("td",{style:{padding:"8px",color:"var(--text-primary)",fontWeight:500},children:f.model}),t.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:f.runs}),t.jsx("td",{style:{padding:"8px",textAlign:"center"},children:t.jsxs("span",{className:"font-semibold",style:{color:ss(f.avgPassRate)},children:[Math.round(f.avgPassRate*100),"%"]})}),t.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:r1(f.avgDurationMs)}),t.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:f.avgCost!=null?Nt(f.avgCost):"N/A"})]},f.model))})]})]}),p.length>0&&t.jsxs("div",{className:"glass-card p-5",children:[t.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Weakest Assertions"}),t.jsx("div",{className:"space-y-3",children:p.map(f=>t.jsxs("button",{className:"block w-full text-left rounded-lg p-2 -mx-2 transition-colors duration-150",style:{background:"transparent"},onMouseEnter:h=>{h.currentTarget.style.background="var(--surface-2)"},onMouseLeave:h=>{h.currentTarget.style.background="transparent"},onClick:()=>{},children:[t.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[t.jsxs("span",{className:"text-[10px] font-mono px-1 py-0.5 rounded flex-shrink-0",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:["#",f.evalId]}),t.jsx("span",{className:"text-[10px] truncate",style:{color:"var(--text-tertiary)"},children:f.evalName}),t.jsxs("span",{className:"text-[10px] ml-auto flex-shrink-0",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:[f.totalRuns," runs"]})]}),t.jsx(n1,{rate:f.passRate,label:f.text})]},`${f.evalId}:${f.id}`))})]})]})}function a1({plugin:e,skill:r}){const[n,s]=c.useState(null),[o,a]=c.useState(null),[i,l]=c.useState({}),[d,u]=c.useState({});c.useEffect(()=>{de.getEvals(e,r).then(s).catch(()=>s(null))},[e,r]);async function p(f){if(o===f){a(null);return}if(a(f),!i[f]){u(h=>({...h,[f]:!0}));try{const h=await de.getCaseHistory(e,r,f);l(m=>({...m,[f]:h}))}catch{l(h=>({...h,[f]:[]}))}finally{u(h=>({...h,[f]:!1}))}}}return n?t.jsx("div",{className:"space-y-2 stagger-children",children:n.evals.map(f=>{const h=i[f.id]||[],m=o===f.id,v=d[f.id],x=h.length>0?h[0].pass_rate:null;return t.jsxs("div",{className:"glass-card overflow-hidden",children:[t.jsxs("button",{onClick:()=>p(f.id),className:"w-full text-left p-4 flex items-center gap-3 transition-colors duration-150",style:{background:m?"var(--surface-2)":"transparent"},onMouseEnter:g=>{m||(g.currentTarget.style.background="var(--surface-2)")},onMouseLeave:g=>{m||(g.currentTarget.style.background="transparent")},children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2.5",strokeLinecap:"round",style:{transform:m?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease",flexShrink:0},children:t.jsx("polyline",{points:"9 18 15 12 9 6"})}),t.jsxs("span",{className:"text-[11px] font-mono px-1.5 py-0.5 rounded flex-shrink-0",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:["#",f.id]}),t.jsx("span",{className:"text-[13px] font-medium flex-1 truncate",style:{color:"var(--text-primary)"},children:f.name}),h.length>=2&&t.jsx(eu,{entries:h}),x!=null&&t.jsxs("span",{className:"text-[12px] font-semibold flex-shrink-0",style:{color:Fr(x)},children:[Math.round(x*100),"%"]}),h.length>0&&t.jsxs("span",{className:"text-[10px] flex-shrink-0",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:[h.length," runs"]})]}),m&&t.jsx("div",{className:"border-t animate-fade-in",style:{borderColor:"var(--border-subtle)"},children:v?t.jsxs("div",{className:"p-4 flex items-center gap-2",children:[t.jsx("div",{className:"spinner",style:{width:14,height:14}}),t.jsx("span",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Loading history..."})]}):h.length===0?t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"No history for this eval case"})}):t.jsx("div",{className:"divide-y",style:{borderColor:"var(--border-subtle)"},children:h.map((g,b)=>t.jsxs("div",{className:"p-4",style:{background:b===0?"var(--surface-2)":"transparent"},children:[t.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:Xd(g.timestamp)}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:g.model}),t.jsx("span",{className:"pill",style:{fontSize:9,padding:"1px 6px",background:g.type==="benchmark"?"rgba(99,131,255,0.15)":g.type==="comparison"?"var(--purple-muted)":"rgba(251,146,60,0.15)",color:g.type==="benchmark"?"#6383ff":g.type==="comparison"?"var(--purple)":"#fb923c"},children:g.type}),t.jsxs("span",{className:"text-[12px] font-semibold ml-auto",style:{color:Fr(g.pass_rate)},children:[Math.round(g.pass_rate*100),"%"]})]}),t.jsxs("div",{className:"flex items-center gap-4 mb-2 text-[10px]",style:{fontFamily:"var(--font-mono, monospace)",color:"var(--text-tertiary)"},children:[g.durationMs!=null&&t.jsx("span",{children:Zd(g.durationMs)}),g.tokens!=null&&t.jsxs("span",{children:[g.tokens>=1e3?`${(g.tokens/1e3).toFixed(1)}k`:g.tokens," tok"]})]}),t.jsx("div",{className:"space-y-1",children:g.assertions.map(y=>t.jsxs("div",{className:"flex items-start gap-2 py-0.5",children:[t.jsx("div",{className:"w-3.5 h-3.5 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5",style:{background:y.pass?"var(--green)":"var(--red)"},children:t.jsx("svg",{width:"7",height:"7",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"3.5",strokeLinecap:"round",strokeLinejoin:"round",children:y.pass?t.jsx("polyline",{points:"20 6 9 17 4 12"}):t.jsxs(t.Fragment,{children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("div",{className:"text-[11px]",style:{color:"var(--text-primary)"},children:y.text}),y.reasoning&&t.jsx("div",{className:"text-[10px] mt-0.5",style:{color:"var(--text-tertiary)"},children:y.reasoning})]})]},y.id))})]},b))})})]},f.id)})}):t.jsx("div",{className:"text-center py-12",children:t.jsx("p",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No eval cases found"})})}function i1(){const{state:e,dispatch:r}=yt(),{plugin:n,skill:s}=e,{state:o}=Lt(),a=o.skills.find(F=>F.plugin===n&&F.skill===s),i=(a==null?void 0:a.resolvedVersion)??(a==null?void 0:a.version)??null,[l,d]=c.useState("timeline"),[u,p]=c.useState(""),[f,h]=c.useState(""),[m,v]=c.useState(!1),[x,g]=c.useState([]),[b,y]=c.useState(null),[j,S]=c.useState(!1),[k,T]=c.useState(null),[w,E]=c.useState(!1),R=`history/${n}/${s}?model=${u}&type=${f}`,N=c.useCallback(()=>de.getHistory(n,s,{model:u||void 0,type:f||void 0}),[n,s,u,f]),{data:I,loading:A}=Rt(R,N),$=I??[];c.useEffect(()=>{!I||I.length<2||de.compareRuns(n,s,I[0].timestamp,I[1].timestamp).then(F=>{const V=F.regressions.filter(le=>le.change==="regression");r({type:"SET_REGRESSIONS",regressions:V})}).catch(()=>{})},[I,n,s,r]);const W=c.useCallback(()=>Ue(R),[R]);ns("history:written",W);const C=c.useCallback(async F=>{if(m){g(V=>V.includes(F)?V.filter(le=>le!==F):V.length>=2?[V[1],F]:[...V,F]);return}E(!0);try{const V=await de.getHistoryEntry(n,s,F);T(V)}catch{}finally{E(!1)}},[n,s,m]),L=c.useCallback(async()=>{if(x.length===2){S(!0);try{const F=await de.compareRuns(n,s,x[0],x[1]);y(F)}catch{}finally{S(!1)}}},[n,s,x]),P=[...new Set($.map(F=>F.model))];return A?t.jsxs("div",{className:"p-5",children:[t.jsx("div",{className:"skeleton h-5 w-32 mb-4"}),t.jsx("div",{className:"skeleton h-48 rounded-xl mb-4"}),t.jsxs("div",{className:"space-y-2",children:[t.jsx("div",{className:"skeleton h-12 rounded-lg"}),t.jsx("div",{className:"skeleton h-12 rounded-lg"})]})]}):t.jsxs("div",{className:"p-5",children:[t.jsx("div",{className:"flex items-center gap-1 mb-4",children:["timeline","per-eval","statistics"].map(F=>t.jsx("button",{onClick:()=>d(F),className:"px-4 py-2 rounded-lg text-[12px] font-medium transition-all duration-150",style:{background:l===F?"var(--accent-muted)":"transparent",color:l===F?"var(--accent)":"var(--text-tertiary)"},children:F==="timeline"?"Timeline":F==="per-eval"?"Per Eval":"Statistics"},F))}),l==="timeline"&&t.jsxs("div",{children:[$.length>0&&t.jsx("div",{className:"mb-5 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:t.jsx(Xb,{entries:$,onPointClick:F=>C(F.timestamp)})}),t.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[t.jsxs("select",{value:u,onChange:F=>p(F.target.value),className:"input-field text-[12px]",style:{width:150},children:[t.jsx("option",{value:"",children:"All Models"}),P.map(F=>t.jsx("option",{value:F,children:F},F))]}),t.jsxs("select",{value:f,onChange:F=>h(F.target.value),className:"input-field text-[12px]",style:{width:150},children:[t.jsx("option",{value:"",children:"All Types"}),t.jsx("option",{value:"benchmark",children:"Benchmark"}),t.jsx("option",{value:"comparison",children:"Comparison"}),t.jsx("option",{value:"baseline",children:"Baseline"}),t.jsx("option",{value:"model-compare",children:"Model Compare"}),t.jsx("option",{value:"improve",children:"AI Improve"}),t.jsx("option",{value:"instruct",children:"AI Edit"}),t.jsx("option",{value:"ai-generate",children:"AI Generate"}),t.jsx("option",{value:"eval-generate",children:"Eval Generate"})]}),t.jsx("div",{className:"flex-1"}),t.jsx("button",{onClick:()=>{v(!m),g([]),y(null)},className:`btn text-[12px] ${m?"btn-primary":"btn-secondary"}`,children:m?"Exit Compare":"Compare Runs"}),m&&x.length===2&&t.jsx("button",{onClick:L,disabled:j,className:"btn btn-primary text-[12px]",children:j?"Comparing...":"Compare"})]}),t.jsx("div",{className:"space-y-2",children:$.length===0?t.jsx("div",{className:"text-center py-8 text-[13px]",style:{color:"var(--text-tertiary)"},children:"No benchmark runs yet"}):$.map(F=>{const V=x.includes(F.timestamp);return t.jsx("button",{onClick:()=>C(F.timestamp),className:"w-full text-left rounded-lg px-4 py-3 transition-all duration-150",style:{background:V?"var(--accent-muted)":"var(--surface-1)",border:V?"1px solid var(--accent)":"1px solid var(--border-subtle)"},onMouseEnter:le=>{V||(le.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:le=>{V||(le.currentTarget.style.borderColor="var(--border-subtle)")},children:t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[m&&t.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:V?"var(--accent)":"var(--border-default)",background:V?"var(--accent)":"transparent"},children:V&&t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})}),t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:new Date(F.timestamp).toLocaleString()}),t.jsx("span",{className:"pill text-[9px]",style:{background:F.type==="comparison"?"var(--purple-muted)":F.type==="baseline"?"var(--surface-3)":F.type==="model-compare"?"var(--accent-muted)":F.type==="improve"||F.type==="instruct"?"var(--purple-muted)":F.type==="ai-generate"?"var(--green-muted)":F.type==="eval-generate"?"var(--orange-muted)":"var(--accent-muted)",color:F.type==="comparison"?"var(--purple)":F.type==="baseline"?"var(--text-tertiary)":F.type==="model-compare"?"var(--accent)":F.type==="improve"||F.type==="instruct"?"var(--purple)":F.type==="ai-generate"?"var(--green)":F.type==="eval-generate"?"var(--orange)":"var(--accent)"},children:F.type==="model-compare"?"model compare":F.type==="improve"?"ai improve":F.type==="instruct"?"ai edit":F.type==="ai-generate"?"ai generate":F.type==="eval-generate"?"eval generate":F.type})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(jn,{version:i,size:"sm","data-testid":"history-row-version"}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:F.model}),F.totalCost!=null&&F.totalCost>0&&t.jsx("span",{className:"text-[11px] font-mono",style:{color:"var(--text-tertiary)"},children:Nt(F.totalCost)}),t.jsxs("span",{className:"text-[12px] font-semibold",style:{color:F.passRate>=.8?"var(--green)":F.passRate>=.5?"var(--yellow)":"var(--red)"},children:[Math.round(F.passRate*100),"%"]})]})]})},F.timestamp)})}),b&&t.jsx(l1,{result:b}),k&&!m&&t.jsx(c1,{run:k,onClose:()=>T(null)})]}),l==="per-eval"&&t.jsx(a1,{plugin:n,skill:s}),l==="statistics"&&t.jsx(o1,{plugin:n,skill:s})]})}function l1({result:e}){const r=e.regressions.filter(s=>s.change==="regression"),n=e.regressions.filter(s=>s.change==="improvement");return t.jsxs("div",{className:"mt-4 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:["Comparison: ",new Date(e.runA.timestamp).toLocaleDateString()," vs ",new Date(e.runB.timestamp).toLocaleDateString()]}),(e.runA.totalCost!=null||e.runB.totalCost!=null)&&t.jsxs("div",{className:"flex items-center gap-4 mb-3 text-[11px]",style:{color:"var(--text-secondary)"},children:[t.jsxs("span",{children:["Run A cost: ",Nt(e.runA.totalCost??null)]}),t.jsxs("span",{children:["Run B cost: ",Nt(e.runB.totalCost??null)]}),e.runA.totalCost!=null&&e.runB.totalCost!=null&&t.jsxs("span",{style:{color:e.runB.totalCost<=e.runA.totalCost?"var(--green)":"var(--red)"},children:["Delta: ",Nt(e.runB.totalCost-e.runA.totalCost)]})]}),r.length>0&&t.jsxs("div",{className:"mb-3",children:[t.jsxs("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--red)"},children:["Regressions (",r.length,")"]}),r.map(s=>t.jsxs("div",{className:"text-[12px] py-1",style:{color:"var(--text-secondary)"},children:["#",s.evalId," ",s.evalName,": ",t.jsx("span",{style:{color:"var(--red)"},children:s.assertionId})," (was passing, now failing)"]},`${s.evalId}-${s.assertionId}`))]}),n.length>0&&t.jsxs("div",{className:"mb-3",children:[t.jsxs("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--green)"},children:["Improvements (",n.length,")"]}),n.map(s=>t.jsxs("div",{className:"text-[12px] py-1",style:{color:"var(--text-secondary)"},children:["#",s.evalId," ",s.evalName,": ",t.jsx("span",{style:{color:"var(--green)"},children:s.assertionId})," (was failing, now passing)"]},`${s.evalId}-${s.assertionId}`))]}),t.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 mt-3",style:{color:"var(--text-tertiary)"},children:"Case Diffs"}),t.jsx("div",{className:"rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:t.jsxs("table",{className:"w-full text-[12px]",children:[t.jsx("thead",{children:t.jsxs("tr",{style:{background:"var(--surface-2)"},children:[t.jsx("th",{className:"text-left px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Case"}),t.jsx("th",{className:"text-right px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Run A"}),t.jsx("th",{className:"text-right px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Run B"})]})}),t.jsx("tbody",{children:e.caseDiffs.map(s=>t.jsxs("tr",{style:{borderTop:"1px solid var(--border-subtle)"},children:[t.jsxs("td",{className:"px-3 py-2",style:{color:"var(--text-secondary)"},children:["#",s.eval_id," ",s.eval_name]}),t.jsx("td",{className:"text-right px-3 py-2",style:{color:s.passRateA!=null?s.passRateA>=.8?"var(--green)":s.passRateA>=.5?"var(--yellow)":"var(--red)":"var(--text-tertiary)"},children:s.passRateA!=null?`${Math.round(s.passRateA*100)}%`:s.statusA}),t.jsx("td",{className:"text-right px-3 py-2",style:{color:s.passRateB!=null?s.passRateB>=.8?"var(--green)":s.passRateB>=.5?"var(--yellow)":"var(--red)":"var(--text-tertiary)"},children:s.passRateB!=null?`${Math.round(s.passRateB*100)}%`:s.statusB})]},s.eval_id))})]})})]})}function c1({run:e,onClose:r}){return(e.type==="improve"||e.type==="instruct")&&e.improve?t.jsx(d1,{run:e,onClose:r}):t.jsxs("div",{className:"mt-4 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between mb-3",children:[t.jsxs("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:["Run: ",new Date(e.timestamp).toLocaleString()]}),t.jsx("button",{onClick:r,className:"btn btn-ghost text-[11px]",children:"Close"})]}),t.jsxs("div",{className:"text-[11px] mb-3",style:{color:"var(--text-tertiary)"},children:["Model: ",e.model," | Cases: ",e.cases.length," | Pass Rate: ",e.overall_pass_rate!=null?`${Math.round(e.overall_pass_rate*100)}%`:"--",e.totalCost!=null&&e.totalCost>0&&` | Cost: ${Nt(e.totalCost)}`]}),t.jsx("div",{className:"space-y-2",children:e.cases.map(n=>t.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-2)"},children:t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("span",{className:"text-[12px]",style:{color:"var(--text-secondary)"},children:["#",n.eval_id," ",n.eval_name]}),t.jsxs("div",{className:"flex items-center gap-2",children:[n.cost!=null&&n.cost>0&&t.jsx("span",{className:"text-[10px] font-mono",style:{color:"var(--text-tertiary)"},children:Nt(n.cost)}),t.jsx("span",{className:"text-[11px] font-semibold",style:{color:n.status==="pass"?"var(--green)":"var(--red)"},children:n.pass_rate!=null?`${Math.round(n.pass_rate*100)}%`:n.status})]})]})},n.eval_id))})]})}function d1({run:e,onClose:r}){var a;const n=c.useMemo(()=>e.improve?vs(e.improve.original,e.improve.improved):[],[e.improve]),s=c.useMemo(()=>{const i=n.filter(d=>d.type==="added").length,l=n.filter(d=>d.type==="removed").length;return{added:i,removed:l}},[n]),o=c.useMemo(()=>{let i=0,l=0;return n.map(d=>d.type==="removed"?(i++,{...d,origNum:i,newNum:null}):d.type==="added"?(l++,{...d,origNum:null,newNum:l}):(i++,l++,{...d,origNum:i,newNum:l}))},[n]);return t.jsxs("div",{className:"mt-4 rounded-xl overflow-hidden animate-fade-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3.5",style:{background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"w-8 h-8 rounded-lg flex items-center justify-center",style:{background:"var(--purple-muted)"},children:t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--purple)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),t.jsx("path",{d:"M2 17l10 5 10-5"}),t.jsx("path",{d:"M2 12l10 5 10-5"})]})}),t.jsxs("div",{children:[t.jsx("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md Changes"}),t.jsxs("div",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:[new Date(e.timestamp).toLocaleString()," · ",e.model]})]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[t.jsxs("span",{style:{color:"var(--green)"},children:["+",s.added]}),t.jsxs("span",{style:{color:"var(--red)"},children:["-",s.removed]})]}),t.jsx("button",{onClick:r,className:"w-7 h-7 rounded-lg flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:i=>{i.currentTarget.style.background="var(--surface-3)"},onMouseLeave:i=>{i.currentTarget.style.background="transparent"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),((a=e.improve)==null?void 0:a.reasoning)&&t.jsxs("div",{className:"mx-4 mt-4 px-4 py-3 rounded-lg text-[12px]",style:{background:"var(--purple-muted)",border:"1px solid var(--purple-muted)",color:"var(--text-secondary)"},children:[t.jsx("span",{className:"font-semibold",style:{color:"var(--purple)"},children:"AI Reasoning: "}),e.improve.reasoning]}),t.jsx("div",{className:"mx-4 my-4 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)",maxHeight:480,overflowY:"auto"},children:t.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:t.jsx("tbody",{children:o.map((i,l)=>t.jsxs("tr",{style:{background:i.type==="added"?"var(--green-muted)":i.type==="removed"?"var(--red-muted)":"transparent"},children:[t.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:i.type==="removed"?"var(--red)":"var(--text-tertiary)",opacity:i.origNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:i.origNum??""}),t.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:i.type==="added"?"var(--green)":"var(--text-tertiary)",opacity:i.newNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:i.newNum??""}),t.jsx("td",{className:"select-none text-center",style:{width:20,fontSize:11,fontWeight:700,color:i.type==="added"?"var(--green)":i.type==="removed"?"var(--red)":"transparent",borderRight:i.type==="added"?"2px solid var(--green)":i.type==="removed"?"2px solid var(--red)":"2px solid transparent"},children:i.type==="added"?"+":i.type==="removed"?"-":" "}),t.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:i.type==="added"?"var(--green)":i.type==="removed"?"var(--red)":"var(--text-secondary)"},children:i.content||"​"})]},l))})})})]})}function du({data:e}){if(e.length<2)return t.jsx("span",{style:{color:"var(--text-tertiary)",fontSize:10},children:"--"});const r=e.slice(-10),n=80,s=24,o=2,a=n-o*2,i=s-o*2,l=r.length,d=Math.min(...r),p=Math.max(...r)-d||1,f=r.map((v,x)=>{const g=o+x/(l-1)*a,b=o+i-(v-d)/p*i;return`${g.toFixed(1)},${b.toFixed(1)}`}),h=r[r.length-1],m=Fr(h);return t.jsxs("svg",{width:n,height:s,viewBox:`0 0 ${n} ${s}`,style:{display:"block"},children:[t.jsx("polyline",{points:f.join(" "),fill:"none",stroke:m,strokeWidth:1.5,strokeLinejoin:"round",strokeLinecap:"round"}),(()=>{const[v,x]=f[f.length-1].split(",");return t.jsx("circle",{cx:v,cy:x,r:2.5,fill:m})})()]})}function u1(){return t.jsxs("span",{className:"pill",style:{background:"var(--yellow-muted)",color:"var(--yellow)",fontSize:9,fontWeight:700,gap:3},children:[t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"var(--yellow)",stroke:"none",children:t.jsx("polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"})}),"Best Model"]})}function p1({pct:e}){const r=e>=10?"var(--green)":e>=0?"var(--yellow)":"var(--red)",n=e>=10?"var(--green-muted)":e>=0?"var(--yellow-muted)":"var(--red-muted)",s=e>=0?"+":"";return t.jsxs("span",{className:"pill",style:{background:n,color:r,fontSize:10,fontWeight:600},children:[s,e.toFixed(1),"%"]})}function f1({score:e,rating:r}){const n={excellent:{bg:"var(--green-muted)",fg:"var(--green)"},good:{bg:"var(--green-muted)",fg:"var(--green)"},marginal:{bg:"var(--yellow-muted)",fg:"var(--yellow)"},minimal:{bg:"var(--yellow-muted)",fg:"var(--yellow)"},harmful:{bg:"var(--red-muted)",fg:"var(--red)"}},s=n[r]??n.minimal,o=e>=0?"+":"";return t.jsxs("div",{className:"flex items-center gap-2 mt-3",children:[t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"Skill Quality:"}),t.jsxs("span",{className:"pill",style:{background:s.bg,color:s.fg,fontSize:11,fontWeight:600},children:[o,e.toFixed(1),"% (",r.toUpperCase(),")"]})]})}function h1({warning:e}){return t.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg mb-3",style:{background:"var(--yellow-muted)",border:"1px solid var(--yellow-muted)"},children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--yellow)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),t.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),t.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--yellow)"},children:e})]})}function m1({active:e,onChange:r,hasBaseline:n}){return t.jsxs("div",{className:"flex gap-1 p-0.5 rounded-lg",style:{background:"var(--surface-2)"},children:[t.jsx("button",{onClick:()=>r("rankings"),className:"px-3 py-1 rounded-md text-[11px] font-medium transition-all",style:{background:e==="rankings"?"var(--surface-3)":"transparent",color:e==="rankings"?"var(--text-primary)":"var(--text-tertiary)"},children:"Rankings"}),t.jsx("button",{onClick:()=>r("amplification"),disabled:!n,className:"px-3 py-1 rounded-md text-[11px] font-medium transition-all",style:{background:e==="amplification"?"var(--surface-3)":"transparent",color:n&&e==="amplification"?"var(--text-primary)":"var(--text-tertiary)",opacity:n?1:.5,cursor:n?"pointer":"not-allowed"},title:n?"View skill amplification data":"Run sweep with --baseline to see amplification data",children:"Skill Amplification"})]})}function x1(e){var s,o,a;if(e.length===0)return[];const r=new Map;for(const i of e)for(const l of i.models){if(l.status==="error")continue;const d=`${l.provider}/${l.model}`;r.has(d)||r.set(d,{provider:l.provider,passRates:[],lastRubric:null,lastDuration:0,lastCost:null,lastBaselinePassRate:void 0,lastSkillDelta:void 0,lastAmplificationPct:void 0,lastCompositeScore:void 0,hasBaseline:!1});const u=r.get(d);u.passRates.push(l.passRate.mean),u.lastRubric=((s=l.rubricScore)==null?void 0:s.mean)??null,u.lastDuration=l.duration.mean,u.lastCost=((o=l.cost)==null?void 0:o.total)??null,u.lastCompositeScore=l.compositeScore,l.baselinePassRate!=null&&(u.lastBaselinePassRate=l.baselinePassRate.mean,u.lastSkillDelta=(a=l.skillDelta)==null?void 0:a.mean,u.lastAmplificationPct=l.amplificationPct,u.hasBaseline=!0)}const n=[];for(const[i,l]of r){const[d,...u]=i.split("/");n.push({rank:0,model:u.join("/"),provider:d,passRate:l.passRates[l.passRates.length-1],rubricScore:l.lastRubric,duration:l.lastDuration,cost:l.lastCost,sparklineData:l.passRates,isBest:!1,baselinePassRate:l.lastBaselinePassRate,skillDelta:l.lastSkillDelta,amplificationPct:l.lastAmplificationPct,compositeScore:l.lastCompositeScore,hasBaseline:l.hasBaseline})}return n.sort((i,l)=>{const d=i.compositeScore??i.passRate;return(l.compositeScore??l.passRate)-d}),n.forEach((i,l)=>{i.rank=l+1}),n.length>0&&(n[0].isBest=!0),n}const uu=(e="left")=>({padding:"10px 12px",fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary)",textAlign:e,whiteSpace:"nowrap"});function g1({entries:e}){return t.jsx("div",{className:"glass-card",style:{overflow:"hidden"},children:t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[t.jsx("thead",{children:t.jsx("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:["#","Model","Pass Rate","Rubric","Duration","Cost","Trend"].map(r=>t.jsx("th",{style:uu(r==="#"?"center":"left"),children:r},r))})}),t.jsx("tbody",{children:e.map(r=>t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},onMouseEnter:n=>{n.currentTarget.style.background="var(--surface-2)"},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[t.jsx("td",{style:{padding:"10px 12px",textAlign:"center",fontSize:12,fontWeight:600,color:"var(--text-tertiary)",width:40},children:r.rank}),t.jsx("td",{style:{padding:"10px 12px"},children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:r.model}),t.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:r.provider}),r.isBest&&t.jsx(u1,{})]})}),t.jsx("td",{style:{padding:"10px 12px"},children:t.jsxs("span",{className:"pill",style:{background:r.passRate>=.7?"var(--green-muted)":r.passRate>=.4?"var(--yellow-muted)":"var(--red-muted)",color:Fr(r.passRate),fontSize:11,fontWeight:600},children:[Math.round(r.passRate*100),"%"]})}),t.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:r.rubricScore!=null?r.rubricScore.toFixed(1):"--"}),t.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:r.duration<1e3?`${Math.round(r.duration)}ms`:`${(r.duration/1e3).toFixed(1)}s`}),t.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:r.cost!=null?`$${r.cost.toFixed(4)}`:"N/A"}),t.jsx("td",{style:{padding:"10px 12px"},children:t.jsx(du,{data:r.sparklineData})})]},`${r.provider}/${r.model}`))})]})})}function v1({entries:e}){const r=[...e].filter(n=>n.hasBaseline).sort((n,s)=>(s.amplificationPct??0)-(n.amplificationPct??0));return r.length===0?t.jsx("div",{className:"flex items-center justify-center py-8",children:t.jsx("div",{className:"text-center",children:t.jsxs("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:["No baseline data available. Run sweep with ",t.jsx("code",{children:"--baseline"})," flag."]})})}):t.jsx("div",{className:"glass-card",style:{overflow:"hidden"},children:t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[t.jsx("thead",{children:t.jsx("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:["#","Model","With Skill","Without Skill","Delta","Amplification","Trend"].map(n=>t.jsx("th",{style:uu(n==="#"?"center":"left"),children:n},n))})}),t.jsx("tbody",{children:r.map((n,s)=>t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},onMouseEnter:o=>{o.currentTarget.style.background="var(--surface-2)"},onMouseLeave:o=>{o.currentTarget.style.background="transparent"},children:[t.jsx("td",{style:{padding:"10px 12px",textAlign:"center",fontSize:12,fontWeight:600,color:"var(--text-tertiary)",width:40},children:s+1}),t.jsx("td",{style:{padding:"10px 12px"},children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:n.model}),t.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:n.provider})]})}),t.jsx("td",{style:{padding:"10px 12px"},children:t.jsxs("span",{className:"pill",style:{background:n.passRate>=.7?"var(--green-muted)":n.passRate>=.4?"var(--yellow-muted)":"var(--red-muted)",color:Fr(n.passRate),fontSize:11,fontWeight:600},children:[Math.round(n.passRate*100),"%"]})}),t.jsx("td",{style:{padding:"10px 12px"},children:n.baselinePassRate!=null?t.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:[Math.round(n.baselinePassRate*100),"%"]}):"--"}),t.jsx("td",{style:{padding:"10px 12px"},children:n.skillDelta!=null?t.jsxs("span",{className:"text-[11px] font-medium",style:{color:n.skillDelta>=0?"var(--green)":"var(--red)"},children:[n.skillDelta>=0?"+":"",(n.skillDelta*100).toFixed(1),"pp"]}):"--"}),t.jsx("td",{style:{padding:"10px 12px"},children:n.amplificationPct!=null&&isFinite(n.amplificationPct)?t.jsx(p1,{pct:n.amplificationPct}):"--"}),t.jsx("td",{style:{padding:"10px 12px"},children:t.jsx(du,{data:n.sparklineData})})]},`${n.provider}/${n.model}`))})]})})}function y1(){const{state:e}=yt(),{plugin:r,skill:n}=e,[s,o]=c.useState("rankings"),a=`leaderboard/${r}/${n}`,i=c.useCallback(()=>de.getLeaderboard(r,n),[r,n]),{data:l,loading:d,error:u}=Rt(a,i),p=(l==null?void 0:l.entries)??[],f=(u==null?void 0:u.message)??null;c.useEffect(()=>{o("rankings")},[r,n]);const h=c.useCallback(()=>Ue(a),[a]);ns("leaderboard:updated",h);const m=c.useMemo(()=>x1(p),[p]),v=m.some(b=>b.hasBaseline),x=p[0],g=x==null?void 0:x.judgeBiasWarning;return d?t.jsx("div",{className:"flex items-center justify-center h-full",children:t.jsx("div",{className:"spinner spinner-lg"})}):f?t.jsx("div",{className:"flex items-center justify-center h-full px-8",children:t.jsxs("div",{className:"text-center",children:[t.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--red)"},children:"Failed to load leaderboard"}),t.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:f})]})}):m.length===0?t.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-4 px-8",children:[t.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center",style:{background:"var(--accent-muted)"},children:t.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M18 20V10"}),t.jsx("path",{d:"M12 20V4"}),t.jsx("path",{d:"M6 20v-6"})]})}),t.jsxs("div",{className:"text-center",children:[t.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No sweep results yet"}),t.jsx("div",{className:"text-[12px] mb-3",style:{color:"var(--text-tertiary)"},children:"Run your first model sweep to compare performance across models:"}),t.jsx("div",{className:"text-[11px] font-mono px-4 py-3 rounded-lg text-left",style:{background:"var(--surface-2)",color:"var(--text-secondary)",border:"1px solid var(--border-subtle)"},children:'vskill eval sweep --models "anthropic/claude-sonnet-4,openrouter/meta-llama/llama-3.1-70b" --judge "anthropic/claude-sonnet-4"'}),t.jsxs("div",{className:"text-[11px] mt-2",style:{color:"var(--text-tertiary)"},children:["Add ",t.jsx("code",{children:"--baseline"})," to measure skill amplification per model."]})]})]}):t.jsxs("div",{className:"p-5 animate-fade-in",children:[t.jsxs("div",{className:"flex items-center justify-between mb-4",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"text-[15px] font-semibold",style:{color:"var(--text-primary)"},children:"Model Leaderboard"}),t.jsx(m1,{active:s,onChange:o,hasBaseline:v})]}),t.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[p.length," sweep",p.length!==1?"s":""," · ",m.length," model",m.length!==1?"s":""]})]}),g&&t.jsx(h1,{warning:g}),s==="rankings"?t.jsx(g1,{entries:m}):t.jsx(v1,{entries:m}),s==="amplification"&&(x==null?void 0:x.skillQualityScore)!=null&&(x==null?void 0:x.skillQualityRating)&&t.jsx(f1,{score:x.skillQualityScore,rating:x.skillQualityRating})]})}function b1(e){if(!e)return[];const r=e.split(`
59
+ `),n=[];for(const s of r)if(!(s.startsWith("--- ")||s.startsWith("+++ "))){if(s.startsWith("@@")){n.push({type:"header",content:s});continue}if(s.startsWith("+")){n.push({type:"add",content:s.slice(1)});continue}if(s.startsWith("-")){n.push({type:"remove",content:s.slice(1)});continue}(s.startsWith(" ")||s===""&&n.length>0)&&n.push({type:"context",content:s.startsWith(" ")?s.slice(1):""})}return n}function Ia({contentDiff:e,fromLabel:r,toLabel:n,diffSummary:s,maxHeight:o=480,collapsible:a=!1,renderContext:i="inline",onRetry:l}){const[d,u]=c.useState(a),[p,f]=c.useState("unified"),h=c.useRef(null),m=c.useRef(null),v=c.useMemo(()=>b1(e),[e]),x=c.useMemo(()=>{const k=v.filter(w=>w.type==="add").length,T=v.filter(w=>w.type==="remove").length;return{added:k,removed:T}},[v]),g=c.useMemo(()=>{let k=0,T=0;return v.filter(w=>w.type!=="header").map(w=>w.type==="remove"?(k++,{...w,origNum:k,newNum:null}):w.type==="add"?(T++,{...w,origNum:null,newNum:T}):(k++,T++,{...w,origNum:k,newNum:T}))},[v]),b=c.useMemo(()=>{const k=[],T=[];for(const w of g)if(w.type==="remove")k.push(w);else if(w.type==="add")T.push(w);else{for(;k.length<T.length;)k.push({type:"context",content:"",origNum:null,newNum:null});for(;T.length<k.length;)T.push({type:"context",content:"",origNum:null,newNum:null});k.push(w),T.push(w)}for(;k.length<T.length;)k.push({type:"context",content:"",origNum:null,newNum:null});for(;T.length<k.length;)T.push({type:"context",content:"",origNum:null,newNum:null});return{left:k,right:T}},[g]),y=c.useCallback(k=>{const T=k==="left"?h.current:m.current,w=k==="left"?m.current:h.current;T&&w&&(w.scrollTop=T.scrollTop)},[]);if(!e||v.length===0)return t.jsxs("div",{className:"rounded-lg p-6 text-center",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsx("div",{className:"text-[13px] mb-2",style:{color:"var(--text-tertiary)"},children:"Unable to load diff. Try again."}),l&&t.jsx("button",{onClick:l,className:"btn btn-secondary text-[12px]",children:"Retry"})]});const j=i==="modal"?"fixed inset-0 z-50 flex items-center justify-center bg-black/50":"",S=t.jsxs("div",{className:"rounded-xl overflow-hidden animate-fade-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3",style:{background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:[r," → ",n]}),t.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[t.jsxs("span",{style:{color:"var(--green)"},children:["+",x.added]}),t.jsxs("span",{style:{color:"var(--red)"},children:["-",x.removed]})]})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("button",{onClick:()=>f(p==="unified"?"side-by-side":"unified"),className:"btn btn-ghost text-[11px]",children:p==="unified"?"Side-by-side":"Unified"}),a&&t.jsx("button",{onClick:()=>u(!d),className:"btn btn-ghost text-[11px]",children:d?"Expand":"Collapse"})]})]}),s&&t.jsx("div",{className:"mx-4 mt-3 px-4 py-2 rounded-lg text-[12px]",style:{background:"var(--accent-muted)",color:"var(--text-secondary)"},children:s}),!d&&(p==="unified"?t.jsx("div",{className:"mx-4 my-4 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)",maxHeight:o,overflowY:"auto"},children:t.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:t.jsx("tbody",{children:g.map((k,T)=>t.jsxs("tr",{style:{background:k.type==="add"?"rgba(34,197,94,0.08)":k.type==="remove"?"rgba(239,68,68,0.08)":"transparent"},children:[t.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:k.type==="remove"?"rgba(239,68,68,0.5)":"var(--text-tertiary)",opacity:k.origNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:k.origNum??""}),t.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:k.type==="add"?"rgba(34,197,94,0.5)":"var(--text-tertiary)",opacity:k.newNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:k.newNum??""}),t.jsx("td",{className:"select-none text-center",style:{width:20,fontSize:11,fontWeight:700,color:k.type==="add"?"var(--green)":k.type==="remove"?"var(--red)":"transparent",borderRight:k.type==="add"?"2px solid var(--green)":k.type==="remove"?"2px solid var(--red)":"2px solid transparent"},children:k.type==="add"?"+":k.type==="remove"?"-":" "}),t.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:k.type==="add"?"var(--green)":k.type==="remove"?"var(--red)":"var(--text-secondary)"},children:k.content||"​"})]},T))})})}):t.jsxs("div",{className:"mx-4 my-4 grid grid-cols-2 gap-0 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:[t.jsx("div",{ref:h,style:{maxHeight:o,overflowY:"auto",borderRight:"1px solid var(--border-subtle)"},onScroll:()=>y("left"),children:t.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:t.jsx("tbody",{children:b.left.map((k,T)=>t.jsxs("tr",{style:{background:k.type==="remove"?"rgba(239,68,68,0.08)":"transparent"},children:[t.jsx("td",{className:"text-right select-none px-2",style:{width:35,fontSize:10,color:"var(--text-tertiary)",opacity:.6,borderRight:"1px solid var(--border-subtle)"},children:k.origNum??""}),t.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:k.type==="remove"?"var(--red)":"var(--text-secondary)"},children:k.content||"​"})]},T))})})}),t.jsx("div",{ref:m,style:{maxHeight:o,overflowY:"auto"},onScroll:()=>y("right"),children:t.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:t.jsx("tbody",{children:b.right.map((k,T)=>t.jsxs("tr",{style:{background:k.type==="add"?"rgba(34,197,94,0.08)":"transparent"},children:[t.jsx("td",{className:"text-right select-none px-2",style:{width:35,fontSize:10,color:"var(--text-tertiary)",opacity:.6,borderRight:"1px solid var(--border-subtle)"},children:k.newNum??""}),t.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:k.type==="add"?"var(--green)":"var(--text-secondary)"},children:k.content||"​"})]},T))})})})]}))]});return i==="modal"?t.jsx("div",{className:j,children:t.jsx("div",{style:{width:"80%",maxWidth:900},children:S})}):S}const Xs="https://verified-skill.com/submit",k1=/^https:\/\/github\.com\/[^/?#@:]+\/[^/?#@:]+(?:[/?#].*)?$/;function j1(e){if(!e)return Xs;const r=e.trim();return!r||!k1.test(r)?Xs:`${Xs}?repo=${encodeURIComponent(r)}`}const w1={sm:{icon:12,fontSize:"0.625rem",gap:"0.25rem",px:"0.375rem",py:"0.125rem",height:"18px",radius:"3px"},md:{icon:14,fontSize:"0.6875rem",gap:"0.3rem",px:"0.5rem",py:"0.15rem",height:"22px",radius:"4px"},lg:{icon:16,fontSize:"0.75rem",gap:"0.375rem",px:"0.625rem",py:"0.2rem",height:"26px",radius:"4px"}};function S1({size:e}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[t.jsx("path",{d:"M10 1L3 4.5V9.5C3 13.64 5.99 17.52 10 18.5C14.01 17.52 17 13.64 17 9.5V4.5L10 1Z",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),t.jsx("path",{d:"M7.5 10.5L9.5 12.5L13 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function C1({size:e}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[t.jsx("path",{d:"M10 1L11.9 4.1L15.5 3.5L14.2 7L17 9.5L14.2 12L15.5 15.5L11.9 14.9L10 18L8.1 14.9L4.5 15.5L5.8 12L3 9.5L5.8 7L4.5 3.5L8.1 4.1L10 1Z",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.1",strokeLinejoin:"round"}),t.jsx("path",{d:"M10 6.5L10.9 8.6L13.1 8.8L11.4 10.3L11.9 12.5L10 11.3L8.1 12.5L8.6 10.3L6.9 8.8L9.1 8.6L10 6.5Z",fill:"currentColor",stroke:"currentColor",strokeWidth:"0.4",strokeLinejoin:"round"})]})}const dl={VERIFIED:{color:"var(--tier-verified)",bg:"var(--tier-verified-bg)",border:"var(--tier-verified-border)"},CERTIFIED:{color:"var(--tier-certified)",bg:"var(--tier-certified-bg)",border:"var(--tier-certified-border)"},TAINTED:{color:"var(--tier-tainted)",bg:"var(--tier-tainted-bg)",border:"var(--tier-tainted-border)"}},E1={VERIFIED:"Security-Scanned",CERTIFIED:"Trusted Publisher",TAINTED:"Tainted"};function pu(e){return E1[e]??e}function N1({size:e}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[t.jsx("path",{d:"M10 2L1.5 17.5H18.5L10 2Z",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),t.jsx("path",{d:"M10 8V12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),t.jsx("circle",{cx:"10",cy:"14.5",r:"1",fill:"currentColor"})]})}function R1({tier:e,size:r}){return e==="TAINTED"?t.jsx(N1,{size:r}):e==="CERTIFIED"?t.jsx(C1,{size:r}):t.jsx(S1,{size:r})}function oS({tier:e,size:r="md",isTainted:n}){const s=w1[r],o=n?"TAINTED":e,a=dl[o]??dl.VERIFIED;return t.jsxs("span",{"data-testid":"tier-badge","data-tier":o,style:{display:"inline-flex",alignItems:"center",gap:s.gap,padding:`${s.py} ${s.px}`,height:s.height,borderRadius:s.radius,fontFamily:"var(--font-geist-mono)",fontSize:s.fontSize,fontWeight:600,letterSpacing:"0.03em",whiteSpace:"nowrap",color:a.color,backgroundColor:a.bg,border:`1px solid ${a.border}`,lineHeight:1},children:[t.jsx(R1,{tier:o,size:s.icon}),pu(o)]})}const ul={CERTIFIED:{bg:"var(--yellow-muted)",text:"var(--yellow)"},VERIFIED:{bg:"var(--accent-muted)",text:"var(--accent)"},COMMUNITY:{bg:"var(--surface-3)",text:"var(--text-tertiary)"}};function T1(e,r){return e?e.length>r?e.slice(0,r)+"…":e:""}function I1(e){if(!e)return"";const r=e.trim();if(!r)return"";const n=r.toLowerCase();return n==="0 files"||n==="no files"||n==="no file changes"?"Metadata-only release — no file changes":r}function L1(){const{state:e}=yt(),{plugin:r,skill:n}=e,s=Lt(),{onSkillUpdated:o,updateCount:a}=s,i=c.useMemo(()=>s.state.skills.find(V=>V.plugin===r&&V.skill===n)??null,[s.state.skills,r,n]),l=`versions-envelope/${r}/${n}`,d=c.useCallback(()=>de.getSkillVersionsEnvelope(r,n),[r,n]),{data:u,loading:p}=Rt(l,d),f=(u==null?void 0:u.versions)??[],h=(u==null?void 0:u.provider)??"local",m=(u==null?void 0:u.source)==="none",[v,x]=c.useState(null),[g,b]=c.useState(null),[y,j]=c.useState(null),[S,k]=c.useState(!1),[T,w]=c.useState("idle"),[E,R]=c.useState(null),N=c.useRef(null),I=c.useRef(null),A=c.useMemo(()=>(f==null?void 0:f.find(V=>V.isInstalled))??null,[f]),$=c.useMemo(()=>(f==null?void 0:f[0])??null,[f]),W=A&&$&&A.version!==$.version,C=c.useCallback(V=>{v?!g&&V!==v?b(V):(x(V),b(null),j(null)):(x(V),j(null))},[v,g]),L=c.useCallback(async(V,le)=>{k(!0);try{const H=await de.getVersionDiff(r,n,V,le);j(H)}catch{j(null)}finally{k(!1)}},[r,n]);c.useEffect(()=>{if(v&&g){const V=f||[],le=V.findIndex(xe=>xe.version===v),H=V.findIndex(xe=>xe.version===g),[U,re]=le>H?[v,g]:[g,v];L(U,re)}},[v,g,f,L]);const P=c.useCallback(()=>{!A||!$||(x(A.version),b($.version))},[A,$]),F=c.useCallback(async()=>{w("updating"),R(null);const V=new AbortController;N.current=V;try{const le=await de.postSkillUpdate(r,n,V.signal);if(le.ok)w("done"),o(r,n);else{const H=`Update failed (HTTP ${le.status}): ${le.body||"no response body"}`;w("error"),R(H)}}catch(le){if(le instanceof DOMException&&le.name==="AbortError")return;const H=le instanceof Error?le.message:"Network error";w("error"),R(H)}finally{N.current===V&&(N.current=null)}},[r,n,o]);if(c.useEffect(()=>()=>{var V;(V=N.current)==null||V.abort(),N.current=null},[]),p)return t.jsxs("div",{className:"p-5",children:[t.jsx("div",{className:"skeleton h-5 w-40 mb-4"}),t.jsxs("div",{className:"space-y-3",children:[t.jsx("div",{className:"skeleton h-14 rounded-lg"}),t.jsx("div",{className:"skeleton h-14 rounded-lg"}),t.jsx("div",{className:"skeleton h-14 rounded-lg"})]})]});if(!f||f.length===0){if((i==null?void 0:i.origin)==="source"){const le=j1((i==null?void 0:i.homepage)??null);return t.jsxs("div",{className:"flex flex-col items-center justify-center h-full py-16 px-8","data-testid":"versions-empty-state-local",children:[t.jsx("div",{className:"text-[14px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"No published versions yet"}),t.jsx("div",{className:"text-[13px] text-center mb-5 max-w-md",style:{color:"var(--text-tertiary)",lineHeight:1.5},children:"This skill is local-only — the version history shown here is sourced from verified-skill.com. Submit your skill to start tracking versions and share it with others."}),t.jsx("a",{href:le,target:"_blank",rel:"noopener noreferrer",className:"btn btn-primary text-[12px]","data-testid":"versions-empty-state-cta",children:"Submit on verified-skill.com"})]})}return i!=null&&i.version?t.jsxs("div",{className:"p-5",children:[t.jsx("div",{className:"text-[14px] font-semibold mb-4",style:{color:"var(--text-primary)"},children:"Version History"}),t.jsxs("div",{className:"relative",children:[t.jsx("div",{className:"absolute left-3 top-0 bottom-0",style:{width:2,background:"var(--border-subtle)"}}),t.jsxs("div",{"data-testid":"version-row-local",className:"w-full text-left pl-8 pr-4 py-3 relative rounded-lg",style:{background:"transparent",border:"1px solid transparent"},children:[t.jsx("span",{className:"absolute left-1.5 top-4 rounded-full",style:{width:10,height:10,background:"var(--accent)",border:"2px solid var(--accent)"}}),t.jsx("div",{className:"flex items-center justify-between",children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:i.version}),t.jsx(Ko,{provider:h}),t.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:"var(--accent-muted)",color:"var(--accent)"},children:"installed"})]})}),t.jsx("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},"data-testid":"versions-no-upstream-message",children:m?"No upstream registry — this skill ships without origin metadata, so update tracking is unavailable.":"Local-only — this skill is not registered on verified-skill.com, so no upstream history is available."})]})]})]}):t.jsx("div",{className:"flex flex-col items-center justify-center h-full py-16","data-testid":"versions-empty-state-installed",children:t.jsx("div",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No version history available"})})}return t.jsxs("div",{className:"p-5",children:[t.jsxs("div",{className:"flex items-center justify-between mb-4",children:[t.jsx("div",{className:"text-[14px] font-semibold",style:{color:"var(--text-primary)"},children:"Version History"}),t.jsxs("div",{className:"flex items-center gap-2",children:[W&&t.jsx("button",{onClick:P,className:"btn btn-secondary text-[11px]",children:"View changes since installed"}),W&&T!=="done"&&(T==="error"?t.jsxs("span",{className:"flex items-center gap-1.5",children:[t.jsx("span",{className:"text-[11px]",style:{color:"var(--red)"},children:E||"Update failed"}),t.jsx("button",{onClick:F,className:"btn btn-secondary text-[11px]",children:"Retry"})]}):t.jsx("button",{onClick:F,disabled:T!=="idle",className:"btn btn-primary text-[11px]",children:T==="idle"?`Update to ${$==null?void 0:$.version}`:T==="updating"?"Starting update...":T==="scanning"?"Scanning...":"Installing..."})),a>1&&t.jsxs("button",{onClick:()=>{window.location.hash="#/updates"},className:"text-[11px] hover:underline",style:{color:"var(--text-tertiary)",background:"transparent",border:"none",cursor:"pointer"},children:["Manage all updates (",a,")"]})]})]}),v&&!g&&t.jsxs("div",{className:"text-[11px] mb-3 px-3 py-2 rounded-lg",style:{background:"var(--accent-muted)",color:"var(--accent)"},children:["Click another version to compare with ",v]}),t.jsxs("div",{className:"relative",children:[t.jsx("div",{className:"absolute left-3 top-0 bottom-0",style:{width:2,background:"var(--border-subtle)"}}),t.jsx("div",{className:"space-y-1",children:f.map(V=>{const le=ul[V.certTier]||ul.COMMUNITY,H=V.version===v||V.version===g,U=V.isInstalled;return t.jsxs("button",{onClick:()=>C(V.version),className:"w-full text-left pl-8 pr-4 py-3 relative rounded-lg transition-all duration-150",style:{background:H?"var(--accent-muted)":"transparent",border:H?"1px solid var(--accent)":"1px solid transparent",cursor:"pointer"},onMouseEnter:re=>{H||(re.currentTarget.style.background="var(--surface-1)")},onMouseLeave:re=>{H||(re.currentTarget.style.background="transparent")},children:[t.jsx("span",{className:"absolute left-1.5 top-4 rounded-full",style:{width:U?10:8,height:U?10:8,background:U?"var(--accent)":"var(--surface-3)",border:U?"2px solid var(--accent)":"2px solid var(--border-default)"}}),t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:V.version}),t.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:le.bg,color:le.text},children:pu(V.certTier)}),t.jsx(Ko,{provider:h}),U&&t.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:"var(--accent-muted)",color:"var(--accent)"},children:"installed"})]}),t.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:new Date(V.createdAt).toLocaleDateString()})]}),(()=>{const re=I1(V.diffSummary);return re?t.jsx("div",{"data-testid":"version-row-diff-summary",className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:T1(re,80)}):null})()]},V.version)})}),t.jsx("div",{ref:I,style:{height:1}})]}),S&&t.jsx("div",{className:"mt-4",children:t.jsx("div",{className:"skeleton h-48 rounded-xl"})}),y&&!S&&t.jsx("div",{className:"mt-4",children:t.jsx(Ia,{contentDiff:y.contentDiff,fromLabel:y.from,toLabel:y.to,diffSummary:y.diffSummary,renderContext:"inline",onRetry:()=>v&&g&&L(y.from,y.to)})})]})}function A1(e){return e==="timeline"||e==="models"||e==="versions"}function P1({view:e}){return e==="models"?t.jsx(y1,{}):e==="versions"?t.jsx(L1,{}):t.jsx(i1,{})}function $1(e){const r={prompt:e.prompt,provider:e.provider,model:e.model};return e.targetAgents&&e.targetAgents.length>0&&(r.targetAgents=e.targetAgents),r}function M1(e){var o;const r=e.userName.trim().length>0,n=e.userPlugin.trim().length>0||e.userNewPlugin.trim().length>0,s=e.forceLayout===3;return{applyName:r?null:e.aiName??null,applySuggestedPlugin:!s&&!n&&!!((o=e.aiSuggestedPlugin)!=null&&o.plugin),suggestedPluginValue:s||n?null:e.aiSuggestedPlugin??null}}function Tr(e,r=!0){let n=e.toLowerCase().replace(/[^a-z0-9]+/g,"-");return r&&(n=n.replace(/^-+|-+$/g,"")),n}function F1(e,r,n,s){const a=`.../${e.split("/").slice(-2).join("/")}`;switch(r){case 1:return`${a}/${n}/skills/${s}/SKILL.md`;case 2:return`${a}/plugins/${n}/skills/${s}/SKILL.md`;case 3:return`${a}/skills/${s}/SKILL.md`}}function D1({onCreated:e,resolveAiConfigOverride:r,forceLayout:n,flushPendingForSkillName:s}){const[o,a]=c.useState("ai"),[i,l]=c.useState(null),[d,u]=c.useState(!0),{config:p}=yr(),[f,h]=c.useState(""),[m,v]=c.useState(n??3),[x,g]=c.useState(""),[b,y]=c.useState(""),[j,S]=c.useState(""),[k,T]=c.useState(""),[w,E]=c.useState(""),[R,N]=c.useState(""),[I,A]=c.useState("write"),[$,W]=c.useState([]),[C,L]=c.useState(!1),[P,F]=c.useState(null),[V,le]=c.useState(null),[H,U]=c.useState(null),[re,xe]=c.useState("vskill"),[he,z]=c.useState("1.0.0"),[X,M]=c.useState(!0),O=c.useCallback(async()=>{try{const Te=await de.detectEngines();U(Te),xe(Ee=>Ee!=="vskill"?Ee:Te.vskillSkillBuilder?"vskill":Te.anthropicSkillCreator?"anthropic-skill-creator":"none")}catch{U({vskillSkillBuilder:!1,anthropicSkillCreator:!1,vskillVersion:null,anthropicPath:null})}},[]);c.useEffect(()=>{O()},[O]);const[G,K]=c.useState(""),[te,ee]=c.useState(!1),[q,oe]=c.useState(!1),[ve,ke]=c.useState(null),[_,Y]=c.useState(null),[Z,ne]=c.useState([]),fe=c.useRef(null),me=c.useRef(null),ce=c.useRef(null),ue=c.useRef(null),je=c.useRef(null),[Re,Ae]=c.useState(!1),[Me,_e]=c.useState(!1),Oe=c.useRef(f),J=c.useRef(x),Pe=c.useRef(b);c.useEffect(()=>{Oe.current=f},[f]),c.useEffect(()=>{J.current=x},[x]),c.useEffect(()=>{Pe.current=b},[b]),c.useEffect(()=>{de.getProjectLayout().then(Te=>{if(l(Te),n)return;v(Te.suggestedLayout);const Ee=Te.detectedLayouts.find(We=>We.layout===Te.suggestedLayout);Ee!=null&&Ee.existingPlugins.length&&g(Ee.existingPlugins[0])}).catch(()=>{}).finally(()=>u(!1))},[n]),c.useEffect(()=>{var Te;o==="ai"&&((Te=fe.current)==null||Te.focus())},[o]),c.useEffect(()=>()=>{var Te;(Te=me.current)==null||Te.abort()},[]);const Je=c.useMemo(()=>{var Te;return i?((Te=i.detectedLayouts.find(Ee=>Ee.layout===m))==null?void 0:Te.existingPlugins)||[]:[]},[i,m]),De=x==="__new__"?b:x,Ze=i?F1(i.root,m,De||"{plugin}",f||"{skill}"):"",et=c.useMemo(()=>i?i.detectedLayouts.filter(Te=>Te.layout!==4):[],[i]),ft=c.useMemo(()=>{if(!i)return null;const Te=i.detectedLayouts.find(lt=>lt.layout===2&&lt.existingPlugins.length>0),Ee=i.detectedLayouts.find(lt=>lt.layout===1&&lt.existingPlugins.length>0),We=Te||Ee;return We?{layout:We.layout,plugins:We.existingPlugins}:null},[i]),Ye=c.useCallback(()=>{if(r)return r();if(!p)return{provider:"claude-cli",model:"sonnet"};const Te=p.provider||"claude-cli",Ee=p.model||"sonnet";return{provider:Te,model:Ee}},[p,r]),at=c.useCallback(()=>{var Te;(Te=me.current)==null||Te.abort(),ee(!1)},[]),it=c.useCallback(()=>{ke(null),Y(null)},[]),kt=c.useCallback(async()=>{var lt,Qt;if(ke(null),Y(null),ne([]),ce.current=null,ue.current=null,!G.trim()){ke("Describe what your skill should do");return}ee(!0);const Te=new AbortController;me.current=Te;const{provider:Ee,model:We}=Ye();try{const Pt=await fetch("/api/skills/generate?sse",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($1({prompt:G.trim(),provider:Ee,model:We,targetAgents:$})),signal:Te.signal});if(!Pt.ok||!Pt.body){let wr=`HTTP ${Pt.status}`;try{const Xt=await Pt.json();Xt.error&&(wr=Xt.error)}catch{}throw new Error(wr)}const bs=Pt.body.getReader(),ks=new TextDecoder;let Ur="",Vt="";for(;;){const{done:wr,value:Xt}=await bs.read();if(wr)break;Ur+=ks.decode(Xt,{stream:!0});const Nn=Ur.split(`
60
+ `);Ur=Nn.pop()||"";for(const tt of Nn)if(tt.startsWith("event: "))Vt=tt.slice(7).trim();else if(tt.startsWith("data: ")){try{const ze=JSON.parse(tt.slice(6));if(Vt==="progress")ne(dr=>[...dr,{phase:ze.phase,message:ze.message,timestamp:Date.now()}]);else if(Vt==="provenance")ue.current={resolvedModelId:typeof ze.resolvedModelId=="string"?ze.resolvedModelId:null,snapshotDate:typeof ze.snapshotDate=="string"?ze.snapshotDate:null};else if(Vt==="done"||Vt==="complete"){const dr={prompt:G.trim(),provider:Ye().provider,model:Ye().model,resolvedModelId:((lt=ue.current)==null?void 0:lt.resolvedModelId)??null,snapshotDate:((Qt=ue.current)==null?void 0:Qt.snapshotDate)??null,reasoning:ze.reasoning||""},Zt=M1({userName:Oe.current,userPlugin:J.current,userNewPlugin:Pe.current,aiName:ze.name,aiSuggestedPlugin:ze.suggestedPlugin&&ze.suggestedPlugin.plugin?{plugin:ze.suggestedPlugin.plugin,layout:ze.suggestedPlugin.layout}:null,forceLayout:n});if(Zt.applyName!==null&&h(Zt.applyName),S(ze.description),T(ze.model||""),E(ze.allowedTools||""),N(ze.body),oe(!0),ce.current=dr,a("manual"),n===3)v(3),g(""),y("");else if(Zt.applySuggestedPlugin&&Zt.suggestedPluginValue){const dt=Zt.suggestedPluginValue;if(((i==null?void 0:i.detectedLayouts.flatMap(er=>er.existingPlugins))??[]).includes(dt.plugin))if(g(dt.plugin),dt.layout&&(dt.layout===1||dt.layout===2))v(dt.layout);else{const er=i==null?void 0:i.detectedLayouts.find(js=>js.existingPlugins.includes(dt.plugin));er&&(er.layout===1||er.layout===2)&&v(er.layout)}else g("__new__"),y(dt.plugin)}else!Zt.applySuggestedPlugin&&J.current.trim().length===0&&Pe.current.trim().length===0&&m===3&&ft&&_e(!0);const Rn={name:ze.name,plugin:De||"",layout:m,description:ze.description,model:ze.model||void 0,allowedTools:ze.allowedTools||void 0,body:ze.body,aiMeta:dr};de.saveDraft(Rn).then(dt=>{Ae(!0),dt!=null&&dt.dir&&(je.current=dt.dir)}).catch(()=>{})}else Vt==="error"&&(ke(ze.message||ze.description||"Unknown error"),ze.category&&Y(ze))}catch{}Vt=""}}}catch(Pt){Pt.name!=="AbortError"&&ke(Pt.message)}finally{ee(!1),me.current=null}},[G,Ye,m,ft,De,i,$,n]),jt=c.useCallback(async()=>{var Te;if(F(null),le(null),!f.trim()){F("Skill name is required");return}if(!j.trim()){F("Description is required");return}if(m!==3&&!De.trim()){F("Plugin name is required");return}if(!X){F("Version is not valid semver");return}L(!0);try{if(s)try{await s(Tr(f))}catch(We){F(`Could not finalize previous delete of ${Tr(f)}: ${We.message}. Cancel the pending delete and try again.`),L(!1);return}const Ee=await de.createSkill({name:Tr(f),plugin:De||"",layout:m,description:j,model:k||void 0,allowedTools:w||void 0,body:R,aiMeta:ce.current||void 0,draftDir:je.current||void 0,version:he.trim()||void 0,engine:re});je.current=null,e(Ee.plugin,Ee.skill)}catch(Ee){if(Ee instanceof Kt&&Ee.status===409&&((Te=Ee.details)==null?void 0:Te.code)==="skill-already-exists"){const We=typeof Ee.details.plugin=="string"?Ee.details.plugin:"",lt=typeof Ee.details.skill=="string"?Ee.details.skill:Tr(f);le("Skill already existed — opened it."),je.current=null,e(We,lt)}else F(Ee.message)}finally{L(!1)}},[f,j,m,De,k,w,R,he,X,re,e,s]),At=c.useCallback(()=>{ft&&(v(ft.layout),g(ft.plugins[0]),_e(!1))},[ft]);return{mode:o,setMode:a,layout:i,layoutLoading:d,selectedLayout:m,setSelectedLayout:v,creatableLayouts:et,availablePlugins:Je,pathPreview:Ze,plugin:x,setPlugin:g,newPlugin:b,setNewPlugin:y,effectivePlugin:De,name:f,setName:h,description:j,setDescription:S,model:k,setModel:T,allowedTools:w,setAllowedTools:E,body:R,setBody:N,bodyViewMode:I,setBodyViewMode:A,aiPrompt:G,setAiPrompt:K,generating:te,aiGenerated:q,aiError:ve,aiClassifiedError:_,aiProgress:Z,promptRef:fe,handleGenerate:kt,handleCancelGenerate:at,clearAiError:it,targetAgents:$,setTargetAgents:W,draftSaved:Re,showPluginRecommendation:Me,setShowPluginRecommendation:_e,pluginLayoutInfo:ft,applyPluginRecommendation:At,creating:C,error:P,info:V,handleCreate:jt,engineDetection:H,refreshEngineDetection:O,engine:re,setEngine:xe,version:he,setVersion:z,versionValid:X,setVersionValid:M,standaloneLocked:n===3}}const z1={flushBySkillName:async()=>{}},fu=c.createContext(z1);function B1(){return c.useContext(fu)}function hu(){return t.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function _1(){return t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t.jsx("polyline",{points:"14 2 14 8 20 8"})]})}function mu({node:e,depth:r=0}){var n;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-1.5 py-0.5",style:{paddingLeft:`${r*16}px`,color:e.type==="dir"?"var(--text-secondary)":"var(--text-tertiary)",fontSize:12,fontFamily:"var(--font-mono, monospace)"},children:[e.type==="dir"?t.jsx(hu,{}):t.jsx(_1,{}),t.jsxs("span",{children:[e.name,e.type==="dir"?"/":""]})]}),(n=e.children)==null?void 0:n.map(s=>t.jsx(mu,{node:s,depth:r+1},s.name))]})}function O1(e,r,n){const s=[];r&&s.push({name:"evals.json",type:"file"}),s.push({name:"history",type:"dir"});const o=[{name:"SKILL.md",type:"file"},{name:"evals",type:"dir",children:s}];return n&&o.push({name:"draft.json",type:"file"}),{name:e||"{skill}",type:"dir",children:o}}function W1({skillName:e,hasEvals:r,isDraft:n}){const s=O1(e,r,n);return t.jsxs("div",{className:"glass-card p-4",children:[t.jsxs("h3",{className:"text-[13px] font-semibold mb-3 flex items-center gap-2",style:{color:"var(--text-primary)"},children:[t.jsx("div",{className:"w-5 h-5 rounded-md flex items-center justify-center",style:{background:"var(--accent-muted)"},children:t.jsx(hu,{})}),"Skill Structure"]}),t.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-0)",border:"1px solid var(--border-subtle)"},children:t.jsx(mu,{node:s})})]})}const nr={background:"var(--surface-3)",color:"var(--text-primary)",border:"1px solid var(--border-subtle)"};function Zs({size:e=14,color:r="currentColor"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.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 U1({onCreated:e,onCancel:r}){const{flushBySkillName:n}=B1(),s=D1({onCreated:e,flushPendingForSkillName:n});return t.jsxs("div",{className:"px-8 py-6 max-w-4xl animate-fade-in overflow-auto h-full",children:[t.jsxs("div",{className:"mb-5",children:[t.jsx("h2",{className:"text-[20px] font-semibold tracking-tight",style:{color:"var(--text-primary)"},children:"Create a New Skill"}),t.jsx("div",{className:"flex items-center justify-between mt-2",children:t.jsxs("div",{className:"inline-flex rounded-lg p-0.5",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[t.jsx("button",{onClick:()=>s.setMode("ai"),className:"px-3 py-1.5 rounded-md text-[12px] font-medium transition-all duration-200",style:{background:s.mode==="ai"?"rgba(168,85,247,0.15)":"transparent",color:s.mode==="ai"?"#a855f7":"var(--text-tertiary)",boxShadow:s.mode==="ai"?"0 1px 3px rgba(168,85,247,0.15)":"none",cursor:"pointer",border:"none"},children:t.jsxs("span",{className:"flex items-center gap-1.5",children:[t.jsx(Zs,{size:12}),"AI-Assisted"]})}),t.jsx("button",{onClick:()=>s.setMode("manual"),className:"px-3 py-1.5 rounded-md text-[12px] font-medium transition-all duration-200",style:{background:s.mode==="manual"?"var(--surface-4, var(--surface-3))":"transparent",color:s.mode==="manual"?"var(--text-primary)":"var(--text-tertiary)",boxShadow:s.mode==="manual"?"0 1px 3px rgba(0,0,0,0.1)":"none",cursor:"pointer",border:"none"},children:"Manual"})]})})]}),s.layoutLoading&&t.jsxs("div",{className:"space-y-3",children:[t.jsx("div",{className:"skeleton h-10 w-full rounded-lg"}),t.jsx("div",{className:"skeleton h-10 w-full rounded-lg"})]}),!s.layoutLoading&&s.layout&&s.mode==="ai"&&t.jsxs("div",{className:"space-y-4 animate-fade-in",children:[t.jsxs("div",{className:"glass-card p-4",children:[t.jsxs("h3",{className:"text-[13px] font-semibold mb-3 flex items-center gap-2",style:{color:"var(--text-primary)"},children:[t.jsx("div",{className:"w-5 h-5 rounded-md flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:t.jsx(Zs,{size:11,color:"#a855f7"})}),"Describe Your Skill"]}),t.jsx("textarea",{ref:s.promptRef,value:s.aiPrompt,onChange:o=>s.setAiPrompt(o.target.value),placeholder:`e.g., A skill that helps format SQL queries, optimize them for performance, and explain query execution plans.
61
+
62
+ Include any specific behaviors, constraints, or output formats you want.`,rows:5,disabled:s.generating,className:"w-full px-3 py-2.5 rounded-lg text-[13px] resize-y",style:{...nr,minHeight:"120px"},onKeyDown:o=>{o.key==="Enter"&&(o.metaKey||o.ctrlKey)&&(o.preventDefault(),s.handleGenerate())}}),t.jsx("p",{className:"text-[11px] mt-2",style:{color:"var(--text-quaternary, var(--text-tertiary))"},children:"Cmd+Enter to generate"})]}),s.generating&&s.aiProgress.length>0&&t.jsx(En,{entries:s.aiProgress,isRunning:!0}),s.aiError&&t.jsx("div",{children:s.aiClassifiedError?t.jsx(ys,{error:s.aiClassifiedError,onRetry:s.handleGenerate,onDismiss:s.clearAiError}):t.jsxs("div",{children:[t.jsx("div",{className:"px-4 py-3 rounded-lg text-[13px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid rgba(248,113,113,0.2)"},children:s.aiError}),t.jsx("button",{onClick:s.handleGenerate,className:"mt-2 text-[12px] font-medium",style:{color:"#a855f7",background:"none",border:"none",cursor:"pointer"},children:"Retry"})]})}),t.jsxs("div",{className:"flex items-center gap-3",children:[s.generating?t.jsx("button",{onClick:s.handleCancelGenerate,className:"px-5 py-2.5 rounded-lg text-[13px] font-medium transition-all duration-150 flex items-center gap-2",style:{background:"var(--surface-3)",color:"var(--text-secondary)",border:"none",cursor:"pointer"},children:"Cancel Generation"}):t.jsxs("button",{onClick:s.handleGenerate,disabled:!s.aiPrompt.trim(),className:"px-5 py-2.5 rounded-lg text-[13px] font-medium transition-all duration-150 flex items-center gap-2",style:{background:s.aiPrompt.trim()?"#a855f7":"var(--surface-3)",color:s.aiPrompt.trim()?"#fff":"var(--text-tertiary)",cursor:s.aiPrompt.trim()?"pointer":"not-allowed",border:"none"},children:[t.jsx(Zs,{size:14}),"Generate"]}),t.jsx("button",{onClick:r,className:"px-4 py-2.5 rounded-lg text-[13px] font-medium",style:{color:"var(--text-secondary)",background:"none",border:"none",cursor:"pointer"},children:"Cancel"}),!s.generating&&t.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:["or fill in the form manually",t.jsx("button",{onClick:()=>s.setMode("manual"),className:"ml-1 font-medium",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"below"})]})]})]}),!s.layoutLoading&&s.layout&&s.mode==="manual"&&t.jsxs("div",{className:"space-y-4 animate-fade-in",children:[t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("h3",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Location"}),s.creatableLayouts.length>1&&t.jsxs("div",{className:"mb-3",children:[t.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Layout"}),t.jsx("div",{className:"flex gap-2",children:s.creatableLayouts.map(o=>t.jsx("button",{onClick:()=>{s.setSelectedLayout(o.layout),s.setPlugin(o.existingPlugins[0]||""),s.setNewPlugin("")},className:"px-3 py-1.5 rounded-lg text-[12px] font-medium transition-all duration-150",style:{background:s.selectedLayout===o.layout?"var(--accent)":"var(--surface-3)",color:s.selectedLayout===o.layout?"#fff":"var(--text-secondary)",border:`1px solid ${s.selectedLayout===o.layout?"var(--accent)":"var(--border-subtle)"}`,cursor:"pointer"},children:o.label},o.layout))})]}),s.selectedLayout!==3&&t.jsxs("div",{className:"mb-3",children:[t.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Plugin"}),t.jsxs("select",{value:s.plugin,onChange:o=>{s.setPlugin(o.target.value),s.setNewPlugin("")},className:"w-full px-3 py-2 rounded-lg text-[13px]",style:nr,children:[s.availablePlugins.map(o=>t.jsx("option",{value:o,children:o},o)),t.jsx("option",{value:"__new__",children:"+ New plugin..."})]}),s.plugin==="__new__"&&t.jsx("input",{type:"text",value:s.newPlugin,onChange:o=>s.setNewPlugin(Tr(o.target.value)),placeholder:"my-plugin",className:"w-full mt-2 px-3 py-2 rounded-lg text-[13px]",style:nr})]}),t.jsx("div",{className:"px-3 py-2 rounded-lg text-[11px] font-mono",style:{background:"var(--surface-0)",color:"var(--text-tertiary)",border:"1px solid var(--border-subtle)"},children:s.pathPreview})]}),s.showPluginRecommendation&&s.pluginLayoutInfo&&s.selectedLayout===3&&t.jsxs("div",{className:"px-4 py-3 rounded-lg text-[12px] animate-fade-in flex items-center justify-between gap-3",style:{background:"rgba(59,130,246,0.08)",color:"var(--text-secondary)",border:"1px solid rgba(59,130,246,0.2)"},children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#3b82f6",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("line",{x1:"12",y1:"16",x2:"12",y2:"12"}),t.jsx("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"})]}),t.jsxs("span",{children:["Plugins detected (",t.jsx("strong",{children:s.pluginLayoutInfo.plugins.slice(0,3).join(", ")}),"). Add this skill to a plugin for better organization."]})]}),t.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[t.jsx("button",{onClick:s.applyPluginRecommendation,className:"px-3 py-1 rounded-md text-[11px] font-medium",style:{background:"#3b82f6",color:"#fff",border:"none",cursor:"pointer"},children:"Use plugin"}),t.jsx("button",{onClick:()=>s.setShowPluginRecommendation(!1),className:"w-5 h-5 rounded flex items-center justify-center",style:{color:"var(--text-tertiary)",background:"none",border:"none",cursor:"pointer"},children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),t.jsxs("div",{className:"glass-card p-4",children:[t.jsx("h3",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Skill Details"}),t.jsxs("div",{className:"mb-3",children:[t.jsxs("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:["Name ",t.jsx("span",{style:{color:"var(--red)"},children:"*"})]}),t.jsx("input",{type:"text",value:s.name,onChange:o=>s.setName(Tr(o.target.value,!1)),placeholder:"my-skill",className:"w-full px-3 py-2 rounded-lg text-[13px]",style:nr})]}),t.jsxs("div",{className:"mb-3",children:[t.jsxs("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:["Description ",t.jsx("span",{style:{color:"var(--red)"},children:"*"})]}),t.jsx("textarea",{value:s.description,onChange:o=>s.setDescription(o.target.value),placeholder:"Brief description",rows:3,className:"w-full px-3 py-2 rounded-lg text-[13px] resize-y",style:{...nr,minHeight:"72px"}})]}),t.jsxs("div",{className:"flex gap-3",children:[t.jsxs("div",{className:"flex-1",children:[t.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Model"}),t.jsxs("select",{value:s.model,onChange:o=>s.setModel(o.target.value),className:"w-full px-3 py-2 rounded-lg text-[13px]",style:nr,children:[t.jsx("option",{value:"",children:"Any"}),t.jsx("option",{value:"opus",children:"Opus"}),t.jsx("option",{value:"sonnet",children:"Sonnet"}),t.jsx("option",{value:"haiku",children:"Haiku"})]})]}),t.jsxs("div",{className:"flex-1",children:[t.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Allowed Tools"}),t.jsx("input",{type:"text",value:s.allowedTools,onChange:o=>s.setAllowedTools(o.target.value),placeholder:"Read, Write, Edit...",className:"w-full px-3 py-2 rounded-lg text-[13px]",style:nr})]})]})]}),t.jsxs("div",{className:"glass-card p-4",children:[t.jsxs("div",{className:"flex items-center justify-between mb-3",children:[t.jsxs("div",{className:"flex items-center gap-2.5",children:[t.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"var(--accent-muted)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t.jsx("polyline",{points:"14 2 14 8 20 8"}),t.jsx("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),t.jsx("line",{x1:"16",y1:"17",x2:"8",y2:"17"})]})}),t.jsxs("div",{children:[t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md"}),t.jsx("span",{className:"text-[11px] ml-2",style:{color:"var(--text-tertiary)"},children:"Skill Definition"})]})]}),t.jsx("div",{className:"flex items-center",style:{background:"var(--surface-2)",borderRadius:8,padding:2,gap:1},children:["write","preview"].map(o=>t.jsxs("button",{onClick:()=>s.setBodyViewMode(o),className:"flex items-center gap-1 rounded-md transition-all duration-150",style:{padding:"4px 10px",background:s.bodyViewMode===o?"var(--surface-4)":"transparent",color:s.bodyViewMode===o?"var(--text-primary)":"var(--text-tertiary)",fontSize:11,fontWeight:s.bodyViewMode===o?600:400,border:"none",cursor:"pointer"},children:[o==="write"?t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("polyline",{points:"16 18 22 12 16 6"}),t.jsx("polyline",{points:"8 6 2 12 8 18"})]}):t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),t.jsx("circle",{cx:"12",cy:"12",r:"3"})]}),t.jsx("span",{children:o==="write"?"Write":"Preview"})]},o))})]}),s.bodyViewMode==="write"?t.jsx("textarea",{value:s.body,onChange:o=>s.setBody(o.target.value),placeholder:`# /my-skill
63
+
64
+ You are an expert at...
65
+ `,rows:8,className:"w-full px-3 py-2 rounded-lg text-[13px] font-mono resize-y",style:{...nr,minHeight:"150px"}}):s.body.trim()?t.jsx("div",{className:"text-[13px] leading-relaxed overflow-x-auto rounded-lg px-4 py-3",style:{background:"var(--surface-0)",color:"var(--text-secondary)",border:"1px solid var(--border-subtle)",minHeight:"150px",maxHeight:"400px",overflowY:"auto"},dangerouslySetInnerHTML:{__html:Cn(s.body)}}):t.jsx("div",{className:"text-[13px] leading-relaxed overflow-x-auto rounded-lg px-4 py-3",style:{background:"var(--surface-0)",color:"var(--text-secondary)",border:"1px solid var(--border-subtle)",minHeight:"150px",maxHeight:"400px",overflowY:"auto"},children:t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"Start writing to see preview"})})]}),t.jsx(W1,{skillName:s.name||"{skill}",hasEvals:!1,isDraft:s.draftSaved}),s.error&&t.jsx("div",{className:"px-4 py-3 rounded-lg text-[13px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid rgba(248,113,113,0.2)"},children:s.error}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("button",{onClick:s.handleCreate,disabled:s.creating||!s.name||!s.description,className:"px-5 py-2.5 rounded-lg text-[13px] font-medium transition-all duration-150",style:{background:s.creating||!s.name||!s.description?"var(--surface-3)":"var(--accent)",color:s.creating||!s.name||!s.description?"var(--text-tertiary)":"#fff",cursor:s.creating||!s.name||!s.description?"not-allowed":"pointer",border:"none"},children:s.creating?"Creating...":"Create Skill"}),t.jsx("button",{onClick:r,className:"px-4 py-2.5 rounded-lg text-[13px] font-medium",style:{color:"var(--text-secondary)",background:"none",border:"none",cursor:"pointer"},children:"Cancel"})]})]})]})}function pl(){return t.jsx("div",{className:"w-16 h-16 rounded-2xl flex items-center justify-center",style:{background:"var(--surface-2)"},children:t.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}),t.jsx("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),t.jsx("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"})]})})}function rn({variant:e,message:r,onRetry:n}){const{setMode:s,setSearch:o}=Lt(),[a,i]=c.useState(!1);return e==="no-selection"?t.jsxs("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in",children:[t.jsx("div",{className:"mb-5",children:a?t.jsx(pl,{}):t.jsx("img",{src:"/images/empty-studio.webp",width:128,height:128,alt:"",onError:()=>i(!0),style:{objectFit:"contain"}})}),t.jsx("p",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-secondary)"},children:"Select a skill to view details"}),t.jsx("p",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Choose a skill from the list to edit, test, and evaluate"})]}):e==="no-skills"?t.jsxs("div",{className:"text-center py-12 px-4 animate-fade-in-scale",children:[t.jsx("div",{className:"w-14 h-14 rounded-2xl flex items-center justify-center mx-auto mb-4",style:{background:"var(--surface-2)"},children:t.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"})})}),t.jsx("p",{className:"text-[14px] font-medium",style:{color:"var(--text-secondary)"},children:"No skills found"}),t.jsxs("p",{className:"text-[12px] mt-1 mb-4",style:{color:"var(--text-tertiary)"},children:["Check your ",t.jsx("code",{className:"px-1.5 py-0.5 rounded text-[11px]",style:{background:"var(--surface-2)"},children:"--root"})," directory, or create your first skill"]}),t.jsxs("button",{onClick:()=>s("create"),className:"inline-flex items-center gap-2 px-5 py-2.5 rounded-lg text-[13px] font-medium transition-all duration-150",style:{background:"var(--accent)",color:"#fff",border:"none",cursor:"pointer"},onMouseEnter:l=>{l.currentTarget.style.opacity="0.9"},onMouseLeave:l=>{l.currentTarget.style.opacity="1"},children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Create Your First Skill"]})]}):e==="no-project-skills"?t.jsxs("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in","data-testid":"empty-state-no-project-skills",children:[t.jsx("div",{className:"mb-5",children:a?t.jsx(pl,{}):t.jsx("img",{src:"/images/empty-studio.webp",width:128,height:128,alt:"",onError:()=>i(!0),style:{objectFit:"contain"}})}),t.jsx("p",{className:"text-[15px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No skills installed for this project yet."}),t.jsx("p",{className:"text-[12px] mb-5",style:{color:"var(--text-tertiary)",maxWidth:360,textAlign:"center"},children:"Browse the marketplace to install one, or author a new skill from scratch."}),t.jsxs("div",{className:"flex gap-3",children:[t.jsxs("button",{type:"button","data-testid":"empty-state-browse-marketplaces",onClick:()=>{window.dispatchEvent(new CustomEvent("studio:open-marketplace"))},className:"inline-flex items-center gap-2 px-4 py-2 rounded-lg text-[13px] font-medium transition-all duration-150",style:{background:"var(--accent)",color:"#fff",border:"none",cursor:"pointer"},"aria-label":"Browse marketplaces",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("circle",{cx:"9",cy:"21",r:"1"}),t.jsx("circle",{cx:"20",cy:"21",r:"1"}),t.jsx("path",{d:"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"})]}),"Browse marketplaces"]}),t.jsxs("button",{type:"button","data-testid":"empty-state-create-skill",onClick:()=>s("create"),className:"inline-flex items-center gap-2 px-4 py-2 rounded-lg text-[13px] font-medium transition-all duration-150",style:{background:"var(--surface-2)",color:"var(--text-primary)",border:"1px solid var(--border-default, var(--border-subtle))",cursor:"pointer"},"aria-label":"Create new skill",children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Create new skill"]})]})]}):e==="error"?t.jsx("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in",children:t.jsxs("div",{className:"px-5 py-4 rounded-lg text-center max-w-sm",style:{background:"var(--red-muted)",border:"1px solid rgba(248,113,113,0.2)"},children:[t.jsx("p",{className:"text-[13px] mb-3",style:{color:"var(--red)"},children:r||"Failed to load skill data"}),n&&t.jsx("button",{onClick:n,className:"px-4 py-2 rounded-lg text-[12px] font-medium",style:{background:"var(--surface-3)",color:"var(--text-primary)",border:"none",cursor:"pointer"},children:"Retry"})]})}):t.jsxs("div",{className:"px-4 py-8 text-center animate-fade-in",children:[t.jsx("p",{className:"text-[13px] mb-2",style:{color:"var(--text-tertiary)"},children:"No skills match your search"}),t.jsx("button",{onClick:()=>o(""),className:"text-[12px] font-medium",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer",textDecoration:"underline"},children:"Clear search"})]})}function H1(e,r){const[n,s]=e.split(".").map(Number),[o,a]=r.split(".").map(Number);return o>n?"major":a>s?"minor":"patch"}const V1={major:{bg:"var(--red-muted)",text:"var(--red)"},minor:{bg:"var(--yellow-muted)",text:"var(--yellow)"},patch:{bg:"var(--green-muted)",text:"var(--green)"}};function xu(){const[e,r]=c.useState([]),[n,s]=c.useState(!0),[o,a]=c.useState(new Set),[i,l]=c.useState(new Map),[d,u]=c.useState(!1),[p,f]=c.useState(new Set),[h,m]=c.useState(new Map),[v,x]=c.useState(null),[g,b]=c.useState(null),[y,j]=c.useState(!1),S=c.useCallback(async()=>{s(!0);try{const I=await de.getSkillUpdates();r(I.filter(A=>A.updateAvailable))}catch{r([])}finally{s(!1)}},[]);c.useEffect(()=>{S()},[S]);const k=c.useMemo(()=>e.filter(I=>!I.pinned),[e]),T=c.useCallback(I=>{a(A=>{const $=new Set(A);return $.has(I)?$.delete(I):$.add(I),$})},[]),w=c.useCallback(()=>{o.size===k.length?a(new Set):a(new Set(k.map(I=>I.name)))},[o,k]),E=c.useCallback(()=>{const I=[...o];if(!I.length)return;u(!0),l(new Map(I.map($=>[$,{skill:$,status:"pending"}])));const A=de.startBatchUpdate(I);A.addEventListener("progress",$=>{try{const W=JSON.parse($.data);l(C=>new Map(C).set(W.skill,W))}catch{}}),A.addEventListener("done",$=>{A.close(),u(!1);try{const W=JSON.parse($.data);x(`Updated ${W.updated??0} skills, ${W.failed??0} failed`),setTimeout(()=>x(null),5e3)}catch{}S()}),A.addEventListener("error",()=>{A.close(),u(!1),x("Batch update failed"),setTimeout(()=>x(null),5e3)})},[o,S]),R=c.useCallback(async I=>{const A=I.name.split("/"),$=A.length>=3?A[A.length-2]:A[0],W=A[A.length-1];f(C=>new Set(C).add(I.name)),m(C=>{const L=new Map(C);return L.delete(I.name),L});try{const C=await de.postSkillUpdate($,W);if(C.ok)S();else{const L=`Update failed (HTTP ${C.status}): ${C.body}`;m(P=>new Map(P).set(I.name,L)),x(`Couldn't update ${W} — HTTP ${C.status}`),setTimeout(()=>x(null),5e3)}}catch(C){const L=C instanceof Error?C.message:"Network error";m(P=>new Map(P).set(I.name,L)),x(`Couldn't update ${W} — ${L}`),setTimeout(()=>x(null),5e3)}finally{f(C=>{const L=new Set(C);return L.delete(I.name),L})}},[S]),N=c.useCallback(async I=>{if(!I.latest)return;const A=I.name.split("/"),$=A.length>=3?A[A.length-2]:A[0],W=A[A.length-1];j(!0);try{const C=await de.getVersionDiff($,W,I.installed,I.latest);b({skill:I,diff:C})}catch{b(null)}finally{j(!1)}},[]);return n?t.jsxs("div",{"data-testid":"updates-panel",className:"p-6",children:[t.jsx("div",{className:"skeleton h-6 w-48 mb-4"}),t.jsxs("div",{className:"space-y-3",children:[t.jsx("div",{className:"skeleton h-16 rounded-lg"}),t.jsx("div",{className:"skeleton h-16 rounded-lg"})]})]}):e.length===0?t.jsxs("div",{"data-testid":"updates-panel",className:"flex flex-col items-center justify-center h-full py-16",children:[t.jsxs("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",className:"mb-4",children:[t.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),t.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),t.jsx("div",{className:"text-[15px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"All skills are up to date"}),t.jsx("div",{className:"text-[12px] mb-4",style:{color:"var(--text-tertiary)"},children:"No updates available for installed skills."}),t.jsx("button",{onClick:S,className:"btn btn-secondary text-[12px]",children:"Refresh"})]}):t.jsxs("div",{"data-testid":"updates-panel",className:"p-6",children:[v&&t.jsx("div",{className:"fixed top-4 right-4 z-50 px-4 py-3 rounded-lg text-[13px] font-medium animate-fade-in",style:{background:"var(--surface-3)",color:"var(--text-primary)",border:"1px solid var(--border-subtle)"},children:v}),t.jsxs("div",{className:"flex items-center justify-between mb-5",children:[t.jsxs("div",{className:"text-[16px] font-semibold",style:{color:"var(--text-primary)"},children:["Available Updates (",k.length,")"]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("button",{onClick:S,className:"btn btn-ghost text-[12px]",disabled:d,children:"Refresh"}),t.jsx("button",{onClick:E,disabled:o.size===0||d,className:"btn btn-primary text-[12px]",children:d?"Updating...":`Update Selected (${o.size})`})]})]}),t.jsx("div",{className:"flex items-center gap-2 mb-3",children:t.jsxs("button",{onClick:w,className:"flex items-center gap-2 text-[12px] font-medium",style:{color:"var(--text-secondary)",background:"transparent",border:"none",cursor:"pointer"},children:[t.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:o.size===k.length&&k.length>0?"var(--accent)":"var(--border-default)",background:o.size===k.length&&k.length>0?"var(--accent)":"transparent"},children:o.size===k.length&&k.length>0&&t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})}),"Select All"]})}),t.jsx("div",{className:"space-y-2",children:e.map(I=>{const A=I.name.split("/").pop()||I.name,$=I.latest?H1(I.installed,I.latest):"patch",W=V1[$],C=!!I.pinned,L=p.has(I.name),P=i.get(I.name),F=o.has(I.name);return t.jsx("div",{className:"rounded-lg px-4 py-3 transition-all duration-150",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)",opacity:C?.7:1},children:t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("button",{onClick:()=>!C&&T(I.name),disabled:C,className:"flex-shrink-0",style:{background:"transparent",border:"none",cursor:C?"not-allowed":"pointer"},children:t.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:F?"var(--accent)":"var(--border-default)",background:F?"var(--accent)":"transparent",opacity:C?.4:1},children:F&&t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[t.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:A}),C&&t.jsx("span",{className:"text-[10px]",title:"Pinned — unpin from CLI to update",children:"📌"}),t.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:W.bg,color:W.text},children:$})]}),t.jsxs("div",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[I.installed," → ",I.latest||"?",C&&` (pinned at ${I.pinnedVersion||I.installed})`]})]}),P&&t.jsxs("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:P.status==="done"?"var(--green-muted)":P.status==="error"?"var(--red-muted)":"var(--yellow-muted)",color:P.status==="done"?"var(--green)":P.status==="error"?"var(--red)":"var(--yellow)"},children:[P.status,P.error&&`: ${P.error}`]}),t.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[t.jsx("button",{onClick:()=>N(I),className:"btn btn-ghost text-[11px]",disabled:y,children:"View Changes"}),t.jsx("button",{onClick:()=>R(I),disabled:C||L||d,title:C?"Pinned — unpin from CLI to update":"",className:`btn ${C?"btn-ghost":"btn-primary"} text-[11px]`,children:L?t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"spinner spinner-sm"})," Updating"]}):(P==null?void 0:P.status)==="done"?t.jsx("span",{style:{color:"var(--green)"},children:"✓"}):"Update"})]})]})},I.name)})}),g&&t.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{background:"rgba(0,0,0,0.5)"},onClick:()=>b(null),children:t.jsxs("div",{style:{width:"80%",maxWidth:900},onClick:I=>I.stopPropagation(),children:[t.jsx("div",{className:"mb-2 flex justify-end",children:t.jsx("button",{onClick:()=>b(null),className:"btn btn-ghost text-[12px]",children:"Close"})}),t.jsx(Ia,{contentDiff:g.diff.contentDiff,fromLabel:g.diff.from,toLabel:g.diff.to,diffSummary:g.diff.diffSummary,renderContext:"inline"})]})})]})}const G1=Object.freeze(Object.defineProperty({__proto__:null,UpdatesPanel:xu},Symbol.toStringTag,{value:"Module"}));function K1(e){return e==null?"var(--text-tertiary)":e>=.7?"var(--green)":e>=.4?"var(--yellow)":"var(--red)"}function q1(e){return e==null?"var(--surface-3)":e>=.7?"var(--green-muted)":e>=.4?"var(--yellow-muted)":"var(--red-muted)"}function Y1(e){if(!e||typeof e!="string")return null;const r=e.trim();if(!r)return null;if(!r.includes("://")){const[n]=r.split("/");return n&&/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/.test(n)?n:null}try{const n=new URL(r),s=n.hostname.toLowerCase();if(s!=="github.com"&&s!=="www.github.com"&&s!=="raw.githubusercontent.com")return null;const a=n.pathname.split("/").filter(Boolean)[0];return!a||!/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/.test(a)?null:a}catch{return null}}function gu(e){const{author:r,repoUrl:n}=e,s=Y1(n??null),o=r&&r.trim()!==""?r:s??"—",[a,i]=c.useState(!1),l=c.useCallback(async()=>{var d;try{await((d=navigator.clipboard)==null?void 0:d.writeText(o)),i(!0),setTimeout(()=>i(!1),1500)}catch{}},[o]);return s?t.jsx("a",{"data-testid":e["data-testid"]??"author-link",href:`https://github.com/${s}`,target:"_blank",rel:"noopener noreferrer",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-accent, var(--text-primary))",textDecoration:"none",borderBottom:"1px dotted var(--border-default, var(--border))",whiteSpace:"nowrap"},children:o}):!r||r.trim()===""?t.jsx("span",{"data-testid":e["data-testid"]??"author-link-empty",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:"—"}):t.jsxs("button",{type:"button","data-testid":e["data-testid"]??"author-copy",title:`Copy "${o}"`,onClick:l,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",border:"1px solid var(--border-default, var(--border))",borderRadius:4,background:"transparent",fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap"},children:[o,t.jsx("span",{"aria-hidden":"true",style:{fontSize:10,opacity:.7},children:a?"✓":"⧉"})]})}function vu(e){let r=e.split("#")[0].split("?")[0].replace(/\/+$/,"");return r=r.replace(/\/(?:tree|blob)\/[^/]+(?:\/.*)?$/,""),r}function J1(e,r){const n=vu(e),s=(r??"").replace(/^\/+/,"").replace(/\/+$/,"");return s?`${n}/blob/HEAD/${s}`:`${n}/blob/HEAD/`}function fl(e){if(!e)return"source";const r=e.replace(/\/+$/,""),n=r.lastIndexOf("/");return n===-1?r:r.slice(n+1)}function yu(e){const{repoUrl:r,skillPath:n,absolutePath:s}=e,[o,a]=c.useState(!1),i=typeof r=="string"&&r.trim()!==""&&/^https?:\/\//.test(r.trim()),l=n?fl(n):s?fl(s):"source",d=c.useCallback(async()=>{var f;const p=s??n??"";if(p)try{await((f=navigator.clipboard)==null?void 0:f.writeText(p)),a(!0),setTimeout(()=>a(!1),1500)}catch{}},[s,n]);if(i){const p=J1(r,n);return t.jsxs("a",{"data-testid":e["data-testid"]??"source-file-link",href:p,target:"_blank",rel:"noopener noreferrer",title:p,style:{display:"inline-flex",alignItems:"center",gap:4,fontFamily:"var(--font-mono, var(--font-geist-mono))",fontSize:12,color:"var(--text-accent, var(--text-primary))",textDecoration:"none",whiteSpace:"nowrap",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis"},children:[t.jsx("span",{children:l}),t.jsx("span",{"aria-hidden":"true",children:"↗"})]})}if(!s&&!n)return t.jsx("span",{"data-testid":e["data-testid"]??"source-file-empty",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:"—"});const u=s??n??"";return t.jsxs("button",{type:"button","data-testid":e["data-testid"]??"source-file-copy",title:`Copy ${u}`,onClick:d,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",border:"1px solid var(--border-default, var(--border))",borderRadius:4,background:"transparent",fontFamily:"var(--font-mono, var(--font-geist-mono))",fontSize:12,color:"var(--text-secondary)",cursor:"pointer",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[t.jsx("span",{children:l}),t.jsx("span",{"aria-hidden":"true",style:{fontSize:10,opacity:.7},children:o?"✓":"⧉"})]})}const Q1=/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/,X1=/^[A-Za-z0-9._-]+$/;function Z1(e){if(!e||typeof e!="string")return null;const r=e.trim();if(!r)return null;let n;try{n=vu(r)}catch{return null}let s;try{s=new URL(n)}catch{return null}const o=s.hostname.toLowerCase();if(o!=="github.com"&&o!=="www.github.com")return null;const a=s.pathname.split("/").filter(Boolean);if(a.length!==2)return null;const i=a[0],l=a[1].replace(/\.git$/i,"");return!Q1.test(i)||!l||!X1.test(l)?null:{owner:i,repo:l}}function e0(e){return!e||typeof e!="string"?null:e.trim().split("/").map(n=>n.trim()).filter(Boolean).at(-1)??null}function t0(e,r){const n=e0(r);return n?`https://verified-skill.com/skills/${[e.owner,e.repo,n].map(encodeURIComponent).join("/")}`:null}function r0(e){const r=Z1(e.repoUrl??null);if(!r)return null;const n=t0(r,e.skillName)??`https://github.com/${r.owner}/${r.repo}`;return t.jsxs("a",{"data-testid":e["data-testid"]??"repo-link",href:n,target:"_blank",rel:"noopener noreferrer",title:n,style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-accent, var(--text-primary))",textDecoration:"none",borderBottom:"1px dotted var(--border-default, var(--border))",whiteSpace:"nowrap"},children:[r.owner,"/",r.repo]})}function hl(e,r="info"){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:e,severity:r}}))}function bu(e){return e.skill?s0({skill:e.skill,repoVisibility:e.repoVisibility,tenantName:e.tenantName}):a0({state:e.state,isReadOnly:e.isReadOnly,onDelete:e.onDelete})}function n0(e,r=48){if(e.length<=r)return e;const n=e.slice(0,12),s=e.slice(e.length-(r-12-1));return`${n}…${s}`}function s0({skill:e,repoVisibility:r,tenantName:n}){const[s,o]=c.useState(!1),a=r==="private",i=(e.sourcePath??e.dir)||"—",l=c.useCallback(async()=>{var p;try{await((p=navigator.clipboard)==null?void 0:p.writeText(i)),o(!0),setTimeout(()=>o(!1),1500),hl(B.toasts.pathCopied,"info")}catch{hl(B.toasts.permissionDenied,"error")}},[i]),d=e.source==="project"?"Project":e.source==="personal"?"Personal":e.source==="plugin"?"Plugins":e.origin==="installed"?"Personal":"Skills",u=e.source==="project"?"var(--status-installed)":e.source==="plugin"?"var(--color-accent-ink)":"var(--status-own)";return t.jsxs("div",{"data-testid":"detail-header",style:{background:"var(--bg-surface)",border:"1px solid var(--border-default)",borderRadius:8,padding:"14px 16px",boxShadow:"none"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",marginBottom:4},children:[t.jsx("span",{"data-testid":"detail-header-plugin",children:e.plugin}),t.jsx("span",{"aria-hidden":"true",style:{color:"var(--text-secondary)"},children:"›"}),t.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,color:"var(--text-secondary)",fontSize:11,letterSpacing:.3,textTransform:"uppercase"},children:[t.jsx("span",{"data-origin-dot":e.origin,"aria-label":`Origin: ${d}`,style:{display:"inline-block",width:7,height:7,borderRadius:999,background:u}}),d]}),a&&t.jsx("span",{style:{marginLeft:"auto"},children:t.jsx(Vg,{tenantName:n??"your org",variant:"inline"})})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:8},children:[t.jsx("h2",{"data-testid":"detail-header-name",style:{fontFamily:"var(--font-serif)",fontSize:20,fontWeight:500,lineHeight:1.25,color:"var(--text-primary)",margin:0},children:e.skill}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[t.jsx("span",{"data-testid":"detail-header-version",children:t.jsx(jn,{version:e.resolvedVersion??e.version??null,source:e.versionSource,pluginName:e.pluginName??null})}),e.pluginName&&e.pluginVersion&&t.jsxs("span",{"data-testid":"detail-header-plugin-chip",title:`This skill ships in plugin ${e.pluginName} v${e.pluginVersion}. The plugin version is independent of this skill's own version track.`,style:{display:"inline-flex",alignItems:"baseline",gap:4,fontFamily:"var(--font-sans)",fontSize:11,color:"var(--text-tertiary)",padding:"2px 6px",borderRadius:4,background:"var(--surface-1, transparent)",border:"1px solid var(--border-subtle, transparent)",whiteSpace:"nowrap"},children:[t.jsx("span",{children:"from"}),t.jsx("span",{style:{color:"var(--text-secondary)"},children:e.pluginName}),t.jsx("span",{"aria-hidden":"true",children:"@"}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums",color:"var(--text-secondary)"},children:e.pluginVersion})]}),e.origin==="source"&&t.jsx("button",{type:"button","data-testid":"detail-header-delete","aria-label":"Delete skill",title:"Delete skill",onClick:()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:e}}))},className:"flex items-center justify-center transition-colors duration-150",style:{background:"none",border:"none",cursor:"pointer",color:"var(--text-tertiary)",padding:4,borderRadius:4},onMouseEnter:p=>{p.currentTarget.style.color="var(--red)"},onMouseLeave:p=>{p.currentTarget.style.color="var(--text-tertiary)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("polyline",{points:"3 6 5 6 21 6"}),t.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),t.jsx("path",{d:"M10 11v6"}),t.jsx("path",{d:"M14 11v6"}),t.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]}),t.jsxs("div",{"data-testid":"detail-header-byline",style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:10,margin:"0 0 8px",fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:[t.jsx(gu,{author:e.author??null,repoUrl:e.repoUrl??e.homepage??null}),t.jsx(r0,{repoUrl:e.repoUrl??null,skillName:e.skill}),t.jsx(yu,{repoUrl:e.repoUrl??null,skillPath:e.skillPath??null,absolutePath:e.dir})]}),t.jsx(o0,{skill:e}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[t.jsx("button",{type:"button","data-testid":"detail-header-path-chip",title:i,"aria-label":`Copy path ${i} to clipboard`,onClick:l,style:{display:"inline-flex",alignItems:"center",padding:"2px 8px",border:"1px solid var(--border-default)",borderRadius:4,background:"transparent",fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",cursor:"pointer"},children:n0(i)}),t.jsxs("button",{"data-testid":"detail-header-copy-path",type:"button",onClick:l,"aria-label":"Copy skill path to clipboard",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 8px",background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:11,cursor:"pointer"},children:[t.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),t.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),s?"Copied":"Copy"]})]})]})}function o0({skill:e}){const r=e.installMethod,n=e.symlinkTarget;if(!r)return null;let s="";switch(r){case"symlinked":s=n?`Symlinked from ${n}`:"Symlinked (target unresolved)";break;case"copied":s="Copied (independent)";break;case"authored":s="Authored";break;default:return null}return t.jsxs("div",{"data-testid":"detail-header-install-method",style:{display:"flex",alignItems:"center",gap:6,fontSize:11,color:"var(--text-secondary)",fontFamily:"var(--font-sans)",margin:"6px 0 8px"},children:[t.jsx("span",{style:{fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",fontSize:10,color:"var(--text-tertiary)"},children:"Install method"}),t.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:s})]})}function a0({state:e,isReadOnly:r,onDelete:n}){const{plugin:s,skill:o,evals:a,latestBenchmark:i,isDirty:l,caseRunStates:d,regressions:u,iterationCount:p}=e,f=Array.from(d.values()).some(b=>b.status==="running"||b.status==="queued"),h=i==null?void 0:i.overall_pass_rate,m=(a==null?void 0:a.evals.reduce((b,y)=>b+y.assertions.length,0))??0,v=(a==null?void 0:a.evals.length)??0,x=K1(h),g=q1(h);return t.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5",style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-1)",flexShrink:0},children:[t.jsxs("div",{className:"flex items-center gap-2 text-[13px]",children:[t.jsx("span",{style:{color:"var(--text-tertiary)"},children:s}),t.jsx(i0,{}),t.jsx("span",{className:"font-medium",style:{color:"var(--text-primary)"},children:o}),r&&t.jsxs("span",{className:"ml-2 flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:[t.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"installed"]}),l&&t.jsx("span",{className:"ml-2 text-[10px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded",style:{background:"var(--yellow-muted)",color:"var(--yellow)"},children:"unsaved"}),f&&t.jsxs("span",{className:"ml-2 flex items-center gap-1.5 text-[11px]",style:{color:"var(--accent)"},children:[t.jsx("span",{className:"spinner",style:{width:12,height:12,borderWidth:1.5}}),"Running..."]})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[!r&&n&&t.jsx("button",{disabled:f,onClick:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:{plugin:s,skill:o,dir:"",hasEvals:!1,hasBenchmark:!1,evalCount:0,assertionCount:0,benchmarkStatus:"missing",lastBenchmark:null,origin:"source"}}}))},title:"Delete skill",className:"flex items-center justify-center transition-colors duration-150",style:{background:"none",border:"none",cursor:f?"not-allowed":"pointer",color:"var(--text-tertiary)",padding:4,opacity:f?.4:1,borderRadius:4},onMouseEnter:b=>{f||(b.currentTarget.style.color="var(--red)")},onMouseLeave:b=>{b.currentTarget.style.color="var(--text-tertiary)"},children:t.jsx(l0,{})}),u.length>0&&t.jsxs("span",{className:"pill",style:{background:"var(--red-muted)",color:"var(--red)"},children:[t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[t.jsx("path",{d:"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),t.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),t.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),u.length," regression",u.length>1?"s":""]}),p>0&&t.jsxs("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)"},children:["Iter ",p]}),t.jsx("span",{className:"pill",style:{background:g,color:x},children:h!=null?`${Math.round(h*100)}%`:"--"}),t.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[v," case",v!==1?"s":""," / ",m," assert",m!==1?"s":""]})]})]})}function i0(){return t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",children:t.jsx("polyline",{points:"9 18 15 12 9 6"})})}function l0(){return t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("polyline",{points:"3 6 5 6 21 6"}),t.jsx("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"}),t.jsx("line",{x1:"10",y1:"11",x2:"10",y2:"17"}),t.jsx("line",{x1:"14",y1:"11",x2:"14",y2:"17"})]})}function sr(e){const{title:r,label:n,value:s,subtitle:o,description:a,linkLabel:i,children:l,onClick:d}=e,u=r??n??"",p=typeof d=="function",f=h=>{p&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),d==null||d())};return t.jsxs("div",{className:p?"metric-card metric-card-link":"metric-card","data-testid":e["data-testid"],role:p?"button":void 0,tabIndex:p?0:void 0,onClick:p?()=>d==null?void 0:d():void 0,onKeyDown:p?f:void 0,style:{background:"var(--card-bg, var(--bg-surface))",border:"1px solid var(--border, var(--border-default))",borderRadius:6,padding:"1rem",display:"flex",flexDirection:"column",gap:"0.375rem",minWidth:0,height:"100%",cursor:p?"pointer":void 0,wordBreak:"break-word",overflowWrap:"anywhere"},children:[u?t.jsx("div",{"data-testid":e["data-testid"]?`${e["data-testid"]}-title`:void 0,style:{fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"0.5625rem",fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--card-text-muted, var(--text-secondary))"},children:u}):null,t.jsx("div",{"data-testid":e["data-testid"]?`${e["data-testid"]}-value`:void 0,style:{fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"1.375rem",fontWeight:700,color:"var(--card-text, var(--text-primary))",lineHeight:1,fontVariantNumeric:"tabular-nums"},children:String(s)}),o?t.jsx("div",{style:{fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"0.625rem",color:"var(--card-text-muted, var(--text-secondary))"},children:o}):null,a?t.jsx("div",{style:{fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"0.5625rem",color:"var(--card-text-muted, var(--text-secondary))",lineHeight:1.4,opacity:.7},children:a}):null,l?t.jsx("div",{style:{flex:1,marginTop:"0.25rem"},children:l}):null,i?t.jsx("div",{style:{marginTop:"auto",paddingTop:"0.375rem",borderTop:"1px solid var(--border, var(--border-default))",fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"0.625rem",color:"var(--card-text-muted, var(--text-secondary))"},children:i}):null]})}const c0="Benchmarks are the aggregated score of this skill's evals (evals.yaml) run against its tests (tests/). Each test case produces a verdict; the benchmark is the mean pass rate.";function d0(e){const{onNavigate:r}=e,[n,s]=c.useState(e.open??!1),o=c.useCallback(()=>s(!1),[]);c.useEffect(()=>{if(!n)return;const i=l=>{l.key==="Escape"&&o()};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[n,o]);const a=c.useCallback(i=>{r==null||r(i),s(!1)},[r]);return t.jsxs("span",{"data-testid":e["data-testid"]??"benchmark-info",style:{position:"relative",display:"inline-flex",alignItems:"center"},children:[t.jsx("button",{type:"button","data-testid":"benchmark-info-trigger","aria-label":"About benchmarks","aria-expanded":!!n,onClick:()=>s(i=>!i),style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:18,height:18,padding:0,border:"1px solid var(--border-default, var(--border))",borderRadius:999,background:"transparent",color:"var(--text-secondary)",fontSize:11,fontFamily:"var(--font-sans)",cursor:"pointer",lineHeight:1},children:"ℹ"}),n&&t.jsxs("div",{role:"dialog","data-testid":"benchmark-info-popover",style:{position:"absolute",top:"100%",right:0,marginTop:6,zIndex:20,width:280,padding:"10px 12px",background:"var(--bg-surface, var(--surface-1))",border:"1px solid var(--border-default, var(--border))",borderRadius:6,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-primary)",boxShadow:"0 4px 16px rgba(0,0,0,0.08)"},children:[t.jsx("p",{style:{margin:"0 0 8px",lineHeight:1.45},children:c0}),t.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[t.jsx("button",{type:"button","data-testid":"benchmark-info-link-tests",onClick:()=>a("tests"),style:eo,children:"Tests →"}),t.jsx("button",{type:"button","data-testid":"benchmark-info-link-run",onClick:()=>a("run"),style:eo,children:"Run →"}),t.jsx("button",{type:"button","data-testid":"benchmark-info-close",onClick:o,style:{...eo,marginLeft:"auto",color:"var(--text-secondary)"},children:"Close"})]})]})]})}const eo={background:"transparent",border:"none",padding:0,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-accent, var(--text-primary))",cursor:"pointer",textDecoration:"underline"};function u0(e){return`gh repo create ${e.trim()||"<repo-name>"} --public --source=. --remote=origin --push`}const p0="Add a GitHub remote: `gh repo create --public --source=.` (replace existing origin if needed).";function f0({value:e}){const[r,n]=c.useState(!1),s=c.useCallback(async()=>{try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),1500)}catch{}},[e]);return t.jsx("button",{type:"button","data-testid":"publish-status-copy","aria-label":"Copy GitHub setup command",onClick:s,style:{fontSize:11,padding:"3px 8px",borderRadius:4,border:"1px solid var(--border-default, var(--border-subtle))",background:"var(--surface-2)",color:"var(--text-primary)",cursor:"pointer"},children:r?"Copied":"Copy"})}function ml({tone:e,label:r}){const n=e==="ok"?"color-mix(in srgb, var(--color-ok, #22c55e) 18%, transparent)":"color-mix(in srgb, var(--color-own, #f59e0b) 18%, transparent)",s=e==="ok"?"var(--color-ok, #22c55e)":"var(--color-own, #f59e0b)";return t.jsx("span",{style:{display:"inline-flex",alignItems:"center",padding:"2px 8px",borderRadius:999,fontSize:11,fontWeight:500,color:s,background:n},children:r})}function h0(e={}){const{status:r,loading:n}=Ld();if(n||!r)return null;if(r.status==="github")return t.jsxs("div",{"data-testid":"publish-status-row","data-status":"github",style:{display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",padding:"10px 12px",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:8,background:"var(--bg-surface, var(--surface-1))"},children:[t.jsx(ml,{tone:"ok",label:"Publish-ready"}),t.jsxs("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:["GitHub origin: ",r.githubOrigin]}),t.jsx("div",{style:{marginLeft:"auto"},children:t.jsx(qd,{remoteUrl:r.githubOrigin??"",provider:e.provider,model:e.model,skillName:e.skillName,skillPath:e.skillPath,privacy:"public"})})]});const s=r.status==="no-git"?u0(e.projectBasename??""):p0;return t.jsxs("div",{"data-testid":"publish-status-row","data-status":r.status,style:{display:"flex",flexDirection:"column",gap:8,padding:"10px 12px",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:8,background:"var(--bg-surface, var(--surface-1))"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[t.jsx(ml,{tone:"warn",label:r.status==="no-git"?"No GitHub repo yet":"Origin is not GitHub"}),t.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Connect GitHub to publish your skills."})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t.jsx("code",{"data-testid":"publish-status-command",style:{flex:1,minWidth:0,padding:"6px 10px",borderRadius:4,background:"var(--surface-2)",color:"var(--text-primary)",fontFamily:"var(--font-mono)",fontSize:12,whiteSpace:"pre-wrap",wordBreak:"break-all"},children:s}),t.jsx(f0,{value:s})]})]})}function m0({plugin:e,skill:r}){const[n,s]=c.useState([]),[o,a]=c.useState([]),[i,l]=c.useState(!0),[d,u]=c.useState(null);c.useEffect(()=>{de.getDependencies(e,r).then(f=>{s(f.mcpDependencies),a(f.skillDependencies)}).catch(()=>{}).finally(()=>l(!1))},[e,r]);async function p(f,h){try{await navigator.clipboard.writeText(h),u(f),setTimeout(()=>u(null),2e3)}catch{}}return i?null:n.length===0&&o.length===0?t.jsx("div",{className:"mb-5 px-4 py-3 rounded-lg text-[12px]",style:{background:"var(--surface-2)",color:"var(--text-tertiary)",border:"1px solid var(--border-subtle)"},children:"No dependencies detected"}):t.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[t.jsxs("div",{className:"flex items-center gap-2.5 px-5 py-3.5",style:{background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)"},children:[t.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"rgba(234,179,8,0.15)"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#eab308",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}),t.jsx("path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"})]})}),t.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"Dependencies"}),t.jsx("span",{className:"pill text-[10px]",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:n.length+o.length})]}),t.jsxs("div",{className:"px-5 py-4",children:[n.length>0&&t.jsxs("div",{className:"space-y-3 mb-4",children:[t.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"MCP Servers"}),n.map(f=>t.jsxs("div",{className:"p-3 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex items-center justify-between mb-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:f.server}),t.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:f.transport})]}),t.jsx("button",{onClick:()=>p(f.server,f.configSnippet),className:"btn btn-ghost text-[11px] py-1 px-2",style:{color:d===f.server?"var(--green)":"var(--accent)"},children:d===f.server?t.jsxs(t.Fragment,{children:[t.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})," Copied!"]}):t.jsxs(t.Fragment,{children:[t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),t.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})," Copy Config"]})})]}),t.jsx("div",{className:"text-[11px] mb-2 font-mono",style:{color:"var(--text-tertiary)"},children:f.url}),t.jsx("div",{className:"flex flex-wrap gap-1.5",children:f.matchedTools.map(h=>t.jsx("span",{className:"px-2 py-0.5 rounded text-[10px] font-mono",style:{background:"var(--surface-3)",color:"var(--text-secondary)"},children:h},h))})]},f.server))]}),o.length>0&&t.jsxs("div",{children:[t.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Skill Dependencies"}),t.jsx("div",{className:"space-y-1.5",children:o.map(f=>t.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"})}),t.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:f.name}),t.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:f.source==="frontmatter"?"frontmatter":"referenced"})]},f.name))})]})]})]})}const x0="https://verified-skill.com/docs/parameters-and-secrets",g0="Stored as KEY=value in this skill's local .env.local (gitignored). Resolved from process.env first, then .env.local.";function xl({onToggleAdd:e,addFormOpen:r}){return t.jsxs("div",{className:"flex items-center justify-between mb-2",children:[t.jsxs("span",{className:"text-[11px] font-semibold uppercase tracking-wider flex items-center gap-1.5",style:{color:"var(--text-tertiary)"},children:["Parameters & Secrets",t.jsx("span",{"aria-label":"About Parameters & Secrets",title:g0,style:{cursor:"help",fontSize:11,color:"var(--text-tertiary)",opacity:.7,display:"inline-block",lineHeight:1},children:"ⓘ"})]}),t.jsx("button",{onClick:e,"aria-pressed":r,className:"text-[11px] transition-colors duration-150",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"+ Add Parameter"})]})}function v0(){return t.jsxs("div",{className:"px-4 py-5 rounded-xl flex flex-col gap-2",style:{background:"var(--surface-2)"},children:[t.jsx("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-secondary)"},children:"No parameters yet"}),t.jsxs("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)",lineHeight:1.5},children:["Values are stored as ",t.jsx("code",{style:{fontSize:11},children:"KEY=value"})," in this skill's local"," ",t.jsx("code",{style:{fontSize:11},children:".env.local"})," (auto-added to"," ",t.jsx("code",{style:{fontSize:11},children:".gitignore"}),"). They appear here when declared as"," ",t.jsx("code",{style:{fontSize:11},children:"requiredCredentials"})," in"," ",t.jsx("code",{style:{fontSize:11},children:"evals.json"}),", or when you add custom ones below."]}),t.jsx("a",{href:x0,target:"_blank",rel:"noopener noreferrer",className:"text-[11px]",style:{color:"var(--accent)",textDecoration:"none"},children:"Learn more →"})]})}function y0({plugin:e,skill:r}){const[n,s]=c.useState([]),[o,a]=c.useState(!0),[i,l]=c.useState(null),[d,u]=c.useState(""),[p,f]=c.useState(!1),[h,m]=c.useState(null),[v,x]=c.useState(""),[g,b]=c.useState(""),[y,j]=c.useState(!1),[S,k]=c.useState(new Set),T=c.useCallback(async()=>{a(!0);try{const[N,I]=await Promise.all([de.getCredentials(e,r).catch(()=>({credentials:[]})),de.getParams(e,r).catch(()=>({params:[]}))]),A=new Map(I.params.map(C=>[C.name,C])),$=new Set,W=[];for(const C of N.credentials){$.add(C.name);const L=A.get(C.name);W.push({name:C.name,status:C.status==="ready"||C.status==="resolved"?"ready":"missing",source:C.source,maskedValue:L==null?void 0:L.maskedValue})}for(const C of I.params)$.has(C.name)||W.push({name:C.name,status:C.status,maskedValue:C.maskedValue});s(W)}finally{a(!1)}},[e,r]);c.useEffect(()=>{T()},[T]);const w=c.useCallback(async N=>{if(S.has(N)){k(I=>{const A=new Set(I);return A.delete(N),A}),s(I=>I.map(A=>A.name===N?{...A,revealedValue:void 0}:A));return}try{const A=(await de.getParamsRevealed(e,r,N)).params.find($=>$.name===N);A&&(s($=>$.map(W=>W.name===N?{...W,revealedValue:A.value}:W)),k($=>new Set($).add(N)))}catch{}},[e,r,S]),E=async(N,I)=>{if(!(!N.trim()||!I.trim())){f(!0),m(null);try{await de.setCredential(e,r,N,I),l(null),u(""),k(new Set),T()}catch(A){m(A.message)}finally{f(!1)}}},R=async()=>{if(!(!v.trim()||!g.trim())){f(!0),m(null);try{await de.setCredential(e,r,v.trim().toUpperCase(),g),x(""),b(""),j(!1),T()}catch(N){m(N.message)}finally{f(!1)}}};return o?t.jsxs("div",{className:"mt-6",children:[t.jsx(xl,{onToggleAdd:()=>{},addFormOpen:!1}),t.jsx("div",{className:"skeleton h-20 rounded-xl"})]}):t.jsxs("div",{className:"mt-6",children:[t.jsx(xl,{onToggleAdd:()=>j(!y),addFormOpen:y}),h&&t.jsx("div",{className:"mb-2 px-3 py-2 rounded-lg text-[11px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:h}),n.length===0&&!y?t.jsx(v0,{}):t.jsx("div",{className:"rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:n.map(N=>t.jsxs("div",{className:"flex items-center gap-3 px-3 py-2.5",style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[t.jsx("span",{className:"text-[11px] font-mono font-medium truncate",style:{color:"var(--text-primary)",minWidth:80},children:N.name}),N.maskedValue&&t.jsx("span",{className:"text-[10px] font-mono truncate",style:{color:"var(--text-tertiary)",maxWidth:120},children:S.has(N.name)&&N.revealedValue!=null?N.revealedValue:N.maskedValue}),N.maskedValue&&t.jsx("button",{onClick:()=>w(N.name),className:"btn btn-ghost px-1",title:S.has(N.name)?"Hide value":"Reveal value",style:{color:"var(--text-tertiary)",lineHeight:1},children:S.has(N.name)?t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94"}),t.jsx("path",{d:"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19"}),t.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),t.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}),t.jsx("span",{className:"text-[10px] font-semibold px-2 py-0.5 rounded-full",style:{background:N.status==="ready"?"var(--green-muted)":"var(--orange-muted)",color:N.status==="ready"?"var(--green)":"var(--orange)"},children:N.status==="ready"?"ready":"missing"}),N.source&&t.jsx("span",{className:"text-[9px]",style:{color:"var(--text-tertiary)"},children:N.source}),i===N.name?t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx("input",{value:d,onChange:I=>u(I.target.value),onKeyDown:I=>{I.key==="Enter"&&E(N.name,d)},className:"input-field text-[11px] font-mono",style:{width:160},placeholder:"Value...",autoFocus:!0}),t.jsx("button",{onClick:()=>E(N.name,d),disabled:p||!d.trim(),className:"btn btn-primary text-[10px] px-2 py-0.5",children:p?"...":"Save"}),t.jsx("button",{onClick:()=>{l(null),u("")},className:"btn btn-ghost text-[10px] px-1",children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}):t.jsx("button",{onClick:()=>{l(N.name),u("")},className:"btn btn-ghost text-[10px] px-2 py-0.5",style:{color:"var(--accent)"},children:"Edit"})]},N.name))}),y&&t.jsxs("div",{className:"mt-2 p-3 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[t.jsxs("div",{className:"flex gap-2 mb-2",children:[t.jsx("input",{value:v,onChange:N=>x(N.target.value),className:"input-field flex-1 text-[11px] font-mono",placeholder:"KEY_NAME",autoFocus:!0}),t.jsx("input",{value:g,onChange:N=>b(N.target.value),onKeyDown:N=>{N.key==="Enter"&&R()},className:"input-field flex-1 text-[11px] font-mono",placeholder:"Value",type:"password"})]}),t.jsxs("div",{className:"flex justify-end gap-1.5",children:[t.jsx("button",{onClick:()=>{j(!1),x(""),b("")},className:"btn btn-ghost text-[10px]",children:"Cancel"}),t.jsx("button",{onClick:R,disabled:p||!v.trim()||!g.trim(),className:"btn btn-primary text-[10px]",children:p?"Saving...":"Save"})]})]})]})}function gl({children:e}){return t.jsx("h3",{style:{fontFamily:"var(--font-sans)",fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:.6,color:"var(--text-tertiary)",margin:"0 0 8px"},children:e})}function b0({plugin:e,skill:r}){return t.jsxs("aside",{"data-testid":"skill-overview-rightrail",style:{display:"flex",flexDirection:"column",gap:16},children:[t.jsxs("section",{"data-testid":"overview-rightrail-setup",children:[t.jsx(gl,{children:"Setup"}),t.jsx(m0,{plugin:e,skill:r})]}),t.jsxs("section",{"data-testid":"overview-rightrail-credentials",children:[t.jsx(gl,{children:"Credentials"}),t.jsx(y0,{plugin:e,skill:r})]})]})}function k0(e){if(e==null||!Number.isFinite(e))return"—";if(e<1024)return`${e} B`;const r=e/1024;if(r<1024)return r>=10?`${Math.round(r)} KB`:`${r.toFixed(1).replace(/\.0$/,"")} KB`;const n=r/1024;return n>=10?`${Math.round(n)} MB`:`${n.toFixed(1).replace(/\.0$/,"")} MB`}function Jr(e){if(!e)return"—";const r=new Date(e);if(Number.isNaN(r.getTime()))return e;const n=Date.now()-r.getTime(),s=Math.floor(n/1e3);if(s<60)return"just now";const o=Math.floor(s/60);if(o<60)return`${o} min ago`;const a=Math.floor(o/60);if(a<24)return`${a} hr ago`;const i=Math.floor(a/24);if(i<30)return`${i} day${i===1?"":"s"} ago`;const l=Math.floor(i/30);if(l<12)return`${l} month${l===1?"":"s"} ago`;const d=Math.floor(l/12);return`${d} year${d===1?"":"s"} ago`}function j0(e){switch(e.benchmarkStatus){case"pass":case"fail":case"stale":return e.benchmarkStatus==="pass"?"100%":e.benchmarkStatus==="fail"?"0%":"—";default:return"—"}}function w0(e){const r=e.installMethod;if(!r)return null;const n=r==="authored"?"Authored":r==="copied"?"Copied":"Symlinked";return t.jsx("span",{"data-testid":"overview-install-method",style:{display:"inline-flex",alignItems:"center",padding:"1px 6px",border:"1px solid var(--border-default, var(--border))",borderRadius:4,fontFamily:"var(--font-mono, var(--font-geist-mono))",fontSize:10,color:"var(--text-secondary)",textTransform:"uppercase",letterSpacing:.4},children:n})}function S0(e,r){const n=e.evalCount??0;return!e.hasEvals||n<=0?null:t.jsxs("button",{type:"button","data-testid":"overview-tests-chip",onClick:r?()=>r("run"):void 0,title:`Open Run tab — ${n} test case${n===1?"":"s"}`,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 8px",border:"1px solid var(--border-default, var(--border))",borderRadius:9999,fontFamily:"var(--font-sans)",fontSize:11,color:"var(--text-secondary)",background:"transparent",cursor:r?"pointer":"default"},children:[n," ",n===1?"test":"tests"]})}function C0(e){var f,h;const{skill:r,onNavigate:n,activationsCount:s=0,lastRunIso:o=null,repoUrl:a,skillPathInRepo:i}=e,l=a??(E0(r.homepage)?r.homepage??null:null),d=((f=r.mcpDeps)==null?void 0:f.length)??0,u=((h=r.deps)==null?void 0:h.length)??0,p=t.jsxs("div",{"data-testid":"skill-overview-main",style:{display:"flex",flexDirection:"column",gap:12},children:[t.jsxs("header",{"data-testid":"skill-overview-header",style:{position:"sticky",top:0,zIndex:5,display:"flex",flexDirection:"column",gap:6,padding:"10px 12px",background:"var(--bg-surface, var(--surface-1))",border:"1px solid var(--border-default, var(--border))",borderRadius:8},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[t.jsx("h2",{"data-testid":"skill-overview-name",style:{fontFamily:"var(--font-serif, var(--font-sans))",fontSize:18,fontWeight:500,color:"var(--text-primary)",margin:0,lineHeight:1.2},children:r.skill}),t.jsx(jn,{version:r.resolvedVersion??r.version??null,source:r.versionSource,pluginName:r.pluginName??null}),w0(r),S0(r,n)]}),t.jsxs("div",{"data-testid":"skill-overview-byline",style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:10,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:[t.jsx(gu,{author:r.author??null,repoUrl:l}),r.category?t.jsxs("span",{children:["· ",r.category]}):null,t.jsx(yu,{repoUrl:l,skillPath:i??null,absolutePath:r.dir}),r.lastModified?t.jsxs("span",{title:r.lastModified,children:["· Updated ",Jr(r.lastModified)]}):null]})]}),r.origin!=="installed"&&!r.pluginMarketplace&&r.installMethod!=="copied"&&r.installMethod!=="symlinked"&&t.jsx(h0,{skillName:r.skill,skillPath:r.skillPath??void 0}),t.jsxs("div",{"data-testid":"skill-overview-grid",className:"skill-overview-grid",style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:"0.75rem",alignItems:"stretch"},children:[t.jsx(sr,{title:"Benchmark",value:j0(r),subtitle:r.lastBenchmark?Jr(r.lastBenchmark):"Never run","data-testid":"metric-benchmark",onClick:n?()=>n("run"):void 0,children:t.jsx("div",{style:{marginTop:4,display:"inline-flex",alignItems:"center"},children:t.jsx(d0,{onNavigate:n})})}),t.jsx(sr,{title:"Tests",value:r.evalCount??0,subtitle:`${r.assertionCount??0} assertions`,"data-testid":"metric-tests",onClick:n?()=>n("tests"):void 0}),t.jsx(sr,{title:"Activations",value:s,subtitle:o?`Last: ${Jr(o)}`:"Never","data-testid":"metric-activations",onClick:n?()=>n("activation"):void 0}),t.jsx(sr,{title:"Last run",value:Jr(o??r.lastBenchmark??null),"data-testid":"metric-last-run",onClick:n?()=>n("history"):void 0}),t.jsx(sr,{title:"MCP deps",value:d,subtitle:d>0&&r.mcpDeps?r.mcpDeps.slice(0,3).join(", "):"None","data-testid":"metric-mcp-deps",onClick:n?()=>n("deps"):void 0}),t.jsx(sr,{title:"Skill deps",value:u,subtitle:u>0&&r.deps?r.deps.slice(0,3).join(", "):"None","data-testid":"metric-skill-deps",onClick:n?()=>n("deps"):void 0}),t.jsx(sr,{title:"Size",value:k0(r.sizeBytes),"data-testid":"metric-size"}),t.jsx(sr,{title:"Last modified",value:Jr(r.lastModified),subtitle:r.lastModified??void 0,"data-testid":"metric-last-modified"})]})]});return t.jsxs("div",{"data-testid":"skill-overview",className:"skill-overview",style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) 280px",gap:16,padding:16,alignItems:"start"},children:[p,t.jsx(b0,{plugin:r.plugin,skill:r.skill})]})}function E0(e){return e?/^https?:\/\/(?:www\.)?(?:github\.com|raw\.githubusercontent\.com)\//.test(e):!1}function N0({skill:e}){const{onSkillUpdated:r}=Lt(),{toast:n}=ps(),[s,o]=c.useState("idle"),[a,i]=c.useState(null),[l,d]=c.useState(!1),[u,p]=c.useState(null),[f,h]=c.useState(!1),m=c.useRef(null),v=c.useCallback(async()=>{if(!e||s==="updating")return;const y=new AbortController;m.current=y,o("updating"),i(null);try{const j=await de.postSkillUpdate(e.plugin,e.skill,y.signal);if(j.ok)o("done"),r(e.plugin,e.skill),n({message:`Updated ${e.skill}.`,severity:"success",durationMs:4e3});else{const S=`Update failed (HTTP ${j.status}): ${j.body}`;o("idle"),i(S),n({message:`Couldn't update ${e.skill} — HTTP ${j.status}`,severity:"error",durationMs:0,action:{label:"Retry",onInvoke:()=>{v()}}})}}catch(j){if(j instanceof DOMException&&j.name==="AbortError")return;const S=j instanceof Error?j.message:"Network error";o("idle"),i(S),n({message:`Couldn't update ${e.skill} — ${S}`,severity:"error",durationMs:0,action:{label:"Retry",onInvoke:()=>{v()}}})}finally{m.current===y&&(m.current=null)}},[e,s,r,n]);if(c.useEffect(()=>{if(!l||u!=null||!e||!e.latestVersion)return;let y=!1;return h(!0),de.getVersionDiff(e.plugin,e.skill,e.currentVersion??"",e.latestVersion).then(j=>{y||p(j)}).catch(()=>{y||p(null)}).finally(()=>{y||h(!1)}),()=>{y=!0}},[l,u,e==null?void 0:e.plugin,e==null?void 0:e.skill,e==null?void 0:e.latestVersion,e==null?void 0:e.currentVersion,e]),c.useEffect(()=>()=>{var y;(y=m.current)==null||y.abort()},[]),!e||e.updateAvailable!==!0)return null;const x=e.latestVersion,g=s==="updating"?"Updating…":x?`Update to ${x}`:"Update",b=s==="updating";return t.jsxs("div",{"data-testid":"update-action",style:{display:"flex",flexDirection:"column",gap:6,padding:"12px 16px",borderTop:"1px solid var(--border-default)",borderBottom:"1px solid var(--border-default)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[t.jsx("button",{type:"button","data-testid":"update-action-button",onClick:()=>{v()},disabled:b,style:{height:36,padding:"0 14px",background:"var(--color-ink)",color:"var(--color-paper)",border:"none",borderRadius:4,cursor:b?"not-allowed":"pointer",fontFamily:"var(--font-sans)",fontSize:13,fontWeight:500},children:g}),t.jsx("button",{type:"button","data-testid":"update-action-toggle-changelog",onClick:()=>d(y=>!y),disabled:b||!x,style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:12,fontFamily:"var(--font-sans)",cursor:"pointer",textDecoration:"underline"},children:l?"Hide changelog":"Preview changelog"})]}),s==="updating"&&t.jsx("div",{"data-testid":"update-action-progress",role:"status",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-muted, var(--text-secondary))"},children:"Updating…"}),a&&s!=="updating"&&t.jsx("div",{"data-testid":"update-action-error",role:"alert",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--color-error, #d32f2f)"},children:a}),l&&x&&t.jsxs("div",{"data-testid":"update-action-changelog",style:{paddingTop:8},children:[f&&t.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Loading changelog…"}),!f&&u&&t.jsx(Ia,{contentDiff:u.contentDiff,fromLabel:u.from,toLabel:u.to,diffSummary:u.diffSummary??void 0,renderContext:"inline"}),!f&&!u&&t.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Couldn't load changelog."})]})]})}const R0=3e4;function T0({plugin:e,skill:r,trackedForUpdates:n=!0,discoveryBackedOff:s=!1}){const o=Lt(),[a,i]=c.useState(!1),[l,d]=c.useState(!1),[,u]=c.useState(0),p=c.useRef(null),f=c.useRef(null),h=`${e}/${r}`,m=o.updatesById.get(h);if(c.useEffect(()=>{if(!a)return;const x=setInterval(()=>u(g=>(g+1)%1e6),250);return()=>clearInterval(x)},[a]),c.useEffect(()=>{if(!a||!m)return;const x=f.current??0;m.receivedAt<x||(p.current&&(clearTimeout(p.current),p.current=null),i(!1),d(!1),f.current=null)},[a,m]),c.useEffect(()=>()=>{p.current&&clearTimeout(p.current)},[]),n===!1||s)return null;const v=async()=>{if(!a){d(!1),i(!0),f.current=Date.now(),p.current=setTimeout(()=>{i(!1),d(!0),p.current=null,f.current=null},R0);try{await de.rescanSkill(e,r),p.current&&(clearTimeout(p.current),p.current=null);const x=o.updatesById.get(h),g=f.current??0,b=!!x&&x.receivedAt>=g;i(!1),b||d(!0),f.current=null}catch{p.current&&(clearTimeout(p.current),p.current=null),i(!1),f.current=null}}};return t.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[t.jsx("button",{type:"button","data-testid":"check-now-button",onClick:v,disabled:a,style:{height:26,padding:"0 10px",background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:12,cursor:a?"not-allowed":"pointer"},children:"Check now"}),a&&t.jsx("span",{"data-testid":"check-now-spinner","aria-label":"Checking for updates",role:"status",style:{display:"inline-block",width:10,height:10,borderRadius:"50%",border:"2px solid var(--text-secondary)",borderTopColor:"transparent",animation:"check-now-spin 800ms linear infinite"}}),l&&t.jsx("span",{"data-testid":"check-now-no-changes",style:{fontSize:11,color:"var(--text-secondary)",fontFamily:"var(--font-sans)"},children:"No changes detected"})]})}function I0(e,r){var n;typeof process<"u"&&((n=process==null?void 0:process.env)==null?void 0:n.NODE_ENV)==="production"||console.warn(`[SubTabBar] sub-tab "${r}" clicked under "${e}" but no onChange handler was wired. Pass an onChange prop or this click is a no-op.`)}function L0({tabs:e,active:r,onChange:n,parentTabId:s}){const[o,a]=c.useState(null),i=l=>{n?n(l):I0(s,l)};return t.jsx("div",{role:"tablist","aria-label":`${s} sub-sections`,"data-testid":`detail-subtab-bar-${s}`,style:{display:"flex",alignItems:"stretch",gap:2,borderBottom:"1px solid var(--border-subtle, var(--border-default))",padding:"0 16px",background:"var(--bg-canvas)",overflowX:"auto"},children:e.map(l=>{const d=l.id===r,u=o===l.id&&!d;return t.jsx("button",{type:"button",role:"tab","aria-selected":d,tabIndex:d?0:-1,id:`detail-subtab-${s}-${l.id}`,"data-testid":`detail-subtab-${s}-${l.id}`,onClick:()=>i(l.id),onMouseEnter:()=>a(l.id),onMouseLeave:()=>a(p=>p===l.id?null:p),style:{background:u?"var(--surface-2, rgba(0,0,0,0.04))":"transparent",border:"none",borderBottom:d?"2px solid var(--text-primary)":"2px solid var(--border-subtle, transparent)",padding:"8px 10px",marginBottom:-1,fontFamily:"var(--font-sans)",fontSize:13,fontWeight:d?500:400,color:d?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap",transition:"background 80ms ease"},children:l.label},l.id)})})}const A0=[{id:"overview",label:"Overview"},{id:"source",label:"Source"},{id:"edit",label:"Edit",visibleWhen:({isReadOnly:e})=>!e},{id:"tests",label:"Tests"},{id:"run",label:"Run"},{id:"history",label:"History"}];function ku(e){return A0.filter(r=>r.visibleWhen?r.visibleWhen({isReadOnly:e}):!0)}const P0={tests:{tab:"tests"},trigger:{tab:"run",mode:"activation"},activation:{tab:"run",mode:"activation"},versions:{tab:"history",view:"versions"},leaderboard:{tab:"history",view:"models"},editor:{tab:"edit"},overview:{tab:"overview"},source:{tab:"source"},edit:{tab:"edit"},run:{tab:"run"},history:{tab:"history"}};function os(e){return e?P0[e]??null:null}function Jo(e){const r=new URLSearchParams(e),n=r.get("tab"),s=r.get("panel");return os(n)??os(s)??{tab:"overview"}}function ju(e,r){return!r||new Set(ku(!0).map(s=>s.id)).has(e)?e:"source"}const Ar={run:[{id:"benchmark",label:"Benchmark"},{id:"activation",label:"Activation"},{id:"ab",label:"A/B"}],history:[{id:"timeline",label:"Timeline"},{id:"models",label:"Models"},{id:"versions",label:"Versions"}]};function ln(e){const r=Ar[e];return r&&r.length>0?r[0].id:""}function wu(e,r){const n=Ar[e];if(!n)return"";const s=new URLSearchParams(r),o=e==="run"?"mode":e==="history"?"view":"sub",a=s.get(o)??s.get("sub");return a&&n.some(i=>i.id===a)?a:n[0].id}function $0(e){return e==="run"?"mode":e==="history"?"view":null}function M0(e){switch(e){case"editor":case"tests":case"deps":return{tab:"edit"};case"run":return{tab:"run",mode:"benchmark"};case"activation":return{tab:"run",mode:"activation"};case"history":return{tab:"history",view:"timeline"};case"leaderboard":return{tab:"history",view:"models"};case"versions":return{tab:"history",view:"versions"};default:return{tab:"overview"}}}function to(){const{state:e,setMobileView:r}=Lt();return e.isMobile?t.jsxs("button",{onClick:()=>r("list"),className:"flex items-center gap-1.5 px-3 py-2 text-[12px] font-medium",style:{background:"var(--surface-1)",color:"var(--text-secondary)",border:"none",borderBottom:"1px solid var(--border-subtle)",cursor:"pointer",width:"100%"},children:[t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"15 18 9 12 15 6"})}),"Back to skills"]}):null}function F0(e={}){if(e.selectedSkillInfo!==void 0||e.loadError!==void 0)return D0(e);const{state:r,selectSkill:n,setMode:s,refreshSkills:o}=Lt(),[a,i]=c.useState(typeof window<"u"?window.location.hash:"");if(c.useEffect(()=>{const u=()=>i(window.location.hash);return window.addEventListener("hashchange",u),()=>window.removeEventListener("hashchange",u)},[]),a==="#/updates")return t.jsxs("div",{className:"h-full overflow-auto animate-fade-in",children:[t.jsx(to,{}),t.jsx(xu,{})]});if(r.mode==="create")return t.jsxs("div",{className:"h-full overflow-auto animate-fade-in",children:[t.jsx(to,{}),t.jsx(U1,{onCreated:async(u,p)=>{s("browse"),await o(),n({plugin:u,skill:p,origin:"source",source:"project"})},onCancel:()=>s("browse")})]});if(!r.selectedSkill)return r.skillsError?t.jsx(rn,{variant:"error",message:r.skillsError,onRetry:o}):!r.skillsLoading&&r.skills.length===0?t.jsx(rn,{variant:"no-skills"}):!r.skillsLoading&&r.skills.length>0&&!r.skills.some(u=>u.scopeV2==="available-project")?t.jsx(rn,{variant:"no-project-skills"}):t.jsx(rn,{variant:"no-selection"});const l=r.selectedSkill,d=r.skills.find(u=>u.plugin===l.plugin&&u.skill===l.skill)??null;return t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx(to,{}),t.jsx(z0,{skillInfo:d,allSkills:r.skills,onSelectSkill:u=>n(u)})]})}function D0(e){const r=e.selectedSkillInfo??null,n=e.activeDetailTab??"overview";if(r==null)return _0();if(e.loadError)return O0(r,e.loadError);const s=e.allSkills&&e.onSelectSkill?{allSkills:e.allSkills,onSelectSkill:e.onSelectSkill}:void 0,o=e.activeDetailSub??ln(n);return Su(r,n,e.onDetailTabChange,o,e.onDetailSubChange,s)}function z0({skillInfo:e,allSkills:r,onSelectSkill:n}){const s=c.useMemo(()=>typeof window>"u"?{tab:"overview"}:Jo(window.location.search),[]),[o,a]=c.useState(s.tab),[i,l]=c.useState(()=>s.mode?s.mode:s.view?s.view:wu(s.tab,typeof window<"u"?window.location.search:""));c.useEffect(()=>{if(!e||!(e.origin==="installed"))return;const p=ju(o,!0);p!==o&&(a(p),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:"This skill is read-only — workbench tabs are hidden.",severity:"info"}})))},[e,o]),c.useEffect(()=>{l(ln(o))},[o]),c.useEffect(()=>{if(typeof window>"u")return;const u=new URLSearchParams(window.location.search);u.delete("panel"),u.delete("sub"),o==="overview"?u.delete("tab"):u.set("tab",o);const p=$0(o),f=Ar[o];u.delete("mode"),u.delete("view"),p&&f&&i&&i!==f[0].id&&u.set(p,i);const h=u.toString(),m=`${window.location.pathname}${h?"?"+h:""}${window.location.hash}`;window.history.replaceState(null,"",m)},[o,i]);const d=c.useMemo(()=>e?Su(e,o,a,i,l,{}):t.jsx(rn,{variant:"no-selection"}),[e,o,i,r,n]);return t.jsx("div",{className:"flex flex-col h-full",style:{background:"var(--bg-canvas)"},children:d})}function B0(e,r,n){const s=ku(n);return t.jsx("div",{role:"tablist","aria-label":"Detail sections","data-testid":"detail-tab-bar",style:{display:"flex",alignItems:"stretch",gap:4,borderBottom:"1px solid var(--border-default)",padding:"0 16px",background:"var(--bg-canvas)",overflowX:"auto"},children:s.map(({id:o,label:a})=>{const i=o===e;return t.jsx("button",{type:"button",role:"tab","aria-selected":i,tabIndex:i?0:-1,id:`detail-tab-${o}`,"aria-controls":`detail-panel-${o}`,"data-testid":`detail-tab-${o}`,onClick:()=>r==null?void 0:r(o),style:{background:"transparent",border:"none",borderBottom:i?"2px solid var(--text-primary)":"2px solid transparent",padding:"10px 8px",marginBottom:-1,fontFamily:"var(--font-sans)",fontSize:13,fontWeight:i?500:400,color:i?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap"},children:a},o)})})}function _0(){return t.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",padding:32,background:"var(--bg-canvas)"},children:[t.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:20,fontWeight:500,color:"var(--text-primary)",margin:0,marginBottom:8},children:"Select a skill to view details"}),t.jsx("p",{style:{fontFamily:"var(--font-sans)",fontSize:13,color:"var(--text-secondary)",margin:0,maxWidth:420,textAlign:"center"},children:"Choose a skill from the sidebar — its frontmatter, filesystem info, and benchmark status will appear here."})]})}function O0(e,r){return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:24,background:"var(--bg-canvas)",height:"100%"},children:[bu({skill:e}),t.jsxs("section",{role:"alert",style:{background:"var(--bg-surface)",border:"1px solid var(--border-default)",borderRadius:8,padding:"14px 16px"},children:[t.jsxs("h3",{style:{fontFamily:"var(--font-serif)",fontSize:15,fontWeight:500,color:"var(--text-primary)",margin:"0 0 8px"},children:["Couldn't load SKILL.md for ",e.skill]}),t.jsx("p",{style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",margin:"0 0 12px",wordBreak:"break-word"},children:r})]})]})}function W0({active:e,sub:r}){if(e==="edit")return t.jsx(pb,{});if(e==="tests")return t.jsx(su,{});if(e==="run"){const n=qb(r)?r:"benchmark";return t.jsx(Yb,{mode:n})}if(e==="history"){const n=A1(r)?r:"timeline";return t.jsx(P1,{view:n})}return null}function U0({active:e,sub:r}){const{state:n,dispatch:s}=yt();return c.useEffect(()=>{if(e==="overview")return;const o=e==="edit"?"editor":e==="tests"?"tests":e==="run"?r==="activation"?"activation":"run":e==="history"?r==="models"?"leaderboard":r==="versions"?"versions":"history":"editor";n.activePanel!==o&&s({type:"SET_PANEL",panel:o})},[e,r,n.activePanel,s]),null}function H0({skill:e}){const{visibility:r,repo:n}=nv(e.repoUrl??null);return bu({skill:e,repoVisibility:r,tenantName:(n==null?void 0:n.ownerLogin)??null})}function Su(e,r,n,s="",o,a){var h;const i=e.origin==="installed",l=ju(r,i),d=m=>{const v=M0(m);n==null||n(v.tab),o&&(v.mode?o(v.mode):v.view&&o(v.view))},u=t.jsx(C0,{skill:e,onNavigate:d,repoUrl:e.homepage??null}),p=a!=null?t.jsxs(cy,{plugin:e.plugin,skill:e.skill,origin:e.origin,children:[t.jsx(U0,{active:l,sub:s}),t.jsx(W0,{active:l,sub:s})]},`${e.plugin}/${e.skill}`):t.jsxs("div",{style:{padding:16,fontFamily:"var(--font-sans)",color:"var(--text-secondary)",fontSize:13},children:["Select a skill from the sidebar to load its ",l," view."]}),f=e.origin==="installed"&&t.jsxs("div",{"data-testid":"read-only-banner",style:{display:"flex",alignItems:"center",gap:8,padding:"8px 16px",background:"var(--surface-2)",color:"var(--text-secondary)",borderBottom:"1px solid var(--border-subtle)",fontFamily:"var(--font-sans)",fontSize:12},children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0,color:"var(--text-tertiary)"},children:[t.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),t.jsx("span",{style:{flex:1,minWidth:0},children:"This is an installed copy of the skill. Editing and generating tests are disabled — running author-shipped evals is allowed. Open the source skill to make changes."}),e.trackedForUpdates&&t.jsx("button",{type:"button","data-testid":"uninstall-button","aria-label":`Uninstall ${e.skill}`,onClick:()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-uninstall",{detail:{skill:{plugin:e.plugin,skill:e.skill,dir:e.dir??"",hasEvals:!1,hasBenchmark:!1,evalCount:0,assertionCount:0,benchmarkStatus:"missing",lastBenchmark:null,origin:"installed"}}}))},style:{flexShrink:0,marginLeft:8,padding:"3px 10px",fontSize:11,fontWeight:500,fontFamily:"var(--font-sans)",color:"var(--text-primary)",background:"transparent",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:4,cursor:"pointer"},children:"Uninstall"})]});return t.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",background:"var(--bg-canvas)"},children:[t.jsx("div",{style:{padding:16,paddingBottom:12},children:t.jsx(H0,{skill:e})}),t.jsx(N0,{skill:e}),f,e.origin==="installed"&&e.scopeV2!=="available-plugin"&&t.jsx("div",{style:{padding:"8px 16px",borderBottom:"1px solid var(--border-default)"},children:t.jsx(T0,{plugin:e.plugin,skill:e.skill,trackedForUpdates:e.trackedForUpdates})}),B0(l,n,i),Ar[l]&&t.jsx(L0,{parentTabId:l,tabs:Ar[l],active:s||(((h=Ar[l][0])==null?void 0:h.id)??""),onChange:o}),t.jsx("div",{role:"tabpanel",id:`detail-panel-${l}`,"aria-labelledby":`detail-tab-${l}`,"data-testid":`detail-panel-${l}`,style:{flex:1,minHeight:0,overflow:"auto"},children:l==="overview"?u:l==="source"?t.jsx(Tb,{plugin:e.plugin,skill:e.skill}):p})]})}function V0(){const{updateCount:e,state:r,dismissUpdateNotification:n}=Lt(),s=e>0&&!r.updateNotificationDismissed;return c.useEffect(()=>{if(!s)return;const o=setTimeout(()=>n(),1e4);return()=>clearTimeout(o)},[s,n]),s?t.jsxs("div",{className:"fixed bottom-4 right-4 z-50 flex items-center gap-3 px-4 py-3 rounded-lg text-[13px] font-medium animate-fade-in",style:{background:"var(--yellow-muted)",border:"1px solid var(--yellow)",color:"var(--text-primary)"},children:[t.jsxs("span",{children:[e," update",e===1?"":"s"," available"]}),t.jsx("button",{onClick:()=>{window.location.hash="#/updates"},className:"px-2 py-0.5 rounded text-[12px] font-semibold",style:{background:"var(--yellow)",color:"var(--surface-0)",border:"none",cursor:"pointer"},children:"View Updates"}),t.jsx("button",{onClick:n,className:"text-[14px] leading-none",style:{background:"transparent",border:"none",color:"var(--text-secondary)",cursor:"pointer",padding:"0 2px"},"aria-label":"Dismiss",children:"✕"})]}):null}const Cu=c.createContext(null),G0=1800*1e3,K0=3600*1e3;function q0(e,r){if(!e||!r)return!1;if(e.updates.skippedVersion===r)return!0;if(!e.updates.snoozedUntil)return!1;const n=new Date(e.updates.snoozedUntil).getTime();return!Number.isNaN(n)&&n>Date.now()}function Y0({children:e}){const r=xn(),n=c.useRef("unknown"),s=c.useRef(0),[o,a]=c.useState(null),[i,l]=c.useState("idle"),[d,u]=c.useState({bytes:0,total:null}),[p,f]=c.useState(null),h=c.useCallback((k,T=null)=>k.available&&k.latestVersion&&!q0(T,k.latestVersion)?(a(k),l(w=>w==="ready"||w==="restarting"?w:"idle"),f(null),k):(a(null),l("idle"),f(null),null),[]),m=c.useCallback((k,T=null)=>h(Ba(k,n.current),T),[h]),v=c.useCallback(async()=>{if(!r.available)return null;l(k=>k==="installing"||k==="restarting"?k:"checking"),f(null);try{const[k,T]=await Promise.all([r.getSettings().catch(()=>null),r.checkForUpdates()]);return s.current=Date.now(),h(T,k)}catch(k){const T=k instanceof Error?k.message:String(k);return l("error"),f(T),null}},[h,r]),x=c.useCallback(()=>{r.available&&(Date.now()-s.current<G0||v())},[r.available,v]);c.useEffect(()=>{if(!r.available)return;let k=!1;const T=[];return r.getAppMetadata().then(w=>{n.current=w.version}).catch(()=>{}),(async()=>{const[w,E,R,N]=await Promise.all([Tn("updater://available",A=>{k||m(A.payload)}),Tn("updater://check-result",A=>{k||m(A.payload)}),Tn("updater://restart-required",A=>{k||(l("ready"),a($=>{var W,C;return $??Ba({available:!0,version:((W=A.payload)==null?void 0:W.version)??null,notes:((C=A.payload)==null?void 0:C.notes)??null},n.current)}))}),Tn("updater://error",A=>{var $;k||(l("error"),f((($=A.payload)==null?void 0:$.message)??"Update failed."))})]);for(const A of[w,E,R,N])A&&T.push(A);const I=await r.getSettings().catch(()=>null);!k&&((I==null?void 0:I.updates.autoCheck)??!0)&&await v()})(),()=>{k=!0;for(const w of T)w()}},[m,r,v]),c.useEffect(()=>{if(!r.available)return;const k=()=>x(),T=()=>{document.visibilityState==="visible"&&x()};window.addEventListener("focus",k),document.addEventListener("visibilitychange",T);const w=setInterval(()=>x(),K0);return()=>{window.removeEventListener("focus",k),document.removeEventListener("visibilitychange",T),clearInterval(w)}},[r.available,x]);const g=c.useCallback(async()=>{if(!o||i==="installing"||i==="restarting")return!1;l("installing"),f(null),u({bytes:0,total:null});try{return await r.downloadAndInstallUpdate((k,T)=>{u({bytes:k,total:T})}),l("ready"),!0}catch(k){return l("error"),f(k instanceof Error?k.message:String(k)),!1}},[r,i,o]),b=c.useCallback(async()=>{if(i==="restarting")return!1;l("restarting"),f(null);try{return await r.restartApp(),!0}catch(k){return l("error"),f(k instanceof Error?k.message:String(k)),!1}},[r,i]),y=c.useCallback(async()=>{if(!o||i==="installing"||i==="restarting")return;if(i==="ready"){await b();return}await g()&&await b()},[g,i,b,o]),j=c.useCallback(()=>r.openPreferences("updates").catch(()=>{}),[r]),S=c.useMemo(()=>({update:o,phase:i,progress:d,error:p,available:!!o,checkNow:v,install:g,restart:b,installAndRestart:y,openDetails:j}),[o,i,d,p,v,g,b,y,j]);return t.jsx(Cu.Provider,{value:S,children:e})}function J0(){const e=c.useContext(Cu);if(!e)throw new Error("useAppUpdater must be used inside AppUpdaterProvider");return e}function Q0(){var u;const e=J0(),{phase:r,progress:n}=e,s=n.total&&n.total>0?Math.min(100,Math.round(n.bytes/n.total*100)):null,o=c.useMemo(()=>r==="installing"?s===null?"Installing…":`Installing… ${s}%`:r==="restarting"?"Restarting…":r==="ready"?"Restart to update":r==="error"?"Update failed":"Update available",[r,s]);if(!e.available&&!(e.update&&r==="error"))return null;const a=r==="installing"||r==="restarting",i=r==="error",l=(u=e.update)==null?void 0:u.latestVersion,d=e.error?`Update failed: ${e.error}`:l?`Install Skill Studio ${l} and restart`:"Install the latest Skill Studio update";return t.jsxs("button",{type:"button","data-testid":"app-update-header-button","data-update-available":i?void 0:"true","aria-label":d,title:d,disabled:a,onClick:()=>{e.installAndRestart()},style:{display:"inline-flex",alignItems:"center",gap:7,height:28,padding:"0 12px",borderRadius:999,border:i?"1px solid var(--status-danger-text)":"1px solid var(--color-own)",background:i?"var(--bg-surface)":a?"var(--bg-muted)":"var(--color-own)",color:i?"var(--status-danger-text)":a?"var(--text-secondary)":"var(--color-paper)",fontSize:12,fontWeight:700,fontFamily:"var(--font-sans)",cursor:a?"wait":"pointer",whiteSpace:"nowrap",boxShadow:i?"none":"0 0 0 3px color-mix(in srgb, var(--color-own) 22%, transparent), 0 1px 2px rgba(0,0,0,0.18)"},children:[t.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:15,height:15,borderRadius:999,fontSize:11,fontWeight:900,lineHeight:1,background:i?"transparent":"color-mix(in srgb, var(--color-paper) 28%, transparent)",color:"currentColor"},children:"↑"}),o]})}const X0=[{name:B.shortcuts.groupNavigation,items:[{keys:"/",label:B.shortcuts.search},{keys:"j",label:B.shortcuts.moveDown},{keys:"k",label:B.shortcuts.moveUp},{keys:"Enter",label:B.shortcuts.openSelected},{keys:"Esc",label:"Close / clear"}]},{name:B.shortcuts.groupActions,items:[{keys:"⌘K",label:B.shortcuts.openPalette},{keys:"?",label:B.shortcuts.openShortcuts},{keys:"⌘B",label:B.shortcuts.toggleSidebar},{keys:"E",label:B.actions.edit}]},{name:B.shortcuts.groupTheme,items:[{keys:"⌘⇧D",label:B.shortcuts.toggleTheme}]}];function Z0({open:e,onClose:r,groups:n=X0,title:s=B.shortcuts.title}){const o=c.useRef(null),a=c.useRef(null);return c.useEffect(()=>{var i;if(e)return o.current=document.activeElement??null,(i=a.current)==null||i.focus(),()=>{var l,d;(d=(l=o.current)==null?void 0:l.focus)==null||d.call(l),o.current=null}},[e]),c.useEffect(()=>{if(!e)return;function i(l){var d;if(l.key==="Escape"){l.preventDefault(),r();return}l.key==="Tab"&&(l.preventDefault(),(d=a.current)==null||d.focus())}return window.addEventListener("keydown",i,!0),()=>window.removeEventListener("keydown",i,!0)},[e,r]),e?t.jsx("div",{role:"presentation","data-testid":"shortcut-modal",style:{position:"fixed",inset:0,background:"color-mix(in srgb, var(--bg-canvas) 70%, transparent)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:60},onClick:i=>{i.target===i.currentTarget&&r()},children:t.jsxs("div",{role:"dialog","aria-modal":"true","aria-labelledby":"shortcut-modal-title",style:{width:"min(480px, 92vw)",maxHeight:"80vh",overflow:"auto",background:"var(--bg-canvas)",border:"1px solid var(--border-default)",borderRadius:8,boxShadow:"0 16px 48px rgba(0,0,0,0.18)",padding:"16px 20px",fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[t.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[t.jsx("h2",{id:"shortcut-modal-title",style:{margin:0,fontFamily:"var(--font-serif)",fontWeight:500,fontSize:18},children:s}),t.jsx("button",{ref:a,type:"button","aria-label":"Close",onClick:r,style:{background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,padding:"2px 8px",color:"var(--text-secondary)",cursor:"pointer",fontSize:13},children:"Esc"})]}),n.map(i=>t.jsxs("section",{style:{marginBottom:12},children:[t.jsx("h3",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-secondary)",margin:"0 0 6px"},children:i.name}),t.jsx("ul",{style:{listStyle:"none",margin:0,padding:0},children:i.items.map(l=>t.jsxs("li",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderTop:"1px solid var(--border-default)",fontSize:13},children:[t.jsx("span",{children:l.label}),t.jsx("kbd",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-secondary)",border:"1px solid var(--border-default)",borderRadius:3,padding:"1px 6px"},children:l.keys})]},`${i.name}:${l.keys}`))})]},i.name))]})}):null}function ek(e){const r=B.actions,n=[{action:"open",label:r.open},{action:"copy-path",label:r.copyPath},{action:"reveal",label:r.revealInEditor},{action:"run-benchmark",label:r.runBenchmark}];if(e.origin==="source")return[...n,{action:"edit",label:r.edit},{action:"duplicate",label:r.duplicate},{action:"delete",label:r.delete}];const s=[...n];return s.push({action:"clone",label:r.cloneToAuthoring}),e.updateAvailable&&s.push({action:"update",label:r.update}),s.push({action:"uninstall",label:r.uninstall}),s.push({action:"delete",label:r.delete,disabled:!0,title:r.deletePluginTooltip}),s}function tk({state:e,onClose:r,onAction:n,itemsOverride:s}){const o=c.useRef(null),a=c.useRef(null),[i,l]=c.useState(0),d=c.useMemo(()=>e.skill?s??ek(e.skill):[],[e.skill,s]),u=c.useMemo(()=>{if(typeof window>"u")return{left:e.x,top:e.y};const f=8,h=220,m=44+d.length*28;let v=e.x,x=e.y;return v+h+f>window.innerWidth&&(v=Math.max(f,e.x-h)),x+m+f>window.innerHeight&&(x=Math.max(f,e.y-m)),{left:v,top:x}},[e.x,e.y,d.length]);c.useEffect(()=>{if(e.open)return a.current=document.activeElement??null,l(0),requestAnimationFrame(()=>{var f;(f=o.current)==null||f.focus()}),()=>{var f,h;(h=(f=a.current)==null?void 0:f.focus)==null||h.call(f),a.current=null}},[e.open]);const p=c.useCallback(()=>{if(!e.skill)return;const f=d[i];!f||f.disabled||(n(f.action,e.skill),r())},[d,i,e.skill,n,r]);return c.useEffect(()=>{if(!e.open)return;function f(m){if(m.key==="Escape"){m.preventDefault(),r();return}if(m.key==="ArrowDown"){m.preventDefault(),l(v=>Math.min(v+1,Math.max(d.length-1,0)));return}if(m.key==="ArrowUp"){m.preventDefault(),l(v=>Math.max(v-1,0));return}if(m.key==="Enter"||m.key===" "){m.preventDefault(),p();return}}function h(m){o.current&&m.target instanceof Node&&(o.current.contains(m.target)||r())}return window.addEventListener("keydown",f,!0),window.addEventListener("mousedown",h,!0),()=>{window.removeEventListener("keydown",f,!0),window.removeEventListener("mousedown",h,!0)}},[e.open,r,d.length,p]),!e.open||!e.skill?null:t.jsx("div",{ref:o,role:"menu",tabIndex:-1,"data-testid":"context-menu",style:{position:"fixed",left:u.left,top:u.top,zIndex:70,minWidth:200,padding:4,background:"var(--bg-canvas)",border:"1px solid var(--border-default)",borderRadius:6,boxShadow:"0 12px 32px rgba(0,0,0,0.16)",fontFamily:"var(--font-sans)",fontSize:13,color:"var(--text-primary)",outline:"none"},children:d.map((f,h)=>t.jsx("div",{role:"menuitem","aria-disabled":f.disabled||void 0,title:f.title||void 0,"data-action":f.action,"data-selected":h===i||void 0,onMouseEnter:()=>l(h),onClick:()=>{f.disabled||(n(f.action,e.skill),r())},style:{padding:"5px 10px",borderRadius:4,cursor:f.disabled?"default":"pointer",opacity:f.disabled?.5:1,background:h===i?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent"},children:f.label},f.action))})}const rk=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function nk(e){const{skill:r,onCloned:n,onCancel:s}=e,[o,a]=c.useState({target:"standalone",plugin:"",pluginName:""}),[i,l]=c.useState(!1),[d,u]=c.useState(null),p=c.useRef(null),f=c.useRef(null),h=c.useRef(null);c.useEffect(()=>(h.current=document.activeElement??null,requestAnimationFrame(()=>{var x;return(x=f.current)==null?void 0:x.focus()}),()=>{var x,g;(g=(x=h.current)==null?void 0:x.focus)==null||g.call(x),h.current=null}),[]),c.useEffect(()=>{function x(g){g.key==="Escape"&&(g.stopPropagation(),s())}return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[s]);const m=i||o.target==="plugin"&&!o.plugin.trim()||o.target==="new-plugin"&&!rk.test(o.pluginName.trim()),v=c.useCallback(async x=>{if(x.preventDefault(),!m){l(!0),u(null);try{const g={source:r.skill,sourcePlugin:r.plugin,target:o.target};o.target==="plugin"&&(g.plugin=o.plugin.trim()),o.target==="new-plugin"&&(g.pluginName=o.pluginName.trim());const b=await fetch("/api/skills/clone",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)}),y=await b.json().catch(()=>({}));if(!b.ok||!y.ok){u(y.message||y.error||`HTTP ${b.status}`);return}n({target:y.target??"",files:y.files??null})}catch(g){u(g.message??"Network error")}finally{l(!1)}}},[m,o,r,n]);return t.jsx("div",{role:"dialog","aria-modal":"true","aria-labelledby":"clone-dialog-title",ref:p,"data-testid":"clone-to-authoring-dialog",style:sk,onClick:x=>{x.target===x.currentTarget&&s()},children:t.jsxs("form",{onSubmit:v,style:ok,children:[t.jsx("h2",{id:"clone-dialog-title",style:ak,children:"Clone to authoring"}),t.jsxs("p",{style:ik,children:["Fork ",t.jsx("code",{style:yl,children:r.skill})," into the authoring scope so you can edit it."]}),t.jsxs("fieldset",{style:lk,children:[t.jsx("legend",{style:ck,children:"Target"}),t.jsxs("label",{style:ro,children:[t.jsx("input",{type:"radio",name:"target",value:"standalone",checked:o.target==="standalone",onChange:()=>a(x=>({...x,target:"standalone"})),"data-testid":"clone-target-standalone"}),t.jsxs("span",{style:no,children:[t.jsx("strong",{children:"Standalone"}),t.jsxs("span",{style:so,children:["Lands at ",t.jsxs("code",{style:yl,children:["skills/",r.skill,"-fork/"]})]})]})]}),t.jsxs("label",{style:ro,children:[t.jsx("input",{type:"radio",name:"target",value:"plugin",checked:o.target==="plugin",onChange:()=>a(x=>({...x,target:"plugin"})),"data-testid":"clone-target-plugin"}),t.jsxs("span",{style:no,children:[t.jsx("strong",{children:"Add to existing plugin"}),t.jsx("span",{style:so,children:"Lands inside a plugin you already author."})]})]}),o.target==="plugin"&&t.jsx("input",{type:"text",placeholder:"plugin name or path",value:o.plugin,onChange:x=>a(g=>({...g,plugin:x.target.value})),"data-testid":"clone-plugin-input",autoFocus:!0,style:vl}),t.jsxs("label",{style:ro,children:[t.jsx("input",{type:"radio",name:"target",value:"new-plugin",checked:o.target==="new-plugin",onChange:()=>a(x=>({...x,target:"new-plugin"})),"data-testid":"clone-target-new-plugin"}),t.jsxs("span",{style:no,children:[t.jsx("strong",{children:"Create new plugin"}),t.jsx("span",{style:so,children:"Scaffolds a fresh plugin folder with this skill inside."})]})]}),o.target==="new-plugin"&&t.jsx("input",{type:"text",placeholder:"plugin-name (kebab-case)",value:o.pluginName,onChange:x=>a(g=>({...g,pluginName:x.target.value})),"data-testid":"clone-new-plugin-name-input",autoFocus:!0,style:vl})]}),d&&t.jsx("div",{role:"alert",style:dk,"data-testid":"clone-error",children:d}),t.jsxs("div",{style:uk,children:[t.jsx("button",{type:"button",ref:f,onClick:s,disabled:i,style:pk,"data-testid":"clone-cancel",children:"Cancel"}),t.jsx("button",{type:"submit",disabled:m,style:fk,"data-testid":"clone-submit",children:i?"Cloning…":"Clone"})]})]})})}const sk={position:"fixed",inset:0,background:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},ok={background:"var(--bg, #fff)",color:"var(--text, #111)",borderRadius:12,padding:"24px 28px",minWidth:460,maxWidth:560,boxShadow:"0 24px 60px rgba(0,0,0,0.5)",border:"1px solid var(--border, rgba(0,0,0,0.10))"},ak={fontSize:18,fontWeight:700,margin:0},ik={margin:"12px 0 18px",fontSize:14,color:"var(--text-muted, #555)"},lk={border:"none",padding:0,margin:"0 0 16px"},ck={fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:1.2,color:"var(--text-muted, #555)",padding:0,marginBottom:10},ro={display:"flex",alignItems:"flex-start",gap:10,padding:"10px 4px",cursor:"pointer",borderRadius:6},no={display:"flex",flexDirection:"column",gap:2,fontSize:14},so={fontSize:12,color:"var(--text-muted, #777)"},vl={display:"block",width:"100%",padding:"8px 12px",margin:"4px 0 8px 28px",maxWidth:380,fontSize:14,borderRadius:6,border:"1px solid var(--border, rgba(0,0,0,0.20))",background:"var(--bg, #fff)",color:"var(--text, #111)",fontFamily:"var(--font-geist-mono, monospace)"},yl={fontFamily:"var(--font-geist-mono, monospace)",fontSize:13,padding:"1px 6px",borderRadius:4,background:"rgba(127,127,127,0.12)"},dk={fontSize:13,color:"#c62828",background:"rgba(198,40,40,0.10)",border:"1px solid rgba(198,40,40,0.40)",padding:"8px 12px",borderRadius:6,margin:"0 0 12px"},uk={display:"flex",justifyContent:"flex-end",gap:8,marginTop:8},pk={padding:"8px 16px",borderRadius:6,border:"1px solid var(--border, rgba(0,0,0,0.20))",background:"transparent",color:"var(--text, #111)",cursor:"pointer",fontSize:14},fk={padding:"8px 16px",borderRadius:6,border:"1px solid var(--accent, #06b6d4)",background:"var(--accent, #06b6d4)",color:"#fff",cursor:"pointer",fontSize:14,fontWeight:600},bl=e=>`${e.plugin}/${e.skill}`;function kl(e){const r=(e==null?void 0:e.delayMs)??1e4,n=e==null?void 0:e.onCommit,s=e==null?void 0:e.onFailure,o=(e==null?void 0:e.apiCall)??de.deleteSkill.bind(de),a=c.useRef(n),i=c.useRef(s),l=c.useRef(o);a.current=n,i.current=s,l.current=o;const d=c.useRef(new Map),[,u]=c.useState(0),p=c.useCallback(()=>u(y=>y+1),[]),f=c.useCallback(async y=>{var j,S;try{await l.current(y.skill.plugin,y.skill.skill),(j=a.current)==null||j.call(a,y.skill)}catch(k){(S=i.current)==null||S.call(i,y.skill,k)}finally{d.current.delete(bl(y.skill)),p()}},[p]),h=c.useCallback(y=>{const j=bl(y),S=d.current.get(j);S!=null&&S.timeoutId&&clearTimeout(S.timeoutId);const k={skill:y,timeoutId:null};k.timeoutId=setTimeout(()=>{k.timeoutId=null,f(k)},r),d.current.set(j,k),p()},[r,f,p]),m=c.useCallback(y=>{const j=d.current.get(y);j&&(j.timeoutId&&clearTimeout(j.timeoutId),d.current.delete(y),p())},[p]),v=c.useCallback(async()=>{const y=Array.from(d.current.values());for(const j of y)j.timeoutId&&(clearTimeout(j.timeoutId),j.timeoutId=null);await Promise.all(y.map(j=>f(j)))},[f]),x=c.useCallback(y=>d.current.has(y),[]),g=c.useCallback(async y=>{const j=d.current.get(y);j&&(j.timeoutId&&(clearTimeout(j.timeoutId),j.timeoutId=null),await f(j))},[f]),b=c.useCallback(async y=>{const j=Array.from(d.current.values()).filter(S=>S.skill.skill===y);for(const S of j)S.timeoutId&&(clearTimeout(S.timeoutId),S.timeoutId=null);await Promise.all(j.map(S=>f(S)))},[f]);return c.useEffect(()=>{const y=()=>{v()};return window.addEventListener("beforeunload",y),()=>{window.removeEventListener("beforeunload",y)}},[v]),c.useEffect(()=>{const y=d.current;return()=>{for(const j of y.values())j.timeoutId&&(clearTimeout(j.timeoutId),j.timeoutId=null,f(j));y.clear()}},[]),{enqueueDelete:h,cancelDelete:m,flushPending:v,isPending:x,flushKey:g,flushBySkillName:b}}const hk={"anthropic-api":{name:B.setupProviders.anthropic.name,description:B.setupProviders.anthropic.description,envVars:B.setupProviders.anthropic.envVars,keyUrl:B.setupProviders.anthropic.keyUrl,learnMoreUrl:B.setupProviders.anthropic.learnMoreUrl},openai:{name:B.setupProviders.openai.name,description:B.setupProviders.openai.description,envVars:B.setupProviders.openai.envVars,keyUrl:B.setupProviders.openai.keyUrl,learnMoreUrl:B.setupProviders.openai.learnMoreUrl},openrouter:{name:B.setupProviders.openrouter.name,description:B.setupProviders.openrouter.description,envVars:B.setupProviders.openrouter.envVars,keyUrl:B.setupProviders.openrouter.keyUrl,learnMoreUrl:B.setupProviders.openrouter.learnMoreUrl},gemini:{name:B.setupProviders.gemini.name,description:B.setupProviders.gemini.description,envVars:B.setupProviders.gemini.envVars,keyUrl:B.setupProviders.gemini.keyUrl,learnMoreUrl:B.setupProviders.gemini.learnMoreUrl},ollama:{name:B.setupProviders.ollama.name,description:B.setupProviders.ollama.description,envVars:B.setupProviders.ollama.envVars,install:[B.setupProviders.ollama.installCmd],start:[B.setupProviders.ollama.startCmd],pullExample:B.setupProviders.ollama.pullExample,learnMoreUrl:B.setupProviders.ollama.learnMoreUrl},"lm-studio":{name:B.setupProviders.lmStudio.name,description:B.setupProviders.lmStudio.description,envVars:B.setupProviders.lmStudio.envVars,install:[B.setupProviders.lmStudio.installCmd],start:[B.setupProviders.lmStudio.startCmd],pullExample:B.setupProviders.lmStudio.pullExample,learnMoreUrl:B.setupProviders.lmStudio.learnMoreUrl},"claude-code":{name:B.setupProviders.claudeCode.name,description:B.setupProviders.claudeCode.description,envVars:[],notes:[B.setupProviders.claudeCode.loginHint,B.claudeCodeLabel.compactLabel],learnMoreUrl:B.setupProviders.claudeCode.learnMoreUrl}};function mk(e){return e?hk[e]??null:null}function xk({open:e,providerKey:r,onClose:n}){const s=c.useRef(null);if(c.useEffect(()=>{if(!e)return;const i=l=>{l.key==="Escape"&&(l.preventDefault(),n())};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[e,n]),c.useEffect(()=>{if(!e)return;const i=s.current;if(!i)return;const l=i.querySelector("button, a[href], [tabindex]:not([tabindex='-1']), input, textarea, select");l==null||l.focus()},[e]),!e||typeof document>"u")return null;const o=mk(r),a=(o==null?void 0:o.name)??B.setupDrawer.fallbackTitle;return Br.createPortal(t.jsxs(t.Fragment,{children:[t.jsx("div",{"data-testid":"setup-drawer-backdrop","aria-hidden":"true",onClick:n,style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",zIndex:99,animation:"vskillDrawerBackdropIn 120ms ease"}}),t.jsxs("div",{"data-testid":"setup-drawer",ref:s,role:"dialog","aria-modal":"true","aria-label":B.setupDrawer.title(a),style:{position:"fixed",top:0,right:0,bottom:0,width:"480px",maxWidth:"100vw",background:"var(--bg-surface, var(--surface-1))",borderLeft:"1px solid var(--border-default, var(--border-subtle))",boxShadow:"-8px 0 32px rgba(0,0,0,0.18)",display:"flex",flexDirection:"column",zIndex:100,fontFamily:"var(--font-sans)",animation:"vskillDrawerIn 200ms cubic-bezier(0.2, 0, 0, 1)"},children:[t.jsx(gk,{title:a,onClose:n}),t.jsx("div",{"data-testid":"setup-drawer-body",style:{flex:1,overflowY:"auto",padding:"16px 20px"},children:o?t.jsx(vk,{content:o}):t.jsx(yk,{})}),t.jsx("style",{children:`@keyframes vskillDrawerIn {
66
+ from { transform: translateX(100%); }
67
+ to { transform: translateX(0); }
68
+ }
69
+ @keyframes vskillDrawerBackdropIn {
70
+ from { opacity: 0; }
71
+ to { opacity: 1; }
72
+ }`})]})]}),document.body)}function gk({title:e,onClose:r}){return t.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"14px 20px",borderBottom:"1px solid var(--border-default, var(--border-subtle))"},children:[t.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:18,fontWeight:500,margin:0,color:"var(--text-primary)"},children:B.setupDrawer.title(e)}),t.jsx("button",{type:"button","data-testid":"setup-drawer-close",onClick:r,"aria-label":B.setupDrawer.close,style:{background:"transparent",border:"none",color:"var(--text-secondary)",cursor:"pointer",fontSize:18,padding:4,lineHeight:1},children:"×"})]})}function vk({content:e}){var r,n;return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[t.jsx("p",{style:{fontSize:14,lineHeight:1.5,color:"var(--text-primary)",margin:0},children:e.description}),e.notes&&e.notes.length>0&&t.jsx("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:6},children:e.notes.map(s=>t.jsx("li",{style:{fontSize:13,color:"var(--text-secondary)",padding:"8px 10px",background:"color-mix(in srgb, var(--accent-surface) 8%, transparent)",borderRadius:4},children:s},s))}),e.envVars.length>0&&t.jsxs("section",{children:[t.jsx("h3",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",margin:"0 0 8px"},children:B.setupDrawer.requiredEnv}),t.jsx("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:6},children:e.envVars.map(s=>t.jsx("li",{children:t.jsx(bk,{name:s})},s))})]}),e.keyUrl&&t.jsx(kk,{href:e.keyUrl,label:B.setupDrawer.getKey,testId:"setup-drawer-get-key"}),(e.install||e.start||e.pullExample)&&t.jsxs("section",{children:[t.jsx("h3",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",margin:"0 0 8px"},children:B.setupDrawer.installRun}),t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(r=e.install)==null?void 0:r.map((s,o)=>t.jsx(oo,{code:s},`install-${o}`)),(n=e.start)==null?void 0:n.map((s,o)=>t.jsx(oo,{code:s},`start-${o}`)),e.pullExample&&t.jsx(oo,{code:e.pullExample})]})]}),t.jsx("footer",{style:{marginTop:8},children:t.jsxs("a",{href:e.learnMoreUrl,target:"_blank",rel:"noopener noreferrer","data-testid":"setup-drawer-learn-more",style:{fontSize:12,color:"var(--color-accent, var(--accent-surface))",textDecoration:"none"},children:[B.setupDrawer.learnMore," →"]})})]})}function yk(){return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[t.jsx("h3",{style:{margin:0,fontFamily:"var(--font-serif)",fontSize:16,fontWeight:500,color:"var(--text-primary)"},children:B.setupDrawer.fallbackTitle}),t.jsx("p",{style:{margin:0,fontSize:13,color:"var(--text-secondary)",lineHeight:1.5},children:B.setupDrawer.fallbackBody})]})}function bk({name:e}){const r=async()=>{var n;try{await((n=navigator.clipboard)==null?void 0:n.writeText(e))}catch{}};return t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",background:"color-mix(in srgb, var(--border-default) 30%, transparent)",borderRadius:4},children:[t.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-primary)",flex:1},children:e}),t.jsx("button",{type:"button",onClick:r,"aria-label":`Copy ${e} to clipboard`,style:{background:"transparent",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:3,padding:"2px 8px",color:"var(--text-secondary)",fontSize:11,fontFamily:"var(--font-sans)",cursor:"pointer"},children:B.setupDrawer.copy})]})}function oo({code:e}){return t.jsx("pre",{style:{margin:0,padding:"8px 10px",background:"var(--bg-canvas, #111)",color:"var(--text-primary)",fontFamily:"var(--font-mono)",fontSize:11.5,lineHeight:1.5,borderRadius:4,border:"1px solid var(--border-default, var(--border-subtle))",overflowX:"auto",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e})}function kk({href:e,label:r,testId:n}){return t.jsxs("a",{href:e,target:"_blank",rel:"noopener noreferrer","data-testid":n,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 14px",borderRadius:6,border:"1px solid var(--border-default, var(--border-subtle))",background:"color-mix(in srgb, var(--accent-surface) 12%, transparent)",color:"var(--text-primary)",textDecoration:"none",fontSize:13,fontWeight:500,fontFamily:"var(--font-sans)",width:"fit-content"},children:[r," →"]})}function jk(){const[e,r]=c.useState(!1),[n,s]=c.useState(null),o=c.useRef(null),a=c.useCallback((l,d)=>{var u;o.current=typeof document<"u"?document.activeElement:null,(u=d==null?void 0:d.beforeOpen)==null||u.call(d),s(l),r(!0)},[]),i=c.useCallback(()=>{r(!1);const l=o.current;l&&"focus"in l&&typeof l.focus=="function"&&queueMicrotask(()=>l.focus())},[]);return c.useMemo(()=>({open:a,close:i,isOpen:e,providerKey:n}),[a,i,e,n])}function wk(e){return(e instanceof DOMException||e instanceof Error)&&e.name==="AbortError"}function Sk(e){let r="message";const n=[];for(const s of e.split(`
73
+ `)){if(!s||s.startsWith(":"))continue;const o=s.indexOf(":"),a=o===-1?s:s.slice(0,o),i=o===-1?"":s.slice(o+1),l=i.startsWith(" ")?i.slice(1):i;a==="event"?r=l||"message":a==="data"&&n.push(l)}return n.length===0?null:{event:r,data:n.join(`
74
+ `)}}function jl(e,r){let n=e.replace(/\r\n/g,`
75
+ `).replace(/\r/g,`
76
+ `),s=n.indexOf(`
77
+
78
+ `);for(;s!==-1;){const o=n.slice(0,s);n=n.slice(s+2);const a=Sk(o);a&&r(a),s=n.indexOf(`
79
+
80
+ `)}return n}function Eu(e,r){const n=r.fetchImpl??fetch,s=new AbortController;let o=!1;const a=()=>{o||(o=!0,clearTimeout(i),s.abort())},i=setTimeout(()=>{var d;if(o)return;const l=new Error(r.timeoutMessage??"SSE stream timed out");a(),(d=r.onError)==null||d.call(r,l)},r.timeoutMs??2e5);return(async()=>{var l,d;try{const u=await n(e,{headers:{Accept:"text/event-stream"},signal:s.signal});if(!u.ok){const x=u.statusText?` ${u.statusText}`:"";throw new Error(`SSE stream failed: HTTP ${u.status}${x}`)}if(!u.body)throw new Error("SSE stream failed: response body is empty");const p=u.body.getReader(),f=new TextDecoder;let h="";for(;;){const{done:x,value:g}=await p.read();if(x)break;h=jl(h+f.decode(g,{stream:!0}),r.onEvent)}const m=f.decode();(m||h)&&jl(`${h}${m}
81
+
82
+ `,r.onEvent),clearTimeout(i);const v=!o;o=!0,v&&((l=r.onClose)==null||l.call(r))}catch(u){if(clearTimeout(i),o&&wk(u))return;o=!0,(d=r.onError)==null||d.call(r,u instanceof Error?u:new Error(String(u)))}})(),{close:a}}function La(e){return(e==null?void 0:e.fetchImpl)??fetch}async function Nu(e){const n=await La(e)("/api/studio/supported-agents",{headers:{Accept:"application/json"}});if(!n.ok)throw new Error(`fetchSupportedAgents failed: HTTP ${n.status}`);const s=await n.json();return Array.isArray(s==null?void 0:s.agents)?s.agents:[]}async function Ck(e,r){const s=await La(r)("/api/studio/install-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!s.ok){const a=await s.json().catch(()=>({}));throw new Error(a.error||`install-skill failed: HTTP ${s.status}`)}const o=await s.json();if(!o.jobId)throw new Error("install-skill: server did not return a jobId");return{jobId:o.jobId,...typeof o.streamPath=="string"&&o.streamPath.startsWith("/")?{streamPath:o.streamPath}:{},...typeof o.mode=="string"?{mode:o.mode}:{}}}function Ek(e,r,n){const s=La(n),o=e.startsWith("/")?e:`/api/studio/install-skill/${encodeURIComponent(e)}/stream`;let a;return a=Eu(o,{fetchImpl:s,timeoutMessage:"install-skill SSE stream timed out",onEvent:({event:i,data:l})=>{var d;if(i==="result"){try{const u=JSON.parse(l);r.onResult(u)}catch(u){(d=r.onError)==null||d.call(r,u instanceof Error?u:new Error(String(u)))}return}if(i==="done"){let u={results:[]};try{u=JSON.parse(l)}catch{}a.close(),r.onDone(u)}},onError:i=>{var l;return(l=r.onError)==null?void 0:l.call(r,i)}}),a}function Nk(e){const r=[],n=[],s=[];for(const a of e)a.installMode==="clipboard"?s.push(a):a.detected?r.push(a):n.push(a);const o=(a,i)=>a.displayName.localeCompare(i.displayName);return{detected:r.sort(o),available:n.sort(o),cloud:s.sort(o)}}function Rk(e){const r=[],n=[],s=[];for(const a of e)a.tier===1&&a.installMode==="filesystem"?r.push(a):a.tier===2&&a.installMode==="filesystem"?n.push(a):a.tier===3||a.installMode==="clipboard"?s.push(a):r.push(a);const o=(a,i)=>a.detected!==i.detected?a.detected?-1:1:a.displayName.localeCompare(i.displayName);return{dropIn:r.sort(o),formatConverted:n.sort(o),cloud:s.sort(o)}}function Tk(e){const r=[],n=[],s=new Set;for(const o of e){if(o.presence==="absent"||o.health==="missing"){n.push({kind:"individual",key:o.id,agent:o});continue}if(o.sharedFolderGroup&&o.sharedFolderGroup.length>1){const a=[...o.sharedFolderGroup].sort().join("+");if(s.has(a))continue;s.add(a);const i=e.filter(l=>o.sharedFolderGroup.includes(l.id));r.push({kind:"aggregate",key:`shared:${a}`,consumers:i,sharedFolderPath:o.sharedFolderPath??"~/.config/agents/skills",combinedCount:i.reduce((l,d)=>l+d.globalCount,0)});continue}r.push({kind:"individual",key:o.id,agent:o})}return{detected:r,notDetected:n}}function Ik({agents:e,activeAgentId:r,focusedAgentId:n,onFocusAgent:s,onSwitch:o,onOpenSetup:a,onClose:i,groupBy:l="presence",onRequestInstall:d,fetchSupportedAgentsImpl:u}){const p=c.useRef(null);c.useEffect(()=>{const b=y=>{y.key==="Escape"&&(y.preventDefault(),i())};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[i]),c.useEffect(()=>{const b=j=>{p.current&&!p.current.contains(j.target)&&i()},y=setTimeout(()=>{document.addEventListener("mousedown",b)},0);return()=>{clearTimeout(y),document.removeEventListener("mousedown",b)}},[i]);const f=c.useMemo(()=>Tk(e),[e]),[h,m]=c.useState(null),[v,x]=c.useState(null);c.useEffect(()=>{if(l!=="installMode")return;let b=!1;return(u??Nu)().then(j=>{b||m(j)}).catch(j=>{b||x(j instanceof Error?j.message:String(j))}),()=>{b=!0}},[l,u]);const g=e.find(b=>b.id===n)??e.find(b=>b.id===r)??e[0];return typeof document>"u"?null:Br.createPortal(t.jsxs("div",{ref:p,"data-testid":"agent-scope-picker-popover","data-group-by":l,role:"dialog","aria-label":B.scopePicker.popoverTitle,style:{position:"fixed",top:96,left:"50%",transform:"translateX(-50%)",width:600,maxWidth:"calc(100vw - 32px)",background:"var(--bg-surface, var(--surface-1))",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:8,boxShadow:"0 18px 40px rgba(0,0,0,0.25)",overflow:"hidden",zIndex:90,animation:"scopePickerFadeIn 120ms cubic-bezier(0.2, 0, 0, 1)"},children:[t.jsxs("div",{style:{display:"flex",height:360,maxHeight:"60vh"},children:[t.jsx("section",{"data-testid":"agent-scope-picker-agents",style:{width:260,borderRight:"1px solid var(--border-default, var(--border-subtle))",overflowY:"auto",padding:"6px 0"},children:l==="installMode"?t.jsx(Ak,{supported:h,error:v,focusedAgentId:n,activeAgentId:r,onFocus:s,onRequestInstall:d}):t.jsx(Lk,{rows:f,activeAgentId:r,focusedAgentId:n,onFocus:s})}),t.jsx("section",{"data-testid":"agent-scope-picker-stats",style:{flex:1,overflowY:"auto",padding:"14px 16px"},children:g?t.jsx(Fk,{agent:g,activeAgentId:r,onSwitch:()=>o(g.id)}):t.jsx(Ru,{})})]}),t.jsx("style",{children:`@keyframes scopePickerFadeIn {
83
+ from { opacity: 0; transform: translateX(-50%) translateY(2px); }
84
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
85
+ }`})]}),document.body)}function Lk({rows:e,activeAgentId:r,focusedAgentId:n,onFocus:s}){return e.detected.length===0&&e.notDetected.length===0?t.jsx(Ru,{}):t.jsxs(t.Fragment,{children:[e.detected.map(o=>o.kind==="aggregate"?t.jsx($k,{row:o,onFocus:()=>{var a;return s(((a=o.consumers[0])==null?void 0:a.id)??r??"")}},o.key):t.jsx(Pk,{agent:o.agent,focused:o.agent.id===n,active:o.agent.id===r,onClick:()=>s(o.agent.id)},o.key)),e.notDetected.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{"data-testid":"agent-scope-not-detected-subheading",title:"These agents were not found on this machine. Hover a row to see which folder detection looked for.",style:{padding:"10px 14px 4px",fontSize:10,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-tertiary)"},children:B.scopePicker.notDetectedSubheading}),e.notDetected.map(o=>t.jsx(Mk,{agent:o.agent},o.key))]})]})}function Ak({supported:e,error:r,focusedAgentId:n,activeAgentId:s,onFocus:o,onRequestInstall:a}){if(r)return t.jsxs("div",{"data-testid":"agent-scope-supported-error",style:{padding:"16px 18px",fontSize:12,color:"var(--color-error, #dc2626)"},children:["Failed to load supported agents: ",r]});if(e===null)return t.jsx("div",{"data-testid":"agent-scope-supported-loading",style:{padding:"16px 18px",fontSize:12,color:"var(--text-secondary)"},children:"Loading agents…"});const i=Nk(e);return t.jsxs(t.Fragment,{children:[t.jsx(ao,{testId:"agent-scope-section-detected",title:"Detected on this machine",agents:i.detected,emptyHint:"No agents detected on this machine yet.",renderRow:l=>t.jsx(io,{agent:l,focused:l.id===n,active:l.id===s,onClick:()=>o(l.id),kind:"detected"},l.id)}),t.jsx(ao,{testId:"agent-scope-section-available",title:"Available to install",agents:i.available,emptyHint:"All supported agents are detected — nothing left to install here.",renderRow:l=>t.jsx(io,{agent:l,focused:l.id===n,active:!1,onClick:()=>o(l.id),kind:"available",onRequestInstall:a},l.id)}),t.jsx(ao,{testId:"agent-scope-section-cloud",title:"Cloud only (paste required)",agents:i.cloud,emptyHint:"No cloud-only tools available.",renderRow:l=>t.jsx(io,{agent:l,focused:l.id===n,active:!1,onClick:()=>o(l.id),kind:"cloud",onRequestInstall:a},l.id)})]})}function ao({testId:e,title:r,agents:n,emptyHint:s,renderRow:o}){return t.jsxs("div",{"data-testid":e,children:[t.jsx("div",{style:{padding:"10px 14px 4px",fontSize:10,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-tertiary)"},children:r}),n.length===0?t.jsx("div",{style:{padding:"4px 14px 8px",fontSize:11,color:"var(--text-tertiary)",fontStyle:"italic"},children:s}):n.map(o)]})}function io({agent:e,focused:r,active:n,onClick:s,kind:o,onRequestInstall:a}){const i=o==="detected"?"var(--color-ok, #22c55e)":o==="available"?"var(--color-own, #f59e0b)":"var(--text-tertiary)",l=o==="cloud"?"Copy to clipboard":e.resolvedGlobalDir;return t.jsxs("div",{"data-testid":`agent-scope-supported-row-${e.id}`,"data-kind":o,"data-detected":e.detected?"true":"false",style:{display:"flex",flexDirection:"column",gap:2,padding:"6px 14px",background:r?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent"},children:[t.jsxs("button",{type:"button",onClick:s,"data-testid":`agent-scope-supported-row-button-${e.id}`,"data-active":n?"true":"false",style:{display:"flex",alignItems:"center",gap:10,width:"100%",background:"transparent",border:"none",cursor:"pointer",textAlign:"left",padding:0,fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:i,flexShrink:0}}),t.jsx("span",{style:{flex:1,fontSize:13},children:e.displayName}),t.jsxs("span",{title:"Install tier",style:{fontFamily:"var(--font-mono)",fontSize:9,color:"var(--text-secondary)",letterSpacing:"0.04em",textTransform:"uppercase"},children:["T",e.tier]})]}),t.jsx("div",{title:l,style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-tertiary)",paddingLeft:16,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l}),o==="available"&&a&&t.jsx("button",{type:"button","data-testid":`agent-scope-install-cta-${e.id}`,onClick:d=>{d.stopPropagation(),a(e.id)},style:{alignSelf:"flex-start",marginLeft:16,marginTop:2,padding:"2px 8px",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:4,background:"transparent",color:"var(--accent-text, var(--text-primary))",cursor:"pointer",fontSize:11,fontFamily:"var(--font-sans)"},children:"+ Install here"})]})}function Pk({agent:e,focused:r,active:n,onClick:s}){const o=e.health==="ok"?"var(--color-ok, #22c55e)":e.health==="stale"?"var(--color-own, #f59e0b)":"var(--text-tertiary)";return t.jsxs("button",{type:"button","data-testid":"agent-scope-row","data-agent-id":e.id,"data-active":n?"true":"false",onClick:s,style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"8px 14px",background:r?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent",border:"none",cursor:"pointer",textAlign:"left",fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:o,flexShrink:0}}),t.jsx("span",{style:{flex:1,fontSize:13},children:e.displayName}),t.jsxs("span",{title:"project · personal · plugins",style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:[e.installedCount,"·",e.globalCount,"·",e.pluginCount??0]})]})}function $k({row:e,onFocus:r}){return t.jsxs("button",{type:"button","data-testid":"agent-scope-shared-folder-row",onClick:r,style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:4,width:"100%",padding:"8px 14px",background:"transparent",border:"none",borderTop:"1px dashed var(--border-subtle)",borderBottom:"1px dashed var(--border-subtle)",cursor:"pointer",textAlign:"left",fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)"},children:e.sharedFolderPath}),t.jsxs("span",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[e.consumers.map(n=>t.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:10,background:"color-mix(in srgb, var(--color-global) 20%, transparent)",color:"var(--text-primary)"},children:n.id},n.id)),t.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontFamily:"var(--font-mono)"},children:["· ",e.combinedCount," skills"]})]})]})}function Mk({agent:e}){const r=e.isRemoteOnly?`${e.displayName} is a web-only product — no local CLI or folder to detect.`:e.resolvedGlobalDir?`Looked for ${e.resolvedGlobalDir} — not found.`:`${e.displayName} was not found on this machine.`;return t.jsxs("div",{"data-testid":`agent-scope-not-detected-row-${e.id}`,title:r,style:{display:"flex",alignItems:"center",gap:10,padding:"6px 14px",color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:12},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--text-tertiary)",flexShrink:0}}),t.jsx("span",{style:{flex:1},children:e.displayName}),e.isRemoteOnly&&t.jsx("span",{"data-testid":`agent-scope-remote-badge-${e.id}`,"aria-label":"Remote-only agent",title:"Web-only agent — no local CLI to install skills into. Use the agent's web UI to load skills.",style:{background:"color-mix(in srgb, var(--text-tertiary) 18%, transparent)",border:"1px solid var(--border-default, var(--border-subtle))",borderRadius:10,padding:"1px 8px",color:"var(--text-secondary)",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase"},children:"Remote"})]})}function Fk({agent:e,activeAgentId:r,onSwitch:n}){const s=e.id===r,o=e.isRemoteOnly===!0,a=s||o,i=s?"Active":o?"Remote-only":B.scopePicker.switchCta;return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:16,fontWeight:500,color:"var(--text-primary)"},children:e.displayName}),t.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:2},children:o?"Remote service — no local install":zk(e.health)})]}),t.jsxs("dl",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"4px 12px",margin:0,fontSize:12},children:[t.jsx(On,{label:B.scopePicker.statsInstalled,value:String(e.installedCount)}),t.jsx(On,{label:B.scopePicker.statsGlobal,value:String(e.globalCount)}),t.jsx(On,{label:B.scopePicker.statsPlugins,value:String(e.pluginCount??0)}),t.jsx(On,{label:B.scopePicker.statsLastSync,value:e.lastSync?Dk(e.lastSync):"—"})]}),t.jsx("button",{type:"button","data-testid":"agent-scope-switch",onClick:n,disabled:a,title:o?"This agent has no local CLI to switch to":void 0,style:{alignSelf:"flex-start",padding:"8px 14px",borderRadius:6,border:"1px solid var(--border-default, var(--border-subtle))",background:a?"transparent":"color-mix(in srgb, var(--accent-surface) 20%, transparent)",color:"var(--text-primary)",fontSize:12,fontWeight:500,fontFamily:"var(--font-sans)",cursor:a?"default":"pointer",opacity:a?.5:1},children:i})]})}function On({label:e,value:r}){return t.jsxs(t.Fragment,{children:[t.jsx("dt",{style:{color:"var(--text-secondary)",margin:0},children:e}),t.jsx("dd",{style:{color:"var(--text-primary)",margin:0,fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums"},children:r})]})}function Ru(){return t.jsx("div",{style:{padding:"16px 18px",fontSize:12,color:"var(--text-secondary)"},children:"No agents detected yet."})}function Dk(e){try{const r=new Date(e).getTime(),n=Date.now()-r;if(Number.isNaN(r))return"—";const s=Math.round(n/6e4);if(s<1)return"just now";if(s<60)return`${s}m ago`;const o=Math.round(s/60);return o<24?`${o}h ago`:`${Math.round(o/24)}d ago`}catch{return"—"}}function zk(e){switch(e){case"ok":return B.scopePicker.statsHealthOk;case"stale":return B.scopePicker.statsHealthStale;case"missing":return B.scopePicker.statsHealthMissing}}function Bk(e){const r=new Map;for(const n of e.sharedFolders??[])for(const s of n.consumers)r.set(s,n);return e.agents.map(n=>{const s=r.get(n.id);return{id:n.id,displayName:n.displayName,presence:n.detected?"detected":"absent",installedCount:n.localSkillCount,globalCount:n.globalSkillCount,pluginCount:n.pluginSkillCount??0,lastSync:n.lastSync,health:n.health,sharedFolderGroup:s?s.consumers:void 0,sharedFolderPath:s?s.path:void 0,isRemoteOnly:n.isRemoteOnly,resolvedGlobalDir:n.resolvedGlobalDir}})}function _k({agents:e,activeAgentId:r,onActiveAgentChange:n,onOpenSetup:s}){const[o,a]=c.useState(!1),[i,l]=c.useState(null),d=c.useRef(null),u=c.useMemo(()=>e.find(m=>m.id===r)??e[0]??null,[e,r]),p=c.useMemo(()=>u?u.health==="ok"?"var(--color-ok, #22c55e)":u.health==="stale"?"var(--color-own, #f59e0b)":"var(--text-tertiary)":"var(--text-tertiary)",[u]),f=c.useCallback(()=>{var m;a(!1),(m=d.current)==null||m.focus()},[]),h=c.useCallback(m=>{n(m),a(!1)},[n]);return t.jsxs(t.Fragment,{children:[t.jsxs("button",{ref:d,type:"button","data-testid":"agent-scope-picker-trigger","aria-haspopup":"dialog","aria-expanded":o,onClick:()=>a(m=>!m),onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),a(!0))},style:{display:"flex",alignItems:"center",gap:10,height:"40px",width:"100%",padding:"0 14px",background:"var(--bg-surface, var(--surface-1))",border:"none",borderBottom:"1px solid var(--border-default, var(--border-subtle))",cursor:"pointer",color:"var(--text-primary)",fontFamily:"var(--font-sans)",fontSize:13,fontWeight:500,textAlign:"left",position:"sticky",top:0,zIndex:2},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:p,flexShrink:0}}),t.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(u==null?void 0:u.displayName)??"Select agent"}),t.jsxs("span",{title:"project · personal · plugins",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:["(",(u==null?void 0:u.installedCount)??0," · ",(u==null?void 0:u.globalCount)??0," · ",(u==null?void 0:u.pluginCount)??0,")"]}),t.jsx("span",{"aria-hidden":"true",style:{fontSize:10,color:"var(--text-secondary)"},children:"▾"})]}),o&&t.jsx(Ik,{agents:e,activeAgentId:r,focusedAgentId:i??r,onFocusAgent:l,onSwitch:h,onOpenSetup:m=>{s(m),f()},onClose:f})]})}const Tu="vskill-ccode-banner-dismissed",Ok=new Set(["claude-cli","claude-code"]);function Wk(){try{return sessionStorage.getItem(Tu)==="true"}catch{return!1}}function Uk(){try{sessionStorage.setItem(Tu,"true")}catch{}}function Hk({activeAgentId:e}){const[r,n]=c.useState(()=>Wk()),s=c.useCallback(()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:open-setup-drawer",{detail:{provider:"claude-code"}}))},[]),o=c.useCallback(()=>{Uk(),n(!0)},[]);return!e||!Ok.has(e)||r?null:t.jsxs("div",{"data-testid":"claude-code-first-use-banner",role:"note","aria-label":"Claude Code session info",style:{display:"flex",alignItems:"flex-start",gap:10,padding:"8px 12px",borderBottom:"1px solid var(--border-default, var(--border-subtle))",background:"color-mix(in srgb, var(--accent-surface) 8%, transparent)",fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-primary)",lineHeight:1.45},children:[t.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--color-ok, #22c55e)",marginTop:6,flexShrink:0}}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsxs("span",{children:[B.claudeCodeLabel.firstUseBanner," "]}),t.jsx("button",{type:"button","data-testid":"claude-code-first-use-banner-learn-more",onClick:s,style:{background:"transparent",border:"none",padding:0,color:"var(--color-accent, var(--accent-surface))",cursor:"pointer",textDecoration:"underline",fontFamily:"inherit",fontSize:"inherit"},children:B.claudeCodeLabel.learnMore})]}),t.jsx("button",{type:"button","data-testid":"claude-code-first-use-banner-dismiss",onClick:o,"aria-label":"Dismiss Claude Code info banner",style:{background:"transparent",border:"none",color:"var(--text-secondary)",cursor:"pointer",fontSize:14,lineHeight:1,padding:2,flexShrink:0},children:"×"})]})}function Vk(){const[e,r]=c.useState(null),[n,s]=c.useState("loading"),[o,a]=c.useState(null),i=c.useCallback(async()=>{try{const l=await de.getAgents();r(l),s("ready"),a(null)}catch(l){s("error"),a(l.message)}},[]);return c.useEffect(()=>{i()},[i]),c.useEffect(()=>{const l=()=>void i();return window.addEventListener("studio:agent-changed",l),window.addEventListener("studio:project-changed",l),()=>{window.removeEventListener("studio:agent-changed",l),window.removeEventListener("studio:project-changed",l)}},[i]),{status:n,response:e,error:o,refresh:()=>void i()}}const Wn="workspace",Gk=["skills","agents"];async function Kk(){const e=await fetch("/api/workspace");if(!e.ok)throw new Error(`GET /api/workspace failed: ${e.status}`);return await e.json()}class qk extends Error{constructor(r,n,s){super(r),this.name="SwitchProjectError",this.status=n,this.fallbackCommand=s}}async function Yk(e){const r=await fetch("/api/workspace/active",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e})});if(!r.ok){const n=await r.json().catch(()=>({}));throw new qk(n.error??`POST /api/workspace/active failed: ${r.status}`,r.status,n.fallbackCommand)}return await r.json()}async function Jk(e){const r=await fetch("/api/workspace/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){const n=await r.json().catch(()=>({}));throw new Error(n.error??`POST /api/workspace/projects failed: ${r.status}`)}return await r.json()}async function Qk(e){const r=await fetch(`/api/workspace/projects/${encodeURIComponent(e)}`,{method:"DELETE"});if(!r.ok){const n=await r.json().catch(()=>({}));throw new Error(n.error??`DELETE /api/workspace/projects/${e} failed: ${r.status}`)}return await r.json()}function lo(){for(const e of Gk)Ue(e);typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:project-changed"))}function Xk(){const{data:e,loading:r,error:n,revalidate:s}=Rt(Wn,Kk),o=e,a=o==null?void 0:o.projects.find(u=>u.id===o.activeProjectId),i=c.useCallback(async u=>{const p=await Yk(u);return Ue(Wn),lo(),{skillCount:p.skillCount}},[]),l=c.useCallback(async u=>{const p=await Jk(u);Ue(Wn),lo();const f=p.projects.find(h=>h.path===u.path);return{id:f==null?void 0:f.id}},[]),d=c.useCallback(async u=>{await Qk(u),Ue(Wn),lo()},[]);return{workspace:o,activeProject:a,loading:r,error:n,switchProject:i,addProject:l,removeProject:d,revalidate:s}}function Zk(){return t.jsxs(t.Fragment,{children:[t.jsx("style",{children:"@keyframes vskillProjSpin { to { transform: rotate(360deg); } }"}),t.jsx("span",{"aria-hidden":!0,style:{width:9,height:9,borderRadius:"50%",border:"2px solid color-mix(in oklch, currentColor 30%, transparent)",borderTopColor:"currentColor",display:"inline-block",animation:"vskillProjSpin 600ms linear infinite"}})]})}function ej({workspace:e,onSwitch:r,onAdd:n,onRemove:s,isPathStale:o}){const[a,i]=c.useState(!1),[l,d]=c.useState(!1),[u,p]=c.useState(""),[f,h]=c.useState(null),[m,v]=c.useState(null),[x,g]=c.useState(null),[b,y]=c.useState(null),[j,S]=c.useState(!1),[k,T]=c.useState(null),w=c.useRef(null);async function E(C){if(k)return!1;T(C.id),h(null);try{const L=await r(C.id),P=L&&typeof L=="object"&&"skillCount"in L?L.skillCount:void 0,F=P!=null?` — ${P} ${P===1?"skill":"skills"}`:"";return window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:`Switched to ${C.name}${F}`,severity:"success"}})),i(!1),!0}catch(L){const P=L&&typeof L=="object"&&"fallbackCommand"in L?L.fallbackCommand:void 0;return y(P??`cd "${C.path}" && npx vskill@latest studio`),g({id:C.id,name:C.name,path:C.path}),!1}finally{T(null)}}async function R(C){const L=N.find(P=>P.path===C);if(L)return E(L);try{const P=await n({path:C}),F=P&&typeof P=="object"?P.id:void 0,V=C.split(/[\\/]/).filter(Boolean).pop()??C;return F?E({id:F,name:V,path:C}):(i(!1),!0)}catch(P){const F=P instanceof Error?P.message:String(P);return/does not exist/i.test(F)?h(`Path not found on disk: ${C}`):/duplicate/i.test(F)?h("That project is already registered."):h(F),d(!0),!1}}const N=(e==null?void 0:e.projects)??[],I=N.find(C=>C.id===(e==null?void 0:e.activeProjectId));c.useEffect(()=>{if(!a)return;function C(L){w.current&&!w.current.contains(L.target)&&(i(!1),d(!1),h(null))}return document.addEventListener("mousedown",C),()=>document.removeEventListener("mousedown",C)},[a]);async function A(){h(null);const C=u.trim();if(!C){h("Paste an absolute path (e.g. /Users/you/projects/my-skill)");return}if(!C.startsWith("/")&&!/^[A-Za-z]:[\\/]/.test(C)){h("Path must be absolute. In Terminal, cd to the folder and run: pwd — then paste the result here.");return}await R(C)&&p("")}async function $(){if(h(null),bc()){try{const{open:C}=await ar(async()=>{const{open:P}=await import("./index-DDNzcrhv.js");return{open:P}},__vite__mapDeps([7,1])),L=await C({directory:!0,multiple:!1,title:"Open project folder"});typeof L=="string"&&L&&await R(L)}catch(C){h(C instanceof Error?C.message:String(C))}return}d(!0)}function W(C){if(C.length<=50)return C;const L=C.split("/");return L.length<=4?C:`${L.slice(0,3).join("/")}/…/${L.slice(-2).join("/")}`}return t.jsxs("div",{ref:w,"data-vskill-project-picker":!0,style:{position:"relative",display:"inline-block"},children:[t.jsxs("button",{type:"button",onClick:()=>i(C=>!C),"aria-expanded":a,"aria-haspopup":"menu",title:(I==null?void 0:I.path)??"No project selected",style:{display:"flex",alignItems:"center",gap:8,padding:"4px 10px",border:"1px solid transparent",borderRadius:6,background:a?"var(--surface-2, rgba(0,0,0,0.05))":"transparent",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:13,color:"var(--text-primary)",transition:"background-color 120ms ease"},children:[t.jsx("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",flexShrink:0,backgroundColor:(I==null?void 0:I.colorDot)??"var(--text-tertiary, #999)"}}),t.jsx("span",{style:{maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:I?I.name:"No project"}),t.jsx("span",{"aria-hidden":!0,style:{fontSize:10,color:"var(--text-tertiary, #999)",marginLeft:2},children:a?"▴":"▾"})]}),a&&t.jsxs("div",{role:"menu","aria-label":"Switch project",style:{position:"absolute",top:"calc(100% + 4px)",left:0,minWidth:280,maxWidth:420,width:"max-content",background:"var(--color-paper, #fff)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:8,boxShadow:"0 4px 6px -1px rgba(0,0,0,0.08), 0 10px 20px -5px rgba(0,0,0,0.12)",overflow:"hidden",zIndex:50,fontFamily:"var(--font-sans)"},children:[N.length===0&&t.jsx("div",{style:{padding:"16px 16px 12px",fontSize:12,color:"var(--text-tertiary)",lineHeight:1.5},children:"No projects registered. Add one to get started."}),N.length>0&&t.jsx("ul",{role:"none",style:{listStyle:"none",margin:0,padding:4,maxHeight:320,overflowY:"auto"},children:N.map(C=>{const L=o?o(C.path):!1,P=C.id===(e==null?void 0:e.activeProjectId),F=m===C.id,V=k!==null,le=k===C.id,H=P||le;return t.jsxs("li",{role:"menuitem","data-stale":L?"true":"false","data-switching":le?"true":"false","aria-busy":le||void 0,onMouseEnter:()=>v(C.id),onMouseLeave:()=>v(U=>U===C.id?null:U),onClick:()=>{if(!(L||V)){if(P){i(!1);return}E(C)}},style:{display:"flex",alignItems:"center",gap:10,padding:"8px 10px",borderRadius:6,cursor:L||V?le?"progress":"not-allowed":"pointer",background:F&&!L&&!V?"var(--surface-2, rgba(0,0,0,0.04))":H?"var(--surface-1, rgba(0,0,0,0.02))":"transparent",opacity:L?.5:V&&!le?.55:1,transition:"background-color 120ms ease, opacity 120ms ease"},children:[t.jsx("span",{"aria-hidden":!0,style:{width:10,height:10,borderRadius:"50%",flexShrink:0,backgroundColor:C.colorDot,boxShadow:H?"0 0 0 2px color-mix(in oklch, currentColor 20%, transparent)":"none"}}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:13,fontWeight:H?600:500,color:"var(--text-primary)",lineHeight:1.3},children:[t.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:C.name}),le?t.jsxs("span",{"aria-label":"Switching",style:{display:"inline-flex",alignItems:"center",gap:5,fontSize:10,color:"var(--color-action, #2F5B8E)",letterSpacing:"0.05em",textTransform:"uppercase",fontWeight:600},children:[t.jsx(Zk,{}),"Switching…"]}):P&&t.jsx("span",{"aria-label":"Active",style:{fontSize:10,color:"var(--color-action, #2F5B8E)",letterSpacing:"0.05em",textTransform:"uppercase",fontWeight:600},children:"Active"})]}),t.jsx("div",{title:C.path,style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-tertiary)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:W(C.path)}),L&&t.jsx("div",{style:{fontSize:10,color:"var(--color-own, #b45309)",marginTop:2},children:"Path no longer exists"})]}),t.jsx("button",{type:"button","aria-label":`Remove ${C.name}`,onClick:U=>{U.stopPropagation(),s(C.id)},style:{width:24,height:24,display:"flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",borderRadius:4,cursor:"pointer",color:"var(--text-tertiary)",opacity:F?1:0,transition:"opacity 120ms ease, color 120ms ease, background-color 120ms ease",flexShrink:0},onMouseEnter:U=>{U.currentTarget.style.color="var(--color-error, #b91c1c)",U.currentTarget.style.backgroundColor="color-mix(in oklch, var(--color-error, #b91c1c) 10%, transparent)"},onMouseLeave:U=>{U.currentTarget.style.color="var(--text-tertiary)",U.currentTarget.style.backgroundColor="transparent"},children:t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("polyline",{points:"3 6 5 6 21 6"}),t.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),t.jsx("path",{d:"M10 11v6"}),t.jsx("path",{d:"M14 11v6"}),t.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]},C.id)})}),t.jsxs("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",padding:l?8:6},children:[!l&&t.jsxs("button",{type:"button",onClick:()=>void $(),className:"vskill-project-add",style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"8px 10px",border:"none",borderRadius:6,background:"transparent",cursor:"pointer",fontFamily:"var(--font-sans)",fontSize:13,fontWeight:500,color:"var(--color-action, #2F5B8E)",transition:"background-color 120ms ease"},onMouseEnter:C=>{C.currentTarget.style.backgroundColor="color-mix(in oklch, var(--color-action, #2F5B8E) 10%, transparent)"},onMouseLeave:C=>{C.currentTarget.style.backgroundColor="transparent"},children:[t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Open folder…"]}),l&&t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[t.jsx("input",{type:"text",value:u,onChange:C=>p(C.target.value),onKeyDown:C=>{C.key==="Enter"&&A(),C.key==="Escape"&&(d(!1),h(null))},placeholder:"/absolute/path/to/project",autoFocus:!0,style:{width:"100%",padding:"6px 8px",fontFamily:"var(--font-mono)",fontSize:12,border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:4,background:"var(--surface-0, #fff)",color:"var(--text-primary)",outline:"none"}}),t.jsxs("div",{style:{display:"flex",gap:6,justifyContent:"flex-end"},children:[t.jsx("button",{type:"button",onClick:()=>{d(!1),h(null),p("")},style:{padding:"4px 10px",fontSize:12,border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:4,background:"transparent",color:"var(--text-primary)",cursor:"pointer"},children:"Cancel"}),t.jsx("button",{type:"button",onClick:()=>void A(),style:{padding:"4px 10px",fontSize:12,border:"none",borderRadius:4,background:"var(--color-action, #2F5B8E)",color:"var(--color-paper, #fff)",cursor:"pointer",fontWeight:500},children:"Add"})]}),f&&t.jsx("div",{style:{fontSize:11,color:"var(--color-error, #b91c1c)"},children:f})]})]})]}),x&&t.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Switch project failed",style:{position:"fixed",inset:0,zIndex:80,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>{g(null),y(null)},children:[t.jsx("div",{style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.40)"}}),t.jsxs("div",{onClick:C=>C.stopPropagation(),style:{position:"relative",width:"min(520px, 92vw)",background:"var(--color-paper, #fff)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:10,boxShadow:"0 10px 15px -3px rgba(0,0,0,0.12), 0 20px 40px -8px rgba(0,0,0,0.18)",padding:18,fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[t.jsxs("h2",{style:{margin:0,fontSize:16,fontWeight:600,fontFamily:"var(--font-serif, ui-serif)",marginBottom:8},children:["Couldn't switch to ",x.name]}),t.jsx("p",{style:{fontSize:13,color:"var(--text-secondary)",lineHeight:1.5,margin:0,marginBottom:12},children:"That folder couldn't be loaded — it may have moved or become unreadable. The current project is still active. As a last resort you can relaunch Skill Studio directly from the target folder:"}),t.jsx("div",{style:{background:"var(--surface-1, #0f0f10)",color:"var(--text-primary)",padding:"10px 12px",borderRadius:6,fontFamily:"var(--font-mono)",fontSize:12,lineHeight:1.55,whiteSpace:"pre-wrap",wordBreak:"break-all",border:"1px solid var(--border-subtle, rgba(255,255,255,0.08))"},children:b??`cd "${x.path}" && npx vskill@latest studio`}),t.jsxs("div",{style:{display:"flex",gap:8,marginTop:14,justifyContent:"flex-end"},children:[t.jsx("button",{type:"button",onClick:async()=>{try{await navigator.clipboard.writeText(b??`cd "${x.path}" && npx vskill@latest studio`),S(!0),setTimeout(()=>S(!1),1600)}catch{}},style:{padding:"7px 14px",fontSize:13,fontWeight:600,border:"1px solid var(--color-action, #2F5B8E)",borderRadius:6,background:"var(--color-action, #2F5B8E)",color:"#ffffff",cursor:"pointer",boxShadow:"0 1px 2px rgba(0,0,0,0.15), inset 0 1px 0 rgba(255,255,255,0.12)"},children:j?"Copied!":"Copy command"}),t.jsx("button",{type:"button",onClick:()=>{g(null),y(null)},style:{padding:"7px 12px",fontSize:13,fontWeight:500,border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:6,background:"transparent",color:"var(--text-primary)",cursor:"pointer"},children:"Close"})]})]})]})]})}function tj(e,r){const n=r.trim().toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?e:e.filter(s=>{const o=`${s.name} ${s.path}`.toLowerCase();return n.every(a=>o.includes(a))})}function rj({open:e,projects:r,onSwitch:n,onClose:s}){const[o,a]=c.useState(""),[i,l]=c.useState(0),d=c.useMemo(()=>tj(r,o),[r,o]);c.useEffect(()=>{e||(a(""),l(0))},[e]),c.useEffect(()=>{i>=d.length&&l(0)},[d.length,i]);const u=p=>{if(p.key==="Escape"){p.preventDefault(),s();return}if(p.key==="ArrowDown"){p.preventDefault(),l(f=>Math.min(f+1,Math.max(d.length-1,0)));return}if(p.key==="ArrowUp"){p.preventDefault(),l(f=>Math.max(f-1,0));return}if(p.key==="Enter"){p.preventDefault();const f=d[i];f&&(n(f.id),s())}};return e?t.jsxs("div",{role:"dialog","aria-modal":"true","data-vskill-project-palette":!0,className:"vskill-project-palette fixed inset-0 z-50 flex items-start justify-center pt-24",children:[t.jsx("div",{className:"absolute inset-0 bg-black/30",onClick:s}),t.jsxs("div",{className:"relative w-[520px] max-w-[92vw] bg-background border rounded shadow-lg",children:[t.jsx("input",{type:"text",autoFocus:!0,value:o,onChange:p=>a(p.target.value),onKeyDown:u,placeholder:"Switch project…",className:"w-full px-3 py-2 text-sm border-b outline-none"}),t.jsxs("ul",{role:"listbox",className:"max-h-80 overflow-auto",children:[d.length===0&&t.jsx("li",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No matches."}),d.map((p,f)=>t.jsxs("li",{role:"option","aria-selected":f===i,"data-highlighted":f===i,className:["flex items-center gap-2 px-3 py-2 text-sm cursor-pointer",f===i?"bg-muted":""].join(" "),onMouseEnter:()=>l(f),onClick:()=>{n(p.id),s()},children:[t.jsx("span",{"aria-hidden":!0,className:"inline-block w-2 h-2 rounded-full",style:{backgroundColor:p.colorDot}}),t.jsxs("span",{className:"flex-1",children:[t.jsx("span",{className:"vskill-palette-name",children:p.name}),t.jsx("span",{className:"ml-2 vskill-palette-path text-xs font-mono text-muted-foreground",children:p.path})]})]},p.id))]})]})]}):null}const wl=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function nj({open:e,onClose:r,initialMode:n="standalone",isClaudeCode:s,projectRoot:o,onCreated:a}){const[i,l]=c.useState("destination"),[d,u]=c.useState(n),[p,f]=c.useState(""),[h,m]=c.useState(""),[v,x]=c.useState(""),[g,b]=c.useState([]),[y,j]=c.useState(!1),[S,k]=c.useState(null);if(c.useEffect(()=>{e&&(l("destination"),u(n),f(""),m(""),x(""),k(null))},[e,n]),c.useEffect(()=>{if(!e)return;let C=!0;return fetch("/api/authoring/plugins").then(L=>L.json()).then(L=>{C&&b(L.plugins??[])}).catch(()=>{}),()=>{C=!1}},[e]),c.useEffect(()=>{if(!e)return;function C(L){L.key==="Escape"&&(L.preventDefault(),r())}return document.addEventListener("keydown",C),()=>document.removeEventListener("keydown",C)},[e,r]),!e)return null;const T=g.length>0,w=s&&T,E=s,R=wl.test(p),N=d==="existing-plugin"?h.length>0:wl.test(h),I=!y&&R&&(d==="standalone"||N),A=sj(o,d,h,p);async function $(){k(null),j(!0);try{const P=new URLSearchParams;P.set("mode",d),P.set("skillName",p),h&&P.set("pluginName",h);const F=await fetch(`/api/authoring/skill-exists?${P.toString()}`),V=await F.json();if(!F.ok){k(V.error??`Check failed: ${F.status}`);return}if(V.exists){k(`Skill '${p}' already exists${V.path?` at ${V.path}`:""}`);return}}catch(P){k(P instanceof Error?P.message:String(P));return}finally{j(!1)}const C=new URLSearchParams;C.set("mode",d),C.set("skillName",p),v.trim()&&C.set("description",v.trim()),h&&C.set("pluginName",h);const L=`#/create?${C.toString()}`;typeof window<"u"&&(window.location.hash=L),r()}async function W(){k(null),j(!0);try{const C=await fetch("/api/authoring/create-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:d,skillName:p,description:v.trim()||void 0,pluginName:d==="standalone"?void 0:h})}),L=await C.json();if(!C.ok||!L.ok){k(L.error??`Create failed: ${C.status}`);return}Ue("skills"),a==null||a({mode:d,skillName:p,pluginName:L.pluginName??null,skillMdPath:L.skillMdPath}),r()}catch(C){k(C instanceof Error?C.message:String(C))}finally{j(!1)}}return t.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Create skill","data-vskill-create-skill-modal":!0,style:{position:"fixed",inset:0,zIndex:100,display:"flex",alignItems:"center",justifyContent:"center"},children:[t.jsx("div",{onClick:r,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.45)"}}),t.jsxs("div",{style:{position:"relative",width:"min(560px, 92vw)",maxHeight:"86vh",overflow:"auto",background:"var(--color-paper, #fff)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:10,boxShadow:"0 10px 15px -3px rgba(0,0,0,0.12), 0 20px 40px -8px rgba(0,0,0,0.18)",fontFamily:"var(--font-sans)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"14px 18px",borderBottom:"1px solid var(--border-subtle, rgba(0,0,0,0.08))"},children:[t.jsx("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text-primary)",fontFamily:"var(--font-serif, ui-serif)",letterSpacing:"0.01em"},children:i==="destination"?"Create a skill":"Name and describe"}),t.jsxs("div",{style:{fontSize:11,color:"var(--text-tertiary)",marginLeft:"auto",fontVariantNumeric:"tabular-nums"},children:["Step ",i==="destination"?"1":"2"," of 2"]})]}),i==="destination"&&t.jsxs("div",{style:{padding:14,display:"flex",flexDirection:"column",gap:10},children:[t.jsx(co,{title:"Standalone skill",subtitle:"A single skill in this project",description:"Lives at <project>/skills/<name>/SKILL.md. Works with every agent.",icon:"📄",selected:d==="standalone",onClick:()=>u("standalone")}),t.jsx(co,{title:"Add to existing plugin",subtitle:w?`${g.length} plugin source${g.length===1?"":"s"} in this project`:s?"No plugin sources in this project yet":"Claude Code only",description:"Appends a skill to an existing <plugin>/.claude-plugin/plugin.json source.",icon:"🧩",disabled:!w,selected:d==="existing-plugin",onClick:()=>w&&u("existing-plugin")}),t.jsx(co,{title:"Plugin (multi-skill)",subtitle:E?"Bundle related skills under one Claude Code plugin":"Claude Code only",description:"Creates <folder>/.claude-plugin/plugin.json and <folder>/skills/<first>/SKILL.md.",icon:"📦",disabled:!E,selected:d==="new-plugin",onClick:()=>E&&u("new-plugin")})]}),i==="details"&&t.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12},children:[d==="new-plugin"&&t.jsx(Un,{label:"Plugin name",hint:"kebab-case",children:t.jsx("input",{type:"text",value:h,onChange:C=>m(C.target.value.trim()),placeholder:"my-first-plugin",autoFocus:!0,style:Hn(!h||N)})}),d==="existing-plugin"&&t.jsx(Un,{label:"Plugin",children:t.jsxs("select",{value:h,onChange:C=>m(C.target.value),style:{...Hn(!0),fontFamily:"var(--font-mono)"},children:[t.jsx("option",{value:"",children:"Select a plugin…"}),g.map(C=>t.jsx("option",{value:C.name,children:C.name},C.path))]})}),t.jsx(Un,{label:"Skill name",hint:"kebab-case",children:t.jsx("input",{type:"text",value:p,onChange:C=>f(C.target.value.trim()),placeholder:"my-new-skill",autoFocus:d!=="new-plugin",style:Hn(!p||R)})}),t.jsx(Un,{label:"Description",hint:"One short sentence — shown in frontmatter",children:t.jsx("textarea",{value:v,onChange:C=>x(C.target.value),rows:2,placeholder:"Does a thing when Claude needs X",style:{...Hn(!0),resize:"vertical",minHeight:52,fontFamily:"var(--font-sans)"}})}),A&&t.jsxs("div",{style:{padding:"8px 10px",fontSize:11,fontFamily:"var(--font-mono)",color:"var(--text-secondary)",background:"var(--surface-1, rgba(0,0,0,0.03))",border:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",borderRadius:4,wordBreak:"break-all"},children:[t.jsx("div",{style:{fontSize:10,color:"var(--text-tertiary)",marginBottom:2,fontFamily:"var(--font-sans)"},children:"Will create:"}),A.map((C,L)=>t.jsx("div",{children:C},L))]}),S&&t.jsx("div",{style:{fontSize:12,color:"var(--color-error, #b91c1c)",padding:"6px 10px",background:"color-mix(in oklch, var(--color-error, #b91c1c) 8%, transparent)",borderRadius:4},children:S})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8,padding:"12px 16px",borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",background:"var(--surface-1, rgba(0,0,0,0.02))"},children:[t.jsx("button",{type:"button",onClick:r,style:uo,children:"Cancel"}),i==="destination"&&t.jsx("button",{type:"button",onClick:()=>l("details"),style:Sl,children:"Continue →"}),i==="details"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",onClick:()=>l("destination"),style:uo,children:"← Back"}),t.jsx("button",{type:"button",onClick:()=>void $(),disabled:!I,style:{...uo,opacity:I?1:.5,cursor:I?"pointer":"not-allowed"},title:"Opens the AI generation flow with this destination pre-selected (choose Claude Code, Anthropic API, OpenRouter, or local models)",children:"Generate with AI"}),t.jsx("button",{type:"button",onClick:()=>void W(),disabled:!I,style:{...Sl,opacity:I?1:.5,cursor:I?"pointer":"not-allowed"},title:"Creates an empty SKILL.md scaffold you can fill in by hand",children:y?"Creating…":"Create empty scaffold"})]})]})]})]})}function co({title:e,subtitle:r,description:n,icon:s,selected:o,disabled:a,onClick:i}){return t.jsxs("button",{type:"button",onClick:i,disabled:a,"aria-pressed":o,style:{display:"flex",gap:12,padding:"12px 14px",textAlign:"left",borderRadius:8,border:o?"2px solid var(--color-accent, #2f6f8f)":"1px solid var(--border-default, rgba(0,0,0,0.12))",background:o?"color-mix(in oklch, var(--color-accent, #2f6f8f) 8%, var(--color-paper, #fff))":a?"var(--surface-1, rgba(0,0,0,0.02))":"var(--color-paper, #fff)",color:a?"var(--text-tertiary)":"var(--text-primary)",cursor:a?"not-allowed":"pointer",opacity:a?.6:1,fontFamily:"inherit",width:"100%",transition:"border-color 120ms ease, background-color 120ms ease"},children:[t.jsx("span",{"aria-hidden":!0,style:{fontSize:22,lineHeight:1,marginTop:2},children:s}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:{fontSize:14,fontWeight:600,lineHeight:1.3},children:e}),t.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",marginTop:2,textTransform:"uppercase",letterSpacing:"0.04em"},children:r}),t.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",marginTop:6,lineHeight:1.5},children:n})]})]})}function Un({label:e,hint:r,children:n}){return t.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:4},children:[t.jsxs("span",{style:{display:"flex",alignItems:"baseline",gap:8},children:[t.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:e}),r&&t.jsx("span",{style:{fontSize:11,color:"var(--text-tertiary)"},children:r})]}),n]})}function Hn(e){return{width:"100%",padding:"7px 10px",fontSize:13,fontFamily:"var(--font-mono)",border:`1px solid ${e?"var(--border-default, rgba(0,0,0,0.12))":"var(--color-error, #b91c1c)"}`,borderRadius:4,background:"var(--surface-0, #fff)",color:"var(--text-primary)",outline:"none",boxSizing:"border-box"}}const Sl={padding:"8px 16px",fontSize:13,fontWeight:600,border:"1px solid var(--color-action, #2F5B8E)",borderRadius:6,background:"var(--color-action, #2F5B8E)",color:"var(--color-action-ink, #FFFFFF)",cursor:"pointer",fontFamily:"inherit",boxShadow:"0 1px 2px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.12)",letterSpacing:"0.01em"},uo={padding:"7px 12px",fontSize:13,fontWeight:500,border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:6,background:"transparent",color:"var(--text-primary)",cursor:"pointer",fontFamily:"inherit"};function sj(e,r,n,s){const o=s||"<skill-name>",a=n||"<plugin-name>",i=e||"<project>";return r==="standalone"?[`${i}/skills/${o}/SKILL.md`]:r==="existing-plugin"?[`${i}/${a}/skills/${o}/SKILL.md`]:r==="new-plugin"?[`${i}/${a}/.claude-plugin/plugin.json`,`${i}/${a}/skills/${o}/SKILL.md`]:null}function Iu(e){return e.trim().toLowerCase()}function oj(e,r){const n=Iu(r);return n?e.filter(s=>s.name.toLowerCase().includes(n)||s.source.toLowerCase().includes(n)):e}function aj(e,r){const n=Iu(r);return n?e.filter(s=>[s.name,s.description??"",s.category??"",s.author??""].join(" ").toLowerCase().includes(n)):e}function ij({open:e,onClose:r,onInstall:n,onUninstall:s,installedNames:o,privatePlugins:a}){const[i,l]=c.useState(null),[d,u]=c.useState([]),[p,f]=c.useState(null),[h,m]=c.useState(null),[v,x]=c.useState(!1),[g,b]=c.useState(null),[y,j]=c.useState(""),[S,k]=c.useState("");c.useEffect(()=>{p?j(""):k("")},[p]);const T=c.useMemo(()=>oj(d,y),[d,y]),w=c.useMemo(()=>aj((h==null?void 0:h.plugins)??[],S),[h,S]);return c.useEffect(()=>{e&&(x(!0),b(null),fetch("/api/plugins/marketplaces").then(E=>E.json()).then(E=>{if(E.error)throw new Error(E.error);u(E.marketplaces??[])}).catch(E=>b(E instanceof Error?E.message:String(E))).finally(()=>x(!1)))},[e]),c.useEffect(()=>{if(!p){m(null);return}x(!0),b(null),fetch(`/api/plugins/marketplaces/${encodeURIComponent(p)}`).then(E=>E.json()).then(E=>{if(E.error)throw new Error(E.error);m(E)}).catch(E=>b(E instanceof Error?E.message:String(E))).finally(()=>x(!1))},[p]),c.useEffect(()=>{if(!e)return;function E(R){R.key==="Escape"&&r()}return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[e,r]),e?t.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Plugin marketplace","data-vskill-marketplace-drawer":!0,style:{position:"fixed",inset:0,zIndex:80},children:[t.jsx("div",{onClick:r,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.38)"}}),t.jsxs("aside",{style:{position:"absolute",top:0,right:0,bottom:0,width:"min(480px, 94vw)",background:"var(--color-paper, #fff)",borderLeft:"1px solid var(--border-default, rgba(0,0,0,0.12))",boxShadow:"-10px 0 30px -8px rgba(0,0,0,0.18)",display:"flex",flexDirection:"column",fontFamily:"var(--font-sans)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"14px 18px",borderBottom:"1px solid var(--border-subtle, rgba(0,0,0,0.08))"},children:[p&&t.jsx("button",{type:"button",onClick:()=>f(null),"aria-label":"Back to marketplaces",style:{border:"none",background:"transparent",fontSize:14,color:"var(--text-secondary)",cursor:"pointer",padding:0},children:"← Back"}),t.jsx("h2",{style:{margin:0,fontSize:15,fontWeight:600,color:"var(--text-primary)",fontFamily:"var(--font-serif, ui-serif)",flex:1},children:p?(h==null?void 0:h.name)??p:"Browse plugins"}),t.jsx("button",{type:"button",onClick:r,"aria-label":"Close",style:{border:"none",background:"transparent",fontSize:16,color:"var(--text-secondary)",cursor:"pointer",padding:"4px 6px"},children:"✕"})]}),t.jsxs("div",{style:{flex:1,overflowY:"auto",padding:12},children:[v&&t.jsx("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:"Loading…"}),g&&t.jsx("div",{style:{padding:10,fontSize:12,color:"var(--color-error, #b91c1c)",background:"color-mix(in oklch, var(--color-error, #b91c1c) 8%, transparent)",borderRadius:4},children:g}),!p&&a&&a.length>0&&t.jsx(lj,{plugins:a}),!p&&!v&&d.length===0&&!g&&t.jsx(cj,{}),!p&&d.length>0&&t.jsx(Cl,{value:y,onChange:j,placeholder:"Search marketplaces…",ariaLabel:"Search marketplaces",testId:"marketplace-search"}),!p&&d.length>0&&T.length===0&&t.jsxs("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:["No marketplaces match “",y,"”."]}),!p&&T.map(E=>t.jsxs("button",{type:"button",onClick:()=>f(E.name),style:uj,onMouseEnter:R=>{R.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.04))"},onMouseLeave:R=>{R.currentTarget.style.background="transparent"},children:[t.jsx("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:E.name}),t.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-mono)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:E.source})]},E.name)),p&&h&&t.jsxs(t.Fragment,{children:[h.description&&t.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",padding:"0 6px 12px",lineHeight:1.5},children:h.description}),h.plugins.length===0&&t.jsx("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:"This marketplace has no plugins catalogued yet."}),h.plugins.length>0&&t.jsx(Cl,{value:S,onChange:k,placeholder:"Search plugins…",ariaLabel:"Search plugins",testId:"plugin-search"}),h.plugins.length>0&&w.length===0&&t.jsxs("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:["No plugins match “",S,"”."]}),w.map(E=>{const R=o.has(E.name);return t.jsx("div",{style:{padding:"10px 8px",borderBottom:"1px solid var(--border-subtle, rgba(0,0,0,0.05))"},children:t.jsxs("div",{style:{display:"flex",alignItems:"start",gap:8},children:[t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsxs("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)",display:"flex",alignItems:"baseline",gap:8},children:[E.name,E.version&&t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-tertiary)"},children:E.version}),E.category&&t.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:10,background:"var(--surface-2, rgba(0,0,0,0.05))",color:"var(--text-secondary)"},children:E.category})]}),E.description&&t.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:4,lineHeight:1.5},children:E.description})]}),R&&s?t.jsx("button",{type:"button",disabled:i===E.name,onClick:async()=>{l(E.name);try{await s(E.name)}finally{l(null)}},"aria-label":`Uninstall ${E.name}`,style:{flexShrink:0,padding:"5px 12px",fontSize:12,fontWeight:600,border:"1px solid var(--color-error, #b91c1c)",borderRadius:4,background:"transparent",color:"var(--color-error, #b91c1c)",cursor:i===E.name?"wait":"pointer",opacity:i===E.name?.6:1,fontFamily:"inherit"},children:i===E.name?"Uninstalling…":"Uninstall"}):t.jsx("button",{type:"button",disabled:R,onClick:()=>n(E.name,p),style:{flexShrink:0,padding:"5px 12px",fontSize:12,fontWeight:600,border:R?"none":"1px solid var(--color-action, #2F5B8E)",borderRadius:4,background:R?"var(--surface-2, rgba(0,0,0,0.05))":"var(--color-action, #2F5B8E)",color:R?"var(--text-tertiary)":"var(--color-action-ink, #FFFFFF)",cursor:R?"default":"pointer",fontFamily:"inherit",boxShadow:R?"none":"0 1px 2px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.12)"},children:R?"Installed":"Install"})]})},E.name)})]})]}),!p&&t.jsx("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",padding:12},children:t.jsx(dj,{onAdded:()=>{Ue("marketplaces"),fetch("/api/plugins/marketplaces").then(E=>E.json()).then(E=>u(E.marketplaces??[]))}})})]})]}):null}function Cl({value:e,onChange:r,placeholder:n,ariaLabel:s,testId:o}){return t.jsx("div",{style:{padding:"0 4px 10px"},children:t.jsx("input",{type:"search",value:e,onChange:a=>r(a.target.value),placeholder:n,"aria-label":s,"data-testid":o,style:{width:"100%",padding:"6px 10px",fontSize:12,fontFamily:"var(--font-sans)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:4,background:"var(--surface-0, #fff)",color:"var(--text-primary)",outline:"none",boxSizing:"border-box"}})})}function lj({plugins:e}){return t.jsxs("section",{"data-testid":"marketplace-private-plugins","aria-label":"Your private plugins",style:{marginBottom:12,padding:"10px 10px 6px",borderRadius:6,background:"#FFFBEB",border:"1px solid #FCD34D"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:6,fontSize:11,fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase",color:"#92400E"},children:[t.jsx("span",{"aria-hidden":"true",children:"🔒"}),"Your private plugins"]}),e.map(r=>t.jsxs("div",{style:{padding:"6px 4px",borderTop:"1px solid rgba(146,64,14,0.12)"},children:[t.jsx("div",{style:{fontSize:13,fontWeight:600,color:"#7C2D12"},children:r.name}),t.jsx("div",{style:{fontSize:11,color:"#92400E",fontFamily:"var(--font-mono)",opacity:.8,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.repoFullName})]},r.name))]})}function cj(){return t.jsxs("div",{style:{padding:20,fontSize:12,color:"var(--text-tertiary)",lineHeight:1.6},children:["No marketplaces configured yet. Add one below — examples:",t.jsxs("ul",{style:{marginTop:8,paddingLeft:16},children:[t.jsx("li",{children:t.jsx("code",{children:"anthropics/claude-plugins-official"})}),t.jsx("li",{children:t.jsx("code",{children:"openai/codex-plugin-cc"})})]})]})}function dj({onAdded:e}){const[r,n]=c.useState(""),[s,o]=c.useState(!1),[a,i]=c.useState(null);async function l(){const d=r.trim();if(d){o(!0),i(null);try{const u=await fetch("/api/plugins/marketplaces",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:d})}),p=await u.json().catch(()=>({}));if(!u.ok||!p.ok){i(p.error??`Add failed (${u.status})`);return}n(""),e()}catch(u){i(u instanceof Error?u.message:String(u))}finally{o(!1)}}}return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[t.jsx("label",{style:{fontSize:11,color:"var(--text-tertiary)",fontWeight:500},children:"Add marketplace (GitHub owner/repo, URL, or path)"}),t.jsxs("div",{style:{display:"flex",gap:6},children:[t.jsx("input",{type:"text",value:r,onChange:d=>n(d.target.value),onKeyDown:d=>{d.key==="Enter"&&l()},placeholder:"anthropics/claude-plugins-official",disabled:s,style:{flex:1,padding:"6px 8px",fontSize:12,fontFamily:"var(--font-mono)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderRadius:4,background:"var(--surface-0, #fff)",color:"var(--text-primary)",outline:"none"}}),t.jsx("button",{type:"button",onClick:()=>void l(),disabled:s||!r.trim(),style:{padding:"6px 14px",fontSize:12,fontWeight:600,border:"1px solid var(--color-action, #2F5B8E)",borderRadius:4,background:"var(--color-action, #2F5B8E)",color:"var(--color-action-ink, #FFFFFF)",cursor:s||!r.trim()?"not-allowed":"pointer",opacity:s||!r.trim()?.5:1,boxShadow:"0 1px 2px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.12)",fontFamily:"inherit"},children:s?"Adding…":"Add"})]}),a&&t.jsx("div",{style:{fontSize:11,color:"var(--color-error, #b91c1c)"},children:a})]})}const uj={display:"block",width:"100%",textAlign:"left",padding:"10px 12px",border:"none",borderRadius:6,background:"transparent",cursor:"pointer",fontFamily:"inherit",marginBottom:2},po=12;function pj({job:e,onDone:r}){const[n,s]=c.useState([]),[o,a]=c.useState("running"),[i,l]=c.useState(!1);if(c.useEffect(()=>{if(!e)return;s([]),a("running"),l(!1);const f=new AbortController;let h=[],m="running";return(async()=>{try{const v=await fetch("/api/plugins/install/stream",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({plugin:e.ref}),signal:f.signal});if(!v.ok||!v.body){a("failed"),r({ok:!1,code:v.status,lines:[`HTTP ${v.status}`]});return}const x=v.body.getReader(),g=new TextDecoder;let b="";for(;;){const{value:y,done:j}=await x.read();if(j)break;b+=g.decode(y,{stream:!0});const S=b.split(/\n\n/);b=S.pop()??"";for(const k of S){const T=k.match(/^data:\s*(.*)$/m);if(T)try{const w=JSON.parse(T[1]);w.type==="stdout"&&w.line?(h=[...h,w.line].slice(-po),s(h)):w.type==="stderr"&&w.line?(h=[...h,`⚠ ${w.line}`].slice(-po),s(h)):w.type==="done"?(m=w.ok?"ok":"failed",a(m),Ac(),Ue("skills"),r({ok:w.ok??!1,code:w.code??null,lines:h})):w.type==="error"&&w.error&&(h=[...h,`✘ ${w.error}`].slice(-po),s(h))}catch{}}}m==="running"&&r({ok:!0,code:0,lines:h})}catch(v){if(v.name==="AbortError")return;a("failed"),r({ok:!1,code:null,lines:[...h,v instanceof Error?v.message:String(v)]})}})(),()=>f.abort()},[e==null?void 0:e.ref]),!e)return null;const d=o==="ok"?"var(--color-installed, #2F6A4A)":o==="failed"?"var(--color-error, #b91c1c)":"var(--color-accent, #2f6f8f)",u=o==="ok"?"✔":o==="failed"?"✘":"…",p=o==="ok"?"Installed":o==="failed"?"Install failed":"Installing";return t.jsxs("div",{role:"status","aria-live":"polite","data-vskill-install-toast":!0,style:{position:"fixed",bottom:16,right:16,width:"min(420px, 92vw)",background:"var(--color-paper, #fff)",border:"1px solid var(--border-default, rgba(0,0,0,0.12))",borderLeft:`3px solid ${d}`,borderRadius:6,boxShadow:"0 10px 20px -6px rgba(0,0,0,0.18)",zIndex:90,fontFamily:"var(--font-sans)",overflow:"hidden"},children:[t.jsxs("button",{type:"button",onClick:()=>l(f=>!f),style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"10px 12px",border:"none",background:"transparent",cursor:"pointer",textAlign:"left",fontFamily:"inherit"},children:[t.jsx("span",{"aria-hidden":!0,style:{fontSize:16,color:d,width:16,textAlign:"center"},children:o==="running"?t.jsx(fj,{}):u}),t.jsxs("span",{style:{flex:1,minWidth:0},children:[t.jsxs("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:[p,": ",e.plugin,t.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-primary)",marginLeft:4},children:["@",e.marketplace]})]}),!i&&n.length>0&&t.jsx("span",{style:{display:"block",fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-primary)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n[n.length-1]})]}),t.jsx("span",{"aria-hidden":!0,style:{fontSize:10,color:"var(--text-primary)"},children:i?"▾":"▸"})]}),i&&t.jsx("pre",{style:{margin:0,padding:"0 12px 12px",maxHeight:180,overflowY:"auto",fontFamily:"var(--font-mono)",fontSize:10,lineHeight:1.5,color:"var(--text-secondary)",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n.length===0?"Waiting for output…":n.join(`
86
+ `)})]})}function fj(){return t.jsx("span",{"aria-hidden":!0,style:{display:"inline-block",width:10,height:10,borderRadius:"50%",border:"2px solid var(--color-accent, #2f6f8f)",borderTopColor:"transparent",animation:"vskill-spin 800ms linear infinite"},children:t.jsx("style",{children:"@keyframes vskill-spin { to { transform: rotate(360deg); } }"})})}async function El(e,r){const s=await((r==null?void 0:r.fetchImpl)??fetch)("/api/studio/remove-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!s.ok){const o=await s.json().catch(()=>({}));throw new Error(o.error||`remove-skill failed: HTTP ${s.status}`)}return await s.json()}async function hj(e){if(typeof navigator<"u"&&navigator.clipboard){await navigator.clipboard.writeText(e);return}throw new Error("Clipboard API unavailable in this environment")}function mj({agentId:e,agentDisplayName:r,blob:n,pasteInstructionsUrl:s,docsUrl:o,scopeDowngradeWarning:a,onClose:i,writeClipboardImpl:l}){const d=c.useRef(null),[u,p]=c.useState(!1),[f,h]=c.useState(null);c.useEffect(()=>{const v=x=>{x.key==="Escape"&&(x.preventDefault(),i())};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[i]);const m=c.useCallback(async()=>{const v=l??hj;try{await v(n),p(!0),h(null)}catch(x){h(x instanceof Error?x.message:String(x))}},[n,l]);return typeof document>"u"?null:Br.createPortal(t.jsx("div",{"data-testid":"clipboard-export-dialog-backdrop",role:"presentation",onClick:v=>{v.target===v.currentTarget&&i()},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.45)",backdropFilter:"blur(4px)",display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"min(10vh, 80px)",zIndex:10040},children:t.jsxs("div",{ref:d,"data-testid":"clipboard-export-dialog","data-agent-id":e,role:"dialog","aria-modal":"true","aria-label":`Copy skill to ${r}`,style:{position:"relative",width:"100%",maxWidth:640,margin:"0 1rem",background:"var(--bg-surface, #FFFFFF)",color:"var(--text-primary, #191919)",borderRadius:8,border:"1px solid var(--color-rule, #E8E1D6)",boxShadow:"0 20px 60px rgba(0,0,0,0.18)",overflow:"hidden",maxHeight:"80vh",display:"flex",flexDirection:"column"},children:[t.jsxs("div",{style:{padding:"0.875rem 1.125rem",borderBottom:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[t.jsxs("div",{style:{fontFamily:"var(--font-serif, serif)",fontSize:16,fontWeight:500},children:["Copy to ",r]}),t.jsx("button",{type:"button","data-testid":"clipboard-export-dialog-close",onClick:i,"aria-label":"Close",style:{background:"transparent",border:"none",cursor:"pointer",fontSize:18,color:"var(--text-secondary, #5A5651)",padding:"0 4px",lineHeight:1},children:"×"})]}),t.jsxs("div",{style:{padding:"1rem 1.125rem",overflowY:"auto",display:"flex",flexDirection:"column",gap:"0.75rem"},children:[a&&t.jsx("div",{"data-testid":"clipboard-export-scope-warning",role:"status",style:{padding:"0.625rem 0.875rem",background:"color-mix(in srgb, var(--color-own, #f59e0b) 14%, transparent)",border:"1px solid color-mix(in srgb, var(--color-own, #f59e0b) 45%, transparent)",borderRadius:6,fontSize:12,color:"var(--text-primary, #191919)"},children:a}),t.jsxs("div",{style:{fontSize:12,color:"var(--text-secondary, #5A5651)",lineHeight:1.5},children:["Click ",t.jsx("strong",{children:"Copy"})," below, then paste the skill into"," ",r,".",s?t.jsxs(t.Fragment,{children:[" ",t.jsx("a",{"data-testid":"clipboard-export-paste-instructions-link",href:s,target:"_blank",rel:"noreferrer noopener",style:{color:"var(--accent-text, var(--text-primary))",textDecoration:"underline"},children:"Open paste instructions →"})]}):null]}),t.jsx("pre",{"data-testid":"clipboard-export-blob",style:{margin:0,padding:"0.75rem",background:"var(--surface-2, #F6F4EE)",border:"1px solid var(--color-rule, #E8E1D6)",borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,lineHeight:1.5,overflowX:"auto",maxHeight:"40vh",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n}),f&&t.jsxs("div",{"data-testid":"clipboard-export-error",role:"alert",style:{fontSize:12,color:"var(--color-error, #dc2626)"},children:["Copy failed: ",f]})]}),t.jsxs("div",{style:{padding:"0.75rem 1.125rem",borderTop:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"},children:[t.jsx("div",{style:{display:"flex",gap:"0.625rem"},children:o&&t.jsxs("a",{"data-testid":"clipboard-export-docs-link",href:o,target:"_blank",rel:"noreferrer noopener",style:{fontSize:12,color:"var(--text-secondary)",textDecoration:"underline"},children:[r," docs"]})}),t.jsxs("div",{style:{display:"flex",gap:"0.5rem"},children:[t.jsx("button",{type:"button","data-testid":"clipboard-export-dialog-cancel",onClick:i,style:{padding:"0.5rem 0.875rem",borderRadius:6,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-primary)",cursor:"pointer",fontSize:13,fontFamily:"var(--font-sans)"},children:"Close"}),t.jsx("button",{type:"button","data-testid":"clipboard-export-copy",onClick:m,style:{padding:"0.5rem 1rem",borderRadius:6,border:"1px solid var(--text-primary, #191919)",background:u?"var(--color-ok, #22c55e)":"var(--text-primary, #191919)",color:"var(--bg-surface, #FFFFFF)",cursor:"pointer",fontSize:13,fontWeight:600,fontFamily:"var(--font-sans)"},children:u?"Copied ✓":"Copy"})]})]})]})}),document.body)}function xj(e,r){const n=e.split(/[.-]/).map(o=>Number.parseInt(o,10)),s=r.split(/[.-]/).map(o=>Number.parseInt(o,10));for(let o=0;o<Math.max(n.length,s.length);o++){const a=Number.isFinite(n[o])?n[o]:0,i=Number.isFinite(s[o])?s[o]:0;if(a!==i)return a-i}return 0}function gj(e,r,n,s){if(!n||!n.scopes)return{kind:"not-installed"};const o=r==="project"?"user":"project",a=n.scopes[r],i=n.scopes[o];if(!a||!i)return{kind:"not-installed"};const l=a.installed&&a.installedAgentTools.includes(e),d=i.installed&&i.installedAgentTools.includes(e);if(!l)return d?{kind:"installed-other-scope",otherScope:o,version:i.version}:{kind:"not-installed"};const u=a.version;if(!u||!s)return{kind:"installed-current",version:u};const p=xj(u,s);return p===0?{kind:"installed-current",version:u}:p<0?{kind:"update-available",installed:u,target:s}:{kind:"newer-installed",installed:u,target:s}}const vj=Object.freeze({"claude-cli":"claude-code","codex-cli":"codex"});function Nl(e){return e?vj[e]??e:null}function yj(e){var r,n;return((r=e.find(s=>s.detected&&s.installMode==="filesystem"))==null?void 0:r.id)??((n=e.find(s=>s.installMode==="filesystem"))==null?void 0:n.id)??null}function bj(e){switch(e){case"installed":return"Installed";case"exported":return"Exported";case"skipped":return"Skipped";case"error":return"Error"}}function Qo(e){switch(e){case"installed":return"var(--color-ok, #22c55e)";case"exported":return"var(--accent-text, #3b82f6)";case"skipped":return"var(--text-tertiary)";case"error":return"var(--color-error, #dc2626)"}}function kj({skill:e,skillDisplayName:r,scope:n,targetVersion:s,activeAgentId:o,preCheckedAgentIds:a,onClose:i,onSuccess:l,fetchSupportedAgentsImpl:d,installToAgentsImpl:u,startInstallStreamImpl:p,fetchInstallStateImpl:f,removeSkillImpl:h,writeClipboardImpl:m}){var me;const v=c.useRef(null),[x,g]=c.useState("loading"),[b,y]=c.useState([]),[j,S]=c.useState(null),[k,T]=c.useState(new Set),[w,E]=c.useState(null),[R,N]=c.useState(null),[I,A]=c.useState(null),[$,W]=c.useState(!1),[C,L]=c.useState({}),[P,F]=c.useState(null),[V,le]=c.useState(0),[H,U]=c.useState(new Set),[re,xe]=c.useState([]),[he,z]=c.useState(null),X=c.useRef(null);c.useEffect(()=>{const ce=ue=>{ue.key==="Escape"&&(he||(ue.preventDefault(),ue.stopPropagation(),x!=="installing"&&i()))};return document.addEventListener("keydown",ce,!0),()=>document.removeEventListener("keydown",ce,!0)},[he,x,i]),c.useEffect(()=>{let ce=!1;return(d??Nu)().then(je=>{if(ce)return;y(je);const Re=new Set,Ae=Nl(o);Ae&&je.some(Me=>Me.id===Ae)&&Re.add(Ae);for(const Me of a??[]){const _e=Nl(Me);_e&&je.some(Oe=>Oe.id===_e)&&Re.add(_e)}if(Re.size===0){const Me=yj(je);Me&&Re.add(Me)}T(Re),g("select")}).catch(je=>{ce||(S(je instanceof Error?je.message:String(je)),g("error"))}),()=>{ce=!0}},[d,o,a]),c.useEffect(()=>()=>{var ce;try{(ce=X.current)==null||ce.close()}catch{}},[]),c.useEffect(()=>{let ce=!1;return(f??(je=>de.getSkillInstallState(je)))(e).then(je=>{ce||F(je)},()=>{ce||F(null)}),()=>{ce=!0}},[e,f,V]);const M=c.useMemo(()=>Rk(b),[b]),O=c.useCallback(ce=>{T(ue=>{const je=new Set(ue);return je.has(ce)?je.delete(ce):je.add(ce),je})},[]),G=c.useCallback(()=>{T(()=>{const ce=new Set;for(const ue of b)ue.detected&&ce.add(ue.id);return ce})},[b]),K=c.useCallback(()=>{T(new Set)},[]),te=c.useCallback(()=>{var ce;if(x!=="installing"){try{(ce=X.current)==null||ce.close()}catch{}i()}},[x,i]),ee=c.useCallback(async()=>{if(k.size===0)return;E(null),L({}),g("installing");const ce=Array.from(k),ue=u??Ck,je=p??Ek;try{const{jobId:Re,streamPath:Ae}=await ue({skill:e,agentIds:ce,scope:n});X.current=je(Ae??Re,{onResult:Me=>{L(_e=>({..._e,[Me.agentId]:Me}))},onDone:Me=>{const _e={},Oe=Me.success===!1?typeof Me.error=="string"&&Me.error.trim()||"Install failed before any target reported a result.":null;for(const J of ce)_e[J]=Oe?{agentId:J,status:"error",detail:Oe}:{agentId:J,status:"skipped"};if(Oe)E(Oe);else for(const J of Me.results??[])_e[J.agentId]=J;L(J=>{var ft;const Pe={..._e};for(const[Ye,at]of Object.entries(J))((ft=Pe[Ye])==null?void 0:ft.status)==="skipped"&&at.status!=="skipped"&&(Pe[Ye]=at);if(!Object.values(Pe).some(Ye=>Ye.status==="installed"||Ye.status==="exported"||Ye.status==="error")){const Ye="Install finished without writing any selected target.";for(const at of ce)Pe[at]={agentId:at,status:"error",detail:Ye};E(Ye)}const Ze=Object.values(Pe),et=Ze.filter(Ye=>Ye.status==="exported"&&typeof Ye.blob=="string");return et.length>0&&(xe(et),z(et[0]??null)),globalThis.setTimeout(()=>{try{l==null||l(Ze)}catch{}},0),Pe}),le(J=>J+1),g("done")},onError:Me=>{E(Me.message),g("error")}})}catch(Re){E(Re instanceof Error?Re.message:String(Re)),g("error")}},[k,e,n,u,p,l]),q=c.useCallback(()=>{if(typeof window<"u")try{window.dispatchEvent(new CustomEvent("studio:skill-installed",{detail:{skill:e,scope:n}}))}catch{}le(ce=>ce+1)},[e,n]),oe=c.useCallback(async ce=>{const ue=h??El;N(null),A(null),U(je=>{const Re=new Set(je);return Re.add(ce),Re});try{const je=await ue({skill:e,agentIds:[ce],scope:n});q();const Re=je.skipped.find(Ae=>Ae.sharedWith&&Ae.sharedWith.length>0);je.errors.length>0?N(`Remove failed for ${je.errors[0].agentId}: ${je.errors[0].message}`):Re&&A({agentId:Re.agentId,sharedWith:Re.sharedWith})}catch(je){N(je instanceof Error?je.message:String(je))}finally{U(je=>{const Re=new Set(je);return Re.delete(ce),Re})}},[h,e,n,q]),ve=c.useCallback(async()=>{if(!I)return;const ce=h??El;W(!0),N(null);try{const ue=await ce({skill:e,scope:n,agentIds:[I.agentId,...I.sharedWith],all:!0});q(),A(null),ue.errors.length>0&&N(`Remove failed for ${ue.errors[0].agentId}: ${ue.errors[0].message}`)}catch(ue){N(ue instanceof Error?ue.message:String(ue))}finally{W(!1)}},[h,e,n,I,q]),ke=c.useCallback(()=>{xe(ce=>{const ue=ce.slice(1);return z(ue[0]??null),ue})},[]),_=c.useMemo(()=>b.filter(ce=>ce.detected).length,[b]);if(typeof document>"u")return null;const Y=k.size===0||x==="installing",Z=k.size===0?"Select at least one target":void 0,ne=`Install ${r??e} to:`,fe=n==="project"?"Project scope — writes under <project>/.claude/skills (or each tool's local dir)":"User scope — writes under ~/.claude/skills (or each tool's global dir)";return Br.createPortal(t.jsxs(t.Fragment,{children:[t.jsx("div",{"data-testid":"install-targets-modal-backdrop",role:"presentation",onClick:ce=>{ce.target===ce.currentTarget&&te()},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.45)",backdropFilter:"blur(4px)",display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"min(8vh, 64px)",zIndex:10020},children:t.jsxs("div",{ref:v,"data-testid":"install-targets-modal",role:"dialog","aria-modal":"true","aria-label":ne,style:{position:"relative",width:"100%",maxWidth:640,margin:"0 1rem",background:"var(--bg-surface, #FFFFFF)",color:"var(--text-primary, #191919)",borderRadius:8,border:"1px solid var(--color-rule, #E8E1D6)",boxShadow:"0 20px 60px rgba(0,0,0,0.18)",overflow:"hidden",maxHeight:"84vh",display:"flex",flexDirection:"column"},children:[t.jsxs("div",{style:{padding:"0.875rem 1.125rem",borderBottom:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"},children:[t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:2,minWidth:0},children:[t.jsx("div",{"data-testid":"install-targets-modal-title",style:{fontFamily:"var(--font-serif, serif)",fontSize:16,fontWeight:500},children:ne}),t.jsx("div",{"data-testid":"install-targets-modal-scope-line",style:{fontSize:11,color:"var(--text-secondary)",fontFamily:"var(--font-mono)"},children:fe})]}),t.jsx("button",{type:"button","data-testid":"install-targets-modal-close",onClick:te,"aria-label":"Close",disabled:x==="installing",style:{background:"transparent",border:"none",cursor:x==="installing"?"not-allowed":"pointer",fontSize:18,color:"var(--text-secondary, #5A5651)",padding:"0 4px",lineHeight:1,opacity:x==="installing"?.4:1},children:"×"})]}),t.jsxs("div",{style:{padding:"0.75rem 1.125rem",overflowY:"auto",flex:1},children:[x==="loading"&&t.jsx("div",{"data-testid":"install-targets-modal-loading",style:{fontSize:12,color:"var(--text-secondary)"},children:"Loading agents…"}),j&&x==="error"&&b.length===0&&t.jsxs("div",{"data-testid":"install-targets-modal-load-error",role:"alert",style:{fontSize:12,color:"var(--color-error, #dc2626)"},children:["Failed to load agents: ",j]}),(x==="select"||x==="installing"||x==="done"||x==="error"&&b.length>0)&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.5rem",marginBottom:"0.625rem"},children:[t.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary)",fontFamily:"var(--font-mono)"},children:[k.size," selected · ",_," detected"]}),t.jsxs("div",{style:{display:"flex",gap:"0.375rem"},children:[t.jsx("button",{type:"button","data-testid":"install-targets-select-all-detected",onClick:G,disabled:x==="installing"||_===0,style:Rl(),children:"Select all detected"}),t.jsx("button",{type:"button","data-testid":"install-targets-clear",onClick:K,disabled:x==="installing"||k.size===0,style:Rl(),children:"Clear"})]})]}),x==="installing"&&t.jsxs("div",{"data-testid":"install-targets-modal-installing-status",role:"status","aria-live":"polite",style:{margin:"0 0 0.75rem 0",padding:"0.625rem 0.875rem",borderRadius:6,border:"1px solid var(--color-rule, #E8E1D6)",background:"var(--surface-2, #F6F4EE)",color:"var(--text-primary)",fontSize:12},children:["Installing ",r??e," to ",k.size," target",k.size===1?"":"s","…"]}),t.jsx(fo,{testId:"install-targets-section-dropin",title:"Drop-in",description:"Filesystem install — Claude-style SKILL.md drops in unchanged.",agents:M.dropIn,selected:k,results:C,phase:x,onToggle:O,scope:n,installState:P,targetVersion:s??null,removingAgents:H,onRemove:oe}),t.jsx(fo,{testId:"install-targets-section-format-converted",title:"Format-converted",description:"Auto-converted to the tool's native format on install.",agents:M.formatConverted,selected:k,results:C,phase:x,onToggle:O,scope:n,installState:P,targetVersion:s??null,removingAgents:H,onRemove:oe}),t.jsx(fo,{testId:"install-targets-section-cloud",title:"Cloud only (paste required)",description:"No local filesystem — opens a paste-ready blob.",agents:M.cloud,selected:k,results:C,phase:x,onToggle:O,tierBadge:"T3",pathOverride:"Copy to clipboard",scope:n,installState:P,targetVersion:s??null,removingAgents:H,onRemove:oe})]}),x==="done"&&t.jsx(jj,{results:Object.values(C),agents:b}),I&&t.jsxs("div",{"data-testid":"install-targets-remove-shared",role:"alert",style:{marginTop:"0.75rem",padding:"0.625rem 0.875rem",borderRadius:6,background:"color-mix(in srgb, var(--color-own, #f59e0b) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--color-own, #f59e0b) 45%, transparent)",color:"var(--text-primary)",fontSize:12,display:"flex",alignItems:"center",gap:"0.75rem"},children:[t.jsxs("span",{style:{flex:1},children:["Not removed: ",I.agentId," loads this skill from the shared .agents/skills folder, which ",I.sharedWith.join(", ")," also",I.sharedWith.length===1?" uses":" use",". It can only be removed for all of them."]}),t.jsx("button",{type:"button","data-testid":"install-targets-remove-all",disabled:$,onClick:()=>{ve()},style:{fontSize:12,padding:"0.25rem 0.625rem",borderRadius:6,background:"transparent",border:"1px solid var(--color-error, #dc2626)",color:"var(--color-error, #dc2626)",cursor:$?"wait":"pointer",whiteSpace:"nowrap",fontFamily:"var(--font-sans)"},children:$?"Removing…":"Remove from all agents"})]}),R&&t.jsx("div",{"data-testid":"install-targets-remove-error",role:"alert",style:{marginTop:"0.75rem",padding:"0.625rem 0.875rem",borderRadius:6,background:"color-mix(in srgb, var(--color-error, #dc2626) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--color-error, #dc2626) 45%, transparent)",color:"var(--text-primary)",fontSize:12},children:R}),(x==="error"||x==="done")&&w&&t.jsx("div",{"data-testid":"install-targets-modal-install-error",role:"alert",style:{marginTop:"0.75rem",padding:"0.625rem 0.875rem",borderRadius:6,background:"color-mix(in srgb, var(--color-error, #dc2626) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--color-error, #dc2626) 45%, transparent)",color:"var(--text-primary)",fontSize:12},children:w})]}),t.jsxs("div",{style:{padding:"0.75rem 1.125rem",borderTop:"1px solid var(--color-rule, #E8E1D6)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"0.5rem"},children:[t.jsx("button",{type:"button","data-testid":"install-targets-modal-cancel",onClick:te,disabled:x==="installing",style:{padding:"0.5rem 0.875rem",borderRadius:6,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-primary)",cursor:x==="installing"?"not-allowed":"pointer",fontSize:13,fontFamily:"var(--font-sans)",opacity:x==="installing"?.5:1},children:x==="done"?"Close":"Cancel"}),t.jsx("button",{type:"button","data-testid":"install-targets-modal-install",onClick:ee,disabled:Y||x==="done","aria-disabled":Y||x==="done",title:Z,style:{padding:"0.5rem 1.125rem",borderRadius:6,border:"1px solid var(--text-primary, #191919)",background:Y||x==="done"?"var(--bg-surface, #FFFFFF)":"var(--text-primary, #191919)",color:Y||x==="done"?"var(--text-secondary, #5A5651)":"var(--bg-surface, #FFFFFF)",cursor:Y||x==="done"?"not-allowed":"pointer",fontSize:13,fontWeight:600,fontFamily:"var(--font-sans)",opacity:Y&&x!=="done"?.6:1},children:x==="installing"?"Installing…":x==="done"?"Done":`Install (${k.size})`})]})]})}),he&&t.jsx(mj,{agentId:he.agentId,agentDisplayName:((me=b.find(ce=>ce.id===he.agentId))==null?void 0:me.displayName)??he.agentId,blob:he.blob??"",pasteInstructionsUrl:he.pasteInstructionsUrl,docsUrl:he.docsUrl,scopeDowngradeWarning:he.detail&&he.detail.includes("project-scoped")?he.detail:void 0,onClose:ke,writeClipboardImpl:m})]}),document.body)}function fo({testId:e,title:r,description:n,agents:s,selected:o,results:a,phase:i,onToggle:l,tierBadge:d,pathOverride:u,scope:p,installState:f,targetVersion:h,removingAgents:m,onRemove:v}){return s.length===0?null:t.jsxs("div",{"data-testid":e,style:{marginTop:"0.625rem"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",padding:"0 0 0.25rem 0"},children:[t.jsx("div",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-tertiary)"},children:r}),t.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)"},children:n})]}),t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2},children:s.map(x=>{const g=o.has(x.id),b=a[x.id],y=i==="installing"||i==="done",j=u??(p==="project"?x.resolvedLocalDir:x.resolvedGlobalDir),S=gj(x.id,p,f,h),k=m.has(x.id);return t.jsxs("label",{"data-testid":`install-targets-row-${x.id}`,"data-checked":g?"true":"false","data-detected":x.detected?"true":"false",style:{display:"flex",alignItems:"center",gap:"0.625rem",padding:"0.375rem 0.5rem",borderRadius:4,cursor:y?"default":"pointer",background:g?"color-mix(in srgb, var(--accent-surface) 8%, transparent)":"transparent"},children:[t.jsx("input",{type:"checkbox","data-testid":`install-targets-checkbox-${x.id}`,checked:g,disabled:y,onChange:()=>l(x.id),style:{margin:0}}),t.jsxs("div",{style:{display:"flex",flexDirection:"column",flex:1,minWidth:0},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[t.jsx("span",{style:{fontSize:13},children:x.displayName}),!x.detected&&t.jsx("span",{"data-testid":`install-targets-undetected-badge-${x.id}`,style:{fontSize:9,padding:"1px 6px",borderRadius:8,background:"color-mix(in srgb, var(--text-tertiary) 18%, transparent)",color:"var(--text-secondary)",letterSpacing:"0.04em",textTransform:"uppercase"},children:"Not detected"}),d&&t.jsx("span",{style:{fontSize:9,padding:"1px 6px",borderRadius:8,background:"color-mix(in srgb, var(--color-own, #f59e0b) 14%, transparent)",color:"var(--text-secondary)",letterSpacing:"0.04em",textTransform:"uppercase"},children:d}),t.jsx(wj,{agentId:x.id,badge:S,isRemoving:k,onRemove:v})]}),t.jsx("div",{title:j,"data-testid":`install-targets-path-${x.id}`,style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-tertiary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:j})]}),b&&t.jsx("span",{"data-testid":`install-targets-status-${x.id}`,"data-status":b.status,style:{fontSize:11,padding:"1px 8px",borderRadius:10,background:`color-mix(in srgb, ${Qo(b.status)} 16%, transparent)`,color:Qo(b.status),fontFamily:"var(--font-mono)"},children:bj(b.status)})]},x.id)})})]})}function jj({results:e,agents:r}){return e.length===0?null:t.jsxs("div",{"data-testid":"install-targets-results-toast",role:"status","aria-live":"polite",style:{marginTop:"0.875rem",padding:"0.75rem 0.875rem",borderRadius:6,border:"1px solid var(--color-rule, #E8E1D6)",background:"var(--surface-2, #F6F4EE)",display:"flex",flexDirection:"column",gap:"0.375rem"},children:[t.jsx("div",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-tertiary)",marginBottom:"0.125rem"},children:"Install results"}),e.map(n=>{const s=r.find(i=>i.id===n.agentId),o=n.status==="installed"?n.path??n.detail:n.status==="exported"?n.detail&&n.detail.includes("project-scoped")?n.detail:"Copied to clipboard":n.status==="error"?n.detail??"Unknown error":n.detail??"",a=n.status==="installed"?"✓":n.status==="exported"?"⧉":n.status==="skipped"?"·":"✗";return t.jsxs("div",{"data-testid":`install-targets-result-row-${n.agentId}`,"data-status":n.status,style:{display:"flex",alignItems:"flex-start",gap:"0.5rem",fontSize:12},children:[t.jsx("span",{"aria-hidden":"true",style:{color:Qo(n.status),fontWeight:600,fontFamily:"var(--font-mono)",width:"0.875rem",flexShrink:0},children:a}),t.jsxs("span",{style:{flex:1,minWidth:0},children:[t.jsx("span",{style:{fontWeight:500},children:(s==null?void 0:s.displayName)??n.agentId}),o&&t.jsx("span",{style:{marginLeft:"0.5rem",color:"var(--text-secondary)",fontFamily:"var(--font-mono)",fontSize:11,wordBreak:"break-all"},children:o}),n.status==="exported"&&n.pasteInstructionsUrl&&t.jsxs(t.Fragment,{children:[" ",t.jsx("a",{"data-testid":`install-targets-result-paste-link-${n.agentId}`,href:n.pasteInstructionsUrl,target:"_blank",rel:"noreferrer noopener",style:{fontSize:11,color:"var(--accent-text, var(--text-primary))",textDecoration:"underline"},children:"open paste instructions →"})]})]})]},n.agentId)})]})}function wj({agentId:e,badge:r,isRemoving:n,onRemove:s}){if(r.kind==="not-installed")return null;let o,a,i;switch(r.kind){case"installed-current":o=r.version?`Installed v${r.version}`:"Installed",a="color-mix(in srgb, var(--color-ok, #22c55e) 14%, transparent)",i="var(--color-ok, #22c55e)";break;case"update-available":o=`Update v${r.installed} → v${r.target}`,a="color-mix(in srgb, var(--color-own, #f59e0b) 18%, transparent)",i="var(--color-own, #f59e0b)";break;case"newer-installed":o=`Newer v${r.installed} (target v${r.target})`,a="color-mix(in srgb, var(--accent-text, #3b82f6) 14%, transparent)",i="var(--accent-text, #3b82f6)";break;case"installed-other-scope":o=r.version?`Installed v${r.version} (${r.otherScope} scope)`:`Installed (${r.otherScope} scope)`,a="color-mix(in srgb, var(--text-tertiary) 18%, transparent)",i="var(--text-secondary)";break}const l=r.kind!=="installed-other-scope";return t.jsxs(t.Fragment,{children:[t.jsx("span",{"data-testid":`install-targets-status-badge-${e}`,"data-badge-kind":r.kind,style:{fontSize:9,padding:"1px 6px",borderRadius:8,background:a,color:i,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"},children:o}),l&&t.jsx("button",{type:"button","data-testid":`install-targets-remove-${e}`,disabled:n,onClick:d=>{d.preventDefault(),d.stopPropagation(),s(e)},style:{fontSize:10,padding:"1px 6px",borderRadius:8,background:"transparent",border:"1px solid var(--color-rule, #E8E1D6)",color:"var(--color-error, #dc2626)",cursor:n?"wait":"pointer",fontFamily:"var(--font-sans)"},children:n?"Removing…":"Remove"})]})}function Rl(){return{padding:"3px 8px",borderRadius:4,border:"1px solid var(--color-rule, #E8E1D6)",background:"transparent",color:"var(--text-secondary)",cursor:"pointer",fontSize:11,fontFamily:"var(--font-sans)"}}const Sj=3e3,Cj={anthropic:"Anthropic",openai:"OpenAI",openrouter:"OpenRouter"};function Tl(e){return e==="anthropic"||e==="openai"||e==="openrouter"}function Ej(){const{toast:e}=ps(),r=c.useRef(new Map),n=c.useCallback(s=>{if(!Tl(s.provider))return;const o=Date.now(),a=r.current.get(s.provider)??0;if(o-a<Sj)return;r.current.set(s.provider,o);const i=Cj[s.provider];e({message:`${i} API key invalid or missing. Open Settings →`,severity:"error",action:{label:"Open Settings",onInvoke:()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:open-settings",{detail:{provider:s.provider}}))}}})},[e]);return c.useEffect(()=>{function s(o){const a=o.detail;!a||!Tl(a.provider)||n({provider:a.provider})}return window.addEventListener("studio:api-key-error",s),()=>window.removeEventListener("studio:api-key-error",s)},[n]),{report:n}}const Lu="vskill.studio.prefs";function Au(){try{return typeof window>"u"?null:window.localStorage??null}catch{return null}}function Pu(){const e=Au();if(!e)return{};try{const r=e.getItem(Lu);if(!r)return{};const n=JSON.parse(r);return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}catch{return{}}}function Nj(e,r){const n=Au();if(n)try{const o={...Pu(),[e]:r};n.setItem(Lu,JSON.stringify(o))}catch{}}function Rj(e,r){const s=Pu()[e];return s===void 0?r:s}const Il={open:!1,x:0,y:0,skill:null};function Tj(e,r){return{open:!0,x:e.clientX,y:e.clientY,skill:r}}function Ot(e,r="info"){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:e,severity:r}}))}function Ij(e){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:e}}))}async function Ll(e,r){var n;try{await de.revealInEditor(e.plugin,e.skill,r),Ot(B.toasts.openingInEditor,"info")}catch(s){if(s instanceof Kt){const o=(n=s.details)==null?void 0:n.error;if(s.status===404){Ot(B.toasts.skillNotFound,"error");return}if(s.status===500&&o==="no_editor"){Ot(B.toasts.noEditor,"error");return}}Ot(B.toasts.openFailed,"error")}}async function Lj(e,r){var n;switch(e){case"copy-path":try{(n=navigator.clipboard)==null||n.writeText(r.dir)}catch{Ot(B.toasts.permissionDenied,"error");return}Ot(B.toasts.pathCopied,"info");return;case"reveal":case"edit":await Ll(r,"SKILL.md");return;case"open":await Ll(r);return;case"run-benchmark":Ot(B.toasts.benchmarkQueued,"info");return;case"duplicate":Ot(B.toasts.skillDuplicated,"info");return;case"clone":try{window.dispatchEvent(new CustomEvent("studio:request-clone",{detail:{skill:r}}))}catch{}return;case"update":Ot(B.toasts.skillUpdated,"info");return;case"uninstall":Ot(B.toasts.uninstallNotImplemented,"info");return;case"delete":Ij(r);return;default:return}}function Aj(e){return e.startsWith("#/create")}function Pj(e){return e.startsWith("#/updates")}function $u(e){const[r,n]=c.useState(()=>typeof window<"u"&&e(window.location.hash));return c.useEffect(()=>{function s(){n(e(window.location.hash))}return window.addEventListener("hashchange",s),s(),()=>window.removeEventListener("hashchange",s)},[]),r}function $j(){return $u(Aj)}function Mj(){return $u(Pj)}function Fj(){var s,o;if(typeof navigator>"u")return"⌘⇧K";const e=((s=navigator.platform)==null?void 0:s.toUpperCase())??"",r=((o=navigator.userAgent)==null?void 0:o.toUpperCase())??"";return e.includes("MAC")||r.includes("MAC")?"⌘⇧K":"Ctrl+Shift+K"}function Dj(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function zj(){const[e,r]=c.useState("⌘⇧K");c.useEffect(()=>{r(Fj())},[]);const n=Dj();function s(){window.dispatchEvent(new CustomEvent("openFindSkills"))}return t.jsxs("button",{type:"button",onClick:s,"aria-label":`Find verified skills — opens search (${e})`,title:`Find verified skills (${e})`,"data-testid":"find-skills-nav-button",style:{display:"inline-flex",alignItems:"center",gap:6,height:28,padding:"0 12px",borderRadius:6,border:"1px solid var(--border-default)",background:"transparent",color:"var(--text-secondary)",fontSize:12,fontWeight:500,fontFamily:"var(--font-sans)",cursor:"pointer",letterSpacing:"0.01em"},children:[t.jsxs("svg",{"data-icon":"search","aria-hidden":"true",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"11",cy:"11",r:"8"}),t.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),t.jsx("span",{children:"Find skills"}),t.jsx("kbd",{"data-animated":n?"false":"true",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-faint)",border:"1px solid var(--border-default)",borderRadius:4,padding:"1px 5px",marginLeft:2,lineHeight:1},children:e})]})}function Bj(){const e=xn(),[r,n]=c.useState(null),[s,o]=c.useState(!0),[a,i]=c.useState(!1),[l,d]=c.useState(null),[u,p]=c.useState(null),[f,h]=c.useState(!1),m=c.useRef(!1);c.useEffect(()=>{let j=!1;return(async()=>{try{const S=await e.getSignedInUser();j||n(S)}catch{}finally{j||o(!1)}})(),()=>{j=!0}},[e]);const v=c.useRef(null);c.useEffect(()=>{if(!a)return;function j(k){v.current&&(v.current.contains(k.target)||i(!1))}function S(k){k.key==="Escape"&&i(!1)}return document.addEventListener("pointerdown",j),document.addEventListener("keydown",S),()=>{document.removeEventListener("pointerdown",j),document.removeEventListener("keydown",S)}},[a]);const x=c.useCallback(async j=>{try{if(typeof e.openExternalUrl=="function"){await e.openExternalUrl(j);return}}catch(S){console.warn("open external URL:",S)}window.open(j,"_blank","noopener,noreferrer")},[e]),g=c.useCallback(async()=>{p(null),h(!0),m.current=!1;let j=null;const S=k=>{j=k,p(k)};try{const k=await e.startGithubDeviceFlow();window.__vskillOauthState=k.userCode,d(k),x(k.verificationUri);let T=Math.max(1,k.interval);const w=Date.now()+k.expiresIn*1e3;for(;!m.current&&Date.now()<w&&(await Wj(T*1e3,()=>m.current),!m.current);){const E=await e.pollGithubDeviceFlow();if(E.status==="granted"){n(E.user),d(null),h(!1);return}if(E.status!=="pending"){if(E.status==="slow_down"){T=Math.max(T+1,E.newInterval);continue}if(E.status==="denied"){S("Sign-in was denied at GitHub. You can try again.");break}if(E.status==="expired"){S("Sign-in code expired. Try again to get a fresh code.");break}if(E.status==="no-flow"){S("Sign-in state lost. Please retry.");break}S(E.message);break}}!m.current&&!j&&S("Sign-in code expired. Try again to get a fresh code.")}catch(k){S(k instanceof Error?k.message:String(k))}finally{h(!1)}},[e,x]),b=c.useCallback(()=>{m.current=!0,d(null),p(null),h(!1)},[]),y=c.useCallback(async()=>{i(!1);try{await e.signOut()}catch(j){console.warn("sign-out:",j)}n(null)},[e]);return s?t.jsx("div",{"data-slot":"user-dropdown-placeholder",style:{width:28,height:28}}):r?t.jsxs("div",{"data-slot":"user-dropdown",style:{position:"relative"},ref:v,children:[t.jsxs("button",{type:"button","data-slot":"user-chip",onClick:()=>i(j=>!j),"aria-label":`Signed in as ${r.login}`,"aria-haspopup":"menu","aria-expanded":a,title:`Signed in as ${r.login}`,style:{display:"inline-flex",alignItems:"center",gap:6,height:28,padding:"0 6px 0 4px",borderRadius:14,border:"1px solid var(--border-default)",background:"var(--surface-1, transparent)",color:"var(--text-primary)",fontSize:12,fontFamily:"var(--font-sans)",cursor:"pointer"},children:[t.jsx("img",{src:r.avatar_url,alt:"",width:20,height:20,onError:j=>{const S=Hj(r.login);j.currentTarget.src!==S&&(j.currentTarget.src=S)},style:{borderRadius:"50%",display:"block"}}),t.jsx("span",{style:{maxWidth:100,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.login})]}),a&&t.jsxs("div",{role:"menu","data-slot":"user-menu",style:{position:"absolute",top:"calc(100% + 4px)",right:0,minWidth:180,background:"var(--surface-2, #1a1d22)",border:"1px solid var(--border-default)",borderRadius:8,padding:4,boxShadow:"0 4px 16px rgba(0,0,0,0.32)",zIndex:50},children:[t.jsx(Al,{label:"View on GitHub",onClick:()=>{x(`https://github.com/${r.login}`),i(!1)}}),t.jsx(Al,{label:"Sign out",onClick:y})]})]}):t.jsxs("div",{"data-slot":"user-dropdown",style:{position:"relative"},ref:v,children:[t.jsxs("button",{type:"button","data-slot":"sign-in-button",onClick:g,disabled:f,"aria-label":"Sign in with GitHub",title:"Sign in with GitHub",style:{display:"inline-flex",alignItems:"center",gap:6,height:28,padding:"0 10px",borderRadius:6,border:"1px solid var(--border-default)",background:"var(--surface-1, transparent)",color:"var(--text-primary)",fontSize:12,fontFamily:"var(--font-sans)",cursor:f?"wait":"pointer"},children:[t.jsx(Oj,{size:14}),f?"Signing in…":"Sign in"]}),l&&t.jsx(_j,{response:l,error:u,onCancel:b,onOpenGithub:()=>void x(l.verificationUri),onRetry:g})]})}function _j({response:e,error:r,onCancel:n,onOpenGithub:s,onRetry:o}){const[a,i]=c.useState("idle"),l=c.useRef(null);c.useEffect(()=>()=>{l.current!=null&&window.clearTimeout(l.current)},[]);let d=e.verificationUri;try{const p=new URL(e.verificationUri);d=`${p.host}${p.pathname}`}catch{}const u=c.useCallback(async()=>{l.current!=null&&window.clearTimeout(l.current);try{await Uj(e.verificationUri),i("copied"),l.current=window.setTimeout(()=>i("idle"),1500)}catch{i("failed"),l.current=window.setTimeout(()=>i("idle"),1500)}},[e.verificationUri]);return t.jsxs("div",{role:"dialog","aria-label":"Sign in with GitHub","data-slot":"sign-in-dialog",style:{position:"absolute",top:"calc(100% + 8px)",right:0,width:320,background:"var(--surface-2, #1a1d22)",border:"1px solid var(--border-default)",borderRadius:10,padding:16,boxShadow:"0 6px 24px rgba(0,0,0,0.42)",zIndex:60,fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[t.jsx("div",{style:{fontSize:13,marginBottom:8},children:"Authorize Skill Studio in GitHub. If the browser did not open, use the button or copy the link."}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[t.jsx("code",{"aria-label":"Authorization URL",title:e.verificationUri,style:{flex:1,fontFamily:"var(--font-mono)",fontSize:12,padding:"6px 10px",background:"var(--surface-1, #0f1115)",border:"1px solid var(--border-default)",borderRadius:6,textAlign:"left",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d}),t.jsx("button",{type:"button",onClick:u,"aria-label":"Copy sign-in link",title:a==="copied"?"Copied":"Copy sign-in link",style:{height:32,padding:"0 10px",borderRadius:6,border:"1px solid var(--border-default)",background:"transparent",color:"var(--text-primary)",cursor:"pointer",fontSize:12},children:a==="copied"?"Copied":a==="failed"?"Copy failed":"Copy link"})]}),t.jsx("div",{"aria-live":"polite","data-slot":"copy-feedback",style:{minHeight:14,fontSize:11,color:"var(--text-secondary)",marginBottom:8},children:a==="copied"?"Link copied":a==="failed"?"Copy failed":""}),r?t.jsx("div",{role:"alert",style:{fontSize:12,color:"var(--color-danger, #d44)",marginBottom:10},children:r}):t.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginBottom:10},children:"Waiting for you to authorize on GitHub…"}),t.jsxs("div",{style:{display:"flex",gap:8},children:[t.jsx("button",{type:"button","data-slot":"open-github-button",onClick:s,style:{flex:1,height:32,borderRadius:6,border:"1px solid var(--color-action, #2F5B8E)",background:"var(--color-action, #2F5B8E)",color:"var(--color-action-ink, #FFFFFF)",cursor:"pointer",fontSize:12,fontWeight:600},children:"Authorize in GitHub"}),r?t.jsx("button",{type:"button",onClick:o,style:{height:32,padding:"0 12px",borderRadius:6,border:"1px solid var(--border-default)",background:"transparent",color:"var(--text-primary)",cursor:"pointer",fontSize:12},children:"Try again"}):null,t.jsx("button",{type:"button",onClick:n,style:{height:32,padding:"0 12px",borderRadius:6,border:"1px solid var(--border-default)",background:"transparent",color:"var(--text-primary)",cursor:"pointer",fontSize:12},children:"Cancel"})]})]})}function Al({label:e,onClick:r}){return t.jsx("button",{type:"button",role:"menuitem",onClick:r,style:{display:"block",width:"100%",textAlign:"left",padding:"8px 12px",background:"transparent",color:"var(--text-primary)",border:"none",cursor:"pointer",fontSize:13,fontFamily:"inherit",borderRadius:4},onMouseEnter:n=>{n.currentTarget.style.background="var(--surface-3, #25292f)"},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:e})}function Oj({size:e=16}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24","aria-hidden":"true",fill:"currentColor",children:t.jsx("path",{d:"M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.1.79-.25.79-.56v-2.04c-3.2.7-3.87-1.37-3.87-1.37-.52-1.32-1.27-1.67-1.27-1.67-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.02 1.75 2.69 1.24 3.34.95.1-.74.4-1.24.72-1.52-2.55-.29-5.24-1.27-5.24-5.66 0-1.25.45-2.27 1.18-3.07-.12-.29-.51-1.46.11-3.04 0 0 .96-.31 3.15 1.18a10.91 10.91 0 0 1 5.74 0c2.18-1.49 3.14-1.18 3.14-1.18.62 1.58.23 2.75.11 3.04.74.8 1.18 1.82 1.18 3.07 0 4.4-2.69 5.36-5.25 5.65.41.36.77 1.07.77 2.16v3.2c0 .31.21.67.8.55C20.21 21.39 23.5 17.08 23.5 12 23.5 5.65 18.35.5 12 .5z"})})}async function Wj(e,r){const s=Date.now()+e;for(;Date.now()<s;){if(r())return;const o=s-Date.now();await new Promise(a=>setTimeout(a,Math.min(250,o)))}}async function Uj(e){var s;try{await((s=navigator.clipboard)==null?void 0:s.writeText(e));return}catch{}const r=document.createElement("textarea");r.value=e,r.setAttribute("readonly","true"),r.style.position="fixed",r.style.opacity="0",r.style.pointerEvents="none",document.body.appendChild(r),r.focus(),r.select();const n=document.execCommand("copy");if(r.remove(),!n)throw new Error("copy failed")}function Hj(e){return`https://github.com/${encodeURIComponent(e)}.png?size=40`}function Vj({forcedTone:e}){const{snapshot:r,refreshing:n,forceSync:s}=Ra(),o=(r==null?void 0:r.daysRemaining)??0,a=(r==null?void 0:r.isFresh)??!1;if(!((r==null?void 0:r.cache)??null))return null;const l=e??Gj(o,a);if(!l)return null;const d=c.useCallback(()=>{s(!0)},[s]),u=l==="danger"?"Sign in to refresh your plan. Some features will be locked until you reconnect.":"Sync to verify your plan — last synced 7 days ago.";return t.jsxs("div",{role:"status","aria-live":"polite","data-testid":"quota-grace-banner","data-tone":l,style:{...Kj,background:l==="danger"?"var(--color-danger-bg, rgba(220, 50, 47, 0.12))":"var(--color-warn-bg, rgba(203, 75, 22, 0.12))",color:l==="danger"?"var(--color-danger, #dc322f)":"var(--color-warn, #cb4b16)",borderColor:l==="danger"?"var(--color-danger, #dc322f)":"var(--color-warn, #cb4b16)"},children:[t.jsx("span",{style:{fontWeight:500},children:u}),t.jsx("button",{type:"button",onClick:d,disabled:n,"data-testid":"quota-grace-sync",style:qj,children:n?"Syncing…":"Sync now"})]})}function Gj(e,r){return r?e<=1?"warn":null:"danger"}const Kj={display:"inline-flex",alignItems:"center",gap:12,padding:"6px 12px",borderRadius:6,fontSize:12,border:"1px solid currentColor",fontFamily:"var(--font-system, -apple-system, system-ui)"},qj={padding:"2px 10px",borderRadius:4,border:"1px solid currentColor",background:"transparent",color:"inherit",cursor:"pointer",fontSize:12,fontWeight:500};function Yj({active:e,onClick:r,badgeCount:n}){return t.jsxs("button",{type:"button","data-testid":"account-sidebar-entry","data-active":e?"true":"false",onClick:r,style:{display:"flex",alignItems:"center",gap:8,width:"100%",textAlign:"left",padding:"8px 14px",fontSize:13,fontWeight:e?600:500,fontFamily:"var(--font-sans)",color:"var(--text-primary)",background:e?"var(--bg-canvas, #f3f4f6)":"transparent",border:"none",borderLeft:`3px solid ${e?"var(--color-accent, #2563eb)":"transparent"}`,cursor:"pointer"},children:[t.jsx("span",{"aria-hidden":!0,children:"👤"}),t.jsx("span",{style:{flex:1},children:"Account"}),n&&n>0?t.jsx("span",{style:{padding:"1px 6px",fontSize:10,fontWeight:600,background:"var(--color-accent, #2563eb)",color:"#fff",borderRadius:999},children:n}):null]})}const Jj={green:"#16a34a",amber:"#f59e0b",grey:"#9ca3af",red:"#dc2626"},Qj={green:"Synced",amber:"Reauth needed",grey:"Idle",red:"Error"};function Xj({repos:e,viewMode:r="table",pendingActions:n,onOpenOnGitHub:s,onResync:o,onDisconnect:a,onConnectNew:i,now:l=new Date}){const d=ew(e),u=e.filter(f=>f.isPrivate).slice().sort((f,h)=>f.repoFullName.localeCompare(h.repoFullName)),p=e.filter(f=>!f.isPrivate).slice().sort((f,h)=>f.repoFullName.localeCompare(h.repoFullName));return t.jsxs("div",{"data-testid":"connected-repos-table",style:{width:"100%"},children:[t.jsx(tw,{summary:d,onConnectNew:i,showConnectAction:!0}),e.length===0?t.jsx(rw,{}):t.jsxs(t.Fragment,{children:[u.length>0?t.jsx(Pl,{kind:"private",repos:u,viewMode:r,pendingActions:n,onOpenOnGitHub:s,onResync:o,onDisconnect:a,now:l}):null,p.length>0?t.jsx(Pl,{kind:"public",repos:p,viewMode:r,pendingActions:n,onOpenOnGitHub:s,onResync:o,onDisconnect:a,now:l}):null]})]})}function Pl({kind:e,repos:r,viewMode:n,pendingActions:s,onOpenOnGitHub:o,onResync:a,onDisconnect:i,now:l}){const d=e==="private";return t.jsxs("section",{"data-testid":`repos-section-${e}`,"data-visibility":e,style:{marginBottom:16,border:d?"1px solid rgba(245,158,11,0.45)":"1px solid var(--border-default, #e5e7eb)",borderRadius:8,overflow:"hidden"},children:[t.jsxs("header",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",padding:"8px 12px",background:d?"rgba(245,158,11,0.10)":"var(--bg-canvas, #f9fafb)",borderBottom:d?"1px solid rgba(245,158,11,0.35)":"1px solid var(--border-default, #e5e7eb)",fontFamily:"var(--font-sans)",fontSize:12},children:[t.jsx(Zj,{kind:e}),t.jsx("strong",{style:{color:d?"#92400e":"var(--text-primary)",textTransform:"uppercase",letterSpacing:"0.05em",fontSize:11},children:d?"Private repositories":"Public repositories"}),t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),t.jsx("span",{style:{color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:r.length}),t.jsx("span",{style:{flex:1}}),t.jsx("span",{style:{color:"var(--text-secondary)",fontSize:11},children:d?"Skills here stay scoped to your account / org.":"Skills here are eligible for the public registry."})]}),n==="cards"?t.jsx(sw,{repos:r,pendingActions:s,onOpenOnGitHub:o,onResync:a,onDisconnect:i,now:l}):t.jsx(nw,{repos:r,pendingActions:s,onOpenOnGitHub:o,onResync:a,onDisconnect:i,now:l})]})}function Zj({kind:e}){return e==="private"?t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",style:{flexShrink:0,color:"#92400e"},children:[t.jsx("rect",{x:"2.75",y:"7",width:"10.5",height:"6.75",rx:"1.25",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.25"}),t.jsx("path",{d:"M5 7V5.25C5 3.59 6.34 2.25 8 2.25C9.66 2.25 11 3.59 11 5.25V7",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",fill:"none"}),t.jsx("circle",{cx:"8",cy:"10.25",r:"0.9",fill:"currentColor"})]}):t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",style:{flexShrink:0,color:"var(--text-secondary)"},children:[t.jsx("circle",{cx:"8",cy:"8",r:"6",stroke:"currentColor",strokeWidth:"1.25",fill:"none"}),t.jsx("path",{d:"M2 8H14M8 2C9.5 4 10 6 10 8C10 10 9.5 12 8 14M8 2C6.5 4 6 6 6 8C6 10 6.5 12 8 14",stroke:"currentColor",strokeWidth:"1",fill:"none"})]})}function ew(e){let r=0,n=0;for(const s of e)s.isPrivate?n++:r++;return{total:e.length,publicCount:r,privateCount:n}}function tw({summary:e,onConnectNew:r,showConnectAction:n}){return t.jsxs("div",{"data-testid":"repos-summary-chip",style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",marginBottom:12,background:"var(--bg-canvas, #f9fafb)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:8,fontFamily:"var(--font-sans)",fontSize:13},children:[t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4,minWidth:0},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",color:"var(--text-primary)",fontWeight:500},children:[t.jsx("strong",{children:e.total}),t.jsxs("span",{children:[e.total===1?"repo":"repos"," connected"]}),t.jsx("span",{"aria-hidden":!0,style:{color:"var(--text-tertiary)"},children:"·"}),t.jsxs("span",{title:"Public repos","aria-label":"Public repos",children:[t.jsx(Xo,{isPrivate:!1})," ",e.publicCount]}),t.jsx("span",{"aria-hidden":!0,style:{color:"var(--text-tertiary)"},children:"·"}),t.jsxs("span",{title:"Private repos","aria-label":"Private repos",children:[t.jsx(Xo,{isPrivate:!0})," ",e.privateCount]})]}),t.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.4},children:"Connect public and private repositories through the GitHub App."})]}),n?t.jsx("button",{type:"button",onClick:r,"data-testid":"connect-new-repo-button",style:{padding:"6px 14px",fontSize:13,fontWeight:500,fontFamily:"inherit",border:"1px solid var(--color-accent, #2563eb)",background:"var(--color-accent, #2563eb)",color:"#fff",borderRadius:6,cursor:"pointer",whiteSpace:"nowrap"},children:"Connect GitHub App"}):null]})}function Xo({isPrivate:e}){return t.jsx("span",{"aria-label":e?"Private repository":"Public repository",title:e?"Private repository":"Public repository",style:{display:"inline-flex",alignItems:"center",padding:"2px 6px",borderRadius:999,border:"1px solid var(--border-default, #e5e7eb)",color:e?"#92400e":"#166534",background:e?"rgba(245, 158, 11, 0.12)":"rgba(22, 163, 74, 0.10)",fontSize:11,fontWeight:600,lineHeight:1,whiteSpace:"nowrap"},children:e?"Private":"Public"})}function rw(){return t.jsxs("div",{"data-testid":"repos-empty-state",style:{textAlign:"center",padding:"32px 24px",background:"var(--bg-canvas, #f9fafb)",border:"1px dashed var(--border-default, #e5e7eb)",borderRadius:8,fontFamily:"var(--font-sans)"},children:[t.jsx("div",{style:{fontSize:15,fontWeight:600,color:"var(--text-primary)",marginBottom:6},children:"No repositories connected yet."}),t.jsxs("div",{style:{fontSize:13,color:"var(--text-secondary)",lineHeight:1.5},children:["Click the ",t.jsx("strong",{style:{color:"var(--text-primary)"},children:"Connect GitHub App"})," ","button above, install the app, then pick the repos to share."]})]})}function nw({repos:e,pendingActions:r,onOpenOnGitHub:n,onResync:s,onDisconnect:o,now:a}){return t.jsxs("table",{"data-testid":"repos-table",style:{width:"100%",borderCollapse:"collapse",fontFamily:"var(--font-sans)",fontSize:13},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-default, #e5e7eb)"},children:[t.jsx(Qr,{children:"Repository"}),t.jsx(Qr,{align:"right",children:"Skills"}),t.jsx(Qr,{children:"Status"}),t.jsx(Qr,{children:"Last activity"}),t.jsx(Qr,{align:"right",style:{width:48},children:t.jsx("span",{style:{visibility:"hidden"},children:"Actions"})})]})}),t.jsx("tbody",{children:e.map(i=>t.jsx(ow,{repo:i,pending:r==null?void 0:r[i.repoId],onOpenOnGitHub:n,onResync:s,onDisconnect:o,now:a},i.repoId))})]})}function sw({repos:e,pendingActions:r,onOpenOnGitHub:n,onResync:s,onDisconnect:o,now:a}){return t.jsx("div",{"data-testid":"repos-card-list",style:{display:"flex",flexDirection:"column",gap:8},children:e.map(i=>t.jsx(aw,{repo:i,pending:r==null?void 0:r[i.repoId],onOpenOnGitHub:n,onResync:s,onDisconnect:o,now:a},i.repoId))})}function ow({repo:e,pending:r,onOpenOnGitHub:n,onResync:s,onDisconnect:o,now:a}){const[i,l]=c.useState(!1);return t.jsxs("tr",{"data-testid":`repo-row-${e.repoId}`,style:{borderBottom:"1px solid var(--border-default, #e5e7eb)"},children:[t.jsx(Xr,{children:t.jsx(Mu,{repo:e})}),t.jsx(Xr,{align:"right",children:e.skillsCount===0?t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"—"}):t.jsx("span",{style:{fontVariantNumeric:"tabular-nums"},children:e.skillsCount})}),t.jsx(Xr,{children:t.jsx(Fu,{status:e.syncStatus,errorMessage:e.lastErrorMessage})}),t.jsx(Xr,{children:t.jsx("span",{style:{color:"var(--text-secondary)"},children:zu(e.lastActivityAt,a)})}),t.jsx(Xr,{align:"right",children:t.jsx(Du,{repo:e,pending:r,isOpen:i,onToggle:()=>l(d=>!d),onClose:()=>l(!1),onOpenOnGitHub:n,onResync:s,onDisconnect:o})})]})}function aw({repo:e,pending:r,onOpenOnGitHub:n,onResync:s,onDisconnect:o,now:a}){const[i,l]=c.useState(!1);return t.jsxs("div",{"data-testid":`repo-card-${e.repoId}`,style:{padding:14,border:"1px solid var(--border-default, #e5e7eb)",borderRadius:8,background:"var(--bg-elevated, #fff)",display:"flex",flexDirection:"column",gap:10},children:[t.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12},children:[t.jsx(Mu,{repo:e}),t.jsx(Du,{repo:e,pending:r,isOpen:i,onToggle:()=>l(d=>!d),onClose:()=>l(!1),onOpenOnGitHub:n,onResync:s,onDisconnect:o})]}),t.jsx(ho,{label:"Skills",children:e.skillsCount===0?"—":String(e.skillsCount)}),t.jsx(ho,{label:"Status",children:t.jsx(Fu,{status:e.syncStatus,errorMessage:e.lastErrorMessage})}),t.jsx(ho,{label:"Last activity",children:zu(e.lastActivityAt,a)})]})}function Mu({repo:e}){return t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[t.jsx(Xo,{isPrivate:e.isPrivate}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:13,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.repoFullName})]})}function Fu({status:e,errorMessage:r}){const n=Jj[e],s=Qj[e],o=e==="red"&&r?r:s;return t.jsxs("span",{"data-testid":`status-${e}`,title:o,style:{display:"inline-flex",alignItems:"center",gap:6},children:[t.jsx("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",background:n,display:"inline-block"}}),t.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:s})]})}function ho({label:e,children:r}){return t.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:12},children:[t.jsx("span",{style:{color:"var(--text-tertiary)"},children:e}),t.jsx("span",{style:{color:"var(--text-primary)"},children:r})]})}function Du({repo:e,pending:r,isOpen:n,onToggle:s,onClose:o,onOpenOnGitHub:a,onResync:i,onDisconnect:l}){return t.jsxs("div",{style:{position:"relative",display:"inline-block"},children:[t.jsx("button",{type:"button","aria-label":`Actions for ${e.repoFullName}`,"aria-expanded":n,"aria-haspopup":"menu","data-testid":`kebab-${e.repoId}`,onClick:s,disabled:r==="disconnect",style:{width:28,height:28,padding:0,border:"1px solid transparent",background:"transparent",borderRadius:4,cursor:r==="disconnect"?"not-allowed":"pointer",color:"var(--text-secondary)",fontSize:16,lineHeight:1},children:"⋯"}),n&&t.jsxs("div",{role:"menu","data-testid":`kebab-menu-${e.repoId}`,style:{position:"absolute",top:"100%",right:0,marginTop:4,minWidth:180,background:"var(--bg-elevated, #fff)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,boxShadow:"0 6px 18px rgba(0,0,0,0.12)",zIndex:10,padding:4},children:[t.jsx(mo,{onClick:()=>{a(e),o()},children:"Open on GitHub"}),t.jsx(mo,{disabled:r==="resync",onClick:async()=>{await i(e),o()},children:r==="resync"?"Resyncing…":"Resync now"}),t.jsx(mo,{danger:!0,onClick:async()=>{await l(e),o()},children:"Disconnect"})]})]})}function mo({children:e,onClick:r,disabled:n,danger:s}){return t.jsx("button",{type:"button",role:"menuitem",onClick:r,disabled:n,style:{display:"block",width:"100%",textAlign:"left",padding:"6px 10px",fontSize:13,fontFamily:"inherit",background:"transparent",border:"none",borderRadius:4,cursor:n?"not-allowed":"pointer",color:s?"#dc2626":"var(--text-primary)",opacity:n?.6:1},children:e})}function Qr({children:e,align:r="left",style:n}){return t.jsx("th",{style:{textAlign:r,padding:"10px 12px",fontWeight:600,fontSize:11,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--text-secondary)",...n},children:e})}function Xr({children:e,align:r="left"}){return t.jsx("td",{style:{textAlign:r,padding:"12px 12px",verticalAlign:"middle"},children:e})}function zu(e,r){if(!e)return"Never";const n=new Date(e).getTime();if(Number.isNaN(n))return"Never";const s=r.getTime()-n;if(s<0)return"Just now";const o=Math.floor(s/1e3);if(o<60)return"Just now";const a=Math.floor(o/60);if(a<60)return`${a}m ago`;const i=Math.floor(a/60);if(i<24)return`${i}h ago`;const l=Math.floor(i/24);if(l<30)return`${l}d ago`;const d=Math.floor(l/30);return d<12?`${d}mo ago`:`${Math.floor(l/365)}y ago`}const xo=80,go=280;function iw({profile:e,onSubmit:r,saving:n=!1,errorMessage:s=null}){const[o,a]=c.useState(e.displayName),[i,l]=c.useState(e.bio??""),[d,u]=c.useState(e.publicProfile);c.useEffect(()=>{a(e.displayName),l(e.bio??""),u(e.publicProfile)},[e.userId,e.displayName,e.bio,e.publicProfile]);const p=o!==e.displayName||i!==(e.bio??"")||d!==e.publicProfile,f=o.length>xo,h=i.length>go,m=o.trim().length>0&&!f&&!h;async function v(x){if(x.preventDefault(),!p||!m||n)return;const g={};o!==e.displayName&&(g.displayName=o),i!==(e.bio??"")&&(g.bio=i||null),d!==e.publicProfile&&(g.publicProfile=d),await r(g)}return t.jsxs("form",{"data-testid":"profile-form",onSubmit:v,style:{display:"flex",flexDirection:"column",gap:18,maxWidth:560,fontFamily:"var(--font-sans)"},children:[t.jsx(lw,{profile:e}),t.jsxs(vo,{label:"Display name",htmlFor:"profile-display-name",children:[t.jsx("input",{id:"profile-display-name","data-testid":"profile-display-name",type:"text",value:o,maxLength:xo+20,disabled:n,onChange:x=>a(x.target.value),style:yo}),t.jsx($l,{current:o.length,max:xo})]}),t.jsx(vo,{label:"GitHub handle",htmlFor:"profile-github-handle",caption:"Synced from GitHub",children:t.jsx("input",{id:"profile-github-handle",type:"text",value:e.githubHandle,readOnly:!0,"aria-readonly":"true",style:{...yo,background:"var(--bg-canvas, #f3f4f6)"}})}),t.jsxs(vo,{label:"Public bio",htmlFor:"profile-bio",children:[t.jsx("textarea",{id:"profile-bio","data-testid":"profile-bio",value:i,maxLength:go+40,rows:3,disabled:n,onChange:x=>l(x.target.value),style:{...yo,fontFamily:"inherit",resize:"vertical"}}),t.jsx($l,{current:i.length,max:go})]}),t.jsx(cw,{label:"Public profile page",helper:"Your bio + public skills appear on a verified-skill.com/u/{handle} page.",checked:d,disabled:n,onChange:u}),s&&t.jsx("div",{role:"alert","data-testid":"profile-form-error",style:{padding:"8px 12px",background:"rgba(220, 38, 38, 0.08)",border:"1px solid rgba(220, 38, 38, 0.4)",color:"#991b1b",borderRadius:6,fontSize:13},children:s}),t.jsx("div",{style:{display:"flex",justifyContent:"flex-end"},children:t.jsx("button",{type:"submit","data-testid":"profile-save-button",disabled:!p||!m||n,style:{padding:"8px 20px",fontSize:13,fontWeight:500,fontFamily:"inherit",border:"1px solid var(--color-accent, #2563eb)",background:!p||!m||n?"var(--bg-canvas, #f3f4f6)":"var(--color-accent, #2563eb)",color:!p||!m||n?"var(--text-tertiary, #9ca3af)":"#fff",borderColor:!p||!m||n?"var(--border-default, #e5e7eb)":"var(--color-accent, #2563eb)",borderRadius:6,cursor:!p||!m||n?"not-allowed":"pointer"},children:n?"Saving…":"Save changes"})})]})}function lw({profile:e}){return t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:14},children:[e.avatarUrl?t.jsx("img",{src:e.avatarUrl,alt:`Avatar for ${e.githubHandle}`,width:56,height:56,style:{width:56,height:56,borderRadius:"50%",objectFit:"cover",border:"1px solid var(--border-default, #e5e7eb)",background:"var(--bg-canvas, #f3f4f6)"}}):t.jsx("div",{"aria-hidden":!0,style:{width:56,height:56,borderRadius:"50%",background:"var(--bg-canvas, #f3f4f6)",border:"1px solid var(--border-default, #e5e7eb)"}}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:16,fontWeight:600,color:"var(--text-primary)"},children:e.displayName||e.githubHandle}),t.jsxs("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:["@",e.githubHandle]})]})]})}function vo({label:e,htmlFor:r,caption:n,children:s}){return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[t.jsx("label",{htmlFor:r,style:{fontSize:13,fontWeight:500,color:"var(--text-primary)"},children:e}),s,n&&t.jsx("span",{style:{fontSize:11,color:"var(--text-tertiary)"},children:n})]})}function $l({current:e,max:r}){const n=e>r;return t.jsxs("span",{style:{alignSelf:"flex-end",fontSize:11,color:n?"#dc2626":"var(--text-tertiary)",fontVariantNumeric:"tabular-nums"},children:[e,"/",r]})}function cw({label:e,helper:r,checked:n,disabled:s,onChange:o}){return t.jsxs("label",{style:{display:"flex",alignItems:"flex-start",gap:10,cursor:s?"not-allowed":"pointer"},children:[t.jsx("input",{type:"checkbox","data-testid":"profile-public-toggle",checked:n,disabled:s,onChange:a=>o(a.target.checked),style:{marginTop:2}}),t.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:2},children:[t.jsx("span",{style:{fontSize:13,fontWeight:500,color:"var(--text-primary)"},children:e}),r&&t.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:r})]})]})}const yo={width:"100%",padding:"8px 10px",fontSize:13,fontFamily:"inherit",color:"var(--text-primary)",background:"var(--bg-elevated, #fff)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,boxSizing:"border-box"},dw={free:{label:"Free",badge:"Open Source · MIT",bullets:["Unlimited public skills","Public GitHub repo connections","Community support"],upgradeLabel:"Upgrade to Pro"},pro:{label:"Pro",badge:"Active",bullets:["Hosted private skill storage","Connect private GitHub repos","Sync skills automatically","Priority email support"],upgradeLabel:"Talk to sales about Enterprise"},enterprise:{label:"Enterprise",badge:"Active",bullets:["Everything in Pro","SSO + audit log","Dedicated support","Custom contract"],upgradeLabel:null}};function uw({tier:e,onUpgradeClick:r,showUpgradeCta:n=!0}){const s=dw[e];return t.jsxs("div",{"data-testid":`plan-card-${e}`,style:{padding:20,border:"1px solid var(--border-default, #e5e7eb)",borderRadius:10,background:"var(--bg-elevated, #fff)",fontFamily:"var(--font-sans)",display:"flex",flexDirection:"column",gap:14},children:[t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:t.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:12},children:[t.jsx("h3",{style:{margin:0,fontSize:20,fontWeight:600,color:"var(--text-primary)"},children:s.label}),t.jsx("span",{"data-testid":"plan-card-badge",style:{padding:"2px 10px",fontSize:11,fontWeight:500,background:e==="free"?"rgba(37, 99, 235, 0.1)":"rgba(22, 163, 74, 0.1)",color:e==="free"?"#1d4ed8":"#15803d",borderRadius:999},children:s.badge})]})}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--text-secondary)",marginBottom:6},children:"What's included"}),t.jsx("ul",{style:{margin:0,paddingLeft:18,display:"flex",flexDirection:"column",gap:4,fontSize:13,color:"var(--text-primary)"},children:s.bullets.map(o=>t.jsx("li",{children:o},o))})]}),n&&s.upgradeLabel&&t.jsx("div",{children:t.jsx("button",{type:"button","data-testid":"plan-card-upgrade",onClick:r,disabled:!r,style:{padding:"8px 16px",fontSize:13,fontWeight:500,fontFamily:"inherit",background:r?"var(--color-accent, #2563eb)":"var(--bg-canvas, #f3f4f6)",color:r?"#fff":"var(--text-tertiary, #9ca3af)",border:`1px solid ${r?"var(--color-accent, #2563eb)":"var(--border-default, #e5e7eb)"}`,borderRadius:6,cursor:r?"pointer":"not-allowed"},children:s.upgradeLabel})})]})}const pw=[{value:30,label:"30 days"},{value:90,label:"90 days"},{value:365,label:"1 year"},{value:0,label:"Never"}];function fw({tokens:e,recentlyCreated:r,onDismissRecentlyCreated:n,onCreate:s,onRevoke:o,pendingRevokeId:a,creating:i=!1,now:l=new Date}){const[d,u]=c.useState(!1),[p,f]=c.useState(null);return t.jsxs("div",{"data-testid":"tokens-table-root",children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[t.jsxs("div",{children:[t.jsx("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text-primary)"},children:"API tokens"}),t.jsx("p",{style:{margin:"4px 0 0",fontSize:12,color:"var(--text-secondary)"},children:"For CLI and automation access; repository sync uses GitHub connections instead."})]}),t.jsx("button",{type:"button","data-testid":"tokens-generate-button",onClick:()=>u(!0),disabled:i,style:{padding:"8px 14px",fontSize:13,fontWeight:500,fontFamily:"inherit",background:"var(--color-accent, #2563eb)",color:"#fff",border:"1px solid var(--color-accent, #2563eb)",borderRadius:6,cursor:i?"not-allowed":"pointer",opacity:i?.6:1},children:"Generate new token"})]}),t.jsx("div",{"data-testid":"tokens-scope-note",style:{marginBottom:12,padding:"10px 12px",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:8,background:"var(--bg-elevated, #fff)",color:"var(--text-secondary)",fontSize:12,lineHeight:1.45},children:"Keep this page for scripts that call verified-skill APIs. To connect public or private repositories, use Connected repositories."}),e.length===0?t.jsx(hw,{onGenerateClick:()=>u(!0)}):t.jsxs("table",{"data-testid":"tokens-table",style:{width:"100%",borderCollapse:"collapse",fontFamily:"var(--font-sans)",fontSize:13},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-default, #e5e7eb)"},children:[t.jsx(Sr,{children:"Name"}),t.jsx(Sr,{children:"Prefix"}),t.jsx(Sr,{children:"Scopes"}),t.jsx(Sr,{children:"Last used"}),t.jsx(Sr,{children:"Created"}),t.jsx(Sr,{align:"right",children:"Actions"})]})}),t.jsx("tbody",{children:e.map(h=>t.jsxs("tr",{"data-testid":`token-row-${h.id}`,style:{borderBottom:"1px solid var(--border-default, #e5e7eb)",opacity:h.revokedAt?.55:1},children:[t.jsx(Cr,{children:h.name}),t.jsx(Cr,{children:t.jsxs("code",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-secondary)"},children:[h.prefix,"…"]})}),t.jsx(Cr,{children:h.scopes.join(", ")}),t.jsx(Cr,{children:Fl(h.lastUsedAt,l)}),t.jsx(Cr,{children:Fl(h.createdAt,l)}),t.jsx(Cr,{align:"right",children:h.revokedAt?t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"Revoked"}):t.jsx("button",{type:"button","data-testid":`token-revoke-${h.id}`,disabled:a===h.id,onClick:()=>f(h),style:{padding:"4px 10px",fontSize:12,fontFamily:"inherit",background:"transparent",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:4,color:"#dc2626",cursor:a===h.id?"not-allowed":"pointer"},children:a===h.id?"Revoking…":"Revoke"})})]},h.id))})]}),d&&t.jsx(mw,{creating:i,onCancel:()=>u(!1),onSubmit:async h=>{await s(h),u(!1)}}),r&&t.jsx(xw,{created:r,onDismiss:()=>n==null?void 0:n()}),p&&t.jsx(gw,{token:p,pending:a===p.id,onCancel:()=>f(null),onConfirm:async()=>{await o(p),f(null)}})]})}function hw({onGenerateClick:e}){return t.jsxs("div",{"data-testid":"tokens-empty-state",style:{textAlign:"center",padding:"40px 20px",background:"var(--bg-canvas, #f9fafb)",border:"1px dashed var(--border-default, #e5e7eb)",borderRadius:8,fontFamily:"var(--font-sans)"},children:[t.jsx("div",{style:{fontSize:14,color:"var(--text-primary)",marginBottom:6},children:"No API tokens yet"}),t.jsx("div",{style:{fontSize:13,color:"var(--text-secondary)",marginBottom:14},children:"Generate one only for local CLI auth, CI, or another scripted integration. GitHub repository access is managed separately."}),t.jsx("button",{type:"button",onClick:e,style:{padding:"6px 14px",fontSize:13,fontFamily:"inherit",background:"var(--color-accent, #2563eb)",color:"#fff",border:"none",borderRadius:6,cursor:"pointer"},children:"Generate new token"})]})}function mw({creating:e,onCancel:r,onSubmit:n}){const[s,o]=c.useState(""),[a,i]=c.useState(!0),[l,d]=c.useState(!1),[u,p]=c.useState(90),f=s.trim().length>0&&(a||l);return t.jsxs(Aa,{title:"Generate new token",onDismiss:r,testId:"tokens-generate-modal",children:[t.jsx(bo,{label:"Name",htmlFor:"token-name",children:t.jsx("input",{id:"token-name","data-testid":"token-name-input",type:"text",value:s,maxLength:64,disabled:e,onChange:h=>o(h.target.value),placeholder:"e.g. Build CI",style:Dl})}),t.jsx(bo,{label:"Scopes",children:t.jsxs("div",{style:{display:"flex",gap:16},children:[t.jsx(Ml,{label:"read",checked:a,disabled:e,onChange:i,testId:"scope-read"}),t.jsx(Ml,{label:"write",checked:l,disabled:e,onChange:d,testId:"scope-write"})]})}),t.jsx(bo,{label:"Expiry",children:t.jsx("select",{"data-testid":"token-expiry-select",value:u,disabled:e,onChange:h=>p(Number(h.target.value)),style:Dl,children:pw.map(h=>t.jsx("option",{value:h.value,children:h.label},h.value))})}),t.jsxs(Pa,{children:[t.jsx($a,{onClick:r,disabled:e,children:"Cancel"}),t.jsx(Bu,{disabled:!f||e,onClick:()=>{const h=[];a&&h.push("read"),l&&h.push("write"),n({name:s.trim(),scopes:h,expiresInDays:u})},children:e?"Generating…":"Generate"})]})]})}function xw({created:e,onDismiss:r}){const[n,s]=c.useState(!1);async function o(){try{await navigator.clipboard.writeText(e.plaintext),s(!0)}catch{}}return t.jsxs(Aa,{title:"Token created",onDismiss:r,testId:"tokens-created-modal",children:[t.jsxs("p",{style:{margin:0,fontSize:13,color:"var(--text-primary)",background:"rgba(245, 158, 11, 0.12)",border:"1px solid rgba(245, 158, 11, 0.4)",padding:12,borderRadius:6},children:[t.jsx("strong",{children:"This is the only time you'll see this token."})," Store it somewhere safe — verified-skill never stores the plaintext."]}),t.jsx("div",{"data-testid":"tokens-plaintext",style:{fontFamily:"var(--font-mono)",fontSize:13,padding:12,background:"var(--bg-canvas, #f3f4f6)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,wordBreak:"break-all",userSelect:"all"},children:e.plaintext}),t.jsxs(Pa,{children:[t.jsx($a,{onClick:o,children:n?"Copied!":"Copy to clipboard"}),t.jsx(Bu,{onClick:r,children:"Done"})]})]})}function gw({token:e,pending:r,onCancel:n,onConfirm:s}){return t.jsxs(Aa,{title:`Revoke ${e.prefix}…?`,onDismiss:n,testId:"tokens-revoke-modal",children:[t.jsx("p",{style:{margin:0,fontSize:13,color:"var(--text-primary)"},children:"Any process using this token will fail immediately. This cannot be undone."}),t.jsxs(Pa,{children:[t.jsx($a,{onClick:n,disabled:r,children:"Cancel"}),t.jsx(vw,{disabled:r,onClick:()=>void s(),children:r?"Revoking…":"Revoke"})]})]})}function Aa({title:e,testId:r,onDismiss:n,children:s}){return t.jsx("div",{role:"dialog","aria-modal":"true","aria-label":e,"data-testid":r,style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.45)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,fontFamily:"var(--font-sans)"},onClick:o=>{o.target===o.currentTarget&&n()},children:t.jsxs("div",{style:{width:"min(440px, calc(100vw - 32px))",background:"var(--bg-elevated, #fff)",borderRadius:10,border:"1px solid var(--border-default, #e5e7eb)",boxShadow:"0 18px 40px rgba(0,0,0,0.18)",padding:20,display:"flex",flexDirection:"column",gap:14},children:[t.jsx("h3",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text-primary)"},children:e}),s]})})}function Pa({children:e}){return t.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:4},children:e})}function Bu({children:e,onClick:r,disabled:n}){return t.jsx("button",{type:"button",onClick:r,disabled:n,style:{padding:"8px 16px",fontSize:13,fontFamily:"inherit",background:n?"var(--bg-canvas, #f3f4f6)":"var(--color-accent, #2563eb)",color:n?"var(--text-tertiary)":"#fff",border:`1px solid ${n?"var(--border-default, #e5e7eb)":"var(--color-accent, #2563eb)"}`,borderRadius:6,cursor:n?"not-allowed":"pointer"},children:e})}function $a({children:e,onClick:r,disabled:n}){return t.jsx("button",{type:"button",onClick:r,disabled:n,style:{padding:"8px 16px",fontSize:13,fontFamily:"inherit",background:"transparent",color:"var(--text-primary)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,cursor:n?"not-allowed":"pointer",opacity:n?.6:1},children:e})}function vw({children:e,onClick:r,disabled:n}){return t.jsx("button",{type:"button",onClick:r,disabled:n,style:{padding:"8px 16px",fontSize:13,fontFamily:"inherit",background:n?"var(--bg-canvas, #f3f4f6)":"#dc2626",color:n?"var(--text-tertiary)":"#fff",border:"1px solid #dc2626",borderRadius:6,cursor:n?"not-allowed":"pointer",opacity:n?.6:1},children:e})}function bo({label:e,htmlFor:r,children:n}){return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[t.jsx("label",{htmlFor:r,style:{fontSize:12,fontWeight:500,color:"var(--text-primary)"},children:e}),n]})}function Ml({label:e,checked:r,onChange:n,disabled:s,testId:o}){return t.jsxs("label",{style:{display:"inline-flex",alignItems:"center",gap:6,fontSize:13,cursor:s?"not-allowed":"pointer",color:"var(--text-primary)"},children:[t.jsx("input",{type:"checkbox","data-testid":o,checked:r,disabled:s,onChange:a=>n(a.target.checked)}),e]})}function Sr({children:e,align:r="left"}){return t.jsx("th",{style:{textAlign:r,padding:"10px 12px",fontWeight:600,fontSize:11,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--text-secondary)"},children:e})}function Cr({children:e,align:r="left"}){return t.jsx("td",{style:{textAlign:r,padding:"12px 12px",verticalAlign:"middle"},children:e})}function Fl(e,r){if(!e)return"—";const n=new Date(e).getTime();if(Number.isNaN(n))return"—";const s=r.getTime()-n;if(s<6e4)return"Just now";const o=Math.floor(s/6e4);if(o<60)return`${o}m ago`;const a=Math.floor(o/60);if(a<24)return`${a}h ago`;const i=Math.floor(a/24);if(i<30)return`${i}d ago`;const l=Math.floor(i/30);return l<12?`${l}mo ago`:`${Math.floor(i/365)}y ago`}const Dl={width:"100%",padding:"8px 10px",fontSize:13,fontFamily:"inherit",color:"var(--text-primary)",background:"var(--bg-elevated, #fff)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,boxSizing:"border-box"},yw=[{key:"weeklyDigest",label:"Weekly digest",helper:"Daily/weekly digest emails ship in a future update.",defaultOn:!1},{key:"securityAlerts",label:"Security alerts",helper:"We'll always notify you about suspicious account activity.",forcedOn:!0,defaultOn:!0},{key:"commentReplies",label:"Comment replies",defaultOn:!0},{key:"productUpdates",label:"Product updates",helper:"Marketing emails — opt out anytime.",defaultOn:!1}];function bw({prefs:e,onSubmit:r,saving:n=!1,errorMessage:s=null}){const[o,a]=c.useState(()=>zl(e));c.useEffect(()=>{a(zl(e))},[e]);const i=o.weeklyDigest!==e.weeklyDigest||o.commentReplies!==e.commentReplies||o.productUpdates!==e.productUpdates;function l(u,p){a(f=>({...f,[u]:p}))}async function d(u){u.preventDefault(),!(!i||n)&&await r({...o,securityAlerts:!0})}return t.jsxs("form",{"data-testid":"notifications-form",onSubmit:d,style:{display:"flex",flexDirection:"column",gap:16,maxWidth:560,fontFamily:"var(--font-sans)"},children:[t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12},children:yw.map(u=>t.jsx(kw,{meta:u,checked:u.forcedOn?!0:!!o[u.key],disabled:n||!!u.forcedOn,onChange:p=>{u.key!=="securityAlerts"&&l(u.key,p)}},u.key))}),s&&t.jsx("div",{role:"alert","data-testid":"notifications-form-error",style:{padding:"8px 12px",background:"rgba(220, 38, 38, 0.08)",border:"1px solid rgba(220, 38, 38, 0.4)",color:"#991b1b",borderRadius:6,fontSize:13},children:s}),t.jsx("div",{style:{display:"flex",justifyContent:"flex-end"},children:t.jsx("button",{type:"submit","data-testid":"notifications-save-button",disabled:!i||n,style:{padding:"8px 20px",fontSize:13,fontWeight:500,fontFamily:"inherit",border:`1px solid ${!i||n?"var(--border-default, #e5e7eb)":"var(--color-accent, #2563eb)"}`,background:!i||n?"var(--bg-canvas, #f3f4f6)":"var(--color-accent, #2563eb)",color:!i||n?"var(--text-tertiary, #9ca3af)":"#fff",borderRadius:6,cursor:!i||n?"not-allowed":"pointer"},children:n?"Saving…":"Save preferences"})})]})}function kw({meta:e,checked:r,disabled:n,onChange:s}){return t.jsxs("label",{"data-testid":`notif-row-${e.key}`,style:{display:"flex",alignItems:"flex-start",gap:10,padding:12,border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,background:"var(--bg-elevated, #fff)",cursor:n&&!e.forcedOn?"not-allowed":"pointer",opacity:n&&!e.forcedOn?.7:1},children:[t.jsx("input",{type:"checkbox","data-testid":`notif-checkbox-${e.key}`,checked:r,disabled:n,onChange:o=>s(o.target.checked),style:{marginTop:2}}),t.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:4,flex:1},children:[t.jsxs("span",{style:{fontSize:13,fontWeight:500,color:"var(--text-primary)",display:"flex",alignItems:"center",gap:8},children:[e.label,e.forcedOn&&t.jsx("span",{style:{fontSize:10,fontWeight:500,padding:"2px 8px",background:"rgba(37, 99, 235, 0.1)",color:"#1d4ed8",borderRadius:999},children:"Always on"})]}),e.helper&&t.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:e.helper})]})]})}function zl(e){return{weeklyDigest:!!e.weeklyDigest,securityAlerts:!0,commentReplies:e.commentReplies??!0,productUpdates:!!e.productUpdates}}function jw({githubHandle:e,exports:r=[],onSignOutAll:n,onExportRequest:s,onDeleteAccount:o,pending:a,errorMessage:i=null}){const[l,d]=c.useState(!1),[u,p]=c.useState(!1);return t.jsxs("div",{"data-testid":"danger-zone",style:{display:"flex",flexDirection:"column",gap:14,fontFamily:"var(--font-sans)"},children:[t.jsx(ko,{title:"Sign out of all devices",description:"Revoke every active session and API token. You'll need to sign back in everywhere.",actionLabel:a!=null&&a.signOutAll?"Signing out…":"Sign out everywhere",actionDisabled:a==null?void 0:a.signOutAll,onClick:()=>d(!0)}),t.jsx(ko,{title:"Export my data",description:"Queue an export of your skills, profile, and connected-repo metadata. Download link emailed within 24 hours.",actionLabel:a!=null&&a.exportRequest?"Queuing…":"Export my data",actionDisabled:a==null?void 0:a.exportRequest,onClick:()=>void s(),children:t.jsx(ww,{exports:r})}),t.jsx(ko,{title:"Delete account",description:"Soft-delete your account. We retain your data for 30 days, then purge permanently. Connected repos are disconnected; tokens revoked.",actionLabel:"Delete account…",actionDisabled:a==null?void 0:a.deleteAccount,destructive:!0,onClick:()=>p(!0)}),i&&t.jsx("div",{role:"alert","data-testid":"danger-zone-error",style:{padding:"8px 12px",background:"rgba(220, 38, 38, 0.08)",border:"1px solid rgba(220, 38, 38, 0.4)",color:"#991b1b",borderRadius:6,fontSize:13},children:i}),l&&t.jsx(Sw,{pending:!!(a!=null&&a.signOutAll),onCancel:()=>d(!1),onConfirm:async()=>{await n(),d(!1)}}),u&&t.jsx(Cw,{githubHandle:e,pending:!!(a!=null&&a.deleteAccount),onCancel:()=>p(!1),onConfirm:async f=>{await o(f),p(!1)}})]})}function ko({title:e,description:r,actionLabel:n,actionDisabled:s,destructive:o,onClick:a,children:i}){return t.jsxs("section",{"data-testid":`danger-card-${e.toLowerCase().replace(/\s+/g,"-")}`,style:{padding:16,border:"1px solid rgba(220, 38, 38, 0.4)",borderRadius:8,background:"rgba(220, 38, 38, 0.04)"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:16},children:[t.jsxs("div",{style:{flex:1},children:[t.jsx("h3",{style:{margin:0,fontSize:14,fontWeight:600,color:"var(--text-primary)"},children:e}),t.jsx("p",{style:{margin:"4px 0 0",fontSize:12,color:"var(--text-secondary)",lineHeight:1.5},children:r})]}),t.jsx("button",{type:"button",onClick:a,disabled:s,style:{padding:"6px 14px",fontSize:13,fontFamily:"inherit",background:o?"#dc2626":"transparent",color:o?"#fff":"#dc2626",border:"1px solid #dc2626",borderRadius:6,cursor:s?"not-allowed":"pointer",opacity:s?.6:1,whiteSpace:"nowrap"},children:n})]}),i]})}function ww({exports:e}){return e.length===0?t.jsx("div",{style:{marginTop:12,padding:10,fontSize:12,color:"var(--text-tertiary)",background:"var(--bg-elevated, #fff)",border:"1px dashed var(--border-default, #e5e7eb)",borderRadius:6},children:"No export jobs yet."}):t.jsxs("table",{"data-testid":"exports-table",style:{marginTop:12,width:"100%",borderCollapse:"collapse",fontSize:12},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-default, #e5e7eb)"},children:[t.jsx("th",{style:jo,children:"Requested"}),t.jsx("th",{style:jo,children:"Status"}),t.jsx("th",{style:jo,children:"Download"})]})}),t.jsx("tbody",{children:e.map(r=>t.jsxs("tr",{style:{borderBottom:"1px solid var(--border-default, #e5e7eb)"},children:[t.jsx("td",{style:wo,children:new Date(r.requestedAt).toLocaleString()}),t.jsx("td",{style:wo,children:r.status}),t.jsx("td",{style:wo,children:r.status==="ready"&&r.downloadUrl?t.jsx("a",{href:r.downloadUrl,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--color-accent, #2563eb)"},children:"Download"}):t.jsx("span",{style:{color:"var(--text-tertiary)"},children:"—"})})]},r.id))})]})}function Sw({pending:e,onCancel:r,onConfirm:n}){return t.jsxs(_u,{title:"Sign out of all devices?",onDismiss:r,testId:"sign-out-all-modal",children:[t.jsx("p",{style:{margin:0,fontSize:13,color:"var(--text-primary)"},children:"Every active session and API token will be revoked. You'll need to sign back in on every device. This cannot be undone."}),t.jsxs(Ou,{children:[t.jsx(Wu,{onClick:r,disabled:e,children:"Cancel"}),t.jsx(Uu,{disabled:e,onClick:()=>void n(),children:e?"Signing out…":"Sign out everywhere"})]})]})}function Cw({githubHandle:e,pending:r,onCancel:n,onConfirm:s}){const[o,a]=c.useState(""),i=o.trim()===e;return t.jsxs(_u,{title:"Delete your account?",onDismiss:n,testId:"delete-account-modal",children:[t.jsx("p",{style:{margin:0,fontSize:13,color:"var(--text-primary)",lineHeight:1.5},children:"Your account will be soft-deleted for 30 days, then purged permanently. Connected repos are disconnected, API tokens revoked, and skills you've published become orphaned."}),t.jsxs("p",{style:{margin:0,fontSize:13,color:"var(--text-primary)"},children:["Type ",t.jsx("strong",{children:e})," to confirm:"]}),t.jsx("input",{type:"text","data-testid":"delete-account-confirm-input",value:o,onChange:l=>a(l.target.value),autoFocus:!0,placeholder:e,disabled:r,style:{width:"100%",padding:"8px 10px",fontSize:13,fontFamily:"var(--font-mono)",color:"var(--text-primary)",background:"var(--bg-elevated, #fff)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,boxSizing:"border-box"}}),t.jsxs(Ou,{children:[t.jsx(Wu,{onClick:n,disabled:r,children:"Cancel"}),t.jsx(Uu,{disabled:!i||r,onClick:()=>void s(o.trim()),children:r?"Deleting…":"Delete account"})]})]})}function _u({title:e,testId:r,onDismiss:n,children:s}){return t.jsx("div",{role:"dialog","aria-modal":"true","aria-label":e,"data-testid":r,style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.45)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,fontFamily:"var(--font-sans)"},onClick:o=>{o.target===o.currentTarget&&n()},children:t.jsxs("div",{style:{width:"min(440px, calc(100vw - 32px))",background:"var(--bg-elevated, #fff)",borderRadius:10,border:"1px solid var(--border-default, #e5e7eb)",boxShadow:"0 18px 40px rgba(0,0,0,0.18)",padding:20,display:"flex",flexDirection:"column",gap:14},children:[t.jsx("h3",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text-primary)"},children:e}),s]})})}function Ou({children:e}){return t.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:4},children:e})}function Wu({children:e,onClick:r,disabled:n}){return t.jsx("button",{type:"button",onClick:r,disabled:n,style:{padding:"8px 16px",fontSize:13,fontFamily:"inherit",background:"transparent",color:"var(--text-primary)",border:"1px solid var(--border-default, #e5e7eb)",borderRadius:6,cursor:n?"not-allowed":"pointer",opacity:n?.6:1},children:e})}function Uu({children:e,onClick:r,disabled:n}){return t.jsx("button",{type:"button",onClick:r,disabled:n,style:{padding:"8px 16px",fontSize:13,fontFamily:"inherit",background:n?"var(--bg-canvas, #f3f4f6)":"#dc2626",color:n?"var(--text-tertiary)":"#fff",border:"1px solid #dc2626",borderRadius:6,cursor:n?"not-allowed":"pointer",opacity:n?.6:1},children:e})}const jo={textAlign:"left",padding:"8px 10px",fontWeight:600,fontSize:11,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--text-secondary)"},wo={padding:"8px 10px",color:"var(--text-primary)"},Ew="/api/v1/submissions/stream?mine=1",So=new Set([...us,...la]);function Nw(e){return!!e&&typeof e=="object"&&typeof e.submissionId=="string"&&typeof e.state=="string"}function Rw(e){const r=new Date(e);return Number.isNaN(r.getTime())?"—":r.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Tw(e){return us.has(e)?"#22C55E":la.has(e)?"#EF4444":"#F59E0B"}function Iw({openStream:e=Eu,notify:r=gc}={}){const[n,s]=c.useState([]),[o,a]=c.useState({}),[i,l]=c.useState(!0),[d,u]=c.useState(null),[p,f]=c.useState(!1),h=c.useRef(new Set),m=c.useRef(!0),v=c.useCallback(async()=>{l(!0),u(null);try{const g=await de.getMyQueue();if(!m.current)return;const b=g.submissions??[];s(b),a(g.queuePositions??{}),h.current=new Set(b.map(y=>y.id));for(const y of b)So.has(y.state)&&ah(y.id,y.state)}catch(g){if(!m.current)return;u(g instanceof Error?g.message:String(g))}finally{m.current&&l(!1)}},[]),x=c.useCallback(g=>{h.current.has(g.submissionId)&&(s(b=>{let y=!1;const j=b.map(S=>S.id!==g.submissionId?S:(y=!0,{...S,state:g.state,skillName:g.skillName||S.skillName,updatedAt:g.timestamp||S.updatedAt}));return y?j:b}),So.has(g.state)&&(a(b=>{if(!(g.submissionId in b))return b;const y={...b};return delete y[g.submissionId],y}),xc(g.submissionId,g.state)&&r(g.submissionId,g.skillName,g.state)))},[r]);return c.useEffect(()=>(m.current=!0,v(),()=>{m.current=!1}),[v]),c.useEffect(()=>{let g=null,b=null,y=0,j=!1;const S=()=>{j||(g=e(Ew,{timeoutMs:6e5,onEvent:T=>{if(j||(f(!0),y=0,!T.data||T.data==="connected"||T.data==="keepalive"))return;let w;try{w=JSON.parse(T.data)}catch{return}Nw(w)&&x(w)},onError:()=>{j||(f(!1),k())},onClose:()=>{j||(f(!1),k())}}))},k=()=>{if(j||b!=null)return;const T=Math.min(1e3*2**y,3e4);y+=1,b=setTimeout(()=>{if(b=null,!j){try{g==null||g.close()}catch{}S()}},T)};return S(),()=>{j=!0,b!=null&&clearTimeout(b);try{g==null||g.close()}catch{}}},[]),t.jsxs("section",{"data-testid":"submission-queue-panel","aria-label":"My submission queue",style:{fontFamily:"var(--font-mono, monospace)"},children:[t.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:10},children:[t.jsx("strong",{style:{fontSize:13,letterSpacing:"-0.01em"},children:"My submissions"}),t.jsxs("span",{"data-testid":"queue-stream-status",title:p?"Live":"Reconnecting…",style:{display:"inline-flex",alignItems:"center",gap:6,fontSize:10,textTransform:"uppercase",letterSpacing:"0.06em",color:p?"#22C55E":"#9CA3AF"},children:[t.jsx("span",{"aria-hidden":"true",style:{width:7,height:7,borderRadius:"50%",background:p?"#22C55E":"#9CA3AF",display:"inline-block"}}),p?"Live":"Offline"]})]}),i&&t.jsx("div",{"data-testid":"queue-loading",style:{fontSize:12,color:"#9CA3AF",padding:"8px 0"},children:"Loading your submissions…"}),d&&!i&&t.jsxs("div",{role:"alert","data-testid":"queue-error",style:{fontSize:12,color:"#EF4444",padding:"8px 0"},children:["Couldn’t load your submissions: ",d," ",t.jsx("button",{type:"button",onClick:()=>void v(),style:{background:"none",border:"none",color:"var(--color-accent, #2563EB)",textDecoration:"underline",cursor:"pointer",padding:0,font:"inherit"},children:"Retry"})]}),!i&&!d&&n.length===0&&t.jsx("div",{"data-testid":"queue-empty",style:{fontSize:12,color:"#9CA3AF",padding:"8px 0"},children:"No submissions yet. Publish a skill to add it to the queue."}),n.length>0&&t.jsxs("table",{"data-testid":"queue-table",style:{width:"100%",borderCollapse:"collapse",fontSize:12},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{textAlign:"left",color:"#9CA3AF",fontSize:10,textTransform:"uppercase",letterSpacing:"0.06em"},children:[t.jsx("th",{style:{padding:"6px 8px",fontWeight:600},children:"Skill"}),t.jsx("th",{style:{padding:"6px 8px",fontWeight:600},children:"State"}),t.jsx("th",{style:{padding:"6px 8px",fontWeight:600},children:"Position"}),t.jsx("th",{style:{padding:"6px 8px",fontWeight:600},children:"Updated"})]})}),t.jsx("tbody",{children:n.map(g=>{const b=o[g.id],y=So.has(g.state);return t.jsxs("tr",{"data-testid":`queue-row-${g.id}`,"data-state":g.state,style:{borderTop:"1px solid rgba(255,255,255,0.06)"},children:[t.jsx("td",{style:{padding:"6px 8px",fontWeight:600},children:g.skillName}),t.jsx("td",{style:{padding:"6px 8px"},children:t.jsx("span",{"data-testid":`queue-state-${g.id}`,style:{color:Tw(g.state)},children:g.state})}),t.jsx("td",{style:{padding:"6px 8px",fontVariantNumeric:"tabular-nums"},"data-testid":`queue-position-${g.id}`,children:y||b==null?"—":`#${b}`}),t.jsx("td",{style:{padding:"6px 8px",color:"#9CA3AF",fontVariantNumeric:"tabular-nums"},children:Rw(g.updatedAt)})]},g.id)})})]})]})}const Lw=[{key:"profile",label:"Profile"},{key:"billing",label:"Plan & billing"},{key:"repos",label:"Connected repositories"},{key:"skills",label:"Skills"},{key:"queue",label:"My queue"},{key:"tokens",label:"API tokens"},{key:"notifications",label:"Notifications"},{key:"danger",label:"Danger zone"}];function Aw({initialTab:e="profile",online:r=!0,onConnectRepo:n,onOpenRepoOnGitHub:s,onUpgradeClick:o}){const[a,i]=c.useState(e);return t.jsxs("div",{"data-testid":"account-shell",style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,fontFamily:"var(--font-sans)"},children:[t.jsx(Pw,{}),!r&&t.jsx($w,{}),t.jsxs("div",{style:{display:"flex",flex:1,minHeight:0},children:[t.jsx(Mw,{activeTab:a,onSelectTab:i}),t.jsx("main",{"data-testid":"account-shell-pane",style:{flex:1,overflowY:"auto",padding:24,background:"var(--bg-canvas, #f9fafb)"},children:t.jsx(Fw,{tab:a,online:r,onConnectRepo:n,onOpenRepoOnGitHub:s,onUpgradeClick:o})})]})]})}function Pw(){const{data:e}=wn();return t.jsxs("header",{"data-testid":"account-shell-header",style:{display:"flex",alignItems:"center",gap:12,padding:"12px 16px",borderBottom:"1px solid var(--border-default, #e5e7eb)",background:"var(--bg-elevated, #fff)"},children:[e!=null&&e.avatarUrl?t.jsx("img",{src:e.avatarUrl,alt:"",width:28,height:28,style:{width:28,height:28,borderRadius:"50%",objectFit:"cover",border:"1px solid var(--border-default, #e5e7eb)"}}):t.jsx("div",{style:{width:28,height:28,borderRadius:"50%",background:"var(--bg-canvas, #f3f4f6)"}}),t.jsxs("div",{style:{display:"flex",flexDirection:"column",lineHeight:1.2},children:[t.jsx("strong",{style:{fontSize:13,color:"var(--text-primary)"},children:(e==null?void 0:e.displayName)??"Loading…"}),t.jsx("span",{style:{fontSize:11,color:"var(--text-secondary)"},children:e?`@${e.githubHandle}`:""})]})]})}function $w(){return t.jsx("div",{role:"status","data-testid":"account-shell-offline-banner",style:{padding:"8px 16px",background:"rgba(245, 158, 11, 0.15)",color:"#92400e",fontSize:12,borderBottom:"1px solid rgba(245, 158, 11, 0.4)"},children:"Offline — showing the last synced data."})}function Mw({activeTab:e,onSelectTab:r}){return t.jsx("nav",{"data-testid":"account-shell-sidenav","aria-label":"Account sections",style:{width:220,flexShrink:0,borderRight:"1px solid var(--border-default, #e5e7eb)",background:"var(--bg-elevated, #fff)",padding:"12px 8px",display:"flex",flexDirection:"column",gap:2},children:Lw.map(n=>{const s=e===n.key;return t.jsx("button",{type:"button","data-testid":`account-tab-${n.key}`,"data-active":s?"true":"false",onClick:()=>r(n.key),style:{display:"block",textAlign:"left",padding:"8px 12px",fontSize:13,fontFamily:"inherit",fontWeight:s?600:400,color:"var(--text-primary)",background:s?"var(--bg-canvas, #f3f4f6)":"transparent",border:"none",borderLeft:`3px solid ${s?"var(--color-accent, #2563eb)":"transparent"}`,borderRadius:0,cursor:"pointer"},children:n.label},n.key)})})}function Fw({tab:e,online:r,onConnectRepo:n,onOpenRepoOnGitHub:s,onUpgradeClick:o}){switch(e){case"profile":return t.jsx(Dw,{});case"billing":return t.jsx(zw,{onUpgradeClick:o});case"repos":return t.jsx(Bw,{online:r,onConnectRepo:n,onOpenRepoOnGitHub:s});case"skills":return t.jsx(_w,{});case"queue":return t.jsx(Ow,{});case"tokens":return t.jsx(Ww,{});case"notifications":return t.jsx(Hw,{});case"danger":return t.jsx(Vw,{});default:return null}}function Dw(){const{data:e,loading:r,error:n}=wn(),s=xd(),[o,a]=c.useState(!1),[i,l]=c.useState(null);return r||!e?t.jsx(jr,{error:n}):t.jsx(iw,{profile:e,saving:o,errorMessage:i,onSubmit:async d=>{a(!0),l(null);try{await s(d)}catch(u){l(u instanceof Error?u.message:String(u))}finally{a(!1)}}})}function zw({onUpgradeClick:e}){const{data:r,loading:n,error:s}=wn();return n||!r?t.jsx(jr,{error:s}):t.jsx(uw,{tier:r.tier,onUpgradeClick:e})}function Bw({online:e,onConnectRepo:r,onOpenRepoOnGitHub:n}){const{data:s,loading:o,error:a}=gs(),i=gd(),l=vd(),[d,u]=c.useState({});return o&&!s?t.jsx(jr,{error:a}):t.jsx(Xj,{repos:Ca(s),pendingActions:d,onConnectNew:()=>r==null?void 0:r(),onOpenOnGitHub:p=>{const f=`https://github.com/${p.repoFullName}`;n?n(f):typeof window<"u"&&window.open(f,"_blank")},onResync:async p=>{if(e){u(f=>({...f,[p.repoId]:"resync"}));try{await i(p.repoId)}finally{u(f=>{const h={...f};return delete h[p.repoId],h})}}},onDisconnect:async p=>{if(e){u(f=>({...f,[p.repoId]:"disconnect"}));try{await l(p.repoId)}finally{u(f=>{const h={...f};return delete h[p.repoId],h})}}}})}function _w(){const{skills:e}=Zg();return e.data?t.jsxs("div",{"data-testid":"account-skills-tab",style:{display:"flex",flexDirection:"column",gap:12},children:[t.jsxs("div",{style:{display:"flex",gap:12},children:[t.jsx(Bl,{label:"Public skills",value:e.data.publicCount}),t.jsx(Bl,{label:"Private skills",value:e.data.privateCount})]}),t.jsxs("section",{style:{marginTop:8},children:[t.jsx("h3",{style:{margin:"0 0 8px",fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:"Recent activity"}),e.data.recentActivity.length===0?t.jsx("p",{style:{margin:0,fontSize:12,color:"var(--text-secondary)"},children:"No recent activity."}):t.jsx("ul",{style:{margin:0,padding:0,listStyle:"none"},children:e.data.recentActivity.map((r,n)=>t.jsxs("li",{style:{padding:"6px 0",fontSize:12,borderBottom:"1px solid var(--border-default, #e5e7eb)",color:"var(--text-primary)"},children:[t.jsx("strong",{children:r.skillName})," ",t.jsx("span",{style:{color:"var(--text-secondary)"},children:r.action})]},`${r.skillName}-${n}`))})]})]}):t.jsx(jr,{error:e.error})}function Bl({label:e,value:r}){return t.jsxs("div",{style:{flex:1,padding:16,border:"1px solid var(--border-default, #e5e7eb)",borderRadius:8,background:"var(--bg-elevated, #fff)"},children:[t.jsx("div",{style:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--text-secondary)"},children:e}),t.jsx("div",{style:{fontSize:24,fontWeight:600,color:"var(--text-primary)",fontVariantNumeric:"tabular-nums"},children:r})]})}function Ow(){return t.jsx("section",{"data-testid":"account-queue-tab",style:{display:"flex",flexDirection:"column",gap:12},children:t.jsx(Iw,{})})}function Ww(){const{data:e,loading:r,error:n}=yd(),s=bd(),o=kd(),[a,i]=c.useState(!1),[l,d]=c.useState(null),[u,p]=c.useState(null);return r&&!e?t.jsx(jr,{error:n}):n&&!e?t.jsx(Uw,{title:"API tokens are unavailable",message:"This page is for CLI and automation tokens, separate from GitHub repository access. Sign in again, then retry token management.",detail:n.message}):t.jsx(fw,{tokens:e??[],creating:a,pendingRevokeId:l,recentlyCreated:u,onDismissRecentlyCreated:()=>p(null),onCreate:async f=>{i(!0);try{const h=await s(f);p(h)}finally{i(!1)}},onRevoke:async f=>{d(f.id);try{await o(f.id)}finally{d(null)}}})}function Uw({title:e,message:r,detail:n}){return t.jsxs("div",{role:"alert","data-testid":"account-shell-section-error",style:{padding:16,border:"1px solid rgba(220, 38, 38, 0.35)",background:"rgba(220, 38, 38, 0.06)",borderRadius:8,color:"#7f1d1d",fontSize:13,display:"flex",flexDirection:"column",gap:6},children:[t.jsx("strong",{style:{color:"#991b1b"},children:e}),t.jsx("span",{children:r}),n?t.jsx("code",{style:{color:"#991b1b",fontSize:12,wordBreak:"break-word"},children:n}):null]})}function Hw(){const{data:e,loading:r,error:n}=jd(),s=wd(),[o,a]=c.useState(!1),[i,l]=c.useState(null);return r||!e?t.jsx(jr,{error:n}):t.jsx(bw,{prefs:e,saving:o,errorMessage:i,onSubmit:async d=>{a(!0),l(null);try{await s(d)}catch(u){l(u instanceof Error?u.message:String(u))}finally{a(!1)}}})}function Vw(){const{data:e}=wn(),{data:r}=Sd(),n=Cd(),s=Ed(),o=Nd(),[a,i]=c.useState({}),[l,d]=c.useState(null);return e?t.jsx(jw,{githubHandle:e.githubHandle,exports:r??[],pending:a,errorMessage:l,onSignOutAll:async()=>{i(u=>({...u,signOutAll:!0})),d(null);try{await n()}catch(u){d(u instanceof Error?u.message:String(u))}finally{i(u=>({...u,signOutAll:!1}))}},onExportRequest:async()=>{i(u=>({...u,exportRequest:!0})),d(null);try{await s()}catch(u){d(u instanceof Error?u.message:String(u))}finally{i(u=>({...u,exportRequest:!1}))}},onDeleteAccount:async u=>{i(p=>({...p,deleteAccount:!0})),d(null);try{await o(u)}catch(p){d(p instanceof Error?p.message:String(p))}finally{i(p=>({...p,deleteAccount:!1}))}}}):t.jsx(jr,{})}function jr({error:e}={}){return e?t.jsxs("div",{role:"alert","data-testid":"account-shell-tab-error",style:{padding:16,border:"1px solid rgba(220, 38, 38, 0.4)",background:"rgba(220, 38, 38, 0.06)",borderRadius:8,color:"#991b1b",fontSize:13},children:["Couldn't load this section: ",e.message]}):t.jsx("div",{"data-testid":"account-shell-tab-loading",style:{padding:16,color:"var(--text-secondary)",fontSize:13},children:"Loading…"})}const Gw=c.lazy(()=>ar(()=>import("./FindSkillsPalette-DQ6uGhFP.js"),__vite__mapDeps([8,5,3,4])).then(e=>({default:e.FindSkillsPalette})));sh();const Kw=c.lazy(()=>ar(()=>import("./SkillDetailPanel-BjHFjGxg.js"),__vite__mapDeps([9,3,4,10,5,6])).then(e=>({default:e.SkillDetailPanel}))),qw=c.lazy(()=>ar(()=>import("./CreateSkillPage-CXDd6gDN.js"),__vite__mapDeps([11,3,4,5,6])).then(e=>({default:e.CreateSkillPage}))),Yw=c.lazy(()=>ar(()=>Promise.resolve().then(()=>G1),void 0).then(e=>({default:e.UpdatesPanel})));function Jw(){return t.jsx(Dh,{children:t.jsx(Py,{children:t.jsx($h,{children:t.jsx($m,{children:t.jsx(Qw,{children:t.jsxs(Y0,{children:[t.jsx(Xw,{}),t.jsx(V0,{})]})})})})})})}function Qw({children:e}){const[r,n]=c.useState(void 0);return c.useEffect(()=>{let s=!1;if(bc())return Th().then(o=>{s||n(o)}),()=>{s=!0}},[]),t.jsx(qg,{value:r,children:e})}function Xw(){var Fa,Da;const{state:e,selectSkill:r,clearSelection:n,refreshSkills:s,outdatedByOrigin:o,revealSkill:a,clearReveal:i}=Lt(),{config:l}=yr(),{resolvedTheme:d,setTheme:u}=Lc(),{toast:p}=ps(),[f,h]=c.useState(()=>Kv()),[m]=c.useState(!0),[v,x]=c.useState(!1),[g,b]=c.useState(!1),[y,j]=c.useState(!1),[S,k]=c.useState(()=>typeof window>"u"?"overview":Jo(window.location.search).tab),[T,w]=c.useState(()=>{if(typeof window>"u")return"";const D=Jo(window.location.search);return D.mode?D.mode:D.view?D.view:wu(D.tab,window.location.search)}),E=c.useCallback(D=>{k(ae=>(ae!==D&&w(ln(D)),D))},[]);c.useEffect(()=>{if(typeof window>"u")return;const D=()=>{const ae=new URLSearchParams(window.location.search),ie=ae.get("tab"),ct=ae.get("panel"),He=os(ie)??os(ct);if(!He)return;const Bt=new URLSearchParams(window.location.search);Bt.delete("panel"),Bt.delete("sub"),He.tab==="overview"?Bt.delete("tab"):Bt.set("tab",He.tab),Bt.delete("mode"),Bt.delete("view"),He.mode&&Bt.set("mode",He.mode),He.view&&Bt.set("view",He.view);const $t=Bt.toString(),za=`${window.location.pathname}${$t?"?"+$t:""}${window.location.hash}`,Hu=`${window.location.pathname}${window.location.search}${window.location.hash}`;za!==Hu&&window.history.replaceState(null,"",za),k(He.tab),He.mode?w(He.mode):He.view?w(He.view):w(ln(He.tab))};return D(),window.addEventListener("popstate",D),()=>window.removeEventListener("popstate",D)},[]),c.useEffect(()=>{if(typeof window>"u")return;const D=new URLSearchParams(window.location.search);D.delete("panel"),D.delete("sub"),S==="overview"?D.delete("tab"):D.set("tab",S),D.delete("mode"),D.delete("view"),!(T===ln(S))&&T&&(S==="run"?D.set("mode",T):S==="history"&&D.set("view",T));const ie=D.toString(),ct=`${window.location.pathname}${ie?"?"+ie:""}${window.location.hash}`,He=`${window.location.pathname}${window.location.search}${window.location.hash}`;ct!==He&&window.history.replaceState(null,"",ct)},[S,T]);const[R,N]=c.useState(Il),I=c.useCallback((D,ae)=>{N(Tj(D,ae))},[]),A=Vk(),[$,W]=c.useState(()=>Rj("activeAgent",null)),C=c.useCallback(D=>{W(D),Nj("activeAgent",D),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:agent-changed",{detail:{agentId:D}}))},[]);c.useEffect(()=>{var D;!$&&((D=A.response)!=null&&D.suggested)&&C(A.response.suggested)},[$,(Fa=A.response)==null?void 0:Fa.suggested,C]);const L=c.useMemo(()=>A.response?Bk(A.response):[],[A.response]),{workspace:P,switchProject:F,addProject:V,removeProject:le,activeProject:H}=Xk(),[U,re]=c.useState(!1);c.useEffect(()=>{te.current=(H==null?void 0:H.path)??null},[H==null?void 0:H.path]);const[xe,he]=c.useState(!1),[z,X]=c.useState("standalone"),[M,O]=c.useState(!1),[G,K]=c.useState(null),te=c.useRef(null),ee=Vd(),q=xn(),oe=c.useCallback(D=>{q.openExternalUrl(D).catch(()=>{typeof window<"u"&&window.open(D,"_blank","noopener,noreferrer")})},[q]),ve=c.useCallback(async(D="standalone")=>{X(D),he(!0)},[]);c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;ve((ie==null?void 0:ie.mode)??"standalone")}return window.addEventListener("studio:request-create-skill",D),()=>window.removeEventListener("studio:request-create-skill",D)},[ve]),c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;K(ie!=null&&ie.repoName?{repoName:ie.repoName}:null),O(!0)}return window.addEventListener("studio:request-paywall",D),()=>window.removeEventListener("studio:request-paywall",D)},[]);const[ke,_]=c.useState(!1),[Y,Z]=c.useState(null),[ne,fe]=c.useState(null);c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;!ie||typeof ie.skill!="string"||ie.skill.length===0||fe({skill:ie.skill,skillDisplayName:ie.skillDisplayName,scope:ie.scope==="project"?"project":"user",activeAgentId:ie.activeAgentId,preCheckedAgentIds:ie.preCheckedAgentIds})}return window.addEventListener("studio:open-install-targets-modal",D),()=>window.removeEventListener("studio:open-install-targets-modal",D)},[]);const[me,ce]=c.useState(null);c.useEffect(()=>{function D(){_(!0)}return window.addEventListener("studio:open-marketplace",D),()=>window.removeEventListener("studio:open-marketplace",D)},[]);const ue=c.useMemo(()=>{const D=new Set;for(const ae of e.skills)ae.source==="plugin"&&ae.pluginName&&D.add(ae.pluginName);return D},[e.skills]),{lookup:je}=Td(),Re=c.useMemo(()=>{const D=new Map;for(const ae of e.skills){const ie=Sn(ae.repoUrl);if(!ie)continue;const ct=je.get(ie);if(!ct||!ct.isPrivate)continue;const He=ae.pluginName??ae.plugin;D.has(He)||D.set(He,{name:He,repoFullName:ct.repoFullName})}return Array.from(D.values())},[e.skills,je]);Bo([{key:"p",meta:!0,handler:D=>{var ie;const ae=typeof document<"u"?document.activeElement:null;ae&&ae.tagName==="INPUT"||((ie=D==null?void 0:D.preventDefault)==null||ie.call(D),re(ct=>!ct))}}],{enabled:!0});const Ae=jk(),Me=Ae.open;c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;ie!=null&&ie.provider&&Me(ie.provider)}return window.addEventListener("studio:open-setup-drawer",D),()=>window.removeEventListener("studio:open-setup-drawer",D)},[Me]);const _e=c.useCallback(()=>{N(Il)},[]);c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;ie!=null&&ie.message&&p({message:ie.message,severity:ie.severity??"info"})}return window.addEventListener("studio:toast",D),()=>window.removeEventListener("studio:toast",D)},[p]),Ej();const[Oe,J]=c.useState(!1),[Pe,Je]=c.useState(void 0);c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;Je(ie==null?void 0:ie.provider),J(!0)}return window.addEventListener("studio:open-settings",D),()=>window.removeEventListener("studio:open-settings",D)},[]),c.useEffect(()=>{document.documentElement.style.setProperty("--sidebar-width",`${f}px`)},[f]),c.useEffect(()=>{function D(){s()}return window.addEventListener("studio:content-saved",D),()=>window.removeEventListener("studio:content-saved",D)},[s]);const[De,Ze]=c.useState(null),[et,ft]=c.useState(()=>new Set),Ye=c.useRef(!1),at=c.useMemo(()=>dv(),[]),it=c.useCallback(D=>`${D.plugin}/${D.skill}`,[]),kt=c.useCallback(D=>{ft(ae=>{const ie=new Set(ae);return ie.add(it(D)),ie})},[it]),jt=c.useCallback(D=>{ft(ae=>{const ie=new Set(ae);return ie.delete(it(D)),ie})},[it]),At=kl({delayMs:1e4,onCommit:D=>{s(),jt(D)},onFailure:(D,ae)=>{jt(D),p({message:`Couldn't delete ${D.skill}: ${ae.message}`,severity:"error",durationMs:0,action:{label:B.actions.retry,onInvoke:()=>{kt(D),At.enqueueDelete(D)}}})}});c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;ie!=null&&ie.skill&&Ze(ie.skill)}return window.addEventListener("studio:request-delete",D),()=>window.removeEventListener("studio:request-delete",D)},[]);const[Te,Ee]=c.useState(null);c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;ie!=null&&ie.skill&&Ee(ie.skill)}return window.addEventListener("studio:request-clone",D),()=>window.removeEventListener("studio:request-clone",D)},[]);const[We,lt]=c.useState(null),Qt=kl({delayMs:250,apiCall:(D,ae)=>api.uninstallSkill(D,ae),onCommit:D=>{s(),jt(D)},onFailure:(D,ae)=>{var ie;if(jt(D),ae instanceof Kt&&((ie=ae.details)==null?void 0:ie.code)==="not-installed"){p({message:`${D.skill} is a source-authored skill — use Delete instead`,severity:"info",durationMs:4e3});return}p({message:`Couldn't uninstall ${D.skill}: ${ae.message}`,severity:"error",durationMs:0,action:{label:B.actions.retry,onInvoke:()=>{kt(D),Qt.enqueueDelete(D)}}})}});c.useEffect(()=>{function D(ae){if(!(ae instanceof CustomEvent))return;const ie=ae.detail;ie!=null&&ie.skill&&lt(ie.skill)}return window.addEventListener("studio:request-uninstall",D),()=>window.removeEventListener("studio:request-uninstall",D)},[]);const Pt=c.useCallback(async D=>{await Promise.all([At.flushBySkillName(D),Qt.flushBySkillName(D)])},[At,Qt]),bs=c.useMemo(()=>({flushBySkillName:Pt}),[Pt]),ks=c.useCallback(()=>{const D=We;if(lt(null),!D)return;const ae={plugin:D.plugin,skill:D.skill};kt(ae),Qt.enqueueDelete(ae),p({message:`Uninstalled ${D.skill}. Sent to your ${at}.`,severity:"info",durationMs:4e3})},[We,kt,Qt,p,at]),Ur=c.useCallback(()=>{lt(null)},[]),Vt=c.useCallback(()=>{const D=De;if(Ze(null),!D)return;const ae={plugin:D.plugin,skill:D.skill};kt(ae),At.enqueueDelete(ae);const ie=Ye.current?"":`Sent to your ${at}. Open Trash to restore. `;Ye.current=!0,p({message:`${ie}Deleted ${D.skill}`,severity:"info",durationMs:1e4,action:{label:B.actions.undo,onInvoke:()=>{At.cancelDelete(it(ae)),jt(ae)}}})},[De,kt,jt,At,p,at,it]),wr=c.useCallback(()=>{Ze(null)},[]),Xt=c.useMemo(()=>e.skills.filter(D=>!et.has(it(D))),[e.skills,et,it]),Nn=ty(Xt,(H==null?void 0:H.path)??null),tt=c.useMemo(()=>e.selectedSkill?e.skills.find(D=>D.plugin===e.selectedSkill.plugin&&D.skill===e.selectedSkill.skill)??null:null,[e.skills,e.selectedSkill]),ze=c.useRef(null);c.useEffect(()=>{if(!tt||typeof window>"u"||new URLSearchParams(window.location.search).get("tab")||!(tt.origin==="installed"))return;const ie=`${tt.plugin}/${tt.skill}`;ze.current!==ie&&(ze.current=ie,S==="overview"&&k("source"))},[tt==null?void 0:tt.plugin,tt==null?void 0:tt.skill,tt==null?void 0:tt.origin]);const dr=c.useCallback(D=>{r({plugin:D.plugin,skill:D.skill,origin:D.origin,source:D.source})},[r]),Zt=c.useMemo(()=>{if(!e.selectedSkill)return"";const D=e.selectedSkill.origin==="installed"?"Installed":"Own";return`Viewing ${e.selectedSkill.skill} (${D})`},[e.selectedSkill]),[Rn,dt]=c.useState(null);Bo([{key:"cmd+k",handler:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("openFindSkills"))}},{key:"ctrl+k",handler:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("openFindSkills"))}},{key:"cmd+shift+m",handler:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("openAgentModelPicker"))}},{key:"ctrl+shift+m",handler:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("openAgentModelPicker"))}},{key:"?",handler:()=>x(D=>!D)},{key:"cmd+shift+d",handler:()=>u(d==="light"?"dark":"light")},{key:"ctrl+shift+d",handler:()=>u(d==="light"?"dark":"light")},{key:"cmd+b",handler:()=>b(D=>!D)},{key:"ctrl+b",handler:()=>b(D=>!D)}]);const Ma=$j(),er=Mj(),js=y?t.jsx(Aw,{online:typeof navigator>"u"?!0:navigator.onLine!==!1,onConnectRepo:()=>{oe("https://verified-skill.com/account/repos/connect")},onOpenRepoOnGitHub:oe,onUpgradeClick:()=>{oe(Ta)}}):er?t.jsx(c.Suspense,{fallback:t.jsx("div",{style:{padding:40},children:"Loading…"}),children:t.jsx(Yw,{})}):Ma?t.jsx(c.Suspense,{fallback:t.jsx("div",{style:{padding:40},children:"Loading…"}),children:t.jsx(qw,{})}):t.jsx(F0,{selectedSkillInfo:tt,activeDetailTab:S,onDetailTabChange:E,activeDetailSub:T,onDetailSubChange:w,allSkills:e.skills,onSelectSkill:dr});return t.jsxs(fu.Provider,{value:bs,children:[t.jsx(zh,{sidebarWidth:f,sidebarHidden:g||e.isMobile&&e.mobileView==="detail",banner:t.jsx(ry,{connected:m}),liveMessage:Zt,topRail:t.jsx(Wm,{projectName:(l==null?void 0:l.projectName)??null,selected:e.selectedSkill,onHome:n,onRequestCreateSkill:()=>ve("standalone"),projectPickerSlot:P&&P.projects.length>0?t.jsx(ej,{workspace:P,onSwitch:F,onAdd:V,onRemove:le}):void 0,findSkillsSlot:t.jsx(zj,{}),appUpdateSlot:t.jsx(Q0,{}),userDropdownSlot:t.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:8},children:[t.jsx(Vj,{}),t.jsx(Bj,{})]})}),sidebar:t.jsxs("div",{"data-testid":"desktop-sidebar",style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[t.jsx("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:t.jsx(Fv,{skills:Xt,selectedKey:e.selectedSkill?{plugin:e.selectedSkill.plugin,skill:e.selectedSkill.skill}:null,onSelect:D=>{j(!1),dr(D)},isLoading:e.skillsLoading,error:e.skillsError??null,onRetry:s,onContextMenu:I,outdatedByOrigin:o,activeAgentId:$,revealSkillId:e.revealSkillId,onRevealComplete:i,dirtySkillIds:Nn,onSkillsChanged:s,topSlot:t.jsxs(t.Fragment,{children:[A.status==="ready"&&L.length>0?t.jsxs(t.Fragment,{children:[t.jsx(_k,{agents:L,activeAgentId:$,onActiveAgentChange:C,onOpenSetup:D=>Ae.open(D)}),t.jsx(Hk,{activeAgentId:$})]}):null,H!=null&&H.path?t.jsx(Ad,{folder:H.path,tier:ee.tier}):null]})})}),t.jsx("div",{style:{borderTop:"1px solid var(--border-default, rgba(128,128,128,0.25))",padding:"6px 0"},children:t.jsx(Yj,{active:y,onClick:()=>j(D=>!D)})})]}),resizeHandle:t.jsx(Yv,{initialWidth:f??an,onChange:h}),main:js,statusBar:t.jsx(Zm,{projectPath:(l==null?void 0:l.root)??null,modelName:(l==null?void 0:l.model)??null,health:l!=null&&l.error?"degraded":"ok",providers:(Da=l==null?void 0:l.providers)==null?void 0:Da.map(D=>{const ae=D.id;return{id:ae,label:D.label,available:D.available,kind:ae==="ollama"||ae==="lm-studio"?"start-service":ae==="anthropic"||ae==="openrouter"?"api-key":"cli-install"}})})}),t.jsx(Z0,{open:v,onClose:()=>x(!1)}),t.jsx(xk,{open:Ae.isOpen,providerKey:Ae.providerKey,onClose:Ae.close}),t.jsx(tk,{state:R,onClose:_e,onAction:(D,ae)=>Lj(D,ae)}),t.jsx(c.Suspense,{fallback:null,children:t.jsx(Gw,{onSelect:D=>{const ae=D.name.split("/");ae.length===3&&dt({owner:ae[0],repo:ae[1],slug:ae[2],displayName:D.displayName??D.name})}})}),Rn&&t.jsx(c.Suspense,{fallback:null,children:t.jsx(Kw,{selectedSkill:Rn,activeAgentId:$,onClose:()=>dt(null)})}),t.jsx(rj,{open:U,projects:(P==null?void 0:P.projects)??[],onSwitch:D=>{F(D)},onClose:()=>re(!1)}),t.jsx(nj,{open:xe,onClose:()=>he(!1),initialMode:z,isClaudeCode:$==="claude-code",projectRoot:(H==null?void 0:H.path)??(l==null?void 0:l.projectName)??"",onCreated:D=>{s(),setTimeout(()=>{a(D.pluginName??"",D.skillName)},500),q.quotaReportCount(Xt.length+1)}}),t.jsx(ij,{open:ke,onClose:()=>_(!1),installedNames:ue,privatePlugins:Re,onInstall:(D,ae)=>{Z({plugin:D,marketplace:ae,ref:`${D}@${ae}`}),_(!1)},onUninstall:async D=>{if(await new Promise(ie=>{ce({plugin:D,resolve:ie})}))try{const ie=await fetch(`/api/plugins/${encodeURIComponent(D)}/uninstall`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),ct=await ie.json().catch(()=>({}));if(!ie.ok||!ct.ok){p({message:ct.error??`Uninstall failed (${ie.status})`,severity:"error"});return}const He=ct.fallback==="orphan-cache-removed"?`Removed orphaned ${D}.`:`Uninstalled ${D}.`;p({message:He,severity:"success"}),s()}catch(ie){p({message:ie instanceof Error?ie.message:String(ie),severity:"error"})}}}),t.jsx(Nc,{open:Oe,onClose:()=>J(!1),initialProvider:Pe,onToast:D=>p({message:D,severity:"info"})}),t.jsx(pj,{job:Y,onDone:D=>{D.ok&&(s(),setTimeout(()=>Z(null),3e3))}}),ne&&t.jsx(kj,{skill:ne.skill,skillDisplayName:ne.skillDisplayName,scope:ne.scope,activeAgentId:ne.activeAgentId===void 0?$:ne.activeAgentId,preCheckedAgentIds:ne.preCheckedAgentIds,onClose:()=>fe(null),onSuccess:D=>{s();const ae=D.filter($t=>$t.status==="installed").length,ie=D.filter($t=>$t.status==="exported").length,ct=D.find($t=>$t.status==="error"),He=ne.skillDisplayName??ne.skill;ct?p({message:ct.detail||`Could not install ${He}.`,severity:"error"}):ie>0?p({message:`Installed ${He}; ${ie} target${ie===1?"":"s"} need paste.`,severity:"info"}):ae>0&&p({message:`Installed ${He} to ${ae} target${ae===1?"":"s"}.`,severity:"success"}),D.some($t=>$t.status==="error"||$t.status==="exported")||fe(null)}}),t.jsx(Jn,{open:De!==null,title:De?`Delete "${De.skill}"?`:"",body:`It will be sent to your ${at}. You can recover it from there.`,confirmLabel:"Delete",cancelLabel:"Cancel",variant:"destructive",onConfirm:Vt,onCancel:wr}),t.jsx(Jn,{open:We!==null,title:We?`Uninstall "${We.skill}"?`:"",body:`It will be sent to your ${at} and the lockfile entry will be removed. You can re-install with vskill install.`,confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onConfirm:ks,onCancel:Ur}),t.jsx(Jn,{open:me!==null,title:me?`Uninstall ${me.plugin}?`:"",body:me?`This removes the ${me.plugin} plugin and all of its skills. You can reinstall it later from the marketplace.`:"",confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onConfirm:()=>{me==null||me.resolve(!0),ce(null)},onCancel:()=>{me==null||me.resolve(!1),ce(null)}}),t.jsx(Gd,{open:M,skillName:(G==null?void 0:G.repoName)??void 0,onClose:()=>{O(!1),K(null)},onProceed:()=>{K(null)}}),Te&&t.jsx(nk,{skill:Te,onCloned:D=>{p({message:B.toasts.cloneSucceeded,severity:"info"}),Ee(null);try{window.dispatchEvent(new CustomEvent("studio:skills-changed",{detail:D}))}catch{}s()},onCancel:()=>Ee(null)})]})}const _l="vskill.migrations.scope-rename.v1",Zw={own:"authoring-project",installed:"available-project",global:"available-personal"},eS=/^vskill-sidebar-(.+)-(own|installed|global)-collapsed$/;function tS(e){if(e.getItem(_l)==="done")return;const r=[];for(let n=0;n<e.length;n++){const s=e.key(n);if(!s)continue;const o=s.match(eS);if(!o)continue;const[,a,i]=o,l=Zw[i];if(!l)continue;const d=e.getItem(s);d!==null&&r.push({oldKey:s,newKey:`vskill-sidebar-${a}-${l}-collapsed`,value:d})}for(const{oldKey:n,newKey:s,value:o}of r)e.getItem(s)===null&&e.setItem(s,o),e.removeItem(n);e.setItem(_l,"done")}if(typeof PerformanceObserver<"u")try{const e=new PerformanceObserver(r=>{for(const n of r.getEntries())if(n.name==="first-contentful-paint"){window.__vskillPaint=n.startTime,e.disconnect();return}});e.observe({type:"paint",buffered:!0})}catch{}if(typeof window<"u"&&window.localStorage)try{tS(window.localStorage)}catch{}Ku.createRoot(document.getElementById("root")).render(t.jsx(c.StrictMode,{children:t.jsx(yf,{children:t.jsx(qm,{children:t.jsx(Jw,{})})})}));export{ys as E,kj as I,lc as L,En as P,W1 as S,oS as T,de as a,Lt as b,B1 as c,D1 as d,Cn as e,ps as f,Rj as g,pu as h,Eu as o,Pu as r,Vf as s,Tr as t,yr as u,Nj as w};