agent-skill-manager 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +10 -1
  2. package/data/skill-index/Affitor_affiliate-skills.json +2757 -54
  3. package/data/skill-index/Eronred_aso-skills.json +1561 -31
  4. package/data/skill-index/GPTomics_bioSkills.json +22829 -440
  5. package/data/skill-index/Galaxy-Dawn_claude-scholar.json +2497 -49
  6. package/data/skill-index/Imbad0202_academic-research-skills.json +209 -5
  7. package/data/skill-index/K-Dense-AI_claude-scientific-skills.json +6969 -135
  8. package/data/skill-index/Leonxlnx_taste-skill.json +417 -9
  9. package/data/skill-index/Master-cai_Research-Paper-Writing-Skills.json +53 -2
  10. package/data/skill-index/MiniMax-AI_skills.json +1197 -24
  11. package/data/skill-index/affaan-m_everything-claude-code.json +23869 -460
  12. package/data/skill-index/alirezarezvani_claude-skills.json +26417 -509
  13. package/data/skill-index/anthropics_skills.json +937 -19
  14. package/data/skill-index/bytedance_deer-flow.json +1145 -23
  15. package/data/skill-index/coreyhaines31_marketingskills.json +1873 -37
  16. package/data/skill-index/github_awesome-copilot.json +22933 -442
  17. package/data/skill-index/heygen-com_hyperframes.json +261 -6
  18. package/data/skill-index/himself65_finance-skills.json +1093 -22
  19. package/data/skill-index/kemiljk_fluid-design.json +53 -2
  20. package/data/skill-index/kepano_obsidian-skills.json +261 -6
  21. package/data/skill-index/luongnv89_skills.json +1873 -37
  22. package/data/skill-index/mattpocock_skills.json +1093 -22
  23. package/data/skill-index/nextlevelbuilder_ui-ux-pro-max-skill.json +365 -8
  24. package/data/skill-index/obra_superpowers.json +729 -15
  25. package/data/skill-index/sickn33_antigravity-awesome-skills.json +230777 -4439
  26. package/data/skill-index/slavingia_skills.json +521 -11
  27. package/dist/agent-skill-manager.js +413 -383
  28. package/dist/chunk-76faq0t9.js +93 -0
  29. package/dist/{chunk-1becp2v6.js → chunk-83zxj8cj.js} +1 -1
  30. package/dist/{chunk-a26gjzjk.js → chunk-chw0sgjp.js} +1 -1
  31. package/dist/chunk-dtg819nd.js +19 -0
  32. package/package.json +1 -1
  33. package/dist/chunk-6mbpytcj.js +0 -15
  34. package/dist/chunk-x537ndd4.js +0 -92
@@ -1,3 +1,3 @@
1
- import{O as z,R as B}from"./chunk-a26gjzjk.js";import{readFile as J,writeFile as K,mkdir as M,copyFile as N}from"fs/promises";import{execFile as O}from"child_process";import{promisify as Q}from"util";import{dirname as R}from"path";var S=Q(O);function G(){return{version:1,skills:{}}}async function H(){let j=B(),v;try{v=await J(j,"utf-8")}catch(q){if(q?.code==="ENOENT")return z("lock: file not found, returning empty lock"),G();throw q}try{let q=JSON.parse(v);if(q.version!==1||typeof q.skills!=="object"||q.skills===null)throw Error("invalid schema");return z(`lock: loaded ${Object.keys(q.skills).length} entries`),q}catch{let q=j+".bak";z(`lock: parse error, backing up to ${q}`);try{await N(j,q)}catch{}return console.error(`Warning: .skill-lock.json was corrupted. Backup saved to ${q}. Starting fresh.`),G()}}async function Z(j,v){let q=await H();q.skills[j]=v,await I(q),z(`lock: wrote entry for "${j}"`)}async function $(j){let v=await H();if(!(j in v.skills)){z(`lock: no entry for "${j}", nothing to remove`);return}delete v.skills[j],await I(v),z(`lock: removed entry for "${j}"`)}async function I(j){let v=B();await M(R(v),{recursive:!0}),await K(v,JSON.stringify(j,null,2)+`
1
+ import{V as z,Y as B}from"./chunk-chw0sgjp.js";import{readFile as J,writeFile as K,mkdir as M,copyFile as N}from"fs/promises";import{execFile as O}from"child_process";import{promisify as Q}from"util";import{dirname as R}from"path";var S=Q(O);function G(){return{version:1,skills:{}}}async function H(){let j=B(),v;try{v=await J(j,"utf-8")}catch(q){if(q?.code==="ENOENT")return z("lock: file not found, returning empty lock"),G();throw q}try{let q=JSON.parse(v);if(q.version!==1||typeof q.skills!=="object"||q.skills===null)throw Error("invalid schema");return z(`lock: loaded ${Object.keys(q.skills).length} entries`),q}catch{let q=j+".bak";z(`lock: parse error, backing up to ${q}`);try{await N(j,q)}catch{}return console.error(`Warning: .skill-lock.json was corrupted. Backup saved to ${q}. Starting fresh.`),G()}}async function Z(j,v){let q=await H();q.skills[j]=v,await I(q),z(`lock: wrote entry for "${j}"`)}async function $(j){let v=await H();if(!(j in v.skills)){z(`lock: no entry for "${j}", nothing to remove`);return}delete v.skills[j],await I(v),z(`lock: removed entry for "${j}"`)}async function I(j){let v=B();await M(R(v),{recursive:!0}),await K(v,JSON.stringify(j,null,2)+`
2
2
  `,"utf-8")}async function A(j){try{let{stdout:v}=await S("git",["rev-parse","HEAD"],{cwd:j,timeout:5000});return v.trim()||null}catch{return z("lock: could not read commit hash from cloned repo"),null}}export{Z as writeLockEntry,$ as removeLockEntry,H as readLock,A as getCommitHash};
3
3
  export{H as a,Z as b,$ as c,A as d};
@@ -1,3 +1,3 @@
1
1
  import{createRequire as k}from"node:module";var S=Object.create;var{getPrototypeOf:U,defineProperty:K,getOwnPropertyNames:j}=Object;var E=Object.prototype.hasOwnProperty;var F=(x,$,b)=>{b=x!=null?S(U(x)):{};let q=$||!x||!x.__esModule?K(b,"default",{value:x,enumerable:!0}):b;for(let V of j(x))if(!E.call(q,V))K(q,V,{get:()=>x[V],enumerable:!0});return q};var h=(x,$)=>()=>($||x(($={exports:{}}).exports,$),$.exports);var I=k(import.meta.url);import{readFile as W,writeFile as v,mkdir as R,copyFile as A}from"fs/promises";import{join as B,resolve as Z,dirname as s}from"path";import{fileURLToPath as H}from"url";import{homedir as G}from"os";var L=!1,M=0;function T(x){if(L=x,x)M=performance.now()}function z(x){if(!L)return;let $=Math.round(performance.now()-M),q=globalThis.__CLI_NO_COLOR?`[verbose] +${$}ms`:`\x1B[2m[verbose] +${$}ms\x1B[0m`;console.error(`${q} ${x}`)}var D=H(import.meta.url),X=s(D),w=G(),J=B(w,".config","agent-skill-manager"),y=B(J,"config.json"),O=B(J,".skill-lock.json"),m=B(J,"skill-index"),N=[{name:"claude",label:"Claude Code",global:"~/.claude/skills",project:".claude/skills",enabled:!0},{name:"agents",label:"Agents",global:"~/.agents/skills",project:".agents/skills",enabled:!0},{name:"codex",label:"Codex",global:"~/.codex/skills",project:".codex/skills",enabled:!0},{name:"opencode",label:"OpenCode",global:"~/.config/opencode/skills",project:".opencode/skills",enabled:!0},{name:"openclaw",label:"OpenClaw",global:"~/.openclaw/skills",project:".openclaw/skills",enabled:!0},{name:"cursor",label:"Cursor",global:"~/.cursor/rules",project:".cursor/rules",enabled:!0},{name:"copilot",label:"GitHub Copilot",global:"~/.github/instructions",project:".github/instructions",enabled:!0},{name:"windsurf",label:"Windsurf",global:"~/.windsurf/rules",project:".windsurf/rules",enabled:!0},{name:"antigravity",label:"Google Antigravity",global:"~/.antigravity/skills",project:".antigravity/skills",enabled:!0},{name:"gemini",label:"Gemini CLI",global:"~/.gemini/skills",project:".gemini/skills",enabled:!0},{name:"hermes",label:"Hermes",global:"~/.hermes/skills",project:".hermes/skills",enabled:!0},{name:"cline",label:"Cline",global:"~/Documents/Cline/Rules",project:".clinerules",enabled:!0},{name:"roocode",label:"Roo Code",global:"~/.roo/rules",project:".roo/rules",enabled:!0},{name:"continue",label:"Continue",global:"~/.continue/rules",project:".continue/rules",enabled:!0},{name:"aider",label:"Aider",global:"~/.aider/skills",project:".aider/skills",enabled:!0},{name:"zed",label:"Zed",global:"~/.config/zed/prompt_overrides",project:".zed/rules",enabled:!0},{name:"augment",label:"Augment",global:"~/.augment/rules",project:".augment/rules",enabled:!0},{name:"amp",label:"Amp",global:"~/.amp/skills",project:".amp/skills",enabled:!0}];function Q(){return{version:1,providers:N.map((x)=>({...x})),customPaths:[],preferences:{defaultScope:"both",defaultSort:"name"}}}function t(){return y}function f(){return O}function g(){return m}function i(){return Z(X,"..","data","skill-index")}function _(){return Z(X,"..","data","skill-index-resources.json")}async function a(){let x=_(),$=await W(x,"utf-8");return JSON.parse($)}function e(x){if(x.startsWith("~/"))return B(w,x.slice(2));if(x.startsWith("/"))return x;return Z(x)}function u(x){let $=Q(),b=x.providers||[],q=new Set(b.map((V)=>V.name));for(let V of $.providers)if(!q.has(V.name))b.push({...V});return{version:x.version??$.version,providers:b,customPaths:x.customPaths??[],preferences:{defaultScope:x.preferences?.defaultScope??$.preferences.defaultScope,defaultSort:x.preferences?.defaultSort??$.preferences.defaultSort,selectedTools:x.preferences?.selectedTools}}}async function C(){z(`config: checking ${y}`);let x;try{x=await W(y,"utf-8")}catch($){if($?.code==="ENOENT"){z("config: using defaults (file not found)");let b=Q();return await Y(b),b}throw $}try{let $=JSON.parse(x);return z(`config: loaded from ${y}`),u($)}catch{let $=y+".bak";z(`config: parse error, backing up to ${$}`),await A(y,$),console.error(`Warning: Config file was corrupted. Backup saved to ${$}. Using defaults.`);let b=Q();return await Y(b),b}}async function Y(x){await R(J,{recursive:!0}),await v(y,JSON.stringify(x,null,2)+`
2
2
  `,"utf-8")}async function xx(x){let $=await C();$.preferences.selectedTools=x,await Y($)}export{xx as saveSelectedTools,Y as saveConfig,e as resolveProviderPath,a as loadSkillIndexResources,C as loadConfig,_ as getSkillIndexResourcesPath,f as getLockPath,g as getIndexDir,Q as getDefaultConfig,t as getConfigPath,i as getBundledIndexDir};
3
- export{F as K,h as L,I as M,T as N,z as O,Q as P,t as Q,f as R,g as S,i as T,e as U,C as V,Y as W};
3
+ export{F as R,h as S,I as T,T as U,z as V,Q as W,t as X,f as Y,g as Z,i as _,e as $,C as aa,Y as ba};
@@ -0,0 +1,19 @@
1
+ import{$ as x,V as N}from"./chunk-chw0sgjp.js";import{readdir as W,stat as S,lstat as $z,readlink as Dz,readFile as k,realpath as s}from"fs/promises";import{join as T,resolve as e,basename as Wz}from"path";import{homedir as c}from"os";function o(z){let Y={},$=z.split(`
2
+ `),Z=!1,J=!1,X=null,O=[],K="none",Q=-1,H=null;function U(){if(X){let B=O.join(" ").trim();if(B)Y[X]=B;X=null,O=[],K="none",Q=-1}}for(let B of $){if(B.trim()==="---")if(!J){J=!0,Z=!0;continue}else{U();break}if(!Z)continue;if(K!=="none"&&X){let L=B.replace(/^\s*/,""),V=B.length-L.length;if(V>0&&L.length>0){if(Q===-1)Q=V;O.push(L);continue}else if(L.length===0)continue;else U()}if(H!==null){let L=B.match(/^\s+(\w[\w-]*):\s*(.*?)\s*$/);if(L){let V=L[1],_=L[2].replace(/^["']|["']$/g,"");if(_)Y[`${H}.${V}`]=_;continue}if(B.trim().length>0)H=null;else continue}let F=B.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(F){U();let L=F[1],V=F[2];if(V==="|"||V===">")X=L,O=[],K=V==="|"?"literal":"folded";else if(V==="|+"||V===">+"||V==="|-"||V===">-")X=L,O=[],K=V.startsWith("|")?"literal":"folded";else{let j=V.replace(/^["']|["']$/g,"");if(j)Y[L]=j;else H=L}}}return U(),Y}function r(z){return z["metadata.version"]||z.version||"0.0.0"}function i(z){let Y=z["allowed-tools"]||"";if(!Y.trim())return[];return Y.split(/[\s,]+/).map(($)=>$.trim()).filter(Boolean)}function l(z){if(!z)return 0;let Y=z.split(/\s+/).map((Z)=>Z.trim()).filter(Boolean).length,$=0;for(let Z=0;Z<z.length;Z++)if(z.charCodeAt(Z)===32)$++;return Y+$}function m(z){if(!Number.isFinite(z)||z<0)return"~0 tokens";if(z<1000)return`~${z} tokens`;if(z<1e4)return`~${(z/1000).toFixed(1).replace(/\.0$/,"")}k tokens`;return`~${Math.round(z/1000)}k tokens`}var xz=T(c(),".claude","plugins","marketplaces"),Sz=T(c(),".codex","plugins","cache"),wz=T(c(),".codex","config.toml"),AY=T(c(),".agents","plugins","marketplace.json");function Cz(z,Y){let $=[];for(let Z of z.providers){if(!Z.enabled){N(`scan: skipping disabled provider "${Z.name}"`);continue}if(Y==="global"||Y==="both"){let J=x(Z.global);N(`scan: adding location ${J} (${Z.label}, global)`),$.push({dir:J,location:`global-${Z.name}`,scope:"global",providerName:Z.name,providerLabel:Z.label})}if(Y==="project"||Y==="both"){let J=x(Z.project);N(`scan: adding location ${J} (${Z.label}, project)`),$.push({dir:J,location:`project-${Z.name}`,scope:"project",providerName:Z.name,providerLabel:Z.label})}}for(let Z of z.customPaths)if(Y===Z.scope||Y==="both"){let J=x(Z.path);N(`scan: adding custom location ${J} (${Z.label}, ${Z.scope})`),$.push({dir:J,location:`${Z.scope}-custom`,scope:Z.scope,providerName:"custom",providerLabel:Z.label})}return $}async function zz(z){try{return(await W(z,{recursive:!0})).length}catch{return 0}}async function yz(z){let Y=[];N(`scanning: ${z.dir} (${z.location})`);let $;try{$=await W(z.dir)}catch{return N(`scanning: ${z.dir} — not found, skipping`),Y}for(let Z of $){let J=T(z.dir,Z);try{if(!(await S(J)).isDirectory()){N(` skip: "${Z}" — not a directory`);continue}}catch{N(` skip: "${Z}" — stat failed`);continue}let X=T(J,"SKILL.md"),O;try{O=await k(X,"utf-8")}catch{N(` skip: "${Z}" — no SKILL.md`);continue}let K=o(O),Q=!1,H=null;try{if((await $z(J)).isSymbolicLink())Q=!0,H=await Dz(J)}catch{}let U=e(J),B;try{B=await s(J)}catch{B=U}Y.push({name:K.name||Z,version:r(K),description:(K.description||"").replace(/\s*\n\s*/g," ").trim(),creator:K["metadata.creator"]||"",license:(K.license||"").trim(),compatibility:(K.compatibility||"").trim(),allowedTools:i(K),effort:K.effort||K["metadata.effort"]||void 0,dirName:Z,path:U,originalPath:J,location:z.location,scope:z.scope,provider:z.providerName,providerLabel:z.providerLabel,isSymlink:Q,symlinkTarget:H,realPath:B,tokenCount:l(O)})}return N(`found ${Y.length} skill(s) in ${z.dir}`),Y}async function Jz(z){let Y=[],$;try{$=await W(z)}catch{return Y}for(let Z of $){let J=T(z,Z),X;try{X=await $z(J)}catch{continue}if(X.isSymbolicLink())continue;if(X.isDirectory()){let O=T(J,"SKILL.md");try{await S(O),Y.push(J)}catch{let K=await Jz(J);Y.push(...K)}}}return Y}async function Pz(z){let Y=z??xz,$=[];N(`scan: checking plugin marketplaces at ${Y}`);let Z;try{Z=await W(Y)}catch{return N("scan: plugin marketplaces dir not found, skipping"),$}for(let J of Z){let X=T(Y,J),O;try{O=await S(X)}catch{continue}if(!O.isDirectory())continue;N(`scan: scanning marketplace "${J}"`);let K=await Jz(X);for(let Q of K){let H=T(Q,"SKILL.md"),U;try{U=await k(H,"utf-8")}catch{continue}let B=o(U),F=Wz(Q),L=e(Q),V;try{V=await s(Q)}catch{V=L}$.push({name:B.name||F,version:r(B),description:(B.description||"").replace(/\s*\n\s*/g," ").trim(),creator:B["metadata.creator"]||"",license:(B.license||"").trim(),compatibility:(B.compatibility||"").trim(),allowedTools:i(B),effort:B.effort||B["metadata.effort"]||void 0,dirName:F,path:L,originalPath:Q,location:`global-plugin-${J}`,scope:"global",provider:"plugin",providerLabel:`Plugin (${J})`,isSymlink:!1,symlinkTarget:null,realPath:V,marketplace:J,tokenCount:l(U)})}}return N(`scan: found ${$.length} plugin marketplace skill(s)`),$}function bz(z){let Y=new Map,$=null;for(let Z of z.split(`
3
+ `)){let J=Z.trim(),X=J.match(/^\[plugins\.([^\]]+)\]$/);if(X){$=X[1].trim().replace(/^["']|["']$/g,"");continue}if(J.startsWith("[")){$=null;continue}if($&&J.startsWith("enabled")){let O=J.match(/^enabled\s*=\s*(true|false)/i);if(O)Y.set($,O[1].toLowerCase()==="true")}}return Y}async function vz(z){let Y=z??wz;try{let $=await k(Y,"utf-8");return bz($)}catch{return N(`codex: config.toml not found at ${Y}, skipping enabled check`),new Map}}async function hz(z,Y){let $=z??Sz,Z=[];N(`codex: checking plugin cache at ${$}`);let J;try{J=await W($)}catch{return N("codex: plugin cache dir not found, skipping"),Z}let X=await vz(Y);for(let O of J){let K=T($,O),Q;try{Q=await S(K)}catch{continue}if(!Q.isDirectory())continue;let H;try{H=await W(K)}catch{continue}for(let U of H){let B=T(K,U),F;try{F=await S(B)}catch{continue}if(!F.isDirectory())continue;let L;try{L=await W(B)}catch{continue}let V=(await Promise.all(L.map(async(I)=>{try{return(await S(T(B,I))).isDirectory()?I:null}catch{return null}}))).filter((I)=>I!==null);if(V.length===0)continue;let j=V.sort(Xz).at(-1),_=T(B,j),M=T(_,".codex-plugin","plugin.json"),R;try{let I=await k(M,"utf-8");R=JSON.parse(I)}catch{N(`codex: no valid plugin.json at ${M}, skipping`);continue}let E=e(_),D;try{D=await s(_)}catch{D=E}let y=R.interface?.displayName||R.name||U,P=R.version||j,b=(R.description||"").replace(/\s*\n\s*/g," ").trim(),q=X.has(U)?X.get(U):!0;Z.push({name:y,version:P,description:b,creator:"",license:"",compatibility:"",allowedTools:[],dirName:U,path:E,originalPath:_,location:`global-codex-plugin-${O}`,scope:"global",provider:"codex-plugin",providerLabel:`Codex Plugin (${O})`,isSymlink:!1,symlinkTarget:null,realPath:D,marketplace:O,codexPlugin:{category:R.interface?.category,hasMcpConfig:R.mcp!=null&&Object.keys(R.mcp).length>0,pluginName:U,pluginVersion:j,enabled:q}})}}return N(`codex: found ${Z.length} plugin(s) in cache`),Z}async function FY(z,Y,$,Z){let J=Cz(z,Y),X=Y==="global"||Y==="both",[O,K,Q]=await Promise.all([Promise.all(J.map(yz)),X?Pz($):Promise.resolve([]),X?hz(Z):Promise.resolve([])]),H=O.flat(),U=new Set(H.map((F)=>F.realPath)),B=new Set(H.map((F)=>F.name.toLowerCase()));for(let F of K)if(!U.has(F.realPath)&&!B.has(F.name.toLowerCase()))H.push(F),U.add(F.realPath),B.add(F.name.toLowerCase());for(let F of Q)if(!U.has(F.realPath)&&!B.has(F.name.toLowerCase()))H.push(F),U.add(F.realPath),B.add(F.name.toLowerCase());return H}function _Y(z,Y){if(!Y.trim())return z;let $=Y.toLowerCase();return z.filter((Z)=>Z.name.toLowerCase().includes($)||Z.description.toLowerCase().includes($)||Z.creator.toLowerCase().includes($)||Z.effort&&Z.effort.toLowerCase().includes($)||Z.location.toLowerCase().includes($)||Z.providerLabel.toLowerCase().includes($))}function Xz(z,Y){let $=z.split("."),Z=Y.split("."),J=Math.max($.length,Z.length);for(let X=0;X<J;X++){let O=parseInt($[X]??"0",10),K=parseInt(Z[X]??"0",10);if(isNaN(O)||isNaN(K))return z.localeCompare(Y);if(O!==K)return O-K}return 0}function qY(z,Y){let $=[...z];switch(Y){case"name":$.sort((Z,J)=>Z.name.localeCompare(J.name));break;case"version":$.sort((Z,J)=>Xz(Z.version,J.version));break;case"location":$.sort((Z,J)=>Z.location.localeCompare(J.location));break}return $}import{rm as Yz,readFile as Uz,writeFile as fz,access as gz,lstat as mz,symlink as kz}from"fs/promises";import{join as Qz,resolve as w,dirname as Gz,relative as cz}from"path";import{homedir as pz}from"os";var uz=pz();function dz(z,Y){let $={directories:[],ruleFiles:[],agentsBlocks:[]};$.directories.push({path:z.originalPath,isSymlink:z.isSymlink});let Z=z.dirName;if(z.scope==="project")$.ruleFiles.push(w(".cursor","rules",`${Z}.mdc`),w(".windsurf","rules",`${Z}.md`),w(".github","instructions",`${Z}.instructions.md`)),$.agentsBlocks.push({file:w("AGENTS.md"),skillName:Z});if(z.scope==="global"){for(let O of Y.providers){if(!O.enabled)continue;let K=x(O.global),Q=Qz(Gz(K),"AGENTS.md");$.agentsBlocks.push({file:Q,skillName:Z})}let J=Qz(uz,".codex","AGENTS.md");if(!$.agentsBlocks.some((O)=>O.file===J))$.agentsBlocks.push({file:J,skillName:Z})}return $}function EY(z,Y,$){let Z=Y.filter((Q)=>Q.dirName===z);if(Z.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let J={directories:[],ruleFiles:[],agentsBlocks:[]},X=new Set,O=new Set,K=new Set;for(let Q of Z){let H=dz(Q,$);for(let U of H.directories)if(!X.has(U.path))X.add(U.path),J.directories.push(U);for(let U of H.ruleFiles)if(!O.has(U))O.add(U),J.ruleFiles.push(U);for(let U of H.agentsBlocks){let B=`${U.file}::${U.skillName}`;if(!K.has(B))K.add(B),J.agentsBlocks.push(U)}}return J}async function v(z){try{return await gz(z),!0}catch{return!1}}async function nz(z,Y){if(!await v(z))return;let $=await Uz(z,"utf-8");for(let Z of["agent-skill-manager","skill-manager","pskills"]){let J=`<!-- ${Z}: ${Y} -->`,X=`<!-- /${Z}: ${Y} -->`,O=$.indexOf(J),K=$.indexOf(X);if(O===-1||K===-1)continue;let Q=O;if(Q>0&&$[Q-1]===`
4
+ `)Q--;let U=K+X.length;if(U<$.length&&$[U]===`
5
+ `)U++;$=$.slice(0,Q)+$.slice(U)}await fz(z,$,"utf-8")}async function DY(z,Y){let $=[];for(let Z of z.directories)try{if(Z.isSymlink)await Yz(Z.path),$.push(`Removed symlink: ${Z.path}`);else await Yz(Z.path,{recursive:!0,force:!0}),$.push(`Removed directory: ${Z.path}`);if(Y&&w(Z.path)!==w(Y)){let J=Gz(Z.path),X=cz(J,Y);await kz(X,Z.path,"dir"),$.push(`Created symlink: ${Z.path} -> ${X}`)}}catch(J){$.push(`Failed to remove ${Z.path}: ${J.message}`)}for(let Z of z.ruleFiles)if(await v(Z))try{await Yz(Z),$.push(`Removed rule file: ${Z}`)}catch(J){$.push(`Failed to remove ${Z}: ${J.message}`)}for(let Z of z.agentsBlocks)try{await nz(Z.file,Z.skillName),$.push(`Cleaned AGENTS.md block in: ${Z.file}`)}catch(J){$.push(`Failed to clean AGENTS.md block: ${J.message}`)}return $}async function WY(z){let Y=[];for(let $ of z.directories)if(await v($.path)){let J=(await mz($.path)).isSymbolicLink()?"symlink":"directory";Y.push(`${$.path} (${J})`)}for(let $ of z.ruleFiles)if(await v($))Y.push($);for(let $ of z.agentsBlocks)if(await v($.file)){let Z=await Uz($.file,"utf-8");if(Z.includes(`<!-- agent-skill-manager: ${$.skillName} -->`)||Z.includes(`<!-- skill-manager: ${$.skillName} -->`)||Z.includes(`<!-- pskills: ${$.skillName} -->`))Y.push(`${$.file} (AGENTS.md block)`)}return Y}var A=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},G={bold:(z)=>A()?`\x1B[1m${z}\x1B[0m`:z,cyan:(z)=>A()?`\x1B[36m${z}\x1B[0m`:z,green:(z)=>A()?`\x1B[32m${z}\x1B[0m`:z,yellow:(z)=>A()?`\x1B[33m${z}\x1B[0m`:z,dim:(z)=>A()?`\x1B[2m${z}\x1B[0m`:z,white:(z)=>A()?`\x1B[37m${z}\x1B[0m`:z,red:(z)=>A()?`\x1B[31m${z}\x1B[0m`:z,blue:(z)=>A()?`\x1B[34m${z}\x1B[0m`:z,blueBold:(z)=>A()?`\x1B[34;1m${z}\x1B[0m`:z,magenta:(z)=>A()?`\x1B[35m${z}\x1B[0m`:z,bgDim:(z)=>A()?`\x1B[48;5;236m${z}\x1B[0m`:z,bgRed:(z)=>A()?`\x1B[41m\x1B[37m\x1B[1m${z}\x1B[0m`:z,bgYellow:(z)=>A()?`\x1B[43m\x1B[30m\x1B[1m${z}\x1B[0m`:z,bgGreen:(z)=>A()?`\x1B[42m\x1B[30m\x1B[1m${z}\x1B[0m`:z,bgCyan:(z)=>A()?`\x1B[46m\x1B[30m\x1B[1m${z}\x1B[0m`:z};function h(z){if(!z)return"";switch(z.toLowerCase()){case"low":return G.green(z);case"medium":return G.yellow(z);case"high":return G.red(z);case"max":return G.magenta(z);default:return z}}var Bz={claude:G.blueBold,codex:G.cyan,"codex-plugin":G.cyan,openclaw:G.yellow,agents:G.green,custom:G.magenta,cursor:G.blue,windsurf:G.cyan,cline:G.green,roocode:G.magenta,continue:G.yellow,copilot:G.white,aider:G.red,opencode:G.cyan,zed:G.blue,augment:G.green,amp:G.yellow};function p(z,Y){return(Bz[z]||G.dim)(Y)}function u(z,Y){if(!A())return`[${Y}]`;return(Bz[z]||G.dim)(`[${Y}]`)}function C(z){let Y=process.env.HOME||process.env.USERPROFILE||"";if(Y&&z.startsWith(Y))return"~"+z.slice(Y.length);return z}function CY(z){if(z.length===0)return"No skills found.";let Y=["Name","Version","Creator","Effort","Tool","Scope","Type","Path"],$=z.map((Q)=>[Q.name,Q.version,Q.creator||"—",Q.effort||"—",Q.providerLabel,Q.scope,Q.isSymlink?"symlink":"directory",C(Q.path)]),Z=Y.map((Q,H)=>Math.max(Q.length,...$.map((U)=>U[H].length))),J=(Q,H)=>Q.padEnd(H),X=Y.map((Q,H)=>J(Q,Z[H])).join(" "),O=Z.map((Q)=>"-".repeat(Q)).join("--"),K=$.map((Q)=>Q.map((H,U)=>J(H,Z[U])).join(" "));return[A()?G.bold(X):X,O,...K].join(`
6
+ `)}function f(z){let Y=new Map;for(let Z of z){let J=`${Z.dirName}||${Z.scope}`,X=Y.get(J)??[];X.push(Z),Y.set(J,X)}let $=[];for(let[,Z]of Y){let J=Z[0],X=new Set(Z.map((K)=>K.scope)),O=new Set(Z.map((K)=>K.isSymlink?"symlink":"directory"));$.push({name:J.name,version:J.version,creator:J.creator||"",effort:J.effort||"",tokens:typeof J.tokenCount==="number"?m(J.tokenCount):"",providers:Z.map((K)=>({provider:K.provider,label:K.providerLabel})),scope:X.size>1?"mixed":J.scope,type:O.size>1?"mixed":J.isSymlink?"symlink":"directory",path:C(J.path),warningCount:Z.reduce((K,Q)=>K+(Q.warnings?.length??0),0)})}return $}var yY=50;function PY(z,Y={}){let $=Y.topN??5,Z=Y.showHint??!0;if(z.length===0)return"No skills found.";let J=[],O=f(z).length,K=z.length,Q=new Set(z.map((j)=>j.provider)),H=z.filter((j)=>j.scope==="global").length,U=z.filter((j)=>j.scope==="project").length,B=`${K} skills (${O} unique) across ${Q.size} tools | ${H} global, ${U} project`;J.push(A()?G.bold(B):B),J.push("");let F=new Map;for(let j of z){let _=F.get(j.provider)??{label:j.providerLabel,count:0};_.count+=1,F.set(j.provider,_)}let L=[...F.entries()].sort((j,_)=>_[1].count-j[1].count).slice(0,$);J.push(A()?G.bold("Top tools:"):"Top tools:");for(let[j,{label:_,count:M}]of L){let R=A()?p(j,`[${_}]`):`[${_}]`;J.push(` ${R} ${M} skill${M===1?"":"s"}`)}J.push(""),J.push(A()?G.bold("Scopes:"):"Scopes:"),J.push(` global ${H} skill${H===1?"":"s"}`),J.push(` project ${U} skill${U===1?"":"s"}`);let V=new Map;for(let j of z)if(j.effort)V.set(j.effort,(V.get(j.effort)??0)+1);if(V.size>0){let j=[...V.entries()].sort((_,M)=>M[1]-_[1]).slice(0,$);J.push(""),J.push(A()?G.bold("Top efforts:"):"Top efforts:");for(let[_,M]of j){let R=h(_),E=Math.max(0,6-_.length);J.push(` ${R}${" ".repeat(E)} ${M} skill${M===1?"":"s"}`)}}if(Z){J.push("");let j="Tip: refine with `asm list -p <tool>`, `asm search <query>`, or `asm list --compact`";J.push(A()?G.dim(j):j)}return J.join(`
7
+ `)}function az(z){if(z.length===0)return"No skills found.";let Y=f(z),$=[],Z=Math.max(4,...Y.map((L)=>L.name.length)),J=Math.max(7,...Y.map((L)=>L.version.length)),X=Y.map((L)=>L.providers.map((V)=>u(V.provider,V.label)).join(" ")),O=Y.map((L)=>L.providers.map((V)=>`[${V.label}]`).join(" ")),K=Math.max(5,...O.map((L)=>L.length)),Q=7,H=(L,V)=>L.padEnd(V);for(let L=0;L<Y.length;L++){let V=Y[L],j=H(V.name,Z),_=G.dim(H(V.version,J)),M=K-O[L].length,R=X[L]+" ".repeat(Math.max(0,M)),E=G.dim(H(V.scope,Q));$.push(`${j} ${_} ${R} ${E}`)}$.push("");let U=z.length,B=Y.length,F=`${U} skills (${B} unique)`;return $.push(G.dim(F)),$.join(`
8
+ `)}function bY(z,Y){if(z.length===0)return"No skills found.";let $=new Map,Z=(H)=>{switch(Y){case"tool":return[H.providerLabel];case"scope":return[H.scope];case"effort":return[H.effort&&H.effort.length>0?H.effort:"(unset)"]}};for(let H of z)for(let U of Z(H)){let B=$.get(U)??[];B.push(H),$.set(U,B)}let J=[...$.entries()].sort((H,U)=>{if(U[1].length!==H[1].length)return U[1].length-H[1].length;return H[0].localeCompare(U[0])}),X=[];for(let[H,U]of J){let B=`${H} (${U.length})`;X.push(A()?G.bold(B):B);let V=az(U).split(`
9
+ `).slice(0,-2).filter((j)=>j.length>0).map((j)=>` ${j}`);X.push(...V),X.push("")}let O=z.length,K=f(z).length,Q=`${O} skills (${K} unique), grouped by ${Y}`;return X.push(G.dim(Q)),X.join(`
10
+ `)}function vY(z,Y){if(!Number.isFinite(Y)||Y<=0||z.length<=Y)return{skills:z,hint:""};let $=z.slice(0,Y),Z=z.length-Y,J=G.dim(`... ${Z} more not shown. Re-run with --limit ${z.length} (or 0) to see all, or refine with -p <tool>.`);return{skills:$,hint:J}}function hY(z){if(z.length===0)return"No skills found.";let Y=f(z),$=[],Z=Math.max(4,...Y.map((q)=>q.name.length)),J=Math.max(7,...Y.map((q)=>q.version.length)),X=Math.max(7,...Y.map((q)=>Math.min((q.creator||"—").length,15))),O=Math.max(6,...Y.map((q)=>(q.effort||"—").length)),K=Y.some((q)=>q.tokens.length>0),Q=K?Math.max(6,...Y.map((q)=>(q.tokens||"—").length)):0,H=7,U=9,B=Y.map((q)=>q.providers.map((I)=>u(I.provider,I.label)).join(" ")),F=Y.map((q)=>q.providers.map((I)=>`[${I.label}]`).join(" ")),L=Math.max(9,...F.map((q)=>q.length)),V=(q,I)=>q.padEnd(I),j=K?` ${V("Tokens",Q)}`:"",_=`${V("Name",Z)} ${V("Version",J)} ${V("Creator",X)} ${V("Effort",O)}${j} ${V("Tools",L)} ${V("Scope",H)} ${V("Type",U)}`;$.push(A()?G.bold(_):_);let M=K?` ${"-".repeat(Q)}`:"";$.push(`${"-".repeat(Z)} ${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(O)}${M} ${"-".repeat(L)} ${"-".repeat(H)} ${"-".repeat(U)}`);for(let q=0;q<Y.length;q++){let I=Y[q],g=V(I.name,Z),d=V(I.version,J),n=(I.creator||"—").slice(0,15),a=V(n,X),t=I.effort||"—",Fz=I.effort?h(I.effort):"—",_z=O-t.length,qz=Fz+" ".repeat(Math.max(0,_z)),Iz=K?` ${V(I.tokens||"—",Q)}`:"",Nz=L-F[q].length,Rz=B[q]+" ".repeat(Math.max(0,Nz)),Mz=V(I.scope,H),Tz=V(I.type,U),Ez=I.warningCount>0?` ${G.yellow(`(${I.warningCount} warning${I.warningCount>1?"s":""})`)}`:"";$.push(`${g} ${d} ${a} ${qz}${Iz} ${Rz} ${Mz} ${Tz}${Ez}`)}let R=Y.length,E=z.length,D=new Set(z.map((q)=>q.provider)),y=z.filter((q)=>q.scope==="global").length,P=z.filter((q)=>q.scope==="project").length;$.push("");let b=`${E} skills (${R} unique) across ${D.size} tools | ${y} global, ${P} project`;return $.push(G.dim(b)),$.join(`
11
+ `)}function tz(z,Y){if(!A()||!Y)return z;let $=z.toLowerCase().indexOf(Y.toLowerCase());if($===-1)return z;let Z=z.slice(0,$),J=z.slice($,$+Y.length),X=z.slice($+Y.length);return`${Z}${G.bold(G.yellow(J))}${X}`}function fY(z,Y){if(z.length===0)return`No skills matching "${Y}". Try ${G.bold("asm list")} to see all skills.`;let $=f(z),Z=[];Z.push(G.dim(`Found ${z.length} result${z.length===1?"":"s"} (${$.length} unique) matching "${Y}"`)+`
12
+ `);let J=Math.max(4,...$.map((j)=>j.name.length)),X=Math.max(7,...$.map((j)=>j.version.length)),O=Math.max(7,...$.map((j)=>Math.min((j.creator||"—").length,15))),K=Math.max(6,...$.map((j)=>(j.effort||"—").length)),Q=$.map((j)=>j.providers.map((_)=>u(_.provider,_.label)).join(" ")),H=$.map((j)=>j.providers.map((_)=>`[${_.label}]`).join(" ")),U=Math.max(9,...H.map((j)=>j.length)),B=7,F=9,L=(j,_)=>j.padEnd(_),V=`${L("Name",J)} ${L("Version",X)} ${L("Creator",O)} ${L("Effort",K)} ${L("Tools",U)} ${L("Scope",B)} ${L("Type",F)}`;Z.push(A()?G.bold(V):V),Z.push(`${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(O)} ${"-".repeat(K)} ${"-".repeat(U)} ${"-".repeat(B)} ${"-".repeat(F)}`);for(let j=0;j<$.length;j++){let _=$[j],M=tz(_.name,Y),R=J-_.name.length,E=M+" ".repeat(Math.max(0,R)),D=L(_.version,X),y=(_.creator||"—").slice(0,15),P=L(y,O),b=_.effort||"—",q=_.effort?h(_.effort):"—",I=K-b.length,g=q+" ".repeat(Math.max(0,I)),d=U-H[j].length,n=Q[j]+" ".repeat(Math.max(0,d)),a=L(_.scope,B),t=L(_.type,F);Z.push(`${E} ${D} ${P} ${g} ${n} ${a} ${t}`)}return Z.join(`
13
+ `)}function gY(z,Y){if(z.length===0)return"";let $=[];$.push(G.dim(`Found ${z.length} available skill${z.length===1?"":"s"} matching "${Y}"`)+`
14
+ `);for(let Z of z){$.push(` ${G.dim("To install:")} ${G.green(`asm install ${Z.installUrl}`)}`);let J=Z.verified?G.blue(" [verified]"):"";$.push(` ${G.cyan(Z.name)} ${G.dim(`v${Z.version}`)}${J} ${G.dim(`[${Z.repoLabel}]`)}`);for(let X of Vz(Z.description,76))$.push(` ${X}`);$.push("")}return $.join(`
15
+ `)}var Hz=new Set(["Bash","Write","Edit","NotebookEdit"]),oz=new Set(["WebFetch","WebSearch"]);function rz(z){if(Hz.has(z))return G.red(z);if(oz.has(z))return G.yellow(z);return G.green(z)}function Oz(z){if(z.length===0)return"";return z.map(rz).join(" ")}function Kz(z){let Y=z.filter((Z)=>Hz.has(Z));if(Y.length===0)return null;let $=[];if(Y.includes("Bash"))$.push("execute shell commands");if(Y.includes("Write")||Y.includes("Edit")||Y.includes("NotebookEdit"))$.push("modify files");return`This skill can ${$.join(" and ")}`}async function iz(z){let Y=[],$=(X,O)=>`${A()?G.bold(X+":"):X+":"} ${O}`;if(Y.push($("Name",z.name)),Y.push($("Version",z.version)),Y.push($("Creator",z.creator||"—")),Y.push($("License",z.license||"—")),z.compatibility)Y.push($("Compatibility",z.compatibility));if(z.effort)Y.push($("Effort",h(z.effort)));if(Y.push($("Tool",z.providerLabel)),Y.push($("Scope",z.scope)),Y.push($("Location",z.location)),Y.push($("Path",C(z.path))),Y.push($("Type",z.isSymlink?"symlink":"directory")),z.isSymlink&&z.symlinkTarget)Y.push($("Symlink Target",z.symlinkTarget));let Z=z.fileCount??await zz(z.path);if(Y.push($("File Count",String(Z))),typeof z.tokenCount==="number")Y.push($("Est. Tokens",m(z.tokenCount)));if(z.description)Y.push(""),Y.push($("Description",z.description));if(z.allowedTools&&z.allowedTools.length>0){Y.push(""),Y.push(A()?G.bold("Allowed Tools:"):"Allowed Tools:"),Y.push(` ${Oz(z.allowedTools)}`);let X=Kz(z.allowedTools);if(X)Y.push(` ${A()?G.yellow("⚠"):"!"} ${X}`)}Y.push(""),Y.push(A()?G.bold("Eval Score:"):"Eval Score:");let J=jz(z);if(J.length>0){let X=J.length>1;for(let O of J){let K=Lz(O.overallScore),Q=O.providerId?`${O.providerId}@${O.providerVersion??"?"}`:"quality";if(X)Y.push(` ${Q}: ${K} / 100 (${O.grade})`);else Y.push(` Overall: ${K} / 100 (${O.grade})`);let H=O.evaluatedVersion?` — version ${O.evaluatedVersion}`:"";if(Y.push(` ${A()?G.dim("Evaluated:"):"Evaluated:"} ${O.evaluatedAt}${H}`),O.categories.length>0){if(X)Y.push(A()?G.dim(` Categories (${Q}):`):` Categories (${Q}):`);else Y.push(A()?G.dim(" Categories:"):" Categories:");for(let U of O.categories)Y.push(` ${U.name.padEnd(28)} ${U.score}/${U.max}`)}}}else Y.push(A()?G.dim(" Not available — run `asm eval "+z.path+"` to generate one."):" Not available — run `asm eval "+z.path+"` to generate one.");if(z.warnings&&z.warnings.length>0){Y.push(""),Y.push(A()?G.bold("Warnings:"):"Warnings:");for(let X of z.warnings)Y.push(` ${A()?G.yellow("!"):"!"} [${X.category}] ${X.message}`)}return Y.join(`
16
+ `)}function Lz(z){let Y=String(z);if(!A())return Y;if(z>=90)return G.green(Y);if(z>=80)return G.cyan(Y);if(z>=65)return G.yellow(Y);return G.red(Y)}function jz(z){if(z.evalSummaries&&Object.keys(z.evalSummaries).length>0)return Object.values(z.evalSummaries).sort(($,Z)=>{let J=$.providerId??"quality",X=Z.providerId??"quality";if(J==="quality"&&X!=="quality")return-1;if(X==="quality"&&J!=="quality")return 1;return J.localeCompare(X)});return z.evalSummary?[z.evalSummary]:[]}async function mY(z){if(z.length===0)return"No skills found.";if(z.length===1)return iz(z[0]);let Y=[],$=(U,B)=>`${A()?G.bold(U+":"):U+":"} ${B}`,Z=z[0],J=Z.name;if(Y.push(""),Y.push(A()?G.blueBold(` ${J}`):` ${J}`),Y.push(A()?G.dim(" "+"-".repeat(J.length+2)):" "+"-".repeat(J.length+2)),Y.push(""),Y.push($(" Version",Z.version)),Y.push($(" Creator",Z.creator||"—")),Y.push($(" License",Z.license||"—")),Z.compatibility)Y.push($(" Compatibility",Z.compatibility));if(Z.effort)Y.push($(" Effort",h(Z.effort)));let X=Z.fileCount??await zz(Z.path);if(Y.push($(" File Count",String(X))),typeof Z.tokenCount==="number")Y.push($(" Est. Tokens",m(Z.tokenCount)));let O=z.map((U)=>u(U.provider,U.providerLabel)).join(" ");Y.push($(" Installed in",O)),Y.push(""),Y.push(A()?G.bold(" Eval Score:"):" Eval Score:");let K=jz(Z);if(K.length>0){let U=K.length>1;for(let B of K){let F=Lz(B.overallScore),L=B.providerId?`${B.providerId}@${B.providerVersion??"?"}`:"quality";if(U)Y.push(` ${L}: ${F} / 100 (${B.grade})`);else Y.push(` Overall: ${F} / 100 (${B.grade})`);let V=B.evaluatedVersion?` — version ${B.evaluatedVersion}`:"";if(Y.push(` ${A()?G.dim("Evaluated:"):"Evaluated:"} ${B.evaluatedAt}${V}`),B.categories.length>0)for(let j of B.categories)Y.push(` ${j.name.padEnd(28)} ${j.score}/${j.max}`)}}else Y.push(A()?G.dim(` Not available — run \`asm eval ${Z.path}\` to generate one.`):` Not available — run \`asm eval ${Z.path}\` to generate one.`);if(Z.description){Y.push(""),Y.push(A()?G.bold(" Description:"):" Description:");let U=Vz(Z.description,72);for(let B of U)Y.push(" "+B)}if(Z.allowedTools&&Z.allowedTools.length>0){Y.push(""),Y.push(A()?G.bold(" Allowed Tools:"):" Allowed Tools:"),Y.push(` ${Oz(Z.allowedTools)}`);let U=Kz(Z.allowedTools);if(U)Y.push(` ${A()?G.yellow("⚠"):"!"} ${U}`)}Y.push("");let Q=` Installations (${z.length})`;Y.push(A()?G.bold(Q):Q);for(let U=0;U<z.length;U++){let B=z[U],F=p(B.provider,B.providerLabel),L=B.isSymlink?"symlink":"directory",V=G.dim(B.scope);if(Y.push(` ${F} (${V}, ${L})`),Y.push(` ${G.dim("Path:")} ${C(B.path)}`),B.isSymlink&&B.symlinkTarget)Y.push(` ${G.dim("Target:")} ${B.symlinkTarget}`)}let H=z.flatMap((U)=>{if(!U.warnings||U.warnings.length===0)return[];return U.warnings.map((B)=>({...B,provider:U.providerLabel}))});if(H.length>0){Y.push("");let U=` Warnings (${H.length})`;Y.push(A()?G.bold(U):U);for(let B of H){let F=A()?G.yellow("!"):"!";Y.push(` ${F} [${B.category}] ${B.message}`)}}return Y.push(""),Y.join(`
17
+ `)}function Vz(z,Y){let $=z.split(/\s+/),Z=[],J="";for(let X of $)if(J.length+X.length+1>Y&&J.length>0)Z.push(J),J=X;else J=J?J+" "+X:X;if(J)Z.push(J);return Z}function kY(z){return JSON.stringify(z,null,2)}function uY(z){let Y=[],$=new Set,Z=new Map,J=[];for(let Q of z){let H=Z.get(Q.realPath);if(H){if(Q.isSymlink)continue;if(H.isSymlink)J[J.indexOf(H)]=Q,Z.set(Q.realPath,Q);else J.push(Q)}else Z.set(Q.realPath,Q),J.push(Q)}let X=new Map;for(let Q of J){let H=X.get(Q.dirName)??[];H.push(Q),X.set(Q.dirName,H)}for(let[Q,H]of X)if(new Set(H.map((B)=>B.location)).size>=2){Y.push({key:Q,reason:"same-dirName",instances:H});for(let B of H)$.add(B.path)}let O=new Map;for(let Q of J){if(!Q.name)continue;let H=O.get(Q.name)??[];H.push(Q),O.set(Q.name,H)}for(let[Q,H]of O){if(new Set(H.map((L)=>L.dirName)).size<2)continue;let B=H.filter((L)=>!$.has(L.path));if(B.length<2)continue;if(new Set(B.map((L)=>L.dirName)).size<2)continue;Y.push({key:Q,reason:"same-frontmatterName",instances:B})}Y.sort((Q,H)=>{if(Q.reason!==H.reason)return Q.reason==="same-dirName"?-1:1;return Q.key.localeCompare(H.key)});let K=Y.reduce((Q,H)=>Q+H.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:z.length,duplicateGroups:Y,totalDuplicateInstances:K}}function lz(z){return[...z].sort((Y,$)=>{if(Y.scope!==$.scope)return Y.scope==="global"?-1:1;let Z=Y.providerLabel.localeCompare($.providerLabel);if(Z!==0)return Z;return Y.path.localeCompare($.path)})}function sz(z){return z==="same-dirName"?"same dirName":"same name"}function dY(z){if(z.duplicateGroups.length===0)return G.green("No duplicate skills found.");let Y=[];Y.push(""),Y.push(G.bold(` Found ${z.duplicateGroups.length} duplicate group(s) (${z.totalDuplicateInstances} total instances):`)),Y.push("");for(let $ of z.duplicateGroups){Y.push(` ${G.yellow(`"${$.key}"`)} ${G.dim(`(${sz($.reason)})`)}`);let Z=lz($.instances);for(let J=0;J<Z.length;J++){let X=Z[J],O=p(X.provider,X.providerLabel),K=J===0?G.green(" [keep]"):G.dim(" "),Q=G.dim(`(${X.scope})`);Y.push(` ${K} ${O} ${Q} ${G.dim(C(X.path))}`)}Y.push("")}return Y.push(G.dim(` Run ${G.bold("asm audit -y")} to auto-remove duplicates`)),Y.push(""),Y.join(`
18
+ `)}function nY(z){return JSON.stringify(z,null,2)}function tY(z){let Y=z.trim();if(!Y)return["vi",[]];let $=[],Z="",J=!1,X=0;while(X<Y.length){let O=Y[X];if(O==='"'){J=!0,X++;while(X<Y.length&&Y[X]!=='"'){if(Y[X]==="\\"&&X+1<Y.length){let K=Y[X+1];if(K==='"'||K==="\\"){Z+=K,X+=2;continue}}Z+=Y[X],X++}X++}else if(O==="'"){J=!0,X++;while(X<Y.length&&Y[X]!=="'")Z+=Y[X],X++;X++}else if(O===" "||O==="\t"){if(Z.length>0||J)$.push(Z),Z="",J=!1;X++}else Z+=O,X++}if(Z.length>0||J)$.push(Z);if($.length===0)return["vi",[]];return[$[0],$.slice(1)]}import{readFileSync as ez}from"fs";import{resolve as zY,dirname as YY}from"path";import{fileURLToPath as ZY}from"url";import{execSync as $Y}from"child_process";var JY=YY(ZY(import.meta.url)),Az="2.3.0";try{let z=ez(zY(JY,"../../package.json"),"utf-8");Az=JSON.parse(z).version}catch{}var Zz="ce4f014";try{Zz=$Y("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||Zz}catch{}var XY=Az,QY=Zz,eY=`v${XY} (${QY})`;
19
+ export{o as e,r as f,i as g,l as h,m as i,zz as j,FY as k,_Y as l,qY as m,dz as n,EY as o,DY as p,WY as q,G as r,h as s,p as t,C as u,CY as v,yY as w,PY as x,az as y,bY as z,vY as A,hY as B,fY as C,gY as D,Hz as E,oz as F,mY as G,Vz as H,kY as I,uY as J,lz as K,sz as L,dY as M,nY as N,XY as O,eY as P,tY as Q};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-skill-manager",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "Interactive TUI for managing installed skills for AI coding agents (Claude Code, Codex, OpenClaw, and more)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,15 +0,0 @@
1
- import{O as T,U as D}from"./chunk-a26gjzjk.js";import{readdir as M,stat as W,lstat as zz,readlink as Fz,readFile as f,realpath as t}from"fs/promises";import{join as E,resolve as a,basename as Iz}from"path";import{homedir as g}from"os";function d(z){let Y={},$=z.split(`
2
- `),Z=!1,J=!1,X=null,L=[],H="none",Q=-1,U=null;function G(){if(X){let O=L.join(" ").trim();if(O)Y[X]=O;X=null,L=[],H="none",Q=-1}}for(let O of $){if(O.trim()==="---")if(!J){J=!0,Z=!0;continue}else{G();break}if(!Z)continue;if(H!=="none"&&X){let A=O.replace(/^\s*/,""),I=O.length-A.length;if(I>0&&A.length>0){if(Q===-1)Q=I;L.push(A);continue}else if(A.length===0)continue;else G()}if(U!==null){let A=O.match(/^\s+(\w[\w-]*):\s*(.*?)\s*$/);if(A){let I=A[1],_=A[2].replace(/^["']|["']$/g,"");if(_)Y[`${U}.${I}`]=_;continue}if(O.trim().length>0)U=null;else continue}let j=O.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(j){G();let A=j[1],I=j[2];if(I==="|"||I===">")X=A,L=[],H=I==="|"?"literal":"folded";else if(I==="|+"||I===">+"||I==="|-"||I===">-")X=A,L=[],H=I.startsWith("|")?"literal":"folded";else{let F=I.replace(/^["']|["']$/g,"");if(F)Y[A]=F;else U=A}}}return G(),Y}function n(z){return z["metadata.version"]||z.version||"0.0.0"}function o(z){let Y=z["allowed-tools"]||"";if(!Y.trim())return[];return Y.split(/[\s,]+/).map(($)=>$.trim()).filter(Boolean)}var _z=E(g(),".claude","plugins","marketplaces"),qz=E(g(),".codex","plugins","cache"),Tz=E(g(),".codex","config.toml"),JY=E(g(),".agents","plugins","marketplace.json");function Ez(z,Y){let $=[];for(let Z of z.providers){if(!Z.enabled){T(`scan: skipping disabled provider "${Z.name}"`);continue}if(Y==="global"||Y==="both"){let J=D(Z.global);T(`scan: adding location ${J} (${Z.label}, global)`),$.push({dir:J,location:`global-${Z.name}`,scope:"global",providerName:Z.name,providerLabel:Z.label})}if(Y==="project"||Y==="both"){let J=D(Z.project);T(`scan: adding location ${J} (${Z.label}, project)`),$.push({dir:J,location:`project-${Z.name}`,scope:"project",providerName:Z.name,providerLabel:Z.label})}}for(let Z of z.customPaths)if(Y===Z.scope||Y==="both"){let J=D(Z.path);T(`scan: adding custom location ${J} (${Z.label}, ${Z.scope})`),$.push({dir:J,location:`${Z.scope}-custom`,scope:Z.scope,providerName:"custom",providerLabel:Z.label})}return $}async function i(z){try{return(await M(z,{recursive:!0})).length}catch{return 0}}async function Nz(z){let Y=[];T(`scanning: ${z.dir} (${z.location})`);let $;try{$=await M(z.dir)}catch{return T(`scanning: ${z.dir} — not found, skipping`),Y}for(let Z of $){let J=E(z.dir,Z);try{if(!(await W(J)).isDirectory()){T(` skip: "${Z}" — not a directory`);continue}}catch{T(` skip: "${Z}" — stat failed`);continue}let X=E(J,"SKILL.md"),L;try{L=await f(X,"utf-8")}catch{T(` skip: "${Z}" — no SKILL.md`);continue}let H=d(L),Q=!1,U=null;try{if((await zz(J)).isSymbolicLink())Q=!0,U=await Fz(J)}catch{}let G=a(J),O;try{O=await t(J)}catch{O=G}Y.push({name:H.name||Z,version:n(H),description:(H.description||"").replace(/\s*\n\s*/g," ").trim(),creator:H["metadata.creator"]||"",license:(H.license||"").trim(),compatibility:(H.compatibility||"").trim(),allowedTools:o(H),effort:H.effort||H["metadata.effort"]||void 0,dirName:Z,path:G,originalPath:J,location:z.location,scope:z.scope,provider:z.providerName,providerLabel:z.providerLabel,isSymlink:Q,symlinkTarget:U,realPath:O})}return T(`found ${Y.length} skill(s) in ${z.dir}`),Y}async function Yz(z){let Y=[],$;try{$=await M(z)}catch{return Y}for(let Z of $){let J=E(z,Z),X;try{X=await zz(J)}catch{continue}if(X.isSymbolicLink())continue;if(X.isDirectory()){let L=E(J,"SKILL.md");try{await W(L),Y.push(J)}catch{let H=await Yz(J);Y.push(...H)}}}return Y}async function Rz(z){let Y=z??_z,$=[];T(`scan: checking plugin marketplaces at ${Y}`);let Z;try{Z=await M(Y)}catch{return T("scan: plugin marketplaces dir not found, skipping"),$}for(let J of Z){let X=E(Y,J),L;try{L=await W(X)}catch{continue}if(!L.isDirectory())continue;T(`scan: scanning marketplace "${J}"`);let H=await Yz(X);for(let Q of H){let U=E(Q,"SKILL.md"),G;try{G=await f(U,"utf-8")}catch{continue}let O=d(G),j=Iz(Q),A=a(Q),I;try{I=await t(Q)}catch{I=A}$.push({name:O.name||j,version:n(O),description:(O.description||"").replace(/\s*\n\s*/g," ").trim(),creator:O["metadata.creator"]||"",license:(O.license||"").trim(),compatibility:(O.compatibility||"").trim(),allowedTools:o(O),effort:O.effort||O["metadata.effort"]||void 0,dirName:j,path:A,originalPath:Q,location:`global-plugin-${J}`,scope:"global",provider:"plugin",providerLabel:`Plugin (${J})`,isSymlink:!1,symlinkTarget:null,realPath:I,marketplace:J})}}return T(`scan: found ${$.length} plugin marketplace skill(s)`),$}function Mz(z){let Y=new Map,$=null;for(let Z of z.split(`
3
- `)){let J=Z.trim(),X=J.match(/^\[plugins\.([^\]]+)\]$/);if(X){$=X[1].trim().replace(/^["']|["']$/g,"");continue}if(J.startsWith("[")){$=null;continue}if($&&J.startsWith("enabled")){let L=J.match(/^enabled\s*=\s*(true|false)/i);if(L)Y.set($,L[1].toLowerCase()==="true")}}return Y}async function Sz(z){let Y=z??Tz;try{let $=await f(Y,"utf-8");return Mz($)}catch{return T(`codex: config.toml not found at ${Y}, skipping enabled check`),new Map}}async function xz(z,Y){let $=z??qz,Z=[];T(`codex: checking plugin cache at ${$}`);let J;try{J=await M($)}catch{return T("codex: plugin cache dir not found, skipping"),Z}let X=await Sz(Y);for(let L of J){let H=E($,L),Q;try{Q=await W(H)}catch{continue}if(!Q.isDirectory())continue;let U;try{U=await M(H)}catch{continue}for(let G of U){let O=E(H,G),j;try{j=await W(O)}catch{continue}if(!j.isDirectory())continue;let A;try{A=await M(O)}catch{continue}let I=(await Promise.all(A.map(async(R)=>{try{return(await W(E(O,R))).isDirectory()?R:null}catch{return null}}))).filter((R)=>R!==null);if(I.length===0)continue;let F=I.sort(Zz).at(-1),_=E(O,F),S=E(_,".codex-plugin","plugin.json"),N;try{let R=await f(S,"utf-8");N=JSON.parse(R)}catch{T(`codex: no valid plugin.json at ${S}, skipping`);continue}let x=a(_),V;try{V=await t(_)}catch{V=x}let q=N.interface?.displayName||N.name||G,y=N.version||F,P=(N.description||"").replace(/\s*\n\s*/g," ").trim(),v=X.has(G)?X.get(G):!0;Z.push({name:q,version:y,description:P,creator:"",license:"",compatibility:"",allowedTools:[],dirName:G,path:x,originalPath:_,location:`global-codex-plugin-${L}`,scope:"global",provider:"codex-plugin",providerLabel:`Codex Plugin (${L})`,isSymlink:!1,symlinkTarget:null,realPath:V,marketplace:L,codexPlugin:{category:N.interface?.category,hasMcpConfig:N.mcp!=null&&Object.keys(N.mcp).length>0,pluginName:G,pluginVersion:F,enabled:v}})}}return T(`codex: found ${Z.length} plugin(s) in cache`),Z}async function XY(z,Y,$,Z){let J=Ez(z,Y),X=Y==="global"||Y==="both",[L,H,Q]=await Promise.all([Promise.all(J.map(Nz)),X?Rz($):Promise.resolve([]),X?xz(Z):Promise.resolve([])]),U=L.flat(),G=new Set(U.map((j)=>j.realPath)),O=new Set(U.map((j)=>j.name.toLowerCase()));for(let j of H)if(!G.has(j.realPath)&&!O.has(j.name.toLowerCase()))U.push(j),G.add(j.realPath),O.add(j.name.toLowerCase());for(let j of Q)if(!G.has(j.realPath)&&!O.has(j.name.toLowerCase()))U.push(j),G.add(j.realPath),O.add(j.name.toLowerCase());return U}function QY(z,Y){if(!Y.trim())return z;let $=Y.toLowerCase();return z.filter((Z)=>Z.name.toLowerCase().includes($)||Z.description.toLowerCase().includes($)||Z.creator.toLowerCase().includes($)||Z.effort&&Z.effort.toLowerCase().includes($)||Z.location.toLowerCase().includes($)||Z.providerLabel.toLowerCase().includes($))}function Zz(z,Y){let $=z.split("."),Z=Y.split("."),J=Math.max($.length,Z.length);for(let X=0;X<J;X++){let L=parseInt($[X]??"0",10),H=parseInt(Z[X]??"0",10);if(isNaN(L)||isNaN(H))return z.localeCompare(Y);if(L!==H)return L-H}return 0}function UY(z,Y){let $=[...z];switch(Y){case"name":$.sort((Z,J)=>Z.name.localeCompare(J.name));break;case"version":$.sort((Z,J)=>Zz(Z.version,J.version));break;case"location":$.sort((Z,J)=>Z.location.localeCompare(J.location));break}return $}import{rm as r,readFile as Jz,writeFile as Dz,access as Wz,lstat as wz,symlink as Cz}from"fs/promises";import{join as $z,resolve as w,dirname as Xz,relative as yz}from"path";import{homedir as Pz}from"os";var vz=Pz();function bz(z,Y){let $={directories:[],ruleFiles:[],agentsBlocks:[]};$.directories.push({path:z.originalPath,isSymlink:z.isSymlink});let Z=z.dirName;if(z.scope==="project")$.ruleFiles.push(w(".cursor","rules",`${Z}.mdc`),w(".windsurf","rules",`${Z}.md`),w(".github","instructions",`${Z}.instructions.md`)),$.agentsBlocks.push({file:w("AGENTS.md"),skillName:Z});if(z.scope==="global"){for(let L of Y.providers){if(!L.enabled)continue;let H=D(L.global),Q=$z(Xz(H),"AGENTS.md");$.agentsBlocks.push({file:Q,skillName:Z})}let J=$z(vz,".codex","AGENTS.md");if(!$.agentsBlocks.some((L)=>L.file===J))$.agentsBlocks.push({file:J,skillName:Z})}return $}function jY(z,Y,$){let Z=Y.filter((Q)=>Q.dirName===z);if(Z.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let J={directories:[],ruleFiles:[],agentsBlocks:[]},X=new Set,L=new Set,H=new Set;for(let Q of Z){let U=bz(Q,$);for(let G of U.directories)if(!X.has(G.path))X.add(G.path),J.directories.push(G);for(let G of U.ruleFiles)if(!L.has(G))L.add(G),J.ruleFiles.push(G);for(let G of U.agentsBlocks){let O=`${G.file}::${G.skillName}`;if(!H.has(O))H.add(O),J.agentsBlocks.push(G)}}return J}async function b(z){try{return await Wz(z),!0}catch{return!1}}async function hz(z,Y){if(!await b(z))return;let $=await Jz(z,"utf-8");for(let Z of["agent-skill-manager","skill-manager","pskills"]){let J=`<!-- ${Z}: ${Y} -->`,X=`<!-- /${Z}: ${Y} -->`,L=$.indexOf(J),H=$.indexOf(X);if(L===-1||H===-1)continue;let Q=L;if(Q>0&&$[Q-1]===`
4
- `)Q--;let G=H+X.length;if(G<$.length&&$[G]===`
5
- `)G++;$=$.slice(0,Q)+$.slice(G)}await Dz(z,$,"utf-8")}async function AY(z,Y){let $=[];for(let Z of z.directories)try{if(Z.isSymlink)await r(Z.path),$.push(`Removed symlink: ${Z.path}`);else await r(Z.path,{recursive:!0,force:!0}),$.push(`Removed directory: ${Z.path}`);if(Y&&w(Z.path)!==w(Y)){let J=Xz(Z.path),X=yz(J,Y);await Cz(X,Z.path,"dir"),$.push(`Created symlink: ${Z.path} -> ${X}`)}}catch(J){$.push(`Failed to remove ${Z.path}: ${J.message}`)}for(let Z of z.ruleFiles)if(await b(Z))try{await r(Z),$.push(`Removed rule file: ${Z}`)}catch(J){$.push(`Failed to remove ${Z}: ${J.message}`)}for(let Z of z.agentsBlocks)try{await hz(Z.file,Z.skillName),$.push(`Cleaned AGENTS.md block in: ${Z.file}`)}catch(J){$.push(`Failed to clean AGENTS.md block: ${J.message}`)}return $}async function KY(z){let Y=[];for(let $ of z.directories)if(await b($.path)){let J=(await wz($.path)).isSymbolicLink()?"symlink":"directory";Y.push(`${$.path} (${J})`)}for(let $ of z.ruleFiles)if(await b($))Y.push($);for(let $ of z.agentsBlocks)if(await b($.file)){let Z=await Jz($.file,"utf-8");if(Z.includes(`<!-- agent-skill-manager: ${$.skillName} -->`)||Z.includes(`<!-- skill-manager: ${$.skillName} -->`)||Z.includes(`<!-- pskills: ${$.skillName} -->`))Y.push(`${$.file} (AGENTS.md block)`)}return Y}var K=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},B={bold:(z)=>K()?`\x1B[1m${z}\x1B[0m`:z,cyan:(z)=>K()?`\x1B[36m${z}\x1B[0m`:z,green:(z)=>K()?`\x1B[32m${z}\x1B[0m`:z,yellow:(z)=>K()?`\x1B[33m${z}\x1B[0m`:z,dim:(z)=>K()?`\x1B[2m${z}\x1B[0m`:z,white:(z)=>K()?`\x1B[37m${z}\x1B[0m`:z,red:(z)=>K()?`\x1B[31m${z}\x1B[0m`:z,blue:(z)=>K()?`\x1B[34m${z}\x1B[0m`:z,blueBold:(z)=>K()?`\x1B[34;1m${z}\x1B[0m`:z,magenta:(z)=>K()?`\x1B[35m${z}\x1B[0m`:z,bgDim:(z)=>K()?`\x1B[48;5;236m${z}\x1B[0m`:z,bgRed:(z)=>K()?`\x1B[41m\x1B[37m\x1B[1m${z}\x1B[0m`:z,bgYellow:(z)=>K()?`\x1B[43m\x1B[30m\x1B[1m${z}\x1B[0m`:z,bgGreen:(z)=>K()?`\x1B[42m\x1B[30m\x1B[1m${z}\x1B[0m`:z,bgCyan:(z)=>K()?`\x1B[46m\x1B[30m\x1B[1m${z}\x1B[0m`:z};function k(z){if(!z)return"";switch(z.toLowerCase()){case"low":return B.green(z);case"medium":return B.yellow(z);case"high":return B.red(z);case"max":return B.magenta(z);default:return z}}var Qz={claude:B.blueBold,codex:B.cyan,"codex-plugin":B.cyan,openclaw:B.yellow,agents:B.green,custom:B.magenta,cursor:B.blue,windsurf:B.cyan,cline:B.green,roocode:B.magenta,continue:B.yellow,copilot:B.white,aider:B.red,opencode:B.cyan,zed:B.blue,augment:B.green,amp:B.yellow};function l(z,Y){return(Qz[z]||B.dim)(Y)}function s(z,Y){if(!K())return`[${Y}]`;return(Qz[z]||B.dim)(`[${Y}]`)}function C(z){let Y=process.env.HOME||process.env.USERPROFILE||"";if(Y&&z.startsWith(Y))return"~"+z.slice(Y.length);return z}function IY(z){if(z.length===0)return"No skills found.";let Y=["Name","Version","Creator","Effort","Tool","Scope","Type","Path"],$=z.map((Q)=>[Q.name,Q.version,Q.creator||"—",Q.effort||"—",Q.providerLabel,Q.scope,Q.isSymlink?"symlink":"directory",C(Q.path)]),Z=Y.map((Q,U)=>Math.max(Q.length,...$.map((G)=>G[U].length))),J=(Q,U)=>Q.padEnd(U),X=Y.map((Q,U)=>J(Q,Z[U])).join(" "),L=Z.map((Q)=>"-".repeat(Q)).join("--"),H=$.map((Q)=>Q.map((U,G)=>J(U,Z[G])).join(" "));return[K()?B.bold(X):X,L,...H].join(`
6
- `)}function Uz(z){let Y=new Map;for(let Z of z){let J=`${Z.dirName}||${Z.scope}`,X=Y.get(J)??[];X.push(Z),Y.set(J,X)}let $=[];for(let[,Z]of Y){let J=Z[0],X=new Set(Z.map((H)=>H.scope)),L=new Set(Z.map((H)=>H.isSymlink?"symlink":"directory"));$.push({name:J.name,version:J.version,creator:J.creator||"",effort:J.effort||"",providers:Z.map((H)=>({provider:H.provider,label:H.providerLabel})),scope:X.size>1?"mixed":J.scope,type:L.size>1?"mixed":J.isSymlink?"symlink":"directory",path:C(J.path),warningCount:Z.reduce((H,Q)=>H+(Q.warnings?.length??0),0)})}return $}function _Y(z){if(z.length===0)return"No skills found.";let Y=Uz(z),$=[],Z=Math.max(4,...Y.map((V)=>V.name.length)),J=Math.max(7,...Y.map((V)=>V.version.length)),X=Math.max(7,...Y.map((V)=>Math.min((V.creator||"—").length,15))),L=Math.max(6,...Y.map((V)=>(V.effort||"—").length)),H=7,Q=9,U=Y.map((V)=>V.providers.map((q)=>s(q.provider,q.label)).join(" ")),G=Y.map((V)=>V.providers.map((q)=>`[${q.label}]`).join(" ")),O=Math.max(9,...G.map((V)=>V.length)),j=(V,q)=>V.padEnd(q),A=`${j("Name",Z)} ${j("Version",J)} ${j("Creator",X)} ${j("Effort",L)} ${j("Tools",O)} ${j("Scope",H)} ${j("Type",Q)}`;$.push(K()?B.bold(A):A),$.push(`${"-".repeat(Z)} ${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(L)} ${"-".repeat(O)} ${"-".repeat(H)} ${"-".repeat(Q)}`);for(let V=0;V<Y.length;V++){let q=Y[V],y=j(q.name,Z),P=j(q.version,J),v=(q.creator||"—").slice(0,15),R=j(v,X),h=q.effort||"—",m=q.effort?k(q.effort):"—",c=L-h.length,u=m+" ".repeat(Math.max(0,c)),p=O-G[V].length,jz=U[V]+" ".repeat(Math.max(0,p)),Az=j(q.scope,H),Kz=j(q.type,Q),Vz=q.warningCount>0?` ${B.yellow(`(${q.warningCount} warning${q.warningCount>1?"s":""})`)}`:"";$.push(`${y} ${P} ${R} ${u} ${jz} ${Az} ${Kz}${Vz}`)}let I=Y.length,F=z.length,_=new Set(z.map((V)=>V.provider)),S=z.filter((V)=>V.scope==="global").length,N=z.filter((V)=>V.scope==="project").length;$.push("");let x=`${F} skills (${I} unique) across ${_.size} tools | ${S} global, ${N} project`;return $.push(B.dim(x)),$.join(`
7
- `)}function fz(z,Y){if(!K()||!Y)return z;let $=z.toLowerCase().indexOf(Y.toLowerCase());if($===-1)return z;let Z=z.slice(0,$),J=z.slice($,$+Y.length),X=z.slice($+Y.length);return`${Z}${B.bold(B.yellow(J))}${X}`}function qY(z,Y){if(z.length===0)return`No skills matching "${Y}". Try ${B.bold("asm list")} to see all skills.`;let $=Uz(z),Z=[];Z.push(B.dim(`Found ${z.length} result${z.length===1?"":"s"} (${$.length} unique) matching "${Y}"`)+`
8
- `);let J=Math.max(4,...$.map((F)=>F.name.length)),X=Math.max(7,...$.map((F)=>F.version.length)),L=Math.max(7,...$.map((F)=>Math.min((F.creator||"—").length,15))),H=Math.max(6,...$.map((F)=>(F.effort||"—").length)),Q=$.map((F)=>F.providers.map((_)=>s(_.provider,_.label)).join(" ")),U=$.map((F)=>F.providers.map((_)=>`[${_.label}]`).join(" ")),G=Math.max(9,...U.map((F)=>F.length)),O=7,j=9,A=(F,_)=>F.padEnd(_),I=`${A("Name",J)} ${A("Version",X)} ${A("Creator",L)} ${A("Effort",H)} ${A("Tools",G)} ${A("Scope",O)} ${A("Type",j)}`;Z.push(K()?B.bold(I):I),Z.push(`${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(L)} ${"-".repeat(H)} ${"-".repeat(G)} ${"-".repeat(O)} ${"-".repeat(j)}`);for(let F=0;F<$.length;F++){let _=$[F],S=fz(_.name,Y),N=J-_.name.length,x=S+" ".repeat(Math.max(0,N)),V=A(_.version,X),q=(_.creator||"—").slice(0,15),y=A(q,L),P=_.effort||"—",v=_.effort?k(_.effort):"—",R=H-P.length,h=v+" ".repeat(Math.max(0,R)),m=G-U[F].length,c=Q[F]+" ".repeat(Math.max(0,m)),u=A(_.scope,O),p=A(_.type,j);Z.push(`${x} ${V} ${y} ${h} ${c} ${u} ${p}`)}return Z.join(`
9
- `)}function TY(z,Y){if(z.length===0)return"";let $=[];$.push(B.dim(`Found ${z.length} available skill${z.length===1?"":"s"} matching "${Y}"`)+`
10
- `);for(let Z of z){$.push(` ${B.dim("To install:")} ${B.green(`asm install ${Z.installUrl}`)}`);let J=Z.verified?B.blue(" [verified]"):"";$.push(` ${B.cyan(Z.name)} ${B.dim(`v${Z.version}`)}${J} ${B.dim(`[${Z.repoLabel}]`)}`);for(let X of Lz(Z.description,76))$.push(` ${X}`);$.push("")}return $.join(`
11
- `)}var Gz=new Set(["Bash","Write","Edit","NotebookEdit"]),gz=new Set(["WebFetch","WebSearch"]);function kz(z){if(Gz.has(z))return B.red(z);if(gz.has(z))return B.yellow(z);return B.green(z)}function Bz(z){if(z.length===0)return"";return z.map(kz).join(" ")}function Hz(z){let Y=z.filter((Z)=>Gz.has(Z));if(Y.length===0)return null;let $=[];if(Y.includes("Bash"))$.push("execute shell commands");if(Y.includes("Write")||Y.includes("Edit")||Y.includes("NotebookEdit"))$.push("modify files");return`This skill can ${$.join(" and ")}`}async function mz(z){let Y=[],$=(J,X)=>`${K()?B.bold(J+":"):J+":"} ${X}`;if(Y.push($("Name",z.name)),Y.push($("Version",z.version)),Y.push($("Creator",z.creator||"—")),Y.push($("License",z.license||"—")),z.compatibility)Y.push($("Compatibility",z.compatibility));if(z.effort)Y.push($("Effort",k(z.effort)));if(Y.push($("Tool",z.providerLabel)),Y.push($("Scope",z.scope)),Y.push($("Location",z.location)),Y.push($("Path",C(z.path))),Y.push($("Type",z.isSymlink?"symlink":"directory")),z.isSymlink&&z.symlinkTarget)Y.push($("Symlink Target",z.symlinkTarget));let Z=z.fileCount??await i(z.path);if(Y.push($("File Count",String(Z))),z.description)Y.push(""),Y.push($("Description",z.description));if(z.allowedTools&&z.allowedTools.length>0){Y.push(""),Y.push(K()?B.bold("Allowed Tools:"):"Allowed Tools:"),Y.push(` ${Bz(z.allowedTools)}`);let J=Hz(z.allowedTools);if(J)Y.push(` ${K()?B.yellow("⚠"):"!"} ${J}`)}if(z.warnings&&z.warnings.length>0){Y.push(""),Y.push(K()?B.bold("Warnings:"):"Warnings:");for(let J of z.warnings)Y.push(` ${K()?B.yellow("!"):"!"} [${J.category}] ${J.message}`)}return Y.join(`
12
- `)}async function EY(z){if(z.length===0)return"No skills found.";if(z.length===1)return mz(z[0]);let Y=[],$=(U,G)=>`${K()?B.bold(U+":"):U+":"} ${G}`,Z=z[0],J=Z.name;if(Y.push(""),Y.push(K()?B.blueBold(` ${J}`):` ${J}`),Y.push(K()?B.dim(" "+"-".repeat(J.length+2)):" "+"-".repeat(J.length+2)),Y.push(""),Y.push($(" Version",Z.version)),Y.push($(" Creator",Z.creator||"—")),Y.push($(" License",Z.license||"—")),Z.compatibility)Y.push($(" Compatibility",Z.compatibility));if(Z.effort)Y.push($(" Effort",k(Z.effort)));let X=Z.fileCount??await i(Z.path);Y.push($(" File Count",String(X)));let L=z.map((U)=>s(U.provider,U.providerLabel)).join(" ");if(Y.push($(" Installed in",L)),Z.description){Y.push(""),Y.push(K()?B.bold(" Description:"):" Description:");let U=Lz(Z.description,72);for(let G of U)Y.push(" "+G)}if(Z.allowedTools&&Z.allowedTools.length>0){Y.push(""),Y.push(K()?B.bold(" Allowed Tools:"):" Allowed Tools:"),Y.push(` ${Bz(Z.allowedTools)}`);let U=Hz(Z.allowedTools);if(U)Y.push(` ${K()?B.yellow("⚠"):"!"} ${U}`)}Y.push("");let H=` Installations (${z.length})`;Y.push(K()?B.bold(H):H);for(let U=0;U<z.length;U++){let G=z[U],O=l(G.provider,G.providerLabel),j=G.isSymlink?"symlink":"directory",A=B.dim(G.scope);if(Y.push(` ${O} (${A}, ${j})`),Y.push(` ${B.dim("Path:")} ${C(G.path)}`),G.isSymlink&&G.symlinkTarget)Y.push(` ${B.dim("Target:")} ${G.symlinkTarget}`)}let Q=z.flatMap((U)=>{if(!U.warnings||U.warnings.length===0)return[];return U.warnings.map((G)=>({...G,provider:U.providerLabel}))});if(Q.length>0){Y.push("");let U=` Warnings (${Q.length})`;Y.push(K()?B.bold(U):U);for(let G of Q){let O=K()?B.yellow("!"):"!";Y.push(` ${O} [${G.category}] ${G.message}`)}}return Y.push(""),Y.join(`
13
- `)}function Lz(z,Y){let $=z.split(/\s+/),Z=[],J="";for(let X of $)if(J.length+X.length+1>Y&&J.length>0)Z.push(J),J=X;else J=J?J+" "+X:X;if(J)Z.push(J);return Z}function NY(z){return JSON.stringify(z,null,2)}function SY(z){let Y=[],$=new Set,Z=new Map,J=[];for(let Q of z){let U=Z.get(Q.realPath);if(U){if(Q.isSymlink)continue;if(U.isSymlink)J[J.indexOf(U)]=Q,Z.set(Q.realPath,Q);else J.push(Q)}else Z.set(Q.realPath,Q),J.push(Q)}let X=new Map;for(let Q of J){let U=X.get(Q.dirName)??[];U.push(Q),X.set(Q.dirName,U)}for(let[Q,U]of X)if(new Set(U.map((O)=>O.location)).size>=2){Y.push({key:Q,reason:"same-dirName",instances:U});for(let O of U)$.add(O.path)}let L=new Map;for(let Q of J){if(!Q.name)continue;let U=L.get(Q.name)??[];U.push(Q),L.set(Q.name,U)}for(let[Q,U]of L){if(new Set(U.map((A)=>A.dirName)).size<2)continue;let O=U.filter((A)=>!$.has(A.path));if(O.length<2)continue;if(new Set(O.map((A)=>A.dirName)).size<2)continue;Y.push({key:Q,reason:"same-frontmatterName",instances:O})}Y.sort((Q,U)=>{if(Q.reason!==U.reason)return Q.reason==="same-dirName"?-1:1;return Q.key.localeCompare(U.key)});let H=Y.reduce((Q,U)=>Q+U.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:z.length,duplicateGroups:Y,totalDuplicateInstances:H}}function cz(z){return[...z].sort((Y,$)=>{if(Y.scope!==$.scope)return Y.scope==="global"?-1:1;let Z=Y.providerLabel.localeCompare($.providerLabel);if(Z!==0)return Z;return Y.path.localeCompare($.path)})}function uz(z){return z==="same-dirName"?"same dirName":"same name"}function xY(z){if(z.duplicateGroups.length===0)return B.green("No duplicate skills found.");let Y=[];Y.push(""),Y.push(B.bold(` Found ${z.duplicateGroups.length} duplicate group(s) (${z.totalDuplicateInstances} total instances):`)),Y.push("");for(let $ of z.duplicateGroups){Y.push(` ${B.yellow(`"${$.key}"`)} ${B.dim(`(${uz($.reason)})`)}`);let Z=cz($.instances);for(let J=0;J<Z.length;J++){let X=Z[J],L=l(X.provider,X.providerLabel),H=J===0?B.green(" [keep]"):B.dim(" "),Q=B.dim(`(${X.scope})`);Y.push(` ${H} ${L} ${Q} ${B.dim(C(X.path))}`)}Y.push("")}return Y.push(B.dim(` Run ${B.bold("asm audit -y")} to auto-remove duplicates`)),Y.push(""),Y.join(`
14
- `)}function DY(z){return JSON.stringify(z,null,2)}function wY(z){let Y=z.trim();if(!Y)return["vi",[]];let $=[],Z="",J=!1,X=0;while(X<Y.length){let L=Y[X];if(L==='"'){J=!0,X++;while(X<Y.length&&Y[X]!=='"'){if(Y[X]==="\\"&&X+1<Y.length){let H=Y[X+1];if(H==='"'||H==="\\"){Z+=H,X+=2;continue}}Z+=Y[X],X++}X++}else if(L==="'"){J=!0,X++;while(X<Y.length&&Y[X]!=="'")Z+=Y[X],X++;X++}else if(L===" "||L==="\t"){if(Z.length>0||J)$.push(Z),Z="",J=!1;X++}else Z+=L,X++}if(Z.length>0||J)$.push(Z);if($.length===0)return["vi",[]];return[$[0],$.slice(1)]}import{readFileSync as pz}from"fs";import{resolve as dz,dirname as nz}from"path";import{fileURLToPath as oz}from"url";import{execSync as tz}from"child_process";var az=nz(oz(import.meta.url)),Oz="2.1.0";try{let z=pz(dz(az,"../../package.json"),"utf-8");Oz=JSON.parse(z).version}catch{}var e="bc495a4";try{e=tz("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||e}catch{}var iz=Oz,rz=e,hY=`v${iz} (${rz})`;
15
- export{d as e,n as f,o as g,i as h,XY as i,QY as j,UY as k,bz as l,jY as m,AY as n,KY as o,B as p,k as q,l as r,C as s,IY as t,_Y as u,qY as v,TY as w,Gz as x,gz as y,EY as z,Lz as A,NY as B,SY as C,cz as D,uz as E,xY as F,DY as G,iz as H,hY as I,wY as J};