agent-skill-manager 1.5.0 → 1.6.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.
- package/dist/agent-skill-manager.js +156 -88
- package/dist/chunk-4kqabmv7.js +9 -0
- package/dist/chunk-95dyppsz.js +8 -0
- package/dist/chunk-9pkjdwkv.js +90 -0
- package/dist/chunk-ajgr5x1f.js +8 -0
- package/dist/chunk-d474xtc4.js +90 -0
- package/dist/chunk-esvwvw47.js +12 -0
- package/dist/chunk-k7hzkvr5.js +12 -0
- package/dist/chunk-kv6faz1t.js +8 -0
- package/dist/chunk-menf8e4q.js +90 -0
- package/dist/chunk-npfpnsn4.js +90 -0
- package/dist/chunk-nyqzfjgs.js +12 -0
- package/dist/chunk-s1n7e69d.js +90 -0
- package/dist/chunk-t7727aqn.js +3 -0
- package/dist/chunk-v02nhegz.js +90 -0
- package/dist/chunk-xrprkm42.js +90 -0
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{A as D,D as H}from"./chunk-t7727aqn.js";import{readdir as h,stat as n,lstat as a,readlink as r,readFile as i,realpath as l}from"fs/promises";import{join as v,resolve as s}from"path";function W($){let L={},S=$.split(`
|
|
2
|
+
`),j=!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 S){if(G.trim()==="---")if(!A){A=!0,j=!0;continue}else{z();break}if(!j)continue;if(X!=="none"&&Q){let T=G.replace(/^\s*/,""),J=G.length-T.length;if(J>0&&T.length>0){if(c===-1)c=J;Z.push(T);continue}else if(T.length===0)continue;else z()}let U=G.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(U){z();let T=U[1],J=U[2];if(J==="|"||J===">")Q=T,Z=[],X=J==="|"?"literal":"folded";else if(J==="|+"||J===">+"||J==="|-"||J===">-")Q=T,Z=[],X=J.startsWith("|")?"literal":"folded";else{let f=J.replace(/^["']|["']$/g,"");if(f)L[T]=f}}}return z(),L}function e($,L){let S=[];for(let j of $.providers){if(!j.enabled){D(`scan: skipping disabled provider "${j.name}"`);continue}if(L==="global"||L==="both"){let A=H(j.global);D(`scan: adding location ${A} (${j.label}, global)`),S.push({dir:A,location:`global-${j.name}`,scope:"global",providerName:j.name,providerLabel:j.label})}if(L==="project"||L==="both"){let A=H(j.project);D(`scan: adding location ${A} (${j.label}, project)`),S.push({dir:A,location:`project-${j.name}`,scope:"project",providerName:j.name,providerLabel:j.label})}}for(let j of $.customPaths)if(L===j.scope||L==="both"){let A=H(j.path);D(`scan: adding custom location ${A} (${j.label}, ${j.scope})`),S.push({dir:A,location:`${j.scope}-custom`,scope:j.scope,providerName:"custom",providerLabel:j.label})}return S}async function P($){try{return(await h($,{recursive:!0})).length}catch{return 0}}async function $$($){let L=[];D(`scanning: ${$.dir} (${$.location})`);let S;try{S=await h($.dir)}catch{return D(`scanning: ${$.dir} — not found, skipping`),L}for(let j of S){let A=v($.dir,j);try{if(!(await n(A)).isDirectory()){D(` skip: "${j}" — not a directory`);continue}}catch{D(` skip: "${j}" — stat failed`);continue}let Q=v(A,"SKILL.md"),Z;try{Z=await i(Q,"utf-8")}catch{D(` skip: "${j}" — no SKILL.md`);continue}let X=W(Z),c=!1,z=null;try{if((await a(A)).isSymbolicLink())c=!0,z=await r(A)}catch{}let G=s(A),U;try{U=await l(A)}catch{U=G}L.push({name:X.name||j,version:X.version||"0.0.0",description:(X.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:j,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 V$($,L){let S=e($,L);return(await Promise.all(S.map($$))).flat()}function P$($,L){if(!L.trim())return $;let S=L.toLowerCase();return $.filter((j)=>j.name.toLowerCase().includes(S)||j.description.toLowerCase().includes(S)||j.location.toLowerCase().includes(S)||j.providerLabel.toLowerCase().includes(S))}function L$($,L){let S=$.split("."),j=L.split("."),A=Math.max(S.length,j.length);for(let Q=0;Q<A;Q++){let Z=parseInt(S[Q]??"0",10),X=parseInt(j[Q]??"0",10);if(isNaN(Z)||isNaN(X))return $.localeCompare(L);if(Z!==X)return Z-X}return 0}function C$($,L){let S=[...$];switch(L){case"name":S.sort((j,A)=>j.name.localeCompare(A.name));break;case"version":S.sort((j,A)=>L$(j.version,A.version));break;case"location":S.sort((j,A)=>j.location.localeCompare(A.location));break}return S}import{rm as C,readFile as t,writeFile as S$,access as j$,lstat as A$}from"fs/promises";import{join as b,resolve as _,dirname as c$}from"path";import{homedir as z$}from"os";var G$=z$();function Q$($,L){let S={directories:[],ruleFiles:[],agentsBlocks:[]};S.directories.push({path:$.originalPath,isSymlink:$.isSymlink});let j=$.dirName;if($.scope==="project")S.ruleFiles.push(_(".cursor","rules",`${j}.mdc`),_(".windsurf","rules",`${j}.md`),_(".github","instructions",`${j}.instructions.md`)),S.agentsBlocks.push({file:_("AGENTS.md"),skillName:j});if($.scope==="global"){for(let Z of L.providers){if(!Z.enabled)continue;let X=H(Z.global),c=b(c$(X),"AGENTS.md");S.agentsBlocks.push({file:c,skillName:j})}let A=b(G$,".codex","AGENTS.md");if(!S.agentsBlocks.some((Z)=>Z.file===A))S.agentsBlocks.push({file:A,skillName:j})}return S}function h$($,L,S){let j=L.filter((c)=>c.dirName===$);if(j.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let A={directories:[],ruleFiles:[],agentsBlocks:[]},Q=new Set,Z=new Set,X=new Set;for(let c of j){let z=Q$(c,S);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 O($){try{return await j$($),!0}catch{return!1}}async function X$($,L){if(!await O($))return;let S=await t($,"utf-8");for(let j of["agent-skill-manager","skill-manager","pskills"]){let A=`<!-- ${j}: ${L} -->`,Q=`<!-- /${j}: ${L} -->`,Z=S.indexOf(A),X=S.indexOf(Q);if(Z===-1||X===-1)continue;let c=Z;if(c>0&&S[c-1]===`
|
|
3
|
+
`)c--;let G=X+Q.length;if(G<S.length&&S[G]===`
|
|
4
|
+
`)G++;S=S.slice(0,c)+S.slice(G)}await S$($,S,"utf-8")}async function b$($){let L=[];for(let S of $.directories)try{if(S.isSymlink)await C(S.path),L.push(`Removed symlink: ${S.path}`);else await C(S.path,{recursive:!0,force:!0}),L.push(`Removed directory: ${S.path}`)}catch(j){L.push(`Failed to remove ${S.path}: ${j.message}`)}for(let S of $.ruleFiles)if(await O(S))try{await C(S),L.push(`Removed rule file: ${S}`)}catch(j){L.push(`Failed to remove ${S}: ${j.message}`)}for(let S of $.agentsBlocks)try{await X$(S.file,S.skillName),L.push(`Cleaned AGENTS.md block in: ${S.file}`)}catch(j){L.push(`Failed to clean AGENTS.md block: ${j.message}`)}return L}async function t$($){let L=[];for(let S of $.directories)if(await O(S.path)){let A=(await A$(S.path)).isSymbolicLink()?"symlink":"directory";L.push(`${S.path} (${A})`)}for(let S of $.ruleFiles)if(await O(S))L.push(S);for(let S of $.agentsBlocks)if(await O(S.file)){let j=await t(S.file,"utf-8");if(j.includes(`<!-- agent-skill-manager: ${S.skillName} -->`)||j.includes(`<!-- skill-manager: ${S.skillName} -->`)||j.includes(`<!-- pskills: ${S.skillName} -->`))L.push(`${S.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`:$};var m={claude:Y.blueBold,codex:Y.cyan,openclaw:Y.yellow,agents:Y.green,custom:Y.magenta};function w($,L){return(m[$]||Y.dim)(L)}function y($,L){if(!B())return`[${L}]`;return(m[$]||Y.dim)(`[${L}]`)}function K($){let L=process.env.HOME||process.env.USERPROFILE||"";if(L&&$.startsWith(L))return"~"+$.slice(L.length);return $}function o$($){if($.length===0)return"No skills found.";let L=["Name","Version","Provider","Scope","Type","Path"],S=$.map((c)=>[c.name,c.version,c.providerLabel,c.scope,c.isSymlink?"symlink":"directory",K(c.path)]),j=L.map((c,z)=>Math.max(c.length,...S.map((G)=>G[z].length))),A=(c,z)=>c.padEnd(z),Q=L.map((c,z)=>A(c,j[z])).join(" "),Z=j.map((c)=>"-".repeat(c)).join("--"),X=S.map((c)=>c.map((z,G)=>A(z,j[G])).join(" "));return[B()?Y.bold(Q):Q,Z,...X].join(`
|
|
5
|
+
`)}function g($){let L=new Map;for(let j of $){let A=`${j.dirName}||${j.scope}`,Q=L.get(A)??[];Q.push(j),L.set(A,Q)}let S=[];for(let[,j]of L){let A=j[0],Q=new Set(j.map((X)=>X.scope)),Z=new Set(j.map((X)=>X.isSymlink?"symlink":"directory"));S.push({name:A.name,version:A.version,providers:j.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:K(A.path),warningCount:j.reduce((X,c)=>X+(c.warnings?.length??0),0)})}return S}function p$($){if($.length===0)return"No skills found.";let L=g($),S=[],j=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((N)=>y(N.provider,N.label)).join(" ")),c=L.map((I)=>I.providers.map((N)=>`[${N.label}]`).join(" ")),z=Math.max(9,...c.map((I)=>I.length)),G=(I,N)=>I.padEnd(N),U=`${G("Name",j)} ${G("Version",A)} ${G("Providers",z)} ${G("Scope",Q)} ${G("Type",Z)}`;S.push(B()?Y.bold(U):U),S.push(`${"-".repeat(j)} ${"-".repeat(A)} ${"-".repeat(z)} ${"-".repeat(Q)} ${"-".repeat(Z)}`);for(let I=0;I<L.length;I++){let N=L[I],F=G(N.name,j),q=G(N.version,A),V=z-c[I].length,p=X[I]+" ".repeat(Math.max(0,V)),k=G(N.scope,Q),u=G(N.type,Z),d=N.warningCount>0?` ${Y.yellow(`(${N.warningCount} warning${N.warningCount>1?"s":""})`)}`:"";S.push(`${F} ${q} ${p} ${k} ${u}${d}`)}let T=L.length,J=$.length,f=new Set($.map((I)=>I.provider)),E=$.filter((I)=>I.scope==="global").length,M=$.filter((I)=>I.scope==="project").length;S.push("");let R=`${J} skills (${T} unique) across ${f.size} providers | ${E} global, ${M} project`;return S.push(Y.dim(R)),S.join(`
|
|
6
|
+
`)}function Y$($,L){if(!B()||!L)return $;let S=$.toLowerCase().indexOf(L.toLowerCase());if(S===-1)return $;let j=$.slice(0,S),A=$.slice(S,S+L.length),Q=$.slice(S+L.length);return`${j}${Y.bold(Y.yellow(A))}${Q}`}function k$($,L){if($.length===0)return`No skills matching "${L}". Try ${Y.bold("asm list")} to see all skills.`;let S=g($),j=[];j.push(Y.dim(`Found ${$.length} result${$.length===1?"":"s"} (${S.length} unique) matching "${L}"`)+`
|
|
7
|
+
`);let A=Math.max(4,...S.map((J)=>J.name.length)),Q=Math.max(7,...S.map((J)=>J.version.length)),Z=S.map((J)=>J.providers.map((f)=>y(f.provider,f.label)).join(" ")),X=S.map((J)=>J.providers.map((f)=>`[${f.label}]`).join(" ")),c=Math.max(9,...X.map((J)=>J.length)),z=7,G=9,U=(J,f)=>J.padEnd(f),T=`${U("Name",A)} ${U("Version",Q)} ${U("Providers",c)} ${U("Scope",z)} ${U("Type",G)}`;j.push(B()?Y.bold(T):T),j.push(`${"-".repeat(A)} ${"-".repeat(Q)} ${"-".repeat(c)} ${"-".repeat(z)} ${"-".repeat(G)}`);for(let J=0;J<S.length;J++){let f=S[J],E=Y$(f.name,L),M=A-f.name.length,R=E+" ".repeat(Math.max(0,M)),I=U(f.version,Q),N=c-X[J].length,F=Z[J]+" ".repeat(Math.max(0,N)),q=U(f.scope,z),V=U(f.type,G);j.push(`${R} ${I} ${F} ${q} ${V}`)}return j.join(`
|
|
8
|
+
`)}async function Z$($){let L=[],S=(A,Q)=>`${B()?Y.bold(A+":"):A+":"} ${Q}`;if(L.push(S("Name",$.name)),L.push(S("Version",$.version)),L.push(S("Provider",$.providerLabel)),L.push(S("Scope",$.scope)),L.push(S("Location",$.location)),L.push(S("Path",K($.path))),L.push(S("Type",$.isSymlink?"symlink":"directory")),$.isSymlink&&$.symlinkTarget)L.push(S("Symlink Target",$.symlinkTarget));let j=$.fileCount??await P($.path);if(L.push(S("File Count",String(j))),$.description)L.push(""),L.push(S("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 u$($){if($.length===0)return"No skills found.";if($.length===1)return Z$($[0]);let L=[],S=(z,G)=>`${B()?Y.bold(z+":"):z+":"} ${G}`,j=$[0],A=j.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(S(" Version",B()?Y.green(j.version):j.version));let Q=j.fileCount??await P(j.path);L.push(S(" File Count",String(Q)));let Z=$.map((z)=>y(z.provider,z.providerLabel)).join(" ");if(L.push(S(" Installed in",Z)),j.description){L.push(""),L.push(B()?Y.bold(" Description:"):" Description:");let z=J$(j.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=w(G.provider,G.providerLabel),T=G.isSymlink?B()?Y.yellow("symlink"):"symlink":B()?Y.green("directory"):"directory",J=Y.dim(G.scope);if(L.push(` ${U} (${J}, ${T})`),L.push(` ${Y.dim("Path:")} ${K(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 J$($,L){let S=$.split(/\s+/),j=[],A="";for(let Q of S)if(A.length+Q.length+1>L&&A.length>0)j.push(A),A=Q;else A=A?A+" "+Q:Q;if(A)j.push(A);return j}function d$($){return JSON.stringify($,null,2)}function r$($){let L=[],S=new Set,j=new Map,A=[];for(let c of $){let z=j.get(c.realPath);if(z){if(c.isSymlink)continue;if(z.isSymlink)A[A.indexOf(z)]=c,j.set(c.realPath,c);else A.push(c)}else j.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)S.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)=>!S.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 U$($){return[...$].sort((L,S)=>{if(L.scope!==S.scope)return L.scope==="global"?-1:1;let j=L.providerLabel.localeCompare(S.providerLabel);if(j!==0)return j;return L.path.localeCompare(S.path)})}function B$($){return $==="same-dirName"?"same dirName":"same name"}function i$($){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 S of $.duplicateGroups){L.push(` ${Y.yellow(`"${S.key}"`)} ${Y.dim(`(${B$(S.reason)})`)}`);let j=U$(S.instances);for(let A=0;A<j.length;A++){let Q=j[A],Z=w(Q.provider,Q.providerLabel),X=A===0?Y.green(" [keep]"):Y.dim(" "),c=Y.dim(`(${Q.scope})`);L.push(` ${X} ${Z} ${c} ${Y.dim(K(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 l$($){return JSON.stringify($,null,2)}import{readFileSync as I$}from"fs";import{resolve as T$,dirname as f$}from"path";import{fileURLToPath as N$}from"url";import{execSync as D$}from"child_process";var H$=f$(N$(import.meta.url)),o="1.6.0";try{let $=I$(T$(H$,"../../package.json"),"utf-8");o=JSON.parse($).version}catch{}var x="fc9de06";try{x=D$("git rev-parse --short HEAD",{encoding:"utf-8"}).trim()||x}catch{}var K$=o,O$=x,jL=`v${K$} (${O$})`;
|
|
12
|
+
export{W as a,P as b,V$ as c,P$ as d,C$ as e,Q$ as f,h$ as g,b$ as h,t$ as i,Y as j,w as k,K as l,o$ as m,p$ as n,k$ as o,u$ as p,d$ as q,r$ as r,U$ as s,B$ as t,i$ as u,l$ as v,jL as w};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{A as D,D as H}from"./chunk-t7727aqn.js";import{readdir as h,stat as n,lstat as a,readlink as r,readFile as i,realpath as l}from"fs/promises";import{join as v,resolve as s}from"path";function W($){let L={},S=$.split(`
|
|
2
|
+
`),j=!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 S){if(G.trim()==="---")if(!A){A=!0,j=!0;continue}else{z();break}if(!j)continue;if(X!=="none"&&Q){let T=G.replace(/^\s*/,""),J=G.length-T.length;if(J>0&&T.length>0){if(c===-1)c=J;Z.push(T);continue}else if(T.length===0)continue;else z()}let U=G.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(U){z();let T=U[1],J=U[2];if(J==="|"||J===">")Q=T,Z=[],X=J==="|"?"literal":"folded";else if(J==="|+"||J===">+"||J==="|-"||J===">-")Q=T,Z=[],X=J.startsWith("|")?"literal":"folded";else{let f=J.replace(/^["']|["']$/g,"");if(f)L[T]=f}}}return z(),L}function e($,L){let S=[];for(let j of $.providers){if(!j.enabled){D(`scan: skipping disabled provider "${j.name}"`);continue}if(L==="global"||L==="both"){let A=H(j.global);D(`scan: adding location ${A} (${j.label}, global)`),S.push({dir:A,location:`global-${j.name}`,scope:"global",providerName:j.name,providerLabel:j.label})}if(L==="project"||L==="both"){let A=H(j.project);D(`scan: adding location ${A} (${j.label}, project)`),S.push({dir:A,location:`project-${j.name}`,scope:"project",providerName:j.name,providerLabel:j.label})}}for(let j of $.customPaths)if(L===j.scope||L==="both"){let A=H(j.path);D(`scan: adding custom location ${A} (${j.label}, ${j.scope})`),S.push({dir:A,location:`${j.scope}-custom`,scope:j.scope,providerName:"custom",providerLabel:j.label})}return S}async function P($){try{return(await h($,{recursive:!0})).length}catch{return 0}}async function $$($){let L=[];D(`scanning: ${$.dir} (${$.location})`);let S;try{S=await h($.dir)}catch{return D(`scanning: ${$.dir} — not found, skipping`),L}for(let j of S){let A=v($.dir,j);try{if(!(await n(A)).isDirectory()){D(` skip: "${j}" — not a directory`);continue}}catch{D(` skip: "${j}" — stat failed`);continue}let Q=v(A,"SKILL.md"),Z;try{Z=await i(Q,"utf-8")}catch{D(` skip: "${j}" — no SKILL.md`);continue}let X=W(Z),c=!1,z=null;try{if((await a(A)).isSymbolicLink())c=!0,z=await r(A)}catch{}let G=s(A),U;try{U=await l(A)}catch{U=G}L.push({name:X.name||j,version:X.version||"0.0.0",description:(X.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:j,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 V$($,L){let S=e($,L);return(await Promise.all(S.map($$))).flat()}function P$($,L){if(!L.trim())return $;let S=L.toLowerCase();return $.filter((j)=>j.name.toLowerCase().includes(S)||j.description.toLowerCase().includes(S)||j.location.toLowerCase().includes(S)||j.providerLabel.toLowerCase().includes(S))}function L$($,L){let S=$.split("."),j=L.split("."),A=Math.max(S.length,j.length);for(let Q=0;Q<A;Q++){let Z=parseInt(S[Q]??"0",10),X=parseInt(j[Q]??"0",10);if(isNaN(Z)||isNaN(X))return $.localeCompare(L);if(Z!==X)return Z-X}return 0}function C$($,L){let S=[...$];switch(L){case"name":S.sort((j,A)=>j.name.localeCompare(A.name));break;case"version":S.sort((j,A)=>L$(j.version,A.version));break;case"location":S.sort((j,A)=>j.location.localeCompare(A.location));break}return S}import{rm as C,readFile as t,writeFile as S$,access as j$,lstat as A$}from"fs/promises";import{join as b,resolve as _,dirname as c$}from"path";import{homedir as z$}from"os";var G$=z$();function Q$($,L){let S={directories:[],ruleFiles:[],agentsBlocks:[]};S.directories.push({path:$.originalPath,isSymlink:$.isSymlink});let j=$.dirName;if($.scope==="project")S.ruleFiles.push(_(".cursor","rules",`${j}.mdc`),_(".windsurf","rules",`${j}.md`),_(".github","instructions",`${j}.instructions.md`)),S.agentsBlocks.push({file:_("AGENTS.md"),skillName:j});if($.scope==="global"){for(let Z of L.providers){if(!Z.enabled)continue;let X=H(Z.global),c=b(c$(X),"AGENTS.md");S.agentsBlocks.push({file:c,skillName:j})}let A=b(G$,".codex","AGENTS.md");if(!S.agentsBlocks.some((Z)=>Z.file===A))S.agentsBlocks.push({file:A,skillName:j})}return S}function h$($,L,S){let j=L.filter((c)=>c.dirName===$);if(j.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let A={directories:[],ruleFiles:[],agentsBlocks:[]},Q=new Set,Z=new Set,X=new Set;for(let c of j){let z=Q$(c,S);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 O($){try{return await j$($),!0}catch{return!1}}async function X$($,L){if(!await O($))return;let S=await t($,"utf-8");for(let j of["agent-skill-manager","skill-manager","pskills"]){let A=`<!-- ${j}: ${L} -->`,Q=`<!-- /${j}: ${L} -->`,Z=S.indexOf(A),X=S.indexOf(Q);if(Z===-1||X===-1)continue;let c=Z;if(c>0&&S[c-1]===`
|
|
3
|
+
`)c--;let G=X+Q.length;if(G<S.length&&S[G]===`
|
|
4
|
+
`)G++;S=S.slice(0,c)+S.slice(G)}await S$($,S,"utf-8")}async function b$($){let L=[];for(let S of $.directories)try{if(S.isSymlink)await C(S.path),L.push(`Removed symlink: ${S.path}`);else await C(S.path,{recursive:!0,force:!0}),L.push(`Removed directory: ${S.path}`)}catch(j){L.push(`Failed to remove ${S.path}: ${j.message}`)}for(let S of $.ruleFiles)if(await O(S))try{await C(S),L.push(`Removed rule file: ${S}`)}catch(j){L.push(`Failed to remove ${S}: ${j.message}`)}for(let S of $.agentsBlocks)try{await X$(S.file,S.skillName),L.push(`Cleaned AGENTS.md block in: ${S.file}`)}catch(j){L.push(`Failed to clean AGENTS.md block: ${j.message}`)}return L}async function t$($){let L=[];for(let S of $.directories)if(await O(S.path)){let A=(await A$(S.path)).isSymbolicLink()?"symlink":"directory";L.push(`${S.path} (${A})`)}for(let S of $.ruleFiles)if(await O(S))L.push(S);for(let S of $.agentsBlocks)if(await O(S.file)){let j=await t(S.file,"utf-8");if(j.includes(`<!-- agent-skill-manager: ${S.skillName} -->`)||j.includes(`<!-- skill-manager: ${S.skillName} -->`)||j.includes(`<!-- pskills: ${S.skillName} -->`))L.push(`${S.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`:$};var m={claude:Y.blueBold,codex:Y.cyan,openclaw:Y.yellow,agents:Y.green,custom:Y.magenta};function w($,L){return(m[$]||Y.dim)(L)}function y($,L){if(!B())return`[${L}]`;return(m[$]||Y.dim)(`[${L}]`)}function K($){let L=process.env.HOME||process.env.USERPROFILE||"";if(L&&$.startsWith(L))return"~"+$.slice(L.length);return $}function o$($){if($.length===0)return"No skills found.";let L=["Name","Version","Provider","Scope","Type","Path"],S=$.map((c)=>[c.name,c.version,c.providerLabel,c.scope,c.isSymlink?"symlink":"directory",K(c.path)]),j=L.map((c,z)=>Math.max(c.length,...S.map((G)=>G[z].length))),A=(c,z)=>c.padEnd(z),Q=L.map((c,z)=>A(c,j[z])).join(" "),Z=j.map((c)=>"-".repeat(c)).join("--"),X=S.map((c)=>c.map((z,G)=>A(z,j[G])).join(" "));return[B()?Y.bold(Q):Q,Z,...X].join(`
|
|
5
|
+
`)}function g($){let L=new Map;for(let j of $){let A=`${j.dirName}||${j.scope}`,Q=L.get(A)??[];Q.push(j),L.set(A,Q)}let S=[];for(let[,j]of L){let A=j[0],Q=new Set(j.map((X)=>X.scope)),Z=new Set(j.map((X)=>X.isSymlink?"symlink":"directory"));S.push({name:A.name,version:A.version,providers:j.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:K(A.path),warningCount:j.reduce((X,c)=>X+(c.warnings?.length??0),0)})}return S}function p$($){if($.length===0)return"No skills found.";let L=g($),S=[],j=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((N)=>y(N.provider,N.label)).join(" ")),c=L.map((I)=>I.providers.map((N)=>`[${N.label}]`).join(" ")),z=Math.max(9,...c.map((I)=>I.length)),G=(I,N)=>I.padEnd(N),U=`${G("Name",j)} ${G("Version",A)} ${G("Providers",z)} ${G("Scope",Q)} ${G("Type",Z)}`;S.push(B()?Y.bold(U):U),S.push(`${"-".repeat(j)} ${"-".repeat(A)} ${"-".repeat(z)} ${"-".repeat(Q)} ${"-".repeat(Z)}`);for(let I=0;I<L.length;I++){let N=L[I],F=G(N.name,j),q=G(N.version,A),V=z-c[I].length,p=X[I]+" ".repeat(Math.max(0,V)),k=G(N.scope,Q),u=G(N.type,Z),d=N.warningCount>0?` ${Y.yellow(`(${N.warningCount} warning${N.warningCount>1?"s":""})`)}`:"";S.push(`${F} ${q} ${p} ${k} ${u}${d}`)}let T=L.length,J=$.length,f=new Set($.map((I)=>I.provider)),E=$.filter((I)=>I.scope==="global").length,M=$.filter((I)=>I.scope==="project").length;S.push("");let R=`${J} skills (${T} unique) across ${f.size} providers | ${E} global, ${M} project`;return S.push(Y.dim(R)),S.join(`
|
|
6
|
+
`)}function Y$($,L){if(!B()||!L)return $;let S=$.toLowerCase().indexOf(L.toLowerCase());if(S===-1)return $;let j=$.slice(0,S),A=$.slice(S,S+L.length),Q=$.slice(S+L.length);return`${j}${Y.bold(Y.yellow(A))}${Q}`}function k$($,L){if($.length===0)return`No skills matching "${L}". Try ${Y.bold("asm list")} to see all skills.`;let S=g($),j=[];j.push(Y.dim(`Found ${$.length} result${$.length===1?"":"s"} (${S.length} unique) matching "${L}"`)+`
|
|
7
|
+
`);let A=Math.max(4,...S.map((J)=>J.name.length)),Q=Math.max(7,...S.map((J)=>J.version.length)),Z=S.map((J)=>J.providers.map((f)=>y(f.provider,f.label)).join(" ")),X=S.map((J)=>J.providers.map((f)=>`[${f.label}]`).join(" ")),c=Math.max(9,...X.map((J)=>J.length)),z=7,G=9,U=(J,f)=>J.padEnd(f),T=`${U("Name",A)} ${U("Version",Q)} ${U("Providers",c)} ${U("Scope",z)} ${U("Type",G)}`;j.push(B()?Y.bold(T):T),j.push(`${"-".repeat(A)} ${"-".repeat(Q)} ${"-".repeat(c)} ${"-".repeat(z)} ${"-".repeat(G)}`);for(let J=0;J<S.length;J++){let f=S[J],E=Y$(f.name,L),M=A-f.name.length,R=E+" ".repeat(Math.max(0,M)),I=U(f.version,Q),N=c-X[J].length,F=Z[J]+" ".repeat(Math.max(0,N)),q=U(f.scope,z),V=U(f.type,G);j.push(`${R} ${I} ${F} ${q} ${V}`)}return j.join(`
|
|
8
|
+
`)}async function Z$($){let L=[],S=(A,Q)=>`${B()?Y.bold(A+":"):A+":"} ${Q}`;if(L.push(S("Name",$.name)),L.push(S("Version",$.version)),L.push(S("Provider",$.providerLabel)),L.push(S("Scope",$.scope)),L.push(S("Location",$.location)),L.push(S("Path",K($.path))),L.push(S("Type",$.isSymlink?"symlink":"directory")),$.isSymlink&&$.symlinkTarget)L.push(S("Symlink Target",$.symlinkTarget));let j=$.fileCount??await P($.path);if(L.push(S("File Count",String(j))),$.description)L.push(""),L.push(S("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 u$($){if($.length===0)return"No skills found.";if($.length===1)return Z$($[0]);let L=[],S=(z,G)=>`${B()?Y.bold(z+":"):z+":"} ${G}`,j=$[0],A=j.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(S(" Version",B()?Y.green(j.version):j.version));let Q=j.fileCount??await P(j.path);L.push(S(" File Count",String(Q)));let Z=$.map((z)=>y(z.provider,z.providerLabel)).join(" ");if(L.push(S(" Installed in",Z)),j.description){L.push(""),L.push(B()?Y.bold(" Description:"):" Description:");let z=J$(j.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=w(G.provider,G.providerLabel),T=G.isSymlink?B()?Y.yellow("symlink"):"symlink":B()?Y.green("directory"):"directory",J=Y.dim(G.scope);if(L.push(` ${U} (${J}, ${T})`),L.push(` ${Y.dim("Path:")} ${K(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 J$($,L){let S=$.split(/\s+/),j=[],A="";for(let Q of S)if(A.length+Q.length+1>L&&A.length>0)j.push(A),A=Q;else A=A?A+" "+Q:Q;if(A)j.push(A);return j}function d$($){return JSON.stringify($,null,2)}function r$($){let L=[],S=new Set,j=new Map,A=[];for(let c of $){let z=j.get(c.realPath);if(z){if(c.isSymlink)continue;if(z.isSymlink)A[A.indexOf(z)]=c,j.set(c.realPath,c);else A.push(c)}else j.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)S.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)=>!S.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 U$($){return[...$].sort((L,S)=>{if(L.scope!==S.scope)return L.scope==="global"?-1:1;let j=L.providerLabel.localeCompare(S.providerLabel);if(j!==0)return j;return L.path.localeCompare(S.path)})}function B$($){return $==="same-dirName"?"same dirName":"same name"}function i$($){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 S of $.duplicateGroups){L.push(` ${Y.yellow(`"${S.key}"`)} ${Y.dim(`(${B$(S.reason)})`)}`);let j=U$(S.instances);for(let A=0;A<j.length;A++){let Q=j[A],Z=w(Q.provider,Q.providerLabel),X=A===0?Y.green(" [keep]"):Y.dim(" "),c=Y.dim(`(${Q.scope})`);L.push(` ${X} ${Z} ${c} ${Y.dim(K(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 l$($){return JSON.stringify($,null,2)}import{readFileSync as I$}from"fs";import{resolve as T$,dirname as f$}from"path";import{fileURLToPath as N$}from"url";import{execSync as D$}from"child_process";var H$=f$(N$(import.meta.url)),o="1.6.0";try{let $=I$(T$(H$,"../../package.json"),"utf-8");o=JSON.parse($).version}catch{}var x="c5585ff";try{x=D$("git rev-parse --short HEAD",{encoding:"utf-8"}).trim()||x}catch{}var K$=o,O$=x,jL=`v${K$} (${O$})`;
|
|
12
|
+
export{W as a,P as b,V$ as c,P$ as d,C$ as e,Q$ as f,h$ as g,b$ as h,t$ as i,Y as j,w as k,K as l,o$ as m,p$ as n,k$ as o,u$ as p,d$ as q,r$ as r,U$ as s,B$ as t,i$ as u,l$ as v,jL as w};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{w as I,z as X}from"./chunk-zh7g5bam.js";import{readdir as P,stat as C,lstat as N,readlink as R,readFile as K,realpath as _}from"fs/promises";import{join as H,resolve as w}from"path";function U(o){let c={},t=o.split(`
|
|
2
|
+
`),$=!1,S=!1,j=null,A=[],B="none",f=-1;function L(){if(j){let p=A.join(" ").trim();if(p)c[j]=p;j=null,A=[],B="none",f=-1}}for(let p of t){if(p.trim()==="---")if(!S){S=!0,$=!0;continue}else{L();break}if(!$)continue;if(B!=="none"&&j){let G=p.replace(/^\s*/,""),z=p.length-G.length;if(z>0&&G.length>0){if(f===-1)f=z;A.push(G);continue}else if(G.length===0)continue;else L()}let v=p.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(v){L();let G=v[1],z=v[2];if(z==="|"||z===">")j=G,A=[],B=z==="|"?"literal":"folded";else if(z==="|+"||z===">+"||z==="|-"||z===">-")j=G,A=[],B=z.startsWith("|")?"literal":"folded";else{let T=z.replace(/^["']|["']$/g,"");if(T)c[G]=T}}}return L(),c}function E(o,c){let t=[];for(let $ of o.providers){if(!$.enabled){I(`scan: skipping disabled provider "${$.name}"`);continue}if(c==="global"||c==="both"){let S=X($.global);I(`scan: adding location ${S} (${$.label}, global)`),t.push({dir:S,location:`global-${$.name}`,scope:"global",providerName:$.name,providerLabel:$.label})}if(c==="project"||c==="both"){let S=X($.project);I(`scan: adding location ${S} (${$.label}, project)`),t.push({dir:S,location:`project-${$.name}`,scope:"project",providerName:$.name,providerLabel:$.label})}}for(let $ of o.customPaths)if(c===$.scope||c==="both"){let S=X($.path);I(`scan: adding custom location ${S} (${$.label}, ${$.scope})`),t.push({dir:S,location:`${$.scope}-custom`,scope:$.scope,providerName:"custom",providerLabel:$.label})}return t}async function O(o){try{return(await P(o,{recursive:!0})).length}catch{return 0}}async function M(o){let c=[];I(`scanning: ${o.dir} (${o.location})`);let t;try{t=await P(o.dir)}catch{return I(`scanning: ${o.dir} — not found, skipping`),c}for(let $ of t){let S=H(o.dir,$);try{if(!(await C(S)).isDirectory()){I(` skip: "${$}" — not a directory`);continue}}catch{I(` skip: "${$}" — stat failed`);continue}let j=H(S,"SKILL.md"),A;try{A=await K(j,"utf-8")}catch{I(` skip: "${$}" — no SKILL.md`);continue}let B=U(A),f=!1,L=null;try{if((await N(S)).isSymbolicLink())f=!0,L=await R(S)}catch{}let p=w(S),v;try{v=await _(S)}catch{v=p}c.push({name:B.name||$,version:B.version||"0.0.0",description:(B.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:$,path:p,originalPath:S,location:o.location,scope:o.scope,provider:o.providerName,providerLabel:o.providerLabel,isSymlink:f,symlinkTarget:L,realPath:v})}return I(`found ${c.length} skill(s) in ${o.dir}`),c}async function Ao(o,c){let t=E(o,c);return(await Promise.all(t.map(M))).flat()}function Bo(o,c){if(!c.trim())return o;let t=c.toLowerCase();return o.filter(($)=>$.name.toLowerCase().includes(t)||$.description.toLowerCase().includes(t)||$.location.toLowerCase().includes(t)||$.providerLabel.toLowerCase().includes(t))}function h(o,c){let t=o.split("."),$=c.split("."),S=Math.max(t.length,$.length);for(let j=0;j<S;j++){let A=parseInt(t[j]??"0",10),B=parseInt($[j]??"0",10);if(isNaN(A)||isNaN(B))return o.localeCompare(c);if(A!==B)return A-B}return 0}function vo(o,c){let t=[...o];switch(c){case"name":t.sort(($,S)=>$.name.localeCompare(S.name));break;case"version":t.sort(($,S)=>h($.version,S.version));break;case"location":t.sort(($,S)=>$.location.localeCompare(S.location));break}return t}import{rm as q,readFile as D,writeFile as F,access as x,lstat as V}from"fs/promises";import{join as y,resolve as Z,dirname as n}from"path";import{homedir as m}from"os";var r=m();function b(o,c){let t={directories:[],ruleFiles:[],agentsBlocks:[]};t.directories.push({path:o.originalPath,isSymlink:o.isSymlink});let $=o.dirName;if(o.scope==="project")t.ruleFiles.push(Z(".cursor","rules",`${$}.mdc`),Z(".windsurf","rules",`${$}.md`),Z(".github","instructions",`${$}.instructions.md`)),t.agentsBlocks.push({file:Z("AGENTS.md"),skillName:$});if(o.scope==="global"){for(let A of c.providers){if(!A.enabled)continue;let B=X(A.global),f=y(n(B),"AGENTS.md");t.agentsBlocks.push({file:f,skillName:$})}let S=y(r,".codex","AGENTS.md");if(!t.agentsBlocks.some((A)=>A.file===S))t.agentsBlocks.push({file:S,skillName:$})}return t}function Xo(o,c,t){let $=c.filter((f)=>f.dirName===o);if($.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let S={directories:[],ruleFiles:[],agentsBlocks:[]},j=new Set,A=new Set,B=new Set;for(let f of $){let L=b(f,t);for(let p of L.directories)if(!j.has(p.path))j.add(p.path),S.directories.push(p);for(let p of L.ruleFiles)if(!A.has(p))A.add(p),S.ruleFiles.push(p);for(let p of L.agentsBlocks){let v=`${p.file}::${p.skillName}`;if(!B.has(v))B.add(v),S.agentsBlocks.push(p)}}return S}async function Y(o){try{return await x(o),!0}catch{return!1}}async function a(o,c){if(!await Y(o))return;let t=await D(o,"utf-8");for(let $ of["agent-skill-manager","skill-manager","pskills"]){let S=`<!-- ${$}: ${c} -->`,j=`<!-- /${$}: ${c} -->`,A=t.indexOf(S),B=t.indexOf(j);if(A===-1||B===-1)continue;let f=A;if(f>0&&t[f-1]===`
|
|
3
|
+
`)f--;let p=B+j.length;if(p<t.length&&t[p]===`
|
|
4
|
+
`)p++;t=t.slice(0,f)+t.slice(p)}await F(o,t,"utf-8")}async function Yo(o){let c=[];for(let t of o.directories)try{if(t.isSymlink)await q(t.path),c.push(`Removed symlink: ${t.path}`);else await q(t.path,{recursive:!0,force:!0}),c.push(`Removed directory: ${t.path}`)}catch($){c.push(`Failed to remove ${t.path}: ${$.message}`)}for(let t of o.ruleFiles)if(await Y(t))try{await q(t),c.push(`Removed rule file: ${t}`)}catch($){c.push(`Failed to remove ${t}: ${$.message}`)}for(let t of o.agentsBlocks)try{await a(t.file,t.skillName),c.push(`Cleaned AGENTS.md block in: ${t.file}`)}catch($){c.push(`Failed to clean AGENTS.md block: ${$.message}`)}return c}async function Zo(o){let c=[];for(let t of o.directories)if(await Y(t.path)){let S=(await V(t.path)).isSymbolicLink()?"symlink":"directory";c.push(`${t.path} (${S})`)}for(let t of o.ruleFiles)if(await Y(t))c.push(t);for(let t of o.agentsBlocks)if(await Y(t.file)){let $=await D(t.file,"utf-8");if($.includes(`<!-- agent-skill-manager: ${t.skillName} -->`)||$.includes(`<!-- skill-manager: ${t.skillName} -->`)||$.includes(`<!-- pskills: ${t.skillName} -->`))c.push(`${t.file} (AGENTS.md block)`)}return c}var Q=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},W={bold:(o)=>Q()?`\x1B[1m${o}\x1B[0m`:o,cyan:(o)=>Q()?`\x1B[36m${o}\x1B[0m`:o,green:(o)=>Q()?`\x1B[32m${o}\x1B[0m`:o,yellow:(o)=>Q()?`\x1B[33m${o}\x1B[0m`:o,dim:(o)=>Q()?`\x1B[2m${o}\x1B[0m`:o,red:(o)=>Q()?`\x1B[31m${o}\x1B[0m`:o,blueBold:(o)=>Q()?`\x1B[1m\x1B[34m${o}\x1B[0m`:o};function To(o){if(o.length===0)return"No skills found.";let c=["Name","Version","Provider","Scope","Type","Path"],t=o.map((f)=>[f.name,f.version,f.providerLabel,f.scope,f.isSymlink?"symlink":"directory",f.path]),$=c.map((f,L)=>Math.max(f.length,...t.map((p)=>p[L].length))),S=(f,L)=>f.padEnd(L),j=c.map((f,L)=>S(f,$[L])).join(" "),A=$.map((f)=>"-".repeat(f)).join("--"),B=t.map((f)=>f.map((L,p)=>S(L,$[p])).join(" "));return[Q()?W.bold(j):j,A,...B].join(`
|
|
5
|
+
`)}async function Uo(o){let c=[],t=(S,j)=>`${Q()?W.bold(S+":"):S+":"} ${j}`;if(c.push(t("Name",o.name)),c.push(t("Version",o.version)),c.push(t("Provider",o.providerLabel)),c.push(t("Scope",o.scope)),c.push(t("Location",o.location)),c.push(t("Path",o.path)),c.push(t("Type",o.isSymlink?"symlink":"directory")),o.isSymlink&&o.symlinkTarget)c.push(t("Symlink Target",o.symlinkTarget));let $=o.fileCount??await O(o.path);if(c.push(t("File Count",String($))),o.description)c.push(""),c.push(t("Description",o.description));if(o.warnings&&o.warnings.length>0){c.push(""),c.push(Q()?W.bold("Warnings:"):"Warnings:");for(let S of o.warnings)c.push(` ${Q()?W.yellow("!"):"!"} [${S.category}] ${S.message}`)}return c.join(`
|
|
6
|
+
`)}function Ho(o){return JSON.stringify(o,null,2)}function yo(o){let c=[],t=new Set,$=new Map,S=[];for(let f of o){let L=$.get(f.realPath);if(L){if(f.isSymlink)continue;if(L.isSymlink)S[S.indexOf(L)]=f,$.set(f.realPath,f);else S.push(f)}else $.set(f.realPath,f),S.push(f)}let j=new Map;for(let f of S){let L=j.get(f.dirName)??[];L.push(f),j.set(f.dirName,L)}for(let[f,L]of j)if(new Set(L.map((v)=>v.location)).size>=2){c.push({key:f,reason:"same-dirName",instances:L});for(let v of L)t.add(v.path)}let A=new Map;for(let f of S){if(!f.name)continue;let L=A.get(f.name)??[];L.push(f),A.set(f.name,L)}for(let[f,L]of A){if(new Set(L.map((z)=>z.dirName)).size<2)continue;let v=L.filter((z)=>!t.has(z.path));if(v.length<2)continue;if(new Set(v.map((z)=>z.dirName)).size<2)continue;c.push({key:f,reason:"same-frontmatterName",instances:v})}c.sort((f,L)=>{if(f.reason!==L.reason)return f.reason==="same-dirName"?-1:1;return f.key.localeCompare(L.key)});let B=c.reduce((f,L)=>f+L.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:o.length,duplicateGroups:c,totalDuplicateInstances:B}}function u(o){return[...o].sort((c,t)=>{if(c.scope!==t.scope)return c.scope==="global"?-1:1;let $=c.providerLabel.localeCompare(t.providerLabel);if($!==0)return $;return c.path.localeCompare(t.path)})}function d(o){return o==="same-dirName"?"same dirName":"same name"}function Do(o){if(o.duplicateGroups.length===0)return W.green("No duplicate skills found.");let c=[];c.push(W.bold(`Found ${o.duplicateGroups.length} duplicate group(s) (${o.totalDuplicateInstances} total instances):`)),c.push("");for(let t of o.duplicateGroups){c.push(W.yellow(` Group: "${t.key}" (${d(t.reason)})`));let $=u(t.instances);for(let S=0;S<$.length;S++){let j=$[S],A=S===0?W.green(" (recommended keep)"):"";c.push(` ${W.dim("•")} ${j.path} [${j.providerLabel}/${j.scope}]${A}`)}c.push("")}return c.join(`
|
|
7
|
+
`)}function go(o){return JSON.stringify(o,null,2)}import{readFileSync as i}from"fs";import{resolve as k,dirname as s}from"path";import{fileURLToPath as e}from"url";import{execSync as l}from"child_process";var oo=s(e(import.meta.url)),g="1.5.0";try{let o=i(k(oo,"../../package.json"),"utf-8");g=JSON.parse(o).version}catch{}var J="9619ec8";try{J=l("git rev-parse --short HEAD",{encoding:"utf-8"}).trim()||J}catch{}var to=g,co=J,wo=`v${to} (${co})`;
|
|
8
|
+
export{U as a,O as b,Ao as c,Bo as d,vo as e,b as f,Xo as g,Yo as h,Zo as i,W as j,To as k,Uo as l,Ho as m,yo as n,u as o,d as p,Do as q,go as r,wo as s};
|