vskill 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents.json +1 -1
- package/dist/eval-ui/assets/{CreateSkillPage-SFmkQaPz.js → CreateSkillPage-CS6TU8sH.js} +1 -1
- package/dist/eval-ui/assets/{FindSkillsPalette-Bh0a8a79.js → FindSkillsPalette-vXkhFdPd.js} +2 -2
- package/dist/eval-ui/assets/{SearchPaletteCore-DJnMVLnq.js → SearchPaletteCore-DPPhRi1e.js} +1 -1
- package/dist/eval-ui/assets/{SkillDetailPanel-oe2j67nh.js → SkillDetailPanel-n_zU6EDp.js} +1 -1
- package/dist/eval-ui/assets/{UpdateDropdown-K19jD1Dy.js → UpdateDropdown-Cy4S5Bz3.js} +1 -1
- package/dist/eval-ui/assets/{index-BzO3ziUg.js → index-D2O2rAr1.js} +19 -19
- package/dist/eval-ui/assets/{index-DOy37DoE.css → index-DOJKM3AZ.css} +1 -1
- package/dist/eval-ui/assets/skill-studio-logo-CRyKgIrg.png +0 -0
- package/dist/eval-ui/favicon.png +0 -0
- package/dist/eval-ui/index.html +3 -2
- package/dist/eval-ui/skill-studio-logo.png +0 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/UpdateDropdown-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/UpdateDropdown-Cy4S5Bz3.js","assets/fonts-i7Lkz2zN.css","assets/FindSkillsPalette-vXkhFdPd.js","assets/SkillDetailPanel-n_zU6EDp.js","assets/skill-url-C4ekwoGs.js","assets/CreateSkillPage-CS6TU8sH.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
/* empty css */(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))i(c);new MutationObserver(c=>{for(const u of c)if(u.type==="childList")for(const d of u.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function s(c){const u={};return c.integrity&&(u.integrity=c.integrity),c.referrerPolicy&&(u.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?u.credentials="include":c.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function i(c){if(c.ep)return;c.ep=!0;const u=s(c);fetch(c.href,u)}})();function Cv(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var bd={exports:{}},_s={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react-jsx-runtime.production.js
|
|
@@ -62,21 +62,21 @@ Please change the parent <Route path="${k}"> to <Route path="${k==="/"?"*":`${k}
|
|
|
62
62
|
`);d=b.pop()??"";for(const S of b)if(S.startsWith("event: "))f=S.slice(7).trim();else if(S.startsWith("data: ")){let w={};try{w=JSON.parse(S.slice(6))}catch{f="";continue}if(f==="started"||f==="copied"||f==="deleted"||f==="indexed"||f==="done"||f==="error"){const E={type:f,...w};a==null||a(E),E.type==="done"&&(x=E),E.type==="error"&&(h=E)}f=""}}if(h){const v=new Ga(h.message,500);throw v.code=h.code,v}if(!x)throw new Ga("Transfer stream ended without 'done' event",500);return x}function TS(t,a){if(!t||!a)return!1;const s=/^(\d+)\.(\d+)\.(\d+)/,i=t.match(s),c=a.match(s);if(!i||!c)return!1;const[,u,d,f]=i.map(Number),[,x,h,v]=c.map(Number);return u!==x?u>x:d!==h?d>h:f>=v}function RS(t,a){if(!a.length)return t;const s=new Map,i=new Map;for(const c of a){const u=c.name.split("/"),d=u.pop()||c.name;if(i.set(d,c),u.length>=1){const f=u[u.length-1];s.set(`${f}/${d}`,c)}}return t.map(c=>{if(c.origin!=="installed")return c;let u;if(c.pluginName?u=s.get(`${c.pluginName}/${c.skill}`):u=i.get(c.skill),!u)return c;const d=u.updateAvailable&&!TS(c.version,u.latest),f={...c,updateAvailable:d,currentVersion:u.installed,latestVersion:u.latest??void 0};typeof u.trackedForUpdates=="boolean"&&(f.trackedForUpdates=u.trackedForUpdates);const x=Gv({frontmatterVersion:f.version??null,registryCurrentVersion:f.currentVersion??null,pluginVersion:f.pluginVersion??null,installedCurrentVersion:f.currentVersion??null,preferInstalled:!0});return f.resolvedVersion=x.version,f.versionSource=x.versionSource,f})}const Uo=new Map,Pa=new Map,Hs=new Map;function In(t){Uo.delete(t),Pa.delete(t);const a=Hs.get(t);if(a)for(const s of a)s()}function qa(t,a,s={}){const{ttl:i=3e4,enabled:c=!0}=s,[,u]=m.useState(0),[d,f]=m.useState(void 0),[x,h]=m.useState(0),v=m.useRef(!0),y=m.useRef(t);y.current=t;const b=()=>{f(void 0),In(t),h(E=>E+1)};m.useEffect(()=>(v.current=!0,()=>{v.current=!1}),[]),m.useEffect(()=>{if(!c)return;const E=()=>{v.current&&h(k=>k+1)};return Hs.has(t)||Hs.set(t,new Set),Hs.get(t).add(E),()=>{var k;(k=Hs.get(t))==null||k.delete(E)}},[t,c]),m.useEffect(()=>{if(!c)return;const E=Uo.get(t);if(!(!E||Date.now()-E.fetchedAt>i))return;if(Pa.has(t)){const A=Pa.get(t),B=()=>{v.current&&y.current===t&&u(z=>z+1)};A.subscribers.push(B);return}const N={promise:Promise.resolve(),subscribers:[]},T=a().then(A=>{Uo.set(t,{data:A,fetchedAt:Date.now()}),Pa.delete(t),v.current&&y.current===t&&(f(void 0),u(B=>B+1));for(const B of N.subscribers)B()},A=>{Pa.delete(t);const B=A instanceof Error?A:new Error(String(A));v.current&&y.current===t&&(f(B),u(z=>z+1));for(const z of N.subscribers)z()});N.promise=T,Pa.set(t,N)},[t,a,i,c,x]);const S=Uo.get(t),w=c&&!S&&!d&&Pa.has(t);return{data:S==null?void 0:S.data,loading:w,error:d,revalidate:b}}function AS(t){const[a,s]=m.useState(()=>typeof window>"u"?!1:window.matchMedia(t).matches);return m.useEffect(()=>{const i=window.matchMedia(t);s(i.matches);const c=u=>s(u.matches);return i.addEventListener("change",c),()=>i.removeEventListener("change",c)},[t]),a}const LS=500,cf="vskill.updates.seenLastId";function MS(){if(typeof window>"u")return null;try{return window.localStorage.getItem(cf)}catch{return null}}function Ld(t){if(!(typeof window>"u"))try{t==null?window.localStorage.removeItem(cf):window.localStorage.setItem(cf,t)}catch{}}function zS(){let t=new Map;const a=new Set,s=new Set,i=[];let c=MS();c&&(s.add(c),i.push(c));function u(){t=new Map(t);for(const f of Array.from(a))f()}function d(f){if(!s.has(f)){if(s.add(f),i.push(f),i.length>LS){const x=i.shift();x&&s.delete(x)}c=f,Ld(f)}}return{getSnapshot(){return t},subscribe(f){return a.add(f),()=>{a.delete(f)}},ingest(f){return s.has(f.eventId)?"duplicate":(d(f.eventId),t.set(f.skillId,{skillId:f.skillId,version:f.version,diffSummary:f.diffSummary,eventId:f.eventId,publishedAt:f.publishedAt,receivedAt:Date.now()}),u(),"stored")},dismiss(f){t.has(f)&&(t.delete(f),u())},clearSeen(){s.clear(),i.length=0,c=null,Ld(null)},mergeBulk(f){if(f.length!==0){for(const x of f)t.set(x.skillId,x);u()}},getSeenLastId(){return c},reset(){t=new Map,s.clear(),i.length=0,c=null,Ld(null),u()}}}const Ua=zS(),DS=3e5,_S=500,OS=15e3,BS=6e4,IS=6e4,$S="/api/v1/skills/stream";function lg(t){const a=new Map;for(const i of t)a.set(i.name,i);const s=new Map;for(const i of t){const c=i.name.split("/").pop()||i.name;c!==i.name&&s.set(c,(s.get(c)??0)+1)}for(const i of t){const c=i.name.split("/").pop()||i.name;c!==i.name&&((s.get(c)??0)>1||a.has(c)||a.set(c,i))}return a}function sg(t){let a=0;for(const s of t)s.updateAvailable&&a++;return a}function US(t){if(!t||typeof t!="object")return!1;const a=t;return a.type==="skill.updated"&&typeof a.eventId=="string"&&typeof a.skillId=="string"&&typeof a.version=="string"}function HS(t){const a=(t==null?void 0:t.intervalMs)??DS,s=(t==null?void 0:t.debounceMs)??_S,i=(t==null?void 0:t.timeoutMs)??OS,c=(t==null?void 0:t.staleAfterMs)??BS,u=(t==null?void 0:t.disconnectFallbackMs)??IS,d=(t==null?void 0:t.streamUrlBase)??$S,f=m.useMemo(()=>!(t!=null&&t.skillIds)||t.skillIds.length===0?"":[...t.skillIds].sort().join(","),[t==null?void 0:t.skillIds]),x=m.useMemo(()=>{const M=(t==null?void 0:t.trackingSkillIds)??(t==null?void 0:t.skillIds)??[];return M.length===0?"":[...M].sort().join(",")},[t==null?void 0:t.trackingSkillIds,t==null?void 0:t.skillIds]),[h,v]=m.useState([]),[y,b]=m.useState(()=>new Map),[S,w]=m.useState(0),[E,k]=m.useState(!1),[N,T]=m.useState(null),[A,B]=m.useState(null),z=m.useRef(null),P=m.useRef(null),C=m.useRef(null),O=m.useRef(null),L=m.useRef(!0),[_,H]=m.useState(()=>f?"connecting":"fallback"),W=m.useRef(_);W.current=_;const q=m.useSyncExternalStore(M=>Ua.subscribe(M),()=>Ua.getSnapshot(),()=>Ua.getSnapshot()),ee=q.size,$=m.useCallback(async()=>{k(!0);const M=new AbortController,U=setTimeout(()=>M.abort(),i);try{const K=await Promise.race([ke.getSkillUpdates(),new Promise((Q,ce)=>{M.signal.addEventListener("abort",()=>{ce(new Error("TIMEOUT"))})})]);if(K==="TIMEOUT")throw new Error("TIMEOUT");if(!L.current)return;v(K),b(lg(K)),w(sg(K)),P.current=Date.now(),T(P.current),B(null)}catch(K){if(!L.current)return;B(K instanceof Error?K:new Error(String(K)))}finally{clearTimeout(U),L.current&&k(!1)}},[i]),D=m.useCallback(()=>{if(z.current)return z.current;const M=$().finally(()=>{z.current=null});return z.current=M,M},[$]),I=m.useCallback(()=>{C.current==null&&(C.current=setInterval(()=>{D()},a))},[a,D]),F=m.useCallback(()=>{C.current!=null&&(clearInterval(C.current),C.current=null)},[]);m.useEffect(()=>{L.current=!0,(P.current==null||Date.now()-P.current>c)&&D(),(typeof document>"u"||document.visibilityState!=="hidden")&&I();const K=()=>{if(O.current&&(clearTimeout(O.current),O.current=null),document.visibilityState==="hidden"){F();return}O.current=setTimeout(()=>{O.current=null,(P.current==null||Date.now()-P.current>c)&&D(),I()},s)};return typeof document<"u"&&document.addEventListener("visibilitychange",K),()=>{L.current=!1,typeof document<"u"&&document.removeEventListener("visibilitychange",K),O.current&&clearTimeout(O.current),F()}},[]);const J=m.useCallback(async M=>{if(M.length!==0)try{const U=await ke.checkSkillUpdates(M);if(!L.current||U.length===0)return;const K=Date.now(),Q=U.filter(Z=>Z.skillId&&Z.eventId&&Z.version).map(Z=>({skillId:Z.skillId,version:Z.version,eventId:Z.eventId,publishedAt:Z.publishedAt,diffSummary:Z.diffSummary,receivedAt:K}));Q.length>0&&Ua.mergeBulk(Q);const ce=U.filter(Z=>typeof Z.trackedForUpdates=="boolean"||typeof Z.updateAvailable=="boolean").map(Z=>({name:Z.name??Z.skillId,installed:Z.installed??"",latest:Z.latest??null,updateAvailable:Z.updateAvailable??!1,trackedForUpdates:typeof Z.trackedForUpdates=="boolean"?Z.trackedForUpdates:void 0}));ce.length>0&&v(Z=>{const ie=new Map;for(const je of Z)ie.set(je.name,je);let X=0;for(const je of ce){const Ne=je.name,Me=ie.get(Ne);if(Me){const Fe={...Me};Me.trackedForUpdates===void 0&&je.trackedForUpdates!==void 0&&(Fe.trackedForUpdates=je.trackedForUpdates),ie.set(Ne,Fe)}else ie.set(Ne,{name:je.name,installed:je.installed??"",latest:je.latest??null,updateAvailable:je.updateAvailable??!1,trackedForUpdates:je.trackedForUpdates}),X+=1}if(X===0&&ie.size===Z.length)return Z;const me=[...ie.values()];return b(lg(me)),w(sg(me)),me})}catch{}},[]);m.useEffect(()=>{const M=f||x;if(!M){H("fallback");return}if(typeof window>"u"||typeof EventSource>"u"){H("fallback");return}H("connecting");const U=M.split(","),K=`${d}?skills=${encodeURIComponent(M)}`;let Q=null,ce=null,Z=null;const ie=()=>{ce==null&&(ce=setTimeout(()=>{ce=null,L.current&&W.current!=="connected"&&H("fallback")},u))},X=()=>{ce!=null&&(clearTimeout(ce),ce=null)};ie();const me=1e3,je=()=>{L.current&&Z==null&&(Z=setTimeout(()=>{if(Z=null,!!L.current&&!(Q&&Q.readyState!==EventSource.CLOSED)){if(Q)try{Q.close()}catch{}Fe()}},me))},Ne=Ue=>{if(!L.current)return;let De;try{De=JSON.parse(Ue.data)}catch{return}if(!US(De)||Ua.ingest(De)==="duplicate")return;if(typeof document>"u"||document.visibilityState!=="hidden"){const oe=`${De.skillId} updated to ${De.version}`;window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:oe,severity:"info",skillId:De.skillId,version:De.version,eventId:De.eventId}}))}},Me=()=>{L.current&&(Ua.clearSeen(),J(U))},Fe=()=>{L.current&&(Q=new EventSource(K),Q.onopen=()=>{L.current&&(X(),H("connected"))},Q.onerror=()=>{L.current&&(ie(),Q&&Q.readyState===EventSource.CLOSED&&je())},Q.onmessage=Ne,Q.addEventListener("gone",Me))};return Fe(),()=>{if(X(),Z!=null&&(clearTimeout(Z),Z=null),Q){try{Q.removeEventListener("gone",Me)}catch{}try{Q.close()}catch{}}}},[f,x,d,u,J]),m.useEffect(()=>{if(!x)return;const M=x.split(",");J(M)},[x,J]);const de=m.useCallback(M=>{Ua.dismiss(M)},[]);return{updates:h,updatesMap:y,updateCount:S,isRefreshing:E,lastFetchAt:N,error:A,refresh:D,updatesById:q,pushUpdateCount:ee,status:_,dismiss:de}}function PS(t){const a=[];for(const s of t){const i=typeof s.uuid=="string"&&s.uuid.length>0,c=typeof s.slug=="string"&&s.slug.length>0;if(!i&&!c)continue;const u={};i&&(u.uuid=s.uuid),c&&(u.slug=s.slug),a.push(u)}return a}const VS={selectedSkill:null,mode:"browse",searchQuery:"",skills:[],skillsLoading:!0,skillsError:null,isMobile:!1,mobileView:"list",updateNotificationDismissed:!1,revealSkillId:null};function FS(t,a){switch(a.type){case"SELECT_SKILL":return{...t,selectedSkill:a.skill,mode:"browse",mobileView:t.isMobile?"detail":t.mobileView};case"CLEAR_SELECTION":return{...t,selectedSkill:null};case"SET_MODE":return{...t,mode:a.mode,selectedSkill:a.mode==="create"?null:t.selectedSkill};case"SET_SEARCH":return{...t,searchQuery:a.query};case"SET_SKILLS":return{...t,skills:a.skills,skillsLoading:!1,skillsError:null};case"SET_SKILLS_ERROR":return{...t,skillsError:a.error,skillsLoading:!1};case"SET_SKILLS_LOADING":return{...t,skillsLoading:a.loading};case"SET_MOBILE":return{...t,isMobile:a.isMobile};case"SET_MOBILE_VIEW":return{...t,mobileView:a.view};case"DISMISS_UPDATE_NOTIFICATION":return{...t,updateNotificationDismissed:!0};case"REVEAL_SKILL":return{...t,selectedSkill:a.skill,revealSkillId:`${a.skill.plugin}/${a.skill.skill}`,mode:"browse",mobileView:t.isMobile?"detail":t.mobileView};case"CLEAR_REVEAL":return{...t,revealSkillId:null};default:return t}}const Wv=m.createContext(null),qv=Wv;function cr(){const t=m.useContext(qv);if(!t)throw new Error("useStudio must be used within StudioProvider");return t}function GS({children:t}){const[a,s]=m.useReducer(FS,VS),i=AS("(max-width: 767px)");m.useEffect(()=>{s({type:"SET_MOBILE",isMobile:i})},[i]);const[c,u]=m.useState(()=>{try{const J=window.localStorage.getItem("vskill.studio.prefs");if(!J)return null;const de=JSON.parse(J);return typeof de.activeAgent=="string"?de.activeAgent:null}catch{return null}}),[d,f]=m.useState(c!==null);m.useEffect(()=>{function J(de){if(!(de instanceof CustomEvent))return;const M=de.detail;M!=null&&M.agentId&&(u(M.agentId),f(!0))}return window.addEventListener("studio:agent-changed",J),()=>window.removeEventListener("studio:agent-changed",J)},[]),m.useEffect(()=>{if(d)return;let J=!1;return ke.getAgents().then(de=>{if(J)return;const M=(de==null?void 0:de.suggested)??"claude-code";u(U=>U??M),f(!0)}).catch(()=>{J||(u(de=>de??"claude-code"),f(!0))}),()=>{J=!0}},[d]);const x=m.useCallback(()=>{if(!d||!c)return Promise.resolve();s({type:"SET_SKILLS_LOADING",loading:!0});const J={agent:c};return ke.getSkills(J).then(de=>{s({type:"SET_SKILLS",skills:de});const M=window.location.hash,U=M.match(/^#\/skills\/(project|personal|plugin)\/([^/]+)\/([^/?]+)/);if(U){const[,Q,ce,Z]=U,ie=Q,X=de.find(je=>je.plugin===ce&&je.skill===Z&&je.source===ie);if(X){s({type:"SELECT_SKILL",skill:{plugin:ce,skill:Z,origin:X.origin,source:X.source}});return}const me=de.find(je=>je.plugin===ce&&je.skill===Z);me&&s({type:"SELECT_SKILL",skill:{plugin:ce,skill:Z,origin:me.origin,source:me.source}});return}const K=M.match(/^#\/skills\/([^/]+)\/([^/?]+)/);if(K){const[,Q,ce]=K,Z=de.find(ie=>ie.plugin===Q&&ie.skill===ce);Z&&s({type:"SELECT_SKILL",skill:{plugin:Q,skill:ce,origin:Z.origin,source:Z.source}})}}).catch(de=>s({type:"SET_SKILLS_ERROR",error:de.message}))},[c,d]);m.useEffect(()=>{x()},[x]);const h=m.useCallback(J=>{s({type:"SELECT_SKILL",skill:J}),window.location.hash=J.source?`/skills/${J.source}/${J.plugin}/${J.skill}`:`/skills/${J.plugin}/${J.skill}`},[]),v=m.useRef(a.skills);m.useEffect(()=>{v.current=a.skills},[a.skills]);const y=m.useCallback((J,de)=>{const M=v.current,U=J?M.find(Z=>Z.plugin===J&&Z.skill===de):M.find(Z=>Z.skill===de&&Z.source!=="plugin");if(!J&&!U){typeof console<"u"&&console.warn(`[StudioContext] revealSkill: no plugin provided and skill "${de}" not yet in state — skipping reveal`);return}const K=(U==null?void 0:U.plugin)??J,Q=(U==null?void 0:U.origin)??"source",ce=U==null?void 0:U.source;s({type:"REVEAL_SKILL",skill:{plugin:K,skill:de,origin:Q,source:ce}}),window.location.hash=ce?`/skills/${ce}/${K}/${de}`:`/skills/${K}/${de}`},[]),b=m.useCallback(()=>{s({type:"CLEAR_REVEAL"})},[]),S=m.useCallback(()=>{s({type:"CLEAR_SELECTION"}),window.location.hash.startsWith("#/skills/")&&history.replaceState(null,"",window.location.pathname+window.location.search)},[]),w=m.useCallback(J=>{s({type:"SET_MODE",mode:J})},[]),E=m.useCallback(J=>{s({type:"SET_SEARCH",query:J})},[]),k=m.useCallback(J=>{s({type:"SET_MOBILE_VIEW",view:J})},[]),N=m.useCallback(()=>{s({type:"DISMISS_UPDATE_NOTIFICATION"})},[]),T=m.useRef(new Map),A=m.useRef(""),B=m.useRef(!1),[z,P]=m.useState(""),C=m.useMemo(()=>a.skills.map(J=>`${J.plugin}/${J.skill}`),[a.skills]),O=m.useMemo(()=>z?z.split(",").filter(Boolean):[],[z]),L=HS({skillIds:O,trackingSkillIds:C}),_=m.useRef("");m.useEffect(()=>{const J=a.skills.filter(Q=>Q.origin==="installed");if(J.length===0){P(""),_.current="";return}const de=new Map;for(const Q of L.updates)de.set(Q.name.split("/").pop()||Q.name,Q);const M=J.map(Q=>{const ce=de.get(Q.skill),Z=Q.currentVersion??(ce==null?void 0:ce.installed)??Q.version??Q.pluginVersion??"1.0.0";return{plugin:Q.plugin,skill:Q.skill,name:(ce==null?void 0:ce.name)??Q.skill,currentVersion:Z}}),U=M.map(Q=>`${Q.plugin}/${Q.skill}@${Q.currentVersion}#${Q.name}`).sort().join("|");if(U===_.current)return;_.current=U;let K=!1;return ke.resolveInstalledSkillIds(M).then(Q=>{if(K)return;const ie=[...PS(Q).flatMap(X=>[X.uuid,X.slug].filter(Boolean))].sort().join(",");ie!==A.current&&(A.current=ie,T.current=new Map(Q.map(X=>[`${X.plugin}/${X.skill}`,{uuid:X.uuid,slug:X.slug}])),P(ie))}).catch(Q=>{if(K||(_.current=""),!B.current){B.current=!0;const ce=Q instanceof Error?Q.message:String(Q);console.warn("[studio] resolveInstalledSkillIds failed (using polling fallback):",ce)}}),()=>{K=!0}},[a.skills,L.updates]);const H=m.useMemo(()=>{const J=a.skills.map(de=>{if(!de.updateAvailable&&de.latestVersion===void 0&&de.trackedForUpdates===void 0)return de;const M={...de};return delete M.updateAvailable,delete M.currentVersion,delete M.latestVersion,delete M.trackedForUpdates,M});return RS(J,L.updates)},[a.skills,L.updates]),W=m.useMemo(()=>{const J={source:0,installed:0};for(const de of H)de.updateAvailable&&(J[de.origin]+=1);return J},[H]),q=m.useMemo(()=>({...a,skills:H}),[a,H]),ee=L.updateCount,$=L.refresh,D=L.isRefreshing,I=m.useCallback((J,de)=>{$(),x(),In(`versions/${J}/${de}`),L.dismiss(`${J}/${de}`)},[$,x,L]),F=m.useMemo(()=>({state:q,selectSkill:h,clearSelection:S,setMode:w,setSearch:E,setMobileView:k,refreshSkills:x,updateCount:ee,dismissUpdateNotification:N,updates:L.updates,outdatedByOrigin:W,isRefreshingUpdates:D,refreshUpdates:$,revealSkill:y,clearReveal:b,updatesById:L.updatesById,pushUpdateCount:L.pushUpdateCount,updateStreamStatus:L.status,dismissPushUpdate:L.dismiss,activeAgent:c,onSkillUpdated:I}),[q,h,S,w,E,k,x,ee,N,L.updates,W,D,$,y,b,L.updatesById,L.pushUpdateCount,L.status,L.dismiss,c,I]);return r.jsx(qv.Provider,{value:F,children:t})}const WS={config:null,loading:!0};function qS(t,a){switch(a.type){case"SET_CONFIG":return{config:a.config,loading:!1};case"SET_LOADING":return{...t,loading:!0};default:return t}}const Yv=m.createContext(null);function Ya(){const t=m.useContext(Yv);if(!t)throw new Error("useConfig must be used within ConfigProvider");return t}function YS({children:t}){const[a,s]=m.useReducer(qS,WS),i=m.useCallback(()=>{ke.getConfig().then(d=>s({type:"SET_CONFIG",config:d})).catch(()=>{})},[]);m.useEffect(()=>{i()},[i]);const c=m.useCallback(async(d,f)=>{const x=await ke.setConfig(d,f);return s({type:"SET_CONFIG",config:x}),x},[]),u=m.useMemo(()=>({config:a.config,loading:a.loading,updateConfig:c,refreshConfig:i}),[a,c,i]);return r.jsx(Yv.Provider,{value:u,children:t})}function KS({topRail:t,sidebar:a,main:s,statusBar:i,resizeHandle:c,banner:u,liveMessage:d,sidebarWidth:f=320,sidebarHidden:x=!1}){const h={"--top-rail-height":"48px","--status-bar-height":"28px","--sidebar-width":`${f}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)"},v={display:"grid",gridTemplateColumns:x?"1fr":"var(--sidebar-width) auto 1fr",minHeight:0,overflow:"hidden"};return r.jsxs("div",{className:"studio-shell",style:h,children:[u,r.jsx("header",{style:{borderBottom:"1px solid var(--border-default)",background:"var(--bg-canvas)",display:"flex",alignItems:"center",minHeight:0},children:t}),r.jsxs("div",{style:v,children:[!x&&r.jsx("aside",{"aria-label":"Skills sidebar",style:{minHeight:0,overflow:"hidden",borderRight:c?"none":"1px solid var(--border-default)",background:"var(--bg-canvas)",display:"flex",flexDirection:"column"},children:a}),!x&&c,r.jsx("main",{style:{minHeight:0,overflow:"auto",background:"var(--bg-canvas)"},children:s})]}),r.jsx("footer",{role:"contentinfo",style:{borderTop:"1px solid var(--border-default)",background:"var(--bg-canvas)",display:"flex",alignItems:"center",minHeight:0},children:i}),r.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:d??""})]})}const XS={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:(t,a)=>`${t} of ${a}`},QS={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"},ZS={tabOverview:"Overview",tabVersions:"Versions",tabBenchmark:"Benchmark",emptyHeadline:"Select a skill to see details.",emptyBody:"Pick one from the sidebar.",loadErrorHeadline:t=>`Couldn't load SKILL.md for ${t}.`,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:t=>`Viewing ${t} (Own)`,announceViewingInstalled:t=>`Viewing ${t} (Installed)`,moreFields:"More fields",sourceAgent:"Source agent",noMcpDependencies:"No MCP dependencies.",filesystemGroup:"Filesystem",benchmarkGroup:"Benchmark",metadataGroup:"Frontmatter"},JS={open:"Open",copyPath:"Copy Path",revealInEditor:"Reveal in Editor",edit:"Edit",duplicate:"Duplicate",runBenchmark:"Run Benchmark",update:"Update",uninstall:"Uninstall",retry:"Retry",editPlaceholder:"Edit lands with 0675. Open the file in your editor.",delete:"Delete",deletePluginTooltip:"Plugin skills are managed by their owning plugin — uninstall the plugin to remove.",undo:"Undo"},e2={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"},t2={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"},n2={pathCopied:"Path copied.",configCopied:"Config copied.",skillDuplicated:"Skill duplicated.",benchmarkQueued:"Benchmark queued.",themeUpdated:"Theme updated.",skillUpdated:"Skill updated.",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."},r2={disconnected:"Disconnected — reconnecting…",reconnected:"Reconnected.",loading:"Loading skills…",loadingPlaceholderCount:"—"},a2={fieldRequired:"This field is required.",nameInvalid:"Use letters, numbers, and hyphens.",descriptionRequired:"Description is required.",saveFailed:"Save failed. Check the form for errors."},l2={boundaryHeadline:"Something broke in this view.",boundaryBody:"Reload the page to recover.",boundaryAction:"Reload"},s2={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:t=>`No models match "${t}"`,clearSearch:"Clear",currentlyActive:"Currently active"},i2={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)."}},o2={subscriptionBilling:"· subscription",free:"· free"},c2={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:t=>`Keys stored at ${t} · 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:t=>`Remove ${t} API key?`,keyStoredAt:t=>`Key stored locally — updated ${t}`,noKey:"No key stored",enterNonEmpty:"Enter a non-empty key",prefixWarn:t=>`This doesn't look like a typical ${t} key. Save anyway?`,keySaved:t=>`${t} API key saved (local only, never synced)`,keyRemoved:t=>`${t} API key removed`},u2={providersLabel:"Providers",providerSummary:(t,a)=>`${t}/${a} providers`,locked:t=>`${t} — locked. Click to add a key.`,lockedCli:t=>`${t} — locked. Click for install instructions.`,unlocked:t=>`${t} — unlocked.`},d2={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:t=>`Set up ${t}`,sharedFolderBanner:t=>`Shared folder — consumed by ${t}`},f2={ownLabel:"Own",installedLabel:"Installed",globalLabel:"Global",emptyOwn:"No authored skills — run vskill new.",emptyInstalled:t=>`No skills installed for ${t} in this project — run vskill install.`,emptyGlobal:t=>`No global skills for ${t} — run vskill install --global.`},p2={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"},m2={title:t=>`Set up ${t}`,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."},h2={groupAvailable:"Available",groupAuthoring:"Authoring",sourceProject:"Project",sourcePersonal:"Personal",sourcePlugin:"Plugins",authoringSkills:"Skills"},x2={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"}},le={sidebar:XS,shell:QS,detail:ZS,actions:JS,palette:e2,shortcuts:t2,toasts:n2,connection:r2,forms:a2,errors:l2,picker:s2,providers:i2,models:o2,settings:c2,statusBar:u2,scopePicker:d2,scopeSection:f2,claudeCodeLabel:p2,setupDrawer:m2,setupProviders:x2,scopeLabels:h2},ig=["claude-cli","anthropic","openai","openrouter","cursor","codex-cli","gemini-cli","copilot","zed","ollama","lm-studio"],g2={"claude-cli":".claude",cursor:".cursor","codex-cli":".codex","gemini-cli":".gemini",copilot:".github",zed:".zed"},v2={"claude-cli":"claude",cursor:"cursor","codex-cli":"codex","gemini-cli":"gemini"},y2={"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"},b2={"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 j2(t,a){var f,x;const s=g2[t.id]??null,i=v2[t.id]??null,c=s?!!((f=a==null?void 0:a.wrapperFolders)!=null&&f[s]):!1,u=i?!!((x=a==null?void 0:a.binaries)!=null&&x[i]):!0,d=t.models.map(h=>({id:h.id,displayName:h.label,billingMode:b2[t.id]??"per-token",...h.pricing?{pricing:h.pricing}:{},...h.resolvedId?{resolvedId:h.resolvedId}:{}}));return{id:t.id,displayName:S2(t.id,t.label),wrapperFolder:s,wrapperFolderPresent:c,binaryAvailable:u,endpointReachable:t.id==="ollama"||t.id==="lm-studio"?t.available:null,available:t.available,ctaType:t.available?null:y2[t.id]??null,models:d,resolvedModel:t.resolvedModel??null}}function S2(t,a){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"}[t]??a}function k2(t){const a=new Map(t.map(i=>[i.id,i])),s=[];for(const i of ig){const c=a.get(i);c&&s.push(c)}for(const i of t)ig.includes(i.id)||s.push(i);return s}function w2(t){const[a,s]=m.useState(null),[i,c]=m.useState("loading"),[u,d]=m.useState(null),[f,x]=m.useState(null),h=m.useRef(null),v=m.useRef(0),y=m.useRef(t==null?void 0:t.onStaleCatalog),b=m.useRef(t==null?void 0:t.onSetActiveError);m.useEffect(()=>{y.current=t==null?void 0:t.onStaleCatalog,b.current=t==null?void 0:t.onSetActiveError},[t==null?void 0:t.onStaleCatalog,t==null?void 0:t.onSetActiveError]);const S=m.useCallback(async()=>{try{const T=await fetch("/api/config");if(!T.ok)throw new Error(`/api/config returned ${T.status}`);const A=await T.json(),B=k2((A.providers||[]).map(z=>j2(z,A.detection)));s({agents:B,activeAgent:A.provider??null,activeModel:A.model??null}),c("ready"),d(null)}catch(T){c("error"),d(T.message)}},[]);m.useEffect(()=>{S()},[S]);const w=m.useCallback(async()=>{var A;const T=Date.now();if(!(T-v.current<5*6e4))try{const B=await fetch("/api/openrouter/models");if(!B.ok){B.status!==400&&x(`OpenRouter catalog fetch failed (${B.status})`);return}const z=await B.json();v.current=T,x(null),s(O=>{if(!O)return O;const L=O.agents.map(_=>{if(_.id!=="openrouter")return _;const H=z.models.map(q=>({id:q.id,displayName:q.name,contextWindow:q.contextWindow,pricing:q.pricing,billingMode:"per-token"}));return{..._,models:H,catalogAgeMs:z.ageSec?z.ageSec*1e3:0,cacheStale:!!z.stale}});return{...O,agents:L}});const P=z.ageSec??0;(z.stale===!0||P>600)&&((A=y.current)==null||A.call(y,"openrouter",P*1e3))}catch(B){x(`OpenRouter catalog unreachable: ${B.message}`)}},[]),E=m.useCallback(T=>{h.current=T,T==="openrouter"&&w()},[w]),k=m.useCallback(()=>{v.current=0,S()},[S]),N=m.useCallback(async(T,A)=>{var P,C;let B;try{B=await fetch("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:T,model:A})})}catch(O){(P=b.current)==null||P.call(b,`Network error while setting ${T}: ${O.message}`);return}if(B.ok){s(O=>O&&{...O,activeAgent:T,activeModel:A});return}let z=`Failed to set ${T} (${B.status})`;try{const O=await B.json();O&&typeof O.error=="string"&&(z=O.error)}catch{}(C=b.current)==null||C.call(b,z)},[]);return{status:i,catalog:a,error:u,openRouterError:f,focusAgent:E,refresh:k,activeAgentId:(a==null?void 0:a.activeAgent)??null,activeModelId:(a==null?void 0:a.activeModel)??null,setActive:N}}function Md({variant:t,label:a,onActivate:s,installUrl:i,tooltip:c}){function u(f){if(f.stopPropagation(),t==="cli-install"&&i){window.open(i,"_blank","noopener,noreferrer");return}s()}function d(f){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),u(f))}return r.jsx("button",{type:"button","data-testid":`locked-cta-${t}`,onClick:u,onKeyDown:d,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":a,...c?{title:c}:{},children:a})}function uf({unlocked:t=!1,size:a=10}){return t?r.jsxs("svg",{width:a,height:a,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[r.jsx("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1"}),r.jsx("path",{d:"M5 7V4.5A3 3 0 0 1 11 3.5"})]}):r.jsxs("svg",{width:a,height:a,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[r.jsx("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1"}),r.jsx("path",{d:"M5 7V4.5A3 3 0 0 1 11 4.5V7"})]})}const C2=new Set(["claude-cli","claude-code"]);function og(t){return C2.has(t)}const cg=new Set(["claude-cli","claude-code","anthropic","openai","openrouter","cursor","codex-cli","gemini-cli","copilot","zed"]);function E2({agents:t,activeAgentId:a,focusedAgentId:s,onFocus:i,onSelect:c,onOpenSettings:u}){const d=t.filter(x=>cg.has(x.id)),f=t.filter(x=>!cg.has(x.id));return r.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:[d.map(x=>r.jsx(ug,{agent:x,isActive:x.id===a,isFocused:x.id===s,onFocus:i,onSelect:c,onOpenSettings:u},x.id)),f.length>0&&r.jsx("div",{style:{borderTop:"1px solid var(--border-default, var(--border-subtle))",margin:"4px 0"},"aria-hidden":"true"}),f.map(x=>r.jsx(ug,{agent:x,isActive:x.id===a,isFocused:x.id===s,onFocus:i,onSelect:c,onOpenSettings:u},x.id))]})}function ug({agent:t,isActive:a,isFocused:s,onFocus:i,onSelect:c,onOpenSettings:u}){const{providers:d}=le,f={"claude-cli":d.claudeCli.caption,anthropic:d.anthropic.caption,openrouter:d.openrouter.caption},x={"claude-cli":{label:d.claudeCli.installCta,url:d.claudeCli.installUrl},cursor:{label:d.cursor.installCta},"codex-cli":{label:d.codexCli.installCta},"gemini-cli":{label:d.geminiCli.installCta},copilot:{label:d.copilot.installCta},zed:{label:d.zed.installCta}},h=og(t.id),v={minHeight:36,height:h?"auto":36,padding:h?"6px 12px":"0 12px",display:"flex",alignItems:"center",gap:8,cursor:"pointer",position:"relative",background:s?"var(--surface-muted, var(--surface-3))":"transparent",borderLeft:a?"1px solid var(--accent, var(--color-accent))":"1px solid transparent",fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif",fontSize:13,fontWeight:a?500:400,color:"var(--text-primary)"};return a&&(v.background="color-mix(in srgb, var(--accent, var(--color-accent)) 10%, transparent)"),r.jsxs("div",{role:"option","aria-selected":a,"data-testid":`agent-row-${t.id}`,"data-focused":s||void 0,tabIndex:s?0:-1,onMouseEnter:()=>i(t.id),onFocus:()=>i(t.id),onClick:()=>c(t.id),style:v,children:[t.wrapperFolder&&r.jsx("span",{"data-testid":`wrapper-dot-${t.id}`,"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",flexShrink:0,background:t.wrapperFolderPresent?"var(--accent, var(--color-accent))":"transparent",border:t.wrapperFolderPresent?"none":"1px solid var(--border-default, var(--border-subtle))"}}),!t.wrapperFolder&&r.jsx("span",{style:{width:6,height:6,flexShrink:0},"aria-hidden":"true"}),r.jsxs("span",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[r.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.displayName}),og(t.id)&&r.jsx("span",{"data-testid":"claude-code-billing-label",title:le.claudeCodeLabel.tooltip,style:{fontSize:10,color:"var(--text-secondary, var(--text-tertiary))",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:1},children:le.claudeCodeLabel.compactLabel})]}),r.jsx("span",{"aria-label":t.available?"available":"locked",style:{color:t.available?"var(--accent, var(--color-accent))":"var(--text-muted, var(--text-tertiary))",flexShrink:0},children:t.available?r.jsx(uf,{unlocked:!0,size:10}):r.jsx(uf,{size:10})}),a&&r.jsx("span",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600,color:"var(--accent-ink, var(--accent))",flexShrink:0},"data-testid":`active-badge-${t.id}`,children:le.picker.currentlyActive}),!t.available&&t.ctaType==="api-key"&&r.jsx(Md,{variant:"api-key",label:t.id==="anthropic"?d.anthropic.addKeyCta:d.openrouter.addKeyCta,onActivate:()=>u(t.id)}),!t.available&&t.ctaType==="cli-install"&&x[t.id]&&r.jsx(Md,{variant:"cli-install",label:x[t.id].label,installUrl:x[t.id].url,onActivate:()=>{}}),!t.available&&t.ctaType==="start-service"&&r.jsx(Md,{variant:"start-service",label:t.id==="ollama"?d.ollama.startServiceCta:d.lmStudio.startServiceCta,onActivate:()=>u(t.id)}),f[t.id]&&r.jsx("span",{className:"sr-only","data-testid":`caption-${t.id}`,children:f[t.id]})]})}function N2(t,a,s,i){const d=t>=80,f=m.useRef(null),[x,h]=m.useState(0),v=m.useCallback(S=>{h(S.currentTarget.scrollTop)},[]),{visibleStart:y,visibleEnd:b}=m.useMemo(()=>{if(!d)return{visibleStart:0,visibleEnd:t};const S=Math.max(0,Math.floor(x/a)-4),w=Math.ceil(s/a)+8,E=Math.min(t,S+w);return{visibleStart:S,visibleEnd:E}},[d,x,a,s,t,4]);return{visibleStart:y,visibleEnd:b,totalHeight:t*a,offsetTop:y*a,virtualised:d,containerProps:{onScroll:v,ref:f,style:{overflowY:"auto",maxHeight:s,willChange:d?"transform":void 0}}}}const Kv=44,T2=352,R2=60,dg=480;function A2(t){var u,d;const a=t.contextWindow?t.contextWindow>=1e6?`${Math.round(t.contextWindow/1e6)}M`:t.contextWindow>=1e3?`${Math.round(t.contextWindow/1e3)}k`:String(t.contextWindow):null;if(t.billingMode==="subscription")return a?`${a} ctx ${le.models.subscriptionBilling}`:le.models.subscriptionBilling.trim();if(t.billingMode==="free")return a?`local · ${a} ctx · free`:"local · free";const s=((u=t.pricing)==null?void 0:u.prompt)??0,i=((d=t.pricing)==null?void 0:d.completion)??0,c=`$${s.toFixed(2)} / $${i.toFixed(2)} per 1M tokens`;return a?`${a} ctx · ${c}`:c}function L2(t,a){if(!a)return t;const s=a.toLowerCase();return t.filter(c=>c.displayName.toLowerCase().includes(s)).sort((c,u)=>{const d=c.displayName.toLowerCase().indexOf(s),f=u.displayName.toLowerCase().indexOf(s);return d!==f?d-f:c.displayName.length-u.displayName.length})}function M2({agent:t,activeModelId:a,focusedIndex:s=-1,onSelect:i,onOpenSettings:c}){const[u,d]=m.useState(""),[f,x]=m.useState(""),h=m.useRef(null);if(m.useEffect(()=>{const b=setTimeout(()=>x(u),R2);return()=>clearTimeout(b)},[u]),m.useEffect(()=>{t.id==="openrouter"&&t.available&&h.current&&h.current.focus()},[t.id,t.available]),t.id==="openrouter"&&!t.available)return r.jsxs("div",{"data-testid":"openrouter-empty-card",style:{width:dg,padding:20,display:"flex",flexDirection:"column",gap:12},children:[r.jsx("p",{style:{margin:0,color:"var(--text-primary)",fontSize:13,lineHeight:1.5},children:le.providers.openrouter.emptyCardBody}),r.jsx("button",{type:"button",onClick:()=>c("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:le.providers.openrouter.addKeyCta})]});const v=m.useMemo(()=>L2(t.models,f),[t.models,f]),y=N2(v.length,Kv,T2);return r.jsxs("div",{role:"listbox","aria-label":"Model","data-testid":"model-list",style:{width:dg,display:"flex",flexDirection:"column"},children:[t.id==="openrouter"&&r.jsx("div",{style:{padding:8,borderBottom:"1px solid var(--border-default, var(--border-subtle))"},children:r.jsx("input",{ref:h,type:"text",placeholder:le.picker.searchPlaceholder,value:u,onChange:b=>d(b.target.value),"data-testid":"model-search-input","aria-label":le.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"}})}),v.length===0&&f?r.jsxs("div",{style:{padding:16},"data-testid":"no-matches",children:[r.jsx("div",{style:{color:"var(--text-muted, var(--text-tertiary))",fontSize:12,marginBottom:8},children:le.picker.noMatches(f)}),r.jsx("button",{type:"button",onClick:()=>d(""),style:{padding:"4px 8px",background:"transparent",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},children:le.picker.clearSearch})]}):v.length===0?r.jsx("div",{style:{padding:16,color:"var(--text-muted, var(--text-tertiary))",fontSize:12},children:le.picker.noModelsYet}):r.jsx("div",{...y.containerProps,children:r.jsx("div",{style:{height:y.virtualised?y.totalHeight:"auto",position:"relative"},children:r.jsx("div",{style:{transform:y.virtualised?`translateY(${y.offsetTop}px)`:void 0},children:v.slice(y.visibleStart,y.visibleEnd).map((b,S)=>{const w=y.visibleStart+S;return r.jsx(D2,{model:b,isActive:b.id===a,isFocused:s===w,onSelect:()=>i(b.id),resolvedModel:t.id==="claude-cli"?t.resolvedModel??null:null},b.id)})})})})]})}function z2(t,a,s){return a&&a.toLowerCase().includes(t.toLowerCase())?a:s??null}function D2({model:t,isActive:a,isFocused:s,onSelect:i,resolvedModel:c}){const u=A2(t),d=z2(t.id,c,t.resolvedId),f=d!==null,x=a?"color-mix(in srgb, var(--accent, var(--color-accent)) 10%, transparent)":s?"var(--surface-muted, var(--surface-3))":"transparent",h=a?"1px solid var(--accent, var(--color-accent))":"1px solid transparent";return r.jsxs("button",{type:"button",role:"option","aria-selected":a,"data-testid":`model-row-${t.id}`,"data-focused":s||void 0,onClick:i,title:t.id,style:{width:"100%",minHeight:Kv,padding:"4px 12px",display:"flex",flexDirection:"column",alignItems:"flex-start",justifyContent:"center",gap:2,background:x,borderLeft:h,cursor:"pointer",fontFamily:"'Inter Tight Variable', 'Inter Tight', system-ui, sans-serif",textAlign:"left"},children:[r.jsx("span",{style:{fontSize:14,fontWeight:500,color:"var(--text-primary)"},children:t.displayName}),r.jsx("span",{style:{fontSize:12,fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace",fontVariantNumeric:"tabular-nums",color:"var(--text-muted, var(--text-tertiary))"},children:u}),f&&r.jsxs("span",{"data-testid":`model-row-${t.id}-resolved`,style:{fontSize:11,fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace",color:"var(--text-muted, var(--text-tertiary))"},children:["routing to ",d]})]})}const fg={anthropic:{stored:!1,updatedAt:null},openai:{stored:!1,updatedAt:null},openrouter:{stored:!1,updatedAt:null}};function _2(){const[t,a]=m.useState(null),[s,i]=m.useState(!0),[c,u]=m.useState(null),d=m.useCallback(async()=>{i(!0);try{const h=await fetch("/api/settings/keys");if(!h.ok)throw new Error(`GET /api/settings/keys returned ${h.status}`);const v=await h.json();a({...fg,...v}),u(null)}catch(h){u(h.message),a(fg)}finally{i(!1)}},[]);m.useEffect(()=>{d()},[d]);const f=m.useCallback(async(h,v)=>{const y=await fetch("/api/settings/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:h,key:v})});if(!y.ok){const S=await y.json().catch(()=>({error:y.statusText}));throw new Error(S.error||`POST /api/settings/keys returned ${y.status}`)}const b=await y.json();return await d(),b},[d]),x=m.useCallback(async h=>{const v=await fetch(`/api/settings/keys/${h}`,{method:"DELETE"});if(!v.ok)throw new Error(`DELETE /api/settings/keys/${h} returned ${v.status}`);await d()},[d]);return{state:t,loading:s,error:c,save:f,remove:x,refresh:d}}function O2({onMigrated:t,fetchImpl:a}){const[s,i]=m.useState({kind:"loading"}),c=a??globalThis.fetch,u=m.useCallback(async()=>{var h;try{const v=await c("/api/settings/migration-status");if(!v.ok){i({kind:"hidden"});return}const y=await v.json();y.pending&&(((h=y.darwinKeys)==null?void 0:h.length)??0)>0?i({kind:"visible",darwinKeys:y.darwinKeys??[]}):i({kind:"hidden"})}catch{i({kind:"hidden"})}},[c]);m.useEffect(()=>{u()},[u]);const d=m.useCallback(async()=>{i({kind:"working"});try{const h=await c("/api/settings/migration-perform",{method:"POST",headers:{"Content-Type":"application/json"}});if(!h.ok){i({kind:"error",message:`Migration failed (${h.status})`});return}const v=await h.json().catch(()=>({migrated:[]}));t==null||t(v.migrated??[]),await u()}catch(h){i({kind:"error",message:h.message})}},[c,u,t]),f=m.useCallback(async()=>{i({kind:"hidden"});try{await c("/api/settings/migration-acknowledge",{method:"POST",headers:{"Content-Type":"application/json"}})}catch{}},[c]);if(s.kind==="loading"||s.kind==="hidden")return null;if(s.kind==="error")return r.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:[r.jsx("span",{style:{flex:1},children:s.message}),r.jsx("button",{type:"button",onClick:()=>void u(),"data-testid":"migration-retry",style:zd,children:"Retry"})]});const x=s.kind==="working";return r.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:[r.jsxs("div",{style:{flex:1},children:[r.jsx("strong",{style:{display:"block",marginBottom:2},children:"Migrate from macOS Keychain"}),r.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."})]}),r.jsx("button",{type:"button",onClick:()=>void d(),disabled:x,"data-testid":"migration-migrate",style:{...zd,background:"var(--accent, var(--color-accent))",color:"white",opacity:x?.6:1},children:x?"Importing…":"Migrate"}),r.jsx("button",{type:"button",onClick:()=>void f(),"data-testid":"migration-dismiss",style:{...zd,background:"transparent",border:"none",color:"var(--text-muted, var(--text-tertiary))",textDecoration:"underline",padding:"4px 6px"},children:"Dismiss for 30 days"})]})}const zd={padding:"4px 10px",background:"var(--surface-2, transparent)",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},B2=[{id:"anthropic",name:le.providers.anthropic.name,keyIssuanceUrl:le.providers.anthropic.keyIssuanceUrl,prefix:le.providers.anthropic.keyPrefix,placeholder:`Paste ${le.providers.anthropic.name} key`},{id:"openai",name:le.providers.openai.name,keyIssuanceUrl:le.providers.openai.keyIssuanceUrl,prefix:le.providers.openai.keyPrefix,placeholder:le.providers.openai.pastePlaceholder},{id:"openrouter",name:le.providers.openrouter.name,keyIssuanceUrl:le.providers.openrouter.keyIssuanceUrl,prefix:le.providers.openrouter.keyPrefix,placeholder:`Paste ${le.providers.openrouter.name} key`}];function I2(t){const a=Date.now()-new Date(t).getTime();return a<6e4?"just now":a<36e5?`${Math.round(a/6e4)}m ago`:a<864e5?`${Math.round(a/36e5)}h ago`:new Date(t).toLocaleString()}function Xv({open:t,onClose:a,initialProvider:s,onToast:i}){const{state:c,save:u,remove:d,refresh:f}=_2(),x=m.useRef(null),h=m.useRef(null),[v,y]=m.useState(null);m.useEffect(()=>{if(!t)return;let S=!1;return(async()=>{try{const w=await fetch("/api/settings/storage-path");if(!w.ok)throw new Error(`GET /api/settings/storage-path returned ${w.status}`);const E=await w.json();S||y(E.path??null)}catch{S||y(null)}})(),()=>{S=!0}},[t]),m.useEffect(()=>{if(!t)return;const S=document.activeElement,w=setTimeout(()=>{var N;const E=s?`input[data-provider="${s}"]`:"input[data-provider]",k=(N=x.current)==null?void 0:N.querySelector(E);k==null||k.focus()},0);return()=>{var E;clearTimeout(w),(E=S==null?void 0:S.focus)==null||E.call(S)}},[t,s]),m.useEffect(()=>{if(!t)return;const S=w=>{if(w.key==="Escape"){w.preventDefault(),a();return}if(w.key==="Tab"&&x.current){const E=x.current.querySelectorAll("button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])");if(E.length===0)return;const k=E[0],N=E[E.length-1];w.shiftKey&&document.activeElement===k?(w.preventDefault(),N.focus()):!w.shiftKey&&document.activeElement===N&&(w.preventDefault(),k.focus())}};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[t,a]);const b=m.useCallback(async()=>{var S,w;if(v)try{await((w=(S=navigator.clipboard)==null?void 0:S.writeText)==null?void 0:w.call(S,v)),i==null||i(le.settings.pathCopied)}catch{}},[i,v]);return t?r.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:100},onClick:S=>{S.target===S.currentTarget&&a()},children:r.jsxs("div",{ref:x,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:S=>S.stopPropagation(),children:[r.jsx("h2",{id:"settings-modal-title",style:{margin:"0 0 16px 0",fontSize:16,fontWeight:600},children:le.settings.title}),r.jsx(O2,{onMigrated:()=>{f()}}),r.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:le.settings.banner}),r.jsxs("section",{"aria-labelledby":"settings-api-keys-title",style:{marginBottom:20},children:[r.jsx("h3",{id:"settings-api-keys-title",style:{fontSize:13,fontWeight:600,margin:"0 0 12px 0"},children:le.settings.sectionApiKeys}),B2.map(S=>r.jsx($2,{providerId:S.id,providerName:S.name,keyIssuanceUrl:S.keyIssuanceUrl,prefix:S.prefix,placeholder:S.placeholder,metadata:c==null?void 0:c[S.id],onSave:async w=>{const E=await u(S.id,w);return i==null||i(le.settings.keySaved(S.name)),E},onRemove:async()=>{await d(S.id),i==null||i(le.settings.keyRemoved(S.name))},inputRef:S.id===(s??"anthropic")?h:void 0},S.id))]}),r.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:[r.jsx("span",{style:{flex:1},children:v?le.settings.storagePath(v):le.settings.storagePathFallback}),r.jsx("button",{type:"button",onClick:b,disabled:!v,"data-testid":"settings-copy-path",style:{...Va,opacity:v?1:.5,cursor:v?"pointer":"not-allowed"},children:le.settings.copyPath})]}),r.jsx("div",{style:{marginTop:20,display:"flex",justifyContent:"flex-end"},children:r.jsx("button",{type:"button",onClick:a,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 $2({providerId:t,providerName:a,keyIssuanceUrl:s,prefix:i,placeholder:c,metadata:u,onSave:d,onRemove:f,inputRef:x}){const[h,v]=m.useState(""),[y,b]=m.useState(!1),[S,w]=m.useState(!1),[E,k]=m.useState(!1),[N,T]=m.useState(null),A=h.trim(),B=A.length===0,z=A.length>0&&!A.startsWith(i),P=m.useCallback(async()=>{if(B)return;w(!0);const L=A;v("");try{const _=await d(L);_.warning?T(_.warning):T(null)}finally{w(!1)}},[B,d,A]),C=m.useCallback(async()=>{var L;try{if(!((L=navigator.clipboard)!=null&&L.readText))return;const _=await navigator.clipboard.readText();v(_)}catch{}},[]),O=m.useCallback(async()=>{k(!1),await f()},[f]);return r.jsxs("div",{"data-testid":`provider-row-${t}`,style:{padding:12,border:"1px solid var(--border-subtle)",borderRadius:6,marginBottom:8,display:"flex",flexDirection:"column",gap:8},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[r.jsx("strong",{style:{fontSize:13},children:a}),r.jsx("a",{href:s,target:"_blank",rel:"noopener noreferrer",style:{fontSize:12,color:"var(--accent, var(--color-accent))"},children:"Get a key →"})]}),r.jsxs("div",{style:{display:"flex",gap:6},children:[r.jsx("input",{ref:x,type:y?"text":"password",value:h,onChange:L=>{v(L.target.value),T(null)},"data-provider":t,placeholder:c,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"}}),r.jsx("button",{type:"button",onClick:()=>b(!y),style:Va,children:y?le.settings.hide:le.settings.show}),r.jsx("button",{type:"button",onClick:C,style:Va,children:le.settings.paste})]}),z&&r.jsx("div",{role:"status","data-testid":`prefix-warn-${t}`,style:pg,children:le.settings.prefixWarn(a)}),N&&r.jsx("div",{role:"status",style:pg,children:N}),r.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[r.jsx("button",{type:"button",onClick:P,disabled:B||S,"data-testid":`save-${t}`,style:{...Va,background:B?"var(--surface-2)":"var(--accent, var(--color-accent))",color:B?"var(--text-muted)":"white",cursor:B?"not-allowed":"pointer"},children:le.settings.save}),(u==null?void 0:u.stored)&&r.jsx(r.Fragment,{children:E?r.jsxs(r.Fragment,{children:[r.jsx("span",{style:{fontSize:12},children:le.settings.removeConfirm(a)}),r.jsx("button",{type:"button",onClick:O,"data-testid":`remove-confirm-${t}`,style:{...Va,background:"var(--danger, #b33)",color:"white"},children:"Confirm"}),r.jsx("button",{type:"button",onClick:()=>k(!1),style:Va,children:"Cancel"})]}):r.jsx("button",{type:"button",onClick:()=>k(!0),"data-testid":`remove-${t}`,style:{...Va,color:"var(--text-muted)"},children:le.settings.remove})}),r.jsx("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-muted, var(--text-tertiary))"},"data-testid":`status-${t}`,children:u!=null&&u.stored&&u.updatedAt?le.settings.keyStoredAt(I2(u.updatedAt)):le.settings.noKey})]})]})}const Va={padding:"4px 8px",background:"var(--surface-2, transparent)",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-primary)",fontSize:12,cursor:"pointer"},pg={fontSize:11,color:"var(--warning, var(--text-muted))"};function U2(){return typeof window>"u"||!window.matchMedia?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function H2({onToast:t}){const{status:a,catalog:s,focusAgent:i,setActive:c}=w2({onStaleCatalog:(_,H)=>{const W=Math.round(H/6e4);t==null||t(`Using cached ${_} catalog (${W} min old)`)},onSetActiveError:_=>t==null?void 0:t(_)}),[u,d]=m.useState(!1),[f,x]=m.useState(!1),[h,v]=m.useState(),[y,b]=m.useState(null),[S,w]=m.useState("agents"),[E,k]=m.useState(0),N=m.useRef(null);m.useRef(null),m.useEffect(()=>{var _;s&&!y&&b(s.activeAgent??((_=s.agents[0])==null?void 0:_.id)??null)},[s,y]);const T=(s==null?void 0:s.agents)??[],A=m.useMemo(()=>T.find(_=>_.id===y)??T[0],[T,y]);m.useEffect(()=>{k(0)},[y]);const B=m.useCallback(()=>{var _;d(!0),w("agents"),b((s==null?void 0:s.activeAgent)??((_=T[0])==null?void 0:_.id)??null),k(0)},[s,T]),z=m.useCallback(()=>{var _;d(!1),(_=N.current)==null||_.focus()},[]);m.useEffect(()=>{const _=H=>{var q;if(!(H.metaKey||H.ctrlKey)||H.key.toLowerCase()!=="k")return;const W=(q=document.activeElement)==null?void 0:q.tagName;W==="INPUT"||W==="TEXTAREA"||(H.preventDefault(),d(ee=>!ee))};return window.addEventListener("keydown",_),()=>window.removeEventListener("keydown",_)},[]),m.useEffect(()=>{if(!u)return;const _=W=>{if(W.key==="Escape"){W.preventDefault(),z();return}if(W.key==="ArrowDown"){W.preventDefault(),H(1);return}if(W.key==="ArrowUp"){W.preventDefault(),H(-1);return}if(W.key==="ArrowRight"&&S==="agents"){W.preventDefault(),w("models"),k(q=>{const ee=((A==null?void 0:A.models.length)??1)-1;return Math.max(0,Math.min(q,Math.max(0,ee)))});return}if(W.key==="ArrowLeft"&&S==="models"){W.preventDefault(),w("agents");return}if(W.key==="Enter"){if(W.preventDefault(),S==="agents"&&A)w("models"),k(0);else if(S==="models"&&A){const q=Math.max(0,Math.min(A.models.length-1,E)),ee=A.models[q];ee&&(c(A.id,ee.id),z())}return}};function H(W){if(S==="agents"){const q=T.findIndex($=>$.id===y),ee=T[Math.max(0,Math.min(T.length-1,q+W))];ee&&(b(ee.id),i(ee.id));return}if(S==="models"&&A){const q=A.models.length;if(q===0)return;k(ee=>{const $=ee+W;return Math.max(0,Math.min(q-1,$))})}}return document.addEventListener("keydown",_),()=>document.removeEventListener("keydown",_)},[u,S,T,y,A,E,z,i,c]);const P=m.useCallback(_=>{v(_==="anthropic"||_==="openrouter"?_:void 0),x(!0),d(!1)},[]),C=T.find(_=>_.id===(s==null?void 0:s.activeAgent)),O=C==null?void 0:C.models.find(_=>_.id===(s==null?void 0:s.activeModel)),L=m.useMemo(()=>{if(a!=="ready"||!s)return"Loading…";const _=(C==null?void 0:C.displayName)??"Agent",H=(O==null?void 0:O.displayName)??s.activeModel??"Model";return`${_} · ${H}`},[a,s,C,O]);return r.jsxs(r.Fragment,{children:[r.jsxs("button",{ref:N,type:"button","data-testid":"agent-model-picker-trigger",onClick:()=>u?z():B(),"aria-haspopup":"listbox","aria-expanded":u,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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:C!=null&&C.available?"var(--accent, var(--color-accent))":"var(--text-muted, var(--text-tertiary))",flexShrink:0}}),r.jsx("span",{children:L})]}),u&&typeof document<"u"&&nc.createPortal(r.jsxs(P2,{reducedMotion:U2(),onClickOutside:z,children:[r.jsxs("div",{style:{display:"flex",height:440,maxHeight:"60vh"},children:[r.jsx(E2,{agents:T,activeAgentId:(s==null?void 0:s.activeAgent)??null,focusedAgentId:y,onFocus:_=>{b(_),i(_)},onSelect:_=>{b(_),i(_),w("models")},onOpenSettings:P}),A&&r.jsx(M2,{agent:A,activeModelId:(s==null?void 0:s.activeModel)??null,focusedIndex:S==="models"?E:-1,onSelect:_=>{c(A.id,_),z()},onOpenSettings:P})]}),r.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:[r.jsx("button",{type:"button",onClick:()=>P(),"data-testid":"picker-footer-settings",style:{background:"transparent",border:"none",color:"var(--text-primary)",fontSize:11,cursor:"pointer",padding:"0 4px"},children:le.picker.settingsButton}),r.jsx("span",{style:{fontFamily:"'JetBrains Mono Variable', 'JetBrains Mono', monospace"},children:le.picker.footerHint})]})]}),document.body),r.jsx(Xv,{open:f,onClose:()=>x(!1),initialProvider:h,onToast:t})]})}function P2({children:t,reducedMotion:a,onClickOutside:s}){const i=m.useRef(null);return m.useEffect(()=>{const c=u=>{i.current&&!i.current.contains(u.target)&&s()};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[s]),r.jsxs("div",{ref:i,"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:a?void 0:"agentPickerFadeIn 120ms cubic-bezier(0.2, 0, 0, 1)"},children:[t,r.jsx("style",{children:`@keyframes agentPickerFadeIn {
|
|
63
63
|
from { opacity: 0; transform: translateX(-50%) translateY(2px); }
|
|
64
64
|
to { opacity: 1; transform: translateX(-50%) translateY(0); }
|
|
65
|
-
}`})]})}function mg(){typeof window>"u"||(window.location.hash="#/")}function V2({onHome:t}){const[a,s]=m.useState(!1),[i,c]=m.useState(!1),u=f=>{f.metaKey||f.ctrlKey||f.shiftKey||f.button!==0||(f.preventDefault(),mg(),t==null||t())},d=f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),mg(),t==null||t())};return r.jsxs("a",{href:"#/",role:"link","data-testid":"studio-logo","aria-label":"Skill Studio — home",onClick:u,onKeyDown:d,onFocus:()=>s(!0),onBlur:()=>s(!1),onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),style:{display:"inline-flex",alignItems:"center",gap:10,flexShrink:0,padding:"4px 6px",margin:"-4px -6px",borderRadius:6,textDecoration:"none",color:"inherit",cursor:"pointer",outline:a?"2px solid var(--border-focus)":"none",outlineOffset:2,background:i?"color-mix(in srgb, var(--text-primary) 4%, transparent)":"transparent",transition:"background-color var(--duration-fast, 120ms) var(--ease-standard, ease)"},children:[r.jsx("span",{"aria-hidden":"true",style:{width:24,height:24,display:"flex",alignItems:"center",justifyContent:"center",borderRadius:6,background:"color-mix(in srgb, var(--accent-surface) 20%, transparent)"},children:r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent-surface)",strokeWidth:"2.2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"22 12 18 12 15 21 9 3 6 12 2 12"})})}),r.jsx("span",{style:{fontSize:13,fontWeight:600,letterSpacing:"-0.01em",color:"var(--text-primary)"},children:"Skill Studio"})]})}const hg=m.memo(function({message:a,politeness:s="polite",role:i}){const c=i??(s==="assertive"?"alert":"status");return r.jsx("div",{"aria-live":s,"aria-atomic":"true",role:c,"data-testid":"aria-live","data-politeness":s,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:a})});function F2({toast:t,onDismiss:a}){const[s,i]=m.useState(!0),c=m.useRef(null);m.useEffect(()=>(c.current=requestAnimationFrame(()=>{c.current=requestAnimationFrame(()=>i(!1))}),()=>{c.current!=null&&cancelAnimationFrame(c.current)}),[]);const u={success:"var(--status-installed)",info:"var(--text-secondary)",error:"var(--color-accent, var(--accent-surface))"};return r.jsxs("div",{role:t.severity==="error"?"alert":"status","data-testid":"toast-item","data-severity":t.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 ${u[t.severity]}`,borderRadius:6,boxShadow:"0 8px 24px rgba(0,0,0,0.12)",fontFamily:"var(--font-sans)",fontSize:12,transform:s?"translateY(8px)":"translateY(0)",opacity:s?0:1,transition:"transform var(--duration-base, 180ms) var(--ease-standard, ease), opacity var(--duration-base, 180ms) var(--ease-standard, ease)"},children:[r.jsx("span",{style:{flex:1,minWidth:0},children:t.message}),t.action&&r.jsx("button",{type:"button",onClick:()=>{t.action.onInvoke(),a(t.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:t.action.label}),r.jsx("button",{type:"button","aria-label":"Dismiss",onClick:()=>a(t.id),style:{background:"transparent",border:"none",padding:2,color:"var(--text-secondary)",cursor:"pointer",fontSize:14,lineHeight:1},children:"×"})]})}function G2({toasts:t,onDismiss:a,liveMessage:s,liveAssertiveMessage:i}){return r.jsxs(r.Fragment,{children:[r.jsx(hg,{politeness:"polite",message:s}),r.jsx(hg,{politeness:"assertive",message:i}),t.length>0&&r.jsx("div",{"data-testid":"toast-stack",style:{position:"fixed",right:16,bottom:16,display:"flex",flexDirection:"column-reverse",gap:8,zIndex:50,pointerEvents:"none"},children:t.map(c=>r.jsx("div",{style:{pointerEvents:"auto"},children:r.jsx(F2,{toast:c,onDismiss:a})},c.id))})]})}const Qv=m.createContext(null);function rc(){const t=m.useContext(Qv);if(!t)throw new Error("useToast must be used inside <ToastProvider>.");return t}function W2({children:t,maxVisible:a=4,defaultDurationMs:s=4e3}){const[i,c]=m.useState([]),[u,d]=m.useState(""),[f,x]=m.useState(""),h=m.useRef(new Map),v=m.useCallback(k=>{const N=h.current.get(k);N&&(clearTimeout(N),h.current.delete(k)),c(T=>T.filter(A=>A.id!==k))},[]),y=m.useCallback((k,N)=>{if(N<=0)return;const T=setTimeout(()=>{v(k)},N);h.current.set(k,T)},[v]),b=m.useCallback(k=>{const N=k.id??`toast-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,T={id:N,message:k.message,severity:k.severity??"info",durationMs:k.durationMs??s,action:k.action};return c(A=>[...A,T]),T.severity==="error"?x(T.message):d(T.message),y(N,T.durationMs),N},[s,y]),S=m.useCallback(()=>{for(const k of h.current.values())clearTimeout(k);h.current.clear(),c([])},[]);m.useEffect(()=>{function k(N){N.key==="Escape"&&c(T=>{if(T.length===0)return T;const A=T.slice(0,a),B=A[A.length-1],z=h.current.get(B.id);return z&&(clearTimeout(z),h.current.delete(B.id)),T.filter(P=>P.id!==B.id)})}return window.addEventListener("keydown",k),()=>window.removeEventListener("keydown",k)},[a]),m.useEffect(()=>()=>{for(const k of h.current.values())clearTimeout(k);h.current.clear()},[]);const w=i.slice(0,a),E=m.useMemo(()=>({toast:b,dismiss:v,clear:S}),[b,v,S]);return r.jsxs(Qv.Provider,{value:E,children:[t,r.jsx(G2,{toasts:w,onDismiss:v,liveMessage:u,liveAssertiveMessage:f})]})}function q2(){const{data:t,loading:a}=qa("platform-health",async()=>{const s=await fetch("/api/platform/health");return s.ok?await s.json():{degraded:!1,reason:"platform-unreachable",statsAgeMs:0,oldestActiveAgeMs:0}},{ttl:6e4});return{data:t,loading:a}}const Y2=m.lazy(()=>Vl(()=>import("./UpdateDropdown-K19jD1Dy.js"),__vite__mapDeps([0,1])));function K2(){const{updateCount:t,updates:a,isRefreshingUpdates:s,refreshUpdates:i,selectSkill:c,revealSkill:u,skills:d,updatesById:f,activeAgent:x}=cr(),{toast:h}=rc(),{data:v}=q2(),y=(v==null?void 0:v.degraded)===!0,b=m.useMemo(()=>{if(!f||f.size===0)return;const P=new Map;for(const[C,O]of f)O.diffSummary&&P.set(C,O.diffSummary);return P.size>0?P:void 0},[f]),[S,w]=m.useState(!1),E=m.useRef(null),k=m.useCallback(()=>w(!1),[]),N=y?"var(--color-own)":t>0?"var(--text-primary)":"var(--text-secondary)",T=t>9?"9+":String(t),A=t===0?"No updates available":`${t} updates available, open summary`,B=y?`${A} — platform crawler degraded`:A,z=y?"Update checks paused — verified-skill.com crawler is degraded. Your submissions are queued.":void 0;return r.jsxs("span",{"data-testid":"update-bell-anchor",style:{position:"relative",display:"inline-flex"},children:[r.jsxs("button",{ref:E,type:"button","data-testid":"update-bell","aria-label":B,"aria-haspopup":"dialog","aria-expanded":S,title:z,onClick:()=>w(P=>!P),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:N,cursor:"pointer"},children:[r.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:t>0||y?1:.75,color:N},children:[r.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"}),r.jsx("path",{d:"M10 20a2 2 0 0 0 4 0"}),r.jsx("circle",{cx:"17",cy:"7",r:"2.2",fill:"currentColor",stroke:"none"})]}),t>0&&r.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:T})]}),S&&r.jsx(m.Suspense,{fallback:r.jsx("span",{"data-testid":"update-bell-fallback",children:"Loading…"}),children:r.jsx(Y2,{updates:a,isRefreshing:s,diffSummariesById:b,onRefresh:()=>i(),onSelectSkill:P=>{const C=P.localSkill??P.name.split("/").pop()??"",O=P.localPlugin??"";if(u)u(O,C);else{const _=P.name.split("/"),H=_.length>=2?_[_.length-2]:_[0];c({plugin:H,skill:C,origin:"installed"})}if(!(d??[]).some(_=>_.skill===C&&(O===""||_.plugin===O))){const _=P.installLocations??[];if(_.length>0){const H=x?_.filter(q=>q.agent===x):[],W=x?_.filter(q=>q.agent!==x):_;if(H.length>0&&W.length>0){const q=W.length>=2?`Also installed under ${W.length} other locations.`:`Also installed under ${W[0].agentLabel}.`;h({severity:"info",message:q})}else{const q=_[0].agentLabel;h({severity:"info",message:`Skill installed under ${q} — switch to ${q} to view details.`})}}}k()},onViewAll:()=>{window.location.hash="#/updates",k()},onClose:k,anchorRef:E})})]})}function xg(t){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:navigate-scope",{detail:t}))}function X2(t){return t.source==="project"?le.scopeLabels.sourceProject:t.source==="personal"?le.scopeLabels.sourcePersonal:t.source==="plugin"?le.scopeLabels.sourcePlugin:t.origin==="installed"?le.scopeLabels.sourcePersonal:le.scopeLabels.authoringSkills}function Q2(t){return t.source==="project"?"var(--status-installed)":t.source==="plugin"?"var(--color-accent-ink)":"var(--status-own)"}function Z2({projectName:t,selected:a,onHome:s,projectPickerSlot:i,onRequestCreateSkill:c,findSkillsSlot:u}){const d=a?X2(a):null,f=a?Q2(a):"var(--text-secondary)";return r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,height:"100%",width:"100%",padding:"0 16px",fontFamily:"var(--font-sans)"},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[r.jsx(V2,{onHome:s}),i?r.jsx("div",{style:{borderLeft:"1px solid var(--border-default)",paddingLeft:10,display:"flex",alignItems:"center"},children:i}):t&&r.jsx("span",{title:t,style:{fontSize:12,color:"var(--text-secondary)",borderLeft:"1px solid var(--border-default)",paddingLeft:10,maxWidth:220,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t})]}),r.jsx("nav",{"aria-label":"Breadcrumb",style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:6,fontSize:12,color:"var(--text-secondary)"},children:a&&d&&r.jsxs(r.Fragment,{children:[r.jsx(gg,{segment:"origin",onClick:()=>xg({scope:"origin",origin:a.origin}),style:{textTransform:"uppercase",letterSpacing:"0.06em",fontWeight:600,color:f},children:d}),r.jsx(vg,{}),r.jsx(gg,{segment:"plugin",onClick:()=>xg({scope:"plugin",plugin:a.plugin}),style:{fontFamily:"var(--font-mono)",fontSize:11},children:a.plugin}),r.jsx(vg,{}),r.jsx("span",{"data-breadcrumb-segment":"skill","aria-current":"page",style:{color:"var(--text-primary)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.skill})]})}),r.jsxs("div",{"data-toprail-right":"true",style:{display:"flex",alignItems:"center",gap:12,flexShrink:0},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[u,c&&r.jsxs("button",{type:"button","data-slot":"create-skill-button",onClick:c,"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:[r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"New Skill"]})]}),r.jsx("span",{"aria-hidden":"true",style:{width:1,height:18,background:"var(--border-default)"}}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx("span",{"data-slot":"agent-model-picker",style:{minWidth:200},children:r.jsx(H2,{})}),r.jsx("span",{"data-slot":"update-bell",style:{display:"inline-flex"},children:r.jsx(K2,{})})]})]})]})}function gg({segment:t,onClick:a,style:s,children:i}){return r.jsx("button",{type:"button","data-breadcrumb-segment":t,onClick:a,style:{background:"transparent",border:"none",padding:0,cursor:"pointer",color:"var(--text-secondary)",fontFamily:"inherit",...s},onMouseEnter:c=>{c.currentTarget.style.color="var(--color-accent-ink)"},onMouseLeave:c=>{const u=(s==null?void 0:s.color)??"var(--text-secondary)";c.currentTarget.style.color=u},children:i})}function vg(){return r.jsx("span",{"aria-hidden":"true",style:{color:"var(--border-default)",fontSize:10},children:"›"})}const ac="vskill-theme";function Zv(t){return t==="light"||t==="dark"||t==="auto"?t:"auto"}function J2(t,a){return t==="light"||t==="dark"?t:a?"dark":"light"}function ek(t){try{const a=t.getItem(ac);return Zv(a)}catch{return"auto"}}function tk(t,a){try{t.setItem(ac,a)}catch{}}function nk(t,a,s){t.dataset.theme=s,t.dataset.themeMode=a}function rk(t){if(!t)return!1;try{return t("(prefers-color-scheme: dark)").matches}catch{return!1}}const Jv=m.createContext(null);function ak({storage:t,matchMedia:a,target:s,children:i}){const c=t??(typeof window<"u"?window.localStorage:void 0),u=a??(typeof window<"u"?window.matchMedia.bind(window):void 0),d=s??(typeof document<"u"?document.documentElement:void 0),[f,x]=m.useState(()=>c?ek(c):"auto"),[h,v]=m.useState(()=>rk(u)),y=m.useMemo(()=>J2(f,h),[f,h]);m.useEffect(()=>{d&&nk(d,f,y)},[d,f,y]),m.useEffect(()=>{if(!u)return;const w=u("(prefers-color-scheme: dark)"),E=N=>v(N.matches);if(typeof w.addEventListener=="function")return w.addEventListener("change",E),()=>w.removeEventListener("change",E);const k=w;return k.addListener(E),()=>k.removeListener(E)},[u]),m.useEffect(()=>{if(typeof window>"u")return;const w=E=>{E.key===ac&&x(Zv(E.newValue))};return window.addEventListener("storage",w),()=>window.removeEventListener("storage",w)},[]),m.useEffect(()=>{if(!u||!d)return;let w;try{w=u("(prefers-contrast: more)")}catch{return}const E=T=>{T?d.dataset.contrast="more":d.dataset.contrast==="more"&&delete d.dataset.contrast};E(w.matches);const k=T=>E(T.matches);if(typeof w.addEventListener=="function")return w.addEventListener("change",k),()=>w.removeEventListener("change",k);const N=w;return N.addListener(k),()=>N.removeListener(k)},[u,d]);const b=m.useCallback(w=>{x(w),c&&tk(c,w)},[c]),S=m.useMemo(()=>({mode:f,resolvedTheme:y,setTheme:b}),[f,y,b]);return r.jsx(Jv.Provider,{value:S,children:i})}function ey(){const t=m.useContext(Jv);if(!t)throw new Error("useTheme must be used inside <ThemeProvider>. Wrap the app root in main.tsx.");return t}const yg=["claude-cli","anthropic","openrouter","ollama","lm-studio"];function lk(t){const a=new Map(t.map(i=>[i.id,i])),s=[];for(const i of yg){const c=a.get(i);c&&s.push(c)}for(const i of t)yg.includes(i.id)||s.push(i);return s}function sk(t){const[a,s]=m.useState(()=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(`(max-width: ${t}px)`).matches);return m.useEffect(()=>{var u;if(typeof window>"u"||!window.matchMedia)return;const i=window.matchMedia(`(max-width: ${t}px)`),c=()=>s(i.matches);return(u=i.addEventListener)==null||u.call(i,"change",c),()=>{var d;return(d=i.removeEventListener)==null?void 0:d.call(i,"change",c)}},[t]),a}function ik({providers:t,onOpenSettings:a,onOpenInstallHelp:s}){const i=lk(t),c=sk(640),[u,d]=m.useState(!1),f=m.useCallback(x=>{x.available||x.kind==="api-key"?a==null||a(x.id):s==null||s(x.id)},[a,s]);if(c){const x=i.filter(h=>h.available).length;return r.jsxs("div",{"data-testid":"providers-segment",style:{position:"relative",display:"inline-flex",alignItems:"center"},children:[r.jsx("button",{type:"button","data-testid":"providers-summary",onClick:()=>d(!u),"aria-label":le.statusBar.providerSummary(x,i.length),style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:11,cursor:"pointer",padding:"0 4px"},children:le.statusBar.providerSummary(x,i.length)}),u&&r.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:i.map(h=>r.jsx(bg,{p:h,onClick:f},h.id))})]})}return r.jsx("div",{"data-testid":"providers-segment",style:{display:"inline-flex",alignItems:"center",gap:4},children:i.map(x=>r.jsx(bg,{p:x,onClick:f,compact:!0},x.id))})}function bg({p:t,onClick:a,compact:s}){const i=t.available?le.statusBar.unlocked(t.label):t.kind==="cli-install"?le.statusBar.lockedCli(t.label):le.statusBar.locked(t.label);return r.jsxs("button",{type:"button","data-testid":`provider-glyph-${t.id}`,"data-available":t.available,"aria-label":i,title:i,onClick:()=>a(t),style:{display:"inline-flex",alignItems:"center",gap:4,background:"transparent",border:"none",color:t.available?"var(--status-installed)":"var(--text-muted, var(--text-tertiary))",cursor:"pointer",padding:s?"2px":"4px 6px",fontSize:11},children:[r.jsx(uf,{unlocked:t.available,size:10}),!s&&r.jsx("span",{children:t.label})]})}function ok(){try{return typeof localStorage>"u"?null:localStorage.getItem(ac)}catch{return null}}function ck({projectPath:t,modelName:a,health:s="ok",onPathClick:i,providers:c,onOpenProviderSettings:u,onOpenProviderInstallHelp:d}){const{mode:f,resolvedTheme:x,setTheme:h}=ey(),y=ok()==="auto",b=uk(f,x,y),S=s==="down"||s==="degraded"?"var(--status-own)":"var(--status-installed)";return r.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:[r.jsx("span",{title:a??"",style:{fontFamily:"var(--font-mono)"},children:a??"—"}),r.jsx(jg,{}),r.jsxs("span",{"aria-label":`Health: ${s}`,style:{display:"inline-flex",alignItems:"center",gap:6},children:[r.jsx(dk,{color:S}),r.jsx("span",{style:{textTransform:"capitalize"},children:s})]}),c&&c.length>0&&r.jsxs(r.Fragment,{children:[r.jsx(jg,{}),r.jsx(ik,{providers:c,onOpenSettings:u,onOpenInstallHelp:d})]}),r.jsx("div",{style:{flex:1}}),r.jsxs("button",{type:"button","data-testid":"theme-toggle",onClick:()=>h(b),"aria-label":`Switch to ${b} theme`,title:`Theme: ${f} — click for ${b}`,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:[r.jsx(fk,{mode:f}),r.jsx("span",{style:{textTransform:"capitalize"},children:f})]})]})}function uk(t,a,s){return t==="light"?"dark":t==="dark"?"auto":s?"light":a==="light"?"dark":"light"}function dk({color:t}){return r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:t,display:"inline-block",flexShrink:0}})}function jg(){return r.jsx("span",{"aria-hidden":"true",style:{color:"var(--border-default)"},children:"|"})}function fk({mode:t}){return t==="dark"?r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):t==="light"?r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"4"}),r.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"})]}):r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"9"}),r.jsx("path",{d:"M12 3a9 9 0 0 0 0 18z",fill:"currentColor"})]})}const df=new Set;function ty(){for(const t of df)t()}const pk=5,mk=1e3,hk=6e4;function xk(){const[t,a]=m.useState(void 0),[s,i]=m.useState(!1),[c,u]=m.useState(!0),d=m.useRef(0),f=m.useRef(null),x=m.useRef(null),h=m.useRef(!0),v=m.useRef(0),[y,b]=m.useState(0),S=()=>{x.current!==null&&(clearTimeout(x.current),x.current=null)},w=m.useCallback(()=>{f.current&&(f.current.abort(),f.current=null)},[]),E=m.useCallback(async()=>{if(!h.current||document.visibilityState==="hidden")return;w();const N=new AbortController;f.current=N;try{const T=await fetch("/api/plugins",{signal:N.signal});if(!h.current)return;const A=await T.json();if(!h.current)return;d.current=0,a(A.plugins??[]),u(!1),i(!1),x.current=setTimeout(()=>{h.current&&b(B=>B+1)},hk)}catch(T){if(!h.current||T instanceof DOMException&&T.name==="AbortError")return;if(d.current+=1,u(!1),d.current>pk){i(!0);return}const A=mk*Math.pow(2,d.current-1);x.current=setTimeout(()=>{h.current&&b(B=>B+1)},A)}},[w]);m.useEffect(()=>(h.current=!0,()=>{h.current=!1,S(),w()}),[w]),m.useEffect(()=>{document.visibilityState!=="hidden"&&(S(),E())},[y,E]),m.useEffect(()=>{const N=()=>{document.visibilityState==="hidden"?(S(),w()):(d.current=0,i(!1),b(T=>T+1))};return document.addEventListener("visibilitychange",N),()=>{document.removeEventListener("visibilitychange",N)}},[w]);const k=m.useCallback(()=>{d.current=0,i(!1),S(),v.current+=1,b(N=>N+1)},[]);return m.useEffect(()=>(df.add(k),()=>{df.delete(k)}),[k]),{plugins:t,paused:s,loading:c,retry:k}}const lc=0,ba=1,Fl=2,ny=4;function Sg(t){return()=>t}function gk(t){t()}function ry(t,a){return s=>t(a(s))}function kg(t,a){return()=>t(a)}function vk(t,a){return s=>t(a,s)}function Df(t){return t!==void 0}function yk(...t){return()=>{t.map(gk)}}function Gl(){}function sc(t,a){return a(t),t}function bk(t,a){return a(t)}function Rt(...t){return t}function pt(t,a){return t(ba,a)}function Ke(t,a){t(lc,a)}function _f(t){t(Fl)}function zt(t){return t(ny)}function Le(t,a){return pt(t,vk(a,lc))}function sr(t,a){const s=t(ba,i=>{s(),a(i)});return s}function wg(t){let a,s;return i=>c=>{a=c,s&&clearTimeout(s),s=setTimeout(()=>{i(a)},t)}}function ay(t,a){return t===a}function Tt(t=ay){let a;return s=>i=>{t(a,i)||(a=i,s(i))}}function $e(t){return a=>s=>{t(s)&&a(s)}}function we(t){return a=>ry(a,t)}function xr(t){return a=>()=>{a(t)}}function he(t,...a){const s=jk(...a);return((i,c)=>{switch(i){case Fl:_f(t);return;case ba:return pt(t,s(c))}})}function gr(t,a){return s=>i=>{s(a=t(a,i))}}function Wa(t){return a=>s=>{t>0?t--:a(s)}}function Ur(t){let a=null,s;return i=>c=>{a=c,!s&&(s=setTimeout(()=>{s=void 0,i(a)},t))}}function Qe(...t){const a=new Array(t.length);let s=0,i=null;const c=2**t.length-1;return t.forEach((u,d)=>{const f=2**d;pt(u,x=>{const h=s;s|=f,a[d]=x,h!==c&&s===c&&i&&(i(),i=null)})}),u=>d=>{const f=()=>{u([d].concat(a))};s===c?f():i=f}}function jk(...t){return a=>t.reduceRight(bk,a)}function Sk(t){let a,s;const i=()=>a==null?void 0:a();return function(c,u){switch(c){case ba:return u?s===u?void 0:(i(),s=u,a=pt(t,u),a):(i(),Gl);case Fl:i(),s=null;return}}}function ge(t){let a=t;const s=it();return((i,c)=>{switch(i){case lc:a=c;break;case ba:{c(a);break}case ny:return a}return s(i,c)})}function pn(t,a){return sc(ge(a),s=>Le(t,s))}function it(){const t=[];return((a,s)=>{switch(a){case lc:t.slice().forEach(i=>{i(s)});return;case Fl:t.splice(0,t.length);return;case ba:return t.push(s),()=>{const i=t.indexOf(s);i>-1&&t.splice(i,1)}}})}function $n(t){return sc(it(),a=>Le(t,a))}function ut(t,a=[],{singleton:s}={singleton:!0}){return{constructor:t,dependencies:a,id:kk(),singleton:s}}const kk=()=>Symbol();function wk(t){const a=new Map,s=({constructor:i,dependencies:c,id:u,singleton:d})=>{if(d&&a.has(u))return a.get(u);const f=i(c.map(x=>s(x)));return d&&a.set(u,f),f};return s(t)}function qt(...t){const a=it(),s=new Array(t.length);let i=0;const c=2**t.length-1;return t.forEach((u,d)=>{const f=2**d;pt(u,x=>{s[d]=x,i|=f,i===c&&Ke(a,s)})}),function(u,d){switch(u){case Fl:{_f(a);return}case ba:return i===c&&d(s),pt(a,d)}}}function Ie(t,a=ay){return he(t,Tt(a))}function ff(...t){return function(a,s){switch(a){case Fl:return;case ba:return yk(...t.map(i=>pt(i,s)))}}}const Qt={DEBUG:0,INFO:1,WARN:2,ERROR:3},Ck={[Qt.DEBUG]:"debug",[Qt.ERROR]:"error",[Qt.INFO]:"log",[Qt.WARN]:"warn"},Ek=()=>typeof globalThis>"u"?window:globalThis,ja=ut(()=>{const t=ge(Qt.ERROR);return{log:ge((a,s,i=Qt.INFO)=>{const c=Ek().VIRTUOSO_LOG_LEVEL??zt(t);i>=c&&console[Ck[i]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",a,s)}),logLevel:t}},[],{singleton:!0});function Ka(t,a,s){return Of(t,a,s).callbackRef}function Of(t,a,s){const i=Ae.useRef(null);let c=d=>{};const u=Ae.useMemo(()=>typeof ResizeObserver<"u"?new ResizeObserver(d=>{const f=()=>{const x=d[0].target;x.offsetParent!==null&&t(x)};s?f():requestAnimationFrame(f)}):null,[t,s]);return c=d=>{d&&a?(u==null||u.observe(d),i.current=d):(i.current&&(u==null||u.unobserve(i.current)),i.current=null)},{callbackRef:c,ref:i}}function Nk(t,a,s,i,c,u,d,f,x){const h=Ae.useCallback(v=>{const y=Tk(v.children,a,f?"offsetWidth":"offsetHeight",c);let b=v.parentElement;for(;b.dataset.virtuosoScroller===void 0;)b=b.parentElement;const S=b.lastElementChild.dataset.viewportType==="window";let w;S&&(w=b.ownerDocument.defaultView);const E=d?f?d.scrollLeft:d.scrollTop:S?f?w.scrollX||w.document.documentElement.scrollLeft:w.scrollY||w.document.documentElement.scrollTop:f?b.scrollLeft:b.scrollTop,k=d?f?d.scrollWidth:d.scrollHeight:S?f?w.document.documentElement.scrollWidth:w.document.documentElement.scrollHeight:f?b.scrollWidth:b.scrollHeight,N=d?f?d.offsetWidth:d.offsetHeight:S?f?w.innerWidth:w.innerHeight:f?b.offsetWidth:b.offsetHeight;i({scrollHeight:k,scrollTop:Math.max(E,0),viewportHeight:N}),u==null||u(f?Cg("column-gap",getComputedStyle(v).columnGap,c):Cg("row-gap",getComputedStyle(v).rowGap,c)),y!==null&&t(y)},[t,a,c,u,d,i,f]);return Of(h,s,x)}function Tk(t,a,s,i){const c=t.length;if(c===0)return null;const u=[];for(let d=0;d<c;d++){const f=t.item(d);if(f.dataset.index===void 0)continue;const x=parseInt(f.dataset.index),h=parseFloat(f.dataset.knownSize),v=a(f,s);if(v===0&&i("Zero-sized element, this should not happen",{child:f},Qt.ERROR),v===h)continue;const y=u[u.length-1];u.length===0||y.size!==v||y.endIndex!==x-1?u.push({endIndex:x,size:v,startIndex:x}):u[u.length-1].endIndex++}return u}function Cg(t,a,s){return a!=="normal"&&(a==null?void 0:a.endsWith("px"))!==!0&&s(`${t} was not resolved to pixel value correctly`,a,Qt.WARN),a==="normal"?0:parseInt(a??"0",10)}function ly(t,a,s){const i=Ae.useRef(null),c=Ae.useCallback(x=>{if(!(x!=null&&x.offsetParent))return;const h=x.getBoundingClientRect(),v=h.width;let y,b;if(a){const S=a.getBoundingClientRect(),w=h.top-S.top;b=S.height-Math.max(0,w),y=w+a.scrollTop}else{const S=d.current.ownerDocument.defaultView;b=S.innerHeight-Math.max(0,h.top),y=h.top+S.scrollY}i.current={listHeight:h.height,offsetTop:y,visibleHeight:b,visibleWidth:v},t(i.current)},[t,a]),{callbackRef:u,ref:d}=Of(c,!0,s),f=Ae.useCallback(()=>{c(d.current)},[c,d]);return Ae.useEffect(()=>{var h;if(a){a.addEventListener("scroll",f);const v=new ResizeObserver(()=>{requestAnimationFrame(f)});return v.observe(a),()=>{a.removeEventListener("scroll",f),v.unobserve(a)}}const x=(h=d.current)==null?void 0:h.ownerDocument.defaultView;return x==null||x.addEventListener("scroll",f),x==null||x.addEventListener("resize",f),()=>{x==null||x.removeEventListener("scroll",f),x==null||x.removeEventListener("resize",f)}},[f,a,d]),u}const yn=ut(()=>{const t=it(),a=it(),s=ge(0),i=it(),c=ge(0),u=it(),d=it(),f=ge(0),x=ge(0),h=ge(0),v=ge(0),y=it(),b=it(),S=ge(!1),w=ge(!1),E=ge(!1);return Le(he(t,we(({scrollTop:k})=>k)),a),Le(he(t,we(({scrollHeight:k})=>k)),d),Le(a,c),{deviation:s,fixedFooterHeight:h,fixedHeaderHeight:x,footerHeight:v,headerHeight:f,horizontalDirection:w,scrollBy:b,scrollContainerState:t,scrollHeight:d,scrollingInProgress:S,scrollTo:y,scrollTop:a,skipAnimationFrameInResizeObserver:E,smoothScrollTargetReached:i,statefulScrollTop:c,viewportHeight:u}},[],{singleton:!0}),Qs={lvl:0};function sy(t,a){const s=t.length;if(s===0)return[];let{index:i,value:c}=a(t[0]);const u=[];for(let d=1;d<s;d++){const{index:f,value:x}=a(t[d]);u.push({end:f-1,start:i,value:c}),i=f,c=x}return u.push({end:1/0,start:i,value:c}),u}function yt(t){return t===Qs}function Zs(t,a){if(!yt(t))return a===t.k?t.v:a<t.k?Zs(t.l,a):Zs(t.r,a)}function or(t,a,s="k"){if(yt(t))return[-1/0,void 0];if(Number(t[s])===a)return[t.k,t.v];if(Number(t[s])<a){const i=or(t.r,a,s);return i[0]===-1/0?[t.k,t.v]:i}return or(t.l,a,s)}function Bn(t,a,s){return yt(t)?cy(a,s,1):a===t.k?Xt(t,{k:a,v:s}):a<t.k?Eg(Xt(t,{l:Bn(t.l,a,s)})):Eg(Xt(t,{r:Bn(t.r,a,s)}))}function Ol(){return Qs}function Bl(t,a,s){if(yt(t))return[];const i=or(t,a)[0];return Rk(mf(t,i,s))}function pf(t,a){if(yt(t))return Qs;const{k:s,l:i,r:c}=t;if(a===s){if(yt(i))return c;if(yt(c))return i;const[u,d]=oy(i);return Ho(Xt(t,{k:u,l:iy(i),v:d}))}return a<s?Ho(Xt(t,{l:pf(i,a)})):Ho(Xt(t,{r:pf(c,a)}))}function Fa(t){return yt(t)?[]:[...Fa(t.l),{k:t.k,v:t.v},...Fa(t.r)]}function mf(t,a,s){if(yt(t))return[];const{k:i,l:c,r:u,v:d}=t;let f=[];return i>a&&(f=f.concat(mf(c,a,s))),i>=a&&i<=s&&f.push({k:i,v:d}),i<=s&&(f=f.concat(mf(u,a,s))),f}function Ho(t){const{l:a,lvl:s,r:i}=t;if(i.lvl>=s-1&&a.lvl>=s-1)return t;if(s>i.lvl+1){if(Dd(a))return uy(Xt(t,{lvl:s-1}));if(!yt(a)&&!yt(a.r))return Xt(a.r,{l:Xt(a,{r:a.r.l}),lvl:s,r:Xt(t,{l:a.r.r,lvl:s-1})});throw new Error("Unexpected empty nodes")}if(Dd(t))return hf(Xt(t,{lvl:s-1}));if(!yt(i)&&!yt(i.l)){const c=i.l,u=Dd(c)?i.lvl-1:i.lvl;return Xt(c,{l:Xt(t,{lvl:s-1,r:c.l}),lvl:c.lvl+1,r:hf(Xt(i,{l:c.r,lvl:u}))})}throw new Error("Unexpected empty nodes")}function Xt(t,a){return cy(a.k!==void 0?a.k:t.k,a.v!==void 0?a.v:t.v,a.lvl!==void 0?a.lvl:t.lvl,a.l!==void 0?a.l:t.l,a.r!==void 0?a.r:t.r)}function iy(t){return yt(t.r)?t.l:Ho(Xt(t,{r:iy(t.r)}))}function Dd(t){return yt(t)||t.lvl>t.r.lvl}function oy(t){return yt(t.r)?[t.k,t.v]:oy(t.r)}function cy(t,a,s,i=Qs,c=Qs){return{k:t,l:i,lvl:s,r:c,v:a}}function Eg(t){return hf(uy(t))}function uy(t){const{l:a}=t;return!yt(a)&&a.lvl===t.lvl?Xt(a,{r:Xt(t,{l:a.r})}):t}function hf(t){const{lvl:a,r:s}=t;return!yt(s)&&!yt(s.r)&&s.lvl===a&&s.r.lvl===a?Xt(s,{l:Xt(t,{r:s.l}),lvl:a+1}):t}function Rk(t){return sy(t,({k:a,v:s})=>({index:a,value:s}))}function dy(t,a){return!!(t&&t.startIndex===a.startIndex&&t.endIndex===a.endIndex)}function Js(t,a){return!!(t&&t[0]===a[0]&&t[1]===a[1])}const Bf=ut(()=>({recalcInProgress:ge(!1)}),[],{singleton:!0});function fy(t,a,s){return t[Wo(t,a,s)]}function Wo(t,a,s,i=0){let c=t.length-1;for(;i<=c;){const u=Math.floor((i+c)/2),d=t[u],f=s(d,a);if(f===0)return u;if(f===-1){if(c-i<2)return u-1;c=u-1}else{if(c===i)return u;i=u+1}}throw new Error(`Failed binary finding record in array - ${t.join(",")}, searched for ${a}`)}function Ak(t,a,s,i){const c=Wo(t,a,i),u=Wo(t,s,i,c);return t.slice(c,u+1)}function va(t,a){return Math.round(t.getBoundingClientRect()[a])}function ic(t){return!yt(t.groupOffsetTree)}function If({index:t},a){return a===t?0:a<t?-1:1}function Lk(){return{groupIndices:[],groupOffsetTree:Ol(),lastIndex:0,lastOffset:0,lastSize:0,offsetTree:[],sizeTree:Ol()}}function Mk(t,a){let s=yt(t)?0:1/0;for(const i of a){const{endIndex:c,size:u,startIndex:d}=i;if(s=Math.min(s,d),yt(t)){t=Bn(t,0,u);continue}const f=Bl(t,d-1,c+1);if(f.some($k(i)))continue;let x=!1,h=!1;for(const{end:v,start:y,value:b}of f)x?(c>=y||u===b)&&(t=pf(t,y)):(h=b!==u,x=!0),v>c&&c>=y&&b!==u&&(t=Bn(t,c+1,b));h&&(t=Bn(t,d,u))}return[t,s]}function zk(t){return typeof t.groupIndex<"u"}function Dk({offset:t},a){return a===t?0:a<t?-1:1}function ei(t,a,s){if(a.length===0)return 0;const{index:i,offset:c,size:u}=fy(a,t,If),d=t-i,f=u*d+(d-1)*s+c;return f>0?f+s:f}function py(t,a){if(!ic(a))return t;let s=0;for(;a.groupIndices[s]<=t+s;)s++;return t+s}function my(t,a,s){if(zk(t))return a.groupIndices[t.groupIndex]+1;const i=t.index==="LAST"?s:t.index;let c=py(i,a);return c=Math.max(0,c,Math.min(s,c)),c}function _k(t,a,s,i=0){return i>0&&(a=Math.max(a,fy(t,i,If).offset)),sy(Ak(t,a,s,Dk),Ik)}function Ok(t,[a,s,i,c]){a.length>0&&i("received item sizes",a,Qt.DEBUG);const u=t.sizeTree;let d=u,f=0;if(s.length>0&&yt(u)&&a.length===2){const b=a[0].size,S=a[1].size;d=s.reduce((w,E)=>Bn(Bn(w,E,b),E+1,S),d)}else[d,f]=Mk(d,a);if(d===u)return t;const{lastIndex:x,lastOffset:h,lastSize:v,offsetTree:y}=xf(t.offsetTree,f,d,c);return{groupIndices:s,groupOffsetTree:s.reduce((b,S)=>Bn(b,S,ei(S,y,c)),Ol()),lastIndex:x,lastOffset:h,lastSize:v,offsetTree:y,sizeTree:d}}function Bk(t){return Fa(t).map(({k:a,v:s},i,c)=>{const u=c[i+1];return{endIndex:u!==void 0?u.k-1:1/0,size:s,startIndex:a}})}function Ng(t,a){let s=0,i=0;for(;s<t;)s+=a[i+1]-a[i]-1,i++;return i-(s===t?0:1)}function xf(t,a,s,i){let c=t,u=0,d=0,f=0,x=0;if(a!==0){x=Wo(c,a-1,If),f=c[x].offset;const h=or(s,a-1);u=h[0],d=h[1],c.length&&c[x].size===or(s,a)[1]&&(x-=1),c=c.slice(0,x+1)}else c=[];for(const{start:h,value:v}of Bl(s,a,1/0)){const y=h-u,b=y*d+f+y*i;c.push({index:h,offset:b,size:v}),u=h,f=b,d=v}return{lastIndex:u,lastOffset:f,lastSize:d,offsetTree:c}}function Ik(t){return{index:t.index,value:t}}function $k(t){const{endIndex:a,size:s,startIndex:i}=t;return c=>c.start===i&&(c.end===a||c.end===1/0)&&c.value===s}const Uk={offsetHeight:"height",offsetWidth:"width"},br=ut(([{log:t},{recalcInProgress:a}])=>{const s=it(),i=it(),c=pn(i,0),u=it(),d=it(),f=ge(0),x=ge([]),h=ge(void 0),v=ge(void 0),y=ge(void 0),b=ge(void 0),S=ge((C,O)=>va(C,Uk[O])),w=ge(void 0),E=ge(0),k=Lk(),N=pn(he(s,Qe(x,t,E),gr(Ok,k),Tt()),k),T=pn(he(x,Tt(),gr((C,O)=>({current:O,prev:C.current}),{current:[],prev:[]}),we(({prev:C})=>C)),[]);Le(he(x,$e(C=>C.length>0),Qe(N,E),we(([C,O,L])=>{const _=C.reduce((H,W,q)=>Bn(H,W,ei(W,O.offsetTree,L)||q),Ol());return{...O,groupIndices:C,groupOffsetTree:_}})),N),Le(he(i,Qe(N),$e(([C,{lastIndex:O}])=>C<O),we(([C,{lastIndex:O,lastSize:L}])=>[{endIndex:O,size:L,startIndex:C}])),s),Le(h,v);const A=pn(he(h,we(C=>C===void 0)),!0);Le(he(v,$e(C=>C!==void 0&&yt(zt(N).sizeTree)),we(C=>{const O=zt(y),L=zt(x).length>0;return O!==void 0&&O!==0?L?[{endIndex:0,size:O,startIndex:0},{endIndex:1,size:C,startIndex:1}]:[]:[{endIndex:0,size:C,startIndex:0}]})),s),Le(he(b,$e(C=>C!==void 0&&C.length>0&&yt(zt(N).sizeTree)),we(C=>{const O=[];let L=C[0],_=0;for(let H=1;H<C.length;H++){const W=C[H];W!==L&&(O.push({endIndex:H-1,size:L,startIndex:_}),L=W,_=H)}return O.push({endIndex:C.length-1,size:L,startIndex:_}),O})),s),Le(he(x,Qe(y,v),$e(([,C,O])=>C!==void 0&&O!==void 0),we(([C,O,L])=>{const _=[];for(let H=0;H<C.length;H++){const W=C[H],q=C[H+1];_.push({startIndex:W,endIndex:W,size:O}),q!==void 0&&_.push({startIndex:W+1,endIndex:q-1,size:L})}return _})),s);const B=$n(he(s,Qe(N),gr(({sizes:C},[O,L])=>({changed:L!==C,sizes:L}),{changed:!1,sizes:k}),we(C=>C.changed)));pt(he(f,gr((C,O)=>({diff:C.prev-O,prev:O}),{diff:0,prev:0}),we(C=>C.diff)),C=>{const{groupIndices:O}=zt(N);if(C>0)Ke(a,!0),Ke(u,C+Ng(C,O));else if(C<0){const L=zt(T);L.length>0&&(C-=Ng(-C,L)),Ke(d,C)}}),pt(he(f,Qe(t)),([C,O])=>{C<0&&O("`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:f},Qt.ERROR)});const z=$n(u);Le(he(u,Qe(N),we(([C,O])=>{const L=O.groupIndices.length>0,_=[],H=O.lastSize;if(L){const W=Zs(O.sizeTree,0);let q=0,ee=0;for(;q<C;){const D=O.groupIndices[ee],I=O.groupIndices.length===ee+1?1/0:O.groupIndices[ee+1]-D-1;_.push({endIndex:D,size:W,startIndex:D}),_.push({endIndex:D+1+I-1,size:H,startIndex:D+1}),ee++,q+=I+1}const $=Fa(O.sizeTree);return q!==C&&$.shift(),$.reduce((D,{k:I,v:F})=>{let J=D.ranges;return D.prevSize!==0&&(J=[...D.ranges,{endIndex:I+C-1,size:D.prevSize,startIndex:D.prevIndex}]),{prevIndex:I+C,prevSize:F,ranges:J}},{prevIndex:C,prevSize:0,ranges:_}).ranges}return Fa(O.sizeTree).reduce((W,{k:q,v:ee})=>({prevIndex:q+C,prevSize:ee,ranges:[...W.ranges,{endIndex:q+C-1,size:W.prevSize,startIndex:W.prevIndex}]}),{prevIndex:0,prevSize:H,ranges:[]}).ranges})),s);const P=$n(he(d,Qe(N,E),we(([C,{offsetTree:O},L])=>{const _=-C;return ei(_,O,L)})));return Le(he(d,Qe(N,E),we(([C,O,L])=>{if(O.groupIndices.length>0){if(yt(O.sizeTree))return O;let H=Ol();const W=zt(T);let q=0,ee=0,$=0;for(;q<-C;){$=W[ee];const D=W[ee+1]-$-1;ee++,q+=D+1}if(H=Fa(O.sizeTree).reduce((D,{k:I,v:F})=>Bn(D,Math.max(0,I+C),F),H),q!==-C){const D=Zs(O.sizeTree,$);H=Bn(H,0,D);const I=or(O.sizeTree,-C+1)[1];H=Bn(H,1,I)}return{...O,sizeTree:H,...xf(O.offsetTree,0,H,L)}}const _=Fa(O.sizeTree).reduce((H,{k:W,v:q})=>Bn(H,Math.max(0,W+C),q),Ol());return{...O,sizeTree:_,...xf(O.offsetTree,0,_,L)}})),N),{beforeUnshiftWith:z,data:w,defaultItemSize:v,firstItemIndex:f,fixedItemSize:h,fixedGroupSize:y,gap:E,groupIndices:x,heightEstimates:b,itemSize:S,listRefresh:B,shiftWith:d,shiftWithOffset:P,sizeRanges:s,sizes:N,statefulTotalCount:c,totalCount:i,trackItemSizes:A,unshiftWith:u}},Rt(ja,Bf),{singleton:!0});function Hk(t){return t.reduce((a,s)=>(a.groupIndices.push(a.totalCount),a.totalCount+=s+1,a),{groupIndices:[],totalCount:0})}const hy=ut(([{groupIndices:t,sizes:a,totalCount:s},{headerHeight:i,scrollTop:c}])=>{const u=it(),d=it(),f=$n(he(u,we(Hk)));return Le(he(f,we(x=>x.totalCount)),s),Le(he(f,we(x=>x.groupIndices)),t),Le(he(qt(c,a,i),$e(([x,h])=>ic(h)),we(([x,h,v])=>or(h.groupOffsetTree,Math.max(x-v,0),"v")[0]),Tt(),we(x=>[x])),d),{groupCounts:u,topItemsIndexes:d}},Rt(br,yn)),Sa=ut(([{log:t}])=>{const a=ge(!1),s=$n(he(a,$e(i=>i),Tt()));return pt(a,i=>{i&&zt(t)("props updated",{},Qt.DEBUG)}),{didMount:s,propsReady:a}},Rt(ja),{singleton:!0}),Pk=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function xy(t){const a=typeof t=="number"?{index:t}:t;return a.align||(a.align="start"),(!a.behavior||!Pk)&&(a.behavior="auto"),a.offset===void 0&&(a.offset=0),a}const si=ut(([{gap:t,listRefresh:a,sizes:s,totalCount:i},{fixedFooterHeight:c,fixedHeaderHeight:u,footerHeight:d,headerHeight:f,scrollingInProgress:x,scrollTo:h,smoothScrollTargetReached:v,viewportHeight:y},{log:b}])=>{const S=it(),w=it(),E=ge(0);let k=null,N=null,T=null;function A(){k!==null&&(k(),k=null),T!==null&&(T(),T=null),N&&(clearTimeout(N),N=null),Ke(x,!1)}return Le(he(S,Qe(s,y,i,E,f,d,b),Qe(t,u,c),we(([[B,z,P,C,O,L,_,H],W,q,ee])=>{const $=xy(B),{align:D,behavior:I,offset:F}=$,J=C-1,de=my($,z,J);let M=ei(de,z.offsetTree,W)+L;D==="end"?(M+=q+or(z.sizeTree,de)[1]-P+ee,de===J&&(M+=_)):D==="center"?M+=(q+or(z.sizeTree,de)[1]-P+ee)/2:M-=O,F!==void 0&&F!==0&&(M+=F);const U=K=>{A(),K?(H("retrying to scroll to",{location:B},Qt.DEBUG),Ke(S,B)):(Ke(w,!0),H("list did not change, scroll successful",{},Qt.DEBUG))};if(A(),I==="smooth"){let K=!1;T=pt(a,Q=>{K=K||Q}),k=sr(v,()=>{U(K)})}else k=sr(he(a,Vk(150)),U);return N=setTimeout(()=>{A()},1200),Ke(x,!0),H("scrolling from index to",{behavior:I,index:de,top:M},Qt.DEBUG),{behavior:I,top:M}})),h),{scrollTargetReached:w,scrollToIndex:S,topListHeight:E}},Rt(br,yn,ja),{singleton:!0});function Vk(t){return a=>{const s=setTimeout(()=>{a(!1)},t);return i=>{i&&(a(!0),clearTimeout(s))}}}function $f(t,a){t===0?a():requestAnimationFrame(()=>{$f(t-1,a)})}function Uf(t,a){const s=a-1;return typeof t=="number"?t:t.index==="LAST"?s:t.index}const ii=ut(([{defaultItemSize:t,listRefresh:a,sizes:s},{scrollTop:i},{scrollTargetReached:c,scrollToIndex:u},{didMount:d}])=>{const f=ge(!0),x=ge(0),h=ge(!0);return Le(he(d,Qe(x),$e(([v,y])=>y!==0),xr(!1)),f),Le(he(d,Qe(x),$e(([v,y])=>y!==0),xr(!1)),h),pt(he(qt(a,d),Qe(f,s,t,h),$e(([[,v],y,{sizeTree:b},S,w])=>v&&(!yt(b)||Df(S))&&!y&&!w),Qe(x)),([,v])=>{sr(c,()=>{Ke(h,!0)}),$f(4,()=>{sr(i,()=>{Ke(f,!0)}),Ke(u,v)})}),{initialItemFinalLocationReached:h,initialTopMostItemIndex:x,scrolledToInitialItem:f}},Rt(br,yn,si,Sa),{singleton:!0});function gy(t,a){return Math.abs(t-a)<1.01}const ti="up",Gs="down",Fk="none",Gk={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollHeight:0,scrollTop:0,viewportHeight:0}},Wk=0,oi=ut(([{footerHeight:t,headerHeight:a,scrollBy:s,scrollContainerState:i,scrollTop:c,viewportHeight:u}])=>{const d=ge(!1),f=ge(!0),x=it(),h=it(),v=ge(4),y=ge(Wk),b=pn(he(ff(he(Ie(c),Wa(1),xr(!0)),he(Ie(c),Wa(1),xr(!1),wg(100))),Tt()),!1),S=pn(he(ff(he(s,xr(!0)),he(s,xr(!1),wg(200))),Tt()),!1);Le(he(qt(Ie(c),Ie(y)),we(([T,A])=>T<=A),Tt()),f),Le(he(f,Ur(50)),h);const w=$n(he(qt(i,Ie(u),Ie(a),Ie(t),Ie(v)),gr((T,[{scrollHeight:A,scrollTop:B},z,P,C,O])=>{const L=B+z-A>-O,_={scrollHeight:A,scrollTop:B,viewportHeight:z};if(L){let W,q;return B>T.state.scrollTop?(W="SCROLLED_DOWN",q=T.state.scrollTop-B):(W="SIZE_DECREASED",q=T.state.scrollTop-B||T.scrollTopDelta),{atBottom:!0,atBottomBecause:W,scrollTopDelta:q,state:_}}let H;return _.scrollHeight>T.state.scrollHeight?H="SIZE_INCREASED":z<T.state.viewportHeight?H="VIEWPORT_HEIGHT_DECREASING":B<T.state.scrollTop?H="SCROLLING_UPWARDS":H="NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM",{atBottom:!1,notAtBottomBecause:H,state:_}},Gk),Tt((T,A)=>T!==void 0&&T.atBottom===A.atBottom))),E=pn(he(i,gr((T,{scrollHeight:A,scrollTop:B,viewportHeight:z})=>{if(!gy(T.scrollHeight,A)){const P=A-(B+z)<1;return T.scrollTop!==B&&P?{changed:!0,jump:T.scrollTop-B,scrollHeight:A,scrollTop:B}:{changed:!0,jump:0,scrollHeight:A,scrollTop:B}}return{changed:!1,jump:0,scrollHeight:A,scrollTop:B}},{changed:!1,jump:0,scrollHeight:0,scrollTop:0}),$e(T=>T.changed),we(T=>T.jump)),0);Le(he(w,we(T=>T.atBottom)),d),Le(he(d,Ur(50)),x);const k=ge(Gs);Le(he(i,we(({scrollTop:T})=>T),Tt(),gr((T,A)=>zt(S)?{direction:T.direction,prevScrollTop:A}:{direction:A<T.prevScrollTop?ti:Gs,prevScrollTop:A},{direction:Gs,prevScrollTop:0}),we(T=>T.direction)),k),Le(he(i,Ur(50),xr(Fk)),k);const N=ge(0);return Le(he(b,$e(T=>!T),xr(0)),N),Le(he(c,Ur(100),Qe(b),$e(([T,A])=>A),gr(([T,A],[B])=>[A,B],[0,0]),we(([T,A])=>A-T)),N),{atBottomState:w,atBottomStateChange:x,atBottomThreshold:v,atTopStateChange:h,atTopThreshold:y,isAtBottom:d,isAtTop:f,isScrolling:b,lastJumpDueToItemResize:E,scrollDirection:k,scrollVelocity:N}},Rt(yn)),ni="top",ri="bottom",Tg="none";function Rg(t,a,s){return typeof t=="number"?s===ti&&a===ni||s===Gs&&a===ri?t:0:s===ti?a===ni?t.main:t.reverse:a===ri?t.main:t.reverse}function Ag(t,a){return typeof t=="number"?t:t[a]??0}const Hf=ut(([{deviation:t,fixedHeaderHeight:a,headerHeight:s,scrollTop:i,viewportHeight:c}])=>{const u=it(),d=ge(0),f=ge(0),x=ge(0),h=pn(he(qt(Ie(i),Ie(c),Ie(s),Ie(u,Js),Ie(x),Ie(d),Ie(a),Ie(t),Ie(f)),we(([v,y,b,[S,w],E,k,N,T,A])=>{const B=v-T,z=k+N,P=Math.max(b-B,0);let C=Tg;const O=Ag(A,ni),L=Ag(A,ri);return S-=T,S+=b+N,w+=b+N,w-=T,S>v+z-O&&(C=ti),w<v-P+y+L&&(C=Gs),C!==Tg?[Math.max(B-b-Rg(E,ni,C)-O,0),B-P-N+y+Rg(E,ri,C)+L]:null}),$e(v=>v!==null),Tt(Js)),[0,0]);return{increaseViewportBy:f,listBoundary:u,overscan:x,topListHeight:d,visibleRange:h}},Rt(yn),{singleton:!0});function qk(t,a,s){if(ic(a)){const i=py(t,a);return[{index:or(a.groupOffsetTree,i)[0],offset:0,size:0},{data:s==null?void 0:s[0],index:i,offset:0,size:0}]}return[{data:s==null?void 0:s[0],index:t,offset:0,size:0}]}const _d={bottom:0,firstItemIndex:0,items:[],offsetBottom:0,offsetTop:0,top:0,topItems:[],topListHeight:0,totalCount:0};function Po(t,a,s,i,c,u){const{lastIndex:d,lastOffset:f,lastSize:x}=c;let h=0,v=0;if(t.length>0){h=t[0].offset;const E=t[t.length-1];v=E.offset+E.size}const y=s-d,b=f+y*x+(y-1)*i,S=h,w=b-v;return{bottom:v,firstItemIndex:u,items:Lg(t,c,u),offsetBottom:w,offsetTop:h,top:S,topItems:Lg(a,c,u),topListHeight:a.reduce((E,k)=>k.size+E,0),totalCount:s}}function vy(t,a,s,i,c,u){let d=0;if(s.groupIndices.length>0)for(const v of s.groupIndices){if(v-d>=t)break;d++}const f=t+d,x=Uf(a,f),h=Array.from({length:f}).map((v,y)=>({data:u[y+x],index:y+x,offset:0,size:0}));return Po(h,[],f,c,s,i)}function Lg(t,a,s){if(t.length===0)return[];if(!ic(a))return t.map(h=>({...h,index:h.index+s,originalIndex:h.index}));const i=t[0].index,c=t[t.length-1].index,u=[],d=Bl(a.groupOffsetTree,i,c);let f,x=0;for(const h of t){(!f||f.end<h.index)&&(f=d.shift(),x=a.groupIndices.indexOf(f.start));let v;h.index===f.start?v={index:x,type:"group"}:v={groupIndex:x,index:h.index-(x+1)+s},u.push({...v,data:h.data,offset:h.offset,originalIndex:h.index,size:h.size})}return u}function Mg(t,a){return t===void 0?0:typeof t=="number"?t:t[a]??0}const Xa=ut(([{data:t,firstItemIndex:a,gap:s,sizes:i,totalCount:c},u,{listBoundary:d,topListHeight:f,visibleRange:x},{initialTopMostItemIndex:h,scrolledToInitialItem:v},{topListHeight:y},b,{didMount:S},{recalcInProgress:w}])=>{const E=ge([]),k=ge(0),N=it(),T=ge(0);Le(u.topItemsIndexes,E);const A=pn(he(qt(S,w,Ie(x,Js),Ie(c),Ie(i),Ie(h),v,Ie(E),Ie(a),Ie(s),Ie(T),t),$e(([C,O,,L,,,,,,,,_])=>{const H=_!==void 0&&_.length!==L;return C&&!O&&!H}),we(([,,[C,O],L,_,H,W,q,ee,$,D,I])=>{var me,je;const F=_,{offsetTree:J,sizeTree:de}=F,M=zt(k);if(L===0)return{..._d,totalCount:L};if(C===0&&O===0)return M===0?{..._d,totalCount:L}:vy(M,H,_,ee,$,I||[]);if(yt(de))return M>0?null:Po(qk(Uf(H,L),F,I),[],L,$,F,ee);const U=[];if(q.length>0){const Ne=q[0],Me=q[q.length-1];let Fe=0;for(const Ue of Bl(de,Ne,Me)){const De=Ue.value,Ge=Math.max(Ue.start,Ne),ft=Math.min(Ue.end,Me);for(let oe=Ge;oe<=ft;oe++)U.push({data:I==null?void 0:I[oe],index:oe,offset:Fe,size:De}),Fe+=De}}if(!W)return Po([],U,L,$,F,ee);const K=q.length>0?q[q.length-1]+1:0,Q=_k(J,C,O,K);if(Q.length===0)return null;const ce=L-1,Z=sc([],Ne=>{for(const Me of Q){const Fe=Me.value;let Ue=Fe.offset,De=Me.start;const Ge=Fe.size;if(Fe.offset<C){De+=Math.floor((C-Fe.offset+$)/(Ge+$));const oe=De-Me.start;Ue+=oe*Ge+oe*$}De<K&&(Ue+=(K-De)*Ge,De=K);const ft=Math.min(Me.end,ce);for(let oe=De;oe<=ft&&!(Ue>=O);oe++)Ne.push({data:I==null?void 0:I[oe],index:oe,offset:Ue,size:Ge}),Ue+=Ge+$}}),ie=Mg(D,ni),X=Mg(D,ri);if(Z.length>0&&(ie>0||X>0)){const Ne=Z[0],Me=Z[Z.length-1];if(ie>0&&Ne.index>K){const Fe=Math.min(ie,Ne.index-K),Ue=[];let De=Ne.offset;for(let Ge=Ne.index-1;Ge>=Ne.index-Fe;Ge--){const ft=((me=Bl(de,Ge,Ge)[0])==null?void 0:me.value)??Ne.size;De-=ft+$,Ue.unshift({data:I==null?void 0:I[Ge],index:Ge,offset:De,size:ft})}Z.unshift(...Ue)}if(X>0&&Me.index<ce){const Fe=Math.min(X,ce-Me.index);let Ue=Me.offset+Me.size+$;for(let De=Me.index+1;De<=Me.index+Fe;De++){const Ge=((je=Bl(de,De,De)[0])==null?void 0:je.value)??Me.size;Z.push({data:I==null?void 0:I[De],index:De,offset:Ue,size:Ge}),Ue+=Ge+$}}}return Po(Z,U,L,$,F,ee)}),$e(C=>C!==null),Tt()),_d);Le(he(t,$e(Df),we(C=>C==null?void 0:C.length)),c),Le(he(A,we(C=>C.topListHeight)),y),Le(y,f),Le(he(A,we(C=>[C.top,C.bottom])),d),Le(he(A,we(C=>C.items)),N);const B=$n(he(A,$e(({items:C})=>C.length>0),Qe(c,t),$e(([{items:C},O])=>C[C.length-1].originalIndex===O-1),we(([,C,O])=>[C-1,O]),Tt(Js),we(([C])=>C))),z=$n(he(A,Ur(200),$e(({items:C,topItems:O})=>C.length>0&&C[0].originalIndex===O.length),we(({items:C})=>C[0].index),Tt())),P=$n(he(A,$e(({items:C})=>C.length>0),we(({items:C})=>{let O=0,L=C.length-1;for(;C[O].type==="group"&&O<L;)O++;for(;C[L].type==="group"&&L>O;)L--;return{endIndex:C[L].index,startIndex:C[O].index}}),Tt(dy)));return{endReached:B,initialItemCount:k,itemsRendered:N,listState:A,minOverscanItemCount:T,rangeChanged:P,startReached:z,topItemsIndexes:E,...b}},Rt(br,hy,Hf,ii,si,oi,Sa,Bf),{singleton:!0}),yy=ut(([{fixedFooterHeight:t,fixedHeaderHeight:a,footerHeight:s,headerHeight:i},{listState:c}])=>{const u=it(),d=pn(he(qt(s,t,i,a,c),we(([f,x,h,v,y])=>f+x+h+v+y.offsetBottom+y.bottom)),0);return Le(Ie(d),u),{totalListHeight:d,totalListHeightChanged:u}},Rt(yn,Xa),{singleton:!0}),Yk=ut(([{viewportHeight:t},{totalListHeight:a}])=>{const s=ge(!1),i=pn(he(qt(s,t,a),$e(([c])=>c),we(([,c,u])=>Math.max(0,c-u)),Ur(0),Tt()),0);return{alignToBottom:s,paddingTopAddition:i}},Rt(yn,yy),{singleton:!0}),by=ut(()=>({context:ge(null)})),Kk=({itemBottom:t,itemTop:a,locationParams:{align:s,behavior:i,...c},viewportBottom:u,viewportTop:d})=>a<d?{...c,align:s??"start",...i!==void 0?{behavior:i}:{}}:t>u?{...c,align:s??"end",...i!==void 0?{behavior:i}:{}}:null,jy=ut(([{gap:t,sizes:a,totalCount:s},{fixedFooterHeight:i,fixedHeaderHeight:c,headerHeight:u,scrollingInProgress:d,scrollTop:f,viewportHeight:x},{scrollToIndex:h}])=>{const v=it();return Le(he(v,Qe(a,x,s,u,c,i,f),Qe(t),we(([[y,b,S,w,E,k,N,T],A])=>{const{calculateViewLocation:B=Kk,done:z,...P}=y,C=my(y,b,w-1),O=ei(C,b.offsetTree,A)+E+k,L=O+or(b.sizeTree,C)[1],_=T+k,H=T+S-N,W=B({itemBottom:L,itemTop:O,locationParams:P,viewportBottom:H,viewportTop:_});return W!==null?z&&sr(he(d,$e(q=>!q),Wa(zt(d)?1:2)),z):z==null||z(),W}),$e(y=>y!==null)),h),{scrollIntoView:v}},Rt(br,yn,si,Xa,ja),{singleton:!0});function zg(t){return t===!1?!1:t==="smooth"?"smooth":"auto"}const Xk=(t,a)=>typeof t=="function"?zg(t(a)):a&&zg(t),Qk=ut(([{listRefresh:t,totalCount:a,fixedItemSize:s,data:i},{atBottomState:c,isAtBottom:u},{scrollToIndex:d},{scrolledToInitialItem:f},{didMount:x,propsReady:h},{log:v},{scrollingInProgress:y},{context:b},{scrollIntoView:S}])=>{const w=ge(!1),E=it();let k=null;function N(z){Ke(d,{align:"end",behavior:z,index:"LAST"})}pt(he(qt(he(Ie(a),Wa(1)),x),Qe(Ie(w),u,f,y),we(([[z,P],C,O,L,_])=>{let H=P&&L,W="auto";return H&&(W=Xk(C,O||_),H=H&&W!==!1),{followOutputBehavior:W,shouldFollow:H,totalCount:z}}),$e(({shouldFollow:z})=>z)),({followOutputBehavior:z,totalCount:P})=>{k!==null&&(k(),k=null),zt(s)!==void 0?requestAnimationFrame(()=>{zt(v)("following output to ",{totalCount:P},Qt.DEBUG),N(z)}):k=sr(t,()=>{zt(v)("following output to ",{totalCount:P},Qt.DEBUG),N(z),k=null})});function T(z){const P=sr(c,C=>{z&&!C.atBottom&&C.notAtBottomBecause==="SIZE_INCREASED"&&k===null&&(zt(v)("scrolling to bottom due to increased size",{},Qt.DEBUG),N("auto"))});setTimeout(P,100)}pt(he(qt(Ie(w),a,h),$e(([z,,P])=>z!==!1&&P),gr(({value:z},[,P])=>({refreshed:z===P,value:P}),{refreshed:!1,value:0}),$e(({refreshed:z})=>z),Qe(w,a)),([,z])=>{zt(f)&&T(z!==!1)}),pt(E,()=>{T(zt(w)!==!1)}),pt(qt(Ie(w),c),([z,P])=>{z!==!1&&!P.atBottom&&P.notAtBottomBecause==="VIEWPORT_HEIGHT_DECREASING"&&N("auto")});const A=ge(null),B=it();return Le(ff(he(Ie(i),we(z=>(z==null?void 0:z.length)??0)),he(Ie(a))),B),pt(he(qt(he(B,Wa(1)),x),Qe(Ie(A),f,y,b),we(([[z,P],C,O,L,_])=>P&&O&&(C==null?void 0:C({context:_,totalCount:z,scrollingInProgress:L}))),$e(z=>!!z),Ur(0)),z=>{k!==null&&(k(),k=null),zt(s)!==void 0?requestAnimationFrame(()=>{zt(v)("scrolling into view",{}),Ke(S,z)}):k=sr(t,()=>{zt(v)("scrolling into view",{}),Ke(S,z),k=null})}),{autoscrollToBottom:E,followOutput:w,scrollIntoViewOnChange:A}},Rt(br,oi,si,ii,Sa,ja,yn,by,jy)),Zk=ut(([{data:t,firstItemIndex:a,gap:s,sizes:i},{initialTopMostItemIndex:c},{initialItemCount:u,listState:d},{didMount:f}])=>(Le(he(f,Qe(u),$e(([,x])=>x!==0),Qe(c,i,a,s,t),we(([[,x],h,v,y,b,S=[]])=>vy(x,h,v,y,b,S))),d),{}),Rt(br,ii,Xa,Sa),{singleton:!0}),Jk=ut(([{didMount:t},{scrollTo:a},{listState:s}])=>{const i=ge(0);return pt(he(t,Qe(i),$e(([,c])=>c!==0),we(([,c])=>({top:c}))),c=>{sr(he(s,Wa(1),$e(u=>u.items.length>1)),()=>{requestAnimationFrame(()=>{Ke(a,c)})})}),{initialScrollTop:i}},Rt(Sa,yn,Xa),{singleton:!0}),Sy=ut(([{scrollVelocity:t}])=>{const a=ge(!1),s=it(),i=ge(!1);return Le(he(t,Qe(i,a,s),$e(([c,u])=>u!==!1&&u!==void 0),we(([c,u,d,f])=>{const{enter:x,exit:h}=u;if(d){if(h(c,f))return!1}else if(x(c,f))return!0;return d}),Tt()),a),pt(he(qt(a,t,s),Qe(i)),([[c,u,d],f])=>{c&&f!==!1&&f!==void 0&&f.change&&f.change(u,d)}),{isSeeking:a,scrollSeekConfiguration:i,scrollSeekRangeChanged:s,scrollVelocity:t}},Rt(oi),{singleton:!0}),Pf=ut(([{scrollContainerState:t,scrollTo:a}])=>{const s=it(),i=it(),c=it(),u=ge(!1),d=ge(void 0);return Le(he(qt(s,i),we(([{scrollTop:f,viewportHeight:x},{offsetTop:h,listHeight:v}])=>({scrollHeight:v,scrollTop:Math.max(0,f-h),viewportHeight:x}))),t),Le(he(a,Qe(i),we(([f,{offsetTop:x}])=>({...f,top:f.top+x}))),c),{customScrollParent:d,useWindowScroll:u,windowScrollContainerState:s,windowScrollTo:c,windowViewportRect:i}},Rt(yn)),ew=ut(([{sizeRanges:t,sizes:a},{headerHeight:s,scrollTop:i},{initialTopMostItemIndex:c},{didMount:u},{useWindowScroll:d,windowScrollContainerState:f,windowViewportRect:x}])=>{const h=it(),v=ge(void 0),y=ge(null),b=ge(null);return Le(f,y),Le(x,b),pt(he(h,Qe(a,i,d,y,b,s)),([S,w,E,k,N,T,A])=>{const B=Bk(w.sizeTree);k&&N!==null&&T!==null&&(E=N.scrollTop-T.offsetTop),E-=A,S({ranges:B,scrollTop:E})}),Le(he(v,$e(Df),we(tw)),c),Le(he(u,Qe(v),$e(([,S])=>S!==void 0),Tt(),we(([,S])=>S.ranges)),t),{getState:h,restoreStateFrom:v}},Rt(br,yn,ii,Sa,Pf));function tw(t){return{align:"start",index:0,offset:t.scrollTop}}const nw=ut(([{topItemsIndexes:t}])=>{const a=ge(0);return Le(he(a,$e(s=>s>=0),we(s=>Array.from({length:s}).map((i,c)=>c))),t),{topItemCount:a}},Rt(Xa));function ky(t){let a=!1,s;return(()=>(a||(a=!0,s=t()),s))}const rw=ky(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),aw=ut(([{deviation:t,scrollBy:a,scrollingInProgress:s,scrollTop:i},{isAtBottom:c,isScrolling:u,lastJumpDueToItemResize:d,scrollDirection:f},{listState:x},{beforeUnshiftWith:h,gap:v,shiftWithOffset:y,sizes:b},{log:S},{recalcInProgress:w}])=>{const E=$n(he(x,Qe(d),gr(([,N,T,A],[{bottom:B,items:z,offsetBottom:P,totalCount:C},O])=>{const L=B+P;let _=0;return T===C&&N.length>0&&z.length>0&&(z[0].originalIndex===0&&N[0].originalIndex===0||(_=L-A,_!==0&&(_+=O))),[_,z,C,L]},[0,[],0,0]),$e(([N])=>N!==0),Qe(i,f,s,c,S,w),$e(([,N,T,A,,,B])=>!B&&!A&&N!==0&&T===ti),we(([[N],,,,,T])=>(T("Upward scrolling compensation",{amount:N},Qt.DEBUG),N))));function k(N){N>0?(Ke(a,{behavior:"auto",top:-N}),Ke(t,0)):(Ke(t,0),Ke(a,{behavior:"auto",top:-N}))}return pt(he(E,Qe(t,u)),([N,T,A])=>{A&&rw()?Ke(t,T-N):k(-N)}),pt(he(qt(pn(u,!1),t,w),$e(([N,T,A])=>!N&&!A&&T!==0),we(([N,T])=>T),Ur(1)),k),Le(he(y,we(N=>({top:-N}))),a),pt(he(h,Qe(b,v),we(([N,{groupIndices:T,lastSize:A,sizeTree:B},z])=>{function P(H){return H*(A+z)}if(T.length===0)return P(N);let C=0;const O=Zs(B,0);let L=0,_=0;for(;L<N;){L++,C+=O;let H=T.length===_+1?1/0:T[_+1]-T[_]-1;L+H>N&&(C-=O,H=N-L+1),L+=H,C+=P(H),_++}return C})),N=>{Ke(t,N),requestAnimationFrame(()=>{Ke(a,{top:N}),requestAnimationFrame(()=>{Ke(t,0),Ke(w,!1)})})}),{deviation:t}},Rt(yn,oi,Xa,br,ja,Bf)),lw=ut(([t,a,s,i,c,u,d,f,x,h,v])=>({...t,...a,...s,...i,...c,...u,...d,...f,...x,...h,...v}),Rt(Hf,Zk,Sa,Sy,yy,Jk,Yk,Pf,jy,ja,by)),wy=ut(([{data:t,defaultItemSize:a,firstItemIndex:s,fixedItemSize:i,fixedGroupSize:c,gap:u,groupIndices:d,heightEstimates:f,itemSize:x,sizeRanges:h,sizes:v,statefulTotalCount:y,totalCount:b,trackItemSizes:S},{initialItemFinalLocationReached:w,initialTopMostItemIndex:E,scrolledToInitialItem:k},N,T,A,B,{scrollToIndex:z},P,{topItemCount:C},{groupCounts:O},L])=>{const{listState:_,minOverscanItemCount:H,topItemsIndexes:W,rangeChanged:q,...ee}=B;return Le(q,L.scrollSeekRangeChanged),Le(he(L.windowViewportRect,we($=>$.visibleHeight)),N.viewportHeight),{data:t,defaultItemHeight:a,firstItemIndex:s,fixedItemHeight:i,fixedGroupHeight:c,gap:u,groupCounts:O,heightEstimates:f,initialItemFinalLocationReached:w,initialTopMostItemIndex:E,scrolledToInitialItem:k,sizeRanges:h,topItemCount:C,topItemsIndexes:W,totalCount:b,...A,groupIndices:d,itemSize:x,listState:_,minOverscanItemCount:H,scrollToIndex:z,statefulTotalCount:y,trackItemSizes:S,rangeChanged:q,...ee,...L,...N,sizes:v,...T}},Rt(br,ii,yn,ew,Qk,Xa,si,aw,nw,hy,lw));function sw(t,a){const s={},i={};let c=0;const u=t.length;for(;c<u;)i[t[c]]=1,c+=1;for(const d in a)Object.hasOwn(i,d)||(s[d]=a[d]);return s}const No=typeof document<"u"?Ae.useLayoutEffect:Ae.useEffect;function Cy(t,a,s){const i=Object.keys(a.required||{}),c=Object.keys(a.optional||{}),u=Object.keys(a.methods||{}),d=Object.keys(a.events||{}),f=Ae.createContext({});function x(k,N){k.propsReady!==void 0&&Ke(k.propsReady,!1);for(const T of i){const A=k[a.required[T]];Ke(A,N[T])}for(const T of c)if(T in N){const A=k[a.optional[T]];Ke(A,N[T])}k.propsReady!==void 0&&Ke(k.propsReady,!0)}function h(k){return u.reduce((N,T)=>(N[T]=A=>{const B=k[a.methods[T]];Ke(B,A)},N),{})}function v(k){return d.reduce((N,T)=>(N[T]=Sk(k[a.events[T]]),N),{})}const y=Ae.forwardRef(function(k,N){const{children:T,...A}=k,[B]=Ae.useState(()=>sc(wk(t),C=>{x(C,A)})),[z]=Ae.useState(kg(v,B));No(()=>{for(const C of d)C in A&&pt(z[C],A[C]);return()=>{Object.values(z).map(_f)}},[A,z,B]),No(()=>{x(B,A)}),Ae.useImperativeHandle(N,Sg(h(B)));const P=s;return r.jsx(f.Provider,{value:B,children:s!==void 0?r.jsx(P,{...sw([...i,...c,...d],A),children:T}):T})}),b=k=>{const N=Ae.useContext(f);return Ae.useCallback(T=>{Ke(N[k],T)},[N,k])},S=k=>{const N=Ae.useContext(f)[k],T=Ae.useCallback(A=>pt(N,A),[N]);return Ae.useSyncExternalStore(T,()=>zt(N),()=>zt(N))},w=k=>{const N=Ae.useContext(f)[k],[T,A]=Ae.useState(kg(zt,N));return No(()=>pt(N,B=>{B!==T&&A(Sg(B))}),[N,T]),T},E=parseInt(Ae.version)>=18?S:w;return{Component:y,useEmitter:(k,N)=>{const T=Ae.useContext(f)[k];No(()=>pt(T,N),[N,T])},useEmitterValue:E,usePublisher:b}}const Ey=Ae.createContext(void 0),Ny=Ae.createContext(void 0),Od="-webkit-sticky",Dg="sticky",Vf=ky(()=>{if(typeof document>"u")return Dg;const t=document.createElement("div");return t.style.position=Od,t.style.position===Od?Od:Dg}),Ty=typeof document<"u"?Ae.useLayoutEffect:Ae.useEffect;function Bd(t){return"self"in t}function iw(t){return"body"in t}function Ry(t,a,s,i=Gl,c,u){const d=Ae.useRef(null),f=Ae.useRef(null),x=Ae.useRef(null),h=Ae.useCallback(b=>{let S,w,E;const k=b.target;if(iw(k)||Bd(k)){const T=Bd(k)?k:k.defaultView;E=u===!0?T.scrollX:T.scrollY,S=u===!0?T.document.documentElement.scrollWidth:T.document.documentElement.scrollHeight,w=u===!0?T.innerWidth:T.innerHeight}else E=u===!0?k.scrollLeft:k.scrollTop,S=u===!0?k.scrollWidth:k.scrollHeight,w=u===!0?k.offsetWidth:k.offsetHeight;const N=()=>{t({scrollHeight:S,scrollTop:Math.max(E,0),viewportHeight:w})};b.suppressFlushSync===!0?N():yS.flushSync(N),f.current!==null&&(E===f.current||E<=0||E===S-w)&&(f.current=null,a(!0),x.current&&(clearTimeout(x.current),x.current=null))},[t,a,u]);Ae.useEffect(()=>{const b=c||d.current;return i(c||d.current),h({suppressFlushSync:!0,target:b}),b.addEventListener("scroll",h,{passive:!0}),()=>{i(null),b.removeEventListener("scroll",h)}},[d,h,s,i,c]);function v(b){const S=d.current;if(!S||(u===!0?"offsetWidth"in S&&S.offsetWidth===0:"offsetHeight"in S&&S.offsetHeight===0))return;const w=b.behavior==="smooth";let E,k,N;Bd(S)?(k=Math.max(va(S.document.documentElement,u===!0?"width":"height"),u===!0?S.document.documentElement.scrollWidth:S.document.documentElement.scrollHeight),E=u===!0?S.innerWidth:S.innerHeight,N=u===!0?window.scrollX:window.scrollY):(k=S[u===!0?"scrollWidth":"scrollHeight"],E=va(S,u===!0?"width":"height"),N=S[u===!0?"scrollLeft":"scrollTop"]);const T=k-E;if(b.top=Math.ceil(Math.max(Math.min(T,b.top),0)),gy(E,k)||b.top===N){t({scrollHeight:k,scrollTop:N,viewportHeight:E}),w&&a(!0);return}w?(f.current=b.top,x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{x.current=null,f.current=null,a(!0)},1e3)):f.current=null,u===!0&&(b={...b.behavior!==void 0?{behavior:b.behavior}:{},left:b.top}),S.scrollTo(b)}function y(b){u===!0&&(b={...b.behavior!==void 0?{behavior:b.behavior}:{},...b.top!==void 0?{left:b.top}:{}}),d.current.scrollBy(b)}return{scrollByCallback:y,scrollerRef:d,scrollToCallback:v}}function Ff(t){return t}const ow=ut(()=>{const t=ge(f=>`Item ${f}`),a=ge(f=>`Group ${f}`),s=ge({}),i=ge(Ff),c=ge("div"),u=ge(Gl),d=(f,x=null)=>pn(he(s,we(h=>h[f]),Tt()),x);return{components:s,computeItemKey:i,EmptyPlaceholder:d("EmptyPlaceholder"),FooterComponent:d("Footer"),GroupComponent:d("Group","div"),groupContent:a,HeaderComponent:d("Header"),HeaderFooterTag:c,ItemComponent:d("Item","div"),itemContent:t,ListComponent:d("List","div"),ScrollerComponent:d("Scroller","div"),scrollerRef:u,ScrollSeekPlaceholder:d("ScrollSeekPlaceholder"),TopItemListComponent:d("TopItemList")}}),cw=ut(([t,a])=>({...t,...a}),Rt(wy,ow)),uw=({height:t})=>r.jsx("div",{style:{height:t}}),dw={overflowAnchor:"none",position:Vf(),zIndex:1},Ay={overflowAnchor:"none"},fw={...Ay,display:"inline-block",height:"100%"},_g=Ae.memo(function({showTopList:t=!1}){const a=Ve("listState"),s=er("sizeRanges"),i=Ve("useWindowScroll"),c=Ve("customScrollParent"),u=er("windowScrollContainerState"),d=er("scrollContainerState"),f=c||i?u:d,x=Ve("itemContent"),h=Ve("context"),v=Ve("groupContent"),y=Ve("trackItemSizes"),b=Ve("itemSize"),S=Ve("log"),w=er("gap"),E=Ve("horizontalDirection"),{callbackRef:k}=Nk(s,b,y,t?Gl:f,S,w,c,E,Ve("skipAnimationFrameInResizeObserver")),[N,T]=Ae.useState(0);Gf("deviation",ee=>{N!==ee&&T(ee)});const A=Ve("EmptyPlaceholder"),B=Ve("ScrollSeekPlaceholder")??uw,z=Ve("ListComponent"),P=Ve("ItemComponent"),C=Ve("GroupComponent"),O=Ve("computeItemKey"),L=Ve("isSeeking"),_=Ve("groupIndices").length>0,H=Ve("alignToBottom"),W=Ve("initialItemFinalLocationReached"),q=t?{}:{boxSizing:"border-box",...E?{display:"inline-block",height:"100%",marginLeft:N!==0?N:H?"auto":0,paddingLeft:a.offsetTop,paddingRight:a.offsetBottom,whiteSpace:"nowrap"}:{marginTop:N!==0?N:H?"auto":0,paddingBottom:a.offsetBottom,paddingTop:a.offsetTop},...W?{}:{visibility:"hidden"}};return!t&&a.totalCount===0&&A!==null&&A!==void 0?r.jsx(A,{...fn(A,h)}):r.jsx(z,{...fn(z,h),"data-testid":t?"virtuoso-top-item-list":"virtuoso-item-list",ref:k,style:q,children:(t?a.topItems:a.items).map(ee=>{const $=ee.originalIndex,D=O($+a.firstItemIndex,ee.data,h);return L?m.createElement(B,{...fn(B,h),height:ee.size,index:ee.index,key:D,type:ee.type||"item",...ee.type==="group"?{}:{groupIndex:ee.groupIndex}}):ee.type==="group"?m.createElement(C,{...fn(C,h),"data-index":$,"data-item-index":ee.index,"data-known-size":ee.size,key:D,style:dw},v(ee.index,h)):m.createElement(P,{...fn(P,h),...xw(P,ee.data),"data-index":$,"data-item-group-index":ee.groupIndex,"data-item-index":ee.index,"data-known-size":ee.size,key:D,style:E?fw:Ay},_?x(ee.index,ee.groupIndex,ee.data,h):x(ee.index,ee.data,h))})})}),pw={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},mw={outline:"none",overflowX:"auto",position:"relative"},oc=t=>({height:"100%",position:"absolute",top:0,width:"100%",...t?{display:"flex",flexDirection:"column"}:void 0}),hw={position:Vf(),top:0,width:"100%",zIndex:1};function fn(t,a){if(typeof t!="string")return{context:a}}function xw(t,a){return{item:typeof t=="string"?void 0:a}}const gw=Ae.memo(function(){const t=Ve("HeaderComponent"),a=er("headerHeight"),s=Ve("HeaderFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,Ve("skipAnimationFrameInResizeObserver")),c=Ve("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null}),vw=Ae.memo(function(){const t=Ve("FooterComponent"),a=er("footerHeight"),s=Ve("HeaderFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,Ve("skipAnimationFrameInResizeObserver")),c=Ve("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null});function Ly({useEmitter:t,useEmitterValue:a,usePublisher:s}){return Ae.memo(function({children:i,style:c,context:u,...d}){const f=s("scrollContainerState"),x=a("ScrollerComponent"),h=s("smoothScrollTargetReached"),v=a("scrollerRef"),y=a("horizontalDirection")||!1,{scrollByCallback:b,scrollerRef:S,scrollToCallback:w}=Ry(f,h,x,v,void 0,y);return t("scrollTo",w),t("scrollBy",b),r.jsx(x,{"data-testid":"virtuoso-scroller","data-virtuoso-scroller":!0,ref:S,style:{...y?mw:pw,...c},tabIndex:0,...d,...fn(x,u),children:i})})}function My({useEmitter:t,useEmitterValue:a,usePublisher:s}){return Ae.memo(function({children:i,style:c,context:u,...d}){const f=s("windowScrollContainerState"),x=a("ScrollerComponent"),h=s("smoothScrollTargetReached"),v=a("totalListHeight"),y=a("deviation"),b=a("customScrollParent"),S=Ae.useRef(null),w=a("scrollerRef"),{scrollByCallback:E,scrollerRef:k,scrollToCallback:N}=Ry(f,h,x,w,b);return Ty(()=>{var T;return k.current=b||((T=S.current)==null?void 0:T.ownerDocument.defaultView),()=>{k.current=null}},[k,b]),t("windowScrollTo",N),t("scrollBy",E),r.jsx(x,{ref:S,"data-virtuoso-scroller":!0,style:{position:"relative",...c,...v!==0?{height:v+y}:void 0},...d,...fn(x,u),children:i})})}const yw=({children:t})=>{const a=Ae.useContext(Ey),s=er("viewportHeight"),i=er("fixedItemHeight"),c=Ve("alignToBottom"),u=Ve("horizontalDirection"),d=Ae.useMemo(()=>ry(s,x=>va(x,u?"width":"height")),[s,u]),f=Ka(d,!0,Ve("skipAnimationFrameInResizeObserver"));return Ae.useEffect(()=>{a&&(s(a.viewportHeight),i(a.itemHeight))},[a,s,i]),r.jsx("div",{"data-viewport-type":"element",ref:f,style:oc(c),children:t})},bw=({children:t})=>{const a=Ae.useContext(Ey),s=er("windowViewportRect"),i=er("fixedItemHeight"),c=Ve("customScrollParent"),u=ly(s,c,Ve("skipAnimationFrameInResizeObserver")),d=Ve("alignToBottom");return Ae.useEffect(()=>{a&&(i(a.itemHeight),s({listHeight:0,offsetTop:0,visibleHeight:a.viewportHeight,visibleWidth:100}))},[a,s,i]),r.jsx("div",{"data-viewport-type":"window",ref:u,style:oc(d),children:t})},jw=({children:t})=>{const a=Ve("TopItemListComponent")??"div",s=Ve("headerHeight"),i={...hw,marginTop:`${s}px`},c=Ve("context");return r.jsx(a,{style:i,...fn(a,c),children:t})},Sw=Ae.memo(function(t){const a=Ve("useWindowScroll"),s=Ve("topItemsIndexes").length>0,i=Ve("customScrollParent"),c=Ve("context");return r.jsxs(i||a?Cw:ww,{...t,context:c,children:[s&&r.jsx(jw,{children:r.jsx(_g,{showTopList:!0})}),r.jsxs(i||a?bw:yw,{children:[r.jsx(gw,{}),r.jsx(_g,{}),r.jsx(vw,{})]})]})}),{Component:kw,useEmitter:Gf,useEmitterValue:Ve,usePublisher:er}=Cy(cw,{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"}},Sw),ww=Ly({useEmitter:Gf,useEmitterValue:Ve,usePublisher:er}),Cw=My({useEmitter:Gf,useEmitterValue:Ve,usePublisher:er}),Ew=kw,Nw=ut(()=>{const t=ge(h=>r.jsxs("td",{children:["Item $",h]})),a=ge(null),s=ge(h=>r.jsxs("td",{colSpan:1e3,children:["Group ",h]})),i=ge(null),c=ge(null),u=ge({}),d=ge(Ff),f=ge(Gl),x=(h,v=null)=>pn(he(u,we(y=>y[h]),Tt()),v);return{components:u,computeItemKey:d,context:a,EmptyPlaceholder:x("EmptyPlaceholder"),FillerRow:x("FillerRow"),fixedFooterContent:c,fixedHeaderContent:i,itemContent:t,groupContent:s,ScrollerComponent:x("Scroller","div"),scrollerRef:f,ScrollSeekPlaceholder:x("ScrollSeekPlaceholder"),TableBodyComponent:x("TableBody","tbody"),TableComponent:x("Table","table"),TableFooterComponent:x("TableFoot","tfoot"),TableHeadComponent:x("TableHead","thead"),TableRowComponent:x("TableRow","tr"),GroupComponent:x("Group","tr")}});Rt(wy,Nw);Vf();const Og={bottom:0,itemHeight:0,items:[],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},Tw={bottom:0,itemHeight:0,items:[{index:0}],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},{ceil:Bg,floor:qo,max:Ws,min:Id,round:Ig}=Math;function $g(t,a,s){return Array.from({length:a-t+1}).map((i,c)=>({data:s===null?null:s[c+t],index:c+t}))}function Rw(t){return{...Tw,items:t}}function To(t,a){return t!==void 0&&t.width===a.width&&t.height===a.height}function Aw(t,a){return t!==void 0&&t.column===a.column&&t.row===a.row}const Lw=ut(([{increaseViewportBy:t,listBoundary:a,overscan:s,visibleRange:i},{footerHeight:c,headerHeight:u,scrollBy:d,scrollContainerState:f,scrollTo:x,scrollTop:h,smoothScrollTargetReached:v,viewportHeight:y},b,S,{didMount:w,propsReady:E},{customScrollParent:k,useWindowScroll:N,windowScrollContainerState:T,windowScrollTo:A,windowViewportRect:B},z])=>{const P=ge(0),C=ge(0),O=ge(Og),L=ge({height:0,width:0}),_=ge({height:0,width:0}),H=it(),W=it(),q=ge(0),ee=ge(null),$=ge({column:0,row:0}),D=it(),I=it(),F=ge(!1),J=ge(0),de=ge(!0),M=ge(!1),U=ge(!1);pt(he(w,Qe(J),$e(([X,me])=>me!==0)),()=>{Ke(de,!1)}),pt(he(qt(w,de,_,L,J,M),$e(([X,me,je,Ne,,Me])=>X&&!me&&je.height!==0&&Ne.height!==0&&!Me)),([,,,,X])=>{Ke(M,!0),$f(1,()=>{Ke(H,X)}),sr(he(h),()=>{Ke(a,[0,0]),Ke(de,!0)})}),Le(he(I,$e(X=>X!=null&&X.scrollTop>0),xr(0)),C),pt(he(w,Qe(I),$e(([,X])=>X!=null)),([,X])=>{X&&(Ke(L,X.viewport),Ke(_,X.item),Ke($,X.gap),X.scrollTop>0&&(Ke(F,!0),sr(he(h,Wa(1)),me=>{Ke(F,!1)}),Ke(x,{top:X.scrollTop})))}),Le(he(L,we(({height:X})=>X)),y),Le(he(qt(Ie(L,To),Ie(_,To),Ie($,(X,me)=>X!==void 0&&X.column===me.column&&X.row===me.row),Ie(h)),we(([X,me,je,Ne])=>({gap:je,item:me,scrollTop:Ne,viewport:X}))),D),Le(he(qt(Ie(P),i,Ie($,Aw),Ie(_,To),Ie(L,To),Ie(ee),Ie(C),Ie(F),Ie(de),Ie(J)),$e(([,,,,,,,X])=>!X),we(([X,[me,je],Ne,Me,Fe,Ue,De,,Ge,ft])=>{const{column:oe,row:ve}=Ne,{height:ye,width:be}=Me,{width:Ee}=Fe;if(De===0&&(X===0||Ee===0))return Og;if(be===0){const Xe=Uf(ft,X),kt=Xe+Math.max(De-1,0);return Rw($g(Xe,kt,Ue))}const qe=zy(Ee,be,oe);let He,jt;Ge?me===0&&je===0&&De>0?(He=0,jt=De-1):(He=qe*qo((me+ve)/(ye+ve)),jt=qe*Bg((je+ve)/(ye+ve))-1,jt=Id(X-1,Ws(jt,qe-1)),He=Id(jt,Ws(0,He))):(He=0,jt=-1);const Dt=$g(He,jt,Ue),{bottom:St,top:At}=Ug(Fe,Ne,Me,Dt),xe=Bg(X/qe),Ze=xe*ye+(xe-1)*ve-St;return{bottom:St,itemHeight:ye,items:Dt,itemWidth:be,offsetBottom:Ze,offsetTop:At,top:At}})),O),Le(he(ee,$e(X=>X!==null),we(X=>X.length)),P),Le(he(qt(L,_,O,$),$e(([X,me,{items:je}])=>je.length>0&&me.height!==0&&X.height!==0),we(([X,me,{items:je},Ne])=>{const{bottom:Me,top:Fe}=Ug(X,Ne,me,je);return[Fe,Me]}),Tt(Js)),a);const K=ge(!1);Le(he(h,Qe(K),we(([X,me])=>me||X!==0)),K);const Q=$n(he(qt(O,P),$e(([{items:X}])=>X.length>0),Qe(K),$e(([[X,me],je])=>{const Ne=X.items[X.items.length-1].index===me-1;return(je||X.bottom>0&&X.itemHeight>0&&X.offsetBottom===0&&X.items.length===me)&&Ne}),we(([[,X]])=>X-1),Tt())),ce=$n(he(Ie(O),$e(({items:X})=>X.length>0&&X[0].index===0),xr(0),Tt())),Z=$n(he(Ie(O),Qe(F),$e(([{items:X},me])=>X.length>0&&!me),we(([{items:X}])=>({endIndex:X[X.length-1].index,startIndex:X[0].index})),Tt(dy),Ur(0)));Le(Z,S.scrollSeekRangeChanged),Le(he(H,Qe(L,_,P,$),we(([X,me,je,Ne,Me])=>{const Fe=xy(X),{align:Ue,behavior:De,offset:Ge}=Fe;let ft=Fe.index;ft==="LAST"&&(ft=Ne-1),ft=Ws(0,ft,Id(Ne-1,ft));let oe=gf(me,Me,je,ft);return Ue==="end"?oe=Ig(oe-me.height+je.height):Ue==="center"&&(oe=Ig(oe-me.height/2+je.height/2)),Ge!==void 0&&Ge!==0&&(oe+=Ge),{behavior:De,top:oe}})),x);const ie=pn(he(O,we(X=>X.offsetBottom+X.bottom)),0);return Le(he(B,we(X=>({height:X.visibleHeight,width:X.visibleWidth}))),L),{customScrollParent:k,data:ee,deviation:q,footerHeight:c,gap:$,headerHeight:u,increaseViewportBy:t,initialItemCount:C,itemDimensions:_,overscan:s,restoreStateFrom:I,scrollBy:d,scrollContainerState:f,scrollHeight:W,scrollTo:x,scrollToIndex:H,scrollTop:h,smoothScrollTargetReached:v,totalCount:P,useWindowScroll:N,viewportDimensions:L,windowScrollContainerState:T,windowScrollTo:A,windowViewportRect:B,...S,gridState:O,horizontalDirection:U,initialTopMostItemIndex:J,totalListHeight:ie,...b,endReached:Q,propsReady:E,rangeChanged:Z,startReached:ce,stateChanged:D,stateRestoreInProgress:F,...z}},Rt(Hf,yn,oi,Sy,Sa,Pf,ja));function zy(t,a,s){return Ws(1,qo((t+s)/(qo(a)+s)))}function Ug(t,a,s,i){const{height:c}=s;if(c===void 0||i.length===0)return{bottom:0,top:0};const u=gf(t,a,s,i[0].index);return{bottom:gf(t,a,s,i[i.length-1].index)+c,top:u}}function gf(t,a,s,i){const c=zy(t.width,s.width,a.column),u=qo(i/c),d=u*s.height+Ws(0,u-1)*a.row;return d>0?d+a.row:d}const Mw=ut(()=>{const t=ge(y=>`Item ${y}`),a=ge({}),s=ge(null),i=ge("virtuoso-grid-item"),c=ge("virtuoso-grid-list"),u=ge(Ff),d=ge("div"),f=ge(Gl),x=(y,b=null)=>pn(he(a,we(S=>S[y]),Tt()),b),h=ge(!1),v=ge(!1);return Le(Ie(v),h),{components:a,computeItemKey:u,context:s,FooterComponent:x("Footer"),HeaderComponent:x("Header"),headerFooterTag:d,itemClassName:i,ItemComponent:x("Item","div"),itemContent:t,listClassName:c,ListComponent:x("List","div"),readyStateChanged:h,reportReadyState:v,ScrollerComponent:x("Scroller","div"),scrollerRef:f,ScrollSeekPlaceholder:x("ScrollSeekPlaceholder","div")}}),zw=ut(([t,a])=>({...t,...a}),Rt(Lw,Mw)),Dw=Ae.memo(function(){const t=Mt("gridState"),a=Mt("listClassName"),s=Mt("itemClassName"),i=Mt("itemContent"),c=Mt("computeItemKey"),u=Mt("isSeeking"),d=tr("scrollHeight"),f=Mt("ItemComponent"),x=Mt("ListComponent"),h=Mt("ScrollSeekPlaceholder"),v=Mt("context"),y=tr("itemDimensions"),b=tr("gap"),S=Mt("log"),w=Mt("stateRestoreInProgress"),E=tr("reportReadyState"),k=Ka(Ae.useMemo(()=>N=>{const T=N.parentElement.parentElement.scrollHeight;d(T);const A=N.firstChild;if(A!==null){const{height:B,width:z}=A.getBoundingClientRect();y({height:B,width:z})}b({column:Hg("column-gap",getComputedStyle(N).columnGap,S),row:Hg("row-gap",getComputedStyle(N).rowGap,S)})},[d,y,b,S]),!0,!1);return Ty(()=>{t.itemHeight>0&&t.itemWidth>0&&E(!0)},[t]),w?null:r.jsx(x,{className:a,ref:k,...fn(x,v),"data-testid":"virtuoso-item-list",style:{paddingBottom:t.offsetBottom,paddingTop:t.offsetTop},children:t.items.map(N=>{const T=c(N.index,N.data,v);return u?r.jsx(h,{...fn(h,v),height:t.itemHeight,index:N.index,width:t.itemWidth},T):m.createElement(f,{...fn(f,v),className:s,"data-index":N.index,key:T},i(N.index,N.data,v))})})}),_w=Ae.memo(function(){const t=Mt("HeaderComponent"),a=tr("headerHeight"),s=Mt("headerFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,!1),c=Mt("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null}),Ow=Ae.memo(function(){const t=Mt("FooterComponent"),a=tr("footerHeight"),s=Mt("headerFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,!1),c=Mt("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null}),Bw=({children:t})=>{const a=Ae.useContext(Ny),s=tr("itemDimensions"),i=tr("viewportDimensions"),c=Ka(Ae.useMemo(()=>u=>{i(u.getBoundingClientRect())},[i]),!0,!1);return Ae.useEffect(()=>{a&&(i({height:a.viewportHeight,width:a.viewportWidth}),s({height:a.itemHeight,width:a.itemWidth}))},[a,i,s]),r.jsx("div",{ref:c,style:oc(!1),children:t})},Iw=({children:t})=>{const a=Ae.useContext(Ny),s=tr("windowViewportRect"),i=tr("itemDimensions"),c=Mt("customScrollParent"),u=ly(s,c,!1);return Ae.useEffect(()=>{a&&(i({height:a.itemHeight,width:a.itemWidth}),s({listHeight:0,offsetTop:0,visibleHeight:a.viewportHeight,visibleWidth:a.viewportWidth}))},[a,s,i]),r.jsx("div",{ref:u,style:oc(!1),children:t})},$w=Ae.memo(function({...t}){const a=Mt("useWindowScroll"),s=Mt("customScrollParent"),i=s||a?Hw:Uw,c=s||a?Iw:Bw,u=Mt("context");return r.jsx(i,{...t,...fn(i,u),children:r.jsxs(c,{children:[r.jsx(_w,{}),r.jsx(Dw,{}),r.jsx(Ow,{})]})})}),{useEmitter:Dy,useEmitterValue:Mt,usePublisher:tr}=Cy(zw,{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"}},$w),Uw=Ly({useEmitter:Dy,useEmitterValue:Mt,usePublisher:tr}),Hw=My({useEmitter:Dy,useEmitterValue:Mt,usePublisher:tr});function Hg(t,a,s){return a!=="normal"&&(a==null?void 0:a.endsWith("px"))!==!0&&s(`${t} was not resolved to pixel value correctly`,a,Qt.WARN),a==="normal"?0:parseInt(a??"0",10)}const Pw={source:"vskill-sidebar-own-collapsed",installed:"vskill-sidebar-installed-collapsed"},_y={source:"Own",installed:"Installed"};function Vw(t){try{const a=localStorage.getItem(t);if(a!=null)return a==="true"}catch{}try{if(typeof sessionStorage<"u"){const a=sessionStorage.getItem(t);if(a!=null)return a==="true"}}catch{}return!1}function Fw(t,a){const s=a?"true":"false";try{localStorage.setItem(t,s)}catch{}try{typeof sessionStorage<"u"&&sessionStorage.setItem(t,s)}catch{}}function Pg({origin:t,count:a,filteredCount:s,updateCount:i,children:c}){const u=Pw[t],[d,f]=m.useState(()=>Vw(u)),x=m.useCallback(()=>{f(b=>{const S=!b;return Fw(u,S),S})},[u]),h=_y[t],v=`sidebar-section-${t}-header`,y=`sidebar-section-${t}-group`;return r.jsxs("section",{"aria-labelledby":v,style:{display:"flex",flexDirection:"column",minHeight:0},children:[r.jsxs("button",{id:v,type:"button","data-testid":"sidebar-section-header","aria-expanded":!d,"aria-controls":y,onClick:x,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:[r.jsx(Ww,{collapsed:d}),r.jsx("h2",{"aria-level":2,style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-primary)",margin:0},children:h}),r.jsx("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:s!=null&&s!==a?`(${s} of ${a})`:`(${a})`}),i!=null&&i>0&&r.jsx(Gw,{origin:t,updateCount:i})]}),!d&&r.jsx("div",{id:y,role:"group","aria-labelledby":v,style:{display:"flex",flexDirection:"column",minHeight:0},children:c})]})}function Gw({origin:t,updateCount:a}){const[s,i]=m.useState(!1),c=_y[t].toLowerCase(),u=`${a} updates available in ${c} section, view all`;return r.jsxs("span",{role:"link",tabIndex:0,"data-testid":"sidebar-section-update-chip","aria-label":u,onClick:d=>{d.stopPropagation(),window.location.hash="#/updates"},onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),d.stopPropagation(),window.location.hash="#/updates")},onFocus:()=>i(!0),onBlur:()=>i(!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:s?"2px solid var(--border-focus)":"none",outlineOffset:2},children:[a," updates",r.jsx("span",{"aria-hidden":"true",style:{fontSize:9,marginLeft:2},children:"▾"})]})}function Ww({collapsed:t}){return r.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:t?"rotate(0deg)":"rotate(90deg)",transition:"transform var(--duration-fast, 120ms) var(--ease-standard, ease)",flexShrink:0},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})}function Wf(t,a){const s=a.trim().toLowerCase();return s?t.skill.toLowerCase().includes(s)||t.plugin.toLowerCase().includes(s)||t.dir.toLowerCase().includes(s):!0}function qw({value:t,onChange:a,placeholder:s="Filter skills…",validationPattern:i,validationMessage:c="Invalid filter expression"}){const u=m.useRef(null),d=m.useId(),f=!!i&&t.trim()!==""&&!i.test(t);return m.useEffect(()=>{function x(h){var b;if(h.key!=="/")return;const v=h.target;if(!v)return;const y=v.tagName;y==="INPUT"||y==="TEXTAREA"||v.isContentEditable||(h.preventDefault(),(b=u.current)==null||b.focus())}return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]),r.jsxs("div",{role:"search",style:{display:"flex",alignItems:"center",gap:6,padding:"6px 12px",borderBottom:"1px solid var(--border-default)"},children:[r.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:[r.jsx("circle",{cx:"11",cy:"11",r:"8"}),r.jsx("path",{d:"M21 21l-4.35-4.35"})]}),r.jsx("input",{ref:u,type:"search","aria-label":"Filter skills","aria-invalid":f?!0:void 0,"aria-describedby":f?d:void 0,value:t,placeholder:s,onChange:x=>a(x.currentTarget.value),onKeyDown:x=>{x.key==="Escape"&&(a(""),x.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"}}),f&&r.jsx("span",{id:d,role:"alert","aria-live":"polite",style:{fontFamily:"var(--font-sans)",fontSize:10,color:"var(--text-error, #B42318)",marginLeft:4,whiteSpace:"nowrap"},children:c}),r.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:t?"none":"inline-block"},children:"/"})]})}function Yw({target:t}){const a=typeof t=="string"&&t.length>0,s=a?`symlinked → ${t}`:"symlinked — cycle detected or target unresolved",i=a?`symlinked from ${t}`:"symlinked, target unresolved";return r.jsx("span",{"data-testid":"symlink-chip",role:"img","aria-label":i,title:s,tabIndex:0,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,borderRadius:3,color:"var(--text-secondary)",flexShrink:0},children:r.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:[r.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"}),r.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 Kw({skill:t}){if(!t.updateAvailable)return null;const a=t.currentVersion??"",s=t.latestVersion,i=s?`Update available: ${a} → ${s}`.trim():"Update available";return r.jsx("span",{"data-testid":"skill-row-update-glyph",title:i,"aria-label":"Update available",style:{color:"var(--color-own)",display:"inline-flex",flexShrink:0},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 19V5"}),r.jsx("path",{d:"M5 12l7-7 7 7"})]})})}function Xw({skillId:t,trackedForUpdates:a}){let s=null;try{s=m.useContext(Wv)}catch{s=null}const i=s==null?void 0:s.updatesById.get(t);if(i){const c=`Update available → ${i.version}${i.diffSummary?` — ${i.diffSummary}`:""}`;return r.jsx("span",{"data-testid":"update-chip-update-dot","aria-label":`Update available: ${i.version}`,title:c,style:{display:"inline-block",width:8,height:8,borderRadius:999,background:"var(--color-accent, #2563eb)",flexShrink:0}})}return a?null:r.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 Qw(t,a,s){if(!(!t||t==="frontmatter"))return t==="plugin"?`Inherited from ${s&&s.trim()!==""?s:"plugin"} plugin v${a}`:t==="registry"?"Inherited from registry":"No version declared"}function ci(t){const{version:a,showPrefix:s=!0,size:i="md",source:c,pluginName:u}=t,d=typeof a=="string"?a.trim():"",f=d===""||d==="0.0.0"?"1.0.0":d,x=s&&!f.startsWith("v")?`v${f}`:f,h=i==="sm"?10:12,v=i==="sm"?1:2,y=i==="sm"?5:8,b=c==="registry"||c==="plugin",S=Qw(c,f,u),w=t.title??S,E={display:"inline-flex",alignItems:"center",padding:`${v}px ${y}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:h,fontVariantNumeric:"tabular-nums",lineHeight:1.2,whiteSpace:"nowrap",flexShrink:0};return b&&(E.fontStyle="italic"),r.jsx("span",{"data-testid":t["data-testid"]??"version-badge","data-version":f,"data-version-source":c,title:w,style:E,children:x})}function Zw({skill:t,isSelected:a,onSelect:s,onContextMenu:i,dirty:c}){const u=t.origin==="installed"?"var(--status-installed)":"var(--status-own)";return r.jsxs("button",{type:"button",onClick:s,onContextMenu:i?d=>{d.preventDefault(),i(d,t)}:void 0,"aria-current":a?"true":void 0,"aria-selected":!!a,"data-testid":"skill-row","data-selected":a,"data-origin":t.origin,"data-skill-id":`${t.plugin}/${t.skill}`,style:{display:"flex",alignItems:"center",gap:8,width:"100%",height:36,padding:"0 12px 0 14px",background:a?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent",boxShadow:a?"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:[r.jsx("span",{"aria-hidden":"true","aria-label":t.updateAvailable?"Update available":void 0,title:t.updateAvailable?`Update available${t.latestVersion?` → ${t.latestVersion}`:""}`:void 0,style:{width:t.updateAvailable?10:6,height:t.updateAvailable?10:6,borderRadius:"50%",background:u,display:"inline-block",flexShrink:0,boxShadow:t.updateAvailable?"0 0 0 2px var(--color-own, #d97706)":"none",transition:"box-shadow 180ms ease, width 180ms ease, height 180ms ease"}}),r.jsx("span",{title:t.skill,style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.skill}),c&&r.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)"}}),r.jsx(ci,{version:t.resolvedVersion??t.version??"1.0.0",source:t.versionSource??(t.version?"frontmatter":"default"),pluginName:t.pluginName??null,size:"sm",showPrefix:!1,"data-testid":"skill-row-version"}),t.isSymlink&&r.jsx(Yw,{target:t.symlinkTarget??null}),r.jsx(Kw,{skill:t}),r.jsx(Xw,{skillId:`${t.plugin}/${t.skill}`,trackedForUpdates:t.trackedForUpdates??!0})]})}const qs=m.memo(Zw);function Jw({plugin:t,skills:a,selectedKey:s,onSelect:i,onContextMenu:c,dirtySkillIds:u}){var v;const d=[...a].sort((y,b)=>y.skill.localeCompare(b.skill)),f=(v=a[0])==null?void 0:v.pluginDisplay,x=t.replace(/^\./,"").toLowerCase(),h=!!f&&f.toLowerCase()!==x;return r.jsxs("div",{role:"group","aria-label":`${t} (${a.length})`,children:[r.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:8,padding:"8px 12px 4px 14px"},children:[r.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:t,children:t}),r.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",a.length,")"]}),h&&r.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:f,children:f})]}),r.jsx("div",{role:"list",children:d.map(y=>{const b=!!s&&s.plugin===y.plugin&&s.skill===y.skill;return r.jsx("div",{role:"listitem",children:r.jsx(qs,{skill:y,isSelected:b,onSelect:()=>i(y),onContextMenu:c,dirty:u==null?void 0:u.has(`${y.plugin}/${y.skill}`)})},`${y.plugin}/${y.skill}`)})})]})}function eC(t,a){if(!t||typeof window>"u")return a;try{const s=window.localStorage.getItem(t);return s===null?a:s==="true"}catch{return a}}function $d({skills:t,pluginName:a,initialCollapsed:s=!1,persistKey:i,renderSkill:c,headerActionSlot:u,forceOpen:d=!1}){var S;const f=a??((S=t[0])==null?void 0:S.pluginName)??"unknown-plugin",[x,h]=m.useState(()=>eC(i,s)),v=d?!1:x,y=m.useCallback(()=>{h(w=>{const E=!w;if(i&&typeof window<"u")try{window.localStorage.setItem(i,String(E))}catch{}return E})},[i]),b=v?"▸":"▾";return r.jsxs("div",{"data-vskill-plugin-tree":f,role:"group","aria-label":`${f} (${t.length})`,children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",paddingRight:6},children:[r.jsxs("button",{type:"button",onClick:y,"aria-expanded":!v,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:[r.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:b}),r.jsx("span",{className:"vskill-plugin-name",style:{fontFamily:"var(--font-mono)"},children:f}),r.jsxs("span",{className:"vskill-plugin-count tabular-nums",style:{marginLeft:"auto",fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-mono)"},children:["(",t.length,")"]})]}),u&&r.jsx("div",{style:{display:"inline-flex",alignItems:"center",flexShrink:0},children:u})]}),!v&&r.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:t.map(w=>r.jsx("div",{"data-vskill-plugin-skill":w.pluginNamespace??w.skill,children:c(w)},`${w.pluginNamespace??w.skill}`))})]})}function Vo({open:t,title:a,body:s,confirmLabel:i="Confirm",cancelLabel:c="Cancel",variant:u="default",onConfirm:d,onCancel:f}){const x=m.useRef(null),h=m.useRef(null),v=m.useRef(null);if(m.useEffect(()=>{if(t)return v.current=document.activeElement??null,requestAnimationFrame(()=>{var w;(w=h.current)==null||w.focus()}),()=>{var w,E;(E=(w=v.current)==null?void 0:w.focus)==null||E.call(w),v.current=null}},[t]),m.useEffect(()=>{if(!t)return;function w(E){if(E.key==="Escape"){E.preventDefault(),f();return}if(E.key==="Tab"&&x.current){const k=x.current.querySelectorAll("button:not([disabled])");if(k.length===0)return;const N=k[0],T=k[k.length-1];E.shiftKey&&document.activeElement===N?(E.preventDefault(),T.focus()):!E.shiftKey&&document.activeElement===T&&(E.preventDefault(),N.focus())}}return window.addEventListener("keydown",w,!0),()=>window.removeEventListener("keydown",w,!0)},[t,f]),!t)return null;const y="confirm-dialog-title",b="confirm-dialog-body",S=u==="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 r.jsx("div",{"data-testid":"confirm-dialog-overlay",onMouseDown:w=>{w.target===w.currentTarget&&f()},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:100},children:r.jsxs("div",{ref:x,role:"alertdialog","aria-modal":"true","aria-labelledby":y,"aria-describedby":b,"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:[r.jsx("h2",{id:y,style:{margin:0,fontSize:16,fontWeight:600,marginBottom:8},children:a}),r.jsx("p",{id:b,style:{margin:0,fontSize:13,color:"var(--text-secondary)",marginBottom:16,lineHeight:1.5},children:s}),r.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8},children:[r.jsx("button",{ref:h,type:"button","data-testid":"confirm-dialog-cancel",onClick:f,style:{padding:"6px 14px",borderRadius:6,cursor:"pointer",background:"transparent",color:"var(--text-primary)",border:"1px solid var(--border-default)",fontSize:13},children:c}),r.jsx("button",{type:"button","data-testid":"confirm-dialog-confirm",onClick:d,style:{padding:"6px 14px",borderRadius:6,cursor:"pointer",fontSize:13,...S},children:i})]})]})})}function tC(t){const a=(typeof navigator<"u"?navigator.platform:"").toLowerCase();return a.includes("mac")?"system Trash":a.includes("win")?"Recycle Bin":"Trash"}function Ud(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function nC({pluginName:t,enabled:a,onAfterAction:s}){const[i,c]=m.useState(!1),[u,d]=m.useState(null),[f,x]=m.useState(null),[h,v]=m.useState(!1),y=m.useRef(null);m.useEffect(()=>{if(!i)return;function w(E){y.current&&!y.current.contains(E.target)&&c(!1)}return document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[i]);async function b(w){d(w),x(null);try{const E=await fetch(`/api/plugins/${encodeURIComponent(t)}/${w}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),k=await E.json().catch(()=>({}));if(!E.ok||!k.ok){const N=k.error??`${w} failed (${E.status})`;x(N),w==="uninstall"&&Ud(`Failed to uninstall ${t}: ${N}`,"error");return}if(w==="uninstall"){const N=k.fallback==="orphan-cache-removed"?`Removed orphaned ${t}`:`Uninstalled ${t}`;Ud(N,"success")}In("skills"),ty(),s==null||s(),c(!1)}catch(E){const k=E instanceof Error?E.message:String(E);x(k),w==="uninstall"&&Ud(`Failed to uninstall ${t}: ${k}`,"error")}finally{d(null)}}function S(){v(!0)}return r.jsxs("div",{ref:y,style:{position:"relative",display:"inline-flex"},children:[r.jsx("button",{type:"button","aria-label":`Manage ${t}`,title:`Manage ${t}`,onClick:w=>{w.stopPropagation(),c(E=>!E)},"data-vskill-plugin-action-trigger":t,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:22,height:22,padding:0,marginLeft:4,border:"none",background:i?"var(--surface-2, rgba(0,0,0,0.08))":"transparent",color:"var(--text-tertiary)",borderRadius:4,cursor:"pointer",fontSize:14,lineHeight:1},onMouseEnter:w=>{w.currentTarget.style.color="var(--text-primary)",w.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.06))"},onMouseLeave:w=>{w.currentTarget.style.color="var(--text-tertiary)",w.currentTarget.style.background=i?"var(--surface-2, rgba(0,0,0,0.08))":"transparent"},children:"⋯"}),i&&r.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:[a?r.jsx(Hd,{onClick:()=>void b("disable"),disabled:u!==null,busy:u==="disable",label:"Disable",hint:"Keep installed, turn off"}):r.jsx(Hd,{onClick:()=>void b("enable"),disabled:u!==null,busy:u==="enable",label:"Enable",hint:"Activate plugin"}),r.jsx(Hd,{onClick:S,disabled:u!==null,busy:u==="uninstall",label:"Uninstall",hint:"Remove plugin + skills",danger:!0}),f&&r.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:f})]}),r.jsx(Vo,{open:h,title:`Uninstall ${t}?`,body:`This removes the ${t} plugin and all of its skills. You can reinstall it later from the marketplace.`,confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onCancel:()=>{v(!1),c(!1)},onConfirm:()=>{v(!1),b("uninstall")}})]})}function Hd({onClick:t,disabled:a,busy:s,label:i,hint:c,danger:u}){return r.jsxs("button",{type:"button",onClick:d=>{d.stopPropagation(),t()},disabled:a,role:"menuitem",style:{display:"block",width:"100%",padding:"6px 10px",textAlign:"left",border:"none",background:"transparent",borderRadius:4,cursor:a?"not-allowed":"pointer",color:u?"var(--color-error, #b91c1c)":"var(--text-primary)",opacity:a&&!s?.5:1,fontFamily:"inherit"},onMouseEnter:d=>{a||(d.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.05))")},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:[r.jsx("div",{style:{fontSize:12,fontWeight:500},children:s?`${i}…`:i}),r.jsx("div",{style:{fontSize:10,color:"var(--text-tertiary)"},children:c})]})}const rC=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function aC({anchorSkillDir:t,candidateLabel:a,initialName:s,initialDescription:i,onConverted:c,onCancel:u}){const[d,f]=m.useState(s),[x,h]=m.useState(i??""),[v,y]=m.useState(!1),[b,S]=m.useState(null),[w,E]=m.useState(null),k=rC.test(d),N=v||!k,T=m.useCallback(async A=>{if(A.preventDefault(),!N){y(!0),S(null),E(null);try{const B=await ke.convertToPlugin({anchorSkillDir:t,pluginName:d.trim(),description:x.trim()});c({pluginDir:B.pluginDir,manifestPath:B.manifestPath,validation:B.validation})}catch(B){if(B instanceof Ga){S(B.message);const z=B.details;z&&typeof z.stderr=="string"&&E(z.stderr)}else S(B instanceof Error?B.message:String(B));y(!1)}}},[N,t,d,x,c]);return r.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:A=>{A.target===A.currentTarget&&!v&&u()},children:r.jsxs("form",{onSubmit:T,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:[r.jsxs("h2",{id:"vskill-convert-dialog-title",style:{margin:0,fontSize:16,fontWeight:600},children:["Convert ",r.jsxs("span",{style:{fontFamily:"var(--font-mono)"},children:[a,"/"]})," to a plugin"]}),r.jsxs("p",{style:{marginTop:8,marginBottom:16,fontSize:13,color:"var(--text-secondary)"},children:["Writes ",r.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:".claude-plugin/plugin.json"})," into this folder and validates it via ",r.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:"claude plugin validate"}),". The skills already on disk will appear nested under the new plugin."]}),r.jsx("label",{style:{display:"block",fontSize:12,fontWeight:500,marginBottom:4},children:"Plugin name"}),r.jsx("input",{type:"text",value:d,onChange:A=>f(A.target.value),disabled:v,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}}),!k&&r.jsx("div",{style:{fontSize:11,color:"var(--color-error, #c00)",marginTop:4},children:"Must be kebab-case (lowercase letters, digits, hyphens; 2–64 chars)."}),r.jsx("label",{style:{display:"block",fontSize:12,fontWeight:500,marginTop:12,marginBottom:4},children:"Description"}),r.jsx("input",{type:"text",value:x,onChange:A=>h(A.target.value),disabled:v,style:{width:"100%",padding:"6px 8px",fontSize:13,boxSizing:"border-box",border:"1px solid var(--border-subtle)",borderRadius:4}}),b&&r.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:[r.jsx("div",{style:{fontWeight:500},children:b}),w&&r.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:w})]}),r.jsxs("div",{style:{marginTop:16,display:"flex",justifyContent:"flex-end",gap:8},children:[r.jsx("button",{type:"button",onClick:u,disabled:v,style:{padding:"6px 12px",fontSize:13,background:"transparent",border:"1px solid var(--border-subtle)",borderRadius:4,cursor:v?"not-allowed":"pointer"},children:"Cancel"}),r.jsx("button",{type:"submit",disabled:N,style:{padding:"6px 12px",fontSize:13,background:"var(--color-accent, #2b6cb0)",color:"white",border:"none",borderRadius:4,cursor:N?"not-allowed":"pointer",opacity:N?.5:1},children:v?"Converting…":"Convert"})]})]})})}function Vg({name:t,count:a,className:s,variant:i,collapsed:c,onToggle:u,action:d}){const f=i==="authoring"?"var(--color-own, #f59e0b)":"var(--color-accent, #2f6f8f)",x=i==="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))",h=typeof u=="function",v={position:"sticky",top:0,zIndex:4,backdropFilter:"saturate(1.4) blur(10px)",WebkitBackdropFilter:"saturate(1.4) blur(10px)",background:x,borderLeft:`3px solid ${f}`,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:h?"pointer":"default",border:"none",textAlign:"left"},y=c?"▸":"▾",b=r.jsxs(r.Fragment,{children:[h&&r.jsx("span",{"aria-hidden":!0,style:{fontSize:15,fontWeight:700,color:f,width:16,display:"inline-block",textAlign:"center",letterSpacing:0,textTransform:"none"},children:y}),r.jsx("span",{className:"vskill-group-header-name",children:t}),r.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:["(",a,")"]}),d&&r.jsx("span",{style:{marginLeft:"auto"},children:r.jsx(lC,{label:d.label,title:d.title,icon:d.icon,onClick:d.onClick,accent:f})})]});return h?r.jsx("button",{type:"button","data-vskill-group-header":t,className:["vskill-group-header select-none",s??""].join(" ").trim(),style:v,onClick:()=>u(!c),"aria-expanded":!c,children:b}):r.jsx("div",{"data-vskill-group-header":t,role:"heading","aria-level":3,className:["vskill-group-header select-none",s??""].join(" ").trim(),style:v,children:b})}function lC({label:t,title:a,icon:s,onClick:i,accent:c}){return r.jsxs("button",{type:"button","aria-label":t,title:a??t,onClick:u=>{u.stopPropagation(),i()},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,height:22,padding:"0 7px",border:`1px solid ${c}`,background:"transparent",color:c,borderRadius:4,fontSize:10,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",cursor:"pointer",fontFamily:"inherit"},onMouseEnter:u=>{u.currentTarget.style.background=`color-mix(in oklch, ${c} 15%, transparent)`},onMouseLeave:u=>{u.currentTarget.style.background="transparent"},children:[s,t]})}function sC(){return r.jsxs("div",{"aria-hidden":"true",role:"presentation",style:{display:"flex",alignItems:"center",gap:8,height:36,padding:"0 12px 0 14px"},children:[r.jsx("span",{className:"placeholder",style:{width:6,height:6,borderRadius:"50%",flexShrink:0}}),r.jsx("span",{className:"placeholder",style:{height:10,flex:1,borderRadius:3,maxWidth:180}})]})}function iC(t){const a=t.key.split("+").map(f=>f.trim()).filter(Boolean);let s=!!t.meta,i=!!t.ctrl,c=!!t.shift,u=!!t.alt,d=t.key;if(a.length>1){for(const f of a.slice(0,-1)){const x=f.toLowerCase();x==="cmd"||x==="meta"||x==="⌘"?s=!0:x==="ctrl"||x==="control"?i=!0:x==="shift"?c=!0:(x==="alt"||x==="option")&&(u=!0)}d=a[a.length-1]}return{key:d.length===1?d.toLowerCase():d,meta:s,ctrl:i,shift:c,alt:u,allowInInputs:!!t.allowInInputs,handler:t.handler}}function oC(t){if(!t||!(t instanceof HTMLElement))return!1;const a=t.tagName;if(a==="INPUT"||a==="TEXTAREA"||t.isContentEditable)return!0;const s=t.getAttribute("contenteditable");return s!=null&&s!=="false"||t.getAttribute("role")==="textbox"}function cC(t,a){const s=!!t.metaKey,i=!!t.ctrlKey,c=!!t.shiftKey,u=!!t.altKey;return s!==a.meta||i!==a.ctrl||c!==a.shift||u!==a.alt?!1:(t.key.length===1?t.key.toLowerCase():t.key)===a.key}function vf(t,a={}){const{enabled:s=!0,target:i}=a,c=m.useRef([]),u=Array.isArray(t)?t:[t];c.current=u.map(iC),m.useEffect(()=>{if(!s)return;const d=i??(typeof window<"u"?window:void 0);if(!d)return;function f(x){const h=x,v=oC(h.target);for(const y of c.current){if(!cC(h,y))continue;const b=y.meta||y.ctrl||y.alt;if(!(v&&!y.allowInInputs&&!b)){y.handler(h);return}}}return d.addEventListener("keydown",f),()=>{d.removeEventListener("keydown",f)}},[s,i])}function Oy(){const{data:t,loading:a,error:s,revalidate:i}=qa("project-github-status",()=>ke.getProjectGitHubStatus());return{status:t,loading:a,error:s,revalidate:i}}function uC(t){if(typeof window>"u")return!1;try{return window.localStorage.getItem(`vskill-github-hint-dismissed-${t}`)==="true"}catch{return!1}}function dC({projectRoot:t}){const{status:a,loading:s}=Oy();if(s||!a||a.status==="github"||uC(t))return null;const i=a.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",c=()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:focus-publish-row"))};return r.jsx("button",{type:"button","data-testid":"sidebar-github-not-connected","aria-label":"GitHub not connected — click for help",title:i,onClick:c,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:r.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:[r.jsx("path",{d:"m2 2 20 20"}),r.jsx("path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193"}),r.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 fC=200;function pC(t){return t.scope==="own"||t.scope==="installed"||t.scope==="global"?t.scope:t.origin==="installed"?"installed":"own"}function mC(t,a){const s={availableProject:[],availablePersonal:[],availablePlugin:[],authoringProject:[],authoringPlugin:[]};for(const d of t){const f=d.scopeV2??(d.scope==="installed"?"available-project":d.scope==="global"?"available-personal":"authoring-project");f==="available-project"?s.availableProject.push(d):f==="available-personal"?s.availablePersonal.push(d):f==="available-plugin"?s.availablePlugin.push(d):f==="authoring-plugin"?s.authoringPlugin.push(d):s.authoringProject.push(d)}function i(d){const f=d.filter(v=>Wf(v,a)),x={};for(const v of f){const y=v.pluginName??v.plugin;(x[y]||(x[y]=[])).push(v)}const h=Object.entries(x).sort((v,y)=>v[0].localeCompare(y[0]));return{total:d.length,filtered:f.length,byPlugin:h}}const c=i(s.authoringProject),u=c.byPlugin.filter(([d,f])=>f.length>=2&&d.trim().length>=2).map(([d,f])=>({groupKey:d,skills:f,anchorSkillDir:f[0].dir}));return{availableProject:i(s.availableProject),availablePersonal:i(s.availablePersonal),availablePlugin:i(s.availablePlugin),authoringProject:c,authoringPlugin:i(s.authoringPlugin),authoringCandidatePlugins:u}}function hC(t,a){const s=[],i=[],c=[];for(const d of t){const f=pC(d);f==="global"?c.push(d):f==="installed"?i.push(d):s.push(d)}function u(d){var v;const f=d.filter(y=>Wf(y,a)),x={};for(const y of f)(x[v=y.plugin]||(x[v]=[])).push(y);const h=Object.entries(x).sort((y,b)=>y[0].localeCompare(b[0]));return{total:d.length,filtered:f.length,byPlugin:h}}return{own:u(s),installed:u(i),global:u(c)}}function xC(t,a){const s=[],i=[];for(const u of t)(u.origin==="installed"?i:s).push(u);function c(u){var h;const d=u.filter(v=>Wf(v,a)),f={};for(const v of d)(f[h=v.plugin]||(f[h]=[])).push(v);const x=Object.entries(f).sort((v,y)=>v[0].localeCompare(y[0]));return{total:u.length,filtered:d.length,byPlugin:x}}return{own:c(s),installed:c(i)}}function gC({skills:t,selectedKey:a,onSelect:s,isLoading:i,error:c,onRetry:u,onContextMenu:d,outdatedByOrigin:f,activeAgentId:x,outdatedByScope:h,topSlot:v,revealSkillId:y,onRevealComplete:b,dirtySkillIds:S,onSkillsChanged:w}){const[E,k]=m.useState(null),N=!!x||t.some(ie=>ie.scope!==void 0&&ie.scope!==null),T=x??"claude-cli",[A,B]=m.useState(""),z=m.useDeferredValue(A),P=m.useMemo(()=>hC(t,z),[t,z]),C=m.useMemo(()=>mC(t,z),[t,z]),O=T==="claude-code",{plugins:L}=xk(),_=O?{plugins:L??[]}:void 0,H=m.useMemo(()=>{const ie=new Map;for(const X of(_==null?void 0:_.plugins)??[]){const me=ie.get(X.name);ie.set(X.name,!!me||!!X.enabled)}return ie},[_==null?void 0:_.plugins]),[W,q]=m.useState(()=>yf(`vskill-sidebar-${T}-group-available-collapsed`)),[ee,$]=m.useState(()=>yf(`vskill-sidebar-${T}-group-authoring-collapsed`)),D=m.useCallback(ie=>{q(ie);try{window.localStorage.setItem(`vskill-sidebar-${T}-group-available-collapsed`,String(ie))}catch{}},[T]),I=m.useCallback(ie=>{$(ie);try{window.localStorage.setItem(`vskill-sidebar-${T}-group-authoring-collapsed`,String(ie))}catch{}},[T]),{own:F,installed:J}=m.useMemo(()=>xC(t,z),[t,z]),M=P.own.filtered+P.installed.filtered+P.global.filtered>=fC,U=m.useMemo(()=>{const ie=X=>{const me=[];for(const[,je]of X){const Ne=[...je].sort((Me,Fe)=>Me.skill.localeCompare(Fe.skill));me.push(...Ne)}return me};return N?[...ie(P.own.byPlugin),...ie(P.installed.byPlugin),...ie(P.global.byPlugin)]:[...ie(F.byPlugin),...ie(J.byPlugin)]},[N,P.own.byPlugin,P.installed.byPlugin,P.global.byPlugin,F.byPlugin,J.byPlugin]),K=m.useMemo(()=>a?U.findIndex(ie=>ie.plugin===a.plugin&&ie.skill===a.skill):-1,[U,a]),Q=m.useCallback(ie=>{if(U.length===0)return;const X=K<0?ie>0?0:U.length-1:Math.min(Math.max(K+ie,0),U.length-1);s(U[X])},[U,K,s]),ce=m.useMemo(()=>{if(!y)return null;const[ie,X]=y.split("/");if(!ie||!X)return null;const me=t.find(Me=>Me.plugin===ie&&Me.skill===X);if(!me)return{plugin:ie,skill:X,bucket:null,pluginName:null};const je=me.source==="plugin"?"plugin":"project",Ne=je==="plugin"?me.pluginName??ie:null;return{plugin:ie,skill:X,bucket:je,pluginName:Ne}},[y,t]),Z=m.useRef(null);return m.useEffect(()=>{if(!y){Z.current=null;return}if(Z.current===y)return;const ie=typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(y):y.replace(/["\\]/g,"\\$&"),X=document.querySelector(`[data-skill-id="${ie}"]`);X&&(Z.current=y,X.scrollIntoView({behavior:"smooth",block:"nearest"}),b==null||b())},[y,b,t]),vf([{key:"j",handler:()=>Q(1)},{key:"k",handler:()=>Q(-1)},{key:"Enter",handler:()=>{K>=0&&s(U[K])}}],{enabled:!i&&!c}),r.jsxs("div",{"data-testid":"sidebar",style:{display:"flex",flexDirection:"column",minHeight:0,height:"100%",fontFamily:"var(--font-sans)"},children:[v,r.jsx(qw,{value:A,onChange:B}),i&&r.jsx(wC,{}),!i&&c&&r.jsx(CC,{error:c,onRetry:u}),!i&&!c&&N&&r.jsxs("div",{style:{flex:1,overflowY:"auto",minHeight:0},children:[r.jsx(Vg,{name:le.scopeLabels.groupAvailable.toUpperCase(),variant:"available",collapsed:W,onToggle:D,count:C.availableProject.total+C.availablePersonal.total+C.availablePlugin.total}),!W&&r.jsxs(r.Fragment,{children:[r.jsx(Is,{label:le.scopeLabels.sourceProject,storageKey:`vskill-sidebar-${T}-available-project-collapsed`,count:C.availableProject.total,filteredCount:A?C.availableProject.filtered:null,updateCount:(h==null?void 0:h.installed)??(f==null?void 0:f.installed),headerRightSlot:O?r.jsx(dC,{projectRoot:T}):null,children:C.availableProject.filtered===0?r.jsx(Gg,{queryActive:!!A,agentId:T}):r.jsx($s,{items:C.availableProject.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})}),r.jsx(Is,{label:le.scopeLabels.sourcePersonal,storageKey:`vskill-sidebar-${T}-available-personal-collapsed`,count:C.availablePersonal.total,filteredCount:A?C.availablePersonal.filtered:null,updateCount:h==null?void 0:h.global,children:C.availablePersonal.filtered===0?r.jsx(yC,{queryActive:!!A,agentId:T}):r.jsx($s,{items:C.availablePersonal.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})}),O&&r.jsxs(Is,{label:le.scopeLabels.sourcePlugin,storageKey:`vskill-sidebar-${T}-available-plugin-collapsed`,count:C.availablePlugin.total,filteredCount:A?C.availablePlugin.filtered:null,children:[r.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:[r.jsx("span",{"aria-hidden":!0,children:"🛒"})," Browse marketplaces…"]}),C.availablePlugin.filtered===0?r.jsx(bC,{queryActive:!!A,hasInstalled:C.availablePlugin.total>0}):C.availablePlugin.byPlugin.map(([ie,X])=>r.jsx($d,{pluginName:ie,skills:X,persistKey:`vskill-plugin-available-${ie}-collapsed`,headerActionSlot:O?r.jsx(nC,{pluginName:ie,enabled:H.get(ie)??!0}):void 0,renderSkill:me=>r.jsx(qs,{skill:me,isSelected:(a==null?void 0:a.plugin)===me.plugin&&(a==null?void 0:a.skill)===me.skill,onSelect:()=>s(me),onContextMenu:d,dirty:S==null?void 0:S.has(`${me.plugin}/${me.skill}`)})},`available-${ie}`))]})]}),r.jsx(kC,{}),r.jsx(Vg,{name:le.scopeLabels.groupAuthoring.toUpperCase(),variant:"authoring",collapsed:ce?!1:ee,onToggle:I,count:C.authoringProject.total+C.authoringPlugin.total,action:{label:"New",title:"Create a new skill (standalone or plugin)",icon:r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.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"}}))}}}),(!ee||ce)&&r.jsxs(r.Fragment,{children:[r.jsx(Is,{label:le.scopeLabels.authoringSkills,storageKey:`vskill-sidebar-${T}-authoring-project-collapsed`,count:C.authoringProject.total,filteredCount:A?C.authoringProject.filtered:null,updateCount:(h==null?void 0:h.own)??(f==null?void 0:f.source),forceOpen:(ce==null?void 0:ce.bucket)==="project",children:C.authoringProject.filtered===0?r.jsx(Fg,{queryActive:!!A}):r.jsxs(r.Fragment,{children:[C.authoringCandidatePlugins.map(ie=>r.jsx($d,{pluginName:ie.groupKey,skills:ie.skills,persistKey:`vskill-candidate-plugin-${ie.groupKey}-collapsed`,headerActionSlot:r.jsx("button",{type:"button",onClick:X=>{X.stopPropagation(),k({candidateLabel:ie.groupKey,initialName:ie.groupKey,anchorSkillDir:ie.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:X=>r.jsx(qs,{skill:X,isSelected:(a==null?void 0:a.plugin)===X.plugin&&(a==null?void 0:a.skill)===X.skill,onSelect:()=>s(X),onContextMenu:d,dirty:S==null?void 0:S.has(`${X.plugin}/${X.skill}`)})},`candidate-${ie.groupKey}`)),r.jsx($s,{items:C.authoringProject.byPlugin.filter(([ie])=>!C.authoringCandidatePlugins.some(X=>X.groupKey===ie)),selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})]})}),O&&r.jsx(Is,{label:le.scopeLabels.sourcePlugin,storageKey:`vskill-sidebar-${T}-authoring-plugin-collapsed`,count:C.authoringPlugin.total,filteredCount:A?C.authoringPlugin.filtered:null,forceOpen:(ce==null?void 0:ce.bucket)==="plugin",children:C.authoringPlugin.filtered===0?r.jsx(jC,{queryActive:!!A,hasSources:C.authoringPlugin.total>0,candidates:C.authoringCandidatePlugins,onPromote:ie=>k({candidateLabel:ie.groupKey,initialName:ie.groupKey,anchorSkillDir:ie.anchorSkillDir})}):C.authoringPlugin.byPlugin.map(([ie,X])=>r.jsx($d,{pluginName:ie,skills:X,persistKey:`vskill-plugin-authoring-${ie}-collapsed`,forceOpen:(ce==null?void 0:ce.bucket)==="plugin"&&ce.pluginName===ie,renderSkill:me=>r.jsx(qs,{skill:me,isSelected:(a==null?void 0:a.plugin)===me.plugin&&(a==null?void 0:a.skill)===me.skill,onSelect:()=>s(me),onContextMenu:d,dirty:S==null?void 0:S.has(`${me.plugin}/${me.skill}`)})},`authoring-${ie}`))})]})]}),!i&&!c&&!N&&r.jsxs("div",{style:{flex:1,overflowY:"auto",minHeight:0},children:[r.jsx(Pg,{origin:"source",count:F.total,filteredCount:A?F.filtered:null,updateCount:f==null?void 0:f.source,children:F.filtered===0?r.jsx(Fg,{queryActive:!!A}):r.jsx($s,{items:F.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})}),r.jsx(SC,{}),r.jsx(Pg,{origin:"installed",count:J.total,filteredCount:A?J.filtered:null,updateCount:f==null?void 0:f.installed,children:J.filtered===0?r.jsx(Gg,{queryActive:!!A}):r.jsx($s,{items:J.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})})]}),E&&r.jsx(aC,{anchorSkillDir:E.anchorSkillDir,candidateLabel:E.candidateLabel,initialName:E.initialName,onCancel:()=>k(null),onConverted:ie=>{k(null),w==null||w(),ie.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 yf(t){if(typeof window>"u")return!1;try{return window.localStorage.getItem(t)==="true"}catch{return!1}}function Is({label:t,storageKey:a,count:s,filteredCount:i,updateCount:c,children:u,forceOpen:d=!1,headerRightSlot:f}){const[x,h]=m.useState(()=>yf(a)),v=d?!1:x,y=m.useCallback(()=>{h(S=>{const w=!S;if(typeof window<"u")try{window.localStorage.setItem(a,String(w))}catch{}return w})},[a]),b=i!=null&&i!==s?`${i} of ${s}`:String(s);return r.jsxs("section",{"data-vskill-named-scope":t,children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",width:"100%",padding:"6px 12px",gap:8},children:[r.jsxs("button",{type:"button",onClick:y,"aria-expanded":!v,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:[r.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:v?"▸":"▾"}),r.jsx("span",{style:{fontSize:12,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-primary)"},children:t}),r.jsxs("span",{style:{fontSize:11,color:"var(--text-tertiary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",b,")"]}),c!=null&&c>0&&r.jsxs("span",{style:{marginLeft:"auto",fontSize:10,color:"var(--color-own, #f59e0b)"},children:[c," update",c!==1?"s":""]})]}),f]}),!v&&r.jsx("div",{style:{paddingLeft:18},children:u})]})}function vC(t){const a=[];for(const[s,i]of t){const c=[...i].sort((u,d)=>u.skill.localeCompare(d.skill));a.push({kind:"header",plugin:s,count:c.length});for(const u of c)a.push({kind:"row",skill:u})}return a}function $s({items:t,selectedKey:a,onSelect:s,onContextMenu:i,useVirtual:c,dirtySkillIds:u}){if(c){const d=vC(t);return r.jsx("div",{"data-virtualized":"true",style:{height:420,minHeight:200},children:r.jsx(Ew,{overscan:4,totalCount:d.length,itemContent:f=>{const x=d[f];if(!x)return null;if(x.kind==="header")return r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px 4px 14px"},children:[r.jsx("span",{style:{fontSize:10,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",fontFamily:"var(--font-sans)"},children:x.plugin}),r.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",x.count,")"]})]});const h=x.skill,v=!!a&&a.plugin===h.plugin&&a.skill===h.skill;return r.jsx(qs,{skill:h,isSelected:v,onSelect:()=>s(h),onContextMenu:i,dirty:u==null?void 0:u.has(`${h.plugin}/${h.skill}`)})}})})}return r.jsx("div",{"data-virtualized":"false",children:t.map(([d,f])=>r.jsx(Jw,{plugin:d,skills:f,selectedKey:a,onSelect:s,onContextMenu:i,dirtySkillIds:u},d))})}function Fg({queryActive:t}){return t?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:"No skills yet.",body:r.jsxs(r.Fragment,{children:["Create one with ",r.jsx($l,{children:"vskill new"})," or the"," ",r.jsx("strong",{style:{color:"var(--text-primary)"},children:"New skill"})," action in the top rail."]})})}function Gg({queryActive:t,agentId:a}){return t?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:a?`No skills installed for ${a} in this project.`:"No installed skills.",body:r.jsxs(r.Fragment,{children:["Run ",r.jsx($l,{children:"vskill install <skill>"})," to add one."]})})}function yC({queryActive:t,agentId:a}){return t?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:`No global skills for ${a}.`,body:r.jsxs(r.Fragment,{children:["Run ",r.jsx($l,{children:"vskill install --global <skill>"})," to add one."]})})}function bC({queryActive:t,hasInstalled:a}){return t&&a?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:"No plugin skills installed yet.",body:r.jsxs(r.Fragment,{children:["Click ",r.jsx($l,{children:"Browse marketplaces…"})," above to add one."]})})}function jC({queryActive:t,hasSources:a,candidates:s,onPromote:i}){return t&&a?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsxs(r.Fragment,{children:[r.jsx(yr,{headline:"No plugin sources in this project.",body:r.jsxs(r.Fragment,{children:["Add ",r.jsx($l,{children:"<plugin>/.claude-plugin/plugin.json"})," to author one, or ",r.jsx($l,{children:"vskill plugin new"})," from the terminal."]})}),s&&s.length>0&&r.jsxs("div",{style:{padding:"0 14px 12px",display:"flex",flexDirection:"column",gap:6},children:[r.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary)",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:2},children:["Candidate folders (",s.length,")"]}),s.map(c=>r.jsxs("button",{type:"button",onClick:()=>i==null?void 0:i(c),title:`Promote ${c.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:[r.jsxs("span",{children:[c.groupKey,"/ ",r.jsxs("span",{style:{color:"var(--text-tertiary)"},children:["(",c.skills.length," skills)"]})]}),r.jsx("span",{style:{fontFamily:"var(--font-sans)",fontSize:11,color:"var(--text-secondary)"},children:"Promote →"})]},`promote-${c.groupKey}`))]})]})}function yr({headline:t,body:a}){return r.jsxs("div",{style:{padding:"12px 14px 16px",fontSize:12,color:"var(--text-secondary)",lineHeight:1.5},children:[r.jsx("div",{style:{fontWeight:500,color:"var(--text-primary)",marginBottom:4},children:t}),r.jsx("div",{children:a})]})}function $l({children:t}){return r.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:t})}function SC(){return r.jsx("div",{"aria-hidden":"true",style:{height:1,background:"var(--border-default)",margin:"4px 14px"}})}function kC(){return r.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 wC(){return r.jsx("div",{style:{padding:"8px 0"},children:[0,1,2,3,4,5].map(t=>r.jsx(sC,{},t))})}function CC({error:t,onRetry:a}){return r.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:[r.jsx("div",{style:{fontWeight:600,marginBottom:4},children:"Couldn't load skills."}),r.jsxs("details",{children:[r.jsx("summary",{style:{cursor:"pointer",color:"var(--text-secondary)",fontSize:11,marginBottom:4},children:EC(t)}),r.jsx("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",margin:"6px 0 0"},children:t})]}),a&&r.jsx("button",{type:"button",onClick:a,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 EC(t){const a=t.split(`
|
|
66
|
-
`)[0]??t;return a.length>80?a.slice(0,77)+"…":a}const By=240,Iy=480,$y="vskill-sidebar-width",Ys=320;function qf(t){return Number.isFinite(t)?Math.round(Math.max(By,Math.min(Iy,t))):Ys}function
|
|
67
|
-
`);T=P.pop()||"";for(const C of P)if(C.startsWith("event: "))A=C.slice(7).trim();else if(C.startsWith("data: ")){try{const O=JSON.parse(C.slice(6)),L={event:A,data:O};A==="done"?(u(!0),a(_=>[..._,L])):a(_=>[..._,L])}catch{}A=""}}}catch(w){w.name!=="AbortError"&&f(w.message)}finally{i(!1),x.current=null}},[]),v=m.useCallback(()=>{var y;(y=x.current)==null||y.abort()},[]);return{events:t,running:s,done:c,error:d,start:h,stop:v}}function
|
|
68
|
-
`);T=P.pop()||"";for(const C of P)if(C.startsWith("event: "))A=C.slice(7).trim();else if(C.startsWith("data: ")){try{const O=JSON.parse(C.slice(6)),L={event:A,data:O};a.current.onEvent(h,L)}catch{}A=""}}a.current.onDone(h)}catch(w){w.name!=="AbortError"&&a.current.onError(h,w.message)}finally{i(w=>{const E=new Set(w);return E.delete(h),E}),c.current.delete(h)}},[]),d=m.useCallback(h=>{var v;(v=c.current.get(h))==null||v.abort()},[]),f=m.useCallback(()=>{for(const h of c.current.values())h.abort()},[]),x=s.size>0;return{runningSet:s,startCase:u,stopCase:d,stopAll:f,isAnyCaseRunning:x}}const IC={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 $C(t,a){var s,i;switch(a.type){case"SET_LOADING":return{...t,loading:a.loading};case"SET_ERROR":return{...t,error:a.error};case"INIT_DATA":{const c=new Map;if(a.benchmark)for(const d of a.benchmark.cases)c.set(d.eval_id,{status:d.status,passRate:d.pass_rate,errorMessage:d.error_message||void 0,durationMs:d.durationMs,tokens:d.tokens,output:d.output,assertions:d.assertions.map(f=>({assertion_id:f.id,text:f.text,pass:f.pass,reasoning:f.reasoning}))});const u=((i=(s=a.evals)==null?void 0:s.evals[0])==null?void 0:i.id)??null;return{...t,skillContent:a.skillContent,savedContent:a.skillContent,isDirty:!1,evals:a.evals,evalsError:a.evalsError??null,latestBenchmark:a.benchmark,inlineResults:c,selectedCaseId:u,loading:!1,error:null}}case"SET_PANEL":return{...t,activePanel:a.panel};case"SET_CONTENT":return{...t,skillContent:a.content,isDirty:a.content!==t.savedContent};case"CONTENT_SAVED":return{...t,savedContent:t.skillContent,isDirty:!1};case"SET_EVALS":return{...t,evals:a.evals};case"SELECT_CASE":return{...t,selectedCaseId:a.caseId};case"CASE_RUN_START":{const c=new Map(t.caseRunStates);return c.set(a.caseId,{status:"running",startedAt:Date.now(),mode:a.mode}),{...t,caseRunStates:c,runMode:a.mode,activePanel:"run"}}case"CASE_RUN_COMPLETE":{const c=new Map(t.caseRunStates),u=c.get(a.caseId);c.set(a.caseId,{status:"complete",mode:u==null?void 0:u.mode});const d=new Map(t.inlineResults);return d.set(a.caseId,a.result),{...t,caseRunStates:c,inlineResults:d}}case"CASE_RUN_ERROR":{const c=new Map(t.caseRunStates),u=c.get(a.caseId);c.set(a.caseId,{status:"error",mode:u==null?void 0:u.mode});const d=new Map(t.inlineResults);return d.set(a.caseId,{status:"error",errorMessage:a.error,assertions:[]}),{...t,caseRunStates:c,inlineResults:d}}case"CASE_RUN_CANCEL":{const c=new Map(t.caseRunStates),u=c.get(a.caseId);return c.set(a.caseId,{status:"cancelled",mode:u==null?void 0:u.mode}),{...t,caseRunStates:c}}case"BULK_RUN_START":{const c=new Map(t.caseRunStates);for(const u of a.caseIds)c.set(u,{status:"queued",mode:a.mode});return{...t,caseRunStates:c,bulkRunActive:!0,runMode:a.mode,activePanel:"run"}}case"BULK_RUN_COMPLETE":return{...t,bulkRunActive:!1,latestBenchmark:a.benchmark??t.latestBenchmark,iterationCount:t.iterationCount+1};case"CANCEL_ALL":{const c=new Map(t.caseRunStates);for(const[u,d]of c)(d.status==="running"||d.status==="queued")&&c.set(u,{status:"cancelled"});return{...t,caseRunStates:c,bulkRunActive:!1}}case"UPDATE_INLINE_RESULT":{const c=new Map(t.inlineResults);return c.set(a.evalId,a.result),{...t,inlineResults:c}}case"OPEN_IMPROVE":return{...t,improveTarget:a.evalId,activePanel:"editor"};case"CLOSE_IMPROVE":return{...t,improveTarget:null};case"OPEN_AI_EDIT":return{...t,aiEditOpen:!0,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null};case"CLOSE_AI_EDIT":return{...t,aiEditOpen:!1,aiEditLoading:!1,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null};case"AI_EDIT_LOADING":return{...t,aiEditLoading:!0,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[]};case"AI_EDIT_PROGRESS":return{...t,aiEditProgress:[...t.aiEditProgress,a.entry]};case"AI_EDIT_RESULT":{const c=a.evalChanges??[],u=new Map;for(let d=0;d<c.length;d++)u.set(d,!0);return{...t,aiEditLoading:!1,aiEditResult:{improved:a.improved,reasoning:a.reasoning,evalChanges:c},aiEditEvalChanges:c,aiEditEvalSelections:u}}case"AI_EDIT_ERROR":return{...t,aiEditLoading:!1,aiEditError:a.message,aiEditClassifiedError:a.classified??null};case"GENERATE_EVALS_START":return{...t,generateEvalsLoading:!0,generateEvalsProgress:[],generateEvalsError:null};case"GENERATE_EVALS_PROGRESS":return{...t,generateEvalsProgress:[...t.generateEvalsProgress,a.entry]};case"GENERATE_EVALS_DONE":return{...t,generateEvalsLoading:!1,evals:a.evals};case"GENERATE_EVALS_ERROR":return{...t,generateEvalsLoading:!1,generateEvalsError:a.classified};case"TOGGLE_EVAL_CHANGE":{const c=new Map(t.aiEditEvalSelections);return c.set(a.index,!c.get(a.index)),{...t,aiEditEvalSelections:c}}case"SELECT_ALL_EVAL_CHANGES":{const c=new Map(t.aiEditEvalSelections);for(const u of c.keys())c.set(u,!0);return{...t,aiEditEvalSelections:c}}case"DESELECT_ALL_EVAL_CHANGES":{const c=new Map(t.aiEditEvalSelections);for(const u of c.keys())c.set(u,!1);return{...t,aiEditEvalSelections:c}}case"SET_EVALS_RETRY":return{...t,aiEditEvalsRetry:a.evalsFile};case"SET_REGRESSIONS":return{...t,regressions:a.regressions};case"INCREMENT_ITERATION":return{...t,iterationCount:t.iterationCount+1};case"SET_ACTIVATION_PROMPTS":{const c=a.prompts===t.activationPromptsCanonical;return{...t,activationPrompts:a.prompts,activationPromptsSource:c?t.activationPromptsSource:t.activationPromptsSource===null||t.activationPromptsSource==="skill-md"||t.activationPromptsSource==="ai-generated"?"user-typed":t.activationPromptsSource}}case"SET_PROMPTS_SOURCE":return{...t,activationPromptsSource:a.source,activationPromptsCanonical:a.canonical??t.activationPromptsCanonical};case"ACTIVATION_START":return{...t,activationRunning:!0,activationResults:[],activationSummary:null,activationError:null,activationClassifyingStatus:null,activationStartedAt:Date.now()};case"ACTIVATION_RESULT":return{...t,activationResults:[...t.activationResults,a.result]};case"ACTIVATION_DONE":return{...t,activationRunning:!1,activationSummary:a.summary,activationClassifyingStatus:null};case"ACTIVATION_CLASSIFYING":return{...t,activationClassifyingStatus:`Classifying prompt ${a.index}/${a.total}...`};case"ACTIVATION_ERROR":return{...t,activationRunning:!1,activationError:a.error,activationClassifyingStatus:null};case"ACTIVATION_RESET":return{...t,activationResults:[],activationSummary:null,activationError:null};case"ACTIVATION_TIMEOUT":return{...t,activationRunning:!1,activationError:"Activation test timed out after 120 seconds"};case"ACTIVATION_CANCEL":return{...t,activationRunning:!1};case"GENERATE_PROMPTS_START":return{...t,generatingPrompts:!0,generatingPromptsError:null};case"GENERATE_PROMPTS_DONE":return{...t,generatingPrompts:!1};case"GENERATE_PROMPTS_ERROR":return{...t,generatingPrompts:!1,generatingPromptsError:a.error};case"SAVE_TEST_CASES_START":return{...t,savingTestCases:!0,savingTestCasesError:null,savingTestCasesSuccess:null};case"SAVE_TEST_CASES_SUCCESS":return{...t,savingTestCases:!1,savingTestCasesSuccess:`Saved ${a.count} test case${a.count===1?"":"s"} to SKILL.md`,activationPromptsSource:"skill-md",activationPromptsCanonical:t.activationPrompts};case"SAVE_TEST_CASES_ERROR":return{...t,savingTestCases:!1,savingTestCasesError:a.error};case"CLEAR_SAVE_TEST_CASES_FEEDBACK":return{...t,savingTestCasesSuccess:null,savingTestCasesError:null};case"ACTIVATION_HISTORY_LOADED":return{...t,activationHistory:a.runs,activationHistoryLoading:!1};default:return t}}function UC(t,a){if(!t)return{canEdit:!1,canRun:!1};const s=t.origin==="source",i=a.exists&&a.cases.length>0;return{canEdit:s,canRun:i}}function HC(t){if(t==="unit"||t==="integration")return t}function PC(t,a){const s=a.data;if(a.event==="output_ready"&&(t.output=s.output,s.durationMs!=null&&(t.durationMs=s.durationMs),s.tokens!=null&&(t.tokens=s.tokens)),a.event==="outputs_ready"&&(t.output=s.skillOutput,s.skillDurationMs!=null&&(t.durationMs=s.skillDurationMs),s.skillTokens!=null&&(t.tokens=s.skillTokens)),a.event==="assertion_result"){const i={assertion_id:s.assertion_id,text:s.text,pass:s.pass,reasoning:s.reasoning};t.assertions.find(c=>c.assertion_id===i.assertion_id)||t.assertions.push(i)}a.event==="case_complete"&&(t.status=s.status,t.passRate=s.pass_rate,t.errorMessage=s.error_message||void 0,t.classifiedError=s.classified_error||void 0)}const Py=m.createContext(null);function bn(){const t=m.useContext(Py);if(!t)throw new Error("useWorkspace must be used within WorkspaceProvider");return t}function VC({plugin:t,skill:a,origin:s,children:i}){var ft;const c=s==="installed",{config:u}=Ya(),[d,f]=m.useReducer($C,{...IC,plugin:t,skill:a}),x=UC({origin:s},{exists:d.evals!=null,cases:((ft=d.evals)==null?void 0:ft.evals)??[]}),h=x.canEdit,v=x.canRun,y=m.useRef(new Set),b=m.useRef(new Set),S=m.useRef(new Map),w=m.useCallback((oe,ve)=>{let ye=S.current.get(oe);ye||(ye={assertions:[]},S.current.set(oe,ye)),PC(ye,ve),f({type:"UPDATE_INLINE_RESULT",evalId:oe,result:{...ye,assertions:[...ye.assertions]}})},[]),E=m.useCallback(oe=>{if(b.current.has(oe))return;b.current.add(oe);const ve=S.current.get(oe)??{assertions:[]};f({type:"CASE_RUN_COMPLETE",caseId:oe,result:{...ve,assertions:[...ve.assertions]}}),y.current.has(oe)&&(y.current.delete(oe),y.current.size===0&&ke.getLatestBenchmark(t,a).then(ye=>f({type:"BULK_RUN_COMPLETE",benchmark:ye})).catch(()=>f({type:"BULK_RUN_COMPLETE",benchmark:null})))},[t,a]),k=m.useCallback((oe,ve)=>{b.current.has(oe)||(b.current.add(oe),f({type:"CASE_RUN_ERROR",caseId:oe,error:ve}),y.current.has(oe)&&(y.current.delete(oe),y.current.size===0&&ke.getLatestBenchmark(t,a).then(ye=>f({type:"BULK_RUN_COMPLETE",benchmark:ye})).catch(()=>f({type:"BULK_RUN_COMPLETE",benchmark:null}))))},[t,a]),{startCase:N,stopCase:T,stopAll:A}=BC({onEvent:w,onDone:E,onError:k});m.useEffect(()=>()=>{A()},[A]);const B=m.useCallback(async()=>{try{const oe=await fetch(`/api/skills/${t}/${a}/activation-history`);if(!oe.ok){if(oe.status===404){f({type:"ACTIVATION_HISTORY_LOADED",runs:[]});return}return}const ve=await oe.json();f({type:"ACTIVATION_HISTORY_LOADED",runs:ve.runs||[]})}catch{}},[t,a]);m.useEffect(()=>{let oe=!1;async function ve(){try{const[ye,be,Ee]=await Promise.allSettled([ke.getSkillDetail(t,a),ke.getEvals(t,a),ke.getLatestBenchmark(t,a)]);if(oe)return;let qe=null,He=null;if(be.status==="fulfilled")qe=be.value;else{const jt=be.reason;He=(jt==null?void 0:jt.message)??"Failed to load test cases"}f({type:"INIT_DATA",skillContent:ye.status==="fulfilled"?ye.value.skillContent:"",evals:qe,evalsError:He,benchmark:Ee.status==="fulfilled"?Ee.value:null})}catch(ye){oe||f({type:"SET_ERROR",error:ye.message})}}return ve(),B(),()=>{oe=!0}},[t,a,B]);const z=m.useCallback(async oe=>{if(c)return;const ve=oe??d.skillContent;try{await ke.applyImprovement(t,a,ve),oe!==void 0&&oe!==d.skillContent&&f({type:"SET_CONTENT",content:oe}),f({type:"CONTENT_SAVED"})}catch(ye){f({type:"SET_ERROR",error:ye.message})}},[c,t,a,d.skillContent]),P=m.useCallback(async oe=>{if(!c)try{const ve=await ke.saveEvals(t,a,oe);f({type:"SET_EVALS",evals:ve})}catch(ve){f({type:"SET_ERROR",error:ve.message})}},[c,t,a]),C=m.useCallback((oe,ve="benchmark")=>{const ye=d.caseRunStates.get(oe);if((ye==null?void 0:ye.status)==="running")return;S.current.delete(oe),b.current.delete(oe),f({type:"CASE_RUN_START",caseId:oe,mode:ve});const be=ve==="comparison"?{eval_ids:[oe]}:ve==="baseline"?{mode:"baseline"}:{};if(u!=null&&u.provider&&(be.provider=u.provider),u!=null&&u.model&&(be.model=u.model),ve==="comparison"){const Ee=`/api/skills/${t}/${a}/compare`;N(oe,Ee,be)}else{const Ee=`/api/skills/${t}/${a}/benchmark/case/${oe}`;N(oe,Ee,Object.keys(be).length>0?be:void 0)}},[t,a,d.caseRunStates,N,u]),O=m.useCallback((oe="benchmark")=>{var be;const ve=((be=d.evals)==null?void 0:be.evals)??[];if(ve.length===0)return;const ye=ve.map(Ee=>Ee.id);for(const Ee of ye)S.current.delete(Ee),b.current.delete(Ee);f({type:"BULK_RUN_START",caseIds:ye,mode:oe}),y.current=new Set(ye);for(const Ee of ye){const qe=oe==="comparison"?{eval_ids:[Ee]}:oe==="baseline"?{mode:"baseline"}:{};if(u!=null&&u.provider&&(qe.provider=u.provider),u!=null&&u.model&&(qe.model=u.model),oe==="comparison")N(Ee,`/api/skills/${t}/${a}/compare`,qe);else{const He=`/api/skills/${t}/${a}/benchmark/case/${Ee}`;N(Ee,He,Object.keys(qe).length>0?qe:void 0)}}},[t,a,d.evals,N,u]),L=m.useCallback(oe=>{T(oe),f({type:"CASE_RUN_CANCEL",caseId:oe}),y.current.delete(oe),b.current.add(oe)},[T]),_=m.useCallback(()=>{A(),f({type:"CANCEL_ALL"}),y.current.clear()},[A]),H=m.useCallback(async(oe,ve)=>{f({type:"OPEN_IMPROVE",evalId:oe})},[]),W=m.useCallback(async(oe,ve)=>{try{await ke.applyImprovement(t,a,ve),f({type:"SET_CONTENT",content:ve}),f({type:"CONTENT_SAVED"}),f({type:"CLOSE_IMPROVE"}),C(oe,"benchmark")}catch(ye){f({type:"SET_ERROR",error:ye.message})}},[t,a,C]),q=Pd(),ee=m.useRef(null),$=m.useRef(0);m.useEffect(()=>{const oe=q.events;for(let ve=$.current;ve<oe.length;ve++){const ye=oe[ve],be=ye.data;if(ye.event==="progress"&&f({type:"AI_EDIT_PROGRESS",entry:{timestamp:Date.now(),phase:be.phase,message:be.message}}),ye.event==="done"){const Ee=be.improved,qe=be.reasoning,He=be.evalChanges??[];f({type:"AI_EDIT_RESULT",improved:Ee,reasoning:qe,evalChanges:He})}if(ye.event==="error"){const Ee=be;f({type:"AI_EDIT_ERROR",message:Ee.description||"Unknown error",classified:Ee})}}$.current=oe.length},[q.events]),m.useEffect(()=>{q.error&&f({type:"AI_EDIT_ERROR",message:q.error})},[q.error]),m.useEffect(()=>()=>{q.stop()},[q.stop]);const D=m.useCallback(async(oe,ve,ye)=>{c||($.current=0,f({type:"AI_EDIT_LOADING"}),ee.current=q.stop,q.start(`/api/skills/${t}/${a}/improve?sse`,{mode:"instruct",instruction:oe,content:d.skillContent,evals:d.evals??{skill_name:a,evals:[]},provider:ve,model:ye}))},[c,t,a,d.skillContent,d.evals,q]),I=m.useCallback(()=>{q.stop(),f({type:"AI_EDIT_ERROR",message:"Cancelled"})},[q]),F=m.useCallback(async()=>{const oe=d.aiEditResult;if(oe!=null&&oe.improved)try{if(await ke.applyImprovement(t,a,oe.improved),f({type:"SET_CONTENT",content:oe.improved}),f({type:"CONTENT_SAVED"}),d.aiEditEvalChanges.length>0&&Array.from(d.aiEditEvalSelections.values()).some(Boolean)){const{mergeEvalChanges:ye}=await Vl(async()=>{const{mergeEvalChanges:qe}=await import("./mergeEvalChanges-Dpbbs4d4.js");return{mergeEvalChanges:qe}},[]),be=d.evals??{skill_name:a,evals:[]},Ee=ye(be,d.aiEditEvalChanges,d.aiEditEvalSelections);try{const qe=await ke.saveEvals(t,a,Ee);f({type:"SET_EVALS",evals:qe})}catch(qe){f({type:"SET_EVALS_RETRY",evalsFile:Ee}),f({type:"SET_ERROR",error:`SKILL.md saved, but test cases failed to save: ${qe.message}. You can retry from the AI Edit panel.`});return}}f({type:"CLOSE_AI_EDIT"})}catch(ve){f({type:"SET_ERROR",error:ve.message})}},[t,a,d.aiEditResult,d.evals,d.aiEditEvalChanges,d.aiEditEvalSelections]),J=m.useCallback(()=>{f({type:"CLOSE_AI_EDIT"})},[]),de=m.useCallback(oe=>{f({type:"TOGGLE_EVAL_CHANGE",index:oe})},[]),M=m.useCallback(()=>{f({type:"SELECT_ALL_EVAL_CHANGES"})},[]),U=m.useCallback(()=>{f({type:"DESELECT_ALL_EVAL_CHANGES"})},[]),K=m.useCallback(async()=>{const oe=d.aiEditEvalsRetry;if(oe)try{const ve=await ke.saveEvals(t,a,oe);f({type:"SET_EVALS",evals:ve}),f({type:"SET_ERROR",error:null}),f({type:"CLOSE_AI_EDIT"})}catch(ve){f({type:"SET_ERROR",error:`Retry failed: ${ve.message}`})}},[t,a,d.aiEditEvalsRetry]),Q=m.useCallback(async()=>{try{const oe=await ke.getSkillDetail(t,a);f({type:"SET_CONTENT",content:oe.skillContent}),f({type:"CONTENT_SAVED"})}catch{}},[t,a]),ce=Pd(),Z=m.useRef(0);m.useEffect(()=>{const oe=ce.events;for(let ve=Z.current;ve<oe.length;ve++){const ye=oe[ve],be=ye.data;if(ye.event==="progress"&&f({type:"GENERATE_EVALS_PROGRESS",entry:{timestamp:Date.now(),phase:be.phase,message:be.message}}),ye.event==="done"){const Ee=be;ke.saveEvals(t,a,Ee).then(qe=>f({type:"GENERATE_EVALS_DONE",evals:qe})).catch(qe=>f({type:"SET_ERROR",error:qe.message}))}ye.event==="error"&&f({type:"GENERATE_EVALS_ERROR",classified:be})}Z.current=oe.length},[ce.events,t,a]),m.useEffect(()=>{ce.error&&f({type:"SET_ERROR",error:ce.error})},[ce.error]),m.useEffect(()=>()=>{ce.stop()},[ce.stop]);const ie=m.useCallback(async oe=>{if(c)return;Z.current=0,f({type:"GENERATE_EVALS_START"});const ve={};u!=null&&u.provider&&(ve.provider=u.provider),u!=null&&u.model&&(ve.model=u.model);const ye=HC(oe==null?void 0:oe.testType);ye&&(ve.testType=ye),ce.start(`/api/skills/${t}/${a}/generate-evals?sse`,Object.keys(ve).length>0?ve:void 0)},[c,t,a,ce,u]),X=Pd(),me=m.useRef(0);m.useEffect(()=>()=>{X.stop()},[X.stop]),m.useEffect(()=>{const oe=X.events;for(let ve=me.current;ve<oe.length;ve++){const ye=oe[ve];if(ye.event==="classifying"){const be=ye.data;f({type:"ACTIVATION_CLASSIFYING",index:be.index,total:be.total})}if(ye.event==="prompt_result"&&f({type:"ACTIVATION_RESULT",result:ye.data}),ye.event==="done"){je.current&&(clearTimeout(je.current),je.current=null);const be=ye.data;if(be.error)f({type:"ACTIVATION_ERROR",error:be.error});else{f({type:"ACTIVATION_DONE",summary:be});const Ee={id:`run-${Date.now()}`,timestamp:new Date().toISOString(),model:(u==null?void 0:u.model)||"unknown",provider:(u==null?void 0:u.provider)||"unknown",promptCount:be.total,summary:{precision:be.precision,recall:be.recall,reliability:be.reliability,tp:be.tp,tn:be.tn,fp:be.fp,fn:be.fn}};f({type:"ACTIVATION_HISTORY_LOADED",runs:[Ee,...d.activationHistory??[]]})}}}me.current=oe.length},[X.events,u,d.activationHistory]),m.useEffect(()=>{X.error&&(je.current&&(clearTimeout(je.current),je.current=null),f({type:"ACTIVATION_ERROR",error:X.error}))},[X.error]);const je=m.useRef(null),Ne=m.useCallback(()=>{je.current&&(clearTimeout(je.current),je.current=null),X.stop(),f({type:"ACTIVATION_CANCEL",totalPrompts:0})},[X]),Me=m.useCallback(oe=>{const ye=oe.trim().split(`
|
|
65
|
+
}`})]})}const V2="/assets/skill-studio-logo-CRyKgIrg.png";function mg(){typeof window>"u"||(window.location.hash="#/")}function F2({onHome:t}){const[a,s]=m.useState(!1),[i,c]=m.useState(!1),u=f=>{f.metaKey||f.ctrlKey||f.shiftKey||f.button!==0||(f.preventDefault(),mg(),t==null||t())},d=f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),mg(),t==null||t())};return r.jsxs("a",{href:"#/",role:"link","data-testid":"studio-logo","aria-label":"Skill Studio — home",onClick:u,onKeyDown:d,onFocus:()=>s(!0),onBlur:()=>s(!1),onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),style:{display:"inline-flex",alignItems:"center",gap:10,flexShrink:0,padding:"4px 6px",margin:"-4px -6px",borderRadius:6,textDecoration:"none",color:"inherit",cursor:"pointer",outline:a?"2px solid var(--border-focus)":"none",outlineOffset:2,background:i?"color-mix(in srgb, var(--text-primary) 4%, transparent)":"transparent",transition:"background-color var(--duration-fast, 120ms) var(--ease-standard, ease)"},children:[r.jsx("img",{src:V2,alt:"","aria-hidden":"true",width:28,height:28,style:{display:"block",objectFit:"contain",flexShrink:0}}),r.jsx("span",{style:{fontSize:13,fontWeight:600,letterSpacing:"-0.01em",color:"var(--text-primary)"},children:"Skill Studio"})]})}const hg=m.memo(function({message:a,politeness:s="polite",role:i}){const c=i??(s==="assertive"?"alert":"status");return r.jsx("div",{"aria-live":s,"aria-atomic":"true",role:c,"data-testid":"aria-live","data-politeness":s,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:a})});function G2({toast:t,onDismiss:a}){const[s,i]=m.useState(!0),c=m.useRef(null);m.useEffect(()=>(c.current=requestAnimationFrame(()=>{c.current=requestAnimationFrame(()=>i(!1))}),()=>{c.current!=null&&cancelAnimationFrame(c.current)}),[]);const u={success:"var(--status-installed)",info:"var(--text-secondary)",error:"var(--color-accent, var(--accent-surface))"};return r.jsxs("div",{role:t.severity==="error"?"alert":"status","data-testid":"toast-item","data-severity":t.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 ${u[t.severity]}`,borderRadius:6,boxShadow:"0 8px 24px rgba(0,0,0,0.12)",fontFamily:"var(--font-sans)",fontSize:12,transform:s?"translateY(8px)":"translateY(0)",opacity:s?0:1,transition:"transform var(--duration-base, 180ms) var(--ease-standard, ease), opacity var(--duration-base, 180ms) var(--ease-standard, ease)"},children:[r.jsx("span",{style:{flex:1,minWidth:0},children:t.message}),t.action&&r.jsx("button",{type:"button",onClick:()=>{t.action.onInvoke(),a(t.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:t.action.label}),r.jsx("button",{type:"button","aria-label":"Dismiss",onClick:()=>a(t.id),style:{background:"transparent",border:"none",padding:2,color:"var(--text-secondary)",cursor:"pointer",fontSize:14,lineHeight:1},children:"×"})]})}function W2({toasts:t,onDismiss:a,liveMessage:s,liveAssertiveMessage:i}){return r.jsxs(r.Fragment,{children:[r.jsx(hg,{politeness:"polite",message:s}),r.jsx(hg,{politeness:"assertive",message:i}),t.length>0&&r.jsx("div",{"data-testid":"toast-stack",style:{position:"fixed",right:16,bottom:16,display:"flex",flexDirection:"column-reverse",gap:8,zIndex:50,pointerEvents:"none"},children:t.map(c=>r.jsx("div",{style:{pointerEvents:"auto"},children:r.jsx(G2,{toast:c,onDismiss:a})},c.id))})]})}const Qv=m.createContext(null);function rc(){const t=m.useContext(Qv);if(!t)throw new Error("useToast must be used inside <ToastProvider>.");return t}function q2({children:t,maxVisible:a=4,defaultDurationMs:s=4e3}){const[i,c]=m.useState([]),[u,d]=m.useState(""),[f,x]=m.useState(""),h=m.useRef(new Map),v=m.useCallback(k=>{const N=h.current.get(k);N&&(clearTimeout(N),h.current.delete(k)),c(T=>T.filter(A=>A.id!==k))},[]),y=m.useCallback((k,N)=>{if(N<=0)return;const T=setTimeout(()=>{v(k)},N);h.current.set(k,T)},[v]),b=m.useCallback(k=>{const N=k.id??`toast-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,T={id:N,message:k.message,severity:k.severity??"info",durationMs:k.durationMs??s,action:k.action};return c(A=>[...A,T]),T.severity==="error"?x(T.message):d(T.message),y(N,T.durationMs),N},[s,y]),S=m.useCallback(()=>{for(const k of h.current.values())clearTimeout(k);h.current.clear(),c([])},[]);m.useEffect(()=>{function k(N){N.key==="Escape"&&c(T=>{if(T.length===0)return T;const A=T.slice(0,a),B=A[A.length-1],z=h.current.get(B.id);return z&&(clearTimeout(z),h.current.delete(B.id)),T.filter(P=>P.id!==B.id)})}return window.addEventListener("keydown",k),()=>window.removeEventListener("keydown",k)},[a]),m.useEffect(()=>()=>{for(const k of h.current.values())clearTimeout(k);h.current.clear()},[]);const w=i.slice(0,a),E=m.useMemo(()=>({toast:b,dismiss:v,clear:S}),[b,v,S]);return r.jsxs(Qv.Provider,{value:E,children:[t,r.jsx(W2,{toasts:w,onDismiss:v,liveMessage:u,liveAssertiveMessage:f})]})}function Y2(){const{data:t,loading:a}=qa("platform-health",async()=>{const s=await fetch("/api/platform/health");return s.ok?await s.json():{degraded:!1,reason:"platform-unreachable",statsAgeMs:0,oldestActiveAgeMs:0}},{ttl:6e4});return{data:t,loading:a}}const K2=m.lazy(()=>Vl(()=>import("./UpdateDropdown-Cy4S5Bz3.js"),__vite__mapDeps([0,1])));function X2(){const{updateCount:t,updates:a,isRefreshingUpdates:s,refreshUpdates:i,selectSkill:c,revealSkill:u,skills:d,updatesById:f,activeAgent:x}=cr(),{toast:h}=rc(),{data:v}=Y2(),y=(v==null?void 0:v.degraded)===!0,b=m.useMemo(()=>{if(!f||f.size===0)return;const P=new Map;for(const[C,O]of f)O.diffSummary&&P.set(C,O.diffSummary);return P.size>0?P:void 0},[f]),[S,w]=m.useState(!1),E=m.useRef(null),k=m.useCallback(()=>w(!1),[]),N=y?"var(--color-own)":t>0?"var(--text-primary)":"var(--text-secondary)",T=t>9?"9+":String(t),A=t===0?"No updates available":`${t} updates available, open summary`,B=y?`${A} — platform crawler degraded`:A,z=y?"Update checks paused — verified-skill.com crawler is degraded. Your submissions are queued.":void 0;return r.jsxs("span",{"data-testid":"update-bell-anchor",style:{position:"relative",display:"inline-flex"},children:[r.jsxs("button",{ref:E,type:"button","data-testid":"update-bell","aria-label":B,"aria-haspopup":"dialog","aria-expanded":S,title:z,onClick:()=>w(P=>!P),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:N,cursor:"pointer"},children:[r.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:t>0||y?1:.75,color:N},children:[r.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"}),r.jsx("path",{d:"M10 20a2 2 0 0 0 4 0"}),r.jsx("circle",{cx:"17",cy:"7",r:"2.2",fill:"currentColor",stroke:"none"})]}),t>0&&r.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:T})]}),S&&r.jsx(m.Suspense,{fallback:r.jsx("span",{"data-testid":"update-bell-fallback",children:"Loading…"}),children:r.jsx(K2,{updates:a,isRefreshing:s,diffSummariesById:b,onRefresh:()=>i(),onSelectSkill:P=>{const C=P.localSkill??P.name.split("/").pop()??"",O=P.localPlugin??"";if(u)u(O,C);else{const _=P.name.split("/"),H=_.length>=2?_[_.length-2]:_[0];c({plugin:H,skill:C,origin:"installed"})}if(!(d??[]).some(_=>_.skill===C&&(O===""||_.plugin===O))){const _=P.installLocations??[];if(_.length>0){const H=x?_.filter(q=>q.agent===x):[],W=x?_.filter(q=>q.agent!==x):_;if(H.length>0&&W.length>0){const q=W.length>=2?`Also installed under ${W.length} other locations.`:`Also installed under ${W[0].agentLabel}.`;h({severity:"info",message:q})}else{const q=_[0].agentLabel;h({severity:"info",message:`Skill installed under ${q} — switch to ${q} to view details.`})}}}k()},onViewAll:()=>{window.location.hash="#/updates",k()},onClose:k,anchorRef:E})})]})}function xg(t){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:navigate-scope",{detail:t}))}function Q2(t){return t.source==="project"?le.scopeLabels.sourceProject:t.source==="personal"?le.scopeLabels.sourcePersonal:t.source==="plugin"?le.scopeLabels.sourcePlugin:t.origin==="installed"?le.scopeLabels.sourcePersonal:le.scopeLabels.authoringSkills}function Z2(t){return t.source==="project"?"var(--status-installed)":t.source==="plugin"?"var(--color-accent-ink)":"var(--status-own)"}function J2({projectName:t,selected:a,onHome:s,projectPickerSlot:i,onRequestCreateSkill:c,findSkillsSlot:u}){const d=a?Q2(a):null,f=a?Z2(a):"var(--text-secondary)";return r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,height:"100%",width:"100%",padding:"0 16px",fontFamily:"var(--font-sans)"},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[r.jsx(F2,{onHome:s}),i?r.jsx("div",{style:{borderLeft:"1px solid var(--border-default)",paddingLeft:10,display:"flex",alignItems:"center"},children:i}):t&&r.jsx("span",{title:t,style:{fontSize:12,color:"var(--text-secondary)",borderLeft:"1px solid var(--border-default)",paddingLeft:10,maxWidth:220,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t})]}),r.jsx("nav",{"aria-label":"Breadcrumb",style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:6,fontSize:12,color:"var(--text-secondary)"},children:a&&d&&r.jsxs(r.Fragment,{children:[r.jsx(gg,{segment:"origin",onClick:()=>xg({scope:"origin",origin:a.origin}),style:{textTransform:"uppercase",letterSpacing:"0.06em",fontWeight:600,color:f},children:d}),r.jsx(vg,{}),r.jsx(gg,{segment:"plugin",onClick:()=>xg({scope:"plugin",plugin:a.plugin}),style:{fontFamily:"var(--font-mono)",fontSize:11},children:a.plugin}),r.jsx(vg,{}),r.jsx("span",{"data-breadcrumb-segment":"skill","aria-current":"page",style:{color:"var(--text-primary)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.skill})]})}),r.jsxs("div",{"data-toprail-right":"true",style:{display:"flex",alignItems:"center",gap:12,flexShrink:0},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[u,c&&r.jsxs("button",{type:"button","data-slot":"create-skill-button",onClick:c,"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:[r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"New Skill"]})]}),r.jsx("span",{"aria-hidden":"true",style:{width:1,height:18,background:"var(--border-default)"}}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx("span",{"data-slot":"agent-model-picker",style:{minWidth:200},children:r.jsx(H2,{})}),r.jsx("span",{"data-slot":"update-bell",style:{display:"inline-flex"},children:r.jsx(X2,{})})]})]})]})}function gg({segment:t,onClick:a,style:s,children:i}){return r.jsx("button",{type:"button","data-breadcrumb-segment":t,onClick:a,style:{background:"transparent",border:"none",padding:0,cursor:"pointer",color:"var(--text-secondary)",fontFamily:"inherit",...s},onMouseEnter:c=>{c.currentTarget.style.color="var(--color-accent-ink)"},onMouseLeave:c=>{const u=(s==null?void 0:s.color)??"var(--text-secondary)";c.currentTarget.style.color=u},children:i})}function vg(){return r.jsx("span",{"aria-hidden":"true",style:{color:"var(--border-default)",fontSize:10},children:"›"})}const ac="vskill-theme";function Zv(t){return t==="light"||t==="dark"||t==="auto"?t:"auto"}function ek(t,a){return t==="light"||t==="dark"?t:a?"dark":"light"}function tk(t){try{const a=t.getItem(ac);return Zv(a)}catch{return"auto"}}function nk(t,a){try{t.setItem(ac,a)}catch{}}function rk(t,a,s){t.dataset.theme=s,t.dataset.themeMode=a}function ak(t){if(!t)return!1;try{return t("(prefers-color-scheme: dark)").matches}catch{return!1}}const Jv=m.createContext(null);function lk({storage:t,matchMedia:a,target:s,children:i}){const c=t??(typeof window<"u"?window.localStorage:void 0),u=a??(typeof window<"u"?window.matchMedia.bind(window):void 0),d=s??(typeof document<"u"?document.documentElement:void 0),[f,x]=m.useState(()=>c?tk(c):"auto"),[h,v]=m.useState(()=>ak(u)),y=m.useMemo(()=>ek(f,h),[f,h]);m.useEffect(()=>{d&&rk(d,f,y)},[d,f,y]),m.useEffect(()=>{if(!u)return;const w=u("(prefers-color-scheme: dark)"),E=N=>v(N.matches);if(typeof w.addEventListener=="function")return w.addEventListener("change",E),()=>w.removeEventListener("change",E);const k=w;return k.addListener(E),()=>k.removeListener(E)},[u]),m.useEffect(()=>{if(typeof window>"u")return;const w=E=>{E.key===ac&&x(Zv(E.newValue))};return window.addEventListener("storage",w),()=>window.removeEventListener("storage",w)},[]),m.useEffect(()=>{if(!u||!d)return;let w;try{w=u("(prefers-contrast: more)")}catch{return}const E=T=>{T?d.dataset.contrast="more":d.dataset.contrast==="more"&&delete d.dataset.contrast};E(w.matches);const k=T=>E(T.matches);if(typeof w.addEventListener=="function")return w.addEventListener("change",k),()=>w.removeEventListener("change",k);const N=w;return N.addListener(k),()=>N.removeListener(k)},[u,d]);const b=m.useCallback(w=>{x(w),c&&nk(c,w)},[c]),S=m.useMemo(()=>({mode:f,resolvedTheme:y,setTheme:b}),[f,y,b]);return r.jsx(Jv.Provider,{value:S,children:i})}function ey(){const t=m.useContext(Jv);if(!t)throw new Error("useTheme must be used inside <ThemeProvider>. Wrap the app root in main.tsx.");return t}const yg=["claude-cli","anthropic","openrouter","ollama","lm-studio"];function sk(t){const a=new Map(t.map(i=>[i.id,i])),s=[];for(const i of yg){const c=a.get(i);c&&s.push(c)}for(const i of t)yg.includes(i.id)||s.push(i);return s}function ik(t){const[a,s]=m.useState(()=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(`(max-width: ${t}px)`).matches);return m.useEffect(()=>{var u;if(typeof window>"u"||!window.matchMedia)return;const i=window.matchMedia(`(max-width: ${t}px)`),c=()=>s(i.matches);return(u=i.addEventListener)==null||u.call(i,"change",c),()=>{var d;return(d=i.removeEventListener)==null?void 0:d.call(i,"change",c)}},[t]),a}function ok({providers:t,onOpenSettings:a,onOpenInstallHelp:s}){const i=sk(t),c=ik(640),[u,d]=m.useState(!1),f=m.useCallback(x=>{x.available||x.kind==="api-key"?a==null||a(x.id):s==null||s(x.id)},[a,s]);if(c){const x=i.filter(h=>h.available).length;return r.jsxs("div",{"data-testid":"providers-segment",style:{position:"relative",display:"inline-flex",alignItems:"center"},children:[r.jsx("button",{type:"button","data-testid":"providers-summary",onClick:()=>d(!u),"aria-label":le.statusBar.providerSummary(x,i.length),style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:11,cursor:"pointer",padding:"0 4px"},children:le.statusBar.providerSummary(x,i.length)}),u&&r.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:i.map(h=>r.jsx(bg,{p:h,onClick:f},h.id))})]})}return r.jsx("div",{"data-testid":"providers-segment",style:{display:"inline-flex",alignItems:"center",gap:4},children:i.map(x=>r.jsx(bg,{p:x,onClick:f,compact:!0},x.id))})}function bg({p:t,onClick:a,compact:s}){const i=t.available?le.statusBar.unlocked(t.label):t.kind==="cli-install"?le.statusBar.lockedCli(t.label):le.statusBar.locked(t.label);return r.jsxs("button",{type:"button","data-testid":`provider-glyph-${t.id}`,"data-available":t.available,"aria-label":i,title:i,onClick:()=>a(t),style:{display:"inline-flex",alignItems:"center",gap:4,background:"transparent",border:"none",color:t.available?"var(--status-installed)":"var(--text-muted, var(--text-tertiary))",cursor:"pointer",padding:s?"2px":"4px 6px",fontSize:11},children:[r.jsx(uf,{unlocked:t.available,size:10}),!s&&r.jsx("span",{children:t.label})]})}function ck(){try{return typeof localStorage>"u"?null:localStorage.getItem(ac)}catch{return null}}function uk({projectPath:t,modelName:a,health:s="ok",onPathClick:i,providers:c,onOpenProviderSettings:u,onOpenProviderInstallHelp:d}){const{mode:f,resolvedTheme:x,setTheme:h}=ey(),y=ck()==="auto",b=dk(f,x,y),S=s==="down"||s==="degraded"?"var(--status-own)":"var(--status-installed)";return r.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:[r.jsx("span",{title:a??"",style:{fontFamily:"var(--font-mono)"},children:a??"—"}),r.jsx(jg,{}),r.jsxs("span",{"aria-label":`Health: ${s}`,style:{display:"inline-flex",alignItems:"center",gap:6},children:[r.jsx(fk,{color:S}),r.jsx("span",{style:{textTransform:"capitalize"},children:s})]}),c&&c.length>0&&r.jsxs(r.Fragment,{children:[r.jsx(jg,{}),r.jsx(ok,{providers:c,onOpenSettings:u,onOpenInstallHelp:d})]}),r.jsx("div",{style:{flex:1}}),r.jsxs("button",{type:"button","data-testid":"theme-toggle",onClick:()=>h(b),"aria-label":`Switch to ${b} theme`,title:`Theme: ${f} — click for ${b}`,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:[r.jsx(pk,{mode:f}),r.jsx("span",{style:{textTransform:"capitalize"},children:f})]})]})}function dk(t,a,s){return t==="light"?"dark":t==="dark"?"auto":s?"light":a==="light"?"dark":"light"}function fk({color:t}){return r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:t,display:"inline-block",flexShrink:0}})}function jg(){return r.jsx("span",{"aria-hidden":"true",style:{color:"var(--border-default)"},children:"|"})}function pk({mode:t}){return t==="dark"?r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):t==="light"?r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"4"}),r.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"})]}):r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"9"}),r.jsx("path",{d:"M12 3a9 9 0 0 0 0 18z",fill:"currentColor"})]})}const df=new Set;function ty(){for(const t of df)t()}const mk=5,hk=1e3,xk=6e4;function gk(){const[t,a]=m.useState(void 0),[s,i]=m.useState(!1),[c,u]=m.useState(!0),d=m.useRef(0),f=m.useRef(null),x=m.useRef(null),h=m.useRef(!0),v=m.useRef(0),[y,b]=m.useState(0),S=()=>{x.current!==null&&(clearTimeout(x.current),x.current=null)},w=m.useCallback(()=>{f.current&&(f.current.abort(),f.current=null)},[]),E=m.useCallback(async()=>{if(!h.current||document.visibilityState==="hidden")return;w();const N=new AbortController;f.current=N;try{const T=await fetch("/api/plugins",{signal:N.signal});if(!h.current)return;const A=await T.json();if(!h.current)return;d.current=0,a(A.plugins??[]),u(!1),i(!1),x.current=setTimeout(()=>{h.current&&b(B=>B+1)},xk)}catch(T){if(!h.current||T instanceof DOMException&&T.name==="AbortError")return;if(d.current+=1,u(!1),d.current>mk){i(!0);return}const A=hk*Math.pow(2,d.current-1);x.current=setTimeout(()=>{h.current&&b(B=>B+1)},A)}},[w]);m.useEffect(()=>(h.current=!0,()=>{h.current=!1,S(),w()}),[w]),m.useEffect(()=>{document.visibilityState!=="hidden"&&(S(),E())},[y,E]),m.useEffect(()=>{const N=()=>{document.visibilityState==="hidden"?(S(),w()):(d.current=0,i(!1),b(T=>T+1))};return document.addEventListener("visibilitychange",N),()=>{document.removeEventListener("visibilitychange",N)}},[w]);const k=m.useCallback(()=>{d.current=0,i(!1),S(),v.current+=1,b(N=>N+1)},[]);return m.useEffect(()=>(df.add(k),()=>{df.delete(k)}),[k]),{plugins:t,paused:s,loading:c,retry:k}}const lc=0,ba=1,Fl=2,ny=4;function Sg(t){return()=>t}function vk(t){t()}function ry(t,a){return s=>t(a(s))}function kg(t,a){return()=>t(a)}function yk(t,a){return s=>t(a,s)}function Df(t){return t!==void 0}function bk(...t){return()=>{t.map(vk)}}function Gl(){}function sc(t,a){return a(t),t}function jk(t,a){return a(t)}function Rt(...t){return t}function pt(t,a){return t(ba,a)}function Ke(t,a){t(lc,a)}function _f(t){t(Fl)}function zt(t){return t(ny)}function Le(t,a){return pt(t,yk(a,lc))}function sr(t,a){const s=t(ba,i=>{s(),a(i)});return s}function wg(t){let a,s;return i=>c=>{a=c,s&&clearTimeout(s),s=setTimeout(()=>{i(a)},t)}}function ay(t,a){return t===a}function Tt(t=ay){let a;return s=>i=>{t(a,i)||(a=i,s(i))}}function $e(t){return a=>s=>{t(s)&&a(s)}}function we(t){return a=>ry(a,t)}function xr(t){return a=>()=>{a(t)}}function he(t,...a){const s=Sk(...a);return((i,c)=>{switch(i){case Fl:_f(t);return;case ba:return pt(t,s(c))}})}function gr(t,a){return s=>i=>{s(a=t(a,i))}}function Wa(t){return a=>s=>{t>0?t--:a(s)}}function Ur(t){let a=null,s;return i=>c=>{a=c,!s&&(s=setTimeout(()=>{s=void 0,i(a)},t))}}function Qe(...t){const a=new Array(t.length);let s=0,i=null;const c=2**t.length-1;return t.forEach((u,d)=>{const f=2**d;pt(u,x=>{const h=s;s|=f,a[d]=x,h!==c&&s===c&&i&&(i(),i=null)})}),u=>d=>{const f=()=>{u([d].concat(a))};s===c?f():i=f}}function Sk(...t){return a=>t.reduceRight(jk,a)}function kk(t){let a,s;const i=()=>a==null?void 0:a();return function(c,u){switch(c){case ba:return u?s===u?void 0:(i(),s=u,a=pt(t,u),a):(i(),Gl);case Fl:i(),s=null;return}}}function ge(t){let a=t;const s=it();return((i,c)=>{switch(i){case lc:a=c;break;case ba:{c(a);break}case ny:return a}return s(i,c)})}function pn(t,a){return sc(ge(a),s=>Le(t,s))}function it(){const t=[];return((a,s)=>{switch(a){case lc:t.slice().forEach(i=>{i(s)});return;case Fl:t.splice(0,t.length);return;case ba:return t.push(s),()=>{const i=t.indexOf(s);i>-1&&t.splice(i,1)}}})}function $n(t){return sc(it(),a=>Le(t,a))}function ut(t,a=[],{singleton:s}={singleton:!0}){return{constructor:t,dependencies:a,id:wk(),singleton:s}}const wk=()=>Symbol();function Ck(t){const a=new Map,s=({constructor:i,dependencies:c,id:u,singleton:d})=>{if(d&&a.has(u))return a.get(u);const f=i(c.map(x=>s(x)));return d&&a.set(u,f),f};return s(t)}function qt(...t){const a=it(),s=new Array(t.length);let i=0;const c=2**t.length-1;return t.forEach((u,d)=>{const f=2**d;pt(u,x=>{s[d]=x,i|=f,i===c&&Ke(a,s)})}),function(u,d){switch(u){case Fl:{_f(a);return}case ba:return i===c&&d(s),pt(a,d)}}}function Ie(t,a=ay){return he(t,Tt(a))}function ff(...t){return function(a,s){switch(a){case Fl:return;case ba:return bk(...t.map(i=>pt(i,s)))}}}const Qt={DEBUG:0,INFO:1,WARN:2,ERROR:3},Ek={[Qt.DEBUG]:"debug",[Qt.ERROR]:"error",[Qt.INFO]:"log",[Qt.WARN]:"warn"},Nk=()=>typeof globalThis>"u"?window:globalThis,ja=ut(()=>{const t=ge(Qt.ERROR);return{log:ge((a,s,i=Qt.INFO)=>{const c=Nk().VIRTUOSO_LOG_LEVEL??zt(t);i>=c&&console[Ek[i]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",a,s)}),logLevel:t}},[],{singleton:!0});function Ka(t,a,s){return Of(t,a,s).callbackRef}function Of(t,a,s){const i=Ae.useRef(null);let c=d=>{};const u=Ae.useMemo(()=>typeof ResizeObserver<"u"?new ResizeObserver(d=>{const f=()=>{const x=d[0].target;x.offsetParent!==null&&t(x)};s?f():requestAnimationFrame(f)}):null,[t,s]);return c=d=>{d&&a?(u==null||u.observe(d),i.current=d):(i.current&&(u==null||u.unobserve(i.current)),i.current=null)},{callbackRef:c,ref:i}}function Tk(t,a,s,i,c,u,d,f,x){const h=Ae.useCallback(v=>{const y=Rk(v.children,a,f?"offsetWidth":"offsetHeight",c);let b=v.parentElement;for(;b.dataset.virtuosoScroller===void 0;)b=b.parentElement;const S=b.lastElementChild.dataset.viewportType==="window";let w;S&&(w=b.ownerDocument.defaultView);const E=d?f?d.scrollLeft:d.scrollTop:S?f?w.scrollX||w.document.documentElement.scrollLeft:w.scrollY||w.document.documentElement.scrollTop:f?b.scrollLeft:b.scrollTop,k=d?f?d.scrollWidth:d.scrollHeight:S?f?w.document.documentElement.scrollWidth:w.document.documentElement.scrollHeight:f?b.scrollWidth:b.scrollHeight,N=d?f?d.offsetWidth:d.offsetHeight:S?f?w.innerWidth:w.innerHeight:f?b.offsetWidth:b.offsetHeight;i({scrollHeight:k,scrollTop:Math.max(E,0),viewportHeight:N}),u==null||u(f?Cg("column-gap",getComputedStyle(v).columnGap,c):Cg("row-gap",getComputedStyle(v).rowGap,c)),y!==null&&t(y)},[t,a,c,u,d,i,f]);return Of(h,s,x)}function Rk(t,a,s,i){const c=t.length;if(c===0)return null;const u=[];for(let d=0;d<c;d++){const f=t.item(d);if(f.dataset.index===void 0)continue;const x=parseInt(f.dataset.index),h=parseFloat(f.dataset.knownSize),v=a(f,s);if(v===0&&i("Zero-sized element, this should not happen",{child:f},Qt.ERROR),v===h)continue;const y=u[u.length-1];u.length===0||y.size!==v||y.endIndex!==x-1?u.push({endIndex:x,size:v,startIndex:x}):u[u.length-1].endIndex++}return u}function Cg(t,a,s){return a!=="normal"&&(a==null?void 0:a.endsWith("px"))!==!0&&s(`${t} was not resolved to pixel value correctly`,a,Qt.WARN),a==="normal"?0:parseInt(a??"0",10)}function ly(t,a,s){const i=Ae.useRef(null),c=Ae.useCallback(x=>{if(!(x!=null&&x.offsetParent))return;const h=x.getBoundingClientRect(),v=h.width;let y,b;if(a){const S=a.getBoundingClientRect(),w=h.top-S.top;b=S.height-Math.max(0,w),y=w+a.scrollTop}else{const S=d.current.ownerDocument.defaultView;b=S.innerHeight-Math.max(0,h.top),y=h.top+S.scrollY}i.current={listHeight:h.height,offsetTop:y,visibleHeight:b,visibleWidth:v},t(i.current)},[t,a]),{callbackRef:u,ref:d}=Of(c,!0,s),f=Ae.useCallback(()=>{c(d.current)},[c,d]);return Ae.useEffect(()=>{var h;if(a){a.addEventListener("scroll",f);const v=new ResizeObserver(()=>{requestAnimationFrame(f)});return v.observe(a),()=>{a.removeEventListener("scroll",f),v.unobserve(a)}}const x=(h=d.current)==null?void 0:h.ownerDocument.defaultView;return x==null||x.addEventListener("scroll",f),x==null||x.addEventListener("resize",f),()=>{x==null||x.removeEventListener("scroll",f),x==null||x.removeEventListener("resize",f)}},[f,a,d]),u}const yn=ut(()=>{const t=it(),a=it(),s=ge(0),i=it(),c=ge(0),u=it(),d=it(),f=ge(0),x=ge(0),h=ge(0),v=ge(0),y=it(),b=it(),S=ge(!1),w=ge(!1),E=ge(!1);return Le(he(t,we(({scrollTop:k})=>k)),a),Le(he(t,we(({scrollHeight:k})=>k)),d),Le(a,c),{deviation:s,fixedFooterHeight:h,fixedHeaderHeight:x,footerHeight:v,headerHeight:f,horizontalDirection:w,scrollBy:b,scrollContainerState:t,scrollHeight:d,scrollingInProgress:S,scrollTo:y,scrollTop:a,skipAnimationFrameInResizeObserver:E,smoothScrollTargetReached:i,statefulScrollTop:c,viewportHeight:u}},[],{singleton:!0}),Qs={lvl:0};function sy(t,a){const s=t.length;if(s===0)return[];let{index:i,value:c}=a(t[0]);const u=[];for(let d=1;d<s;d++){const{index:f,value:x}=a(t[d]);u.push({end:f-1,start:i,value:c}),i=f,c=x}return u.push({end:1/0,start:i,value:c}),u}function yt(t){return t===Qs}function Zs(t,a){if(!yt(t))return a===t.k?t.v:a<t.k?Zs(t.l,a):Zs(t.r,a)}function or(t,a,s="k"){if(yt(t))return[-1/0,void 0];if(Number(t[s])===a)return[t.k,t.v];if(Number(t[s])<a){const i=or(t.r,a,s);return i[0]===-1/0?[t.k,t.v]:i}return or(t.l,a,s)}function Bn(t,a,s){return yt(t)?cy(a,s,1):a===t.k?Xt(t,{k:a,v:s}):a<t.k?Eg(Xt(t,{l:Bn(t.l,a,s)})):Eg(Xt(t,{r:Bn(t.r,a,s)}))}function Ol(){return Qs}function Bl(t,a,s){if(yt(t))return[];const i=or(t,a)[0];return Ak(mf(t,i,s))}function pf(t,a){if(yt(t))return Qs;const{k:s,l:i,r:c}=t;if(a===s){if(yt(i))return c;if(yt(c))return i;const[u,d]=oy(i);return Ho(Xt(t,{k:u,l:iy(i),v:d}))}return a<s?Ho(Xt(t,{l:pf(i,a)})):Ho(Xt(t,{r:pf(c,a)}))}function Fa(t){return yt(t)?[]:[...Fa(t.l),{k:t.k,v:t.v},...Fa(t.r)]}function mf(t,a,s){if(yt(t))return[];const{k:i,l:c,r:u,v:d}=t;let f=[];return i>a&&(f=f.concat(mf(c,a,s))),i>=a&&i<=s&&f.push({k:i,v:d}),i<=s&&(f=f.concat(mf(u,a,s))),f}function Ho(t){const{l:a,lvl:s,r:i}=t;if(i.lvl>=s-1&&a.lvl>=s-1)return t;if(s>i.lvl+1){if(Dd(a))return uy(Xt(t,{lvl:s-1}));if(!yt(a)&&!yt(a.r))return Xt(a.r,{l:Xt(a,{r:a.r.l}),lvl:s,r:Xt(t,{l:a.r.r,lvl:s-1})});throw new Error("Unexpected empty nodes")}if(Dd(t))return hf(Xt(t,{lvl:s-1}));if(!yt(i)&&!yt(i.l)){const c=i.l,u=Dd(c)?i.lvl-1:i.lvl;return Xt(c,{l:Xt(t,{lvl:s-1,r:c.l}),lvl:c.lvl+1,r:hf(Xt(i,{l:c.r,lvl:u}))})}throw new Error("Unexpected empty nodes")}function Xt(t,a){return cy(a.k!==void 0?a.k:t.k,a.v!==void 0?a.v:t.v,a.lvl!==void 0?a.lvl:t.lvl,a.l!==void 0?a.l:t.l,a.r!==void 0?a.r:t.r)}function iy(t){return yt(t.r)?t.l:Ho(Xt(t,{r:iy(t.r)}))}function Dd(t){return yt(t)||t.lvl>t.r.lvl}function oy(t){return yt(t.r)?[t.k,t.v]:oy(t.r)}function cy(t,a,s,i=Qs,c=Qs){return{k:t,l:i,lvl:s,r:c,v:a}}function Eg(t){return hf(uy(t))}function uy(t){const{l:a}=t;return!yt(a)&&a.lvl===t.lvl?Xt(a,{r:Xt(t,{l:a.r})}):t}function hf(t){const{lvl:a,r:s}=t;return!yt(s)&&!yt(s.r)&&s.lvl===a&&s.r.lvl===a?Xt(s,{l:Xt(t,{r:s.l}),lvl:a+1}):t}function Ak(t){return sy(t,({k:a,v:s})=>({index:a,value:s}))}function dy(t,a){return!!(t&&t.startIndex===a.startIndex&&t.endIndex===a.endIndex)}function Js(t,a){return!!(t&&t[0]===a[0]&&t[1]===a[1])}const Bf=ut(()=>({recalcInProgress:ge(!1)}),[],{singleton:!0});function fy(t,a,s){return t[Wo(t,a,s)]}function Wo(t,a,s,i=0){let c=t.length-1;for(;i<=c;){const u=Math.floor((i+c)/2),d=t[u],f=s(d,a);if(f===0)return u;if(f===-1){if(c-i<2)return u-1;c=u-1}else{if(c===i)return u;i=u+1}}throw new Error(`Failed binary finding record in array - ${t.join(",")}, searched for ${a}`)}function Lk(t,a,s,i){const c=Wo(t,a,i),u=Wo(t,s,i,c);return t.slice(c,u+1)}function va(t,a){return Math.round(t.getBoundingClientRect()[a])}function ic(t){return!yt(t.groupOffsetTree)}function If({index:t},a){return a===t?0:a<t?-1:1}function Mk(){return{groupIndices:[],groupOffsetTree:Ol(),lastIndex:0,lastOffset:0,lastSize:0,offsetTree:[],sizeTree:Ol()}}function zk(t,a){let s=yt(t)?0:1/0;for(const i of a){const{endIndex:c,size:u,startIndex:d}=i;if(s=Math.min(s,d),yt(t)){t=Bn(t,0,u);continue}const f=Bl(t,d-1,c+1);if(f.some(Uk(i)))continue;let x=!1,h=!1;for(const{end:v,start:y,value:b}of f)x?(c>=y||u===b)&&(t=pf(t,y)):(h=b!==u,x=!0),v>c&&c>=y&&b!==u&&(t=Bn(t,c+1,b));h&&(t=Bn(t,d,u))}return[t,s]}function Dk(t){return typeof t.groupIndex<"u"}function _k({offset:t},a){return a===t?0:a<t?-1:1}function ei(t,a,s){if(a.length===0)return 0;const{index:i,offset:c,size:u}=fy(a,t,If),d=t-i,f=u*d+(d-1)*s+c;return f>0?f+s:f}function py(t,a){if(!ic(a))return t;let s=0;for(;a.groupIndices[s]<=t+s;)s++;return t+s}function my(t,a,s){if(Dk(t))return a.groupIndices[t.groupIndex]+1;const i=t.index==="LAST"?s:t.index;let c=py(i,a);return c=Math.max(0,c,Math.min(s,c)),c}function Ok(t,a,s,i=0){return i>0&&(a=Math.max(a,fy(t,i,If).offset)),sy(Lk(t,a,s,_k),$k)}function Bk(t,[a,s,i,c]){a.length>0&&i("received item sizes",a,Qt.DEBUG);const u=t.sizeTree;let d=u,f=0;if(s.length>0&&yt(u)&&a.length===2){const b=a[0].size,S=a[1].size;d=s.reduce((w,E)=>Bn(Bn(w,E,b),E+1,S),d)}else[d,f]=zk(d,a);if(d===u)return t;const{lastIndex:x,lastOffset:h,lastSize:v,offsetTree:y}=xf(t.offsetTree,f,d,c);return{groupIndices:s,groupOffsetTree:s.reduce((b,S)=>Bn(b,S,ei(S,y,c)),Ol()),lastIndex:x,lastOffset:h,lastSize:v,offsetTree:y,sizeTree:d}}function Ik(t){return Fa(t).map(({k:a,v:s},i,c)=>{const u=c[i+1];return{endIndex:u!==void 0?u.k-1:1/0,size:s,startIndex:a}})}function Ng(t,a){let s=0,i=0;for(;s<t;)s+=a[i+1]-a[i]-1,i++;return i-(s===t?0:1)}function xf(t,a,s,i){let c=t,u=0,d=0,f=0,x=0;if(a!==0){x=Wo(c,a-1,If),f=c[x].offset;const h=or(s,a-1);u=h[0],d=h[1],c.length&&c[x].size===or(s,a)[1]&&(x-=1),c=c.slice(0,x+1)}else c=[];for(const{start:h,value:v}of Bl(s,a,1/0)){const y=h-u,b=y*d+f+y*i;c.push({index:h,offset:b,size:v}),u=h,f=b,d=v}return{lastIndex:u,lastOffset:f,lastSize:d,offsetTree:c}}function $k(t){return{index:t.index,value:t}}function Uk(t){const{endIndex:a,size:s,startIndex:i}=t;return c=>c.start===i&&(c.end===a||c.end===1/0)&&c.value===s}const Hk={offsetHeight:"height",offsetWidth:"width"},br=ut(([{log:t},{recalcInProgress:a}])=>{const s=it(),i=it(),c=pn(i,0),u=it(),d=it(),f=ge(0),x=ge([]),h=ge(void 0),v=ge(void 0),y=ge(void 0),b=ge(void 0),S=ge((C,O)=>va(C,Hk[O])),w=ge(void 0),E=ge(0),k=Mk(),N=pn(he(s,Qe(x,t,E),gr(Bk,k),Tt()),k),T=pn(he(x,Tt(),gr((C,O)=>({current:O,prev:C.current}),{current:[],prev:[]}),we(({prev:C})=>C)),[]);Le(he(x,$e(C=>C.length>0),Qe(N,E),we(([C,O,L])=>{const _=C.reduce((H,W,q)=>Bn(H,W,ei(W,O.offsetTree,L)||q),Ol());return{...O,groupIndices:C,groupOffsetTree:_}})),N),Le(he(i,Qe(N),$e(([C,{lastIndex:O}])=>C<O),we(([C,{lastIndex:O,lastSize:L}])=>[{endIndex:O,size:L,startIndex:C}])),s),Le(h,v);const A=pn(he(h,we(C=>C===void 0)),!0);Le(he(v,$e(C=>C!==void 0&&yt(zt(N).sizeTree)),we(C=>{const O=zt(y),L=zt(x).length>0;return O!==void 0&&O!==0?L?[{endIndex:0,size:O,startIndex:0},{endIndex:1,size:C,startIndex:1}]:[]:[{endIndex:0,size:C,startIndex:0}]})),s),Le(he(b,$e(C=>C!==void 0&&C.length>0&&yt(zt(N).sizeTree)),we(C=>{const O=[];let L=C[0],_=0;for(let H=1;H<C.length;H++){const W=C[H];W!==L&&(O.push({endIndex:H-1,size:L,startIndex:_}),L=W,_=H)}return O.push({endIndex:C.length-1,size:L,startIndex:_}),O})),s),Le(he(x,Qe(y,v),$e(([,C,O])=>C!==void 0&&O!==void 0),we(([C,O,L])=>{const _=[];for(let H=0;H<C.length;H++){const W=C[H],q=C[H+1];_.push({startIndex:W,endIndex:W,size:O}),q!==void 0&&_.push({startIndex:W+1,endIndex:q-1,size:L})}return _})),s);const B=$n(he(s,Qe(N),gr(({sizes:C},[O,L])=>({changed:L!==C,sizes:L}),{changed:!1,sizes:k}),we(C=>C.changed)));pt(he(f,gr((C,O)=>({diff:C.prev-O,prev:O}),{diff:0,prev:0}),we(C=>C.diff)),C=>{const{groupIndices:O}=zt(N);if(C>0)Ke(a,!0),Ke(u,C+Ng(C,O));else if(C<0){const L=zt(T);L.length>0&&(C-=Ng(-C,L)),Ke(d,C)}}),pt(he(f,Qe(t)),([C,O])=>{C<0&&O("`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:f},Qt.ERROR)});const z=$n(u);Le(he(u,Qe(N),we(([C,O])=>{const L=O.groupIndices.length>0,_=[],H=O.lastSize;if(L){const W=Zs(O.sizeTree,0);let q=0,ee=0;for(;q<C;){const D=O.groupIndices[ee],I=O.groupIndices.length===ee+1?1/0:O.groupIndices[ee+1]-D-1;_.push({endIndex:D,size:W,startIndex:D}),_.push({endIndex:D+1+I-1,size:H,startIndex:D+1}),ee++,q+=I+1}const $=Fa(O.sizeTree);return q!==C&&$.shift(),$.reduce((D,{k:I,v:F})=>{let J=D.ranges;return D.prevSize!==0&&(J=[...D.ranges,{endIndex:I+C-1,size:D.prevSize,startIndex:D.prevIndex}]),{prevIndex:I+C,prevSize:F,ranges:J}},{prevIndex:C,prevSize:0,ranges:_}).ranges}return Fa(O.sizeTree).reduce((W,{k:q,v:ee})=>({prevIndex:q+C,prevSize:ee,ranges:[...W.ranges,{endIndex:q+C-1,size:W.prevSize,startIndex:W.prevIndex}]}),{prevIndex:0,prevSize:H,ranges:[]}).ranges})),s);const P=$n(he(d,Qe(N,E),we(([C,{offsetTree:O},L])=>{const _=-C;return ei(_,O,L)})));return Le(he(d,Qe(N,E),we(([C,O,L])=>{if(O.groupIndices.length>0){if(yt(O.sizeTree))return O;let H=Ol();const W=zt(T);let q=0,ee=0,$=0;for(;q<-C;){$=W[ee];const D=W[ee+1]-$-1;ee++,q+=D+1}if(H=Fa(O.sizeTree).reduce((D,{k:I,v:F})=>Bn(D,Math.max(0,I+C),F),H),q!==-C){const D=Zs(O.sizeTree,$);H=Bn(H,0,D);const I=or(O.sizeTree,-C+1)[1];H=Bn(H,1,I)}return{...O,sizeTree:H,...xf(O.offsetTree,0,H,L)}}const _=Fa(O.sizeTree).reduce((H,{k:W,v:q})=>Bn(H,Math.max(0,W+C),q),Ol());return{...O,sizeTree:_,...xf(O.offsetTree,0,_,L)}})),N),{beforeUnshiftWith:z,data:w,defaultItemSize:v,firstItemIndex:f,fixedItemSize:h,fixedGroupSize:y,gap:E,groupIndices:x,heightEstimates:b,itemSize:S,listRefresh:B,shiftWith:d,shiftWithOffset:P,sizeRanges:s,sizes:N,statefulTotalCount:c,totalCount:i,trackItemSizes:A,unshiftWith:u}},Rt(ja,Bf),{singleton:!0});function Pk(t){return t.reduce((a,s)=>(a.groupIndices.push(a.totalCount),a.totalCount+=s+1,a),{groupIndices:[],totalCount:0})}const hy=ut(([{groupIndices:t,sizes:a,totalCount:s},{headerHeight:i,scrollTop:c}])=>{const u=it(),d=it(),f=$n(he(u,we(Pk)));return Le(he(f,we(x=>x.totalCount)),s),Le(he(f,we(x=>x.groupIndices)),t),Le(he(qt(c,a,i),$e(([x,h])=>ic(h)),we(([x,h,v])=>or(h.groupOffsetTree,Math.max(x-v,0),"v")[0]),Tt(),we(x=>[x])),d),{groupCounts:u,topItemsIndexes:d}},Rt(br,yn)),Sa=ut(([{log:t}])=>{const a=ge(!1),s=$n(he(a,$e(i=>i),Tt()));return pt(a,i=>{i&&zt(t)("props updated",{},Qt.DEBUG)}),{didMount:s,propsReady:a}},Rt(ja),{singleton:!0}),Vk=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function xy(t){const a=typeof t=="number"?{index:t}:t;return a.align||(a.align="start"),(!a.behavior||!Vk)&&(a.behavior="auto"),a.offset===void 0&&(a.offset=0),a}const si=ut(([{gap:t,listRefresh:a,sizes:s,totalCount:i},{fixedFooterHeight:c,fixedHeaderHeight:u,footerHeight:d,headerHeight:f,scrollingInProgress:x,scrollTo:h,smoothScrollTargetReached:v,viewportHeight:y},{log:b}])=>{const S=it(),w=it(),E=ge(0);let k=null,N=null,T=null;function A(){k!==null&&(k(),k=null),T!==null&&(T(),T=null),N&&(clearTimeout(N),N=null),Ke(x,!1)}return Le(he(S,Qe(s,y,i,E,f,d,b),Qe(t,u,c),we(([[B,z,P,C,O,L,_,H],W,q,ee])=>{const $=xy(B),{align:D,behavior:I,offset:F}=$,J=C-1,de=my($,z,J);let M=ei(de,z.offsetTree,W)+L;D==="end"?(M+=q+or(z.sizeTree,de)[1]-P+ee,de===J&&(M+=_)):D==="center"?M+=(q+or(z.sizeTree,de)[1]-P+ee)/2:M-=O,F!==void 0&&F!==0&&(M+=F);const U=K=>{A(),K?(H("retrying to scroll to",{location:B},Qt.DEBUG),Ke(S,B)):(Ke(w,!0),H("list did not change, scroll successful",{},Qt.DEBUG))};if(A(),I==="smooth"){let K=!1;T=pt(a,Q=>{K=K||Q}),k=sr(v,()=>{U(K)})}else k=sr(he(a,Fk(150)),U);return N=setTimeout(()=>{A()},1200),Ke(x,!0),H("scrolling from index to",{behavior:I,index:de,top:M},Qt.DEBUG),{behavior:I,top:M}})),h),{scrollTargetReached:w,scrollToIndex:S,topListHeight:E}},Rt(br,yn,ja),{singleton:!0});function Fk(t){return a=>{const s=setTimeout(()=>{a(!1)},t);return i=>{i&&(a(!0),clearTimeout(s))}}}function $f(t,a){t===0?a():requestAnimationFrame(()=>{$f(t-1,a)})}function Uf(t,a){const s=a-1;return typeof t=="number"?t:t.index==="LAST"?s:t.index}const ii=ut(([{defaultItemSize:t,listRefresh:a,sizes:s},{scrollTop:i},{scrollTargetReached:c,scrollToIndex:u},{didMount:d}])=>{const f=ge(!0),x=ge(0),h=ge(!0);return Le(he(d,Qe(x),$e(([v,y])=>y!==0),xr(!1)),f),Le(he(d,Qe(x),$e(([v,y])=>y!==0),xr(!1)),h),pt(he(qt(a,d),Qe(f,s,t,h),$e(([[,v],y,{sizeTree:b},S,w])=>v&&(!yt(b)||Df(S))&&!y&&!w),Qe(x)),([,v])=>{sr(c,()=>{Ke(h,!0)}),$f(4,()=>{sr(i,()=>{Ke(f,!0)}),Ke(u,v)})}),{initialItemFinalLocationReached:h,initialTopMostItemIndex:x,scrolledToInitialItem:f}},Rt(br,yn,si,Sa),{singleton:!0});function gy(t,a){return Math.abs(t-a)<1.01}const ti="up",Gs="down",Gk="none",Wk={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollHeight:0,scrollTop:0,viewportHeight:0}},qk=0,oi=ut(([{footerHeight:t,headerHeight:a,scrollBy:s,scrollContainerState:i,scrollTop:c,viewportHeight:u}])=>{const d=ge(!1),f=ge(!0),x=it(),h=it(),v=ge(4),y=ge(qk),b=pn(he(ff(he(Ie(c),Wa(1),xr(!0)),he(Ie(c),Wa(1),xr(!1),wg(100))),Tt()),!1),S=pn(he(ff(he(s,xr(!0)),he(s,xr(!1),wg(200))),Tt()),!1);Le(he(qt(Ie(c),Ie(y)),we(([T,A])=>T<=A),Tt()),f),Le(he(f,Ur(50)),h);const w=$n(he(qt(i,Ie(u),Ie(a),Ie(t),Ie(v)),gr((T,[{scrollHeight:A,scrollTop:B},z,P,C,O])=>{const L=B+z-A>-O,_={scrollHeight:A,scrollTop:B,viewportHeight:z};if(L){let W,q;return B>T.state.scrollTop?(W="SCROLLED_DOWN",q=T.state.scrollTop-B):(W="SIZE_DECREASED",q=T.state.scrollTop-B||T.scrollTopDelta),{atBottom:!0,atBottomBecause:W,scrollTopDelta:q,state:_}}let H;return _.scrollHeight>T.state.scrollHeight?H="SIZE_INCREASED":z<T.state.viewportHeight?H="VIEWPORT_HEIGHT_DECREASING":B<T.state.scrollTop?H="SCROLLING_UPWARDS":H="NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM",{atBottom:!1,notAtBottomBecause:H,state:_}},Wk),Tt((T,A)=>T!==void 0&&T.atBottom===A.atBottom))),E=pn(he(i,gr((T,{scrollHeight:A,scrollTop:B,viewportHeight:z})=>{if(!gy(T.scrollHeight,A)){const P=A-(B+z)<1;return T.scrollTop!==B&&P?{changed:!0,jump:T.scrollTop-B,scrollHeight:A,scrollTop:B}:{changed:!0,jump:0,scrollHeight:A,scrollTop:B}}return{changed:!1,jump:0,scrollHeight:A,scrollTop:B}},{changed:!1,jump:0,scrollHeight:0,scrollTop:0}),$e(T=>T.changed),we(T=>T.jump)),0);Le(he(w,we(T=>T.atBottom)),d),Le(he(d,Ur(50)),x);const k=ge(Gs);Le(he(i,we(({scrollTop:T})=>T),Tt(),gr((T,A)=>zt(S)?{direction:T.direction,prevScrollTop:A}:{direction:A<T.prevScrollTop?ti:Gs,prevScrollTop:A},{direction:Gs,prevScrollTop:0}),we(T=>T.direction)),k),Le(he(i,Ur(50),xr(Gk)),k);const N=ge(0);return Le(he(b,$e(T=>!T),xr(0)),N),Le(he(c,Ur(100),Qe(b),$e(([T,A])=>A),gr(([T,A],[B])=>[A,B],[0,0]),we(([T,A])=>A-T)),N),{atBottomState:w,atBottomStateChange:x,atBottomThreshold:v,atTopStateChange:h,atTopThreshold:y,isAtBottom:d,isAtTop:f,isScrolling:b,lastJumpDueToItemResize:E,scrollDirection:k,scrollVelocity:N}},Rt(yn)),ni="top",ri="bottom",Tg="none";function Rg(t,a,s){return typeof t=="number"?s===ti&&a===ni||s===Gs&&a===ri?t:0:s===ti?a===ni?t.main:t.reverse:a===ri?t.main:t.reverse}function Ag(t,a){return typeof t=="number"?t:t[a]??0}const Hf=ut(([{deviation:t,fixedHeaderHeight:a,headerHeight:s,scrollTop:i,viewportHeight:c}])=>{const u=it(),d=ge(0),f=ge(0),x=ge(0),h=pn(he(qt(Ie(i),Ie(c),Ie(s),Ie(u,Js),Ie(x),Ie(d),Ie(a),Ie(t),Ie(f)),we(([v,y,b,[S,w],E,k,N,T,A])=>{const B=v-T,z=k+N,P=Math.max(b-B,0);let C=Tg;const O=Ag(A,ni),L=Ag(A,ri);return S-=T,S+=b+N,w+=b+N,w-=T,S>v+z-O&&(C=ti),w<v-P+y+L&&(C=Gs),C!==Tg?[Math.max(B-b-Rg(E,ni,C)-O,0),B-P-N+y+Rg(E,ri,C)+L]:null}),$e(v=>v!==null),Tt(Js)),[0,0]);return{increaseViewportBy:f,listBoundary:u,overscan:x,topListHeight:d,visibleRange:h}},Rt(yn),{singleton:!0});function Yk(t,a,s){if(ic(a)){const i=py(t,a);return[{index:or(a.groupOffsetTree,i)[0],offset:0,size:0},{data:s==null?void 0:s[0],index:i,offset:0,size:0}]}return[{data:s==null?void 0:s[0],index:t,offset:0,size:0}]}const _d={bottom:0,firstItemIndex:0,items:[],offsetBottom:0,offsetTop:0,top:0,topItems:[],topListHeight:0,totalCount:0};function Po(t,a,s,i,c,u){const{lastIndex:d,lastOffset:f,lastSize:x}=c;let h=0,v=0;if(t.length>0){h=t[0].offset;const E=t[t.length-1];v=E.offset+E.size}const y=s-d,b=f+y*x+(y-1)*i,S=h,w=b-v;return{bottom:v,firstItemIndex:u,items:Lg(t,c,u),offsetBottom:w,offsetTop:h,top:S,topItems:Lg(a,c,u),topListHeight:a.reduce((E,k)=>k.size+E,0),totalCount:s}}function vy(t,a,s,i,c,u){let d=0;if(s.groupIndices.length>0)for(const v of s.groupIndices){if(v-d>=t)break;d++}const f=t+d,x=Uf(a,f),h=Array.from({length:f}).map((v,y)=>({data:u[y+x],index:y+x,offset:0,size:0}));return Po(h,[],f,c,s,i)}function Lg(t,a,s){if(t.length===0)return[];if(!ic(a))return t.map(h=>({...h,index:h.index+s,originalIndex:h.index}));const i=t[0].index,c=t[t.length-1].index,u=[],d=Bl(a.groupOffsetTree,i,c);let f,x=0;for(const h of t){(!f||f.end<h.index)&&(f=d.shift(),x=a.groupIndices.indexOf(f.start));let v;h.index===f.start?v={index:x,type:"group"}:v={groupIndex:x,index:h.index-(x+1)+s},u.push({...v,data:h.data,offset:h.offset,originalIndex:h.index,size:h.size})}return u}function Mg(t,a){return t===void 0?0:typeof t=="number"?t:t[a]??0}const Xa=ut(([{data:t,firstItemIndex:a,gap:s,sizes:i,totalCount:c},u,{listBoundary:d,topListHeight:f,visibleRange:x},{initialTopMostItemIndex:h,scrolledToInitialItem:v},{topListHeight:y},b,{didMount:S},{recalcInProgress:w}])=>{const E=ge([]),k=ge(0),N=it(),T=ge(0);Le(u.topItemsIndexes,E);const A=pn(he(qt(S,w,Ie(x,Js),Ie(c),Ie(i),Ie(h),v,Ie(E),Ie(a),Ie(s),Ie(T),t),$e(([C,O,,L,,,,,,,,_])=>{const H=_!==void 0&&_.length!==L;return C&&!O&&!H}),we(([,,[C,O],L,_,H,W,q,ee,$,D,I])=>{var me,je;const F=_,{offsetTree:J,sizeTree:de}=F,M=zt(k);if(L===0)return{..._d,totalCount:L};if(C===0&&O===0)return M===0?{..._d,totalCount:L}:vy(M,H,_,ee,$,I||[]);if(yt(de))return M>0?null:Po(Yk(Uf(H,L),F,I),[],L,$,F,ee);const U=[];if(q.length>0){const Ne=q[0],Me=q[q.length-1];let Fe=0;for(const Ue of Bl(de,Ne,Me)){const De=Ue.value,Ge=Math.max(Ue.start,Ne),ft=Math.min(Ue.end,Me);for(let oe=Ge;oe<=ft;oe++)U.push({data:I==null?void 0:I[oe],index:oe,offset:Fe,size:De}),Fe+=De}}if(!W)return Po([],U,L,$,F,ee);const K=q.length>0?q[q.length-1]+1:0,Q=Ok(J,C,O,K);if(Q.length===0)return null;const ce=L-1,Z=sc([],Ne=>{for(const Me of Q){const Fe=Me.value;let Ue=Fe.offset,De=Me.start;const Ge=Fe.size;if(Fe.offset<C){De+=Math.floor((C-Fe.offset+$)/(Ge+$));const oe=De-Me.start;Ue+=oe*Ge+oe*$}De<K&&(Ue+=(K-De)*Ge,De=K);const ft=Math.min(Me.end,ce);for(let oe=De;oe<=ft&&!(Ue>=O);oe++)Ne.push({data:I==null?void 0:I[oe],index:oe,offset:Ue,size:Ge}),Ue+=Ge+$}}),ie=Mg(D,ni),X=Mg(D,ri);if(Z.length>0&&(ie>0||X>0)){const Ne=Z[0],Me=Z[Z.length-1];if(ie>0&&Ne.index>K){const Fe=Math.min(ie,Ne.index-K),Ue=[];let De=Ne.offset;for(let Ge=Ne.index-1;Ge>=Ne.index-Fe;Ge--){const ft=((me=Bl(de,Ge,Ge)[0])==null?void 0:me.value)??Ne.size;De-=ft+$,Ue.unshift({data:I==null?void 0:I[Ge],index:Ge,offset:De,size:ft})}Z.unshift(...Ue)}if(X>0&&Me.index<ce){const Fe=Math.min(X,ce-Me.index);let Ue=Me.offset+Me.size+$;for(let De=Me.index+1;De<=Me.index+Fe;De++){const Ge=((je=Bl(de,De,De)[0])==null?void 0:je.value)??Me.size;Z.push({data:I==null?void 0:I[De],index:De,offset:Ue,size:Ge}),Ue+=Ge+$}}}return Po(Z,U,L,$,F,ee)}),$e(C=>C!==null),Tt()),_d);Le(he(t,$e(Df),we(C=>C==null?void 0:C.length)),c),Le(he(A,we(C=>C.topListHeight)),y),Le(y,f),Le(he(A,we(C=>[C.top,C.bottom])),d),Le(he(A,we(C=>C.items)),N);const B=$n(he(A,$e(({items:C})=>C.length>0),Qe(c,t),$e(([{items:C},O])=>C[C.length-1].originalIndex===O-1),we(([,C,O])=>[C-1,O]),Tt(Js),we(([C])=>C))),z=$n(he(A,Ur(200),$e(({items:C,topItems:O})=>C.length>0&&C[0].originalIndex===O.length),we(({items:C})=>C[0].index),Tt())),P=$n(he(A,$e(({items:C})=>C.length>0),we(({items:C})=>{let O=0,L=C.length-1;for(;C[O].type==="group"&&O<L;)O++;for(;C[L].type==="group"&&L>O;)L--;return{endIndex:C[L].index,startIndex:C[O].index}}),Tt(dy)));return{endReached:B,initialItemCount:k,itemsRendered:N,listState:A,minOverscanItemCount:T,rangeChanged:P,startReached:z,topItemsIndexes:E,...b}},Rt(br,hy,Hf,ii,si,oi,Sa,Bf),{singleton:!0}),yy=ut(([{fixedFooterHeight:t,fixedHeaderHeight:a,footerHeight:s,headerHeight:i},{listState:c}])=>{const u=it(),d=pn(he(qt(s,t,i,a,c),we(([f,x,h,v,y])=>f+x+h+v+y.offsetBottom+y.bottom)),0);return Le(Ie(d),u),{totalListHeight:d,totalListHeightChanged:u}},Rt(yn,Xa),{singleton:!0}),Kk=ut(([{viewportHeight:t},{totalListHeight:a}])=>{const s=ge(!1),i=pn(he(qt(s,t,a),$e(([c])=>c),we(([,c,u])=>Math.max(0,c-u)),Ur(0),Tt()),0);return{alignToBottom:s,paddingTopAddition:i}},Rt(yn,yy),{singleton:!0}),by=ut(()=>({context:ge(null)})),Xk=({itemBottom:t,itemTop:a,locationParams:{align:s,behavior:i,...c},viewportBottom:u,viewportTop:d})=>a<d?{...c,align:s??"start",...i!==void 0?{behavior:i}:{}}:t>u?{...c,align:s??"end",...i!==void 0?{behavior:i}:{}}:null,jy=ut(([{gap:t,sizes:a,totalCount:s},{fixedFooterHeight:i,fixedHeaderHeight:c,headerHeight:u,scrollingInProgress:d,scrollTop:f,viewportHeight:x},{scrollToIndex:h}])=>{const v=it();return Le(he(v,Qe(a,x,s,u,c,i,f),Qe(t),we(([[y,b,S,w,E,k,N,T],A])=>{const{calculateViewLocation:B=Xk,done:z,...P}=y,C=my(y,b,w-1),O=ei(C,b.offsetTree,A)+E+k,L=O+or(b.sizeTree,C)[1],_=T+k,H=T+S-N,W=B({itemBottom:L,itemTop:O,locationParams:P,viewportBottom:H,viewportTop:_});return W!==null?z&&sr(he(d,$e(q=>!q),Wa(zt(d)?1:2)),z):z==null||z(),W}),$e(y=>y!==null)),h),{scrollIntoView:v}},Rt(br,yn,si,Xa,ja),{singleton:!0});function zg(t){return t===!1?!1:t==="smooth"?"smooth":"auto"}const Qk=(t,a)=>typeof t=="function"?zg(t(a)):a&&zg(t),Zk=ut(([{listRefresh:t,totalCount:a,fixedItemSize:s,data:i},{atBottomState:c,isAtBottom:u},{scrollToIndex:d},{scrolledToInitialItem:f},{didMount:x,propsReady:h},{log:v},{scrollingInProgress:y},{context:b},{scrollIntoView:S}])=>{const w=ge(!1),E=it();let k=null;function N(z){Ke(d,{align:"end",behavior:z,index:"LAST"})}pt(he(qt(he(Ie(a),Wa(1)),x),Qe(Ie(w),u,f,y),we(([[z,P],C,O,L,_])=>{let H=P&&L,W="auto";return H&&(W=Qk(C,O||_),H=H&&W!==!1),{followOutputBehavior:W,shouldFollow:H,totalCount:z}}),$e(({shouldFollow:z})=>z)),({followOutputBehavior:z,totalCount:P})=>{k!==null&&(k(),k=null),zt(s)!==void 0?requestAnimationFrame(()=>{zt(v)("following output to ",{totalCount:P},Qt.DEBUG),N(z)}):k=sr(t,()=>{zt(v)("following output to ",{totalCount:P},Qt.DEBUG),N(z),k=null})});function T(z){const P=sr(c,C=>{z&&!C.atBottom&&C.notAtBottomBecause==="SIZE_INCREASED"&&k===null&&(zt(v)("scrolling to bottom due to increased size",{},Qt.DEBUG),N("auto"))});setTimeout(P,100)}pt(he(qt(Ie(w),a,h),$e(([z,,P])=>z!==!1&&P),gr(({value:z},[,P])=>({refreshed:z===P,value:P}),{refreshed:!1,value:0}),$e(({refreshed:z})=>z),Qe(w,a)),([,z])=>{zt(f)&&T(z!==!1)}),pt(E,()=>{T(zt(w)!==!1)}),pt(qt(Ie(w),c),([z,P])=>{z!==!1&&!P.atBottom&&P.notAtBottomBecause==="VIEWPORT_HEIGHT_DECREASING"&&N("auto")});const A=ge(null),B=it();return Le(ff(he(Ie(i),we(z=>(z==null?void 0:z.length)??0)),he(Ie(a))),B),pt(he(qt(he(B,Wa(1)),x),Qe(Ie(A),f,y,b),we(([[z,P],C,O,L,_])=>P&&O&&(C==null?void 0:C({context:_,totalCount:z,scrollingInProgress:L}))),$e(z=>!!z),Ur(0)),z=>{k!==null&&(k(),k=null),zt(s)!==void 0?requestAnimationFrame(()=>{zt(v)("scrolling into view",{}),Ke(S,z)}):k=sr(t,()=>{zt(v)("scrolling into view",{}),Ke(S,z),k=null})}),{autoscrollToBottom:E,followOutput:w,scrollIntoViewOnChange:A}},Rt(br,oi,si,ii,Sa,ja,yn,by,jy)),Jk=ut(([{data:t,firstItemIndex:a,gap:s,sizes:i},{initialTopMostItemIndex:c},{initialItemCount:u,listState:d},{didMount:f}])=>(Le(he(f,Qe(u),$e(([,x])=>x!==0),Qe(c,i,a,s,t),we(([[,x],h,v,y,b,S=[]])=>vy(x,h,v,y,b,S))),d),{}),Rt(br,ii,Xa,Sa),{singleton:!0}),ew=ut(([{didMount:t},{scrollTo:a},{listState:s}])=>{const i=ge(0);return pt(he(t,Qe(i),$e(([,c])=>c!==0),we(([,c])=>({top:c}))),c=>{sr(he(s,Wa(1),$e(u=>u.items.length>1)),()=>{requestAnimationFrame(()=>{Ke(a,c)})})}),{initialScrollTop:i}},Rt(Sa,yn,Xa),{singleton:!0}),Sy=ut(([{scrollVelocity:t}])=>{const a=ge(!1),s=it(),i=ge(!1);return Le(he(t,Qe(i,a,s),$e(([c,u])=>u!==!1&&u!==void 0),we(([c,u,d,f])=>{const{enter:x,exit:h}=u;if(d){if(h(c,f))return!1}else if(x(c,f))return!0;return d}),Tt()),a),pt(he(qt(a,t,s),Qe(i)),([[c,u,d],f])=>{c&&f!==!1&&f!==void 0&&f.change&&f.change(u,d)}),{isSeeking:a,scrollSeekConfiguration:i,scrollSeekRangeChanged:s,scrollVelocity:t}},Rt(oi),{singleton:!0}),Pf=ut(([{scrollContainerState:t,scrollTo:a}])=>{const s=it(),i=it(),c=it(),u=ge(!1),d=ge(void 0);return Le(he(qt(s,i),we(([{scrollTop:f,viewportHeight:x},{offsetTop:h,listHeight:v}])=>({scrollHeight:v,scrollTop:Math.max(0,f-h),viewportHeight:x}))),t),Le(he(a,Qe(i),we(([f,{offsetTop:x}])=>({...f,top:f.top+x}))),c),{customScrollParent:d,useWindowScroll:u,windowScrollContainerState:s,windowScrollTo:c,windowViewportRect:i}},Rt(yn)),tw=ut(([{sizeRanges:t,sizes:a},{headerHeight:s,scrollTop:i},{initialTopMostItemIndex:c},{didMount:u},{useWindowScroll:d,windowScrollContainerState:f,windowViewportRect:x}])=>{const h=it(),v=ge(void 0),y=ge(null),b=ge(null);return Le(f,y),Le(x,b),pt(he(h,Qe(a,i,d,y,b,s)),([S,w,E,k,N,T,A])=>{const B=Ik(w.sizeTree);k&&N!==null&&T!==null&&(E=N.scrollTop-T.offsetTop),E-=A,S({ranges:B,scrollTop:E})}),Le(he(v,$e(Df),we(nw)),c),Le(he(u,Qe(v),$e(([,S])=>S!==void 0),Tt(),we(([,S])=>S.ranges)),t),{getState:h,restoreStateFrom:v}},Rt(br,yn,ii,Sa,Pf));function nw(t){return{align:"start",index:0,offset:t.scrollTop}}const rw=ut(([{topItemsIndexes:t}])=>{const a=ge(0);return Le(he(a,$e(s=>s>=0),we(s=>Array.from({length:s}).map((i,c)=>c))),t),{topItemCount:a}},Rt(Xa));function ky(t){let a=!1,s;return(()=>(a||(a=!0,s=t()),s))}const aw=ky(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),lw=ut(([{deviation:t,scrollBy:a,scrollingInProgress:s,scrollTop:i},{isAtBottom:c,isScrolling:u,lastJumpDueToItemResize:d,scrollDirection:f},{listState:x},{beforeUnshiftWith:h,gap:v,shiftWithOffset:y,sizes:b},{log:S},{recalcInProgress:w}])=>{const E=$n(he(x,Qe(d),gr(([,N,T,A],[{bottom:B,items:z,offsetBottom:P,totalCount:C},O])=>{const L=B+P;let _=0;return T===C&&N.length>0&&z.length>0&&(z[0].originalIndex===0&&N[0].originalIndex===0||(_=L-A,_!==0&&(_+=O))),[_,z,C,L]},[0,[],0,0]),$e(([N])=>N!==0),Qe(i,f,s,c,S,w),$e(([,N,T,A,,,B])=>!B&&!A&&N!==0&&T===ti),we(([[N],,,,,T])=>(T("Upward scrolling compensation",{amount:N},Qt.DEBUG),N))));function k(N){N>0?(Ke(a,{behavior:"auto",top:-N}),Ke(t,0)):(Ke(t,0),Ke(a,{behavior:"auto",top:-N}))}return pt(he(E,Qe(t,u)),([N,T,A])=>{A&&aw()?Ke(t,T-N):k(-N)}),pt(he(qt(pn(u,!1),t,w),$e(([N,T,A])=>!N&&!A&&T!==0),we(([N,T])=>T),Ur(1)),k),Le(he(y,we(N=>({top:-N}))),a),pt(he(h,Qe(b,v),we(([N,{groupIndices:T,lastSize:A,sizeTree:B},z])=>{function P(H){return H*(A+z)}if(T.length===0)return P(N);let C=0;const O=Zs(B,0);let L=0,_=0;for(;L<N;){L++,C+=O;let H=T.length===_+1?1/0:T[_+1]-T[_]-1;L+H>N&&(C-=O,H=N-L+1),L+=H,C+=P(H),_++}return C})),N=>{Ke(t,N),requestAnimationFrame(()=>{Ke(a,{top:N}),requestAnimationFrame(()=>{Ke(t,0),Ke(w,!1)})})}),{deviation:t}},Rt(yn,oi,Xa,br,ja,Bf)),sw=ut(([t,a,s,i,c,u,d,f,x,h,v])=>({...t,...a,...s,...i,...c,...u,...d,...f,...x,...h,...v}),Rt(Hf,Jk,Sa,Sy,yy,ew,Kk,Pf,jy,ja,by)),wy=ut(([{data:t,defaultItemSize:a,firstItemIndex:s,fixedItemSize:i,fixedGroupSize:c,gap:u,groupIndices:d,heightEstimates:f,itemSize:x,sizeRanges:h,sizes:v,statefulTotalCount:y,totalCount:b,trackItemSizes:S},{initialItemFinalLocationReached:w,initialTopMostItemIndex:E,scrolledToInitialItem:k},N,T,A,B,{scrollToIndex:z},P,{topItemCount:C},{groupCounts:O},L])=>{const{listState:_,minOverscanItemCount:H,topItemsIndexes:W,rangeChanged:q,...ee}=B;return Le(q,L.scrollSeekRangeChanged),Le(he(L.windowViewportRect,we($=>$.visibleHeight)),N.viewportHeight),{data:t,defaultItemHeight:a,firstItemIndex:s,fixedItemHeight:i,fixedGroupHeight:c,gap:u,groupCounts:O,heightEstimates:f,initialItemFinalLocationReached:w,initialTopMostItemIndex:E,scrolledToInitialItem:k,sizeRanges:h,topItemCount:C,topItemsIndexes:W,totalCount:b,...A,groupIndices:d,itemSize:x,listState:_,minOverscanItemCount:H,scrollToIndex:z,statefulTotalCount:y,trackItemSizes:S,rangeChanged:q,...ee,...L,...N,sizes:v,...T}},Rt(br,ii,yn,tw,Zk,Xa,si,lw,rw,hy,sw));function iw(t,a){const s={},i={};let c=0;const u=t.length;for(;c<u;)i[t[c]]=1,c+=1;for(const d in a)Object.hasOwn(i,d)||(s[d]=a[d]);return s}const No=typeof document<"u"?Ae.useLayoutEffect:Ae.useEffect;function Cy(t,a,s){const i=Object.keys(a.required||{}),c=Object.keys(a.optional||{}),u=Object.keys(a.methods||{}),d=Object.keys(a.events||{}),f=Ae.createContext({});function x(k,N){k.propsReady!==void 0&&Ke(k.propsReady,!1);for(const T of i){const A=k[a.required[T]];Ke(A,N[T])}for(const T of c)if(T in N){const A=k[a.optional[T]];Ke(A,N[T])}k.propsReady!==void 0&&Ke(k.propsReady,!0)}function h(k){return u.reduce((N,T)=>(N[T]=A=>{const B=k[a.methods[T]];Ke(B,A)},N),{})}function v(k){return d.reduce((N,T)=>(N[T]=kk(k[a.events[T]]),N),{})}const y=Ae.forwardRef(function(k,N){const{children:T,...A}=k,[B]=Ae.useState(()=>sc(Ck(t),C=>{x(C,A)})),[z]=Ae.useState(kg(v,B));No(()=>{for(const C of d)C in A&&pt(z[C],A[C]);return()=>{Object.values(z).map(_f)}},[A,z,B]),No(()=>{x(B,A)}),Ae.useImperativeHandle(N,Sg(h(B)));const P=s;return r.jsx(f.Provider,{value:B,children:s!==void 0?r.jsx(P,{...iw([...i,...c,...d],A),children:T}):T})}),b=k=>{const N=Ae.useContext(f);return Ae.useCallback(T=>{Ke(N[k],T)},[N,k])},S=k=>{const N=Ae.useContext(f)[k],T=Ae.useCallback(A=>pt(N,A),[N]);return Ae.useSyncExternalStore(T,()=>zt(N),()=>zt(N))},w=k=>{const N=Ae.useContext(f)[k],[T,A]=Ae.useState(kg(zt,N));return No(()=>pt(N,B=>{B!==T&&A(Sg(B))}),[N,T]),T},E=parseInt(Ae.version)>=18?S:w;return{Component:y,useEmitter:(k,N)=>{const T=Ae.useContext(f)[k];No(()=>pt(T,N),[N,T])},useEmitterValue:E,usePublisher:b}}const Ey=Ae.createContext(void 0),Ny=Ae.createContext(void 0),Od="-webkit-sticky",Dg="sticky",Vf=ky(()=>{if(typeof document>"u")return Dg;const t=document.createElement("div");return t.style.position=Od,t.style.position===Od?Od:Dg}),Ty=typeof document<"u"?Ae.useLayoutEffect:Ae.useEffect;function Bd(t){return"self"in t}function ow(t){return"body"in t}function Ry(t,a,s,i=Gl,c,u){const d=Ae.useRef(null),f=Ae.useRef(null),x=Ae.useRef(null),h=Ae.useCallback(b=>{let S,w,E;const k=b.target;if(ow(k)||Bd(k)){const T=Bd(k)?k:k.defaultView;E=u===!0?T.scrollX:T.scrollY,S=u===!0?T.document.documentElement.scrollWidth:T.document.documentElement.scrollHeight,w=u===!0?T.innerWidth:T.innerHeight}else E=u===!0?k.scrollLeft:k.scrollTop,S=u===!0?k.scrollWidth:k.scrollHeight,w=u===!0?k.offsetWidth:k.offsetHeight;const N=()=>{t({scrollHeight:S,scrollTop:Math.max(E,0),viewportHeight:w})};b.suppressFlushSync===!0?N():yS.flushSync(N),f.current!==null&&(E===f.current||E<=0||E===S-w)&&(f.current=null,a(!0),x.current&&(clearTimeout(x.current),x.current=null))},[t,a,u]);Ae.useEffect(()=>{const b=c||d.current;return i(c||d.current),h({suppressFlushSync:!0,target:b}),b.addEventListener("scroll",h,{passive:!0}),()=>{i(null),b.removeEventListener("scroll",h)}},[d,h,s,i,c]);function v(b){const S=d.current;if(!S||(u===!0?"offsetWidth"in S&&S.offsetWidth===0:"offsetHeight"in S&&S.offsetHeight===0))return;const w=b.behavior==="smooth";let E,k,N;Bd(S)?(k=Math.max(va(S.document.documentElement,u===!0?"width":"height"),u===!0?S.document.documentElement.scrollWidth:S.document.documentElement.scrollHeight),E=u===!0?S.innerWidth:S.innerHeight,N=u===!0?window.scrollX:window.scrollY):(k=S[u===!0?"scrollWidth":"scrollHeight"],E=va(S,u===!0?"width":"height"),N=S[u===!0?"scrollLeft":"scrollTop"]);const T=k-E;if(b.top=Math.ceil(Math.max(Math.min(T,b.top),0)),gy(E,k)||b.top===N){t({scrollHeight:k,scrollTop:N,viewportHeight:E}),w&&a(!0);return}w?(f.current=b.top,x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{x.current=null,f.current=null,a(!0)},1e3)):f.current=null,u===!0&&(b={...b.behavior!==void 0?{behavior:b.behavior}:{},left:b.top}),S.scrollTo(b)}function y(b){u===!0&&(b={...b.behavior!==void 0?{behavior:b.behavior}:{},...b.top!==void 0?{left:b.top}:{}}),d.current.scrollBy(b)}return{scrollByCallback:y,scrollerRef:d,scrollToCallback:v}}function Ff(t){return t}const cw=ut(()=>{const t=ge(f=>`Item ${f}`),a=ge(f=>`Group ${f}`),s=ge({}),i=ge(Ff),c=ge("div"),u=ge(Gl),d=(f,x=null)=>pn(he(s,we(h=>h[f]),Tt()),x);return{components:s,computeItemKey:i,EmptyPlaceholder:d("EmptyPlaceholder"),FooterComponent:d("Footer"),GroupComponent:d("Group","div"),groupContent:a,HeaderComponent:d("Header"),HeaderFooterTag:c,ItemComponent:d("Item","div"),itemContent:t,ListComponent:d("List","div"),ScrollerComponent:d("Scroller","div"),scrollerRef:u,ScrollSeekPlaceholder:d("ScrollSeekPlaceholder"),TopItemListComponent:d("TopItemList")}}),uw=ut(([t,a])=>({...t,...a}),Rt(wy,cw)),dw=({height:t})=>r.jsx("div",{style:{height:t}}),fw={overflowAnchor:"none",position:Vf(),zIndex:1},Ay={overflowAnchor:"none"},pw={...Ay,display:"inline-block",height:"100%"},_g=Ae.memo(function({showTopList:t=!1}){const a=Ve("listState"),s=er("sizeRanges"),i=Ve("useWindowScroll"),c=Ve("customScrollParent"),u=er("windowScrollContainerState"),d=er("scrollContainerState"),f=c||i?u:d,x=Ve("itemContent"),h=Ve("context"),v=Ve("groupContent"),y=Ve("trackItemSizes"),b=Ve("itemSize"),S=Ve("log"),w=er("gap"),E=Ve("horizontalDirection"),{callbackRef:k}=Tk(s,b,y,t?Gl:f,S,w,c,E,Ve("skipAnimationFrameInResizeObserver")),[N,T]=Ae.useState(0);Gf("deviation",ee=>{N!==ee&&T(ee)});const A=Ve("EmptyPlaceholder"),B=Ve("ScrollSeekPlaceholder")??dw,z=Ve("ListComponent"),P=Ve("ItemComponent"),C=Ve("GroupComponent"),O=Ve("computeItemKey"),L=Ve("isSeeking"),_=Ve("groupIndices").length>0,H=Ve("alignToBottom"),W=Ve("initialItemFinalLocationReached"),q=t?{}:{boxSizing:"border-box",...E?{display:"inline-block",height:"100%",marginLeft:N!==0?N:H?"auto":0,paddingLeft:a.offsetTop,paddingRight:a.offsetBottom,whiteSpace:"nowrap"}:{marginTop:N!==0?N:H?"auto":0,paddingBottom:a.offsetBottom,paddingTop:a.offsetTop},...W?{}:{visibility:"hidden"}};return!t&&a.totalCount===0&&A!==null&&A!==void 0?r.jsx(A,{...fn(A,h)}):r.jsx(z,{...fn(z,h),"data-testid":t?"virtuoso-top-item-list":"virtuoso-item-list",ref:k,style:q,children:(t?a.topItems:a.items).map(ee=>{const $=ee.originalIndex,D=O($+a.firstItemIndex,ee.data,h);return L?m.createElement(B,{...fn(B,h),height:ee.size,index:ee.index,key:D,type:ee.type||"item",...ee.type==="group"?{}:{groupIndex:ee.groupIndex}}):ee.type==="group"?m.createElement(C,{...fn(C,h),"data-index":$,"data-item-index":ee.index,"data-known-size":ee.size,key:D,style:fw},v(ee.index,h)):m.createElement(P,{...fn(P,h),...gw(P,ee.data),"data-index":$,"data-item-group-index":ee.groupIndex,"data-item-index":ee.index,"data-known-size":ee.size,key:D,style:E?pw:Ay},_?x(ee.index,ee.groupIndex,ee.data,h):x(ee.index,ee.data,h))})})}),mw={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},hw={outline:"none",overflowX:"auto",position:"relative"},oc=t=>({height:"100%",position:"absolute",top:0,width:"100%",...t?{display:"flex",flexDirection:"column"}:void 0}),xw={position:Vf(),top:0,width:"100%",zIndex:1};function fn(t,a){if(typeof t!="string")return{context:a}}function gw(t,a){return{item:typeof t=="string"?void 0:a}}const vw=Ae.memo(function(){const t=Ve("HeaderComponent"),a=er("headerHeight"),s=Ve("HeaderFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,Ve("skipAnimationFrameInResizeObserver")),c=Ve("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null}),yw=Ae.memo(function(){const t=Ve("FooterComponent"),a=er("footerHeight"),s=Ve("HeaderFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,Ve("skipAnimationFrameInResizeObserver")),c=Ve("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null});function Ly({useEmitter:t,useEmitterValue:a,usePublisher:s}){return Ae.memo(function({children:i,style:c,context:u,...d}){const f=s("scrollContainerState"),x=a("ScrollerComponent"),h=s("smoothScrollTargetReached"),v=a("scrollerRef"),y=a("horizontalDirection")||!1,{scrollByCallback:b,scrollerRef:S,scrollToCallback:w}=Ry(f,h,x,v,void 0,y);return t("scrollTo",w),t("scrollBy",b),r.jsx(x,{"data-testid":"virtuoso-scroller","data-virtuoso-scroller":!0,ref:S,style:{...y?hw:mw,...c},tabIndex:0,...d,...fn(x,u),children:i})})}function My({useEmitter:t,useEmitterValue:a,usePublisher:s}){return Ae.memo(function({children:i,style:c,context:u,...d}){const f=s("windowScrollContainerState"),x=a("ScrollerComponent"),h=s("smoothScrollTargetReached"),v=a("totalListHeight"),y=a("deviation"),b=a("customScrollParent"),S=Ae.useRef(null),w=a("scrollerRef"),{scrollByCallback:E,scrollerRef:k,scrollToCallback:N}=Ry(f,h,x,w,b);return Ty(()=>{var T;return k.current=b||((T=S.current)==null?void 0:T.ownerDocument.defaultView),()=>{k.current=null}},[k,b]),t("windowScrollTo",N),t("scrollBy",E),r.jsx(x,{ref:S,"data-virtuoso-scroller":!0,style:{position:"relative",...c,...v!==0?{height:v+y}:void 0},...d,...fn(x,u),children:i})})}const bw=({children:t})=>{const a=Ae.useContext(Ey),s=er("viewportHeight"),i=er("fixedItemHeight"),c=Ve("alignToBottom"),u=Ve("horizontalDirection"),d=Ae.useMemo(()=>ry(s,x=>va(x,u?"width":"height")),[s,u]),f=Ka(d,!0,Ve("skipAnimationFrameInResizeObserver"));return Ae.useEffect(()=>{a&&(s(a.viewportHeight),i(a.itemHeight))},[a,s,i]),r.jsx("div",{"data-viewport-type":"element",ref:f,style:oc(c),children:t})},jw=({children:t})=>{const a=Ae.useContext(Ey),s=er("windowViewportRect"),i=er("fixedItemHeight"),c=Ve("customScrollParent"),u=ly(s,c,Ve("skipAnimationFrameInResizeObserver")),d=Ve("alignToBottom");return Ae.useEffect(()=>{a&&(i(a.itemHeight),s({listHeight:0,offsetTop:0,visibleHeight:a.viewportHeight,visibleWidth:100}))},[a,s,i]),r.jsx("div",{"data-viewport-type":"window",ref:u,style:oc(d),children:t})},Sw=({children:t})=>{const a=Ve("TopItemListComponent")??"div",s=Ve("headerHeight"),i={...xw,marginTop:`${s}px`},c=Ve("context");return r.jsx(a,{style:i,...fn(a,c),children:t})},kw=Ae.memo(function(t){const a=Ve("useWindowScroll"),s=Ve("topItemsIndexes").length>0,i=Ve("customScrollParent"),c=Ve("context");return r.jsxs(i||a?Ew:Cw,{...t,context:c,children:[s&&r.jsx(Sw,{children:r.jsx(_g,{showTopList:!0})}),r.jsxs(i||a?jw:bw,{children:[r.jsx(vw,{}),r.jsx(_g,{}),r.jsx(yw,{})]})]})}),{Component:ww,useEmitter:Gf,useEmitterValue:Ve,usePublisher:er}=Cy(uw,{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"}},kw),Cw=Ly({useEmitter:Gf,useEmitterValue:Ve,usePublisher:er}),Ew=My({useEmitter:Gf,useEmitterValue:Ve,usePublisher:er}),Nw=ww,Tw=ut(()=>{const t=ge(h=>r.jsxs("td",{children:["Item $",h]})),a=ge(null),s=ge(h=>r.jsxs("td",{colSpan:1e3,children:["Group ",h]})),i=ge(null),c=ge(null),u=ge({}),d=ge(Ff),f=ge(Gl),x=(h,v=null)=>pn(he(u,we(y=>y[h]),Tt()),v);return{components:u,computeItemKey:d,context:a,EmptyPlaceholder:x("EmptyPlaceholder"),FillerRow:x("FillerRow"),fixedFooterContent:c,fixedHeaderContent:i,itemContent:t,groupContent:s,ScrollerComponent:x("Scroller","div"),scrollerRef:f,ScrollSeekPlaceholder:x("ScrollSeekPlaceholder"),TableBodyComponent:x("TableBody","tbody"),TableComponent:x("Table","table"),TableFooterComponent:x("TableFoot","tfoot"),TableHeadComponent:x("TableHead","thead"),TableRowComponent:x("TableRow","tr"),GroupComponent:x("Group","tr")}});Rt(wy,Tw);Vf();const Og={bottom:0,itemHeight:0,items:[],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},Rw={bottom:0,itemHeight:0,items:[{index:0}],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},{ceil:Bg,floor:qo,max:Ws,min:Id,round:Ig}=Math;function $g(t,a,s){return Array.from({length:a-t+1}).map((i,c)=>({data:s===null?null:s[c+t],index:c+t}))}function Aw(t){return{...Rw,items:t}}function To(t,a){return t!==void 0&&t.width===a.width&&t.height===a.height}function Lw(t,a){return t!==void 0&&t.column===a.column&&t.row===a.row}const Mw=ut(([{increaseViewportBy:t,listBoundary:a,overscan:s,visibleRange:i},{footerHeight:c,headerHeight:u,scrollBy:d,scrollContainerState:f,scrollTo:x,scrollTop:h,smoothScrollTargetReached:v,viewportHeight:y},b,S,{didMount:w,propsReady:E},{customScrollParent:k,useWindowScroll:N,windowScrollContainerState:T,windowScrollTo:A,windowViewportRect:B},z])=>{const P=ge(0),C=ge(0),O=ge(Og),L=ge({height:0,width:0}),_=ge({height:0,width:0}),H=it(),W=it(),q=ge(0),ee=ge(null),$=ge({column:0,row:0}),D=it(),I=it(),F=ge(!1),J=ge(0),de=ge(!0),M=ge(!1),U=ge(!1);pt(he(w,Qe(J),$e(([X,me])=>me!==0)),()=>{Ke(de,!1)}),pt(he(qt(w,de,_,L,J,M),$e(([X,me,je,Ne,,Me])=>X&&!me&&je.height!==0&&Ne.height!==0&&!Me)),([,,,,X])=>{Ke(M,!0),$f(1,()=>{Ke(H,X)}),sr(he(h),()=>{Ke(a,[0,0]),Ke(de,!0)})}),Le(he(I,$e(X=>X!=null&&X.scrollTop>0),xr(0)),C),pt(he(w,Qe(I),$e(([,X])=>X!=null)),([,X])=>{X&&(Ke(L,X.viewport),Ke(_,X.item),Ke($,X.gap),X.scrollTop>0&&(Ke(F,!0),sr(he(h,Wa(1)),me=>{Ke(F,!1)}),Ke(x,{top:X.scrollTop})))}),Le(he(L,we(({height:X})=>X)),y),Le(he(qt(Ie(L,To),Ie(_,To),Ie($,(X,me)=>X!==void 0&&X.column===me.column&&X.row===me.row),Ie(h)),we(([X,me,je,Ne])=>({gap:je,item:me,scrollTop:Ne,viewport:X}))),D),Le(he(qt(Ie(P),i,Ie($,Lw),Ie(_,To),Ie(L,To),Ie(ee),Ie(C),Ie(F),Ie(de),Ie(J)),$e(([,,,,,,,X])=>!X),we(([X,[me,je],Ne,Me,Fe,Ue,De,,Ge,ft])=>{const{column:oe,row:ve}=Ne,{height:ye,width:be}=Me,{width:Ee}=Fe;if(De===0&&(X===0||Ee===0))return Og;if(be===0){const Xe=Uf(ft,X),kt=Xe+Math.max(De-1,0);return Aw($g(Xe,kt,Ue))}const qe=zy(Ee,be,oe);let He,jt;Ge?me===0&&je===0&&De>0?(He=0,jt=De-1):(He=qe*qo((me+ve)/(ye+ve)),jt=qe*Bg((je+ve)/(ye+ve))-1,jt=Id(X-1,Ws(jt,qe-1)),He=Id(jt,Ws(0,He))):(He=0,jt=-1);const Dt=$g(He,jt,Ue),{bottom:St,top:At}=Ug(Fe,Ne,Me,Dt),xe=Bg(X/qe),Ze=xe*ye+(xe-1)*ve-St;return{bottom:St,itemHeight:ye,items:Dt,itemWidth:be,offsetBottom:Ze,offsetTop:At,top:At}})),O),Le(he(ee,$e(X=>X!==null),we(X=>X.length)),P),Le(he(qt(L,_,O,$),$e(([X,me,{items:je}])=>je.length>0&&me.height!==0&&X.height!==0),we(([X,me,{items:je},Ne])=>{const{bottom:Me,top:Fe}=Ug(X,Ne,me,je);return[Fe,Me]}),Tt(Js)),a);const K=ge(!1);Le(he(h,Qe(K),we(([X,me])=>me||X!==0)),K);const Q=$n(he(qt(O,P),$e(([{items:X}])=>X.length>0),Qe(K),$e(([[X,me],je])=>{const Ne=X.items[X.items.length-1].index===me-1;return(je||X.bottom>0&&X.itemHeight>0&&X.offsetBottom===0&&X.items.length===me)&&Ne}),we(([[,X]])=>X-1),Tt())),ce=$n(he(Ie(O),$e(({items:X})=>X.length>0&&X[0].index===0),xr(0),Tt())),Z=$n(he(Ie(O),Qe(F),$e(([{items:X},me])=>X.length>0&&!me),we(([{items:X}])=>({endIndex:X[X.length-1].index,startIndex:X[0].index})),Tt(dy),Ur(0)));Le(Z,S.scrollSeekRangeChanged),Le(he(H,Qe(L,_,P,$),we(([X,me,je,Ne,Me])=>{const Fe=xy(X),{align:Ue,behavior:De,offset:Ge}=Fe;let ft=Fe.index;ft==="LAST"&&(ft=Ne-1),ft=Ws(0,ft,Id(Ne-1,ft));let oe=gf(me,Me,je,ft);return Ue==="end"?oe=Ig(oe-me.height+je.height):Ue==="center"&&(oe=Ig(oe-me.height/2+je.height/2)),Ge!==void 0&&Ge!==0&&(oe+=Ge),{behavior:De,top:oe}})),x);const ie=pn(he(O,we(X=>X.offsetBottom+X.bottom)),0);return Le(he(B,we(X=>({height:X.visibleHeight,width:X.visibleWidth}))),L),{customScrollParent:k,data:ee,deviation:q,footerHeight:c,gap:$,headerHeight:u,increaseViewportBy:t,initialItemCount:C,itemDimensions:_,overscan:s,restoreStateFrom:I,scrollBy:d,scrollContainerState:f,scrollHeight:W,scrollTo:x,scrollToIndex:H,scrollTop:h,smoothScrollTargetReached:v,totalCount:P,useWindowScroll:N,viewportDimensions:L,windowScrollContainerState:T,windowScrollTo:A,windowViewportRect:B,...S,gridState:O,horizontalDirection:U,initialTopMostItemIndex:J,totalListHeight:ie,...b,endReached:Q,propsReady:E,rangeChanged:Z,startReached:ce,stateChanged:D,stateRestoreInProgress:F,...z}},Rt(Hf,yn,oi,Sy,Sa,Pf,ja));function zy(t,a,s){return Ws(1,qo((t+s)/(qo(a)+s)))}function Ug(t,a,s,i){const{height:c}=s;if(c===void 0||i.length===0)return{bottom:0,top:0};const u=gf(t,a,s,i[0].index);return{bottom:gf(t,a,s,i[i.length-1].index)+c,top:u}}function gf(t,a,s,i){const c=zy(t.width,s.width,a.column),u=qo(i/c),d=u*s.height+Ws(0,u-1)*a.row;return d>0?d+a.row:d}const zw=ut(()=>{const t=ge(y=>`Item ${y}`),a=ge({}),s=ge(null),i=ge("virtuoso-grid-item"),c=ge("virtuoso-grid-list"),u=ge(Ff),d=ge("div"),f=ge(Gl),x=(y,b=null)=>pn(he(a,we(S=>S[y]),Tt()),b),h=ge(!1),v=ge(!1);return Le(Ie(v),h),{components:a,computeItemKey:u,context:s,FooterComponent:x("Footer"),HeaderComponent:x("Header"),headerFooterTag:d,itemClassName:i,ItemComponent:x("Item","div"),itemContent:t,listClassName:c,ListComponent:x("List","div"),readyStateChanged:h,reportReadyState:v,ScrollerComponent:x("Scroller","div"),scrollerRef:f,ScrollSeekPlaceholder:x("ScrollSeekPlaceholder","div")}}),Dw=ut(([t,a])=>({...t,...a}),Rt(Mw,zw)),_w=Ae.memo(function(){const t=Mt("gridState"),a=Mt("listClassName"),s=Mt("itemClassName"),i=Mt("itemContent"),c=Mt("computeItemKey"),u=Mt("isSeeking"),d=tr("scrollHeight"),f=Mt("ItemComponent"),x=Mt("ListComponent"),h=Mt("ScrollSeekPlaceholder"),v=Mt("context"),y=tr("itemDimensions"),b=tr("gap"),S=Mt("log"),w=Mt("stateRestoreInProgress"),E=tr("reportReadyState"),k=Ka(Ae.useMemo(()=>N=>{const T=N.parentElement.parentElement.scrollHeight;d(T);const A=N.firstChild;if(A!==null){const{height:B,width:z}=A.getBoundingClientRect();y({height:B,width:z})}b({column:Hg("column-gap",getComputedStyle(N).columnGap,S),row:Hg("row-gap",getComputedStyle(N).rowGap,S)})},[d,y,b,S]),!0,!1);return Ty(()=>{t.itemHeight>0&&t.itemWidth>0&&E(!0)},[t]),w?null:r.jsx(x,{className:a,ref:k,...fn(x,v),"data-testid":"virtuoso-item-list",style:{paddingBottom:t.offsetBottom,paddingTop:t.offsetTop},children:t.items.map(N=>{const T=c(N.index,N.data,v);return u?r.jsx(h,{...fn(h,v),height:t.itemHeight,index:N.index,width:t.itemWidth},T):m.createElement(f,{...fn(f,v),className:s,"data-index":N.index,key:T},i(N.index,N.data,v))})})}),Ow=Ae.memo(function(){const t=Mt("HeaderComponent"),a=tr("headerHeight"),s=Mt("headerFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,!1),c=Mt("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null}),Bw=Ae.memo(function(){const t=Mt("FooterComponent"),a=tr("footerHeight"),s=Mt("headerFooterTag"),i=Ka(Ae.useMemo(()=>u=>{a(va(u,"height"))},[a]),!0,!1),c=Mt("context");return t!=null?r.jsx(s,{ref:i,children:r.jsx(t,{...fn(t,c)})}):null}),Iw=({children:t})=>{const a=Ae.useContext(Ny),s=tr("itemDimensions"),i=tr("viewportDimensions"),c=Ka(Ae.useMemo(()=>u=>{i(u.getBoundingClientRect())},[i]),!0,!1);return Ae.useEffect(()=>{a&&(i({height:a.viewportHeight,width:a.viewportWidth}),s({height:a.itemHeight,width:a.itemWidth}))},[a,i,s]),r.jsx("div",{ref:c,style:oc(!1),children:t})},$w=({children:t})=>{const a=Ae.useContext(Ny),s=tr("windowViewportRect"),i=tr("itemDimensions"),c=Mt("customScrollParent"),u=ly(s,c,!1);return Ae.useEffect(()=>{a&&(i({height:a.itemHeight,width:a.itemWidth}),s({listHeight:0,offsetTop:0,visibleHeight:a.viewportHeight,visibleWidth:a.viewportWidth}))},[a,s,i]),r.jsx("div",{ref:u,style:oc(!1),children:t})},Uw=Ae.memo(function({...t}){const a=Mt("useWindowScroll"),s=Mt("customScrollParent"),i=s||a?Pw:Hw,c=s||a?$w:Iw,u=Mt("context");return r.jsx(i,{...t,...fn(i,u),children:r.jsxs(c,{children:[r.jsx(Ow,{}),r.jsx(_w,{}),r.jsx(Bw,{})]})})}),{useEmitter:Dy,useEmitterValue:Mt,usePublisher:tr}=Cy(Dw,{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"}},Uw),Hw=Ly({useEmitter:Dy,useEmitterValue:Mt,usePublisher:tr}),Pw=My({useEmitter:Dy,useEmitterValue:Mt,usePublisher:tr});function Hg(t,a,s){return a!=="normal"&&(a==null?void 0:a.endsWith("px"))!==!0&&s(`${t} was not resolved to pixel value correctly`,a,Qt.WARN),a==="normal"?0:parseInt(a??"0",10)}const Vw={source:"vskill-sidebar-own-collapsed",installed:"vskill-sidebar-installed-collapsed"},_y={source:"Own",installed:"Installed"};function Fw(t){try{const a=localStorage.getItem(t);if(a!=null)return a==="true"}catch{}try{if(typeof sessionStorage<"u"){const a=sessionStorage.getItem(t);if(a!=null)return a==="true"}}catch{}return!1}function Gw(t,a){const s=a?"true":"false";try{localStorage.setItem(t,s)}catch{}try{typeof sessionStorage<"u"&&sessionStorage.setItem(t,s)}catch{}}function Pg({origin:t,count:a,filteredCount:s,updateCount:i,children:c}){const u=Vw[t],[d,f]=m.useState(()=>Fw(u)),x=m.useCallback(()=>{f(b=>{const S=!b;return Gw(u,S),S})},[u]),h=_y[t],v=`sidebar-section-${t}-header`,y=`sidebar-section-${t}-group`;return r.jsxs("section",{"aria-labelledby":v,style:{display:"flex",flexDirection:"column",minHeight:0},children:[r.jsxs("button",{id:v,type:"button","data-testid":"sidebar-section-header","aria-expanded":!d,"aria-controls":y,onClick:x,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:[r.jsx(qw,{collapsed:d}),r.jsx("h2",{"aria-level":2,style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-primary)",margin:0},children:h}),r.jsx("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:s!=null&&s!==a?`(${s} of ${a})`:`(${a})`}),i!=null&&i>0&&r.jsx(Ww,{origin:t,updateCount:i})]}),!d&&r.jsx("div",{id:y,role:"group","aria-labelledby":v,style:{display:"flex",flexDirection:"column",minHeight:0},children:c})]})}function Ww({origin:t,updateCount:a}){const[s,i]=m.useState(!1),c=_y[t].toLowerCase(),u=`${a} updates available in ${c} section, view all`;return r.jsxs("span",{role:"link",tabIndex:0,"data-testid":"sidebar-section-update-chip","aria-label":u,onClick:d=>{d.stopPropagation(),window.location.hash="#/updates"},onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),d.stopPropagation(),window.location.hash="#/updates")},onFocus:()=>i(!0),onBlur:()=>i(!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:s?"2px solid var(--border-focus)":"none",outlineOffset:2},children:[a," updates",r.jsx("span",{"aria-hidden":"true",style:{fontSize:9,marginLeft:2},children:"▾"})]})}function qw({collapsed:t}){return r.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:t?"rotate(0deg)":"rotate(90deg)",transition:"transform var(--duration-fast, 120ms) var(--ease-standard, ease)",flexShrink:0},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})}function Wf(t,a){const s=a.trim().toLowerCase();return s?t.skill.toLowerCase().includes(s)||t.plugin.toLowerCase().includes(s)||t.dir.toLowerCase().includes(s):!0}function Yw({value:t,onChange:a,placeholder:s="Filter skills…",validationPattern:i,validationMessage:c="Invalid filter expression"}){const u=m.useRef(null),d=m.useId(),f=!!i&&t.trim()!==""&&!i.test(t);return m.useEffect(()=>{function x(h){var b;if(h.key!=="/")return;const v=h.target;if(!v)return;const y=v.tagName;y==="INPUT"||y==="TEXTAREA"||v.isContentEditable||(h.preventDefault(),(b=u.current)==null||b.focus())}return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]),r.jsxs("div",{role:"search",style:{display:"flex",alignItems:"center",gap:6,padding:"6px 12px",borderBottom:"1px solid var(--border-default)"},children:[r.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:[r.jsx("circle",{cx:"11",cy:"11",r:"8"}),r.jsx("path",{d:"M21 21l-4.35-4.35"})]}),r.jsx("input",{ref:u,type:"search","aria-label":"Filter skills","aria-invalid":f?!0:void 0,"aria-describedby":f?d:void 0,value:t,placeholder:s,onChange:x=>a(x.currentTarget.value),onKeyDown:x=>{x.key==="Escape"&&(a(""),x.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"}}),f&&r.jsx("span",{id:d,role:"alert","aria-live":"polite",style:{fontFamily:"var(--font-sans)",fontSize:10,color:"var(--text-error, #B42318)",marginLeft:4,whiteSpace:"nowrap"},children:c}),r.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:t?"none":"inline-block"},children:"/"})]})}function Kw({target:t}){const a=typeof t=="string"&&t.length>0,s=a?`symlinked → ${t}`:"symlinked — cycle detected or target unresolved",i=a?`symlinked from ${t}`:"symlinked, target unresolved";return r.jsx("span",{"data-testid":"symlink-chip",role:"img","aria-label":i,title:s,tabIndex:0,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,borderRadius:3,color:"var(--text-secondary)",flexShrink:0},children:r.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:[r.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"}),r.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 Xw({skill:t}){if(!t.updateAvailable)return null;const a=t.currentVersion??"",s=t.latestVersion,i=s?`Update available: ${a} → ${s}`.trim():"Update available";return r.jsx("span",{"data-testid":"skill-row-update-glyph",title:i,"aria-label":"Update available",style:{color:"var(--color-own)",display:"inline-flex",flexShrink:0},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 19V5"}),r.jsx("path",{d:"M5 12l7-7 7 7"})]})})}function Qw({skillId:t,trackedForUpdates:a}){let s=null;try{s=m.useContext(Wv)}catch{s=null}const i=s==null?void 0:s.updatesById.get(t);if(i){const c=`Update available → ${i.version}${i.diffSummary?` — ${i.diffSummary}`:""}`;return r.jsx("span",{"data-testid":"update-chip-update-dot","aria-label":`Update available: ${i.version}`,title:c,style:{display:"inline-block",width:8,height:8,borderRadius:999,background:"var(--color-accent, #2563eb)",flexShrink:0}})}return a?null:r.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 Zw(t,a,s){if(!(!t||t==="frontmatter"))return t==="plugin"?`Inherited from ${s&&s.trim()!==""?s:"plugin"} plugin v${a}`:t==="registry"?"Inherited from registry":"No version declared"}function ci(t){const{version:a,showPrefix:s=!0,size:i="md",source:c,pluginName:u}=t,d=typeof a=="string"?a.trim():"",f=d===""||d==="0.0.0"?"1.0.0":d,x=s&&!f.startsWith("v")?`v${f}`:f,h=i==="sm"?10:12,v=i==="sm"?1:2,y=i==="sm"?5:8,b=c==="registry"||c==="plugin",S=Zw(c,f,u),w=t.title??S,E={display:"inline-flex",alignItems:"center",padding:`${v}px ${y}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:h,fontVariantNumeric:"tabular-nums",lineHeight:1.2,whiteSpace:"nowrap",flexShrink:0};return b&&(E.fontStyle="italic"),r.jsx("span",{"data-testid":t["data-testid"]??"version-badge","data-version":f,"data-version-source":c,title:w,style:E,children:x})}function Jw({skill:t,isSelected:a,onSelect:s,onContextMenu:i,dirty:c}){const u=t.origin==="installed"?"var(--status-installed)":"var(--status-own)";return r.jsxs("button",{type:"button",onClick:s,onContextMenu:i?d=>{d.preventDefault(),i(d,t)}:void 0,"aria-current":a?"true":void 0,"aria-selected":!!a,"data-testid":"skill-row","data-selected":a,"data-origin":t.origin,"data-skill-id":`${t.plugin}/${t.skill}`,style:{display:"flex",alignItems:"center",gap:8,width:"100%",height:36,padding:"0 12px 0 14px",background:a?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent",boxShadow:a?"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:[r.jsx("span",{"aria-hidden":"true","aria-label":t.updateAvailable?"Update available":void 0,title:t.updateAvailable?`Update available${t.latestVersion?` → ${t.latestVersion}`:""}`:void 0,style:{width:t.updateAvailable?10:6,height:t.updateAvailable?10:6,borderRadius:"50%",background:u,display:"inline-block",flexShrink:0,boxShadow:t.updateAvailable?"0 0 0 2px var(--color-own, #d97706)":"none",transition:"box-shadow 180ms ease, width 180ms ease, height 180ms ease"}}),r.jsx("span",{title:t.skill,style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.skill}),c&&r.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)"}}),r.jsx(ci,{version:t.resolvedVersion??t.version??"1.0.0",source:t.versionSource??(t.version?"frontmatter":"default"),pluginName:t.pluginName??null,size:"sm",showPrefix:!1,"data-testid":"skill-row-version"}),t.isSymlink&&r.jsx(Kw,{target:t.symlinkTarget??null}),r.jsx(Xw,{skill:t}),r.jsx(Qw,{skillId:`${t.plugin}/${t.skill}`,trackedForUpdates:t.trackedForUpdates??!0})]})}const qs=m.memo(Jw);function eC({plugin:t,skills:a,selectedKey:s,onSelect:i,onContextMenu:c,dirtySkillIds:u}){var v;const d=[...a].sort((y,b)=>y.skill.localeCompare(b.skill)),f=(v=a[0])==null?void 0:v.pluginDisplay,x=t.replace(/^\./,"").toLowerCase(),h=!!f&&f.toLowerCase()!==x;return r.jsxs("div",{role:"group","aria-label":`${t} (${a.length})`,children:[r.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:8,padding:"8px 12px 4px 14px"},children:[r.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:t,children:t}),r.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",a.length,")"]}),h&&r.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:f,children:f})]}),r.jsx("div",{role:"list",children:d.map(y=>{const b=!!s&&s.plugin===y.plugin&&s.skill===y.skill;return r.jsx("div",{role:"listitem",children:r.jsx(qs,{skill:y,isSelected:b,onSelect:()=>i(y),onContextMenu:c,dirty:u==null?void 0:u.has(`${y.plugin}/${y.skill}`)})},`${y.plugin}/${y.skill}`)})})]})}function tC(t,a){if(!t||typeof window>"u")return a;try{const s=window.localStorage.getItem(t);return s===null?a:s==="true"}catch{return a}}function $d({skills:t,pluginName:a,initialCollapsed:s=!1,persistKey:i,renderSkill:c,headerActionSlot:u,forceOpen:d=!1}){var S;const f=a??((S=t[0])==null?void 0:S.pluginName)??"unknown-plugin",[x,h]=m.useState(()=>tC(i,s)),v=d?!1:x,y=m.useCallback(()=>{h(w=>{const E=!w;if(i&&typeof window<"u")try{window.localStorage.setItem(i,String(E))}catch{}return E})},[i]),b=v?"▸":"▾";return r.jsxs("div",{"data-vskill-plugin-tree":f,role:"group","aria-label":`${f} (${t.length})`,children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",paddingRight:6},children:[r.jsxs("button",{type:"button",onClick:y,"aria-expanded":!v,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:[r.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:b}),r.jsx("span",{className:"vskill-plugin-name",style:{fontFamily:"var(--font-mono)"},children:f}),r.jsxs("span",{className:"vskill-plugin-count tabular-nums",style:{marginLeft:"auto",fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-mono)"},children:["(",t.length,")"]})]}),u&&r.jsx("div",{style:{display:"inline-flex",alignItems:"center",flexShrink:0},children:u})]}),!v&&r.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:t.map(w=>r.jsx("div",{"data-vskill-plugin-skill":w.pluginNamespace??w.skill,children:c(w)},`${w.pluginNamespace??w.skill}`))})]})}function Vo({open:t,title:a,body:s,confirmLabel:i="Confirm",cancelLabel:c="Cancel",variant:u="default",onConfirm:d,onCancel:f}){const x=m.useRef(null),h=m.useRef(null),v=m.useRef(null);if(m.useEffect(()=>{if(t)return v.current=document.activeElement??null,requestAnimationFrame(()=>{var w;(w=h.current)==null||w.focus()}),()=>{var w,E;(E=(w=v.current)==null?void 0:w.focus)==null||E.call(w),v.current=null}},[t]),m.useEffect(()=>{if(!t)return;function w(E){if(E.key==="Escape"){E.preventDefault(),f();return}if(E.key==="Tab"&&x.current){const k=x.current.querySelectorAll("button:not([disabled])");if(k.length===0)return;const N=k[0],T=k[k.length-1];E.shiftKey&&document.activeElement===N?(E.preventDefault(),T.focus()):!E.shiftKey&&document.activeElement===T&&(E.preventDefault(),N.focus())}}return window.addEventListener("keydown",w,!0),()=>window.removeEventListener("keydown",w,!0)},[t,f]),!t)return null;const y="confirm-dialog-title",b="confirm-dialog-body",S=u==="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 r.jsx("div",{"data-testid":"confirm-dialog-overlay",onMouseDown:w=>{w.target===w.currentTarget&&f()},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:100},children:r.jsxs("div",{ref:x,role:"alertdialog","aria-modal":"true","aria-labelledby":y,"aria-describedby":b,"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:[r.jsx("h2",{id:y,style:{margin:0,fontSize:16,fontWeight:600,marginBottom:8},children:a}),r.jsx("p",{id:b,style:{margin:0,fontSize:13,color:"var(--text-secondary)",marginBottom:16,lineHeight:1.5},children:s}),r.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8},children:[r.jsx("button",{ref:h,type:"button","data-testid":"confirm-dialog-cancel",onClick:f,style:{padding:"6px 14px",borderRadius:6,cursor:"pointer",background:"transparent",color:"var(--text-primary)",border:"1px solid var(--border-default)",fontSize:13},children:c}),r.jsx("button",{type:"button","data-testid":"confirm-dialog-confirm",onClick:d,style:{padding:"6px 14px",borderRadius:6,cursor:"pointer",fontSize:13,...S},children:i})]})]})})}function nC(t){const a=(typeof navigator<"u"?navigator.platform:"").toLowerCase();return a.includes("mac")?"system Trash":a.includes("win")?"Recycle Bin":"Trash"}function Ud(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function rC({pluginName:t,enabled:a,onAfterAction:s}){const[i,c]=m.useState(!1),[u,d]=m.useState(null),[f,x]=m.useState(null),[h,v]=m.useState(!1),y=m.useRef(null);m.useEffect(()=>{if(!i)return;function w(E){y.current&&!y.current.contains(E.target)&&c(!1)}return document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[i]);async function b(w){d(w),x(null);try{const E=await fetch(`/api/plugins/${encodeURIComponent(t)}/${w}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),k=await E.json().catch(()=>({}));if(!E.ok||!k.ok){const N=k.error??`${w} failed (${E.status})`;x(N),w==="uninstall"&&Ud(`Failed to uninstall ${t}: ${N}`,"error");return}if(w==="uninstall"){const N=k.fallback==="orphan-cache-removed"?`Removed orphaned ${t}`:`Uninstalled ${t}`;Ud(N,"success")}In("skills"),ty(),s==null||s(),c(!1)}catch(E){const k=E instanceof Error?E.message:String(E);x(k),w==="uninstall"&&Ud(`Failed to uninstall ${t}: ${k}`,"error")}finally{d(null)}}function S(){v(!0)}return r.jsxs("div",{ref:y,style:{position:"relative",display:"inline-flex"},children:[r.jsx("button",{type:"button","aria-label":`Manage ${t}`,title:`Manage ${t}`,onClick:w=>{w.stopPropagation(),c(E=>!E)},"data-vskill-plugin-action-trigger":t,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:22,height:22,padding:0,marginLeft:4,border:"none",background:i?"var(--surface-2, rgba(0,0,0,0.08))":"transparent",color:"var(--text-tertiary)",borderRadius:4,cursor:"pointer",fontSize:14,lineHeight:1},onMouseEnter:w=>{w.currentTarget.style.color="var(--text-primary)",w.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.06))"},onMouseLeave:w=>{w.currentTarget.style.color="var(--text-tertiary)",w.currentTarget.style.background=i?"var(--surface-2, rgba(0,0,0,0.08))":"transparent"},children:"⋯"}),i&&r.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:[a?r.jsx(Hd,{onClick:()=>void b("disable"),disabled:u!==null,busy:u==="disable",label:"Disable",hint:"Keep installed, turn off"}):r.jsx(Hd,{onClick:()=>void b("enable"),disabled:u!==null,busy:u==="enable",label:"Enable",hint:"Activate plugin"}),r.jsx(Hd,{onClick:S,disabled:u!==null,busy:u==="uninstall",label:"Uninstall",hint:"Remove plugin + skills",danger:!0}),f&&r.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:f})]}),r.jsx(Vo,{open:h,title:`Uninstall ${t}?`,body:`This removes the ${t} plugin and all of its skills. You can reinstall it later from the marketplace.`,confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onCancel:()=>{v(!1),c(!1)},onConfirm:()=>{v(!1),b("uninstall")}})]})}function Hd({onClick:t,disabled:a,busy:s,label:i,hint:c,danger:u}){return r.jsxs("button",{type:"button",onClick:d=>{d.stopPropagation(),t()},disabled:a,role:"menuitem",style:{display:"block",width:"100%",padding:"6px 10px",textAlign:"left",border:"none",background:"transparent",borderRadius:4,cursor:a?"not-allowed":"pointer",color:u?"var(--color-error, #b91c1c)":"var(--text-primary)",opacity:a&&!s?.5:1,fontFamily:"inherit"},onMouseEnter:d=>{a||(d.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.05))")},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:[r.jsx("div",{style:{fontSize:12,fontWeight:500},children:s?`${i}…`:i}),r.jsx("div",{style:{fontSize:10,color:"var(--text-tertiary)"},children:c})]})}const aC=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function lC({anchorSkillDir:t,candidateLabel:a,initialName:s,initialDescription:i,onConverted:c,onCancel:u}){const[d,f]=m.useState(s),[x,h]=m.useState(i??""),[v,y]=m.useState(!1),[b,S]=m.useState(null),[w,E]=m.useState(null),k=aC.test(d),N=v||!k,T=m.useCallback(async A=>{if(A.preventDefault(),!N){y(!0),S(null),E(null);try{const B=await ke.convertToPlugin({anchorSkillDir:t,pluginName:d.trim(),description:x.trim()});c({pluginDir:B.pluginDir,manifestPath:B.manifestPath,validation:B.validation})}catch(B){if(B instanceof Ga){S(B.message);const z=B.details;z&&typeof z.stderr=="string"&&E(z.stderr)}else S(B instanceof Error?B.message:String(B));y(!1)}}},[N,t,d,x,c]);return r.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:A=>{A.target===A.currentTarget&&!v&&u()},children:r.jsxs("form",{onSubmit:T,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:[r.jsxs("h2",{id:"vskill-convert-dialog-title",style:{margin:0,fontSize:16,fontWeight:600},children:["Convert ",r.jsxs("span",{style:{fontFamily:"var(--font-mono)"},children:[a,"/"]})," to a plugin"]}),r.jsxs("p",{style:{marginTop:8,marginBottom:16,fontSize:13,color:"var(--text-secondary)"},children:["Writes ",r.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:".claude-plugin/plugin.json"})," into this folder and validates it via ",r.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:"claude plugin validate"}),". The skills already on disk will appear nested under the new plugin."]}),r.jsx("label",{style:{display:"block",fontSize:12,fontWeight:500,marginBottom:4},children:"Plugin name"}),r.jsx("input",{type:"text",value:d,onChange:A=>f(A.target.value),disabled:v,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}}),!k&&r.jsx("div",{style:{fontSize:11,color:"var(--color-error, #c00)",marginTop:4},children:"Must be kebab-case (lowercase letters, digits, hyphens; 2–64 chars)."}),r.jsx("label",{style:{display:"block",fontSize:12,fontWeight:500,marginTop:12,marginBottom:4},children:"Description"}),r.jsx("input",{type:"text",value:x,onChange:A=>h(A.target.value),disabled:v,style:{width:"100%",padding:"6px 8px",fontSize:13,boxSizing:"border-box",border:"1px solid var(--border-subtle)",borderRadius:4}}),b&&r.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:[r.jsx("div",{style:{fontWeight:500},children:b}),w&&r.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:w})]}),r.jsxs("div",{style:{marginTop:16,display:"flex",justifyContent:"flex-end",gap:8},children:[r.jsx("button",{type:"button",onClick:u,disabled:v,style:{padding:"6px 12px",fontSize:13,background:"transparent",border:"1px solid var(--border-subtle)",borderRadius:4,cursor:v?"not-allowed":"pointer"},children:"Cancel"}),r.jsx("button",{type:"submit",disabled:N,style:{padding:"6px 12px",fontSize:13,background:"var(--color-accent, #2b6cb0)",color:"white",border:"none",borderRadius:4,cursor:N?"not-allowed":"pointer",opacity:N?.5:1},children:v?"Converting…":"Convert"})]})]})})}function Vg({name:t,count:a,className:s,variant:i,collapsed:c,onToggle:u,action:d}){const f=i==="authoring"?"var(--color-own, #f59e0b)":"var(--color-accent, #2f6f8f)",x=i==="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))",h=typeof u=="function",v={position:"sticky",top:0,zIndex:4,backdropFilter:"saturate(1.4) blur(10px)",WebkitBackdropFilter:"saturate(1.4) blur(10px)",background:x,borderLeft:`3px solid ${f}`,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:h?"pointer":"default",border:"none",textAlign:"left"},y=c?"▸":"▾",b=r.jsxs(r.Fragment,{children:[h&&r.jsx("span",{"aria-hidden":!0,style:{fontSize:15,fontWeight:700,color:f,width:16,display:"inline-block",textAlign:"center",letterSpacing:0,textTransform:"none"},children:y}),r.jsx("span",{className:"vskill-group-header-name",children:t}),r.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:["(",a,")"]}),d&&r.jsx("span",{style:{marginLeft:"auto"},children:r.jsx(sC,{label:d.label,title:d.title,icon:d.icon,onClick:d.onClick,accent:f})})]});return h?r.jsx("button",{type:"button","data-vskill-group-header":t,className:["vskill-group-header select-none",s??""].join(" ").trim(),style:v,onClick:()=>u(!c),"aria-expanded":!c,children:b}):r.jsx("div",{"data-vskill-group-header":t,role:"heading","aria-level":3,className:["vskill-group-header select-none",s??""].join(" ").trim(),style:v,children:b})}function sC({label:t,title:a,icon:s,onClick:i,accent:c}){return r.jsxs("button",{type:"button","aria-label":t,title:a??t,onClick:u=>{u.stopPropagation(),i()},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,height:22,padding:"0 7px",border:`1px solid ${c}`,background:"transparent",color:c,borderRadius:4,fontSize:10,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",cursor:"pointer",fontFamily:"inherit"},onMouseEnter:u=>{u.currentTarget.style.background=`color-mix(in oklch, ${c} 15%, transparent)`},onMouseLeave:u=>{u.currentTarget.style.background="transparent"},children:[s,t]})}function iC(){return r.jsxs("div",{"aria-hidden":"true",role:"presentation",style:{display:"flex",alignItems:"center",gap:8,height:36,padding:"0 12px 0 14px"},children:[r.jsx("span",{className:"placeholder",style:{width:6,height:6,borderRadius:"50%",flexShrink:0}}),r.jsx("span",{className:"placeholder",style:{height:10,flex:1,borderRadius:3,maxWidth:180}})]})}function oC(t){const a=t.key.split("+").map(f=>f.trim()).filter(Boolean);let s=!!t.meta,i=!!t.ctrl,c=!!t.shift,u=!!t.alt,d=t.key;if(a.length>1){for(const f of a.slice(0,-1)){const x=f.toLowerCase();x==="cmd"||x==="meta"||x==="⌘"?s=!0:x==="ctrl"||x==="control"?i=!0:x==="shift"?c=!0:(x==="alt"||x==="option")&&(u=!0)}d=a[a.length-1]}return{key:d.length===1?d.toLowerCase():d,meta:s,ctrl:i,shift:c,alt:u,allowInInputs:!!t.allowInInputs,handler:t.handler}}function cC(t){if(!t||!(t instanceof HTMLElement))return!1;const a=t.tagName;if(a==="INPUT"||a==="TEXTAREA"||t.isContentEditable)return!0;const s=t.getAttribute("contenteditable");return s!=null&&s!=="false"||t.getAttribute("role")==="textbox"}function uC(t,a){const s=!!t.metaKey,i=!!t.ctrlKey,c=!!t.shiftKey,u=!!t.altKey;return s!==a.meta||i!==a.ctrl||c!==a.shift||u!==a.alt?!1:(t.key.length===1?t.key.toLowerCase():t.key)===a.key}function vf(t,a={}){const{enabled:s=!0,target:i}=a,c=m.useRef([]),u=Array.isArray(t)?t:[t];c.current=u.map(oC),m.useEffect(()=>{if(!s)return;const d=i??(typeof window<"u"?window:void 0);if(!d)return;function f(x){const h=x,v=cC(h.target);for(const y of c.current){if(!uC(h,y))continue;const b=y.meta||y.ctrl||y.alt;if(!(v&&!y.allowInInputs&&!b)){y.handler(h);return}}}return d.addEventListener("keydown",f),()=>{d.removeEventListener("keydown",f)}},[s,i])}function Oy(){const{data:t,loading:a,error:s,revalidate:i}=qa("project-github-status",()=>ke.getProjectGitHubStatus());return{status:t,loading:a,error:s,revalidate:i}}function dC(t){if(typeof window>"u")return!1;try{return window.localStorage.getItem(`vskill-github-hint-dismissed-${t}`)==="true"}catch{return!1}}function fC({projectRoot:t}){const{status:a,loading:s}=Oy();if(s||!a||a.status==="github"||dC(t))return null;const i=a.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",c=()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:focus-publish-row"))};return r.jsx("button",{type:"button","data-testid":"sidebar-github-not-connected","aria-label":"GitHub not connected — click for help",title:i,onClick:c,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:r.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:[r.jsx("path",{d:"m2 2 20 20"}),r.jsx("path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193"}),r.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 pC=200;function mC(t){return t.scope==="own"||t.scope==="installed"||t.scope==="global"?t.scope:t.origin==="installed"?"installed":"own"}function hC(t,a){const s={availableProject:[],availablePersonal:[],availablePlugin:[],authoringProject:[],authoringPlugin:[]};for(const d of t){const f=d.scopeV2??(d.scope==="installed"?"available-project":d.scope==="global"?"available-personal":"authoring-project");f==="available-project"?s.availableProject.push(d):f==="available-personal"?s.availablePersonal.push(d):f==="available-plugin"?s.availablePlugin.push(d):f==="authoring-plugin"?s.authoringPlugin.push(d):s.authoringProject.push(d)}function i(d){const f=d.filter(v=>Wf(v,a)),x={};for(const v of f){const y=v.pluginName??v.plugin;(x[y]||(x[y]=[])).push(v)}const h=Object.entries(x).sort((v,y)=>v[0].localeCompare(y[0]));return{total:d.length,filtered:f.length,byPlugin:h}}const c=i(s.authoringProject),u=c.byPlugin.filter(([d,f])=>f.length>=2&&d.trim().length>=2).map(([d,f])=>({groupKey:d,skills:f,anchorSkillDir:f[0].dir}));return{availableProject:i(s.availableProject),availablePersonal:i(s.availablePersonal),availablePlugin:i(s.availablePlugin),authoringProject:c,authoringPlugin:i(s.authoringPlugin),authoringCandidatePlugins:u}}function xC(t,a){const s=[],i=[],c=[];for(const d of t){const f=mC(d);f==="global"?c.push(d):f==="installed"?i.push(d):s.push(d)}function u(d){var v;const f=d.filter(y=>Wf(y,a)),x={};for(const y of f)(x[v=y.plugin]||(x[v]=[])).push(y);const h=Object.entries(x).sort((y,b)=>y[0].localeCompare(b[0]));return{total:d.length,filtered:f.length,byPlugin:h}}return{own:u(s),installed:u(i),global:u(c)}}function gC(t,a){const s=[],i=[];for(const u of t)(u.origin==="installed"?i:s).push(u);function c(u){var h;const d=u.filter(v=>Wf(v,a)),f={};for(const v of d)(f[h=v.plugin]||(f[h]=[])).push(v);const x=Object.entries(f).sort((v,y)=>v[0].localeCompare(y[0]));return{total:u.length,filtered:d.length,byPlugin:x}}return{own:c(s),installed:c(i)}}function vC({skills:t,selectedKey:a,onSelect:s,isLoading:i,error:c,onRetry:u,onContextMenu:d,outdatedByOrigin:f,activeAgentId:x,outdatedByScope:h,topSlot:v,revealSkillId:y,onRevealComplete:b,dirtySkillIds:S,onSkillsChanged:w}){const[E,k]=m.useState(null),N=!!x||t.some(ie=>ie.scope!==void 0&&ie.scope!==null),T=x??"claude-cli",[A,B]=m.useState(""),z=m.useDeferredValue(A),P=m.useMemo(()=>xC(t,z),[t,z]),C=m.useMemo(()=>hC(t,z),[t,z]),O=T==="claude-code",{plugins:L}=gk(),_=O?{plugins:L??[]}:void 0,H=m.useMemo(()=>{const ie=new Map;for(const X of(_==null?void 0:_.plugins)??[]){const me=ie.get(X.name);ie.set(X.name,!!me||!!X.enabled)}return ie},[_==null?void 0:_.plugins]),[W,q]=m.useState(()=>yf(`vskill-sidebar-${T}-group-available-collapsed`)),[ee,$]=m.useState(()=>yf(`vskill-sidebar-${T}-group-authoring-collapsed`)),D=m.useCallback(ie=>{q(ie);try{window.localStorage.setItem(`vskill-sidebar-${T}-group-available-collapsed`,String(ie))}catch{}},[T]),I=m.useCallback(ie=>{$(ie);try{window.localStorage.setItem(`vskill-sidebar-${T}-group-authoring-collapsed`,String(ie))}catch{}},[T]),{own:F,installed:J}=m.useMemo(()=>gC(t,z),[t,z]),M=P.own.filtered+P.installed.filtered+P.global.filtered>=pC,U=m.useMemo(()=>{const ie=X=>{const me=[];for(const[,je]of X){const Ne=[...je].sort((Me,Fe)=>Me.skill.localeCompare(Fe.skill));me.push(...Ne)}return me};return N?[...ie(P.own.byPlugin),...ie(P.installed.byPlugin),...ie(P.global.byPlugin)]:[...ie(F.byPlugin),...ie(J.byPlugin)]},[N,P.own.byPlugin,P.installed.byPlugin,P.global.byPlugin,F.byPlugin,J.byPlugin]),K=m.useMemo(()=>a?U.findIndex(ie=>ie.plugin===a.plugin&&ie.skill===a.skill):-1,[U,a]),Q=m.useCallback(ie=>{if(U.length===0)return;const X=K<0?ie>0?0:U.length-1:Math.min(Math.max(K+ie,0),U.length-1);s(U[X])},[U,K,s]),ce=m.useMemo(()=>{if(!y)return null;const[ie,X]=y.split("/");if(!ie||!X)return null;const me=t.find(Me=>Me.plugin===ie&&Me.skill===X);if(!me)return{plugin:ie,skill:X,bucket:null,pluginName:null};const je=me.source==="plugin"?"plugin":"project",Ne=je==="plugin"?me.pluginName??ie:null;return{plugin:ie,skill:X,bucket:je,pluginName:Ne}},[y,t]),Z=m.useRef(null);return m.useEffect(()=>{if(!y){Z.current=null;return}if(Z.current===y)return;const ie=typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(y):y.replace(/["\\]/g,"\\$&"),X=document.querySelector(`[data-skill-id="${ie}"]`);X&&(Z.current=y,X.scrollIntoView({behavior:"smooth",block:"nearest"}),b==null||b())},[y,b,t]),vf([{key:"j",handler:()=>Q(1)},{key:"k",handler:()=>Q(-1)},{key:"Enter",handler:()=>{K>=0&&s(U[K])}}],{enabled:!i&&!c}),r.jsxs("div",{"data-testid":"sidebar",style:{display:"flex",flexDirection:"column",minHeight:0,height:"100%",fontFamily:"var(--font-sans)"},children:[v,r.jsx(Yw,{value:A,onChange:B}),i&&r.jsx(CC,{}),!i&&c&&r.jsx(EC,{error:c,onRetry:u}),!i&&!c&&N&&r.jsxs("div",{style:{flex:1,overflowY:"auto",minHeight:0},children:[r.jsx(Vg,{name:le.scopeLabels.groupAvailable.toUpperCase(),variant:"available",collapsed:W,onToggle:D,count:C.availableProject.total+C.availablePersonal.total+C.availablePlugin.total}),!W&&r.jsxs(r.Fragment,{children:[r.jsx(Is,{label:le.scopeLabels.sourceProject,storageKey:`vskill-sidebar-${T}-available-project-collapsed`,count:C.availableProject.total,filteredCount:A?C.availableProject.filtered:null,updateCount:(h==null?void 0:h.installed)??(f==null?void 0:f.installed),headerRightSlot:O?r.jsx(fC,{projectRoot:T}):null,children:C.availableProject.filtered===0?r.jsx(Gg,{queryActive:!!A,agentId:T}):r.jsx($s,{items:C.availableProject.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})}),r.jsx(Is,{label:le.scopeLabels.sourcePersonal,storageKey:`vskill-sidebar-${T}-available-personal-collapsed`,count:C.availablePersonal.total,filteredCount:A?C.availablePersonal.filtered:null,updateCount:h==null?void 0:h.global,children:C.availablePersonal.filtered===0?r.jsx(bC,{queryActive:!!A,agentId:T}):r.jsx($s,{items:C.availablePersonal.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})}),O&&r.jsxs(Is,{label:le.scopeLabels.sourcePlugin,storageKey:`vskill-sidebar-${T}-available-plugin-collapsed`,count:C.availablePlugin.total,filteredCount:A?C.availablePlugin.filtered:null,children:[r.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:[r.jsx("span",{"aria-hidden":!0,children:"🛒"})," Browse marketplaces…"]}),C.availablePlugin.filtered===0?r.jsx(jC,{queryActive:!!A,hasInstalled:C.availablePlugin.total>0}):C.availablePlugin.byPlugin.map(([ie,X])=>r.jsx($d,{pluginName:ie,skills:X,persistKey:`vskill-plugin-available-${ie}-collapsed`,headerActionSlot:O?r.jsx(rC,{pluginName:ie,enabled:H.get(ie)??!0}):void 0,renderSkill:me=>r.jsx(qs,{skill:me,isSelected:(a==null?void 0:a.plugin)===me.plugin&&(a==null?void 0:a.skill)===me.skill,onSelect:()=>s(me),onContextMenu:d,dirty:S==null?void 0:S.has(`${me.plugin}/${me.skill}`)})},`available-${ie}`))]})]}),r.jsx(wC,{}),r.jsx(Vg,{name:le.scopeLabels.groupAuthoring.toUpperCase(),variant:"authoring",collapsed:ce?!1:ee,onToggle:I,count:C.authoringProject.total+C.authoringPlugin.total,action:{label:"New",title:"Create a new skill (standalone or plugin)",icon:r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.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"}}))}}}),(!ee||ce)&&r.jsxs(r.Fragment,{children:[r.jsx(Is,{label:le.scopeLabels.authoringSkills,storageKey:`vskill-sidebar-${T}-authoring-project-collapsed`,count:C.authoringProject.total,filteredCount:A?C.authoringProject.filtered:null,updateCount:(h==null?void 0:h.own)??(f==null?void 0:f.source),forceOpen:(ce==null?void 0:ce.bucket)==="project",children:C.authoringProject.filtered===0?r.jsx(Fg,{queryActive:!!A}):r.jsxs(r.Fragment,{children:[C.authoringCandidatePlugins.map(ie=>r.jsx($d,{pluginName:ie.groupKey,skills:ie.skills,persistKey:`vskill-candidate-plugin-${ie.groupKey}-collapsed`,headerActionSlot:r.jsx("button",{type:"button",onClick:X=>{X.stopPropagation(),k({candidateLabel:ie.groupKey,initialName:ie.groupKey,anchorSkillDir:ie.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:X=>r.jsx(qs,{skill:X,isSelected:(a==null?void 0:a.plugin)===X.plugin&&(a==null?void 0:a.skill)===X.skill,onSelect:()=>s(X),onContextMenu:d,dirty:S==null?void 0:S.has(`${X.plugin}/${X.skill}`)})},`candidate-${ie.groupKey}`)),r.jsx($s,{items:C.authoringProject.byPlugin.filter(([ie])=>!C.authoringCandidatePlugins.some(X=>X.groupKey===ie)),selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})]})}),O&&r.jsx(Is,{label:le.scopeLabels.sourcePlugin,storageKey:`vskill-sidebar-${T}-authoring-plugin-collapsed`,count:C.authoringPlugin.total,filteredCount:A?C.authoringPlugin.filtered:null,forceOpen:(ce==null?void 0:ce.bucket)==="plugin",children:C.authoringPlugin.filtered===0?r.jsx(SC,{queryActive:!!A,hasSources:C.authoringPlugin.total>0,candidates:C.authoringCandidatePlugins,onPromote:ie=>k({candidateLabel:ie.groupKey,initialName:ie.groupKey,anchorSkillDir:ie.anchorSkillDir})}):C.authoringPlugin.byPlugin.map(([ie,X])=>r.jsx($d,{pluginName:ie,skills:X,persistKey:`vskill-plugin-authoring-${ie}-collapsed`,forceOpen:(ce==null?void 0:ce.bucket)==="plugin"&&ce.pluginName===ie,renderSkill:me=>r.jsx(qs,{skill:me,isSelected:(a==null?void 0:a.plugin)===me.plugin&&(a==null?void 0:a.skill)===me.skill,onSelect:()=>s(me),onContextMenu:d,dirty:S==null?void 0:S.has(`${me.plugin}/${me.skill}`)})},`authoring-${ie}`))})]})]}),!i&&!c&&!N&&r.jsxs("div",{style:{flex:1,overflowY:"auto",minHeight:0},children:[r.jsx(Pg,{origin:"source",count:F.total,filteredCount:A?F.filtered:null,updateCount:f==null?void 0:f.source,children:F.filtered===0?r.jsx(Fg,{queryActive:!!A}):r.jsx($s,{items:F.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})}),r.jsx(kC,{}),r.jsx(Pg,{origin:"installed",count:J.total,filteredCount:A?J.filtered:null,updateCount:f==null?void 0:f.installed,children:J.filtered===0?r.jsx(Gg,{queryActive:!!A}):r.jsx($s,{items:J.byPlugin,selectedKey:a,onSelect:s,onContextMenu:d,useVirtual:M,dirtySkillIds:S})})]}),E&&r.jsx(lC,{anchorSkillDir:E.anchorSkillDir,candidateLabel:E.candidateLabel,initialName:E.initialName,onCancel:()=>k(null),onConverted:ie=>{k(null),w==null||w(),ie.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 yf(t){if(typeof window>"u")return!1;try{return window.localStorage.getItem(t)==="true"}catch{return!1}}function Is({label:t,storageKey:a,count:s,filteredCount:i,updateCount:c,children:u,forceOpen:d=!1,headerRightSlot:f}){const[x,h]=m.useState(()=>yf(a)),v=d?!1:x,y=m.useCallback(()=>{h(S=>{const w=!S;if(typeof window<"u")try{window.localStorage.setItem(a,String(w))}catch{}return w})},[a]),b=i!=null&&i!==s?`${i} of ${s}`:String(s);return r.jsxs("section",{"data-vskill-named-scope":t,children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",width:"100%",padding:"6px 12px",gap:8},children:[r.jsxs("button",{type:"button",onClick:y,"aria-expanded":!v,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:[r.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:v?"▸":"▾"}),r.jsx("span",{style:{fontSize:12,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--text-primary)"},children:t}),r.jsxs("span",{style:{fontSize:11,color:"var(--text-tertiary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",b,")"]}),c!=null&&c>0&&r.jsxs("span",{style:{marginLeft:"auto",fontSize:10,color:"var(--color-own, #f59e0b)"},children:[c," update",c!==1?"s":""]})]}),f]}),!v&&r.jsx("div",{style:{paddingLeft:18},children:u})]})}function yC(t){const a=[];for(const[s,i]of t){const c=[...i].sort((u,d)=>u.skill.localeCompare(d.skill));a.push({kind:"header",plugin:s,count:c.length});for(const u of c)a.push({kind:"row",skill:u})}return a}function $s({items:t,selectedKey:a,onSelect:s,onContextMenu:i,useVirtual:c,dirtySkillIds:u}){if(c){const d=yC(t);return r.jsx("div",{"data-virtualized":"true",style:{height:420,minHeight:200},children:r.jsx(Nw,{overscan:4,totalCount:d.length,itemContent:f=>{const x=d[f];if(!x)return null;if(x.kind==="header")return r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px 4px 14px"},children:[r.jsx("span",{style:{fontSize:10,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",fontFamily:"var(--font-sans)"},children:x.plugin}),r.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums",fontFamily:"var(--font-mono)"},children:["(",x.count,")"]})]});const h=x.skill,v=!!a&&a.plugin===h.plugin&&a.skill===h.skill;return r.jsx(qs,{skill:h,isSelected:v,onSelect:()=>s(h),onContextMenu:i,dirty:u==null?void 0:u.has(`${h.plugin}/${h.skill}`)})}})})}return r.jsx("div",{"data-virtualized":"false",children:t.map(([d,f])=>r.jsx(eC,{plugin:d,skills:f,selectedKey:a,onSelect:s,onContextMenu:i,dirtySkillIds:u},d))})}function Fg({queryActive:t}){return t?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:"No skills yet.",body:r.jsxs(r.Fragment,{children:["Create one with ",r.jsx($l,{children:"vskill new"})," or the"," ",r.jsx("strong",{style:{color:"var(--text-primary)"},children:"New skill"})," action in the top rail."]})})}function Gg({queryActive:t,agentId:a}){return t?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:a?`No skills installed for ${a} in this project.`:"No installed skills.",body:r.jsxs(r.Fragment,{children:["Run ",r.jsx($l,{children:"vskill install <skill>"})," to add one."]})})}function bC({queryActive:t,agentId:a}){return t?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:`No global skills for ${a}.`,body:r.jsxs(r.Fragment,{children:["Run ",r.jsx($l,{children:"vskill install --global <skill>"})," to add one."]})})}function jC({queryActive:t,hasInstalled:a}){return t&&a?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsx(yr,{headline:"No plugin skills installed yet.",body:r.jsxs(r.Fragment,{children:["Click ",r.jsx($l,{children:"Browse marketplaces…"})," above to add one."]})})}function SC({queryActive:t,hasSources:a,candidates:s,onPromote:i}){return t&&a?r.jsx(yr,{headline:"No matches in this section.",body:"Adjust the filter or press Escape to clear."}):r.jsxs(r.Fragment,{children:[r.jsx(yr,{headline:"No plugin sources in this project.",body:r.jsxs(r.Fragment,{children:["Add ",r.jsx($l,{children:"<plugin>/.claude-plugin/plugin.json"})," to author one, or ",r.jsx($l,{children:"vskill plugin new"})," from the terminal."]})}),s&&s.length>0&&r.jsxs("div",{style:{padding:"0 14px 12px",display:"flex",flexDirection:"column",gap:6},children:[r.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary)",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:2},children:["Candidate folders (",s.length,")"]}),s.map(c=>r.jsxs("button",{type:"button",onClick:()=>i==null?void 0:i(c),title:`Promote ${c.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:[r.jsxs("span",{children:[c.groupKey,"/ ",r.jsxs("span",{style:{color:"var(--text-tertiary)"},children:["(",c.skills.length," skills)"]})]}),r.jsx("span",{style:{fontFamily:"var(--font-sans)",fontSize:11,color:"var(--text-secondary)"},children:"Promote →"})]},`promote-${c.groupKey}`))]})]})}function yr({headline:t,body:a}){return r.jsxs("div",{style:{padding:"12px 14px 16px",fontSize:12,color:"var(--text-secondary)",lineHeight:1.5},children:[r.jsx("div",{style:{fontWeight:500,color:"var(--text-primary)",marginBottom:4},children:t}),r.jsx("div",{children:a})]})}function $l({children:t}){return r.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:t})}function kC(){return r.jsx("div",{"aria-hidden":"true",style:{height:1,background:"var(--border-default)",margin:"4px 14px"}})}function wC(){return r.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 CC(){return r.jsx("div",{style:{padding:"8px 0"},children:[0,1,2,3,4,5].map(t=>r.jsx(iC,{},t))})}function EC({error:t,onRetry:a}){return r.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:[r.jsx("div",{style:{fontWeight:600,marginBottom:4},children:"Couldn't load skills."}),r.jsxs("details",{children:[r.jsx("summary",{style:{cursor:"pointer",color:"var(--text-secondary)",fontSize:11,marginBottom:4},children:NC(t)}),r.jsx("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",margin:"6px 0 0"},children:t})]}),a&&r.jsx("button",{type:"button",onClick:a,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 NC(t){const a=t.split(`
|
|
66
|
+
`)[0]??t;return a.length>80?a.slice(0,77)+"…":a}const By=240,Iy=480,$y="vskill-sidebar-width",Ys=320;function qf(t){return Number.isFinite(t)?Math.round(Math.max(By,Math.min(Iy,t))):Ys}function TC(){try{const t=localStorage.getItem($y);if(!t)return Ys;const a=Number(t);return Number.isFinite(a)?qf(a):Ys}catch{return Ys}}function RC(t){try{localStorage.setItem($y,String(qf(t)))}catch{}}function AC({initialWidth:t,onChange:a}){const s=m.useRef({startX:0,startWidth:t,pointerId:null}),i=m.useRef(t);return m.useEffect(()=>{i.current=t},[t]),m.useEffect(()=>{function c(d){if(s.current.pointerId==null||d.pointerId!==s.current.pointerId)return;const f=d.clientX-s.current.startX,x=qf(s.current.startWidth+f);i.current=x,a(x)}function u(d){s.current.pointerId==null||d.pointerId!==s.current.pointerId||(s.current.pointerId=null,RC(i.current))}return window.addEventListener("pointermove",c),window.addEventListener("pointerup",u),window.addEventListener("pointercancel",u),()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",u),window.removeEventListener("pointercancel",u)}},[a]),r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-valuemin":By,"aria-valuemax":Iy,"aria-valuenow":t,"aria-label":"Resize sidebar",title:"Drag to resize sidebar",onPointerDown:c=>{const u=c.currentTarget;s.current.startX=c.clientX,s.current.startWidth=i.current,s.current.pointerId=c.pointerId;try{u.setPointerCapture(c.pointerId)}catch{}},style:{width:4,alignSelf:"stretch",cursor:"col-resize",background:"var(--border-default)",userSelect:"none",touchAction:"none"}})}const LC=/^[ MADRCU?!]{1,2} +/;function MC(t){return t.replace(LC,"")}function zC(t,a){const s=t.endsWith("/")?t:t+"/";return a===t?"":a.startsWith(s)?a.slice(s.length):null}function DC(t,a,s){const i=new Set;if(a.length===0||t.length===0)return i;const c=a.map(u=>MC(u).trim()).filter(u=>u.length>0);for(const u of t){const d=u.dir;if(!d)continue;const f=zC(s,d);if(f===null)continue;const x=`${u.plugin}/${u.skill}`;if(f===""){c.length>0&&i.add(x);continue}const h=f+"/";for(const v of c)if(v===f||v.startsWith(h)){i.add(x);break}}return i}const _C=5e3;function OC(t,a,s=_C){const[i,c]=m.useState([]),u=m.useRef(t);return u.current=t,m.useEffect(()=>{if(!a){c([]);return}let d=!1,f=null;const x=async()=>{try{const v=await ke.gitStatus();d||c(v.paths??[])}catch{d||c([])}d||(f=setTimeout(x,s))};x();const h=()=>{x()};return typeof window<"u"&&window.addEventListener("studio:content-saved",h),()=>{d=!0,f&&clearTimeout(f),typeof window<"u"&&window.removeEventListener("studio:content-saved",h)}},[a,s]),a?DC(u.current,i,a):new Set}function BC({connected:t,hint:a,onRetry:s}){return t?null:r.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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--status-own)",display:"inline-block",flexShrink:0}}),r.jsx("span",{style:{fontWeight:500},children:"Disconnected — reconnecting…"}),a&&r.jsx("span",{style:{color:"var(--text-secondary)",fontSize:11},children:a}),r.jsx("div",{style:{flex:1}}),s&&r.jsx("button",{type:"button",onClick:s,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 Uy(t,a){if(t!==401||typeof window>"u"||!a||typeof a!="object")return;const s=a;s.error==="invalid_api_key"&&(s.provider!=="anthropic"&&s.provider!=="openai"&&s.provider!=="openrouter"||window.dispatchEvent(new CustomEvent("studio:api-key-error",{detail:{provider:s.provider}})))}function Hy(t){if(t!==void 0)try{return JSON.stringify(t)}catch(a){console.error("Failed to serialize request body:",a);try{const s=new WeakSet;return JSON.stringify(t,(i,c)=>{if(typeof c=="object"&&c!==null){if(s.has(c))return"[Circular]";s.add(c)}return c})}catch{return JSON.stringify({error:"Request body could not be serialized"})}}}function Pd(){const[t,a]=m.useState([]),[s,i]=m.useState(!1),[c,u]=m.useState(!1),[d,f]=m.useState(null),x=m.useRef(null),h=m.useCallback(async(y,b)=>{a([]),i(!0),u(!1),f(null);const S=new AbortController;x.current=S;try{const w=Hy(b),E=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json"},body:w,signal:S.signal});if(!E.ok||!E.body){let B=`HTTP ${E.status}`,z;try{z=await E.json(),z&&typeof z=="object"&&"error"in z&&typeof z.error=="string"&&(B=z.error)}catch{}throw Uy(E.status,z),new Error(B)}const k=E.body.getReader(),N=new TextDecoder;let T="",A="";for(;;){const{done:B,value:z}=await k.read();if(B)break;T+=N.decode(z,{stream:!0});const P=T.split(`
|
|
67
|
+
`);T=P.pop()||"";for(const C of P)if(C.startsWith("event: "))A=C.slice(7).trim();else if(C.startsWith("data: ")){try{const O=JSON.parse(C.slice(6)),L={event:A,data:O};A==="done"?(u(!0),a(_=>[..._,L])):a(_=>[..._,L])}catch{}A=""}}}catch(w){w.name!=="AbortError"&&f(w.message)}finally{i(!1),x.current=null}},[]),v=m.useCallback(()=>{var y;(y=x.current)==null||y.abort()},[]);return{events:t,running:s,done:c,error:d,start:h,stop:v}}function IC(t){const a=m.useRef(t);a.current=t;const[s,i]=m.useState(new Set),c=m.useRef(new Map),u=m.useCallback(async(h,v,y)=>{var S;(S=c.current.get(h))==null||S.abort();const b=new AbortController;c.current.set(h,b),i(w=>{const E=new Set(w);return E.add(h),E});try{const w=Hy(y),E=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json"},body:w,signal:b.signal});if(!E.ok||!E.body){let B=`HTTP ${E.status}`,z;try{z=await E.json(),z&&typeof z=="object"&&"error"in z&&typeof z.error=="string"&&(B=z.error)}catch{}throw Uy(E.status,z),new Error(B)}const k=E.body.getReader(),N=new TextDecoder;let T="",A="";for(;;){const{done:B,value:z}=await k.read();if(B)break;T+=N.decode(z,{stream:!0});const P=T.split(`
|
|
68
|
+
`);T=P.pop()||"";for(const C of P)if(C.startsWith("event: "))A=C.slice(7).trim();else if(C.startsWith("data: ")){try{const O=JSON.parse(C.slice(6)),L={event:A,data:O};a.current.onEvent(h,L)}catch{}A=""}}a.current.onDone(h)}catch(w){w.name!=="AbortError"&&a.current.onError(h,w.message)}finally{i(w=>{const E=new Set(w);return E.delete(h),E}),c.current.delete(h)}},[]),d=m.useCallback(h=>{var v;(v=c.current.get(h))==null||v.abort()},[]),f=m.useCallback(()=>{for(const h of c.current.values())h.abort()},[]),x=s.size>0;return{runningSet:s,startCase:u,stopCase:d,stopAll:f,isAnyCaseRunning:x}}const $C={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 UC(t,a){var s,i;switch(a.type){case"SET_LOADING":return{...t,loading:a.loading};case"SET_ERROR":return{...t,error:a.error};case"INIT_DATA":{const c=new Map;if(a.benchmark)for(const d of a.benchmark.cases)c.set(d.eval_id,{status:d.status,passRate:d.pass_rate,errorMessage:d.error_message||void 0,durationMs:d.durationMs,tokens:d.tokens,output:d.output,assertions:d.assertions.map(f=>({assertion_id:f.id,text:f.text,pass:f.pass,reasoning:f.reasoning}))});const u=((i=(s=a.evals)==null?void 0:s.evals[0])==null?void 0:i.id)??null;return{...t,skillContent:a.skillContent,savedContent:a.skillContent,isDirty:!1,evals:a.evals,evalsError:a.evalsError??null,latestBenchmark:a.benchmark,inlineResults:c,selectedCaseId:u,loading:!1,error:null}}case"SET_PANEL":return{...t,activePanel:a.panel};case"SET_CONTENT":return{...t,skillContent:a.content,isDirty:a.content!==t.savedContent};case"CONTENT_SAVED":return{...t,savedContent:t.skillContent,isDirty:!1};case"SET_EVALS":return{...t,evals:a.evals};case"SELECT_CASE":return{...t,selectedCaseId:a.caseId};case"CASE_RUN_START":{const c=new Map(t.caseRunStates);return c.set(a.caseId,{status:"running",startedAt:Date.now(),mode:a.mode}),{...t,caseRunStates:c,runMode:a.mode,activePanel:"run"}}case"CASE_RUN_COMPLETE":{const c=new Map(t.caseRunStates),u=c.get(a.caseId);c.set(a.caseId,{status:"complete",mode:u==null?void 0:u.mode});const d=new Map(t.inlineResults);return d.set(a.caseId,a.result),{...t,caseRunStates:c,inlineResults:d}}case"CASE_RUN_ERROR":{const c=new Map(t.caseRunStates),u=c.get(a.caseId);c.set(a.caseId,{status:"error",mode:u==null?void 0:u.mode});const d=new Map(t.inlineResults);return d.set(a.caseId,{status:"error",errorMessage:a.error,assertions:[]}),{...t,caseRunStates:c,inlineResults:d}}case"CASE_RUN_CANCEL":{const c=new Map(t.caseRunStates),u=c.get(a.caseId);return c.set(a.caseId,{status:"cancelled",mode:u==null?void 0:u.mode}),{...t,caseRunStates:c}}case"BULK_RUN_START":{const c=new Map(t.caseRunStates);for(const u of a.caseIds)c.set(u,{status:"queued",mode:a.mode});return{...t,caseRunStates:c,bulkRunActive:!0,runMode:a.mode,activePanel:"run"}}case"BULK_RUN_COMPLETE":return{...t,bulkRunActive:!1,latestBenchmark:a.benchmark??t.latestBenchmark,iterationCount:t.iterationCount+1};case"CANCEL_ALL":{const c=new Map(t.caseRunStates);for(const[u,d]of c)(d.status==="running"||d.status==="queued")&&c.set(u,{status:"cancelled"});return{...t,caseRunStates:c,bulkRunActive:!1}}case"UPDATE_INLINE_RESULT":{const c=new Map(t.inlineResults);return c.set(a.evalId,a.result),{...t,inlineResults:c}}case"OPEN_IMPROVE":return{...t,improveTarget:a.evalId,activePanel:"editor"};case"CLOSE_IMPROVE":return{...t,improveTarget:null};case"OPEN_AI_EDIT":return{...t,aiEditOpen:!0,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null};case"CLOSE_AI_EDIT":return{...t,aiEditOpen:!1,aiEditLoading:!1,aiEditResult:null,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[],aiEditEvalChanges:[],aiEditEvalSelections:new Map,aiEditEvalsRetry:null};case"AI_EDIT_LOADING":return{...t,aiEditLoading:!0,aiEditError:null,aiEditClassifiedError:null,aiEditProgress:[]};case"AI_EDIT_PROGRESS":return{...t,aiEditProgress:[...t.aiEditProgress,a.entry]};case"AI_EDIT_RESULT":{const c=a.evalChanges??[],u=new Map;for(let d=0;d<c.length;d++)u.set(d,!0);return{...t,aiEditLoading:!1,aiEditResult:{improved:a.improved,reasoning:a.reasoning,evalChanges:c},aiEditEvalChanges:c,aiEditEvalSelections:u}}case"AI_EDIT_ERROR":return{...t,aiEditLoading:!1,aiEditError:a.message,aiEditClassifiedError:a.classified??null};case"GENERATE_EVALS_START":return{...t,generateEvalsLoading:!0,generateEvalsProgress:[],generateEvalsError:null};case"GENERATE_EVALS_PROGRESS":return{...t,generateEvalsProgress:[...t.generateEvalsProgress,a.entry]};case"GENERATE_EVALS_DONE":return{...t,generateEvalsLoading:!1,evals:a.evals};case"GENERATE_EVALS_ERROR":return{...t,generateEvalsLoading:!1,generateEvalsError:a.classified};case"TOGGLE_EVAL_CHANGE":{const c=new Map(t.aiEditEvalSelections);return c.set(a.index,!c.get(a.index)),{...t,aiEditEvalSelections:c}}case"SELECT_ALL_EVAL_CHANGES":{const c=new Map(t.aiEditEvalSelections);for(const u of c.keys())c.set(u,!0);return{...t,aiEditEvalSelections:c}}case"DESELECT_ALL_EVAL_CHANGES":{const c=new Map(t.aiEditEvalSelections);for(const u of c.keys())c.set(u,!1);return{...t,aiEditEvalSelections:c}}case"SET_EVALS_RETRY":return{...t,aiEditEvalsRetry:a.evalsFile};case"SET_REGRESSIONS":return{...t,regressions:a.regressions};case"INCREMENT_ITERATION":return{...t,iterationCount:t.iterationCount+1};case"SET_ACTIVATION_PROMPTS":{const c=a.prompts===t.activationPromptsCanonical;return{...t,activationPrompts:a.prompts,activationPromptsSource:c?t.activationPromptsSource:t.activationPromptsSource===null||t.activationPromptsSource==="skill-md"||t.activationPromptsSource==="ai-generated"?"user-typed":t.activationPromptsSource}}case"SET_PROMPTS_SOURCE":return{...t,activationPromptsSource:a.source,activationPromptsCanonical:a.canonical??t.activationPromptsCanonical};case"ACTIVATION_START":return{...t,activationRunning:!0,activationResults:[],activationSummary:null,activationError:null,activationClassifyingStatus:null,activationStartedAt:Date.now()};case"ACTIVATION_RESULT":return{...t,activationResults:[...t.activationResults,a.result]};case"ACTIVATION_DONE":return{...t,activationRunning:!1,activationSummary:a.summary,activationClassifyingStatus:null};case"ACTIVATION_CLASSIFYING":return{...t,activationClassifyingStatus:`Classifying prompt ${a.index}/${a.total}...`};case"ACTIVATION_ERROR":return{...t,activationRunning:!1,activationError:a.error,activationClassifyingStatus:null};case"ACTIVATION_RESET":return{...t,activationResults:[],activationSummary:null,activationError:null};case"ACTIVATION_TIMEOUT":return{...t,activationRunning:!1,activationError:"Activation test timed out after 120 seconds"};case"ACTIVATION_CANCEL":return{...t,activationRunning:!1};case"GENERATE_PROMPTS_START":return{...t,generatingPrompts:!0,generatingPromptsError:null};case"GENERATE_PROMPTS_DONE":return{...t,generatingPrompts:!1};case"GENERATE_PROMPTS_ERROR":return{...t,generatingPrompts:!1,generatingPromptsError:a.error};case"SAVE_TEST_CASES_START":return{...t,savingTestCases:!0,savingTestCasesError:null,savingTestCasesSuccess:null};case"SAVE_TEST_CASES_SUCCESS":return{...t,savingTestCases:!1,savingTestCasesSuccess:`Saved ${a.count} test case${a.count===1?"":"s"} to SKILL.md`,activationPromptsSource:"skill-md",activationPromptsCanonical:t.activationPrompts};case"SAVE_TEST_CASES_ERROR":return{...t,savingTestCases:!1,savingTestCasesError:a.error};case"CLEAR_SAVE_TEST_CASES_FEEDBACK":return{...t,savingTestCasesSuccess:null,savingTestCasesError:null};case"ACTIVATION_HISTORY_LOADED":return{...t,activationHistory:a.runs,activationHistoryLoading:!1};default:return t}}function HC(t,a){if(!t)return{canEdit:!1,canRun:!1};const s=t.origin==="source",i=a.exists&&a.cases.length>0;return{canEdit:s,canRun:i}}function PC(t){if(t==="unit"||t==="integration")return t}function VC(t,a){const s=a.data;if(a.event==="output_ready"&&(t.output=s.output,s.durationMs!=null&&(t.durationMs=s.durationMs),s.tokens!=null&&(t.tokens=s.tokens)),a.event==="outputs_ready"&&(t.output=s.skillOutput,s.skillDurationMs!=null&&(t.durationMs=s.skillDurationMs),s.skillTokens!=null&&(t.tokens=s.skillTokens)),a.event==="assertion_result"){const i={assertion_id:s.assertion_id,text:s.text,pass:s.pass,reasoning:s.reasoning};t.assertions.find(c=>c.assertion_id===i.assertion_id)||t.assertions.push(i)}a.event==="case_complete"&&(t.status=s.status,t.passRate=s.pass_rate,t.errorMessage=s.error_message||void 0,t.classifiedError=s.classified_error||void 0)}const Py=m.createContext(null);function bn(){const t=m.useContext(Py);if(!t)throw new Error("useWorkspace must be used within WorkspaceProvider");return t}function FC({plugin:t,skill:a,origin:s,children:i}){var ft;const c=s==="installed",{config:u}=Ya(),[d,f]=m.useReducer(UC,{...$C,plugin:t,skill:a}),x=HC({origin:s},{exists:d.evals!=null,cases:((ft=d.evals)==null?void 0:ft.evals)??[]}),h=x.canEdit,v=x.canRun,y=m.useRef(new Set),b=m.useRef(new Set),S=m.useRef(new Map),w=m.useCallback((oe,ve)=>{let ye=S.current.get(oe);ye||(ye={assertions:[]},S.current.set(oe,ye)),VC(ye,ve),f({type:"UPDATE_INLINE_RESULT",evalId:oe,result:{...ye,assertions:[...ye.assertions]}})},[]),E=m.useCallback(oe=>{if(b.current.has(oe))return;b.current.add(oe);const ve=S.current.get(oe)??{assertions:[]};f({type:"CASE_RUN_COMPLETE",caseId:oe,result:{...ve,assertions:[...ve.assertions]}}),y.current.has(oe)&&(y.current.delete(oe),y.current.size===0&&ke.getLatestBenchmark(t,a).then(ye=>f({type:"BULK_RUN_COMPLETE",benchmark:ye})).catch(()=>f({type:"BULK_RUN_COMPLETE",benchmark:null})))},[t,a]),k=m.useCallback((oe,ve)=>{b.current.has(oe)||(b.current.add(oe),f({type:"CASE_RUN_ERROR",caseId:oe,error:ve}),y.current.has(oe)&&(y.current.delete(oe),y.current.size===0&&ke.getLatestBenchmark(t,a).then(ye=>f({type:"BULK_RUN_COMPLETE",benchmark:ye})).catch(()=>f({type:"BULK_RUN_COMPLETE",benchmark:null}))))},[t,a]),{startCase:N,stopCase:T,stopAll:A}=IC({onEvent:w,onDone:E,onError:k});m.useEffect(()=>()=>{A()},[A]);const B=m.useCallback(async()=>{try{const oe=await fetch(`/api/skills/${t}/${a}/activation-history`);if(!oe.ok){if(oe.status===404){f({type:"ACTIVATION_HISTORY_LOADED",runs:[]});return}return}const ve=await oe.json();f({type:"ACTIVATION_HISTORY_LOADED",runs:ve.runs||[]})}catch{}},[t,a]);m.useEffect(()=>{let oe=!1;async function ve(){try{const[ye,be,Ee]=await Promise.allSettled([ke.getSkillDetail(t,a),ke.getEvals(t,a),ke.getLatestBenchmark(t,a)]);if(oe)return;let qe=null,He=null;if(be.status==="fulfilled")qe=be.value;else{const jt=be.reason;He=(jt==null?void 0:jt.message)??"Failed to load test cases"}f({type:"INIT_DATA",skillContent:ye.status==="fulfilled"?ye.value.skillContent:"",evals:qe,evalsError:He,benchmark:Ee.status==="fulfilled"?Ee.value:null})}catch(ye){oe||f({type:"SET_ERROR",error:ye.message})}}return ve(),B(),()=>{oe=!0}},[t,a,B]);const z=m.useCallback(async oe=>{if(c)return;const ve=oe??d.skillContent;try{await ke.applyImprovement(t,a,ve),oe!==void 0&&oe!==d.skillContent&&f({type:"SET_CONTENT",content:oe}),f({type:"CONTENT_SAVED"})}catch(ye){f({type:"SET_ERROR",error:ye.message})}},[c,t,a,d.skillContent]),P=m.useCallback(async oe=>{if(!c)try{const ve=await ke.saveEvals(t,a,oe);f({type:"SET_EVALS",evals:ve})}catch(ve){f({type:"SET_ERROR",error:ve.message})}},[c,t,a]),C=m.useCallback((oe,ve="benchmark")=>{const ye=d.caseRunStates.get(oe);if((ye==null?void 0:ye.status)==="running")return;S.current.delete(oe),b.current.delete(oe),f({type:"CASE_RUN_START",caseId:oe,mode:ve});const be=ve==="comparison"?{eval_ids:[oe]}:ve==="baseline"?{mode:"baseline"}:{};if(u!=null&&u.provider&&(be.provider=u.provider),u!=null&&u.model&&(be.model=u.model),ve==="comparison"){const Ee=`/api/skills/${t}/${a}/compare`;N(oe,Ee,be)}else{const Ee=`/api/skills/${t}/${a}/benchmark/case/${oe}`;N(oe,Ee,Object.keys(be).length>0?be:void 0)}},[t,a,d.caseRunStates,N,u]),O=m.useCallback((oe="benchmark")=>{var be;const ve=((be=d.evals)==null?void 0:be.evals)??[];if(ve.length===0)return;const ye=ve.map(Ee=>Ee.id);for(const Ee of ye)S.current.delete(Ee),b.current.delete(Ee);f({type:"BULK_RUN_START",caseIds:ye,mode:oe}),y.current=new Set(ye);for(const Ee of ye){const qe=oe==="comparison"?{eval_ids:[Ee]}:oe==="baseline"?{mode:"baseline"}:{};if(u!=null&&u.provider&&(qe.provider=u.provider),u!=null&&u.model&&(qe.model=u.model),oe==="comparison")N(Ee,`/api/skills/${t}/${a}/compare`,qe);else{const He=`/api/skills/${t}/${a}/benchmark/case/${Ee}`;N(Ee,He,Object.keys(qe).length>0?qe:void 0)}}},[t,a,d.evals,N,u]),L=m.useCallback(oe=>{T(oe),f({type:"CASE_RUN_CANCEL",caseId:oe}),y.current.delete(oe),b.current.add(oe)},[T]),_=m.useCallback(()=>{A(),f({type:"CANCEL_ALL"}),y.current.clear()},[A]),H=m.useCallback(async(oe,ve)=>{f({type:"OPEN_IMPROVE",evalId:oe})},[]),W=m.useCallback(async(oe,ve)=>{try{await ke.applyImprovement(t,a,ve),f({type:"SET_CONTENT",content:ve}),f({type:"CONTENT_SAVED"}),f({type:"CLOSE_IMPROVE"}),C(oe,"benchmark")}catch(ye){f({type:"SET_ERROR",error:ye.message})}},[t,a,C]),q=Pd(),ee=m.useRef(null),$=m.useRef(0);m.useEffect(()=>{const oe=q.events;for(let ve=$.current;ve<oe.length;ve++){const ye=oe[ve],be=ye.data;if(ye.event==="progress"&&f({type:"AI_EDIT_PROGRESS",entry:{timestamp:Date.now(),phase:be.phase,message:be.message}}),ye.event==="done"){const Ee=be.improved,qe=be.reasoning,He=be.evalChanges??[];f({type:"AI_EDIT_RESULT",improved:Ee,reasoning:qe,evalChanges:He})}if(ye.event==="error"){const Ee=be;f({type:"AI_EDIT_ERROR",message:Ee.description||"Unknown error",classified:Ee})}}$.current=oe.length},[q.events]),m.useEffect(()=>{q.error&&f({type:"AI_EDIT_ERROR",message:q.error})},[q.error]),m.useEffect(()=>()=>{q.stop()},[q.stop]);const D=m.useCallback(async(oe,ve,ye)=>{c||($.current=0,f({type:"AI_EDIT_LOADING"}),ee.current=q.stop,q.start(`/api/skills/${t}/${a}/improve?sse`,{mode:"instruct",instruction:oe,content:d.skillContent,evals:d.evals??{skill_name:a,evals:[]},provider:ve,model:ye}))},[c,t,a,d.skillContent,d.evals,q]),I=m.useCallback(()=>{q.stop(),f({type:"AI_EDIT_ERROR",message:"Cancelled"})},[q]),F=m.useCallback(async()=>{const oe=d.aiEditResult;if(oe!=null&&oe.improved)try{if(await ke.applyImprovement(t,a,oe.improved),f({type:"SET_CONTENT",content:oe.improved}),f({type:"CONTENT_SAVED"}),d.aiEditEvalChanges.length>0&&Array.from(d.aiEditEvalSelections.values()).some(Boolean)){const{mergeEvalChanges:ye}=await Vl(async()=>{const{mergeEvalChanges:qe}=await import("./mergeEvalChanges-Dpbbs4d4.js");return{mergeEvalChanges:qe}},[]),be=d.evals??{skill_name:a,evals:[]},Ee=ye(be,d.aiEditEvalChanges,d.aiEditEvalSelections);try{const qe=await ke.saveEvals(t,a,Ee);f({type:"SET_EVALS",evals:qe})}catch(qe){f({type:"SET_EVALS_RETRY",evalsFile:Ee}),f({type:"SET_ERROR",error:`SKILL.md saved, but test cases failed to save: ${qe.message}. You can retry from the AI Edit panel.`});return}}f({type:"CLOSE_AI_EDIT"})}catch(ve){f({type:"SET_ERROR",error:ve.message})}},[t,a,d.aiEditResult,d.evals,d.aiEditEvalChanges,d.aiEditEvalSelections]),J=m.useCallback(()=>{f({type:"CLOSE_AI_EDIT"})},[]),de=m.useCallback(oe=>{f({type:"TOGGLE_EVAL_CHANGE",index:oe})},[]),M=m.useCallback(()=>{f({type:"SELECT_ALL_EVAL_CHANGES"})},[]),U=m.useCallback(()=>{f({type:"DESELECT_ALL_EVAL_CHANGES"})},[]),K=m.useCallback(async()=>{const oe=d.aiEditEvalsRetry;if(oe)try{const ve=await ke.saveEvals(t,a,oe);f({type:"SET_EVALS",evals:ve}),f({type:"SET_ERROR",error:null}),f({type:"CLOSE_AI_EDIT"})}catch(ve){f({type:"SET_ERROR",error:`Retry failed: ${ve.message}`})}},[t,a,d.aiEditEvalsRetry]),Q=m.useCallback(async()=>{try{const oe=await ke.getSkillDetail(t,a);f({type:"SET_CONTENT",content:oe.skillContent}),f({type:"CONTENT_SAVED"})}catch{}},[t,a]),ce=Pd(),Z=m.useRef(0);m.useEffect(()=>{const oe=ce.events;for(let ve=Z.current;ve<oe.length;ve++){const ye=oe[ve],be=ye.data;if(ye.event==="progress"&&f({type:"GENERATE_EVALS_PROGRESS",entry:{timestamp:Date.now(),phase:be.phase,message:be.message}}),ye.event==="done"){const Ee=be;ke.saveEvals(t,a,Ee).then(qe=>f({type:"GENERATE_EVALS_DONE",evals:qe})).catch(qe=>f({type:"SET_ERROR",error:qe.message}))}ye.event==="error"&&f({type:"GENERATE_EVALS_ERROR",classified:be})}Z.current=oe.length},[ce.events,t,a]),m.useEffect(()=>{ce.error&&f({type:"SET_ERROR",error:ce.error})},[ce.error]),m.useEffect(()=>()=>{ce.stop()},[ce.stop]);const ie=m.useCallback(async oe=>{if(c)return;Z.current=0,f({type:"GENERATE_EVALS_START"});const ve={};u!=null&&u.provider&&(ve.provider=u.provider),u!=null&&u.model&&(ve.model=u.model);const ye=PC(oe==null?void 0:oe.testType);ye&&(ve.testType=ye),ce.start(`/api/skills/${t}/${a}/generate-evals?sse`,Object.keys(ve).length>0?ve:void 0)},[c,t,a,ce,u]),X=Pd(),me=m.useRef(0);m.useEffect(()=>()=>{X.stop()},[X.stop]),m.useEffect(()=>{const oe=X.events;for(let ve=me.current;ve<oe.length;ve++){const ye=oe[ve];if(ye.event==="classifying"){const be=ye.data;f({type:"ACTIVATION_CLASSIFYING",index:be.index,total:be.total})}if(ye.event==="prompt_result"&&f({type:"ACTIVATION_RESULT",result:ye.data}),ye.event==="done"){je.current&&(clearTimeout(je.current),je.current=null);const be=ye.data;if(be.error)f({type:"ACTIVATION_ERROR",error:be.error});else{f({type:"ACTIVATION_DONE",summary:be});const Ee={id:`run-${Date.now()}`,timestamp:new Date().toISOString(),model:(u==null?void 0:u.model)||"unknown",provider:(u==null?void 0:u.provider)||"unknown",promptCount:be.total,summary:{precision:be.precision,recall:be.recall,reliability:be.reliability,tp:be.tp,tn:be.tn,fp:be.fp,fn:be.fn}};f({type:"ACTIVATION_HISTORY_LOADED",runs:[Ee,...d.activationHistory??[]]})}}}me.current=oe.length},[X.events,u,d.activationHistory]),m.useEffect(()=>{X.error&&(je.current&&(clearTimeout(je.current),je.current=null),f({type:"ACTIVATION_ERROR",error:X.error}))},[X.error]);const je=m.useRef(null),Ne=m.useCallback(()=>{je.current&&(clearTimeout(je.current),je.current=null),X.stop(),f({type:"ACTIVATION_CANCEL",totalPrompts:0})},[X]),Me=m.useCallback(oe=>{const ye=oe.trim().split(`
|
|
69
69
|
`).filter(Boolean).map(Ee=>Ee.startsWith("!")?{prompt:Ee.slice(1).trim(),expected:"should_not_activate"}:Ee.startsWith("+")?{prompt:Ee.slice(1).trim(),expected:"should_activate"}:{prompt:Ee.trim(),expected:"auto"});me.current=0,f({type:"ACTIVATION_START"}),f({type:"SET_ACTIVATION_PROMPTS",prompts:oe});const be={prompts:ye};u!=null&&u.provider&&(be.provider=u.provider),u!=null&&u.model&&(be.model=u.model),X.start(`/api/skills/${t}/${a}/activation-test`,be),je.current&&clearTimeout(je.current),je.current=setTimeout(()=>{X.stop(),f({type:"ACTIVATION_TIMEOUT"}),je.current=null},12e4)},[t,a,X,u]),Fe=m.useCallback(async(oe=8)=>{f({type:"GENERATE_PROMPTS_START"});try{const ve={count:oe};u!=null&&u.provider&&(ve.provider=u.provider),u!=null&&u.model&&(ve.model=u.model);const ye=await fetch(`/api/skills/${t}/${a}/activation-prompts`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ve)});if(!ye.ok){let St=`HTTP ${ye.status}`;try{const At=await ye.json();At.error&&(St=At.error)}catch{}throw new Error(St)}const be=ye.body.getReader(),Ee=new TextDecoder;let qe="",He="",jt=[];for(;;){const{done:St,value:At}=await be.read();if(St)break;qe+=Ee.decode(At,{stream:!0});const xe=qe.split(`
|
|
70
70
|
`);qe=xe.pop()||"";for(const Ze of xe)if(Ze.startsWith("event: "))He=Ze.slice(7).trim();else if(Ze.startsWith("data: ")){try{const Xe=JSON.parse(Ze.slice(6));if(He==="done"){if(Xe.error)throw new Error(Xe.error);jt=Xe.prompts||[]}if(He==="error")throw new Error(Xe.message||Xe.description||"Generation failed")}catch(Xe){if(!(Xe instanceof SyntaxError))throw Xe}He=""}}const Dt=jt.map(St=>`${St.expected==="should_activate"?"+":"!"}${St.prompt}`).join(`
|
|
71
71
|
`);f({type:"SET_PROMPTS_SOURCE",source:"ai-generated",canonical:Dt}),f({type:"SET_ACTIVATION_PROMPTS",prompts:Dt}),f({type:"GENERATE_PROMPTS_DONE"})}catch(ve){f({type:"GENERATE_PROMPTS_ERROR",error:ve.message})}},[t,a,u]),Ue=m.useCallback(async()=>{try{const oe=await fetch(`/api/skills/${t}/${a}/test-cases`);if(!oe.ok)return;const ve=await oe.json();if(!ve.prompts||ve.prompts.length===0)return;const ye=ve.prompts.map(be=>be.expected==="should_activate"?`+${be.prompt}`:be.expected==="should_not_activate"?`!${be.prompt}`:be.prompt).join(`
|
|
72
72
|
`);f({type:"SET_PROMPTS_SOURCE",source:"skill-md",canonical:ye}),f({type:"SET_ACTIVATION_PROMPTS",prompts:ye})}catch{}},[t,a]),De=m.useCallback(async()=>{f({type:"SAVE_TEST_CASES_START"});try{const ve=d.activationPrompts.split(`
|
|
73
|
-
`).map(Ee=>Ee.trim()).filter(Boolean).map(Ee=>Ee.startsWith("!")?{prompt:Ee.slice(1).trim(),expected:"should_not_activate"}:Ee.startsWith("+")?{prompt:Ee.slice(1).trim(),expected:"should_activate"}:{prompt:Ee,expected:"auto"}),ye=await fetch(`/api/skills/${t}/${a}/test-cases`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompts:ve})}),be=await ye.json().catch(()=>({}));if(!ye.ok||!be.ok)throw new Error(be.error||`HTTP ${ye.status}`);f({type:"SAVE_TEST_CASES_SUCCESS",count:be.count??ve.length}),setTimeout(()=>f({type:"CLEAR_SAVE_TEST_CASES_FEEDBACK"}),3e3)}catch(oe){f({type:"SAVE_TEST_CASES_ERROR",error:oe.message})}},[t,a,d.activationPrompts]),Ge=m.useMemo(()=>({state:d,dispatch:f,isReadOnly:c,canEdit:h,canRun:v,saveContent:z,saveEvals:P,runCase:C,runAll:O,cancelCase:L,cancelAll:_,improveForCase:H,applyImproveAndRerun:W,refreshSkillContent:Q,generateEvals:ie,runActivationTest:Me,cancelActivation:Ne,generateActivationPrompts:Fe,fetchActivationHistory:B,loadTestCasesFromSkillMd:Ue,saveTestCasesToSkillMd:De,submitAiEdit:D,cancelAiEdit:I,applyAiEdit:F,discardAiEdit:J,toggleEvalChange:de,selectAllEvalChanges:M,deselectAllEvalChanges:U,retryEvalsSave:K}),[d,c,h,v,z,P,C,O,L,_,H,W,Q,ie,Me,Ne,Fe,B,Ue,De,D,I,F,J,de,M,U,K]);return r.jsx(Py.Provider,{value:Ge,children:i})}function
|
|
74
|
-
`);let d="",f=!1;for(const x of u){const h=x.match(/^[ \t]+([\w-]+):\s*(.*)$/);if(h&&d&&f){const b=h[1],S=h[2].trim();let w=c[d];if((typeof w!="object"||Array.isArray(w))&&(w={},c[d]=w),!S)w[b]=[];else{const E=S.match(/^\[(.+)\]$/);E?w[b]=E[1].split(",").map(k=>k.trim().replace(/^["']|["']$/g,"")).filter(Boolean):w[b]=S.replace(/^["']|["']$/g,"")}continue}const v=x.match(/^\s+-\s+(.+)$/);if(v&&d){f=!1;const b=c[d];Array.isArray(b)?b.push(v[1].trim().replace(/^["']|["']$/g,"")):c[d]=[v[1].trim().replace(/^["']|["']$/g,"")];continue}const y=x.match(/^([\w-]+):\s*(.*)$/);if(y){d=y[1];const b=y[2].trim();if(f=!1,!b){c[d]={},f=!0;continue}const S=b.match(/^\[(.+)\]$/);if(S){c[d]=S[1].split(",").map(w=>w.trim().replace(/^["']|["']$/g,"")).filter(Boolean);continue}c[d]=b.replace(/^["']|["']$/g,"")}}return{metadata:c,body:i}}function cc(t){if(!t)return"";try{let a=t.replace(/^---\n[\s\S]*?\n---\n?/,""),s=
|
|
73
|
+
`).map(Ee=>Ee.trim()).filter(Boolean).map(Ee=>Ee.startsWith("!")?{prompt:Ee.slice(1).trim(),expected:"should_not_activate"}:Ee.startsWith("+")?{prompt:Ee.slice(1).trim(),expected:"should_activate"}:{prompt:Ee,expected:"auto"}),ye=await fetch(`/api/skills/${t}/${a}/test-cases`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompts:ve})}),be=await ye.json().catch(()=>({}));if(!ye.ok||!be.ok)throw new Error(be.error||`HTTP ${ye.status}`);f({type:"SAVE_TEST_CASES_SUCCESS",count:be.count??ve.length}),setTimeout(()=>f({type:"CLEAR_SAVE_TEST_CASES_FEEDBACK"}),3e3)}catch(oe){f({type:"SAVE_TEST_CASES_ERROR",error:oe.message})}},[t,a,d.activationPrompts]),Ge=m.useMemo(()=>({state:d,dispatch:f,isReadOnly:c,canEdit:h,canRun:v,saveContent:z,saveEvals:P,runCase:C,runAll:O,cancelCase:L,cancelAll:_,improveForCase:H,applyImproveAndRerun:W,refreshSkillContent:Q,generateEvals:ie,runActivationTest:Me,cancelActivation:Ne,generateActivationPrompts:Fe,fetchActivationHistory:B,loadTestCasesFromSkillMd:Ue,saveTestCasesToSkillMd:De,submitAiEdit:D,cancelAiEdit:I,applyAiEdit:F,discardAiEdit:J,toggleEvalChange:de,selectAllEvalChanges:M,deselectAllEvalChanges:U,retryEvalsSave:K}),[d,c,h,v,z,P,C,O,L,_,H,W,Q,ie,Me,Ne,Fe,B,Ue,De,D,I,F,J,de,M,U,K]);return r.jsx(Py.Provider,{value:Ge,children:i})}function GC(t){const a=t.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);if(!a)return{metadata:{},body:t};const s=a[1],i=a[2].trim(),c={},u=s.split(`
|
|
74
|
+
`);let d="",f=!1;for(const x of u){const h=x.match(/^[ \t]+([\w-]+):\s*(.*)$/);if(h&&d&&f){const b=h[1],S=h[2].trim();let w=c[d];if((typeof w!="object"||Array.isArray(w))&&(w={},c[d]=w),!S)w[b]=[];else{const E=S.match(/^\[(.+)\]$/);E?w[b]=E[1].split(",").map(k=>k.trim().replace(/^["']|["']$/g,"")).filter(Boolean):w[b]=S.replace(/^["']|["']$/g,"")}continue}const v=x.match(/^\s+-\s+(.+)$/);if(v&&d){f=!1;const b=c[d];Array.isArray(b)?b.push(v[1].trim().replace(/^["']|["']$/g,"")):c[d]=[v[1].trim().replace(/^["']|["']$/g,"")];continue}const y=x.match(/^([\w-]+):\s*(.*)$/);if(y){d=y[1];const b=y[2].trim();if(f=!1,!b){c[d]={},f=!0;continue}const S=b.match(/^\[(.+)\]$/);if(S){c[d]=S[1].split(",").map(w=>w.trim().replace(/^["']|["']$/g,"")).filter(Boolean);continue}c[d]=b.replace(/^["']|["']$/g,"")}}return{metadata:c,body:i}}function cc(t){if(!t)return"";try{let a=t.replace(/^---\n[\s\S]*?\n---\n?/,""),s=WC(a);return s=s.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>'),s=s.replace(/^### (.+)$/gm,'<div style="font-weight:600;font-size:14px;margin:0.75rem 0 0.25rem;color:var(--text-primary)">$1</div>'),s=s.replace(/^## (.+)$/gm,'<div style="font-weight:700;font-size:15px;margin:0.75rem 0 0.25rem;color:var(--text-primary)">$1</div>'),s=s.replace(/^# (.+)$/gm,'<div style="font-weight:700;font-size:1rem;margin:0.75rem 0 0.25rem;color:var(--text-primary)">$1</div>'),s=s.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer" style="color:var(--accent);text-decoration:underline">$1</a>'),s=s.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),s=s.replace(/\*([^*]+)\*/g,"<em>$1</em>"),s=s.replace(/`([^`]+)`/g,'<code style="background:var(--surface-3);padding:0.1rem 0.3rem;border-radius:3px;font-size:0.85em">$1</code>'),s=s.replace(/^- (.+)$/gm,'<div style="padding-left:1rem;margin:0.15rem 0">• $1</div>'),s=s.replace(/^(\d+)\. (.+)$/gm,'<div style="padding-left:1rem;margin:0.15rem 0">$1. $2</div>'),s=s.replace(/\n\n/g,'<div style="height:0.5rem"></div>'),s=s.replace(/\n/g,"<br/>"),s}catch{return`<pre style="white-space:pre-wrap;font-size:12px;line-height:1.5">${t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}</pre>`}}function WC(t){const a=t.split(`
|
|
75
75
|
`),s=[];let i=0;for(;i<a.length;)if(a[i].trim().startsWith("|")&&i+1<a.length&&a[i+1].trim().startsWith("|")&&/\|[\s-:]+\|/.test(a[i+1])){const c=Wg(a[i]);i+=2;const u=[];for(;i<a.length&&a[i].trim().startsWith("|");)u.push(Wg(a[i])),i++;const d='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)"',f='style="padding:0.4rem 0.6rem;font-size:12px;color:var(--text-secondary);border-bottom:1px solid var(--border-subtle)"';let x='<table style="width:100%;border-collapse:collapse;margin:0.5rem 0;border:1px solid var(--border-subtle);border-radius:6px;overflow:hidden">';x+="<thead><tr>";for(const h of c)x+=`<th ${d}>${h}</th>`;x+="</tr></thead><tbody>";for(const h of u){x+="<tr>";for(const v of h)x+=`<td ${f}>${v}</td>`;x+="</tr>"}x+="</tbody></table>",s.push(x)}else s.push(a[i]),i++;return s.join(`
|
|
76
76
|
`)}function Wg(t){return t.split("|").map(a=>a.trim()).filter(a=>a.length>0)}function uc(t,a){const s=t.split(`
|
|
77
77
|
`),i=a.split(`
|
|
78
|
-
`);if(s.length>1e3||i.length>1e3)return[...s.map(v=>({type:"unchanged",content:v}))];const c=s.length,u=i.length,d=Array.from({length:c+1},()=>new Array(u+1).fill(0));for(let v=1;v<=c;v++)for(let y=1;y<=u;y++)s[v-1]===i[y-1]?d[v][y]=d[v-1][y-1]+1:d[v][y]=Math.max(d[v-1][y],d[v][y-1]);const f=[];let x=c,h=u;for(;x>0||h>0;)x>0&&h>0&&s[x-1]===i[h-1]?(f.push({type:"unchanged",content:s[x-1]}),x--,h--):h>0&&(x===0||d[x][h-1]>=d[x-1][h])?(f.push({type:"added",content:i[h-1]}),h--):(f.push({type:"removed",content:s[x-1]}),x--);return f.reverse()}function
|
|
79
|
-
`);de=Q.pop()||"";for(const ce of Q)if(ce.startsWith("event: "))M=ce.slice(7).trim();else if(ce.startsWith("data: ")){try{const Z=JSON.parse(ce.slice(6));M==="progress"?P(ie=>[...ie,{phase:Z.phase,message:Z.message,timestamp:Date.now()}]):M==="done"||M==="complete"?(w(Z.improved),k(Z.reasoning||""),b(uc(Z.original||s,Z.improved)),u("diff_shown")):M==="error"&&(T(Z.message||Z.description||"Unknown error"),Z.category&&B(Z),u("open"))}catch{}M=""}}}catch(I){I.name!=="AbortError"&&(T(I.message),u("open"))}finally{L.current=null}}async function q(){O(!0);try{await ke.applyImprovement(t,a,S),i(S),u("closed")}catch(D){T(D.message)}finally{O(!1)}}function ee(){u("closed"),b([]),w(""),k(""),T(null)}if(c==="closed")return r.jsxs("button",{onClick:()=>u("open"),className:"btn btn-secondary mb-5",disabled:!s,children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),r.jsx("path",{d:"M2 17l10 5 10-5"}),r.jsx("path",{d:"M2 12l10 5 10-5"})]}),"Improve Skill"]});const $=_();return r.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden animate-fade-in",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[r.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:[r.jsxs("div",{className:"flex items-center gap-2.5",children:[r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#a855f7",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),r.jsx("path",{d:"M2 17l10 5 10-5"}),r.jsx("path",{d:"M2 12l10 5 10-5"})]})}),r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"AI Skill Improvement"})]}),r.jsx("button",{onClick:ee,className:"w-7 h-7 rounded-lg flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:D=>{D.currentTarget.style.background="var(--surface-3)"},onMouseLeave:D=>{D.currentTarget.style.background="transparent"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),r.jsxs("div",{className:"px-5 py-4",children:[(c==="open"||c==="loading")&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-end gap-3 mb-4",children:[r.jsxs("div",{className:"flex-1",children:[r.jsx("label",{className:"text-[11px] font-medium mb-1 block",style:{color:"var(--text-tertiary)"},children:"Provider"}),r.jsx("select",{className:"input-field text-[12px] py-1.5",value:f,onChange:D=>{x(D.target.value);const I=d==null?void 0:d.providers.find(F=>F.id===D.target.value);I!=null&&I.models[0]&&v(I.models[0].id)},disabled:c==="loading",children:d==null?void 0:d.providers.filter(D=>D.available).map(D=>r.jsx("option",{value:D.id,children:D.label},D.id))})]}),r.jsxs("div",{className:"flex-1",children:[r.jsx("label",{className:"text-[11px] font-medium mb-1 block",style:{color:"var(--text-tertiary)"},children:"Model"}),r.jsx("select",{className:"input-field text-[12px] py-1.5",value:h,onChange:D=>v(D.target.value),disabled:c==="loading",children:$==null?void 0:$.models.map(D=>r.jsx("option",{value:D.id,children:D.label},D.id))})]}),c==="loading"?r.jsx("button",{onClick:H,className:"btn btn-secondary flex-shrink-0",children:"Cancel"}):r.jsx("button",{onClick:W,className:"btn btn-primary flex-shrink-0",children:"Improve"})]}),c==="loading"&&z.length>0&&r.jsx("div",{className:"mt-3",children:r.jsx(ui,{entries:z,isRunning:!0})})]}),N&&r.jsx("div",{className:"mb-4",children:A?r.jsx(dc,{error:A,onRetry:W,onDismiss:()=>{T(null),B(null)}}):r.jsx("div",{className:"px-4 py-3 rounded-lg text-[13px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:N})}),c==="diff_shown"&&r.jsxs(r.Fragment,{children:[E&&r.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:[r.jsx("span",{className:"font-semibold",style:{color:"#a855f7"},children:"AI Reasoning: "}),E]}),r.jsx("div",{className:"rounded-lg overflow-hidden mb-4",style:{border:"1px solid var(--border-subtle)",maxHeight:"400px",overflowY:"auto"},children:y.map((D,I)=>r.jsxs("div",{className:"px-3 py-0.5 text-[11px] font-mono",style:{background:D.type==="added"?"rgba(34,197,94,0.1)":D.type==="removed"?"rgba(239,68,68,0.1)":"transparent",color:D.type==="added"?"var(--green)":D.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:D.type==="added"?"3px solid var(--green)":D.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[r.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:D.type==="added"?"+":D.type==="removed"?"-":" "}),D.content]},I))}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{onClick:q,disabled:C,className:"btn btn-primary",children:C?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"spinner",style:{width:12,height:12}})," Applying..."]}):r.jsxs(r.Fragment,{children:[r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})," Apply"]})}),r.jsx("button",{onClick:ee,className:"btn btn-secondary",children:"Discard"})]})]})]})]})}const Yg={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"}},YC={remove:"var(--red)",modify:"#fbbf24",add:"var(--green)"};function KC({change:t,index:a,selected:s,onToggle:i,originalEval:c}){var y;const[u,d]=m.useState(!1),f=Yg[t.action]??Yg.add,x=YC[t.action]??"var(--border-subtle)",h=t.action==="remove"?(c==null?void 0:c.name)??`Eval #${t.evalId}`:((y=t.eval)==null?void 0:y.name)??"Unnamed",v=m.useCallback(()=>i(a),[i,a]);return r.jsxs("div",{className:"rounded-lg transition-all duration-150",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)",borderLeft:`3px solid ${x}`,opacity:s?1:.5},children:[r.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[r.jsx("input",{type:"checkbox",checked:s,onChange:v,className:"flex-shrink-0",style:{accentColor:"var(--accent)"}}),r.jsx("span",{className:"pill text-[9px] font-bold flex-shrink-0",style:{background:f.bg,color:f.color,padding:"1px 6px"},children:f.label}),r.jsx("span",{className:"text-[12px] font-medium truncate",style:{color:"var(--text-primary)"},children:h}),r.jsx("span",{className:"text-[11px] truncate flex-1",style:{color:"var(--text-tertiary)"},children:t.reason}),r.jsx("button",{onClick:()=>d(!u),className:"flex-shrink-0 w-5 h-5 flex items-center justify-center rounded transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:b=>{b.currentTarget.style.background="var(--surface-3)"},onMouseLeave:b=>{b.currentTarget.style.background="transparent"},children:r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:u?"rotate(90deg)":"rotate(0)",transition:"transform 0.15s ease"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})})]}),u&&r.jsxs("div",{className:"px-4 pb-3 animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)"},children:[t.action==="add"&&t.eval&&r.jsx(XC,{evalCase:t.eval}),t.action==="modify"&&t.eval&&c&&r.jsx(QC,{original:c,proposed:t.eval}),t.action==="remove"&&c&&r.jsx(ZC,{evalCase:c})]})]})}function XC({evalCase:t}){var a;return r.jsxs("div",{className:"pt-2.5 space-y-2",children:[r.jsx(bf,{label:"Prompt",value:t.prompt}),r.jsx(bf,{label:"Expected",value:t.expected_output}),r.jsxs("div",{children:[r.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:["Assertions (",((a=t.assertions)==null?void 0:a.length)??0,")"]}),r.jsx("div",{className:"mt-1 space-y-1",children:(t.assertions??[]).map(s=>r.jsxs("div",{className:"text-[11px] flex items-start gap-1.5",style:{color:"var(--text-secondary)"},children:[r.jsx("span",{style:{color:"var(--green)"},children:"+"})," ",s.text]},s.id))})]})]})}function QC({original:t,proposed:a}){const s=[];t.name!==a.name&&s.push({label:"Name",old:t.name,new:a.name}),t.prompt!==a.prompt&&s.push({label:"Prompt",old:t.prompt,new:a.prompt}),t.expected_output!==a.expected_output&&s.push({label:"Expected",old:t.expected_output,new:a.expected_output});const i=t.assertions??[],c=a.assertions??[],u=new Set(i.map(h=>h.text)),d=new Set(c.map(h=>h.text)),f=c.filter(h=>!u.has(h.text)),x=i.filter(h=>!d.has(h.text));return r.jsxs("div",{className:"pt-2.5 space-y-2",children:[s.map(h=>r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:h.label}),r.jsxs("div",{className:"mt-1 text-[11px] font-mono rounded p-2",style:{background:"var(--surface-1)"},children:[r.jsxs("div",{style:{color:"var(--red)",textDecoration:"line-through"},children:["- ",jf(h.old,120)]}),r.jsxs("div",{style:{color:"var(--green)"},children:["+ ",jf(h.new,120)]})]})]},h.label)),(f.length>0||x.length>0)&&r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Assertions"}),r.jsxs("div",{className:"mt-1 space-y-0.5",children:[x.map(h=>r.jsxs("div",{className:"text-[11px]",style:{color:"var(--red)"},children:["- ",h.text]},h.id)),f.map(h=>r.jsxs("div",{className:"text-[11px]",style:{color:"var(--green)"},children:["+ ",h.text]},h.id))]})]}),s.length===0&&f.length===0&&x.length===0&&r.jsx("div",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"No visible field changes"})]})}function ZC({evalCase:t}){var a;return r.jsxs("div",{className:"pt-2.5 space-y-2",style:{opacity:.7},children:[r.jsx(bf,{label:"Prompt",value:t.prompt}),r.jsxs("div",{children:[r.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:["Assertions (",((a=t.assertions)==null?void 0:a.length)??0,")"]}),r.jsx("div",{className:"mt-1 space-y-0.5",children:(t.assertions??[]).map(s=>r.jsx("div",{className:"text-[11px]",style:{color:"var(--red)",textDecoration:"line-through"},children:s.text},s.id))})]})]})}function bf({label:t,value:a}){return r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:t}),r.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:jf(a,300)})]})}function jf(t,a){return t.length>a?t.slice(0,a)+"...":t}const Kg={remove:0,modify:1,add:2};function JC({changes:t,selections:a,currentEvals:s,onToggle:i,onSelectAll:c,onDeselectAll:u}){if(t.length===0)return null;const d=t.map((x,h)=>({change:x,originalIndex:h}));d.sort((x,h)=>(Kg[x.change.action]??2)-(Kg[h.change.action]??2));const f=Array.from(a.values()).filter(Boolean).length;return r.jsxs("div",{className:"mt-3 animate-fade-in",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[11px] font-semibold",style:{color:"var(--text-primary)"},children:"Test Case Changes"}),r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["(",f,"/",t.length," selected)"]})]}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("button",{onClick:c,className:"text-[10px] px-2 py-0.5 rounded transition-colors duration-150",style:{color:"var(--accent)",background:"transparent"},onMouseEnter:x=>{x.currentTarget.style.background="var(--accent-muted)"},onMouseLeave:x=>{x.currentTarget.style.background="transparent"},children:"Select All"}),r.jsx("button",{onClick:u,className:"text-[10px] px-2 py-0.5 rounded transition-colors duration-150",style:{color:"var(--text-tertiary)",background:"transparent"},onMouseEnter:x=>{x.currentTarget.style.background="var(--surface-3)"},onMouseLeave:x=>{x.currentTarget.style.background="transparent"},children:"Deselect All"})]})]}),r.jsx("div",{className:"space-y-1.5 overflow-auto",style:{maxHeight:240},children:d.map(({change:x,originalIndex:h})=>r.jsx(KC,{change:x,index:h,selected:a.get(h)??!1,onToggle:i,originalEval:x.evalId!=null?s.find(v=>v.id===x.evalId):void 0},h))})]})}function eE(){var D;const{state:t,dispatch:a,submitAiEdit:s,applyAiEdit:i,discardAiEdit:c,cancelAiEdit:u,toggleEvalChange:d,selectAllEvalChanges:f,deselectAllEvalChanges:x,retryEvalsSave:h}=bn(),{aiEditLoading:v,aiEditResult:y,aiEditError:b,aiEditClassifiedError:S,aiEditProgress:w,aiEditEvalChanges:E,aiEditEvalSelections:k,aiEditEvalsRetry:N}=t,[T,A]=m.useState(""),{config:B}=Ya(),[z,P]=m.useState("claude-cli"),[C,O]=m.useState("opus"),L=m.useRef(null);m.useEffect(()=>{var I;(I=L.current)==null||I.focus()},[]),m.useEffect(()=>{if(!B)return;B.providers.find(F=>F.id==="claude-cli"&&F.available)&&(P("claude-cli"),O("opus"))},[B]);const _=B==null?void 0:B.providers.find(I=>I.id===z&&I.available),H=m.useCallback(()=>{const I=T.trim();!I||v||s(I,z,C)},[T,v,s,z,C]),W=m.useCallback(I=>{I.key==="Enter"&&!I.shiftKey&&(I.preventDefault(),H()),I.key==="Escape"&&(I.preventDefault(),v?u():c())},[H,v,u,c]),q=m.useCallback(()=>{a({type:"CLOSE_AI_EDIT"}),a({type:"OPEN_AI_EDIT"})},[a]),ee=y?uc(t.skillContent,y.improved):[],$=((D=t.evals)==null?void 0:D.evals)??[];return r.jsxs("div",{className:"animate-fade-in",style:{background:"var(--surface-1)",borderTop:"1px solid var(--border-subtle)"},children:[r.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:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("div",{className:"w-6 h-6 rounded-md flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#a855f7",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M15 4V2"}),r.jsx("path",{d:"M15 16v-2"}),r.jsx("path",{d:"M8 9h2"}),r.jsx("path",{d:"M20 9h2"}),r.jsx("path",{d:"M17.8 11.8L19 13"}),r.jsx("path",{d:"M15 9h.01"}),r.jsx("path",{d:"M17.8 6.2L19 5"}),r.jsx("path",{d:"M11 6.2L9.7 5"}),r.jsx("path",{d:"M3 21l9-9"})]})}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"AI Edit"}),r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:"Describe what to change — Enter to submit, Esc to dismiss"})]}),r.jsx("button",{onClick:c,className:"w-6 h-6 rounded-md 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:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),r.jsxs("div",{className:"px-4 py-3",children:[!y&&r.jsxs(r.Fragment,{children:[r.jsx("textarea",{ref:L,value:T,onChange:I=>A(I.target.value),onKeyDown:W,placeholder:"e.g., Add an error handling section...",disabled:v,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}}),r.jsxs("div",{className:"flex items-end gap-2.5 mt-2",children:[r.jsxs("div",{style:{minWidth:200},children:[r.jsx("label",{className:"text-[10px] font-medium mb-0.5 block",style:{color:"var(--text-tertiary)"},children:"Provider"}),r.jsx("select",{className:"input-field text-[11px] py-1",value:z,onChange:I=>{P(I.target.value);const F=B==null?void 0:B.providers.find(J=>J.id===I.target.value);F!=null&&F.models[0]&&O(F.models[0].id)},disabled:v,style:{width:"100%"},children:B==null?void 0:B.providers.filter(I=>I.available).map(I=>r.jsx("option",{value:I.id,children:I.label},I.id))})]}),r.jsxs("div",{style:{minWidth:200},children:[r.jsx("label",{className:"text-[10px] font-medium mb-0.5 block",style:{color:"var(--text-tertiary)"},children:"Model"}),r.jsx("select",{className:"input-field text-[11px] py-1",value:C,onChange:I=>O(I.target.value),disabled:v,style:{width:"100%"},children:_==null?void 0:_.models.map(I=>r.jsx("option",{value:I.id,children:I.label},I.id))})]}),r.jsx("div",{className:"flex-1"}),v?r.jsx("button",{onClick:u,className:"btn btn-secondary flex-shrink-0 text-[11px]",style:{padding:"6px 14px"},children:"Cancel"}):r.jsx("button",{onClick:H,disabled:!T.trim(),className:"btn btn-primary flex-shrink-0 text-[11px]",style:{padding:"6px 14px"},children:"Submit"})]}),v&&w.length>0&&r.jsx("div",{className:"mt-2.5",children:r.jsx(ui,{entries:w,isRunning:!0})})]}),b&&r.jsx("div",{className:"mt-3",children:S?r.jsx(dc,{error:S,onRetry:q,onDismiss:c}):r.jsx("div",{className:"px-3 py-2.5 rounded-lg text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:b})}),y&&r.jsxs("div",{className:"animate-fade-in",children:[y.reasoning&&r.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:[r.jsx("span",{className:"font-semibold",style:{color:"#a855f7"},children:"AI Reasoning: "}),y.reasoning]}),r.jsx("div",{className:"mb-1",children:r.jsx("span",{className:"text-[11px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md Changes"})}),r.jsx("div",{className:"rounded-lg overflow-hidden mb-3",style:{border:"1px solid var(--border-subtle)",maxHeight:300,overflowY:"auto"},children:ee.map((I,F)=>r.jsxs("div",{className:"px-3 py-0.5 text-[10.5px] font-mono",style:{background:I.type==="added"?"rgba(34,197,94,0.1)":I.type==="removed"?"rgba(239,68,68,0.1)":"transparent",color:I.type==="added"?"var(--green)":I.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:I.type==="added"?"3px solid var(--green)":I.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[r.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:I.type==="added"?"+":I.type==="removed"?"-":" "}),I.content]},F))}),r.jsx(JC,{changes:E,selections:k,currentEvals:$,onToggle:d,onSelectAll:f,onDeselectAll:x}),N&&r.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:[r.jsx("span",{children:"Test case save failed. SKILL.md was saved successfully."}),r.jsx("button",{onClick:h,className:"btn text-[11px]",style:{background:"rgba(251,191,36,0.2)",color:"#fbbf24",padding:"3px 10px"},children:"Retry Save"})]}),r.jsxs("div",{className:"flex gap-2 mt-3",children:[r.jsxs("button",{onClick:i,className:"btn btn-primary text-[11px]",style:{padding:"5px 12px"},children:[r.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Apply"]}),r.jsx("button",{onClick:c,className:"btn btn-secondary text-[11px]",style:{padding:"5px 12px"},children:"Discard"}),r.jsx("button",{onClick:q,className:"btn btn-ghost text-[11px]",style:{padding:"5px 12px"},children:"Try Again"})]})]})]})]})}function tE(t,a){const[s,i]=m.useState([]),[c,u]=m.useState("SKILL.md"),[d,f]=m.useState(null),[x,h]=m.useState(!1),[v,y]=m.useState(null),[b,S]=m.useState(null),w=m.useCallback(async()=>{try{const N=await ke.getSkillFiles(t,a);i(N.files),S(null)}catch(N){i([]),S(N.message??"Unable to load skill files")}},[t,a]);m.useEffect(()=>{u("SKILL.md"),f(null),y(null),S(null),w()},[t,a,w]);const E=m.useCallback(async N=>{if(u(N),N==="SKILL.md"){f(null),y(null);return}h(!0),y(null);try{const T=await ke.getSkillFile(t,a,N);f(T)}catch(T){y(`Unable to open file: ${T.message}`),f(null)}finally{h(!1)}},[t,a]),k=m.useCallback(()=>{w()},[w]);return{files:s,activeFile:c,secondaryContent:d,loading:x,error:v,loadError:b,selectFile:E,refresh:k,isSkillMd:c==="SKILL.md"}}function nE(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function rE(t){const a=[],s=new Map;for(const i of t){const c=i.path.split("/"),d={name:c[c.length-1],path:i.path,type:i.type,size:i.size,children:[]};s.set(i.path,d)}for(const i of t){const c=i.path.split("/");if(c.length===1){const u=s.get(i.path);u&&a.push(u)}else{const u=c.slice(0,-1).join("/"),d=s.get(u),f=s.get(i.path);d&&f&&d.children.push(f)}}return a}function Vy({expanded:t}){return r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:t?"rotate(90deg)":"rotate(0deg)",transition:"transform 0.15s"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})}function Fy(){return r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:r.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 aE(){return r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),r.jsx("polyline",{points:"14 2 14 8 20 8"})]})}function lE(){return r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"23 4 23 10 17 10"}),r.jsx("polyline",{points:"1 20 1 14 7 14"}),r.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 Gy({node:t,depth:a,activeFile:s,onSelect:i}){const[c,u]=m.useState(!0),d=t.path===s;return t.type==="dir"?r.jsxs("div",{children:[r.jsxs("button",{onClick:()=>u(!c),style:{display:"flex",alignItems:"center",gap:4,width:"100%",paddingLeft:`${4+a*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:[r.jsx(Vy,{expanded:c}),r.jsx(Fy,{}),r.jsxs("span",{children:[t.name,"/"]})]}),c&&t.children.map(f=>r.jsx(Gy,{node:f,depth:a+1,activeFile:s,onSelect:i},f.path))]}):r.jsxs("button",{onClick:()=>i(t.path),style:{display:"flex",alignItems:"center",gap:4,width:"100%",paddingLeft:`${4+a*14}px`,paddingTop:2,paddingBottom:2,background:d?"var(--accent-muted)":"none",border:"none",cursor:"pointer",color:d?"var(--accent)":"var(--text-tertiary)",fontSize:11,fontFamily:"var(--font-mono, monospace)",textAlign:"left",borderRadius:3},children:[r.jsx("span",{style:{width:10}}),r.jsx(aE,{}),r.jsx("span",{style:{flex:1},children:t.name}),r.jsx("span",{style:{fontSize:9,color:"var(--text-tertiary)",marginRight:4,whiteSpace:"nowrap"},children:nE(t.size)})]})}function sE({files:t,activeFile:a,onSelect:s,onRefresh:i,loadError:c}){const[u,d]=m.useState(!1),f=m.useMemo(()=>rE(t),[t]);return r.jsxs("div",{style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-0)"},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 8px",cursor:"pointer",userSelect:"none"},onClick:()=>d(!u),children:[r.jsx(Vy,{expanded:u}),r.jsx(Fy,{}),r.jsx("span",{style:{fontSize:11,fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a}),r.jsx("button",{onClick:x=>{x.stopPropagation(),i()},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:r.jsx(lE,{})})]}),u&&r.jsx("div",{style:{maxHeight:240,overflowY:"auto",padding:"2px 4px 4px"},children:c?r.jsx("div",{style:{fontSize:11,color:"var(--text-warning, var(--text-tertiary))",padding:"4px 8px"},title:c,children:"Skill files not accessible from this workspace"}):f.length===0?r.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",padding:"4px 8px"},children:"No files found"}):f.map(x=>r.jsx(Gy,{node:x,depth:0,activeFile:a,onSelect:s},x.path))})]})}function Ro(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function iE(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function oE(t){const a=t.toLowerCase();return a.endsWith(".json")?"json":a.endsWith(".md")?"md":"other"}function Xg({content:t}){return r.jsx("textarea",{readOnly:!0,value:t,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 Qg({content:t,fileType:a}){if(a==="json"){const s=iE(t);return r.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:s})}return a==="md"?r.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:cc(t)}}):r.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:t})}function Zg(t){try{return JSON.stringify(JSON.parse(t),null,2).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"([^"\\]|\\.)*"\s*:/g,s=>`<span style="color:#6383ff">${s}</span>`).replace(/:\s*"([^"\\]|\\.)*"/g,s=>`<span style="color:#22c55e">${s.slice(0,2)}<span style="color:#22c55e">${s.slice(2)}</span></span>`).replace(/:\s*(-?\d+\.?\d*)/g,(s,i)=>`: <span style="color:#fb923c">${i}</span>`).replace(/:\s*(true|false|null)/g,(s,i)=>`: <span style="color:#a855f7">${i}</span>`)}catch{return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}}function cE({file:t,loading:a,error:s,viewMode:i,plugin:c,skill:u,onSaved:d,onDirtyChange:f}){const[x,h]=m.useState(i),[v,y]=m.useState(!1),[b,S]=m.useState(""),[w,E]=m.useState(!1),[k,N]=m.useState(null),T=i!==x?i:x;m.useEffect(()=>{f==null||f(v)},[v,f]);const A=m.useCallback(()=>{(t==null?void 0:t.content)!=null&&(S(t.content),y(!0))},[t]),B=m.useCallback(()=>{y(!1)},[]),z=m.useCallback(async()=>{if(!(!c||!u||!t)){E(!0);try{await ke.saveSkillFile(c,u,t.path,b),N("Saved"),y(!1),d==null||d(),setTimeout(()=>N(null),2e3)}catch(O){N(`Save failed: ${O.message}`),setTimeout(()=>N(null),3e3)}finally{E(!1)}}},[c,u,t,b,d]);if(m.useEffect(()=>{if(!v)return;const O=L=>{(L.ctrlKey||L.metaKey)&&L.key==="s"&&(L.preventDefault(),z())};return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[v,z]),a)return r.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-tertiary)",fontSize:13},children:"Loading…"});if(s)return r.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:24},children:r.jsxs("div",{style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)",borderRadius:8,padding:"16px 20px",maxWidth:400,textAlign:"center"},children:[r.jsx("div",{style:{fontSize:13,color:"var(--text-primary)",fontWeight:600,marginBottom:6},children:"Unable to open file"}),r.jsx("div",{style:{fontSize:12,color:"var(--text-tertiary)"},children:s})]})});if(!t)return null;if(t.binary)return r.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-tertiary)",fontSize:13},children:["Binary file (",Ro(t.size),") — cannot be displayed"]});const P=t.content??"",C=oE(t.path);return r.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",minHeight:0},children:[t.truncated&&r.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 ",Ro(512*1024)," — ",Ro(t.size)," total"]}),r.jsxs("div",{style:{display:"flex",gap:4,padding:"4px 8px",borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-0)"},children:[(C==="md"||C==="json")&&["raw","split","preview"].map(O=>r.jsx("button",{onClick:()=>h(O),style:{padding:"2px 8px",fontSize:11,background:T===O?"var(--accent-muted)":"none",color:T===O?"var(--accent)":"var(--text-tertiary)",border:"none",borderRadius:3,cursor:"pointer",textTransform:"capitalize"},children:O},O)),r.jsxs("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-tertiary)",display:"flex",alignItems:"center",gap:6},children:[Ro(t.size),c&&u&&!t.binary&&!v&&r.jsx("button",{onClick:A,style:{padding:"1px 6px",fontSize:10,background:"var(--accent-muted)",color:"var(--accent)",border:"none",borderRadius:3,cursor:"pointer"},children:"Edit"}),v&&r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:z,disabled:w,style:{padding:"1px 6px",fontSize:10,background:"var(--accent)",color:"#fff",border:"none",borderRadius:3,cursor:"pointer",opacity:w?.6:1},children:w?"Saving...":"Save"}),r.jsx("button",{onClick:B,style:{padding:"1px 6px",fontSize:10,background:"var(--surface-3)",color:"var(--text-tertiary)",border:"none",borderRadius:3,cursor:"pointer"},children:"Cancel"})]})]})]}),k&&r.jsx("div",{style:{padding:"4px 12px",background:k.startsWith("Save failed")?"var(--red-muted)":"var(--green-muted)",borderBottom:"1px solid var(--border-subtle)",fontSize:11,color:k.startsWith("Save failed")?"var(--red)":"var(--green)"},children:k}),r.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",minHeight:0},children:v?r.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"auto"},children:[r.jsx("textarea",{value:b,onChange:O=>S(O.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}}),r.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:[r.jsx("span",{style:{flex:1,fontSize:11,color:"var(--text-tertiary)"},children:"Unsaved changes"}),r.jsx("button",{onClick:z,disabled:w,style:{padding:"3px 12px",fontSize:11,background:"var(--accent)",color:"#fff",border:"none",borderRadius:4,cursor:"pointer",opacity:w?.6:1},children:w?"Saving...":"Save"}),r.jsx("button",{onClick:B,style:{padding:"3px 12px",fontSize:11,background:"var(--surface-3)",color:"var(--text-tertiary)",border:"none",borderRadius:4,cursor:"pointer"},children:"Cancel"})]})]}):T==="split"&&C!=="other"?r.jsxs(r.Fragment,{children:[r.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",borderRight:"1px solid var(--border-subtle)"},children:r.jsx(Xg,{content:P})}),r.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"auto"},children:C==="json"?r.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:Zg(P)}}):r.jsx(Qg,{content:P,fileType:C})})]}):T==="preview"&&C!=="other"?C==="json"?r.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:Zg(P)}}):r.jsx(Qg,{content:P,fileType:C}):r.jsx(Xg,{content:P})})]})}const uE=/^git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/,dE=/^https:\/\/github\.com\/([^/]+)\/(.+?)(?:\.git)?$/;function fE(t){const a=t.trim();if(!a)throw new Error("normalizeRemoteUrl: empty input");let s=a.match(uE);if(s)return`https://github.com/${s[1]}/${s[2]}`;if(s=a.match(dE),s)return`https://github.com/${s[1]}/${s[2]}`;throw new Error(`normalizeRemoteUrl: unrecognized remote URL: ${t}`)}function Wy(t){const a=fE(t);return`https://verified-skill.com/submit?repo=${encodeURIComponent(a)}`}function Jg(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function pE({remoteUrl:t,fileCount:a,provider:s,model:i,onClose:c,defaultMode:u="manual"}){const[d,f]=m.useState(u),[x,h]=m.useState(""),[v,y]=m.useState(!1),[b,S]=m.useState(!1),[w,E]=m.useState(null),[k,N]=m.useState(null),T=m.useCallback(async()=>{y(!0),E(null);try{const ee=await ke.gitCommitMessage({provider:s,model:i});h(ee.message)}catch(ee){const $=ee instanceof Error?ee.message:String(ee);E($)}finally{y(!1)}},[s,i]);m.useEffect(()=>{u==="ai"&&!x&&T()},[]);const A=m.useCallback(()=>{f("ai"),N(null),x.trim()||T()},[x,T]),B=m.useCallback(()=>{f("manual"),E(null)},[]),z=m.useCallback(async()=>{const ee=x.trim();if(!(!ee||b)){S(!0),N(null);try{const $=await ke.gitPublish({commitMessage:ee}),D=$.remoteUrl??t,I=Wy(D);window.open(I,"_blank","noopener,noreferrer");const F=($.commitSha??"").slice(0,7),J=$.branch??"";Jg(`Opening verified-skill.com — ${F} on ${J}`,"info"),c()}catch($){const D=$ instanceof Error?$.message:String($),I=D.length>200?D.slice(0,200)+"…":D;N(I),Jg(`Publish failed: ${I}`,"error")}finally{S(!1)}}},[x,b,t,c]),P=x.trim().length>0&&!b&&!v,C="#E6EDF3",O="#9CA3AF",L="rgba(255,255,255,0.12)",_="#0F1115",H={fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:O,fontFamily:"var(--font-mono, monospace)",marginBottom:6,display:"block"},W={flex:1,height:32,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,fontSize:12,fontFamily:"var(--font-mono, monospace)",background:"transparent",color:O,border:"none",cursor:"pointer",transition:"background 120ms ease, color 120ms ease"},q={...W,background:"rgba(255,255,255,0.08)",color:C,fontWeight:600};return r.jsxs(r.Fragment,{children:[r.jsx("div",{"aria-hidden":"true",onClick:b?void 0:c,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"}}),r.jsx("div",{role:"presentation",style:{position:"fixed",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,padding:24,pointerEvents:"none"},children:r.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 ${L}`,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:C,fontFamily:"var(--font-mono, monospace)",animation:"publishDrawerIn 180ms cubic-bezier(0.2, 0.8, 0.2, 1)"},children:[r.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:4},children:[r.jsx("strong",{style:{fontSize:16,fontWeight:700,letterSpacing:"-0.01em",color:C,fontFamily:"var(--font-sans, var(--font-mono, sans-serif))"},children:"Publish skill"}),r.jsx("button",{type:"button","aria-label":"Dismiss",onClick:b?void 0:c,disabled:b,style:{background:"none",border:"none",color:O,fontSize:22,lineHeight:1,cursor:b?"not-allowed":"pointer",padding:0,opacity:b?.4:1},children:"×"})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:12,color:O,fontVariantNumeric:"tabular-nums",marginBottom:18},children:[r.jsx("span",{"aria-hidden":"true",style:{color:"#F59E0B",fontFamily:"monospace"},children:"▮"}),r.jsxs("span",{children:[a," file",a===1?"":"s"," changed"]})]}),r.jsx("div",{style:{height:1,background:L,margin:"0 -24px 18px"}}),r.jsx("span",{style:H,children:"Mode"}),r.jsxs("div",{role:"tablist","aria-label":"Commit message mode","data-testid":"publish-mode-toggle",style:{display:"flex",border:`1px solid ${L}`,borderRadius:6,overflow:"hidden",marginBottom:16,background:_},children:[r.jsx("button",{type:"button",role:"tab","aria-selected":d==="manual","data-testid":"publish-mode-manual",onClick:B,disabled:b,style:d==="manual"?q:W,children:"Write yourself"}),r.jsx("div",{style:{width:1,background:L}}),r.jsx("button",{type:"button",role:"tab","aria-selected":d==="ai","data-testid":"publish-mode-ai",onClick:A,disabled:b,style:d==="ai"?q:W,children:v&&d==="ai"?"Generating…":"Generate with AI"})]}),r.jsx("label",{htmlFor:"commit-message",style:H,children:"Commit message"}),r.jsx("textarea",{id:"commit-message",value:x,onChange:ee=>h(ee.target.value),rows:5,disabled:v||b,placeholder:v?"Generating with AI…":d==="ai"?"Click Generate to draft a message":"Type your commit message…",style:{width:"100%",background:_,border:`1px solid ${L}`,borderRadius:6,padding:"10px 12px",fontFamily:"var(--font-mono, monospace)",fontSize:13,lineHeight:1.6,color:C,resize:"vertical",outline:"none"}}),d==="ai"&&r.jsx("button",{type:"button",onClick:T,disabled:v||b,"data-testid":"publish-generate-button",style:{marginTop:10,padding:"8px 14px",background:v?"rgba(255,255,255,0.06)":"#2563EB",color:v?O:"#FFFFFF",border:"1px solid "+(v?L:"#2563EB"),borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:600,cursor:v||b?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6},children:v?"Generating…":"Generate with AI"}),w&&d==="ai"&&r.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:[r.jsx("strong",{style:{fontWeight:600},children:"AI generation failed."})," ",w," ",r.jsx("button",{type:"button",onClick:T,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"})]}),k&&r.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:[r.jsx("strong",{style:{fontWeight:600},children:"Publish failed."})," ",k]}),r.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:18,gap:6},children:[r.jsx("div",{style:{minHeight:28},children:d==="ai"&&r.jsx("button",{type:"button","aria-label":"Regenerate",onClick:T,disabled:v||b,className:"btn btn-ghost text-[11px]",style:{padding:"4px 10px"},children:v?"Generating…":"Regenerate"})}),r.jsxs("div",{style:{display:"flex",gap:8},children:[r.jsx("button",{type:"button","aria-label":"Cancel",onClick:c,disabled:b,style:{padding:"8px 14px",background:"transparent",color:C,border:`1px solid ${L}`,borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:500,cursor:b?"not-allowed":"pointer",opacity:b?.5:1},children:"Cancel"}),r.jsx("button",{type:"button","aria-label":"Commit & Push",onClick:z,disabled:!P,"data-testid":"publish-commit-push",style:{padding:"8px 16px",background:P?"#22C55E":"rgba(255,255,255,0.06)",color:P?"#0B0F12":O,border:"1px solid "+(P?"#22C55E":L),borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:700,cursor:P?"pointer":"not-allowed"},children:b?"Publishing…":"Commit & Push"})]})]})]})}),r.jsx("style",{children:`
|
|
78
|
+
`);if(s.length>1e3||i.length>1e3)return[...s.map(v=>({type:"unchanged",content:v}))];const c=s.length,u=i.length,d=Array.from({length:c+1},()=>new Array(u+1).fill(0));for(let v=1;v<=c;v++)for(let y=1;y<=u;y++)s[v-1]===i[y-1]?d[v][y]=d[v-1][y-1]+1:d[v][y]=Math.max(d[v-1][y],d[v][y-1]);const f=[];let x=c,h=u;for(;x>0||h>0;)x>0&&h>0&&s[x-1]===i[h-1]?(f.push({type:"unchanged",content:s[x-1]}),x--,h--):h>0&&(x===0||d[x][h-1]>=d[x-1][h])?(f.push({type:"added",content:i[h-1]}),h--):(f.push({type:"removed",content:s[x-1]}),x--);return f.reverse()}function qC(t,a){if(a&&new Set(["generating","comparing","judging","judging_assertion","preparing","parsing","generating_skill","generating_baseline","scoring","action_items"]).has(t))return r.jsx("div",{className:"spinner",style:{width:10,height:10,flexShrink:0}});const i=new Set(["generating","comparing","preparing","generating_skill","generating_baseline","scoring","action_items"]);return r.jsx("div",{className:"w-2.5 h-2.5 rounded-full flex-shrink-0",style:{background:i.has(t)?"var(--accent)":"var(--green)"}})}function ui({entries:t,isRunning:a}){const[s,i]=m.useState(!1),c=m.useRef(null);return m.useEffect(()=>{c.current&&!s&&(c.current.scrollTop=c.current.scrollHeight)},[t,s]),t.length===0&&!a?null:r.jsxs("div",{className:"mt-2 animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsxs("button",{onClick:()=>i(!s),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:u=>{u.currentTarget.style.color="var(--text-primary)"},onMouseLeave:u=>{u.currentTarget.style.color="var(--text-tertiary)"},children:[r.jsxs("span",{className:"flex items-center gap-2",children:[a&&r.jsx("div",{className:"spinner",style:{width:10,height:10}}),"Progress Log (",t.length,")"]}),r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",style:{transform:s?"rotate(0)":"rotate(180deg)",transition:"transform 0.2s ease"},children:r.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),!s&&r.jsx("div",{ref:c,className:"px-3 pb-3 space-y-1 max-h-48 overflow-y-auto",children:t.map((u,d)=>{const f=d===t.length-1&&a,x=d===0?"0s":`+${((u.timestamp-t[0].timestamp)/1e3).toFixed(1)}s`;return r.jsxs("div",{className:"flex items-center gap-2 text-[11px] animate-fade-in",style:{opacity:f?1:.7},children:[qC(u.phase,f),r.jsx("span",{className:"font-mono flex-shrink-0",style:{color:"var(--text-tertiary)",width:40},children:x}),r.jsx("span",{style:{color:f?"var(--text-primary)":"var(--text-secondary)"},children:u.message}),u.current!=null&&u.total!=null&&r.jsxs("span",{className:"font-mono flex-shrink-0",style:{color:"var(--text-tertiary)"},children:["[",u.current,"/",u.total,"]"]})]},d)})})]})}const qg={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 dc({error:t,onRetry:a,onDismiss:s}){const[i,c]=m.useState(null),u=m.useRef(null);m.useEffect(()=>(t.category==="rate_limit"&&t.retryAfterMs?c(Math.ceil(t.retryAfterMs/1e3)):c(null),()=>{u.current&&clearInterval(u.current)}),[t]),m.useEffect(()=>{if(!(i==null||i<=0))return u.current=setInterval(()=>{c(x=>x==null||x<=1?(u.current&&clearInterval(u.current),0):x-1)},1e3),()=>{u.current&&clearInterval(u.current)}},[i!=null&&i>0]);const d=qg[t.category]||qg.unknown,f=i!=null&&i>0;return r.jsxs("div",{className:"rounded-lg overflow-hidden animate-fade-in",style:{border:`1px solid color-mix(in srgb, ${d.color} 30%, transparent)`,background:`color-mix(in srgb, ${d.color} 6%, var(--surface-1))`},children:[r.jsxs("div",{className:"flex items-center justify-between px-3.5 py-2.5",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{style:{fontSize:14},children:d.icon}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:d.color},children:t.title})]}),s&&r.jsx("button",{onClick:s,className:"w-5 h-5 rounded flex items-center justify-center",style:{color:"var(--text-tertiary)"},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),r.jsxs("div",{className:"px-3.5 pb-3",children:[r.jsx("p",{className:"text-[11.5px] mb-1.5",style:{color:"var(--text-secondary)"},children:t.description}),r.jsx("p",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:t.hint}),(a||i!=null)&&r.jsx("div",{className:"flex items-center gap-2 mt-2.5",children:a&&r.jsx("button",{onClick:a,disabled:f,className:"btn btn-secondary text-[11px]",style:{padding:"4px 10px",opacity:f?.5:1},children:f?`Retry in ${i}s`:"Retry"})})]})]})}function YC({plugin:t,skill:a,skillContent:s,onApplied:i}){const[c,u]=m.useState("closed"),{config:d}=Ya(),[f,x]=m.useState("claude-cli"),[h,v]=m.useState("opus"),[y,b]=m.useState([]),[S,w]=m.useState(""),[E,k]=m.useState(""),[N,T]=m.useState(null),[A,B]=m.useState(null),[z,P]=m.useState([]),[C,O]=m.useState(!1),L=m.useRef(null);m.useEffect(()=>{if(!d)return;d.providers.find(I=>I.id==="claude-cli"&&I.available)&&(x("claude-cli"),v("opus"))},[d]),m.useEffect(()=>()=>{var D;(D=L.current)==null||D.abort()},[]);function _(){return d==null?void 0:d.providers.find(D=>D.id===f&&D.available)}const H=m.useCallback(()=>{var D;(D=L.current)==null||D.abort(),u("open")},[]);async function W(){u("loading"),T(null),B(null),P([]);const D=new AbortController;L.current=D;try{const I=await fetch(`/api/skills/${encodeURIComponent(t)}/${encodeURIComponent(a)}/improve?sse`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:f,model:h}),signal:D.signal});if(!I.ok||!I.body){let U=`HTTP ${I.status}`;try{const K=await I.json();K.error&&(U=K.error)}catch{}throw new Error(U)}const F=I.body.getReader(),J=new TextDecoder;let de="",M="";for(;;){const{done:U,value:K}=await F.read();if(U)break;de+=J.decode(K,{stream:!0});const Q=de.split(`
|
|
79
|
+
`);de=Q.pop()||"";for(const ce of Q)if(ce.startsWith("event: "))M=ce.slice(7).trim();else if(ce.startsWith("data: ")){try{const Z=JSON.parse(ce.slice(6));M==="progress"?P(ie=>[...ie,{phase:Z.phase,message:Z.message,timestamp:Date.now()}]):M==="done"||M==="complete"?(w(Z.improved),k(Z.reasoning||""),b(uc(Z.original||s,Z.improved)),u("diff_shown")):M==="error"&&(T(Z.message||Z.description||"Unknown error"),Z.category&&B(Z),u("open"))}catch{}M=""}}}catch(I){I.name!=="AbortError"&&(T(I.message),u("open"))}finally{L.current=null}}async function q(){O(!0);try{await ke.applyImprovement(t,a,S),i(S),u("closed")}catch(D){T(D.message)}finally{O(!1)}}function ee(){u("closed"),b([]),w(""),k(""),T(null)}if(c==="closed")return r.jsxs("button",{onClick:()=>u("open"),className:"btn btn-secondary mb-5",disabled:!s,children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),r.jsx("path",{d:"M2 17l10 5 10-5"}),r.jsx("path",{d:"M2 12l10 5 10-5"})]}),"Improve Skill"]});const $=_();return r.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden animate-fade-in",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[r.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:[r.jsxs("div",{className:"flex items-center gap-2.5",children:[r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#a855f7",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),r.jsx("path",{d:"M2 17l10 5 10-5"}),r.jsx("path",{d:"M2 12l10 5 10-5"})]})}),r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"AI Skill Improvement"})]}),r.jsx("button",{onClick:ee,className:"w-7 h-7 rounded-lg flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:D=>{D.currentTarget.style.background="var(--surface-3)"},onMouseLeave:D=>{D.currentTarget.style.background="transparent"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),r.jsxs("div",{className:"px-5 py-4",children:[(c==="open"||c==="loading")&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-end gap-3 mb-4",children:[r.jsxs("div",{className:"flex-1",children:[r.jsx("label",{className:"text-[11px] font-medium mb-1 block",style:{color:"var(--text-tertiary)"},children:"Provider"}),r.jsx("select",{className:"input-field text-[12px] py-1.5",value:f,onChange:D=>{x(D.target.value);const I=d==null?void 0:d.providers.find(F=>F.id===D.target.value);I!=null&&I.models[0]&&v(I.models[0].id)},disabled:c==="loading",children:d==null?void 0:d.providers.filter(D=>D.available).map(D=>r.jsx("option",{value:D.id,children:D.label},D.id))})]}),r.jsxs("div",{className:"flex-1",children:[r.jsx("label",{className:"text-[11px] font-medium mb-1 block",style:{color:"var(--text-tertiary)"},children:"Model"}),r.jsx("select",{className:"input-field text-[12px] py-1.5",value:h,onChange:D=>v(D.target.value),disabled:c==="loading",children:$==null?void 0:$.models.map(D=>r.jsx("option",{value:D.id,children:D.label},D.id))})]}),c==="loading"?r.jsx("button",{onClick:H,className:"btn btn-secondary flex-shrink-0",children:"Cancel"}):r.jsx("button",{onClick:W,className:"btn btn-primary flex-shrink-0",children:"Improve"})]}),c==="loading"&&z.length>0&&r.jsx("div",{className:"mt-3",children:r.jsx(ui,{entries:z,isRunning:!0})})]}),N&&r.jsx("div",{className:"mb-4",children:A?r.jsx(dc,{error:A,onRetry:W,onDismiss:()=>{T(null),B(null)}}):r.jsx("div",{className:"px-4 py-3 rounded-lg text-[13px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:N})}),c==="diff_shown"&&r.jsxs(r.Fragment,{children:[E&&r.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:[r.jsx("span",{className:"font-semibold",style:{color:"#a855f7"},children:"AI Reasoning: "}),E]}),r.jsx("div",{className:"rounded-lg overflow-hidden mb-4",style:{border:"1px solid var(--border-subtle)",maxHeight:"400px",overflowY:"auto"},children:y.map((D,I)=>r.jsxs("div",{className:"px-3 py-0.5 text-[11px] font-mono",style:{background:D.type==="added"?"rgba(34,197,94,0.1)":D.type==="removed"?"rgba(239,68,68,0.1)":"transparent",color:D.type==="added"?"var(--green)":D.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:D.type==="added"?"3px solid var(--green)":D.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[r.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:D.type==="added"?"+":D.type==="removed"?"-":" "}),D.content]},I))}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{onClick:q,disabled:C,className:"btn btn-primary",children:C?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"spinner",style:{width:12,height:12}})," Applying..."]}):r.jsxs(r.Fragment,{children:[r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})," Apply"]})}),r.jsx("button",{onClick:ee,className:"btn btn-secondary",children:"Discard"})]})]})]})]})}const Yg={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"}},KC={remove:"var(--red)",modify:"#fbbf24",add:"var(--green)"};function XC({change:t,index:a,selected:s,onToggle:i,originalEval:c}){var y;const[u,d]=m.useState(!1),f=Yg[t.action]??Yg.add,x=KC[t.action]??"var(--border-subtle)",h=t.action==="remove"?(c==null?void 0:c.name)??`Eval #${t.evalId}`:((y=t.eval)==null?void 0:y.name)??"Unnamed",v=m.useCallback(()=>i(a),[i,a]);return r.jsxs("div",{className:"rounded-lg transition-all duration-150",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)",borderLeft:`3px solid ${x}`,opacity:s?1:.5},children:[r.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[r.jsx("input",{type:"checkbox",checked:s,onChange:v,className:"flex-shrink-0",style:{accentColor:"var(--accent)"}}),r.jsx("span",{className:"pill text-[9px] font-bold flex-shrink-0",style:{background:f.bg,color:f.color,padding:"1px 6px"},children:f.label}),r.jsx("span",{className:"text-[12px] font-medium truncate",style:{color:"var(--text-primary)"},children:h}),r.jsx("span",{className:"text-[11px] truncate flex-1",style:{color:"var(--text-tertiary)"},children:t.reason}),r.jsx("button",{onClick:()=>d(!u),className:"flex-shrink-0 w-5 h-5 flex items-center justify-center rounded transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:b=>{b.currentTarget.style.background="var(--surface-3)"},onMouseLeave:b=>{b.currentTarget.style.background="transparent"},children:r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:u?"rotate(90deg)":"rotate(0)",transition:"transform 0.15s ease"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})})]}),u&&r.jsxs("div",{className:"px-4 pb-3 animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)"},children:[t.action==="add"&&t.eval&&r.jsx(QC,{evalCase:t.eval}),t.action==="modify"&&t.eval&&c&&r.jsx(ZC,{original:c,proposed:t.eval}),t.action==="remove"&&c&&r.jsx(JC,{evalCase:c})]})]})}function QC({evalCase:t}){var a;return r.jsxs("div",{className:"pt-2.5 space-y-2",children:[r.jsx(bf,{label:"Prompt",value:t.prompt}),r.jsx(bf,{label:"Expected",value:t.expected_output}),r.jsxs("div",{children:[r.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:["Assertions (",((a=t.assertions)==null?void 0:a.length)??0,")"]}),r.jsx("div",{className:"mt-1 space-y-1",children:(t.assertions??[]).map(s=>r.jsxs("div",{className:"text-[11px] flex items-start gap-1.5",style:{color:"var(--text-secondary)"},children:[r.jsx("span",{style:{color:"var(--green)"},children:"+"})," ",s.text]},s.id))})]})]})}function ZC({original:t,proposed:a}){const s=[];t.name!==a.name&&s.push({label:"Name",old:t.name,new:a.name}),t.prompt!==a.prompt&&s.push({label:"Prompt",old:t.prompt,new:a.prompt}),t.expected_output!==a.expected_output&&s.push({label:"Expected",old:t.expected_output,new:a.expected_output});const i=t.assertions??[],c=a.assertions??[],u=new Set(i.map(h=>h.text)),d=new Set(c.map(h=>h.text)),f=c.filter(h=>!u.has(h.text)),x=i.filter(h=>!d.has(h.text));return r.jsxs("div",{className:"pt-2.5 space-y-2",children:[s.map(h=>r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:h.label}),r.jsxs("div",{className:"mt-1 text-[11px] font-mono rounded p-2",style:{background:"var(--surface-1)"},children:[r.jsxs("div",{style:{color:"var(--red)",textDecoration:"line-through"},children:["- ",jf(h.old,120)]}),r.jsxs("div",{style:{color:"var(--green)"},children:["+ ",jf(h.new,120)]})]})]},h.label)),(f.length>0||x.length>0)&&r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Assertions"}),r.jsxs("div",{className:"mt-1 space-y-0.5",children:[x.map(h=>r.jsxs("div",{className:"text-[11px]",style:{color:"var(--red)"},children:["- ",h.text]},h.id)),f.map(h=>r.jsxs("div",{className:"text-[11px]",style:{color:"var(--green)"},children:["+ ",h.text]},h.id))]})]}),s.length===0&&f.length===0&&x.length===0&&r.jsx("div",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"No visible field changes"})]})}function JC({evalCase:t}){var a;return r.jsxs("div",{className:"pt-2.5 space-y-2",style:{opacity:.7},children:[r.jsx(bf,{label:"Prompt",value:t.prompt}),r.jsxs("div",{children:[r.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:["Assertions (",((a=t.assertions)==null?void 0:a.length)??0,")"]}),r.jsx("div",{className:"mt-1 space-y-0.5",children:(t.assertions??[]).map(s=>r.jsx("div",{className:"text-[11px]",style:{color:"var(--red)",textDecoration:"line-through"},children:s.text},s.id))})]})]})}function bf({label:t,value:a}){return r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:t}),r.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:jf(a,300)})]})}function jf(t,a){return t.length>a?t.slice(0,a)+"...":t}const Kg={remove:0,modify:1,add:2};function eE({changes:t,selections:a,currentEvals:s,onToggle:i,onSelectAll:c,onDeselectAll:u}){if(t.length===0)return null;const d=t.map((x,h)=>({change:x,originalIndex:h}));d.sort((x,h)=>(Kg[x.change.action]??2)-(Kg[h.change.action]??2));const f=Array.from(a.values()).filter(Boolean).length;return r.jsxs("div",{className:"mt-3 animate-fade-in",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[11px] font-semibold",style:{color:"var(--text-primary)"},children:"Test Case Changes"}),r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["(",f,"/",t.length," selected)"]})]}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("button",{onClick:c,className:"text-[10px] px-2 py-0.5 rounded transition-colors duration-150",style:{color:"var(--accent)",background:"transparent"},onMouseEnter:x=>{x.currentTarget.style.background="var(--accent-muted)"},onMouseLeave:x=>{x.currentTarget.style.background="transparent"},children:"Select All"}),r.jsx("button",{onClick:u,className:"text-[10px] px-2 py-0.5 rounded transition-colors duration-150",style:{color:"var(--text-tertiary)",background:"transparent"},onMouseEnter:x=>{x.currentTarget.style.background="var(--surface-3)"},onMouseLeave:x=>{x.currentTarget.style.background="transparent"},children:"Deselect All"})]})]}),r.jsx("div",{className:"space-y-1.5 overflow-auto",style:{maxHeight:240},children:d.map(({change:x,originalIndex:h})=>r.jsx(XC,{change:x,index:h,selected:a.get(h)??!1,onToggle:i,originalEval:x.evalId!=null?s.find(v=>v.id===x.evalId):void 0},h))})]})}function tE(){var D;const{state:t,dispatch:a,submitAiEdit:s,applyAiEdit:i,discardAiEdit:c,cancelAiEdit:u,toggleEvalChange:d,selectAllEvalChanges:f,deselectAllEvalChanges:x,retryEvalsSave:h}=bn(),{aiEditLoading:v,aiEditResult:y,aiEditError:b,aiEditClassifiedError:S,aiEditProgress:w,aiEditEvalChanges:E,aiEditEvalSelections:k,aiEditEvalsRetry:N}=t,[T,A]=m.useState(""),{config:B}=Ya(),[z,P]=m.useState("claude-cli"),[C,O]=m.useState("opus"),L=m.useRef(null);m.useEffect(()=>{var I;(I=L.current)==null||I.focus()},[]),m.useEffect(()=>{if(!B)return;B.providers.find(F=>F.id==="claude-cli"&&F.available)&&(P("claude-cli"),O("opus"))},[B]);const _=B==null?void 0:B.providers.find(I=>I.id===z&&I.available),H=m.useCallback(()=>{const I=T.trim();!I||v||s(I,z,C)},[T,v,s,z,C]),W=m.useCallback(I=>{I.key==="Enter"&&!I.shiftKey&&(I.preventDefault(),H()),I.key==="Escape"&&(I.preventDefault(),v?u():c())},[H,v,u,c]),q=m.useCallback(()=>{a({type:"CLOSE_AI_EDIT"}),a({type:"OPEN_AI_EDIT"})},[a]),ee=y?uc(t.skillContent,y.improved):[],$=((D=t.evals)==null?void 0:D.evals)??[];return r.jsxs("div",{className:"animate-fade-in",style:{background:"var(--surface-1)",borderTop:"1px solid var(--border-subtle)"},children:[r.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:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("div",{className:"w-6 h-6 rounded-md flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#a855f7",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M15 4V2"}),r.jsx("path",{d:"M15 16v-2"}),r.jsx("path",{d:"M8 9h2"}),r.jsx("path",{d:"M20 9h2"}),r.jsx("path",{d:"M17.8 11.8L19 13"}),r.jsx("path",{d:"M15 9h.01"}),r.jsx("path",{d:"M17.8 6.2L19 5"}),r.jsx("path",{d:"M11 6.2L9.7 5"}),r.jsx("path",{d:"M3 21l9-9"})]})}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"AI Edit"}),r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:"Describe what to change — Enter to submit, Esc to dismiss"})]}),r.jsx("button",{onClick:c,className:"w-6 h-6 rounded-md 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:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),r.jsxs("div",{className:"px-4 py-3",children:[!y&&r.jsxs(r.Fragment,{children:[r.jsx("textarea",{ref:L,value:T,onChange:I=>A(I.target.value),onKeyDown:W,placeholder:"e.g., Add an error handling section...",disabled:v,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}}),r.jsxs("div",{className:"flex items-end gap-2.5 mt-2",children:[r.jsxs("div",{style:{minWidth:200},children:[r.jsx("label",{className:"text-[10px] font-medium mb-0.5 block",style:{color:"var(--text-tertiary)"},children:"Provider"}),r.jsx("select",{className:"input-field text-[11px] py-1",value:z,onChange:I=>{P(I.target.value);const F=B==null?void 0:B.providers.find(J=>J.id===I.target.value);F!=null&&F.models[0]&&O(F.models[0].id)},disabled:v,style:{width:"100%"},children:B==null?void 0:B.providers.filter(I=>I.available).map(I=>r.jsx("option",{value:I.id,children:I.label},I.id))})]}),r.jsxs("div",{style:{minWidth:200},children:[r.jsx("label",{className:"text-[10px] font-medium mb-0.5 block",style:{color:"var(--text-tertiary)"},children:"Model"}),r.jsx("select",{className:"input-field text-[11px] py-1",value:C,onChange:I=>O(I.target.value),disabled:v,style:{width:"100%"},children:_==null?void 0:_.models.map(I=>r.jsx("option",{value:I.id,children:I.label},I.id))})]}),r.jsx("div",{className:"flex-1"}),v?r.jsx("button",{onClick:u,className:"btn btn-secondary flex-shrink-0 text-[11px]",style:{padding:"6px 14px"},children:"Cancel"}):r.jsx("button",{onClick:H,disabled:!T.trim(),className:"btn btn-primary flex-shrink-0 text-[11px]",style:{padding:"6px 14px"},children:"Submit"})]}),v&&w.length>0&&r.jsx("div",{className:"mt-2.5",children:r.jsx(ui,{entries:w,isRunning:!0})})]}),b&&r.jsx("div",{className:"mt-3",children:S?r.jsx(dc,{error:S,onRetry:q,onDismiss:c}):r.jsx("div",{className:"px-3 py-2.5 rounded-lg text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:b})}),y&&r.jsxs("div",{className:"animate-fade-in",children:[y.reasoning&&r.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:[r.jsx("span",{className:"font-semibold",style:{color:"#a855f7"},children:"AI Reasoning: "}),y.reasoning]}),r.jsx("div",{className:"mb-1",children:r.jsx("span",{className:"text-[11px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md Changes"})}),r.jsx("div",{className:"rounded-lg overflow-hidden mb-3",style:{border:"1px solid var(--border-subtle)",maxHeight:300,overflowY:"auto"},children:ee.map((I,F)=>r.jsxs("div",{className:"px-3 py-0.5 text-[10.5px] font-mono",style:{background:I.type==="added"?"rgba(34,197,94,0.1)":I.type==="removed"?"rgba(239,68,68,0.1)":"transparent",color:I.type==="added"?"var(--green)":I.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:I.type==="added"?"3px solid var(--green)":I.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[r.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:I.type==="added"?"+":I.type==="removed"?"-":" "}),I.content]},F))}),r.jsx(eE,{changes:E,selections:k,currentEvals:$,onToggle:d,onSelectAll:f,onDeselectAll:x}),N&&r.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:[r.jsx("span",{children:"Test case save failed. SKILL.md was saved successfully."}),r.jsx("button",{onClick:h,className:"btn text-[11px]",style:{background:"rgba(251,191,36,0.2)",color:"#fbbf24",padding:"3px 10px"},children:"Retry Save"})]}),r.jsxs("div",{className:"flex gap-2 mt-3",children:[r.jsxs("button",{onClick:i,className:"btn btn-primary text-[11px]",style:{padding:"5px 12px"},children:[r.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Apply"]}),r.jsx("button",{onClick:c,className:"btn btn-secondary text-[11px]",style:{padding:"5px 12px"},children:"Discard"}),r.jsx("button",{onClick:q,className:"btn btn-ghost text-[11px]",style:{padding:"5px 12px"},children:"Try Again"})]})]})]})]})}function nE(t,a){const[s,i]=m.useState([]),[c,u]=m.useState("SKILL.md"),[d,f]=m.useState(null),[x,h]=m.useState(!1),[v,y]=m.useState(null),[b,S]=m.useState(null),w=m.useCallback(async()=>{try{const N=await ke.getSkillFiles(t,a);i(N.files),S(null)}catch(N){i([]),S(N.message??"Unable to load skill files")}},[t,a]);m.useEffect(()=>{u("SKILL.md"),f(null),y(null),S(null),w()},[t,a,w]);const E=m.useCallback(async N=>{if(u(N),N==="SKILL.md"){f(null),y(null);return}h(!0),y(null);try{const T=await ke.getSkillFile(t,a,N);f(T)}catch(T){y(`Unable to open file: ${T.message}`),f(null)}finally{h(!1)}},[t,a]),k=m.useCallback(()=>{w()},[w]);return{files:s,activeFile:c,secondaryContent:d,loading:x,error:v,loadError:b,selectFile:E,refresh:k,isSkillMd:c==="SKILL.md"}}function rE(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function aE(t){const a=[],s=new Map;for(const i of t){const c=i.path.split("/"),d={name:c[c.length-1],path:i.path,type:i.type,size:i.size,children:[]};s.set(i.path,d)}for(const i of t){const c=i.path.split("/");if(c.length===1){const u=s.get(i.path);u&&a.push(u)}else{const u=c.slice(0,-1).join("/"),d=s.get(u),f=s.get(i.path);d&&f&&d.children.push(f)}}return a}function Vy({expanded:t}){return r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:t?"rotate(90deg)":"rotate(0deg)",transition:"transform 0.15s"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})}function Fy(){return r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:r.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 lE(){return r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),r.jsx("polyline",{points:"14 2 14 8 20 8"})]})}function sE(){return r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"23 4 23 10 17 10"}),r.jsx("polyline",{points:"1 20 1 14 7 14"}),r.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 Gy({node:t,depth:a,activeFile:s,onSelect:i}){const[c,u]=m.useState(!0),d=t.path===s;return t.type==="dir"?r.jsxs("div",{children:[r.jsxs("button",{onClick:()=>u(!c),style:{display:"flex",alignItems:"center",gap:4,width:"100%",paddingLeft:`${4+a*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:[r.jsx(Vy,{expanded:c}),r.jsx(Fy,{}),r.jsxs("span",{children:[t.name,"/"]})]}),c&&t.children.map(f=>r.jsx(Gy,{node:f,depth:a+1,activeFile:s,onSelect:i},f.path))]}):r.jsxs("button",{onClick:()=>i(t.path),style:{display:"flex",alignItems:"center",gap:4,width:"100%",paddingLeft:`${4+a*14}px`,paddingTop:2,paddingBottom:2,background:d?"var(--accent-muted)":"none",border:"none",cursor:"pointer",color:d?"var(--accent)":"var(--text-tertiary)",fontSize:11,fontFamily:"var(--font-mono, monospace)",textAlign:"left",borderRadius:3},children:[r.jsx("span",{style:{width:10}}),r.jsx(lE,{}),r.jsx("span",{style:{flex:1},children:t.name}),r.jsx("span",{style:{fontSize:9,color:"var(--text-tertiary)",marginRight:4,whiteSpace:"nowrap"},children:rE(t.size)})]})}function iE({files:t,activeFile:a,onSelect:s,onRefresh:i,loadError:c}){const[u,d]=m.useState(!1),f=m.useMemo(()=>aE(t),[t]);return r.jsxs("div",{style:{borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-0)"},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 8px",cursor:"pointer",userSelect:"none"},onClick:()=>d(!u),children:[r.jsx(Vy,{expanded:u}),r.jsx(Fy,{}),r.jsx("span",{style:{fontSize:11,fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a}),r.jsx("button",{onClick:x=>{x.stopPropagation(),i()},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:r.jsx(sE,{})})]}),u&&r.jsx("div",{style:{maxHeight:240,overflowY:"auto",padding:"2px 4px 4px"},children:c?r.jsx("div",{style:{fontSize:11,color:"var(--text-warning, var(--text-tertiary))",padding:"4px 8px"},title:c,children:"Skill files not accessible from this workspace"}):f.length===0?r.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",padding:"4px 8px"},children:"No files found"}):f.map(x=>r.jsx(Gy,{node:x,depth:0,activeFile:a,onSelect:s},x.path))})]})}function Ro(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function oE(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function cE(t){const a=t.toLowerCase();return a.endsWith(".json")?"json":a.endsWith(".md")?"md":"other"}function Xg({content:t}){return r.jsx("textarea",{readOnly:!0,value:t,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 Qg({content:t,fileType:a}){if(a==="json"){const s=oE(t);return r.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:s})}return a==="md"?r.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:cc(t)}}):r.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:t})}function Zg(t){try{return JSON.stringify(JSON.parse(t),null,2).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"([^"\\]|\\.)*"\s*:/g,s=>`<span style="color:#6383ff">${s}</span>`).replace(/:\s*"([^"\\]|\\.)*"/g,s=>`<span style="color:#22c55e">${s.slice(0,2)}<span style="color:#22c55e">${s.slice(2)}</span></span>`).replace(/:\s*(-?\d+\.?\d*)/g,(s,i)=>`: <span style="color:#fb923c">${i}</span>`).replace(/:\s*(true|false|null)/g,(s,i)=>`: <span style="color:#a855f7">${i}</span>`)}catch{return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}}function uE({file:t,loading:a,error:s,viewMode:i,plugin:c,skill:u,onSaved:d,onDirtyChange:f}){const[x,h]=m.useState(i),[v,y]=m.useState(!1),[b,S]=m.useState(""),[w,E]=m.useState(!1),[k,N]=m.useState(null),T=i!==x?i:x;m.useEffect(()=>{f==null||f(v)},[v,f]);const A=m.useCallback(()=>{(t==null?void 0:t.content)!=null&&(S(t.content),y(!0))},[t]),B=m.useCallback(()=>{y(!1)},[]),z=m.useCallback(async()=>{if(!(!c||!u||!t)){E(!0);try{await ke.saveSkillFile(c,u,t.path,b),N("Saved"),y(!1),d==null||d(),setTimeout(()=>N(null),2e3)}catch(O){N(`Save failed: ${O.message}`),setTimeout(()=>N(null),3e3)}finally{E(!1)}}},[c,u,t,b,d]);if(m.useEffect(()=>{if(!v)return;const O=L=>{(L.ctrlKey||L.metaKey)&&L.key==="s"&&(L.preventDefault(),z())};return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[v,z]),a)return r.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-tertiary)",fontSize:13},children:"Loading…"});if(s)return r.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:24},children:r.jsxs("div",{style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)",borderRadius:8,padding:"16px 20px",maxWidth:400,textAlign:"center"},children:[r.jsx("div",{style:{fontSize:13,color:"var(--text-primary)",fontWeight:600,marginBottom:6},children:"Unable to open file"}),r.jsx("div",{style:{fontSize:12,color:"var(--text-tertiary)"},children:s})]})});if(!t)return null;if(t.binary)return r.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-tertiary)",fontSize:13},children:["Binary file (",Ro(t.size),") — cannot be displayed"]});const P=t.content??"",C=cE(t.path);return r.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",minHeight:0},children:[t.truncated&&r.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 ",Ro(512*1024)," — ",Ro(t.size)," total"]}),r.jsxs("div",{style:{display:"flex",gap:4,padding:"4px 8px",borderBottom:"1px solid var(--border-subtle)",background:"var(--surface-0)"},children:[(C==="md"||C==="json")&&["raw","split","preview"].map(O=>r.jsx("button",{onClick:()=>h(O),style:{padding:"2px 8px",fontSize:11,background:T===O?"var(--accent-muted)":"none",color:T===O?"var(--accent)":"var(--text-tertiary)",border:"none",borderRadius:3,cursor:"pointer",textTransform:"capitalize"},children:O},O)),r.jsxs("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-tertiary)",display:"flex",alignItems:"center",gap:6},children:[Ro(t.size),c&&u&&!t.binary&&!v&&r.jsx("button",{onClick:A,style:{padding:"1px 6px",fontSize:10,background:"var(--accent-muted)",color:"var(--accent)",border:"none",borderRadius:3,cursor:"pointer"},children:"Edit"}),v&&r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:z,disabled:w,style:{padding:"1px 6px",fontSize:10,background:"var(--accent)",color:"#fff",border:"none",borderRadius:3,cursor:"pointer",opacity:w?.6:1},children:w?"Saving...":"Save"}),r.jsx("button",{onClick:B,style:{padding:"1px 6px",fontSize:10,background:"var(--surface-3)",color:"var(--text-tertiary)",border:"none",borderRadius:3,cursor:"pointer"},children:"Cancel"})]})]})]}),k&&r.jsx("div",{style:{padding:"4px 12px",background:k.startsWith("Save failed")?"var(--red-muted)":"var(--green-muted)",borderBottom:"1px solid var(--border-subtle)",fontSize:11,color:k.startsWith("Save failed")?"var(--red)":"var(--green)"},children:k}),r.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",minHeight:0},children:v?r.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"auto"},children:[r.jsx("textarea",{value:b,onChange:O=>S(O.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}}),r.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:[r.jsx("span",{style:{flex:1,fontSize:11,color:"var(--text-tertiary)"},children:"Unsaved changes"}),r.jsx("button",{onClick:z,disabled:w,style:{padding:"3px 12px",fontSize:11,background:"var(--accent)",color:"#fff",border:"none",borderRadius:4,cursor:"pointer",opacity:w?.6:1},children:w?"Saving...":"Save"}),r.jsx("button",{onClick:B,style:{padding:"3px 12px",fontSize:11,background:"var(--surface-3)",color:"var(--text-tertiary)",border:"none",borderRadius:4,cursor:"pointer"},children:"Cancel"})]})]}):T==="split"&&C!=="other"?r.jsxs(r.Fragment,{children:[r.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",borderRight:"1px solid var(--border-subtle)"},children:r.jsx(Xg,{content:P})}),r.jsx("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"auto"},children:C==="json"?r.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:Zg(P)}}):r.jsx(Qg,{content:P,fileType:C})})]}):T==="preview"&&C!=="other"?C==="json"?r.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:Zg(P)}}):r.jsx(Qg,{content:P,fileType:C}):r.jsx(Xg,{content:P})})]})}const dE=/^git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/,fE=/^https:\/\/github\.com\/([^/]+)\/(.+?)(?:\.git)?$/;function pE(t){const a=t.trim();if(!a)throw new Error("normalizeRemoteUrl: empty input");let s=a.match(dE);if(s)return`https://github.com/${s[1]}/${s[2]}`;if(s=a.match(fE),s)return`https://github.com/${s[1]}/${s[2]}`;throw new Error(`normalizeRemoteUrl: unrecognized remote URL: ${t}`)}function Wy(t){const a=pE(t);return`https://verified-skill.com/submit?repo=${encodeURIComponent(a)}`}function Jg(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function mE({remoteUrl:t,fileCount:a,provider:s,model:i,onClose:c,defaultMode:u="manual"}){const[d,f]=m.useState(u),[x,h]=m.useState(""),[v,y]=m.useState(!1),[b,S]=m.useState(!1),[w,E]=m.useState(null),[k,N]=m.useState(null),T=m.useCallback(async()=>{y(!0),E(null);try{const ee=await ke.gitCommitMessage({provider:s,model:i});h(ee.message)}catch(ee){const $=ee instanceof Error?ee.message:String(ee);E($)}finally{y(!1)}},[s,i]);m.useEffect(()=>{u==="ai"&&!x&&T()},[]);const A=m.useCallback(()=>{f("ai"),N(null),x.trim()||T()},[x,T]),B=m.useCallback(()=>{f("manual"),E(null)},[]),z=m.useCallback(async()=>{const ee=x.trim();if(!(!ee||b)){S(!0),N(null);try{const $=await ke.gitPublish({commitMessage:ee}),D=$.remoteUrl??t,I=Wy(D);window.open(I,"_blank","noopener,noreferrer");const F=($.commitSha??"").slice(0,7),J=$.branch??"";Jg(`Opening verified-skill.com — ${F} on ${J}`,"info"),c()}catch($){const D=$ instanceof Error?$.message:String($),I=D.length>200?D.slice(0,200)+"…":D;N(I),Jg(`Publish failed: ${I}`,"error")}finally{S(!1)}}},[x,b,t,c]),P=x.trim().length>0&&!b&&!v,C="#E6EDF3",O="#9CA3AF",L="rgba(255,255,255,0.12)",_="#0F1115",H={fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:O,fontFamily:"var(--font-mono, monospace)",marginBottom:6,display:"block"},W={flex:1,height:32,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,fontSize:12,fontFamily:"var(--font-mono, monospace)",background:"transparent",color:O,border:"none",cursor:"pointer",transition:"background 120ms ease, color 120ms ease"},q={...W,background:"rgba(255,255,255,0.08)",color:C,fontWeight:600};return r.jsxs(r.Fragment,{children:[r.jsx("div",{"aria-hidden":"true",onClick:b?void 0:c,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"}}),r.jsx("div",{role:"presentation",style:{position:"fixed",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,padding:24,pointerEvents:"none"},children:r.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 ${L}`,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:C,fontFamily:"var(--font-mono, monospace)",animation:"publishDrawerIn 180ms cubic-bezier(0.2, 0.8, 0.2, 1)"},children:[r.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:4},children:[r.jsx("strong",{style:{fontSize:16,fontWeight:700,letterSpacing:"-0.01em",color:C,fontFamily:"var(--font-sans, var(--font-mono, sans-serif))"},children:"Publish skill"}),r.jsx("button",{type:"button","aria-label":"Dismiss",onClick:b?void 0:c,disabled:b,style:{background:"none",border:"none",color:O,fontSize:22,lineHeight:1,cursor:b?"not-allowed":"pointer",padding:0,opacity:b?.4:1},children:"×"})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:12,color:O,fontVariantNumeric:"tabular-nums",marginBottom:18},children:[r.jsx("span",{"aria-hidden":"true",style:{color:"#F59E0B",fontFamily:"monospace"},children:"▮"}),r.jsxs("span",{children:[a," file",a===1?"":"s"," changed"]})]}),r.jsx("div",{style:{height:1,background:L,margin:"0 -24px 18px"}}),r.jsx("span",{style:H,children:"Mode"}),r.jsxs("div",{role:"tablist","aria-label":"Commit message mode","data-testid":"publish-mode-toggle",style:{display:"flex",border:`1px solid ${L}`,borderRadius:6,overflow:"hidden",marginBottom:16,background:_},children:[r.jsx("button",{type:"button",role:"tab","aria-selected":d==="manual","data-testid":"publish-mode-manual",onClick:B,disabled:b,style:d==="manual"?q:W,children:"Write yourself"}),r.jsx("div",{style:{width:1,background:L}}),r.jsx("button",{type:"button",role:"tab","aria-selected":d==="ai","data-testid":"publish-mode-ai",onClick:A,disabled:b,style:d==="ai"?q:W,children:v&&d==="ai"?"Generating…":"Generate with AI"})]}),r.jsx("label",{htmlFor:"commit-message",style:H,children:"Commit message"}),r.jsx("textarea",{id:"commit-message",value:x,onChange:ee=>h(ee.target.value),rows:5,disabled:v||b,placeholder:v?"Generating with AI…":d==="ai"?"Click Generate to draft a message":"Type your commit message…",style:{width:"100%",background:_,border:`1px solid ${L}`,borderRadius:6,padding:"10px 12px",fontFamily:"var(--font-mono, monospace)",fontSize:13,lineHeight:1.6,color:C,resize:"vertical",outline:"none"}}),d==="ai"&&r.jsx("button",{type:"button",onClick:T,disabled:v||b,"data-testid":"publish-generate-button",style:{marginTop:10,padding:"8px 14px",background:v?"rgba(255,255,255,0.06)":"#2563EB",color:v?O:"#FFFFFF",border:"1px solid "+(v?L:"#2563EB"),borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:600,cursor:v||b?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6},children:v?"Generating…":"Generate with AI"}),w&&d==="ai"&&r.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:[r.jsx("strong",{style:{fontWeight:600},children:"AI generation failed."})," ",w," ",r.jsx("button",{type:"button",onClick:T,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"})]}),k&&r.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:[r.jsx("strong",{style:{fontWeight:600},children:"Publish failed."})," ",k]}),r.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:18,gap:6},children:[r.jsx("div",{style:{minHeight:28},children:d==="ai"&&r.jsx("button",{type:"button","aria-label":"Regenerate",onClick:T,disabled:v||b,className:"btn btn-ghost text-[11px]",style:{padding:"4px 10px"},children:v?"Generating…":"Regenerate"})}),r.jsxs("div",{style:{display:"flex",gap:8},children:[r.jsx("button",{type:"button","aria-label":"Cancel",onClick:c,disabled:b,style:{padding:"8px 14px",background:"transparent",color:C,border:`1px solid ${L}`,borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:500,cursor:b?"not-allowed":"pointer",opacity:b?.5:1},children:"Cancel"}),r.jsx("button",{type:"button","aria-label":"Commit & Push",onClick:z,disabled:!P,"data-testid":"publish-commit-push",style:{padding:"8px 16px",background:P?"#22C55E":"rgba(255,255,255,0.06)",color:P?"#0B0F12":O,border:"1px solid "+(P?"#22C55E":L),borderRadius:6,fontFamily:"var(--font-mono, monospace)",fontSize:12,fontWeight:700,cursor:P?"pointer":"not-allowed"},children:b?"Publishing…":"Commit & Push"})]})]})]})}),r.jsx("style",{children:`
|
|
80
80
|
@keyframes publishDrawerBackdropIn { from { opacity: 0 } to { opacity: 1 } }
|
|
81
81
|
@keyframes publishDrawerIn {
|
|
82
82
|
from { opacity: 0; transform: translateY(4px) }
|
|
@@ -86,7 +86,7 @@ Please change the parent <Route path="${k}"> to <Route path="${k==="/"?"*":`${k}
|
|
|
86
86
|
[role="dialog"][aria-label="Publish"],
|
|
87
87
|
[role="dialog"][aria-label="Publish"] + * { animation: none !important }
|
|
88
88
|
}
|
|
89
|
-
`})]})}function ev(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function qy({remoteUrl:t,provider:a,model:s}){const[i,c]=m.useState(!1),[u,d]=m.useState(!1),[f,x]=m.useState(0),h=m.useCallback(async()=>{if(!(i||u)){c(!0);try{let y=!1,b=0;try{const T=await ke.gitDiff();y=!!T.hasChanges,b=T.fileCount??0}catch{}if(y){x(b),d(!0);return}const S=await ke.gitPublish(),w=S.remoteUrl??t,E=Wy(w);window.open(E,"_blank","noopener,noreferrer");const k=(S.commitSha??"").slice(0,7),N=S.branch??"";ev(`Opening verified-skill.com — ${k} on ${N}`,"info")}catch(y){const b=y instanceof Error?y.message:String(y),S=b.length>200?b.slice(0,200)+"…":b;ev(`Publish failed: ${S}`,"error")}finally{c(!1)}}},[i,u,t]),v=m.useCallback(()=>d(!1),[]);return r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button","aria-label":"Publish",onClick:h,disabled:i,className:"btn btn-primary text-[11px]",style:{padding:"5px 14px"},title:"Push committed changes and open verified-skill.com to submit",children:i?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"spinner",style:{width:11,height:11,borderWidth:1.5}})," Publishing…"]}):"Publish"}),u&&r.jsx(
|
|
89
|
+
`})]})}function ev(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function qy({remoteUrl:t,provider:a,model:s}){const[i,c]=m.useState(!1),[u,d]=m.useState(!1),[f,x]=m.useState(0),h=m.useCallback(async()=>{if(!(i||u)){c(!0);try{let y=!1,b=0;try{const T=await ke.gitDiff();y=!!T.hasChanges,b=T.fileCount??0}catch{}if(y){x(b),d(!0);return}const S=await ke.gitPublish(),w=S.remoteUrl??t,E=Wy(w);window.open(E,"_blank","noopener,noreferrer");const k=(S.commitSha??"").slice(0,7),N=S.branch??"";ev(`Opening verified-skill.com — ${k} on ${N}`,"info")}catch(y){const b=y instanceof Error?y.message:String(y),S=b.length>200?b.slice(0,200)+"…":b;ev(`Publish failed: ${S}`,"error")}finally{c(!1)}}},[i,u,t]),v=m.useCallback(()=>d(!1),[]);return r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button","aria-label":"Publish",onClick:h,disabled:i,className:"btn btn-primary text-[11px]",style:{padding:"5px 14px"},title:"Push committed changes and open verified-skill.com to submit",children:i?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"spinner",style:{width:11,height:11,borderWidth:1.5}})," Publishing…"]}):"Publish"}),u&&r.jsx(mE,{remoteUrl:t,fileCount:f,provider:a,model:s,onClose:v})]})}const hE={hasRemote:!1,remoteUrl:null,branch:null,loading:!0,error:null};function xE(){const[t,a]=m.useState(hE);return m.useEffect(()=>{let s=!1;return ke.gitRemote().then(i=>{s||a({hasRemote:!!i.hasRemote,remoteUrl:i.remoteUrl??null,branch:i.branch??null,loading:!1,error:null})}).catch(i=>{s||a({hasRemote:!1,remoteUrl:null,branch:null,loading:!1,error:i instanceof Error?i:new Error(String(i))})}),()=>{s=!0}},[]),t}const gE=/^v?(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function Sf(t){if(typeof t!="string")return null;const a=t.trim().match(gE);return a?{major:Number(a[1]),minor:Number(a[2]),patch:Number(a[3])}:null}function Ps(t,a){const s=Sf(t);if(!s)throw new Error(`bumpVersion: not a valid semver: ${JSON.stringify(t)}`);switch(a){case"patch":return`${s.major}.${s.minor}.${s.patch+1}`;case"minor":return`${s.major}.${s.minor+1}.0`;case"major":return`${s.major+1}.0.0`}}function vE(t,a){const s=Sf(a);if(!s)return{valid:!1,reason:`Invalid semver: ${JSON.stringify(a)}`};if(t==null)return{valid:!0};const i=Sf(t);return i?i.major===s.major&&i.minor===s.minor&&i.patch===s.patch?{valid:!0}:s.major<i.major||s.major===i.major&&s.minor<i.minor||s.major===i.major&&s.minor===i.minor&&s.patch<i.patch?{valid:!1,reason:`Version cannot decrease (from ${t} → ${a}). Use the same or higher version.`}:s.major!==i.major?s.major!==i.major+1?{valid:!1,reason:`Major version can only increase by 1 at a time (got ${i.major} → ${s.major}).`}:s.minor!==0||s.patch!==0?{valid:!1,reason:`When bumping major, minor and patch must be reset to 0 (got ${a}; expected ${s.major}.0.0).`}:{valid:!0}:s.minor!==i.minor?s.minor!==i.minor+1?{valid:!1,reason:`Minor version can only increase by 1 at a time (got ${i.minor} → ${s.minor}).`}:s.patch!==0?{valid:!1,reason:`When bumping minor, patch must be reset to 0 (got ${a}; expected ${s.major}.${s.minor}.0).`}:{valid:!0}:s.patch!==i.patch+1?{valid:!1,reason:`Patch version can only increase by 1 at a time (got ${i.patch} → ${s.patch}).`}:{valid:!0}:{valid:!0}}const Yy=/^---\n([\s\S]*?)\n---(?:\n|$)/,kf=/^version:\s*["']?([^"'\n]+?)["']?\s*$/m;function Yo(t){const a=t.match(Yy);if(!a)return null;const s=a[1].match(kf);return s&&s[1].trim()||null}function Ky(t,a){const s=`version: "${a}"`,i=t.match(Yy);if(!i)return`---
|
|
90
90
|
${s}
|
|
91
91
|
---
|
|
92
92
|
${t}`;const c=i[1],u=(i.index??0)+i[0].length,d=t.slice(u),f=t.slice(0,i.index??0);let x;kf.test(c)?x=c.replace(kf,s):x=`${s}
|
|
@@ -94,29 +94,29 @@ ${c}`;const h=i[0].endsWith(`---
|
|
|
94
94
|
`)?`---
|
|
95
95
|
`:"---";return`${f}---
|
|
96
96
|
${x}
|
|
97
|
-
${h}${d}`}function vE(t,a){const s=Yo(a),i=Yo(t);if(s!==null&&i!==null&&s===i)try{const c=Ps(s,"patch");return{contentToSave:Ky(t,c),version:c,fromVersion:s}}catch{return{contentToSave:t,version:i,fromVersion:s}}return{contentToSave:t,version:i,fromVersion:s}}function Dl(t){return t.testType==="integration"?"integration":"unit"}function Ul(t){return t>=.8?"var(--green)":t>=.5?"var(--yellow)":"var(--red)"}function Xy(t){const a=new Date(t);return a.toLocaleDateString(void 0,{month:"short",day:"numeric"})+", "+a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1})}function Qy(t){return t==null?"--":t>=1e3?`${(t/1e3).toFixed(1)}s`:`${t}ms`}const yE=new Set(["benchmark","comparison","baseline"]);function tv(t,a,s,i){return t.map(({rate:c,idx:u,total:d})=>{const f=i+u/(d-1)*(a-i*2),x=i+(s-i*2)-c*(s-i*2);return`${f},${x}`})}function Zy({entries:t}){const a=t.filter(y=>yE.has(y.type)).slice().reverse(),s=a.map((y,b,S)=>({rate:y.pass_rate,idx:b,total:S.length})).filter((y,b)=>{const S=a[b].type;return S==="benchmark"||S==="comparison"}),i=a.flatMap((y,b)=>y.type==="baseline"?[{rate:y.pass_rate,idx:b,total:a.length}]:y.type==="comparison"&&y.baselinePassRate!=null?[{rate:y.baselinePassRate,idx:b,total:a.length}]:[]);if(s.length<2&&i.length<2)return null;const c=80,u=24,d=2,f=s.length>=2?tv(s,c,u,d):[],x=i.length>=2?tv(i,c,u,d):[],h=f[f.length-1],v=x[x.length-1];return r.jsxs("svg",{width:c,height:u,style:{display:"block",flexShrink:0},children:[x.length>0&&r.jsx("polyline",{points:x.join(" "),fill:"none",stroke:"var(--text-tertiary)",strokeWidth:1.5,strokeLinejoin:"round",strokeDasharray:"3 2"}),f.length>0&&r.jsx("polyline",{points:f.join(" "),fill:"none",stroke:"var(--accent)",strokeWidth:1.5,strokeLinejoin:"round"}),v&&r.jsx("circle",{cx:parseFloat(v.split(",")[0]),cy:parseFloat(v.split(",")[1]),r:2.5,fill:"var(--text-tertiary)"}),h&&r.jsx("circle",{cx:parseFloat(h.split(",")[0]),cy:parseFloat(h.split(",")[1]),r:2.5,fill:"var(--accent)"})]})}function Jy(t,a,s){const i=isNaN(a)?0:a,c=[],u=[],d=[];if((t==="PASS"||t==="EFFECTIVE")&&i>=.7){const h=c.length>0?` Met criteria: ${c.map(v=>v.criterion).join(", ")}.`:"";return{explanation:`${t} (score ${i.toFixed(2)}): evaluation met expectations.${h}`}}if(t==="FAIL"||t==="DEGRADING"){const h=u.length>0?` Failed criteria: ${u.map(y=>y.criterion).join(", ")}.`:"",v=[...u.map(y=>`Improve "${y.criterion}" (score: ${y.score.toFixed(2)})`),...d.map(y=>`Strengthen "${y.criterion}" (score: ${y.score.toFixed(2)})`)];return v.length===0&&v.push("Review prompt instructions and add more specific guidance"),{explanation:`${t} (score ${i.toFixed(2)}): evaluation did not meet expectations.${h}`,recommendations:v}}if(t==="INEFFECTIVE"){if(i<.2){const v=[...u.map(y=>`Rework "${y.criterion}" — currently at ${y.score.toFixed(2)}`),"Consider adding examples to your system prompt","Review the rubric criteria for achievability"];return{explanation:`${t} (score ${i.toFixed(2)}): evaluation is significantly below expectations.`,recommendations:v}}const h=[...u.map(v=>`Rework "${v.criterion}" — currently at ${v.score.toFixed(2)}`),...d.map(v=>`Strengthen "${v.criterion}" (score: ${v.score.toFixed(2)})`)];return h.length===0&&h.push("Consider restructuring your prompt approach"),{explanation:`${t} (score ${i.toFixed(2)}): below expectations but showing some capability.`,recommendations:h}}if(t==="MARGINAL"){const h=[...d.map(v=>`Strengthen "${v.criterion}" (score: ${v.score.toFixed(2)})`),...u.map(v=>`Improve "${v.criterion}" (score: ${v.score.toFixed(2)})`)];return h.length===0&&h.push(c.length>0?"Assertion pass rate is below target despite strong rubric scores — review test case alignment":"Review prompt instructions for areas of improvement"),{explanation:`${t} (score ${i.toFixed(2)}): moderate improvement detected.`,recommendations:h}}if(t==="EMERGING"){const h=[...u.map(v=>`Improve "${v.criterion}" (score: ${v.score.toFixed(2)})`),...d.map(v=>`Strengthen "${v.criterion}" (score: ${v.score.toFixed(2)})`)];return h.length===0&&h.push(c.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:`${t} (score ${i.toFixed(2)}): early promise — focus on weak areas to improve.`,recommendations:h}}const f=c.length>0?` Passing: ${c.map(h=>h.criterion).join(", ")}.`:"",x=d.length>0?` Needs improvement: ${d.map(h=>h.criterion).join(", ")}.`:"";return{explanation:`${t} (score ${i.toFixed(2)}): mixed results.${f}${x}`}}const eb={EFFECTIVE:"Strong Improvement",MARGINAL:"Moderate Improvement",EMERGING:"Early Promise",INEFFECTIVE:"Needs Work",DEGRADING:"Regression"};function bE(t){return Object.hasOwn(eb,t)}function jE(t){return bE(t)?eb[t]:t}function SE(){const{state:t}=bn(),{plugin:a,skill:s}=t,[i,c]=m.useState([]),[u,d]=m.useState([]),[f,x]=m.useState(!0),[h,v]=m.useState(null),[y,b]=m.useState(new Set),[S,w]=m.useState({}),[E,k]=m.useState(null),[N,T]=m.useState(""),[A,B]=m.useState(!1),[z,P]=m.useState(""),[C,O]=m.useState(""),L=m.useCallback(async()=>{x(!0),v(null);try{const[$,D]=await Promise.all([ke.getCredentials(a,s),ke.getParams(a,s)]);c($.credentials),d(D.params)}catch($){v($ instanceof Error?$.message:"Failed to load parameters"),c([]),d([])}finally{x(!1)}},[a,s]);m.useEffect(()=>{L()},[L]);const _=m.useCallback(async($,D)=>{B(!0),v(null);try{await ke.setCredential(a,s,$,D),k(null),T(""),await L()}catch(I){v(I instanceof Error?I.message:`Failed to save ${$}`)}finally{B(!1)}},[a,s,L]),H=m.useCallback(async()=>{const $=z.trim().toUpperCase(),D=C.trim();if(!(!$||!D)){B(!0),v(null);try{await ke.setCredential(a,s,$,D),P(""),O(""),await L()}catch(I){v(I instanceof Error?I.message:`Failed to add ${$}`)}finally{B(!1)}}},[a,s,z,C,L]),W=m.useCallback(async $=>{if(y.has($)){b(D=>{const I=new Set(D);return I.delete($),I}),w(D=>{const I={...D};return delete I[$],I});return}try{const I=(await ke.getParamsRevealed(a,s,$)).params.find(F=>F.name===$);I!=null&&I.value&&(w(F=>({...F,[$]:I.value})),b(F=>new Set(F).add($)))}catch{}},[a,s,y]),q=new Set(i.map($=>$.name)),ee=[...i.map($=>{const D=u.find(I=>I.name===$.name);return{name:$.name,status:$.status,maskedValue:(D==null?void 0:D.maskedValue)??""}}),...u.filter($=>!q.has($.name)).map($=>({name:$.name,status:$.status,maskedValue:$.maskedValue}))];return r.jsxs("div",{className:"py-2 px-3",children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Parameters"}),h&&r.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:h}),f&&ee.length===0&&r.jsx("div",{className:"text-[11px] py-2",style:{color:"var(--text-tertiary)"},children:"Loading..."}),!f&&ee.length===0&&!h&&r.jsx("div",{className:"text-[11px] py-2",style:{color:"var(--text-tertiary)"},children:"No parameters configured"}),ee.map($=>r.jsxs("div",{className:"flex items-center gap-2 py-1.5",style:{borderBottom:"1px solid var(--border-subtle)"},children:[r.jsx("span",{className:"text-[10px] font-mono flex-1 truncate",style:{color:"var(--text-primary)"},children:$.name}),r.jsx("span",{className:"text-[9px] font-semibold px-1.5 py-0.5 rounded-full",style:{background:$.status==="ready"?"var(--green-muted)":"var(--red-muted)",color:$.status==="ready"?"var(--green)":"var(--red)"},children:$.status}),($.maskedValue||$.status==="ready")&&r.jsxs("span",{className:"text-[10px] font-mono",style:{color:"var(--text-secondary)"},children:[y.has($.name)?S[$.name]??$.maskedValue:$.maskedValue||"***",r.jsx("button",{onClick:()=>W($.name),className:"text-[9px] ml-1",style:{color:"var(--accent)",cursor:"pointer",background:"none",border:"none"},"aria-label":`${y.has($.name)?"Hide":"Reveal"} value for ${$.name}`,children:y.has($.name)?"hide":"show"})]}),E===$.name?r.jsxs("div",{className:"flex gap-1",children:[r.jsx("input",{value:N,onChange:D=>T(D.target.value),onKeyDown:D=>{D.key==="Enter"&&N.trim()&&_($.name,N)},className:"input-field text-[10px] font-mono",style:{width:120},placeholder:"New value...","aria-label":`New value for ${$.name}`,autoFocus:!0}),r.jsx("button",{onClick:()=>_($.name,N),disabled:A||!N.trim(),className:"text-[10px] font-medium",style:{color:"var(--green)",background:"none",border:"none",cursor:"pointer"},children:"Save"}),r.jsx("button",{onClick:()=>{k(null),T("")},className:"text-[10px]",style:{color:"var(--text-tertiary)",background:"none",border:"none",cursor:"pointer"},children:"Cancel"})]}):r.jsx("button",{onClick:()=>{k($.name),T("")},className:"text-[10px]",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"Edit"})]},$.name)),r.jsxs("div",{className:"mt-3 pt-2",style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[10px] font-medium mb-1.5",style:{color:"var(--text-secondary)"},children:"Add New Parameter"}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("input",{value:z,onChange:$=>P($.target.value),className:"input-field text-[10px] font-mono flex-1",placeholder:"KEY_NAME","aria-label":"Parameter key name"}),r.jsx("input",{value:C,onChange:$=>O($.target.value),onKeyDown:$=>{$.key==="Enter"&&z.trim()&&C.trim()&&H()},className:"input-field text-[10px] font-mono flex-1",placeholder:"value",type:"password","aria-label":"Parameter value"}),r.jsx("button",{onClick:H,disabled:A||!z.trim()||!C.trim(),className:"text-[10px] font-medium px-2 py-1 rounded",style:{background:"var(--accent-muted)",color:"var(--accent)",border:"none",cursor:A?"not-allowed":"pointer"},children:"Add"})]})]})]})}function tb(t,a,s){const[i,c]=m.useState(null),[u,d]=m.useState(!1),f=m.useRef("");m.useEffect(()=>{const h=`${t}/${a}/${s}`;f.current!==h&&(f.current=h,d(!0),ke.getCaseHistory(t,a,s).then(v=>c(v)).catch(()=>c([])).finally(()=>d(!1)))},[t,a,s]);const x=m.useCallback(()=>{d(!0),f.current="",ke.getCaseHistory(t,a,s).then(h=>c(h)).catch(()=>c([])).finally(()=>d(!1))},[t,a,s]);return{entries:i,loading:u,refetch:x}}function kE(t,a,s){const i={flaky:!1,nonDiscriminating:!1,regression:!1};if(!s||s.length===0)return i;const u=s.slice(0,10).map(x=>x.assertions.find(h=>h.id===t)).filter(Boolean);if(u.length>=2){const h=u.filter(v=>v.pass).length/u.length;h>=.3&&h<=.7&&(i.flaky=!0)}const d=s.find(x=>x.type==="benchmark"),f=s.find(x=>x.type==="baseline");if(d&&f){const x=d.assertions.find(v=>v.id===t),h=f.assertions.find(v=>v.id===t);x!=null&&x.pass&&(h!=null&&h.pass)&&(i.nonDiscriminating=!0)}if(a&&!a.pass&&s.length>=1){const h=s[0].assertions.find(v=>v.id===t);h!=null&&h.pass&&(i.regression=!0)}return i}function wE({embedded:t=!1}={}){var M;const{state:a,dispatch:s,saveEvals:i,runCase:c,runAll:u,cancelCase:d,cancelAll:f,generateEvals:x,canEdit:h,canRun:v}=bn(),{evals:y,evalsError:b,selectedCaseId:S,inlineResults:w,caseRunStates:E,generateEvalsLoading:k,generateEvalsProgress:N,generateEvalsError:T}=a,A=m.useMemo(()=>{for(const U of E.values())if(U.status==="running"||U.status==="queued")return!0;return!1},[E]),[B,z]=m.useState(!1),[P,C]=m.useState("all"),O={skill_name:a.skill,evals:[]},L=y??O,_=L.evals,H=m.useMemo(()=>P==="all"?_:_.filter(U=>Dl(U)===P),[P,_]),W=H.find(U=>U.id===S)??null;m.useEffect(()=>{S!==null&&!H.find(U=>U.id===S)&&s({type:"SELECT_CASE",caseId:H.length>0?H[0].id:null})},[H,S,s]);const[q,ee]=m.useState([]),$=m.useMemo(()=>_.some(U=>Dl(U)==="integration"),[_]);m.useEffect(()=>{$&&ke.getCredentials(a.plugin,a.skill).then(U=>ee(U.credentials)).catch(()=>ee([]))},[a.plugin,a.skill,$]);const D=m.useMemo(()=>new Set(q.filter(U=>U.status==="missing").map(U=>U.name)),[q]),[I,F]=m.useState(!1),J=m.useCallback(U=>{F(!1),x(U?{testType:U}:void 0)},[x]);if(!y||_.length===0)return r.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-4 px-8",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center",style:{background:b?"var(--red-muted)":"var(--accent-muted)"},children:b?r.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),r.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}):r.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M9 11l3 3L22 4"}),r.jsx("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})]})}),r.jsx("div",{className:"text-center",children:b?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--red)"},children:"Invalid evals.json"}),r.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:b}),r.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"})]}):r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No test cases yet"}),r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Create test cases to start evaluating your skill"})]})}),h&&r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{onClick:()=>z(!0),className:"btn btn-primary text-[12px]",children:"Create Test Case"}),r.jsxs("div",{style:{position:"relative"},children:[r.jsxs("div",{className:"flex",children:[r.jsx("button",{onClick:()=>J("unit"),disabled:k,className:"btn btn-secondary text-[12px]",style:{borderTopRightRadius:0,borderBottomRightRadius:0},children:k?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"spinner",style:{width:12,height:12,borderWidth:1.5}})," Generating..."]}):"Generate Unit Tests"}),r.jsx("button",{onClick:()=>F(!I),disabled:k,className:"btn btn-secondary text-[12px]",style:{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:"1px solid var(--border-default)",padding:"4px 6px"},children:r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:r.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),I&&r.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:r.jsx("button",{onClick:()=>J("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"})})]})]}),k&&N.length>0&&r.jsx("div",{className:"w-full max-w-md mt-3",children:r.jsx(ui,{entries:N,isRunning:!0})}),T&&r.jsx("div",{className:"w-full max-w-md mt-3",children:r.jsx(dc,{error:T,onRetry:()=>J()})}),B&&r.jsx(nv,{evals:L,onSave:U=>{i(U),z(!1)},onCancel:()=>z(!1)})]});const de=!h&&!t&&y!=null&&r.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"," ",r.jsx("code",{style:{background:"var(--surface-1)",padding:"1px 5px",borderRadius:3,fontFamily:"var(--font-mono)"},children:"vskill plugin new"}),"."]});return r.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden"},children:[de,r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"280px 1fr",flex:1,minHeight:0,overflow:"hidden"},children:[r.jsxs("div",{className:"overflow-auto",style:{borderRight:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[r.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:[r.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",flex:"1 1 auto",minWidth:0},children:["Test Cases (",H.length,")"]}),r.jsx("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,marginLeft:"auto",flexShrink:0},children:!t&&(A?r.jsx("button",{onClick:f,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"}):r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:()=>u("benchmark"),disabled:!v,className:"btn btn-primary text-[10px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Run All"}),h&&r.jsx("button",{onClick:()=>u("comparison"),disabled:!v,className:"btn btn-secondary text-[10px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Compare All"})]}))})]}),r.jsx("div",{className:"flex px-3 py-1.5 gap-1",style:{borderBottom:"1px solid var(--border-subtle)"},children:["all","unit","integration"].map(U=>r.jsx("button",{onClick:()=>C(U),style:{padding:"2px 8px",fontSize:10,fontWeight:P===U?600:400,background:P===U?"var(--accent-muted)":"transparent",color:P===U?"var(--accent)":"var(--text-tertiary)",border:"none",borderRadius:4,cursor:"pointer",textTransform:"capitalize"},children:U==="all"?`All (${_.length})`:U==="unit"?`Unit (${_.filter(K=>Dl(K)==="unit").length})`:`Integration (${_.filter(K=>Dl(K)==="integration").length})`},U))}),r.jsxs("div",{className:"py-1",children:[H.length===0&&_.length>0&&r.jsxs("div",{className:"flex items-center justify-center py-8 px-3 text-[12px]",style:{color:"var(--text-tertiary)"},children:["No ",P==="all"?"":P+" ","tests yet"]}),H.map(U=>{var Z;const K=w.get(U.id),Q=S===U.id,ce=Dl(U);return r.jsxs("button",{onClick:()=>s({type:"SELECT_CASE",caseId:U.id}),className:"w-full text-left px-3 py-2.5 transition-all duration-150",style:{background:Q?"var(--accent-muted)":"transparent",borderLeft:Q?"3px solid var(--accent)":"3px solid transparent"},onMouseEnter:ie=>{Q||(ie.currentTarget.style.background="var(--surface-2)")},onMouseLeave:ie=>{Q||(ie.currentTarget.style.background="transparent")},children:[r.jsxs("div",{className:"flex items-center justify-between gap-2 mb-0.5 min-w-0",children:[r.jsxs("span",{className:"text-[12px] font-medium flex items-center gap-1.5 min-w-0 flex-1",style:{color:Q?"var(--text-primary)":"var(--text-secondary)"},children:[r.jsxs("span",{className:"truncate min-w-0 flex-1",children:["#",U.id," ",U.name]}),r.jsx("span",{title:ce==="unit"?"Unit test":"Integration test","aria-label":ce==="unit"?"Unit test":"Integration test",style:{flexShrink:0,fontSize:9,fontWeight:600,padding:"1px 5px",borderRadius:9999,background:ce==="unit"?"var(--accent-muted)":"var(--orange-muted)",color:ce==="unit"?"var(--accent)":"var(--orange)",whiteSpace:"nowrap",letterSpacing:"0.02em"},children:ce==="unit"?"U":"I"}),ce==="integration"&&((Z=U.requiredCredentials)==null?void 0:Z.some(ie=>D.has(ie)))&&r.jsx("span",{title:"Configure credentials to run",style:{flexShrink:0,display:"inline-flex"},children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})})]}),r.jsx(nb,{result:K})]}),r.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":"",(K==null?void 0:K.passRate)!=null&&r.jsx(NE,{passRate:K.passRate})]})]},U.id)})]}),r.jsx("div",{className:"px-3 py-2",children:h&&r.jsx("button",{onClick:()=>z(!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"})}),r.jsx("div",{style:{borderTop:"1px solid var(--border-subtle)"},children:r.jsx(SE,{})})]}),r.jsx("div",{className:"overflow-auto",children:W?r.jsx(CE,{evalCase:W,result:w.get(W.id),evals:y,caseStatus:((M=E.get(W.id))==null?void 0:M.status)??"idle",onSaveEvals:i,onRun:U=>c(U,"benchmark"),onCompare:U=>c(U,"comparison"),onCancel:U=>d(U),onImprove:U=>s({type:"OPEN_IMPROVE",evalId:U}),embedded:t}):r.jsx("div",{className:"flex items-center justify-center h-full text-[13px]",style:{color:"var(--text-tertiary)"},children:"Select a test case"})}),B&&r.jsx(nv,{evals:L,onSave:U=>{i(U),z(!1)},onCancel:()=>z(!1)})]})]})}function CE({evalCase:t,result:a,evals:s,caseStatus:i,onSaveEvals:c,onRun:u,onCompare:d,onCancel:f,onImprove:x,embedded:h=!1}){const{state:v,canEdit:y,canRun:b}=bn(),{plugin:S,skill:w}=v,{entries:E,loading:k}=tb(S,w,t.id),[N,T]=m.useState(!1),[A,B]=m.useState(t.prompt),[z,P]=m.useState(!1),[C,O]=m.useState(t.expected_output);m.useState(()=>{B(t.prompt),O(t.expected_output)});const L=m.useCallback(M=>{c({...s,evals:s.evals.map(U=>U.id===M.id?M:U)})},[s,c]),_=m.useCallback(()=>{L({...t,prompt:A}),T(!1)},[t,A,L]),H=m.useCallback(()=>{L({...t,expected_output:C}),P(!1)},[t,C,L]),W=m.useCallback(()=>{L({...t,assertions:[...t.assertions,{id:`assert-${Date.now()}`,text:"New assertion",type:"boolean"}]})},[t,L]),q=m.useCallback((M,U)=>{L({...t,assertions:t.assertions.map(K=>K.id===M?{...K,text:U}:K)})},[t,L]),ee=m.useCallback(M=>{L({...t,assertions:t.assertions.filter(U=>U.id!==M)})},[t,L]),$=m.useCallback(()=>{confirm("Delete this test case?")&&c({...s,evals:s.evals.filter(M=>M.id!==t.id)})},[s,t.id,c]),D=a&&a.assertions.length>0&&a.assertions.every(M=>M.pass),I=a&&a.assertions.some(M=>!M.pass),F=Dl(t),J=t.requiredCredentials??[],de=F==="integration"&&J.length>0;return r.jsxs("div",{className:"p-5 animate-fade-in",children:[r.jsxs("div",{className:"mb-4",style:{display:"flex",flexWrap:"wrap",alignItems:"center",rowGap:8,columnGap:12},children:[r.jsxs("div",{className:"flex items-center gap-2",style:{flex:"1 1 240px",minWidth:0},children:[r.jsxs("span",{className:"text-[16px] font-semibold",title:`#${t.id} ${t.name}`,style:{color:"var(--text-primary)",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["#",t.id," ",t.name]}),y?r.jsx("button",{onClick:()=>{if((F==="unit"?"integration":"unit")==="unit"){const{requiredCredentials:U,requirements:K,cleanup:Q,...ce}=t;L({...ce,testType:"unit"})}else L({...t,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"}):r.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"}),r.jsx(nb,{result:a})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:8,marginLeft:"auto",flexShrink:0},children:[!h&&(i==="running"||i==="queued"?r.jsxs("button",{onClick:()=>f(t.id),className:"btn text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)",whiteSpace:"nowrap"},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:r.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"1"})}),"Cancel"]}):r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:()=>u(t.id),disabled:!b,className:"btn btn-primary text-[12px]",style:{whiteSpace:"nowrap"},children:"Run"}),y&&r.jsx("button",{onClick:()=>d(t.id),disabled:!b,className:"btn btn-secondary text-[12px]",style:{whiteSpace:"nowrap"},children:"A/B Compare"})]})),I&&y&&i!=="running"&&i!=="queued"&&r.jsx("button",{onClick:()=>x(t.id),className:"btn btn-secondary text-[12px]",style:{whiteSpace:"nowrap"},children:"Fix with AI"}),y&&i!=="running"&&i!=="queued"&&r.jsx("button",{onClick:$,className:"btn btn-ghost text-[12px]","aria-label":"Delete test case",title:"Delete test case",style:{color:"var(--red)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.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"})]})})]})]}),!y&&F==="integration"&&r.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:[r.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),r.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),r.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]}),r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--accent)"},children:"Run locally in vSkill Studio"})]}),D&&r.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:[r.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"2.5",children:[r.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),r.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--green)"},children:"All assertions passing"})]}),de&&r.jsxs("div",{className:"mb-4 px-4 py-3 rounded-xl",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--orange)"},children:"Required Credentials"})]}),r.jsx("div",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:"This integration test requires the following environment variables:"}),r.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1.5",children:J.map(M=>r.jsx("span",{style:{fontSize:10,fontFamily:"var(--font-mono, monospace)",padding:"2px 6px",borderRadius:4,background:"var(--orange-muted)",color:"var(--orange)"},children:M},M))})]}),y&&F==="integration"&&r.jsx(RE,{evalCase:t,onUpdate:L}),r.jsx(Ao,{title:"Prompt",children:N?r.jsxs("div",{children:[r.jsx("textarea",{value:A,onChange:M=>B(M.target.value),className:"input-field w-full",rows:4,style:{fontFamily:"var(--font-mono, ui-monospace, monospace)",fontSize:12},autoFocus:!0}),r.jsxs("div",{className:"flex gap-2 mt-2",children:[r.jsx("button",{onClick:_,className:"btn btn-primary text-[12px]",children:"Save"}),r.jsx("button",{onClick:()=>{B(t.prompt),T(!1)},className:"btn btn-ghost text-[12px]",children:"Cancel"})]})]}):r.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:y?"pointer":"default"},onClick:()=>{y&&T(!0)},onMouseEnter:M=>{y&&(M.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:M=>{M.currentTarget.style.borderColor="var(--border-subtle)"},children:t.prompt||r.jsx("span",{style:{color:"var(--text-tertiary)",fontStyle:"italic"},children:y?"Click to edit prompt...":"No prompt"})})}),r.jsx(Ao,{title:"Expected Output",children:z?r.jsxs("div",{children:[r.jsx("textarea",{value:C,onChange:M=>O(M.target.value),className:"input-field w-full",rows:3,style:{fontFamily:"var(--font-mono, ui-monospace, monospace)",fontSize:12},autoFocus:!0}),r.jsxs("div",{className:"flex gap-2 mt-2",children:[r.jsx("button",{onClick:H,className:"btn btn-primary text-[12px]",children:"Save"}),r.jsx("button",{onClick:()=>{O(t.expected_output),P(!1)},className:"btn btn-ghost text-[12px]",children:"Cancel"})]})]}):r.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:y?"pointer":"default"},onClick:()=>{y&&P(!0)},onMouseEnter:M=>{y&&(M.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:M=>{M.currentTarget.style.borderColor="var(--border-subtle)"},children:t.expected_output||r.jsx("span",{style:{fontStyle:"italic"},children:y?"Click to edit expected output...":"No expected output"})})}),r.jsx(Ao,{title:`Assertions (${t.assertions.length})`,action:y?r.jsx("button",{onClick:W,className:"btn btn-ghost text-[11px]",children:"+ Add"}):void 0,children:t.assertions.length===0?r.jsx("div",{className:"text-[12px] text-center py-4",style:{color:"var(--text-tertiary)"},children:'No assertions. Click "+ Add" to create one.'}):r.jsx("div",{className:"space-y-2",children:t.assertions.map(M=>{const U=a==null?void 0:a.assertions.find(Q=>Q.assertion_id===M.id),K=kE(M.id,U,E);return r.jsx(EE,{assertion:M,result:U,badges:K,isReadOnly:!y,onUpdate:Q=>q(M.id,Q),onDelete:()=>ee(M.id)},M.id)})})}),(a==null?void 0:a.output)&&r.jsx(TE,{output:a.output,durationMs:a.durationMs,tokens:a.tokens}),a&&a.passRate!=null&&a.passRate<.2&&(()=>{const M=Jy("INEFFECTIVE",a.passRate);return M.recommendations&&M.recommendations.length>0?r.jsx(Ao,{title:"Recommendations",children:r.jsxs("div",{className:"rounded-xl p-4",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),r.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--orange)"},children:"This eval is significantly below expectations"})]}),r.jsx("ul",{className:"space-y-1.5 ml-1",children:M.recommendations.map((U,K)=>r.jsxs("li",{className:"flex items-start gap-2 text-[12px]",style:{color:"var(--text-secondary)"},children:[r.jsx("span",{style:{color:"var(--orange)",fontWeight:600,flexShrink:0},children:"•"}),U]},K))})]})}):null})(),!h&&r.jsx(rb,{evalId:t.id,sharedEntries:E,sharedLoading:k})]},t.id)}function EE({assertion:t,result:a,badges:s,isReadOnly:i,onUpdate:c,onDelete:u}){const[d,f]=m.useState(!1),[x,h]=m.useState(t.text),[v,y]=m.useState(!1),b=()=>{c(x),f(!1)};return r.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:r.jsxs("div",{className:"flex items-start gap-2",children:[a?r.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:18,height:18,display:"flex",alignItems:"center",justifyContent:"center",background:a.pass?"var(--green-muted)":"var(--red-muted)"},children:a.pass?r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}):r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}):r.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"}),(s==null?void 0:s.regression)&&r.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:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("polyline",{points:"19 12 12 19 5 12"})]})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[r.jsx("span",{className:"text-[10px] font-mono font-semibold",style:{color:"var(--text-tertiary)"},children:t.id}),(s==null?void 0:s.flaky)&&r.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"}),(s==null?void 0:s.nonDiscriminating)&&r.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."})]}),d?r.jsxs("div",{className:"flex gap-2",children:[r.jsx("input",{value:x,onChange:S=>h(S.target.value),onKeyDown:S=>{S.key==="Enter"&&b(),S.key==="Escape"&&f(!1)},className:"input-field flex-1 text-[12px]",autoFocus:!0}),r.jsx("button",{onClick:b,className:"btn btn-primary text-[11px]",children:"Save"})]}):r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-secondary)",cursor:i?"default":"pointer"},onClick:()=>{i||(h(t.text),f(!0))},children:t.text}),(a==null?void 0:a.reasoning)&&r.jsx("button",{onClick:()=>y(!v),className:"text-[11px] mt-1 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:v?"Hide reasoning":"Show reasoning"}),v&&(a==null?void 0:a.reasoning)&&r.jsx("div",{className:"mt-1 text-[11px] p-2 rounded",style:{background:"var(--surface-1)",color:"var(--text-tertiary)"},children:a.reasoning})]}),!i&&r.jsx("button",{onClick:u,className:"btn btn-ghost p-1 opacity-0 group-hover:opacity-100",style:{color:"var(--text-tertiary)"},onMouseEnter:S=>{S.currentTarget.style.color="var(--red)",S.currentTarget.style.opacity="1"},onMouseLeave:S=>{S.currentTarget.style.color="var(--text-tertiary)",S.currentTarget.style.opacity=""},children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})})}function Ao({title:t,action:a,children:s}){return r.jsxs("div",{className:"mb-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:t}),a]}),s]})}function nb({result:t}){const[a,s]=m.useState(!1),i={padding:"2px 8px",borderRadius:9999,flexShrink:0,minWidth:44,justifyContent:"center",position:"relative",cursor:"default"};if(!t||t.status==null)return r.jsx("span",{className:"pill text-[10px]",title:"Not run yet","aria-label":"Not run yet",style:{...i,background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"--"});const c=t.status==="pass",u=t.passRate??0,d=c?"PASS":"FAIL",f=Jy(d,u),x=t.passRate!=null?`${Math.round(t.passRate*100)}%`:d;return r.jsxs("span",{className:"pill text-[10px]",style:{...i,background:c?"var(--green-muted)":"var(--red-muted)",color:c?"var(--green)":"var(--red)",fontWeight:600},onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),"aria-label":`${d} ${x}`,"aria-describedby":a?"verdict-tooltip":void 0,children:[x,a&&r.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:f.explanation})]})}function NE({passRate:t}){const a=Math.round(t*100);return r.jsx("div",{className:"flex items-center gap-1",children:r.jsx("div",{className:"rounded-full overflow-hidden",style:{width:32,height:4,background:"var(--surface-4)"},children:r.jsx("div",{className:"h-full rounded-full",style:{width:`${a}%`,background:a>=80?"var(--green)":a>=50?"var(--yellow)":"var(--red)"}})})})}function TE({output:t,durationMs:a,tokens:s}){const[i,c]=m.useState(!1);return r.jsxs("div",{className:"mb-5",children:[r.jsxs("button",{onClick:()=>c(!i),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:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:i?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})}),"LLM Output",a!=null&&r.jsxs("span",{style:{fontWeight:400},children:["(",(a/1e3).toFixed(1),"s)"]}),s!=null&&r.jsxs("span",{style:{fontWeight:400},children:["(",s," tokens)"]})]}),i&&r.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:t})]})}function Vd(t){return t==="baseline"?"right":t==="comparison"?"full":"left"}function Fd({entry:t}){return r.jsxs("div",{className:"rounded-lg px-3 py-2.5",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:Xy(t.timestamp)}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:t.model}),r.jsx("span",{className:"pill",style:{fontSize:9,padding:"1px 6px",background:t.type==="benchmark"?"var(--accent-muted)":t.type==="comparison"?"var(--purple-muted)":"var(--orange-muted)",color:t.type==="benchmark"?"var(--accent)":t.type==="comparison"?"var(--purple)":"var(--orange)"},children:t.type}),r.jsxs("span",{className:"text-[12px] font-semibold ml-auto",style:{color:Ul(t.pass_rate)},children:[Math.round(t.pass_rate*100),"%"]})]}),r.jsxs("div",{className:"flex items-center gap-4 mb-1.5 text-[10px]",style:{fontFamily:"var(--font-mono, monospace)",color:"var(--text-tertiary)"},children:[t.durationMs!=null&&r.jsx("span",{children:Qy(t.durationMs)}),t.tokens!=null&&r.jsxs("span",{children:[t.tokens>=1e3?`${(t.tokens/1e3).toFixed(1)}k`:t.tokens," tok"]})]}),t.type==="comparison"&&t.baselinePassRate!=null&&(()=>{const a=t.pass_rate-t.baselinePassRate,s=a>.001?"skill":a<-.001?"baseline":"tie",i=a>0?"+":"",c=s==="skill"?"var(--green)":s==="baseline"?"var(--red)":"var(--text-tertiary)";return r.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"vs baseline:"}),r.jsxs("span",{className:"text-[11px] font-semibold",style:{color:a>=0?"var(--green)":"var(--red)"},children:[i,(a*100).toFixed(1),"%"]}),r.jsx("span",{className:"pill text-[9px]",style:{padding:"1px 5px",background:"var(--surface-3)",color:c},children:s})]})})(),r.jsx("div",{className:"space-y-0.5",children:t.assertions.map(a=>r.jsxs("div",{className:"flex items-start gap-1.5",children:[r.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:14,height:14,display:"flex",alignItems:"center",justifyContent:"center",background:a.pass?"var(--green-muted)":"var(--red-muted)"},children:a.pass?r.jsx("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}):r.jsxs("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:a.text})]},a.id))})]})}function rb({evalId:t,sharedEntries:a,sharedLoading:s}){const{state:i,dispatch:c}=bn(),{plugin:u,skill:d}=i,[f,x]=m.useState(!0),h=a??null,v=s??!1,y=m.useCallback(()=>{x(E=>!E)},[]),b=h?h.slice(0,10):[],S=b.some(E=>{const k=Vd(E.type);return k==="left"||k==="full"}),w=b.some(E=>{const k=Vd(E.type);return k==="right"||k==="full"});return r.jsxs("div",{className:"mb-5",children:[r.jsxs("button",{onClick:y,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:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:f?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})}),"Execution History",h&&h.length>0&&r.jsxs("span",{style:{fontWeight:400},children:["(",h.length," run",h.length!==1?"s":"",")"]})]}),f&&r.jsx("div",{className:"animate-fade-in",children:v?r.jsxs("div",{className:"flex items-center gap-2 py-3",children:[r.jsx("div",{className:"spinner",style:{width:14,height:14,borderWidth:1.5}}),r.jsx("span",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Loading history..."})]}):!h||h.length===0?r.jsx("div",{className:"text-[12px] py-3",style:{color:"var(--text-tertiary)"},children:"No history for this case"}):r.jsxs("div",{children:[b.length>=2&&r.jsx("div",{className:"mb-2",children:r.jsx(Zy,{entries:b})}),r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",gridColumn:"1"},children:"Skill"}),r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",gridColumn:"2"},children:"Baseline"}),!S&&r.jsx("div",{style:{gridColumn:"1",fontSize:12,color:"var(--text-tertiary)"},children:"No skill runs"}),!w&&r.jsx("div",{style:{gridColumn:"2",fontSize:12,color:"var(--text-tertiary)"},children:"No baseline runs"}),b.map((E,k)=>{const N=Vd(E.type);return N==="full"?r.jsx("div",{style:{gridColumn:"1 / -1"},children:r.jsx(Fd,{entry:E})},k):N==="left"?r.jsxs(m.Fragment,{children:[r.jsx("div",{style:{gridColumn:"1"},children:r.jsx(Fd,{entry:E})}),r.jsx("div",{style:{gridColumn:"2"}})]},k):r.jsxs(m.Fragment,{children:[r.jsx("div",{style:{gridColumn:"1"}}),r.jsx("div",{style:{gridColumn:"2"},children:r.jsx(Fd,{entry:E})})]},k)})]}),r.jsx("button",{onClick:()=>c({type:"SET_PANEL",panel:"history"}),className:"mt-2 text-[11px] font-medium transition-colors duration-150",style:{color:"var(--accent)"},onMouseEnter:E=>{E.currentTarget.style.textDecoration="underline"},onMouseLeave:E=>{E.currentTarget.style.textDecoration="none"},children:"View full history →"})]})})]})}function nv({evals:t,onSave:a,onCancel:s}){const[i,c]=m.useState(""),[u,d]=m.useState(""),[f,x]=m.useState(""),[h,v]=m.useState([{id:`assert-${Date.now()}`,text:"",type:"boolean"}]),[y,b]=m.useState("unit"),[S,w]=m.useState(""),[E,k]=m.useState([]),[N,T]=m.useState(""),[A,B]=m.useState(""),z=Math.max(0,...t.evals.map(L=>L.id))+1,P=L=>{b(L),L==="unit"&&(k([]),w(""),T(""),B(""))},C=()=>{const L=S.trim().toUpperCase();L&&!E.includes(L)&&k([...E,L]),w("")},O=()=>{if(!i.trim()||!u.trim())return;const L={id:z,name:i.trim(),prompt:u.trim(),expected_output:f.trim(),files:[],assertions:h.filter(_=>_.text.trim()),...y==="integration"?{testType:"integration",...E.length>0?{requiredCredentials:E}:{},...N||A?{requirements:{...N?{platform:N}:{},...A?{chromeProfile:A}:{}}}:{}}:{}};a({...t,evals:[...t.evals,L]})};return r.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:r.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:[r.jsx("div",{className:"text-[15px] font-semibold mb-4",style:{color:"var(--text-primary)"},children:"New Test Case"}),r.jsxs("div",{className:"mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1.5 block",style:{color:"var(--text-tertiary)"},children:"Type"}),r.jsx("div",{className:"flex gap-1 p-0.5 rounded-lg",style:{background:"var(--surface-2)",display:"inline-flex"},children:["unit","integration"].map(L=>r.jsx("button",{onClick:()=>P(L),className:"px-3 py-1 rounded-md text-[12px] font-medium transition-all duration-150",style:{background:y===L?L==="unit"?"var(--accent-muted)":"var(--orange-muted)":"transparent",color:y===L?L==="unit"?"var(--accent)":"var(--orange)":"var(--text-tertiary)",border:"none",cursor:"pointer",textTransform:"capitalize"},children:L},L))})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Name"}),r.jsx("input",{value:i,onChange:L=>c(L.target.value),className:"input-field",placeholder:"e.g., auth-check",autoFocus:!0})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Prompt"}),r.jsx("textarea",{value:u,onChange:L=>d(L.target.value),className:"input-field",rows:3,placeholder:"User prompt to test..."})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Expected Output"}),r.jsx("textarea",{value:f,onChange:L=>x(L.target.value),className:"input-field",rows:2,placeholder:"Description of expected behavior..."})]}),r.jsxs("div",{className:"mb-4",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Assertions"}),h.map((L,_)=>r.jsxs("div",{className:"flex gap-2 mb-2",children:[r.jsx("input",{value:L.text,onChange:H=>v(h.map((W,q)=>q===_?{...W,text:H.target.value}:W)),className:"input-field flex-1 text-[12px]",placeholder:"e.g., Output includes a greeting"}),h.length>1&&r.jsx("button",{onClick:()=>v(h.filter((H,W)=>W!==_)),className:"btn btn-ghost p-1",style:{color:"var(--text-tertiary)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},L.id)),r.jsx("button",{onClick:()=>v([...h,{id:`assert-${Date.now()}`,text:"",type:"boolean"}]),className:"text-[11px] mt-1 transition-colors duration-150",style:{color:"var(--accent)"},children:"+ Add Assertion"})]}),y==="integration"&&r.jsxs("div",{className:"mb-4 p-3 rounded-lg",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--orange)"},children:"Integration Settings"}),r.jsxs("div",{className:"mb-3",children:[r.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Required Credentials"}),r.jsx("div",{className:"flex flex-wrap gap-1.5 mb-1.5",children:E.map(L=>r.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:[L,r.jsx("button",{onClick:()=>k(E.filter(_=>_!==L)),style:{color:"var(--orange)",lineHeight:1},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},L))}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("input",{value:S,onChange:L=>w(L.target.value),onKeyDown:L=>{L.key==="Enter"&&(L.preventDefault(),C())},className:"input-field flex-1 text-[11px] font-mono",placeholder:"e.g., SLACK_BOT_TOKEN"}),r.jsx("button",{onClick:C,className:"btn btn-ghost text-[11px]",style:{color:"var(--orange)"},children:"Add"})]})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Platform"}),r.jsx("input",{value:N,onChange:L=>T(L.target.value),className:"input-field text-[11px]",placeholder:"e.g., linkedin, twitter"})]}),r.jsxs("label",{className:"block",children:[r.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Chrome Profile"}),r.jsx("input",{value:A,onChange:L=>B(L.target.value),className:"input-field text-[11px]",placeholder:"e.g., Default"})]})]}),r.jsxs("div",{className:"flex justify-end gap-2",children:[r.jsx("button",{onClick:s,className:"btn btn-secondary text-[12px]",children:"Cancel"}),r.jsx("button",{onClick:O,disabled:!i.trim()||!u.trim(),className:"btn btn-primary text-[12px]",children:"Save"})]})]})})}function RE({evalCase:t,onUpdate:a}){var d,f;const[s,i]=m.useState(""),c=()=>{const x=s.trim().toUpperCase();x&&!(t.requiredCredentials??[]).includes(x)&&a({...t,requiredCredentials:[...t.requiredCredentials??[],x]}),i("")},u=x=>{const h=(t.requiredCredentials??[]).filter(v=>v!==x);a({...t,requiredCredentials:h.length>0?h:void 0})};return r.jsxs("div",{className:"mb-4 p-3 rounded-lg",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--orange)"},children:"Integration Settings"}),r.jsxs("div",{className:"mb-2.5",children:[r.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Required Credentials"}),r.jsx("div",{className:"flex flex-wrap gap-1.5 mb-1.5",children:(t.requiredCredentials??[]).map(x=>r.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:[x,r.jsx("button",{onClick:()=>u(x),style:{color:"var(--orange)",lineHeight:1},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},x))}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("input",{value:s,onChange:x=>i(x.target.value),onKeyDown:x=>{x.key==="Enter"&&(x.preventDefault(),c())},className:"input-field flex-1 text-[11px] font-mono",placeholder:"e.g., GITHUB_TOKEN"}),r.jsx("button",{onClick:c,className:"btn btn-ghost text-[11px]",style:{color:"var(--orange)"},children:"Add"})]})]}),r.jsxs("div",{className:"mb-2.5",children:[r.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Platform"}),r.jsx("input",{value:((d=t.requirements)==null?void 0:d.platform)??"",onChange:x=>a({...t,requirements:{...t.requirements,platform:x.target.value||void 0}}),className:"input-field text-[11px]",placeholder:"e.g., linkedin, twitter"})]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Chrome Profile"}),r.jsx("input",{value:((f=t.requirements)==null?void 0:f.chromeProfile)??"",onChange:x=>a({...t,requirements:{...t.requirements,chromeProfile:x.target.value||void 0}}),className:"input-field text-[11px]",placeholder:"e.g., Default"})]})]})}function Gd(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function AE({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"16 18 22 12 16 6"}),r.jsx("polyline",{points:"8 6 2 12 8 18"})]})}function LE({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),r.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"21"})]})}function ME({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),r.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function zE({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M15 4V2"}),r.jsx("path",{d:"M15 16v-2"}),r.jsx("path",{d:"M8 9h2"}),r.jsx("path",{d:"M20 9h2"}),r.jsx("path",{d:"M17.8 11.8L19 13"}),r.jsx("path",{d:"M15 9h.01"}),r.jsx("path",{d:"M17.8 6.2L19 5"}),r.jsx("path",{d:"M11 6.2L9.7 5"}),r.jsx("path",{d:"M3 21l9-9"})]})}function Wd({size:t=15}){return r.jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("path",{d:"M12 3l1.5 5.5L19 10l-5.5 1.5L12 17l-1.5-5.5L5 10l5.5-1.5L12 3z"})})}function DE(){const{state:t,dispatch:a,saveContent:s,isReadOnly:i}=bn(),{plugin:c,skill:u,skillContent:d,isDirty:f,improveTarget:x,aiEditOpen:h}=t,[v,y]=m.useState("split"),[b,S]=m.useState(!1),w=m.useRef(null),[E,k]=m.useState(!1),[N,T]=m.useState(""),[A,B]=m.useState(!1),[z,P]=m.useState(null),[C,O]=m.useState([]),[L,_]=m.useState([]),[H,W]=m.useState(null),q=m.useRef(null),{config:ee}=Ya(),$=hE(),{files:D,activeFile:I,secondaryContent:F,loading:J,error:de,loadError:M,selectFile:U,refresh:K,isSkillMd:Q}=tE(c??"",u??""),[ce,Z]=m.useState(!1),ie=m.useCallback(xe=>{ce&&!window.confirm("You have unsaved changes. Discard?")||U(xe)},[ce,U]);m.useEffect(()=>()=>{var xe;(xe=q.current)==null||xe.abort()},[]);const{metadata:X,body:me}=FC(d),je=X["allowed-tools"],Ne=Array.isArray(je)?je:typeof je=="string"?[je]:[],Me=X.name,Fe=X.description,Ue=X.metadata,De=typeof Ue=="object"&&!Array.isArray(Ue)?Ue:null,Ge=X.version||(De==null?void 0:De.version),ft=X.tags||(De==null?void 0:De.tags),oe=Array.isArray(ft)?ft:typeof ft=="string"?ft.split(",").map(xe=>xe.trim()).filter(Boolean):[],ve=new Set(["name","description","metadata","allowed-tools","version","tags"]),ye=Object.entries(X).filter(([xe])=>!ve.has(xe)),be=m.useCallback(async()=>{const{contentToSave:xe,version:Ze,fromVersion:Xe}=vE(d,t.savedContent);if(Ze!==null){const kt=gE(Xe,Ze);if(!kt.valid){Gd(`Save blocked: ${kt.reason??"invalid version transition"}`,"error");return}}S(!0),await s(xe),S(!1),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:content-saved",{detail:{plugin:c,skill:u,version:Ze}}))},[s,d,t.savedContent,c,u]),Ee=m.useCallback(xe=>{const Ze=Yo(d)??"1.0.0";let Xe;try{Xe=Ps(Ze,xe)}catch(_t){const lt=_t instanceof Error?_t.message:String(_t);Gd(`Bump failed: ${lt}`,"error");return}const kt=Ky(d,Xe);a({type:"SET_CONTENT",content:kt}),Gd(`Bumped to v${Xe} (${xe}). Click Save to commit.`,"info")},[d,a]),qe=m.useCallback(xe=>{(xe.ctrlKey||xe.metaKey)&&xe.key==="s"&&(xe.preventDefault(),xe.stopPropagation(),f&&be()),(xe.ctrlKey||xe.metaKey)&&xe.key==="k"&&(xe.preventDefault(),xe.stopPropagation(),a({type:h?"CLOSE_AI_EDIT":"OPEN_AI_EDIT"}))},[f,be,h,a]),He=m.useCallback(async()=>{var Ze,Xe;if(!N.trim())return;(Ze=q.current)==null||Ze.abort();const xe=new AbortController;q.current=xe,B(!0),W(null),_([]),P(null),O([]);try{const kt=(ee==null?void 0:ee.provider)||"claude-cli",_t=(ee==null?void 0:ee.model)||"sonnet",lt=await fetch("/api/skills/generate?sse",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:N,provider:kt,model:_t}),signal:xe.signal});if(!lt.ok||!lt.body){let ur=`HTTP ${lt.status}`;try{const Tn=await lt.json();Tn.error&&(ur=Tn.error)}catch{}throw new Error(ur)}const jn=lt.body.getReader(),Yt=new TextDecoder;let mn="",un="";for(;;){const{done:ur,value:Tn}=await jn.read();if(ur)break;mn+=Yt.decode(Tn,{stream:!0});const Hn=mn.split(`
|
|
97
|
+
${h}${d}`}function yE(t,a){const s=Yo(a),i=Yo(t);if(s!==null&&i!==null&&s===i)try{const c=Ps(s,"patch");return{contentToSave:Ky(t,c),version:c,fromVersion:s}}catch{return{contentToSave:t,version:i,fromVersion:s}}return{contentToSave:t,version:i,fromVersion:s}}function Dl(t){return t.testType==="integration"?"integration":"unit"}function Ul(t){return t>=.8?"var(--green)":t>=.5?"var(--yellow)":"var(--red)"}function Xy(t){const a=new Date(t);return a.toLocaleDateString(void 0,{month:"short",day:"numeric"})+", "+a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1})}function Qy(t){return t==null?"--":t>=1e3?`${(t/1e3).toFixed(1)}s`:`${t}ms`}const bE=new Set(["benchmark","comparison","baseline"]);function tv(t,a,s,i){return t.map(({rate:c,idx:u,total:d})=>{const f=i+u/(d-1)*(a-i*2),x=i+(s-i*2)-c*(s-i*2);return`${f},${x}`})}function Zy({entries:t}){const a=t.filter(y=>bE.has(y.type)).slice().reverse(),s=a.map((y,b,S)=>({rate:y.pass_rate,idx:b,total:S.length})).filter((y,b)=>{const S=a[b].type;return S==="benchmark"||S==="comparison"}),i=a.flatMap((y,b)=>y.type==="baseline"?[{rate:y.pass_rate,idx:b,total:a.length}]:y.type==="comparison"&&y.baselinePassRate!=null?[{rate:y.baselinePassRate,idx:b,total:a.length}]:[]);if(s.length<2&&i.length<2)return null;const c=80,u=24,d=2,f=s.length>=2?tv(s,c,u,d):[],x=i.length>=2?tv(i,c,u,d):[],h=f[f.length-1],v=x[x.length-1];return r.jsxs("svg",{width:c,height:u,style:{display:"block",flexShrink:0},children:[x.length>0&&r.jsx("polyline",{points:x.join(" "),fill:"none",stroke:"var(--text-tertiary)",strokeWidth:1.5,strokeLinejoin:"round",strokeDasharray:"3 2"}),f.length>0&&r.jsx("polyline",{points:f.join(" "),fill:"none",stroke:"var(--accent)",strokeWidth:1.5,strokeLinejoin:"round"}),v&&r.jsx("circle",{cx:parseFloat(v.split(",")[0]),cy:parseFloat(v.split(",")[1]),r:2.5,fill:"var(--text-tertiary)"}),h&&r.jsx("circle",{cx:parseFloat(h.split(",")[0]),cy:parseFloat(h.split(",")[1]),r:2.5,fill:"var(--accent)"})]})}function Jy(t,a,s){const i=isNaN(a)?0:a,c=[],u=[],d=[];if((t==="PASS"||t==="EFFECTIVE")&&i>=.7){const h=c.length>0?` Met criteria: ${c.map(v=>v.criterion).join(", ")}.`:"";return{explanation:`${t} (score ${i.toFixed(2)}): evaluation met expectations.${h}`}}if(t==="FAIL"||t==="DEGRADING"){const h=u.length>0?` Failed criteria: ${u.map(y=>y.criterion).join(", ")}.`:"",v=[...u.map(y=>`Improve "${y.criterion}" (score: ${y.score.toFixed(2)})`),...d.map(y=>`Strengthen "${y.criterion}" (score: ${y.score.toFixed(2)})`)];return v.length===0&&v.push("Review prompt instructions and add more specific guidance"),{explanation:`${t} (score ${i.toFixed(2)}): evaluation did not meet expectations.${h}`,recommendations:v}}if(t==="INEFFECTIVE"){if(i<.2){const v=[...u.map(y=>`Rework "${y.criterion}" — currently at ${y.score.toFixed(2)}`),"Consider adding examples to your system prompt","Review the rubric criteria for achievability"];return{explanation:`${t} (score ${i.toFixed(2)}): evaluation is significantly below expectations.`,recommendations:v}}const h=[...u.map(v=>`Rework "${v.criterion}" — currently at ${v.score.toFixed(2)}`),...d.map(v=>`Strengthen "${v.criterion}" (score: ${v.score.toFixed(2)})`)];return h.length===0&&h.push("Consider restructuring your prompt approach"),{explanation:`${t} (score ${i.toFixed(2)}): below expectations but showing some capability.`,recommendations:h}}if(t==="MARGINAL"){const h=[...d.map(v=>`Strengthen "${v.criterion}" (score: ${v.score.toFixed(2)})`),...u.map(v=>`Improve "${v.criterion}" (score: ${v.score.toFixed(2)})`)];return h.length===0&&h.push(c.length>0?"Assertion pass rate is below target despite strong rubric scores — review test case alignment":"Review prompt instructions for areas of improvement"),{explanation:`${t} (score ${i.toFixed(2)}): moderate improvement detected.`,recommendations:h}}if(t==="EMERGING"){const h=[...u.map(v=>`Improve "${v.criterion}" (score: ${v.score.toFixed(2)})`),...d.map(v=>`Strengthen "${v.criterion}" (score: ${v.score.toFixed(2)})`)];return h.length===0&&h.push(c.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:`${t} (score ${i.toFixed(2)}): early promise — focus on weak areas to improve.`,recommendations:h}}const f=c.length>0?` Passing: ${c.map(h=>h.criterion).join(", ")}.`:"",x=d.length>0?` Needs improvement: ${d.map(h=>h.criterion).join(", ")}.`:"";return{explanation:`${t} (score ${i.toFixed(2)}): mixed results.${f}${x}`}}const eb={EFFECTIVE:"Strong Improvement",MARGINAL:"Moderate Improvement",EMERGING:"Early Promise",INEFFECTIVE:"Needs Work",DEGRADING:"Regression"};function jE(t){return Object.hasOwn(eb,t)}function SE(t){return jE(t)?eb[t]:t}function kE(){const{state:t}=bn(),{plugin:a,skill:s}=t,[i,c]=m.useState([]),[u,d]=m.useState([]),[f,x]=m.useState(!0),[h,v]=m.useState(null),[y,b]=m.useState(new Set),[S,w]=m.useState({}),[E,k]=m.useState(null),[N,T]=m.useState(""),[A,B]=m.useState(!1),[z,P]=m.useState(""),[C,O]=m.useState(""),L=m.useCallback(async()=>{x(!0),v(null);try{const[$,D]=await Promise.all([ke.getCredentials(a,s),ke.getParams(a,s)]);c($.credentials),d(D.params)}catch($){v($ instanceof Error?$.message:"Failed to load parameters"),c([]),d([])}finally{x(!1)}},[a,s]);m.useEffect(()=>{L()},[L]);const _=m.useCallback(async($,D)=>{B(!0),v(null);try{await ke.setCredential(a,s,$,D),k(null),T(""),await L()}catch(I){v(I instanceof Error?I.message:`Failed to save ${$}`)}finally{B(!1)}},[a,s,L]),H=m.useCallback(async()=>{const $=z.trim().toUpperCase(),D=C.trim();if(!(!$||!D)){B(!0),v(null);try{await ke.setCredential(a,s,$,D),P(""),O(""),await L()}catch(I){v(I instanceof Error?I.message:`Failed to add ${$}`)}finally{B(!1)}}},[a,s,z,C,L]),W=m.useCallback(async $=>{if(y.has($)){b(D=>{const I=new Set(D);return I.delete($),I}),w(D=>{const I={...D};return delete I[$],I});return}try{const I=(await ke.getParamsRevealed(a,s,$)).params.find(F=>F.name===$);I!=null&&I.value&&(w(F=>({...F,[$]:I.value})),b(F=>new Set(F).add($)))}catch{}},[a,s,y]),q=new Set(i.map($=>$.name)),ee=[...i.map($=>{const D=u.find(I=>I.name===$.name);return{name:$.name,status:$.status,maskedValue:(D==null?void 0:D.maskedValue)??""}}),...u.filter($=>!q.has($.name)).map($=>({name:$.name,status:$.status,maskedValue:$.maskedValue}))];return r.jsxs("div",{className:"py-2 px-3",children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Parameters"}),h&&r.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:h}),f&&ee.length===0&&r.jsx("div",{className:"text-[11px] py-2",style:{color:"var(--text-tertiary)"},children:"Loading..."}),!f&&ee.length===0&&!h&&r.jsx("div",{className:"text-[11px] py-2",style:{color:"var(--text-tertiary)"},children:"No parameters configured"}),ee.map($=>r.jsxs("div",{className:"flex items-center gap-2 py-1.5",style:{borderBottom:"1px solid var(--border-subtle)"},children:[r.jsx("span",{className:"text-[10px] font-mono flex-1 truncate",style:{color:"var(--text-primary)"},children:$.name}),r.jsx("span",{className:"text-[9px] font-semibold px-1.5 py-0.5 rounded-full",style:{background:$.status==="ready"?"var(--green-muted)":"var(--red-muted)",color:$.status==="ready"?"var(--green)":"var(--red)"},children:$.status}),($.maskedValue||$.status==="ready")&&r.jsxs("span",{className:"text-[10px] font-mono",style:{color:"var(--text-secondary)"},children:[y.has($.name)?S[$.name]??$.maskedValue:$.maskedValue||"***",r.jsx("button",{onClick:()=>W($.name),className:"text-[9px] ml-1",style:{color:"var(--accent)",cursor:"pointer",background:"none",border:"none"},"aria-label":`${y.has($.name)?"Hide":"Reveal"} value for ${$.name}`,children:y.has($.name)?"hide":"show"})]}),E===$.name?r.jsxs("div",{className:"flex gap-1",children:[r.jsx("input",{value:N,onChange:D=>T(D.target.value),onKeyDown:D=>{D.key==="Enter"&&N.trim()&&_($.name,N)},className:"input-field text-[10px] font-mono",style:{width:120},placeholder:"New value...","aria-label":`New value for ${$.name}`,autoFocus:!0}),r.jsx("button",{onClick:()=>_($.name,N),disabled:A||!N.trim(),className:"text-[10px] font-medium",style:{color:"var(--green)",background:"none",border:"none",cursor:"pointer"},children:"Save"}),r.jsx("button",{onClick:()=>{k(null),T("")},className:"text-[10px]",style:{color:"var(--text-tertiary)",background:"none",border:"none",cursor:"pointer"},children:"Cancel"})]}):r.jsx("button",{onClick:()=>{k($.name),T("")},className:"text-[10px]",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"Edit"})]},$.name)),r.jsxs("div",{className:"mt-3 pt-2",style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[10px] font-medium mb-1.5",style:{color:"var(--text-secondary)"},children:"Add New Parameter"}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("input",{value:z,onChange:$=>P($.target.value),className:"input-field text-[10px] font-mono flex-1",placeholder:"KEY_NAME","aria-label":"Parameter key name"}),r.jsx("input",{value:C,onChange:$=>O($.target.value),onKeyDown:$=>{$.key==="Enter"&&z.trim()&&C.trim()&&H()},className:"input-field text-[10px] font-mono flex-1",placeholder:"value",type:"password","aria-label":"Parameter value"}),r.jsx("button",{onClick:H,disabled:A||!z.trim()||!C.trim(),className:"text-[10px] font-medium px-2 py-1 rounded",style:{background:"var(--accent-muted)",color:"var(--accent)",border:"none",cursor:A?"not-allowed":"pointer"},children:"Add"})]})]})]})}function tb(t,a,s){const[i,c]=m.useState(null),[u,d]=m.useState(!1),f=m.useRef("");m.useEffect(()=>{const h=`${t}/${a}/${s}`;f.current!==h&&(f.current=h,d(!0),ke.getCaseHistory(t,a,s).then(v=>c(v)).catch(()=>c([])).finally(()=>d(!1)))},[t,a,s]);const x=m.useCallback(()=>{d(!0),f.current="",ke.getCaseHistory(t,a,s).then(h=>c(h)).catch(()=>c([])).finally(()=>d(!1))},[t,a,s]);return{entries:i,loading:u,refetch:x}}function wE(t,a,s){const i={flaky:!1,nonDiscriminating:!1,regression:!1};if(!s||s.length===0)return i;const u=s.slice(0,10).map(x=>x.assertions.find(h=>h.id===t)).filter(Boolean);if(u.length>=2){const h=u.filter(v=>v.pass).length/u.length;h>=.3&&h<=.7&&(i.flaky=!0)}const d=s.find(x=>x.type==="benchmark"),f=s.find(x=>x.type==="baseline");if(d&&f){const x=d.assertions.find(v=>v.id===t),h=f.assertions.find(v=>v.id===t);x!=null&&x.pass&&(h!=null&&h.pass)&&(i.nonDiscriminating=!0)}if(a&&!a.pass&&s.length>=1){const h=s[0].assertions.find(v=>v.id===t);h!=null&&h.pass&&(i.regression=!0)}return i}function CE({embedded:t=!1}={}){var M;const{state:a,dispatch:s,saveEvals:i,runCase:c,runAll:u,cancelCase:d,cancelAll:f,generateEvals:x,canEdit:h,canRun:v}=bn(),{evals:y,evalsError:b,selectedCaseId:S,inlineResults:w,caseRunStates:E,generateEvalsLoading:k,generateEvalsProgress:N,generateEvalsError:T}=a,A=m.useMemo(()=>{for(const U of E.values())if(U.status==="running"||U.status==="queued")return!0;return!1},[E]),[B,z]=m.useState(!1),[P,C]=m.useState("all"),O={skill_name:a.skill,evals:[]},L=y??O,_=L.evals,H=m.useMemo(()=>P==="all"?_:_.filter(U=>Dl(U)===P),[P,_]),W=H.find(U=>U.id===S)??null;m.useEffect(()=>{S!==null&&!H.find(U=>U.id===S)&&s({type:"SELECT_CASE",caseId:H.length>0?H[0].id:null})},[H,S,s]);const[q,ee]=m.useState([]),$=m.useMemo(()=>_.some(U=>Dl(U)==="integration"),[_]);m.useEffect(()=>{$&&ke.getCredentials(a.plugin,a.skill).then(U=>ee(U.credentials)).catch(()=>ee([]))},[a.plugin,a.skill,$]);const D=m.useMemo(()=>new Set(q.filter(U=>U.status==="missing").map(U=>U.name)),[q]),[I,F]=m.useState(!1),J=m.useCallback(U=>{F(!1),x(U?{testType:U}:void 0)},[x]);if(!y||_.length===0)return r.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-4 px-8",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center",style:{background:b?"var(--red-muted)":"var(--accent-muted)"},children:b?r.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),r.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}):r.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M9 11l3 3L22 4"}),r.jsx("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})]})}),r.jsx("div",{className:"text-center",children:b?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--red)"},children:"Invalid evals.json"}),r.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:b}),r.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"})]}):r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No test cases yet"}),r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Create test cases to start evaluating your skill"})]})}),h&&r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{onClick:()=>z(!0),className:"btn btn-primary text-[12px]",children:"Create Test Case"}),r.jsxs("div",{style:{position:"relative"},children:[r.jsxs("div",{className:"flex",children:[r.jsx("button",{onClick:()=>J("unit"),disabled:k,className:"btn btn-secondary text-[12px]",style:{borderTopRightRadius:0,borderBottomRightRadius:0},children:k?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"spinner",style:{width:12,height:12,borderWidth:1.5}})," Generating..."]}):"Generate Unit Tests"}),r.jsx("button",{onClick:()=>F(!I),disabled:k,className:"btn btn-secondary text-[12px]",style:{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:"1px solid var(--border-default)",padding:"4px 6px"},children:r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:r.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),I&&r.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:r.jsx("button",{onClick:()=>J("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"})})]})]}),k&&N.length>0&&r.jsx("div",{className:"w-full max-w-md mt-3",children:r.jsx(ui,{entries:N,isRunning:!0})}),T&&r.jsx("div",{className:"w-full max-w-md mt-3",children:r.jsx(dc,{error:T,onRetry:()=>J()})}),B&&r.jsx(nv,{evals:L,onSave:U=>{i(U),z(!1)},onCancel:()=>z(!1)})]});const de=!h&&!t&&y!=null&&r.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"," ",r.jsx("code",{style:{background:"var(--surface-1)",padding:"1px 5px",borderRadius:3,fontFamily:"var(--font-mono)"},children:"vskill plugin new"}),"."]});return r.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden"},children:[de,r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"280px 1fr",flex:1,minHeight:0,overflow:"hidden"},children:[r.jsxs("div",{className:"overflow-auto",style:{borderRight:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[r.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:[r.jsxs("span",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",flex:"1 1 auto",minWidth:0},children:["Test Cases (",H.length,")"]}),r.jsx("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,marginLeft:"auto",flexShrink:0},children:!t&&(A?r.jsx("button",{onClick:f,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"}):r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:()=>u("benchmark"),disabled:!v,className:"btn btn-primary text-[10px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Run All"}),h&&r.jsx("button",{onClick:()=>u("comparison"),disabled:!v,className:"btn btn-secondary text-[10px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Compare All"})]}))})]}),r.jsx("div",{className:"flex px-3 py-1.5 gap-1",style:{borderBottom:"1px solid var(--border-subtle)"},children:["all","unit","integration"].map(U=>r.jsx("button",{onClick:()=>C(U),style:{padding:"2px 8px",fontSize:10,fontWeight:P===U?600:400,background:P===U?"var(--accent-muted)":"transparent",color:P===U?"var(--accent)":"var(--text-tertiary)",border:"none",borderRadius:4,cursor:"pointer",textTransform:"capitalize"},children:U==="all"?`All (${_.length})`:U==="unit"?`Unit (${_.filter(K=>Dl(K)==="unit").length})`:`Integration (${_.filter(K=>Dl(K)==="integration").length})`},U))}),r.jsxs("div",{className:"py-1",children:[H.length===0&&_.length>0&&r.jsxs("div",{className:"flex items-center justify-center py-8 px-3 text-[12px]",style:{color:"var(--text-tertiary)"},children:["No ",P==="all"?"":P+" ","tests yet"]}),H.map(U=>{var Z;const K=w.get(U.id),Q=S===U.id,ce=Dl(U);return r.jsxs("button",{onClick:()=>s({type:"SELECT_CASE",caseId:U.id}),className:"w-full text-left px-3 py-2.5 transition-all duration-150",style:{background:Q?"var(--accent-muted)":"transparent",borderLeft:Q?"3px solid var(--accent)":"3px solid transparent"},onMouseEnter:ie=>{Q||(ie.currentTarget.style.background="var(--surface-2)")},onMouseLeave:ie=>{Q||(ie.currentTarget.style.background="transparent")},children:[r.jsxs("div",{className:"flex items-center justify-between gap-2 mb-0.5 min-w-0",children:[r.jsxs("span",{className:"text-[12px] font-medium flex items-center gap-1.5 min-w-0 flex-1",style:{color:Q?"var(--text-primary)":"var(--text-secondary)"},children:[r.jsxs("span",{className:"truncate min-w-0 flex-1",children:["#",U.id," ",U.name]}),r.jsx("span",{title:ce==="unit"?"Unit test":"Integration test","aria-label":ce==="unit"?"Unit test":"Integration test",style:{flexShrink:0,fontSize:9,fontWeight:600,padding:"1px 5px",borderRadius:9999,background:ce==="unit"?"var(--accent-muted)":"var(--orange-muted)",color:ce==="unit"?"var(--accent)":"var(--orange)",whiteSpace:"nowrap",letterSpacing:"0.02em"},children:ce==="unit"?"U":"I"}),ce==="integration"&&((Z=U.requiredCredentials)==null?void 0:Z.some(ie=>D.has(ie)))&&r.jsx("span",{title:"Configure credentials to run",style:{flexShrink:0,display:"inline-flex"},children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})})]}),r.jsx(nb,{result:K})]}),r.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":"",(K==null?void 0:K.passRate)!=null&&r.jsx(TE,{passRate:K.passRate})]})]},U.id)})]}),r.jsx("div",{className:"px-3 py-2",children:h&&r.jsx("button",{onClick:()=>z(!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"})}),r.jsx("div",{style:{borderTop:"1px solid var(--border-subtle)"},children:r.jsx(kE,{})})]}),r.jsx("div",{className:"overflow-auto",children:W?r.jsx(EE,{evalCase:W,result:w.get(W.id),evals:y,caseStatus:((M=E.get(W.id))==null?void 0:M.status)??"idle",onSaveEvals:i,onRun:U=>c(U,"benchmark"),onCompare:U=>c(U,"comparison"),onCancel:U=>d(U),onImprove:U=>s({type:"OPEN_IMPROVE",evalId:U}),embedded:t}):r.jsx("div",{className:"flex items-center justify-center h-full text-[13px]",style:{color:"var(--text-tertiary)"},children:"Select a test case"})}),B&&r.jsx(nv,{evals:L,onSave:U=>{i(U),z(!1)},onCancel:()=>z(!1)})]})]})}function EE({evalCase:t,result:a,evals:s,caseStatus:i,onSaveEvals:c,onRun:u,onCompare:d,onCancel:f,onImprove:x,embedded:h=!1}){const{state:v,canEdit:y,canRun:b}=bn(),{plugin:S,skill:w}=v,{entries:E,loading:k}=tb(S,w,t.id),[N,T]=m.useState(!1),[A,B]=m.useState(t.prompt),[z,P]=m.useState(!1),[C,O]=m.useState(t.expected_output);m.useState(()=>{B(t.prompt),O(t.expected_output)});const L=m.useCallback(M=>{c({...s,evals:s.evals.map(U=>U.id===M.id?M:U)})},[s,c]),_=m.useCallback(()=>{L({...t,prompt:A}),T(!1)},[t,A,L]),H=m.useCallback(()=>{L({...t,expected_output:C}),P(!1)},[t,C,L]),W=m.useCallback(()=>{L({...t,assertions:[...t.assertions,{id:`assert-${Date.now()}`,text:"New assertion",type:"boolean"}]})},[t,L]),q=m.useCallback((M,U)=>{L({...t,assertions:t.assertions.map(K=>K.id===M?{...K,text:U}:K)})},[t,L]),ee=m.useCallback(M=>{L({...t,assertions:t.assertions.filter(U=>U.id!==M)})},[t,L]),$=m.useCallback(()=>{confirm("Delete this test case?")&&c({...s,evals:s.evals.filter(M=>M.id!==t.id)})},[s,t.id,c]),D=a&&a.assertions.length>0&&a.assertions.every(M=>M.pass),I=a&&a.assertions.some(M=>!M.pass),F=Dl(t),J=t.requiredCredentials??[],de=F==="integration"&&J.length>0;return r.jsxs("div",{className:"p-5 animate-fade-in",children:[r.jsxs("div",{className:"mb-4",style:{display:"flex",flexWrap:"wrap",alignItems:"center",rowGap:8,columnGap:12},children:[r.jsxs("div",{className:"flex items-center gap-2",style:{flex:"1 1 240px",minWidth:0},children:[r.jsxs("span",{className:"text-[16px] font-semibold",title:`#${t.id} ${t.name}`,style:{color:"var(--text-primary)",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["#",t.id," ",t.name]}),y?r.jsx("button",{onClick:()=>{if((F==="unit"?"integration":"unit")==="unit"){const{requiredCredentials:U,requirements:K,cleanup:Q,...ce}=t;L({...ce,testType:"unit"})}else L({...t,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"}):r.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"}),r.jsx(nb,{result:a})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:8,marginLeft:"auto",flexShrink:0},children:[!h&&(i==="running"||i==="queued"?r.jsxs("button",{onClick:()=>f(t.id),className:"btn text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)",whiteSpace:"nowrap"},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:r.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"1"})}),"Cancel"]}):r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:()=>u(t.id),disabled:!b,className:"btn btn-primary text-[12px]",style:{whiteSpace:"nowrap"},children:"Run"}),y&&r.jsx("button",{onClick:()=>d(t.id),disabled:!b,className:"btn btn-secondary text-[12px]",style:{whiteSpace:"nowrap"},children:"A/B Compare"})]})),I&&y&&i!=="running"&&i!=="queued"&&r.jsx("button",{onClick:()=>x(t.id),className:"btn btn-secondary text-[12px]",style:{whiteSpace:"nowrap"},children:"Fix with AI"}),y&&i!=="running"&&i!=="queued"&&r.jsx("button",{onClick:$,className:"btn btn-ghost text-[12px]","aria-label":"Delete test case",title:"Delete test case",style:{color:"var(--red)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.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"})]})})]})]}),!y&&F==="integration"&&r.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:[r.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),r.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),r.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]}),r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--accent)"},children:"Run locally in vSkill Studio"})]}),D&&r.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:[r.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"2.5",children:[r.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),r.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--green)"},children:"All assertions passing"})]}),de&&r.jsxs("div",{className:"mb-4 px-4 py-3 rounded-xl",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--orange)"},children:"Required Credentials"})]}),r.jsx("div",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:"This integration test requires the following environment variables:"}),r.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1.5",children:J.map(M=>r.jsx("span",{style:{fontSize:10,fontFamily:"var(--font-mono, monospace)",padding:"2px 6px",borderRadius:4,background:"var(--orange-muted)",color:"var(--orange)"},children:M},M))})]}),y&&F==="integration"&&r.jsx(AE,{evalCase:t,onUpdate:L}),r.jsx(Ao,{title:"Prompt",children:N?r.jsxs("div",{children:[r.jsx("textarea",{value:A,onChange:M=>B(M.target.value),className:"input-field w-full",rows:4,style:{fontFamily:"var(--font-mono, ui-monospace, monospace)",fontSize:12},autoFocus:!0}),r.jsxs("div",{className:"flex gap-2 mt-2",children:[r.jsx("button",{onClick:_,className:"btn btn-primary text-[12px]",children:"Save"}),r.jsx("button",{onClick:()=>{B(t.prompt),T(!1)},className:"btn btn-ghost text-[12px]",children:"Cancel"})]})]}):r.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:y?"pointer":"default"},onClick:()=>{y&&T(!0)},onMouseEnter:M=>{y&&(M.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:M=>{M.currentTarget.style.borderColor="var(--border-subtle)"},children:t.prompt||r.jsx("span",{style:{color:"var(--text-tertiary)",fontStyle:"italic"},children:y?"Click to edit prompt...":"No prompt"})})}),r.jsx(Ao,{title:"Expected Output",children:z?r.jsxs("div",{children:[r.jsx("textarea",{value:C,onChange:M=>O(M.target.value),className:"input-field w-full",rows:3,style:{fontFamily:"var(--font-mono, ui-monospace, monospace)",fontSize:12},autoFocus:!0}),r.jsxs("div",{className:"flex gap-2 mt-2",children:[r.jsx("button",{onClick:H,className:"btn btn-primary text-[12px]",children:"Save"}),r.jsx("button",{onClick:()=>{O(t.expected_output),P(!1)},className:"btn btn-ghost text-[12px]",children:"Cancel"})]})]}):r.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:y?"pointer":"default"},onClick:()=>{y&&P(!0)},onMouseEnter:M=>{y&&(M.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:M=>{M.currentTarget.style.borderColor="var(--border-subtle)"},children:t.expected_output||r.jsx("span",{style:{fontStyle:"italic"},children:y?"Click to edit expected output...":"No expected output"})})}),r.jsx(Ao,{title:`Assertions (${t.assertions.length})`,action:y?r.jsx("button",{onClick:W,className:"btn btn-ghost text-[11px]",children:"+ Add"}):void 0,children:t.assertions.length===0?r.jsx("div",{className:"text-[12px] text-center py-4",style:{color:"var(--text-tertiary)"},children:'No assertions. Click "+ Add" to create one.'}):r.jsx("div",{className:"space-y-2",children:t.assertions.map(M=>{const U=a==null?void 0:a.assertions.find(Q=>Q.assertion_id===M.id),K=wE(M.id,U,E);return r.jsx(NE,{assertion:M,result:U,badges:K,isReadOnly:!y,onUpdate:Q=>q(M.id,Q),onDelete:()=>ee(M.id)},M.id)})})}),(a==null?void 0:a.output)&&r.jsx(RE,{output:a.output,durationMs:a.durationMs,tokens:a.tokens}),a&&a.passRate!=null&&a.passRate<.2&&(()=>{const M=Jy("INEFFECTIVE",a.passRate);return M.recommendations&&M.recommendations.length>0?r.jsx(Ao,{title:"Recommendations",children:r.jsxs("div",{className:"rounded-xl p-4",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--orange)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),r.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--orange)"},children:"This eval is significantly below expectations"})]}),r.jsx("ul",{className:"space-y-1.5 ml-1",children:M.recommendations.map((U,K)=>r.jsxs("li",{className:"flex items-start gap-2 text-[12px]",style:{color:"var(--text-secondary)"},children:[r.jsx("span",{style:{color:"var(--orange)",fontWeight:600,flexShrink:0},children:"•"}),U]},K))})]})}):null})(),!h&&r.jsx(rb,{evalId:t.id,sharedEntries:E,sharedLoading:k})]},t.id)}function NE({assertion:t,result:a,badges:s,isReadOnly:i,onUpdate:c,onDelete:u}){const[d,f]=m.useState(!1),[x,h]=m.useState(t.text),[v,y]=m.useState(!1),b=()=>{c(x),f(!1)};return r.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:r.jsxs("div",{className:"flex items-start gap-2",children:[a?r.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:18,height:18,display:"flex",alignItems:"center",justifyContent:"center",background:a.pass?"var(--green-muted)":"var(--red-muted)"},children:a.pass?r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}):r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}):r.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"}),(s==null?void 0:s.regression)&&r.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:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("polyline",{points:"19 12 12 19 5 12"})]})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[r.jsx("span",{className:"text-[10px] font-mono font-semibold",style:{color:"var(--text-tertiary)"},children:t.id}),(s==null?void 0:s.flaky)&&r.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"}),(s==null?void 0:s.nonDiscriminating)&&r.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."})]}),d?r.jsxs("div",{className:"flex gap-2",children:[r.jsx("input",{value:x,onChange:S=>h(S.target.value),onKeyDown:S=>{S.key==="Enter"&&b(),S.key==="Escape"&&f(!1)},className:"input-field flex-1 text-[12px]",autoFocus:!0}),r.jsx("button",{onClick:b,className:"btn btn-primary text-[11px]",children:"Save"})]}):r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-secondary)",cursor:i?"default":"pointer"},onClick:()=>{i||(h(t.text),f(!0))},children:t.text}),(a==null?void 0:a.reasoning)&&r.jsx("button",{onClick:()=>y(!v),className:"text-[11px] mt-1 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:v?"Hide reasoning":"Show reasoning"}),v&&(a==null?void 0:a.reasoning)&&r.jsx("div",{className:"mt-1 text-[11px] p-2 rounded",style:{background:"var(--surface-1)",color:"var(--text-tertiary)"},children:a.reasoning})]}),!i&&r.jsx("button",{onClick:u,className:"btn btn-ghost p-1 opacity-0 group-hover:opacity-100",style:{color:"var(--text-tertiary)"},onMouseEnter:S=>{S.currentTarget.style.color="var(--red)",S.currentTarget.style.opacity="1"},onMouseLeave:S=>{S.currentTarget.style.color="var(--text-tertiary)",S.currentTarget.style.opacity=""},children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})})}function Ao({title:t,action:a,children:s}){return r.jsxs("div",{className:"mb-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:t}),a]}),s]})}function nb({result:t}){const[a,s]=m.useState(!1),i={padding:"2px 8px",borderRadius:9999,flexShrink:0,minWidth:44,justifyContent:"center",position:"relative",cursor:"default"};if(!t||t.status==null)return r.jsx("span",{className:"pill text-[10px]",title:"Not run yet","aria-label":"Not run yet",style:{...i,background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"--"});const c=t.status==="pass",u=t.passRate??0,d=c?"PASS":"FAIL",f=Jy(d,u),x=t.passRate!=null?`${Math.round(t.passRate*100)}%`:d;return r.jsxs("span",{className:"pill text-[10px]",style:{...i,background:c?"var(--green-muted)":"var(--red-muted)",color:c?"var(--green)":"var(--red)",fontWeight:600},onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),"aria-label":`${d} ${x}`,"aria-describedby":a?"verdict-tooltip":void 0,children:[x,a&&r.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:f.explanation})]})}function TE({passRate:t}){const a=Math.round(t*100);return r.jsx("div",{className:"flex items-center gap-1",children:r.jsx("div",{className:"rounded-full overflow-hidden",style:{width:32,height:4,background:"var(--surface-4)"},children:r.jsx("div",{className:"h-full rounded-full",style:{width:`${a}%`,background:a>=80?"var(--green)":a>=50?"var(--yellow)":"var(--red)"}})})})}function RE({output:t,durationMs:a,tokens:s}){const[i,c]=m.useState(!1);return r.jsxs("div",{className:"mb-5",children:[r.jsxs("button",{onClick:()=>c(!i),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:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:i?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})}),"LLM Output",a!=null&&r.jsxs("span",{style:{fontWeight:400},children:["(",(a/1e3).toFixed(1),"s)"]}),s!=null&&r.jsxs("span",{style:{fontWeight:400},children:["(",s," tokens)"]})]}),i&&r.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:t})]})}function Vd(t){return t==="baseline"?"right":t==="comparison"?"full":"left"}function Fd({entry:t}){return r.jsxs("div",{className:"rounded-lg px-3 py-2.5",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:Xy(t.timestamp)}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:t.model}),r.jsx("span",{className:"pill",style:{fontSize:9,padding:"1px 6px",background:t.type==="benchmark"?"var(--accent-muted)":t.type==="comparison"?"var(--purple-muted)":"var(--orange-muted)",color:t.type==="benchmark"?"var(--accent)":t.type==="comparison"?"var(--purple)":"var(--orange)"},children:t.type}),r.jsxs("span",{className:"text-[12px] font-semibold ml-auto",style:{color:Ul(t.pass_rate)},children:[Math.round(t.pass_rate*100),"%"]})]}),r.jsxs("div",{className:"flex items-center gap-4 mb-1.5 text-[10px]",style:{fontFamily:"var(--font-mono, monospace)",color:"var(--text-tertiary)"},children:[t.durationMs!=null&&r.jsx("span",{children:Qy(t.durationMs)}),t.tokens!=null&&r.jsxs("span",{children:[t.tokens>=1e3?`${(t.tokens/1e3).toFixed(1)}k`:t.tokens," tok"]})]}),t.type==="comparison"&&t.baselinePassRate!=null&&(()=>{const a=t.pass_rate-t.baselinePassRate,s=a>.001?"skill":a<-.001?"baseline":"tie",i=a>0?"+":"",c=s==="skill"?"var(--green)":s==="baseline"?"var(--red)":"var(--text-tertiary)";return r.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"vs baseline:"}),r.jsxs("span",{className:"text-[11px] font-semibold",style:{color:a>=0?"var(--green)":"var(--red)"},children:[i,(a*100).toFixed(1),"%"]}),r.jsx("span",{className:"pill text-[9px]",style:{padding:"1px 5px",background:"var(--surface-3)",color:c},children:s})]})})(),r.jsx("div",{className:"space-y-0.5",children:t.assertions.map(a=>r.jsxs("div",{className:"flex items-start gap-1.5",children:[r.jsx("span",{className:"mt-0.5 rounded-full flex-shrink-0",style:{width:14,height:14,display:"flex",alignItems:"center",justifyContent:"center",background:a.pass?"var(--green-muted)":"var(--red-muted)"},children:a.pass?r.jsx("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}):r.jsxs("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:a.text})]},a.id))})]})}function rb({evalId:t,sharedEntries:a,sharedLoading:s}){const{state:i,dispatch:c}=bn(),{plugin:u,skill:d}=i,[f,x]=m.useState(!0),h=a??null,v=s??!1,y=m.useCallback(()=>{x(E=>!E)},[]),b=h?h.slice(0,10):[],S=b.some(E=>{const k=Vd(E.type);return k==="left"||k==="full"}),w=b.some(E=>{const k=Vd(E.type);return k==="right"||k==="full"});return r.jsxs("div",{className:"mb-5",children:[r.jsxs("button",{onClick:y,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:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{transform:f?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease"},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})}),"Execution History",h&&h.length>0&&r.jsxs("span",{style:{fontWeight:400},children:["(",h.length," run",h.length!==1?"s":"",")"]})]}),f&&r.jsx("div",{className:"animate-fade-in",children:v?r.jsxs("div",{className:"flex items-center gap-2 py-3",children:[r.jsx("div",{className:"spinner",style:{width:14,height:14,borderWidth:1.5}}),r.jsx("span",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Loading history..."})]}):!h||h.length===0?r.jsx("div",{className:"text-[12px] py-3",style:{color:"var(--text-tertiary)"},children:"No history for this case"}):r.jsxs("div",{children:[b.length>=2&&r.jsx("div",{className:"mb-2",children:r.jsx(Zy,{entries:b})}),r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",gridColumn:"1"},children:"Skill"}),r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)",gridColumn:"2"},children:"Baseline"}),!S&&r.jsx("div",{style:{gridColumn:"1",fontSize:12,color:"var(--text-tertiary)"},children:"No skill runs"}),!w&&r.jsx("div",{style:{gridColumn:"2",fontSize:12,color:"var(--text-tertiary)"},children:"No baseline runs"}),b.map((E,k)=>{const N=Vd(E.type);return N==="full"?r.jsx("div",{style:{gridColumn:"1 / -1"},children:r.jsx(Fd,{entry:E})},k):N==="left"?r.jsxs(m.Fragment,{children:[r.jsx("div",{style:{gridColumn:"1"},children:r.jsx(Fd,{entry:E})}),r.jsx("div",{style:{gridColumn:"2"}})]},k):r.jsxs(m.Fragment,{children:[r.jsx("div",{style:{gridColumn:"1"}}),r.jsx("div",{style:{gridColumn:"2"},children:r.jsx(Fd,{entry:E})})]},k)})]}),r.jsx("button",{onClick:()=>c({type:"SET_PANEL",panel:"history"}),className:"mt-2 text-[11px] font-medium transition-colors duration-150",style:{color:"var(--accent)"},onMouseEnter:E=>{E.currentTarget.style.textDecoration="underline"},onMouseLeave:E=>{E.currentTarget.style.textDecoration="none"},children:"View full history →"})]})})]})}function nv({evals:t,onSave:a,onCancel:s}){const[i,c]=m.useState(""),[u,d]=m.useState(""),[f,x]=m.useState(""),[h,v]=m.useState([{id:`assert-${Date.now()}`,text:"",type:"boolean"}]),[y,b]=m.useState("unit"),[S,w]=m.useState(""),[E,k]=m.useState([]),[N,T]=m.useState(""),[A,B]=m.useState(""),z=Math.max(0,...t.evals.map(L=>L.id))+1,P=L=>{b(L),L==="unit"&&(k([]),w(""),T(""),B(""))},C=()=>{const L=S.trim().toUpperCase();L&&!E.includes(L)&&k([...E,L]),w("")},O=()=>{if(!i.trim()||!u.trim())return;const L={id:z,name:i.trim(),prompt:u.trim(),expected_output:f.trim(),files:[],assertions:h.filter(_=>_.text.trim()),...y==="integration"?{testType:"integration",...E.length>0?{requiredCredentials:E}:{},...N||A?{requirements:{...N?{platform:N}:{},...A?{chromeProfile:A}:{}}}:{}}:{}};a({...t,evals:[...t.evals,L]})};return r.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:r.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:[r.jsx("div",{className:"text-[15px] font-semibold mb-4",style:{color:"var(--text-primary)"},children:"New Test Case"}),r.jsxs("div",{className:"mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1.5 block",style:{color:"var(--text-tertiary)"},children:"Type"}),r.jsx("div",{className:"flex gap-1 p-0.5 rounded-lg",style:{background:"var(--surface-2)",display:"inline-flex"},children:["unit","integration"].map(L=>r.jsx("button",{onClick:()=>P(L),className:"px-3 py-1 rounded-md text-[12px] font-medium transition-all duration-150",style:{background:y===L?L==="unit"?"var(--accent-muted)":"var(--orange-muted)":"transparent",color:y===L?L==="unit"?"var(--accent)":"var(--orange)":"var(--text-tertiary)",border:"none",cursor:"pointer",textTransform:"capitalize"},children:L},L))})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Name"}),r.jsx("input",{value:i,onChange:L=>c(L.target.value),className:"input-field",placeholder:"e.g., auth-check",autoFocus:!0})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Prompt"}),r.jsx("textarea",{value:u,onChange:L=>d(L.target.value),className:"input-field",rows:3,placeholder:"User prompt to test..."})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Expected Output"}),r.jsx("textarea",{value:f,onChange:L=>x(L.target.value),className:"input-field",rows:2,placeholder:"Description of expected behavior..."})]}),r.jsxs("div",{className:"mb-4",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Assertions"}),h.map((L,_)=>r.jsxs("div",{className:"flex gap-2 mb-2",children:[r.jsx("input",{value:L.text,onChange:H=>v(h.map((W,q)=>q===_?{...W,text:H.target.value}:W)),className:"input-field flex-1 text-[12px]",placeholder:"e.g., Output includes a greeting"}),h.length>1&&r.jsx("button",{onClick:()=>v(h.filter((H,W)=>W!==_)),className:"btn btn-ghost p-1",style:{color:"var(--text-tertiary)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},L.id)),r.jsx("button",{onClick:()=>v([...h,{id:`assert-${Date.now()}`,text:"",type:"boolean"}]),className:"text-[11px] mt-1 transition-colors duration-150",style:{color:"var(--accent)"},children:"+ Add Assertion"})]}),y==="integration"&&r.jsxs("div",{className:"mb-4 p-3 rounded-lg",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--orange)"},children:"Integration Settings"}),r.jsxs("div",{className:"mb-3",children:[r.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Required Credentials"}),r.jsx("div",{className:"flex flex-wrap gap-1.5 mb-1.5",children:E.map(L=>r.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:[L,r.jsx("button",{onClick:()=>k(E.filter(_=>_!==L)),style:{color:"var(--orange)",lineHeight:1},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},L))}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("input",{value:S,onChange:L=>w(L.target.value),onKeyDown:L=>{L.key==="Enter"&&(L.preventDefault(),C())},className:"input-field flex-1 text-[11px] font-mono",placeholder:"e.g., SLACK_BOT_TOKEN"}),r.jsx("button",{onClick:C,className:"btn btn-ghost text-[11px]",style:{color:"var(--orange)"},children:"Add"})]})]}),r.jsxs("label",{className:"block mb-3",children:[r.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Platform"}),r.jsx("input",{value:N,onChange:L=>T(L.target.value),className:"input-field text-[11px]",placeholder:"e.g., linkedin, twitter"})]}),r.jsxs("label",{className:"block",children:[r.jsx("span",{className:"text-[11px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Chrome Profile"}),r.jsx("input",{value:A,onChange:L=>B(L.target.value),className:"input-field text-[11px]",placeholder:"e.g., Default"})]})]}),r.jsxs("div",{className:"flex justify-end gap-2",children:[r.jsx("button",{onClick:s,className:"btn btn-secondary text-[12px]",children:"Cancel"}),r.jsx("button",{onClick:O,disabled:!i.trim()||!u.trim(),className:"btn btn-primary text-[12px]",children:"Save"})]})]})})}function AE({evalCase:t,onUpdate:a}){var d,f;const[s,i]=m.useState(""),c=()=>{const x=s.trim().toUpperCase();x&&!(t.requiredCredentials??[]).includes(x)&&a({...t,requiredCredentials:[...t.requiredCredentials??[],x]}),i("")},u=x=>{const h=(t.requiredCredentials??[]).filter(v=>v!==x);a({...t,requiredCredentials:h.length>0?h:void 0})};return r.jsxs("div",{className:"mb-4 p-3 rounded-lg",style:{background:"var(--orange-muted)",border:"1px solid var(--orange-muted)"},children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 block",style:{color:"var(--orange)"},children:"Integration Settings"}),r.jsxs("div",{className:"mb-2.5",children:[r.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Required Credentials"}),r.jsx("div",{className:"flex flex-wrap gap-1.5 mb-1.5",children:(t.requiredCredentials??[]).map(x=>r.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:[x,r.jsx("button",{onClick:()=>u(x),style:{color:"var(--orange)",lineHeight:1},children:r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},x))}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("input",{value:s,onChange:x=>i(x.target.value),onKeyDown:x=>{x.key==="Enter"&&(x.preventDefault(),c())},className:"input-field flex-1 text-[11px] font-mono",placeholder:"e.g., GITHUB_TOKEN"}),r.jsx("button",{onClick:c,className:"btn btn-ghost text-[11px]",style:{color:"var(--orange)"},children:"Add"})]})]}),r.jsxs("div",{className:"mb-2.5",children:[r.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Platform"}),r.jsx("input",{value:((d=t.requirements)==null?void 0:d.platform)??"",onChange:x=>a({...t,requirements:{...t.requirements,platform:x.target.value||void 0}}),className:"input-field text-[11px]",placeholder:"e.g., linkedin, twitter"})]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-[10px] mb-1 block",style:{color:"var(--text-secondary)"},children:"Chrome Profile"}),r.jsx("input",{value:((f=t.requirements)==null?void 0:f.chromeProfile)??"",onChange:x=>a({...t,requirements:{...t.requirements,chromeProfile:x.target.value||void 0}}),className:"input-field text-[11px]",placeholder:"e.g., Default"})]})]})}function Gd(t,a){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function LE({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"16 18 22 12 16 6"}),r.jsx("polyline",{points:"8 6 2 12 8 18"})]})}function ME({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),r.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"21"})]})}function zE({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),r.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function DE({size:t=15}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M15 4V2"}),r.jsx("path",{d:"M15 16v-2"}),r.jsx("path",{d:"M8 9h2"}),r.jsx("path",{d:"M20 9h2"}),r.jsx("path",{d:"M17.8 11.8L19 13"}),r.jsx("path",{d:"M15 9h.01"}),r.jsx("path",{d:"M17.8 6.2L19 5"}),r.jsx("path",{d:"M11 6.2L9.7 5"}),r.jsx("path",{d:"M3 21l9-9"})]})}function Wd({size:t=15}){return r.jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("path",{d:"M12 3l1.5 5.5L19 10l-5.5 1.5L12 17l-1.5-5.5L5 10l5.5-1.5L12 3z"})})}function _E(){const{state:t,dispatch:a,saveContent:s,isReadOnly:i}=bn(),{plugin:c,skill:u,skillContent:d,isDirty:f,improveTarget:x,aiEditOpen:h}=t,[v,y]=m.useState("split"),[b,S]=m.useState(!1),w=m.useRef(null),[E,k]=m.useState(!1),[N,T]=m.useState(""),[A,B]=m.useState(!1),[z,P]=m.useState(null),[C,O]=m.useState([]),[L,_]=m.useState([]),[H,W]=m.useState(null),q=m.useRef(null),{config:ee}=Ya(),$=xE(),{files:D,activeFile:I,secondaryContent:F,loading:J,error:de,loadError:M,selectFile:U,refresh:K,isSkillMd:Q}=nE(c??"",u??""),[ce,Z]=m.useState(!1),ie=m.useCallback(xe=>{ce&&!window.confirm("You have unsaved changes. Discard?")||U(xe)},[ce,U]);m.useEffect(()=>()=>{var xe;(xe=q.current)==null||xe.abort()},[]);const{metadata:X,body:me}=GC(d),je=X["allowed-tools"],Ne=Array.isArray(je)?je:typeof je=="string"?[je]:[],Me=X.name,Fe=X.description,Ue=X.metadata,De=typeof Ue=="object"&&!Array.isArray(Ue)?Ue:null,Ge=X.version||(De==null?void 0:De.version),ft=X.tags||(De==null?void 0:De.tags),oe=Array.isArray(ft)?ft:typeof ft=="string"?ft.split(",").map(xe=>xe.trim()).filter(Boolean):[],ve=new Set(["name","description","metadata","allowed-tools","version","tags"]),ye=Object.entries(X).filter(([xe])=>!ve.has(xe)),be=m.useCallback(async()=>{const{contentToSave:xe,version:Ze,fromVersion:Xe}=yE(d,t.savedContent);if(Ze!==null){const kt=vE(Xe,Ze);if(!kt.valid){Gd(`Save blocked: ${kt.reason??"invalid version transition"}`,"error");return}}S(!0),await s(xe),S(!1),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:content-saved",{detail:{plugin:c,skill:u,version:Ze}}))},[s,d,t.savedContent,c,u]),Ee=m.useCallback(xe=>{const Ze=Yo(d)??"1.0.0";let Xe;try{Xe=Ps(Ze,xe)}catch(_t){const lt=_t instanceof Error?_t.message:String(_t);Gd(`Bump failed: ${lt}`,"error");return}const kt=Ky(d,Xe);a({type:"SET_CONTENT",content:kt}),Gd(`Bumped to v${Xe} (${xe}). Click Save to commit.`,"info")},[d,a]),qe=m.useCallback(xe=>{(xe.ctrlKey||xe.metaKey)&&xe.key==="s"&&(xe.preventDefault(),xe.stopPropagation(),f&&be()),(xe.ctrlKey||xe.metaKey)&&xe.key==="k"&&(xe.preventDefault(),xe.stopPropagation(),a({type:h?"CLOSE_AI_EDIT":"OPEN_AI_EDIT"}))},[f,be,h,a]),He=m.useCallback(async()=>{var Ze,Xe;if(!N.trim())return;(Ze=q.current)==null||Ze.abort();const xe=new AbortController;q.current=xe,B(!0),W(null),_([]),P(null),O([]);try{const kt=(ee==null?void 0:ee.provider)||"claude-cli",_t=(ee==null?void 0:ee.model)||"sonnet",lt=await fetch("/api/skills/generate?sse",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:N,provider:kt,model:_t}),signal:xe.signal});if(!lt.ok||!lt.body){let ur=`HTTP ${lt.status}`;try{const Tn=await lt.json();Tn.error&&(ur=Tn.error)}catch{}throw new Error(ur)}const jn=lt.body.getReader(),Yt=new TextDecoder;let mn="",un="";for(;;){const{done:ur,value:Tn}=await jn.read();if(ur)break;mn+=Yt.decode(Tn,{stream:!0});const Hn=mn.split(`
|
|
98
98
|
`);mn=Hn.pop()||"";for(const Rn of Hn)if(Rn.startsWith("event: "))un=Rn.slice(7).trim();else if(Rn.startsWith("data: ")){try{const wt=JSON.parse(Rn.slice(6));if(un==="progress")_(Be=>[...Be,{phase:wt.phase,message:wt.message,timestamp:Date.now()}]);else if(un==="done"||un==="complete"){const Be=["---"];wt.name&&Be.push(`name: ${wt.name}`),wt.description&&Be.push(`description: "${wt.description.replace(/"/g,'\\"')}"`),wt.model&&Be.push(`model: ${wt.model}`),(Xe=wt.allowedTools)!=null&&Xe.trim()&&Be.push(`allowed-tools: ${wt.allowedTools.trim()}`),Be.push("---","",wt.body||"");const Je=Be.join(`
|
|
99
|
-
`);P(Je),O(uc(d,Je)),B(!1)}else un==="error"&&(W(wt.message||wt.description||"Generation failed"),B(!1))}catch{}un=""}}}catch(kt){kt.name!=="AbortError"&&W(kt.message)}finally{B(!1),q.current=null}},[N,ee,d]),jt=m.useCallback(()=>{z&&a({type:"SET_CONTENT",content:z}),k(!1),P(null),O([]),T(""),_([])},[z,a]),Dt=m.useCallback(()=>{k(!1),P(null),O([]),T(""),_([]),W(null)},[]),St=m.useCallback(()=>{var xe;E?((xe=q.current)==null||xe.abort(),Dt()):(h&&a({type:"CLOSE_AI_EDIT"}),k(!0))},[E,h,a,Dt]),At=[{mode:"raw",icon:r.jsx(AE,{}),label:"Editor"},{mode:"split",icon:r.jsx(LE,{}),label:"Split"},{mode:"preview",icon:r.jsx(ME,{}),label:"Preview"}];return r.jsxs("div",{className:"flex flex-col",style:{height:"100%",overflow:"auto"},onKeyDown:qe,tabIndex:-1,children:[r.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:[r.jsx("div",{className:"flex items-center",style:{background:"var(--surface-2)",borderRadius:8,padding:2,gap:1},children:At.map(({mode:xe,icon:Ze,label:Xe})=>r.jsxs("button",{onClick:()=>y(xe),title:Xe,className:"flex items-center gap-1.5 rounded-md transition-all duration-150",style:{padding:"5px 10px",background:v===xe?"var(--surface-4)":"transparent",color:v===xe?"var(--text-primary)":"var(--text-tertiary)",fontSize:11,fontWeight:v===xe?600:400,border:"none",cursor:"pointer"},children:[Ze,r.jsx("span",{style:{letterSpacing:"0.01em"},children:Xe})]},xe))}),Q?i?r.jsx("div",{className:"flex items-center gap-2",children:r.jsxs("span",{className:"flex items-center gap-1.5 text-[11px]",style:{color:"var(--text-tertiary)"},children:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Read-only"]})}):r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsxs("button",{onClick:()=>{h?a({type:"CLOSE_AI_EDIT"}):(E&&Dt(),a({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:h?600:400,border:"none",cursor:"pointer",color:h?"var(--purple)":"var(--text-tertiary)",background:h?"var(--purple-muted)":"transparent"},children:[r.jsx(zE,{size:13}),r.jsx("span",{children:"AI Edit"})]}),r.jsxs("button",{onClick:St,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:E?600:400,border:"none",cursor:"pointer",color:E?"var(--purple)":"var(--text-tertiary)",background:E?"var(--purple-muted)":"transparent"},children:[r.jsx(Wd,{size:13}),r.jsx("span",{children:"Regenerate"})]}),r.jsx("div",{style:{width:1,height:16,background:"var(--border-subtle)"}}),!i&&(()=>{const xe=Yo(d)??"1.0.0";let Ze=xe,Xe=xe,kt=xe;try{Ze=Ps(xe,"patch"),Xe=Ps(xe,"minor"),kt=Ps(xe,"major")}catch{}const _t={padding:"4px 8px"};return r.jsxs("div",{style:{display:"inline-flex",gap:2,alignItems:"center"},"aria-label":"Version bump","data-testid":"version-bump-controls",children:[r.jsx("button",{type:"button",onClick:()=>Ee("patch"),title:`Bump patch: ${xe} → ${Ze}`,"aria-label":"Bump patch version",className:"btn btn-ghost text-[11px]",style:_t,children:"+patch"}),r.jsx("button",{type:"button",onClick:()=>Ee("minor"),title:`Bump minor: ${xe} → ${Xe}`,"aria-label":"Bump minor version",className:"btn btn-ghost text-[11px]",style:_t,children:"+minor"}),r.jsx("button",{type:"button",onClick:()=>Ee("major"),title:`Bump major: ${xe} → ${kt}`,"aria-label":"Bump major version",className:"btn btn-ghost text-[11px]",style:_t,children:"+major"})]})})(),f&&r.jsx("button",{onClick:()=>a({type:"SET_CONTENT",content:t.savedContent}),className:"btn btn-ghost text-[11px]",style:{padding:"4px 8px"},children:"Discard"}),r.jsx("button",{onClick:be,disabled:!f||b,className:"btn btn-primary text-[11px]",style:{padding:"5px 14px"},children:b?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"spinner",style:{width:11,height:11,borderWidth:1.5}})," Saving..."]}):"Save"}),$.hasRemote&&$.remoteUrl&&r.jsx(qy,{remoteUrl:$.remoteUrl,provider:ee==null?void 0:ee.provider,model:ee==null?void 0:ee.model})]}):null]}),c&&u&&r.jsx(sE,{files:D,activeFile:I,onSelect:ie,onRefresh:K,loadError:M}),!Q&&r.jsx(cE,{file:F,loading:J,error:de,viewMode:v,plugin:c??void 0,skill:u??void 0,onSaved:()=>{U(I),K()},onDirtyChange:Z}),Q&&r.jsxs("div",{className:"flex-1 overflow-hidden",style:{display:"grid",gridTemplateColumns:v==="raw"||v==="preview"?"1fr":"1fr 1fr",minHeight:"60vh"},children:[v!=="preview"&&r.jsx("div",{className:"flex flex-col overflow-hidden",style:{borderRight:v==="split"?"1px solid var(--border-subtle)":"none"},children:r.jsx("textarea",{ref:w,value:d,onChange:xe=>{!i&&!b&&a({type:"SET_CONTENT",content:xe.target.value})},onKeyDown:qe,spellCheck:!1,readOnly:i||b,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:i?.7:1}})}),v!=="raw"&&r.jsx("div",{className:"overflow-auto",style:{background:"var(--surface-0)"},children:r.jsxs("div",{className:"animate-fade-in",style:{padding:"20px 24px",maxWidth:720},children:[(Me||Ge||Fe)&&r.jsxs("div",{style:{marginBottom:20},children:[r.jsxs("div",{className:"flex items-baseline gap-3",style:{marginBottom:8},children:[Me&&r.jsx("h2",{style:{fontSize:18,fontWeight:700,color:"var(--text-primary)",letterSpacing:"-0.02em",lineHeight:1.2,margin:0},children:Me}),Ge&&r.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",Ge]})]}),Fe&&r.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:Fe})]}),oe.length>0&&r.jsx("div",{className:"flex flex-wrap items-center gap-1.5",style:{marginBottom:16},children:oe.map(xe=>r.jsx("span",{style:{fontSize:10,fontWeight:500,color:"var(--text-tertiary)",background:"var(--surface-2)",padding:"3px 8px",borderRadius:4,letterSpacing:"0.02em"},children:xe},xe))}),Ne.length>0&&r.jsx("div",{style:{marginBottom:16},children:r.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[r.jsx("span",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-tertiary)",marginRight:4},children:"Tools"}),Ne.map(xe=>r.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:xe},xe))]})}),ye.length>0&&r.jsx("div",{style:{marginBottom:16,padding:"8px 0",borderTop:"1px solid var(--border-subtle)",borderBottom:"1px solid var(--border-subtle)"},children:ye.map(([xe,Ze],Xe)=>{const kt=Array.isArray(Ze)?Ze.join(", "):typeof Ze=="object"?Object.entries(Ze).map(([_t,lt])=>`${_t}: ${Array.isArray(lt)?lt.join(", "):lt}`).join(" | "):Ze;return r.jsxs("div",{className:"flex items-baseline gap-3",style:{padding:"4px 0",borderTop:Xe>0?"1px solid var(--border-subtle)":"none"},children:[r.jsx("span",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-tertiary)",minWidth:80,flexShrink:0},children:xe}),r.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:kt})]},xe)})}),(Me||Fe||oe.length>0||Ne.length>0||ye.length>0)&&me&&r.jsx("div",{style:{height:1,background:"linear-gradient(90deg, var(--accent) 0%, var(--border-subtle) 40%, transparent 100%)",marginBottom:20,opacity:.5}}),me&&r.jsx("div",{className:"text-[13px] leading-relaxed overflow-x-auto",style:{color:"var(--text-secondary)",wordBreak:"break-word"},dangerouslySetInnerHTML:{__html:cc(me)}})]})})]}),Q&&h&&r.jsx(eE,{}),Q&&E&&r.jsx("div",{className:"animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:r.jsxs("div",{className:"px-4 py-3",children:[!z&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsx(Wd,{size:14}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"Regenerate Skill"})]}),r.jsx("div",{className:"flex gap-2 mb-2",children:r.jsx("textarea",{value:N,onChange:xe=>T(xe.target.value),placeholder:"Describe what this skill should do...",rows:2,disabled:A,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:A?.5:1},onKeyDown:xe=>{xe.key==="Enter"&&(xe.ctrlKey||xe.metaKey)&&N.trim()&&!A&&(xe.preventDefault(),He())}})}),r.jsxs("div",{className:"flex items-center gap-2",children:[A?r.jsx("button",{onClick:()=>{var xe;(xe=q.current)==null||xe.abort(),B(!1)},className:"btn btn-secondary text-[11px]",style:{padding:"4px 12px"},children:"Cancel"}):r.jsx("button",{onClick:He,disabled:!N.trim(),className:"btn btn-primary text-[11px]",style:{padding:"4px 12px"},children:"Generate"}),r.jsx("button",{onClick:Dt,className:"btn btn-ghost text-[11px]",style:{padding:"4px 8px"},children:"Close"})]}),A&&L.length>0&&r.jsx("div",{className:"mt-2",children:r.jsx(ui,{entries:L,isRunning:!0})}),H&&r.jsxs("div",{className:"mt-2 px-3 py-2 rounded-lg text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:[H,r.jsx("button",{onClick:He,className:"ml-2 underline",style:{color:"var(--red)"},children:"Retry"})]})]}),z&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsx(Wd,{size:14}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"Regenerated — Review Changes"})]}),r.jsx("div",{className:"rounded-lg overflow-hidden mb-3",style:{border:"1px solid var(--border-subtle)",maxHeight:"300px",overflowY:"auto"},children:C.map((xe,Ze)=>r.jsxs("div",{className:"px-3 py-0.5 text-[11px] font-mono",style:{background:xe.type==="added"?"var(--green-muted)":xe.type==="removed"?"var(--red-muted)":"transparent",color:xe.type==="added"?"var(--green)":xe.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:xe.type==="added"?"3px solid var(--green)":xe.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[r.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:xe.type==="added"?"+":xe.type==="removed"?"-":" "}),xe.content]},Ze))}),r.jsxs("div",{className:"flex gap-2",children:[r.jsxs("button",{onClick:jt,className:"btn btn-primary text-[11px]",style:{padding:"4px 12px"},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Apply"]}),r.jsx("button",{onClick:Dt,className:"btn btn-secondary text-[11px]",style:{padding:"4px 12px"},children:"Discard"})]})]})]})}),Q&&x!==null&&c&&u&&r.jsx("div",{style:{borderTop:"1px solid var(--border-subtle)"},children:r.jsx(qC,{plugin:c,skill:u,skillContent:d,onApplied:xe=>{a({type:"SET_CONTENT",content:xe}),a({type:"CONTENT_SAVED"}),a({type:"CLOSE_IMPROVE"})}})}),Q&&r.jsx(_E,{})]})}function _E(){var x;const[t,a]=m.useState(()=>{var h;return typeof window>"u"?!1:((h=window.localStorage)==null?void 0:h.getItem("vskill:editor-eval-cases-open"))==="1"}),{state:s,canEdit:i}=bn(),c=((x=s.evals)==null?void 0:x.evals)??[],u=h=>{var y;const v=h.currentTarget.open;if(a(v),typeof window<"u")try{(y=window.localStorage)==null||y.setItem("vskill:editor-eval-cases-open",v?"1":"0")}catch{}},d=m.useCallback(h=>{var b;if((b=h.preventDefault)==null||b.call(h),typeof window>"u")return;const v=new URLSearchParams(window.location.search);v.set("tab","run"),v.set("mode","benchmark"),v.set("autorun","1");const y=`${window.location.pathname}?${v.toString()}${window.location.hash}`;window.history.replaceState(null,"",y),window.dispatchEvent(new PopStateEvent("popstate"))},[]),f=i&&c.length>0;return r.jsxs("details",{"data-testid":"editor-eval-cases-section",open:t,onToggle:u,style:{borderTop:"1px solid var(--border-subtle)",background:"var(--bg-canvas)"},children:[r.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:t?"1px solid var(--border-subtle)":"none",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[r.jsx("span",{children:"Eval cases"}),f&&r.jsx("button",{type:"button","data-testid":"editor-eval-cases-run-all",onClick:d,title:"Run all → opens Run tab",className:"btn btn-primary text-[11px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Run all"})]}),t&&r.jsx("div",{"data-testid":"editor-eval-cases-body",style:{height:520,overflow:"hidden"},children:r.jsx(wE,{embedded:!0})})]})}function Un(t,a){return a==="free"?"Free":a==="subscription"&&t==null?"Included":t==null?"N/A":t>=1?`$${t.toFixed(2)}`:t===0?"$0.00":t>=.001?`$${t.toFixed(4)}`:`$${t.toPrecision(3).replace(/0+$/,"").replace(/\.$/,"")}`}function ab(t,a){return t==null||a==null?"N/A":`${t.toLocaleString("en-US")} in / ${a.toLocaleString("en-US")} out`}function OE({evalId:t}){const{state:a}=bn(),{entries:s,loading:i}=tb(a.plugin,a.skill,t),c=!!s&&s.length>0;return!i&&!c?null:r.jsx("div",{"data-testid":`run-case-history-${t}`,className:"mt-2 ml-3 pl-3",style:{borderLeft:"1px solid var(--border-subtle)"},children:r.jsx(rb,{evalId:t,sharedEntries:s,sharedLoading:i})})}function BE(t){return t==="baseline"?"Baseline Pass Rate":"Skill Pass Rate"}function IE(t,a){let s="";if(a){const c=new Date(a);isNaN(c.getTime())||(s=c.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}))}return[t,s].filter(Boolean).join(" · ")}function $E(t,a,s){const i=s===1?"test case":"test cases";if(t===0)return`Your skill performs the same as the baseline across ${s} ${i}`;const c=Math.round(Math.abs(t)*a);if(c===0)return`Your skill performs the same as the baseline across ${s} ${i}`;const u=t>0?"more":"fewer";return`Your skill passes ${c} ${u} assertions across ${s} ${i}`}function rv(t,a){const s=i=>{const c=i/5*100;return isFinite(c)?Math.round(Math.min(100,Math.max(0,c))):0};return{skill:s(t),baseline:s(a)}}function UE(t){return t==="skill"?{text:"Skill wins",isSkill:!0}:t==="baseline"?{text:"Baseline wins",isSkill:!1}:{text:"Tie",isSkill:!1}}function HE(t,a){const s=t+a,i=s*10,c=s*25,u=d=>d>=60?`${Math.round(d/60)}m`:`${d}s`;return`${u(i)}–${u(c)}`}const PE={anthropic:.01,openrouter:.01,ollama:0,"lm-studio":0,"claude-cli":0,"codex-cli":0,"gemini-cli":0};function VE(t,a){if(!t)return null;const s=PE[t];if(s==null||s===0)return null;const i=s*a*.5,c=s*a*2;return`${Un(i)}–${Un(c)}`}function FE(){const{state:t,runCase:a,runAll:s,cancelCase:i,cancelAll:c,canEdit:u,canRun:d}=bn(),{evals:f,caseRunStates:x,bulkRunActive:h,latestBenchmark:v,inlineResults:y}=t,{config:b}=Ya(),S=(f==null?void 0:f.evals)??[],w=m.useMemo(()=>{for(const O of x.values())if(O.status==="running"||O.status==="queued")return!0;return!1},[x]),E=S.filter(O=>{const L=x.get(O.id);return L&&(L.status==="complete"||L.status==="error"||L.status==="cancelled")}).length,k=S.filter(O=>{const L=x.get(O.id);return L&&(L.status==="running"||L.status==="queued")}).length,N=m.useRef(null),[T,A]=m.useState(0);m.useEffect(()=>{if(w&&!N.current&&(N.current=Date.now()),!w){N.current=null,A(0);return}const O=setInterval(()=>{N.current&&A(Math.round((Date.now()-N.current)/1e3))},1e3);return()=>clearInterval(O)},[w]);const B=S.reduce((O,L)=>O+L.assertions.length,0),z=S.length+B,P=m.useMemo(()=>HE(S.length,B),[S.length,B]),C=m.useMemo(()=>VE((b==null?void 0:b.provider)??null,z),[b==null?void 0:b.provider,z]);return r.jsxs("div",{className:"p-5",children:[!u&&f!=null&&r.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:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),r.jsxs("span",{children:["Read-only — to author or modify tests, install this skill as source via"," ",r.jsx("code",{style:{background:"var(--surface-1)",padding:"1px 5px",borderRadius:3,fontFamily:"var(--font-mono)"},children:"vskill plugin new"}),"."]})]}),r.jsxs("div",{className:"rounded-xl p-4 mb-5",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"Benchmark"}),w&&r.jsxs("span",{className:"text-[11px] font-medium",style:{color:"var(--accent)"},children:[k," running"]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[w&&r.jsxs("button",{onClick:c,className:"btn text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:r.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"1"})}),"Cancel All"]}),u&&r.jsx("button",{onClick:()=>s("comparison"),disabled:!d||w,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"}),r.jsx("button",{onClick:()=>s("benchmark"),disabled:!d||w,className:u?"btn btn-secondary text-[12px]":"btn btn-primary text-[12px]",title:u?"Runs benchmark using your skill only":"Run all author-shipped eval cases",children:u?"Test Skill":"Run All"}),u&&r.jsx("button",{onClick:()=>s("baseline"),disabled:!d||w,className:"btn btn-secondary text-[12px]",title:"Runs benchmark using the baseline (no skill) for reference",children:"Test Baseline"})]}),!w&&S.length>0&&r.jsxs("div",{className:"flex items-center gap-3 mt-2 text-[10px]",style:{color:"var(--text-tertiary)"},children:[r.jsxs("span",{children:["Est. duration: ",P]}),C&&r.jsxs("span",{children:["Est. cost: ",C]}),!C&&(b==null?void 0:b.provider)&&(b.provider==="claude-cli"||b.provider==="codex-cli")&&r.jsx("span",{children:"Cost: Included"}),!C&&(b==null?void 0:b.provider)&&(b.provider==="ollama"||b.provider==="lm-studio"||b.provider==="gemini-cli")&&r.jsx("span",{children:"Cost: Free"})]})]}),w&&S.length>0&&r.jsxs("div",{className:"mb-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("span",{className:"text-[12px] font-medium",style:{color:"var(--text-secondary)"},children:["Progress: ",E,"/",S.length," cases"]}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[Math.round(E/S.length*100),"%"]})]}),r.jsx("div",{className:"rounded-full overflow-hidden",style:{height:6,background:"var(--surface-3)"},children:r.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${E/S.length*100}%`,background:"var(--accent)"}})}),r.jsxs("div",{className:"flex items-center justify-between mt-1.5",children:[r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Elapsed: ",T>=60?`${Math.floor(T/60)}m ${T%60}s`:`${T}s`]}),r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Est. total: ",P]})]})]}),r.jsx("div",{className:"space-y-3 stagger-children",children:S.map(O=>{const L=y.get(O.id),_=x.get(O.id),H=(_==null?void 0:_.status)??"idle",W=v==null?void 0:v.cases.find(q=>q.eval_id===O.id);return r.jsxs(m.Fragment,{children:[r.jsx(WE,{name:O.name,evalId:O.id,result:L,caseCost:W==null?void 0:W.cost,caseBillingMode:W==null?void 0:W.billingMode,caseInputTokens:W==null?void 0:W.inputTokens,caseOutputTokens:W==null?void 0:W.outputTokens,caseStatus:H,runMode:(_==null?void 0:_.mode)??null,comparisonDetail:W==null?void 0:W.comparisonDetail,canEdit:u,onRun:q=>a(q,"benchmark"),onBaseline:q=>a(q,"baseline"),onCompare:q=>a(q,"comparison"),onCancel:q=>i(q)}),r.jsx(OE,{evalId:O.id})]},O.id)})}),!w&&v&&v.cases.length>0&&r.jsxs("div",{className:"mt-5",children:[r.jsxs("div",{className:"rounded-xl p-4 mb-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:BE(v.type)}),r.jsx("span",{className:"text-[20px] font-bold",style:{color:(v.overall_pass_rate??0)>=.8?"var(--green)":(v.overall_pass_rate??0)>=.5?"var(--yellow)":"var(--red)"},children:v.overall_pass_rate!=null?`${Math.round(v.overall_pass_rate*100)}%`:"--"})]}),v.totalDurationMs!=null&&r.jsxs("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:["Total: ",(v.totalDurationMs/1e3).toFixed(1),"s",v.model&&` | Model: ${v.model}`,v.totalInputTokens!=null&&v.totalOutputTokens!=null&&` | Tokens: ${ab(v.totalInputTokens,v.totalOutputTokens)}`,v.totalCost!=null&&` | Cost: ${Un(v.totalCost)}`]}),u&&v.overall_pass_rate>=.9999&&!v.comparison&&r.jsx("button",{onClick:()=>s("comparison"),disabled:!d,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:S.length===0?.5:1},children:"Run Final A/B Comparison"})]}),v.comparison&&r.jsxs("div",{className:"rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Skill vs Baseline"}),(()=>{const O=IE(v.model,v.timestamp);return O?r.jsx("div",{className:"text-[10px] mt-0.5 mb-3",style:{color:"var(--text-tertiary)"},children:O}):r.jsx("div",{className:"mb-3"})})(),r.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[r.jsx(av,{label:"Skill",value:v.comparison.skillPassRate,color:"var(--accent)"}),r.jsx(av,{label:"Baseline",value:v.comparison.baselinePassRate,color:"var(--text-tertiary)"})]}),r.jsxs("div",{className:"mt-3 text-[12px] font-medium",style:{color:v.comparison.delta>0?"var(--green)":v.comparison.delta<0?"var(--red)":"var(--text-tertiary)"},children:["Delta: ",v.comparison.delta>0?"+":"",(v.comparison.delta*100).toFixed(1),"%",v.verdict&&` | ${jE(v.verdict)}`]}),(()=>{const O=v.cases.reduce((_,H)=>_+H.assertions.length,0),L=$E(v.comparison.delta,O,v.cases.length);return r.jsx("div",{className:"mt-1 text-[11px]",style:{color:"var(--text-tertiary)"},children:L})})()]})]})]})}const GE={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 WE({name:t,evalId:a,result:s,caseCost:i,caseBillingMode:c,caseInputTokens:u,caseOutputTokens:d,caseStatus:f,runMode:x,comparisonDetail:h,canEdit:v=!1,onRun:y,onBaseline:b,onCompare:S,onCancel:w}){const[E,k]=m.useState(!1),N=f==="running"||f==="queued",T=f==="complete"||f==="error";return r.jsxs("div",{className:"rounded-xl overflow-hidden transition-all duration-200",style:{background:"var(--surface-1)",border:N?"1px solid var(--accent)":"1px solid var(--border-subtle)",boxShadow:N?"0 0 12px rgba(99, 131, 255, 0.15)":"none"},children:[r.jsxs("div",{className:"flex items-center justify-between px-4 py-3",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[f==="running"&&r.jsx("span",{className:"spinner",style:{width:14,height:14,borderWidth:1.5}}),f==="queued"&&r.jsx("span",{className:"text-[10px] font-medium",style:{color:"var(--text-tertiary)"},children:"queued"}),r.jsxs("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:["#",a," ",t]}),x&&(N||T)&&(()=>{const A=GE[x];return A?r.jsx("span",{className:"pill text-[9px] font-semibold",style:{background:A.bg,color:A.color,padding:"1px 6px"},children:A.label}):null})()]}),r.jsxs("div",{className:"flex items-center gap-2",children:[N?r.jsx("button",{onClick:()=>w(a),className:"btn text-[10px] px-2 py-1",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:"Cancel"}):r.jsxs(r.Fragment,{children:[v&&r.jsx("button",{onClick:()=>S(a),className:"btn btn-primary text-[10px] px-2 py-1",children:"Compare"}),r.jsx("button",{onClick:()=>y(a),className:v?"btn btn-secondary text-[10px] px-2 py-1":"btn btn-primary text-[10px] px-2 py-1",children:v?"Skill":"Run"}),v&&r.jsx("button",{onClick:()=>b(a),className:"btn btn-secondary text-[10px] px-2 py-1",children:"Base"})]}),s&&s.status!=null&&r.jsx("span",{className:"pill text-[10px]",style:{background:s.status==="pass"?"var(--green-muted)":"var(--red-muted)",color:s.status==="pass"?"var(--green)":"var(--red)"},children:s.passRate!=null?`${Math.round(s.passRate*100)}%`:s.status}),u!=null&&d!=null&&r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:ab(u,d)}),i!=null&&r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:Un(i,c)}),f==="cancelled"&&r.jsx("span",{className:"pill text-[10px]",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"cancelled"})]})]}),s&&s.assertions.length>0&&r.jsxs("div",{className:"px-4 pb-3",children:[r.jsx("div",{className:"space-y-1",children:s.assertions.map(A=>r.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[r.jsx("span",{style:{color:A.pass?"var(--green)":"var(--red)"},children:A.pass?"PASS":"FAIL"}),r.jsx("span",{style:{color:"var(--text-secondary)"},children:A.text})]},A.assertion_id))}),s.output&&r.jsx("button",{onClick:()=>k(!E),className:"text-[11px] mt-2 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:E?"Hide output":"Show output"}),E&&s.output&&r.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:s.output})]}),h&&r.jsx("div",{className:"px-4 pb-3",children:r.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:r.jsx("div",{className:"flex items-center gap-4 text-[11px] flex-wrap",children:(()=>{const A=rv(h.skillContentScore,h.baselineContentScore),B=rv(h.skillStructureScore,h.baselineStructureScore),z=UE(h.winner);return r.jsxs(r.Fragment,{children:[r.jsxs("span",{style:{color:"var(--text-secondary)"},children:["Content: Skill ",A.skill,"% / Baseline ",A.baseline,"%"]}),r.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),r.jsxs("span",{style:{color:"var(--text-secondary)"},children:["Structure: Skill ",B.skill,"% / Baseline ",B.baseline,"%"]}),r.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),r.jsx("span",{style:{color:z.isSkill?"var(--accent)":"var(--text-tertiary)",fontWeight:500},children:z.text})]})})()})})}),s&&s.errorMessage&&r.jsx(qE,{errorMessage:s.errorMessage,classifiedError:s.classifiedError})]})}const qd={rate_limit:"⏱",context_window:"⚠",auth:"🔒",timeout:"⌛",provider_unavailable:"⚡",parse_error:"❓",unknown:"❌"};function qE({errorMessage:t,classifiedError:a}){const[s,i]=m.useState(!1),c=(a==null?void 0:a.title)??"Error",u=a==null?void 0:a.hint,d=a?qd[a.category]??qd.unknown:qd.unknown;return r.jsx("div",{className:"px-4 pb-3",children:r.jsxs("div",{className:"rounded-lg overflow-hidden",style:{background:"var(--red-muted)",border:"1px solid var(--red-muted)"},children:[r.jsxs("div",{className:"flex items-center gap-2 px-3 py-2",children:[r.jsx("span",{style:{fontSize:12},children:d}),r.jsx("span",{className:"text-[11.5px] font-semibold flex-1",style:{color:"var(--red)"},children:c}),r.jsx("button",{onClick:()=>i(!s),className:"text-[10px] px-1.5 py-0.5 rounded transition-colors duration-150",style:{color:"var(--text-tertiary)",background:"transparent"},children:s?"Hide details":"Details"})]}),u&&r.jsx("div",{className:"px-3 pb-2 text-[10.5px]",style:{color:"var(--text-secondary)"},children:u}),s&&r.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:t})]})})}function av({label:t,value:a,color:s}){return r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center justify-between mb-1",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:t}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:s},children:[Math.round(a*100),"%"]})]}),r.jsx("div",{className:"rounded-full overflow-hidden",style:{height:6,background:"var(--surface-3)"},children:r.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${a*100}%`,background:s}})})]})}const lv={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)"}},YE={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 KE(){const{state:t,dispatch:a,runActivationTest:s,cancelActivation:i,generateActivationPrompts:c,loadTestCasesFromSkillMd:u,saveTestCasesToSkillMd:d}=bn(),{plugin:f,skill:x,activationPrompts:h,activationResults:v,activationSummary:y,activationRunning:b,activationError:S,activationStartedAt:w,activationClassifyingStatus:E,generatingPrompts:k,generatingPromptsError:N,activationPromptsSource:T,savingTestCases:A,savingTestCasesError:B,savingTestCasesSuccess:z,activationHistory:P}=t,{state:C}=cr(),O=C.skills.find(Z=>Z.plugin===f&&Z.skill===x),L=(O==null?void 0:O.resolvedVersion)??(O==null?void 0:O.version)??null,[_,H]=m.useState(h),[W,q]=m.useState(null),[ee,$]=m.useState(!1);m.useEffect(()=>{h&&h!==_&&H(h)},[h]),m.useEffect(()=>{a({type:"SET_ACTIVATION_PROMPTS",prompts:_})},[_,a]),m.useEffect(()=>{fetch(`/api/skills/${f}/${x}/description`).then(Z=>Z.json()).then(Z=>q(Z.rawContent||Z.description||null)).catch(()=>q(null))},[f,x]),m.useEffect(()=>{(!h||h.trim().length===0)&&u()},[f,x]);function D(){s(_)}function I(){c(8)}function F(){d()}const J=_.trim().split(`
|
|
99
|
+
`);P(Je),O(uc(d,Je)),B(!1)}else un==="error"&&(W(wt.message||wt.description||"Generation failed"),B(!1))}catch{}un=""}}}catch(kt){kt.name!=="AbortError"&&W(kt.message)}finally{B(!1),q.current=null}},[N,ee,d]),jt=m.useCallback(()=>{z&&a({type:"SET_CONTENT",content:z}),k(!1),P(null),O([]),T(""),_([])},[z,a]),Dt=m.useCallback(()=>{k(!1),P(null),O([]),T(""),_([]),W(null)},[]),St=m.useCallback(()=>{var xe;E?((xe=q.current)==null||xe.abort(),Dt()):(h&&a({type:"CLOSE_AI_EDIT"}),k(!0))},[E,h,a,Dt]),At=[{mode:"raw",icon:r.jsx(LE,{}),label:"Editor"},{mode:"split",icon:r.jsx(ME,{}),label:"Split"},{mode:"preview",icon:r.jsx(zE,{}),label:"Preview"}];return r.jsxs("div",{className:"flex flex-col",style:{height:"100%",overflow:"auto"},onKeyDown:qe,tabIndex:-1,children:[r.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:[r.jsx("div",{className:"flex items-center",style:{background:"var(--surface-2)",borderRadius:8,padding:2,gap:1},children:At.map(({mode:xe,icon:Ze,label:Xe})=>r.jsxs("button",{onClick:()=>y(xe),title:Xe,className:"flex items-center gap-1.5 rounded-md transition-all duration-150",style:{padding:"5px 10px",background:v===xe?"var(--surface-4)":"transparent",color:v===xe?"var(--text-primary)":"var(--text-tertiary)",fontSize:11,fontWeight:v===xe?600:400,border:"none",cursor:"pointer"},children:[Ze,r.jsx("span",{style:{letterSpacing:"0.01em"},children:Xe})]},xe))}),Q?i?r.jsx("div",{className:"flex items-center gap-2",children:r.jsxs("span",{className:"flex items-center gap-1.5 text-[11px]",style:{color:"var(--text-tertiary)"},children:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Read-only"]})}):r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsxs("button",{onClick:()=>{h?a({type:"CLOSE_AI_EDIT"}):(E&&Dt(),a({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:h?600:400,border:"none",cursor:"pointer",color:h?"var(--purple)":"var(--text-tertiary)",background:h?"var(--purple-muted)":"transparent"},children:[r.jsx(DE,{size:13}),r.jsx("span",{children:"AI Edit"})]}),r.jsxs("button",{onClick:St,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:E?600:400,border:"none",cursor:"pointer",color:E?"var(--purple)":"var(--text-tertiary)",background:E?"var(--purple-muted)":"transparent"},children:[r.jsx(Wd,{size:13}),r.jsx("span",{children:"Regenerate"})]}),r.jsx("div",{style:{width:1,height:16,background:"var(--border-subtle)"}}),!i&&(()=>{const xe=Yo(d)??"1.0.0";let Ze=xe,Xe=xe,kt=xe;try{Ze=Ps(xe,"patch"),Xe=Ps(xe,"minor"),kt=Ps(xe,"major")}catch{}const _t={padding:"4px 8px"};return r.jsxs("div",{style:{display:"inline-flex",gap:2,alignItems:"center"},"aria-label":"Version bump","data-testid":"version-bump-controls",children:[r.jsx("button",{type:"button",onClick:()=>Ee("patch"),title:`Bump patch: ${xe} → ${Ze}`,"aria-label":"Bump patch version",className:"btn btn-ghost text-[11px]",style:_t,children:"+patch"}),r.jsx("button",{type:"button",onClick:()=>Ee("minor"),title:`Bump minor: ${xe} → ${Xe}`,"aria-label":"Bump minor version",className:"btn btn-ghost text-[11px]",style:_t,children:"+minor"}),r.jsx("button",{type:"button",onClick:()=>Ee("major"),title:`Bump major: ${xe} → ${kt}`,"aria-label":"Bump major version",className:"btn btn-ghost text-[11px]",style:_t,children:"+major"})]})})(),f&&r.jsx("button",{onClick:()=>a({type:"SET_CONTENT",content:t.savedContent}),className:"btn btn-ghost text-[11px]",style:{padding:"4px 8px"},children:"Discard"}),r.jsx("button",{onClick:be,disabled:!f||b,className:"btn btn-primary text-[11px]",style:{padding:"5px 14px"},children:b?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"spinner",style:{width:11,height:11,borderWidth:1.5}})," Saving..."]}):"Save"}),$.hasRemote&&$.remoteUrl&&r.jsx(qy,{remoteUrl:$.remoteUrl,provider:ee==null?void 0:ee.provider,model:ee==null?void 0:ee.model})]}):null]}),c&&u&&r.jsx(iE,{files:D,activeFile:I,onSelect:ie,onRefresh:K,loadError:M}),!Q&&r.jsx(uE,{file:F,loading:J,error:de,viewMode:v,plugin:c??void 0,skill:u??void 0,onSaved:()=>{U(I),K()},onDirtyChange:Z}),Q&&r.jsxs("div",{className:"flex-1 overflow-hidden",style:{display:"grid",gridTemplateColumns:v==="raw"||v==="preview"?"1fr":"1fr 1fr",minHeight:"60vh"},children:[v!=="preview"&&r.jsx("div",{className:"flex flex-col overflow-hidden",style:{borderRight:v==="split"?"1px solid var(--border-subtle)":"none"},children:r.jsx("textarea",{ref:w,value:d,onChange:xe=>{!i&&!b&&a({type:"SET_CONTENT",content:xe.target.value})},onKeyDown:qe,spellCheck:!1,readOnly:i||b,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:i?.7:1}})}),v!=="raw"&&r.jsx("div",{className:"overflow-auto",style:{background:"var(--surface-0)"},children:r.jsxs("div",{className:"animate-fade-in",style:{padding:"20px 24px",maxWidth:720},children:[(Me||Ge||Fe)&&r.jsxs("div",{style:{marginBottom:20},children:[r.jsxs("div",{className:"flex items-baseline gap-3",style:{marginBottom:8},children:[Me&&r.jsx("h2",{style:{fontSize:18,fontWeight:700,color:"var(--text-primary)",letterSpacing:"-0.02em",lineHeight:1.2,margin:0},children:Me}),Ge&&r.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",Ge]})]}),Fe&&r.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:Fe})]}),oe.length>0&&r.jsx("div",{className:"flex flex-wrap items-center gap-1.5",style:{marginBottom:16},children:oe.map(xe=>r.jsx("span",{style:{fontSize:10,fontWeight:500,color:"var(--text-tertiary)",background:"var(--surface-2)",padding:"3px 8px",borderRadius:4,letterSpacing:"0.02em"},children:xe},xe))}),Ne.length>0&&r.jsx("div",{style:{marginBottom:16},children:r.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[r.jsx("span",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-tertiary)",marginRight:4},children:"Tools"}),Ne.map(xe=>r.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:xe},xe))]})}),ye.length>0&&r.jsx("div",{style:{marginBottom:16,padding:"8px 0",borderTop:"1px solid var(--border-subtle)",borderBottom:"1px solid var(--border-subtle)"},children:ye.map(([xe,Ze],Xe)=>{const kt=Array.isArray(Ze)?Ze.join(", "):typeof Ze=="object"?Object.entries(Ze).map(([_t,lt])=>`${_t}: ${Array.isArray(lt)?lt.join(", "):lt}`).join(" | "):Ze;return r.jsxs("div",{className:"flex items-baseline gap-3",style:{padding:"4px 0",borderTop:Xe>0?"1px solid var(--border-subtle)":"none"},children:[r.jsx("span",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--text-tertiary)",minWidth:80,flexShrink:0},children:xe}),r.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:kt})]},xe)})}),(Me||Fe||oe.length>0||Ne.length>0||ye.length>0)&&me&&r.jsx("div",{style:{height:1,background:"linear-gradient(90deg, var(--accent) 0%, var(--border-subtle) 40%, transparent 100%)",marginBottom:20,opacity:.5}}),me&&r.jsx("div",{className:"text-[13px] leading-relaxed overflow-x-auto",style:{color:"var(--text-secondary)",wordBreak:"break-word"},dangerouslySetInnerHTML:{__html:cc(me)}})]})})]}),Q&&h&&r.jsx(tE,{}),Q&&E&&r.jsx("div",{className:"animate-fade-in",style:{borderTop:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:r.jsxs("div",{className:"px-4 py-3",children:[!z&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsx(Wd,{size:14}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"Regenerate Skill"})]}),r.jsx("div",{className:"flex gap-2 mb-2",children:r.jsx("textarea",{value:N,onChange:xe=>T(xe.target.value),placeholder:"Describe what this skill should do...",rows:2,disabled:A,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:A?.5:1},onKeyDown:xe=>{xe.key==="Enter"&&(xe.ctrlKey||xe.metaKey)&&N.trim()&&!A&&(xe.preventDefault(),He())}})}),r.jsxs("div",{className:"flex items-center gap-2",children:[A?r.jsx("button",{onClick:()=>{var xe;(xe=q.current)==null||xe.abort(),B(!1)},className:"btn btn-secondary text-[11px]",style:{padding:"4px 12px"},children:"Cancel"}):r.jsx("button",{onClick:He,disabled:!N.trim(),className:"btn btn-primary text-[11px]",style:{padding:"4px 12px"},children:"Generate"}),r.jsx("button",{onClick:Dt,className:"btn btn-ghost text-[11px]",style:{padding:"4px 8px"},children:"Close"})]}),A&&L.length>0&&r.jsx("div",{className:"mt-2",children:r.jsx(ui,{entries:L,isRunning:!0})}),H&&r.jsxs("div",{className:"mt-2 px-3 py-2 rounded-lg text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:[H,r.jsx("button",{onClick:He,className:"ml-2 underline",style:{color:"var(--red)"},children:"Retry"})]})]}),z&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsx(Wd,{size:14}),r.jsx("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:"Regenerated — Review Changes"})]}),r.jsx("div",{className:"rounded-lg overflow-hidden mb-3",style:{border:"1px solid var(--border-subtle)",maxHeight:"300px",overflowY:"auto"},children:C.map((xe,Ze)=>r.jsxs("div",{className:"px-3 py-0.5 text-[11px] font-mono",style:{background:xe.type==="added"?"var(--green-muted)":xe.type==="removed"?"var(--red-muted)":"transparent",color:xe.type==="added"?"var(--green)":xe.type==="removed"?"var(--red)":"var(--text-secondary)",borderLeft:xe.type==="added"?"3px solid var(--green)":xe.type==="removed"?"3px solid var(--red)":"3px solid transparent"},children:[r.jsx("span",{style:{userSelect:"none",opacity:.5,marginRight:8},children:xe.type==="added"?"+":xe.type==="removed"?"-":" "}),xe.content]},Ze))}),r.jsxs("div",{className:"flex gap-2",children:[r.jsxs("button",{onClick:jt,className:"btn btn-primary text-[11px]",style:{padding:"4px 12px"},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Apply"]}),r.jsx("button",{onClick:Dt,className:"btn btn-secondary text-[11px]",style:{padding:"4px 12px"},children:"Discard"})]})]})]})}),Q&&x!==null&&c&&u&&r.jsx("div",{style:{borderTop:"1px solid var(--border-subtle)"},children:r.jsx(YC,{plugin:c,skill:u,skillContent:d,onApplied:xe=>{a({type:"SET_CONTENT",content:xe}),a({type:"CONTENT_SAVED"}),a({type:"CLOSE_IMPROVE"})}})}),Q&&r.jsx(OE,{})]})}function OE(){var x;const[t,a]=m.useState(()=>{var h;return typeof window>"u"?!1:((h=window.localStorage)==null?void 0:h.getItem("vskill:editor-eval-cases-open"))==="1"}),{state:s,canEdit:i}=bn(),c=((x=s.evals)==null?void 0:x.evals)??[],u=h=>{var y;const v=h.currentTarget.open;if(a(v),typeof window<"u")try{(y=window.localStorage)==null||y.setItem("vskill:editor-eval-cases-open",v?"1":"0")}catch{}},d=m.useCallback(h=>{var b;if((b=h.preventDefault)==null||b.call(h),typeof window>"u")return;const v=new URLSearchParams(window.location.search);v.set("tab","run"),v.set("mode","benchmark"),v.set("autorun","1");const y=`${window.location.pathname}?${v.toString()}${window.location.hash}`;window.history.replaceState(null,"",y),window.dispatchEvent(new PopStateEvent("popstate"))},[]),f=i&&c.length>0;return r.jsxs("details",{"data-testid":"editor-eval-cases-section",open:t,onToggle:u,style:{borderTop:"1px solid var(--border-subtle)",background:"var(--bg-canvas)"},children:[r.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:t?"1px solid var(--border-subtle)":"none",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[r.jsx("span",{children:"Eval cases"}),f&&r.jsx("button",{type:"button","data-testid":"editor-eval-cases-run-all",onClick:d,title:"Run all → opens Run tab",className:"btn btn-primary text-[11px] px-2 py-0.5",style:{whiteSpace:"nowrap"},children:"Run all"})]}),t&&r.jsx("div",{"data-testid":"editor-eval-cases-body",style:{height:520,overflow:"hidden"},children:r.jsx(CE,{embedded:!0})})]})}function Un(t,a){return a==="free"?"Free":a==="subscription"&&t==null?"Included":t==null?"N/A":t>=1?`$${t.toFixed(2)}`:t===0?"$0.00":t>=.001?`$${t.toFixed(4)}`:`$${t.toPrecision(3).replace(/0+$/,"").replace(/\.$/,"")}`}function ab(t,a){return t==null||a==null?"N/A":`${t.toLocaleString("en-US")} in / ${a.toLocaleString("en-US")} out`}function BE({evalId:t}){const{state:a}=bn(),{entries:s,loading:i}=tb(a.plugin,a.skill,t),c=!!s&&s.length>0;return!i&&!c?null:r.jsx("div",{"data-testid":`run-case-history-${t}`,className:"mt-2 ml-3 pl-3",style:{borderLeft:"1px solid var(--border-subtle)"},children:r.jsx(rb,{evalId:t,sharedEntries:s,sharedLoading:i})})}function IE(t){return t==="baseline"?"Baseline Pass Rate":"Skill Pass Rate"}function $E(t,a){let s="";if(a){const c=new Date(a);isNaN(c.getTime())||(s=c.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}))}return[t,s].filter(Boolean).join(" · ")}function UE(t,a,s){const i=s===1?"test case":"test cases";if(t===0)return`Your skill performs the same as the baseline across ${s} ${i}`;const c=Math.round(Math.abs(t)*a);if(c===0)return`Your skill performs the same as the baseline across ${s} ${i}`;const u=t>0?"more":"fewer";return`Your skill passes ${c} ${u} assertions across ${s} ${i}`}function rv(t,a){const s=i=>{const c=i/5*100;return isFinite(c)?Math.round(Math.min(100,Math.max(0,c))):0};return{skill:s(t),baseline:s(a)}}function HE(t){return t==="skill"?{text:"Skill wins",isSkill:!0}:t==="baseline"?{text:"Baseline wins",isSkill:!1}:{text:"Tie",isSkill:!1}}function PE(t,a){const s=t+a,i=s*10,c=s*25,u=d=>d>=60?`${Math.round(d/60)}m`:`${d}s`;return`${u(i)}–${u(c)}`}const VE={anthropic:.01,openrouter:.01,ollama:0,"lm-studio":0,"claude-cli":0,"codex-cli":0,"gemini-cli":0};function FE(t,a){if(!t)return null;const s=VE[t];if(s==null||s===0)return null;const i=s*a*.5,c=s*a*2;return`${Un(i)}–${Un(c)}`}function GE(){const{state:t,runCase:a,runAll:s,cancelCase:i,cancelAll:c,canEdit:u,canRun:d}=bn(),{evals:f,caseRunStates:x,bulkRunActive:h,latestBenchmark:v,inlineResults:y}=t,{config:b}=Ya(),S=(f==null?void 0:f.evals)??[],w=m.useMemo(()=>{for(const O of x.values())if(O.status==="running"||O.status==="queued")return!0;return!1},[x]),E=S.filter(O=>{const L=x.get(O.id);return L&&(L.status==="complete"||L.status==="error"||L.status==="cancelled")}).length,k=S.filter(O=>{const L=x.get(O.id);return L&&(L.status==="running"||L.status==="queued")}).length,N=m.useRef(null),[T,A]=m.useState(0);m.useEffect(()=>{if(w&&!N.current&&(N.current=Date.now()),!w){N.current=null,A(0);return}const O=setInterval(()=>{N.current&&A(Math.round((Date.now()-N.current)/1e3))},1e3);return()=>clearInterval(O)},[w]);const B=S.reduce((O,L)=>O+L.assertions.length,0),z=S.length+B,P=m.useMemo(()=>PE(S.length,B),[S.length,B]),C=m.useMemo(()=>FE((b==null?void 0:b.provider)??null,z),[b==null?void 0:b.provider,z]);return r.jsxs("div",{className:"p-5",children:[!u&&f!=null&&r.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:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),r.jsxs("span",{children:["Read-only — to author or modify tests, install this skill as source via"," ",r.jsx("code",{style:{background:"var(--surface-1)",padding:"1px 5px",borderRadius:3,fontFamily:"var(--font-mono)"},children:"vskill plugin new"}),"."]})]}),r.jsxs("div",{className:"rounded-xl p-4 mb-5",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"Benchmark"}),w&&r.jsxs("span",{className:"text-[11px] font-medium",style:{color:"var(--accent)"},children:[k," running"]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[w&&r.jsxs("button",{onClick:c,className:"btn text-[12px]",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:r.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"1"})}),"Cancel All"]}),u&&r.jsx("button",{onClick:()=>s("comparison"),disabled:!d||w,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"}),r.jsx("button",{onClick:()=>s("benchmark"),disabled:!d||w,className:u?"btn btn-secondary text-[12px]":"btn btn-primary text-[12px]",title:u?"Runs benchmark using your skill only":"Run all author-shipped eval cases",children:u?"Test Skill":"Run All"}),u&&r.jsx("button",{onClick:()=>s("baseline"),disabled:!d||w,className:"btn btn-secondary text-[12px]",title:"Runs benchmark using the baseline (no skill) for reference",children:"Test Baseline"})]}),!w&&S.length>0&&r.jsxs("div",{className:"flex items-center gap-3 mt-2 text-[10px]",style:{color:"var(--text-tertiary)"},children:[r.jsxs("span",{children:["Est. duration: ",P]}),C&&r.jsxs("span",{children:["Est. cost: ",C]}),!C&&(b==null?void 0:b.provider)&&(b.provider==="claude-cli"||b.provider==="codex-cli")&&r.jsx("span",{children:"Cost: Included"}),!C&&(b==null?void 0:b.provider)&&(b.provider==="ollama"||b.provider==="lm-studio"||b.provider==="gemini-cli")&&r.jsx("span",{children:"Cost: Free"})]})]}),w&&S.length>0&&r.jsxs("div",{className:"mb-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("span",{className:"text-[12px] font-medium",style:{color:"var(--text-secondary)"},children:["Progress: ",E,"/",S.length," cases"]}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[Math.round(E/S.length*100),"%"]})]}),r.jsx("div",{className:"rounded-full overflow-hidden",style:{height:6,background:"var(--surface-3)"},children:r.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${E/S.length*100}%`,background:"var(--accent)"}})}),r.jsxs("div",{className:"flex items-center justify-between mt-1.5",children:[r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Elapsed: ",T>=60?`${Math.floor(T/60)}m ${T%60}s`:`${T}s`]}),r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Est. total: ",P]})]})]}),r.jsx("div",{className:"space-y-3 stagger-children",children:S.map(O=>{const L=y.get(O.id),_=x.get(O.id),H=(_==null?void 0:_.status)??"idle",W=v==null?void 0:v.cases.find(q=>q.eval_id===O.id);return r.jsxs(m.Fragment,{children:[r.jsx(qE,{name:O.name,evalId:O.id,result:L,caseCost:W==null?void 0:W.cost,caseBillingMode:W==null?void 0:W.billingMode,caseInputTokens:W==null?void 0:W.inputTokens,caseOutputTokens:W==null?void 0:W.outputTokens,caseStatus:H,runMode:(_==null?void 0:_.mode)??null,comparisonDetail:W==null?void 0:W.comparisonDetail,canEdit:u,onRun:q=>a(q,"benchmark"),onBaseline:q=>a(q,"baseline"),onCompare:q=>a(q,"comparison"),onCancel:q=>i(q)}),r.jsx(BE,{evalId:O.id})]},O.id)})}),!w&&v&&v.cases.length>0&&r.jsxs("div",{className:"mt-5",children:[r.jsxs("div",{className:"rounded-xl p-4 mb-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:IE(v.type)}),r.jsx("span",{className:"text-[20px] font-bold",style:{color:(v.overall_pass_rate??0)>=.8?"var(--green)":(v.overall_pass_rate??0)>=.5?"var(--yellow)":"var(--red)"},children:v.overall_pass_rate!=null?`${Math.round(v.overall_pass_rate*100)}%`:"--"})]}),v.totalDurationMs!=null&&r.jsxs("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:["Total: ",(v.totalDurationMs/1e3).toFixed(1),"s",v.model&&` | Model: ${v.model}`,v.totalInputTokens!=null&&v.totalOutputTokens!=null&&` | Tokens: ${ab(v.totalInputTokens,v.totalOutputTokens)}`,v.totalCost!=null&&` | Cost: ${Un(v.totalCost)}`]}),u&&v.overall_pass_rate>=.9999&&!v.comparison&&r.jsx("button",{onClick:()=>s("comparison"),disabled:!d,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:S.length===0?.5:1},children:"Run Final A/B Comparison"})]}),v.comparison&&r.jsxs("div",{className:"rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Skill vs Baseline"}),(()=>{const O=$E(v.model,v.timestamp);return O?r.jsx("div",{className:"text-[10px] mt-0.5 mb-3",style:{color:"var(--text-tertiary)"},children:O}):r.jsx("div",{className:"mb-3"})})(),r.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[r.jsx(av,{label:"Skill",value:v.comparison.skillPassRate,color:"var(--accent)"}),r.jsx(av,{label:"Baseline",value:v.comparison.baselinePassRate,color:"var(--text-tertiary)"})]}),r.jsxs("div",{className:"mt-3 text-[12px] font-medium",style:{color:v.comparison.delta>0?"var(--green)":v.comparison.delta<0?"var(--red)":"var(--text-tertiary)"},children:["Delta: ",v.comparison.delta>0?"+":"",(v.comparison.delta*100).toFixed(1),"%",v.verdict&&` | ${SE(v.verdict)}`]}),(()=>{const O=v.cases.reduce((_,H)=>_+H.assertions.length,0),L=UE(v.comparison.delta,O,v.cases.length);return r.jsx("div",{className:"mt-1 text-[11px]",style:{color:"var(--text-tertiary)"},children:L})})()]})]})]})}const WE={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 qE({name:t,evalId:a,result:s,caseCost:i,caseBillingMode:c,caseInputTokens:u,caseOutputTokens:d,caseStatus:f,runMode:x,comparisonDetail:h,canEdit:v=!1,onRun:y,onBaseline:b,onCompare:S,onCancel:w}){const[E,k]=m.useState(!1),N=f==="running"||f==="queued",T=f==="complete"||f==="error";return r.jsxs("div",{className:"rounded-xl overflow-hidden transition-all duration-200",style:{background:"var(--surface-1)",border:N?"1px solid var(--accent)":"1px solid var(--border-subtle)",boxShadow:N?"0 0 12px rgba(99, 131, 255, 0.15)":"none"},children:[r.jsxs("div",{className:"flex items-center justify-between px-4 py-3",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[f==="running"&&r.jsx("span",{className:"spinner",style:{width:14,height:14,borderWidth:1.5}}),f==="queued"&&r.jsx("span",{className:"text-[10px] font-medium",style:{color:"var(--text-tertiary)"},children:"queued"}),r.jsxs("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:["#",a," ",t]}),x&&(N||T)&&(()=>{const A=WE[x];return A?r.jsx("span",{className:"pill text-[9px] font-semibold",style:{background:A.bg,color:A.color,padding:"1px 6px"},children:A.label}):null})()]}),r.jsxs("div",{className:"flex items-center gap-2",children:[N?r.jsx("button",{onClick:()=>w(a),className:"btn text-[10px] px-2 py-1",style:{background:"var(--red-muted)",color:"var(--red)",border:"1px solid var(--red-muted)"},children:"Cancel"}):r.jsxs(r.Fragment,{children:[v&&r.jsx("button",{onClick:()=>S(a),className:"btn btn-primary text-[10px] px-2 py-1",children:"Compare"}),r.jsx("button",{onClick:()=>y(a),className:v?"btn btn-secondary text-[10px] px-2 py-1":"btn btn-primary text-[10px] px-2 py-1",children:v?"Skill":"Run"}),v&&r.jsx("button",{onClick:()=>b(a),className:"btn btn-secondary text-[10px] px-2 py-1",children:"Base"})]}),s&&s.status!=null&&r.jsx("span",{className:"pill text-[10px]",style:{background:s.status==="pass"?"var(--green-muted)":"var(--red-muted)",color:s.status==="pass"?"var(--green)":"var(--red)"},children:s.passRate!=null?`${Math.round(s.passRate*100)}%`:s.status}),u!=null&&d!=null&&r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:ab(u,d)}),i!=null&&r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:Un(i,c)}),f==="cancelled"&&r.jsx("span",{className:"pill text-[10px]",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"cancelled"})]})]}),s&&s.assertions.length>0&&r.jsxs("div",{className:"px-4 pb-3",children:[r.jsx("div",{className:"space-y-1",children:s.assertions.map(A=>r.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[r.jsx("span",{style:{color:A.pass?"var(--green)":"var(--red)"},children:A.pass?"PASS":"FAIL"}),r.jsx("span",{style:{color:"var(--text-secondary)"},children:A.text})]},A.assertion_id))}),s.output&&r.jsx("button",{onClick:()=>k(!E),className:"text-[11px] mt-2 transition-colors duration-150",style:{color:"var(--text-tertiary)"},children:E?"Hide output":"Show output"}),E&&s.output&&r.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:s.output})]}),h&&r.jsx("div",{className:"px-4 pb-3",children:r.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:r.jsx("div",{className:"flex items-center gap-4 text-[11px] flex-wrap",children:(()=>{const A=rv(h.skillContentScore,h.baselineContentScore),B=rv(h.skillStructureScore,h.baselineStructureScore),z=HE(h.winner);return r.jsxs(r.Fragment,{children:[r.jsxs("span",{style:{color:"var(--text-secondary)"},children:["Content: Skill ",A.skill,"% / Baseline ",A.baseline,"%"]}),r.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),r.jsxs("span",{style:{color:"var(--text-secondary)"},children:["Structure: Skill ",B.skill,"% / Baseline ",B.baseline,"%"]}),r.jsx("span",{style:{color:"var(--text-tertiary)"},children:"·"}),r.jsx("span",{style:{color:z.isSkill?"var(--accent)":"var(--text-tertiary)",fontWeight:500},children:z.text})]})})()})})}),s&&s.errorMessage&&r.jsx(YE,{errorMessage:s.errorMessage,classifiedError:s.classifiedError})]})}const qd={rate_limit:"⏱",context_window:"⚠",auth:"🔒",timeout:"⌛",provider_unavailable:"⚡",parse_error:"❓",unknown:"❌"};function YE({errorMessage:t,classifiedError:a}){const[s,i]=m.useState(!1),c=(a==null?void 0:a.title)??"Error",u=a==null?void 0:a.hint,d=a?qd[a.category]??qd.unknown:qd.unknown;return r.jsx("div",{className:"px-4 pb-3",children:r.jsxs("div",{className:"rounded-lg overflow-hidden",style:{background:"var(--red-muted)",border:"1px solid var(--red-muted)"},children:[r.jsxs("div",{className:"flex items-center gap-2 px-3 py-2",children:[r.jsx("span",{style:{fontSize:12},children:d}),r.jsx("span",{className:"text-[11.5px] font-semibold flex-1",style:{color:"var(--red)"},children:c}),r.jsx("button",{onClick:()=>i(!s),className:"text-[10px] px-1.5 py-0.5 rounded transition-colors duration-150",style:{color:"var(--text-tertiary)",background:"transparent"},children:s?"Hide details":"Details"})]}),u&&r.jsx("div",{className:"px-3 pb-2 text-[10.5px]",style:{color:"var(--text-secondary)"},children:u}),s&&r.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:t})]})})}function av({label:t,value:a,color:s}){return r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center justify-between mb-1",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:t}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:s},children:[Math.round(a*100),"%"]})]}),r.jsx("div",{className:"rounded-full overflow-hidden",style:{height:6,background:"var(--surface-3)"},children:r.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${a*100}%`,background:s}})})]})}const lv={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)"}},KE={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 XE(){const{state:t,dispatch:a,runActivationTest:s,cancelActivation:i,generateActivationPrompts:c,loadTestCasesFromSkillMd:u,saveTestCasesToSkillMd:d}=bn(),{plugin:f,skill:x,activationPrompts:h,activationResults:v,activationSummary:y,activationRunning:b,activationError:S,activationStartedAt:w,activationClassifyingStatus:E,generatingPrompts:k,generatingPromptsError:N,activationPromptsSource:T,savingTestCases:A,savingTestCasesError:B,savingTestCasesSuccess:z,activationHistory:P}=t,{state:C}=cr(),O=C.skills.find(Z=>Z.plugin===f&&Z.skill===x),L=(O==null?void 0:O.resolvedVersion)??(O==null?void 0:O.version)??null,[_,H]=m.useState(h),[W,q]=m.useState(null),[ee,$]=m.useState(!1);m.useEffect(()=>{h&&h!==_&&H(h)},[h]),m.useEffect(()=>{a({type:"SET_ACTIVATION_PROMPTS",prompts:_})},[_,a]),m.useEffect(()=>{fetch(`/api/skills/${f}/${x}/description`).then(Z=>Z.json()).then(Z=>q(Z.rawContent||Z.description||null)).catch(()=>q(null))},[f,x]),m.useEffect(()=>{(!h||h.trim().length===0)&&u()},[f,x]);function D(){s(_)}function I(){c(8)}function F(){d()}const J=_.trim().split(`
|
|
100
100
|
`).filter(Boolean).length,de=Z=>Z.verdict==="scope_warning"||Z.verdict==="drift_warning",M=v.filter(Z=>(Z.classification==="TP"||Z.classification==="TN")&&!de(Z)),U=v.filter(Z=>(Z.classification==="FP"||Z.classification==="FN")&&!de(Z));v.filter(de);const K=(W==null?void 0:W.replace(/^---[\s\S]*?---\s*/,"").trim())??null,Q=_.trim().length>0,ce=K?cc(K):"";return r.jsxs("div",{className:"p-5 space-y-5",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[14px] font-semibold",style:{color:"var(--text-primary)"},children:"Activation Test"}),r.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."})]}),r.jsxs("div",{className:"grid grid-cols-[3fr_2fr] gap-4 items-stretch",children:[r.jsxs("div",{className:"glass-card p-4 flex flex-col gap-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("label",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:"Test Prompts"}),T==="skill-md"&&r.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"}),T==="ai-generated"&&r.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"})]}),r.jsxs("div",{className:"flex gap-1.5",children:[r.jsx("button",{onClick:F,disabled:A||!Q||b,className:"text-[10px] px-2.5 py-1 rounded-md transition-colors duration-150 flex items-center gap-1.5",style:{background:A?"var(--surface-3)":"var(--surface-2)",color:Q?"var(--green)":"var(--text-tertiary)",border:"1px solid var(--border-subtle)",opacity:Q?1:.5,cursor:Q?"pointer":"not-allowed"},title:Q?"Write the current prompts back to SKILL.md as a ## Test Cases block":"No prompts to save",onMouseEnter:Z=>{Q&&!A&&(Z.currentTarget.style.background="var(--surface-3)")},onMouseLeave:Z=>{A||(Z.currentTarget.style.background="var(--surface-2)")},children:A?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"spinner",style:{borderTopColor:"var(--green)",borderColor:"var(--border-subtle)",width:10,height:10}}),"Saving..."]}):r.jsxs(r.Fragment,{children:[r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),r.jsx("polyline",{points:"17 21 17 13 7 13 7 21"}),r.jsx("polyline",{points:"7 3 7 8 15 8"})]}),"Save as test cases"]})}),r.jsx("button",{onClick:I,disabled:k||!K||b,className:"text-[10px] px-2.5 py-1 rounded-md transition-colors duration-150 flex items-center gap-1.5",style:{background:k?"var(--surface-3)":"var(--surface-2)",color:K?"var(--accent)":"var(--text-tertiary)",border:"1px solid var(--border-subtle)",opacity:K?1:.5,cursor:K?"pointer":"not-allowed"},title:K?void 0:"No skill description available",onMouseEnter:Z=>{K&&!k&&(Z.currentTarget.style.background="var(--surface-3)")},onMouseLeave:Z=>{k||(Z.currentTarget.style.background="var(--surface-2)")},children:k?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"spinner",style:{borderTopColor:"var(--accent)",borderColor:"var(--border-subtle)",width:10,height:10}}),"Generating..."]}):r.jsxs(r.Fragment,{children:[r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:r.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"})}),Q?"Regenerate":"Generate"," Test Prompts"]})})]})]}),z&&r.jsx("div",{className:"text-[11px] px-2 py-1 rounded",style:{color:"var(--green)",background:"var(--green-muted)"},"aria-live":"polite",children:z}),B&&r.jsxs("div",{className:"text-[11px] px-2 py-1 rounded",style:{color:"var(--red)",background:"var(--red-muted)"},"aria-live":"polite",children:["Save failed: ",B]}),!K&&!b&&r.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."}),N&&r.jsx("div",{className:"text-[11px] px-2 py-1 rounded",style:{color:"var(--red)",background:"var(--red-muted)"},children:N}),r.jsx("textarea",{className:"input-field resize-y font-mono text-[12px]",style:{minHeight:140,height:140},value:_,onChange:Z=>H(Z.target.value),placeholder:`How do I write a unit test?
|
|
101
101
|
What edge cases should I test?
|
|
102
102
|
+Deploy this to production
|
|
103
103
|
!What's the weather like today?
|
|
104
|
-
!Write me a poem about flowers`}),r.jsxs("div",{className:"flex items-center flex-wrap gap-x-3 gap-y-1 text-[11px]",style:{color:"var(--text-tertiary)"},children:[r.jsx("span",{children:"One prompt per line"}),r.jsx(Lo,{}),r.jsx("span",{children:"No prefix = auto-classify"}),r.jsx(Lo,{}),r.jsxs("span",{className:"flex items-center gap-1",children:[r.jsx("code",{className:"px-1 rounded",style:{background:"var(--surface-2)"},children:"+"}),"= must activate"]}),r.jsx(Lo,{}),r.jsxs("span",{className:"flex items-center gap-1",children:[r.jsx("code",{className:"px-1 rounded",style:{background:"var(--surface-2)"},children:"!"}),"= must NOT activate"]}),r.jsx(Lo,{}),r.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[J," prompt",J!==1?"s":""]})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("button",{onClick:D,disabled:b||!_.trim(),className:"btn btn-primary",children:b?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"spinner",style:{borderTopColor:"var(--color-paper)",borderColor:"var(--border-default)",width:14,height:14}}),"Testing..."]}):r.jsxs(r.Fragment,{children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("circle",{cx:"12",cy:"12",r:"6"}),r.jsx("circle",{cx:"12",cy:"12",r:"2"})]}),"Run Activation Test"]})}),b&&r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:i,className:"btn btn-secondary text-[12px]",children:"Cancel"}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[E||`${v.length} / ${J} prompts tested`,w&&r.jsx(JE,{startedAt:w})]})]})]})]}),r.jsxs("div",{className:"glass-card flex flex-col overflow-hidden",children:[r.jsx("div",{className:"px-4 pt-3.5 pb-2.5 flex-shrink-0",style:{borderBottom:"1px solid var(--border-subtle)"},children:r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:"Skill Description"})}),r.jsx("div",{className:"flex-1 overflow-auto px-4 py-3",style:{minHeight:0},children:K?r.jsx("div",{className:"text-[12px] leading-relaxed",style:{color:"var(--text-secondary)"},dangerouslySetInnerHTML:{__html:ce}}):r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"No description available"})})]})]}),S&&r.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:S}),b&&v.length===0&&r.jsxs("div",{className:"text-center py-12 animate-fade-in",children:[r.jsx("div",{className:"spinner-lg mx-auto mb-4"}),r.jsx("p",{className:"text-[14px]",style:{color:"var(--text-secondary)"},children:"Testing activation against skill description..."})]}),v.length>0&&r.jsxs("div",{className:"space-y-5",children:[U.length>0&&r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),r.jsx("line",{x1:"9",y1:"9",x2:"15",y2:"15"})]}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--red)"},children:["Incorrect (",U.length,")"]}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"— These need attention"})]}),r.jsx("div",{className:"space-y-1.5 stagger-children",children:U.map((Z,ie)=>r.jsx(sv,{result:Z},`incorrect-${ie}`))})]}),M.length>0&&r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("polyline",{points:"16 10 11 15 8 12"})]}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--green)"},children:["Correct (",M.length,")"]})]}),r.jsx("div",{className:"space-y-1.5 stagger-children",children:M.map((Z,ie)=>r.jsx(sv,{result:Z},`correct-${ie}`))})]})]}),y&&r.jsxs("div",{className:"glass-card p-6 animate-fade-in-scale",style:{borderColor:"var(--border-active)",borderWidth:2},children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-widest mb-2",style:{color:"var(--text-tertiary)"},children:"Summary"}),y.autoClassifiedCount!=null&&y.autoClassifiedCount>0&&r.jsxs("div",{className:"text-[11px] mb-3",style:{color:"var(--text-tertiary)"},children:[y.autoClassifiedCount," of ",y.total," prompts auto-classified from skill name and tags"]}),r.jsxs("div",{className:"grid grid-cols-3 gap-6 mb-5",children:[r.jsx(Yd,{label:"Precision",value:y.precision,description:"Of all activations, how many were correct?",detail:`${y.tp} true / ${y.tp+y.fp} total activations`}),r.jsx(Yd,{label:"Recall",value:y.recall,description:"Of expected activations, how many fired?",detail:`${y.tp} activated / ${y.tp+y.fn} expected`}),r.jsx(Yd,{label:"Reliability",value:y.reliability,description:"Overall correct classification rate",detail:`${y.tp+y.tn} correct / ${y.total} total`})]}),r.jsxs("div",{className:"pt-4",style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-widest mb-3 text-center",style:{color:"var(--text-tertiary)"},children:"Confusion Matrix"}),r.jsxs("div",{className:"grid grid-cols-2 gap-2 max-w-xs mx-auto",children:[r.jsx(Mo,{label:"True Positive",abbr:"TP",count:y.tp,bg:"var(--green-muted)",color:"var(--green)",description:"Correctly activated"}),r.jsx(Mo,{label:"False Positive",abbr:"FP",count:y.fp,bg:"var(--red-muted)",color:"var(--red)",description:"Wrongly activated"}),r.jsx(Mo,{label:"False Negative",abbr:"FN",count:y.fn,bg:"var(--red-muted)",color:"var(--red)",description:"Missed activation"}),r.jsx(Mo,{label:"True Negative",abbr:"TN",count:y.tn,bg:"var(--green-muted)",color:"var(--green)",description:"Correctly silent"})]}),r.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:"," ",r.jsxs("span",{style:{color:(y.scopeWarnings??0)>0?"var(--yellow)":"var(--text-tertiary)"},children:[y.scopeWarnings??0," scope"]}),", ",r.jsxs("span",{style:{color:(y.driftWarnings??0)>0?"var(--yellow)":"var(--text-tertiary)"},children:[y.driftWarnings??0," drift"]})]})]})]}),r.jsx(XE,{history:P,expanded:ee,onToggle:()=>$(!ee),skillVersion:L})]})}function XE({history:t,expanded:a,onToggle:s,skillVersion:i}){return t===null?null:r.jsxs("div",{className:"glass-card overflow-hidden",children:[r.jsxs("button",{className:"w-full px-4 py-3 flex items-center justify-between text-left",style:{borderBottom:a?"1px solid var(--border-subtle)":"none"},onClick:s,children:[r.jsxs("span",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:["Test History",t.length>0&&r.jsxs("span",{className:"ml-2 font-normal",style:{color:"var(--text-tertiary)"},children:["(",t.length," run",t.length!==1?"s":"",")"]})]}),r.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:a?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"},children:r.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),a&&r.jsx("div",{className:"px-4 py-3",children:t.length===0?r.jsx("div",{className:"text-[12px] py-4 text-center",style:{color:"var(--text-tertiary)"},children:"No test runs yet"}):r.jsx("div",{className:"space-y-2",children:t.map(c=>r.jsx(QE,{run:c,skillVersion:i},c.id))})})]})}function QE({run:t,skillVersion:a}){const s=Math.round(t.summary.reliability*100),i=s>=80?"var(--green)":s>=60?"var(--yellow)":"var(--red)",c=s>=80?"Good":s>=60?"Needs Work":"Poor",u=i;return r.jsxs("div",{className:"flex items-center gap-3 px-3 py-2.5 rounded-lg",style:{background:"var(--surface-1)"},children:[r.jsx("div",{className:"flex-1 min-w-0",children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:ZE(t.timestamp)}),r.jsx(ci,{version:a??null,size:"sm","data-testid":"activation-row-version"}),r.jsx("span",{className:"pill text-[9px] px-1.5",style:{background:"var(--surface-2)",color:"var(--text-tertiary)"},children:t.model||t.provider}),r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:[t.promptCount," prompts"]})]})}),r.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:i,fontVariantNumeric:"tabular-nums"},children:[s,"%"]}),r.jsx("span",{className:"text-[10px] font-medium px-2 py-0.5 rounded",style:{color:u,background:`color-mix(in srgb, ${u} 10%, transparent)`},children:c})]})]})}function ZE(t){const a=Date.now(),s=new Date(t).getTime(),i=Math.floor((a-s)/1e3);if(i<60)return"just now";const c=Math.floor(i/60);if(c<60)return`${c}m ago`;const u=Math.floor(c/60);if(u<24)return`${u}h ago`;const d=Math.floor(u/24);return d<7?`${d}d ago`:new Date(t).toLocaleDateString()}function Lo(){return r.jsx("span",{style:{color:"var(--border-subtle)",userSelect:"none"},children:"·"})}function sv({result:t}){const a=t.verdict==="scope_warning"||t.verdict==="drift_warning",s=a?t.verdict==="scope_warning"?"SCOPE_WARNING":"DRIFT_WARNING":t.classification,i=lv[s]||lv.FN,c=!a&&(t.classification==="TP"||t.classification==="TN"),u=t.verdict==="scope_warning"?"scope warn":t.verdict==="drift_warning"?"drift warn":null,d=t.verdict&&t.verdict!=="ok"?YE[t.verdict]:void 0;return r.jsxs("div",{className:"flex items-start gap-3 p-4 rounded-xl transition-all duration-200",style:{background:i.bg,border:"1px solid transparent"},children:[r.jsx("div",{className:"flex-shrink-0 mt-0.5",children:r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:`color-mix(in srgb, ${i.text} 20%, transparent)`},children:c?r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:i.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}):a?r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:i.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[r.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"}),r.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),r.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}):r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:i.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("div",{className:"flex items-center gap-2 mb-1",children:r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:t.prompt})}),r.jsxs("div",{className:"flex items-center gap-3 text-[12px]",children:[r.jsx("span",{className:"pill",style:{background:"var(--surface-3)",color:i.text,fontWeight:700,fontSize:"10px",padding:"1px 6px"},title:d,children:u??t.classification}),r.jsx("span",{style:{color:t.activate?"var(--green)":"var(--text-tertiary)"},children:t.activate?"Activated":"Silent"}),r.jsxs("span",{style:{color:"var(--text-tertiary)"},children:["Expected: ",t.expected==="should_activate"?"activate":"stay silent"]}),r.jsxs("span",{style:{color:"var(--text-tertiary)"},children:[t.confidence," confidence"]}),t.autoClassified&&r.jsx("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)",fontSize:"9px",padding:"1px 5px"},children:"auto"})]}),t.reasoning&&r.jsx("div",{className:"text-[11px] mt-1.5",style:{color:"var(--text-tertiary)"},children:t.reasoning})]})]})}function Yd({label:t,value:a,description:s,detail:i}){const c=Math.round(a*100),u=c>=80?"var(--green)":c>=60?"var(--yellow)":"var(--red)";return r.jsxs("div",{className:"text-center",children:[r.jsxs("div",{className:"text-[28px] font-bold tracking-tight",style:{color:u},children:[c,"%"]}),r.jsx("div",{className:"text-[12px] font-medium mt-0.5",style:{color:"var(--text-secondary)"},children:t}),r.jsx("div",{className:"text-[10px] mt-1",style:{color:"var(--text-tertiary)"},children:s}),r.jsx("div",{className:"text-[10px] mt-0.5 font-mono",style:{color:"var(--text-tertiary)"},children:i})]})}function Mo({abbr:t,count:a,bg:s,color:i,description:c}){return r.jsxs("div",{className:"text-center p-3 rounded-lg",style:{background:s},children:[r.jsx("div",{className:"text-[20px] font-bold",style:{color:i},children:a}),r.jsx("div",{className:"text-[11px] font-semibold",style:{color:i},children:t}),r.jsx("div",{className:"text-[9px] mt-0.5",style:{color:"var(--text-tertiary)"},children:c})]})}function JE({startedAt:t}){const[a,s]=m.useState(0);return m.useEffect(()=>{const i=setInterval(()=>s(Math.floor((Date.now()-t)/1e3)),1e3);return()=>clearInterval(i)},[t]),r.jsxs("span",{className:"ml-2",children:["(",a,"s)"]})}function eN(t){return t==="benchmark"||t==="activation"||t==="ab"}function tN({mode:t}){var f;const{state:a,runAll:s}=bn(),i=m.useRef(!1),u=(((f=a.evals)==null?void 0:f.evals)??[]).length,d=a.evals!=null;return m.useEffect(()=>{if(t!=="benchmark"||typeof window>"u"||i.current)return;const x=new URLSearchParams(window.location.search);if(x.get("autorun")!=="1"||!d||u===0)return;i.current=!0,s("benchmark"),x.delete("autorun");const h=x.toString(),v=`${window.location.pathname}${h?"?"+h:""}${window.location.hash}`;window.history.replaceState(null,"",v)},[t,d,u,s]),t==="activation"?r.jsx(KE,{}):r.jsx(FE,{})}const Kd={benchmark:"#6383ff",comparison:"#a78bfa",baseline:"#fb923c"},iv={benchmark:"Benchmark",comparison:"Comparison",baseline:"Baseline"},wf=600,Cf=180,gn=40,Xd=wf-gn*2,ha=Cf-gn*2,nN=[25,50,75,100];function ov(t){return new Date(t).toLocaleDateString(void 0,{month:"short",day:"numeric"})}function rN(t){return t==null?"--":`${(t/1e3).toFixed(1)}s`}function aN({entries:t,onPointClick:a}){const[s,i]=m.useState(null),c=m.useMemo(()=>[...t].reverse(),[t]);if(c.length<2)return null;const u=c.length,d=c.map((h,v)=>{const y=gn+v/(u-1)*Xd,b=h.passRate*100,S=gn+ha-b/100*ha;return{x:y,y:S,pct:b,entry:h}}),f=d.map(h=>`${h.x},${h.y}`).join(" "),x=Array.from(new Set(c.map(h=>h.type)));return r.jsxs("div",{className:"glass-card p-5 animate-fade-in",style:{position:"relative",overflowX:u>=20?"auto":void 0},children:[r.jsx("div",{className:"text-[13px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"Pass Rate Trend"}),r.jsx("div",{className:"flex items-center gap-5 mb-3",children:x.map(h=>r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("div",{className:"w-3 h-3 rounded-full",style:{background:Kd[h]??"var(--text-tertiary)"}}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:iv[h]??h})]},h))}),r.jsxs("svg",{width:wf,height:Cf,viewBox:`0 0 ${wf} ${Cf}`,style:{display:"block",overflow:"visible"},children:[nN.map(h=>{const v=gn+ha-h/100*ha;return r.jsxs("g",{children:[r.jsx("line",{x1:gn,y1:v,x2:gn+Xd,y2:v,stroke:"var(--border-subtle)",strokeWidth:.5,strokeDasharray:"4 4"}),r.jsxs("text",{x:gn-8,y:v+3.5,textAnchor:"end",style:{fill:"var(--text-tertiary)",fontSize:10},children:[h,"%"]})]},h)}),r.jsx("line",{x1:gn,y1:gn+ha,x2:gn+Xd,y2:gn+ha,stroke:"var(--border-subtle)",strokeWidth:1}),r.jsx("text",{x:gn-8,y:gn+ha+3.5,textAnchor:"end",style:{fill:"var(--text-tertiary)",fontSize:10},children:"0%"}),r.jsx("polyline",{points:f,fill:"none",stroke:"var(--border-subtle)",strokeWidth:1.5,strokeLinejoin:"round"}),d.map((h,v)=>r.jsx("circle",{cx:h.x,cy:h.y,r:5,fill:Kd[h.entry.type]??"var(--text-tertiary)",stroke:"var(--surface-2)",strokeWidth:2,style:{cursor:"pointer",transition:"r 0.15s ease"},onMouseEnter:y=>{y.currentTarget.setAttribute("r","7"),i({x:h.x,y:h.y,entry:h.entry})},onMouseLeave:y=>{y.currentTarget.setAttribute("r","5"),i(null)},onClick:()=>a==null?void 0:a(h.entry)},v)),lN(u).map(h=>r.jsx("text",{x:d[h].x,y:gn+ha+16,textAnchor:"middle",style:{fill:"var(--text-tertiary)",fontSize:10},children:ov(c[h].timestamp)},h))]}),s&&r.jsxs("div",{style:{position:"absolute",left:s.x,top:s.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:[r.jsx("div",{className:"text-[11px] font-medium",style:{color:"var(--text-primary)"},children:ov(s.entry.timestamp)}),r.jsx("div",{className:"text-[11px] mt-0.5",style:{color:"var(--text-tertiary)"},children:s.entry.model}),r.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[r.jsx("span",{className:"text-[9px] font-semibold px-1.5 py-0.5 rounded-full",style:{background:Kd[s.entry.type]??"var(--text-tertiary)",color:"#fff"},children:iv[s.entry.type]??s.entry.type}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:[Math.round(s.entry.passRate*100),"%"]})]}),r.jsxs("div",{className:"text-[10px] mt-1.5 flex items-center gap-3",style:{color:"var(--text-tertiary)"},children:[r.jsx("span",{children:rN(s.entry.totalDurationMs)}),r.jsx("span",{children:s.entry.totalTokens!=null?`${s.entry.totalTokens} tokens`:"--"})]})]})]})}function lN(t){if(t<=3)return Array.from({length:t},(i,c)=>c);if(t<=6)return[0,Math.floor(t/2),t-1];if(t<20)return[0,Math.floor(t/3),Math.floor(2*t/3),t-1];const a=Math.ceil(t/10),s=[0];for(let i=a;i<t-1;i+=a)s.push(i);return s.push(t-1),s}const Vs=new Map;let vn=null,Fo=null,zo=1e3,_l=0;function lb(){if(vn)return;vn=new EventSource("/api/events");const t=a=>s=>{let i={};try{i=s.data?JSON.parse(s.data):{}}catch{}const c=Vs.get(a);if(c)for(const u of c)u(i)};vn.addEventListener("benchmark:complete",t("benchmark:complete")),vn.addEventListener("history:written",t("history:written")),vn.addEventListener("leaderboard:updated",t("leaderboard:updated")),vn.onerror=()=>{vn==null||vn.close(),vn=null,_l>0&&(Fo=setTimeout(()=>{zo=Math.min(zo*2,3e4),lb()},zo))},vn.onopen=()=>{zo=1e3}}function sN(){Fo!=null&&(clearTimeout(Fo),Fo=null),vn==null||vn.close(),vn=null}function iN(t,a){return Vs.has(t)||Vs.set(t,new Set),Vs.get(t).add(a),_l++,lb(),()=>{var s;(s=Vs.get(t))==null||s.delete(a),_l--,_l<=0&&(_l=0,queueMicrotask(()=>{_l<=0&&sN()}))}}function Ko(t,a){const s=m.useRef(a);s.current=a,m.useEffect(()=>iN(t,c=>s.current(c)),[t])}function Xo(t){return t>=.8?"var(--green)":t>=.5?"var(--yellow)":"var(--red)"}function oN(t){return t>=1e3?`${(t/1e3).toFixed(1)}s`:`${Math.round(t)}ms`}function cN({rate:t,label:a}){const s=Math.round(t*100);return r.jsx("div",{className:"flex items-center gap-3",children:r.jsxs("div",{className:"flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between mb-1",children:[r.jsx("span",{className:"text-[11px] truncate",style:{color:"var(--text-primary)",maxWidth:"70%"},children:a}),r.jsxs("span",{className:"text-[11px] font-semibold",style:{color:Xo(t)},children:[s,"%"]})]}),r.jsx("div",{className:"h-1.5 rounded-full overflow-hidden",style:{background:"var(--surface-3)"},children:r.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${s}%`,background:Xo(t)}})})]})})}function uN({points:t}){if(t.length<2)return null;const a=200,s=48,i=4,c=t.length,u=t.map((x,h)=>{const v=i+h/(c-1)*(a-i*2),y=i+(s-i*2)-x.passRate*(s-i*2);return{x:v,y}}),d=`M ${u[0].x},${s-i} `+u.map(x=>`L ${x.x},${x.y}`).join(" ")+` L ${u[u.length-1].x},${s-i} Z`,f=u.map((x,h)=>`${h===0?"M":"L"} ${x.x},${x.y}`).join(" ");return r.jsxs("svg",{width:a,height:s,style:{display:"block"},children:[r.jsx("path",{d,fill:"var(--accent-muted)"}),r.jsx("path",{d:f,fill:"none",stroke:"var(--accent)",strokeWidth:1.5,strokeLinejoin:"round"}),r.jsx("circle",{cx:u[u.length-1].x,cy:u[u.length-1].y,r:3,fill:"var(--accent)"})]})}function dN({plugin:t,skill:a}){const s=`stats/${t}/${a}`,i=m.useCallback(()=>ke.getStats(t,a),[t,a]),{data:c,loading:u}=qa(s,i),d=m.useCallback(()=>In(s),[s]);if(Ko("benchmark:complete",d),Ko("history:written",d),u)return r.jsxs("div",{className:"space-y-4",children:[r.jsx("div",{className:"skeleton h-24 rounded-xl"}),r.jsx("div",{className:"skeleton h-48 rounded-xl"}),r.jsx("div",{className:"skeleton h-36 rounded-xl"})]});if(!c||c.totalRuns===0)return r.jsxs("div",{className:"text-center py-12",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center mx-auto mb-3",style:{background:"var(--surface-2)"},children:r.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"1.5",children:[r.jsx("path",{d:"M18 20V10"}),r.jsx("path",{d:"M12 20V4"}),r.jsx("path",{d:"M6 20v-6"})]})}),r.jsx("p",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No benchmark data yet"}),r.jsx("p",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:"Run some benchmarks to see statistics"})]});const f=c.trendPoints.length>0?c.trendPoints[c.trendPoints.length-1].passRate:0,x=c.trendPoints.length>0?c.trendPoints[0].passRate:0,h=f-x,v=c.assertionStats.slice(0,10);return r.jsxs("div",{className:"space-y-4 stagger-children",children:[r.jsxs("div",{className:"grid grid-cols-4 gap-3",children:[r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Total Runs"}),r.jsx("div",{className:"text-[24px] font-bold",style:{color:"var(--text-primary)"},children:c.totalRuns})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Latest Pass Rate"}),r.jsxs("div",{className:"text-[24px] font-bold",style:{color:Xo(f)},children:[Math.round(f*100),"%"]})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Trend"}),r.jsxs("div",{className:"text-[24px] font-bold",style:{color:h>=0?"var(--green)":"var(--red)"},children:[h>=0?"+":"",Math.round(h*100),"%"]})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Models Tested"}),r.jsx("div",{className:"text-[24px] font-bold",style:{color:"var(--text-primary)"},children:c.modelStats.length})]}),c.totalCost!=null&&r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Total Cost"}),r.jsx("div",{className:"text-[20px] font-bold",style:{color:"var(--text-primary)"},children:Un(c.totalCost)})]}),c.costPerRun!=null&&r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Avg Cost/Run"}),r.jsx("div",{className:"text-[20px] font-bold",style:{color:"var(--text-primary)"},children:Un(c.costPerRun)})]})]}),c.trendPoints.length>=2&&r.jsxs("div",{className:"glass-card p-5",children:[r.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Pass Rate Over Time"}),r.jsx(uN,{points:c.trendPoints})]}),c.modelStats.length>0&&r.jsxs("div",{className:"glass-card p-5",children:[r.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Model Performance"}),r.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12},children:[r.jsx("thead",{children:r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:[r.jsx("th",{style:{textAlign:"left",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Model"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Runs"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Pass Rate"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Duration"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Cost"})]})}),r.jsx("tbody",{children:c.modelStats.map(y=>r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:[r.jsx("td",{style:{padding:"8px",color:"var(--text-primary)",fontWeight:500},children:y.model}),r.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:y.runs}),r.jsx("td",{style:{padding:"8px",textAlign:"center"},children:r.jsxs("span",{className:"font-semibold",style:{color:Xo(y.avgPassRate)},children:[Math.round(y.avgPassRate*100),"%"]})}),r.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:oN(y.avgDurationMs)}),r.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:y.avgCost!=null?Un(y.avgCost):"N/A"})]},y.model))})]})]}),v.length>0&&r.jsxs("div",{className:"glass-card p-5",children:[r.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Weakest Assertions"}),r.jsx("div",{className:"space-y-3",children:v.map(y=>r.jsxs("button",{className:"block w-full text-left rounded-lg p-2 -mx-2 transition-colors duration-150",style:{background:"transparent"},onMouseEnter:b=>{b.currentTarget.style.background="var(--surface-2)"},onMouseLeave:b=>{b.currentTarget.style.background="transparent"},onClick:()=>{},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[r.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:["#",y.evalId]}),r.jsx("span",{className:"text-[10px] truncate",style:{color:"var(--text-tertiary)"},children:y.evalName}),r.jsxs("span",{className:"text-[10px] ml-auto flex-shrink-0",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:[y.totalRuns," runs"]})]}),r.jsx(cN,{rate:y.passRate,label:y.text})]},`${y.evalId}:${y.id}`))})]})]})}function fN({plugin:t,skill:a}){const[s,i]=m.useState(null),[c,u]=m.useState(null),[d,f]=m.useState({}),[x,h]=m.useState({});m.useEffect(()=>{ke.getEvals(t,a).then(i).catch(()=>i(null))},[t,a]);async function v(y){if(c===y){u(null);return}if(u(y),!d[y]){h(b=>({...b,[y]:!0}));try{const b=await ke.getCaseHistory(t,a,y);f(S=>({...S,[y]:b}))}catch{f(b=>({...b,[y]:[]}))}finally{h(b=>({...b,[y]:!1}))}}}return s?r.jsx("div",{className:"space-y-2 stagger-children",children:s.evals.map(y=>{const b=d[y.id]||[],S=c===y.id,w=x[y.id],E=b.length>0?b[0].pass_rate:null;return r.jsxs("div",{className:"glass-card overflow-hidden",children:[r.jsxs("button",{onClick:()=>v(y.id),className:"w-full text-left p-4 flex items-center gap-3 transition-colors duration-150",style:{background:S?"var(--surface-2)":"transparent"},onMouseEnter:k=>{S||(k.currentTarget.style.background="var(--surface-2)")},onMouseLeave:k=>{S||(k.currentTarget.style.background="transparent")},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2.5",strokeLinecap:"round",style:{transform:S?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease",flexShrink:0},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})}),r.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:["#",y.id]}),r.jsx("span",{className:"text-[13px] font-medium flex-1 truncate",style:{color:"var(--text-primary)"},children:y.name}),b.length>=2&&r.jsx(Zy,{entries:b}),E!=null&&r.jsxs("span",{className:"text-[12px] font-semibold flex-shrink-0",style:{color:Ul(E)},children:[Math.round(E*100),"%"]}),b.length>0&&r.jsxs("span",{className:"text-[10px] flex-shrink-0",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:[b.length," runs"]})]}),S&&r.jsx("div",{className:"border-t animate-fade-in",style:{borderColor:"var(--border-subtle)"},children:w?r.jsxs("div",{className:"p-4 flex items-center gap-2",children:[r.jsx("div",{className:"spinner",style:{width:14,height:14}}),r.jsx("span",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Loading history..."})]}):b.length===0?r.jsx("div",{className:"p-4",children:r.jsx("p",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"No history for this eval case"})}):r.jsx("div",{className:"divide-y",style:{borderColor:"var(--border-subtle)"},children:b.map((k,N)=>r.jsxs("div",{className:"p-4",style:{background:N===0?"var(--surface-2)":"transparent"},children:[r.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:Xy(k.timestamp)}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:k.model}),r.jsx("span",{className:"pill",style:{fontSize:9,padding:"1px 6px",background:k.type==="benchmark"?"rgba(99,131,255,0.15)":k.type==="comparison"?"var(--purple-muted)":"rgba(251,146,60,0.15)",color:k.type==="benchmark"?"#6383ff":k.type==="comparison"?"var(--purple)":"#fb923c"},children:k.type}),r.jsxs("span",{className:"text-[12px] font-semibold ml-auto",style:{color:Ul(k.pass_rate)},children:[Math.round(k.pass_rate*100),"%"]})]}),r.jsxs("div",{className:"flex items-center gap-4 mb-2 text-[10px]",style:{fontFamily:"var(--font-mono, monospace)",color:"var(--text-tertiary)"},children:[k.durationMs!=null&&r.jsx("span",{children:Qy(k.durationMs)}),k.tokens!=null&&r.jsxs("span",{children:[k.tokens>=1e3?`${(k.tokens/1e3).toFixed(1)}k`:k.tokens," tok"]})]}),r.jsx("div",{className:"space-y-1",children:k.assertions.map(T=>r.jsxs("div",{className:"flex items-start gap-2 py-0.5",children:[r.jsx("div",{className:"w-3.5 h-3.5 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5",style:{background:T.pass?"var(--green)":"var(--red)"},children:r.jsx("svg",{width:"7",height:"7",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"3.5",strokeLinecap:"round",strokeLinejoin:"round",children:T.pass?r.jsx("polyline",{points:"20 6 9 17 4 12"}):r.jsxs(r.Fragment,{children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("div",{className:"text-[11px]",style:{color:"var(--text-primary)"},children:T.text}),T.reasoning&&r.jsx("div",{className:"text-[10px] mt-0.5",style:{color:"var(--text-tertiary)"},children:T.reasoning})]})]},T.id))})]},N))})})]},y.id)})}):r.jsx("div",{className:"text-center py-12",children:r.jsx("p",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No eval cases found"})})}function pN(){const{state:t,dispatch:a}=bn(),{plugin:s,skill:i}=t,{state:c}=cr(),u=c.skills.find(F=>F.plugin===s&&F.skill===i),d=(u==null?void 0:u.resolvedVersion)??(u==null?void 0:u.version)??null,[f,x]=m.useState("timeline"),[h,v]=m.useState(""),[y,b]=m.useState(""),[S,w]=m.useState(!1),[E,k]=m.useState([]),[N,T]=m.useState(null),[A,B]=m.useState(!1),[z,P]=m.useState(null),[C,O]=m.useState(!1),L=`history/${s}/${i}?model=${h}&type=${y}`,_=m.useCallback(()=>ke.getHistory(s,i,{model:h||void 0,type:y||void 0}),[s,i,h,y]),{data:H,loading:W}=qa(L,_),q=H??[];m.useEffect(()=>{!H||H.length<2||ke.compareRuns(s,i,H[0].timestamp,H[1].timestamp).then(F=>{const J=F.regressions.filter(de=>de.change==="regression");a({type:"SET_REGRESSIONS",regressions:J})}).catch(()=>{})},[H,s,i,a]);const ee=m.useCallback(()=>In(L),[L]);Ko("history:written",ee);const $=m.useCallback(async F=>{if(S){k(J=>J.includes(F)?J.filter(de=>de!==F):J.length>=2?[J[1],F]:[...J,F]);return}O(!0);try{const J=await ke.getHistoryEntry(s,i,F);P(J)}catch{}finally{O(!1)}},[s,i,S]),D=m.useCallback(async()=>{if(E.length===2){B(!0);try{const F=await ke.compareRuns(s,i,E[0],E[1]);T(F)}catch{}finally{B(!1)}}},[s,i,E]),I=[...new Set(q.map(F=>F.model))];return W?r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"skeleton h-5 w-32 mb-4"}),r.jsx("div",{className:"skeleton h-48 rounded-xl mb-4"}),r.jsxs("div",{className:"space-y-2",children:[r.jsx("div",{className:"skeleton h-12 rounded-lg"}),r.jsx("div",{className:"skeleton h-12 rounded-lg"})]})]}):r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"flex items-center gap-1 mb-4",children:["timeline","per-eval","statistics"].map(F=>r.jsx("button",{onClick:()=>x(F),className:"px-4 py-2 rounded-lg text-[12px] font-medium transition-all duration-150",style:{background:f===F?"var(--accent-muted)":"transparent",color:f===F?"var(--accent)":"var(--text-tertiary)"},children:F==="timeline"?"Timeline":F==="per-eval"?"Per Eval":"Statistics"},F))}),f==="timeline"&&r.jsxs("div",{children:[q.length>0&&r.jsx("div",{className:"mb-5 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:r.jsx(aN,{entries:q,onPointClick:F=>$(F.timestamp)})}),r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsxs("select",{value:h,onChange:F=>v(F.target.value),className:"input-field text-[12px]",style:{width:150},children:[r.jsx("option",{value:"",children:"All Models"}),I.map(F=>r.jsx("option",{value:F,children:F},F))]}),r.jsxs("select",{value:y,onChange:F=>b(F.target.value),className:"input-field text-[12px]",style:{width:150},children:[r.jsx("option",{value:"",children:"All Types"}),r.jsx("option",{value:"benchmark",children:"Benchmark"}),r.jsx("option",{value:"comparison",children:"Comparison"}),r.jsx("option",{value:"baseline",children:"Baseline"}),r.jsx("option",{value:"model-compare",children:"Model Compare"}),r.jsx("option",{value:"improve",children:"AI Improve"}),r.jsx("option",{value:"instruct",children:"AI Edit"}),r.jsx("option",{value:"ai-generate",children:"AI Generate"}),r.jsx("option",{value:"eval-generate",children:"Eval Generate"})]}),r.jsx("div",{className:"flex-1"}),r.jsx("button",{onClick:()=>{w(!S),k([]),T(null)},className:`btn text-[12px] ${S?"btn-primary":"btn-secondary"}`,children:S?"Exit Compare":"Compare Runs"}),S&&E.length===2&&r.jsx("button",{onClick:D,disabled:A,className:"btn btn-primary text-[12px]",children:A?"Comparing...":"Compare"})]}),r.jsx("div",{className:"space-y-2",children:q.length===0?r.jsx("div",{className:"text-center py-8 text-[13px]",style:{color:"var(--text-tertiary)"},children:"No benchmark runs yet"}):q.map(F=>{const J=E.includes(F.timestamp);return r.jsx("button",{onClick:()=>$(F.timestamp),className:"w-full text-left rounded-lg px-4 py-3 transition-all duration-150",style:{background:J?"var(--accent-muted)":"var(--surface-1)",border:J?"1px solid var(--accent)":"1px solid var(--border-subtle)"},onMouseEnter:de=>{J||(de.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:de=>{J||(de.currentTarget.style.borderColor="var(--border-subtle)")},children:r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[S&&r.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:J?"var(--accent)":"var(--border-default)",background:J?"var(--accent)":"transparent"},children:J&&r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})}),r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:new Date(F.timestamp).toLocaleString()}),r.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})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx(ci,{version:d,size:"sm","data-testid":"history-row-version"}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:F.model}),F.totalCost!=null&&F.totalCost>0&&r.jsx("span",{className:"text-[11px] font-mono",style:{color:"var(--text-tertiary)"},children:Un(F.totalCost)}),r.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)})}),N&&r.jsx(mN,{result:N}),z&&!S&&r.jsx(hN,{run:z,onClose:()=>P(null)})]}),f==="per-eval"&&r.jsx(fN,{plugin:s,skill:i}),f==="statistics"&&r.jsx(dN,{plugin:s,skill:i})]})}function mN({result:t}){const a=t.regressions.filter(i=>i.change==="regression"),s=t.regressions.filter(i=>i.change==="improvement");return r.jsxs("div",{className:"mt-4 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:["Comparison: ",new Date(t.runA.timestamp).toLocaleDateString()," vs ",new Date(t.runB.timestamp).toLocaleDateString()]}),(t.runA.totalCost!=null||t.runB.totalCost!=null)&&r.jsxs("div",{className:"flex items-center gap-4 mb-3 text-[11px]",style:{color:"var(--text-secondary)"},children:[r.jsxs("span",{children:["Run A cost: ",Un(t.runA.totalCost??null)]}),r.jsxs("span",{children:["Run B cost: ",Un(t.runB.totalCost??null)]}),t.runA.totalCost!=null&&t.runB.totalCost!=null&&r.jsxs("span",{style:{color:t.runB.totalCost<=t.runA.totalCost?"var(--green)":"var(--red)"},children:["Delta: ",Un(t.runB.totalCost-t.runA.totalCost)]})]}),a.length>0&&r.jsxs("div",{className:"mb-3",children:[r.jsxs("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--red)"},children:["Regressions (",a.length,")"]}),a.map(i=>r.jsxs("div",{className:"text-[12px] py-1",style:{color:"var(--text-secondary)"},children:["#",i.evalId," ",i.evalName,": ",r.jsx("span",{style:{color:"var(--red)"},children:i.assertionId})," (was passing, now failing)"]},`${i.evalId}-${i.assertionId}`))]}),s.length>0&&r.jsxs("div",{className:"mb-3",children:[r.jsxs("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--green)"},children:["Improvements (",s.length,")"]}),s.map(i=>r.jsxs("div",{className:"text-[12px] py-1",style:{color:"var(--text-secondary)"},children:["#",i.evalId," ",i.evalName,": ",r.jsx("span",{style:{color:"var(--green)"},children:i.assertionId})," (was failing, now passing)"]},`${i.evalId}-${i.assertionId}`))]}),r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 mt-3",style:{color:"var(--text-tertiary)"},children:"Case Diffs"}),r.jsx("div",{className:"rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:r.jsxs("table",{className:"w-full text-[12px]",children:[r.jsx("thead",{children:r.jsxs("tr",{style:{background:"var(--surface-2)"},children:[r.jsx("th",{className:"text-left px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Case"}),r.jsx("th",{className:"text-right px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Run A"}),r.jsx("th",{className:"text-right px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Run B"})]})}),r.jsx("tbody",{children:t.caseDiffs.map(i=>r.jsxs("tr",{style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsxs("td",{className:"px-3 py-2",style:{color:"var(--text-secondary)"},children:["#",i.eval_id," ",i.eval_name]}),r.jsx("td",{className:"text-right px-3 py-2",style:{color:i.passRateA!=null?i.passRateA>=.8?"var(--green)":i.passRateA>=.5?"var(--yellow)":"var(--red)":"var(--text-tertiary)"},children:i.passRateA!=null?`${Math.round(i.passRateA*100)}%`:i.statusA}),r.jsx("td",{className:"text-right px-3 py-2",style:{color:i.passRateB!=null?i.passRateB>=.8?"var(--green)":i.passRateB>=.5?"var(--yellow)":"var(--red)":"var(--text-tertiary)"},children:i.passRateB!=null?`${Math.round(i.passRateB*100)}%`:i.statusB})]},i.eval_id))})]})})]})}function hN({run:t,onClose:a}){return(t.type==="improve"||t.type==="instruct")&&t.improve?r.jsx(xN,{run:t,onClose:a}):r.jsxs("div",{className:"mt-4 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:["Run: ",new Date(t.timestamp).toLocaleString()]}),r.jsx("button",{onClick:a,className:"btn btn-ghost text-[11px]",children:"Close"})]}),r.jsxs("div",{className:"text-[11px] mb-3",style:{color:"var(--text-tertiary)"},children:["Model: ",t.model," | Cases: ",t.cases.length," | Pass Rate: ",t.overall_pass_rate!=null?`${Math.round(t.overall_pass_rate*100)}%`:"--",t.totalCost!=null&&t.totalCost>0&&` | Cost: ${Un(t.totalCost)}`]}),r.jsx("div",{className:"space-y-2",children:t.cases.map(s=>r.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-2)"},children:r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("span",{className:"text-[12px]",style:{color:"var(--text-secondary)"},children:["#",s.eval_id," ",s.eval_name]}),r.jsxs("div",{className:"flex items-center gap-2",children:[s.cost!=null&&s.cost>0&&r.jsx("span",{className:"text-[10px] font-mono",style:{color:"var(--text-tertiary)"},children:Un(s.cost)}),r.jsx("span",{className:"text-[11px] font-semibold",style:{color:s.status==="pass"?"var(--green)":"var(--red)"},children:s.pass_rate!=null?`${Math.round(s.pass_rate*100)}%`:s.status})]})]})},s.eval_id))})]})}function xN({run:t,onClose:a}){var u;const s=m.useMemo(()=>t.improve?uc(t.improve.original,t.improve.improved):[],[t.improve]),i=m.useMemo(()=>{const d=s.filter(x=>x.type==="added").length,f=s.filter(x=>x.type==="removed").length;return{added:d,removed:f}},[s]),c=m.useMemo(()=>{let d=0,f=0;return s.map(x=>x.type==="removed"?(d++,{...x,origNum:d,newNum:null}):x.type==="added"?(f++,{...x,origNum:null,newNum:f}):(d++,f++,{...x,origNum:d,newNum:f}))},[s]);return r.jsxs("div",{className:"mt-4 rounded-xl overflow-hidden animate-fade-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.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:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"w-8 h-8 rounded-lg flex items-center justify-center",style:{background:"var(--purple-muted)"},children:r.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--purple)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),r.jsx("path",{d:"M2 17l10 5 10-5"}),r.jsx("path",{d:"M2 12l10 5 10-5"})]})}),r.jsxs("div",{children:[r.jsx("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md Changes"}),r.jsxs("div",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:[new Date(t.timestamp).toLocaleString()," · ",t.model]})]})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[r.jsxs("span",{style:{color:"var(--green)"},children:["+",i.added]}),r.jsxs("span",{style:{color:"var(--red)"},children:["-",i.removed]})]}),r.jsx("button",{onClick:a,className:"w-7 h-7 rounded-lg flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:d=>{d.currentTarget.style.background="var(--surface-3)"},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),((u=t.improve)==null?void 0:u.reasoning)&&r.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:[r.jsx("span",{className:"font-semibold",style:{color:"var(--purple)"},children:"AI Reasoning: "}),t.improve.reasoning]}),r.jsx("div",{className:"mx-4 my-4 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)",maxHeight:480,overflowY:"auto"},children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:c.map((d,f)=>r.jsxs("tr",{style:{background:d.type==="added"?"var(--green-muted)":d.type==="removed"?"var(--red-muted)":"transparent"},children:[r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:d.type==="removed"?"var(--red)":"var(--text-tertiary)",opacity:d.origNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:d.origNum??""}),r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:d.type==="added"?"var(--green)":"var(--text-tertiary)",opacity:d.newNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:d.newNum??""}),r.jsx("td",{className:"select-none text-center",style:{width:20,fontSize:11,fontWeight:700,color:d.type==="added"?"var(--green)":d.type==="removed"?"var(--red)":"transparent",borderRight:d.type==="added"?"2px solid var(--green)":d.type==="removed"?"2px solid var(--red)":"2px solid transparent"},children:d.type==="added"?"+":d.type==="removed"?"-":" "}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:d.type==="added"?"var(--green)":d.type==="removed"?"var(--red)":"var(--text-secondary)"},children:d.content||""})]},f))})})})]})}function sb({data:t}){if(t.length<2)return r.jsx("span",{style:{color:"var(--text-tertiary)",fontSize:10},children:"--"});const a=t.slice(-10),s=80,i=24,c=2,u=s-c*2,d=i-c*2,f=a.length,x=Math.min(...a),v=Math.max(...a)-x||1,y=a.map((w,E)=>{const k=c+E/(f-1)*u,N=c+d-(w-x)/v*d;return`${k.toFixed(1)},${N.toFixed(1)}`}),b=a[a.length-1],S=Ul(b);return r.jsxs("svg",{width:s,height:i,viewBox:`0 0 ${s} ${i}`,style:{display:"block"},children:[r.jsx("polyline",{points:y.join(" "),fill:"none",stroke:S,strokeWidth:1.5,strokeLinejoin:"round",strokeLinecap:"round"}),(()=>{const[w,E]=y[y.length-1].split(",");return r.jsx("circle",{cx:w,cy:E,r:2.5,fill:S})})()]})}function gN(){return r.jsxs("span",{className:"pill",style:{background:"var(--yellow-muted)",color:"var(--yellow)",fontSize:9,fontWeight:700,gap:3},children:[r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"var(--yellow)",stroke:"none",children:r.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 vN({pct:t}){const a=t>=10?"var(--green)":t>=0?"var(--yellow)":"var(--red)",s=t>=10?"var(--green-muted)":t>=0?"var(--yellow-muted)":"var(--red-muted)",i=t>=0?"+":"";return r.jsxs("span",{className:"pill",style:{background:s,color:a,fontSize:10,fontWeight:600},children:[i,t.toFixed(1),"%"]})}function yN({score:t,rating:a}){const s={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)"}},i=s[a]??s.minimal,c=t>=0?"+":"";return r.jsxs("div",{className:"flex items-center gap-2 mt-3",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"Skill Quality:"}),r.jsxs("span",{className:"pill",style:{background:i.bg,color:i.fg,fontSize:11,fontWeight:600},children:[c,t.toFixed(1),"% (",a.toUpperCase(),")"]})]})}function bN({warning:t}){return r.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:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--yellow)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.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"}),r.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),r.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--yellow)"},children:t})]})}function jN({active:t,onChange:a,hasBaseline:s}){return r.jsxs("div",{className:"flex gap-1 p-0.5 rounded-lg",style:{background:"var(--surface-2)"},children:[r.jsx("button",{onClick:()=>a("rankings"),className:"px-3 py-1 rounded-md text-[11px] font-medium transition-all",style:{background:t==="rankings"?"var(--surface-3)":"transparent",color:t==="rankings"?"var(--text-primary)":"var(--text-tertiary)"},children:"Rankings"}),r.jsx("button",{onClick:()=>a("amplification"),disabled:!s,className:"px-3 py-1 rounded-md text-[11px] font-medium transition-all",style:{background:t==="amplification"?"var(--surface-3)":"transparent",color:s&&t==="amplification"?"var(--text-primary)":"var(--text-tertiary)",opacity:s?1:.5,cursor:s?"pointer":"not-allowed"},title:s?"View skill amplification data":"Run sweep with --baseline to see amplification data",children:"Skill Amplification"})]})}function SN(t){var i,c,u;if(t.length===0)return[];const a=new Map;for(const d of t)for(const f of d.models){if(f.status==="error")continue;const x=`${f.provider}/${f.model}`;a.has(x)||a.set(x,{provider:f.provider,passRates:[],lastRubric:null,lastDuration:0,lastCost:null,lastBaselinePassRate:void 0,lastSkillDelta:void 0,lastAmplificationPct:void 0,lastCompositeScore:void 0,hasBaseline:!1});const h=a.get(x);h.passRates.push(f.passRate.mean),h.lastRubric=((i=f.rubricScore)==null?void 0:i.mean)??null,h.lastDuration=f.duration.mean,h.lastCost=((c=f.cost)==null?void 0:c.total)??null,h.lastCompositeScore=f.compositeScore,f.baselinePassRate!=null&&(h.lastBaselinePassRate=f.baselinePassRate.mean,h.lastSkillDelta=(u=f.skillDelta)==null?void 0:u.mean,h.lastAmplificationPct=f.amplificationPct,h.hasBaseline=!0)}const s=[];for(const[d,f]of a){const[x,...h]=d.split("/");s.push({rank:0,model:h.join("/"),provider:x,passRate:f.passRates[f.passRates.length-1],rubricScore:f.lastRubric,duration:f.lastDuration,cost:f.lastCost,sparklineData:f.passRates,isBest:!1,baselinePassRate:f.lastBaselinePassRate,skillDelta:f.lastSkillDelta,amplificationPct:f.lastAmplificationPct,compositeScore:f.lastCompositeScore,hasBaseline:f.hasBaseline})}return s.sort((d,f)=>{const x=d.compositeScore??d.passRate;return(f.compositeScore??f.passRate)-x}),s.forEach((d,f)=>{d.rank=f+1}),s.length>0&&(s[0].isBest=!0),s}const ib=(t="left")=>({padding:"10px 12px",fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary)",textAlign:t,whiteSpace:"nowrap"});function kN({entries:t}){return r.jsx("div",{className:"glass-card",style:{overflow:"hidden"},children:r.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[r.jsx("thead",{children:r.jsx("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:["#","Model","Pass Rate","Rubric","Duration","Cost","Trend"].map(a=>r.jsx("th",{style:ib(a==="#"?"center":"left"),children:a},a))})}),r.jsx("tbody",{children:t.map(a=>r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},onMouseEnter:s=>{s.currentTarget.style.background="var(--surface-2)"},onMouseLeave:s=>{s.currentTarget.style.background="transparent"},children:[r.jsx("td",{style:{padding:"10px 12px",textAlign:"center",fontSize:12,fontWeight:600,color:"var(--text-tertiary)",width:40},children:a.rank}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:a.model}),r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:a.provider}),a.isBest&&r.jsx(gN,{})]})}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("span",{className:"pill",style:{background:a.passRate>=.7?"var(--green-muted)":a.passRate>=.4?"var(--yellow-muted)":"var(--red-muted)",color:Ul(a.passRate),fontSize:11,fontWeight:600},children:[Math.round(a.passRate*100),"%"]})}),r.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:a.rubricScore!=null?a.rubricScore.toFixed(1):"--"}),r.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:a.duration<1e3?`${Math.round(a.duration)}ms`:`${(a.duration/1e3).toFixed(1)}s`}),r.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:a.cost!=null?`$${a.cost.toFixed(4)}`:"N/A"}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsx(sb,{data:a.sparklineData})})]},`${a.provider}/${a.model}`))})]})})}function wN({entries:t}){const a=[...t].filter(s=>s.hasBaseline).sort((s,i)=>(i.amplificationPct??0)-(s.amplificationPct??0));return a.length===0?r.jsx("div",{className:"flex items-center justify-center py-8",children:r.jsx("div",{className:"text-center",children:r.jsxs("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:["No baseline data available. Run sweep with ",r.jsx("code",{children:"--baseline"})," flag."]})})}):r.jsx("div",{className:"glass-card",style:{overflow:"hidden"},children:r.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[r.jsx("thead",{children:r.jsx("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:["#","Model","With Skill","Without Skill","Delta","Amplification","Trend"].map(s=>r.jsx("th",{style:ib(s==="#"?"center":"left"),children:s},s))})}),r.jsx("tbody",{children:a.map((s,i)=>r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},onMouseEnter:c=>{c.currentTarget.style.background="var(--surface-2)"},onMouseLeave:c=>{c.currentTarget.style.background="transparent"},children:[r.jsx("td",{style:{padding:"10px 12px",textAlign:"center",fontSize:12,fontWeight:600,color:"var(--text-tertiary)",width:40},children:i+1}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:s.model}),r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:s.provider})]})}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("span",{className:"pill",style:{background:s.passRate>=.7?"var(--green-muted)":s.passRate>=.4?"var(--yellow-muted)":"var(--red-muted)",color:Ul(s.passRate),fontSize:11,fontWeight:600},children:[Math.round(s.passRate*100),"%"]})}),r.jsx("td",{style:{padding:"10px 12px"},children:s.baselinePassRate!=null?r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:[Math.round(s.baselinePassRate*100),"%"]}):"--"}),r.jsx("td",{style:{padding:"10px 12px"},children:s.skillDelta!=null?r.jsxs("span",{className:"text-[11px] font-medium",style:{color:s.skillDelta>=0?"var(--green)":"var(--red)"},children:[s.skillDelta>=0?"+":"",(s.skillDelta*100).toFixed(1),"pp"]}):"--"}),r.jsx("td",{style:{padding:"10px 12px"},children:s.amplificationPct!=null&&isFinite(s.amplificationPct)?r.jsx(vN,{pct:s.amplificationPct}):"--"}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsx(sb,{data:s.sparklineData})})]},`${s.provider}/${s.model}`))})]})})}function CN(){const{state:t}=bn(),{plugin:a,skill:s}=t,[i,c]=m.useState("rankings"),u=`leaderboard/${a}/${s}`,d=m.useCallback(()=>ke.getLeaderboard(a,s),[a,s]),{data:f,loading:x,error:h}=qa(u,d),v=(f==null?void 0:f.entries)??[],y=(h==null?void 0:h.message)??null;m.useEffect(()=>{c("rankings")},[a,s]);const b=m.useCallback(()=>In(u),[u]);Ko("leaderboard:updated",b);const S=m.useMemo(()=>SN(v),[v]),w=S.some(N=>N.hasBaseline),E=v[0],k=E==null?void 0:E.judgeBiasWarning;return x?r.jsx("div",{className:"flex items-center justify-center h-full",children:r.jsx("div",{className:"spinner spinner-lg"})}):y?r.jsx("div",{className:"flex items-center justify-center h-full px-8",children:r.jsxs("div",{className:"text-center",children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--red)"},children:"Failed to load leaderboard"}),r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:y})]})}):S.length===0?r.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-4 px-8",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center",style:{background:"var(--accent-muted)"},children:r.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M18 20V10"}),r.jsx("path",{d:"M12 20V4"}),r.jsx("path",{d:"M6 20v-6"})]})}),r.jsxs("div",{className:"text-center",children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No sweep results yet"}),r.jsx("div",{className:"text-[12px] mb-3",style:{color:"var(--text-tertiary)"},children:"Run your first model sweep to compare performance across models:"}),r.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"'}),r.jsxs("div",{className:"text-[11px] mt-2",style:{color:"var(--text-tertiary)"},children:["Add ",r.jsx("code",{children:"--baseline"})," to measure skill amplification per model."]})]})]}):r.jsxs("div",{className:"p-5 animate-fade-in",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"text-[15px] font-semibold",style:{color:"var(--text-primary)"},children:"Model Leaderboard"}),r.jsx(jN,{active:i,onChange:c,hasBaseline:w})]}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[v.length," sweep",v.length!==1?"s":""," · ",S.length," model",S.length!==1?"s":""]})]}),k&&r.jsx(bN,{warning:k}),i==="rankings"?r.jsx(kN,{entries:S}):r.jsx(wN,{entries:S}),i==="amplification"&&(E==null?void 0:E.skillQualityScore)!=null&&(E==null?void 0:E.skillQualityRating)&&r.jsx(yN,{score:E.skillQualityScore,rating:E.skillQualityRating})]})}function EN(t){if(!t)return[];const a=t.split(`
|
|
105
|
-
`),s=[];for(const i of a)if(!(i.startsWith("--- ")||i.startsWith("+++ "))){if(i.startsWith("@@")){s.push({type:"header",content:i});continue}if(i.startsWith("+")){s.push({type:"add",content:i.slice(1)});continue}if(i.startsWith("-")){s.push({type:"remove",content:i.slice(1)});continue}(i.startsWith(" ")||i===""&&s.length>0)&&s.push({type:"context",content:i.startsWith(" ")?i.slice(1):""})}return s}function Yf({contentDiff:t,fromLabel:a,toLabel:s,diffSummary:i,maxHeight:c=480,collapsible:u=!1,renderContext:d="inline",onRetry:f}){const[x,h]=m.useState(u),[v,y]=m.useState("unified"),b=m.useRef(null),S=m.useRef(null),w=m.useMemo(()=>EN(t),[t]),E=m.useMemo(()=>{const z=w.filter(C=>C.type==="add").length,P=w.filter(C=>C.type==="remove").length;return{added:z,removed:P}},[w]),k=m.useMemo(()=>{let z=0,P=0;return w.filter(C=>C.type!=="header").map(C=>C.type==="remove"?(z++,{...C,origNum:z,newNum:null}):C.type==="add"?(P++,{...C,origNum:null,newNum:P}):(z++,P++,{...C,origNum:z,newNum:P}))},[w]),N=m.useMemo(()=>{const z=[],P=[];for(const C of k)if(C.type==="remove")z.push(C);else if(C.type==="add")P.push(C);else{for(;z.length<P.length;)z.push({type:"context",content:"",origNum:null,newNum:null});for(;P.length<z.length;)P.push({type:"context",content:"",origNum:null,newNum:null});z.push(C),P.push(C)}for(;z.length<P.length;)z.push({type:"context",content:"",origNum:null,newNum:null});for(;P.length<z.length;)P.push({type:"context",content:"",origNum:null,newNum:null});return{left:z,right:P}},[k]),T=m.useCallback(z=>{const P=z==="left"?b.current:S.current,C=z==="left"?S.current:b.current;P&&C&&(C.scrollTop=P.scrollTop)},[]);if(!t||w.length===0)return r.jsxs("div",{className:"rounded-lg p-6 text-center",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[13px] mb-2",style:{color:"var(--text-tertiary)"},children:"Unable to load diff. Try again."}),f&&r.jsx("button",{onClick:f,className:"btn btn-secondary text-[12px]",children:"Retry"})]});const A=d==="modal"?"fixed inset-0 z-50 flex items-center justify-center bg-black/50":"",B=r.jsxs("div",{className:"rounded-xl overflow-hidden animate-fade-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between px-5 py-3",style:{background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:[a," → ",s]}),r.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[r.jsxs("span",{style:{color:"var(--green)"},children:["+",E.added]}),r.jsxs("span",{style:{color:"var(--red)"},children:["-",E.removed]})]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("button",{onClick:()=>y(v==="unified"?"side-by-side":"unified"),className:"btn btn-ghost text-[11px]",children:v==="unified"?"Side-by-side":"Unified"}),u&&r.jsx("button",{onClick:()=>h(!x),className:"btn btn-ghost text-[11px]",children:x?"Expand":"Collapse"})]})]}),i&&r.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:i}),!x&&(v==="unified"?r.jsx("div",{className:"mx-4 my-4 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)",maxHeight:c,overflowY:"auto"},children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:k.map((z,P)=>r.jsxs("tr",{style:{background:z.type==="add"?"rgba(34,197,94,0.08)":z.type==="remove"?"rgba(239,68,68,0.08)":"transparent"},children:[r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:z.type==="remove"?"rgba(239,68,68,0.5)":"var(--text-tertiary)",opacity:z.origNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:z.origNum??""}),r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:z.type==="add"?"rgba(34,197,94,0.5)":"var(--text-tertiary)",opacity:z.newNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:z.newNum??""}),r.jsx("td",{className:"select-none text-center",style:{width:20,fontSize:11,fontWeight:700,color:z.type==="add"?"var(--green)":z.type==="remove"?"var(--red)":"transparent",borderRight:z.type==="add"?"2px solid var(--green)":z.type==="remove"?"2px solid var(--red)":"2px solid transparent"},children:z.type==="add"?"+":z.type==="remove"?"-":" "}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:z.type==="add"?"var(--green)":z.type==="remove"?"var(--red)":"var(--text-secondary)"},children:z.content||""})]},P))})})}):r.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:[r.jsx("div",{ref:b,style:{maxHeight:c,overflowY:"auto",borderRight:"1px solid var(--border-subtle)"},onScroll:()=>T("left"),children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:N.left.map((z,P)=>r.jsxs("tr",{style:{background:z.type==="remove"?"rgba(239,68,68,0.08)":"transparent"},children:[r.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:z.origNum??""}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:z.type==="remove"?"var(--red)":"var(--text-secondary)"},children:z.content||""})]},P))})})}),r.jsx("div",{ref:S,style:{maxHeight:c,overflowY:"auto"},onScroll:()=>T("right"),children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:N.right.map((z,P)=>r.jsxs("tr",{style:{background:z.type==="add"?"rgba(34,197,94,0.08)":"transparent"},children:[r.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:z.newNum??""}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:z.type==="add"?"var(--green)":"var(--text-secondary)"},children:z.content||""})]},P))})})})]}))]});return d==="modal"?r.jsx("div",{className:A,children:r.jsx("div",{style:{width:"80%",maxWidth:900},children:B})}):B}const Qd="https://verified-skill.com/submit",NN=/^https:\/\/github\.com\/[^/?#@:]+\/[^/?#@:]+(?:[/?#].*)?$/;function TN(t){if(!t)return Qd;const a=t.trim();return!a||!NN.test(a)?Qd:`${Qd}?repo=${encodeURIComponent(a)}`}const RN={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 AN({size:t}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.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"}),r.jsx("path",{d:"M7.5 10.5L9.5 12.5L13 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function LN({size:t}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.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"}),r.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 cv={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)"}},MN={VERIFIED:"Security-Scanned",CERTIFIED:"Trusted Publisher",TAINTED:"Tainted"};function ob(t){return MN[t]??t}function zN({size:t}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.jsx("path",{d:"M10 2L1.5 17.5H18.5L10 2Z",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),r.jsx("path",{d:"M10 8V12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),r.jsx("circle",{cx:"10",cy:"14.5",r:"1",fill:"currentColor"})]})}function DN({tier:t,size:a}){return t==="TAINTED"?r.jsx(zN,{size:a}):t==="CERTIFIED"?r.jsx(LN,{size:a}):r.jsx(AN,{size:a})}function l4({tier:t,size:a="md",isTainted:s}){const i=RN[a],c=s?"TAINTED":t,u=cv[c]??cv.VERIFIED;return r.jsxs("span",{"data-testid":"tier-badge","data-tier":c,style:{display:"inline-flex",alignItems:"center",gap:i.gap,padding:`${i.py} ${i.px}`,height:i.height,borderRadius:i.radius,fontFamily:"var(--font-geist-mono)",fontSize:i.fontSize,fontWeight:600,letterSpacing:"0.03em",whiteSpace:"nowrap",color:u.color,backgroundColor:u.bg,border:`1px solid ${u.border}`,lineHeight:1},children:[r.jsx(DN,{tier:c,size:i.icon}),ob(c)]})}const uv={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 _N(t,a){return t?t.length>a?t.slice(0,a)+"…":t:""}function ON(t){if(!t)return"";const a=t.trim();if(!a)return"";const s=a.toLowerCase();return s==="0 files"||s==="no files"||s==="no file changes"?"Metadata-only release — no file changes":a}function BN(){const{state:t}=bn(),{plugin:a,skill:s}=t,i=cr(),{onSkillUpdated:c,updateCount:u}=i,d=m.useMemo(()=>i.state.skills.find(D=>D.plugin===a&&D.skill===s)??null,[i.state.skills,a,s]),f=`versions/${a}/${s}`,x=m.useCallback(()=>ke.getSkillVersions(a,s),[a,s]),{data:h,loading:v}=qa(f,x),[y,b]=m.useState(null),[S,w]=m.useState(null),[E,k]=m.useState(null),[N,T]=m.useState(!1),[A,B]=m.useState("idle"),[z,P]=m.useState(null),C=m.useRef(null),O=m.useRef(null),L=m.useMemo(()=>(h==null?void 0:h.find(D=>D.isInstalled))??null,[h]),_=m.useMemo(()=>(h==null?void 0:h[0])??null,[h]),H=L&&_&&L.version!==_.version,W=m.useCallback(D=>{y?!S&&D!==y?w(D):(b(D),w(null),k(null)):(b(D),k(null))},[y,S]),q=m.useCallback(async(D,I)=>{T(!0);try{const F=await ke.getVersionDiff(a,s,D,I);k(F)}catch{k(null)}finally{T(!1)}},[a,s]);m.useEffect(()=>{if(y&&S){const D=h||[],I=D.findIndex(M=>M.version===y),F=D.findIndex(M=>M.version===S),[J,de]=I>F?[y,S]:[S,y];q(J,de)}},[y,S,h,q]);const ee=m.useCallback(()=>{!L||!_||(b(L.version),w(_.version))},[L,_]),$=m.useCallback(async()=>{B("updating"),P(null);const D=new AbortController;C.current=D;try{const I=await ke.postSkillUpdate(a,s,D.signal);if(I.ok)B("done"),c(a,s);else{const F=`Update failed (HTTP ${I.status}): ${I.body||"no response body"}`;B("error"),P(F)}}catch(I){if(I instanceof DOMException&&I.name==="AbortError")return;const F=I instanceof Error?I.message:"Network error";B("error"),P(F)}finally{C.current===D&&(C.current=null)}},[a,s,c]);if(m.useEffect(()=>()=>{var D;(D=C.current)==null||D.abort(),C.current=null},[]),v)return r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"skeleton h-5 w-40 mb-4"}),r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"skeleton h-14 rounded-lg"}),r.jsx("div",{className:"skeleton h-14 rounded-lg"}),r.jsx("div",{className:"skeleton h-14 rounded-lg"})]})]});if(!h||h.length===0){if((d==null?void 0:d.origin)==="source"){const I=TN((d==null?void 0:d.homepage)??null);return r.jsxs("div",{className:"flex flex-col items-center justify-center h-full py-16 px-8","data-testid":"versions-empty-state-local",children:[r.jsx("div",{className:"text-[14px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"No published versions yet"}),r.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."}),r.jsx("a",{href:I,target:"_blank",rel:"noopener noreferrer",className:"btn btn-primary text-[12px]","data-testid":"versions-empty-state-cta",children:"Submit on verified-skill.com"})]})}return d!=null&&d.version?r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"text-[14px] font-semibold mb-4",style:{color:"var(--text-primary)"},children:"Version History"}),r.jsxs("div",{className:"relative",children:[r.jsx("div",{className:"absolute left-3 top-0 bottom-0",style:{width:2,background:"var(--border-subtle)"}}),r.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:[r.jsx("span",{className:"absolute left-1.5 top-4 rounded-full",style:{width:10,height:10,background:"var(--accent)",border:"2px solid var(--accent)"}}),r.jsx("div",{className:"flex items-center justify-between",children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:d.version}),r.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"LOCAL"}),r.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"})]})}),r.jsx("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:"Local-only — this skill is not registered on verified-skill.com, so no upstream history is available."})]})]})]}):r.jsx("div",{className:"flex flex-col items-center justify-center h-full py-16","data-testid":"versions-empty-state-installed",children:r.jsx("div",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No version history available"})})}return r.jsxs("div",{className:"p-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsx("div",{className:"text-[14px] font-semibold",style:{color:"var(--text-primary)"},children:"Version History"}),r.jsxs("div",{className:"flex items-center gap-2",children:[H&&r.jsx("button",{onClick:ee,className:"btn btn-secondary text-[11px]",children:"View changes since installed"}),H&&A!=="done"&&(A==="error"?r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--red)"},children:z||"Update failed"}),r.jsx("button",{onClick:$,className:"btn btn-secondary text-[11px]",children:"Retry"})]}):r.jsx("button",{onClick:$,disabled:A!=="idle",className:"btn btn-primary text-[11px]",children:A==="idle"?`Update to ${_==null?void 0:_.version}`:A==="updating"?"Starting update...":A==="scanning"?"Scanning...":"Installing..."})),u>1&&r.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 (",u,")"]})]})]}),y&&!S&&r.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 ",y]}),r.jsxs("div",{className:"relative",children:[r.jsx("div",{className:"absolute left-3 top-0 bottom-0",style:{width:2,background:"var(--border-subtle)"}}),r.jsx("div",{className:"space-y-1",children:h.map(D=>{const I=uv[D.certTier]||uv.COMMUNITY,F=D.version===y||D.version===S,J=D.isInstalled;return r.jsxs("button",{onClick:()=>W(D.version),className:"w-full text-left pl-8 pr-4 py-3 relative rounded-lg transition-all duration-150",style:{background:F?"var(--accent-muted)":"transparent",border:F?"1px solid var(--accent)":"1px solid transparent",cursor:"pointer"},onMouseEnter:de=>{F||(de.currentTarget.style.background="var(--surface-1)")},onMouseLeave:de=>{F||(de.currentTarget.style.background="transparent")},children:[r.jsx("span",{className:"absolute left-1.5 top-4 rounded-full",style:{width:J?10:8,height:J?10:8,background:J?"var(--accent)":"var(--surface-3)",border:J?"2px solid var(--accent)":"2px solid var(--border-default)"}}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:D.version}),r.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:I.bg,color:I.text},children:ob(D.certTier)}),J&&r.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"})]}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:new Date(D.createdAt).toLocaleDateString()})]}),(()=>{const de=ON(D.diffSummary);return de?r.jsx("div",{"data-testid":"version-row-diff-summary",className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:_N(de,80)}):null})()]},D.version)})}),r.jsx("div",{ref:O,style:{height:1}})]}),N&&r.jsx("div",{className:"mt-4",children:r.jsx("div",{className:"skeleton h-48 rounded-xl"})}),E&&!N&&r.jsx("div",{className:"mt-4",children:r.jsx(Yf,{contentDiff:E.contentDiff,fromLabel:E.from,toLabel:E.to,diffSummary:E.diffSummary,renderContext:"inline",onRetry:()=>y&&S&&q(E.from,E.to)})})]})}function IN(t){return t==="timeline"||t==="models"||t==="versions"}function $N({view:t}){return t==="models"?r.jsx(CN,{}):t==="versions"?r.jsx(BN,{}):r.jsx(pN,{})}function UN(t){const a={prompt:t.prompt,provider:t.provider,model:t.model};return t.targetAgents&&t.targetAgents.length>0&&(a.targetAgents=t.targetAgents),a}function HN(t){var c;const a=t.userName.trim().length>0,s=t.userPlugin.trim().length>0||t.userNewPlugin.trim().length>0,i=t.forceLayout===3;return{applyName:a?null:t.aiName??null,applySuggestedPlugin:!i&&!s&&!!((c=t.aiSuggestedPlugin)!=null&&c.plugin),suggestedPluginValue:i||s?null:t.aiSuggestedPlugin??null}}function Qo(t,a=!0){let s=t.toLowerCase().replace(/[^a-z0-9]+/g,"-");return a&&(s=s.replace(/^-+|-+$/g,"")),s}function PN(t,a,s,i){const u=`.../${t.split("/").slice(-2).join("/")}`;switch(a){case 1:return`${u}/${s}/skills/${i}/SKILL.md`;case 2:return`${u}/plugins/${s}/skills/${i}/SKILL.md`;case 3:return`${u}/skills/${i}/SKILL.md`}}function VN({onCreated:t,resolveAiConfigOverride:a,forceLayout:s}){const[i,c]=m.useState("ai"),[u,d]=m.useState(null),[f,x]=m.useState(!0),{config:h}=Ya(),[v,y]=m.useState(""),[b,S]=m.useState(s??3),[w,E]=m.useState(""),[k,N]=m.useState(""),[T,A]=m.useState(""),[B,z]=m.useState(""),[P,C]=m.useState(""),[O,L]=m.useState(""),[_,H]=m.useState("write"),[W,q]=m.useState([]),[ee,$]=m.useState(!1),[D,I]=m.useState(null),[F,J]=m.useState(null),[de,M]=m.useState(null),[U,K]=m.useState("vskill"),[Q,ce]=m.useState("1.0.0"),[Z,ie]=m.useState(!0),X=m.useCallback(async()=>{try{const Be=await ke.detectEngines();M(Be),K(Je=>Je!=="vskill"?Je:Be.vskillSkillBuilder?"vskill":Be.anthropicSkillCreator?"anthropic-skill-creator":"none")}catch{M({vskillSkillBuilder:!1,anthropicSkillCreator:!1,vskillVersion:null,anthropicPath:null})}},[]);m.useEffect(()=>{X()},[X]);const[me,je]=m.useState(""),[Ne,Me]=m.useState(!1),[Fe,Ue]=m.useState(!1),[De,Ge]=m.useState(null),[ft,oe]=m.useState(null),[ve,ye]=m.useState([]),be=m.useRef(null),Ee=m.useRef(null),qe=m.useRef(null),He=m.useRef(null),jt=m.useRef(null),[Dt,St]=m.useState(!1),[At,xe]=m.useState(!1),Ze=m.useRef(v),Xe=m.useRef(w),kt=m.useRef(k);m.useEffect(()=>{Ze.current=v},[v]),m.useEffect(()=>{Xe.current=w},[w]),m.useEffect(()=>{kt.current=k},[k]),m.useEffect(()=>{ke.getProjectLayout().then(Be=>{if(d(Be),s)return;S(Be.suggestedLayout);const Je=Be.detectedLayouts.find(Pn=>Pn.layout===Be.suggestedLayout);Je!=null&&Je.existingPlugins.length&&E(Je.existingPlugins[0])}).catch(()=>{}).finally(()=>x(!1))},[s]),m.useEffect(()=>{var Be;i==="ai"&&((Be=be.current)==null||Be.focus())},[i]),m.useEffect(()=>()=>{var Be;(Be=Ee.current)==null||Be.abort()},[]);const _t=m.useMemo(()=>{var Be;return u?((Be=u.detectedLayouts.find(Je=>Je.layout===b))==null?void 0:Be.existingPlugins)||[]:[]},[u,b]),lt=w==="__new__"?k:w,jn=u?PN(u.root,b,lt||"{plugin}",v||"{skill}"):"",Yt=m.useMemo(()=>u?u.detectedLayouts.filter(Be=>Be.layout!==4):[],[u]),mn=m.useMemo(()=>{if(!u)return null;const Be=u.detectedLayouts.find(hn=>hn.layout===2&&hn.existingPlugins.length>0),Je=u.detectedLayouts.find(hn=>hn.layout===1&&hn.existingPlugins.length>0),Pn=Be||Je;return Pn?{layout:Pn.layout,plugins:Pn.existingPlugins}:null},[u]),un=m.useCallback(()=>{if(a)return a();if(!h)return{provider:"claude-cli",model:"sonnet"};const Be=h.provider||"claude-cli",Je=h.model||"sonnet";return{provider:Be,model:Je}},[h,a]),ur=m.useCallback(()=>{var Be;(Be=Ee.current)==null||Be.abort(),Me(!1)},[]),Tn=m.useCallback(()=>{Ge(null),oe(null)},[]),Hn=m.useCallback(async()=>{var hn,jr;if(Ge(null),oe(null),ye([]),qe.current=null,He.current=null,!me.trim()){Ge("Describe what your skill should do");return}Me(!0);const Be=new AbortController;Ee.current=Be;const{provider:Je,model:Pn}=un();try{const rn=await fetch("/api/skills/generate?sse",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(UN({prompt:me.trim(),provider:Je,model:Pn,targetAgents:W})),signal:Be.signal});if(!rn.ok||!rn.body){let Ct=`HTTP ${rn.status}`;try{const Jt=await rn.json();Jt.error&&(Ct=Jt.error)}catch{}throw new Error(Ct)}const ae=rn.body.getReader(),Se=new TextDecoder;let Te="",$t="";for(;;){const{done:Ct,value:Jt}=await ae.read();if(Ct)break;Te+=Se.decode(Jt,{stream:!0});const Vr=Te.split(`
|
|
106
|
-
`);Te=Vr.pop()||"";for(const dr of Vr)if(dr.startsWith("event: "))$t=dr.slice(7).trim();else if(dr.startsWith("data: ")){try{const nt=JSON.parse(dr.slice(6));if($t==="progress")ye(Ot=>[...Ot,{phase:nt.phase,message:nt.message,timestamp:Date.now()}]);else if($t==="provenance")He.current={resolvedModelId:typeof nt.resolvedModelId=="string"?nt.resolvedModelId:null,snapshotDate:typeof nt.snapshotDate=="string"?nt.snapshotDate:null};else if($t==="done"||$t==="complete"){const Ot={prompt:me.trim(),provider:un().provider,model:un().model,resolvedModelId:((hn=He.current)==null?void 0:hn.resolvedModelId)??null,snapshotDate:((jr=He.current)==null?void 0:jr.snapshotDate)??null,reasoning:nt.reasoning||""},Ut=
|
|
104
|
+
!Write me a poem about flowers`}),r.jsxs("div",{className:"flex items-center flex-wrap gap-x-3 gap-y-1 text-[11px]",style:{color:"var(--text-tertiary)"},children:[r.jsx("span",{children:"One prompt per line"}),r.jsx(Lo,{}),r.jsx("span",{children:"No prefix = auto-classify"}),r.jsx(Lo,{}),r.jsxs("span",{className:"flex items-center gap-1",children:[r.jsx("code",{className:"px-1 rounded",style:{background:"var(--surface-2)"},children:"+"}),"= must activate"]}),r.jsx(Lo,{}),r.jsxs("span",{className:"flex items-center gap-1",children:[r.jsx("code",{className:"px-1 rounded",style:{background:"var(--surface-2)"},children:"!"}),"= must NOT activate"]}),r.jsx(Lo,{}),r.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[J," prompt",J!==1?"s":""]})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("button",{onClick:D,disabled:b||!_.trim(),className:"btn btn-primary",children:b?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"spinner",style:{borderTopColor:"var(--color-paper)",borderColor:"var(--border-default)",width:14,height:14}}),"Testing..."]}):r.jsxs(r.Fragment,{children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("circle",{cx:"12",cy:"12",r:"6"}),r.jsx("circle",{cx:"12",cy:"12",r:"2"})]}),"Run Activation Test"]})}),b&&r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:i,className:"btn btn-secondary text-[12px]",children:"Cancel"}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[E||`${v.length} / ${J} prompts tested`,w&&r.jsx(eN,{startedAt:w})]})]})]})]}),r.jsxs("div",{className:"glass-card flex flex-col overflow-hidden",children:[r.jsx("div",{className:"px-4 pt-3.5 pb-2.5 flex-shrink-0",style:{borderBottom:"1px solid var(--border-subtle)"},children:r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:"Skill Description"})}),r.jsx("div",{className:"flex-1 overflow-auto px-4 py-3",style:{minHeight:0},children:K?r.jsx("div",{className:"text-[12px] leading-relaxed",style:{color:"var(--text-secondary)"},dangerouslySetInnerHTML:{__html:ce}}):r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"No description available"})})]})]}),S&&r.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:S}),b&&v.length===0&&r.jsxs("div",{className:"text-center py-12 animate-fade-in",children:[r.jsx("div",{className:"spinner-lg mx-auto mb-4"}),r.jsx("p",{className:"text-[14px]",style:{color:"var(--text-secondary)"},children:"Testing activation against skill description..."})]}),v.length>0&&r.jsxs("div",{className:"space-y-5",children:[U.length>0&&r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--red)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),r.jsx("line",{x1:"9",y1:"9",x2:"15",y2:"15"})]}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--red)"},children:["Incorrect (",U.length,")"]}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"— These need attention"})]}),r.jsx("div",{className:"space-y-1.5 stagger-children",children:U.map((Z,ie)=>r.jsx(sv,{result:Z},`incorrect-${ie}`))})]}),M.length>0&&r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("polyline",{points:"16 10 11 15 8 12"})]}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--green)"},children:["Correct (",M.length,")"]})]}),r.jsx("div",{className:"space-y-1.5 stagger-children",children:M.map((Z,ie)=>r.jsx(sv,{result:Z},`correct-${ie}`))})]})]}),y&&r.jsxs("div",{className:"glass-card p-6 animate-fade-in-scale",style:{borderColor:"var(--border-active)",borderWidth:2},children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-widest mb-2",style:{color:"var(--text-tertiary)"},children:"Summary"}),y.autoClassifiedCount!=null&&y.autoClassifiedCount>0&&r.jsxs("div",{className:"text-[11px] mb-3",style:{color:"var(--text-tertiary)"},children:[y.autoClassifiedCount," of ",y.total," prompts auto-classified from skill name and tags"]}),r.jsxs("div",{className:"grid grid-cols-3 gap-6 mb-5",children:[r.jsx(Yd,{label:"Precision",value:y.precision,description:"Of all activations, how many were correct?",detail:`${y.tp} true / ${y.tp+y.fp} total activations`}),r.jsx(Yd,{label:"Recall",value:y.recall,description:"Of expected activations, how many fired?",detail:`${y.tp} activated / ${y.tp+y.fn} expected`}),r.jsx(Yd,{label:"Reliability",value:y.reliability,description:"Overall correct classification rate",detail:`${y.tp+y.tn} correct / ${y.total} total`})]}),r.jsxs("div",{className:"pt-4",style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-widest mb-3 text-center",style:{color:"var(--text-tertiary)"},children:"Confusion Matrix"}),r.jsxs("div",{className:"grid grid-cols-2 gap-2 max-w-xs mx-auto",children:[r.jsx(Mo,{label:"True Positive",abbr:"TP",count:y.tp,bg:"var(--green-muted)",color:"var(--green)",description:"Correctly activated"}),r.jsx(Mo,{label:"False Positive",abbr:"FP",count:y.fp,bg:"var(--red-muted)",color:"var(--red)",description:"Wrongly activated"}),r.jsx(Mo,{label:"False Negative",abbr:"FN",count:y.fn,bg:"var(--red-muted)",color:"var(--red)",description:"Missed activation"}),r.jsx(Mo,{label:"True Negative",abbr:"TN",count:y.tn,bg:"var(--green-muted)",color:"var(--green)",description:"Correctly silent"})]}),r.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:"," ",r.jsxs("span",{style:{color:(y.scopeWarnings??0)>0?"var(--yellow)":"var(--text-tertiary)"},children:[y.scopeWarnings??0," scope"]}),", ",r.jsxs("span",{style:{color:(y.driftWarnings??0)>0?"var(--yellow)":"var(--text-tertiary)"},children:[y.driftWarnings??0," drift"]})]})]})]}),r.jsx(QE,{history:P,expanded:ee,onToggle:()=>$(!ee),skillVersion:L})]})}function QE({history:t,expanded:a,onToggle:s,skillVersion:i}){return t===null?null:r.jsxs("div",{className:"glass-card overflow-hidden",children:[r.jsxs("button",{className:"w-full px-4 py-3 flex items-center justify-between text-left",style:{borderBottom:a?"1px solid var(--border-subtle)":"none"},onClick:s,children:[r.jsxs("span",{className:"text-[11px] font-semibold uppercase tracking-widest",style:{color:"var(--text-tertiary)"},children:["Test History",t.length>0&&r.jsxs("span",{className:"ml-2 font-normal",style:{color:"var(--text-tertiary)"},children:["(",t.length," run",t.length!==1?"s":"",")"]})]}),r.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:a?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"},children:r.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),a&&r.jsx("div",{className:"px-4 py-3",children:t.length===0?r.jsx("div",{className:"text-[12px] py-4 text-center",style:{color:"var(--text-tertiary)"},children:"No test runs yet"}):r.jsx("div",{className:"space-y-2",children:t.map(c=>r.jsx(ZE,{run:c,skillVersion:i},c.id))})})]})}function ZE({run:t,skillVersion:a}){const s=Math.round(t.summary.reliability*100),i=s>=80?"var(--green)":s>=60?"var(--yellow)":"var(--red)",c=s>=80?"Good":s>=60?"Needs Work":"Poor",u=i;return r.jsxs("div",{className:"flex items-center gap-3 px-3 py-2.5 rounded-lg",style:{background:"var(--surface-1)"},children:[r.jsx("div",{className:"flex-1 min-w-0",children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:JE(t.timestamp)}),r.jsx(ci,{version:a??null,size:"sm","data-testid":"activation-row-version"}),r.jsx("span",{className:"pill text-[9px] px-1.5",style:{background:"var(--surface-2)",color:"var(--text-tertiary)"},children:t.model||t.provider}),r.jsxs("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:[t.promptCount," prompts"]})]})}),r.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:i,fontVariantNumeric:"tabular-nums"},children:[s,"%"]}),r.jsx("span",{className:"text-[10px] font-medium px-2 py-0.5 rounded",style:{color:u,background:`color-mix(in srgb, ${u} 10%, transparent)`},children:c})]})]})}function JE(t){const a=Date.now(),s=new Date(t).getTime(),i=Math.floor((a-s)/1e3);if(i<60)return"just now";const c=Math.floor(i/60);if(c<60)return`${c}m ago`;const u=Math.floor(c/60);if(u<24)return`${u}h ago`;const d=Math.floor(u/24);return d<7?`${d}d ago`:new Date(t).toLocaleDateString()}function Lo(){return r.jsx("span",{style:{color:"var(--border-subtle)",userSelect:"none"},children:"·"})}function sv({result:t}){const a=t.verdict==="scope_warning"||t.verdict==="drift_warning",s=a?t.verdict==="scope_warning"?"SCOPE_WARNING":"DRIFT_WARNING":t.classification,i=lv[s]||lv.FN,c=!a&&(t.classification==="TP"||t.classification==="TN"),u=t.verdict==="scope_warning"?"scope warn":t.verdict==="drift_warning"?"drift warn":null,d=t.verdict&&t.verdict!=="ok"?KE[t.verdict]:void 0;return r.jsxs("div",{className:"flex items-start gap-3 p-4 rounded-xl transition-all duration-200",style:{background:i.bg,border:"1px solid transparent"},children:[r.jsx("div",{className:"flex-shrink-0 mt-0.5",children:r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:`color-mix(in srgb, ${i.text} 20%, transparent)`},children:c?r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:i.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})}):a?r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:i.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[r.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"}),r.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),r.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}):r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:i.text,strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("div",{className:"flex items-center gap-2 mb-1",children:r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:t.prompt})}),r.jsxs("div",{className:"flex items-center gap-3 text-[12px]",children:[r.jsx("span",{className:"pill",style:{background:"var(--surface-3)",color:i.text,fontWeight:700,fontSize:"10px",padding:"1px 6px"},title:d,children:u??t.classification}),r.jsx("span",{style:{color:t.activate?"var(--green)":"var(--text-tertiary)"},children:t.activate?"Activated":"Silent"}),r.jsxs("span",{style:{color:"var(--text-tertiary)"},children:["Expected: ",t.expected==="should_activate"?"activate":"stay silent"]}),r.jsxs("span",{style:{color:"var(--text-tertiary)"},children:[t.confidence," confidence"]}),t.autoClassified&&r.jsx("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)",fontSize:"9px",padding:"1px 5px"},children:"auto"})]}),t.reasoning&&r.jsx("div",{className:"text-[11px] mt-1.5",style:{color:"var(--text-tertiary)"},children:t.reasoning})]})]})}function Yd({label:t,value:a,description:s,detail:i}){const c=Math.round(a*100),u=c>=80?"var(--green)":c>=60?"var(--yellow)":"var(--red)";return r.jsxs("div",{className:"text-center",children:[r.jsxs("div",{className:"text-[28px] font-bold tracking-tight",style:{color:u},children:[c,"%"]}),r.jsx("div",{className:"text-[12px] font-medium mt-0.5",style:{color:"var(--text-secondary)"},children:t}),r.jsx("div",{className:"text-[10px] mt-1",style:{color:"var(--text-tertiary)"},children:s}),r.jsx("div",{className:"text-[10px] mt-0.5 font-mono",style:{color:"var(--text-tertiary)"},children:i})]})}function Mo({abbr:t,count:a,bg:s,color:i,description:c}){return r.jsxs("div",{className:"text-center p-3 rounded-lg",style:{background:s},children:[r.jsx("div",{className:"text-[20px] font-bold",style:{color:i},children:a}),r.jsx("div",{className:"text-[11px] font-semibold",style:{color:i},children:t}),r.jsx("div",{className:"text-[9px] mt-0.5",style:{color:"var(--text-tertiary)"},children:c})]})}function eN({startedAt:t}){const[a,s]=m.useState(0);return m.useEffect(()=>{const i=setInterval(()=>s(Math.floor((Date.now()-t)/1e3)),1e3);return()=>clearInterval(i)},[t]),r.jsxs("span",{className:"ml-2",children:["(",a,"s)"]})}function tN(t){return t==="benchmark"||t==="activation"||t==="ab"}function nN({mode:t}){var f;const{state:a,runAll:s}=bn(),i=m.useRef(!1),u=(((f=a.evals)==null?void 0:f.evals)??[]).length,d=a.evals!=null;return m.useEffect(()=>{if(t!=="benchmark"||typeof window>"u"||i.current)return;const x=new URLSearchParams(window.location.search);if(x.get("autorun")!=="1"||!d||u===0)return;i.current=!0,s("benchmark"),x.delete("autorun");const h=x.toString(),v=`${window.location.pathname}${h?"?"+h:""}${window.location.hash}`;window.history.replaceState(null,"",v)},[t,d,u,s]),t==="activation"?r.jsx(XE,{}):r.jsx(GE,{})}const Kd={benchmark:"#6383ff",comparison:"#a78bfa",baseline:"#fb923c"},iv={benchmark:"Benchmark",comparison:"Comparison",baseline:"Baseline"},wf=600,Cf=180,gn=40,Xd=wf-gn*2,ha=Cf-gn*2,rN=[25,50,75,100];function ov(t){return new Date(t).toLocaleDateString(void 0,{month:"short",day:"numeric"})}function aN(t){return t==null?"--":`${(t/1e3).toFixed(1)}s`}function lN({entries:t,onPointClick:a}){const[s,i]=m.useState(null),c=m.useMemo(()=>[...t].reverse(),[t]);if(c.length<2)return null;const u=c.length,d=c.map((h,v)=>{const y=gn+v/(u-1)*Xd,b=h.passRate*100,S=gn+ha-b/100*ha;return{x:y,y:S,pct:b,entry:h}}),f=d.map(h=>`${h.x},${h.y}`).join(" "),x=Array.from(new Set(c.map(h=>h.type)));return r.jsxs("div",{className:"glass-card p-5 animate-fade-in",style:{position:"relative",overflowX:u>=20?"auto":void 0},children:[r.jsx("div",{className:"text-[13px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"Pass Rate Trend"}),r.jsx("div",{className:"flex items-center gap-5 mb-3",children:x.map(h=>r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("div",{className:"w-3 h-3 rounded-full",style:{background:Kd[h]??"var(--text-tertiary)"}}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:iv[h]??h})]},h))}),r.jsxs("svg",{width:wf,height:Cf,viewBox:`0 0 ${wf} ${Cf}`,style:{display:"block",overflow:"visible"},children:[rN.map(h=>{const v=gn+ha-h/100*ha;return r.jsxs("g",{children:[r.jsx("line",{x1:gn,y1:v,x2:gn+Xd,y2:v,stroke:"var(--border-subtle)",strokeWidth:.5,strokeDasharray:"4 4"}),r.jsxs("text",{x:gn-8,y:v+3.5,textAnchor:"end",style:{fill:"var(--text-tertiary)",fontSize:10},children:[h,"%"]})]},h)}),r.jsx("line",{x1:gn,y1:gn+ha,x2:gn+Xd,y2:gn+ha,stroke:"var(--border-subtle)",strokeWidth:1}),r.jsx("text",{x:gn-8,y:gn+ha+3.5,textAnchor:"end",style:{fill:"var(--text-tertiary)",fontSize:10},children:"0%"}),r.jsx("polyline",{points:f,fill:"none",stroke:"var(--border-subtle)",strokeWidth:1.5,strokeLinejoin:"round"}),d.map((h,v)=>r.jsx("circle",{cx:h.x,cy:h.y,r:5,fill:Kd[h.entry.type]??"var(--text-tertiary)",stroke:"var(--surface-2)",strokeWidth:2,style:{cursor:"pointer",transition:"r 0.15s ease"},onMouseEnter:y=>{y.currentTarget.setAttribute("r","7"),i({x:h.x,y:h.y,entry:h.entry})},onMouseLeave:y=>{y.currentTarget.setAttribute("r","5"),i(null)},onClick:()=>a==null?void 0:a(h.entry)},v)),sN(u).map(h=>r.jsx("text",{x:d[h].x,y:gn+ha+16,textAnchor:"middle",style:{fill:"var(--text-tertiary)",fontSize:10},children:ov(c[h].timestamp)},h))]}),s&&r.jsxs("div",{style:{position:"absolute",left:s.x,top:s.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:[r.jsx("div",{className:"text-[11px] font-medium",style:{color:"var(--text-primary)"},children:ov(s.entry.timestamp)}),r.jsx("div",{className:"text-[11px] mt-0.5",style:{color:"var(--text-tertiary)"},children:s.entry.model}),r.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[r.jsx("span",{className:"text-[9px] font-semibold px-1.5 py-0.5 rounded-full",style:{background:Kd[s.entry.type]??"var(--text-tertiary)",color:"#fff"},children:iv[s.entry.type]??s.entry.type}),r.jsxs("span",{className:"text-[12px] font-semibold",style:{color:"var(--text-primary)"},children:[Math.round(s.entry.passRate*100),"%"]})]}),r.jsxs("div",{className:"text-[10px] mt-1.5 flex items-center gap-3",style:{color:"var(--text-tertiary)"},children:[r.jsx("span",{children:aN(s.entry.totalDurationMs)}),r.jsx("span",{children:s.entry.totalTokens!=null?`${s.entry.totalTokens} tokens`:"--"})]})]})]})}function sN(t){if(t<=3)return Array.from({length:t},(i,c)=>c);if(t<=6)return[0,Math.floor(t/2),t-1];if(t<20)return[0,Math.floor(t/3),Math.floor(2*t/3),t-1];const a=Math.ceil(t/10),s=[0];for(let i=a;i<t-1;i+=a)s.push(i);return s.push(t-1),s}const Vs=new Map;let vn=null,Fo=null,zo=1e3,_l=0;function lb(){if(vn)return;vn=new EventSource("/api/events");const t=a=>s=>{let i={};try{i=s.data?JSON.parse(s.data):{}}catch{}const c=Vs.get(a);if(c)for(const u of c)u(i)};vn.addEventListener("benchmark:complete",t("benchmark:complete")),vn.addEventListener("history:written",t("history:written")),vn.addEventListener("leaderboard:updated",t("leaderboard:updated")),vn.onerror=()=>{vn==null||vn.close(),vn=null,_l>0&&(Fo=setTimeout(()=>{zo=Math.min(zo*2,3e4),lb()},zo))},vn.onopen=()=>{zo=1e3}}function iN(){Fo!=null&&(clearTimeout(Fo),Fo=null),vn==null||vn.close(),vn=null}function oN(t,a){return Vs.has(t)||Vs.set(t,new Set),Vs.get(t).add(a),_l++,lb(),()=>{var s;(s=Vs.get(t))==null||s.delete(a),_l--,_l<=0&&(_l=0,queueMicrotask(()=>{_l<=0&&iN()}))}}function Ko(t,a){const s=m.useRef(a);s.current=a,m.useEffect(()=>oN(t,c=>s.current(c)),[t])}function Xo(t){return t>=.8?"var(--green)":t>=.5?"var(--yellow)":"var(--red)"}function cN(t){return t>=1e3?`${(t/1e3).toFixed(1)}s`:`${Math.round(t)}ms`}function uN({rate:t,label:a}){const s=Math.round(t*100);return r.jsx("div",{className:"flex items-center gap-3",children:r.jsxs("div",{className:"flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between mb-1",children:[r.jsx("span",{className:"text-[11px] truncate",style:{color:"var(--text-primary)",maxWidth:"70%"},children:a}),r.jsxs("span",{className:"text-[11px] font-semibold",style:{color:Xo(t)},children:[s,"%"]})]}),r.jsx("div",{className:"h-1.5 rounded-full overflow-hidden",style:{background:"var(--surface-3)"},children:r.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${s}%`,background:Xo(t)}})})]})})}function dN({points:t}){if(t.length<2)return null;const a=200,s=48,i=4,c=t.length,u=t.map((x,h)=>{const v=i+h/(c-1)*(a-i*2),y=i+(s-i*2)-x.passRate*(s-i*2);return{x:v,y}}),d=`M ${u[0].x},${s-i} `+u.map(x=>`L ${x.x},${x.y}`).join(" ")+` L ${u[u.length-1].x},${s-i} Z`,f=u.map((x,h)=>`${h===0?"M":"L"} ${x.x},${x.y}`).join(" ");return r.jsxs("svg",{width:a,height:s,style:{display:"block"},children:[r.jsx("path",{d,fill:"var(--accent-muted)"}),r.jsx("path",{d:f,fill:"none",stroke:"var(--accent)",strokeWidth:1.5,strokeLinejoin:"round"}),r.jsx("circle",{cx:u[u.length-1].x,cy:u[u.length-1].y,r:3,fill:"var(--accent)"})]})}function fN({plugin:t,skill:a}){const s=`stats/${t}/${a}`,i=m.useCallback(()=>ke.getStats(t,a),[t,a]),{data:c,loading:u}=qa(s,i),d=m.useCallback(()=>In(s),[s]);if(Ko("benchmark:complete",d),Ko("history:written",d),u)return r.jsxs("div",{className:"space-y-4",children:[r.jsx("div",{className:"skeleton h-24 rounded-xl"}),r.jsx("div",{className:"skeleton h-48 rounded-xl"}),r.jsx("div",{className:"skeleton h-36 rounded-xl"})]});if(!c||c.totalRuns===0)return r.jsxs("div",{className:"text-center py-12",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center mx-auto mb-3",style:{background:"var(--surface-2)"},children:r.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"1.5",children:[r.jsx("path",{d:"M18 20V10"}),r.jsx("path",{d:"M12 20V4"}),r.jsx("path",{d:"M6 20v-6"})]})}),r.jsx("p",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No benchmark data yet"}),r.jsx("p",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:"Run some benchmarks to see statistics"})]});const f=c.trendPoints.length>0?c.trendPoints[c.trendPoints.length-1].passRate:0,x=c.trendPoints.length>0?c.trendPoints[0].passRate:0,h=f-x,v=c.assertionStats.slice(0,10);return r.jsxs("div",{className:"space-y-4 stagger-children",children:[r.jsxs("div",{className:"grid grid-cols-4 gap-3",children:[r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Total Runs"}),r.jsx("div",{className:"text-[24px] font-bold",style:{color:"var(--text-primary)"},children:c.totalRuns})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Latest Pass Rate"}),r.jsxs("div",{className:"text-[24px] font-bold",style:{color:Xo(f)},children:[Math.round(f*100),"%"]})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Trend"}),r.jsxs("div",{className:"text-[24px] font-bold",style:{color:h>=0?"var(--green)":"var(--red)"},children:[h>=0?"+":"",Math.round(h*100),"%"]})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Models Tested"}),r.jsx("div",{className:"text-[24px] font-bold",style:{color:"var(--text-primary)"},children:c.modelStats.length})]}),c.totalCost!=null&&r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Total Cost"}),r.jsx("div",{className:"text-[20px] font-bold",style:{color:"var(--text-primary)"},children:Un(c.totalCost)})]}),c.costPerRun!=null&&r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-widest font-semibold mb-1",style:{color:"var(--text-tertiary)"},children:"Avg Cost/Run"}),r.jsx("div",{className:"text-[20px] font-bold",style:{color:"var(--text-primary)"},children:Un(c.costPerRun)})]})]}),c.trendPoints.length>=2&&r.jsxs("div",{className:"glass-card p-5",children:[r.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Pass Rate Over Time"}),r.jsx(dN,{points:c.trendPoints})]}),c.modelStats.length>0&&r.jsxs("div",{className:"glass-card p-5",children:[r.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Model Performance"}),r.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12},children:[r.jsx("thead",{children:r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:[r.jsx("th",{style:{textAlign:"left",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Model"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Runs"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Pass Rate"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Duration"}),r.jsx("th",{style:{textAlign:"center",padding:"6px 8px",color:"var(--text-tertiary)",fontWeight:600,fontSize:11},children:"Avg Cost"})]})}),r.jsx("tbody",{children:c.modelStats.map(y=>r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:[r.jsx("td",{style:{padding:"8px",color:"var(--text-primary)",fontWeight:500},children:y.model}),r.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:y.runs}),r.jsx("td",{style:{padding:"8px",textAlign:"center"},children:r.jsxs("span",{className:"font-semibold",style:{color:Xo(y.avgPassRate)},children:[Math.round(y.avgPassRate*100),"%"]})}),r.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:cN(y.avgDurationMs)}),r.jsx("td",{style:{padding:"8px",textAlign:"center",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)"},children:y.avgCost!=null?Un(y.avgCost):"N/A"})]},y.model))})]})]}),v.length>0&&r.jsxs("div",{className:"glass-card p-5",children:[r.jsx("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Weakest Assertions"}),r.jsx("div",{className:"space-y-3",children:v.map(y=>r.jsxs("button",{className:"block w-full text-left rounded-lg p-2 -mx-2 transition-colors duration-150",style:{background:"transparent"},onMouseEnter:b=>{b.currentTarget.style.background="var(--surface-2)"},onMouseLeave:b=>{b.currentTarget.style.background="transparent"},onClick:()=>{},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[r.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:["#",y.evalId]}),r.jsx("span",{className:"text-[10px] truncate",style:{color:"var(--text-tertiary)"},children:y.evalName}),r.jsxs("span",{className:"text-[10px] ml-auto flex-shrink-0",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:[y.totalRuns," runs"]})]}),r.jsx(uN,{rate:y.passRate,label:y.text})]},`${y.evalId}:${y.id}`))})]})]})}function pN({plugin:t,skill:a}){const[s,i]=m.useState(null),[c,u]=m.useState(null),[d,f]=m.useState({}),[x,h]=m.useState({});m.useEffect(()=>{ke.getEvals(t,a).then(i).catch(()=>i(null))},[t,a]);async function v(y){if(c===y){u(null);return}if(u(y),!d[y]){h(b=>({...b,[y]:!0}));try{const b=await ke.getCaseHistory(t,a,y);f(S=>({...S,[y]:b}))}catch{f(b=>({...b,[y]:[]}))}finally{h(b=>({...b,[y]:!1}))}}}return s?r.jsx("div",{className:"space-y-2 stagger-children",children:s.evals.map(y=>{const b=d[y.id]||[],S=c===y.id,w=x[y.id],E=b.length>0?b[0].pass_rate:null;return r.jsxs("div",{className:"glass-card overflow-hidden",children:[r.jsxs("button",{onClick:()=>v(y.id),className:"w-full text-left p-4 flex items-center gap-3 transition-colors duration-150",style:{background:S?"var(--surface-2)":"transparent"},onMouseEnter:k=>{S||(k.currentTarget.style.background="var(--surface-2)")},onMouseLeave:k=>{S||(k.currentTarget.style.background="transparent")},children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2.5",strokeLinecap:"round",style:{transform:S?"rotate(90deg)":"rotate(0)",transition:"transform 0.2s ease",flexShrink:0},children:r.jsx("polyline",{points:"9 18 15 12 9 6"})}),r.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:["#",y.id]}),r.jsx("span",{className:"text-[13px] font-medium flex-1 truncate",style:{color:"var(--text-primary)"},children:y.name}),b.length>=2&&r.jsx(Zy,{entries:b}),E!=null&&r.jsxs("span",{className:"text-[12px] font-semibold flex-shrink-0",style:{color:Ul(E)},children:[Math.round(E*100),"%"]}),b.length>0&&r.jsxs("span",{className:"text-[10px] flex-shrink-0",style:{color:"var(--text-tertiary)",fontFamily:"var(--font-mono, monospace)"},children:[b.length," runs"]})]}),S&&r.jsx("div",{className:"border-t animate-fade-in",style:{borderColor:"var(--border-subtle)"},children:w?r.jsxs("div",{className:"p-4 flex items-center gap-2",children:[r.jsx("div",{className:"spinner",style:{width:14,height:14}}),r.jsx("span",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Loading history..."})]}):b.length===0?r.jsx("div",{className:"p-4",children:r.jsx("p",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"No history for this eval case"})}):r.jsx("div",{className:"divide-y",style:{borderColor:"var(--border-subtle)"},children:b.map((k,N)=>r.jsxs("div",{className:"p-4",style:{background:N===0?"var(--surface-2)":"transparent"},children:[r.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:Xy(k.timestamp)}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:k.model}),r.jsx("span",{className:"pill",style:{fontSize:9,padding:"1px 6px",background:k.type==="benchmark"?"rgba(99,131,255,0.15)":k.type==="comparison"?"var(--purple-muted)":"rgba(251,146,60,0.15)",color:k.type==="benchmark"?"#6383ff":k.type==="comparison"?"var(--purple)":"#fb923c"},children:k.type}),r.jsxs("span",{className:"text-[12px] font-semibold ml-auto",style:{color:Ul(k.pass_rate)},children:[Math.round(k.pass_rate*100),"%"]})]}),r.jsxs("div",{className:"flex items-center gap-4 mb-2 text-[10px]",style:{fontFamily:"var(--font-mono, monospace)",color:"var(--text-tertiary)"},children:[k.durationMs!=null&&r.jsx("span",{children:Qy(k.durationMs)}),k.tokens!=null&&r.jsxs("span",{children:[k.tokens>=1e3?`${(k.tokens/1e3).toFixed(1)}k`:k.tokens," tok"]})]}),r.jsx("div",{className:"space-y-1",children:k.assertions.map(T=>r.jsxs("div",{className:"flex items-start gap-2 py-0.5",children:[r.jsx("div",{className:"w-3.5 h-3.5 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5",style:{background:T.pass?"var(--green)":"var(--red)"},children:r.jsx("svg",{width:"7",height:"7",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"3.5",strokeLinecap:"round",strokeLinejoin:"round",children:T.pass?r.jsx("polyline",{points:"20 6 9 17 4 12"}):r.jsxs(r.Fragment,{children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("div",{className:"text-[11px]",style:{color:"var(--text-primary)"},children:T.text}),T.reasoning&&r.jsx("div",{className:"text-[10px] mt-0.5",style:{color:"var(--text-tertiary)"},children:T.reasoning})]})]},T.id))})]},N))})})]},y.id)})}):r.jsx("div",{className:"text-center py-12",children:r.jsx("p",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No eval cases found"})})}function mN(){const{state:t,dispatch:a}=bn(),{plugin:s,skill:i}=t,{state:c}=cr(),u=c.skills.find(F=>F.plugin===s&&F.skill===i),d=(u==null?void 0:u.resolvedVersion)??(u==null?void 0:u.version)??null,[f,x]=m.useState("timeline"),[h,v]=m.useState(""),[y,b]=m.useState(""),[S,w]=m.useState(!1),[E,k]=m.useState([]),[N,T]=m.useState(null),[A,B]=m.useState(!1),[z,P]=m.useState(null),[C,O]=m.useState(!1),L=`history/${s}/${i}?model=${h}&type=${y}`,_=m.useCallback(()=>ke.getHistory(s,i,{model:h||void 0,type:y||void 0}),[s,i,h,y]),{data:H,loading:W}=qa(L,_),q=H??[];m.useEffect(()=>{!H||H.length<2||ke.compareRuns(s,i,H[0].timestamp,H[1].timestamp).then(F=>{const J=F.regressions.filter(de=>de.change==="regression");a({type:"SET_REGRESSIONS",regressions:J})}).catch(()=>{})},[H,s,i,a]);const ee=m.useCallback(()=>In(L),[L]);Ko("history:written",ee);const $=m.useCallback(async F=>{if(S){k(J=>J.includes(F)?J.filter(de=>de!==F):J.length>=2?[J[1],F]:[...J,F]);return}O(!0);try{const J=await ke.getHistoryEntry(s,i,F);P(J)}catch{}finally{O(!1)}},[s,i,S]),D=m.useCallback(async()=>{if(E.length===2){B(!0);try{const F=await ke.compareRuns(s,i,E[0],E[1]);T(F)}catch{}finally{B(!1)}}},[s,i,E]),I=[...new Set(q.map(F=>F.model))];return W?r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"skeleton h-5 w-32 mb-4"}),r.jsx("div",{className:"skeleton h-48 rounded-xl mb-4"}),r.jsxs("div",{className:"space-y-2",children:[r.jsx("div",{className:"skeleton h-12 rounded-lg"}),r.jsx("div",{className:"skeleton h-12 rounded-lg"})]})]}):r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"flex items-center gap-1 mb-4",children:["timeline","per-eval","statistics"].map(F=>r.jsx("button",{onClick:()=>x(F),className:"px-4 py-2 rounded-lg text-[12px] font-medium transition-all duration-150",style:{background:f===F?"var(--accent-muted)":"transparent",color:f===F?"var(--accent)":"var(--text-tertiary)"},children:F==="timeline"?"Timeline":F==="per-eval"?"Per Eval":"Statistics"},F))}),f==="timeline"&&r.jsxs("div",{children:[q.length>0&&r.jsx("div",{className:"mb-5 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:r.jsx(lN,{entries:q,onPointClick:F=>$(F.timestamp)})}),r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsxs("select",{value:h,onChange:F=>v(F.target.value),className:"input-field text-[12px]",style:{width:150},children:[r.jsx("option",{value:"",children:"All Models"}),I.map(F=>r.jsx("option",{value:F,children:F},F))]}),r.jsxs("select",{value:y,onChange:F=>b(F.target.value),className:"input-field text-[12px]",style:{width:150},children:[r.jsx("option",{value:"",children:"All Types"}),r.jsx("option",{value:"benchmark",children:"Benchmark"}),r.jsx("option",{value:"comparison",children:"Comparison"}),r.jsx("option",{value:"baseline",children:"Baseline"}),r.jsx("option",{value:"model-compare",children:"Model Compare"}),r.jsx("option",{value:"improve",children:"AI Improve"}),r.jsx("option",{value:"instruct",children:"AI Edit"}),r.jsx("option",{value:"ai-generate",children:"AI Generate"}),r.jsx("option",{value:"eval-generate",children:"Eval Generate"})]}),r.jsx("div",{className:"flex-1"}),r.jsx("button",{onClick:()=>{w(!S),k([]),T(null)},className:`btn text-[12px] ${S?"btn-primary":"btn-secondary"}`,children:S?"Exit Compare":"Compare Runs"}),S&&E.length===2&&r.jsx("button",{onClick:D,disabled:A,className:"btn btn-primary text-[12px]",children:A?"Comparing...":"Compare"})]}),r.jsx("div",{className:"space-y-2",children:q.length===0?r.jsx("div",{className:"text-center py-8 text-[13px]",style:{color:"var(--text-tertiary)"},children:"No benchmark runs yet"}):q.map(F=>{const J=E.includes(F.timestamp);return r.jsx("button",{onClick:()=>$(F.timestamp),className:"w-full text-left rounded-lg px-4 py-3 transition-all duration-150",style:{background:J?"var(--accent-muted)":"var(--surface-1)",border:J?"1px solid var(--accent)":"1px solid var(--border-subtle)"},onMouseEnter:de=>{J||(de.currentTarget.style.borderColor="var(--border-hover)")},onMouseLeave:de=>{J||(de.currentTarget.style.borderColor="var(--border-subtle)")},children:r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[S&&r.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:J?"var(--accent)":"var(--border-default)",background:J?"var(--accent)":"transparent"},children:J&&r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})}),r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:new Date(F.timestamp).toLocaleString()}),r.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})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx(ci,{version:d,size:"sm","data-testid":"history-row-version"}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:F.model}),F.totalCost!=null&&F.totalCost>0&&r.jsx("span",{className:"text-[11px] font-mono",style:{color:"var(--text-tertiary)"},children:Un(F.totalCost)}),r.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)})}),N&&r.jsx(hN,{result:N}),z&&!S&&r.jsx(xN,{run:z,onClose:()=>P(null)})]}),f==="per-eval"&&r.jsx(pN,{plugin:s,skill:i}),f==="statistics"&&r.jsx(fN,{plugin:s,skill:i})]})}function hN({result:t}){const a=t.regressions.filter(i=>i.change==="regression"),s=t.regressions.filter(i=>i.change==="improvement");return r.jsxs("div",{className:"mt-4 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:["Comparison: ",new Date(t.runA.timestamp).toLocaleDateString()," vs ",new Date(t.runB.timestamp).toLocaleDateString()]}),(t.runA.totalCost!=null||t.runB.totalCost!=null)&&r.jsxs("div",{className:"flex items-center gap-4 mb-3 text-[11px]",style:{color:"var(--text-secondary)"},children:[r.jsxs("span",{children:["Run A cost: ",Un(t.runA.totalCost??null)]}),r.jsxs("span",{children:["Run B cost: ",Un(t.runB.totalCost??null)]}),t.runA.totalCost!=null&&t.runB.totalCost!=null&&r.jsxs("span",{style:{color:t.runB.totalCost<=t.runA.totalCost?"var(--green)":"var(--red)"},children:["Delta: ",Un(t.runB.totalCost-t.runA.totalCost)]})]}),a.length>0&&r.jsxs("div",{className:"mb-3",children:[r.jsxs("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--red)"},children:["Regressions (",a.length,")"]}),a.map(i=>r.jsxs("div",{className:"text-[12px] py-1",style:{color:"var(--text-secondary)"},children:["#",i.evalId," ",i.evalName,": ",r.jsx("span",{style:{color:"var(--red)"},children:i.assertionId})," (was passing, now failing)"]},`${i.evalId}-${i.assertionId}`))]}),s.length>0&&r.jsxs("div",{className:"mb-3",children:[r.jsxs("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-1",style:{color:"var(--green)"},children:["Improvements (",s.length,")"]}),s.map(i=>r.jsxs("div",{className:"text-[12px] py-1",style:{color:"var(--text-secondary)"},children:["#",i.evalId," ",i.evalName,": ",r.jsx("span",{style:{color:"var(--green)"},children:i.assertionId})," (was failing, now passing)"]},`${i.evalId}-${i.assertionId}`))]}),r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2 mt-3",style:{color:"var(--text-tertiary)"},children:"Case Diffs"}),r.jsx("div",{className:"rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:r.jsxs("table",{className:"w-full text-[12px]",children:[r.jsx("thead",{children:r.jsxs("tr",{style:{background:"var(--surface-2)"},children:[r.jsx("th",{className:"text-left px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Case"}),r.jsx("th",{className:"text-right px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Run A"}),r.jsx("th",{className:"text-right px-3 py-2 font-medium",style:{color:"var(--text-tertiary)"},children:"Run B"})]})}),r.jsx("tbody",{children:t.caseDiffs.map(i=>r.jsxs("tr",{style:{borderTop:"1px solid var(--border-subtle)"},children:[r.jsxs("td",{className:"px-3 py-2",style:{color:"var(--text-secondary)"},children:["#",i.eval_id," ",i.eval_name]}),r.jsx("td",{className:"text-right px-3 py-2",style:{color:i.passRateA!=null?i.passRateA>=.8?"var(--green)":i.passRateA>=.5?"var(--yellow)":"var(--red)":"var(--text-tertiary)"},children:i.passRateA!=null?`${Math.round(i.passRateA*100)}%`:i.statusA}),r.jsx("td",{className:"text-right px-3 py-2",style:{color:i.passRateB!=null?i.passRateB>=.8?"var(--green)":i.passRateB>=.5?"var(--yellow)":"var(--red)":"var(--text-tertiary)"},children:i.passRateB!=null?`${Math.round(i.passRateB*100)}%`:i.statusB})]},i.eval_id))})]})})]})}function xN({run:t,onClose:a}){return(t.type==="improve"||t.type==="instruct")&&t.improve?r.jsx(gN,{run:t,onClose:a}):r.jsxs("div",{className:"mt-4 rounded-xl p-4",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:["Run: ",new Date(t.timestamp).toLocaleString()]}),r.jsx("button",{onClick:a,className:"btn btn-ghost text-[11px]",children:"Close"})]}),r.jsxs("div",{className:"text-[11px] mb-3",style:{color:"var(--text-tertiary)"},children:["Model: ",t.model," | Cases: ",t.cases.length," | Pass Rate: ",t.overall_pass_rate!=null?`${Math.round(t.overall_pass_rate*100)}%`:"--",t.totalCost!=null&&t.totalCost>0&&` | Cost: ${Un(t.totalCost)}`]}),r.jsx("div",{className:"space-y-2",children:t.cases.map(s=>r.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-2)"},children:r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("span",{className:"text-[12px]",style:{color:"var(--text-secondary)"},children:["#",s.eval_id," ",s.eval_name]}),r.jsxs("div",{className:"flex items-center gap-2",children:[s.cost!=null&&s.cost>0&&r.jsx("span",{className:"text-[10px] font-mono",style:{color:"var(--text-tertiary)"},children:Un(s.cost)}),r.jsx("span",{className:"text-[11px] font-semibold",style:{color:s.status==="pass"?"var(--green)":"var(--red)"},children:s.pass_rate!=null?`${Math.round(s.pass_rate*100)}%`:s.status})]})]})},s.eval_id))})]})}function gN({run:t,onClose:a}){var u;const s=m.useMemo(()=>t.improve?uc(t.improve.original,t.improve.improved):[],[t.improve]),i=m.useMemo(()=>{const d=s.filter(x=>x.type==="added").length,f=s.filter(x=>x.type==="removed").length;return{added:d,removed:f}},[s]),c=m.useMemo(()=>{let d=0,f=0;return s.map(x=>x.type==="removed"?(d++,{...x,origNum:d,newNum:null}):x.type==="added"?(f++,{...x,origNum:null,newNum:f}):(d++,f++,{...x,origNum:d,newNum:f}))},[s]);return r.jsxs("div",{className:"mt-4 rounded-xl overflow-hidden animate-fade-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.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:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"w-8 h-8 rounded-lg flex items-center justify-center",style:{background:"var(--purple-muted)"},children:r.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--purple)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),r.jsx("path",{d:"M2 17l10 5 10-5"}),r.jsx("path",{d:"M2 12l10 5 10-5"})]})}),r.jsxs("div",{children:[r.jsx("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md Changes"}),r.jsxs("div",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:[new Date(t.timestamp).toLocaleString()," · ",t.model]})]})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[r.jsxs("span",{style:{color:"var(--green)"},children:["+",i.added]}),r.jsxs("span",{style:{color:"var(--red)"},children:["-",i.removed]})]}),r.jsx("button",{onClick:a,className:"w-7 h-7 rounded-lg flex items-center justify-center transition-colors duration-150",style:{color:"var(--text-tertiary)"},onMouseEnter:d=>{d.currentTarget.style.background="var(--surface-3)"},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),((u=t.improve)==null?void 0:u.reasoning)&&r.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:[r.jsx("span",{className:"font-semibold",style:{color:"var(--purple)"},children:"AI Reasoning: "}),t.improve.reasoning]}),r.jsx("div",{className:"mx-4 my-4 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)",maxHeight:480,overflowY:"auto"},children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:c.map((d,f)=>r.jsxs("tr",{style:{background:d.type==="added"?"var(--green-muted)":d.type==="removed"?"var(--red-muted)":"transparent"},children:[r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:d.type==="removed"?"var(--red)":"var(--text-tertiary)",opacity:d.origNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:d.origNum??""}),r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:d.type==="added"?"var(--green)":"var(--text-tertiary)",opacity:d.newNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:d.newNum??""}),r.jsx("td",{className:"select-none text-center",style:{width:20,fontSize:11,fontWeight:700,color:d.type==="added"?"var(--green)":d.type==="removed"?"var(--red)":"transparent",borderRight:d.type==="added"?"2px solid var(--green)":d.type==="removed"?"2px solid var(--red)":"2px solid transparent"},children:d.type==="added"?"+":d.type==="removed"?"-":" "}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:d.type==="added"?"var(--green)":d.type==="removed"?"var(--red)":"var(--text-secondary)"},children:d.content||""})]},f))})})})]})}function sb({data:t}){if(t.length<2)return r.jsx("span",{style:{color:"var(--text-tertiary)",fontSize:10},children:"--"});const a=t.slice(-10),s=80,i=24,c=2,u=s-c*2,d=i-c*2,f=a.length,x=Math.min(...a),v=Math.max(...a)-x||1,y=a.map((w,E)=>{const k=c+E/(f-1)*u,N=c+d-(w-x)/v*d;return`${k.toFixed(1)},${N.toFixed(1)}`}),b=a[a.length-1],S=Ul(b);return r.jsxs("svg",{width:s,height:i,viewBox:`0 0 ${s} ${i}`,style:{display:"block"},children:[r.jsx("polyline",{points:y.join(" "),fill:"none",stroke:S,strokeWidth:1.5,strokeLinejoin:"round",strokeLinecap:"round"}),(()=>{const[w,E]=y[y.length-1].split(",");return r.jsx("circle",{cx:w,cy:E,r:2.5,fill:S})})()]})}function vN(){return r.jsxs("span",{className:"pill",style:{background:"var(--yellow-muted)",color:"var(--yellow)",fontSize:9,fontWeight:700,gap:3},children:[r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"var(--yellow)",stroke:"none",children:r.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 yN({pct:t}){const a=t>=10?"var(--green)":t>=0?"var(--yellow)":"var(--red)",s=t>=10?"var(--green-muted)":t>=0?"var(--yellow-muted)":"var(--red-muted)",i=t>=0?"+":"";return r.jsxs("span",{className:"pill",style:{background:s,color:a,fontSize:10,fontWeight:600},children:[i,t.toFixed(1),"%"]})}function bN({score:t,rating:a}){const s={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)"}},i=s[a]??s.minimal,c=t>=0?"+":"";return r.jsxs("div",{className:"flex items-center gap-2 mt-3",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:"Skill Quality:"}),r.jsxs("span",{className:"pill",style:{background:i.bg,color:i.fg,fontSize:11,fontWeight:600},children:[c,t.toFixed(1),"% (",a.toUpperCase(),")"]})]})}function jN({warning:t}){return r.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:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--yellow)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.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"}),r.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),r.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--yellow)"},children:t})]})}function SN({active:t,onChange:a,hasBaseline:s}){return r.jsxs("div",{className:"flex gap-1 p-0.5 rounded-lg",style:{background:"var(--surface-2)"},children:[r.jsx("button",{onClick:()=>a("rankings"),className:"px-3 py-1 rounded-md text-[11px] font-medium transition-all",style:{background:t==="rankings"?"var(--surface-3)":"transparent",color:t==="rankings"?"var(--text-primary)":"var(--text-tertiary)"},children:"Rankings"}),r.jsx("button",{onClick:()=>a("amplification"),disabled:!s,className:"px-3 py-1 rounded-md text-[11px] font-medium transition-all",style:{background:t==="amplification"?"var(--surface-3)":"transparent",color:s&&t==="amplification"?"var(--text-primary)":"var(--text-tertiary)",opacity:s?1:.5,cursor:s?"pointer":"not-allowed"},title:s?"View skill amplification data":"Run sweep with --baseline to see amplification data",children:"Skill Amplification"})]})}function kN(t){var i,c,u;if(t.length===0)return[];const a=new Map;for(const d of t)for(const f of d.models){if(f.status==="error")continue;const x=`${f.provider}/${f.model}`;a.has(x)||a.set(x,{provider:f.provider,passRates:[],lastRubric:null,lastDuration:0,lastCost:null,lastBaselinePassRate:void 0,lastSkillDelta:void 0,lastAmplificationPct:void 0,lastCompositeScore:void 0,hasBaseline:!1});const h=a.get(x);h.passRates.push(f.passRate.mean),h.lastRubric=((i=f.rubricScore)==null?void 0:i.mean)??null,h.lastDuration=f.duration.mean,h.lastCost=((c=f.cost)==null?void 0:c.total)??null,h.lastCompositeScore=f.compositeScore,f.baselinePassRate!=null&&(h.lastBaselinePassRate=f.baselinePassRate.mean,h.lastSkillDelta=(u=f.skillDelta)==null?void 0:u.mean,h.lastAmplificationPct=f.amplificationPct,h.hasBaseline=!0)}const s=[];for(const[d,f]of a){const[x,...h]=d.split("/");s.push({rank:0,model:h.join("/"),provider:x,passRate:f.passRates[f.passRates.length-1],rubricScore:f.lastRubric,duration:f.lastDuration,cost:f.lastCost,sparklineData:f.passRates,isBest:!1,baselinePassRate:f.lastBaselinePassRate,skillDelta:f.lastSkillDelta,amplificationPct:f.lastAmplificationPct,compositeScore:f.lastCompositeScore,hasBaseline:f.hasBaseline})}return s.sort((d,f)=>{const x=d.compositeScore??d.passRate;return(f.compositeScore??f.passRate)-x}),s.forEach((d,f)=>{d.rank=f+1}),s.length>0&&(s[0].isBest=!0),s}const ib=(t="left")=>({padding:"10px 12px",fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--text-tertiary)",textAlign:t,whiteSpace:"nowrap"});function wN({entries:t}){return r.jsx("div",{className:"glass-card",style:{overflow:"hidden"},children:r.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[r.jsx("thead",{children:r.jsx("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:["#","Model","Pass Rate","Rubric","Duration","Cost","Trend"].map(a=>r.jsx("th",{style:ib(a==="#"?"center":"left"),children:a},a))})}),r.jsx("tbody",{children:t.map(a=>r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},onMouseEnter:s=>{s.currentTarget.style.background="var(--surface-2)"},onMouseLeave:s=>{s.currentTarget.style.background="transparent"},children:[r.jsx("td",{style:{padding:"10px 12px",textAlign:"center",fontSize:12,fontWeight:600,color:"var(--text-tertiary)",width:40},children:a.rank}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:a.model}),r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:a.provider}),a.isBest&&r.jsx(vN,{})]})}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("span",{className:"pill",style:{background:a.passRate>=.7?"var(--green-muted)":a.passRate>=.4?"var(--yellow-muted)":"var(--red-muted)",color:Ul(a.passRate),fontSize:11,fontWeight:600},children:[Math.round(a.passRate*100),"%"]})}),r.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:a.rubricScore!=null?a.rubricScore.toFixed(1):"--"}),r.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:a.duration<1e3?`${Math.round(a.duration)}ms`:`${(a.duration/1e3).toFixed(1)}s`}),r.jsx("td",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-secondary)"},children:a.cost!=null?`$${a.cost.toFixed(4)}`:"N/A"}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsx(sb,{data:a.sparklineData})})]},`${a.provider}/${a.model}`))})]})})}function CN({entries:t}){const a=[...t].filter(s=>s.hasBaseline).sort((s,i)=>(i.amplificationPct??0)-(s.amplificationPct??0));return a.length===0?r.jsx("div",{className:"flex items-center justify-center py-8",children:r.jsx("div",{className:"text-center",children:r.jsxs("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:["No baseline data available. Run sweep with ",r.jsx("code",{children:"--baseline"})," flag."]})})}):r.jsx("div",{className:"glass-card",style:{overflow:"hidden"},children:r.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[r.jsx("thead",{children:r.jsx("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},children:["#","Model","With Skill","Without Skill","Delta","Amplification","Trend"].map(s=>r.jsx("th",{style:ib(s==="#"?"center":"left"),children:s},s))})}),r.jsx("tbody",{children:a.map((s,i)=>r.jsxs("tr",{style:{borderBottom:"1px solid var(--border-subtle)"},onMouseEnter:c=>{c.currentTarget.style.background="var(--surface-2)"},onMouseLeave:c=>{c.currentTarget.style.background="transparent"},children:[r.jsx("td",{style:{padding:"10px 12px",textAlign:"center",fontSize:12,fontWeight:600,color:"var(--text-tertiary)",width:40},children:i+1}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:s.model}),r.jsx("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:s.provider})]})}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsxs("span",{className:"pill",style:{background:s.passRate>=.7?"var(--green-muted)":s.passRate>=.4?"var(--yellow-muted)":"var(--red-muted)",color:Ul(s.passRate),fontSize:11,fontWeight:600},children:[Math.round(s.passRate*100),"%"]})}),r.jsx("td",{style:{padding:"10px 12px"},children:s.baselinePassRate!=null?r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-secondary)"},children:[Math.round(s.baselinePassRate*100),"%"]}):"--"}),r.jsx("td",{style:{padding:"10px 12px"},children:s.skillDelta!=null?r.jsxs("span",{className:"text-[11px] font-medium",style:{color:s.skillDelta>=0?"var(--green)":"var(--red)"},children:[s.skillDelta>=0?"+":"",(s.skillDelta*100).toFixed(1),"pp"]}):"--"}),r.jsx("td",{style:{padding:"10px 12px"},children:s.amplificationPct!=null&&isFinite(s.amplificationPct)?r.jsx(yN,{pct:s.amplificationPct}):"--"}),r.jsx("td",{style:{padding:"10px 12px"},children:r.jsx(sb,{data:s.sparklineData})})]},`${s.provider}/${s.model}`))})]})})}function EN(){const{state:t}=bn(),{plugin:a,skill:s}=t,[i,c]=m.useState("rankings"),u=`leaderboard/${a}/${s}`,d=m.useCallback(()=>ke.getLeaderboard(a,s),[a,s]),{data:f,loading:x,error:h}=qa(u,d),v=(f==null?void 0:f.entries)??[],y=(h==null?void 0:h.message)??null;m.useEffect(()=>{c("rankings")},[a,s]);const b=m.useCallback(()=>In(u),[u]);Ko("leaderboard:updated",b);const S=m.useMemo(()=>kN(v),[v]),w=S.some(N=>N.hasBaseline),E=v[0],k=E==null?void 0:E.judgeBiasWarning;return x?r.jsx("div",{className:"flex items-center justify-center h-full",children:r.jsx("div",{className:"spinner spinner-lg"})}):y?r.jsx("div",{className:"flex items-center justify-center h-full px-8",children:r.jsxs("div",{className:"text-center",children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--red)"},children:"Failed to load leaderboard"}),r.jsx("div",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:y})]})}):S.length===0?r.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-4 px-8",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center",style:{background:"var(--accent-muted)"},children:r.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M18 20V10"}),r.jsx("path",{d:"M12 20V4"}),r.jsx("path",{d:"M6 20v-6"})]})}),r.jsxs("div",{className:"text-center",children:[r.jsx("div",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No sweep results yet"}),r.jsx("div",{className:"text-[12px] mb-3",style:{color:"var(--text-tertiary)"},children:"Run your first model sweep to compare performance across models:"}),r.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"'}),r.jsxs("div",{className:"text-[11px] mt-2",style:{color:"var(--text-tertiary)"},children:["Add ",r.jsx("code",{children:"--baseline"})," to measure skill amplification per model."]})]})]}):r.jsxs("div",{className:"p-5 animate-fade-in",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"text-[15px] font-semibold",style:{color:"var(--text-primary)"},children:"Model Leaderboard"}),r.jsx(SN,{active:i,onChange:c,hasBaseline:w})]}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[v.length," sweep",v.length!==1?"s":""," · ",S.length," model",S.length!==1?"s":""]})]}),k&&r.jsx(jN,{warning:k}),i==="rankings"?r.jsx(wN,{entries:S}):r.jsx(CN,{entries:S}),i==="amplification"&&(E==null?void 0:E.skillQualityScore)!=null&&(E==null?void 0:E.skillQualityRating)&&r.jsx(bN,{score:E.skillQualityScore,rating:E.skillQualityRating})]})}function NN(t){if(!t)return[];const a=t.split(`
|
|
105
|
+
`),s=[];for(const i of a)if(!(i.startsWith("--- ")||i.startsWith("+++ "))){if(i.startsWith("@@")){s.push({type:"header",content:i});continue}if(i.startsWith("+")){s.push({type:"add",content:i.slice(1)});continue}if(i.startsWith("-")){s.push({type:"remove",content:i.slice(1)});continue}(i.startsWith(" ")||i===""&&s.length>0)&&s.push({type:"context",content:i.startsWith(" ")?i.slice(1):""})}return s}function Yf({contentDiff:t,fromLabel:a,toLabel:s,diffSummary:i,maxHeight:c=480,collapsible:u=!1,renderContext:d="inline",onRetry:f}){const[x,h]=m.useState(u),[v,y]=m.useState("unified"),b=m.useRef(null),S=m.useRef(null),w=m.useMemo(()=>NN(t),[t]),E=m.useMemo(()=>{const z=w.filter(C=>C.type==="add").length,P=w.filter(C=>C.type==="remove").length;return{added:z,removed:P}},[w]),k=m.useMemo(()=>{let z=0,P=0;return w.filter(C=>C.type!=="header").map(C=>C.type==="remove"?(z++,{...C,origNum:z,newNum:null}):C.type==="add"?(P++,{...C,origNum:null,newNum:P}):(z++,P++,{...C,origNum:z,newNum:P}))},[w]),N=m.useMemo(()=>{const z=[],P=[];for(const C of k)if(C.type==="remove")z.push(C);else if(C.type==="add")P.push(C);else{for(;z.length<P.length;)z.push({type:"context",content:"",origNum:null,newNum:null});for(;P.length<z.length;)P.push({type:"context",content:"",origNum:null,newNum:null});z.push(C),P.push(C)}for(;z.length<P.length;)z.push({type:"context",content:"",origNum:null,newNum:null});for(;P.length<z.length;)P.push({type:"context",content:"",origNum:null,newNum:null});return{left:z,right:P}},[k]),T=m.useCallback(z=>{const P=z==="left"?b.current:S.current,C=z==="left"?S.current:b.current;P&&C&&(C.scrollTop=P.scrollTop)},[]);if(!t||w.length===0)return r.jsxs("div",{className:"rounded-lg p-6 text-center",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsx("div",{className:"text-[13px] mb-2",style:{color:"var(--text-tertiary)"},children:"Unable to load diff. Try again."}),f&&r.jsx("button",{onClick:f,className:"btn btn-secondary text-[12px]",children:"Retry"})]});const A=d==="modal"?"fixed inset-0 z-50 flex items-center justify-center bg-black/50":"",B=r.jsxs("div",{className:"rounded-xl overflow-hidden animate-fade-in",style:{background:"var(--surface-1)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between px-5 py-3",style:{background:"var(--surface-2)",borderBottom:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:[a," → ",s]}),r.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[r.jsxs("span",{style:{color:"var(--green)"},children:["+",E.added]}),r.jsxs("span",{style:{color:"var(--red)"},children:["-",E.removed]})]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("button",{onClick:()=>y(v==="unified"?"side-by-side":"unified"),className:"btn btn-ghost text-[11px]",children:v==="unified"?"Side-by-side":"Unified"}),u&&r.jsx("button",{onClick:()=>h(!x),className:"btn btn-ghost text-[11px]",children:x?"Expand":"Collapse"})]})]}),i&&r.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:i}),!x&&(v==="unified"?r.jsx("div",{className:"mx-4 my-4 rounded-lg overflow-hidden",style:{border:"1px solid var(--border-subtle)",maxHeight:c,overflowY:"auto"},children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:k.map((z,P)=>r.jsxs("tr",{style:{background:z.type==="add"?"rgba(34,197,94,0.08)":z.type==="remove"?"rgba(239,68,68,0.08)":"transparent"},children:[r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:z.type==="remove"?"rgba(239,68,68,0.5)":"var(--text-tertiary)",opacity:z.origNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:z.origNum??""}),r.jsx("td",{className:"text-right select-none px-2",style:{width:40,fontSize:10,color:z.type==="add"?"rgba(34,197,94,0.5)":"var(--text-tertiary)",opacity:z.newNum?.6:.2,borderRight:"1px solid var(--border-subtle)"},children:z.newNum??""}),r.jsx("td",{className:"select-none text-center",style:{width:20,fontSize:11,fontWeight:700,color:z.type==="add"?"var(--green)":z.type==="remove"?"var(--red)":"transparent",borderRight:z.type==="add"?"2px solid var(--green)":z.type==="remove"?"2px solid var(--red)":"2px solid transparent"},children:z.type==="add"?"+":z.type==="remove"?"-":" "}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:z.type==="add"?"var(--green)":z.type==="remove"?"var(--red)":"var(--text-secondary)"},children:z.content||""})]},P))})})}):r.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:[r.jsx("div",{ref:b,style:{maxHeight:c,overflowY:"auto",borderRight:"1px solid var(--border-subtle)"},onScroll:()=>T("left"),children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:N.left.map((z,P)=>r.jsxs("tr",{style:{background:z.type==="remove"?"rgba(239,68,68,0.08)":"transparent"},children:[r.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:z.origNum??""}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:z.type==="remove"?"var(--red)":"var(--text-secondary)"},children:z.content||""})]},P))})})}),r.jsx("div",{ref:S,style:{maxHeight:c,overflowY:"auto"},onScroll:()=>T("right"),children:r.jsx("table",{className:"w-full",style:{borderCollapse:"collapse",fontFamily:"var(--font-mono, monospace)"},children:r.jsx("tbody",{children:N.right.map((z,P)=>r.jsxs("tr",{style:{background:z.type==="add"?"rgba(34,197,94,0.08)":"transparent"},children:[r.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:z.newNum??""}),r.jsx("td",{className:"px-3 py-px whitespace-pre-wrap",style:{fontSize:11,lineHeight:1.6,color:z.type==="add"?"var(--green)":"var(--text-secondary)"},children:z.content||""})]},P))})})})]}))]});return d==="modal"?r.jsx("div",{className:A,children:r.jsx("div",{style:{width:"80%",maxWidth:900},children:B})}):B}const Qd="https://verified-skill.com/submit",TN=/^https:\/\/github\.com\/[^/?#@:]+\/[^/?#@:]+(?:[/?#].*)?$/;function RN(t){if(!t)return Qd;const a=t.trim();return!a||!TN.test(a)?Qd:`${Qd}?repo=${encodeURIComponent(a)}`}const AN={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 LN({size:t}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.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"}),r.jsx("path",{d:"M7.5 10.5L9.5 12.5L13 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function MN({size:t}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.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"}),r.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 cv={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)"}},zN={VERIFIED:"Security-Scanned",CERTIFIED:"Trusted Publisher",TAINTED:"Tainted"};function ob(t){return zN[t]??t}function DN({size:t}){return r.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.jsx("path",{d:"M10 2L1.5 17.5H18.5L10 2Z",fill:"currentColor",fillOpacity:"0.15",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),r.jsx("path",{d:"M10 8V12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),r.jsx("circle",{cx:"10",cy:"14.5",r:"1",fill:"currentColor"})]})}function _N({tier:t,size:a}){return t==="TAINTED"?r.jsx(DN,{size:a}):t==="CERTIFIED"?r.jsx(MN,{size:a}):r.jsx(LN,{size:a})}function s4({tier:t,size:a="md",isTainted:s}){const i=AN[a],c=s?"TAINTED":t,u=cv[c]??cv.VERIFIED;return r.jsxs("span",{"data-testid":"tier-badge","data-tier":c,style:{display:"inline-flex",alignItems:"center",gap:i.gap,padding:`${i.py} ${i.px}`,height:i.height,borderRadius:i.radius,fontFamily:"var(--font-geist-mono)",fontSize:i.fontSize,fontWeight:600,letterSpacing:"0.03em",whiteSpace:"nowrap",color:u.color,backgroundColor:u.bg,border:`1px solid ${u.border}`,lineHeight:1},children:[r.jsx(_N,{tier:c,size:i.icon}),ob(c)]})}const uv={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 ON(t,a){return t?t.length>a?t.slice(0,a)+"…":t:""}function BN(t){if(!t)return"";const a=t.trim();if(!a)return"";const s=a.toLowerCase();return s==="0 files"||s==="no files"||s==="no file changes"?"Metadata-only release — no file changes":a}function IN(){const{state:t}=bn(),{plugin:a,skill:s}=t,i=cr(),{onSkillUpdated:c,updateCount:u}=i,d=m.useMemo(()=>i.state.skills.find(D=>D.plugin===a&&D.skill===s)??null,[i.state.skills,a,s]),f=`versions/${a}/${s}`,x=m.useCallback(()=>ke.getSkillVersions(a,s),[a,s]),{data:h,loading:v}=qa(f,x),[y,b]=m.useState(null),[S,w]=m.useState(null),[E,k]=m.useState(null),[N,T]=m.useState(!1),[A,B]=m.useState("idle"),[z,P]=m.useState(null),C=m.useRef(null),O=m.useRef(null),L=m.useMemo(()=>(h==null?void 0:h.find(D=>D.isInstalled))??null,[h]),_=m.useMemo(()=>(h==null?void 0:h[0])??null,[h]),H=L&&_&&L.version!==_.version,W=m.useCallback(D=>{y?!S&&D!==y?w(D):(b(D),w(null),k(null)):(b(D),k(null))},[y,S]),q=m.useCallback(async(D,I)=>{T(!0);try{const F=await ke.getVersionDiff(a,s,D,I);k(F)}catch{k(null)}finally{T(!1)}},[a,s]);m.useEffect(()=>{if(y&&S){const D=h||[],I=D.findIndex(M=>M.version===y),F=D.findIndex(M=>M.version===S),[J,de]=I>F?[y,S]:[S,y];q(J,de)}},[y,S,h,q]);const ee=m.useCallback(()=>{!L||!_||(b(L.version),w(_.version))},[L,_]),$=m.useCallback(async()=>{B("updating"),P(null);const D=new AbortController;C.current=D;try{const I=await ke.postSkillUpdate(a,s,D.signal);if(I.ok)B("done"),c(a,s);else{const F=`Update failed (HTTP ${I.status}): ${I.body||"no response body"}`;B("error"),P(F)}}catch(I){if(I instanceof DOMException&&I.name==="AbortError")return;const F=I instanceof Error?I.message:"Network error";B("error"),P(F)}finally{C.current===D&&(C.current=null)}},[a,s,c]);if(m.useEffect(()=>()=>{var D;(D=C.current)==null||D.abort(),C.current=null},[]),v)return r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"skeleton h-5 w-40 mb-4"}),r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"skeleton h-14 rounded-lg"}),r.jsx("div",{className:"skeleton h-14 rounded-lg"}),r.jsx("div",{className:"skeleton h-14 rounded-lg"})]})]});if(!h||h.length===0){if((d==null?void 0:d.origin)==="source"){const I=RN((d==null?void 0:d.homepage)??null);return r.jsxs("div",{className:"flex flex-col items-center justify-center h-full py-16 px-8","data-testid":"versions-empty-state-local",children:[r.jsx("div",{className:"text-[14px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"No published versions yet"}),r.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."}),r.jsx("a",{href:I,target:"_blank",rel:"noopener noreferrer",className:"btn btn-primary text-[12px]","data-testid":"versions-empty-state-cta",children:"Submit on verified-skill.com"})]})}return d!=null&&d.version?r.jsxs("div",{className:"p-5",children:[r.jsx("div",{className:"text-[14px] font-semibold mb-4",style:{color:"var(--text-primary)"},children:"Version History"}),r.jsxs("div",{className:"relative",children:[r.jsx("div",{className:"absolute left-3 top-0 bottom-0",style:{width:2,background:"var(--border-subtle)"}}),r.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:[r.jsx("span",{className:"absolute left-1.5 top-4 rounded-full",style:{width:10,height:10,background:"var(--accent)",border:"2px solid var(--accent)"}}),r.jsx("div",{className:"flex items-center justify-between",children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:d.version}),r.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:"LOCAL"}),r.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"})]})}),r.jsx("div",{className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:"Local-only — this skill is not registered on verified-skill.com, so no upstream history is available."})]})]})]}):r.jsx("div",{className:"flex flex-col items-center justify-center h-full py-16","data-testid":"versions-empty-state-installed",children:r.jsx("div",{className:"text-[13px]",style:{color:"var(--text-tertiary)"},children:"No version history available"})})}return r.jsxs("div",{className:"p-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsx("div",{className:"text-[14px] font-semibold",style:{color:"var(--text-primary)"},children:"Version History"}),r.jsxs("div",{className:"flex items-center gap-2",children:[H&&r.jsx("button",{onClick:ee,className:"btn btn-secondary text-[11px]",children:"View changes since installed"}),H&&A!=="done"&&(A==="error"?r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"text-[11px]",style:{color:"var(--red)"},children:z||"Update failed"}),r.jsx("button",{onClick:$,className:"btn btn-secondary text-[11px]",children:"Retry"})]}):r.jsx("button",{onClick:$,disabled:A!=="idle",className:"btn btn-primary text-[11px]",children:A==="idle"?`Update to ${_==null?void 0:_.version}`:A==="updating"?"Starting update...":A==="scanning"?"Scanning...":"Installing..."})),u>1&&r.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 (",u,")"]})]})]}),y&&!S&&r.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 ",y]}),r.jsxs("div",{className:"relative",children:[r.jsx("div",{className:"absolute left-3 top-0 bottom-0",style:{width:2,background:"var(--border-subtle)"}}),r.jsx("div",{className:"space-y-1",children:h.map(D=>{const I=uv[D.certTier]||uv.COMMUNITY,F=D.version===y||D.version===S,J=D.isInstalled;return r.jsxs("button",{onClick:()=>W(D.version),className:"w-full text-left pl-8 pr-4 py-3 relative rounded-lg transition-all duration-150",style:{background:F?"var(--accent-muted)":"transparent",border:F?"1px solid var(--accent)":"1px solid transparent",cursor:"pointer"},onMouseEnter:de=>{F||(de.currentTarget.style.background="var(--surface-1)")},onMouseLeave:de=>{F||(de.currentTarget.style.background="transparent")},children:[r.jsx("span",{className:"absolute left-1.5 top-4 rounded-full",style:{width:J?10:8,height:J?10:8,background:J?"var(--accent)":"var(--surface-3)",border:J?"2px solid var(--accent)":"2px solid var(--border-default)"}}),r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:D.version}),r.jsx("span",{className:"text-[9px] font-medium px-1.5 py-0.5 rounded-full",style:{background:I.bg,color:I.text},children:ob(D.certTier)}),J&&r.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"})]}),r.jsx("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:new Date(D.createdAt).toLocaleDateString()})]}),(()=>{const de=BN(D.diffSummary);return de?r.jsx("div",{"data-testid":"version-row-diff-summary",className:"text-[11px] mt-1",style:{color:"var(--text-tertiary)"},children:ON(de,80)}):null})()]},D.version)})}),r.jsx("div",{ref:O,style:{height:1}})]}),N&&r.jsx("div",{className:"mt-4",children:r.jsx("div",{className:"skeleton h-48 rounded-xl"})}),E&&!N&&r.jsx("div",{className:"mt-4",children:r.jsx(Yf,{contentDiff:E.contentDiff,fromLabel:E.from,toLabel:E.to,diffSummary:E.diffSummary,renderContext:"inline",onRetry:()=>y&&S&&q(E.from,E.to)})})]})}function $N(t){return t==="timeline"||t==="models"||t==="versions"}function UN({view:t}){return t==="models"?r.jsx(EN,{}):t==="versions"?r.jsx(IN,{}):r.jsx(mN,{})}function HN(t){const a={prompt:t.prompt,provider:t.provider,model:t.model};return t.targetAgents&&t.targetAgents.length>0&&(a.targetAgents=t.targetAgents),a}function PN(t){var c;const a=t.userName.trim().length>0,s=t.userPlugin.trim().length>0||t.userNewPlugin.trim().length>0,i=t.forceLayout===3;return{applyName:a?null:t.aiName??null,applySuggestedPlugin:!i&&!s&&!!((c=t.aiSuggestedPlugin)!=null&&c.plugin),suggestedPluginValue:i||s?null:t.aiSuggestedPlugin??null}}function Qo(t,a=!0){let s=t.toLowerCase().replace(/[^a-z0-9]+/g,"-");return a&&(s=s.replace(/^-+|-+$/g,"")),s}function VN(t,a,s,i){const u=`.../${t.split("/").slice(-2).join("/")}`;switch(a){case 1:return`${u}/${s}/skills/${i}/SKILL.md`;case 2:return`${u}/plugins/${s}/skills/${i}/SKILL.md`;case 3:return`${u}/skills/${i}/SKILL.md`}}function FN({onCreated:t,resolveAiConfigOverride:a,forceLayout:s}){const[i,c]=m.useState("ai"),[u,d]=m.useState(null),[f,x]=m.useState(!0),{config:h}=Ya(),[v,y]=m.useState(""),[b,S]=m.useState(s??3),[w,E]=m.useState(""),[k,N]=m.useState(""),[T,A]=m.useState(""),[B,z]=m.useState(""),[P,C]=m.useState(""),[O,L]=m.useState(""),[_,H]=m.useState("write"),[W,q]=m.useState([]),[ee,$]=m.useState(!1),[D,I]=m.useState(null),[F,J]=m.useState(null),[de,M]=m.useState(null),[U,K]=m.useState("vskill"),[Q,ce]=m.useState("1.0.0"),[Z,ie]=m.useState(!0),X=m.useCallback(async()=>{try{const Be=await ke.detectEngines();M(Be),K(Je=>Je!=="vskill"?Je:Be.vskillSkillBuilder?"vskill":Be.anthropicSkillCreator?"anthropic-skill-creator":"none")}catch{M({vskillSkillBuilder:!1,anthropicSkillCreator:!1,vskillVersion:null,anthropicPath:null})}},[]);m.useEffect(()=>{X()},[X]);const[me,je]=m.useState(""),[Ne,Me]=m.useState(!1),[Fe,Ue]=m.useState(!1),[De,Ge]=m.useState(null),[ft,oe]=m.useState(null),[ve,ye]=m.useState([]),be=m.useRef(null),Ee=m.useRef(null),qe=m.useRef(null),He=m.useRef(null),jt=m.useRef(null),[Dt,St]=m.useState(!1),[At,xe]=m.useState(!1),Ze=m.useRef(v),Xe=m.useRef(w),kt=m.useRef(k);m.useEffect(()=>{Ze.current=v},[v]),m.useEffect(()=>{Xe.current=w},[w]),m.useEffect(()=>{kt.current=k},[k]),m.useEffect(()=>{ke.getProjectLayout().then(Be=>{if(d(Be),s)return;S(Be.suggestedLayout);const Je=Be.detectedLayouts.find(Pn=>Pn.layout===Be.suggestedLayout);Je!=null&&Je.existingPlugins.length&&E(Je.existingPlugins[0])}).catch(()=>{}).finally(()=>x(!1))},[s]),m.useEffect(()=>{var Be;i==="ai"&&((Be=be.current)==null||Be.focus())},[i]),m.useEffect(()=>()=>{var Be;(Be=Ee.current)==null||Be.abort()},[]);const _t=m.useMemo(()=>{var Be;return u?((Be=u.detectedLayouts.find(Je=>Je.layout===b))==null?void 0:Be.existingPlugins)||[]:[]},[u,b]),lt=w==="__new__"?k:w,jn=u?VN(u.root,b,lt||"{plugin}",v||"{skill}"):"",Yt=m.useMemo(()=>u?u.detectedLayouts.filter(Be=>Be.layout!==4):[],[u]),mn=m.useMemo(()=>{if(!u)return null;const Be=u.detectedLayouts.find(hn=>hn.layout===2&&hn.existingPlugins.length>0),Je=u.detectedLayouts.find(hn=>hn.layout===1&&hn.existingPlugins.length>0),Pn=Be||Je;return Pn?{layout:Pn.layout,plugins:Pn.existingPlugins}:null},[u]),un=m.useCallback(()=>{if(a)return a();if(!h)return{provider:"claude-cli",model:"sonnet"};const Be=h.provider||"claude-cli",Je=h.model||"sonnet";return{provider:Be,model:Je}},[h,a]),ur=m.useCallback(()=>{var Be;(Be=Ee.current)==null||Be.abort(),Me(!1)},[]),Tn=m.useCallback(()=>{Ge(null),oe(null)},[]),Hn=m.useCallback(async()=>{var hn,jr;if(Ge(null),oe(null),ye([]),qe.current=null,He.current=null,!me.trim()){Ge("Describe what your skill should do");return}Me(!0);const Be=new AbortController;Ee.current=Be;const{provider:Je,model:Pn}=un();try{const rn=await fetch("/api/skills/generate?sse",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(HN({prompt:me.trim(),provider:Je,model:Pn,targetAgents:W})),signal:Be.signal});if(!rn.ok||!rn.body){let Ct=`HTTP ${rn.status}`;try{const Jt=await rn.json();Jt.error&&(Ct=Jt.error)}catch{}throw new Error(Ct)}const ae=rn.body.getReader(),Se=new TextDecoder;let Te="",$t="";for(;;){const{done:Ct,value:Jt}=await ae.read();if(Ct)break;Te+=Se.decode(Jt,{stream:!0});const Vr=Te.split(`
|
|
106
|
+
`);Te=Vr.pop()||"";for(const dr of Vr)if(dr.startsWith("event: "))$t=dr.slice(7).trim();else if(dr.startsWith("data: ")){try{const nt=JSON.parse(dr.slice(6));if($t==="progress")ye(Ot=>[...Ot,{phase:nt.phase,message:nt.message,timestamp:Date.now()}]);else if($t==="provenance")He.current={resolvedModelId:typeof nt.resolvedModelId=="string"?nt.resolvedModelId:null,snapshotDate:typeof nt.snapshotDate=="string"?nt.snapshotDate:null};else if($t==="done"||$t==="complete"){const Ot={prompt:me.trim(),provider:un().provider,model:un().model,resolvedModelId:((hn=He.current)==null?void 0:hn.resolvedModelId)??null,snapshotDate:((jr=He.current)==null?void 0:jr.snapshotDate)??null,reasoning:nt.reasoning||""},Ut=PN({userName:Ze.current,userPlugin:Xe.current,userNewPlugin:kt.current,aiName:nt.name,aiSuggestedPlugin:nt.suggestedPlugin&&nt.suggestedPlugin.plugin?{plugin:nt.suggestedPlugin.plugin,layout:nt.suggestedPlugin.layout}:null,forceLayout:s});if(Ut.applyName!==null&&y(Ut.applyName),A(nt.description),z(nt.model||""),C(nt.allowedTools||""),L(nt.body),Ue(!0),qe.current=Ot,c("manual"),s===3)S(3),E(""),N("");else if(Ut.applySuggestedPlugin&&Ut.suggestedPluginValue){const an=Ut.suggestedPluginValue;if(((u==null?void 0:u.detectedLayouts.flatMap(Gr=>Gr.existingPlugins))??[]).includes(an.plugin))if(E(an.plugin),an.layout&&(an.layout===1||an.layout===2))S(an.layout);else{const Gr=u==null?void 0:u.detectedLayouts.find(di=>di.existingPlugins.includes(an.plugin));Gr&&(Gr.layout===1||Gr.layout===2)&&S(Gr.layout)}else E("__new__"),N(an.plugin)}else!Ut.applySuggestedPlugin&&Xe.current.trim().length===0&&kt.current.trim().length===0&&b===3&&mn&&xe(!0);const Fr={name:nt.name,plugin:lt||"",layout:b,description:nt.description,model:nt.model||void 0,allowedTools:nt.allowedTools||void 0,body:nt.body,aiMeta:Ot};ke.saveDraft(Fr).then(an=>{St(!0),an!=null&&an.dir&&(jt.current=an.dir)}).catch(()=>{})}else $t==="error"&&(Ge(nt.message||nt.description||"Unknown error"),nt.category&&oe(nt))}catch{}$t=""}}}catch(rn){rn.name!=="AbortError"&&Ge(rn.message)}finally{Me(!1),Ee.current=null}},[me,un,b,mn,lt,u,W,s]),Rn=m.useCallback(async()=>{var Be;if(I(null),J(null),!v.trim()){I("Skill name is required");return}if(!T.trim()){I("Description is required");return}if(b!==3&&!lt.trim()){I("Plugin name is required");return}if(!Z){I("Version is not valid semver");return}$(!0);try{const Je=await ke.createSkill({name:Qo(v),plugin:lt||"",layout:b,description:T,model:B||void 0,allowedTools:P||void 0,body:O,aiMeta:qe.current||void 0,draftDir:jt.current||void 0,version:Q.trim()||void 0,engine:U});jt.current=null,t(Je.plugin,Je.skill)}catch(Je){if(Je instanceof Ga&&Je.status===409&&((Be=Je.details)==null?void 0:Be.code)==="skill-already-exists"){const Pn=typeof Je.details.plugin=="string"?Je.details.plugin:"",hn=typeof Je.details.skill=="string"?Je.details.skill:Qo(v);J("Skill already existed — opened it."),jt.current=null,t(Pn,hn)}else I(Je.message)}finally{$(!1)}},[v,T,b,lt,B,P,O,Q,Z,U,t]),wt=m.useCallback(()=>{mn&&(S(mn.layout),E(mn.plugins[0]),xe(!1))},[mn]);return{mode:i,setMode:c,layout:u,layoutLoading:f,selectedLayout:b,setSelectedLayout:S,creatableLayouts:Yt,availablePlugins:_t,pathPreview:jn,plugin:w,setPlugin:E,newPlugin:k,setNewPlugin:N,effectivePlugin:lt,name:v,setName:y,description:T,setDescription:A,model:B,setModel:z,allowedTools:P,setAllowedTools:C,body:O,setBody:L,bodyViewMode:_,setBodyViewMode:H,aiPrompt:me,setAiPrompt:je,generating:Ne,aiGenerated:Fe,aiError:De,aiClassifiedError:ft,aiProgress:ve,promptRef:be,handleGenerate:Hn,handleCancelGenerate:ur,clearAiError:Tn,targetAgents:W,setTargetAgents:q,draftSaved:Dt,showPluginRecommendation:At,setShowPluginRecommendation:xe,pluginLayoutInfo:mn,applyPluginRecommendation:wt,creating:ee,error:D,info:F,handleCreate:Rn,engineDetection:de,refreshEngineDetection:X,engine:U,setEngine:K,version:Q,setVersion:ce,versionValid:Z,setVersionValid:ie,standaloneLocked:s===3}}function cb(){return r.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:r.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 GN(){return r.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),r.jsx("polyline",{points:"14 2 14 8 20 8"})]})}function ub({node:t,depth:a=0}){var s;return r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex items-center gap-1.5 py-0.5",style:{paddingLeft:`${a*16}px`,color:t.type==="dir"?"var(--text-secondary)":"var(--text-tertiary)",fontSize:12,fontFamily:"var(--font-mono, monospace)"},children:[t.type==="dir"?r.jsx(cb,{}):r.jsx(GN,{}),r.jsxs("span",{children:[t.name,t.type==="dir"?"/":""]})]}),(s=t.children)==null?void 0:s.map(i=>r.jsx(ub,{node:i,depth:a+1},i.name))]})}function WN(t,a,s){const i=[];a&&i.push({name:"evals.json",type:"file"}),i.push({name:"history",type:"dir"});const c=[{name:"SKILL.md",type:"file"},{name:"evals",type:"dir",children:i}];return s&&c.push({name:"draft.json",type:"file"}),{name:t||"{skill}",type:"dir",children:c}}function qN({skillName:t,hasEvals:a,isDraft:s}){const i=WN(t,a,s);return r.jsxs("div",{className:"glass-card p-4",children:[r.jsxs("h3",{className:"text-[13px] font-semibold mb-3 flex items-center gap-2",style:{color:"var(--text-primary)"},children:[r.jsx("div",{className:"w-5 h-5 rounded-md flex items-center justify-center",style:{background:"var(--accent-muted)"},children:r.jsx(cb,{})}),"Skill Structure"]}),r.jsx("div",{className:"rounded-lg px-3 py-2",style:{background:"var(--surface-0)",border:"1px solid var(--border-subtle)"},children:r.jsx(ub,{node:i})})]})}const xa={background:"var(--surface-3)",color:"var(--text-primary)",border:"1px solid var(--border-subtle)"};function Zd({size:t=14,color:a="currentColor"}){return r.jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:a,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.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 YN({onCreated:t,onCancel:a}){const s=FN({onCreated:t});return r.jsxs("div",{className:"px-8 py-6 max-w-4xl animate-fade-in overflow-auto h-full",children:[r.jsxs("div",{className:"mb-5",children:[r.jsx("h2",{className:"text-[20px] font-semibold tracking-tight",style:{color:"var(--text-primary)"},children:"Create a New Skill"}),r.jsx("div",{className:"flex items-center justify-between mt-2",children:r.jsxs("div",{className:"inline-flex rounded-lg p-0.5",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.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:r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx(Zd,{size:12}),"AI-Assisted"]})}),r.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&&r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"skeleton h-10 w-full rounded-lg"}),r.jsx("div",{className:"skeleton h-10 w-full rounded-lg"})]}),!s.layoutLoading&&s.layout&&s.mode==="ai"&&r.jsxs("div",{className:"space-y-4 animate-fade-in",children:[r.jsxs("div",{className:"glass-card p-4",children:[r.jsxs("h3",{className:"text-[13px] font-semibold mb-3 flex items-center gap-2",style:{color:"var(--text-primary)"},children:[r.jsx("div",{className:"w-5 h-5 rounded-md flex items-center justify-center",style:{background:"rgba(168,85,247,0.15)"},children:r.jsx(Zd,{size:11,color:"#a855f7"})}),"Describe Your Skill"]}),r.jsx("textarea",{ref:s.promptRef,value:s.aiPrompt,onChange:i=>s.setAiPrompt(i.target.value),placeholder:`e.g., A skill that helps format SQL queries, optimize them for performance, and explain query execution plans.
|
|
107
107
|
|
|
108
108
|
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:{...xa,minHeight:"120px"},onKeyDown:i=>{i.key==="Enter"&&(i.metaKey||i.ctrlKey)&&(i.preventDefault(),s.handleGenerate())}}),r.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&&r.jsx(ui,{entries:s.aiProgress,isRunning:!0}),s.aiError&&r.jsx("div",{children:s.aiClassifiedError?r.jsx(dc,{error:s.aiClassifiedError,onRetry:s.handleGenerate,onDismiss:s.clearAiError}):r.jsxs("div",{children:[r.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}),r.jsx("button",{onClick:s.handleGenerate,className:"mt-2 text-[12px] font-medium",style:{color:"#a855f7",background:"none",border:"none",cursor:"pointer"},children:"Retry"})]})}),r.jsxs("div",{className:"flex items-center gap-3",children:[s.generating?r.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"}):r.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:[r.jsx(Zd,{size:14}),"Generate"]}),r.jsx("button",{onClick:a,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&&r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:["or fill in the form manually",r.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"&&r.jsxs("div",{className:"space-y-4 animate-fade-in",children:[r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("h3",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Location"}),s.creatableLayouts.length>1&&r.jsxs("div",{className:"mb-3",children:[r.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Layout"}),r.jsx("div",{className:"flex gap-2",children:s.creatableLayouts.map(i=>r.jsx("button",{onClick:()=>{s.setSelectedLayout(i.layout),s.setPlugin(i.existingPlugins[0]||""),s.setNewPlugin("")},className:"px-3 py-1.5 rounded-lg text-[12px] font-medium transition-all duration-150",style:{background:s.selectedLayout===i.layout?"var(--accent)":"var(--surface-3)",color:s.selectedLayout===i.layout?"#fff":"var(--text-secondary)",border:`1px solid ${s.selectedLayout===i.layout?"var(--accent)":"var(--border-subtle)"}`,cursor:"pointer"},children:i.label},i.layout))})]}),s.selectedLayout!==3&&r.jsxs("div",{className:"mb-3",children:[r.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-2 block",style:{color:"var(--text-tertiary)"},children:"Plugin"}),r.jsxs("select",{value:s.plugin,onChange:i=>{s.setPlugin(i.target.value),s.setNewPlugin("")},className:"w-full px-3 py-2 rounded-lg text-[13px]",style:xa,children:[s.availablePlugins.map(i=>r.jsx("option",{value:i,children:i},i)),r.jsx("option",{value:"__new__",children:"+ New plugin..."})]}),s.plugin==="__new__"&&r.jsx("input",{type:"text",value:s.newPlugin,onChange:i=>s.setNewPlugin(Qo(i.target.value)),placeholder:"my-plugin",className:"w-full mt-2 px-3 py-2 rounded-lg text-[13px]",style:xa})]}),r.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&&r.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:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#3b82f6",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("circle",{cx:"12",cy:"12",r:"10"}),r.jsx("line",{x1:"12",y1:"16",x2:"12",y2:"12"}),r.jsx("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"})]}),r.jsxs("span",{children:["Plugins detected (",r.jsx("strong",{children:s.pluginLayoutInfo.plugins.slice(0,3).join(", ")}),"). Add this skill to a plugin for better organization."]})]}),r.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[r.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"}),r.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:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsx("h3",{className:"text-[13px] font-semibold mb-3",style:{color:"var(--text-primary)"},children:"Skill Details"}),r.jsxs("div",{className:"mb-3",children:[r.jsxs("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:["Name ",r.jsx("span",{style:{color:"var(--red)"},children:"*"})]}),r.jsx("input",{type:"text",value:s.name,onChange:i=>s.setName(Qo(i.target.value,!1)),placeholder:"my-skill",className:"w-full px-3 py-2 rounded-lg text-[13px]",style:xa})]}),r.jsxs("div",{className:"mb-3",children:[r.jsxs("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:["Description ",r.jsx("span",{style:{color:"var(--red)"},children:"*"})]}),r.jsx("textarea",{value:s.description,onChange:i=>s.setDescription(i.target.value),placeholder:"Brief description",rows:3,className:"w-full px-3 py-2 rounded-lg text-[13px] resize-y",style:{...xa,minHeight:"72px"}})]}),r.jsxs("div",{className:"flex gap-3",children:[r.jsxs("div",{className:"flex-1",children:[r.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Model"}),r.jsxs("select",{value:s.model,onChange:i=>s.setModel(i.target.value),className:"w-full px-3 py-2 rounded-lg text-[13px]",style:xa,children:[r.jsx("option",{value:"",children:"Any"}),r.jsx("option",{value:"opus",children:"Opus"}),r.jsx("option",{value:"sonnet",children:"Sonnet"}),r.jsx("option",{value:"haiku",children:"Haiku"})]})]}),r.jsxs("div",{className:"flex-1",children:[r.jsx("label",{className:"text-[11px] font-medium uppercase tracking-wider mb-1 block",style:{color:"var(--text-tertiary)"},children:"Allowed Tools"}),r.jsx("input",{type:"text",value:s.allowedTools,onChange:i=>s.setAllowedTools(i.target.value),placeholder:"Read, Write, Edit...",className:"w-full px-3 py-2 rounded-lg text-[13px]",style:xa})]})]})]}),r.jsxs("div",{className:"glass-card p-4",children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("div",{className:"flex items-center gap-2.5",children:[r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"var(--accent-muted)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),r.jsx("polyline",{points:"14 2 14 8 20 8"}),r.jsx("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),r.jsx("line",{x1:"16",y1:"17",x2:"8",y2:"17"})]})}),r.jsxs("div",{children:[r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"SKILL.md"}),r.jsx("span",{className:"text-[11px] ml-2",style:{color:"var(--text-tertiary)"},children:"Skill Definition"})]})]}),r.jsx("div",{className:"flex items-center",style:{background:"var(--surface-2)",borderRadius:8,padding:2,gap:1},children:["write","preview"].map(i=>r.jsxs("button",{onClick:()=>s.setBodyViewMode(i),className:"flex items-center gap-1 rounded-md transition-all duration-150",style:{padding:"4px 10px",background:s.bodyViewMode===i?"var(--surface-4)":"transparent",color:s.bodyViewMode===i?"var(--text-primary)":"var(--text-tertiary)",fontSize:11,fontWeight:s.bodyViewMode===i?600:400,border:"none",cursor:"pointer"},children:[i==="write"?r.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"16 18 22 12 16 6"}),r.jsx("polyline",{points:"8 6 2 12 8 18"})]}):r.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),r.jsx("circle",{cx:"12",cy:"12",r:"3"})]}),r.jsx("span",{children:i==="write"?"Write":"Preview"})]},i))})]}),s.bodyViewMode==="write"?r.jsx("textarea",{value:s.body,onChange:i=>s.setBody(i.target.value),placeholder:`# /my-skill
|
|
109
109
|
|
|
110
110
|
You are an expert at...
|
|
111
|
-
`,rows:8,className:"w-full px-3 py-2 rounded-lg text-[13px] font-mono resize-y",style:{...xa,minHeight:"150px"}}):s.body.trim()?r.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:cc(s.body)}}):r.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:r.jsx("span",{style:{color:"var(--text-tertiary)"},children:"Start writing to see preview"})})]}),r.jsx(WN,{skillName:s.name||"{skill}",hasEvals:!1,isDraft:s.draftSaved}),s.error&&r.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}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.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"}),r.jsx("button",{onClick:a,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 dv(){return r.jsx("div",{className:"w-16 h-16 rounded-2xl flex items-center justify-center",style:{background:"var(--surface-2)"},children:r.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:[r.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"}),r.jsx("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),r.jsx("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"})]})})}function Fs({variant:t,message:a,onRetry:s}){const{setMode:i,setSearch:c}=cr(),[u,d]=m.useState(!1);return t==="no-selection"?r.jsxs("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in",children:[r.jsx("div",{className:"mb-5",children:u?r.jsx(dv,{}):r.jsx("img",{src:"/images/empty-studio.webp",width:128,height:128,alt:"",onError:()=>d(!0),style:{objectFit:"contain"}})}),r.jsx("p",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-secondary)"},children:"Select a skill to view details"}),r.jsx("p",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Choose a skill from the list to edit, test, and evaluate"})]}):t==="no-skills"?r.jsxs("div",{className:"text-center py-12 px-4 animate-fade-in-scale",children:[r.jsx("div",{className:"w-14 h-14 rounded-2xl flex items-center justify-center mx-auto mb-4",style:{background:"var(--surface-2)"},children:r.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:r.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"})})}),r.jsx("p",{className:"text-[14px] font-medium",style:{color:"var(--text-secondary)"},children:"No skills found"}),r.jsxs("p",{className:"text-[12px] mt-1 mb-4",style:{color:"var(--text-tertiary)"},children:["Check your ",r.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"]}),r.jsxs("button",{onClick:()=>i("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:f=>{f.currentTarget.style.opacity="0.9"},onMouseLeave:f=>{f.currentTarget.style.opacity="1"},children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Create Your First Skill"]})]}):t==="no-project-skills"?r.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:[r.jsx("div",{className:"mb-5",children:u?r.jsx(dv,{}):r.jsx("img",{src:"/images/empty-studio.webp",width:128,height:128,alt:"",onError:()=>d(!0),style:{objectFit:"contain"}})}),r.jsx("p",{className:"text-[15px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No skills installed for this project yet."}),r.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."}),r.jsxs("div",{className:"flex gap-3",children:[r.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:[r.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:[r.jsx("circle",{cx:"9",cy:"21",r:"1"}),r.jsx("circle",{cx:"20",cy:"21",r:"1"}),r.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"]}),r.jsxs("button",{type:"button","data-testid":"empty-state-create-skill",onClick:()=>i("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:[r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Create new skill"]})]})]}):t==="error"?r.jsx("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in",children:r.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:[r.jsx("p",{className:"text-[13px] mb-3",style:{color:"var(--red)"},children:a||"Failed to load skill data"}),s&&r.jsx("button",{onClick:s,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"})]})}):r.jsxs("div",{className:"px-4 py-8 text-center animate-fade-in",children:[r.jsx("p",{className:"text-[13px] mb-2",style:{color:"var(--text-tertiary)"},children:"No skills match your search"}),r.jsx("button",{onClick:()=>c(""),className:"text-[12px] font-medium",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer",textDecoration:"underline"},children:"Clear search"})]})}function YN(t,a){const[s,i]=t.split(".").map(Number),[c,u]=a.split(".").map(Number);return c>s?"major":u>i?"minor":"patch"}const KN={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 db(){const[t,a]=m.useState([]),[s,i]=m.useState(!0),[c,u]=m.useState(new Set),[d,f]=m.useState(new Map),[x,h]=m.useState(!1),[v,y]=m.useState(new Set),[b,S]=m.useState(new Map),[w,E]=m.useState(null),[k,N]=m.useState(null),[T,A]=m.useState(!1),B=m.useCallback(async()=>{i(!0);try{const H=await ke.getSkillUpdates();a(H.filter(W=>W.updateAvailable))}catch{a([])}finally{i(!1)}},[]);m.useEffect(()=>{B()},[B]);const z=m.useMemo(()=>t.filter(H=>!H.pinned),[t]),P=m.useCallback(H=>{u(W=>{const q=new Set(W);return q.has(H)?q.delete(H):q.add(H),q})},[]),C=m.useCallback(()=>{c.size===z.length?u(new Set):u(new Set(z.map(H=>H.name)))},[c,z]),O=m.useCallback(()=>{const H=[...c];if(!H.length)return;h(!0),f(new Map(H.map(q=>[q,{skill:q,status:"pending"}])));const W=ke.startBatchUpdate(H);W.addEventListener("progress",q=>{try{const ee=JSON.parse(q.data);f($=>new Map($).set(ee.skill,ee))}catch{}}),W.addEventListener("done",q=>{W.close(),h(!1);try{const ee=JSON.parse(q.data);E(`Updated ${ee.updated??0} skills, ${ee.failed??0} failed`),setTimeout(()=>E(null),5e3)}catch{}B()}),W.addEventListener("error",()=>{W.close(),h(!1),E("Batch update failed"),setTimeout(()=>E(null),5e3)})},[c,B]),L=m.useCallback(async H=>{const W=H.name.split("/"),q=W.length>=3?W[W.length-2]:W[0],ee=W[W.length-1];y($=>new Set($).add(H.name)),S($=>{const D=new Map($);return D.delete(H.name),D});try{const $=await ke.postSkillUpdate(q,ee);if($.ok)B();else{const D=`Update failed (HTTP ${$.status}): ${$.body}`;S(I=>new Map(I).set(H.name,D)),E(`Couldn't update ${ee} — HTTP ${$.status}`),setTimeout(()=>E(null),5e3)}}catch($){const D=$ instanceof Error?$.message:"Network error";S(I=>new Map(I).set(H.name,D)),E(`Couldn't update ${ee} — ${D}`),setTimeout(()=>E(null),5e3)}finally{y($=>{const D=new Set($);return D.delete(H.name),D})}},[B]),_=m.useCallback(async H=>{if(!H.latest)return;const W=H.name.split("/"),q=W.length>=3?W[W.length-2]:W[0],ee=W[W.length-1];A(!0);try{const $=await ke.getVersionDiff(q,ee,H.installed,H.latest);N({skill:H,diff:$})}catch{N(null)}finally{A(!1)}},[]);return s?r.jsxs("div",{"data-testid":"updates-panel",className:"p-6",children:[r.jsx("div",{className:"skeleton h-6 w-48 mb-4"}),r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"skeleton h-16 rounded-lg"}),r.jsx("div",{className:"skeleton h-16 rounded-lg"})]})]}):t.length===0?r.jsxs("div",{"data-testid":"updates-panel",className:"flex flex-col items-center justify-center h-full py-16",children:[r.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:[r.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),r.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),r.jsx("div",{className:"text-[15px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"All skills are up to date"}),r.jsx("div",{className:"text-[12px] mb-4",style:{color:"var(--text-tertiary)"},children:"No updates available for installed skills."}),r.jsx("button",{onClick:B,className:"btn btn-secondary text-[12px]",children:"Refresh"})]}):r.jsxs("div",{"data-testid":"updates-panel",className:"p-6",children:[w&&r.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:w}),r.jsxs("div",{className:"flex items-center justify-between mb-5",children:[r.jsxs("div",{className:"text-[16px] font-semibold",style:{color:"var(--text-primary)"},children:["Available Updates (",z.length,")"]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("button",{onClick:B,className:"btn btn-ghost text-[12px]",disabled:x,children:"Refresh"}),r.jsx("button",{onClick:O,disabled:c.size===0||x,className:"btn btn-primary text-[12px]",children:x?"Updating...":`Update Selected (${c.size})`})]})]}),r.jsx("div",{className:"flex items-center gap-2 mb-3",children:r.jsxs("button",{onClick:C,className:"flex items-center gap-2 text-[12px] font-medium",style:{color:"var(--text-secondary)",background:"transparent",border:"none",cursor:"pointer"},children:[r.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:c.size===z.length&&z.length>0?"var(--accent)":"var(--border-default)",background:c.size===z.length&&z.length>0?"var(--accent)":"transparent"},children:c.size===z.length&&z.length>0&&r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})}),"Select All"]})}),r.jsx("div",{className:"space-y-2",children:t.map(H=>{const W=H.name.split("/").pop()||H.name,q=H.latest?YN(H.installed,H.latest):"patch",ee=KN[q],$=!!H.pinned,D=v.has(H.name),I=d.get(H.name),F=c.has(H.name);return r.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:$?.7:1},children:r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("button",{onClick:()=>!$&&P(H.name),disabled:$,className:"flex-shrink-0",style:{background:"transparent",border:"none",cursor:$?"not-allowed":"pointer"},children:r.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:$?.4:1},children:F&&r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:W}),$&&r.jsx("span",{className:"text-[10px]",title:"Pinned — unpin from CLI to update",children:"📌"}),r.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:ee.bg,color:ee.text},children:q})]}),r.jsxs("div",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[H.installed," → ",H.latest||"?",$&&` (pinned at ${H.pinnedVersion||H.installed})`]})]}),I&&r.jsxs("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:I.status==="done"?"var(--green-muted)":I.status==="error"?"var(--red-muted)":"var(--yellow-muted)",color:I.status==="done"?"var(--green)":I.status==="error"?"var(--red)":"var(--yellow)"},children:[I.status,I.error&&`: ${I.error}`]}),r.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[r.jsx("button",{onClick:()=>_(H),className:"btn btn-ghost text-[11px]",disabled:T,children:"View Changes"}),r.jsx("button",{onClick:()=>L(H),disabled:$||D||x,title:$?"Pinned — unpin from CLI to update":"",className:`btn ${$?"btn-ghost":"btn-primary"} text-[11px]`,children:D?r.jsxs("span",{className:"flex items-center gap-1",children:[r.jsx("span",{className:"spinner spinner-sm"})," Updating"]}):(I==null?void 0:I.status)==="done"?r.jsx("span",{style:{color:"var(--green)"},children:"✓"}):"Update"})]})]})},H.name)})}),k&&r.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{background:"rgba(0,0,0,0.5)"},onClick:()=>N(null),children:r.jsxs("div",{style:{width:"80%",maxWidth:900},onClick:H=>H.stopPropagation(),children:[r.jsx("div",{className:"mb-2 flex justify-end",children:r.jsx("button",{onClick:()=>N(null),className:"btn btn-ghost text-[12px]",children:"Close"})}),r.jsx(Yf,{contentDiff:k.diff.contentDiff,fromLabel:k.diff.from,toLabel:k.diff.to,diffSummary:k.diff.diffSummary,renderContext:"inline"})]})})]})}const XN=Object.freeze(Object.defineProperty({__proto__:null,UpdatesPanel:db},Symbol.toStringTag,{value:"Module"}));function QN(t){return t==null?"var(--text-tertiary)":t>=.7?"var(--green)":t>=.4?"var(--yellow)":"var(--red)"}function ZN(t){return t==null?"var(--surface-3)":t>=.7?"var(--green-muted)":t>=.4?"var(--yellow-muted)":"var(--red-muted)"}function JN(t){if(!t||typeof t!="string")return null;const a=t.trim();if(!a)return null;if(!a.includes("://")){const[s]=a.split("/");return s&&/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/.test(s)?s:null}try{const s=new URL(a),i=s.hostname.toLowerCase();if(i!=="github.com"&&i!=="www.github.com"&&i!=="raw.githubusercontent.com")return null;const u=s.pathname.split("/").filter(Boolean)[0];return!u||!/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/.test(u)?null:u}catch{return null}}function fb(t){const{author:a,repoUrl:s}=t,i=JN(s??null),c=a&&a.trim()!==""?a:i??"—",[u,d]=m.useState(!1),f=m.useCallback(async()=>{var x;try{await((x=navigator.clipboard)==null?void 0:x.writeText(c)),d(!0),setTimeout(()=>d(!1),1500)}catch{}},[c]);return i?r.jsx("a",{"data-testid":t["data-testid"]??"author-link",href:`https://github.com/${i}`,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:c}):!a||a.trim()===""?r.jsx("span",{"data-testid":t["data-testid"]??"author-link-empty",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:"—"}):r.jsxs("button",{type:"button","data-testid":t["data-testid"]??"author-copy",title:`Copy "${c}"`,onClick:f,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:[c,r.jsx("span",{"aria-hidden":"true",style:{fontSize:10,opacity:.7},children:u?"✓":"⧉"})]})}function eT(t){let a=t.split("#")[0].split("?")[0].replace(/\/+$/,"");return a=a.replace(/\/(?:tree|blob)\/[^/]+(?:\/.*)?$/,""),a}function tT(t,a){const s=eT(t),i=(a??"").replace(/^\/+/,"").replace(/\/+$/,"");return i?`${s}/blob/HEAD/${i}`:`${s}/blob/HEAD/`}function fv(t){if(!t)return"source";const a=t.replace(/\/+$/,""),s=a.lastIndexOf("/");return s===-1?a:a.slice(s+1)}function pb(t){const{repoUrl:a,skillPath:s,absolutePath:i}=t,[c,u]=m.useState(!1),d=typeof a=="string"&&a.trim()!==""&&/^https?:\/\//.test(a.trim()),f=s?fv(s):i?fv(i):"source",x=m.useCallback(async()=>{var y;const v=i??s??"";if(v)try{await((y=navigator.clipboard)==null?void 0:y.writeText(v)),u(!0),setTimeout(()=>u(!1),1500)}catch{}},[i,s]);if(d){const v=tT(a,s);return r.jsxs("a",{"data-testid":t["data-testid"]??"source-file-link",href:v,target:"_blank",rel:"noopener noreferrer",title:v,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:[r.jsx("span",{children:f}),r.jsx("span",{"aria-hidden":"true",children:"↗"})]})}if(!i&&!s)return r.jsx("span",{"data-testid":t["data-testid"]??"source-file-empty",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:"—"});const h=i??s??"";return r.jsxs("button",{type:"button","data-testid":t["data-testid"]??"source-file-copy",title:`Copy ${h}`,onClick:x,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:[r.jsx("span",{children:f}),r.jsx("span",{"aria-hidden":"true",style:{fontSize:10,opacity:.7},children:c?"✓":"⧉"})]})}function pv(t,a="info"){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function mb(t){return t.skill?rT({skill:t.skill}):lT({state:t.state,isReadOnly:t.isReadOnly,onDelete:t.onDelete})}function nT(t,a=48){if(t.length<=a)return t;const s=t.slice(0,12),i=t.slice(t.length-(a-12-1));return`${s}…${i}`}function rT({skill:t}){const[a,s]=m.useState(!1),i=(t.sourcePath??t.dir)||"—",c=m.useCallback(async()=>{var f;try{await((f=navigator.clipboard)==null?void 0:f.writeText(i)),s(!0),setTimeout(()=>s(!1),1500),pv(le.toasts.pathCopied,"info")}catch{pv(le.toasts.permissionDenied,"error")}},[i]),u=t.source==="project"?"Project":t.source==="personal"?"Personal":t.source==="plugin"?"Plugins":t.origin==="installed"?"Personal":"Skills",d=t.source==="project"?"var(--status-installed)":t.source==="plugin"?"var(--color-accent-ink)":"var(--status-own)";return r.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",marginBottom:4},children:[r.jsx("span",{"data-testid":"detail-header-plugin",children:t.plugin}),r.jsx("span",{"aria-hidden":"true",style:{color:"var(--text-secondary)"},children:"›"}),r.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,color:"var(--text-secondary)",fontSize:11,letterSpacing:.3,textTransform:"uppercase"},children:[r.jsx("span",{"data-origin-dot":t.origin,"aria-label":`Origin: ${u}`,style:{display:"inline-block",width:7,height:7,borderRadius:999,background:d}}),u]})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:8},children:[r.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:t.skill}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx("span",{"data-testid":"detail-header-version",children:r.jsx(ci,{version:t.resolvedVersion??t.version??null,source:t.versionSource,pluginName:t.pluginName??null})}),t.pluginName&&t.pluginVersion&&r.jsxs("span",{"data-testid":"detail-header-plugin-chip",title:`This skill ships in plugin ${t.pluginName} v${t.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:[r.jsx("span",{children:"from"}),r.jsx("span",{style:{color:"var(--text-secondary)"},children:t.pluginName}),r.jsx("span",{"aria-hidden":"true",children:"@"}),r.jsx("span",{style:{fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums",color:"var(--text-secondary)"},children:t.pluginVersion})]}),t.origin==="source"&&r.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:t}}))},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:f=>{f.currentTarget.style.color="var(--red)"},onMouseLeave:f=>{f.currentTarget.style.color="var(--text-tertiary)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),r.jsx("path",{d:"M10 11v6"}),r.jsx("path",{d:"M14 11v6"}),r.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]}),r.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:[r.jsx(fb,{author:t.author??null,repoUrl:t.repoUrl??t.homepage??null}),r.jsx(pb,{repoUrl:t.repoUrl??null,skillPath:t.skillPath??null,absolutePath:t.dir})]}),r.jsx(aT,{skill:t}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx("button",{type:"button","data-testid":"detail-header-path-chip",title:i,"aria-label":`Copy path ${i} to clipboard`,onClick:c,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:nT(i)}),r.jsxs("button",{"data-testid":"detail-header-copy-path",type:"button",onClick:c,"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:[r.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),r.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),a?"Copied":"Copy"]})]})]})}function aT({skill:t}){const a=t.installMethod,s=t.symlinkTarget;if(!a)return null;let i="";switch(a){case"symlinked":i=s?`Symlinked from ${s}`:"Symlinked (target unresolved)";break;case"copied":i="Copied (independent)";break;case"authored":i="Authored";break;default:return null}return r.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:[r.jsx("span",{style:{fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",fontSize:10,color:"var(--text-tertiary)"},children:"Install method"}),r.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:i})]})}function lT({state:t,isReadOnly:a,onDelete:s}){const{plugin:i,skill:c,evals:u,latestBenchmark:d,isDirty:f,caseRunStates:x,regressions:h,iterationCount:v}=t,y=Array.from(x.values()).some(N=>N.status==="running"||N.status==="queued"),b=d==null?void 0:d.overall_pass_rate,S=(u==null?void 0:u.evals.reduce((N,T)=>N+T.assertions.length,0))??0,w=(u==null?void 0:u.evals.length)??0,E=QN(b),k=ZN(b);return r.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:[r.jsxs("div",{className:"flex items-center gap-2 text-[13px]",children:[r.jsx("span",{style:{color:"var(--text-tertiary)"},children:i}),r.jsx(sT,{}),r.jsx("span",{className:"font-medium",style:{color:"var(--text-primary)"},children:c}),a&&r.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:[r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"installed"]}),f&&r.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"}),y&&r.jsxs("span",{className:"ml-2 flex items-center gap-1.5 text-[11px]",style:{color:"var(--accent)"},children:[r.jsx("span",{className:"spinner",style:{width:12,height:12,borderWidth:1.5}}),"Running..."]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[!a&&s&&r.jsx("button",{disabled:y,onClick:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:{plugin:i,skill:c,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:y?"not-allowed":"pointer",color:"var(--text-tertiary)",padding:4,opacity:y?.4:1,borderRadius:4},onMouseEnter:N=>{y||(N.currentTarget.style.color="var(--red)")},onMouseLeave:N=>{N.currentTarget.style.color="var(--text-tertiary)"},children:r.jsx(iT,{})}),h.length>0&&r.jsxs("span",{className:"pill",style:{background:"var(--red-muted)",color:"var(--red)"},children:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[r.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"}),r.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),r.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),h.length," regression",h.length>1?"s":""]}),v>0&&r.jsxs("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)"},children:["Iter ",v]}),r.jsx("span",{className:"pill",style:{background:k,color:E},children:b!=null?`${Math.round(b*100)}%`:"--"}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[w," case",w!==1?"s":""," / ",S," assert",S!==1?"s":""]})]})]})}function sT(){return r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})}function iT(){return r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.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"}),r.jsx("line",{x1:"10",y1:"11",x2:"10",y2:"17"}),r.jsx("line",{x1:"14",y1:"11",x2:"14",y2:"17"})]})}function ga(t){const{title:a,label:s,value:i,subtitle:c,description:u,linkLabel:d,children:f,onClick:x}=t,h=a??s??"",v=typeof x=="function",y=b=>{v&&(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),x==null||x())};return r.jsxs("div",{className:v?"metric-card metric-card-link":"metric-card","data-testid":t["data-testid"],role:v?"button":void 0,tabIndex:v?0:void 0,onClick:v?()=>x==null?void 0:x():void 0,onKeyDown:v?y: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:v?"pointer":void 0,wordBreak:"break-word",overflowWrap:"anywhere"},children:[h?r.jsx("div",{"data-testid":t["data-testid"]?`${t["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:h}):null,r.jsx("div",{"data-testid":t["data-testid"]?`${t["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(i)}),c?r.jsx("div",{style:{fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"0.625rem",color:"var(--card-text-muted, var(--text-secondary))"},children:c}):null,u?r.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:u}):null,f?r.jsx("div",{style:{flex:1,marginTop:"0.25rem"},children:f}):null,d?r.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:d}):null]})}const oT="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 cT(t){const{onNavigate:a}=t,[s,i]=m.useState(t.open??!1),c=m.useCallback(()=>i(!1),[]);m.useEffect(()=>{if(!s)return;const d=f=>{f.key==="Escape"&&c()};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[s,c]);const u=m.useCallback(d=>{a==null||a(d),i(!1)},[a]);return r.jsxs("span",{"data-testid":t["data-testid"]??"benchmark-info",style:{position:"relative",display:"inline-flex",alignItems:"center"},children:[r.jsx("button",{type:"button","data-testid":"benchmark-info-trigger","aria-label":"About benchmarks","aria-expanded":!!s,onClick:()=>i(d=>!d),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:"ℹ"}),s&&r.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:[r.jsx("p",{style:{margin:"0 0 8px",lineHeight:1.45},children:oT}),r.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[r.jsx("button",{type:"button","data-testid":"benchmark-info-link-tests",onClick:()=>u("tests"),style:Jd,children:"Tests →"}),r.jsx("button",{type:"button","data-testid":"benchmark-info-link-run",onClick:()=>u("run"),style:Jd,children:"Run →"}),r.jsx("button",{type:"button","data-testid":"benchmark-info-close",onClick:c,style:{...Jd,marginLeft:"auto",color:"var(--text-secondary)"},children:"Close"})]})]})]})}const Jd={background:"transparent",border:"none",padding:0,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-accent, var(--text-primary))",cursor:"pointer",textDecoration:"underline"};function uT(t){return`gh repo create ${t.trim()||"<repo-name>"} --public --source=. --remote=origin --push`}const dT="Add a GitHub remote: `gh repo create --public --source=.` (replace existing origin if needed).";function fT({value:t}){const[a,s]=m.useState(!1),i=m.useCallback(async()=>{try{await navigator.clipboard.writeText(t),s(!0),setTimeout(()=>s(!1),1500)}catch{}},[t]);return r.jsx("button",{type:"button","data-testid":"publish-status-copy","aria-label":"Copy GitHub setup command",onClick:i,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:a?"Copied":"Copy"})}function mv({tone:t,label:a}){const s=t==="ok"?"color-mix(in srgb, var(--color-ok, #22c55e) 18%, transparent)":"color-mix(in srgb, var(--color-own, #f59e0b) 18%, transparent)",i=t==="ok"?"var(--color-ok, #22c55e)":"var(--color-own, #f59e0b)";return r.jsx("span",{style:{display:"inline-flex",alignItems:"center",padding:"2px 8px",borderRadius:999,fontSize:11,fontWeight:500,color:i,background:s},children:a})}function pT(t={}){const{status:a,loading:s}=Oy();if(s||!a)return null;if(a.status==="github")return r.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:[r.jsx(mv,{tone:"ok",label:"Publish-ready"}),r.jsxs("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:["GitHub origin: ",a.githubOrigin]}),r.jsx("div",{style:{marginLeft:"auto"},children:r.jsx(qy,{remoteUrl:a.githubOrigin??"",provider:t.provider,model:t.model})})]});const i=a.status==="no-git"?uT(t.projectBasename??""):dT;return r.jsxs("div",{"data-testid":"publish-status-row","data-status":a.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[r.jsx(mv,{tone:"warn",label:a.status==="no-git"?"No GitHub repo yet":"Origin is not GitHub"}),r.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Connect GitHub to publish your skills."})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[r.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:i}),r.jsx(fT,{value:i})]})]})}function mT({plugin:t,skill:a}){const[s,i]=m.useState([]),[c,u]=m.useState([]),[d,f]=m.useState(!0),[x,h]=m.useState(null);m.useEffect(()=>{ke.getDependencies(t,a).then(y=>{i(y.mcpDependencies),u(y.skillDependencies)}).catch(()=>{}).finally(()=>f(!1))},[t,a]);async function v(y,b){try{await navigator.clipboard.writeText(b),h(y),setTimeout(()=>h(null),2e3)}catch{}}return d?null:s.length===0&&c.length===0?r.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"}):r.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[r.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:[r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"rgba(234,179,8,0.15)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#eab308",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.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"}),r.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"})]})}),r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"Dependencies"}),r.jsx("span",{className:"pill text-[10px]",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:s.length+c.length})]}),r.jsxs("div",{className:"px-5 py-4",children:[s.length>0&&r.jsxs("div",{className:"space-y-3 mb-4",children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"MCP Servers"}),s.map(y=>r.jsxs("div",{className:"p-3 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:y.server}),r.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:y.transport})]}),r.jsx("button",{onClick:()=>v(y.server,y.configSnippet),className:"btn btn-ghost text-[11px] py-1 px-2",style:{color:x===y.server?"var(--green)":"var(--accent)"},children:x===y.server?r.jsxs(r.Fragment,{children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})," Copied!"]}):r.jsxs(r.Fragment,{children:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),r.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"]})})]}),r.jsx("div",{className:"text-[11px] mb-2 font-mono",style:{color:"var(--text-tertiary)"},children:y.url}),r.jsx("div",{className:"flex flex-wrap gap-1.5",children:y.matchedTools.map(b=>r.jsx("span",{className:"px-2 py-0.5 rounded text-[10px] font-mono",style:{background:"var(--surface-3)",color:"var(--text-secondary)"},children:b},b))})]},y.server))]}),c.length>0&&r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Skill Dependencies"}),r.jsx("div",{className:"space-y-1.5",children:c.map(y=>r.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:[r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.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"})}),r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:y.name}),r.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:y.source==="frontmatter"?"frontmatter":"referenced"})]},y.name))})]})]})]})}function hT({plugin:t,skill:a}){const[s,i]=m.useState([]),[c,u]=m.useState(!0),[d,f]=m.useState(null),[x,h]=m.useState(""),[v,y]=m.useState(!1),[b,S]=m.useState(null),[w,E]=m.useState(""),[k,N]=m.useState(""),[T,A]=m.useState(!1),[B,z]=m.useState(new Set),P=m.useCallback(async()=>{u(!0);try{const[_,H]=await Promise.all([ke.getCredentials(t,a).catch(()=>({credentials:[]})),ke.getParams(t,a).catch(()=>({params:[]}))]),W=new Map(H.params.map($=>[$.name,$])),q=new Set,ee=[];for(const $ of _.credentials){q.add($.name);const D=W.get($.name);ee.push({name:$.name,status:$.status==="ready"||$.status==="resolved"?"ready":"missing",source:$.source,maskedValue:D==null?void 0:D.maskedValue})}for(const $ of H.params)q.has($.name)||ee.push({name:$.name,status:$.status,maskedValue:$.maskedValue});i(ee)}finally{u(!1)}},[t,a]);m.useEffect(()=>{P()},[P]);const C=m.useCallback(async _=>{if(B.has(_)){z(H=>{const W=new Set(H);return W.delete(_),W}),i(H=>H.map(W=>W.name===_?{...W,revealedValue:void 0}:W));return}try{const W=(await ke.getParamsRevealed(t,a,_)).params.find(q=>q.name===_);W&&(i(q=>q.map(ee=>ee.name===_?{...ee,revealedValue:W.value}:ee)),z(q=>new Set(q).add(_)))}catch{}},[t,a,B]),O=async(_,H)=>{if(!(!_.trim()||!H.trim())){y(!0),S(null);try{await ke.setCredential(t,a,_,H),f(null),h(""),z(new Set),P()}catch(W){S(W.message)}finally{y(!1)}}},L=async()=>{if(!(!w.trim()||!k.trim())){y(!0),S(null);try{await ke.setCredential(t,a,w.trim().toUpperCase(),k),E(""),N(""),A(!1),P()}catch(_){S(_.message)}finally{y(!1)}}};return c?r.jsxs("div",{className:"mt-6",children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Parameters & Secrets"}),r.jsx("div",{className:"skeleton h-20 rounded-xl"})]}):r.jsxs("div",{className:"mt-6",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Parameters & Secrets"}),r.jsx("button",{onClick:()=>A(!T),className:"text-[11px] transition-colors duration-150",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"+ Add Parameter"})]}),b&&r.jsx("div",{className:"mb-2 px-3 py-2 rounded-lg text-[11px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:b}),s.length===0&&!T?r.jsx("div",{className:"text-[12px] text-center py-6 rounded-xl",style:{color:"var(--text-tertiary)",background:"var(--surface-2)"},children:"No credentials configured for this skill"}):r.jsx("div",{className:"rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:s.map(_=>r.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:[r.jsx("span",{className:"text-[11px] font-mono font-medium truncate",style:{color:"var(--text-primary)",minWidth:80},children:_.name}),_.maskedValue&&r.jsx("span",{className:"text-[10px] font-mono truncate",style:{color:"var(--text-tertiary)",maxWidth:120},children:B.has(_.name)&&_.revealedValue!=null?_.revealedValue:_.maskedValue}),_.maskedValue&&r.jsx("button",{onClick:()=>C(_.name),className:"btn btn-ghost px-1",title:B.has(_.name)?"Hide value":"Reveal value",style:{color:"var(--text-tertiary)",lineHeight:1},children:B.has(_.name)?r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.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"}),r.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"}),r.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),r.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}),r.jsx("span",{className:"text-[10px] font-semibold px-2 py-0.5 rounded-full",style:{background:_.status==="ready"?"var(--green-muted)":"var(--orange-muted)",color:_.status==="ready"?"var(--green)":"var(--orange)"},children:_.status==="ready"?"ready":"missing"}),_.source&&r.jsx("span",{className:"text-[9px]",style:{color:"var(--text-tertiary)"},children:_.source}),d===_.name?r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("input",{value:x,onChange:H=>h(H.target.value),onKeyDown:H=>{H.key==="Enter"&&O(_.name,x)},className:"input-field text-[11px] font-mono",style:{width:160},placeholder:"Value...",autoFocus:!0}),r.jsx("button",{onClick:()=>O(_.name,x),disabled:v||!x.trim(),className:"btn btn-primary text-[10px] px-2 py-0.5",children:v?"...":"Save"}),r.jsx("button",{onClick:()=>{f(null),h("")},className:"btn btn-ghost text-[10px] px-1",children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}):r.jsx("button",{onClick:()=>{f(_.name),h("")},className:"btn btn-ghost text-[10px] px-2 py-0.5",style:{color:"var(--accent)"},children:"Edit"})]},_.name))}),T&&r.jsxs("div",{className:"mt-2 p-3 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex gap-2 mb-2",children:[r.jsx("input",{value:w,onChange:_=>E(_.target.value),className:"input-field flex-1 text-[11px] font-mono",placeholder:"KEY_NAME",autoFocus:!0}),r.jsx("input",{value:k,onChange:_=>N(_.target.value),onKeyDown:_=>{_.key==="Enter"&&L()},className:"input-field flex-1 text-[11px] font-mono",placeholder:"Value",type:"password"})]}),r.jsxs("div",{className:"flex justify-end gap-1.5",children:[r.jsx("button",{onClick:()=>{A(!1),E(""),N("")},className:"btn btn-ghost text-[10px]",children:"Cancel"}),r.jsx("button",{onClick:L,disabled:v||!w.trim()||!k.trim(),className:"btn btn-primary text-[10px]",children:v?"Saving...":"Save"})]})]})]})}function hv({children:t}){return r.jsx("h3",{style:{fontFamily:"var(--font-sans)",fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:.6,color:"var(--text-tertiary)",margin:"0 0 8px"},children:t})}function xT({plugin:t,skill:a}){return r.jsxs("aside",{"data-testid":"skill-overview-rightrail",style:{display:"flex",flexDirection:"column",gap:16},children:[r.jsxs("section",{"data-testid":"overview-rightrail-setup",children:[r.jsx(hv,{children:"Setup"}),r.jsx(mT,{plugin:t,skill:a})]}),r.jsxs("section",{"data-testid":"overview-rightrail-credentials",children:[r.jsx(hv,{children:"Credentials"}),r.jsx(hT,{plugin:t,skill:a})]})]})}function gT(t){if(t==null||!Number.isFinite(t))return"—";if(t<1024)return`${t} B`;const a=t/1024;if(a<1024)return a>=10?`${Math.round(a)} KB`:`${a.toFixed(1).replace(/\.0$/,"")} KB`;const s=a/1024;return s>=10?`${Math.round(s)} MB`:`${s.toFixed(1).replace(/\.0$/,"")} MB`}function Us(t){if(!t)return"—";const a=new Date(t);if(Number.isNaN(a.getTime()))return t;const s=Date.now()-a.getTime(),i=Math.floor(s/1e3);if(i<60)return"just now";const c=Math.floor(i/60);if(c<60)return`${c} min ago`;const u=Math.floor(c/60);if(u<24)return`${u} hr ago`;const d=Math.floor(u/24);if(d<30)return`${d} day${d===1?"":"s"} ago`;const f=Math.floor(d/30);if(f<12)return`${f} month${f===1?"":"s"} ago`;const x=Math.floor(f/12);return`${x} year${x===1?"":"s"} ago`}function vT(t){switch(t.benchmarkStatus){case"pass":case"fail":case"stale":return t.benchmarkStatus==="pass"?"100%":t.benchmarkStatus==="fail"?"0%":"—";default:return"—"}}function yT(t){const a=t.installMethod;if(!a)return null;const s=a==="authored"?"Authored":a==="copied"?"Copied":"Symlinked";return r.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:s})}function bT(t,a){const s=t.evalCount??0;return!t.hasEvals||s<=0?null:r.jsxs("button",{type:"button","data-testid":"overview-tests-chip",onClick:a?()=>a("run"):void 0,title:`Open Run tab — ${s} test case${s===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:a?"pointer":"default"},children:[s," ",s===1?"test":"tests"]})}function jT(t){var y,b;const{skill:a,onNavigate:s,activationsCount:i=0,lastRunIso:c=null,repoUrl:u,skillPathInRepo:d}=t,f=u??(ST(a.homepage)?a.homepage??null:null),x=((y=a.mcpDeps)==null?void 0:y.length)??0,h=((b=a.deps)==null?void 0:b.length)??0,v=r.jsxs("div",{"data-testid":"skill-overview-main",style:{display:"flex",flexDirection:"column",gap:12},children:[r.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[r.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:a.skill}),r.jsx(ci,{version:a.resolvedVersion??a.version??null,source:a.versionSource,pluginName:a.pluginName??null}),yT(a),bT(a,s)]}),r.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:[r.jsx(fb,{author:a.author??null,repoUrl:f}),a.category?r.jsxs("span",{children:["· ",a.category]}):null,r.jsx(pb,{repoUrl:f,skillPath:d??null,absolutePath:a.dir}),a.lastModified?r.jsxs("span",{title:a.lastModified,children:["· Updated ",Us(a.lastModified)]}):null]})]}),r.jsx(pT,{}),r.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:[r.jsx(ga,{title:"Benchmark",value:vT(a),subtitle:a.lastBenchmark?Us(a.lastBenchmark):"Never run","data-testid":"metric-benchmark",onClick:s?()=>s("run"):void 0,children:r.jsx("div",{style:{marginTop:4,display:"inline-flex",alignItems:"center"},children:r.jsx(cT,{onNavigate:s})})}),r.jsx(ga,{title:"Tests",value:a.evalCount??0,subtitle:`${a.assertionCount??0} assertions`,"data-testid":"metric-tests",onClick:s?()=>s("tests"):void 0}),r.jsx(ga,{title:"Activations",value:i,subtitle:c?`Last: ${Us(c)}`:"Never","data-testid":"metric-activations",onClick:s?()=>s("activation"):void 0}),r.jsx(ga,{title:"Last run",value:Us(c??a.lastBenchmark??null),"data-testid":"metric-last-run",onClick:s?()=>s("history"):void 0}),r.jsx(ga,{title:"MCP deps",value:x,subtitle:x>0&&a.mcpDeps?a.mcpDeps.slice(0,3).join(", "):"None","data-testid":"metric-mcp-deps",onClick:s?()=>s("deps"):void 0}),r.jsx(ga,{title:"Skill deps",value:h,subtitle:h>0&&a.deps?a.deps.slice(0,3).join(", "):"None","data-testid":"metric-skill-deps",onClick:s?()=>s("deps"):void 0}),r.jsx(ga,{title:"Size",value:gT(a.sizeBytes),"data-testid":"metric-size"}),r.jsx(ga,{title:"Last modified",value:Us(a.lastModified),subtitle:a.lastModified??void 0,"data-testid":"metric-last-modified"})]})]});return r.jsxs("div",{"data-testid":"skill-overview",className:"skill-overview",style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) 280px",gap:16,padding:16,alignItems:"start"},children:[v,r.jsx(xT,{plugin:a.plugin,skill:a.skill})]})}function ST(t){return t?/^https?:\/\/(?:www\.)?(?:github\.com|raw\.githubusercontent\.com)\//.test(t):!1}function kT({skill:t}){const{onSkillUpdated:a}=cr(),{toast:s}=rc(),[i,c]=m.useState("idle"),[u,d]=m.useState(null),[f,x]=m.useState(!1),[h,v]=m.useState(null),[y,b]=m.useState(!1),S=m.useRef(null),w=m.useCallback(async()=>{if(!t||i==="updating")return;const T=new AbortController;S.current=T,c("updating"),d(null);try{const A=await ke.postSkillUpdate(t.plugin,t.skill,T.signal);if(A.ok)c("done"),a(t.plugin,t.skill),s({message:`Updated ${t.skill}.`,severity:"success",durationMs:4e3});else{const B=`Update failed (HTTP ${A.status}): ${A.body}`;c("idle"),d(B),s({message:`Couldn't update ${t.skill} — HTTP ${A.status}`,severity:"error",durationMs:0,action:{label:"Retry",onInvoke:()=>{w()}}})}}catch(A){if(A instanceof DOMException&&A.name==="AbortError")return;const B=A instanceof Error?A.message:"Network error";c("idle"),d(B),s({message:`Couldn't update ${t.skill} — ${B}`,severity:"error",durationMs:0,action:{label:"Retry",onInvoke:()=>{w()}}})}finally{S.current===T&&(S.current=null)}},[t,i,a,s]);if(m.useEffect(()=>{if(!f||h!=null||!t||!t.latestVersion)return;let T=!1;return b(!0),ke.getVersionDiff(t.plugin,t.skill,t.currentVersion??"",t.latestVersion).then(A=>{T||v(A)}).catch(()=>{T||v(null)}).finally(()=>{T||b(!1)}),()=>{T=!0}},[f,h,t==null?void 0:t.plugin,t==null?void 0:t.skill,t==null?void 0:t.latestVersion,t==null?void 0:t.currentVersion,t]),m.useEffect(()=>()=>{var T;(T=S.current)==null||T.abort()},[]),!t||t.updateAvailable!==!0)return null;const E=t.latestVersion,k=i==="updating"?"Updating…":E?`Update to ${E}`:"Update",N=i==="updating";return r.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[r.jsx("button",{type:"button","data-testid":"update-action-button",onClick:()=>{w()},disabled:N,style:{height:36,padding:"0 14px",background:"var(--color-ink)",color:"var(--color-paper)",border:"none",borderRadius:4,cursor:N?"not-allowed":"pointer",fontFamily:"var(--font-sans)",fontSize:13,fontWeight:500},children:k}),r.jsx("button",{type:"button","data-testid":"update-action-toggle-changelog",onClick:()=>x(T=>!T),disabled:N||!E,style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:12,fontFamily:"var(--font-sans)",cursor:"pointer",textDecoration:"underline"},children:f?"Hide changelog":"Preview changelog"})]}),i==="updating"&&r.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…"}),u&&i!=="updating"&&r.jsx("div",{"data-testid":"update-action-error",role:"alert",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--color-error, #d32f2f)"},children:u}),f&&E&&r.jsxs("div",{"data-testid":"update-action-changelog",style:{paddingTop:8},children:[y&&r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Loading changelog…"}),!y&&h&&r.jsx(Yf,{contentDiff:h.contentDiff,fromLabel:h.from,toLabel:h.to,diffSummary:h.diffSummary??void 0,renderContext:"inline"}),!y&&!h&&r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Couldn't load changelog."})]})]})}const wT=3e4;function CT({plugin:t,skill:a,trackedForUpdates:s=!0,discoveryBackedOff:i=!1}){const c=cr(),[u,d]=m.useState(!1),[f,x]=m.useState(!1),[,h]=m.useState(0),v=m.useRef(null),y=m.useRef(null),b=`${t}/${a}`,S=c.updatesById.get(b);if(m.useEffect(()=>{if(!u)return;const E=setInterval(()=>h(k=>(k+1)%1e6),250);return()=>clearInterval(E)},[u]),m.useEffect(()=>{if(!u||!S)return;const E=y.current??0;S.receivedAt<E||(v.current&&(clearTimeout(v.current),v.current=null),d(!1),x(!1),y.current=null)},[u,S]),m.useEffect(()=>()=>{v.current&&clearTimeout(v.current)},[]),s===!1||i)return null;const w=async()=>{if(!u){x(!1),d(!0),y.current=Date.now(),v.current=setTimeout(()=>{d(!1),x(!0),v.current=null,y.current=null},wT);try{await ke.rescanSkill(t,a)}catch{v.current&&(clearTimeout(v.current),v.current=null),d(!1),y.current=null}}};return r.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[r.jsx("button",{type:"button","data-testid":"check-now-button",onClick:w,disabled:u,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:u?"not-allowed":"pointer"},children:"Check now"}),u&&r.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"}}),f&&r.jsx("span",{"data-testid":"check-now-no-changes",style:{fontSize:11,color:"var(--text-secondary)",fontFamily:"var(--font-sans)"},children:"No changes detected"})]})}function ET(t,a){var s;typeof process<"u"&&((s=process==null?void 0:process.env)==null?void 0:s.NODE_ENV)==="production"||console.warn(`[SubTabBar] sub-tab "${a}" clicked under "${t}" but no onChange handler was wired. Pass an onChange prop or this click is a no-op.`)}function NT({tabs:t,active:a,onChange:s,parentTabId:i}){const[c,u]=m.useState(null),d=f=>{s?s(f):ET(i,f)};return r.jsx("div",{role:"tablist","aria-label":`${i} sub-sections`,"data-testid":`detail-subtab-bar-${i}`,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:t.map(f=>{const x=f.id===a,h=c===f.id&&!x;return r.jsx("button",{type:"button",role:"tab","aria-selected":x,tabIndex:x?0:-1,id:`detail-subtab-${i}-${f.id}`,"data-testid":`detail-subtab-${i}-${f.id}`,onClick:()=>d(f.id),onMouseEnter:()=>u(f.id),onMouseLeave:()=>u(v=>v===f.id?null:v),style:{background:h?"var(--surface-2, rgba(0,0,0,0.04))":"transparent",border:"none",borderBottom:x?"2px solid var(--text-primary)":"2px solid var(--border-subtle, transparent)",padding:"8px 10px",marginBottom:-1,fontFamily:"var(--font-sans)",fontSize:13,fontWeight:x?500:400,color:x?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap",transition:"background 80ms ease"},children:f.label},f.id)})})}const TT=[{id:"overview",label:"Overview"},{id:"edit",label:"Edit",visibleWhen:({isReadOnly:t})=>!t},{id:"run",label:"Run"},{id:"history",label:"History"}];function hb(t){return TT.filter(a=>a.visibleWhen?a.visibleWhen({isReadOnly:t}):!0)}const RT={tests:{tab:"run",mode:"benchmark"},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"},edit:{tab:"edit"},run:{tab:"run"},history:{tab:"history"}};function Zo(t){return t?RT[t]??null:null}function Ef(t){const a=new URLSearchParams(t),s=a.get("tab"),i=a.get("panel");return Zo(s)??Zo(i)??{tab:"overview"}}function xb(t,a){return!a||new Set(hb(!0).map(i=>i.id)).has(t)?t:"overview"}const Il={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 Ks(t){const a=Il[t];return a&&a.length>0?a[0].id:""}function gb(t,a){const s=Il[t];if(!s)return"";const i=new URLSearchParams(a),c=t==="run"?"mode":t==="history"?"view":"sub",u=i.get(c)??i.get("sub");return u&&s.some(d=>d.id===u)?u:s[0].id}function AT(t){return t==="run"?"mode":t==="history"?"view":null}function LT(t){switch(t){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 ef(){const{state:t,setMobileView:a}=cr();return t.isMobile?r.jsxs("button",{onClick:()=>a("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:[r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"15 18 9 12 15 6"})}),"Back to skills"]}):null}function MT(t={}){if(t.selectedSkillInfo!==void 0||t.loadError!==void 0)return zT(t);const{state:a,selectSkill:s,setMode:i,refreshSkills:c}=cr(),[u,d]=m.useState(typeof window<"u"?window.location.hash:"");if(m.useEffect(()=>{const h=()=>d(window.location.hash);return window.addEventListener("hashchange",h),()=>window.removeEventListener("hashchange",h)},[]),u==="#/updates")return r.jsxs("div",{className:"h-full overflow-auto animate-fade-in",children:[r.jsx(ef,{}),r.jsx(db,{})]});if(a.mode==="create")return r.jsxs("div",{className:"h-full overflow-auto animate-fade-in",children:[r.jsx(ef,{}),r.jsx(qN,{onCreated:async(h,v)=>{i("browse"),await c(),s({plugin:h,skill:v,origin:"source",source:"project"})},onCancel:()=>i("browse")})]});if(!a.selectedSkill)return a.skillsError?r.jsx(Fs,{variant:"error",message:a.skillsError,onRetry:c}):!a.skillsLoading&&a.skills.length===0?r.jsx(Fs,{variant:"no-skills"}):!a.skillsLoading&&a.skills.length>0&&!a.skills.some(h=>h.scopeV2==="available-project")?r.jsx(Fs,{variant:"no-project-skills"}):r.jsx(Fs,{variant:"no-selection"});const f=a.selectedSkill,x=a.skills.find(h=>h.plugin===f.plugin&&h.skill===f.skill)??null;return r.jsxs("div",{className:"flex flex-col h-full",children:[r.jsx(ef,{}),r.jsx(DT,{skillInfo:x,allSkills:a.skills,onSelectSkill:h=>s(h)})]})}function zT(t){const a=t.selectedSkillInfo??null,s=t.activeDetailTab??"overview";if(a==null)return OT();if(t.loadError)return BT(a,t.loadError);const i=t.allSkills&&t.onSelectSkill?{allSkills:t.allSkills,onSelectSkill:t.onSelectSkill}:void 0,c=t.activeDetailSub??Ks(s);return vb(a,s,t.onDetailTabChange,c,t.onDetailSubChange,i)}function DT({skillInfo:t,allSkills:a,onSelectSkill:s}){const i=m.useMemo(()=>typeof window>"u"?{tab:"overview"}:Ef(window.location.search),[]),[c,u]=m.useState(i.tab),[d,f]=m.useState(()=>i.mode?i.mode:i.view?i.view:gb(i.tab,typeof window<"u"?window.location.search:""));m.useEffect(()=>{if(!t||!(t.origin==="installed"))return;const v=xb(c,!0);v!==c&&(u(v),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:"This skill is read-only — workbench tabs are hidden.",severity:"info"}})))},[t,c]),m.useEffect(()=>{f(Ks(c))},[c]),m.useEffect(()=>{if(typeof window>"u")return;const h=new URLSearchParams(window.location.search);h.delete("panel"),h.delete("sub"),c==="overview"?h.delete("tab"):h.set("tab",c);const v=AT(c),y=Il[c];h.delete("mode"),h.delete("view"),v&&y&&d&&d!==y[0].id&&h.set(v,d);const b=h.toString(),S=`${window.location.pathname}${b?"?"+b:""}${window.location.hash}`;window.history.replaceState(null,"",S)},[c,d]);const x=m.useMemo(()=>t?vb(t,c,u,d,f,{}):r.jsx(Fs,{variant:"no-selection"}),[t,c,d,a,s]);return r.jsx("div",{className:"flex flex-col h-full",style:{background:"var(--bg-canvas)"},children:x})}function _T(t,a,s){const i=hb(s);return r.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:i.map(({id:c,label:u})=>{const d=c===t;return r.jsx("button",{type:"button",role:"tab","aria-selected":d,tabIndex:d?0:-1,id:`detail-tab-${c}`,"aria-controls":`detail-panel-${c}`,"data-testid":`detail-tab-${c}`,onClick:()=>a==null?void 0:a(c),style:{background:"transparent",border:"none",borderBottom:d?"2px solid var(--text-primary)":"2px solid transparent",padding:"10px 8px",marginBottom:-1,fontFamily:"var(--font-sans)",fontSize:13,fontWeight:d?500:400,color:d?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap"},children:u},c)})})}function OT(){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",padding:32,background:"var(--bg-canvas)"},children:[r.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"}),r.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 BT(t,a){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:24,background:"var(--bg-canvas)",height:"100%"},children:[mb({skill:t}),r.jsxs("section",{role:"alert",style:{background:"var(--bg-surface)",border:"1px solid var(--border-default)",borderRadius:8,padding:"14px 16px"},children:[r.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 ",t.skill]}),r.jsx("p",{style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",margin:"0 0 12px",wordBreak:"break-word"},children:a})]})]})}function IT({active:t,sub:a}){if(t==="edit")return r.jsx(DE,{});if(t==="run"){const s=eN(a)?a:"benchmark";return r.jsx(tN,{mode:s})}if(t==="history"){const s=IN(a)?a:"timeline";return r.jsx($N,{view:s})}return null}function $T({active:t,sub:a}){const{state:s,dispatch:i}=bn();return m.useEffect(()=>{if(t==="overview")return;const c=t==="edit"?"editor":t==="run"?a==="activation"?"activation":"run":t==="history"?a==="models"?"leaderboard":a==="versions"?"versions":"history":"editor";s.activePanel!==c&&i({type:"SET_PANEL",panel:c})},[t,a,s.activePanel,i]),null}function vb(t,a,s,i="",c,u){var b;const d=t.origin==="installed",f=xb(a,d),x=S=>{const w=LT(S);s==null||s(w.tab),c&&(w.mode?c(w.mode):w.view&&c(w.view))},h=r.jsx(jT,{skill:t,onNavigate:x,repoUrl:t.homepage??null}),v=u!=null?r.jsxs(VC,{plugin:t.plugin,skill:t.skill,origin:t.origin,children:[r.jsx($T,{active:f,sub:i}),r.jsx(IT,{active:f,sub:i})]},`${t.plugin}/${t.skill}`):r.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 ",f," view."]}),y=t.origin==="installed"&&r.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:[r.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:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),r.jsx("span",{style:{flex:1,minWidth:0},children:"This is an installed copy of the skill. Editing, generating tests, and running evals are disabled. Open the source skill to make changes."}),t.trackedForUpdates&&r.jsx("button",{type:"button","data-testid":"uninstall-button","aria-label":`Uninstall ${t.skill}`,onClick:()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-uninstall",{detail:{skill:{plugin:t.plugin,skill:t.skill,dir:t.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 r.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",background:"var(--bg-canvas)"},children:[r.jsx("div",{style:{padding:16,paddingBottom:12},children:mb({skill:t})}),r.jsx(kT,{skill:t}),y,t.origin==="installed"&&t.scopeV2!=="available-plugin"&&r.jsx("div",{style:{padding:"8px 16px",borderBottom:"1px solid var(--border-default)"},children:r.jsx(CT,{plugin:t.plugin,skill:t.skill,trackedForUpdates:t.trackedForUpdates})}),_T(f,s,d),Il[f]&&r.jsx(NT,{parentTabId:f,tabs:Il[f],active:i||(((b=Il[f][0])==null?void 0:b.id)??""),onChange:c}),r.jsx("div",{role:"tabpanel",id:`detail-panel-${f}`,"aria-labelledby":`detail-tab-${f}`,"data-testid":`detail-panel-${f}`,style:{flex:1,minHeight:0,overflow:"auto"},children:f==="overview"?h:v})]})}function UT(){const{updateCount:t,state:a,dismissUpdateNotification:s}=cr(),i=t>0&&!a.updateNotificationDismissed;return m.useEffect(()=>{if(!i)return;const c=setTimeout(()=>s(),1e4);return()=>clearTimeout(c)},[i,s]),i?r.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:[r.jsxs("span",{children:[t," update",t===1?"":"s"," available"]}),r.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"}),r.jsx("button",{onClick:s,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 HT=[{name:le.shortcuts.groupNavigation,items:[{keys:"/",label:le.shortcuts.search},{keys:"j",label:le.shortcuts.moveDown},{keys:"k",label:le.shortcuts.moveUp},{keys:"Enter",label:le.shortcuts.openSelected},{keys:"Esc",label:"Close / clear"}]},{name:le.shortcuts.groupActions,items:[{keys:"⌘K",label:le.shortcuts.openPalette},{keys:"?",label:le.shortcuts.openShortcuts},{keys:"⌘B",label:le.shortcuts.toggleSidebar},{keys:"E",label:le.actions.edit}]},{name:le.shortcuts.groupTheme,items:[{keys:"⌘⇧D",label:le.shortcuts.toggleTheme}]}];function PT({open:t,onClose:a,groups:s=HT,title:i=le.shortcuts.title}){const c=m.useRef(null),u=m.useRef(null);return m.useEffect(()=>{var d;if(t)return c.current=document.activeElement??null,(d=u.current)==null||d.focus(),()=>{var f,x;(x=(f=c.current)==null?void 0:f.focus)==null||x.call(f),c.current=null}},[t]),m.useEffect(()=>{if(!t)return;function d(f){var x;if(f.key==="Escape"){f.preventDefault(),a();return}f.key==="Tab"&&(f.preventDefault(),(x=u.current)==null||x.focus())}return window.addEventListener("keydown",d,!0),()=>window.removeEventListener("keydown",d,!0)},[t,a]),t?r.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:d=>{d.target===d.currentTarget&&a()},children:r.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:[r.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[r.jsx("h2",{id:"shortcut-modal-title",style:{margin:0,fontFamily:"var(--font-serif)",fontWeight:500,fontSize:18},children:i}),r.jsx("button",{ref:u,type:"button","aria-label":"Close",onClick:a,style:{background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,padding:"2px 8px",color:"var(--text-secondary)",cursor:"pointer",fontSize:13},children:"Esc"})]}),s.map(d=>r.jsxs("section",{style:{marginBottom:12},children:[r.jsx("h3",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-secondary)",margin:"0 0 6px"},children:d.name}),r.jsx("ul",{style:{listStyle:"none",margin:0,padding:0},children:d.items.map(f=>r.jsxs("li",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderTop:"1px solid var(--border-default)",fontSize:13},children:[r.jsx("span",{children:f.label}),r.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:f.keys})]},`${d.name}:${f.keys}`))})]},d.name))]})}):null}function VT(t){const a=le.actions,s=[{action:"open",label:a.open},{action:"copy-path",label:a.copyPath},{action:"reveal",label:a.revealInEditor},{action:"run-benchmark",label:a.runBenchmark}];if(t.origin==="source")return[...s,{action:"edit",label:a.edit},{action:"duplicate",label:a.duplicate},{action:"delete",label:a.delete}];const i=[...s];return t.updateAvailable&&i.push({action:"update",label:a.update}),i.push({action:"uninstall",label:a.uninstall}),i.push({action:"delete",label:a.delete,disabled:!0,title:a.deletePluginTooltip}),i}function FT({state:t,onClose:a,onAction:s,itemsOverride:i}){const c=m.useRef(null),u=m.useRef(null),[d,f]=m.useState(0),x=m.useMemo(()=>t.skill?i??VT(t.skill):[],[t.skill,i]),h=m.useMemo(()=>{if(typeof window>"u")return{left:t.x,top:t.y};const y=8,b=220,S=44+x.length*28;let w=t.x,E=t.y;return w+b+y>window.innerWidth&&(w=Math.max(y,t.x-b)),E+S+y>window.innerHeight&&(E=Math.max(y,t.y-S)),{left:w,top:E}},[t.x,t.y,x.length]);m.useEffect(()=>{if(t.open)return u.current=document.activeElement??null,f(0),requestAnimationFrame(()=>{var y;(y=c.current)==null||y.focus()}),()=>{var y,b;(b=(y=u.current)==null?void 0:y.focus)==null||b.call(y),u.current=null}},[t.open]);const v=m.useCallback(()=>{if(!t.skill)return;const y=x[d];!y||y.disabled||(s(y.action,t.skill),a())},[x,d,t.skill,s,a]);return m.useEffect(()=>{if(!t.open)return;function y(S){if(S.key==="Escape"){S.preventDefault(),a();return}if(S.key==="ArrowDown"){S.preventDefault(),f(w=>Math.min(w+1,Math.max(x.length-1,0)));return}if(S.key==="ArrowUp"){S.preventDefault(),f(w=>Math.max(w-1,0));return}if(S.key==="Enter"||S.key===" "){S.preventDefault(),v();return}}function b(S){c.current&&S.target instanceof Node&&(c.current.contains(S.target)||a())}return window.addEventListener("keydown",y,!0),window.addEventListener("mousedown",b,!0),()=>{window.removeEventListener("keydown",y,!0),window.removeEventListener("mousedown",b,!0)}},[t.open,a,x.length,v]),!t.open||!t.skill?null:r.jsx("div",{ref:c,role:"menu",tabIndex:-1,"data-testid":"context-menu",style:{position:"fixed",left:h.left,top:h.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:x.map((y,b)=>r.jsx("div",{role:"menuitem","aria-disabled":y.disabled||void 0,title:y.title||void 0,"data-action":y.action,"data-selected":b===d||void 0,onMouseEnter:()=>f(b),onClick:()=>{y.disabled||(s(y.action,t.skill),a())},style:{padding:"5px 10px",borderRadius:4,cursor:y.disabled?"default":"pointer",opacity:y.disabled?.5:1,background:b===d?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent"},children:y.label},y.action))})}const xv=t=>`${t.plugin}/${t.skill}`;function gv(t){const a=(t==null?void 0:t.delayMs)??1e4,s=t==null?void 0:t.onCommit,i=t==null?void 0:t.onFailure,c=(t==null?void 0:t.apiCall)??ke.deleteSkill.bind(ke),u=m.useRef(s),d=m.useRef(i),f=m.useRef(c);u.current=s,d.current=i,f.current=c;const x=m.useRef(new Map),[,h]=m.useState(0),v=m.useCallback(()=>h(k=>k+1),[]),y=m.useCallback(async k=>{var N,T;try{await f.current(k.skill.plugin,k.skill.skill),(N=u.current)==null||N.call(u,k.skill)}catch(A){(T=d.current)==null||T.call(d,k.skill,A)}finally{x.current.delete(xv(k.skill)),v()}},[v]),b=m.useCallback(k=>{const N=xv(k),T=x.current.get(N);T!=null&&T.timeoutId&&clearTimeout(T.timeoutId);const A={skill:k,timeoutId:null};A.timeoutId=setTimeout(()=>{A.timeoutId=null,y(A)},a),x.current.set(N,A),v()},[a,y,v]),S=m.useCallback(k=>{const N=x.current.get(k);N&&(N.timeoutId&&clearTimeout(N.timeoutId),x.current.delete(k),v())},[v]),w=m.useCallback(async()=>{const k=Array.from(x.current.values());for(const N of k)N.timeoutId&&(clearTimeout(N.timeoutId),N.timeoutId=null);await Promise.all(k.map(N=>y(N)))},[y]),E=m.useCallback(k=>x.current.has(k),[]);return m.useEffect(()=>{const k=()=>{w()};return window.addEventListener("beforeunload",k),()=>{window.removeEventListener("beforeunload",k)}},[w]),m.useEffect(()=>{const k=x.current;return()=>{for(const N of k.values())N.timeoutId&&(clearTimeout(N.timeoutId),N.timeoutId=null,y(N));k.clear()}},[]),{enqueueDelete:b,cancelDelete:S,flushPending:w,isPending:E}}const GT={"anthropic-api":{name:le.setupProviders.anthropic.name,description:le.setupProviders.anthropic.description,envVars:le.setupProviders.anthropic.envVars,keyUrl:le.setupProviders.anthropic.keyUrl,learnMoreUrl:le.setupProviders.anthropic.learnMoreUrl},openai:{name:le.setupProviders.openai.name,description:le.setupProviders.openai.description,envVars:le.setupProviders.openai.envVars,keyUrl:le.setupProviders.openai.keyUrl,learnMoreUrl:le.setupProviders.openai.learnMoreUrl},openrouter:{name:le.setupProviders.openrouter.name,description:le.setupProviders.openrouter.description,envVars:le.setupProviders.openrouter.envVars,keyUrl:le.setupProviders.openrouter.keyUrl,learnMoreUrl:le.setupProviders.openrouter.learnMoreUrl},gemini:{name:le.setupProviders.gemini.name,description:le.setupProviders.gemini.description,envVars:le.setupProviders.gemini.envVars,keyUrl:le.setupProviders.gemini.keyUrl,learnMoreUrl:le.setupProviders.gemini.learnMoreUrl},ollama:{name:le.setupProviders.ollama.name,description:le.setupProviders.ollama.description,envVars:le.setupProviders.ollama.envVars,install:[le.setupProviders.ollama.installCmd],start:[le.setupProviders.ollama.startCmd],pullExample:le.setupProviders.ollama.pullExample,learnMoreUrl:le.setupProviders.ollama.learnMoreUrl},"lm-studio":{name:le.setupProviders.lmStudio.name,description:le.setupProviders.lmStudio.description,envVars:le.setupProviders.lmStudio.envVars,install:[le.setupProviders.lmStudio.installCmd],start:[le.setupProviders.lmStudio.startCmd],pullExample:le.setupProviders.lmStudio.pullExample,learnMoreUrl:le.setupProviders.lmStudio.learnMoreUrl},"claude-code":{name:le.setupProviders.claudeCode.name,description:le.setupProviders.claudeCode.description,envVars:[],notes:[le.setupProviders.claudeCode.loginHint,le.claudeCodeLabel.compactLabel],learnMoreUrl:le.setupProviders.claudeCode.learnMoreUrl}};function WT(t){return t?GT[t]??null:null}function qT({open:t,providerKey:a,onClose:s}){const i=m.useRef(null);if(m.useEffect(()=>{if(!t)return;const d=f=>{f.key==="Escape"&&(f.preventDefault(),s())};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[t,s]),m.useEffect(()=>{if(!t)return;const d=i.current;if(!d)return;const f=d.querySelector("button, a[href], [tabindex]:not([tabindex='-1']), input, textarea, select");f==null||f.focus()},[t]),!t||typeof document>"u")return null;const c=WT(a),u=(c==null?void 0:c.name)??le.setupDrawer.fallbackTitle;return nc.createPortal(r.jsxs(r.Fragment,{children:[r.jsx("div",{"data-testid":"setup-drawer-backdrop","aria-hidden":"true",onClick:s,style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",zIndex:99,animation:"vskillDrawerBackdropIn 120ms ease"}}),r.jsxs("div",{"data-testid":"setup-drawer",ref:i,role:"dialog","aria-modal":"true","aria-label":le.setupDrawer.title(u),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:[r.jsx(YT,{title:u,onClose:s}),r.jsx("div",{"data-testid":"setup-drawer-body",style:{flex:1,overflowY:"auto",padding:"16px 20px"},children:c?r.jsx(KT,{content:c}):r.jsx(XT,{})}),r.jsx("style",{children:`@keyframes vskillDrawerIn {
|
|
111
|
+
`,rows:8,className:"w-full px-3 py-2 rounded-lg text-[13px] font-mono resize-y",style:{...xa,minHeight:"150px"}}):s.body.trim()?r.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:cc(s.body)}}):r.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:r.jsx("span",{style:{color:"var(--text-tertiary)"},children:"Start writing to see preview"})})]}),r.jsx(qN,{skillName:s.name||"{skill}",hasEvals:!1,isDraft:s.draftSaved}),s.error&&r.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}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.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"}),r.jsx("button",{onClick:a,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 dv(){return r.jsx("div",{className:"w-16 h-16 rounded-2xl flex items-center justify-center",style:{background:"var(--surface-2)"},children:r.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:[r.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"}),r.jsx("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),r.jsx("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"})]})})}function Fs({variant:t,message:a,onRetry:s}){const{setMode:i,setSearch:c}=cr(),[u,d]=m.useState(!1);return t==="no-selection"?r.jsxs("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in",children:[r.jsx("div",{className:"mb-5",children:u?r.jsx(dv,{}):r.jsx("img",{src:"/images/empty-studio.webp",width:128,height:128,alt:"",onError:()=>d(!0),style:{objectFit:"contain"}})}),r.jsx("p",{className:"text-[14px] font-medium mb-1",style:{color:"var(--text-secondary)"},children:"Select a skill to view details"}),r.jsx("p",{className:"text-[12px]",style:{color:"var(--text-tertiary)"},children:"Choose a skill from the list to edit, test, and evaluate"})]}):t==="no-skills"?r.jsxs("div",{className:"text-center py-12 px-4 animate-fade-in-scale",children:[r.jsx("div",{className:"w-14 h-14 rounded-2xl flex items-center justify-center mx-auto mb-4",style:{background:"var(--surface-2)"},children:r.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:r.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"})})}),r.jsx("p",{className:"text-[14px] font-medium",style:{color:"var(--text-secondary)"},children:"No skills found"}),r.jsxs("p",{className:"text-[12px] mt-1 mb-4",style:{color:"var(--text-tertiary)"},children:["Check your ",r.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"]}),r.jsxs("button",{onClick:()=>i("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:f=>{f.currentTarget.style.opacity="0.9"},onMouseLeave:f=>{f.currentTarget.style.opacity="1"},children:[r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Create Your First Skill"]})]}):t==="no-project-skills"?r.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:[r.jsx("div",{className:"mb-5",children:u?r.jsx(dv,{}):r.jsx("img",{src:"/images/empty-studio.webp",width:128,height:128,alt:"",onError:()=>d(!0),style:{objectFit:"contain"}})}),r.jsx("p",{className:"text-[15px] font-medium mb-1",style:{color:"var(--text-primary)"},children:"No skills installed for this project yet."}),r.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."}),r.jsxs("div",{className:"flex gap-3",children:[r.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:[r.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:[r.jsx("circle",{cx:"9",cy:"21",r:"1"}),r.jsx("circle",{cx:"20",cy:"21",r:"1"}),r.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"]}),r.jsxs("button",{type:"button","data-testid":"empty-state-create-skill",onClick:()=>i("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:[r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Create new skill"]})]})]}):t==="error"?r.jsx("div",{className:"flex flex-col items-center justify-center h-full px-8 animate-fade-in",children:r.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:[r.jsx("p",{className:"text-[13px] mb-3",style:{color:"var(--red)"},children:a||"Failed to load skill data"}),s&&r.jsx("button",{onClick:s,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"})]})}):r.jsxs("div",{className:"px-4 py-8 text-center animate-fade-in",children:[r.jsx("p",{className:"text-[13px] mb-2",style:{color:"var(--text-tertiary)"},children:"No skills match your search"}),r.jsx("button",{onClick:()=>c(""),className:"text-[12px] font-medium",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer",textDecoration:"underline"},children:"Clear search"})]})}function KN(t,a){const[s,i]=t.split(".").map(Number),[c,u]=a.split(".").map(Number);return c>s?"major":u>i?"minor":"patch"}const XN={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 db(){const[t,a]=m.useState([]),[s,i]=m.useState(!0),[c,u]=m.useState(new Set),[d,f]=m.useState(new Map),[x,h]=m.useState(!1),[v,y]=m.useState(new Set),[b,S]=m.useState(new Map),[w,E]=m.useState(null),[k,N]=m.useState(null),[T,A]=m.useState(!1),B=m.useCallback(async()=>{i(!0);try{const H=await ke.getSkillUpdates();a(H.filter(W=>W.updateAvailable))}catch{a([])}finally{i(!1)}},[]);m.useEffect(()=>{B()},[B]);const z=m.useMemo(()=>t.filter(H=>!H.pinned),[t]),P=m.useCallback(H=>{u(W=>{const q=new Set(W);return q.has(H)?q.delete(H):q.add(H),q})},[]),C=m.useCallback(()=>{c.size===z.length?u(new Set):u(new Set(z.map(H=>H.name)))},[c,z]),O=m.useCallback(()=>{const H=[...c];if(!H.length)return;h(!0),f(new Map(H.map(q=>[q,{skill:q,status:"pending"}])));const W=ke.startBatchUpdate(H);W.addEventListener("progress",q=>{try{const ee=JSON.parse(q.data);f($=>new Map($).set(ee.skill,ee))}catch{}}),W.addEventListener("done",q=>{W.close(),h(!1);try{const ee=JSON.parse(q.data);E(`Updated ${ee.updated??0} skills, ${ee.failed??0} failed`),setTimeout(()=>E(null),5e3)}catch{}B()}),W.addEventListener("error",()=>{W.close(),h(!1),E("Batch update failed"),setTimeout(()=>E(null),5e3)})},[c,B]),L=m.useCallback(async H=>{const W=H.name.split("/"),q=W.length>=3?W[W.length-2]:W[0],ee=W[W.length-1];y($=>new Set($).add(H.name)),S($=>{const D=new Map($);return D.delete(H.name),D});try{const $=await ke.postSkillUpdate(q,ee);if($.ok)B();else{const D=`Update failed (HTTP ${$.status}): ${$.body}`;S(I=>new Map(I).set(H.name,D)),E(`Couldn't update ${ee} — HTTP ${$.status}`),setTimeout(()=>E(null),5e3)}}catch($){const D=$ instanceof Error?$.message:"Network error";S(I=>new Map(I).set(H.name,D)),E(`Couldn't update ${ee} — ${D}`),setTimeout(()=>E(null),5e3)}finally{y($=>{const D=new Set($);return D.delete(H.name),D})}},[B]),_=m.useCallback(async H=>{if(!H.latest)return;const W=H.name.split("/"),q=W.length>=3?W[W.length-2]:W[0],ee=W[W.length-1];A(!0);try{const $=await ke.getVersionDiff(q,ee,H.installed,H.latest);N({skill:H,diff:$})}catch{N(null)}finally{A(!1)}},[]);return s?r.jsxs("div",{"data-testid":"updates-panel",className:"p-6",children:[r.jsx("div",{className:"skeleton h-6 w-48 mb-4"}),r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"skeleton h-16 rounded-lg"}),r.jsx("div",{className:"skeleton h-16 rounded-lg"})]})]}):t.length===0?r.jsxs("div",{"data-testid":"updates-panel",className:"flex flex-col items-center justify-center h-full py-16",children:[r.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:[r.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),r.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),r.jsx("div",{className:"text-[15px] font-semibold mb-2",style:{color:"var(--text-primary)"},children:"All skills are up to date"}),r.jsx("div",{className:"text-[12px] mb-4",style:{color:"var(--text-tertiary)"},children:"No updates available for installed skills."}),r.jsx("button",{onClick:B,className:"btn btn-secondary text-[12px]",children:"Refresh"})]}):r.jsxs("div",{"data-testid":"updates-panel",className:"p-6",children:[w&&r.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:w}),r.jsxs("div",{className:"flex items-center justify-between mb-5",children:[r.jsxs("div",{className:"text-[16px] font-semibold",style:{color:"var(--text-primary)"},children:["Available Updates (",z.length,")"]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("button",{onClick:B,className:"btn btn-ghost text-[12px]",disabled:x,children:"Refresh"}),r.jsx("button",{onClick:O,disabled:c.size===0||x,className:"btn btn-primary text-[12px]",children:x?"Updating...":`Update Selected (${c.size})`})]})]}),r.jsx("div",{className:"flex items-center gap-2 mb-3",children:r.jsxs("button",{onClick:C,className:"flex items-center gap-2 text-[12px] font-medium",style:{color:"var(--text-secondary)",background:"transparent",border:"none",cursor:"pointer"},children:[r.jsx("span",{className:"w-4 h-4 rounded border flex items-center justify-center",style:{borderColor:c.size===z.length&&z.length>0?"var(--accent)":"var(--border-default)",background:c.size===z.length&&z.length>0?"var(--accent)":"transparent"},children:c.size===z.length&&z.length>0&&r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})}),"Select All"]})}),r.jsx("div",{className:"space-y-2",children:t.map(H=>{const W=H.name.split("/").pop()||H.name,q=H.latest?KN(H.installed,H.latest):"patch",ee=XN[q],$=!!H.pinned,D=v.has(H.name),I=d.get(H.name),F=c.has(H.name);return r.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:$?.7:1},children:r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("button",{onClick:()=>!$&&P(H.name),disabled:$,className:"flex-shrink-0",style:{background:"transparent",border:"none",cursor:$?"not-allowed":"pointer"},children:r.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:$?.4:1},children:F&&r.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-paper)",strokeWidth:"3",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:W}),$&&r.jsx("span",{className:"text-[10px]",title:"Pinned — unpin from CLI to update",children:"📌"}),r.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:ee.bg,color:ee.text},children:q})]}),r.jsxs("div",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[H.installed," → ",H.latest||"?",$&&` (pinned at ${H.pinnedVersion||H.installed})`]})]}),I&&r.jsxs("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:I.status==="done"?"var(--green-muted)":I.status==="error"?"var(--red-muted)":"var(--yellow-muted)",color:I.status==="done"?"var(--green)":I.status==="error"?"var(--red)":"var(--yellow)"},children:[I.status,I.error&&`: ${I.error}`]}),r.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[r.jsx("button",{onClick:()=>_(H),className:"btn btn-ghost text-[11px]",disabled:T,children:"View Changes"}),r.jsx("button",{onClick:()=>L(H),disabled:$||D||x,title:$?"Pinned — unpin from CLI to update":"",className:`btn ${$?"btn-ghost":"btn-primary"} text-[11px]`,children:D?r.jsxs("span",{className:"flex items-center gap-1",children:[r.jsx("span",{className:"spinner spinner-sm"})," Updating"]}):(I==null?void 0:I.status)==="done"?r.jsx("span",{style:{color:"var(--green)"},children:"✓"}):"Update"})]})]})},H.name)})}),k&&r.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{background:"rgba(0,0,0,0.5)"},onClick:()=>N(null),children:r.jsxs("div",{style:{width:"80%",maxWidth:900},onClick:H=>H.stopPropagation(),children:[r.jsx("div",{className:"mb-2 flex justify-end",children:r.jsx("button",{onClick:()=>N(null),className:"btn btn-ghost text-[12px]",children:"Close"})}),r.jsx(Yf,{contentDiff:k.diff.contentDiff,fromLabel:k.diff.from,toLabel:k.diff.to,diffSummary:k.diff.diffSummary,renderContext:"inline"})]})})]})}const QN=Object.freeze(Object.defineProperty({__proto__:null,UpdatesPanel:db},Symbol.toStringTag,{value:"Module"}));function ZN(t){return t==null?"var(--text-tertiary)":t>=.7?"var(--green)":t>=.4?"var(--yellow)":"var(--red)"}function JN(t){return t==null?"var(--surface-3)":t>=.7?"var(--green-muted)":t>=.4?"var(--yellow-muted)":"var(--red-muted)"}function eT(t){if(!t||typeof t!="string")return null;const a=t.trim();if(!a)return null;if(!a.includes("://")){const[s]=a.split("/");return s&&/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/.test(s)?s:null}try{const s=new URL(a),i=s.hostname.toLowerCase();if(i!=="github.com"&&i!=="www.github.com"&&i!=="raw.githubusercontent.com")return null;const u=s.pathname.split("/").filter(Boolean)[0];return!u||!/^[A-Za-z0-9][A-Za-z0-9-]{0,38}$/.test(u)?null:u}catch{return null}}function fb(t){const{author:a,repoUrl:s}=t,i=eT(s??null),c=a&&a.trim()!==""?a:i??"—",[u,d]=m.useState(!1),f=m.useCallback(async()=>{var x;try{await((x=navigator.clipboard)==null?void 0:x.writeText(c)),d(!0),setTimeout(()=>d(!1),1500)}catch{}},[c]);return i?r.jsx("a",{"data-testid":t["data-testid"]??"author-link",href:`https://github.com/${i}`,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:c}):!a||a.trim()===""?r.jsx("span",{"data-testid":t["data-testid"]??"author-link-empty",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:"—"}):r.jsxs("button",{type:"button","data-testid":t["data-testid"]??"author-copy",title:`Copy "${c}"`,onClick:f,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:[c,r.jsx("span",{"aria-hidden":"true",style:{fontSize:10,opacity:.7},children:u?"✓":"⧉"})]})}function tT(t){let a=t.split("#")[0].split("?")[0].replace(/\/+$/,"");return a=a.replace(/\/(?:tree|blob)\/[^/]+(?:\/.*)?$/,""),a}function nT(t,a){const s=tT(t),i=(a??"").replace(/^\/+/,"").replace(/\/+$/,"");return i?`${s}/blob/HEAD/${i}`:`${s}/blob/HEAD/`}function fv(t){if(!t)return"source";const a=t.replace(/\/+$/,""),s=a.lastIndexOf("/");return s===-1?a:a.slice(s+1)}function pb(t){const{repoUrl:a,skillPath:s,absolutePath:i}=t,[c,u]=m.useState(!1),d=typeof a=="string"&&a.trim()!==""&&/^https?:\/\//.test(a.trim()),f=s?fv(s):i?fv(i):"source",x=m.useCallback(async()=>{var y;const v=i??s??"";if(v)try{await((y=navigator.clipboard)==null?void 0:y.writeText(v)),u(!0),setTimeout(()=>u(!1),1500)}catch{}},[i,s]);if(d){const v=nT(a,s);return r.jsxs("a",{"data-testid":t["data-testid"]??"source-file-link",href:v,target:"_blank",rel:"noopener noreferrer",title:v,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:[r.jsx("span",{children:f}),r.jsx("span",{"aria-hidden":"true",children:"↗"})]})}if(!i&&!s)return r.jsx("span",{"data-testid":t["data-testid"]??"source-file-empty",style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)"},children:"—"});const h=i??s??"";return r.jsxs("button",{type:"button","data-testid":t["data-testid"]??"source-file-copy",title:`Copy ${h}`,onClick:x,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:[r.jsx("span",{children:f}),r.jsx("span",{"aria-hidden":"true",style:{fontSize:10,opacity:.7},children:c?"✓":"⧉"})]})}function pv(t,a="info"){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function mb(t){return t.skill?aT({skill:t.skill}):sT({state:t.state,isReadOnly:t.isReadOnly,onDelete:t.onDelete})}function rT(t,a=48){if(t.length<=a)return t;const s=t.slice(0,12),i=t.slice(t.length-(a-12-1));return`${s}…${i}`}function aT({skill:t}){const[a,s]=m.useState(!1),i=(t.sourcePath??t.dir)||"—",c=m.useCallback(async()=>{var f;try{await((f=navigator.clipboard)==null?void 0:f.writeText(i)),s(!0),setTimeout(()=>s(!1),1500),pv(le.toasts.pathCopied,"info")}catch{pv(le.toasts.permissionDenied,"error")}},[i]),u=t.source==="project"?"Project":t.source==="personal"?"Personal":t.source==="plugin"?"Plugins":t.origin==="installed"?"Personal":"Skills",d=t.source==="project"?"var(--status-installed)":t.source==="plugin"?"var(--color-accent-ink)":"var(--status-own)";return r.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",marginBottom:4},children:[r.jsx("span",{"data-testid":"detail-header-plugin",children:t.plugin}),r.jsx("span",{"aria-hidden":"true",style:{color:"var(--text-secondary)"},children:"›"}),r.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,color:"var(--text-secondary)",fontSize:11,letterSpacing:.3,textTransform:"uppercase"},children:[r.jsx("span",{"data-origin-dot":t.origin,"aria-label":`Origin: ${u}`,style:{display:"inline-block",width:7,height:7,borderRadius:999,background:d}}),u]})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:8},children:[r.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:t.skill}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx("span",{"data-testid":"detail-header-version",children:r.jsx(ci,{version:t.resolvedVersion??t.version??null,source:t.versionSource,pluginName:t.pluginName??null})}),t.pluginName&&t.pluginVersion&&r.jsxs("span",{"data-testid":"detail-header-plugin-chip",title:`This skill ships in plugin ${t.pluginName} v${t.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:[r.jsx("span",{children:"from"}),r.jsx("span",{style:{color:"var(--text-secondary)"},children:t.pluginName}),r.jsx("span",{"aria-hidden":"true",children:"@"}),r.jsx("span",{style:{fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums",color:"var(--text-secondary)"},children:t.pluginVersion})]}),t.origin==="source"&&r.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:t}}))},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:f=>{f.currentTarget.style.color="var(--red)"},onMouseLeave:f=>{f.currentTarget.style.color="var(--text-tertiary)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),r.jsx("path",{d:"M10 11v6"}),r.jsx("path",{d:"M14 11v6"}),r.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]}),r.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:[r.jsx(fb,{author:t.author??null,repoUrl:t.repoUrl??t.homepage??null}),r.jsx(pb,{repoUrl:t.repoUrl??null,skillPath:t.skillPath??null,absolutePath:t.dir})]}),r.jsx(lT,{skill:t}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx("button",{type:"button","data-testid":"detail-header-path-chip",title:i,"aria-label":`Copy path ${i} to clipboard`,onClick:c,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:rT(i)}),r.jsxs("button",{"data-testid":"detail-header-copy-path",type:"button",onClick:c,"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:[r.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),r.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),a?"Copied":"Copy"]})]})]})}function lT({skill:t}){const a=t.installMethod,s=t.symlinkTarget;if(!a)return null;let i="";switch(a){case"symlinked":i=s?`Symlinked from ${s}`:"Symlinked (target unresolved)";break;case"copied":i="Copied (independent)";break;case"authored":i="Authored";break;default:return null}return r.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:[r.jsx("span",{style:{fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",fontSize:10,color:"var(--text-tertiary)"},children:"Install method"}),r.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:i})]})}function sT({state:t,isReadOnly:a,onDelete:s}){const{plugin:i,skill:c,evals:u,latestBenchmark:d,isDirty:f,caseRunStates:x,regressions:h,iterationCount:v}=t,y=Array.from(x.values()).some(N=>N.status==="running"||N.status==="queued"),b=d==null?void 0:d.overall_pass_rate,S=(u==null?void 0:u.evals.reduce((N,T)=>N+T.assertions.length,0))??0,w=(u==null?void 0:u.evals.length)??0,E=ZN(b),k=JN(b);return r.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:[r.jsxs("div",{className:"flex items-center gap-2 text-[13px]",children:[r.jsx("span",{style:{color:"var(--text-tertiary)"},children:i}),r.jsx(iT,{}),r.jsx("span",{className:"font-medium",style:{color:"var(--text-primary)"},children:c}),a&&r.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:[r.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"installed"]}),f&&r.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"}),y&&r.jsxs("span",{className:"ml-2 flex items-center gap-1.5 text-[11px]",style:{color:"var(--accent)"},children:[r.jsx("span",{className:"spinner",style:{width:12,height:12,borderWidth:1.5}}),"Running..."]})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[!a&&s&&r.jsx("button",{disabled:y,onClick:()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:{plugin:i,skill:c,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:y?"not-allowed":"pointer",color:"var(--text-tertiary)",padding:4,opacity:y?.4:1,borderRadius:4},onMouseEnter:N=>{y||(N.currentTarget.style.color="var(--red)")},onMouseLeave:N=>{N.currentTarget.style.color="var(--text-tertiary)"},children:r.jsx(oT,{})}),h.length>0&&r.jsxs("span",{className:"pill",style:{background:"var(--red-muted)",color:"var(--red)"},children:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[r.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"}),r.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),r.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),h.length," regression",h.length>1?"s":""]}),v>0&&r.jsxs("span",{className:"pill",style:{background:"var(--purple-muted)",color:"var(--purple)"},children:["Iter ",v]}),r.jsx("span",{className:"pill",style:{background:k,color:E},children:b!=null?`${Math.round(b*100)}%`:"--"}),r.jsxs("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:[w," case",w!==1?"s":""," / ",S," assert",S!==1?"s":""]})]})]})}function iT(){return r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})}function oT(){return r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.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"}),r.jsx("line",{x1:"10",y1:"11",x2:"10",y2:"17"}),r.jsx("line",{x1:"14",y1:"11",x2:"14",y2:"17"})]})}function ga(t){const{title:a,label:s,value:i,subtitle:c,description:u,linkLabel:d,children:f,onClick:x}=t,h=a??s??"",v=typeof x=="function",y=b=>{v&&(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),x==null||x())};return r.jsxs("div",{className:v?"metric-card metric-card-link":"metric-card","data-testid":t["data-testid"],role:v?"button":void 0,tabIndex:v?0:void 0,onClick:v?()=>x==null?void 0:x():void 0,onKeyDown:v?y: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:v?"pointer":void 0,wordBreak:"break-word",overflowWrap:"anywhere"},children:[h?r.jsx("div",{"data-testid":t["data-testid"]?`${t["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:h}):null,r.jsx("div",{"data-testid":t["data-testid"]?`${t["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(i)}),c?r.jsx("div",{style:{fontFamily:"var(--font-geist-mono, var(--font-mono))",fontSize:"0.625rem",color:"var(--card-text-muted, var(--text-secondary))"},children:c}):null,u?r.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:u}):null,f?r.jsx("div",{style:{flex:1,marginTop:"0.25rem"},children:f}):null,d?r.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:d}):null]})}const cT="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 uT(t){const{onNavigate:a}=t,[s,i]=m.useState(t.open??!1),c=m.useCallback(()=>i(!1),[]);m.useEffect(()=>{if(!s)return;const d=f=>{f.key==="Escape"&&c()};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[s,c]);const u=m.useCallback(d=>{a==null||a(d),i(!1)},[a]);return r.jsxs("span",{"data-testid":t["data-testid"]??"benchmark-info",style:{position:"relative",display:"inline-flex",alignItems:"center"},children:[r.jsx("button",{type:"button","data-testid":"benchmark-info-trigger","aria-label":"About benchmarks","aria-expanded":!!s,onClick:()=>i(d=>!d),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:"ℹ"}),s&&r.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:[r.jsx("p",{style:{margin:"0 0 8px",lineHeight:1.45},children:cT}),r.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[r.jsx("button",{type:"button","data-testid":"benchmark-info-link-tests",onClick:()=>u("tests"),style:Jd,children:"Tests →"}),r.jsx("button",{type:"button","data-testid":"benchmark-info-link-run",onClick:()=>u("run"),style:Jd,children:"Run →"}),r.jsx("button",{type:"button","data-testid":"benchmark-info-close",onClick:c,style:{...Jd,marginLeft:"auto",color:"var(--text-secondary)"},children:"Close"})]})]})]})}const Jd={background:"transparent",border:"none",padding:0,fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-accent, var(--text-primary))",cursor:"pointer",textDecoration:"underline"};function dT(t){return`gh repo create ${t.trim()||"<repo-name>"} --public --source=. --remote=origin --push`}const fT="Add a GitHub remote: `gh repo create --public --source=.` (replace existing origin if needed).";function pT({value:t}){const[a,s]=m.useState(!1),i=m.useCallback(async()=>{try{await navigator.clipboard.writeText(t),s(!0),setTimeout(()=>s(!1),1500)}catch{}},[t]);return r.jsx("button",{type:"button","data-testid":"publish-status-copy","aria-label":"Copy GitHub setup command",onClick:i,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:a?"Copied":"Copy"})}function mv({tone:t,label:a}){const s=t==="ok"?"color-mix(in srgb, var(--color-ok, #22c55e) 18%, transparent)":"color-mix(in srgb, var(--color-own, #f59e0b) 18%, transparent)",i=t==="ok"?"var(--color-ok, #22c55e)":"var(--color-own, #f59e0b)";return r.jsx("span",{style:{display:"inline-flex",alignItems:"center",padding:"2px 8px",borderRadius:999,fontSize:11,fontWeight:500,color:i,background:s},children:a})}function mT(t={}){const{status:a,loading:s}=Oy();if(s||!a)return null;if(a.status==="github")return r.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:[r.jsx(mv,{tone:"ok",label:"Publish-ready"}),r.jsxs("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:["GitHub origin: ",a.githubOrigin]}),r.jsx("div",{style:{marginLeft:"auto"},children:r.jsx(qy,{remoteUrl:a.githubOrigin??"",provider:t.provider,model:t.model})})]});const i=a.status==="no-git"?dT(t.projectBasename??""):fT;return r.jsxs("div",{"data-testid":"publish-status-row","data-status":a.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[r.jsx(mv,{tone:"warn",label:a.status==="no-git"?"No GitHub repo yet":"Origin is not GitHub"}),r.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Connect GitHub to publish your skills."})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[r.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:i}),r.jsx(pT,{value:i})]})]})}function hT({plugin:t,skill:a}){const[s,i]=m.useState([]),[c,u]=m.useState([]),[d,f]=m.useState(!0),[x,h]=m.useState(null);m.useEffect(()=>{ke.getDependencies(t,a).then(y=>{i(y.mcpDependencies),u(y.skillDependencies)}).catch(()=>{}).finally(()=>f(!1))},[t,a]);async function v(y,b){try{await navigator.clipboard.writeText(b),h(y),setTimeout(()=>h(null),2e3)}catch{}}return d?null:s.length===0&&c.length===0?r.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"}):r.jsxs("div",{className:"mb-5 rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)",background:"var(--surface-1)"},children:[r.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:[r.jsx("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center",style:{background:"rgba(234,179,8,0.15)"},children:r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#eab308",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.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"}),r.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"})]})}),r.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--text-primary)"},children:"Dependencies"}),r.jsx("span",{className:"pill text-[10px]",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:s.length+c.length})]}),r.jsxs("div",{className:"px-5 py-4",children:[s.length>0&&r.jsxs("div",{className:"space-y-3 mb-4",children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"MCP Servers"}),s.map(y=>r.jsxs("div",{className:"p-3 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[13px] font-medium",style:{color:"var(--text-primary)"},children:y.server}),r.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:y.transport})]}),r.jsx("button",{onClick:()=>v(y.server,y.configSnippet),className:"btn btn-ghost text-[11px] py-1 px-2",style:{color:x===y.server?"var(--green)":"var(--accent)"},children:x===y.server?r.jsxs(r.Fragment,{children:[r.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})," Copied!"]}):r.jsxs(r.Fragment,{children:[r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),r.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"]})})]}),r.jsx("div",{className:"text-[11px] mb-2 font-mono",style:{color:"var(--text-tertiary)"},children:y.url}),r.jsx("div",{className:"flex flex-wrap gap-1.5",children:y.matchedTools.map(b=>r.jsx("span",{className:"px-2 py-0.5 rounded text-[10px] font-mono",style:{background:"var(--surface-3)",color:"var(--text-secondary)"},children:b},b))})]},y.server))]}),c.length>0&&r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Skill Dependencies"}),r.jsx("div",{className:"space-y-1.5",children:c.map(y=>r.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:[r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.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"})}),r.jsx("span",{className:"text-[12px] font-medium",style:{color:"var(--text-primary)"},children:y.name}),r.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded",style:{background:"var(--surface-3)",color:"var(--text-tertiary)"},children:y.source==="frontmatter"?"frontmatter":"referenced"})]},y.name))})]})]})]})}function xT({plugin:t,skill:a}){const[s,i]=m.useState([]),[c,u]=m.useState(!0),[d,f]=m.useState(null),[x,h]=m.useState(""),[v,y]=m.useState(!1),[b,S]=m.useState(null),[w,E]=m.useState(""),[k,N]=m.useState(""),[T,A]=m.useState(!1),[B,z]=m.useState(new Set),P=m.useCallback(async()=>{u(!0);try{const[_,H]=await Promise.all([ke.getCredentials(t,a).catch(()=>({credentials:[]})),ke.getParams(t,a).catch(()=>({params:[]}))]),W=new Map(H.params.map($=>[$.name,$])),q=new Set,ee=[];for(const $ of _.credentials){q.add($.name);const D=W.get($.name);ee.push({name:$.name,status:$.status==="ready"||$.status==="resolved"?"ready":"missing",source:$.source,maskedValue:D==null?void 0:D.maskedValue})}for(const $ of H.params)q.has($.name)||ee.push({name:$.name,status:$.status,maskedValue:$.maskedValue});i(ee)}finally{u(!1)}},[t,a]);m.useEffect(()=>{P()},[P]);const C=m.useCallback(async _=>{if(B.has(_)){z(H=>{const W=new Set(H);return W.delete(_),W}),i(H=>H.map(W=>W.name===_?{...W,revealedValue:void 0}:W));return}try{const W=(await ke.getParamsRevealed(t,a,_)).params.find(q=>q.name===_);W&&(i(q=>q.map(ee=>ee.name===_?{...ee,revealedValue:W.value}:ee)),z(q=>new Set(q).add(_)))}catch{}},[t,a,B]),O=async(_,H)=>{if(!(!_.trim()||!H.trim())){y(!0),S(null);try{await ke.setCredential(t,a,_,H),f(null),h(""),z(new Set),P()}catch(W){S(W.message)}finally{y(!1)}}},L=async()=>{if(!(!w.trim()||!k.trim())){y(!0),S(null);try{await ke.setCredential(t,a,w.trim().toUpperCase(),k),E(""),N(""),A(!1),P()}catch(_){S(_.message)}finally{y(!1)}}};return c?r.jsxs("div",{className:"mt-6",children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider mb-2",style:{color:"var(--text-tertiary)"},children:"Parameters & Secrets"}),r.jsx("div",{className:"skeleton h-20 rounded-xl"})]}):r.jsxs("div",{className:"mt-6",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Parameters & Secrets"}),r.jsx("button",{onClick:()=>A(!T),className:"text-[11px] transition-colors duration-150",style:{color:"var(--accent)",background:"none",border:"none",cursor:"pointer"},children:"+ Add Parameter"})]}),b&&r.jsx("div",{className:"mb-2 px-3 py-2 rounded-lg text-[11px]",style:{background:"var(--red-muted)",color:"var(--red)"},children:b}),s.length===0&&!T?r.jsx("div",{className:"text-[12px] text-center py-6 rounded-xl",style:{color:"var(--text-tertiary)",background:"var(--surface-2)"},children:"No credentials configured for this skill"}):r.jsx("div",{className:"rounded-xl overflow-hidden",style:{border:"1px solid var(--border-subtle)"},children:s.map(_=>r.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:[r.jsx("span",{className:"text-[11px] font-mono font-medium truncate",style:{color:"var(--text-primary)",minWidth:80},children:_.name}),_.maskedValue&&r.jsx("span",{className:"text-[10px] font-mono truncate",style:{color:"var(--text-tertiary)",maxWidth:120},children:B.has(_.name)&&_.revealedValue!=null?_.revealedValue:_.maskedValue}),_.maskedValue&&r.jsx("button",{onClick:()=>C(_.name),className:"btn btn-ghost px-1",title:B.has(_.name)?"Hide value":"Reveal value",style:{color:"var(--text-tertiary)",lineHeight:1},children:B.has(_.name)?r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.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"}),r.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"}),r.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):r.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),r.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}),r.jsx("span",{className:"text-[10px] font-semibold px-2 py-0.5 rounded-full",style:{background:_.status==="ready"?"var(--green-muted)":"var(--orange-muted)",color:_.status==="ready"?"var(--green)":"var(--orange)"},children:_.status==="ready"?"ready":"missing"}),_.source&&r.jsx("span",{className:"text-[9px]",style:{color:"var(--text-tertiary)"},children:_.source}),d===_.name?r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("input",{value:x,onChange:H=>h(H.target.value),onKeyDown:H=>{H.key==="Enter"&&O(_.name,x)},className:"input-field text-[11px] font-mono",style:{width:160},placeholder:"Value...",autoFocus:!0}),r.jsx("button",{onClick:()=>O(_.name,x),disabled:v||!x.trim(),className:"btn btn-primary text-[10px] px-2 py-0.5",children:v?"...":"Save"}),r.jsx("button",{onClick:()=>{f(null),h("")},className:"btn btn-ghost text-[10px] px-1",children:r.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[r.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),r.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}):r.jsx("button",{onClick:()=>{f(_.name),h("")},className:"btn btn-ghost text-[10px] px-2 py-0.5",style:{color:"var(--accent)"},children:"Edit"})]},_.name))}),T&&r.jsxs("div",{className:"mt-2 p-3 rounded-lg",style:{background:"var(--surface-2)",border:"1px solid var(--border-subtle)"},children:[r.jsxs("div",{className:"flex gap-2 mb-2",children:[r.jsx("input",{value:w,onChange:_=>E(_.target.value),className:"input-field flex-1 text-[11px] font-mono",placeholder:"KEY_NAME",autoFocus:!0}),r.jsx("input",{value:k,onChange:_=>N(_.target.value),onKeyDown:_=>{_.key==="Enter"&&L()},className:"input-field flex-1 text-[11px] font-mono",placeholder:"Value",type:"password"})]}),r.jsxs("div",{className:"flex justify-end gap-1.5",children:[r.jsx("button",{onClick:()=>{A(!1),E(""),N("")},className:"btn btn-ghost text-[10px]",children:"Cancel"}),r.jsx("button",{onClick:L,disabled:v||!w.trim()||!k.trim(),className:"btn btn-primary text-[10px]",children:v?"Saving...":"Save"})]})]})]})}function hv({children:t}){return r.jsx("h3",{style:{fontFamily:"var(--font-sans)",fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:.6,color:"var(--text-tertiary)",margin:"0 0 8px"},children:t})}function gT({plugin:t,skill:a}){return r.jsxs("aside",{"data-testid":"skill-overview-rightrail",style:{display:"flex",flexDirection:"column",gap:16},children:[r.jsxs("section",{"data-testid":"overview-rightrail-setup",children:[r.jsx(hv,{children:"Setup"}),r.jsx(hT,{plugin:t,skill:a})]}),r.jsxs("section",{"data-testid":"overview-rightrail-credentials",children:[r.jsx(hv,{children:"Credentials"}),r.jsx(xT,{plugin:t,skill:a})]})]})}function vT(t){if(t==null||!Number.isFinite(t))return"—";if(t<1024)return`${t} B`;const a=t/1024;if(a<1024)return a>=10?`${Math.round(a)} KB`:`${a.toFixed(1).replace(/\.0$/,"")} KB`;const s=a/1024;return s>=10?`${Math.round(s)} MB`:`${s.toFixed(1).replace(/\.0$/,"")} MB`}function Us(t){if(!t)return"—";const a=new Date(t);if(Number.isNaN(a.getTime()))return t;const s=Date.now()-a.getTime(),i=Math.floor(s/1e3);if(i<60)return"just now";const c=Math.floor(i/60);if(c<60)return`${c} min ago`;const u=Math.floor(c/60);if(u<24)return`${u} hr ago`;const d=Math.floor(u/24);if(d<30)return`${d} day${d===1?"":"s"} ago`;const f=Math.floor(d/30);if(f<12)return`${f} month${f===1?"":"s"} ago`;const x=Math.floor(f/12);return`${x} year${x===1?"":"s"} ago`}function yT(t){switch(t.benchmarkStatus){case"pass":case"fail":case"stale":return t.benchmarkStatus==="pass"?"100%":t.benchmarkStatus==="fail"?"0%":"—";default:return"—"}}function bT(t){const a=t.installMethod;if(!a)return null;const s=a==="authored"?"Authored":a==="copied"?"Copied":"Symlinked";return r.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:s})}function jT(t,a){const s=t.evalCount??0;return!t.hasEvals||s<=0?null:r.jsxs("button",{type:"button","data-testid":"overview-tests-chip",onClick:a?()=>a("run"):void 0,title:`Open Run tab — ${s} test case${s===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:a?"pointer":"default"},children:[s," ",s===1?"test":"tests"]})}function ST(t){var y,b;const{skill:a,onNavigate:s,activationsCount:i=0,lastRunIso:c=null,repoUrl:u,skillPathInRepo:d}=t,f=u??(kT(a.homepage)?a.homepage??null:null),x=((y=a.mcpDeps)==null?void 0:y.length)??0,h=((b=a.deps)==null?void 0:b.length)??0,v=r.jsxs("div",{"data-testid":"skill-overview-main",style:{display:"flex",flexDirection:"column",gap:12},children:[r.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[r.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:a.skill}),r.jsx(ci,{version:a.resolvedVersion??a.version??null,source:a.versionSource,pluginName:a.pluginName??null}),bT(a),jT(a,s)]}),r.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:[r.jsx(fb,{author:a.author??null,repoUrl:f}),a.category?r.jsxs("span",{children:["· ",a.category]}):null,r.jsx(pb,{repoUrl:f,skillPath:d??null,absolutePath:a.dir}),a.lastModified?r.jsxs("span",{title:a.lastModified,children:["· Updated ",Us(a.lastModified)]}):null]})]}),r.jsx(mT,{}),r.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:[r.jsx(ga,{title:"Benchmark",value:yT(a),subtitle:a.lastBenchmark?Us(a.lastBenchmark):"Never run","data-testid":"metric-benchmark",onClick:s?()=>s("run"):void 0,children:r.jsx("div",{style:{marginTop:4,display:"inline-flex",alignItems:"center"},children:r.jsx(uT,{onNavigate:s})})}),r.jsx(ga,{title:"Tests",value:a.evalCount??0,subtitle:`${a.assertionCount??0} assertions`,"data-testid":"metric-tests",onClick:s?()=>s("tests"):void 0}),r.jsx(ga,{title:"Activations",value:i,subtitle:c?`Last: ${Us(c)}`:"Never","data-testid":"metric-activations",onClick:s?()=>s("activation"):void 0}),r.jsx(ga,{title:"Last run",value:Us(c??a.lastBenchmark??null),"data-testid":"metric-last-run",onClick:s?()=>s("history"):void 0}),r.jsx(ga,{title:"MCP deps",value:x,subtitle:x>0&&a.mcpDeps?a.mcpDeps.slice(0,3).join(", "):"None","data-testid":"metric-mcp-deps",onClick:s?()=>s("deps"):void 0}),r.jsx(ga,{title:"Skill deps",value:h,subtitle:h>0&&a.deps?a.deps.slice(0,3).join(", "):"None","data-testid":"metric-skill-deps",onClick:s?()=>s("deps"):void 0}),r.jsx(ga,{title:"Size",value:vT(a.sizeBytes),"data-testid":"metric-size"}),r.jsx(ga,{title:"Last modified",value:Us(a.lastModified),subtitle:a.lastModified??void 0,"data-testid":"metric-last-modified"})]})]});return r.jsxs("div",{"data-testid":"skill-overview",className:"skill-overview",style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) 280px",gap:16,padding:16,alignItems:"start"},children:[v,r.jsx(gT,{plugin:a.plugin,skill:a.skill})]})}function kT(t){return t?/^https?:\/\/(?:www\.)?(?:github\.com|raw\.githubusercontent\.com)\//.test(t):!1}function wT({skill:t}){const{onSkillUpdated:a}=cr(),{toast:s}=rc(),[i,c]=m.useState("idle"),[u,d]=m.useState(null),[f,x]=m.useState(!1),[h,v]=m.useState(null),[y,b]=m.useState(!1),S=m.useRef(null),w=m.useCallback(async()=>{if(!t||i==="updating")return;const T=new AbortController;S.current=T,c("updating"),d(null);try{const A=await ke.postSkillUpdate(t.plugin,t.skill,T.signal);if(A.ok)c("done"),a(t.plugin,t.skill),s({message:`Updated ${t.skill}.`,severity:"success",durationMs:4e3});else{const B=`Update failed (HTTP ${A.status}): ${A.body}`;c("idle"),d(B),s({message:`Couldn't update ${t.skill} — HTTP ${A.status}`,severity:"error",durationMs:0,action:{label:"Retry",onInvoke:()=>{w()}}})}}catch(A){if(A instanceof DOMException&&A.name==="AbortError")return;const B=A instanceof Error?A.message:"Network error";c("idle"),d(B),s({message:`Couldn't update ${t.skill} — ${B}`,severity:"error",durationMs:0,action:{label:"Retry",onInvoke:()=>{w()}}})}finally{S.current===T&&(S.current=null)}},[t,i,a,s]);if(m.useEffect(()=>{if(!f||h!=null||!t||!t.latestVersion)return;let T=!1;return b(!0),ke.getVersionDiff(t.plugin,t.skill,t.currentVersion??"",t.latestVersion).then(A=>{T||v(A)}).catch(()=>{T||v(null)}).finally(()=>{T||b(!1)}),()=>{T=!0}},[f,h,t==null?void 0:t.plugin,t==null?void 0:t.skill,t==null?void 0:t.latestVersion,t==null?void 0:t.currentVersion,t]),m.useEffect(()=>()=>{var T;(T=S.current)==null||T.abort()},[]),!t||t.updateAvailable!==!0)return null;const E=t.latestVersion,k=i==="updating"?"Updating…":E?`Update to ${E}`:"Update",N=i==="updating";return r.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:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[r.jsx("button",{type:"button","data-testid":"update-action-button",onClick:()=>{w()},disabled:N,style:{height:36,padding:"0 14px",background:"var(--color-ink)",color:"var(--color-paper)",border:"none",borderRadius:4,cursor:N?"not-allowed":"pointer",fontFamily:"var(--font-sans)",fontSize:13,fontWeight:500},children:k}),r.jsx("button",{type:"button","data-testid":"update-action-toggle-changelog",onClick:()=>x(T=>!T),disabled:N||!E,style:{background:"transparent",border:"none",color:"var(--text-secondary)",fontSize:12,fontFamily:"var(--font-sans)",cursor:"pointer",textDecoration:"underline"},children:f?"Hide changelog":"Preview changelog"})]}),i==="updating"&&r.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…"}),u&&i!=="updating"&&r.jsx("div",{"data-testid":"update-action-error",role:"alert",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--color-error, #d32f2f)"},children:u}),f&&E&&r.jsxs("div",{"data-testid":"update-action-changelog",style:{paddingTop:8},children:[y&&r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Loading changelog…"}),!y&&h&&r.jsx(Yf,{contentDiff:h.contentDiff,fromLabel:h.from,toLabel:h.to,diffSummary:h.diffSummary??void 0,renderContext:"inline"}),!y&&!h&&r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Couldn't load changelog."})]})]})}const CT=3e4;function ET({plugin:t,skill:a,trackedForUpdates:s=!0,discoveryBackedOff:i=!1}){const c=cr(),[u,d]=m.useState(!1),[f,x]=m.useState(!1),[,h]=m.useState(0),v=m.useRef(null),y=m.useRef(null),b=`${t}/${a}`,S=c.updatesById.get(b);if(m.useEffect(()=>{if(!u)return;const E=setInterval(()=>h(k=>(k+1)%1e6),250);return()=>clearInterval(E)},[u]),m.useEffect(()=>{if(!u||!S)return;const E=y.current??0;S.receivedAt<E||(v.current&&(clearTimeout(v.current),v.current=null),d(!1),x(!1),y.current=null)},[u,S]),m.useEffect(()=>()=>{v.current&&clearTimeout(v.current)},[]),s===!1||i)return null;const w=async()=>{if(!u){x(!1),d(!0),y.current=Date.now(),v.current=setTimeout(()=>{d(!1),x(!0),v.current=null,y.current=null},CT);try{await ke.rescanSkill(t,a)}catch{v.current&&(clearTimeout(v.current),v.current=null),d(!1),y.current=null}}};return r.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[r.jsx("button",{type:"button","data-testid":"check-now-button",onClick:w,disabled:u,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:u?"not-allowed":"pointer"},children:"Check now"}),u&&r.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"}}),f&&r.jsx("span",{"data-testid":"check-now-no-changes",style:{fontSize:11,color:"var(--text-secondary)",fontFamily:"var(--font-sans)"},children:"No changes detected"})]})}function NT(t,a){var s;typeof process<"u"&&((s=process==null?void 0:process.env)==null?void 0:s.NODE_ENV)==="production"||console.warn(`[SubTabBar] sub-tab "${a}" clicked under "${t}" but no onChange handler was wired. Pass an onChange prop or this click is a no-op.`)}function TT({tabs:t,active:a,onChange:s,parentTabId:i}){const[c,u]=m.useState(null),d=f=>{s?s(f):NT(i,f)};return r.jsx("div",{role:"tablist","aria-label":`${i} sub-sections`,"data-testid":`detail-subtab-bar-${i}`,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:t.map(f=>{const x=f.id===a,h=c===f.id&&!x;return r.jsx("button",{type:"button",role:"tab","aria-selected":x,tabIndex:x?0:-1,id:`detail-subtab-${i}-${f.id}`,"data-testid":`detail-subtab-${i}-${f.id}`,onClick:()=>d(f.id),onMouseEnter:()=>u(f.id),onMouseLeave:()=>u(v=>v===f.id?null:v),style:{background:h?"var(--surface-2, rgba(0,0,0,0.04))":"transparent",border:"none",borderBottom:x?"2px solid var(--text-primary)":"2px solid var(--border-subtle, transparent)",padding:"8px 10px",marginBottom:-1,fontFamily:"var(--font-sans)",fontSize:13,fontWeight:x?500:400,color:x?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap",transition:"background 80ms ease"},children:f.label},f.id)})})}const RT=[{id:"overview",label:"Overview"},{id:"edit",label:"Edit",visibleWhen:({isReadOnly:t})=>!t},{id:"run",label:"Run"},{id:"history",label:"History"}];function hb(t){return RT.filter(a=>a.visibleWhen?a.visibleWhen({isReadOnly:t}):!0)}const AT={tests:{tab:"run",mode:"benchmark"},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"},edit:{tab:"edit"},run:{tab:"run"},history:{tab:"history"}};function Zo(t){return t?AT[t]??null:null}function Ef(t){const a=new URLSearchParams(t),s=a.get("tab"),i=a.get("panel");return Zo(s)??Zo(i)??{tab:"overview"}}function xb(t,a){return!a||new Set(hb(!0).map(i=>i.id)).has(t)?t:"overview"}const Il={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 Ks(t){const a=Il[t];return a&&a.length>0?a[0].id:""}function gb(t,a){const s=Il[t];if(!s)return"";const i=new URLSearchParams(a),c=t==="run"?"mode":t==="history"?"view":"sub",u=i.get(c)??i.get("sub");return u&&s.some(d=>d.id===u)?u:s[0].id}function LT(t){return t==="run"?"mode":t==="history"?"view":null}function MT(t){switch(t){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 ef(){const{state:t,setMobileView:a}=cr();return t.isMobile?r.jsxs("button",{onClick:()=>a("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:[r.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"15 18 9 12 15 6"})}),"Back to skills"]}):null}function zT(t={}){if(t.selectedSkillInfo!==void 0||t.loadError!==void 0)return DT(t);const{state:a,selectSkill:s,setMode:i,refreshSkills:c}=cr(),[u,d]=m.useState(typeof window<"u"?window.location.hash:"");if(m.useEffect(()=>{const h=()=>d(window.location.hash);return window.addEventListener("hashchange",h),()=>window.removeEventListener("hashchange",h)},[]),u==="#/updates")return r.jsxs("div",{className:"h-full overflow-auto animate-fade-in",children:[r.jsx(ef,{}),r.jsx(db,{})]});if(a.mode==="create")return r.jsxs("div",{className:"h-full overflow-auto animate-fade-in",children:[r.jsx(ef,{}),r.jsx(YN,{onCreated:async(h,v)=>{i("browse"),await c(),s({plugin:h,skill:v,origin:"source",source:"project"})},onCancel:()=>i("browse")})]});if(!a.selectedSkill)return a.skillsError?r.jsx(Fs,{variant:"error",message:a.skillsError,onRetry:c}):!a.skillsLoading&&a.skills.length===0?r.jsx(Fs,{variant:"no-skills"}):!a.skillsLoading&&a.skills.length>0&&!a.skills.some(h=>h.scopeV2==="available-project")?r.jsx(Fs,{variant:"no-project-skills"}):r.jsx(Fs,{variant:"no-selection"});const f=a.selectedSkill,x=a.skills.find(h=>h.plugin===f.plugin&&h.skill===f.skill)??null;return r.jsxs("div",{className:"flex flex-col h-full",children:[r.jsx(ef,{}),r.jsx(_T,{skillInfo:x,allSkills:a.skills,onSelectSkill:h=>s(h)})]})}function DT(t){const a=t.selectedSkillInfo??null,s=t.activeDetailTab??"overview";if(a==null)return BT();if(t.loadError)return IT(a,t.loadError);const i=t.allSkills&&t.onSelectSkill?{allSkills:t.allSkills,onSelectSkill:t.onSelectSkill}:void 0,c=t.activeDetailSub??Ks(s);return vb(a,s,t.onDetailTabChange,c,t.onDetailSubChange,i)}function _T({skillInfo:t,allSkills:a,onSelectSkill:s}){const i=m.useMemo(()=>typeof window>"u"?{tab:"overview"}:Ef(window.location.search),[]),[c,u]=m.useState(i.tab),[d,f]=m.useState(()=>i.mode?i.mode:i.view?i.view:gb(i.tab,typeof window<"u"?window.location.search:""));m.useEffect(()=>{if(!t||!(t.origin==="installed"))return;const v=xb(c,!0);v!==c&&(u(v),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:"This skill is read-only — workbench tabs are hidden.",severity:"info"}})))},[t,c]),m.useEffect(()=>{f(Ks(c))},[c]),m.useEffect(()=>{if(typeof window>"u")return;const h=new URLSearchParams(window.location.search);h.delete("panel"),h.delete("sub"),c==="overview"?h.delete("tab"):h.set("tab",c);const v=LT(c),y=Il[c];h.delete("mode"),h.delete("view"),v&&y&&d&&d!==y[0].id&&h.set(v,d);const b=h.toString(),S=`${window.location.pathname}${b?"?"+b:""}${window.location.hash}`;window.history.replaceState(null,"",S)},[c,d]);const x=m.useMemo(()=>t?vb(t,c,u,d,f,{}):r.jsx(Fs,{variant:"no-selection"}),[t,c,d,a,s]);return r.jsx("div",{className:"flex flex-col h-full",style:{background:"var(--bg-canvas)"},children:x})}function OT(t,a,s){const i=hb(s);return r.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:i.map(({id:c,label:u})=>{const d=c===t;return r.jsx("button",{type:"button",role:"tab","aria-selected":d,tabIndex:d?0:-1,id:`detail-tab-${c}`,"aria-controls":`detail-panel-${c}`,"data-testid":`detail-tab-${c}`,onClick:()=>a==null?void 0:a(c),style:{background:"transparent",border:"none",borderBottom:d?"2px solid var(--text-primary)":"2px solid transparent",padding:"10px 8px",marginBottom:-1,fontFamily:"var(--font-sans)",fontSize:13,fontWeight:d?500:400,color:d?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",whiteSpace:"nowrap"},children:u},c)})})}function BT(){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",padding:32,background:"var(--bg-canvas)"},children:[r.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"}),r.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 IT(t,a){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:24,background:"var(--bg-canvas)",height:"100%"},children:[mb({skill:t}),r.jsxs("section",{role:"alert",style:{background:"var(--bg-surface)",border:"1px solid var(--border-default)",borderRadius:8,padding:"14px 16px"},children:[r.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 ",t.skill]}),r.jsx("p",{style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--text-secondary)",margin:"0 0 12px",wordBreak:"break-word"},children:a})]})]})}function $T({active:t,sub:a}){if(t==="edit")return r.jsx(_E,{});if(t==="run"){const s=tN(a)?a:"benchmark";return r.jsx(nN,{mode:s})}if(t==="history"){const s=$N(a)?a:"timeline";return r.jsx(UN,{view:s})}return null}function UT({active:t,sub:a}){const{state:s,dispatch:i}=bn();return m.useEffect(()=>{if(t==="overview")return;const c=t==="edit"?"editor":t==="run"?a==="activation"?"activation":"run":t==="history"?a==="models"?"leaderboard":a==="versions"?"versions":"history":"editor";s.activePanel!==c&&i({type:"SET_PANEL",panel:c})},[t,a,s.activePanel,i]),null}function vb(t,a,s,i="",c,u){var b;const d=t.origin==="installed",f=xb(a,d),x=S=>{const w=MT(S);s==null||s(w.tab),c&&(w.mode?c(w.mode):w.view&&c(w.view))},h=r.jsx(ST,{skill:t,onNavigate:x,repoUrl:t.homepage??null}),v=u!=null?r.jsxs(FC,{plugin:t.plugin,skill:t.skill,origin:t.origin,children:[r.jsx(UT,{active:f,sub:i}),r.jsx($T,{active:f,sub:i})]},`${t.plugin}/${t.skill}`):r.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 ",f," view."]}),y=t.origin==="installed"&&r.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:[r.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:[r.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),r.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),r.jsx("span",{style:{flex:1,minWidth:0},children:"This is an installed copy of the skill. Editing, generating tests, and running evals are disabled. Open the source skill to make changes."}),t.trackedForUpdates&&r.jsx("button",{type:"button","data-testid":"uninstall-button","aria-label":`Uninstall ${t.skill}`,onClick:()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-uninstall",{detail:{skill:{plugin:t.plugin,skill:t.skill,dir:t.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 r.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",background:"var(--bg-canvas)"},children:[r.jsx("div",{style:{padding:16,paddingBottom:12},children:mb({skill:t})}),r.jsx(wT,{skill:t}),y,t.origin==="installed"&&t.scopeV2!=="available-plugin"&&r.jsx("div",{style:{padding:"8px 16px",borderBottom:"1px solid var(--border-default)"},children:r.jsx(ET,{plugin:t.plugin,skill:t.skill,trackedForUpdates:t.trackedForUpdates})}),OT(f,s,d),Il[f]&&r.jsx(TT,{parentTabId:f,tabs:Il[f],active:i||(((b=Il[f][0])==null?void 0:b.id)??""),onChange:c}),r.jsx("div",{role:"tabpanel",id:`detail-panel-${f}`,"aria-labelledby":`detail-tab-${f}`,"data-testid":`detail-panel-${f}`,style:{flex:1,minHeight:0,overflow:"auto"},children:f==="overview"?h:v})]})}function HT(){const{updateCount:t,state:a,dismissUpdateNotification:s}=cr(),i=t>0&&!a.updateNotificationDismissed;return m.useEffect(()=>{if(!i)return;const c=setTimeout(()=>s(),1e4);return()=>clearTimeout(c)},[i,s]),i?r.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:[r.jsxs("span",{children:[t," update",t===1?"":"s"," available"]}),r.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"}),r.jsx("button",{onClick:s,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 PT=[{name:le.shortcuts.groupNavigation,items:[{keys:"/",label:le.shortcuts.search},{keys:"j",label:le.shortcuts.moveDown},{keys:"k",label:le.shortcuts.moveUp},{keys:"Enter",label:le.shortcuts.openSelected},{keys:"Esc",label:"Close / clear"}]},{name:le.shortcuts.groupActions,items:[{keys:"⌘K",label:le.shortcuts.openPalette},{keys:"?",label:le.shortcuts.openShortcuts},{keys:"⌘B",label:le.shortcuts.toggleSidebar},{keys:"E",label:le.actions.edit}]},{name:le.shortcuts.groupTheme,items:[{keys:"⌘⇧D",label:le.shortcuts.toggleTheme}]}];function VT({open:t,onClose:a,groups:s=PT,title:i=le.shortcuts.title}){const c=m.useRef(null),u=m.useRef(null);return m.useEffect(()=>{var d;if(t)return c.current=document.activeElement??null,(d=u.current)==null||d.focus(),()=>{var f,x;(x=(f=c.current)==null?void 0:f.focus)==null||x.call(f),c.current=null}},[t]),m.useEffect(()=>{if(!t)return;function d(f){var x;if(f.key==="Escape"){f.preventDefault(),a();return}f.key==="Tab"&&(f.preventDefault(),(x=u.current)==null||x.focus())}return window.addEventListener("keydown",d,!0),()=>window.removeEventListener("keydown",d,!0)},[t,a]),t?r.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:d=>{d.target===d.currentTarget&&a()},children:r.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:[r.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[r.jsx("h2",{id:"shortcut-modal-title",style:{margin:0,fontFamily:"var(--font-serif)",fontWeight:500,fontSize:18},children:i}),r.jsx("button",{ref:u,type:"button","aria-label":"Close",onClick:a,style:{background:"transparent",border:"1px solid var(--border-default)",borderRadius:4,padding:"2px 8px",color:"var(--text-secondary)",cursor:"pointer",fontSize:13},children:"Esc"})]}),s.map(d=>r.jsxs("section",{style:{marginBottom:12},children:[r.jsx("h3",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-secondary)",margin:"0 0 6px"},children:d.name}),r.jsx("ul",{style:{listStyle:"none",margin:0,padding:0},children:d.items.map(f=>r.jsxs("li",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderTop:"1px solid var(--border-default)",fontSize:13},children:[r.jsx("span",{children:f.label}),r.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:f.keys})]},`${d.name}:${f.keys}`))})]},d.name))]})}):null}function FT(t){const a=le.actions,s=[{action:"open",label:a.open},{action:"copy-path",label:a.copyPath},{action:"reveal",label:a.revealInEditor},{action:"run-benchmark",label:a.runBenchmark}];if(t.origin==="source")return[...s,{action:"edit",label:a.edit},{action:"duplicate",label:a.duplicate},{action:"delete",label:a.delete}];const i=[...s];return t.updateAvailable&&i.push({action:"update",label:a.update}),i.push({action:"uninstall",label:a.uninstall}),i.push({action:"delete",label:a.delete,disabled:!0,title:a.deletePluginTooltip}),i}function GT({state:t,onClose:a,onAction:s,itemsOverride:i}){const c=m.useRef(null),u=m.useRef(null),[d,f]=m.useState(0),x=m.useMemo(()=>t.skill?i??FT(t.skill):[],[t.skill,i]),h=m.useMemo(()=>{if(typeof window>"u")return{left:t.x,top:t.y};const y=8,b=220,S=44+x.length*28;let w=t.x,E=t.y;return w+b+y>window.innerWidth&&(w=Math.max(y,t.x-b)),E+S+y>window.innerHeight&&(E=Math.max(y,t.y-S)),{left:w,top:E}},[t.x,t.y,x.length]);m.useEffect(()=>{if(t.open)return u.current=document.activeElement??null,f(0),requestAnimationFrame(()=>{var y;(y=c.current)==null||y.focus()}),()=>{var y,b;(b=(y=u.current)==null?void 0:y.focus)==null||b.call(y),u.current=null}},[t.open]);const v=m.useCallback(()=>{if(!t.skill)return;const y=x[d];!y||y.disabled||(s(y.action,t.skill),a())},[x,d,t.skill,s,a]);return m.useEffect(()=>{if(!t.open)return;function y(S){if(S.key==="Escape"){S.preventDefault(),a();return}if(S.key==="ArrowDown"){S.preventDefault(),f(w=>Math.min(w+1,Math.max(x.length-1,0)));return}if(S.key==="ArrowUp"){S.preventDefault(),f(w=>Math.max(w-1,0));return}if(S.key==="Enter"||S.key===" "){S.preventDefault(),v();return}}function b(S){c.current&&S.target instanceof Node&&(c.current.contains(S.target)||a())}return window.addEventListener("keydown",y,!0),window.addEventListener("mousedown",b,!0),()=>{window.removeEventListener("keydown",y,!0),window.removeEventListener("mousedown",b,!0)}},[t.open,a,x.length,v]),!t.open||!t.skill?null:r.jsx("div",{ref:c,role:"menu",tabIndex:-1,"data-testid":"context-menu",style:{position:"fixed",left:h.left,top:h.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:x.map((y,b)=>r.jsx("div",{role:"menuitem","aria-disabled":y.disabled||void 0,title:y.title||void 0,"data-action":y.action,"data-selected":b===d||void 0,onMouseEnter:()=>f(b),onClick:()=>{y.disabled||(s(y.action,t.skill),a())},style:{padding:"5px 10px",borderRadius:4,cursor:y.disabled?"default":"pointer",opacity:y.disabled?.5:1,background:b===d?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent"},children:y.label},y.action))})}const xv=t=>`${t.plugin}/${t.skill}`;function gv(t){const a=(t==null?void 0:t.delayMs)??1e4,s=t==null?void 0:t.onCommit,i=t==null?void 0:t.onFailure,c=(t==null?void 0:t.apiCall)??ke.deleteSkill.bind(ke),u=m.useRef(s),d=m.useRef(i),f=m.useRef(c);u.current=s,d.current=i,f.current=c;const x=m.useRef(new Map),[,h]=m.useState(0),v=m.useCallback(()=>h(k=>k+1),[]),y=m.useCallback(async k=>{var N,T;try{await f.current(k.skill.plugin,k.skill.skill),(N=u.current)==null||N.call(u,k.skill)}catch(A){(T=d.current)==null||T.call(d,k.skill,A)}finally{x.current.delete(xv(k.skill)),v()}},[v]),b=m.useCallback(k=>{const N=xv(k),T=x.current.get(N);T!=null&&T.timeoutId&&clearTimeout(T.timeoutId);const A={skill:k,timeoutId:null};A.timeoutId=setTimeout(()=>{A.timeoutId=null,y(A)},a),x.current.set(N,A),v()},[a,y,v]),S=m.useCallback(k=>{const N=x.current.get(k);N&&(N.timeoutId&&clearTimeout(N.timeoutId),x.current.delete(k),v())},[v]),w=m.useCallback(async()=>{const k=Array.from(x.current.values());for(const N of k)N.timeoutId&&(clearTimeout(N.timeoutId),N.timeoutId=null);await Promise.all(k.map(N=>y(N)))},[y]),E=m.useCallback(k=>x.current.has(k),[]);return m.useEffect(()=>{const k=()=>{w()};return window.addEventListener("beforeunload",k),()=>{window.removeEventListener("beforeunload",k)}},[w]),m.useEffect(()=>{const k=x.current;return()=>{for(const N of k.values())N.timeoutId&&(clearTimeout(N.timeoutId),N.timeoutId=null,y(N));k.clear()}},[]),{enqueueDelete:b,cancelDelete:S,flushPending:w,isPending:E}}const WT={"anthropic-api":{name:le.setupProviders.anthropic.name,description:le.setupProviders.anthropic.description,envVars:le.setupProviders.anthropic.envVars,keyUrl:le.setupProviders.anthropic.keyUrl,learnMoreUrl:le.setupProviders.anthropic.learnMoreUrl},openai:{name:le.setupProviders.openai.name,description:le.setupProviders.openai.description,envVars:le.setupProviders.openai.envVars,keyUrl:le.setupProviders.openai.keyUrl,learnMoreUrl:le.setupProviders.openai.learnMoreUrl},openrouter:{name:le.setupProviders.openrouter.name,description:le.setupProviders.openrouter.description,envVars:le.setupProviders.openrouter.envVars,keyUrl:le.setupProviders.openrouter.keyUrl,learnMoreUrl:le.setupProviders.openrouter.learnMoreUrl},gemini:{name:le.setupProviders.gemini.name,description:le.setupProviders.gemini.description,envVars:le.setupProviders.gemini.envVars,keyUrl:le.setupProviders.gemini.keyUrl,learnMoreUrl:le.setupProviders.gemini.learnMoreUrl},ollama:{name:le.setupProviders.ollama.name,description:le.setupProviders.ollama.description,envVars:le.setupProviders.ollama.envVars,install:[le.setupProviders.ollama.installCmd],start:[le.setupProviders.ollama.startCmd],pullExample:le.setupProviders.ollama.pullExample,learnMoreUrl:le.setupProviders.ollama.learnMoreUrl},"lm-studio":{name:le.setupProviders.lmStudio.name,description:le.setupProviders.lmStudio.description,envVars:le.setupProviders.lmStudio.envVars,install:[le.setupProviders.lmStudio.installCmd],start:[le.setupProviders.lmStudio.startCmd],pullExample:le.setupProviders.lmStudio.pullExample,learnMoreUrl:le.setupProviders.lmStudio.learnMoreUrl},"claude-code":{name:le.setupProviders.claudeCode.name,description:le.setupProviders.claudeCode.description,envVars:[],notes:[le.setupProviders.claudeCode.loginHint,le.claudeCodeLabel.compactLabel],learnMoreUrl:le.setupProviders.claudeCode.learnMoreUrl}};function qT(t){return t?WT[t]??null:null}function YT({open:t,providerKey:a,onClose:s}){const i=m.useRef(null);if(m.useEffect(()=>{if(!t)return;const d=f=>{f.key==="Escape"&&(f.preventDefault(),s())};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[t,s]),m.useEffect(()=>{if(!t)return;const d=i.current;if(!d)return;const f=d.querySelector("button, a[href], [tabindex]:not([tabindex='-1']), input, textarea, select");f==null||f.focus()},[t]),!t||typeof document>"u")return null;const c=qT(a),u=(c==null?void 0:c.name)??le.setupDrawer.fallbackTitle;return nc.createPortal(r.jsxs(r.Fragment,{children:[r.jsx("div",{"data-testid":"setup-drawer-backdrop","aria-hidden":"true",onClick:s,style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",zIndex:99,animation:"vskillDrawerBackdropIn 120ms ease"}}),r.jsxs("div",{"data-testid":"setup-drawer",ref:i,role:"dialog","aria-modal":"true","aria-label":le.setupDrawer.title(u),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:[r.jsx(KT,{title:u,onClose:s}),r.jsx("div",{"data-testid":"setup-drawer-body",style:{flex:1,overflowY:"auto",padding:"16px 20px"},children:c?r.jsx(XT,{content:c}):r.jsx(QT,{})}),r.jsx("style",{children:`@keyframes vskillDrawerIn {
|
|
112
112
|
from { transform: translateX(100%); }
|
|
113
113
|
to { transform: translateX(0); }
|
|
114
114
|
}
|
|
115
115
|
@keyframes vskillDrawerBackdropIn {
|
|
116
116
|
from { opacity: 0; }
|
|
117
117
|
to { opacity: 1; }
|
|
118
|
-
}`})]})]}),document.body)}function
|
|
118
|
+
}`})]})]}),document.body)}function KT({title:t,onClose:a}){return r.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"14px 20px",borderBottom:"1px solid var(--border-default, var(--border-subtle))"},children:[r.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:18,fontWeight:500,margin:0,color:"var(--text-primary)"},children:le.setupDrawer.title(t)}),r.jsx("button",{type:"button","data-testid":"setup-drawer-close",onClick:a,"aria-label":le.setupDrawer.close,style:{background:"transparent",border:"none",color:"var(--text-secondary)",cursor:"pointer",fontSize:18,padding:4,lineHeight:1},children:"×"})]})}function XT({content:t}){var a,s;return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[r.jsx("p",{style:{fontSize:14,lineHeight:1.5,color:"var(--text-primary)",margin:0},children:t.description}),t.notes&&t.notes.length>0&&r.jsx("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:6},children:t.notes.map(i=>r.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:i},i))}),t.envVars.length>0&&r.jsxs("section",{children:[r.jsx("h3",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",margin:"0 0 8px"},children:le.setupDrawer.requiredEnv}),r.jsx("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:6},children:t.envVars.map(i=>r.jsx("li",{children:r.jsx(ZT,{name:i})},i))})]}),t.keyUrl&&r.jsx(JT,{href:t.keyUrl,label:le.setupDrawer.getKey,testId:"setup-drawer-get-key"}),(t.install||t.start||t.pullExample)&&r.jsxs("section",{children:[r.jsx("h3",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--text-secondary)",margin:"0 0 8px"},children:le.setupDrawer.installRun}),r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(a=t.install)==null?void 0:a.map((i,c)=>r.jsx(tf,{code:i},`install-${c}`)),(s=t.start)==null?void 0:s.map((i,c)=>r.jsx(tf,{code:i},`start-${c}`)),t.pullExample&&r.jsx(tf,{code:t.pullExample})]})]}),r.jsx("footer",{style:{marginTop:8},children:r.jsxs("a",{href:t.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:[le.setupDrawer.learnMore," →"]})})]})}function QT(){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[r.jsx("h3",{style:{margin:0,fontFamily:"var(--font-serif)",fontSize:16,fontWeight:500,color:"var(--text-primary)"},children:le.setupDrawer.fallbackTitle}),r.jsx("p",{style:{margin:0,fontSize:13,color:"var(--text-secondary)",lineHeight:1.5},children:le.setupDrawer.fallbackBody})]})}function ZT({name:t}){const a=async()=>{var s;try{await((s=navigator.clipboard)==null?void 0:s.writeText(t))}catch{}};return r.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:[r.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-primary)",flex:1},children:t}),r.jsx("button",{type:"button",onClick:a,"aria-label":`Copy ${t} 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:le.setupDrawer.copy})]})}function tf({code:t}){return r.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:t})}function JT({href:t,label:a,testId:s}){return r.jsxs("a",{href:t,target:"_blank",rel:"noopener noreferrer","data-testid":s,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:[a," →"]})}function eR(){const[t,a]=m.useState(!1),[s,i]=m.useState(null),c=m.useRef(null),u=m.useCallback((f,x)=>{var h;c.current=typeof document<"u"?document.activeElement:null,(h=x==null?void 0:x.beforeOpen)==null||h.call(x),i(f),a(!0)},[]),d=m.useCallback(()=>{a(!1);const f=c.current;f&&"focus"in f&&typeof f.focus=="function"&&queueMicrotask(()=>f.focus())},[]);return m.useMemo(()=>({open:u,close:d,isOpen:t,providerKey:s}),[u,d,t,s])}function tR(t){const a=[],s=[],i=new Set;for(const c of t){if(c.presence==="absent"||c.health==="missing"){s.push({kind:"individual",key:c.id,agent:c});continue}if(c.sharedFolderGroup&&c.sharedFolderGroup.length>1){const u=[...c.sharedFolderGroup].sort().join("+");if(i.has(u))continue;i.add(u);const d=t.filter(f=>c.sharedFolderGroup.includes(f.id));a.push({kind:"aggregate",key:`shared:${u}`,consumers:d,sharedFolderPath:c.sharedFolderPath??"~/.config/agents/skills",combinedCount:d.reduce((f,x)=>f+x.globalCount,0)});continue}a.push({kind:"individual",key:c.id,agent:c})}return{detected:a,notDetected:s}}function nR({agents:t,activeAgentId:a,focusedAgentId:s,onFocusAgent:i,onSwitch:c,onOpenSetup:u,onClose:d}){const f=m.useRef(null);m.useEffect(()=>{const v=y=>{y.key==="Escape"&&(y.preventDefault(),d())};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[d]),m.useEffect(()=>{const v=b=>{f.current&&!f.current.contains(b.target)&&d()},y=setTimeout(()=>{document.addEventListener("mousedown",v)},0);return()=>{clearTimeout(y),document.removeEventListener("mousedown",v)}},[d]);const x=m.useMemo(()=>tR(t),[t]),h=t.find(v=>v.id===s)??t.find(v=>v.id===a)??t[0];return typeof document>"u"?null:nc.createPortal(r.jsxs("div",{ref:f,"data-testid":"agent-scope-picker-popover",role:"dialog","aria-label":le.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:[r.jsxs("div",{style:{display:"flex",height:360,maxHeight:"60vh"},children:[r.jsxs("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:[x.detected.length===0&&x.notDetected.length===0&&r.jsx(vv,{}),x.detected.map(v=>v.kind==="aggregate"?r.jsx(aR,{row:v,onFocus:()=>{var y;return i(((y=v.consumers[0])==null?void 0:y.id)??a??"")}},v.key):r.jsx(rR,{agent:v.agent,focused:v.agent.id===s,active:v.agent.id===a,onClick:()=>i(v.agent.id)},v.key)),x.notDetected.length>0&&r.jsxs(r.Fragment,{children:[r.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:le.scopePicker.notDetectedSubheading}),x.notDetected.map(v=>r.jsx(lR,{agent:v.agent},v.key))]})]}),r.jsx("section",{"data-testid":"agent-scope-picker-stats",style:{flex:1,overflowY:"auto",padding:"14px 16px"},children:h?r.jsx(sR,{agent:h,activeAgentId:a,onSwitch:()=>c(h.id)}):r.jsx(vv,{})})]}),r.jsx("style",{children:`@keyframes scopePickerFadeIn {
|
|
119
119
|
from { opacity: 0; transform: translateX(-50%) translateY(2px); }
|
|
120
120
|
to { opacity: 1; transform: translateX(-50%) translateY(0); }
|
|
121
|
-
}`})]}),document.body)}function nR({agent:t,focused:a,active:s,onClick:i}){const c=t.health==="ok"?"var(--color-ok, #22c55e)":t.health==="stale"?"var(--color-own, #f59e0b)":"var(--text-tertiary)";return r.jsxs("button",{type:"button","data-testid":"agent-scope-row","data-agent-id":t.id,"data-active":s?"true":"false",onClick:i,style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"8px 14px",background:a?"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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:c,flexShrink:0}}),r.jsx("span",{style:{flex:1,fontSize:13},children:t.displayName}),r.jsxs("span",{title:"project · personal · plugins",style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:[t.installedCount,"·",t.globalCount,"·",t.pluginCount??0]})]})}function rR({row:t,onFocus:a}){return r.jsxs("button",{type:"button","data-testid":"agent-scope-shared-folder-row",onClick:a,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:[r.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)"},children:t.sharedFolderPath}),r.jsxs("span",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[t.consumers.map(s=>r.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:s.id},s.id)),r.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontFamily:"var(--font-mono)"},children:["· ",t.combinedCount," skills"]})]})]})}function aR({agent:t}){const a=t.isRemoteOnly?`${t.displayName} is a web-only product — no local CLI or folder to detect.`:t.resolvedGlobalDir?`Looked for ${t.resolvedGlobalDir} — not found.`:`${t.displayName} was not found on this machine.`;return r.jsxs("div",{"data-testid":`agent-scope-not-detected-row-${t.id}`,title:a,style:{display:"flex",alignItems:"center",gap:10,padding:"6px 14px",color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:12},children:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--text-tertiary)",flexShrink:0}}),r.jsx("span",{style:{flex:1},children:t.displayName}),t.isRemoteOnly&&r.jsx("span",{"data-testid":`agent-scope-remote-badge-${t.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 lR({agent:t,activeAgentId:a,onSwitch:s}){const i=t.id===a,c=t.isRemoteOnly===!0,u=i||c,d=i?"Active":c?"Remote-only":le.scopePicker.switchCta;return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[r.jsxs("div",{children:[r.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:16,fontWeight:500,color:"var(--text-primary)"},children:t.displayName}),r.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:2},children:c?"Remote service — no local install":iR(t.health)})]}),r.jsxs("dl",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"4px 12px",margin:0,fontSize:12},children:[r.jsx(Do,{label:le.scopePicker.statsInstalled,value:String(t.installedCount)}),r.jsx(Do,{label:le.scopePicker.statsGlobal,value:String(t.globalCount)}),r.jsx(Do,{label:le.scopePicker.statsPlugins,value:String(t.pluginCount??0)}),r.jsx(Do,{label:le.scopePicker.statsLastSync,value:t.lastSync?sR(t.lastSync):"—"})]}),r.jsx("button",{type:"button","data-testid":"agent-scope-switch",onClick:s,disabled:u,title:c?"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:u?"transparent":"color-mix(in srgb, var(--accent-surface) 20%, transparent)",color:"var(--text-primary)",fontSize:12,fontWeight:500,fontFamily:"var(--font-sans)",cursor:u?"default":"pointer",opacity:u?.5:1},children:d})]})}function Do({label:t,value:a}){return r.jsxs(r.Fragment,{children:[r.jsx("dt",{style:{color:"var(--text-secondary)",margin:0},children:t}),r.jsx("dd",{style:{color:"var(--text-primary)",margin:0,fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums"},children:a})]})}function vv(){return r.jsx("div",{style:{padding:"16px 18px",fontSize:12,color:"var(--text-secondary)"},children:"No agents detected yet."})}function sR(t){try{const a=new Date(t).getTime(),s=Date.now()-a;if(Number.isNaN(a))return"—";const i=Math.round(s/6e4);if(i<1)return"just now";if(i<60)return`${i}m ago`;const c=Math.round(i/60);return c<24?`${c}h ago`:`${Math.round(c/24)}d ago`}catch{return"—"}}function iR(t){switch(t){case"ok":return le.scopePicker.statsHealthOk;case"stale":return le.scopePicker.statsHealthStale;case"missing":return le.scopePicker.statsHealthMissing}}function oR(t){const a=new Map;for(const s of t.sharedFolders??[])for(const i of s.consumers)a.set(i,s);return t.agents.map(s=>{const i=a.get(s.id);return{id:s.id,displayName:s.displayName,presence:s.detected?"detected":"absent",installedCount:s.localSkillCount,globalCount:s.globalSkillCount,pluginCount:s.pluginSkillCount??0,lastSync:s.lastSync,health:s.health,sharedFolderGroup:i?i.consumers:void 0,sharedFolderPath:i?i.path:void 0,isRemoteOnly:s.isRemoteOnly,resolvedGlobalDir:s.resolvedGlobalDir}})}function cR({agents:t,activeAgentId:a,onActiveAgentChange:s,onOpenSetup:i}){const[c,u]=m.useState(!1),[d,f]=m.useState(null),x=m.useRef(null),h=m.useMemo(()=>t.find(S=>S.id===a)??t[0]??null,[t,a]),v=m.useMemo(()=>h?h.health==="ok"?"var(--color-ok, #22c55e)":h.health==="stale"?"var(--color-own, #f59e0b)":"var(--text-tertiary)":"var(--text-tertiary)",[h]),y=m.useCallback(()=>{var S;u(!1),(S=x.current)==null||S.focus()},[]),b=m.useCallback(S=>{s(S),u(!1)},[s]);return r.jsxs(r.Fragment,{children:[r.jsxs("button",{ref:x,type:"button","data-testid":"agent-scope-picker-trigger","aria-haspopup":"dialog","aria-expanded":c,onClick:()=>u(S=>!S),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),u(!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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:v,flexShrink:0}}),r.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(h==null?void 0:h.displayName)??"Select agent"}),r.jsxs("span",{title:"project · personal · plugins",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:["(",(h==null?void 0:h.installedCount)??0," · ",(h==null?void 0:h.globalCount)??0," · ",(h==null?void 0:h.pluginCount)??0,")"]}),r.jsx("span",{"aria-hidden":"true",style:{fontSize:10,color:"var(--text-secondary)"},children:"▾"})]}),c&&r.jsx(tR,{agents:t,activeAgentId:a,focusedAgentId:d??a,onFocusAgent:f,onSwitch:b,onOpenSetup:S=>{i(S),y()},onClose:y})]})}const yb="vskill-ccode-banner-dismissed",uR=new Set(["claude-cli","claude-code"]);function dR(){try{return sessionStorage.getItem(yb)==="true"}catch{return!1}}function fR(){try{sessionStorage.setItem(yb,"true")}catch{}}function pR({activeAgentId:t}){const[a,s]=m.useState(()=>dR()),i=m.useCallback(()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:open-setup-drawer",{detail:{provider:"claude-code"}}))},[]),c=m.useCallback(()=>{fR(),s(!0)},[]);return!t||!uR.has(t)||a?null:r.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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--color-ok, #22c55e)",marginTop:6,flexShrink:0}}),r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsxs("span",{children:[le.claudeCodeLabel.firstUseBanner," "]}),r.jsx("button",{type:"button","data-testid":"claude-code-first-use-banner-learn-more",onClick:i,style:{background:"transparent",border:"none",padding:0,color:"var(--color-accent, var(--accent-surface))",cursor:"pointer",textDecoration:"underline",fontFamily:"inherit",fontSize:"inherit"},children:le.claudeCodeLabel.learnMore})]}),r.jsx("button",{type:"button","data-testid":"claude-code-first-use-banner-dismiss",onClick:c,"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 mR(){const[t,a]=m.useState(null),[s,i]=m.useState("loading"),[c,u]=m.useState(null),d=m.useCallback(async()=>{try{const f=await ke.getAgents();a(f),i("ready"),u(null)}catch(f){i("error"),u(f.message)}},[]);return m.useEffect(()=>{d()},[d]),m.useEffect(()=>{const f=()=>void d();return window.addEventListener("studio:agent-changed",f),()=>window.removeEventListener("studio:agent-changed",f)},[d]),{status:s,response:t,error:c,refresh:()=>void d()}}const _o="workspace",hR=["skills","agents"];async function xR(){const t=await fetch("/api/workspace");if(!t.ok)throw new Error(`GET /api/workspace failed: ${t.status}`);return await t.json()}async function gR(t){const a=await fetch("/api/workspace/active",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error??`POST /api/workspace/active failed: ${a.status}`)}return await a.json()}async function vR(t){const a=await fetch("/api/workspace/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error??`POST /api/workspace/projects failed: ${a.status}`)}return await a.json()}async function yR(t){const a=await fetch(`/api/workspace/projects/${encodeURIComponent(t)}`,{method:"DELETE"});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error??`DELETE /api/workspace/projects/${t} failed: ${a.status}`)}return await a.json()}function nf(){for(const t of hR)In(t)}function bR(){const{data:t,loading:a,error:s,revalidate:i}=qa(_o,xR),c=t,u=c==null?void 0:c.projects.find(h=>h.id===c.activeProjectId),d=m.useCallback(async h=>{await gR(h),In(_o),nf()},[]),f=m.useCallback(async h=>{await vR(h),In(_o),nf()},[]),x=m.useCallback(async h=>{await yR(h),In(_o),nf()},[]);return{workspace:c,activeProject:u,loading:a,error:s,switchProject:d,addProject:f,removeProject:x,revalidate:i}}function jR({workspace:t,onSwitch:a,onAdd:s,onRemove:i,isPathStale:c}){const[u,d]=m.useState(!1),[f,x]=m.useState(!1),[h,v]=m.useState(""),[y,b]=m.useState(null),[S,w]=m.useState(null),[E,k]=m.useState(null),[N,T]=m.useState(!1),A=m.useRef(null),B=(t==null?void 0:t.projects)??[],z=B.find(L=>L.id===(t==null?void 0:t.activeProjectId));m.useEffect(()=>{if(!u)return;function L(_){A.current&&!A.current.contains(_.target)&&(d(!1),x(!1),b(null))}return document.addEventListener("mousedown",L),()=>document.removeEventListener("mousedown",L)},[u]);async function P(){b(null);const L=h.trim();if(!L){b("Paste an absolute path (e.g. /Users/you/projects/my-skill)");return}if(!L.startsWith("/")&&!/^[A-Za-z]:[\\/]/.test(L)){b("Path must be absolute. In Terminal, cd to the folder and run: pwd — then paste the result here.");return}try{await s({path:L}),v(""),x(!1)}catch(_){const H=_ instanceof Error?_.message:String(_);/does not exist/i.test(H)?b(`Path not found on disk: ${L}`):/Duplicate/i.test(H)?b("That project is already registered."):b(H)}}async function C(){if(b(null),typeof window<"u"&&"showDirectoryPicker"in window)try{const L=await window.showDirectoryPicker();v(L.name),x(!0)}catch{}else x(!0)}function O(L){if(L.length<=50)return L;const _=L.split("/");return _.length<=4?L:`${_.slice(0,3).join("/")}/…/${_.slice(-2).join("/")}`}return r.jsxs("div",{ref:A,"data-vskill-project-picker":!0,style:{position:"relative",display:"inline-block"},children:[r.jsxs("button",{type:"button",onClick:()=>d(L=>!L),"aria-expanded":u,"aria-haspopup":"menu",title:(z==null?void 0:z.path)??"No project selected",style:{display:"flex",alignItems:"center",gap:8,padding:"4px 10px",border:"1px solid transparent",borderRadius:6,background:u?"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:[r.jsx("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",flexShrink:0,backgroundColor:(z==null?void 0:z.colorDot)??"var(--text-tertiary, #999)"}}),r.jsx("span",{style:{maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z?z.name:"No project"}),r.jsx("span",{"aria-hidden":!0,style:{fontSize:10,color:"var(--text-tertiary, #999)",marginLeft:2},children:u?"▴":"▾"})]}),u&&r.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:[B.length===0&&r.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."}),B.length>0&&r.jsx("ul",{role:"none",style:{listStyle:"none",margin:0,padding:4,maxHeight:320,overflowY:"auto"},children:B.map(L=>{const _=c?c(L.path):!1,H=L.id===(t==null?void 0:t.activeProjectId),W=S===L.id;return r.jsxs("li",{role:"menuitem","data-stale":_?"true":"false",onMouseEnter:()=>w(L.id),onMouseLeave:()=>w(q=>q===L.id?null:q),onClick:()=>{if(!_){if(H){d(!1);return}k(L)}},style:{display:"flex",alignItems:"center",gap:10,padding:"8px 10px",borderRadius:6,cursor:_?"not-allowed":"pointer",background:W&&!_?"var(--surface-2, rgba(0,0,0,0.04))":H?"var(--surface-1, rgba(0,0,0,0.02))":"transparent",opacity:_?.5:1,transition:"background-color 120ms ease"},children:[r.jsx("span",{"aria-hidden":!0,style:{width:10,height:10,borderRadius:"50%",flexShrink:0,backgroundColor:L.colorDot,boxShadow:H?"0 0 0 2px color-mix(in oklch, currentColor 20%, transparent)":"none"}}),r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:13,fontWeight:H?600:500,color:"var(--text-primary)",lineHeight:1.3},children:[r.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:L.name}),H&&r.jsx("span",{"aria-label":"Active",style:{fontSize:10,color:"var(--color-action, #2F5B8E)",letterSpacing:"0.05em",textTransform:"uppercase",fontWeight:600},children:"Active"})]}),r.jsx("div",{title:L.path,style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-tertiary)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:O(L.path)}),_&&r.jsx("div",{style:{fontSize:10,color:"var(--color-own, #b45309)",marginTop:2},children:"Path no longer exists"})]}),r.jsx("button",{type:"button","aria-label":`Remove ${L.name}`,onClick:q=>{q.stopPropagation(),i(L.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:W?1:0,transition:"opacity 120ms ease, color 120ms ease, background-color 120ms ease",flexShrink:0},onMouseEnter:q=>{q.currentTarget.style.color="var(--color-error, #b91c1c)",q.currentTarget.style.backgroundColor="color-mix(in oklch, var(--color-error, #b91c1c) 10%, transparent)"},onMouseLeave:q=>{q.currentTarget.style.color="var(--text-tertiary)",q.currentTarget.style.backgroundColor="transparent"},children:r.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:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),r.jsx("path",{d:"M10 11v6"}),r.jsx("path",{d:"M14 11v6"}),r.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]},L.id)})}),r.jsxs("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",padding:f?8:6},children:[!f&&r.jsxs("button",{type:"button",onClick:()=>void C(),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:L=>{L.currentTarget.style.backgroundColor="color-mix(in oklch, var(--color-action, #2F5B8E) 10%, transparent)"},onMouseLeave:L=>{L.currentTarget.style.backgroundColor="transparent"},children:[r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Add project"]}),f&&r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[r.jsx("input",{type:"text",value:h,onChange:L=>v(L.target.value),onKeyDown:L=>{L.key==="Enter"&&P(),L.key==="Escape"&&(x(!1),b(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"}}),r.jsxs("div",{style:{display:"flex",gap:6,justifyContent:"flex-end"},children:[r.jsx("button",{type:"button",onClick:()=>{x(!1),b(null),v("")},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"}),r.jsx("button",{type:"button",onClick:()=>void P(),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"})]}),y&&r.jsx("div",{style:{fontSize:11,color:"var(--color-error, #b91c1c)"},children:y})]})]})]}),E&&r.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Switch project instructions",style:{position:"fixed",inset:0,zIndex:80,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>k(null),children:[r.jsx("div",{style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.40)"}}),r.jsxs("div",{onClick:L=>L.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:[r.jsxs("h2",{style:{margin:0,fontSize:16,fontWeight:600,fontFamily:"var(--font-serif, ui-serif)",marginBottom:8},children:["Switch to ",E.name]}),r.jsx("p",{style:{fontSize:13,color:"var(--text-secondary)",lineHeight:1.5,margin:0,marginBottom:12},children:"Skill Studio's skill scanner reads from the folder it was launched in, so switching projects from the browser isn't possible. Quit this server and relaunch from the target folder:"}),r.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:`cd "${E.path}" && npx vskill@latest studio`}),r.jsxs("div",{style:{display:"flex",gap:8,marginTop:14,justifyContent:"flex-end"},children:[r.jsx("button",{type:"button",onClick:async()=>{try{await navigator.clipboard.writeText(`cd "${E.path}" && npx vskill@latest studio`),T(!0),setTimeout(()=>T(!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:N?"Copied!":"Copy command"}),r.jsx("button",{type:"button",onClick:()=>k(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 SR(t,a){const s=a.trim().toLowerCase().split(/\s+/).filter(Boolean);return s.length===0?t:t.filter(i=>{const c=`${i.name} ${i.path}`.toLowerCase();return s.every(u=>c.includes(u))})}function kR({open:t,projects:a,onSwitch:s,onClose:i}){const[c,u]=m.useState(""),[d,f]=m.useState(0),x=m.useMemo(()=>SR(a,c),[a,c]);m.useEffect(()=>{t||(u(""),f(0))},[t]),m.useEffect(()=>{d>=x.length&&f(0)},[x.length,d]);const h=v=>{if(v.key==="Escape"){v.preventDefault(),i();return}if(v.key==="ArrowDown"){v.preventDefault(),f(y=>Math.min(y+1,Math.max(x.length-1,0)));return}if(v.key==="ArrowUp"){v.preventDefault(),f(y=>Math.max(y-1,0));return}if(v.key==="Enter"){v.preventDefault();const y=x[d];y&&(s(y.id),i())}};return t?r.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:[r.jsx("div",{className:"absolute inset-0 bg-black/30",onClick:i}),r.jsxs("div",{className:"relative w-[520px] max-w-[92vw] bg-background border rounded shadow-lg",children:[r.jsx("input",{type:"text",autoFocus:!0,value:c,onChange:v=>u(v.target.value),onKeyDown:h,placeholder:"Switch project…",className:"w-full px-3 py-2 text-sm border-b outline-none"}),r.jsxs("ul",{role:"listbox",className:"max-h-80 overflow-auto",children:[x.length===0&&r.jsx("li",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No matches."}),x.map((v,y)=>r.jsxs("li",{role:"option","aria-selected":y===d,"data-highlighted":y===d,className:["flex items-center gap-2 px-3 py-2 text-sm cursor-pointer",y===d?"bg-muted":""].join(" "),onMouseEnter:()=>f(y),onClick:()=>{s(v.id),i()},children:[r.jsx("span",{"aria-hidden":!0,className:"inline-block w-2 h-2 rounded-full",style:{backgroundColor:v.colorDot}}),r.jsxs("span",{className:"flex-1",children:[r.jsx("span",{className:"vskill-palette-name",children:v.name}),r.jsx("span",{className:"ml-2 vskill-palette-path text-xs font-mono text-muted-foreground",children:v.path})]})]},v.id))]})]})]}):null}const yv=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function wR({open:t,onClose:a,initialMode:s="standalone",isClaudeCode:i,projectRoot:c,onCreated:u}){const[d,f]=m.useState("destination"),[x,h]=m.useState(s),[v,y]=m.useState(""),[b,S]=m.useState(""),[w,E]=m.useState(""),[k,N]=m.useState([]),[T,A]=m.useState(!1),[B,z]=m.useState(null);if(m.useEffect(()=>{t&&(f("destination"),h(s),y(""),S(""),E(""),z(null))},[t,s]),m.useEffect(()=>{if(!t)return;let $=!0;return fetch("/api/authoring/plugins").then(D=>D.json()).then(D=>{$&&N(D.plugins??[])}).catch(()=>{}),()=>{$=!1}},[t]),m.useEffect(()=>{if(!t)return;function $(D){D.key==="Escape"&&(D.preventDefault(),a())}return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[t,a]),!t)return null;const P=k.length>0,C=i&&P,O=i,L=yv.test(v),_=x==="existing-plugin"?b.length>0:yv.test(b),H=!T&&L&&(x==="standalone"||_),W=CR(c,x,b,v);async function q(){z(null),A(!0);try{const I=new URLSearchParams;I.set("mode",x),I.set("skillName",v),b&&I.set("pluginName",b);const F=await fetch(`/api/authoring/skill-exists?${I.toString()}`),J=await F.json();if(!F.ok){z(J.error??`Check failed: ${F.status}`);return}if(J.exists){z(`Skill '${v}' already exists${J.path?` at ${J.path}`:""}`);return}}catch(I){z(I instanceof Error?I.message:String(I));return}finally{A(!1)}const $=new URLSearchParams;$.set("mode",x),$.set("skillName",v),w.trim()&&$.set("description",w.trim()),b&&$.set("pluginName",b);const D=`#/create?${$.toString()}`;typeof window<"u"&&(window.location.hash=D),a()}async function ee(){z(null),A(!0);try{const $=await fetch("/api/authoring/create-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:x,skillName:v,description:w.trim()||void 0,pluginName:x==="standalone"?void 0:b})}),D=await $.json();if(!$.ok||!D.ok){z(D.error??`Create failed: ${$.status}`);return}In("skills"),u==null||u({mode:x,skillName:v,pluginName:D.pluginName??null,skillMdPath:D.skillMdPath}),a()}catch($){z($ instanceof Error?$.message:String($))}finally{A(!1)}}return r.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:[r.jsx("div",{onClick:a,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.45)"}}),r.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:[r.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:[r.jsx("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text-primary)",fontFamily:"var(--font-serif, ui-serif)",letterSpacing:"0.01em"},children:d==="destination"?"Create a skill":"Name and describe"}),r.jsxs("div",{style:{fontSize:11,color:"var(--text-tertiary)",marginLeft:"auto",fontVariantNumeric:"tabular-nums"},children:["Step ",d==="destination"?"1":"2"," of 2"]})]}),d==="destination"&&r.jsxs("div",{style:{padding:14,display:"flex",flexDirection:"column",gap:10},children:[r.jsx(rf,{title:"Standalone skill",subtitle:"A single skill in this project",description:"Lives at <project>/skills/<name>/SKILL.md. Works with every agent.",icon:"📄",selected:x==="standalone",onClick:()=>h("standalone")}),r.jsx(rf,{title:"Add to existing plugin",subtitle:C?`${k.length} plugin source${k.length===1?"":"s"} in this project`:i?"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:!C,selected:x==="existing-plugin",onClick:()=>C&&h("existing-plugin")}),r.jsx(rf,{title:"Plugin (multi-skill)",subtitle:O?"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:!O,selected:x==="new-plugin",onClick:()=>O&&h("new-plugin")})]}),d==="details"&&r.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12},children:[x==="new-plugin"&&r.jsx(Oo,{label:"Plugin name",hint:"kebab-case",children:r.jsx("input",{type:"text",value:b,onChange:$=>S($.target.value.trim()),placeholder:"my-first-plugin",autoFocus:!0,style:Bo(!b||_)})}),x==="existing-plugin"&&r.jsx(Oo,{label:"Plugin",children:r.jsxs("select",{value:b,onChange:$=>S($.target.value),style:{...Bo(!0),fontFamily:"var(--font-mono)"},children:[r.jsx("option",{value:"",children:"Select a plugin…"}),k.map($=>r.jsx("option",{value:$.name,children:$.name},$.path))]})}),r.jsx(Oo,{label:"Skill name",hint:"kebab-case",children:r.jsx("input",{type:"text",value:v,onChange:$=>y($.target.value.trim()),placeholder:"my-new-skill",autoFocus:x!=="new-plugin",style:Bo(!v||L)})}),r.jsx(Oo,{label:"Description",hint:"One short sentence — shown in frontmatter",children:r.jsx("textarea",{value:w,onChange:$=>E($.target.value),rows:2,placeholder:"Does a thing when Claude needs X",style:{...Bo(!0),resize:"vertical",minHeight:52,fontFamily:"var(--font-sans)"}})}),W&&r.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:[r.jsx("div",{style:{fontSize:10,color:"var(--text-tertiary)",marginBottom:2,fontFamily:"var(--font-sans)"},children:"Will create:"}),W.map(($,D)=>r.jsx("div",{children:$},D))]}),B&&r.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:B})]}),r.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:[r.jsx("button",{type:"button",onClick:a,style:af,children:"Cancel"}),d==="destination"&&r.jsx("button",{type:"button",onClick:()=>f("details"),style:bv,children:"Continue →"}),d==="details"&&r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button",onClick:()=>f("destination"),style:af,children:"← Back"}),r.jsx("button",{type:"button",onClick:()=>void q(),disabled:!H,style:{...af,opacity:H?1:.5,cursor:H?"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"}),r.jsx("button",{type:"button",onClick:()=>void ee(),disabled:!H,style:{...bv,opacity:H?1:.5,cursor:H?"pointer":"not-allowed"},title:"Creates an empty SKILL.md scaffold you can fill in by hand",children:T?"Creating…":"Create empty scaffold"})]})]})]})]})}function rf({title:t,subtitle:a,description:s,icon:i,selected:c,disabled:u,onClick:d}){return r.jsxs("button",{type:"button",onClick:d,disabled:u,"aria-pressed":c,style:{display:"flex",gap:12,padding:"12px 14px",textAlign:"left",borderRadius:8,border:c?"2px solid var(--color-accent, #2f6f8f)":"1px solid var(--border-default, rgba(0,0,0,0.12))",background:c?"color-mix(in oklch, var(--color-accent, #2f6f8f) 8%, var(--color-paper, #fff))":u?"var(--surface-1, rgba(0,0,0,0.02))":"var(--color-paper, #fff)",color:u?"var(--text-tertiary)":"var(--text-primary)",cursor:u?"not-allowed":"pointer",opacity:u?.6:1,fontFamily:"inherit",width:"100%",transition:"border-color 120ms ease, background-color 120ms ease"},children:[r.jsx("span",{"aria-hidden":!0,style:{fontSize:22,lineHeight:1,marginTop:2},children:i}),r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsx("div",{style:{fontSize:14,fontWeight:600,lineHeight:1.3},children:t}),r.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",marginTop:2,textTransform:"uppercase",letterSpacing:"0.04em"},children:a}),r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",marginTop:6,lineHeight:1.5},children:s})]})]})}function Oo({label:t,hint:a,children:s}){return r.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:4},children:[r.jsxs("span",{style:{display:"flex",alignItems:"baseline",gap:8},children:[r.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:t}),a&&r.jsx("span",{style:{fontSize:11,color:"var(--text-tertiary)"},children:a})]}),s]})}function Bo(t){return{width:"100%",padding:"7px 10px",fontSize:13,fontFamily:"var(--font-mono)",border:`1px solid ${t?"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 bv={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"},af={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 CR(t,a,s,i){const c=i||"<skill-name>",u=s||"<plugin-name>",d=t||"<project>";return a==="standalone"?[`${d}/skills/${c}/SKILL.md`]:a==="existing-plugin"?[`${d}/${u}/skills/${c}/SKILL.md`]:a==="new-plugin"?[`${d}/${u}/.claude-plugin/plugin.json`,`${d}/${u}/skills/${c}/SKILL.md`]:null}function bb(t){return t.trim().toLowerCase()}function ER(t,a){const s=bb(a);return s?t.filter(i=>i.name.toLowerCase().includes(s)||i.source.toLowerCase().includes(s)):t}function NR(t,a){const s=bb(a);return s?t.filter(i=>[i.name,i.description??"",i.category??"",i.author??""].join(" ").toLowerCase().includes(s)):t}function TR({open:t,onClose:a,onInstall:s,onUninstall:i,installedNames:c}){const[u,d]=m.useState(null),[f,x]=m.useState([]),[h,v]=m.useState(null),[y,b]=m.useState(null),[S,w]=m.useState(!1),[E,k]=m.useState(null),[N,T]=m.useState(""),[A,B]=m.useState("");m.useEffect(()=>{h?T(""):B("")},[h]);const z=m.useMemo(()=>ER(f,N),[f,N]),P=m.useMemo(()=>NR((y==null?void 0:y.plugins)??[],A),[y,A]);return m.useEffect(()=>{t&&(w(!0),k(null),fetch("/api/plugins/marketplaces").then(C=>C.json()).then(C=>{if(C.error)throw new Error(C.error);x(C.marketplaces??[])}).catch(C=>k(C instanceof Error?C.message:String(C))).finally(()=>w(!1)))},[t]),m.useEffect(()=>{if(!h){b(null);return}w(!0),k(null),fetch(`/api/plugins/marketplaces/${encodeURIComponent(h)}`).then(C=>C.json()).then(C=>{if(C.error)throw new Error(C.error);b(C)}).catch(C=>k(C instanceof Error?C.message:String(C))).finally(()=>w(!1))},[h]),m.useEffect(()=>{if(!t)return;function C(O){O.key==="Escape"&&a()}return document.addEventListener("keydown",C),()=>document.removeEventListener("keydown",C)},[t,a]),t?r.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Plugin marketplace","data-vskill-marketplace-drawer":!0,style:{position:"fixed",inset:0,zIndex:80},children:[r.jsx("div",{onClick:a,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.38)"}}),r.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:[r.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:[h&&r.jsx("button",{type:"button",onClick:()=>v(null),"aria-label":"Back to marketplaces",style:{border:"none",background:"transparent",fontSize:14,color:"var(--text-secondary)",cursor:"pointer",padding:0},children:"← Back"}),r.jsx("h2",{style:{margin:0,fontSize:15,fontWeight:600,color:"var(--text-primary)",fontFamily:"var(--font-serif, ui-serif)",flex:1},children:h?(y==null?void 0:y.name)??h:"Browse plugins"}),r.jsx("button",{type:"button",onClick:a,"aria-label":"Close",style:{border:"none",background:"transparent",fontSize:16,color:"var(--text-secondary)",cursor:"pointer",padding:"4px 6px"},children:"✕"})]}),r.jsxs("div",{style:{flex:1,overflowY:"auto",padding:12},children:[S&&r.jsx("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:"Loading…"}),E&&r.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:E}),!h&&!S&&f.length===0&&!E&&r.jsx(RR,{}),!h&&f.length>0&&r.jsx(jv,{value:N,onChange:T,placeholder:"Search marketplaces…",ariaLabel:"Search marketplaces",testId:"marketplace-search"}),!h&&f.length>0&&z.length===0&&r.jsxs("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:["No marketplaces match “",N,"”."]}),!h&&z.map(C=>r.jsxs("button",{type:"button",onClick:()=>v(C.name),style:LR,onMouseEnter:O=>{O.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.04))"},onMouseLeave:O=>{O.currentTarget.style.background="transparent"},children:[r.jsx("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:C.name}),r.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-mono)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:C.source})]},C.name)),h&&y&&r.jsxs(r.Fragment,{children:[y.description&&r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",padding:"0 6px 12px",lineHeight:1.5},children:y.description}),y.plugins.length===0&&r.jsx("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:"This marketplace has no plugins catalogued yet."}),y.plugins.length>0&&r.jsx(jv,{value:A,onChange:B,placeholder:"Search plugins…",ariaLabel:"Search plugins",testId:"plugin-search"}),y.plugins.length>0&&P.length===0&&r.jsxs("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:["No plugins match “",A,"”."]}),P.map(C=>{const O=c.has(C.name);return r.jsx("div",{style:{padding:"10px 8px",borderBottom:"1px solid var(--border-subtle, rgba(0,0,0,0.05))"},children:r.jsxs("div",{style:{display:"flex",alignItems:"start",gap:8},children:[r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsxs("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)",display:"flex",alignItems:"baseline",gap:8},children:[C.name,C.version&&r.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-tertiary)"},children:C.version}),C.category&&r.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:C.category})]}),C.description&&r.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:4,lineHeight:1.5},children:C.description})]}),O&&i?r.jsx("button",{type:"button",disabled:u===C.name,onClick:async()=>{d(C.name);try{await i(C.name)}finally{d(null)}},"aria-label":`Uninstall ${C.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:u===C.name?"wait":"pointer",opacity:u===C.name?.6:1,fontFamily:"inherit"},children:u===C.name?"Uninstalling…":"Uninstall"}):r.jsx("button",{type:"button",disabled:O,onClick:()=>s(C.name,h),style:{flexShrink:0,padding:"5px 12px",fontSize:12,fontWeight:600,border:O?"none":"1px solid var(--color-action, #2F5B8E)",borderRadius:4,background:O?"var(--surface-2, rgba(0,0,0,0.05))":"var(--color-action, #2F5B8E)",color:O?"var(--text-tertiary)":"var(--color-action-ink, #FFFFFF)",cursor:O?"default":"pointer",fontFamily:"inherit",boxShadow:O?"none":"0 1px 2px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.12)"},children:O?"Installed":"Install"})]})},C.name)})]})]}),!h&&r.jsx("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",padding:12},children:r.jsx(AR,{onAdded:()=>{In("marketplaces"),fetch("/api/plugins/marketplaces").then(C=>C.json()).then(C=>x(C.marketplaces??[]))}})})]})]}):null}function jv({value:t,onChange:a,placeholder:s,ariaLabel:i,testId:c}){return r.jsx("div",{style:{padding:"0 4px 10px"},children:r.jsx("input",{type:"search",value:t,onChange:u=>a(u.target.value),placeholder:s,"aria-label":i,"data-testid":c,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 RR(){return r.jsxs("div",{style:{padding:20,fontSize:12,color:"var(--text-tertiary)",lineHeight:1.6},children:["No marketplaces configured yet. Add one below — examples:",r.jsxs("ul",{style:{marginTop:8,paddingLeft:16},children:[r.jsx("li",{children:r.jsx("code",{children:"anthropics/claude-plugins-official"})}),r.jsx("li",{children:r.jsx("code",{children:"openai/codex-plugin-cc"})})]})]})}function AR({onAdded:t}){const[a,s]=m.useState(""),[i,c]=m.useState(!1),[u,d]=m.useState(null);async function f(){const x=a.trim();if(x){c(!0),d(null);try{const h=await fetch("/api/plugins/marketplaces",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:x})}),v=await h.json().catch(()=>({}));if(!h.ok||!v.ok){d(v.error??`Add failed (${h.status})`);return}s(""),t()}catch(h){d(h instanceof Error?h.message:String(h))}finally{c(!1)}}}return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[r.jsx("label",{style:{fontSize:11,color:"var(--text-tertiary)",fontWeight:500},children:"Add marketplace (GitHub owner/repo, URL, or path)"}),r.jsxs("div",{style:{display:"flex",gap:6},children:[r.jsx("input",{type:"text",value:a,onChange:x=>s(x.target.value),onKeyDown:x=>{x.key==="Enter"&&f()},placeholder:"anthropics/claude-plugins-official",disabled:i,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"}}),r.jsx("button",{type:"button",onClick:()=>void f(),disabled:i||!a.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:i||!a.trim()?"not-allowed":"pointer",opacity:i||!a.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:i?"Adding…":"Add"})]}),u&&r.jsx("div",{style:{fontSize:11,color:"var(--color-error, #b91c1c)"},children:u})]})}const LR={display:"block",width:"100%",textAlign:"left",padding:"10px 12px",border:"none",borderRadius:6,background:"transparent",cursor:"pointer",fontFamily:"inherit",marginBottom:2},lf=12;function MR({job:t,onDone:a}){const[s,i]=m.useState([]),[c,u]=m.useState("running"),[d,f]=m.useState(!1);if(m.useEffect(()=>{if(!t)return;i([]),u("running"),f(!1);const y=new AbortController;let b=[],S="running";return(async()=>{try{const w=await fetch("/api/plugins/install/stream",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({plugin:t.ref}),signal:y.signal});if(!w.ok||!w.body){u("failed"),a({ok:!1,code:w.status,lines:[`HTTP ${w.status}`]});return}const E=w.body.getReader(),k=new TextDecoder;let N="";for(;;){const{value:T,done:A}=await E.read();if(A)break;N+=k.decode(T,{stream:!0});const B=N.split(/\n\n/);N=B.pop()??"";for(const z of B){const P=z.match(/^data:\s*(.*)$/m);if(P)try{const C=JSON.parse(P[1]);C.type==="stdout"&&C.line?(b=[...b,C.line].slice(-lf),i(b)):C.type==="stderr"&&C.line?(b=[...b,`⚠ ${C.line}`].slice(-lf),i(b)):C.type==="done"?(S=C.ok?"ok":"failed",u(S),ty(),In("skills"),a({ok:C.ok??!1,code:C.code??null,lines:b})):C.type==="error"&&C.error&&(b=[...b,`✘ ${C.error}`].slice(-lf),i(b))}catch{}}}S==="running"&&a({ok:!0,code:0,lines:b})}catch(w){if(w.name==="AbortError")return;u("failed"),a({ok:!1,code:null,lines:[...b,w instanceof Error?w.message:String(w)]})}})(),()=>y.abort()},[t==null?void 0:t.ref]),!t)return null;const x=c==="ok"?"var(--color-installed, #2F6A4A)":c==="failed"?"var(--color-error, #b91c1c)":"var(--color-accent, #2f6f8f)",h=c==="ok"?"✔":c==="failed"?"✘":"…",v=c==="ok"?"Installed":c==="failed"?"Install failed":"Installing";return r.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 ${x}`,borderRadius:6,boxShadow:"0 10px 20px -6px rgba(0,0,0,0.18)",zIndex:90,fontFamily:"var(--font-sans)",overflow:"hidden"},children:[r.jsxs("button",{type:"button",onClick:()=>f(y=>!y),style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"10px 12px",border:"none",background:"transparent",cursor:"pointer",textAlign:"left",fontFamily:"inherit"},children:[r.jsx("span",{"aria-hidden":!0,style:{fontSize:16,color:x,width:16,textAlign:"center"},children:c==="running"?r.jsx(zR,{}):h}),r.jsxs("span",{style:{flex:1,minWidth:0},children:[r.jsxs("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:[v,": ",t.plugin,r.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-primary)",marginLeft:4},children:["@",t.marketplace]})]}),!d&&s.length>0&&r.jsx("span",{style:{display:"block",fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-primary)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s[s.length-1]})]}),r.jsx("span",{"aria-hidden":!0,style:{fontSize:10,color:"var(--text-primary)"},children:d?"▾":"▸"})]}),d&&r.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:s.length===0?"Waiting for output…":s.join(`
|
|
122
|
-
`)})]})}function zR(){return r.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:r.jsx("style",{children:"@keyframes vskill-spin { to { transform: rotate(360deg); } }"})})}const DR=3e3,_R={anthropic:"Anthropic",openai:"OpenAI",openrouter:"OpenRouter"};function Sv(t){return t==="anthropic"||t==="openai"||t==="openrouter"}function OR(){const{toast:t}=rc(),a=m.useRef(new Map),s=m.useCallback(i=>{if(!Sv(i.provider))return;const c=Date.now(),u=a.current.get(i.provider)??0;if(c-u<DR)return;a.current.set(i.provider,c);const d=_R[i.provider];t({message:`${d} 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:i.provider}}))}}})},[t]);return m.useEffect(()=>{function i(c){const u=c.detail;!u||!Sv(u.provider)||s({provider:u.provider})}return window.addEventListener("studio:api-key-error",i),()=>window.removeEventListener("studio:api-key-error",i)},[s]),{report:s}}const jb="vskill.studio.prefs";function Sb(){try{return typeof window>"u"?null:window.localStorage??null}catch{return null}}function kb(){const t=Sb();if(!t)return{};try{const a=t.getItem(jb);if(!a)return{};const s=JSON.parse(a);return s&&typeof s=="object"&&!Array.isArray(s)?s:{}}catch{return{}}}function BR(t,a){const s=Sb();if(s)try{const c={...kb(),[t]:a};s.setItem(jb,JSON.stringify(c))}catch{}}function IR(t,a){const i=kb()[t];return i===void 0?a:i}const kv={open:!1,x:0,y:0,skill:null};function $R(t,a){return{open:!0,x:t.clientX,y:t.clientY,skill:a}}function Ha(t,a="info"){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function UR(t){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:t}}))}function HR(t,a){var s;switch(t){case"copy-path":try{(s=navigator.clipboard)==null||s.writeText(a.dir)}catch{Ha(le.toasts.permissionDenied,"error");return}Ha(le.toasts.pathCopied,"info");return;case"open":case"reveal":case"edit":Ha(le.actions.editPlaceholder,"info");return;case"run-benchmark":Ha(le.toasts.benchmarkQueued,"info");return;case"duplicate":Ha(le.toasts.skillDuplicated,"info");return;case"update":Ha(le.toasts.skillUpdated,"info");return;case"uninstall":Ha(le.actions.editPlaceholder,"info");return;case"delete":UR(a);return;default:return}}function PR(t){return t.startsWith("#/create")}function VR(t){return t.startsWith("#/updates")}function wb(t){const[a,s]=m.useState(()=>typeof window<"u"&&t(window.location.hash));return m.useEffect(()=>{function i(){s(t(window.location.hash))}return window.addEventListener("hashchange",i),i(),()=>window.removeEventListener("hashchange",i)},[]),a}function FR(){return wb(PR)}function GR(){return wb(VR)}function WR(){var i,c;if(typeof navigator>"u")return"⌘⇧K";const t=((i=navigator.platform)==null?void 0:i.toUpperCase())??"",a=((c=navigator.userAgent)==null?void 0:c.toUpperCase())??"";return t.includes("MAC")||a.includes("MAC")?"⌘⇧K":"Ctrl+Shift+K"}function qR(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function YR(){const[t,a]=m.useState("⌘⇧K");m.useEffect(()=>{a(WR())},[]);const s=qR();function i(){window.dispatchEvent(new CustomEvent("openFindSkills"))}return r.jsxs("button",{type:"button",onClick:i,"aria-label":`Find verified skills — opens search (${t})`,title:`Find verified skills (${t})`,"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:[r.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:[r.jsx("circle",{cx:"11",cy:"11",r:"8"}),r.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),r.jsx("span",{children:"Find skills"}),r.jsx("kbd",{"data-animated":s?"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:t})]})}const KR=m.lazy(()=>Vl(()=>import("./FindSkillsPalette-Bh0a8a79.js"),__vite__mapDeps([2,1])).then(t=>({default:t.FindSkillsPalette}))),XR=m.lazy(()=>Vl(()=>import("./SkillDetailPanel-oe2j67nh.js"),__vite__mapDeps([3,4,1])).then(t=>({default:t.SkillDetailPanel}))),QR=m.lazy(()=>Vl(()=>import("./CreateSkillPage-SFmkQaPz.js"),__vite__mapDeps([5,1])).then(t=>({default:t.CreateSkillPage}))),ZR=m.lazy(()=>Vl(()=>Promise.resolve().then(()=>XN),void 0).then(t=>({default:t.UpdatesPanel})));function JR(){return r.jsx(YS,{children:r.jsx(GS,{children:r.jsxs(W2,{children:[r.jsx(e4,{}),r.jsx(UT,{})]})})})}function e4(){var jr,rn;const{state:t,selectSkill:a,clearSelection:s,refreshSkills:i,outdatedByOrigin:c,revealSkill:u,clearReveal:d}=cr(),{config:f}=Ya(),{resolvedTheme:x,setTheme:h}=ey(),{toast:v}=rc(),[y,b]=m.useState(()=>NC()),[S]=m.useState(!0),[w,E]=m.useState(!1),[k,N]=m.useState(!1),[T,A]=m.useState(()=>typeof window>"u"?"overview":Ef(window.location.search).tab),[B,z]=m.useState(()=>{if(typeof window>"u")return"";const ae=Ef(window.location.search);return ae.mode?ae.mode:ae.view?ae.view:gb(ae.tab,window.location.search)}),P=m.useCallback(ae=>{A(Se=>(Se!==ae&&z(Ks(ae)),ae))},[]);m.useEffect(()=>{if(typeof window>"u")return;const ae=()=>{const Se=new URLSearchParams(window.location.search),Te=Se.get("tab"),$t=Se.get("panel"),Ct=Zo(Te)??Zo($t);if(!Ct)return;const Jt=new URLSearchParams(window.location.search);Jt.delete("panel"),Jt.delete("sub"),Ct.tab==="overview"?Jt.delete("tab"):Jt.set("tab",Ct.tab),Jt.delete("mode"),Jt.delete("view"),Ct.mode&&Jt.set("mode",Ct.mode),Ct.view&&Jt.set("view",Ct.view);const Vr=Jt.toString(),dr=`${window.location.pathname}${Vr?"?"+Vr:""}${window.location.hash}`,nt=`${window.location.pathname}${window.location.search}${window.location.hash}`;dr!==nt&&window.history.replaceState(null,"",dr),A(Ct.tab),Ct.mode?z(Ct.mode):Ct.view?z(Ct.view):z(Ks(Ct.tab))};return ae(),window.addEventListener("popstate",ae),()=>window.removeEventListener("popstate",ae)},[]),m.useEffect(()=>{if(typeof window>"u")return;const ae=new URLSearchParams(window.location.search);ae.delete("panel"),ae.delete("sub"),T==="overview"?ae.delete("tab"):ae.set("tab",T),ae.delete("mode"),ae.delete("view"),!(B===Ks(T))&&B&&(T==="run"?ae.set("mode",B):T==="history"&&ae.set("view",B));const Te=ae.toString(),$t=`${window.location.pathname}${Te?"?"+Te:""}${window.location.hash}`,Ct=`${window.location.pathname}${window.location.search}${window.location.hash}`;$t!==Ct&&window.history.replaceState(null,"",$t)},[T,B]);const[C,O]=m.useState(kv),L=m.useCallback((ae,Se)=>{O($R(ae,Se))},[]),_=mR(),[H,W]=m.useState(()=>IR("activeAgent",null)),q=m.useCallback(ae=>{W(ae),BR("activeAgent",ae),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:agent-changed",{detail:{agentId:ae}}))},[]);m.useEffect(()=>{var ae;!H&&((ae=_.response)!=null&&ae.suggested)&&q(_.response.suggested)},[H,(jr=_.response)==null?void 0:jr.suggested,q]);const ee=m.useMemo(()=>_.response?oR(_.response):[],[_.response]),{workspace:$,switchProject:D,addProject:I,removeProject:F,activeProject:J}=bR(),[de,M]=m.useState(!1),[U,K]=m.useState(!1),[Q,ce]=m.useState("standalone"),Z=m.useCallback((ae="standalone")=>{ce(ae),K(!0)},[]);m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Z((Te==null?void 0:Te.mode)??"standalone")}return window.addEventListener("studio:request-create-skill",ae),()=>window.removeEventListener("studio:request-create-skill",ae)},[Z]);const[ie,X]=m.useState(!1),[me,je]=m.useState(null),[Ne,Me]=m.useState(null);m.useEffect(()=>{function ae(){X(!0)}return window.addEventListener("studio:open-marketplace",ae),()=>window.removeEventListener("studio:open-marketplace",ae)},[]);const Fe=m.useMemo(()=>{const ae=new Set;for(const Se of t.skills)Se.source==="plugin"&&Se.pluginName&&ae.add(Se.pluginName);return ae},[t.skills]);vf([{key:"p",meta:!0,handler:ae=>{var Te;const Se=typeof document<"u"?document.activeElement:null;Se&&Se.tagName==="INPUT"||((Te=ae==null?void 0:ae.preventDefault)==null||Te.call(ae),M($t=>!$t))}}],{enabled:!0});const Ue=JT(),De=Ue.open;m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.provider&&De(Te.provider)}return window.addEventListener("studio:open-setup-drawer",ae),()=>window.removeEventListener("studio:open-setup-drawer",ae)},[De]);const Ge=m.useCallback(()=>{O(kv)},[]);m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.message&&v({message:Te.message,severity:Te.severity??"info"})}return window.addEventListener("studio:toast",ae),()=>window.removeEventListener("studio:toast",ae)},[v]),OR();const[ft,oe]=m.useState(!1),[ve,ye]=m.useState(void 0);m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;ye(Te==null?void 0:Te.provider),oe(!0)}return window.addEventListener("studio:open-settings",ae),()=>window.removeEventListener("studio:open-settings",ae)},[]),m.useEffect(()=>{document.documentElement.style.setProperty("--sidebar-width",`${y}px`)},[y]),m.useEffect(()=>{function ae(){i()}return window.addEventListener("studio:content-saved",ae),()=>window.removeEventListener("studio:content-saved",ae)},[i]);const[be,Ee]=m.useState(null),[qe,He]=m.useState(()=>new Set),jt=m.useRef(!1),Dt=m.useMemo(()=>tC(),[]),St=m.useCallback(ae=>`${ae.plugin}/${ae.skill}`,[]),At=m.useCallback(ae=>{He(Se=>{const Te=new Set(Se);return Te.add(St(ae)),Te})},[St]),xe=m.useCallback(ae=>{He(Se=>{const Te=new Set(Se);return Te.delete(St(ae)),Te})},[St]),Ze=gv({delayMs:1e4,onCommit:ae=>{i(),xe(ae)},onFailure:(ae,Se)=>{xe(ae),v({message:`Couldn't delete ${ae.skill}: ${Se.message}`,severity:"error",durationMs:0,action:{label:le.actions.retry,onInvoke:()=>{At(ae),Ze.enqueueDelete(ae)}}})}});m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.skill&&Ee(Te.skill)}return window.addEventListener("studio:request-delete",ae),()=>window.removeEventListener("studio:request-delete",ae)},[]);const[Xe,kt]=m.useState(null),_t=gv({delayMs:250,apiCall:(ae,Se)=>api.uninstallSkill(ae,Se),onCommit:ae=>{i(),xe(ae)},onFailure:(ae,Se)=>{xe(ae),v({message:`Couldn't uninstall ${ae.skill}: ${Se.message}`,severity:"error",durationMs:0,action:{label:le.actions.retry,onInvoke:()=>{At(ae),_t.enqueueDelete(ae)}}})}});m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.skill&&kt(Te.skill)}return window.addEventListener("studio:request-uninstall",ae),()=>window.removeEventListener("studio:request-uninstall",ae)},[]);const lt=m.useCallback(()=>{const ae=Xe;if(kt(null),!ae)return;const Se={plugin:ae.plugin,skill:ae.skill};At(Se),_t.enqueueDelete(Se),v({message:`Uninstalled ${ae.skill}. Sent to your ${Dt}.`,severity:"info",durationMs:4e3})},[Xe,At,_t,v,Dt]),jn=m.useCallback(()=>{kt(null)},[]),Yt=m.useCallback(()=>{const ae=be;if(Ee(null),!ae)return;const Se={plugin:ae.plugin,skill:ae.skill};At(Se),Ze.enqueueDelete(Se);const Te=jt.current?"":`Sent to your ${Dt}. Open Trash to restore. `;jt.current=!0,v({message:`${Te}Deleted ${ae.skill}`,severity:"info",durationMs:1e4,action:{label:le.actions.undo,onInvoke:()=>{Ze.cancelDelete(St(Se)),xe(Se)}}})},[be,At,xe,Ze,v,Dt,St]),mn=m.useCallback(()=>{Ee(null)},[]),un=m.useMemo(()=>t.skills.filter(ae=>!qe.has(St(ae))),[t.skills,qe,St]),ur=_C(un,(J==null?void 0:J.path)??null),Tn=m.useMemo(()=>t.selectedSkill?t.skills.find(ae=>ae.plugin===t.selectedSkill.plugin&&ae.skill===t.selectedSkill.skill)??null:null,[t.skills,t.selectedSkill]),Hn=m.useCallback(ae=>{a({plugin:ae.plugin,skill:ae.skill,origin:ae.origin,source:ae.source})},[a]),Rn=m.useMemo(()=>{if(!t.selectedSkill)return"";const ae=t.selectedSkill.origin==="installed"?"Installed":"Own";return`Viewing ${t.selectedSkill.skill} (${ae})`},[t.selectedSkill]),[wt,Be]=m.useState(null);vf([{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:"?",handler:()=>E(ae=>!ae)},{key:"cmd+shift+d",handler:()=>h(x==="light"?"dark":"light")},{key:"ctrl+shift+d",handler:()=>h(x==="light"?"dark":"light")},{key:"cmd+b",handler:()=>N(ae=>!ae)},{key:"ctrl+b",handler:()=>N(ae=>!ae)},{key:"e",handler:()=>v({message:le.actions.editPlaceholder,severity:"info"})}]);const Je=FR(),hn=GR()?r.jsx(m.Suspense,{fallback:r.jsx("div",{style:{padding:40},children:"Loading…"}),children:r.jsx(ZR,{})}):Je?r.jsx(m.Suspense,{fallback:r.jsx("div",{style:{padding:40},children:"Loading…"}),children:r.jsx(QR,{})}):r.jsx(MT,{selectedSkillInfo:Tn,activeDetailTab:T,onDetailTabChange:P,activeDetailSub:B,onDetailSubChange:z,allSkills:t.skills,onSelectSkill:Hn});return r.jsxs(r.Fragment,{children:[r.jsx(KS,{sidebarWidth:y,sidebarHidden:k||t.isMobile&&t.mobileView==="detail",banner:r.jsx(OC,{connected:S}),liveMessage:Rn,topRail:r.jsx(Z2,{projectName:(f==null?void 0:f.projectName)??null,selected:t.selectedSkill,onHome:s,onRequestCreateSkill:()=>Z("standalone"),projectPickerSlot:$&&$.projects.length>0?r.jsx(jR,{workspace:$,onSwitch:D,onAdd:I,onRemove:F}):void 0,findSkillsSlot:r.jsx(YR,{})}),sidebar:r.jsx(gC,{skills:un,selectedKey:t.selectedSkill?{plugin:t.selectedSkill.plugin,skill:t.selectedSkill.skill}:null,onSelect:Hn,isLoading:t.skillsLoading,error:t.skillsError??null,onRetry:i,onContextMenu:L,outdatedByOrigin:c,activeAgentId:H,revealSkillId:t.revealSkillId,onRevealComplete:d,dirtySkillIds:ur,onSkillsChanged:i,topSlot:_.status==="ready"&&ee.length>0?r.jsxs(r.Fragment,{children:[r.jsx(cR,{agents:ee,activeAgentId:H,onActiveAgentChange:q,onOpenSetup:ae=>Ue.open(ae)}),r.jsx(pR,{activeAgentId:H})]}):null}),resizeHandle:r.jsx(RC,{initialWidth:y??Ys,onChange:b}),main:hn,statusBar:r.jsx(ck,{projectPath:(f==null?void 0:f.root)??null,modelName:(f==null?void 0:f.model)??null,health:f!=null&&f.error?"degraded":"ok",providers:(rn=f==null?void 0:f.providers)==null?void 0:rn.map(ae=>{const Se=ae.id;return{id:Se,label:ae.label,available:ae.available,kind:Se==="ollama"||Se==="lm-studio"?"start-service":Se==="anthropic"||Se==="openrouter"?"api-key":"cli-install"}})})}),r.jsx(PT,{open:w,onClose:()=>E(!1)}),r.jsx(qT,{open:Ue.isOpen,providerKey:Ue.providerKey,onClose:Ue.close}),r.jsx(FT,{state:C,onClose:Ge,onAction:(ae,Se)=>HR(ae,Se)}),r.jsx(m.Suspense,{fallback:null,children:r.jsx(KR,{onSelect:ae=>{const Se=ae.name.split("/");Se.length===3&&Be({owner:Se[0],repo:Se[1],slug:Se[2],displayName:ae.displayName??ae.name})}})}),wt&&r.jsx(m.Suspense,{fallback:null,children:r.jsx(XR,{selectedSkill:wt,onClose:()=>Be(null)})}),r.jsx(kR,{open:de,projects:($==null?void 0:$.projects)??[],onSwitch:ae=>{D(ae)},onClose:()=>M(!1)}),r.jsx(wR,{open:U,onClose:()=>K(!1),initialMode:Q,isClaudeCode:H==="claude-code",projectRoot:(J==null?void 0:J.path)??(f==null?void 0:f.projectName)??"",onCreated:ae=>{i(),setTimeout(()=>{u(ae.pluginName??"",ae.skillName)},500)}}),r.jsx(TR,{open:ie,onClose:()=>X(!1),installedNames:Fe,onInstall:(ae,Se)=>{je({plugin:ae,marketplace:Se,ref:`${ae}@${Se}`}),X(!1)},onUninstall:async ae=>{if(await new Promise(Te=>{Me({plugin:ae,resolve:Te})}))try{const Te=await fetch(`/api/plugins/${encodeURIComponent(ae)}/uninstall`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),$t=await Te.json().catch(()=>({}));if(!Te.ok||!$t.ok){v({message:$t.error??`Uninstall failed (${Te.status})`,severity:"error"});return}const Ct=$t.fallback==="orphan-cache-removed"?`Removed orphaned ${ae}.`:`Uninstalled ${ae}.`;v({message:Ct,severity:"success"}),i()}catch(Te){v({message:Te instanceof Error?Te.message:String(Te),severity:"error"})}}}),r.jsx(Xv,{open:ft,onClose:()=>oe(!1),initialProvider:ve,onToast:ae=>v({message:ae,severity:"info"})}),r.jsx(MR,{job:me,onDone:ae=>{ae.ok&&(i(),setTimeout(()=>je(null),3e3))}}),r.jsx(Vo,{open:be!==null,title:be?`Delete "${be.skill}"?`:"",body:`It will be sent to your ${Dt}. You can recover it from there.`,confirmLabel:"Delete",cancelLabel:"Cancel",variant:"destructive",onConfirm:Yt,onCancel:mn}),r.jsx(Vo,{open:Xe!==null,title:Xe?`Uninstall "${Xe.skill}"?`:"",body:`It will be sent to your ${Dt} and the lockfile entry will be removed. You can re-install with vskill install.`,confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onConfirm:lt,onCancel:jn}),r.jsx(Vo,{open:Ne!==null,title:Ne?`Uninstall ${Ne.plugin}?`:"",body:Ne?`This removes the ${Ne.plugin} plugin and all of its skills. You can reinstall it later from the marketplace.`:"",confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onConfirm:()=>{Ne==null||Ne.resolve(!0),Me(null)},onCancel:()=>{Ne==null||Ne.resolve(!1),Me(null)}})]})}const wv="vskill.migrations.scope-rename.v1",t4={own:"authoring-project",installed:"available-project",global:"available-personal"},n4=/^vskill-sidebar-(.+)-(own|installed|global)-collapsed$/;function r4(t){if(t.getItem(wv)==="done")return;const a=[];for(let s=0;s<t.length;s++){const i=t.key(s);if(!i)continue;const c=i.match(n4);if(!c)continue;const[,u,d]=c,f=t4[d];if(!f)continue;const x=t.getItem(i);x!==null&&a.push({oldKey:i,newKey:`vskill-sidebar-${u}-${f}-collapsed`,value:x})}for(const{oldKey:s,newKey:i,value:c}of a)t.getItem(i)===null&&t.setItem(i,c),t.removeItem(s);t.setItem(wv,"done")}if(typeof PerformanceObserver<"u")try{const t=new PerformanceObserver(a=>{for(const s of a.getEntries())if(s.name==="first-contentful-paint"){window.__vskillPaint=s.startTime,t.disconnect();return}});t.observe({type:"paint",buffered:!0})}catch{}if(typeof window<"u"&&window.localStorage)try{r4(window.localStorage)}catch{}P0.createRoot(document.getElementById("root")).render(r.jsx(m.StrictMode,{children:r.jsx(cS,{children:r.jsx(ak,{children:r.jsx(JR,{})})})}));export{dc as E,Vv as L,ui as P,Ae as R,WN as S,l4 as T,Vl as _,cr as a,kb as b,VN as c,cc as d,rc as e,ke as f,IR as g,ob as h,r as j,m as r,Qo as t,Ya as u,BR as w};
|
|
121
|
+
}`})]}),document.body)}function rR({agent:t,focused:a,active:s,onClick:i}){const c=t.health==="ok"?"var(--color-ok, #22c55e)":t.health==="stale"?"var(--color-own, #f59e0b)":"var(--text-tertiary)";return r.jsxs("button",{type:"button","data-testid":"agent-scope-row","data-agent-id":t.id,"data-active":s?"true":"false",onClick:i,style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"8px 14px",background:a?"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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:c,flexShrink:0}}),r.jsx("span",{style:{flex:1,fontSize:13},children:t.displayName}),r.jsxs("span",{title:"project · personal · plugins",style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:[t.installedCount,"·",t.globalCount,"·",t.pluginCount??0]})]})}function aR({row:t,onFocus:a}){return r.jsxs("button",{type:"button","data-testid":"agent-scope-shared-folder-row",onClick:a,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:[r.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)"},children:t.sharedFolderPath}),r.jsxs("span",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[t.consumers.map(s=>r.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:s.id},s.id)),r.jsxs("span",{style:{fontSize:10,color:"var(--text-secondary)",fontFamily:"var(--font-mono)"},children:["· ",t.combinedCount," skills"]})]})]})}function lR({agent:t}){const a=t.isRemoteOnly?`${t.displayName} is a web-only product — no local CLI or folder to detect.`:t.resolvedGlobalDir?`Looked for ${t.resolvedGlobalDir} — not found.`:`${t.displayName} was not found on this machine.`;return r.jsxs("div",{"data-testid":`agent-scope-not-detected-row-${t.id}`,title:a,style:{display:"flex",alignItems:"center",gap:10,padding:"6px 14px",color:"var(--text-secondary)",fontFamily:"var(--font-sans)",fontSize:12},children:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--text-tertiary)",flexShrink:0}}),r.jsx("span",{style:{flex:1},children:t.displayName}),t.isRemoteOnly&&r.jsx("span",{"data-testid":`agent-scope-remote-badge-${t.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 sR({agent:t,activeAgentId:a,onSwitch:s}){const i=t.id===a,c=t.isRemoteOnly===!0,u=i||c,d=i?"Active":c?"Remote-only":le.scopePicker.switchCta;return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[r.jsxs("div",{children:[r.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:16,fontWeight:500,color:"var(--text-primary)"},children:t.displayName}),r.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:2},children:c?"Remote service — no local install":oR(t.health)})]}),r.jsxs("dl",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"4px 12px",margin:0,fontSize:12},children:[r.jsx(Do,{label:le.scopePicker.statsInstalled,value:String(t.installedCount)}),r.jsx(Do,{label:le.scopePicker.statsGlobal,value:String(t.globalCount)}),r.jsx(Do,{label:le.scopePicker.statsPlugins,value:String(t.pluginCount??0)}),r.jsx(Do,{label:le.scopePicker.statsLastSync,value:t.lastSync?iR(t.lastSync):"—"})]}),r.jsx("button",{type:"button","data-testid":"agent-scope-switch",onClick:s,disabled:u,title:c?"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:u?"transparent":"color-mix(in srgb, var(--accent-surface) 20%, transparent)",color:"var(--text-primary)",fontSize:12,fontWeight:500,fontFamily:"var(--font-sans)",cursor:u?"default":"pointer",opacity:u?.5:1},children:d})]})}function Do({label:t,value:a}){return r.jsxs(r.Fragment,{children:[r.jsx("dt",{style:{color:"var(--text-secondary)",margin:0},children:t}),r.jsx("dd",{style:{color:"var(--text-primary)",margin:0,fontFamily:"var(--font-mono)",fontVariantNumeric:"tabular-nums"},children:a})]})}function vv(){return r.jsx("div",{style:{padding:"16px 18px",fontSize:12,color:"var(--text-secondary)"},children:"No agents detected yet."})}function iR(t){try{const a=new Date(t).getTime(),s=Date.now()-a;if(Number.isNaN(a))return"—";const i=Math.round(s/6e4);if(i<1)return"just now";if(i<60)return`${i}m ago`;const c=Math.round(i/60);return c<24?`${c}h ago`:`${Math.round(c/24)}d ago`}catch{return"—"}}function oR(t){switch(t){case"ok":return le.scopePicker.statsHealthOk;case"stale":return le.scopePicker.statsHealthStale;case"missing":return le.scopePicker.statsHealthMissing}}function cR(t){const a=new Map;for(const s of t.sharedFolders??[])for(const i of s.consumers)a.set(i,s);return t.agents.map(s=>{const i=a.get(s.id);return{id:s.id,displayName:s.displayName,presence:s.detected?"detected":"absent",installedCount:s.localSkillCount,globalCount:s.globalSkillCount,pluginCount:s.pluginSkillCount??0,lastSync:s.lastSync,health:s.health,sharedFolderGroup:i?i.consumers:void 0,sharedFolderPath:i?i.path:void 0,isRemoteOnly:s.isRemoteOnly,resolvedGlobalDir:s.resolvedGlobalDir}})}function uR({agents:t,activeAgentId:a,onActiveAgentChange:s,onOpenSetup:i}){const[c,u]=m.useState(!1),[d,f]=m.useState(null),x=m.useRef(null),h=m.useMemo(()=>t.find(S=>S.id===a)??t[0]??null,[t,a]),v=m.useMemo(()=>h?h.health==="ok"?"var(--color-ok, #22c55e)":h.health==="stale"?"var(--color-own, #f59e0b)":"var(--text-tertiary)":"var(--text-tertiary)",[h]),y=m.useCallback(()=>{var S;u(!1),(S=x.current)==null||S.focus()},[]),b=m.useCallback(S=>{s(S),u(!1)},[s]);return r.jsxs(r.Fragment,{children:[r.jsxs("button",{ref:x,type:"button","data-testid":"agent-scope-picker-trigger","aria-haspopup":"dialog","aria-expanded":c,onClick:()=>u(S=>!S),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),u(!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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:v,flexShrink:0}}),r.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(h==null?void 0:h.displayName)??"Select agent"}),r.jsxs("span",{title:"project · personal · plugins",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-secondary)",fontVariantNumeric:"tabular-nums"},children:["(",(h==null?void 0:h.installedCount)??0," · ",(h==null?void 0:h.globalCount)??0," · ",(h==null?void 0:h.pluginCount)??0,")"]}),r.jsx("span",{"aria-hidden":"true",style:{fontSize:10,color:"var(--text-secondary)"},children:"▾"})]}),c&&r.jsx(nR,{agents:t,activeAgentId:a,focusedAgentId:d??a,onFocusAgent:f,onSwitch:b,onOpenSetup:S=>{i(S),y()},onClose:y})]})}const yb="vskill-ccode-banner-dismissed",dR=new Set(["claude-cli","claude-code"]);function fR(){try{return sessionStorage.getItem(yb)==="true"}catch{return!1}}function pR(){try{sessionStorage.setItem(yb,"true")}catch{}}function mR({activeAgentId:t}){const[a,s]=m.useState(()=>fR()),i=m.useCallback(()=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:open-setup-drawer",{detail:{provider:"claude-code"}}))},[]),c=m.useCallback(()=>{pR(),s(!0)},[]);return!t||!dR.has(t)||a?null:r.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:[r.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--color-ok, #22c55e)",marginTop:6,flexShrink:0}}),r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsxs("span",{children:[le.claudeCodeLabel.firstUseBanner," "]}),r.jsx("button",{type:"button","data-testid":"claude-code-first-use-banner-learn-more",onClick:i,style:{background:"transparent",border:"none",padding:0,color:"var(--color-accent, var(--accent-surface))",cursor:"pointer",textDecoration:"underline",fontFamily:"inherit",fontSize:"inherit"},children:le.claudeCodeLabel.learnMore})]}),r.jsx("button",{type:"button","data-testid":"claude-code-first-use-banner-dismiss",onClick:c,"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 hR(){const[t,a]=m.useState(null),[s,i]=m.useState("loading"),[c,u]=m.useState(null),d=m.useCallback(async()=>{try{const f=await ke.getAgents();a(f),i("ready"),u(null)}catch(f){i("error"),u(f.message)}},[]);return m.useEffect(()=>{d()},[d]),m.useEffect(()=>{const f=()=>void d();return window.addEventListener("studio:agent-changed",f),()=>window.removeEventListener("studio:agent-changed",f)},[d]),{status:s,response:t,error:c,refresh:()=>void d()}}const _o="workspace",xR=["skills","agents"];async function gR(){const t=await fetch("/api/workspace");if(!t.ok)throw new Error(`GET /api/workspace failed: ${t.status}`);return await t.json()}async function vR(t){const a=await fetch("/api/workspace/active",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error??`POST /api/workspace/active failed: ${a.status}`)}return await a.json()}async function yR(t){const a=await fetch("/api/workspace/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error??`POST /api/workspace/projects failed: ${a.status}`)}return await a.json()}async function bR(t){const a=await fetch(`/api/workspace/projects/${encodeURIComponent(t)}`,{method:"DELETE"});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error??`DELETE /api/workspace/projects/${t} failed: ${a.status}`)}return await a.json()}function nf(){for(const t of xR)In(t)}function jR(){const{data:t,loading:a,error:s,revalidate:i}=qa(_o,gR),c=t,u=c==null?void 0:c.projects.find(h=>h.id===c.activeProjectId),d=m.useCallback(async h=>{await vR(h),In(_o),nf()},[]),f=m.useCallback(async h=>{await yR(h),In(_o),nf()},[]),x=m.useCallback(async h=>{await bR(h),In(_o),nf()},[]);return{workspace:c,activeProject:u,loading:a,error:s,switchProject:d,addProject:f,removeProject:x,revalidate:i}}function SR({workspace:t,onSwitch:a,onAdd:s,onRemove:i,isPathStale:c}){const[u,d]=m.useState(!1),[f,x]=m.useState(!1),[h,v]=m.useState(""),[y,b]=m.useState(null),[S,w]=m.useState(null),[E,k]=m.useState(null),[N,T]=m.useState(!1),A=m.useRef(null),B=(t==null?void 0:t.projects)??[],z=B.find(L=>L.id===(t==null?void 0:t.activeProjectId));m.useEffect(()=>{if(!u)return;function L(_){A.current&&!A.current.contains(_.target)&&(d(!1),x(!1),b(null))}return document.addEventListener("mousedown",L),()=>document.removeEventListener("mousedown",L)},[u]);async function P(){b(null);const L=h.trim();if(!L){b("Paste an absolute path (e.g. /Users/you/projects/my-skill)");return}if(!L.startsWith("/")&&!/^[A-Za-z]:[\\/]/.test(L)){b("Path must be absolute. In Terminal, cd to the folder and run: pwd — then paste the result here.");return}try{await s({path:L}),v(""),x(!1)}catch(_){const H=_ instanceof Error?_.message:String(_);/does not exist/i.test(H)?b(`Path not found on disk: ${L}`):/Duplicate/i.test(H)?b("That project is already registered."):b(H)}}async function C(){if(b(null),typeof window<"u"&&"showDirectoryPicker"in window)try{const L=await window.showDirectoryPicker();v(L.name),x(!0)}catch{}else x(!0)}function O(L){if(L.length<=50)return L;const _=L.split("/");return _.length<=4?L:`${_.slice(0,3).join("/")}/…/${_.slice(-2).join("/")}`}return r.jsxs("div",{ref:A,"data-vskill-project-picker":!0,style:{position:"relative",display:"inline-block"},children:[r.jsxs("button",{type:"button",onClick:()=>d(L=>!L),"aria-expanded":u,"aria-haspopup":"menu",title:(z==null?void 0:z.path)??"No project selected",style:{display:"flex",alignItems:"center",gap:8,padding:"4px 10px",border:"1px solid transparent",borderRadius:6,background:u?"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:[r.jsx("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",flexShrink:0,backgroundColor:(z==null?void 0:z.colorDot)??"var(--text-tertiary, #999)"}}),r.jsx("span",{style:{maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z?z.name:"No project"}),r.jsx("span",{"aria-hidden":!0,style:{fontSize:10,color:"var(--text-tertiary, #999)",marginLeft:2},children:u?"▴":"▾"})]}),u&&r.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:[B.length===0&&r.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."}),B.length>0&&r.jsx("ul",{role:"none",style:{listStyle:"none",margin:0,padding:4,maxHeight:320,overflowY:"auto"},children:B.map(L=>{const _=c?c(L.path):!1,H=L.id===(t==null?void 0:t.activeProjectId),W=S===L.id;return r.jsxs("li",{role:"menuitem","data-stale":_?"true":"false",onMouseEnter:()=>w(L.id),onMouseLeave:()=>w(q=>q===L.id?null:q),onClick:()=>{if(!_){if(H){d(!1);return}k(L)}},style:{display:"flex",alignItems:"center",gap:10,padding:"8px 10px",borderRadius:6,cursor:_?"not-allowed":"pointer",background:W&&!_?"var(--surface-2, rgba(0,0,0,0.04))":H?"var(--surface-1, rgba(0,0,0,0.02))":"transparent",opacity:_?.5:1,transition:"background-color 120ms ease"},children:[r.jsx("span",{"aria-hidden":!0,style:{width:10,height:10,borderRadius:"50%",flexShrink:0,backgroundColor:L.colorDot,boxShadow:H?"0 0 0 2px color-mix(in oklch, currentColor 20%, transparent)":"none"}}),r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:13,fontWeight:H?600:500,color:"var(--text-primary)",lineHeight:1.3},children:[r.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:L.name}),H&&r.jsx("span",{"aria-label":"Active",style:{fontSize:10,color:"var(--color-action, #2F5B8E)",letterSpacing:"0.05em",textTransform:"uppercase",fontWeight:600},children:"Active"})]}),r.jsx("div",{title:L.path,style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-tertiary)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:O(L.path)}),_&&r.jsx("div",{style:{fontSize:10,color:"var(--color-own, #b45309)",marginTop:2},children:"Path no longer exists"})]}),r.jsx("button",{type:"button","aria-label":`Remove ${L.name}`,onClick:q=>{q.stopPropagation(),i(L.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:W?1:0,transition:"opacity 120ms ease, color 120ms ease, background-color 120ms ease",flexShrink:0},onMouseEnter:q=>{q.currentTarget.style.color="var(--color-error, #b91c1c)",q.currentTarget.style.backgroundColor="color-mix(in oklch, var(--color-error, #b91c1c) 10%, transparent)"},onMouseLeave:q=>{q.currentTarget.style.color="var(--text-tertiary)",q.currentTarget.style.backgroundColor="transparent"},children:r.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:[r.jsx("polyline",{points:"3 6 5 6 21 6"}),r.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),r.jsx("path",{d:"M10 11v6"}),r.jsx("path",{d:"M14 11v6"}),r.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]},L.id)})}),r.jsxs("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",padding:f?8:6},children:[!f&&r.jsxs("button",{type:"button",onClick:()=>void C(),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:L=>{L.currentTarget.style.backgroundColor="color-mix(in oklch, var(--color-action, #2F5B8E) 10%, transparent)"},onMouseLeave:L=>{L.currentTarget.style.backgroundColor="transparent"},children:[r.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:[r.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),r.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Add project"]}),f&&r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[r.jsx("input",{type:"text",value:h,onChange:L=>v(L.target.value),onKeyDown:L=>{L.key==="Enter"&&P(),L.key==="Escape"&&(x(!1),b(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"}}),r.jsxs("div",{style:{display:"flex",gap:6,justifyContent:"flex-end"},children:[r.jsx("button",{type:"button",onClick:()=>{x(!1),b(null),v("")},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"}),r.jsx("button",{type:"button",onClick:()=>void P(),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"})]}),y&&r.jsx("div",{style:{fontSize:11,color:"var(--color-error, #b91c1c)"},children:y})]})]})]}),E&&r.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Switch project instructions",style:{position:"fixed",inset:0,zIndex:80,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>k(null),children:[r.jsx("div",{style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.40)"}}),r.jsxs("div",{onClick:L=>L.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:[r.jsxs("h2",{style:{margin:0,fontSize:16,fontWeight:600,fontFamily:"var(--font-serif, ui-serif)",marginBottom:8},children:["Switch to ",E.name]}),r.jsx("p",{style:{fontSize:13,color:"var(--text-secondary)",lineHeight:1.5,margin:0,marginBottom:12},children:"Skill Studio's skill scanner reads from the folder it was launched in, so switching projects from the browser isn't possible. Quit this server and relaunch from the target folder:"}),r.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:`cd "${E.path}" && npx vskill@latest studio`}),r.jsxs("div",{style:{display:"flex",gap:8,marginTop:14,justifyContent:"flex-end"},children:[r.jsx("button",{type:"button",onClick:async()=>{try{await navigator.clipboard.writeText(`cd "${E.path}" && npx vskill@latest studio`),T(!0),setTimeout(()=>T(!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:N?"Copied!":"Copy command"}),r.jsx("button",{type:"button",onClick:()=>k(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 kR(t,a){const s=a.trim().toLowerCase().split(/\s+/).filter(Boolean);return s.length===0?t:t.filter(i=>{const c=`${i.name} ${i.path}`.toLowerCase();return s.every(u=>c.includes(u))})}function wR({open:t,projects:a,onSwitch:s,onClose:i}){const[c,u]=m.useState(""),[d,f]=m.useState(0),x=m.useMemo(()=>kR(a,c),[a,c]);m.useEffect(()=>{t||(u(""),f(0))},[t]),m.useEffect(()=>{d>=x.length&&f(0)},[x.length,d]);const h=v=>{if(v.key==="Escape"){v.preventDefault(),i();return}if(v.key==="ArrowDown"){v.preventDefault(),f(y=>Math.min(y+1,Math.max(x.length-1,0)));return}if(v.key==="ArrowUp"){v.preventDefault(),f(y=>Math.max(y-1,0));return}if(v.key==="Enter"){v.preventDefault();const y=x[d];y&&(s(y.id),i())}};return t?r.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:[r.jsx("div",{className:"absolute inset-0 bg-black/30",onClick:i}),r.jsxs("div",{className:"relative w-[520px] max-w-[92vw] bg-background border rounded shadow-lg",children:[r.jsx("input",{type:"text",autoFocus:!0,value:c,onChange:v=>u(v.target.value),onKeyDown:h,placeholder:"Switch project…",className:"w-full px-3 py-2 text-sm border-b outline-none"}),r.jsxs("ul",{role:"listbox",className:"max-h-80 overflow-auto",children:[x.length===0&&r.jsx("li",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No matches."}),x.map((v,y)=>r.jsxs("li",{role:"option","aria-selected":y===d,"data-highlighted":y===d,className:["flex items-center gap-2 px-3 py-2 text-sm cursor-pointer",y===d?"bg-muted":""].join(" "),onMouseEnter:()=>f(y),onClick:()=>{s(v.id),i()},children:[r.jsx("span",{"aria-hidden":!0,className:"inline-block w-2 h-2 rounded-full",style:{backgroundColor:v.colorDot}}),r.jsxs("span",{className:"flex-1",children:[r.jsx("span",{className:"vskill-palette-name",children:v.name}),r.jsx("span",{className:"ml-2 vskill-palette-path text-xs font-mono text-muted-foreground",children:v.path})]})]},v.id))]})]})]}):null}const yv=/^[a-z][a-z0-9-]{0,62}[a-z0-9]$/;function CR({open:t,onClose:a,initialMode:s="standalone",isClaudeCode:i,projectRoot:c,onCreated:u}){const[d,f]=m.useState("destination"),[x,h]=m.useState(s),[v,y]=m.useState(""),[b,S]=m.useState(""),[w,E]=m.useState(""),[k,N]=m.useState([]),[T,A]=m.useState(!1),[B,z]=m.useState(null);if(m.useEffect(()=>{t&&(f("destination"),h(s),y(""),S(""),E(""),z(null))},[t,s]),m.useEffect(()=>{if(!t)return;let $=!0;return fetch("/api/authoring/plugins").then(D=>D.json()).then(D=>{$&&N(D.plugins??[])}).catch(()=>{}),()=>{$=!1}},[t]),m.useEffect(()=>{if(!t)return;function $(D){D.key==="Escape"&&(D.preventDefault(),a())}return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[t,a]),!t)return null;const P=k.length>0,C=i&&P,O=i,L=yv.test(v),_=x==="existing-plugin"?b.length>0:yv.test(b),H=!T&&L&&(x==="standalone"||_),W=ER(c,x,b,v);async function q(){z(null),A(!0);try{const I=new URLSearchParams;I.set("mode",x),I.set("skillName",v),b&&I.set("pluginName",b);const F=await fetch(`/api/authoring/skill-exists?${I.toString()}`),J=await F.json();if(!F.ok){z(J.error??`Check failed: ${F.status}`);return}if(J.exists){z(`Skill '${v}' already exists${J.path?` at ${J.path}`:""}`);return}}catch(I){z(I instanceof Error?I.message:String(I));return}finally{A(!1)}const $=new URLSearchParams;$.set("mode",x),$.set("skillName",v),w.trim()&&$.set("description",w.trim()),b&&$.set("pluginName",b);const D=`#/create?${$.toString()}`;typeof window<"u"&&(window.location.hash=D),a()}async function ee(){z(null),A(!0);try{const $=await fetch("/api/authoring/create-skill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:x,skillName:v,description:w.trim()||void 0,pluginName:x==="standalone"?void 0:b})}),D=await $.json();if(!$.ok||!D.ok){z(D.error??`Create failed: ${$.status}`);return}In("skills"),u==null||u({mode:x,skillName:v,pluginName:D.pluginName??null,skillMdPath:D.skillMdPath}),a()}catch($){z($ instanceof Error?$.message:String($))}finally{A(!1)}}return r.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:[r.jsx("div",{onClick:a,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.45)"}}),r.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:[r.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:[r.jsx("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text-primary)",fontFamily:"var(--font-serif, ui-serif)",letterSpacing:"0.01em"},children:d==="destination"?"Create a skill":"Name and describe"}),r.jsxs("div",{style:{fontSize:11,color:"var(--text-tertiary)",marginLeft:"auto",fontVariantNumeric:"tabular-nums"},children:["Step ",d==="destination"?"1":"2"," of 2"]})]}),d==="destination"&&r.jsxs("div",{style:{padding:14,display:"flex",flexDirection:"column",gap:10},children:[r.jsx(rf,{title:"Standalone skill",subtitle:"A single skill in this project",description:"Lives at <project>/skills/<name>/SKILL.md. Works with every agent.",icon:"📄",selected:x==="standalone",onClick:()=>h("standalone")}),r.jsx(rf,{title:"Add to existing plugin",subtitle:C?`${k.length} plugin source${k.length===1?"":"s"} in this project`:i?"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:!C,selected:x==="existing-plugin",onClick:()=>C&&h("existing-plugin")}),r.jsx(rf,{title:"Plugin (multi-skill)",subtitle:O?"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:!O,selected:x==="new-plugin",onClick:()=>O&&h("new-plugin")})]}),d==="details"&&r.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12},children:[x==="new-plugin"&&r.jsx(Oo,{label:"Plugin name",hint:"kebab-case",children:r.jsx("input",{type:"text",value:b,onChange:$=>S($.target.value.trim()),placeholder:"my-first-plugin",autoFocus:!0,style:Bo(!b||_)})}),x==="existing-plugin"&&r.jsx(Oo,{label:"Plugin",children:r.jsxs("select",{value:b,onChange:$=>S($.target.value),style:{...Bo(!0),fontFamily:"var(--font-mono)"},children:[r.jsx("option",{value:"",children:"Select a plugin…"}),k.map($=>r.jsx("option",{value:$.name,children:$.name},$.path))]})}),r.jsx(Oo,{label:"Skill name",hint:"kebab-case",children:r.jsx("input",{type:"text",value:v,onChange:$=>y($.target.value.trim()),placeholder:"my-new-skill",autoFocus:x!=="new-plugin",style:Bo(!v||L)})}),r.jsx(Oo,{label:"Description",hint:"One short sentence — shown in frontmatter",children:r.jsx("textarea",{value:w,onChange:$=>E($.target.value),rows:2,placeholder:"Does a thing when Claude needs X",style:{...Bo(!0),resize:"vertical",minHeight:52,fontFamily:"var(--font-sans)"}})}),W&&r.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:[r.jsx("div",{style:{fontSize:10,color:"var(--text-tertiary)",marginBottom:2,fontFamily:"var(--font-sans)"},children:"Will create:"}),W.map(($,D)=>r.jsx("div",{children:$},D))]}),B&&r.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:B})]}),r.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:[r.jsx("button",{type:"button",onClick:a,style:af,children:"Cancel"}),d==="destination"&&r.jsx("button",{type:"button",onClick:()=>f("details"),style:bv,children:"Continue →"}),d==="details"&&r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button",onClick:()=>f("destination"),style:af,children:"← Back"}),r.jsx("button",{type:"button",onClick:()=>void q(),disabled:!H,style:{...af,opacity:H?1:.5,cursor:H?"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"}),r.jsx("button",{type:"button",onClick:()=>void ee(),disabled:!H,style:{...bv,opacity:H?1:.5,cursor:H?"pointer":"not-allowed"},title:"Creates an empty SKILL.md scaffold you can fill in by hand",children:T?"Creating…":"Create empty scaffold"})]})]})]})]})}function rf({title:t,subtitle:a,description:s,icon:i,selected:c,disabled:u,onClick:d}){return r.jsxs("button",{type:"button",onClick:d,disabled:u,"aria-pressed":c,style:{display:"flex",gap:12,padding:"12px 14px",textAlign:"left",borderRadius:8,border:c?"2px solid var(--color-accent, #2f6f8f)":"1px solid var(--border-default, rgba(0,0,0,0.12))",background:c?"color-mix(in oklch, var(--color-accent, #2f6f8f) 8%, var(--color-paper, #fff))":u?"var(--surface-1, rgba(0,0,0,0.02))":"var(--color-paper, #fff)",color:u?"var(--text-tertiary)":"var(--text-primary)",cursor:u?"not-allowed":"pointer",opacity:u?.6:1,fontFamily:"inherit",width:"100%",transition:"border-color 120ms ease, background-color 120ms ease"},children:[r.jsx("span",{"aria-hidden":!0,style:{fontSize:22,lineHeight:1,marginTop:2},children:i}),r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsx("div",{style:{fontSize:14,fontWeight:600,lineHeight:1.3},children:t}),r.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",marginTop:2,textTransform:"uppercase",letterSpacing:"0.04em"},children:a}),r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",marginTop:6,lineHeight:1.5},children:s})]})]})}function Oo({label:t,hint:a,children:s}){return r.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:4},children:[r.jsxs("span",{style:{display:"flex",alignItems:"baseline",gap:8},children:[r.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:t}),a&&r.jsx("span",{style:{fontSize:11,color:"var(--text-tertiary)"},children:a})]}),s]})}function Bo(t){return{width:"100%",padding:"7px 10px",fontSize:13,fontFamily:"var(--font-mono)",border:`1px solid ${t?"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 bv={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"},af={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 ER(t,a,s,i){const c=i||"<skill-name>",u=s||"<plugin-name>",d=t||"<project>";return a==="standalone"?[`${d}/skills/${c}/SKILL.md`]:a==="existing-plugin"?[`${d}/${u}/skills/${c}/SKILL.md`]:a==="new-plugin"?[`${d}/${u}/.claude-plugin/plugin.json`,`${d}/${u}/skills/${c}/SKILL.md`]:null}function bb(t){return t.trim().toLowerCase()}function NR(t,a){const s=bb(a);return s?t.filter(i=>i.name.toLowerCase().includes(s)||i.source.toLowerCase().includes(s)):t}function TR(t,a){const s=bb(a);return s?t.filter(i=>[i.name,i.description??"",i.category??"",i.author??""].join(" ").toLowerCase().includes(s)):t}function RR({open:t,onClose:a,onInstall:s,onUninstall:i,installedNames:c}){const[u,d]=m.useState(null),[f,x]=m.useState([]),[h,v]=m.useState(null),[y,b]=m.useState(null),[S,w]=m.useState(!1),[E,k]=m.useState(null),[N,T]=m.useState(""),[A,B]=m.useState("");m.useEffect(()=>{h?T(""):B("")},[h]);const z=m.useMemo(()=>NR(f,N),[f,N]),P=m.useMemo(()=>TR((y==null?void 0:y.plugins)??[],A),[y,A]);return m.useEffect(()=>{t&&(w(!0),k(null),fetch("/api/plugins/marketplaces").then(C=>C.json()).then(C=>{if(C.error)throw new Error(C.error);x(C.marketplaces??[])}).catch(C=>k(C instanceof Error?C.message:String(C))).finally(()=>w(!1)))},[t]),m.useEffect(()=>{if(!h){b(null);return}w(!0),k(null),fetch(`/api/plugins/marketplaces/${encodeURIComponent(h)}`).then(C=>C.json()).then(C=>{if(C.error)throw new Error(C.error);b(C)}).catch(C=>k(C instanceof Error?C.message:String(C))).finally(()=>w(!1))},[h]),m.useEffect(()=>{if(!t)return;function C(O){O.key==="Escape"&&a()}return document.addEventListener("keydown",C),()=>document.removeEventListener("keydown",C)},[t,a]),t?r.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Plugin marketplace","data-vskill-marketplace-drawer":!0,style:{position:"fixed",inset:0,zIndex:80},children:[r.jsx("div",{onClick:a,style:{position:"absolute",inset:0,background:"rgba(0,0,0,0.38)"}}),r.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:[r.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:[h&&r.jsx("button",{type:"button",onClick:()=>v(null),"aria-label":"Back to marketplaces",style:{border:"none",background:"transparent",fontSize:14,color:"var(--text-secondary)",cursor:"pointer",padding:0},children:"← Back"}),r.jsx("h2",{style:{margin:0,fontSize:15,fontWeight:600,color:"var(--text-primary)",fontFamily:"var(--font-serif, ui-serif)",flex:1},children:h?(y==null?void 0:y.name)??h:"Browse plugins"}),r.jsx("button",{type:"button",onClick:a,"aria-label":"Close",style:{border:"none",background:"transparent",fontSize:16,color:"var(--text-secondary)",cursor:"pointer",padding:"4px 6px"},children:"✕"})]}),r.jsxs("div",{style:{flex:1,overflowY:"auto",padding:12},children:[S&&r.jsx("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:"Loading…"}),E&&r.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:E}),!h&&!S&&f.length===0&&!E&&r.jsx(AR,{}),!h&&f.length>0&&r.jsx(jv,{value:N,onChange:T,placeholder:"Search marketplaces…",ariaLabel:"Search marketplaces",testId:"marketplace-search"}),!h&&f.length>0&&z.length===0&&r.jsxs("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:["No marketplaces match “",N,"”."]}),!h&&z.map(C=>r.jsxs("button",{type:"button",onClick:()=>v(C.name),style:MR,onMouseEnter:O=>{O.currentTarget.style.background="var(--surface-2, rgba(0,0,0,0.04))"},onMouseLeave:O=>{O.currentTarget.style.background="transparent"},children:[r.jsx("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:C.name}),r.jsx("div",{style:{fontSize:11,color:"var(--text-tertiary)",fontFamily:"var(--font-mono)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:C.source})]},C.name)),h&&y&&r.jsxs(r.Fragment,{children:[y.description&&r.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",padding:"0 6px 12px",lineHeight:1.5},children:y.description}),y.plugins.length===0&&r.jsx("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:"This marketplace has no plugins catalogued yet."}),y.plugins.length>0&&r.jsx(jv,{value:A,onChange:B,placeholder:"Search plugins…",ariaLabel:"Search plugins",testId:"plugin-search"}),y.plugins.length>0&&P.length===0&&r.jsxs("div",{style:{padding:12,fontSize:12,color:"var(--text-tertiary)"},children:["No plugins match “",A,"”."]}),P.map(C=>{const O=c.has(C.name);return r.jsx("div",{style:{padding:"10px 8px",borderBottom:"1px solid var(--border-subtle, rgba(0,0,0,0.05))"},children:r.jsxs("div",{style:{display:"flex",alignItems:"start",gap:8},children:[r.jsxs("div",{style:{flex:1,minWidth:0},children:[r.jsxs("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)",display:"flex",alignItems:"baseline",gap:8},children:[C.name,C.version&&r.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-tertiary)"},children:C.version}),C.category&&r.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:C.category})]}),C.description&&r.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:4,lineHeight:1.5},children:C.description})]}),O&&i?r.jsx("button",{type:"button",disabled:u===C.name,onClick:async()=>{d(C.name);try{await i(C.name)}finally{d(null)}},"aria-label":`Uninstall ${C.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:u===C.name?"wait":"pointer",opacity:u===C.name?.6:1,fontFamily:"inherit"},children:u===C.name?"Uninstalling…":"Uninstall"}):r.jsx("button",{type:"button",disabled:O,onClick:()=>s(C.name,h),style:{flexShrink:0,padding:"5px 12px",fontSize:12,fontWeight:600,border:O?"none":"1px solid var(--color-action, #2F5B8E)",borderRadius:4,background:O?"var(--surface-2, rgba(0,0,0,0.05))":"var(--color-action, #2F5B8E)",color:O?"var(--text-tertiary)":"var(--color-action-ink, #FFFFFF)",cursor:O?"default":"pointer",fontFamily:"inherit",boxShadow:O?"none":"0 1px 2px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.12)"},children:O?"Installed":"Install"})]})},C.name)})]})]}),!h&&r.jsx("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(0,0,0,0.08))",padding:12},children:r.jsx(LR,{onAdded:()=>{In("marketplaces"),fetch("/api/plugins/marketplaces").then(C=>C.json()).then(C=>x(C.marketplaces??[]))}})})]})]}):null}function jv({value:t,onChange:a,placeholder:s,ariaLabel:i,testId:c}){return r.jsx("div",{style:{padding:"0 4px 10px"},children:r.jsx("input",{type:"search",value:t,onChange:u=>a(u.target.value),placeholder:s,"aria-label":i,"data-testid":c,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 AR(){return r.jsxs("div",{style:{padding:20,fontSize:12,color:"var(--text-tertiary)",lineHeight:1.6},children:["No marketplaces configured yet. Add one below — examples:",r.jsxs("ul",{style:{marginTop:8,paddingLeft:16},children:[r.jsx("li",{children:r.jsx("code",{children:"anthropics/claude-plugins-official"})}),r.jsx("li",{children:r.jsx("code",{children:"openai/codex-plugin-cc"})})]})]})}function LR({onAdded:t}){const[a,s]=m.useState(""),[i,c]=m.useState(!1),[u,d]=m.useState(null);async function f(){const x=a.trim();if(x){c(!0),d(null);try{const h=await fetch("/api/plugins/marketplaces",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:x})}),v=await h.json().catch(()=>({}));if(!h.ok||!v.ok){d(v.error??`Add failed (${h.status})`);return}s(""),t()}catch(h){d(h instanceof Error?h.message:String(h))}finally{c(!1)}}}return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[r.jsx("label",{style:{fontSize:11,color:"var(--text-tertiary)",fontWeight:500},children:"Add marketplace (GitHub owner/repo, URL, or path)"}),r.jsxs("div",{style:{display:"flex",gap:6},children:[r.jsx("input",{type:"text",value:a,onChange:x=>s(x.target.value),onKeyDown:x=>{x.key==="Enter"&&f()},placeholder:"anthropics/claude-plugins-official",disabled:i,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"}}),r.jsx("button",{type:"button",onClick:()=>void f(),disabled:i||!a.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:i||!a.trim()?"not-allowed":"pointer",opacity:i||!a.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:i?"Adding…":"Add"})]}),u&&r.jsx("div",{style:{fontSize:11,color:"var(--color-error, #b91c1c)"},children:u})]})}const MR={display:"block",width:"100%",textAlign:"left",padding:"10px 12px",border:"none",borderRadius:6,background:"transparent",cursor:"pointer",fontFamily:"inherit",marginBottom:2},lf=12;function zR({job:t,onDone:a}){const[s,i]=m.useState([]),[c,u]=m.useState("running"),[d,f]=m.useState(!1);if(m.useEffect(()=>{if(!t)return;i([]),u("running"),f(!1);const y=new AbortController;let b=[],S="running";return(async()=>{try{const w=await fetch("/api/plugins/install/stream",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({plugin:t.ref}),signal:y.signal});if(!w.ok||!w.body){u("failed"),a({ok:!1,code:w.status,lines:[`HTTP ${w.status}`]});return}const E=w.body.getReader(),k=new TextDecoder;let N="";for(;;){const{value:T,done:A}=await E.read();if(A)break;N+=k.decode(T,{stream:!0});const B=N.split(/\n\n/);N=B.pop()??"";for(const z of B){const P=z.match(/^data:\s*(.*)$/m);if(P)try{const C=JSON.parse(P[1]);C.type==="stdout"&&C.line?(b=[...b,C.line].slice(-lf),i(b)):C.type==="stderr"&&C.line?(b=[...b,`⚠ ${C.line}`].slice(-lf),i(b)):C.type==="done"?(S=C.ok?"ok":"failed",u(S),ty(),In("skills"),a({ok:C.ok??!1,code:C.code??null,lines:b})):C.type==="error"&&C.error&&(b=[...b,`✘ ${C.error}`].slice(-lf),i(b))}catch{}}}S==="running"&&a({ok:!0,code:0,lines:b})}catch(w){if(w.name==="AbortError")return;u("failed"),a({ok:!1,code:null,lines:[...b,w instanceof Error?w.message:String(w)]})}})(),()=>y.abort()},[t==null?void 0:t.ref]),!t)return null;const x=c==="ok"?"var(--color-installed, #2F6A4A)":c==="failed"?"var(--color-error, #b91c1c)":"var(--color-accent, #2f6f8f)",h=c==="ok"?"✔":c==="failed"?"✘":"…",v=c==="ok"?"Installed":c==="failed"?"Install failed":"Installing";return r.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 ${x}`,borderRadius:6,boxShadow:"0 10px 20px -6px rgba(0,0,0,0.18)",zIndex:90,fontFamily:"var(--font-sans)",overflow:"hidden"},children:[r.jsxs("button",{type:"button",onClick:()=>f(y=>!y),style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"10px 12px",border:"none",background:"transparent",cursor:"pointer",textAlign:"left",fontFamily:"inherit"},children:[r.jsx("span",{"aria-hidden":!0,style:{fontSize:16,color:x,width:16,textAlign:"center"},children:c==="running"?r.jsx(DR,{}):h}),r.jsxs("span",{style:{flex:1,minWidth:0},children:[r.jsxs("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:[v,": ",t.plugin,r.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-primary)",marginLeft:4},children:["@",t.marketplace]})]}),!d&&s.length>0&&r.jsx("span",{style:{display:"block",fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-primary)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s[s.length-1]})]}),r.jsx("span",{"aria-hidden":!0,style:{fontSize:10,color:"var(--text-primary)"},children:d?"▾":"▸"})]}),d&&r.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:s.length===0?"Waiting for output…":s.join(`
|
|
122
|
+
`)})]})}function DR(){return r.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:r.jsx("style",{children:"@keyframes vskill-spin { to { transform: rotate(360deg); } }"})})}const _R=3e3,OR={anthropic:"Anthropic",openai:"OpenAI",openrouter:"OpenRouter"};function Sv(t){return t==="anthropic"||t==="openai"||t==="openrouter"}function BR(){const{toast:t}=rc(),a=m.useRef(new Map),s=m.useCallback(i=>{if(!Sv(i.provider))return;const c=Date.now(),u=a.current.get(i.provider)??0;if(c-u<_R)return;a.current.set(i.provider,c);const d=OR[i.provider];t({message:`${d} 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:i.provider}}))}}})},[t]);return m.useEffect(()=>{function i(c){const u=c.detail;!u||!Sv(u.provider)||s({provider:u.provider})}return window.addEventListener("studio:api-key-error",i),()=>window.removeEventListener("studio:api-key-error",i)},[s]),{report:s}}const jb="vskill.studio.prefs";function Sb(){try{return typeof window>"u"?null:window.localStorage??null}catch{return null}}function kb(){const t=Sb();if(!t)return{};try{const a=t.getItem(jb);if(!a)return{};const s=JSON.parse(a);return s&&typeof s=="object"&&!Array.isArray(s)?s:{}}catch{return{}}}function IR(t,a){const s=Sb();if(s)try{const c={...kb(),[t]:a};s.setItem(jb,JSON.stringify(c))}catch{}}function $R(t,a){const i=kb()[t];return i===void 0?a:i}const kv={open:!1,x:0,y:0,skill:null};function UR(t,a){return{open:!0,x:t.clientX,y:t.clientY,skill:a}}function Ha(t,a="info"){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:toast",{detail:{message:t,severity:a}}))}function HR(t){typeof window>"u"||window.dispatchEvent(new CustomEvent("studio:request-delete",{detail:{skill:t}}))}function PR(t,a){var s;switch(t){case"copy-path":try{(s=navigator.clipboard)==null||s.writeText(a.dir)}catch{Ha(le.toasts.permissionDenied,"error");return}Ha(le.toasts.pathCopied,"info");return;case"open":case"reveal":case"edit":Ha(le.actions.editPlaceholder,"info");return;case"run-benchmark":Ha(le.toasts.benchmarkQueued,"info");return;case"duplicate":Ha(le.toasts.skillDuplicated,"info");return;case"update":Ha(le.toasts.skillUpdated,"info");return;case"uninstall":Ha(le.actions.editPlaceholder,"info");return;case"delete":HR(a);return;default:return}}function VR(t){return t.startsWith("#/create")}function FR(t){return t.startsWith("#/updates")}function wb(t){const[a,s]=m.useState(()=>typeof window<"u"&&t(window.location.hash));return m.useEffect(()=>{function i(){s(t(window.location.hash))}return window.addEventListener("hashchange",i),i(),()=>window.removeEventListener("hashchange",i)},[]),a}function GR(){return wb(VR)}function WR(){return wb(FR)}function qR(){var i,c;if(typeof navigator>"u")return"⌘⇧K";const t=((i=navigator.platform)==null?void 0:i.toUpperCase())??"",a=((c=navigator.userAgent)==null?void 0:c.toUpperCase())??"";return t.includes("MAC")||a.includes("MAC")?"⌘⇧K":"Ctrl+Shift+K"}function YR(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function KR(){const[t,a]=m.useState("⌘⇧K");m.useEffect(()=>{a(qR())},[]);const s=YR();function i(){window.dispatchEvent(new CustomEvent("openFindSkills"))}return r.jsxs("button",{type:"button",onClick:i,"aria-label":`Find verified skills — opens search (${t})`,title:`Find verified skills (${t})`,"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:[r.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:[r.jsx("circle",{cx:"11",cy:"11",r:"8"}),r.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),r.jsx("span",{children:"Find skills"}),r.jsx("kbd",{"data-animated":s?"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:t})]})}const XR=m.lazy(()=>Vl(()=>import("./FindSkillsPalette-vXkhFdPd.js"),__vite__mapDeps([2,1])).then(t=>({default:t.FindSkillsPalette}))),QR=m.lazy(()=>Vl(()=>import("./SkillDetailPanel-n_zU6EDp.js"),__vite__mapDeps([3,4,1])).then(t=>({default:t.SkillDetailPanel}))),ZR=m.lazy(()=>Vl(()=>import("./CreateSkillPage-CS6TU8sH.js"),__vite__mapDeps([5,1])).then(t=>({default:t.CreateSkillPage}))),JR=m.lazy(()=>Vl(()=>Promise.resolve().then(()=>QN),void 0).then(t=>({default:t.UpdatesPanel})));function e4(){return r.jsx(YS,{children:r.jsx(GS,{children:r.jsxs(q2,{children:[r.jsx(t4,{}),r.jsx(HT,{})]})})})}function t4(){var jr,rn;const{state:t,selectSkill:a,clearSelection:s,refreshSkills:i,outdatedByOrigin:c,revealSkill:u,clearReveal:d}=cr(),{config:f}=Ya(),{resolvedTheme:x,setTheme:h}=ey(),{toast:v}=rc(),[y,b]=m.useState(()=>TC()),[S]=m.useState(!0),[w,E]=m.useState(!1),[k,N]=m.useState(!1),[T,A]=m.useState(()=>typeof window>"u"?"overview":Ef(window.location.search).tab),[B,z]=m.useState(()=>{if(typeof window>"u")return"";const ae=Ef(window.location.search);return ae.mode?ae.mode:ae.view?ae.view:gb(ae.tab,window.location.search)}),P=m.useCallback(ae=>{A(Se=>(Se!==ae&&z(Ks(ae)),ae))},[]);m.useEffect(()=>{if(typeof window>"u")return;const ae=()=>{const Se=new URLSearchParams(window.location.search),Te=Se.get("tab"),$t=Se.get("panel"),Ct=Zo(Te)??Zo($t);if(!Ct)return;const Jt=new URLSearchParams(window.location.search);Jt.delete("panel"),Jt.delete("sub"),Ct.tab==="overview"?Jt.delete("tab"):Jt.set("tab",Ct.tab),Jt.delete("mode"),Jt.delete("view"),Ct.mode&&Jt.set("mode",Ct.mode),Ct.view&&Jt.set("view",Ct.view);const Vr=Jt.toString(),dr=`${window.location.pathname}${Vr?"?"+Vr:""}${window.location.hash}`,nt=`${window.location.pathname}${window.location.search}${window.location.hash}`;dr!==nt&&window.history.replaceState(null,"",dr),A(Ct.tab),Ct.mode?z(Ct.mode):Ct.view?z(Ct.view):z(Ks(Ct.tab))};return ae(),window.addEventListener("popstate",ae),()=>window.removeEventListener("popstate",ae)},[]),m.useEffect(()=>{if(typeof window>"u")return;const ae=new URLSearchParams(window.location.search);ae.delete("panel"),ae.delete("sub"),T==="overview"?ae.delete("tab"):ae.set("tab",T),ae.delete("mode"),ae.delete("view"),!(B===Ks(T))&&B&&(T==="run"?ae.set("mode",B):T==="history"&&ae.set("view",B));const Te=ae.toString(),$t=`${window.location.pathname}${Te?"?"+Te:""}${window.location.hash}`,Ct=`${window.location.pathname}${window.location.search}${window.location.hash}`;$t!==Ct&&window.history.replaceState(null,"",$t)},[T,B]);const[C,O]=m.useState(kv),L=m.useCallback((ae,Se)=>{O(UR(ae,Se))},[]),_=hR(),[H,W]=m.useState(()=>$R("activeAgent",null)),q=m.useCallback(ae=>{W(ae),IR("activeAgent",ae),typeof window<"u"&&window.dispatchEvent(new CustomEvent("studio:agent-changed",{detail:{agentId:ae}}))},[]);m.useEffect(()=>{var ae;!H&&((ae=_.response)!=null&&ae.suggested)&&q(_.response.suggested)},[H,(jr=_.response)==null?void 0:jr.suggested,q]);const ee=m.useMemo(()=>_.response?cR(_.response):[],[_.response]),{workspace:$,switchProject:D,addProject:I,removeProject:F,activeProject:J}=jR(),[de,M]=m.useState(!1),[U,K]=m.useState(!1),[Q,ce]=m.useState("standalone"),Z=m.useCallback((ae="standalone")=>{ce(ae),K(!0)},[]);m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Z((Te==null?void 0:Te.mode)??"standalone")}return window.addEventListener("studio:request-create-skill",ae),()=>window.removeEventListener("studio:request-create-skill",ae)},[Z]);const[ie,X]=m.useState(!1),[me,je]=m.useState(null),[Ne,Me]=m.useState(null);m.useEffect(()=>{function ae(){X(!0)}return window.addEventListener("studio:open-marketplace",ae),()=>window.removeEventListener("studio:open-marketplace",ae)},[]);const Fe=m.useMemo(()=>{const ae=new Set;for(const Se of t.skills)Se.source==="plugin"&&Se.pluginName&&ae.add(Se.pluginName);return ae},[t.skills]);vf([{key:"p",meta:!0,handler:ae=>{var Te;const Se=typeof document<"u"?document.activeElement:null;Se&&Se.tagName==="INPUT"||((Te=ae==null?void 0:ae.preventDefault)==null||Te.call(ae),M($t=>!$t))}}],{enabled:!0});const Ue=eR(),De=Ue.open;m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.provider&&De(Te.provider)}return window.addEventListener("studio:open-setup-drawer",ae),()=>window.removeEventListener("studio:open-setup-drawer",ae)},[De]);const Ge=m.useCallback(()=>{O(kv)},[]);m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.message&&v({message:Te.message,severity:Te.severity??"info"})}return window.addEventListener("studio:toast",ae),()=>window.removeEventListener("studio:toast",ae)},[v]),BR();const[ft,oe]=m.useState(!1),[ve,ye]=m.useState(void 0);m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;ye(Te==null?void 0:Te.provider),oe(!0)}return window.addEventListener("studio:open-settings",ae),()=>window.removeEventListener("studio:open-settings",ae)},[]),m.useEffect(()=>{document.documentElement.style.setProperty("--sidebar-width",`${y}px`)},[y]),m.useEffect(()=>{function ae(){i()}return window.addEventListener("studio:content-saved",ae),()=>window.removeEventListener("studio:content-saved",ae)},[i]);const[be,Ee]=m.useState(null),[qe,He]=m.useState(()=>new Set),jt=m.useRef(!1),Dt=m.useMemo(()=>nC(),[]),St=m.useCallback(ae=>`${ae.plugin}/${ae.skill}`,[]),At=m.useCallback(ae=>{He(Se=>{const Te=new Set(Se);return Te.add(St(ae)),Te})},[St]),xe=m.useCallback(ae=>{He(Se=>{const Te=new Set(Se);return Te.delete(St(ae)),Te})},[St]),Ze=gv({delayMs:1e4,onCommit:ae=>{i(),xe(ae)},onFailure:(ae,Se)=>{xe(ae),v({message:`Couldn't delete ${ae.skill}: ${Se.message}`,severity:"error",durationMs:0,action:{label:le.actions.retry,onInvoke:()=>{At(ae),Ze.enqueueDelete(ae)}}})}});m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.skill&&Ee(Te.skill)}return window.addEventListener("studio:request-delete",ae),()=>window.removeEventListener("studio:request-delete",ae)},[]);const[Xe,kt]=m.useState(null),_t=gv({delayMs:250,apiCall:(ae,Se)=>api.uninstallSkill(ae,Se),onCommit:ae=>{i(),xe(ae)},onFailure:(ae,Se)=>{xe(ae),v({message:`Couldn't uninstall ${ae.skill}: ${Se.message}`,severity:"error",durationMs:0,action:{label:le.actions.retry,onInvoke:()=>{At(ae),_t.enqueueDelete(ae)}}})}});m.useEffect(()=>{function ae(Se){if(!(Se instanceof CustomEvent))return;const Te=Se.detail;Te!=null&&Te.skill&&kt(Te.skill)}return window.addEventListener("studio:request-uninstall",ae),()=>window.removeEventListener("studio:request-uninstall",ae)},[]);const lt=m.useCallback(()=>{const ae=Xe;if(kt(null),!ae)return;const Se={plugin:ae.plugin,skill:ae.skill};At(Se),_t.enqueueDelete(Se),v({message:`Uninstalled ${ae.skill}. Sent to your ${Dt}.`,severity:"info",durationMs:4e3})},[Xe,At,_t,v,Dt]),jn=m.useCallback(()=>{kt(null)},[]),Yt=m.useCallback(()=>{const ae=be;if(Ee(null),!ae)return;const Se={plugin:ae.plugin,skill:ae.skill};At(Se),Ze.enqueueDelete(Se);const Te=jt.current?"":`Sent to your ${Dt}. Open Trash to restore. `;jt.current=!0,v({message:`${Te}Deleted ${ae.skill}`,severity:"info",durationMs:1e4,action:{label:le.actions.undo,onInvoke:()=>{Ze.cancelDelete(St(Se)),xe(Se)}}})},[be,At,xe,Ze,v,Dt,St]),mn=m.useCallback(()=>{Ee(null)},[]),un=m.useMemo(()=>t.skills.filter(ae=>!qe.has(St(ae))),[t.skills,qe,St]),ur=OC(un,(J==null?void 0:J.path)??null),Tn=m.useMemo(()=>t.selectedSkill?t.skills.find(ae=>ae.plugin===t.selectedSkill.plugin&&ae.skill===t.selectedSkill.skill)??null:null,[t.skills,t.selectedSkill]),Hn=m.useCallback(ae=>{a({plugin:ae.plugin,skill:ae.skill,origin:ae.origin,source:ae.source})},[a]),Rn=m.useMemo(()=>{if(!t.selectedSkill)return"";const ae=t.selectedSkill.origin==="installed"?"Installed":"Own";return`Viewing ${t.selectedSkill.skill} (${ae})`},[t.selectedSkill]),[wt,Be]=m.useState(null);vf([{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:"?",handler:()=>E(ae=>!ae)},{key:"cmd+shift+d",handler:()=>h(x==="light"?"dark":"light")},{key:"ctrl+shift+d",handler:()=>h(x==="light"?"dark":"light")},{key:"cmd+b",handler:()=>N(ae=>!ae)},{key:"ctrl+b",handler:()=>N(ae=>!ae)},{key:"e",handler:()=>v({message:le.actions.editPlaceholder,severity:"info"})}]);const Je=GR(),hn=WR()?r.jsx(m.Suspense,{fallback:r.jsx("div",{style:{padding:40},children:"Loading…"}),children:r.jsx(JR,{})}):Je?r.jsx(m.Suspense,{fallback:r.jsx("div",{style:{padding:40},children:"Loading…"}),children:r.jsx(ZR,{})}):r.jsx(zT,{selectedSkillInfo:Tn,activeDetailTab:T,onDetailTabChange:P,activeDetailSub:B,onDetailSubChange:z,allSkills:t.skills,onSelectSkill:Hn});return r.jsxs(r.Fragment,{children:[r.jsx(KS,{sidebarWidth:y,sidebarHidden:k||t.isMobile&&t.mobileView==="detail",banner:r.jsx(BC,{connected:S}),liveMessage:Rn,topRail:r.jsx(J2,{projectName:(f==null?void 0:f.projectName)??null,selected:t.selectedSkill,onHome:s,onRequestCreateSkill:()=>Z("standalone"),projectPickerSlot:$&&$.projects.length>0?r.jsx(SR,{workspace:$,onSwitch:D,onAdd:I,onRemove:F}):void 0,findSkillsSlot:r.jsx(KR,{})}),sidebar:r.jsx(vC,{skills:un,selectedKey:t.selectedSkill?{plugin:t.selectedSkill.plugin,skill:t.selectedSkill.skill}:null,onSelect:Hn,isLoading:t.skillsLoading,error:t.skillsError??null,onRetry:i,onContextMenu:L,outdatedByOrigin:c,activeAgentId:H,revealSkillId:t.revealSkillId,onRevealComplete:d,dirtySkillIds:ur,onSkillsChanged:i,topSlot:_.status==="ready"&&ee.length>0?r.jsxs(r.Fragment,{children:[r.jsx(uR,{agents:ee,activeAgentId:H,onActiveAgentChange:q,onOpenSetup:ae=>Ue.open(ae)}),r.jsx(mR,{activeAgentId:H})]}):null}),resizeHandle:r.jsx(AC,{initialWidth:y??Ys,onChange:b}),main:hn,statusBar:r.jsx(uk,{projectPath:(f==null?void 0:f.root)??null,modelName:(f==null?void 0:f.model)??null,health:f!=null&&f.error?"degraded":"ok",providers:(rn=f==null?void 0:f.providers)==null?void 0:rn.map(ae=>{const Se=ae.id;return{id:Se,label:ae.label,available:ae.available,kind:Se==="ollama"||Se==="lm-studio"?"start-service":Se==="anthropic"||Se==="openrouter"?"api-key":"cli-install"}})})}),r.jsx(VT,{open:w,onClose:()=>E(!1)}),r.jsx(YT,{open:Ue.isOpen,providerKey:Ue.providerKey,onClose:Ue.close}),r.jsx(GT,{state:C,onClose:Ge,onAction:(ae,Se)=>PR(ae,Se)}),r.jsx(m.Suspense,{fallback:null,children:r.jsx(XR,{onSelect:ae=>{const Se=ae.name.split("/");Se.length===3&&Be({owner:Se[0],repo:Se[1],slug:Se[2],displayName:ae.displayName??ae.name})}})}),wt&&r.jsx(m.Suspense,{fallback:null,children:r.jsx(QR,{selectedSkill:wt,onClose:()=>Be(null)})}),r.jsx(wR,{open:de,projects:($==null?void 0:$.projects)??[],onSwitch:ae=>{D(ae)},onClose:()=>M(!1)}),r.jsx(CR,{open:U,onClose:()=>K(!1),initialMode:Q,isClaudeCode:H==="claude-code",projectRoot:(J==null?void 0:J.path)??(f==null?void 0:f.projectName)??"",onCreated:ae=>{i(),setTimeout(()=>{u(ae.pluginName??"",ae.skillName)},500)}}),r.jsx(RR,{open:ie,onClose:()=>X(!1),installedNames:Fe,onInstall:(ae,Se)=>{je({plugin:ae,marketplace:Se,ref:`${ae}@${Se}`}),X(!1)},onUninstall:async ae=>{if(await new Promise(Te=>{Me({plugin:ae,resolve:Te})}))try{const Te=await fetch(`/api/plugins/${encodeURIComponent(ae)}/uninstall`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),$t=await Te.json().catch(()=>({}));if(!Te.ok||!$t.ok){v({message:$t.error??`Uninstall failed (${Te.status})`,severity:"error"});return}const Ct=$t.fallback==="orphan-cache-removed"?`Removed orphaned ${ae}.`:`Uninstalled ${ae}.`;v({message:Ct,severity:"success"}),i()}catch(Te){v({message:Te instanceof Error?Te.message:String(Te),severity:"error"})}}}),r.jsx(Xv,{open:ft,onClose:()=>oe(!1),initialProvider:ve,onToast:ae=>v({message:ae,severity:"info"})}),r.jsx(zR,{job:me,onDone:ae=>{ae.ok&&(i(),setTimeout(()=>je(null),3e3))}}),r.jsx(Vo,{open:be!==null,title:be?`Delete "${be.skill}"?`:"",body:`It will be sent to your ${Dt}. You can recover it from there.`,confirmLabel:"Delete",cancelLabel:"Cancel",variant:"destructive",onConfirm:Yt,onCancel:mn}),r.jsx(Vo,{open:Xe!==null,title:Xe?`Uninstall "${Xe.skill}"?`:"",body:`It will be sent to your ${Dt} and the lockfile entry will be removed. You can re-install with vskill install.`,confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onConfirm:lt,onCancel:jn}),r.jsx(Vo,{open:Ne!==null,title:Ne?`Uninstall ${Ne.plugin}?`:"",body:Ne?`This removes the ${Ne.plugin} plugin and all of its skills. You can reinstall it later from the marketplace.`:"",confirmLabel:"Uninstall",cancelLabel:"Cancel",variant:"destructive",onConfirm:()=>{Ne==null||Ne.resolve(!0),Me(null)},onCancel:()=>{Ne==null||Ne.resolve(!1),Me(null)}})]})}const wv="vskill.migrations.scope-rename.v1",n4={own:"authoring-project",installed:"available-project",global:"available-personal"},r4=/^vskill-sidebar-(.+)-(own|installed|global)-collapsed$/;function a4(t){if(t.getItem(wv)==="done")return;const a=[];for(let s=0;s<t.length;s++){const i=t.key(s);if(!i)continue;const c=i.match(r4);if(!c)continue;const[,u,d]=c,f=n4[d];if(!f)continue;const x=t.getItem(i);x!==null&&a.push({oldKey:i,newKey:`vskill-sidebar-${u}-${f}-collapsed`,value:x})}for(const{oldKey:s,newKey:i,value:c}of a)t.getItem(i)===null&&t.setItem(i,c),t.removeItem(s);t.setItem(wv,"done")}if(typeof PerformanceObserver<"u")try{const t=new PerformanceObserver(a=>{for(const s of a.getEntries())if(s.name==="first-contentful-paint"){window.__vskillPaint=s.startTime,t.disconnect();return}});t.observe({type:"paint",buffered:!0})}catch{}if(typeof window<"u"&&window.localStorage)try{a4(window.localStorage)}catch{}P0.createRoot(document.getElementById("root")).render(r.jsx(m.StrictMode,{children:r.jsx(cS,{children:r.jsx(lk,{children:r.jsx(e4,{})})})}));export{dc as E,Vv as L,ui as P,Ae as R,qN as S,s4 as T,Vl as _,cr as a,kb as b,FN as c,cc as d,rc as e,ke as f,$R as g,ob as h,r as j,m as r,Qo as t,Ya as u,IR as w};
|