agent-skill-manager 1.8.2 → 1.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-skill-manager.js +3 -3
- package/dist/chunk-2fm3qrhn.js +90 -0
- package/dist/chunk-4ftygzj1.js +90 -0
- package/dist/chunk-r21630cj.js +12 -0
- package/dist/chunk-y7cdqp3j.js +12 -0
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{B as D,E as K}from"./chunk-wdjcav1v.js";import{readdir as h,stat as a,lstat as r,readlink as i,readFile as l,realpath as s}from"fs/promises";import{join as y,resolve as e}from"path";function v($){let L={},j=$.split(`
|
|
2
|
+
`),S=!1,A=!1,Q=null,Z=[],X="none",c=-1;function z(){if(Q){let G=Z.join(" ").trim();if(G)L[Q]=G;Q=null,Z=[],X="none",c=-1}}for(let G of j){if(G.trim()==="---")if(!A){A=!0,S=!0;continue}else{z();break}if(!S)continue;if(X!=="none"&&Q){let f=G.replace(/^\s*/,""),J=G.length-f.length;if(J>0&&f.length>0){if(c===-1)c=J;Z.push(f);continue}else if(f.length===0)continue;else z()}let U=G.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(U){z();let f=U[1],J=U[2];if(J==="|"||J===">")Q=f,Z=[],X=J==="|"?"literal":"folded";else if(J==="|+"||J===">+"||J==="|-"||J===">-")Q=f,Z=[],X=J.startsWith("|")?"literal":"folded";else{let N=J.replace(/^["']|["']$/g,"");if(N)L[f]=N}}}return z(),L}function $$($,L){let j=[];for(let S of $.providers){if(!S.enabled){D(`scan: skipping disabled provider "${S.name}"`);continue}if(L==="global"||L==="both"){let A=K(S.global);D(`scan: adding location ${A} (${S.label}, global)`),j.push({dir:A,location:`global-${S.name}`,scope:"global",providerName:S.name,providerLabel:S.label})}if(L==="project"||L==="both"){let A=K(S.project);D(`scan: adding location ${A} (${S.label}, project)`),j.push({dir:A,location:`project-${S.name}`,scope:"project",providerName:S.name,providerLabel:S.label})}}for(let S of $.customPaths)if(L===S.scope||L==="both"){let A=K(S.path);D(`scan: adding custom location ${A} (${S.label}, ${S.scope})`),j.push({dir:A,location:`${S.scope}-custom`,scope:S.scope,providerName:"custom",providerLabel:S.label})}return j}async function P($){try{return(await h($,{recursive:!0})).length}catch{return 0}}async function L$($){let L=[];D(`scanning: ${$.dir} (${$.location})`);let j;try{j=await h($.dir)}catch{return D(`scanning: ${$.dir} — not found, skipping`),L}for(let S of j){let A=y($.dir,S);try{if(!(await a(A)).isDirectory()){D(` skip: "${S}" — not a directory`);continue}}catch{D(` skip: "${S}" — stat failed`);continue}let Q=y(A,"SKILL.md"),Z;try{Z=await l(Q,"utf-8")}catch{D(` skip: "${S}" — no SKILL.md`);continue}let X=v(Z),c=!1,z=null;try{if((await r(A)).isSymbolicLink())c=!0,z=await i(A)}catch{}let G=e(A),U;try{U=await s(A)}catch{U=G}L.push({name:X.name||S,version:X.version||"0.0.0",description:(X.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:S,path:G,originalPath:A,location:$.location,scope:$.scope,provider:$.providerName,providerLabel:$.providerLabel,isSymlink:c,symlinkTarget:z,realPath:U})}return D(`found ${L.length} skill(s) in ${$.dir}`),L}async function w$($,L){let j=$$($,L);return(await Promise.all(j.map(L$))).flat()}function C$($,L){if(!L.trim())return $;let j=L.toLowerCase();return $.filter((S)=>S.name.toLowerCase().includes(j)||S.description.toLowerCase().includes(j)||S.location.toLowerCase().includes(j)||S.providerLabel.toLowerCase().includes(j))}function S$($,L){let j=$.split("."),S=L.split("."),A=Math.max(j.length,S.length);for(let Q=0;Q<A;Q++){let Z=parseInt(j[Q]??"0",10),X=parseInt(S[Q]??"0",10);if(isNaN(Z)||isNaN(X))return $.localeCompare(L);if(Z!==X)return Z-X}return 0}function x$($,L){let j=[...$];switch(L){case"name":j.sort((S,A)=>S.name.localeCompare(A.name));break;case"version":j.sort((S,A)=>S$(S.version,A.version));break;case"location":j.sort((S,A)=>S.location.localeCompare(A.location));break}return j}import{rm as w,readFile as t,writeFile as j$,access as A$,lstat as c$,symlink as z$}from"fs/promises";import{join as b,resolve as O,dirname as g,relative as G$}from"path";import{homedir as Q$}from"os";var X$=Q$();function Y$($,L){let j={directories:[],ruleFiles:[],agentsBlocks:[]};j.directories.push({path:$.originalPath,isSymlink:$.isSymlink});let S=$.dirName;if($.scope==="project")j.ruleFiles.push(O(".cursor","rules",`${S}.mdc`),O(".windsurf","rules",`${S}.md`),O(".github","instructions",`${S}.instructions.md`)),j.agentsBlocks.push({file:O("AGENTS.md"),skillName:S});if($.scope==="global"){for(let Z of L.providers){if(!Z.enabled)continue;let X=K(Z.global),c=b(g(X),"AGENTS.md");j.agentsBlocks.push({file:c,skillName:S})}let A=b(X$,".codex","AGENTS.md");if(!j.agentsBlocks.some((Z)=>Z.file===A))j.agentsBlocks.push({file:A,skillName:S})}return j}function t$($,L,j){let S=L.filter((c)=>c.dirName===$);if(S.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let A={directories:[],ruleFiles:[],agentsBlocks:[]},Q=new Set,Z=new Set,X=new Set;for(let c of S){let z=Y$(c,j);for(let G of z.directories)if(!Q.has(G.path))Q.add(G.path),A.directories.push(G);for(let G of z.ruleFiles)if(!Z.has(G))Z.add(G),A.ruleFiles.push(G);for(let G of z.agentsBlocks){let U=`${G.file}::${G.skillName}`;if(!X.has(U))X.add(U),A.agentsBlocks.push(G)}}return A}async function _($){try{return await A$($),!0}catch{return!1}}async function Z$($,L){if(!await _($))return;let j=await t($,"utf-8");for(let S of["agent-skill-manager","skill-manager","pskills"]){let A=`<!-- ${S}: ${L} -->`,Q=`<!-- /${S}: ${L} -->`,Z=j.indexOf(A),X=j.indexOf(Q);if(Z===-1||X===-1)continue;let c=Z;if(c>0&&j[c-1]===`
|
|
3
|
+
`)c--;let G=X+Q.length;if(G<j.length&&j[G]===`
|
|
4
|
+
`)G++;j=j.slice(0,c)+j.slice(G)}await j$($,j,"utf-8")}async function g$($,L){let j=[];for(let S of $.directories)try{if(S.isSymlink)await w(S.path),j.push(`Removed symlink: ${S.path}`);else await w(S.path,{recursive:!0,force:!0}),j.push(`Removed directory: ${S.path}`);if(L&&O(S.path)!==O(L)){let A=g(S.path),Q=G$(A,L);await z$(Q,S.path,"dir"),j.push(`Created symlink: ${S.path} -> ${Q}`)}}catch(A){j.push(`Failed to remove ${S.path}: ${A.message}`)}for(let S of $.ruleFiles)if(await _(S))try{await w(S),j.push(`Removed rule file: ${S}`)}catch(A){j.push(`Failed to remove ${S}: ${A.message}`)}for(let S of $.agentsBlocks)try{await Z$(S.file,S.skillName),j.push(`Cleaned AGENTS.md block in: ${S.file}`)}catch(A){j.push(`Failed to clean AGENTS.md block: ${A.message}`)}return j}async function m$($){let L=[];for(let j of $.directories)if(await _(j.path)){let A=(await c$(j.path)).isSymbolicLink()?"symlink":"directory";L.push(`${j.path} (${A})`)}for(let j of $.ruleFiles)if(await _(j))L.push(j);for(let j of $.agentsBlocks)if(await _(j.file)){let S=await t(j.file,"utf-8");if(S.includes(`<!-- agent-skill-manager: ${j.skillName} -->`)||S.includes(`<!-- skill-manager: ${j.skillName} -->`)||S.includes(`<!-- pskills: ${j.skillName} -->`))L.push(`${j.file} (AGENTS.md block)`)}return L}var B=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},Y={bold:($)=>B()?`\x1B[1m${$}\x1B[0m`:$,cyan:($)=>B()?`\x1B[36m${$}\x1B[0m`:$,green:($)=>B()?`\x1B[32m${$}\x1B[0m`:$,yellow:($)=>B()?`\x1B[33m${$}\x1B[0m`:$,dim:($)=>B()?`\x1B[2m${$}\x1B[0m`:$,red:($)=>B()?`\x1B[31m${$}\x1B[0m`:$,blueBold:($)=>B()?`\x1B[1m\x1B[34m${$}\x1B[0m`:$,magenta:($)=>B()?`\x1B[35m${$}\x1B[0m`:$,bgDim:($)=>B()?`\x1B[48;5;236m${$}\x1B[0m`:$,bgRed:($)=>B()?`\x1B[41m\x1B[37m\x1B[1m${$}\x1B[0m`:$,bgYellow:($)=>B()?`\x1B[43m\x1B[30m\x1B[1m${$}\x1B[0m`:$,bgGreen:($)=>B()?`\x1B[42m\x1B[30m\x1B[1m${$}\x1B[0m`:$,bgCyan:($)=>B()?`\x1B[46m\x1B[30m\x1B[1m${$}\x1B[0m`:$};var m={claude:Y.blueBold,codex:Y.cyan,openclaw:Y.yellow,agents:Y.green,custom:Y.magenta};function C($,L){return(m[$]||Y.dim)(L)}function x($,L){if(!B())return`[${L}]`;return(m[$]||Y.dim)(`[${L}]`)}function T($){let L=process.env.HOME||process.env.USERPROFILE||"";if(L&&$.startsWith(L))return"~"+$.slice(L.length);return $}function k$($){if($.length===0)return"No skills found.";let L=["Name","Version","Provider","Scope","Type","Path"],j=$.map((c)=>[c.name,c.version,c.providerLabel,c.scope,c.isSymlink?"symlink":"directory",T(c.path)]),S=L.map((c,z)=>Math.max(c.length,...j.map((G)=>G[z].length))),A=(c,z)=>c.padEnd(z),Q=L.map((c,z)=>A(c,S[z])).join(" "),Z=S.map((c)=>"-".repeat(c)).join("--"),X=j.map((c)=>c.map((z,G)=>A(z,S[G])).join(" "));return[B()?Y.bold(Q):Q,Z,...X].join(`
|
|
5
|
+
`)}function p($){let L=new Map;for(let S of $){let A=`${S.dirName}||${S.scope}`,Q=L.get(A)??[];Q.push(S),L.set(A,Q)}let j=[];for(let[,S]of L){let A=S[0],Q=new Set(S.map((X)=>X.scope)),Z=new Set(S.map((X)=>X.isSymlink?"symlink":"directory"));j.push({name:A.name,version:A.version,providers:S.map((X)=>({provider:X.provider,label:X.providerLabel})),scope:Q.size>1?"mixed":A.scope,type:Z.size>1?"mixed":A.isSymlink?"symlink":"directory",path:T(A.path),warningCount:S.reduce((X,c)=>X+(c.warnings?.length??0),0)})}return j}function u$($){if($.length===0)return"No skills found.";let L=p($),j=[],S=Math.max(4,...L.map((I)=>I.name.length)),A=Math.max(7,...L.map((I)=>I.version.length)),Q=7,Z=9,X=L.map((I)=>I.providers.map((H)=>x(H.provider,H.label)).join(" ")),c=L.map((I)=>I.providers.map((H)=>`[${H.label}]`).join(" ")),z=Math.max(9,...c.map((I)=>I.length)),G=(I,H)=>I.padEnd(H),U=`${G("Name",S)} ${G("Version",A)} ${G("Providers",z)} ${G("Scope",Q)} ${G("Type",Z)}`;j.push(B()?Y.bold(U):U),j.push(`${"-".repeat(S)} ${"-".repeat(A)} ${"-".repeat(z)} ${"-".repeat(Q)} ${"-".repeat(Z)}`);for(let I=0;I<L.length;I++){let H=L[I],F=G(H.name,S),q=G(H.version,A),V=z-c[I].length,k=X[I]+" ".repeat(Math.max(0,V)),u=G(H.scope,Q),d=G(H.type,Z),n=H.warningCount>0?` ${Y.yellow(`(${H.warningCount} warning${H.warningCount>1?"s":""})`)}`:"";j.push(`${F} ${q} ${k} ${u} ${d}${n}`)}let f=L.length,J=$.length,N=new Set($.map((I)=>I.provider)),E=$.filter((I)=>I.scope==="global").length,M=$.filter((I)=>I.scope==="project").length;j.push("");let R=`${J} skills (${f} unique) across ${N.size} providers | ${E} global, ${M} project`;return j.push(Y.dim(R)),j.join(`
|
|
6
|
+
`)}function J$($,L){if(!B()||!L)return $;let j=$.toLowerCase().indexOf(L.toLowerCase());if(j===-1)return $;let S=$.slice(0,j),A=$.slice(j,j+L.length),Q=$.slice(j+L.length);return`${S}${Y.bold(Y.yellow(A))}${Q}`}function d$($,L){if($.length===0)return`No skills matching "${L}". Try ${Y.bold("asm list")} to see all skills.`;let j=p($),S=[];S.push(Y.dim(`Found ${$.length} result${$.length===1?"":"s"} (${j.length} unique) matching "${L}"`)+`
|
|
7
|
+
`);let A=Math.max(4,...j.map((J)=>J.name.length)),Q=Math.max(7,...j.map((J)=>J.version.length)),Z=j.map((J)=>J.providers.map((N)=>x(N.provider,N.label)).join(" ")),X=j.map((J)=>J.providers.map((N)=>`[${N.label}]`).join(" ")),c=Math.max(9,...X.map((J)=>J.length)),z=7,G=9,U=(J,N)=>J.padEnd(N),f=`${U("Name",A)} ${U("Version",Q)} ${U("Providers",c)} ${U("Scope",z)} ${U("Type",G)}`;S.push(B()?Y.bold(f):f),S.push(`${"-".repeat(A)} ${"-".repeat(Q)} ${"-".repeat(c)} ${"-".repeat(z)} ${"-".repeat(G)}`);for(let J=0;J<j.length;J++){let N=j[J],E=J$(N.name,L),M=A-N.name.length,R=E+" ".repeat(Math.max(0,M)),I=U(N.version,Q),H=c-X[J].length,F=Z[J]+" ".repeat(Math.max(0,H)),q=U(N.scope,z),V=U(N.type,G);S.push(`${R} ${I} ${F} ${q} ${V}`)}return S.join(`
|
|
8
|
+
`)}async function U$($){let L=[],j=(A,Q)=>`${B()?Y.bold(A+":"):A+":"} ${Q}`;if(L.push(j("Name",$.name)),L.push(j("Version",$.version)),L.push(j("Provider",$.providerLabel)),L.push(j("Scope",$.scope)),L.push(j("Location",$.location)),L.push(j("Path",T($.path))),L.push(j("Type",$.isSymlink?"symlink":"directory")),$.isSymlink&&$.symlinkTarget)L.push(j("Symlink Target",$.symlinkTarget));let S=$.fileCount??await P($.path);if(L.push(j("File Count",String(S))),$.description)L.push(""),L.push(j("Description",$.description));if($.warnings&&$.warnings.length>0){L.push(""),L.push(B()?Y.bold("Warnings:"):"Warnings:");for(let A of $.warnings)L.push(` ${B()?Y.yellow("!"):"!"} [${A.category}] ${A.message}`)}return L.join(`
|
|
9
|
+
`)}async function n$($){if($.length===0)return"No skills found.";if($.length===1)return U$($[0]);let L=[],j=(z,G)=>`${B()?Y.bold(z+":"):z+":"} ${G}`,S=$[0],A=S.name;L.push(""),L.push(B()?Y.blueBold(` ${A}`):` ${A}`),L.push(B()?Y.dim(" "+"-".repeat(A.length+2)):" "+"-".repeat(A.length+2)),L.push(""),L.push(j(" Version",B()?Y.green(S.version):S.version));let Q=S.fileCount??await P(S.path);L.push(j(" File Count",String(Q)));let Z=$.map((z)=>x(z.provider,z.providerLabel)).join(" ");if(L.push(j(" Installed in",Z)),S.description){L.push(""),L.push(B()?Y.bold(" Description:"):" Description:");let z=B$(S.description,72);for(let G of z)L.push(" "+G)}L.push("");let X=` Installations (${$.length})`;L.push(B()?Y.bold(X):X);for(let z=0;z<$.length;z++){let G=$[z],U=C(G.provider,G.providerLabel),f=G.isSymlink?B()?Y.yellow("symlink"):"symlink":B()?Y.green("directory"):"directory",J=Y.dim(G.scope);if(L.push(` ${U} (${J}, ${f})`),L.push(` ${Y.dim("Path:")} ${T(G.path)}`),G.isSymlink&&G.symlinkTarget)L.push(` ${Y.dim("Target:")} ${G.symlinkTarget}`)}let c=$.flatMap((z)=>{if(!z.warnings||z.warnings.length===0)return[];return z.warnings.map((G)=>({...G,provider:z.providerLabel}))});if(c.length>0){L.push("");let z=` Warnings (${c.length})`;L.push(B()?Y.bold(z):z);for(let G of c){let U=B()?Y.yellow("!"):"!";L.push(` ${U} [${G.category}] ${G.message}`)}}return L.push(""),L.join(`
|
|
10
|
+
`)}function B$($,L){let j=$.split(/\s+/),S=[],A="";for(let Q of j)if(A.length+Q.length+1>L&&A.length>0)S.push(A),A=Q;else A=A?A+" "+Q:Q;if(A)S.push(A);return S}function a$($){return JSON.stringify($,null,2)}function l$($){let L=[],j=new Set,S=new Map,A=[];for(let c of $){let z=S.get(c.realPath);if(z){if(c.isSymlink)continue;if(z.isSymlink)A[A.indexOf(z)]=c,S.set(c.realPath,c);else A.push(c)}else S.set(c.realPath,c),A.push(c)}let Q=new Map;for(let c of A){let z=Q.get(c.dirName)??[];z.push(c),Q.set(c.dirName,z)}for(let[c,z]of Q)if(new Set(z.map((U)=>U.location)).size>=2){L.push({key:c,reason:"same-dirName",instances:z});for(let U of z)j.add(U.path)}let Z=new Map;for(let c of A){if(!c.name)continue;let z=Z.get(c.name)??[];z.push(c),Z.set(c.name,z)}for(let[c,z]of Z){if(new Set(z.map((J)=>J.dirName)).size<2)continue;let U=z.filter((J)=>!j.has(J.path));if(U.length<2)continue;if(new Set(U.map((J)=>J.dirName)).size<2)continue;L.push({key:c,reason:"same-frontmatterName",instances:U})}L.sort((c,z)=>{if(c.reason!==z.reason)return c.reason==="same-dirName"?-1:1;return c.key.localeCompare(z.key)});let X=L.reduce((c,z)=>c+z.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:$.length,duplicateGroups:L,totalDuplicateInstances:X}}function I$($){return[...$].sort((L,j)=>{if(L.scope!==j.scope)return L.scope==="global"?-1:1;let S=L.providerLabel.localeCompare(j.providerLabel);if(S!==0)return S;return L.path.localeCompare(j.path)})}function f$($){return $==="same-dirName"?"same dirName":"same name"}function s$($){if($.duplicateGroups.length===0)return Y.green("No duplicate skills found.");let L=[];L.push(""),L.push(Y.bold(` Found ${$.duplicateGroups.length} duplicate group(s) (${$.totalDuplicateInstances} total instances):`)),L.push("");for(let j of $.duplicateGroups){L.push(` ${Y.yellow(`"${j.key}"`)} ${Y.dim(`(${f$(j.reason)})`)}`);let S=I$(j.instances);for(let A=0;A<S.length;A++){let Q=S[A],Z=C(Q.provider,Q.providerLabel),X=A===0?Y.green(" [keep]"):Y.dim(" "),c=Y.dim(`(${Q.scope})`);L.push(` ${X} ${Z} ${c} ${Y.dim(T(Q.path))}`)}L.push("")}return L.push(Y.dim(` Run ${Y.bold("asm audit -y")} to auto-remove duplicates`)),L.push(""),L.join(`
|
|
11
|
+
`)}function e$($){return JSON.stringify($,null,2)}import{readFileSync as N$}from"fs";import{resolve as H$,dirname as D$}from"path";import{fileURLToPath as K$}from"url";import{execSync as O$}from"child_process";var T$=D$(K$(import.meta.url)),o="1.8.3";try{let $=N$(H$(T$,"../../package.json"),"utf-8");o=JSON.parse($).version}catch{}var W="3b15958";try{W=O$("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||W}catch{}var _$=o,E$=W,cL=`v${_$} (${E$})`;
|
|
12
|
+
export{v as a,P as b,w$ as c,C$ as d,x$ as e,Y$ as f,t$ as g,g$ as h,m$ as i,Y as j,C as k,T as l,k$ as m,u$ as n,d$ as o,n$ as p,a$ as q,l$ as r,I$ as s,f$ as t,s$ as u,e$ as v,cL as w};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{B as D,E as K}from"./chunk-wdjcav1v.js";import{readdir as h,stat as a,lstat as r,readlink as i,readFile as l,realpath as s}from"fs/promises";import{join as y,resolve as e}from"path";function v($){let L={},j=$.split(`
|
|
2
|
+
`),S=!1,A=!1,Q=null,Z=[],X="none",c=-1;function z(){if(Q){let G=Z.join(" ").trim();if(G)L[Q]=G;Q=null,Z=[],X="none",c=-1}}for(let G of j){if(G.trim()==="---")if(!A){A=!0,S=!0;continue}else{z();break}if(!S)continue;if(X!=="none"&&Q){let f=G.replace(/^\s*/,""),J=G.length-f.length;if(J>0&&f.length>0){if(c===-1)c=J;Z.push(f);continue}else if(f.length===0)continue;else z()}let U=G.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(U){z();let f=U[1],J=U[2];if(J==="|"||J===">")Q=f,Z=[],X=J==="|"?"literal":"folded";else if(J==="|+"||J===">+"||J==="|-"||J===">-")Q=f,Z=[],X=J.startsWith("|")?"literal":"folded";else{let N=J.replace(/^["']|["']$/g,"");if(N)L[f]=N}}}return z(),L}function $$($,L){let j=[];for(let S of $.providers){if(!S.enabled){D(`scan: skipping disabled provider "${S.name}"`);continue}if(L==="global"||L==="both"){let A=K(S.global);D(`scan: adding location ${A} (${S.label}, global)`),j.push({dir:A,location:`global-${S.name}`,scope:"global",providerName:S.name,providerLabel:S.label})}if(L==="project"||L==="both"){let A=K(S.project);D(`scan: adding location ${A} (${S.label}, project)`),j.push({dir:A,location:`project-${S.name}`,scope:"project",providerName:S.name,providerLabel:S.label})}}for(let S of $.customPaths)if(L===S.scope||L==="both"){let A=K(S.path);D(`scan: adding custom location ${A} (${S.label}, ${S.scope})`),j.push({dir:A,location:`${S.scope}-custom`,scope:S.scope,providerName:"custom",providerLabel:S.label})}return j}async function P($){try{return(await h($,{recursive:!0})).length}catch{return 0}}async function L$($){let L=[];D(`scanning: ${$.dir} (${$.location})`);let j;try{j=await h($.dir)}catch{return D(`scanning: ${$.dir} — not found, skipping`),L}for(let S of j){let A=y($.dir,S);try{if(!(await a(A)).isDirectory()){D(` skip: "${S}" — not a directory`);continue}}catch{D(` skip: "${S}" — stat failed`);continue}let Q=y(A,"SKILL.md"),Z;try{Z=await l(Q,"utf-8")}catch{D(` skip: "${S}" — no SKILL.md`);continue}let X=v(Z),c=!1,z=null;try{if((await r(A)).isSymbolicLink())c=!0,z=await i(A)}catch{}let G=e(A),U;try{U=await s(A)}catch{U=G}L.push({name:X.name||S,version:X.version||"0.0.0",description:(X.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:S,path:G,originalPath:A,location:$.location,scope:$.scope,provider:$.providerName,providerLabel:$.providerLabel,isSymlink:c,symlinkTarget:z,realPath:U})}return D(`found ${L.length} skill(s) in ${$.dir}`),L}async function w$($,L){let j=$$($,L);return(await Promise.all(j.map(L$))).flat()}function C$($,L){if(!L.trim())return $;let j=L.toLowerCase();return $.filter((S)=>S.name.toLowerCase().includes(j)||S.description.toLowerCase().includes(j)||S.location.toLowerCase().includes(j)||S.providerLabel.toLowerCase().includes(j))}function S$($,L){let j=$.split("."),S=L.split("."),A=Math.max(j.length,S.length);for(let Q=0;Q<A;Q++){let Z=parseInt(j[Q]??"0",10),X=parseInt(S[Q]??"0",10);if(isNaN(Z)||isNaN(X))return $.localeCompare(L);if(Z!==X)return Z-X}return 0}function x$($,L){let j=[...$];switch(L){case"name":j.sort((S,A)=>S.name.localeCompare(A.name));break;case"version":j.sort((S,A)=>S$(S.version,A.version));break;case"location":j.sort((S,A)=>S.location.localeCompare(A.location));break}return j}import{rm as w,readFile as t,writeFile as j$,access as A$,lstat as c$,symlink as z$}from"fs/promises";import{join as b,resolve as O,dirname as g,relative as G$}from"path";import{homedir as Q$}from"os";var X$=Q$();function Y$($,L){let j={directories:[],ruleFiles:[],agentsBlocks:[]};j.directories.push({path:$.originalPath,isSymlink:$.isSymlink});let S=$.dirName;if($.scope==="project")j.ruleFiles.push(O(".cursor","rules",`${S}.mdc`),O(".windsurf","rules",`${S}.md`),O(".github","instructions",`${S}.instructions.md`)),j.agentsBlocks.push({file:O("AGENTS.md"),skillName:S});if($.scope==="global"){for(let Z of L.providers){if(!Z.enabled)continue;let X=K(Z.global),c=b(g(X),"AGENTS.md");j.agentsBlocks.push({file:c,skillName:S})}let A=b(X$,".codex","AGENTS.md");if(!j.agentsBlocks.some((Z)=>Z.file===A))j.agentsBlocks.push({file:A,skillName:S})}return j}function t$($,L,j){let S=L.filter((c)=>c.dirName===$);if(S.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let A={directories:[],ruleFiles:[],agentsBlocks:[]},Q=new Set,Z=new Set,X=new Set;for(let c of S){let z=Y$(c,j);for(let G of z.directories)if(!Q.has(G.path))Q.add(G.path),A.directories.push(G);for(let G of z.ruleFiles)if(!Z.has(G))Z.add(G),A.ruleFiles.push(G);for(let G of z.agentsBlocks){let U=`${G.file}::${G.skillName}`;if(!X.has(U))X.add(U),A.agentsBlocks.push(G)}}return A}async function _($){try{return await A$($),!0}catch{return!1}}async function Z$($,L){if(!await _($))return;let j=await t($,"utf-8");for(let S of["agent-skill-manager","skill-manager","pskills"]){let A=`<!-- ${S}: ${L} -->`,Q=`<!-- /${S}: ${L} -->`,Z=j.indexOf(A),X=j.indexOf(Q);if(Z===-1||X===-1)continue;let c=Z;if(c>0&&j[c-1]===`
|
|
3
|
+
`)c--;let G=X+Q.length;if(G<j.length&&j[G]===`
|
|
4
|
+
`)G++;j=j.slice(0,c)+j.slice(G)}await j$($,j,"utf-8")}async function g$($,L){let j=[];for(let S of $.directories)try{if(S.isSymlink)await w(S.path),j.push(`Removed symlink: ${S.path}`);else await w(S.path,{recursive:!0,force:!0}),j.push(`Removed directory: ${S.path}`);if(L&&O(S.path)!==O(L)){let A=g(S.path),Q=G$(A,L);await z$(Q,S.path,"dir"),j.push(`Created symlink: ${S.path} -> ${Q}`)}}catch(A){j.push(`Failed to remove ${S.path}: ${A.message}`)}for(let S of $.ruleFiles)if(await _(S))try{await w(S),j.push(`Removed rule file: ${S}`)}catch(A){j.push(`Failed to remove ${S}: ${A.message}`)}for(let S of $.agentsBlocks)try{await Z$(S.file,S.skillName),j.push(`Cleaned AGENTS.md block in: ${S.file}`)}catch(A){j.push(`Failed to clean AGENTS.md block: ${A.message}`)}return j}async function m$($){let L=[];for(let j of $.directories)if(await _(j.path)){let A=(await c$(j.path)).isSymbolicLink()?"symlink":"directory";L.push(`${j.path} (${A})`)}for(let j of $.ruleFiles)if(await _(j))L.push(j);for(let j of $.agentsBlocks)if(await _(j.file)){let S=await t(j.file,"utf-8");if(S.includes(`<!-- agent-skill-manager: ${j.skillName} -->`)||S.includes(`<!-- skill-manager: ${j.skillName} -->`)||S.includes(`<!-- pskills: ${j.skillName} -->`))L.push(`${j.file} (AGENTS.md block)`)}return L}var B=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},Y={bold:($)=>B()?`\x1B[1m${$}\x1B[0m`:$,cyan:($)=>B()?`\x1B[36m${$}\x1B[0m`:$,green:($)=>B()?`\x1B[32m${$}\x1B[0m`:$,yellow:($)=>B()?`\x1B[33m${$}\x1B[0m`:$,dim:($)=>B()?`\x1B[2m${$}\x1B[0m`:$,red:($)=>B()?`\x1B[31m${$}\x1B[0m`:$,blueBold:($)=>B()?`\x1B[1m\x1B[34m${$}\x1B[0m`:$,magenta:($)=>B()?`\x1B[35m${$}\x1B[0m`:$,bgDim:($)=>B()?`\x1B[48;5;236m${$}\x1B[0m`:$,bgRed:($)=>B()?`\x1B[41m\x1B[37m\x1B[1m${$}\x1B[0m`:$,bgYellow:($)=>B()?`\x1B[43m\x1B[30m\x1B[1m${$}\x1B[0m`:$,bgGreen:($)=>B()?`\x1B[42m\x1B[30m\x1B[1m${$}\x1B[0m`:$,bgCyan:($)=>B()?`\x1B[46m\x1B[30m\x1B[1m${$}\x1B[0m`:$};var m={claude:Y.blueBold,codex:Y.cyan,openclaw:Y.yellow,agents:Y.green,custom:Y.magenta};function C($,L){return(m[$]||Y.dim)(L)}function x($,L){if(!B())return`[${L}]`;return(m[$]||Y.dim)(`[${L}]`)}function T($){let L=process.env.HOME||process.env.USERPROFILE||"";if(L&&$.startsWith(L))return"~"+$.slice(L.length);return $}function k$($){if($.length===0)return"No skills found.";let L=["Name","Version","Provider","Scope","Type","Path"],j=$.map((c)=>[c.name,c.version,c.providerLabel,c.scope,c.isSymlink?"symlink":"directory",T(c.path)]),S=L.map((c,z)=>Math.max(c.length,...j.map((G)=>G[z].length))),A=(c,z)=>c.padEnd(z),Q=L.map((c,z)=>A(c,S[z])).join(" "),Z=S.map((c)=>"-".repeat(c)).join("--"),X=j.map((c)=>c.map((z,G)=>A(z,S[G])).join(" "));return[B()?Y.bold(Q):Q,Z,...X].join(`
|
|
5
|
+
`)}function p($){let L=new Map;for(let S of $){let A=`${S.dirName}||${S.scope}`,Q=L.get(A)??[];Q.push(S),L.set(A,Q)}let j=[];for(let[,S]of L){let A=S[0],Q=new Set(S.map((X)=>X.scope)),Z=new Set(S.map((X)=>X.isSymlink?"symlink":"directory"));j.push({name:A.name,version:A.version,providers:S.map((X)=>({provider:X.provider,label:X.providerLabel})),scope:Q.size>1?"mixed":A.scope,type:Z.size>1?"mixed":A.isSymlink?"symlink":"directory",path:T(A.path),warningCount:S.reduce((X,c)=>X+(c.warnings?.length??0),0)})}return j}function u$($){if($.length===0)return"No skills found.";let L=p($),j=[],S=Math.max(4,...L.map((I)=>I.name.length)),A=Math.max(7,...L.map((I)=>I.version.length)),Q=7,Z=9,X=L.map((I)=>I.providers.map((H)=>x(H.provider,H.label)).join(" ")),c=L.map((I)=>I.providers.map((H)=>`[${H.label}]`).join(" ")),z=Math.max(9,...c.map((I)=>I.length)),G=(I,H)=>I.padEnd(H),U=`${G("Name",S)} ${G("Version",A)} ${G("Providers",z)} ${G("Scope",Q)} ${G("Type",Z)}`;j.push(B()?Y.bold(U):U),j.push(`${"-".repeat(S)} ${"-".repeat(A)} ${"-".repeat(z)} ${"-".repeat(Q)} ${"-".repeat(Z)}`);for(let I=0;I<L.length;I++){let H=L[I],F=G(H.name,S),q=G(H.version,A),V=z-c[I].length,k=X[I]+" ".repeat(Math.max(0,V)),u=G(H.scope,Q),d=G(H.type,Z),n=H.warningCount>0?` ${Y.yellow(`(${H.warningCount} warning${H.warningCount>1?"s":""})`)}`:"";j.push(`${F} ${q} ${k} ${u} ${d}${n}`)}let f=L.length,J=$.length,N=new Set($.map((I)=>I.provider)),E=$.filter((I)=>I.scope==="global").length,M=$.filter((I)=>I.scope==="project").length;j.push("");let R=`${J} skills (${f} unique) across ${N.size} providers | ${E} global, ${M} project`;return j.push(Y.dim(R)),j.join(`
|
|
6
|
+
`)}function J$($,L){if(!B()||!L)return $;let j=$.toLowerCase().indexOf(L.toLowerCase());if(j===-1)return $;let S=$.slice(0,j),A=$.slice(j,j+L.length),Q=$.slice(j+L.length);return`${S}${Y.bold(Y.yellow(A))}${Q}`}function d$($,L){if($.length===0)return`No skills matching "${L}". Try ${Y.bold("asm list")} to see all skills.`;let j=p($),S=[];S.push(Y.dim(`Found ${$.length} result${$.length===1?"":"s"} (${j.length} unique) matching "${L}"`)+`
|
|
7
|
+
`);let A=Math.max(4,...j.map((J)=>J.name.length)),Q=Math.max(7,...j.map((J)=>J.version.length)),Z=j.map((J)=>J.providers.map((N)=>x(N.provider,N.label)).join(" ")),X=j.map((J)=>J.providers.map((N)=>`[${N.label}]`).join(" ")),c=Math.max(9,...X.map((J)=>J.length)),z=7,G=9,U=(J,N)=>J.padEnd(N),f=`${U("Name",A)} ${U("Version",Q)} ${U("Providers",c)} ${U("Scope",z)} ${U("Type",G)}`;S.push(B()?Y.bold(f):f),S.push(`${"-".repeat(A)} ${"-".repeat(Q)} ${"-".repeat(c)} ${"-".repeat(z)} ${"-".repeat(G)}`);for(let J=0;J<j.length;J++){let N=j[J],E=J$(N.name,L),M=A-N.name.length,R=E+" ".repeat(Math.max(0,M)),I=U(N.version,Q),H=c-X[J].length,F=Z[J]+" ".repeat(Math.max(0,H)),q=U(N.scope,z),V=U(N.type,G);S.push(`${R} ${I} ${F} ${q} ${V}`)}return S.join(`
|
|
8
|
+
`)}async function U$($){let L=[],j=(A,Q)=>`${B()?Y.bold(A+":"):A+":"} ${Q}`;if(L.push(j("Name",$.name)),L.push(j("Version",$.version)),L.push(j("Provider",$.providerLabel)),L.push(j("Scope",$.scope)),L.push(j("Location",$.location)),L.push(j("Path",T($.path))),L.push(j("Type",$.isSymlink?"symlink":"directory")),$.isSymlink&&$.symlinkTarget)L.push(j("Symlink Target",$.symlinkTarget));let S=$.fileCount??await P($.path);if(L.push(j("File Count",String(S))),$.description)L.push(""),L.push(j("Description",$.description));if($.warnings&&$.warnings.length>0){L.push(""),L.push(B()?Y.bold("Warnings:"):"Warnings:");for(let A of $.warnings)L.push(` ${B()?Y.yellow("!"):"!"} [${A.category}] ${A.message}`)}return L.join(`
|
|
9
|
+
`)}async function n$($){if($.length===0)return"No skills found.";if($.length===1)return U$($[0]);let L=[],j=(z,G)=>`${B()?Y.bold(z+":"):z+":"} ${G}`,S=$[0],A=S.name;L.push(""),L.push(B()?Y.blueBold(` ${A}`):` ${A}`),L.push(B()?Y.dim(" "+"-".repeat(A.length+2)):" "+"-".repeat(A.length+2)),L.push(""),L.push(j(" Version",B()?Y.green(S.version):S.version));let Q=S.fileCount??await P(S.path);L.push(j(" File Count",String(Q)));let Z=$.map((z)=>x(z.provider,z.providerLabel)).join(" ");if(L.push(j(" Installed in",Z)),S.description){L.push(""),L.push(B()?Y.bold(" Description:"):" Description:");let z=B$(S.description,72);for(let G of z)L.push(" "+G)}L.push("");let X=` Installations (${$.length})`;L.push(B()?Y.bold(X):X);for(let z=0;z<$.length;z++){let G=$[z],U=C(G.provider,G.providerLabel),f=G.isSymlink?B()?Y.yellow("symlink"):"symlink":B()?Y.green("directory"):"directory",J=Y.dim(G.scope);if(L.push(` ${U} (${J}, ${f})`),L.push(` ${Y.dim("Path:")} ${T(G.path)}`),G.isSymlink&&G.symlinkTarget)L.push(` ${Y.dim("Target:")} ${G.symlinkTarget}`)}let c=$.flatMap((z)=>{if(!z.warnings||z.warnings.length===0)return[];return z.warnings.map((G)=>({...G,provider:z.providerLabel}))});if(c.length>0){L.push("");let z=` Warnings (${c.length})`;L.push(B()?Y.bold(z):z);for(let G of c){let U=B()?Y.yellow("!"):"!";L.push(` ${U} [${G.category}] ${G.message}`)}}return L.push(""),L.join(`
|
|
10
|
+
`)}function B$($,L){let j=$.split(/\s+/),S=[],A="";for(let Q of j)if(A.length+Q.length+1>L&&A.length>0)S.push(A),A=Q;else A=A?A+" "+Q:Q;if(A)S.push(A);return S}function a$($){return JSON.stringify($,null,2)}function l$($){let L=[],j=new Set,S=new Map,A=[];for(let c of $){let z=S.get(c.realPath);if(z){if(c.isSymlink)continue;if(z.isSymlink)A[A.indexOf(z)]=c,S.set(c.realPath,c);else A.push(c)}else S.set(c.realPath,c),A.push(c)}let Q=new Map;for(let c of A){let z=Q.get(c.dirName)??[];z.push(c),Q.set(c.dirName,z)}for(let[c,z]of Q)if(new Set(z.map((U)=>U.location)).size>=2){L.push({key:c,reason:"same-dirName",instances:z});for(let U of z)j.add(U.path)}let Z=new Map;for(let c of A){if(!c.name)continue;let z=Z.get(c.name)??[];z.push(c),Z.set(c.name,z)}for(let[c,z]of Z){if(new Set(z.map((J)=>J.dirName)).size<2)continue;let U=z.filter((J)=>!j.has(J.path));if(U.length<2)continue;if(new Set(U.map((J)=>J.dirName)).size<2)continue;L.push({key:c,reason:"same-frontmatterName",instances:U})}L.sort((c,z)=>{if(c.reason!==z.reason)return c.reason==="same-dirName"?-1:1;return c.key.localeCompare(z.key)});let X=L.reduce((c,z)=>c+z.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:$.length,duplicateGroups:L,totalDuplicateInstances:X}}function I$($){return[...$].sort((L,j)=>{if(L.scope!==j.scope)return L.scope==="global"?-1:1;let S=L.providerLabel.localeCompare(j.providerLabel);if(S!==0)return S;return L.path.localeCompare(j.path)})}function f$($){return $==="same-dirName"?"same dirName":"same name"}function s$($){if($.duplicateGroups.length===0)return Y.green("No duplicate skills found.");let L=[];L.push(""),L.push(Y.bold(` Found ${$.duplicateGroups.length} duplicate group(s) (${$.totalDuplicateInstances} total instances):`)),L.push("");for(let j of $.duplicateGroups){L.push(` ${Y.yellow(`"${j.key}"`)} ${Y.dim(`(${f$(j.reason)})`)}`);let S=I$(j.instances);for(let A=0;A<S.length;A++){let Q=S[A],Z=C(Q.provider,Q.providerLabel),X=A===0?Y.green(" [keep]"):Y.dim(" "),c=Y.dim(`(${Q.scope})`);L.push(` ${X} ${Z} ${c} ${Y.dim(T(Q.path))}`)}L.push("")}return L.push(Y.dim(` Run ${Y.bold("asm audit -y")} to auto-remove duplicates`)),L.push(""),L.join(`
|
|
11
|
+
`)}function e$($){return JSON.stringify($,null,2)}import{readFileSync as N$}from"fs";import{resolve as H$,dirname as D$}from"path";import{fileURLToPath as K$}from"url";import{execSync as O$}from"child_process";var T$=D$(K$(import.meta.url)),o="1.8.3";try{let $=N$(H$(T$,"../../package.json"),"utf-8");o=JSON.parse($).version}catch{}var W="bfac6f0";try{W=O$("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||W}catch{}var _$=o,E$=W,cL=`v${_$} (${E$})`;
|
|
12
|
+
export{v as a,P as b,w$ as c,C$ as d,x$ as e,Y$ as f,t$ as g,g$ as h,m$ as i,Y as j,C as k,T as l,k$ as m,u$ as n,d$ as o,n$ as p,a$ as q,l$ as r,I$ as s,f$ as t,s$ as u,e$ as v,cL as w};
|