agent-skill-manager 2.3.0 → 2.4.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.
@@ -1,3 +0,0 @@
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
- `,"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
- export{H as a,Z as b,$ as c,A as d};
@@ -1,3 +0,0 @@
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
- `,"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 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};
@@ -1,19 +0,0 @@
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};