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