From b04b33a96d40af7c5e069296fdaaa7537d083e0d Mon Sep 17 00:00:00 2001 From: Railly Date: Fri, 24 Jul 2026 16:32:23 -0300 Subject: [PATCH] fix: scan Cursor .mdc rules (were silently dropped) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cursor's rule path was wired to pattern 'flat-md', which only matches .md, but Cursor rules are .mdc. The .mdc scanner (scanMdc, already implemented) was dead code — no tool used pattern 'mdc'. Net effect: the README advertised Cursor Rules support but zero real .mdc rules were ever scanned. Switches the Cursor rules path to pattern 'mdc'. Project-level scanning already derives /.cursor/rules from the global path via scanToolProjectPaths, so project rules now work too. globs and alwaysApply land in the frontmatter bag as before. Verified end to end: a project with two .cursor/rules/*.mdc files (one globbed, one alwaysApply) scans as 0 rules before the fix, 2 rules after, with globs and alwaysApply parsed. --- main.js | 2 +- src/tool-configs.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 2cf800d..b67db7d 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,4 @@ -var ra=Object.defineProperty;var Rn=Object.getOwnPropertyDescriptor;var Ln=Object.getOwnPropertyNames;var Yn=Object.prototype.hasOwnProperty;var Dn=(t,e)=>{for(var a in e)ra(t,a,{get:e[a],enumerable:!0})},zn=(t,e,a,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ln(e))!Yn.call(t,i)&&i!==a&&ra(t,i,{get:()=>e[i],enumerable:!(s=Rn(e,i))||s.enumerable});return t};var An=t=>zn(ra({},"__esModule",{value:!0}),t);var wc={};Dn(wc,{default:()=>ia});module.exports=An(wc);var jn=require("obsidian");var Tn=require("obsidian");var K=require("obsidian");function bs(){try{let t=window.require;return typeof t!="function"?null:t("electron")?.shell??null}catch{return null}}function ut(t){let e=bs();if(e){e.openExternal(t);return}window.open(t,"_blank")}function ht(t){let e=bs();e&&e.showItemInFolder(t)}var mt=require("os"),T=require("fs"),Q=require("path"),v=(0,mt.homedir)(),Ce=(0,mt.platform)()==="win32",Se=process.env.XDG_CONFIG_HOME||(Ce?(0,Q.join)(v,".config"):(0,Q.join)(v,".config")),oa=new Map;function Ps(){oa.clear()}function M(t,e){let a=oa.get(t);if(a!==void 0)return a;let s=e();return oa.set(t,s),s}function Fe(t){if(Ce){let e=process.env.ProgramFiles||"C:\\Program Files",a=process.env.LOCALAPPDATA||(0,Q.join)(v,"AppData","Local");return(0,T.existsSync)((0,Q.join)(e,t))||(0,T.existsSync)((0,Q.join)(a,"Programs",t))}return(0,T.existsSync)(`/Applications/${t}.app`)||(0,T.existsSync)((0,Q.join)(v,"Applications",`${t}.app`))}function ie(t){let e=Ce?[`${t}.cmd`,`${t}.exe`,t]:[t],a=[];if(Ce){let i=process.env.APPDATA||(0,Q.join)(v,"AppData","Roaming");a.push((0,Q.join)(i,"npm"),(0,Q.join)(v,".bun","bin"),(0,Q.join)(v,"AppData","Local","npm"))}else a.push("/usr/local/bin","/opt/homebrew/bin",(0,Q.join)(v,".local","bin"));for(let i of a)for(let r of e)if((0,T.existsSync)((0,Q.join)(i,r)))return!0;let s=Ce?(0,Q.join)(v,"AppData","Roaming","nvm"):(0,Q.join)(v,".nvm","versions","node");try{for(let i of(0,T.readdirSync)(s)){let r=Ce?(0,Q.join)(s,i):(0,Q.join)(s,i,"bin");for(let n of e)if((0,T.existsSync)((0,Q.join)(r,n)))return!0}}catch{}return!1}var na=["Code","Code - Insiders","Cursor","VSCodium","Windsurf"];function ks(t){let e;if(process.platform==="darwin")e=na.map(a=>(0,Q.join)(v,"Library","Application Support",a,"User","globalStorage",t));else if(Ce){let a=process.env.APPDATA||(0,Q.join)(v,"AppData","Roaming");e=na.map(s=>(0,Q.join)(a,s,"User","globalStorage",t))}else e=na.map(a=>(0,Q.join)(Se,a,"User","globalStorage",t));return e.some(a=>(0,T.existsSync)(a))}var U=[{id:"claude-code",name:"Claude Code",color:"#f97316",icon:"brain",paths:[{baseDir:(0,Q.join)(v,".claude","skills"),type:"skill",pattern:"directory-with-skillmd"},{baseDir:(0,Q.join)(v,".claude","commands"),type:"command",pattern:"flat-md"}],agentPaths:[{baseDir:(0,Q.join)(v,".claude","agents"),type:"agent",pattern:"flat-md"}],isInstalled:()=>M("claude-code",()=>(0,T.existsSync)((0,Q.join)(v,".claude","settings.json"))||(0,T.existsSync)((0,Q.join)(v,".claude","CLAUDE.md"))||ie("claude"))},{id:"cursor",name:"Cursor",color:"#3b82f6",icon:"mouse-pointer",paths:[{baseDir:(0,Q.join)(v,".cursor","skills"),type:"skill",pattern:"directory-with-skillmd"},{baseDir:(0,Q.join)(v,".cursor","rules"),type:"rule",pattern:"flat-md"}],agentPaths:[{baseDir:(0,Q.join)(v,".cursor","agents"),type:"agent",pattern:"flat-md"}],isInstalled:()=>M("cursor",()=>Fe("Cursor")||(0,T.existsSync)((0,Q.join)(v,".cursor","argv.json")))},{id:"windsurf",name:"Windsurf",color:"#14b8a6",icon:"wind",paths:[{baseDir:(0,Q.join)(v,".codeium","windsurf","skills"),type:"skill",pattern:"directory-with-skillmd"},{baseDir:(0,Q.join)(v,".codeium","windsurf","memories"),type:"memory",pattern:"flat-md"},{baseDir:(0,Q.join)(v,".windsurf","rules"),type:"rule",pattern:"flat-md"}],agentPaths:[],isInstalled:()=>M("windsurf",()=>Fe("Windsurf")||(0,T.existsSync)((0,Q.join)(v,".codeium","windsurf","argv.json")))},{id:"codex",name:"Codex",color:"#22c55e",icon:"book",paths:[{baseDir:(0,Q.join)(v,".codex","skills"),type:"skill",pattern:"directory-with-skillmd"},{baseDir:(0,Q.join)(v,".codex","prompts"),type:"command",pattern:"flat-md"},{baseDir:(0,Q.join)(v,".codex","memories"),type:"memory",pattern:"flat-md"}],agentPaths:[{baseDir:(0,Q.join)(v,".codex","agents"),type:"agent",pattern:"flat-md"}],isInstalled:()=>M("codex",()=>(0,T.existsSync)((0,Q.join)(v,".codex","config.toml"))||(0,T.existsSync)((0,Q.join)(v,".codex","auth.json"))||ie("codex"))},{id:"copilot",name:"Copilot",color:"#a855f7",icon:"plane",paths:[{baseDir:(0,Q.join)(v,".copilot","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("copilot",()=>(0,T.existsSync)((0,Q.join)(v,".copilot"))||ie("copilot"))},{id:"amp",name:"Amp",color:"#ec4899",icon:"zap",paths:[{baseDir:(0,Q.join)(Se,"amp","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("amp",()=>(0,T.existsSync)((0,Q.join)(Se,"amp","config.json"))||(0,T.existsSync)((0,Q.join)(Se,"amp","settings.json"))||ie("amp"))},{id:"opencode",name:"OpenCode",color:"#ef4444",icon:"terminal",paths:[{baseDir:(0,Q.join)(Se,"opencode","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("opencode",()=>Fe("OpenCode")||(0,T.existsSync)((0,Q.join)(Se,"opencode","opencode.json"))||(0,T.existsSync)((0,Q.join)(Se,"opencode","opencode.jsonc"))||ie("opencode"))},{id:"pi",name:"Pi",color:"#06b6d4",icon:"sparkles",paths:[{baseDir:(0,Q.join)(v,".pi","agent","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("pi",()=>ie("pi"))},{id:"antigravity",name:"Antigravity",color:"#ef4444",icon:"arrow-up-circle",paths:[{baseDir:(0,Q.join)(v,".gemini","antigravity","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("antigravity",()=>Fe("Antigravity")||(0,T.existsSync)((0,Q.join)(v,".gemini","antigravity","skills"))||ie("antigravity"))},{id:"claude-desktop",name:"Claude Desktop",color:"#f97316",icon:"monitor",paths:[],agentPaths:[],isInstalled:()=>M("claude-desktop",()=>Fe("Claude"))},{id:"global-agents",name:"Global",color:"#a3e635",icon:"globe",paths:[{baseDir:(0,Q.join)(v,".agents","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("global-agents",()=>(0,T.existsSync)((0,Q.join)(v,".agents","skills")))},{id:"cline",name:"Cline",color:"#8b5cf6",icon:"bot",paths:[],agentPaths:[],isInstalled:()=>M("cline",()=>(0,T.existsSync)((0,Q.join)(v,".cline"))||ks("saoudrizwan.claude-dev"))},{id:"roo-code",name:"Roo Code",color:"#0ea5e9",icon:"rocket",paths:[{baseDir:(0,Q.join)(v,".roo","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("roo-code",()=>(0,T.existsSync)((0,Q.join)(v,".roo"))||ks("RooVeterinaryInc.roo-cline"))},{id:"kilocode",name:"Kilo Code",color:"#facc15",icon:"square",paths:[{baseDir:(0,Q.join)(v,".kilocode","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("kilocode",()=>(0,T.existsSync)((0,Q.join)(v,".kilocode"))||(0,T.existsSync)((0,Q.join)(v,".local","share","kilo"))||ie("kilo"))},{id:"continue",name:"Continue",color:"#64748b",icon:"play",paths:[{baseDir:(0,Q.join)(v,".continue","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("continue",()=>(0,T.existsSync)((0,Q.join)(v,".continue"))||ie("cn"))},{id:"openhands",name:"OpenHands",color:"#fbbf24",icon:"hand",paths:[{baseDir:(0,Q.join)(v,".openhands","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("openhands",()=>(0,T.existsSync)((0,Q.join)(v,".openhands"))||ie("openhands"))},{id:"goose",name:"Goose",color:"#3b82f6",icon:"feather",paths:[{baseDir:(0,Q.join)(Se,"goose","skills"),type:"skill",pattern:"directory-with-skillmd"}],agentPaths:[],isInstalled:()=>M("goose",()=>(0,T.existsSync)((0,Q.join)(Se,"goose"))||ie("goose"))},{id:"aider",name:"Aider",color:"#eab308",icon:"wrench",paths:[],agentPaths:[],isInstalled:()=>M("aider",()=>ie("aider"))}];var W={"claude-code":{viewBox:"0 0 24 24",paths:''},cursor:{viewBox:"0 0 466.73 532.09",paths:''},windsurf:{viewBox:"0 0 24 24",paths:''},codex:{viewBox:"0 0 24 24",paths:''},copilot:{viewBox:"0 0 24 24",paths:''},opencode:{viewBox:"0 0 24 36",paths:''},"claude-desktop":{viewBox:"0 0 24 24",paths:''},"global-agents":{viewBox:"0 0 24 24",paths:''},goose:{viewBox:"0 0 24 24",paths:''},cline:{viewBox:"0 0 24 24",paths:''},continue:{viewBox:"0 0 26 24",paths:''},"roo-code":{viewBox:"0 0 96 96",paths:''},replit:{viewBox:"0 0 24 24",paths:''},"gemini-cli":{viewBox:"0 0 24 24",paths:''},amp:{viewBox:"0 0 21 21",paths:''},antigravity:{viewBox:"0 0 112 96",paths:''},kilocode:{viewBox:"0 0 39.9997627 39.9999944",paths:''},openhands:{viewBox:"0 -24 148 148",paths:''}};function oe(t,e,a=16){let s=W[e];if(!s)return;let i=createSvg("svg");i.setAttribute("viewBox",s.viewBox),i.setAttribute("width",String(a)),i.setAttribute("height",String(a)),i.setAttribute("fill","none"),i.classList.add("as-tool-svg");let n=new DOMParser().parseFromString(`${s.paths}`,"image/svg+xml");for(let o of Array.from(n.documentElement.childNodes))i.appendChild(i.ownerDocument.importNode(o,!0));t.appendChild(i)}var ft=class{containerEl;store;onToggleDashboard;onToggleMarketplace;onCreateSkill;onToggleConversations;conversationStore;dashboardActive=!1;marketplaceActive=!1;conversationsActive=!1;constructor(e,a,s,i,r,n,o){this.containerEl=e,this.store=a,this.onToggleDashboard=s,this.onToggleMarketplace=i,this.onCreateSkill=r,this.onToggleConversations=n||(()=>{}),this.conversationStore=o||null}setDashboardActive(e){this.dashboardActive=e}setMarketplaceActive(e){this.marketplaceActive=e}setConversationsActive(e){this.conversationsActive=e}render(){this.containerEl.empty(),this.containerEl.addClass("as-sidebar"),this.renderLibrarySection(),this.conversationsActive&&this.conversationStore?this.renderConversationFilters():(this.renderTypeSection(),this.renderToolSection(),this.renderProjectSection(),this.renderCollectionSection(),this.store.hasSkillkit||this.renderSkillkitCta())}renderSection(e,a){let s=this.containerEl.createDiv("as-sidebar-section");s.createDiv({cls:"as-sidebar-title",text:e});for(let i of a){let r=s.createDiv("as-sidebar-item");!this.dashboardActive&&this.isActive(i.filter)&&r.addClass("is-active");let n=r.createSpan("as-sidebar-icon");(0,K.setIcon)(n,i.icon),r.createSpan({cls:"as-sidebar-label",text:i.label}),i.count!==void 0&&r.createSpan({cls:"as-sidebar-count",text:String(i.count)}),r.addEventListener("click",()=>{this.dashboardActive&&this.onToggleDashboard(),this.marketplaceActive&&this.onToggleMarketplace(),this.store.setFilter(i.filter)})}}renderTypeSection(){let e=this.store.getTypeCounts(),s=[{label:"Skills",icon:"sparkles",type:"skill"},{label:"Commands",icon:"terminal",type:"command"},{label:"Agents",icon:"bot",type:"agent"},{label:"Rules",icon:"scroll",type:"rule"}].filter(i=>e.has(i.type)).map(i=>({label:i.label,icon:i.icon,filter:{kind:"type",type:i.type},count:e.get(i.type)||0}));s.length>0&&this.renderSection("Types",s)}renderToolSection(){let e=this.store.getToolCounts(),a=U.filter(i=>i.isInstalled()&&e.has(i.id));if(a.length===0)return;let s=this.containerEl.createDiv("as-sidebar-section");s.createDiv({cls:"as-sidebar-title",text:"Tools"});for(let i of a){let r={kind:"tool",toolId:i.id},n=s.createDiv("as-sidebar-item");!this.dashboardActive&&this.isActive(r)&&n.addClass("is-active");let o=n.createSpan("as-sidebar-icon");W[i.id]?oe(o,i.id,14):(0,K.setIcon)(o,i.icon),n.createSpan({cls:"as-sidebar-label",text:i.name}),n.createSpan({cls:"as-sidebar-count",text:String(e.get(i.id)||0)}),n.addEventListener("click",()=>{this.dashboardActive&&this.onToggleDashboard(),this.store.setFilter(r)})}}renderProjectSection(){let e=this.store.getProjectCounts();if(e.size===0)return;let a=[];for(let[s,i]of e)a.push({label:s,icon:"folder-git-2",filter:{kind:"project",project:s},count:i});a.sort((s,i)=>s.label.localeCompare(i.label)),this.renderSection("Projects",a)}renderCollectionSection(){let e=this.containerEl.createDiv("as-sidebar-section");e.createDiv({cls:"as-sidebar-title",text:"Collections"});let a=new Set;for(let s of this.store.allItems)for(let i of s.collections)a.add(i);if(a.size===0){e.createDiv({cls:"as-sidebar-empty",text:"No collections yet"});return}for(let s of a){let i={kind:"collection",name:s},r=e.createDiv("as-sidebar-item");!this.dashboardActive&&this.isActive(i)&&r.addClass("is-active");let n=r.createSpan("as-sidebar-icon");(0,K.setIcon)(n,"folder"),r.createSpan({cls:"as-sidebar-label",text:s}),r.addEventListener("click",()=>{this.dashboardActive&&this.onToggleDashboard(),this.store.setFilter(i)})}}renderLibrarySection(){let e=this.containerEl.createDiv("as-sidebar-section");e.createDiv({cls:"as-sidebar-title",text:"Library"});let a=[{label:"All Skills",icon:"layers",filter:{kind:"all"}},{label:"Favorites",icon:"star",filter:{kind:"favorites"}}],s=this.dashboardActive||this.marketplaceActive||this.conversationsActive;for(let p of a){let u=e.createDiv("as-sidebar-item");!s&&this.isActive(p.filter)&&u.addClass("is-active");let g=u.createSpan("as-sidebar-icon");(0,K.setIcon)(g,p.icon),u.createSpan({cls:"as-sidebar-label",text:p.label}),u.addEventListener("click",()=>{this.dashboardActive&&this.onToggleDashboard(),this.marketplaceActive&&this.onToggleMarketplace(),this.conversationsActive&&this.onToggleConversations(),this.store.setFilter(p.filter)})}let i=e.createDiv("as-sidebar-item");this.dashboardActive&&i.addClass("is-active");let r=i.createSpan("as-sidebar-icon");(0,K.setIcon)(r,"bar-chart-2"),i.createSpan({cls:"as-sidebar-label",text:"Dashboard"}),i.addEventListener("click",()=>{this.marketplaceActive&&this.onToggleMarketplace(),this.conversationsActive&&this.onToggleConversations(),this.dashboardActive||this.onToggleDashboard()});let n=e.createDiv("as-sidebar-item");this.marketplaceActive&&n.addClass("is-active");let o=n.createSpan("as-sidebar-icon");(0,K.setIcon)(o,"shopping-bag"),n.createSpan({cls:"as-sidebar-label",text:"Marketplace"}),n.addEventListener("click",()=>{this.dashboardActive&&this.onToggleDashboard(),this.conversationsActive&&this.onToggleConversations(),this.marketplaceActive||this.onToggleMarketplace()});let l=e.createDiv("as-sidebar-item");this.conversationsActive&&l.addClass("is-active");let O=l.createSpan("as-sidebar-icon");(0,K.setIcon)(O,"message-circle"),l.createSpan({cls:"as-sidebar-label",text:"Conversations"}),l.addEventListener("click",()=>{this.dashboardActive&&this.onToggleDashboard(),this.marketplaceActive&&this.onToggleMarketplace(),this.conversationsActive||this.onToggleConversations()});let c=e.createDiv("as-sidebar-item as-sidebar-create"),d=c.createSpan("as-sidebar-icon");(0,K.setIcon)(d,"plus"),c.createSpan({cls:"as-sidebar-label",text:"Create"}),c.addEventListener("click",()=>this.onCreateSkill())}renderSkillkitCta(){let e=this.containerEl.createDiv("as-skillkit-cta"),a=e.createDiv("as-skillkit-icon");(0,K.setIcon)(a,"bar-chart-2"),e.createDiv({cls:"as-skillkit-title",text:"Unlock analytics"}),e.createDiv({cls:"as-skillkit-desc",text:"Install skillkit to see usage stats, stale badges, and heavy skill warnings."}),e.createDiv("as-skillkit-cmd").createEl("code",{text:"npm i -g @crafter/skillkit"}),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")})}renderConversationFilters(){if(!this.conversationStore)return;let e=this.conversationStore.getProjectCounts();if(e.size>0){let a=this.containerEl.createDiv("as-sidebar-section");a.createDiv({cls:"as-sidebar-title",text:"Projects"});let s=a.createDiv("as-sidebar-item"),i=this.conversationStore.filter;i.kind==="all-conversations"&&s.addClass("is-active");let r=s.createSpan("as-sidebar-icon");(0,K.setIcon)(r,"layers"),s.createSpan({cls:"as-sidebar-label",text:"All"}),s.createSpan({cls:"as-sidebar-count",text:String(this.conversationStore.allItems.length)}),s.addEventListener("click",()=>{this.conversationStore.setFilter({kind:"all-conversations"})});let n=a.createDiv("as-sidebar-item");i.kind==="conversation-favorites"&&n.addClass("is-active");let o=n.createSpan("as-sidebar-icon");(0,K.setIcon)(o,"star"),n.createSpan({cls:"as-sidebar-label",text:"Favorites"}),n.addEventListener("click",()=>{this.conversationStore.setFilter({kind:"conversation-favorites"})});for(let[l,O]of Array.from(e.entries()).sort((c,d)=>d[1]-c[1])){let c=a.createDiv("as-sidebar-item");i.kind==="conversation-project"&&i.project===l&&c.addClass("is-active");let d=c.createSpan("as-sidebar-icon");(0,K.setIcon)(d,"folder-git-2"),c.createSpan({cls:"as-sidebar-label",text:l}),c.createSpan({cls:"as-sidebar-count",text:String(O)}),c.addEventListener("click",()=>{this.conversationStore.setFilter({kind:"conversation-project",project:l})})}}}isActive(e){let a=this.store.filter;return a.kind!==e.kind?!1:a.kind==="tool"&&e.kind==="tool"?a.toolId===e.toolId:a.kind==="type"&&e.kind==="type"?a.type===e.type:a.kind==="collection"&&e.kind==="collection"?a.name===e.name:a.kind==="project"&&e.kind==="project"?a.project===e.project:!0}};var ye=require("obsidian");var gt=class{containerEl;store;onSelect;selectedId=null;inputEl=null;listEl=null;typeFilter=null;sortBy="name";openDropdown=null;menuDropdownEl=null;outsideClickCleanup=null;constructor(e,a,s){this.containerEl=e,this.store=a,this.onSelect=s}setSelected(e){this.selectedId=e}render(){if(!this.inputEl){this.containerEl.empty(),this.containerEl.addClass("as-list");let e=this.containerEl.createDiv("as-search");this.inputEl=e.createEl("input",{type:"text",placeholder:"Search skills...",cls:"as-search-input"}),this.inputEl.addEventListener("input",()=>{this.store.setSearch(this.inputEl.value)});let a=e.createDiv("as-conv-search-actions"),s=a.createEl("button",{cls:"as-conv-icon-btn"}),i=s.createSpan("as-conv-icon-btn-icon");(0,ye.setIcon)(i,"file-search"),s.setAttribute("aria-label","Search file content"),this.store.deepSearch&&s.addClass("has-active"),s.addEventListener("click",()=>{this.store.setDeepSearch(!this.store.deepSearch),s.toggleClass("has-active",this.store.deepSearch)});let r=a.createDiv("as-conv-dropdown-wrap"),n=r.createEl("button",{cls:"as-conv-icon-btn"}),o=n.createSpan("as-conv-icon-btn-icon");(0,ye.setIcon)(o,"sliders-horizontal"),n.setAttribute("aria-label","Filter & sort"),(this.typeFilter||this.sortBy!=="name")&&n.addClass("has-active"),this.menuDropdownEl=r.createDiv("as-conv-dropdown as-conv-dropdown-wide"),this.renderMenuDropdown(),n.addEventListener("click",l=>{if(l.stopPropagation(),this.openDropdown==="menu")this.closeDropdown();else{this.closeDropdown(),this.openDropdown="menu",this.menuDropdownEl?.addClass("is-open");let O=c=>{r.contains(c.target)||this.closeDropdown()};window.setTimeout(()=>activeDocument.addEventListener("click",O),0),this.outsideClickCleanup=()=>activeDocument.removeEventListener("click",O)}}),this.listEl=this.containerEl.createDiv("as-list-items")}this.inputEl.value=this.store.searchQuery,this.renderList()}closeDropdown(){this.openDropdown=null,this.menuDropdownEl?.removeClass("is-open"),this.outsideClickCleanup&&(this.outsideClickCleanup(),this.outsideClickCleanup=null)}renderMenuDropdown(){if(!this.menuDropdownEl)return;this.menuDropdownEl.empty(),this.menuDropdownEl.createDiv("as-conv-dropdown-header").setText("Sort");let a=[{label:"Name",value:"name",icon:"arrow-up-az"},{label:"Usage",value:"usage",icon:"trending-up"}];for(let r of a){let n=this.menuDropdownEl.createDiv(`as-conv-dropdown-item ${this.sortBy===r.value?"is-active":""}`),o=n.createSpan("as-conv-dropdown-check");this.sortBy===r.value&&(0,ye.setIcon)(o,"check"),n.createSpan({cls:"as-conv-dropdown-item-label",text:r.label}),n.addEventListener("click",l=>{l.stopPropagation(),this.sortBy=r.value,this.updateMenuBtnState(),this.renderMenuDropdown(),this.renderList()})}this.menuDropdownEl.createDiv("as-conv-dropdown-header").setText("Filter");let i=[{id:null,label:"All"},{id:"stale",label:"Stale"},{id:"heavy",label:"Heavy"},{id:"oversized",label:"Oversized"},{id:"conflict",label:"Conflicts"}];for(let r of i){let n=this.typeFilter===r.id,o=this.menuDropdownEl.createDiv(`as-conv-dropdown-item ${n?"is-active":""}`),l=o.createSpan("as-conv-dropdown-check");n&&(0,ye.setIcon)(l,"check"),o.createSpan({cls:"as-conv-dropdown-item-label",text:r.label}),o.addEventListener("click",O=>{O.stopPropagation(),this.typeFilter=r.id,this.updateMenuBtnState(),this.renderMenuDropdown(),this.renderList()})}}updateMenuBtnState(){let e=this.containerEl.querySelector(".as-conv-dropdown-wrap .as-conv-icon-btn");if(e){let a=this.typeFilter!==null||this.sortBy!=="name";e.toggleClass("has-active",a)}}renderList(){if(!this.listEl)return;this.listEl.empty();let e=this.store.filteredItems;if(this.typeFilter)switch(this.typeFilter){case"stale":e=e.filter(a=>a.usage?.isStale);break;case"heavy":e=e.filter(a=>a.usage?.isHeavy);break;case"oversized":e=e.filter(a=>a.warnings?.oversized);break;case"conflict":e=e.filter(a=>a.conflicts&&a.conflicts.length>0);break}if(this.sortBy==="usage"&&(e=[...e].sort((a,s)=>(s.usage?.uses??0)-(a.usage?.uses??0))),this.typeFilter){let a={stale:"Stale",heavy:"Heavy",oversized:"Oversized",conflict:"Conflict"},s=this.listEl.createDiv("as-active-filter");s.createSpan({text:`Showing: ${a[this.typeFilter]??this.typeFilter}`}),s.createSpan({cls:"as-filter-clear",text:"Clear"}).addEventListener("click",()=>{this.typeFilter=null,this.updateMenuBtnState(),this.renderList()})}if(e.length===0){this.listEl.createDiv({cls:"as-list-empty",text:"No skills found"});return}for(let a of e)this.renderCard(this.listEl,a)}renderCard(e,a){let s=e.createDiv("as-skill-card");a.id===this.selectedId&&s.addClass("is-selected");let i=s.createDiv("as-skill-header");if(i.createSpan({cls:"as-skill-name",text:a.name}),a.isFavorite){let n=i.createSpan("as-skill-star");(0,ye.setIcon)(n,"star")}a.description&&s.createDiv({cls:"as-skill-desc",text:a.description.length>80?a.description.slice(0,80)+"...":a.description});let r=s.createDiv("as-skill-meta");r.createSpan({cls:`as-type-tag as-type-${a.type}`,text:a.type});for(let n of a.tools){let o=U.find(O=>O.id===n);if(!o)continue;let l=r.createSpan("as-tool-badge");l.title=o.name,l.setAttribute("aria-label",o.name),l.setCssProps({"--tool-color":o.color}),W[n]?oe(l,n,12):l.addClass("as-tool-badge-dot")}a.usage&&(a.usage.uses>0&&r.createSpan({cls:"as-usage-badge",text:`${a.usage.uses}`,attr:{"aria-label":`Used ${a.usage.uses} times`}}),a.usage.isStale&&r.createSpan({cls:"as-badge-stale",text:"stale"}),a.usage.isHeavy&&r.createSpan({cls:"as-badge-heavy",text:"heavy"})),a.warnings?.oversized&&r.createSpan({cls:"as-badge-warn",text:"oversized"}),a.conflicts&&a.conflicts.length>0&&r.createSpan({cls:"as-badge-conflict",text:"conflict"}),s.addEventListener("click",()=>{this.selectedId=a.id,this.onSelect(a)}),s.addEventListener("contextmenu",n=>{n.preventDefault();let o=new ye.Menu;o.addItem(l=>l.setTitle("Reveal in system explorer").setIcon("folder-open").onClick(()=>ht(a.filePath))),o.addItem(l=>l.setTitle("Copy file path").setIcon("copy").onClick(()=>navigator.clipboard.writeText(a.filePath))),o.showAtMouseEvent(n)})}};var V=require("obsidian"),Ur=require("fs");var _e=require("child_process"),le=require("fs"),$=require("path"),Qt=require("os"),Mn=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 Vn(t){return!(Mn.has(t)||t.startsWith("mcp__")||t.startsWith("mcp_"))}var x=(0,Qt.homedir)(),H=(0,Qt.platform)()==="win32",qn=(0,$.join)(x,".skillkit","analytics.db"),la=H?["skillkit.cmd","skillkit.exe","skillkit"]:["skillkit"];function St(){let t=[];if(H){let a=process.env.APPDATA||(0,$.join)(x,"AppData","Roaming");t.push((0,$.join)(a,"npm"),(0,$.join)(x,".bun","bin"),(0,$.join)(x,"AppData","Local","npm"))}else t.push("/usr/local/bin","/opt/homebrew/bin",(0,$.join)(x,".local","bin"),(0,$.join)(x,".bun","bin"),(0,$.join)(x,".local","share","pnpm"),(0,$.join)(x,".volta","bin"),(0,$.join)(x,".yarn","bin"),(0,$.join)(x,".config","yarn","global","node_modules",".bin"),(0,$.join)(x,".fnm","aliases","default","bin"),(0,$.join)(x,".asdf","shims"),(0,$.join)(x,".proto","bin"));let e=H?(0,$.join)(x,"AppData","Roaming","nvm"):(0,$.join)(x,".nvm","versions","node");try{for(let a of(0,le.readdirSync)(e))t.push(H?(0,$.join)(e,a):(0,$.join)(e,a,"bin"))}catch{}if(!H){let a=(0,$.join)(x,".local","share","mise","installs");for(let s of["node","bun"])try{for(let i of(0,le.readdirSync)((0,$.join)(a,s)))t.push((0,$.join)(a,s,i,"bin"))}catch{}}return[...t,process.env.PATH||""].join($.delimiter)}function ys(t){try{return(0,_e.execSync)(`"${t}" help`,{encoding:"utf-8",timeout:5e3,env:{...process.env,NO_COLOR:"1",PATH:St()},stdio:["pipe","pipe","pipe"],shell:H?"cmd.exe":void 0}).includes("Analytics for AI agent skills")}catch{return!1}}function Wn(){let t=[],e=[];if(H){let s=process.env.APPDATA||(0,$.join)(x,"AppData","Roaming");e.push((0,$.join)(s,"npm"),(0,$.join)(x,".bun","bin"),(0,$.join)(x,"AppData","Local","npm"))}else e.push("/usr/local/bin","/opt/homebrew/bin",(0,$.join)(x,".local","bin"),(0,$.join)(x,".bun","bin"),(0,$.join)(x,".local","share","mise","shims"),(0,$.join)(x,".local","share","pnpm"),(0,$.join)(x,".volta","bin"),(0,$.join)(x,".yarn","bin"),(0,$.join)(x,".config","yarn","global","node_modules",".bin"),(0,$.join)(x,".fnm","aliases","default","bin"),(0,$.join)(x,".asdf","shims"),(0,$.join)(x,".proto","bin"));for(let s of e)for(let i of la){let r=(0,$.join)(s,i);(0,le.existsSync)(r)&&t.push(r)}let a=H?(0,$.join)(x,"AppData","Roaming","nvm"):(0,$.join)(x,".nvm","versions","node");try{for(let s of(0,le.readdirSync)(a)){let i=H?(0,$.join)(a,s):(0,$.join)(a,s,"bin");for(let r of la){let n=(0,$.join)(i,r);(0,le.existsSync)(n)&&t.push(n)}}}catch{}if(!H){let s=(0,$.join)(x,".local","share","mise","installs");for(let i of["node","bun"])try{for(let r of(0,le.readdirSync)((0,$.join)(s,i))){let n=(0,$.join)(s,i,r,"bin","skillkit");(0,le.existsSync)(n)&&t.push(n)}}catch{}}if(t.length===0&&!H){let s=[["pnpm","bin","-g"],["yarn","global","bin"],["npm","bin","-g"]];for(let i of s)try{let r=(0,_e.execSync)(i.join(" "),{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim();if(r)for(let n of la){let o=(0,$.join)(r,n);if((0,le.existsSync)(o)&&ys(o))return o}}catch{}}for(let s of t)if(ys(s))return s;return null}var Oa;function vt(){return Oa===void 0&&(Oa=Wn()),Oa}function ee(){return vt()!==null||(0,le.existsSync)(qn)}function De(t){let e=vt();if(!e)return null;try{let a=(0,_e.execSync)(`${e} ${t} --json`,{encoding:"utf-8",timeout:15e3,env:{...process.env,NO_COLOR:"1",PATH:St()},stdio:["pipe","pipe","pipe"],shell:H?"cmd.exe":void 0}).trim();return ws(a)}catch{return null}}function ws(t){let e=t.indexOf("{"),a=t.indexOf("["),s=e===-1?a:a===-1?e:Math.min(e,a);return s===-1?null:JSON.parse(t.slice(s))}function ca(t){let e=vt();return e?new Promise(a=>{(0,_e.exec)(`${e} ${t} --json`,{encoding:"utf-8",timeout:15e3,env:{...process.env,NO_COLOR:"1",PATH:St()},shell:H?"cmd.exe":void 0},(s,i)=>{if(s){a(null);return}try{a(ws(String(i).trim()))}catch{a(null)}})}):Promise.resolve(null)}function xs(t){if(!ee())return[];let e=De(`trace --list --skill ${t} --limit 5`);return Array.isArray(e)?e.map(a=>({traceId:a.trace_id,timestamp:a.timestamp,tokens:a.tokens_total,cost:a.cost_estimate,duration:a.duration_ms,model:a.model||"unknown"})):[]}async function Zs(){let t=new Map;if(!ee())return t;let e=await ca("stats");if(!e?.top_skills)return t;let a=Date.now();for(let s of e.top_skills){if(!Vn(s.name))continue;let i=s.daily.length>0?s.daily[s.daily.length-1]?.date:null,r=null;i&&(r=Math.floor((a-new Date(i).getTime())/(1e3*60*60*24))),t.set(s.name,{uses:s.total,lastUsed:i||null,daysSinceUsed:r,isStale:r!==null&&r>30,isHeavy:!1,daily:s.daily})}return t}async function Ts(){let t=new Map;if(!ee())return t;let e=await ca("conflicts --dry-run");if(!e||!("pairs"in e))return t;for(let a of e.pairs)t.has(a.skill_a)||t.set(a.skill_a,[]),t.has(a.skill_b)||t.set(a.skill_b,[]),t.get(a.skill_a).push({skillName:a.skill_b,similarity:a.similarity}),t.get(a.skill_b).push({skillName:a.skill_a,similarity:a.similarity});return t}async function Xs(){if(!ee())return{oversized:[],longDesc:[]};let t=await ca("health");return t?.warnings?{oversized:t.warnings.oversized||[],longDesc:t.warnings.long_descriptions||[]}:{oversized:[],longDesc:[]}}function ze(t){let e=vt();if(!e)return{success:!1,output:"skillkit not found"};try{return{success:!0,output:(0,_e.execSync)(`${e} ${t}`,{encoding:"utf-8",timeout:3e4,env:{...process.env,NO_COLOR:"1",PATH:St()},stdio:["pipe","pipe","pipe"],shell:H?"cmd.exe":void 0}).trim()}}catch(a){return{success:!1,output:a instanceof Error?a.message:"unknown error"}}}function da(t){if(!t)return"never";let e=Date.now()-new Date(t).getTime(),a=Math.floor(e/6e4);if(a<60)return`${a}m ago`;let s=Math.floor(a/60);if(s<24)return`${s}h ago`;let i=Math.floor(s/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function Cs(t,e,a=48,s=16){if(e.length===0)return;let i=Math.max(...e,1),r=e.map((l,O)=>{let c=O/(e.length-1||1)*a,d=s-l/i*s;return`${c.toFixed(1)},${d.toFixed(1)}`}),n=createSvg("svg");n.setAttribute("viewBox",`0 0 ${a} ${s}`),n.setAttribute("width",String(a)),n.setAttribute("height",String(s)),n.classList.add("as-sparkline");let o=createSvg("polyline");o.setAttribute("points",r.join(" ")),o.setAttribute("fill","none"),o.setAttribute("stroke","currentColor"),o.setAttribute("stroke-width","1.5"),o.setAttribute("stroke-linecap","round"),o.setAttribute("stroke-linejoin","round"),n.appendChild(o),t.appendChild(n)}var _s=require("obsidian");function je(t,e,a,s){new pa(t,e,a,s).open()}var pa=class extends _s.Modal{title;message;onConfirm;constructor(e,a,s,i){super(e),this.title=a,this.message=s,this.onConfirm=i}onOpen(){let{contentEl:e}=this;e.addClass("as-confirm-modal"),e.createEl("p",{cls:"as-confirm-title",text:this.title}),e.createEl("p",{cls:"as-confirm-message",text:this.message});let a=e.createDiv("as-confirm-buttons");a.createEl("button",{cls:"as-confirm-cancel",text:"Cancel"}).addEventListener("click",()=>this.close()),a.createEl("button",{cls:"as-confirm-action mod-warning",text:"Confirm"}).addEventListener("click",()=>{this.close(),this.onConfirm()})}onClose(){this.contentEl.empty()}};var G=require("@codemirror/view"),qr=require("@codemirror/state"),ue=require("@codemirror/language"),xe=require("@codemirror/commands"),Rt=require("@codemirror/autocomplete"),Wr=require("@codemirror/search"),Lt=require("@codemirror/lint");var I=require("@codemirror/state"),Et=require("@codemirror/view"),_=require("@codemirror/language"),wr=require("@codemirror/autocomplete");var E=require("@lezer/common"),b=require("@lezer/highlight"),kt=class t{static create(e,a,s,i,r){let n=i+(i<<8)+e+(a<<4)|0;return new t(e,a,s,n,r,[],[])}constructor(e,a,s,i,r,n,o){this.type=e,this.value=a,this.from=s,this.hash=i,this.end=r,this.children=n,this.positions=o,this.hashProp=[[E.NodeProp.contextHash,i]]}addChild(e,a){e.prop(E.NodeProp.contextHash)!=this.hash&&(e=new E.Tree(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(a)}toTree(e,a=this.end){let s=this.children.length-1;return s>=0&&(a=Math.max(a,this.positions[s]+this.children[s].length+this.from)),new E.Tree(e.types[this.type],this.children,this.positions,a-this.from).balance({makeTree:(i,r,n)=>new E.Tree(E.NodeType.none,i,r,n,this.hashProp)})}},h;(function(t){t[t.Document=1]="Document",t[t.CodeBlock=2]="CodeBlock",t[t.FencedCode=3]="FencedCode",t[t.Blockquote=4]="Blockquote",t[t.HorizontalRule=5]="HorizontalRule",t[t.BulletList=6]="BulletList",t[t.OrderedList=7]="OrderedList",t[t.ListItem=8]="ListItem",t[t.ATXHeading1=9]="ATXHeading1",t[t.ATXHeading2=10]="ATXHeading2",t[t.ATXHeading3=11]="ATXHeading3",t[t.ATXHeading4=12]="ATXHeading4",t[t.ATXHeading5=13]="ATXHeading5",t[t.ATXHeading6=14]="ATXHeading6",t[t.SetextHeading1=15]="SetextHeading1",t[t.SetextHeading2=16]="SetextHeading2",t[t.HTMLBlock=17]="HTMLBlock",t[t.LinkReference=18]="LinkReference",t[t.Paragraph=19]="Paragraph",t[t.CommentBlock=20]="CommentBlock",t[t.ProcessingInstructionBlock=21]="ProcessingInstructionBlock",t[t.Escape=22]="Escape",t[t.Entity=23]="Entity",t[t.HardBreak=24]="HardBreak",t[t.Emphasis=25]="Emphasis",t[t.StrongEmphasis=26]="StrongEmphasis",t[t.Link=27]="Link",t[t.Image=28]="Image",t[t.InlineCode=29]="InlineCode",t[t.HTMLTag=30]="HTMLTag",t[t.Comment=31]="Comment",t[t.ProcessingInstruction=32]="ProcessingInstruction",t[t.Autolink=33]="Autolink",t[t.HeaderMark=34]="HeaderMark",t[t.QuoteMark=35]="QuoteMark",t[t.ListMark=36]="ListMark",t[t.LinkMark=37]="LinkMark",t[t.EmphasisMark=38]="EmphasisMark",t[t.CodeMark=39]="CodeMark",t[t.CodeText=40]="CodeText",t[t.CodeInfo=41]="CodeInfo",t[t.LinkTitle=42]="LinkTitle",t[t.LinkLabel=43]="LinkLabel",t[t.URL=44]="URL"})(h||(h={}));var ma=class{constructor(e,a){this.start=e,this.content=a,this.marks=[],this.parsers=[]}},fa=class{constructor(){this.text="",this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return Ke(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,a=0,s=0){for(let i=a;i=e.stack[a.depth+1].value+a.baseIndent)return!0;if(a.indent>=a.baseIndent+4)return!1;let s=(t.type==h.OrderedList?Za:xa)(a,e,!1);return s>0&&(t.type!=h.BulletList||wa(a,e,!1)<0)&&a.text.charCodeAt(a.pos+s-1)==t.value}var Ws={[h.Blockquote](t,e,a){return a.next!=62?!1:(a.markers.push(y(h.QuoteMark,e.lineStart+a.pos,e.lineStart+a.pos+1)),a.moveBase(a.pos+(re(a.text.charCodeAt(a.pos+1))?2:1)),t.end=e.lineStart+a.text.length,!0)},[h.ListItem](t,e,a){return a.indent-1?!1:(a.moveBaseColumn(a.baseIndent+t.value),!0)},[h.OrderedList]:js,[h.BulletList]:js,[h.Document](){return!0}};function re(t){return t==32||t==9||t==10||t==13}function Ke(t,e=0){for(;ea&&re(t.charCodeAt(e-1));)e--;return e}function Is(t){if(t.next!=96&&t.next!=126)return-1;let e=t.pos+1;for(;e-1&&t.depth==e.stack.length&&e.parser.leafBlockParsers.indexOf(Ks.SetextHeading)>-1||s<3?-1:1}function Us(t,e){for(let a=t.stack.length-1;a>=0;a--)if(t.stack[a].type==e)return!0;return!1}function xa(t,e,a){return(t.next==45||t.next==43||t.next==42)&&(t.pos==t.text.length-1||re(t.text.charCodeAt(t.pos+1)))&&(!a||Us(e,h.BulletList)||t.skipSpace(t.pos+2)=48&&i<=57;){s++;if(s==t.text.length)return-1;i=t.text.charCodeAt(s)}return s==t.pos||s>t.pos+9||i!=46&&i!=41||st.pos+1||t.next!=49)?-1:s+1-t.pos}function Ns(t){if(t.next!=35)return-1;let e=t.pos+1;for(;e6?-1:a}function Bs(t){if(t.next!=45&&t.next!=61||t.indent>=t.baseIndent+4)return-1;let e=t.pos+1;for(;e/,Fs=/\?>/,Qa=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/,Fs=/\?>/,Qa=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*