MCPcopy Create free account
hub / github.com/Railly/agentfiles / renderPruneAction

Method renderPruneAction

main.js:20–20  ·  view source on GitHub ↗
(e,t)

Source from the content-addressed store, hash-verified

18}`,{label:"class",detail:"definition",type:"keyword"}),(0,A.snippetCompletion)('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),(0,A.snippetCompletion)('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],Bl=Ji.concat([(0,A.snippetCompletion)("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),(0,A.snippetCompletion)("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),(0,A.snippetCompletion)("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Ui=new _t.NodeWeakMap,Ki=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function nt(a){return(e,t)=>{let s=e.node.getChild("VariableDefinition");return s&&t(s,a),!0}}var Fl=["FunctionDeclaration"],Hl={FunctionDeclaration:nt("function"),ClassDeclaration:nt("class"),ClassExpression:()=>!0,EnumDeclaration:nt("constant"),TypeAliasDeclaration:nt("type"),NamespaceDeclaration:nt("namespace"),VariableDefinition(a,e){a.matchContext(Fl)||e(a,"variable")},TypeDefinition(a,e){e(a,"type")},__proto__:null};function er(a,e){let t=Ui.get(e);if(t)return t;let s=[],i=!0;function r(n,o){let l=a.sliceString(n.from,n.to);s.push({label:l,type:o})}return e.cursor(_t.IterMode.IncludeAnonymous).iterate(n=>{if(i)i=!1;else if(n.name){let o=Hl[n.name];if(o&&o(n,r)||Ki.has(n.name))return!1}else if(n.to-n.from>8192){for(let o of er(a,n.node))s.push(o);return!1}}),Ui.set(e,s),s}var Ni=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,tr=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function Jl(a){let e=(0,E.syntaxTree)(a.state).resolveInner(a.pos,-1);if(tr.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Ni.test(a.state.sliceDoc(e.from,e.to));if(!t&&!a.explicit)return null;let s=[];for(let i=e;i;i=i.parent)Ki.has(i.name)&&(s=s.concat(er(a.state.doc,i)));return{options:s,from:t?e.from:a.pos,validFor:Ni}}var le=E.LRLanguage.define({name:"javascript",parser:Gi.configure({props:[E.indentNodeProp.add({IfStatement:(0,E.continuedIndent)({except:/^\s*({|else\b)/}),TryStatement:(0,E.continuedIndent)({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:E.flatIndent,SwitchBody:a=>{let e=a.textAfter,t=/^\s*\}/.test(e),s=/^\s*(case|default)\b/.test(e);return a.baseIndent+(t?0:s?1:2)*a.unit},Block:(0,E.delimitedIndent)({closing:"}"}),ArrowFunction:a=>a.baseIndent+a.unit,"TemplateString BlockComment":()=>null,"Statement Property":(0,E.continuedIndent)({except:/^\s*{/}),JSXElement(a){let e=/^\s*<\//.test(a.textAfter);return a.lineIndent(a.node.from)+(e?0:a.unit)},JSXEscape(a){let e=/\s*\}/.test(a.textAfter);return a.lineIndent(a.node.from)+(e?0:a.unit)},"JSXOpenTag JSXSelfClosingTag"(a){return a.column(a.node.from)+a.unit}}),E.foldNodeProp.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":E.foldInside,BlockComment(a){return{from:a.from+2,to:a.to-2}},JSXElement(a){let e=a.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=a.lastChild;return{from:e.to,to:t.type.isError?a.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(a){var e;let t=(e=a.firstChild)===null||e===void 0?void 0:e.nextSibling,s=a.lastChild;return!t||t.type.isError?null:{from:t.to,to:s.type.isError?a.to:s.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),ar={test:a=>/^JSX/.test(a.name),facet:(0,E.defineLanguageFacet)({commentTokens:{block:{open:"{/*",close:"*/}"}}})},Va=le.configure({dialect:"ts"},"typescript"),qa=le.configure({dialect:"jsx",props:[E.sublanguageProp.add(a=>a.isTop?[ar]:void 0)]}),Wa=le.configure({dialect:"jsx ts",props:[E.sublanguageProp.add(a=>a.isTop?[ar]:void 0)]},"typescript"),sr=a=>({label:a,type:"keyword"}),ir="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(sr),Kl=ir.concat(["declare","implements","private","protected","public"].map(sr));function rr(a={}){let e=a.jsx?a.typescript?Wa:qa:a.typescript?Va:le,t=a.typescript?Bl.concat(Kl):Ji.concat(ir);return new E.LanguageSupport(e,[le.data.of({autocomplete:(0,A.ifNotIn)(tr,(0,A.completeFromList)(t))}),le.data.of({autocomplete:Jl}),a.jsx?aO:[]])}function eO(a){for(;;){if(a.name=="JSXOpenTag"||a.name=="JSXSelfClosingTag"||a.name=="JSXFragmentTag")return a;if(a.name=="JSXEscape"||!a.parent)return null;a=a.parent}}function Bi(a,e,t=a.length){for(let s=e?.firstChild;s;s=s.nextSibling)if(s.name=="JSXIdentifier"||s.name=="JSXBuiltin"||s.name=="JSXNamespacedName"||s.name=="JSXMemberExpression")return a.sliceString(s.from,Math.min(s.to,t));return""}var tO=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),aO=Hi.EditorView.inputHandler.of((a,e,t,s,i)=>{if((tO?a.composing:a.compositionStarted)||a.state.readOnly||e!=t||s!=">"&&s!="/"||!le.isActiveAt(a.state,e,-1))return!1;let r=i(),{state:n}=r,o=n.changeByRange(l=>{var O;let{head:c}=l,d=(0,E.syntaxTree)(n).resolveInner(c-1,-1),p;if(d.name=="JSXStartTag"&&(d=d.parent),!(n.doc.sliceString(c-1,c)!=s||d.name=="JSXAttributeValue"&&d.to>c)){if(s==">"&&d.name=="JSXFragmentTag")return{range:l,changes:{from:c,insert:"</>"}};if(s=="/"&&d.name=="JSXStartCloseTag"){let u=d.parent,g=u.parent;if(g&&u.from==c-2&&((p=Bi(n.doc,g.firstChild,c))||((O=g.firstChild)===null||O===void 0?void 0:O.name)=="JSXFragmentTag")){let f=`${p}>`;return{range:Fi.EditorSelection.cursor(c+f.length,-1),changes:{from:c,insert:f}}}}else if(s==">"){let u=eO(d);if(u&&u.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(n.doc.sliceString(c,c+2))&&(p=Bi(n.doc,u,c)))return{range:l,changes:{from:c,insert:`</${p}>`}}}}return{range:l}});return o.changes.empty?!1:(a.dispatch([r,n.update(o,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var Or=require("@codemirror/view"),cr=require("@codemirror/state"),ae=require("@codemirror/language"),ot=["_blank","_self","_top","_parent"],Ia=["ascii","utf-8","utf-16","latin1","latin1"],Ga=["get","post","put","delete"],Ua=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],te=["true","false"],Q={},sO={a:{attrs:{href:null,ping:null,type:null,media:null,target:ot,hreflang:null}},abbr:Q,address:Q,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:Q,aside:Q,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:Q,base:{attrs:{href:null,target:ot}},bdi:Q,bdo:Q,blockquote:{attrs:{cite:null}},body:Q,br:Q,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:Ua,formmethod:Ga,formnovalidate:["novalidate"],formtarget:ot,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:Q,center:Q,cite:Q,code:Q,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["disabled"],checked:["checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["disabled"],multiple:["multiple"]}},datalist:{attrs:{data:null}},dd:Q,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:Q,div:Q,dl:Q,dt:Q,em:Q,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:Q,figure:Q,footer:Q,form:{attrs:{action:null,name:null,"accept-charset":Ia,autocomplete:["on","off"],enctype:Ua,method:Ga,novalidate:["novalidate"],target:ot}},h1:Q,h2:Q,h3:Q,h4:Q,h5:Q,h6:Q,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:Q,hgroup:Q,hr:Q,html:{attrs:{manifest:null}},i:Q,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["autofocus"],checked:["checked"],disabled:["disabled"],formenctype:Ua,formmethod:Ga,formnovalidate:["novalidate"],formtarget:ot,multiple:["multiple"],readonly:["readonly"],required:["required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:Q,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:Q,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:Q,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:Ia,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:Q,noscript:Q,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["typemustmatch"]}},ol:{attrs:{reversed:["reversed"],start:null,type:["1","a","A","i","I"]},children:["li","script","template","ul","ol"]},optgroup:{attrs:{disabled:["disabled"],label:null}},option:{attrs:{disabled:["disabled"],label:null,selected:["selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:Q,param:{attrs:{name:null,value:null}},pre:Q,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:Q,rt:Q,ruby:Q,samp:Q,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:Ia}},section:Q,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:Q,source:{attrs:{src:null,type:null,media:null}},span:Q,strong:Q,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:Q,summary:Q,sup:Q,table:Q,tbody:Q,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:Q,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["autofocus"],disabled:["disabled"],readonly:["readonly"],required:["required"],wrap:["soft","hard"]}},tfoot:Q,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:Q,time:{attrs:{datetime:null}},title:Q,tr:Q,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:Q,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["autoplay"],mediagroup:["movie"],muted:["muted"],controls:["controls"]}},wbr:Q},dr={accesskey:null,class:null,contenteditable:te,contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["ar","bn","de","en-GB","en-US","es","fr","hi","id","ja","pa","pt","ru","tr","zh"],spellcheck:te,autocorrect:te,autocapitalize:te,style:null,tabindex:null,title:null,translate:["yes","no"],rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"],role:"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),"aria-activedescendant":null,"aria-atomic":te,"aria-autocomplete":["inline","list","both","none"],"aria-busy":te,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":te,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":te,"aria-hidden":te,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":te,"aria-multiselectable":te,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":te,"aria-relevant":null,"aria-required":te,"aria-selected":["true","false","undefined"],"aria-setsize":null,"aria-sort":["ascending","descending","none","other"],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},pr="beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload".split(" ").map(a=>"on"+a);for(let a of pr)dr[a]=null;var Ee=class{constructor(e,t){this.tags={...sO,...e},this.globalAttrs={...dr,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};Ee.default=new Ee;function Me(a,e,t=a.length){if(!e)return"";let s=e.firstChild,i=s&&s.getChild("TagName");return i?a.sliceString(i.from,Math.min(i.to,t)):""}function Ve(a,e=!1){for(;a;a=a.parent)if(a.name=="Element")if(e)e=!1;else return a;return null}function ur(a,e,t){let s=t.tags[Me(a,Ve(e))];return s?.children||t.allTags}function Na(a,e){let t=[];for(let s=Ve(e);s&&!s.type.isTop;s=Ve(s.parent)){let i=Me(a,s);if(i&&s.lastChild.name=="CloseTag")break;i&&t.indexOf(i)<0&&(e.name=="EndTag"||e.from>=s.firstChild.to)&&t.push(i)}return t}var hr=/^[:\-\.\w\u00b7-\uffff]*$/;function nr(a,e,t,s,i){let r=/\s*>/.test(a.sliceDoc(i,i+5))?"":">",n=Ve(t,t.name=="StartTag"||t.name=="TagName");return{from:s,to:i,options:ur(a.doc,n,e).map(o=>({label:o,type:"type"})).concat(Na(a.doc,t).map((o,l)=>({label:"/"+o,apply:"/"+o+r,type:"type",boost:99-l}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function or(a,e,t,s){let i=/\s*>/.test(a.sliceDoc(s,s+5))?"":">";return{from:t,to:s,options:Na(a.doc,e).map((r,n)=>({label:r,apply:r+i,type:"type",boost:99-n})),validFor:hr}}function iO(a,e,t,s){let i=[],r=0;for(let n of ur(a.doc,t,e))i.push({label:"<"+n,type:"type"});for(let n of Na(a.doc,t))i.push({label:"</"+n+">",type:"type",boost:99-r++});return{from:s,to:s,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function rO(a,e,t,s,i){let r=Ve(t),n=r?e.tags[Me(a.doc,r)]:null,o=n&&n.attrs?Object.keys(n.attrs):[],l=n&&n.globalAttrs===!1?o:o.length?o.concat(e.globalAttrNames):e.globalAttrNames;return{from:s,to:i,options:l.map(O=>({label:O,type:"property"})),validFor:hr}}function nO(a,e,t,s,i){var r;let n=(r=t.parent)===null||r===void 0?void 0:r.getChild("AttributeName"),o=[],l;if(n){let O=a.sliceDoc(n.from,n.to),c=e.globalAttrs[O];if(!c){let d=Ve(t),p=d?e.tags[Me(a.doc,d)]:null;c=p?.attrs&&p.attrs[O]}if(c){let d=a.sliceDoc(s,i).toLowerCase(),p='"',u='"';/^['"]/.test(d)?(l=d[0]=='"'?/^[^"]*$/:/^[^']*$/,p="",u=a.sliceDoc(i,i+1)==d[0]?"":d[0],d=d.slice(1),s++):l=/^[^\s<>='"]*$/;for(let g of c)o.push({label:g,apply:p+g+u,type:"constant"})}}return{from:s,to:i,options:o,validFor:l}}function mr(a,e){let{state:t,pos:s}=e,i=(0,ae.syntaxTree)(t).resolveInner(s,-1),r=i.resolve(s);for(let n=s,o;r==i&&(o=i.childBefore(n));){let l=o.lastChild;if(!l||!l.type.isError||l.from<l.to)break;r=i=o,n=l.from}return i.name=="TagName"?i.parent&&/CloseTag$/.test(i.parent.name)?or(t,i,i.from,s):nr(t,a,i,i.from,s):i.name=="StartTag"||i.name=="IncompleteTag"?nr(t,a,i,s,s):i.name=="StartCloseTag"||i.name=="IncompleteCloseTag"?or(t,i,s,s):i.name=="OpenTag"||i.name=="SelfClosingTag"||i.name=="AttributeName"?rO(t,a,i,i.name=="AttributeName"?i.from:s,s):i.name=="Is"||i.name=="AttributeValue"||i.name=="UnquotedAttributeValue"?nO(t,a,i,i.name=="Is"?s:i.from,s):e.explicit&&(r.name=="Element"||r.name=="Text"||r.name=="Document")?iO(t,a,i,s):null}function fr(a){return mr(Ee.default,a)}function oO(a){let{extraTags:e,extraGlobalAttributes:t}=a,s=t||e?new Ee(e,t):Ee.default;return i=>mr(s,i)}var lO=le.parser.configure({top:"SingleExpression"}),gr=[{tag:"script",attrs:a=>a.type=="text/typescript"||a.lang=="ts",parser:Va.parser},{tag:"script",attrs:a=>a.type=="text/babel"||a.type=="text/jsx",parser:qa.parser},{tag:"script",attrs:a=>a.type=="text/typescript-jsx",parser:Wa.parser},{tag:"script",attrs(a){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(a.type)},parser:lO},{tag:"script",attrs(a){return!a.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(a.type)},parser:le.parser},{tag:"style",attrs(a){return(!a.lang||a.lang=="css")&&(!a.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(a.type))},parser:rt.parser}],Qr=[{name:"style",parser:rt.parser.configure({top:"Styles"})}].concat(pr.map(a=>({name:a,parser:le.parser}))),Sr=ae.LRLanguage.define({name:"html",parser:Xi.configure({props:[ae.indentNodeProp.add({Element(a){let e=/^(\s*)(<\/)?/.exec(a.textAfter);return a.node.to<=a.pos+e[0].length?a.continue():a.lineIndent(a.node.from)+(e[2]?0:a.unit)},"OpenTag CloseTag SelfClosingTag"(a){return a.column(a.node.from)+a.unit},Document(a){if(a.pos+/\s*/.exec(a.textAfter)[0].length<a.node.to)return a.continue();let e=null,t;for(let s=a.node;;){let i=s.lastChild;if(!i||i.name!="Element"||i.to!=s.to)break;e=s=i}return e&&!((t=e.lastChild)&&(t.name=="CloseTag"||t.name=="SelfClosingTag"))?a.lineIndent(e.from)+a.unit:null}}),ae.foldNodeProp.add({Element(a){let e=a.firstChild,t=a.lastChild;return!e||e.name!="OpenTag"?null:{from:e.to,to:t.name=="CloseTag"?t.from:a.to}}}),ae.bracketMatchingHandle.add({"OpenTag CloseTag":a=>a.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:"<!--",close:"-->"}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-_"}}),Ct=Sr.configure({wrap:Ra(gr,Qr)});function vr(a={}){let e="",t;a.matchClosingTags===!1&&(e="noMatch"),a.selfClosingTags===!0&&(e=(e?e+" ":"")+"selfClosing"),(a.nestedLanguages&&a.nestedLanguages.length||a.nestedAttributes&&a.nestedAttributes.length)&&(t=Ra((a.nestedLanguages||[]).concat(gr),(a.nestedAttributes||[]).concat(Qr)));let s=t?Sr.configure({wrap:t,dialect:e}):e?Ct.configure({dialect:e}):Ct;return new ae.LanguageSupport(s,[Ct.data.of({autocomplete:oO(a)}),a.autoCloseTags!==!1?OO:[],rr().support,qi().support])}var lr=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" ")),OO=Or.EditorView.inputHandler.of((a,e,t,s,i)=>{if(a.composing||a.state.readOnly||e!=t||s!=">"&&s!="/"||!Ct.isActiveAt(a.state,e,-1))return!1;let r=i(),{state:n}=r,o=n.changeByRange(l=>{var O,c,d;let p=n.doc.sliceString(l.from-1,l.to)==s,{head:u}=l,g=(0,ae.syntaxTree)(n).resolveInner(u,-1),f;if(p&&s==">"&&g.name=="EndTag"){let w=g.parent;if(((c=(O=w.parent)===null||O===void 0?void 0:O.lastChild)===null||c===void 0?void 0:c.name)!="CloseTag"&&(f=Me(n.doc,w.parent,u))&&!lr.has(f)){let P=u+(n.doc.sliceString(u,u+1)===">"?1:0),Z=`</${f}>`;return{range:l,changes:{from:u,to:P,insert:Z}}}}else if(p&&s=="/"&&g.name=="IncompleteCloseTag"){let w=g.parent;if(g.from==u-2&&((d=w.lastChild)===null||d===void 0?void 0:d.name)!="CloseTag"&&(f=Me(n.doc,w,u))&&!lr.has(f)){let P=u+(n.doc.sliceString(u,u+1)===">"?1:0),Z=`${f}>`;return{range:cr.EditorSelection.cursor(u+Z.length,-1),changes:{from:u,to:P,insert:Z}}}}return{range:l}});return o.changes.empty?!1:(a.dispatch([r,n.update(o,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var Pr=require("@lezer/common"),yr=(0,_.defineLanguageFacet)({commentTokens:{block:{open:"<!--",close:"-->"}}}),wr=new Pr.NodeProp,xr=ri.configure({props:[_.foldNodeProp.add(a=>!a.is("Block")||a.is("Document")||Ha(a)!=null||cO(a)?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),wr.add(Ha),_.indentNodeProp.add({Document:()=>null}),_.languageDataProp.add({Document:yr})]});function Ha(a){let e=/^(?:ATX|Setext)Heading(\d)$/.exec(a.name);return e?+e[1]:void 0}function cO(a){return a.name=="OrderedList"||a.name=="BulletList"}function dO(a,e){let t=a;for(;;){let s=t.nextSibling,i;if(!s||(i=Ha(s.type))!=null&&i<=e)break;t=s}return t.to}var pO=_.foldService.of((a,e,t)=>{for(let s=(0,_.syntaxTree)(a).resolveInner(t,-1);s&&!(s.from<e);s=s.parent){let i=s.type.prop(wr);if(i==null)continue;let r=dO(s,i);if(r>t)return{from:t,to:r}}return null});function Ja(a){return new _.Language(yr,a,[],"markdown")}var uO=Ja(xr),hO=xr.configure([li,di,ci,pi,{props:[_.foldNodeProp.add({Table:(a,e)=>({from:e.doc.lineAt(a.from).to,to:a.to})})]}]),jt=Ja(hO);function mO(a,e){return t=>{if(t&&a){let s=null;if(t=/\S*/.exec(t)[0],typeof a=="function"?s=a(t):s=_.LanguageDescription.matchLanguageName(a,t,!0),s instanceof _.LanguageDescription)return s.support?s.support.language.parser:_.ParseContext.getSkippingParser(s.load());if(s)return s.parser}return e?e.parser:null}}var lt=class{constructor(e,t,s,i,r,n,o){this.node=e,this.from=t,this.to=s,this.spaceBefore=i,this.spaceAfter=r,this.type=n,this.item=o}blank(e,t=!0){let s=this.spaceBefore+(this.node.name=="Blockquote"?">":"");if(e!=null){for(;s.length<e;)s+=" ";return s}else{for(let i=this.to-this.from-s.length-this.spaceAfter.length;i>0;i--)s+=" ";return s+(t?this.spaceAfter:"")}}marker(e,t){let s=this.node.name=="OrderedList"?String(+Tr(this.item,e)[2]+t):"";return this.spaceBefore+s+this.type+this.spaceAfter}};function Zr(a,e){let t=[],s=[];for(let i=a;i;i=i.parent){if(i.name=="FencedCode")return s;(i.name=="ListItem"||i.name=="Blockquote")&&t.push(i)}for(let i=t.length-1;i>=0;i--){let r=t[i],n,o=e.lineAt(r.from),l=r.from-o.from;if(r.name=="Blockquote"&&(n=/^ *>( ?)/.exec(o.text.slice(l))))s.push(new lt(r,l,l+n[0].length,"",n[1],">",null));else if(r.name=="ListItem"&&r.parent.name=="OrderedList"&&(n=/^( *)\d+([.)])( *)/.exec(o.text.slice(l)))){let O=n[3],c=n[0].length;O.length>=4&&(O=O.slice(0,O.length-4),c-=4),s.push(new lt(r.parent,l,l+c,n[1],O,n[2],r))}else if(r.name=="ListItem"&&r.parent.name=="BulletList"&&(n=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(o.text.slice(l)))){let O=n[4],c=n[0].length;O.length>4&&(O=O.slice(0,O.length-4),c-=4);let d=n[2];n[3]&&(d+=n[3].replace(/[xX]/," ")),s.push(new lt(r.parent,l,l+c,n[1],O,d,r))}}return s}function Tr(a,e){return/^(\s*)(\d+)(?=[.)])/.exec(e.sliceString(a.from,a.from+10))}function Ba(a,e,t,s=0){for(let i=-1,r=a;;){if(r.name=="ListItem"){let o=Tr(r,e),l=+o[2];if(i>=0){if(l!=i+1)return;t.push({from:r.from+o[1].length,to:r.from+o[0].length,insert:String(i+2+s)})}i=l}let n=r.nextSibling;if(!n)break;r=n}}function Ka(a,e){let t=/^[ \t]*/.exec(a)[0].length;if(!t||e.facet(_.indentUnit)!=" ")return a;let s=(0,V.countColumn)(a,4,t),i="";for(let r=s;r>0;)r>=4?(i+=" ",r-=4):(i+=" ",r--);return i+a.slice(t)}var fO=(a={})=>({state:e,dispatch:t})=>{let s=(0,_.syntaxTree)(e),{doc:i}=e,r=null,n=e.changeByRange(o=>{if(!o.empty||!jt.isActiveAt(e,o.from,-1)&&!jt.isActiveAt(e,o.from,1))return r={range:o};let l=o.from,O=i.lineAt(l),c=Zr(s.resolveInner(l,-1),i);for(;c.length&&c[c.length-1].from>l-O.from;)c.pop();if(!c.length)return r={range:o};let d=c[c.length-1];if(d.to-d.spaceAfter.length>l-O.from)return r={range:o};let p=l>=d.to-d.spaceAfter.length&&!/\S/.test(O.text.slice(d.to));if(d.item&&p){let P=d.node.firstChild,Z=d.node.getChild("ListItem","ListItem");if(P.to>=l||Z&&Z.to<l||O.from>0&&!/[^\s>]/.test(i.lineAt(O.from-1).text)||a.nonTightLists===!1){let Y=c.length>1?c[c.length-2]:null,ge,Te="";Y&&Y.item?(ge=O.from+Y.from,Te=Y.marker(i,1)):ge=O.from+(Y?Y.to:0);let Fe=[{from:ge,to:l,insert:Te}];return d.node.name=="OrderedList"&&Ba(d.item,i,Fe,-2),Y&&Y.node.name=="OrderedList"&&Ba(Y.item,i,Fe),{range:V.EditorSelection.cursor(ge+Te.length),changes:Fe}}else{let Y=br(c,e,O);return{range:V.EditorSelection.cursor(l+Y.length+1),changes:{from:O.from,insert:Y+e.lineBreak}}}}if(d.node.name=="Blockquote"&&p&&O.from){let P=i.lineAt(O.from-1),Z=/>\s*$/.exec(P.text);if(Z&&Z.index==d.from){let Y=e.changes([{from:P.from+Z.index,to:P.to},{from:O.from+d.from,to:O.to}]);return{range:o.map(Y),changes:Y}}}let u=[];d.node.name=="OrderedList"&&Ba(d.item,i,u);let g=d.item&&d.item.from<O.from,f="";if(!g||/^[\s\d.)\-+*>]*/.exec(O.text)[0].length>=d.to)for(let P=0,Z=c.length-1;P<=Z;P++)f+=P==Z&&!g?c[P].marker(i,1):c[P].blank(P<Z?(0,V.countColumn)(O.text,4,c[P+1].from)-f.length:null);let w=l;for(;w>O.from&&/\s/.test(O.text.charAt(w-O.from-1));)w--;return f=Ka(f,e),QO(d.node,e.doc)&&(f=br(c,e,O)+e.lineBreak+f),u.push({from:w,to:l,insert:e.lineBreak+f}),{range:V.EditorSelection.cursor(w+f.length+1),changes:u}});return r?!1:(t(e.update(n,{scrollIntoView:!0,userEvent:"input"})),!0)},gO=fO();function $r(a){return a.name=="QuoteMark"||a.name=="ListMark"}function QO(a,e){if(a.name!="OrderedList"&&a.name!="BulletList")return!1;let t=a.firstChild,s=a.getChild("ListItem","ListItem");if(!s)return!1;let i=e.lineAt(t.to),r=e.lineAt(s.from),n=/^[\s>]*$/.test(i.text);return i.number+(n?0:1)<r.number}function br(a,e,t){let s="";for(let i=0,r=a.length-2;i<=r;i++)s+=a[i].blank(i<r?(0,V.countColumn)(t.text,4,a[i+1].from)-s.length:null,i<r);return Ka(s,e)}function SO(a,e){let t=a.resolveInner(e,-1),s=e;$r(t)&&(s=t.from,t=t.parent);for(let i;i=t.childBefore(s);)if($r(i))s=i.from;else if(i.name=="OrderedList"||i.name=="BulletList")t=i.lastChild,s=t.to;else break;return t}var vO=({state:a,dispatch:e})=>{let t=(0,_.syntaxTree)(a),s=null,i=a.changeByRange(r=>{let n=r.from,{doc:o}=a;if(r.empty&&jt.isActiveAt(a,r.from)){let l=o.lineAt(n),O=Zr(SO(t,n),o);if(O.length){let c=O[O.length-1],d=c.to-c.spaceAfter.length+(c.spaceAfter?1:0);if(n-l.from>d&&!/\S/.test(l.text.slice(d,n-l.from)))return{range:V.EditorSelection.cursor(l.from+d),changes:{from:l.from+d,to:n}};if(n-l.from==d&&(!c.item||l.from<=c.item.from||!/\S/.test(l.text.slice(0,c.to)))){let p=l.from+c.from;if(c.item&&c.node.from<c.item.from&&/\S/.test(l.text.slice(c.from,c.to))){let u=c.blank((0,V.countColumn)(l.text,4,c.to)-(0,V.countColumn)(l.text,4,c.from));return p==l.from&&(u=Ka(u,a)),{range:V.EditorSelection.cursor(p+u.length),changes:{from:p,to:l.from+c.to,insert:u}}}if(p<n)return{range:V.EditorSelection.cursor(p),changes:{from:p,to:n}}}}}return s={range:r}});return s?!1:(e(a.update(i,{scrollIntoView:!0,userEvent:"delete"})),!0)},$O=[{key:"Enter",run:gO},{key:"Backspace",run:vO}],Xr=vr({matchClosingTags:!1});function _r(a={}){let{codeLanguages:e,defaultCodeLanguage:t,addKeymap:s=!0,base:{parser:i}=uO,completeHTMLTags:r=!0,pasteURLAsLink:n=!0,htmlTagLanguage:o=Xr}=a;if(!(i instanceof tt))throw new RangeError("Base parser provided to `markdown` should be a Markdown parser");let l=a.extensions?[a.extensions]:[],O=[o.support,pO],c;n&&O.push(yO),t instanceof _.LanguageSupport?(O.push(t.support),c=t.language):t&&(c=t);let d=e||c?mO(e,c):void 0;l.push(ni({codeParser:d,htmlParser:o.language.parser})),s&&O.push(V.Prec.high(Et.keymap.of($O)));let p=Ja(i.configure(l));return r&&O.push(p.data.of({autocomplete:bO})),new _.LanguageSupport(p,O)}function bO(a){let{state:e,pos:t}=a,s=/<[:\-\.\w\u00b7-\uffff]*$/.exec(e.sliceDoc(t-25,t));if(!s)return null;let i=(0,_.syntaxTree)(e).resolveInner(t,-1);for(;i&&!i.type.isTop;){if(i.name=="CodeBlock"||i.name=="FencedCode"||i.name=="ProcessingInstructionBlock"||i.name=="CommentBlock"||i.name=="Link"||i.name=="Image")return null;i=i.parent}return{from:t-s[0].length,to:t,options:kO(),validFor:/^<[:\-\.\w\u00b7-\uffff]*$/}}var Fa=null;function kO(){if(Fa)return Fa;let a=fr(new kr.CompletionContext(V.EditorState.create({extensions:Xr}),0,!0));return Fa=a?a.options:[]}var PO=/code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i,yO=Et.EditorView.domEventHandlers({paste:(a,e)=>{var t;let{main:s}=e.state.selection;if(s.empty)return!1;let i=(t=a.clipboardData)===null||t===void 0?void 0:t.getData("text/plain");if(!i||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(i)||(/^www\./.test(i)&&(i="https://"+i),!jt.isActiveAt(e.state,s.from,1)))return!1;let r=(0,_.syntaxTree)(e.state),n=!1;return r.iterate({from:s.from,to:s.to,enter:o=>{(o.from>s.from||PO.test(o.name))&&(n=!0)},leave:o=>{o.to<s.to&&(n=!0)}}),n?!1:(e.dispatch({changes:[{from:s.from,insert:"["},{from:s.to,insert:`](${i})`}],userEvent:"input.paste",scrollIntoView:!0}),!0)}});var Cr=require("@codemirror/view"),jr=require("@codemirror/language"),T=require("@lezer/highlight"),Er=jr.HighlightStyle.define([{tag:T.tags.heading1,fontWeight:"700",fontSize:"1.4em"},{tag:T.tags.heading2,fontWeight:"700",fontSize:"1.2em"},{tag:T.tags.heading3,fontWeight:"700",fontSize:"1.1em"},{tag:[T.tags.heading4,T.tags.heading5,T.tags.heading6],fontWeight:"700"},{tag:T.tags.strong,fontWeight:"700"},{tag:T.tags.emphasis,fontStyle:"italic"},{tag:T.tags.strikethrough,textDecoration:"line-through"},{tag:T.tags.keyword,color:"var(--color-purple)"},{tag:[T.tags.atom,T.tags.bool],color:"var(--color-orange)"},{tag:T.tags.number,color:"var(--color-orange)"},{tag:T.tags.string,color:"var(--color-green)"},{tag:T.tags.variableName,color:"var(--text-normal)"},{tag:[T.tags.processingInstruction,T.tags.inserted],color:"var(--color-green)"},{tag:[T.tags.deleted],color:"var(--color-red)"},{tag:T.tags.comment,color:"var(--text-faint)",fontStyle:"italic"},{tag:T.tags.meta,color:"var(--text-faint)"},{tag:T.tags.link,color:"var(--text-accent)",textDecoration:"underline"},{tag:T.tags.url,color:"var(--text-accent)"},{tag:T.tags.monospace,fontFamily:"var(--font-monospace)"},{tag:[T.tags.contentSeparator],color:"var(--text-faint)"},{tag:[T.tags.definition(T.tags.variableName)],color:"var(--color-cyan)"},{tag:[T.tags.typeName],color:"var(--color-yellow)"},{tag:[T.tags.function(T.tags.variableName)],color:"var(--color-blue)"}]),Rr=Cr.EditorView.theme({"&":{backgroundColor:"var(--background-primary)",color:"var(--text-normal)",fontFamily:"var(--font-monospace)",fontSize:"var(--font-ui-small)",height:"100%"},".cm-scroller":{overflow:"auto",lineHeight:"1.6"},".cm-gutters":{backgroundColor:"var(--background-secondary)",color:"var(--text-faint)",border:"none",paddingLeft:"4px"},".cm-activeLineGutter":{backgroundColor:"var(--background-modifier-hover)",color:"var(--text-muted)"},".cm-activeLine":{backgroundColor:"var(--background-modifier-hover)"},"&.cm-focused .cm-cursor":{borderLeftColor:"var(--text-accent)"},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground":{backgroundColor:"var(--text-selection)"},".cm-foldGutter .cm-gutterElement":{color:"var(--text-faint)",cursor:"pointer"},".cm-foldPlaceholder":{backgroundColor:"var(--background-modifier-hover)",color:"var(--text-muted)",border:"none",padding:"0 4px",borderRadius:"var(--radius-s)"},".cm-tooltip":{backgroundColor:"var(--background-secondary)",color:"var(--text-normal)",border:"1px solid var(--background-modifier-border)",borderRadius:"var(--radius-s)"},".cm-tooltip-lint":{backgroundColor:"var(--background-secondary)"},".cm-lintRange-warning":{backgroundImage:"none",textDecoration:"underline wavy var(--text-warning)",textUnderlineOffset:"3px"},".cm-lintRange-info":{backgroundImage:"none",textDecoration:"underline wavy var(--text-faint)",textUnderlineOffset:"3px"},".cm-lint-marker-warning::after":{content:'"\u26A0"'}});var Lr=require("@codemirror/lint"),wO=/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,Yr=(0,Lr.linter)(a=>{let e=[],t=a.state.doc.toString();if(!t.startsWith("---"))return e;let s=t.indexOf(`
19---`,3);if(s===-1)return e.push({from:0,to:3,severity:"error",message:"Unclosed frontmatter block, missing closing ---"}),e;let r=t.slice(4,s).split(`
20`),n=4,o=[];for(let l of r){let O=l.match(/^(\w[\w-]*)\s*:(.*)/);if(O){let c=O[1],d=O[2].trim();o.includes(c)&&e.push({from:n,to:n+c.length,severity:"warning",message:`Duplicate key: "${c}"`}),o.push(c),c==="name"&&(d?d.length>64?e.push({from:n,to:n+l.length,severity:"warning",message:`name exceeds 64 chars (${d.length})`}):wO.test(d)||e.push({from:n+c.length+2,to:n+l.length,severity:"warning",message:"name must be lowercase alphanumeric with single hyphens, no leading/trailing hyphens"}):e.push({from:n,to:n+l.length,severity:"error",message:"name is required"})),c==="description"&&(d?d.length>1024&&e.push({from:n,to:n+l.length,severity:"warning",message:`description exceeds 1024 chars (${d.length})`}):e.push({from:n,to:n+l.length,severity:"warning",message:"description is empty"})),c==="compatibility"&&d.length>500&&e.push({from:n,to:n+l.length,severity:"warning",message:`compatibility exceeds 500 chars (${d.length})`})}n+=l.length+1}return e});var Dr=require("@codemirror/language"),zr=Dr.foldService.of((a,e,t)=>{let s=a.doc.lineAt(e);if(s.number!==1||s.text.trim()!=="---")return null;for(let i=s.number+1;i<=a.doc.lines;i++){let r=a.doc.line(i);if(r.text.trim()==="---")return{from:s.to,to:r.to}}return null});function Vr(a){let{doc:e,parent:t,onSave:s}=a,i=[Rr,(0,q.lineNumbers)(),(0,q.highlightActiveLineGutter)(),(0,q.highlightActiveLine)(),(0,q.highlightSpecialChars)(),(0,we.history)(),(0,pe.foldGutter)(),(0,q.drawSelection)(),(0,pe.indentOnInput)(),(0,pe.bracketMatching)(),(0,Rt.closeBrackets)(),(0,pe.syntaxHighlighting)(Er),q.EditorView.darkTheme.of(activeDocument.body.classList.contains("theme-dark")),Yr,zr,(0,Lt.lintGutter)(),q.EditorView.lineWrapping,q.keymap.of([{key:"Mod-s",run:r=>(s(r.state.doc.toString()),!0)},we.indentWithTab,...Rt.closeBracketsKeymap,...we.defaultKeymap,...we.historyKeymap,...pe.foldKeymap,...Mr.searchKeymap,...Lt.lintKeymap])];return i.push(_r()),new q.EditorView({state:Ar.EditorState.create({doc:e,extensions:i}),parent:t})}function xO(a){return Math.ceil(a.length/4)}function ZO(a){return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function qr(a){return a>=1e3?`${(a/1e3).toFixed(1)}k`:String(a)}function TO(a){return new Date(a).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}var XO=new M.Component,Yt=class{containerEl;store;settings;saveSettings;currentItem=null;isEditing=!1;app;editorView=null;constructor(e,t,s,i,r){this.containerEl=e,this.store=t,this.settings=s,this.saveSettings=i,this.app=r.app}show(e){this.destroyEditor(),this.currentItem=e,this.isEditing=!1,this.render()}clear(){this.destroyEditor(),this.currentItem=null,this.containerEl.empty(),this.containerEl.addClass("as-detail");let e=this.containerEl.createDiv("as-detail-empty");(0,M.setIcon)(e.createDiv("as-detail-empty-icon"),"file-text"),e.createDiv({text:"Select a skill to view"})}render(){this.containerEl.empty(),this.containerEl.addClass("as-detail");let e=this.currentItem;if(!e)return this.clear();this.renderToolbar(e),this.isEditing?this.renderEditor(e):this.renderPreview(e)}renderToolbar(e){let t=this.containerEl.createDiv("as-detail-toolbar"),s=t.createDiv("as-toolbar-top"),i=s.createDiv("as-toolbar-left");i.createSpan({cls:"as-detail-title",text:e.name});for(let p of e.tools){let u=W.find(f=>f.id===p);if(!u)continue;let g=i.createSpan("as-tool-name-badge");g.setCssProps({"--tool-color":u.color}),I[p]&&ne(g,p,12),g.createSpan({text:u.name})}let r=s.createDiv("as-toolbar-right"),n=r.createEl("button",{cls:"as-toolbar-btn",attr:{"aria-label":"Toggle favorite"}});(0,M.setIcon)(n,e.isFavorite?"star":"star-off"),n.addEventListener("click",()=>{this.store.toggleFavorite(e.id,this.settings),this.saveSettings(),this.render()});let o=r.createEl("button",{cls:"as-toolbar-btn",attr:{"aria-label":this.isEditing?"Preview":"Edit"}});(0,M.setIcon)(o,this.isEditing?"eye":"pencil"),o.addEventListener("click",()=>{this.isEditing=!this.isEditing,this.render()});let l=r.createEl("button",{cls:"as-toolbar-btn",attr:{"aria-label":"Show in system explorer"}});if((0,M.setIcon)(l,"folder-open"),l.addEventListener("click",()=>{ht(e.filePath)}),K()){let p=r.createEl("button",{cls:"as-toolbar-btn as-toolbar-btn-danger",attr:{"aria-label":"Remove skill"}});(0,M.setIcon)(p,"trash-2"),p.addEventListener("click",()=>{_e(this.app,"Remove skill",`Remove "${e.name}"? This will delete the skill files.`,()=>{let u=ze(`prune --skill ${e.name} --yes`);u.success?(new M.Notice(`Removed ${e.name}`,5e3),this.store.refresh(this.settings),this.clear()):new M.Notice(`Failed to remove: ${u.output}`,5e3)})})}let O=t.createDiv("as-detail-meta-bar"),c=xO(e.content),d=e.content.length;if(O.createSpan({cls:"as-meta-item",text:ZO(e.fileSize)}),O.createSpan({cls:"as-meta-item",text:`${qr(d)} chars`}),O.createSpan({cls:"as-meta-item",text:`~${qr(c)} tokens`}),O.createSpan({cls:"as-meta-item",text:TO(e.lastModified)}),O.createSpan({cls:"as-meta-item as-meta-type",text:e.type}),e.usage&&e.usage.uses>0){let p=t.createDiv("as-detail-usage-bar");p.createSpan({cls:"as-usage-stat",text:`${e.usage.uses} uses`}),p.createSpan({cls:"as-usage-stat",text:`last: ${ca(e.usage.lastUsed)}`}),e.usage.isStale&&p.createSpan({cls:"as-badge-stale",text:"stale"}),e.usage.isHeavy&&p.createSpan({cls:"as-badge-heavy",text:"heavy"})}}renderFrontmatter(e,t){let s=Object.keys(t.frontmatter),i=e.createDiv("as-frontmatter");if(t.filePath){let r=i.createDiv("as-fm-prop");r.createSpan({cls:"as-fm-key",text:"path"}),r.createSpan({cls:"as-fm-value",text:t.filePath})}if(!(s.length===0&&!t.filePath))for(let r of s){let n=t.frontmatter[r];if(n==null)continue;let o=i.createDiv("as-fm-prop");o.createSpan({cls:"as-fm-key",text:r});let l=typeof n=="object"?JSON.stringify(n):typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):JSON.stringify(n);l.length>200?o.createDiv({cls:"as-fm-value-long",text:l}):o.createSpan({cls:"as-fm-value",text:l})}}renderPreview(e){let t=this.containerEl.createDiv("as-detail-body");this.renderFrontmatter(t,e),this.renderWarnings(t,e),this.renderUsageSection(t,e),this.renderConflicts(t,e),this.renderTraces(t,e);let s=t.createDiv("as-detail-preview markdown-rendered");M.MarkdownRenderer.render(this.app,e.content,s,e.filePath,XO)}renderWarnings(e,t){let s=[];if(t.warnings?.oversized&&s.push(`${t.warnings.lineCount} lines (recommended: <500)`),t.warnings?.longDesc&&s.push(`Description is ${t.warnings.descChars} chars (recommended: <1024)`),t.conflicts&&t.conflicts.length>0){let o=t.conflicts.map(l=>l.skillName).join(", ");s.push(`Conflicts with: ${o}`)}if(s.length===0)return;let i=e.createDiv("as-warnings"),r=i.createDiv("as-warnings-icon");(0,M.setIcon)(r,"alert-triangle");let n=i.createDiv("as-warnings-list");for(let o of s)n.createDiv({cls:"as-warnings-item",text:o})}renderUsageSection(e,t){if(!t.usage||t.usage.uses===0)return;let s=e.createDiv("as-usage-section"),i=s.createDiv("as-usage-left");if(i.createSpan({cls:"as-usage-count",text:String(t.usage.uses)}),i.createSpan({cls:"as-usage-label",text:"uses"}),i.createSpan({cls:"as-usage-last",text:ca(t.usage.lastUsed)}),t.usage.daily&&t.usage.daily.length>1){let r=s.createDiv("as-usage-spark");Zs(r,t.usage.daily.map(n=>n.count),80,20)}}renderConflicts(e,t){if(!t.conflicts||t.conflicts.length===0)return;let s=e.createDiv("as-conflicts-section");s.createDiv({cls:"as-section-title",text:`Conflicts (${t.conflicts.length})`});for(let i of t.conflicts){let r=s.createDiv("as-conflict-row");r.createSpan({cls:"as-conflict-name",text:i.skillName}),r.createDiv("as-conflict-bar-wrap").createDiv("as-conflict-bar").setCssProps({"--bar-w":`${(i.similarity*100).toFixed(0)}%`}),r.createSpan({cls:"as-conflict-score",text:`${(i.similarity*100).toFixed(0)}%`})}}renderTraces(e,t){if(!K())return;let s=Ps(t.name);if(s.length===0)return;let i=e.createDiv("as-traces-section");i.createDiv({cls:"as-section-title",text:`Recent traces (${s.length})`});let r=i.createDiv("as-traces-table");for(let n of s){let o=r.createDiv("as-trace-row"),l=new Date(n.timestamp);o.createSpan({cls:"as-trace-date",text:l.toLocaleDateString(void 0,{month:"short",day:"numeric"})}),o.createSpan({cls:"as-trace-model",text:n.model.replace("claude-","").replace("-4-6","")}),o.createSpan({cls:"as-trace-tokens",text:`${(n.tokens/1e3).toFixed(1)}k`}),o.createSpan({cls:"as-trace-cost",text:n.cost>0?`$${n.cost.toFixed(2)}`:""}),o.createSpan({cls:"as-trace-duration",text:`${(n.duration/1e3).toFixed(1)}s`})}i.createDiv({cls:"as-traces-hint",text:"skillkit trace --list --skill "+t.name})}renderPruneAction(e,t){let s=e.createDiv("as-prune-section"),i=s.createEl("button",{cls:"as-prune-btn",text:"Remove this skill"});s.createSpan({cls:"as-prune-hint",text:"This skill hasn't been used in 30+ days"}),i.addEventListener("click",()=>{_e(this.app,"Remove skill",`Remove "${t.name}"? This will delete the skill files.`,()=>{let r=ze(`prune --skill ${t.name} --yes`);r.success?(new M.Notice(`Removed ${t.name}`,5e3),this.store.refresh(this.settings)):new M.Notice(`Failed to remove: ${r.output}`,5e3)})})}renderEditor(e){this.destroyEditor();let t=this.containerEl.createDiv("as-detail-body as-detail-body-editor"),s=t.createDiv("as-editor-cm");this.editorView=Vr({doc:e.content,parent:s,onSave:n=>this.saveFile(e,n)});let i=t.createDiv("as-save-bar");i.createEl("button",{cls:"as-save-btn",text:"Save"}).addEventListener("click",()=>{this.editorView&&this.saveFile(e,this.editorView.state.doc.toString())}),i.createSpan({cls:"as-save-hint",text:"Cmd+S to save"})}destroyEditor(){this.editorView&&(this.editorView.destroy(),this.editorView=null)}saveFile(e,t){try{(0,Wr.writeFileSync)(e.filePath,t,"utf-8"),e.content=t,new M.Notice(`Saved ${e.name}`,5e3)}catch(s){new M.Notice(`Failed to save: ${s instanceof Error?s.message:String(s)}`,5e3)}}};var ue=require("obsidian");var es=require("child_process"),H=require("fs"),X=require("path"),Dt=require("os"),Ot=require("obsidian"),D=(0,Dt.homedir)(),qe=(0,Dt.platform)()==="win32",Ir=(0,X.join)(D,".agents",".skill-lock.json"),_O="https://skills.sh/api";async function ts(a){if(a.length<2)return[];try{let t=(await(0,Ot.requestUrl)({url:`${_O}/search?q=${encodeURIComponent(a)}&limit=30`})).json;if(!t.skills)return[];let s=Hr();return t.skills.map(i=>({...i,installed:s.has(i.name)}))}catch{return[]}}var Gr=new Map;async function CO(a){let e=Gr.get(a);if(e)return e;let i=(await(0,Ot.requestUrl)({url:`https://api.github.com/repos/${a}`})).json.default_branch||"main",o=((await(0,Ot.requestUrl)({url:`https://api.github.com/repos/${a}/git/trees/${i}?recursive=1`})).json.tree??[]).filter(O=>O.path.endsWith("/SKILL.md")).map(O=>O.path),l={branch:i,files:o};return Gr.set(a,l),l}function jO(a,e,t){let s=e.split("/"),i=s[s.length-1]||a,r=new Set([i,a]);for(let n of t.split("/")){a.startsWith(n+"-")&&r.add(a.slice(n.length+1));for(let o of n.split("-"))a.startsWith(o+"-")&&r.add(a.slice(o.length+1))}return r}async function Nr(a,e,t){try{let{branch:s,files:i}=await CO(a),r=jO(e,t,a),n=i.find(O=>{let c=O.replace("/SKILL.md","").split("/").pop()||"";return r.has(c)});n||(n=i.find(O=>{let c=O.replace("/SKILL.md","").split("/").pop()||"";return e.includes(c)||c.includes(e)}));let o=n||`skills/${e}/SKILL.md`;return(await(0,Ot.requestUrl)({url:`https://raw.githubusercontent.com/${a}/${s}/${o}`})).text}catch{return null}}async function Br(){let a=["react","next","clerk","stripe","ai"],e=new Set,t=[];for(let s of a){let i=await ts(s);for(let r of i)e.has(r.id)||(e.add(r.id),t.push(r))}return t.sort((s,i)=>i.installs-s.installs).slice(0,20)}function EO(){let a=[];if(qe){let t=process.env.APPDATA||(0,X.join)(D,"AppData","Roaming");a.push((0,X.join)(t,"npm"),(0,X.join)(D,".bun","bin"),(0,X.join)(D,"AppData","Local","npm"))}else a.push("/usr/local/bin","/opt/homebrew/bin",(0,X.join)(D,".local","bin"),(0,X.join)(D,".bun","bin"));let e=qe?(0,X.join)(D,"AppData","Roaming","nvm"):(0,X.join)(D,".nvm","versions","node");try{for(let t of(0,H.readdirSync)(e))a.push(qe?(0,X.join)(e,t):(0,X.join)(e,t,"bin"))}catch{}return[...a,process.env.PATH||""].join(X.delimiter)}function Ur(){let a=qe?["bunx.cmd","bunx.exe","bunx"]:["bunx"],e=[];if(qe){let t=process.env.APPDATA||(0,X.join)(D,"AppData","Roaming");e.push((0,X.join)(D,".bun","bin"),(0,X.join)(t,"npm"))}else e.push((0,X.join)(D,".bun","bin"),"/usr/local/bin","/opt/homebrew/bin");for(let t of e)for(let s of a)if((0,H.existsSync)((0,X.join)(t,s)))return(0,X.join)(t,s);return"npx"}function as(a="auto"){return a==="npx"?"npx":Ur()}var Fr=[{id:"claude-code",label:"Claude Code"},{id:"cursor",label:"Cursor"},{id:"codex",label:"Codex"},{id:"github-copilot",label:"GitHub Copilot"},{id:"windsurf",label:"Windsurf"},{id:"amp",label:"Amp"},{id:"opencode",label:"OpenCode"},{id:"cline",label:"Cline"},{id:"gemini-cli",label:"Gemini CLI"},{id:"goose",label:"Goose"},{id:"kiro-cli",label:"Kiro"},{id:"roo",label:"Roo Code"},{id:"continue",label:"Continue"},{id:"antigravity",label:"Antigravity"},{id:"warp",label:"Warp"},{id:"pi",label:"Pi"},{id:"replit",label:"Replit"}],zt={"claude-code":"claude-code",cursor:"cursor",codex:"codex",copilot:"github-copilot",windsurf:"windsurf",amp:"amp",opencode:"opencode",antigravity:"antigravity","claude-desktop":"claude-code",pi:"pi","global-agents":"claude-code",aider:"claude-code"};function Hr(){let a=new Set;if(!(0,H.existsSync)(Ir))return a;try{let e=JSON.parse((0,H.readFileSync)(Ir,"utf-8"));if(e.skills)for(let t of Object.keys(e.skills))a.add(t)}catch{}return a}var RO=[(0,X.join)(D,".claude","skills"),(0,X.join)(D,".cursor","skills"),(0,X.join)(D,".codex","skills"),(0,X.join)(D,".codeium","windsurf","skills"),(0,X.join)(D,".config","amp","skills"),(0,X.join)(D,".config","opencode","skills"),(0,X.join)(D,".copilot","skills"),(0,X.join)(D,".agents","skills")];function LO(a){for(let e of RO){let t=(0,X.join)(e,a);if((0,H.existsSync)(t))try{(0,H.rmSync)(t,{recursive:!0,force:!0})}catch{}}YO(a)}function YO(a){let e=(0,X.join)(D,".agents",".skill-lock.json");if((0,H.existsSync)(e))try{let t=JSON.parse((0,H.readFileSync)(e,"utf-8"));t.skills&&t.skills[a]&&(delete t.skills[a],(0,H.writeFileSync)(e,JSON.stringify(t,null,2)+`
21`,"utf-8"))}catch{}}function At(a){let e=Hr();for(let t of a)t.installed=e.has(t.name);return a}function ss(a,e=12e4){return new Promise(t=>{(0,es.exec)(a,{encoding:"utf-8",timeout:e,env:{...process.env,PATH:EO(),NO_COLOR:"1"},shell:qe?"cmd.exe":void 0},(s,i)=>{let r=String(i??"");!s||r.includes("Done")||r.includes("Installed")||r.includes("Removed")||r.includes("Updated")?t({success:!0,output:r}):t({success:!1,output:s?.message??"Command failed"})})})}async function Jr(a,e,t={}){let s=e.length>0?`-a ${e.join(" ")}`:"-a '*'",i=t.globalInstall?"-g":"",r=t.skillName?`-s ${t.skillName}`:"",o=`${as(t.runner||"auto")} skills add ${a} ${s} ${i} ${r} -y`.replace(/\s+/g," ").trim();return ss(o)}async function Kr(a,e="auto"){let s=`${as(e)} skills remove ${a} -y`,i=await ss(s,3e4);return LO(a),{success:!0,output:i.output||`Cleaned ${a}`}}async function en(a="auto"){let t=`${as(a)} skills update`,s=await ss(t),i=s.output.match(/Updated (\d+) skill/);return{...s,count:i?parseInt(i[1]):0}}function is(a){return a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:String(a)}var We=require("fs"),an=require("path"),sn=require("os"),DO=new Set(["Read","Write","Edit","MultiEdit","Bash","Glob","Grep","WebSearch","WebFetch","TodoRead","TodoWrite","Task","Agent","Skill","LSP","NotebookEdit","AskFollowupQuestion","AttemptCompletion","SearchReplace","InsertCodeBlock","ReadImages","ExecuteCommand","ListFiles","SearchFiles","ReadFile","WriteFile","ReplaceInFile","ListCodeDefinitionNames","BrowserAction","UseMcp","shell","shell_command","update_plan","create_plan","read_file","write_file","execute_command","spawn_agent","write_stdin","multi_tool_use.parallel"]);function tn(a){return!(DO.has(a)||a.startsWith("mcp__")||a.startsWith("mcp_"))}function zO(a){let e=a.top_skills.filter(s=>tn(s.name)),t=a.top_skills.filter(s=>!tn(s.name)).reduce((s,i)=>s+i.total,0);return{...a,top_skills:e,total_invocations:Math.max(0,a.total_invocations-t),unique_skills:e.length}}function AO(){let a=De("stats"),e=De("health"),t=De("burn"),s=De("context");return{stats:a,health:e,burn:t&&t.length>0?t[0]:null,context:s}}var rs=(0,an.join)((0,sn.homedir)(),".skillkit","dashboard-cache.json"),he=null,xe=null;function MO(){if(!he&&(0,We.existsSync)(rs))try{let a=JSON.parse((0,We.readFileSync)(rs,"utf-8"));he=a.data,xe=a.cachedAt}catch{}}function VO(){if(he)try{(0,We.writeFileSync)(rs,JSON.stringify({data:he,cachedAt:xe},null,2),"utf-8")}catch{}}MO();var Mt=class{containerEl;app;constructor(e,t){this.containerEl=e,this.app=t}render(){if(this.containerEl.empty(),this.containerEl.addClass("as-dashboard"),!K()){this.renderNoSkillkit();return}if(he)this.renderDashboard(he);else{let e=this.containerEl.createDiv("as-dash-loading");e.createDiv("as-dash-spinner"),e.createDiv({cls:"as-dash-loading-text",text:"Loading analytics..."}),window.setTimeout(()=>{let t=AO();he=t,xe=Date.now(),VO(),e.remove(),this.renderDashboard(t)},10)}}renderDashboard(e){this.renderActionBar(e);let t=e.stats?zO(e.stats):null;if(t&&this.renderOverview(t,e.health),t&&this.renderTopSkills(t),e.health||e.context){let s=this.containerEl.createDiv("as-dash-row");e.health&&this.renderHealth(e.health,s),e.context&&this.renderContext(e.context,s)}e.burn&&this.renderBurn(e.burn),e.health&&this.renderStale(e.health)}renderActionBar(e){let t=this.containerEl.createDiv("as-dash-action-bar");if(xe){let n=Math.round((Date.now()-xe)/1e3),o=n<5?"just now":n<60?`${n}s ago`:`${Math.round(n/60)}m ago`;t.createSpan({cls:"as-dash-updated",text:`Updated ${o}`})}let s=t.createDiv("as-dash-action-buttons"),i=s.createEl("button",{cls:"as-action-btn",text:"Update skills"});i.addEventListener("click",()=>{i.setText("Updating..."),i.disabled=!0,en().then(n=>{if(n.success){let o=n.count>0?`Updated ${n.count} skill(s)`:"All skills up to date";new ue.Notice(o,5e3),he=null,xe=null,this.render()}else new ue.Notice(`Update failed: ${n.output}`,5e3);i.setText("Update skills"),i.disabled=!1})});let r=s.createEl("button",{cls:"as-action-btn",text:"Scan sessions"});if(r.addEventListener("click",()=>{r.setText("Scanning..."),r.disabled=!0,window.setTimeout(()=>{let n=ze("scan");n.success?(new ue.Notice("Scan complete",5e3),he=null,xe=null,this.render()):new ue.Notice(`Scan failed: ${n.output}`,5e3),r.setText("Scan sessions"),r.disabled=!1},10)}),e.health&&e.health.usage.unused_30d>0){let n=s.createEl("button",{cls:"as-action-btn as-action-btn-danger",text:`Prune ${e.health.usage.unused_30d} stale`});n.addEventListener("click",()=>{_e(this.app,"Prune stale skills",`Remove ${e.health.usage.unused_30d} unused skills? This cannot be undone.`,()=>{n.setText("Pruning..."),n.disabled=!0,window.setTimeout(()=>{let o=ze("prune --yes");o.success?(new ue.Notice("Pruned stale skills",5e3),he=null,xe=null,this.render()):new ue.Notice(`Prune failed: ${o.output}`,5e3),n.setText(`Prune ${e.health.usage.unused_30d} stale`),n.disabled=!1},10)})})}}renderNoSkillkit(){let e=this.containerEl.createDiv("as-dash-empty"),t=e.createDiv("as-dash-empty-icon");(0,ue.setIcon)(t,"bar-chart-2"),e.createEl("h3",{text:"Dashboard requires skillkit"}),e.createEl("p",{text:"Install skillkit to unlock usage analytics, burn rate, context tax, and more."}),e.createDiv("as-dash-install-cmd").createEl("code",{text:"npm i -g @crafter/skillkit && skillkit scan"}),e.createEl("a",{cls:"as-skillkit-link",text:"Learn more",href:"https://www.npmjs.com/package/@crafter/skillkit"}).addEventListener("click",r=>{r.preventDefault(),ut("https://www.npmjs.com/package/@crafter/skillkit")})}renderOverview(e,t){let s=this.containerEl.createDiv("as-dash-section");s.createDiv({cls:"as-dash-title",text:"Overview"});let i=s.createDiv("as-dash-stats");if(this.statCard(i,String(e.total_invocations),"invocations","activity"),this.statCard(i,String(e.unique_skills),"active skills","sparkles"),this.statCard(i,String(t?.installed??0),"installed","package"),this.statCard(i,String(t?.usage.unused_30d??0),"stale","alert-triangle"),e.streak&&e.streak.current>0){let r=s.createDiv("as-dash-streak-row");r.createSpan({cls:"as-streak-value",text:`${e.streak.current} day streak`}),e.streak.current>=7&&r.createSpan({cls:"as-streak-fire",text:"on fire"}),r.createSpan({cls:"as-streak-longest",text:`longest: ${e.streak.longest}d`})}if(e.velocity&&e.velocity.this_week>0){let r=s.createDiv("as-dash-velocity-row");r.createSpan({text:`This week: $${e.velocity.this_week.toFixed(0)}`}),r.createSpan({cls:"as-velocity-vs",text:`vs $${e.velocity.last_week.toFixed(0)} last week`});let n=e.velocity.change_pct,o=n>0?"as-velocity-up":n<0?"as-velocity-down":"",l=n>0?"+":"";r.createSpan({cls:`as-velocity-change ${o}`,text:`${l}${n.toFixed(0)}%`})}}statCard(e,t,s,i){let r=e.createDiv("as-stat-card"),n=r.createDiv("as-stat-icon");(0,ue.setIcon)(n,i),r.createDiv({cls:"as-stat-value",text:t}),r.createDiv({cls:"as-stat-label",text:s})}renderTopSkills(e){if(e.top_skills.length===0)return;let t=this.containerEl.createDiv("as-dash-section");t.createDiv({cls:"as-dash-title",text:`Top Skills (${e.period.days}d)`});let s=e.top_skills[0]?.total||1,i=t.createDiv("as-dash-bars");for(let r of e.top_skills.slice(0,10)){let n=i.createDiv("as-bar-row");n.createSpan({cls:"as-bar-name",text:r.name}),n.createDiv("as-bar-wrap").createDiv("as-bar-fill").setCssProps({"--bar-w":`${r.total/s*100}%`}),n.createSpan({cls:"as-bar-count",text:String(r.total)})}}renderHealth(e,t){let s=(t||this.containerEl).createDiv("as-dash-section");s.createDiv({cls:"as-dash-title",text:"Health"});let i=e.usage.used_30d+e.usage.unused_30d,r=i>0?Math.round(e.usage.used_30d/i*100):0,n=s.createDiv("as-dash-health-row"),o=n.createDiv("as-donut");o.setCssProps({"--pct":`${r}`}),o.createDiv({cls:"as-donut-label",text:`${r}%`}),o.createDiv({cls:"as-donut-sub",text:"active"});let l=n.createDiv("as-health-details");l.createDiv({cls:"as-health-line",text:`${e.usage.used_30d} used in 30d`}),l.createDiv({cls:"as-health-line as-health-warn",text:`${e.usage.unused_30d} never triggered`});let c=l.createDiv("as-budget-bar").createDiv("as-budget-fill");c.setCssProps({"--bar-w":`${e.metadata.pct}%`}),e.metadata.pct>80&&c.addClass("as-budget-over"),l.createDiv({cls:"as-health-line",text:`Metadata budget: ${e.metadata.pct}%`})}renderBurn(e){let t=this.containerEl.createDiv("as-dash-section");t.createDiv({cls:"as-dash-title",text:`Burn Rate \u2014 ${e.agent} (${e.period.days}d)`});let s=t.createDiv("as-dash-stats as-dash-stats-sm");if(this.statCard(s,`$${Math.round(e.cost.total).toLocaleString()}`,"total cost","flame"),this.statCard(s,`$${Math.round(e.cost.total/(e.period.days||1)).toLocaleString()}`,"daily avg","trending-up"),this.statCard(s,`${(e.period.sessions||0).toLocaleString()}`,"sessions","terminal"),this.statCard(s,`${((e.period.api_calls||0)/1e3).toFixed(0)}k`,"API calls","zap"),e.by_model&&e.by_model.length>0){let o=t.createDiv("as-model-breakdown");for(let l of e.by_model.slice(0,4)){let O=o.createDiv("as-model-row");O.createSpan({cls:"as-model-name",text:l.model}),O.createSpan({cls:"as-model-calls",text:`${l.apiCalls.toLocaleString()} calls`}),l.costUsd>0&&O.createSpan({cls:"as-model-cost",text:`$${Math.round(l.costUsd).toLocaleString()}`})}}let i=e.by_day.slice(-14);if(i.length===0)return;let r=Math.max(...i.map(o=>o.costUsd),1),n=t.createDiv("as-burn-chart");for(let o of i){let l=n.createDiv("as-burn-col"),O=l.createDiv("as-burn-bar"),c=Math.max(2,o.costUsd/r*100);O.setCssProps({"--bar-h":`${c}%`}),O.title=`${o.date}: $${o.costUsd.toFixed(0)}`,l.createDiv({cls:"as-burn-date",text:o.date.slice(8)})}}renderContext(e,t){let s=(t||this.containerEl).createDiv("as-dash-section");s.createDiv({cls:"as-dash-title",text:"Context Tax"});let i=e.always_loaded.total_tokens,r=[{label:"CLAUDE.md",tokens:e.always_loaded.claude_md_tokens,cls:"as-ctx-claude"},{label:"Skills metadata",tokens:e.always_loaded.skill_metadata_tokens,cls:"as-ctx-skills"},{label:"Memory",tokens:e.always_loaded.memory_tokens,cls:"as-ctx-memory"}],n=s.createDiv("as-ctx-bar");for(let O of r){let c=n.createDiv(`as-ctx-part ${O.cls}`);c.setCssProps({"--bar-w":`${O.tokens/i*100}%`}),c.title=`${O.label}: ${(O.tokens/1e3).toFixed(1)}k tokens`}let o=s.createDiv("as-ctx-legend");for(let O of r){let c=o.createDiv("as-ctx-legend-item");c.createSpan({cls:`as-ctx-dot ${O.cls}`}),c.createSpan({text:`${O.label}: ${(O.tokens/1e3).toFixed(1)}k`})}let l=s.createDiv("as-ctx-costs");l.createDiv({text:`Per session (cached): $${e.session_estimate.with_cache.toFixed(2)}`}),l.createDiv({text:`Without cache: $${e.session_estimate.without_cache.toFixed(2)}`}),l.createDiv({cls:"as-ctx-savings",text:`Cache saves ${e.session_estimate.savings_pct.toFixed(0)}%`})}renderStale(e){if(e.usage.never_used.length===0)return;let t=this.containerEl.createDiv("as-dash-section");t.createDiv({cls:"as-dash-title",text:`Stale skills (${e.usage.unused_30d})`});let s=t.createDiv("as-stale-list");for(let i of e.usage.never_used.slice(0,20))s.createDiv("as-stale-item").createSpan({text:i});e.usage.never_used.length>20&&s.createDiv({cls:"as-stale-more",text:`+${e.usage.never_used.length-20} more`})}};var de=require("obsidian"),Ge=require("fs"),hn=require("path"),mn=require("os");var Oe=require("obsidian"),Ie=require("fs"),pn=require("path"),un=require("os");var C=require("fs"),R=require("path"),Vt=require("os"),nn=require("obsidian"),on=require("crypto");var rn=new Set(["readme.md","license","license.md","changelog.md",".ds_store","thumbs.db"]);function qO(a){return(0,on.createHash)("sha256").update(a).digest("hex").slice(0,12)}function WO(a){let e=a.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);if(!e)return{frontmatter:{},content:a};try{let t=(0,nn.parseYaml)(e[1]);return{frontmatter:typeof t=="object"&&t?t:{},content:e[2]}}catch{return{frontmatter:{},content:a}}}function IO(a,e,t,s="auto",i="skill"){if(i==="command")return typeof a.name=="string"&&a.name?a.name:(0,R.basename)(t,(0,R.extname)(t));if(s==="auto"){if(typeof a.name=="string"&&a.name)return a.name;let n=e.match(/^#\s+(.+)$/m);if(n)return n[1].trim()}let r=(0,R.basename)(t,(0,R.extname)(t));return r==="SKILL"?(0,R.basename)((0,R.join)(t,"..")):r}function ln(a,e,t,s="auto",i=0){if(!(0,C.existsSync)(a)||i>3)return[];let r=[];for(let n of(0,C.readdirSync)(a,{withFileTypes:!0})){let o=(0,R.join)(a,n.name);if(!(n.isDirectory()||n.isSymbolicLink()&&(0,C.statSync)(o,{throwIfNoEntry:!1})?.isDirectory()))continue;let O=(0,R.join)(o,"SKILL.md");if((0,C.existsSync)(O)){let c=ct(O,e,t,"directory-with-skillmd",s);c&&r.push(c)}else r.push(...ln(o,e,t,s,i+1))}return r}function GO(a,e,t,s="auto"){if(!(0,C.existsSync)(a))return[];let i=[];for(let r of(0,C.readdirSync)(a,{withFileTypes:!0})){let n=(0,R.join)(a,r.name);if(r.isDirectory()||r.isSymbolicLink()&&(0,C.statSync)(n,{throwIfNoEntry:!1})?.isDirectory()){let c=(0,R.join)(n,"SKILL.md");if((0,C.existsSync)(c)){let u=ct(c,e,t,"flat-md",s);u&&i.push(u);continue}let d=(0,C.readdirSync)(n).filter(u=>u.endsWith(".md")&&!rn.has(u.toLowerCase())),p=d.find(u=>u.toLowerCase()===`${r.name.toLowerCase()}.md`)||d[0];if(p){let u=ct((0,R.join)(n,p),e,t,"flat-md",s);u&&i.push(u)}continue}let l=r.name.toLowerCase();if(!l.endsWith(".md")||rn.has(l))continue;let O=ct(n,e,t,"flat-md",s);O&&i.push(O)}return i}function UO(a,e,t,s="auto"){if(!(0,C.existsSync)(a))return[];let i=[];for(let r of(0,C.readdirSync)(a,{withFileTypes:!0})){if(!r.name.endsWith(".mdc")&&!r.name.endsWith(".md")||r.isDirectory())continue;let n=ct((0,R.join)(a,r.name),e,t,"mdc",s);n&&i.push(n)}return i}function ct(a,e,t,s="directory-with-skillmd",i="auto"){try{let r=(0,C.readFileSync)(a,"utf-8"),n=(0,C.statSync)(a),{frontmatter:o,content:l}=WO(r),O=IO(o,l,a,i,e),c=typeof o.description=="string"?o.description:"",d;try{d=(0,C.realpathSync)(a)}catch{d=a}return{id:qO(d),name:O,description:c,type:e,tools:[t],filePath:a,realPath:d,dirPath:(0,R.join)(a,".."),content:r,frontmatter:o,lastModified:n.mtimeMs,fileSize:n.size,isFavorite:!1,collections:[]}}catch{return null}}function ns(a,e,t="auto"){switch(a.pattern){case"directory-with-skillmd":return ln(a.baseDir,a.type,e,t);case"flat-md":return GO(a.baseDir,a.type,e,t);case"mdc":return UO(a.baseDir,a.type,e,t)}}function NO(a,e){let t=[],s=[{sub:".claude/skills",type:"skill",pattern:"directory-with-skillmd"},{sub:".claude/commands",type:"command",pattern:"flat-md"},{sub:".claude/agents",type:"agent",pattern:"flat-md"},{sub:".cursor/skills",type:"skill",pattern:"directory-with-skillmd"},{sub:".codex/skills",type:"skill",pattern:"directory-with-skillmd"}];for(let i of s){let r=(0,R.join)(a,i.sub);if(!(0,C.existsSync)(r))continue;let n={baseDir:r,type:i.type,pattern:i.pattern};t.push(...ns(n,e))}return t}function On(a){return a.projectsHomeDir||(0,Vt.homedir)()}function BO(a,e){let t=(0,Vt.homedir)(),s=[];for(let i of[...e.paths,...e.agentPaths]){let r=(0,R.relative)(t,i.baseDir);if(r.startsWith("..")||r.startsWith("/"))continue;let n=(0,R.join)(a,r);if((0,C.existsSync)(n))try{s.push(...ns({...i,baseDir:n},e.id))}catch{}}return s}function FO(a){let e=On(a);if(!(0,C.existsSync)(e))return[];let t=[];try{let s=new Set(["node_modules",".Trash","Library","Applications","Music","Movies","Pictures","Public"]);for(let i of(0,C.readdirSync)(e,{withFileTypes:!0})){if(!i.isDirectory()&&!i.isSymbolicLink()||s.has(i.name))continue;let r=(0,R.join)(e,i.name);for(let n of W){if(!n.isInstalled())continue;let o=a.tools[n.id];if(o&&!o.enabled)continue;let l=BO(r,n);l.length>0&&t.push({items:l,toolId:n.id})}}}catch{}return t}function os(a,e){let t=e||(0,Vt.homedir)();if(!a.startsWith(t+R.sep))return"global";let i=a.slice(t.length+1).split(R.sep);return i.length>1&&!i[0].startsWith(".")?i[0]:"global"}function cn(a){$s();let e=a.namingMode||"auto",t=new Map,s=new Map;function i(r,n){let o=t.get(r.id);if(o){o.tools.includes(n)||o.tools.push(n);return}let l=s.get(r.name);if(l){let O=t.get(l);O&&!O.tools.includes(n)&&O.tools.push(n);return}r.isFavorite=a.favorites.includes(r.id);for(let[O,c]of Object.entries(a.collections))c.includes(r.id)&&r.collections.push(O);t.set(r.id,r),s.set(r.name,r.id)}for(let r of W){if(!r.isInstalled())continue;let n=a.tools[r.id];if(n&&!n.enabled)continue;let o=[...r.paths,...r.agentPaths];for(let l of o)for(let O of ns(l,r.id,e))i(O,r.id)}for(let r of a.customScanPaths)if((0,C.existsSync)(r))for(let n of NO(r,"claude-code"))i(n,"claude-code");if(a.projectScanEnabled)for(let{items:r,toolId:n}of FO(a))for(let o of r)i(o,n);return t}function ls(){return W.filter(a=>a.isInstalled()).map(a=>a.id)}function dn(a){let e=[];for(let t of W)if(t.isInstalled())for(let s of[...t.paths,...t.agentPaths])(0,C.existsSync)(s.baseDir)&&e.push(s.baseDir);if(a?.projectScanEnabled){let t=On(a),s=new Set(["node_modules",".Trash","Library","Applications","Music","Movies","Pictures","Public"]);try{for(let i of(0,C.readdirSync)(t,{withFileTypes:!0})){if(!i.isDirectory()&&!i.isSymbolicLink()||s.has(i.name))continue;let r=(0,R.join)(t,i.name);for(let n of[".claude/skills",".claude/commands",".claude/agents",".cursor/skills",".codex/skills"]){let o=(0,R.join)(r,n);(0,C.existsSync)(o)&&e.push(o)}}}catch{}}return e}var Os={};for(let[a,e]of Object.entries(zt))Os[e]||(Os[e]=a);var cs=(0,pn.join)((0,un.homedir)(),".skillkit","install-prefs.json"),Re=null,qt=!0;function HO(){if(!Re&&(0,Ie.existsSync)(cs))try{let a=JSON.parse((0,Ie.readFileSync)(cs,"utf-8"));Re=new Set(a.agents||[]),qt=a.globalInstall??!0}catch{}}function JO(){try{(0,Ie.writeFileSync)(cs,JSON.stringify({agents:Re?[...Re]:[],globalInstall:qt}),"utf-8")}catch{}}HO();var Wt=class extends Oe.Modal{skill;settings;onInstalled;selectedAgents;isGlobal;constructor(e,t,s,i){if(super(e),this.skill=t,this.settings=s,this.onInstalled=i,Re)this.selectedAgents=new Set(Re);else{this.selectedAgents=new Set;let r=ls();for(let n of r){let o=zt[n];o&&this.selectedAgents.add(o)}}this.isGlobal=qt}onOpen(){let{contentEl:e}=this;e.addClass("as-install-modal"),e.createEl("h3",{text:`Install ${this.skill.name}`}),e.createEl("p",{cls:"as-install-source",text:this.skill.source}),new Oe.Setting(e).setName("Install globally").setDesc("Shared across all projects (~/.agents/skills/)").addToggle(l=>l.setValue(this.isGlobal).onChange(O=>{this.isGlobal=O})),new Oe.Setting(e).setName("Agents").setHeading();let t=e.createDiv("as-install-scroll"),s=ls(),i=new Set(s.map(l=>zt[l]).filter(Boolean));for(let l of Fr){let O=i.has(l.id),c=Os[l.id],p=new Oe.Setting(t).addToggle(f=>f.setValue(this.selectedAgents.has(l.id)).onChange(w=>{w?this.selectedAgents.add(l.id):this.selectedAgents.delete(l.id)})).nameEl,u=c&&I[c]?c:I[l.id]?l.id:I[l.id+"-code"]?l.id+"-code":I[l.id+"-cli"]?l.id+"-cli":null,g=p.createSpan("as-install-agent-icon");u?ne(g,u,14):g.addClass("as-install-agent-placeholder"),p.createSpan({text:l.label}),O&&p.createSpan({cls:"as-install-detected",text:"detected"})}let r=e.createDiv("as-install-footer");r.createEl("button",{text:"Cancel"}).addEventListener("click",()=>this.close()),r.createEl("button",{cls:"mod-cta",text:"Install"}).addEventListener("click",()=>this.doInstall())}doInstall(){let e=[...this.selectedAgents];if(e.length===0){new Oe.Notice("Select at least one agent",5e3);return}Re=new Set(this.selectedAgents),qt=this.isGlobal,JO(),this.close(),new Oe.Notice(`Installing ${this.skill.name}...`,3e3),Jr(this.skill.source,e,{runner:this.settings.packageRunner,globalInstall:this.isGlobal,skillName:this.skill.name}).then(t=>{t.success?(new Oe.Notice(`Installed ${this.skill.name}`,5e3),this.skill.installed=!0,this.onInstalled()):new Oe.Notice(`Failed to install ${this.skill.name}`,5e3)})}onClose(){this.contentEl.empty()}};var ds=(0,hn.join)((0,mn.homedir)(),".skillkit","marketplace-popular.json"),ce=null,It="",Ze=null,KO=new de.Component;function ec(){if(!ce&&(0,Ge.existsSync)(ds))try{let a=JSON.parse((0,Ge.readFileSync)(ds,"utf-8"));ce=At(a)}catch{}}function tc(){if(ce)try{(0,Ge.writeFileSync)(ds,JSON.stringify(ce),"utf-8")}catch{}}ec();var Gt=class{containerEl;inputEl=null;listEl=null;previewEl=null;searchTimer=null;selectedSkill=null;app;settings;onRefresh;constructor(e,t,s,i){this.containerEl=e,this.app=t.app,this.settings=s,this.onRefresh=i}render(){if(!this.inputEl){this.containerEl.empty(),this.containerEl.addClass("as-marketplace");let e=this.containerEl.createDiv("as-mp-search");this.inputEl=e.createEl("input",{type:"text",placeholder:"Search skills on skills.sh...",cls:"as-mp-search-input"}),this.inputEl.addEventListener("input",()=>{this.searchTimer&&window.clearTimeout(this.searchTimer),this.searchTimer=window.setTimeout(()=>{this.doSearch(this.inputEl.value)},300)});let t=this.containerEl.createDiv("as-mp-body");this.listEl=t.createDiv("as-mp-list"),this.previewEl=t.createDiv("as-mp-preview"),this.previewEl.createDiv({cls:"as-mp-hint",text:"Select a skill to preview."})}this.inputEl.value=It,It.length>=2&&Ze?this.showResults(Ze):ce?this.showPopular():this.loadPopular()}async loadPopular(){if(!this.listEl)return;this.listEl.empty(),this.listEl.createDiv({cls:"as-mp-loading",text:"Loading popular skills..."}),ce=await Br(),tc(),this.showPopular()}refreshList(){ce&&At(ce),Ze&&At(Ze),It.length>=2&&Ze?this.showResults(Ze):this.showPopular()}showPopular(){if(this.listEl){if(this.listEl.empty(),!ce||ce.length===0){this.listEl.createDiv({cls:"as-mp-hint",text:"Search for skills to browse and install."});return}this.listEl.createDiv({cls:"as-mp-section-title",text:"Popular"});for(let e of ce)this.renderSkillCard(e)}}showResults(e){if(this.listEl){if(this.listEl.empty(),e.length===0){this.listEl.createDiv({cls:"as-mp-hint",text:"No skills found."});return}for(let t of e)this.renderSkillCard(t)}}async doSearch(e){if(!this.listEl)return;if(It=e,e.length<2){Ze=null,this.showPopular();return}this.listEl.empty(),this.listEl.createDiv({cls:"as-mp-loading",text:"Searching..."});let t=await ts(e);Ze=t,this.showResults(t)}renderSkillCard(e){if(!this.listEl)return;let t=this.listEl.createDiv("as-mp-card");this.selectedSkill?.id===e.id&&t.addClass("is-selected");let s=t.createDiv("as-mp-card-header");s.createSpan({cls:"as-mp-card-name",text:e.name}),e.installed&&s.createSpan({cls:"as-mp-installed-badge",text:"Installed"}),t.createDiv({cls:"as-mp-card-source",text:e.source});let i=t.createDiv("as-mp-card-meta"),r=i.createSpan("as-mp-dl-icon");(0,de.setIcon)(r,"download"),i.createSpan({cls:"as-mp-card-installs",text:is(e.installs)}),t.addEventListener("click",()=>{this.selectedSkill=e,this.listEl&&this.listEl.querySelectorAll(".as-mp-card").forEach(n=>n.removeClass("is-selected")),t.addClass("is-selected"),this.showPreview(e)})}async showPreview(e){if(!this.previewEl)return;this.previewEl.empty();let s=this.previewEl.createDiv("as-mp-preview-header").createDiv("as-mp-preview-top"),i=s.createDiv("as-mp-preview-left");i.createDiv({cls:"as-mp-preview-name",text:e.name});let r=i.createDiv("as-mp-preview-meta");r.createSpan({cls:"as-mp-preview-source",text:e.source});let n=r.createSpan("as-mp-dl-icon");(0,de.setIcon)(n,"download"),r.createSpan({cls:"as-mp-preview-installs",text:is(e.installs)});let o=s.createDiv("as-mp-preview-right");if(!e.installed)this.renderInstallButton(o,e);else{o.createSpan({cls:"as-mp-installed-label",text:"Installed"});let c=o.createEl("button",{cls:"as-mp-uninstall-btn",text:"Uninstall"});c.addEventListener("click",()=>{_e(this.app,"Uninstall skill",`Remove "${e.name}" from all agents?`,()=>{c.setText("Removing..."),c.disabled=!0,new de.Notice(`Removing ${e.name}...`,3e3),Kr(e.name,this.settings.packageRunner).then(d=>{d.success?(new de.Notice(`Removed ${e.name}`,5e3),e.installed=!1,this.refreshList(),this.showPreview(e)):(new de.Notice(`Failed to remove ${e.name}`,5e3),c.setText("Uninstall"),c.disabled=!1)})})})}let l=this.previewEl.createDiv("as-mp-preview-content");l.createDiv({cls:"as-mp-loading",text:"Loading skill content..."});let O=await Nr(e.source,e.name,e.id);if(l.empty(),O){e.content=O;let c=l.createDiv("as-mp-rendered markdown-rendered");de.MarkdownRenderer.render(this.app,O,c,"",KO)}else l.createDiv({cls:"as-mp-hint",text:"Could not load skill content."})}renderInstallButton(e,t){e.createEl("button",{cls:"as-mp-install-btn",text:"Install"}).addEventListener("click",()=>{new Wt(this.app,t,this.settings,()=>{this.refreshList(),this.showPreview(t)}).open()})}};var me=require("obsidian"),fe=require("fs"),Ut=require("path");function ac(){let a=[];for(let e of W){if(!e.isInstalled())continue;let t=[];for(let s of[...e.paths,...e.agentPaths])s.type==="rule"||s.type==="memory"||t.push({sp:s,label:s.type});t.length>0&&a.push({tool:e,paths:t})}return a}var sc={skill:"sparkles",command:"terminal",agent:"bot"},Nt=class extends me.Modal{onCreated;toolOptions;selectedTool=null;selectedPath=null;name="";step="tool";constructor(e,t){super(e),this.onCreated=t,this.toolOptions=ac()}onOpen(){this.modalEl.addClass("as-create-modal"),this.render()}render(){let{contentEl:e}=this;e.empty(),this.step==="tool"?this.renderToolStep(e):this.step==="type"?this.renderTypeStep(e):this.renderNameStep(e)}renderToolStep(e){this.renderHeader(e,"Choose tool",null);let t=e.createDiv("as-create-grid");for(let s of this.toolOptions){let i=t.createDiv("as-create-card");i.style.setProperty("--tool-color",s.tool.color);let r=i.createDiv("as-create-card-icon");I[s.tool.id]&&ne(r,s.tool.id,24),i.createDiv({cls:"as-create-card-name",text:s.tool.name}),i.addEventListener("click",()=>{this.selectedTool=s,s.paths.length===1?(this.selectedPath=s.paths[0],this.step="name"):this.step="type",this.render()})}}renderTypeStep(e){if(!this.selectedTool)return;this.renderHeader(e,`${this.selectedTool.tool.name}`,()=>{this.step="tool",this.render()}),e.createDiv("as-create-subtitle").setText("What do you want to create?");let s=e.createDiv("as-create-type-grid");for(let i of this.selectedTool.paths){let r=s.createDiv("as-create-type-card");r.style.setProperty("--tool-color",this.selectedTool.tool.color);let n=sc[i.label]||"file",o=r.createDiv("as-create-type-icon");(0,me.setIcon)(o,n),r.createDiv({cls:"as-create-type-label",text:i.label}),r.addEventListener("click",()=>{this.selectedPath=i,this.step="name",this.render()})}}renderNameStep(e){if(!this.selectedTool||!this.selectedPath)return;let t=this.selectedTool.paths.length>1?"type":"tool";this.renderHeader(e,`New ${this.selectedPath.label}`,()=>{this.step=t,this.render()});let s=e.createDiv("as-create-badge");s.style.setProperty("--tool-color",this.selectedTool.tool.color);let i=s.createSpan("as-create-badge-icon");I[this.selectedTool.tool.id]&&ne(i,this.selectedTool.tool.id,14),s.createSpan({text:this.selectedTool.tool.name});let n=e.createDiv("as-create-input-wrap").createEl("input",{type:"text",placeholder:`my-${this.selectedPath.label}-name`,cls:"as-create-input"});n.value=this.name,n.addEventListener("input",()=>{this.name=n.value.trim()}),n.addEventListener("keydown",O=>{O.key==="Enter"&&this.name&&this.create()}),window.setTimeout(()=>n.focus(),10);let l=e.createDiv("as-create-actions").createEl("button",{text:`Create ${this.selectedPath.label}`,cls:"as-create-submit"});l.style.setProperty("--tool-color",this.selectedTool.tool.color),l.addEventListener("click",()=>this.create())}renderHeader(e,t,s){let i=e.createDiv("as-create-header");if(s){let r=i.createDiv("as-create-back");(0,me.setIcon)(r,"chevron-left"),r.addEventListener("click",s)}i.createDiv({cls:"as-create-title",text:t})}create(){if(!this.name||!this.selectedPath)return;let e=this.name.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"");if(!e){new me.Notice("Invalid name");return}let t=this.selectedPath.sp,s;if(t.pattern==="directory-with-skillmd"){let i=(0,Ut.join)(t.baseDir,e);if((0,fe.existsSync)(i)){new me.Notice(`Already exists: ${e}`);return}(0,fe.mkdirSync)(i,{recursive:!0}),s=(0,Ut.join)(i,"SKILL.md"),(0,fe.writeFileSync)(s,["---",`name: ${this.name}`,'description: ""',"---","",`# ${this.name}`,"","## Instructions","",""].join(`
22`),"utf-8")}else{if((0,fe.existsSync)(t.baseDir)||(0,fe.mkdirSync)(t.baseDir,{recursive:!0}),s=(0,Ut.join)(t.baseDir,`${e}.md`),(0,fe.existsSync)(s)){new me.Notice(`Already exists: ${e}.md`);return}(0,fe.writeFileSync)(s,["---",'description: ""',"---","",""].join(`
23`),"utf-8")}new me.Notice(`Created ${this.name}`),this.close(),this.onCreated(s)}onClose(){this.contentEl.empty()}};var $n=require("obsidian"),Ue=require("fs"),bn=require("path"),kn=require("os");var ps={customTags:{},favorites:[]},us={tools:{},watchEnabled:!0,watchDebounceMs:500,deepSearchDefault:!1,deepSearchScope:"both",favorites:[],collections:{},customScanPaths:[],namingMode:"auto",projectScanEnabled:!0,projectsHomeDir:"",packageRunner:"auto"};var re=require("fs"),$e=require("path"),fs=require("os"),fn=require("readline"),ic=(0,$e.join)((0,fs.homedir)(),".claude"),hs=(0,$e.join)(ic,"projects"),rc=5*1024*1024,ms=500;function nc(a){let e=(0,fs.homedir)().split($e.sep).filter(Boolean),t=e.join("-"),s=a;if(s.startsWith(t+"-"))s=s.slice(t.length+1);else if(s.startsWith("-")){s=s.slice(1);let r=e.join("-")+"-";s.startsWith(r)&&(s=s.slice(r.length))}let i=s.split("-").filter(Boolean);return i.length<=2?i.join("-")||"root":i.slice(-2).join("-")}function Bt(a){if(typeof a=="string")return a;if(Array.isArray(a)){let e=[];for(let t of a)if(typeof t=="object"&&t!==null){let s=t;s.type==="text"&&typeof s.text=="string"&&e.push(s.text)}return e.join(`

Callers

nothing calls this directly

Calls 3

_eFunction · 0.85
zeFunction · 0.85
refreshMethod · 0.45

Tested by

no test coverage detected