agent-skill-manager 1.19.0 → 1.20.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-skill-manager",
3
- "version": "1.19.0",
3
+ "version": "1.20.0",
4
4
  "description": "Interactive TUI for managing installed skills for AI coding agents (Claude Code, Codex, OpenClaw, and more)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -29,7 +29,7 @@
29
29
  ],
30
30
  "dependencies": {
31
31
  "@opentui/core": "0.1.87",
32
- "yaml": "^2.8.2"
32
+ "yaml": "^2.8.3"
33
33
  },
34
34
  "engines": {
35
35
  "node": ">=18",
@@ -1,14 +0,0 @@
1
- import{N as V,T as K}from"./chunk-v3wdjh4r.js";import{readdir as a,stat as J$,lstat as B$,readlink as G$,readFile as U$,realpath as Q$}from"fs/promises";import{join as n,resolve as N$}from"path";function d($){let L={},j=$.split(`
2
- `),S=!1,A=!1,z=null,G=[],J="none",X=-1,Y=null;function B(){if(z){let U=G.join(" ").trim();if(U)L[z]=U;z=null,G=[],J="none",X=-1}}for(let U of j){if(U.trim()==="---")if(!A){A=!0,S=!0;continue}else{B();break}if(!S)continue;if(J!=="none"&&z){let Q=U.replace(/^\s*/,""),O=U.length-Q.length;if(O>0&&Q.length>0){if(X===-1)X=O;G.push(Q);continue}else if(Q.length===0)continue;else B()}if(Y!==null){let Q=U.match(/^\s+(\w[\w-]*):\s*(.*?)\s*$/);if(Q){let O=Q[1],F=Q[2].replace(/^["']|["']$/g,"");if(F)L[`${Y}.${O}`]=F;continue}if(U.trim().length>0)Y=null;else continue}let H=U.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(H){B();let Q=H[1],O=H[2];if(O==="|"||O===">")z=Q,G=[],J=O==="|"?"literal":"folded";else if(O==="|+"||O===">+"||O==="|-"||O===">-")z=Q,G=[],J=O.startsWith("|")?"literal":"folded";else{let D=O.replace(/^["']|["']$/g,"");if(D)L[Q]=D;else Y=Q}}}return B(),L}function t($){return $["metadata.version"]||$.version||"0.0.0"}function o($){let L=$["allowed-tools"]||"";if(!L.trim())return[];return L.split(/[\s,]+/).map((j)=>j.trim()).filter(Boolean)}function I$($,L){let j=[];for(let S of $.providers){if(!S.enabled){V(`scan: skipping disabled provider "${S.name}"`);continue}if(L==="global"||L==="both"){let A=K(S.global);V(`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);V(`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);V(`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 g($){try{return(await a($,{recursive:!0})).length}catch{return 0}}async function D$($){let L=[];V(`scanning: ${$.dir} (${$.location})`);let j;try{j=await a($.dir)}catch{return V(`scanning: ${$.dir} — not found, skipping`),L}for(let S of j){let A=n($.dir,S);try{if(!(await J$(A)).isDirectory()){V(` skip: "${S}" — not a directory`);continue}}catch{V(` skip: "${S}" — stat failed`);continue}let z=n(A,"SKILL.md"),G;try{G=await U$(z,"utf-8")}catch{V(` skip: "${S}" — no SKILL.md`);continue}let J=d(G),X=!1,Y=null;try{if((await B$(A)).isSymbolicLink())X=!0,Y=await G$(A)}catch{}let B=N$(A),U;try{U=await Q$(A)}catch{U=B}L.push({name:J.name||S,version:t(J),description:(J.description||"").replace(/\s*\n\s*/g," ").trim(),creator:J["metadata.creator"]||"",license:(J.license||"").trim(),compatibility:(J.compatibility||"").trim(),allowedTools:o(J),effort:J.effort||J["metadata.effort"]||void 0,dirName:S,path:B,originalPath:A,location:$.location,scope:$.scope,provider:$.providerName,providerLabel:$.providerLabel,isSymlink:X,symlinkTarget:Y,realPath:U})}return V(`found ${L.length} skill(s) in ${$.dir}`),L}async function n$($,L){let j=I$($,L);return(await Promise.all(j.map(D$))).flat()}function a$($,L){if(!L.trim())return $;let j=L.toLowerCase();return $.filter((S)=>S.name.toLowerCase().includes(j)||S.description.toLowerCase().includes(j)||S.creator.toLowerCase().includes(j)||S.effort&&S.effort.toLowerCase().includes(j)||S.location.toLowerCase().includes(j)||S.providerLabel.toLowerCase().includes(j))}function H$($,L){let j=$.split("."),S=L.split("."),A=Math.max(j.length,S.length);for(let z=0;z<A;z++){let G=parseInt(j[z]??"0",10),J=parseInt(S[z]??"0",10);if(isNaN(G)||isNaN(J))return $.localeCompare(L);if(G!==J)return G-J}return 0}function r$($,L){let j=[...$];switch(L){case"name":j.sort((S,A)=>S.name.localeCompare(A.name));break;case"version":j.sort((S,A)=>H$(S.version,A.version));break;case"location":j.sort((S,A)=>S.location.localeCompare(A.location));break}return j}import{rm as m,readFile as i,writeFile as F$,access as T$,lstat as O$,symlink as V$}from"fs/promises";import{join as r,resolve as _,dirname as l,relative as K$}from"path";import{homedir as _$}from"os";var q$=_$();function M$($,L){let j={directories:[],ruleFiles:[],agentsBlocks:[]};j.directories.push({path:$.originalPath,isSymlink:$.isSymlink});let S=$.dirName;if($.scope==="project")j.ruleFiles.push(_(".cursor","rules",`${S}.mdc`),_(".windsurf","rules",`${S}.md`),_(".github","instructions",`${S}.instructions.md`)),j.agentsBlocks.push({file:_("AGENTS.md"),skillName:S});if($.scope==="global"){for(let G of L.providers){if(!G.enabled)continue;let J=K(G.global),X=r(l(J),"AGENTS.md");j.agentsBlocks.push({file:X,skillName:S})}let A=r(q$,".codex","AGENTS.md");if(!j.agentsBlocks.some((G)=>G.file===A))j.agentsBlocks.push({file:A,skillName:S})}return j}function LL($,L,j){let S=L.filter((X)=>X.dirName===$);if(S.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let A={directories:[],ruleFiles:[],agentsBlocks:[]},z=new Set,G=new Set,J=new Set;for(let X of S){let Y=M$(X,j);for(let B of Y.directories)if(!z.has(B.path))z.add(B.path),A.directories.push(B);for(let B of Y.ruleFiles)if(!G.has(B))G.add(B),A.ruleFiles.push(B);for(let B of Y.agentsBlocks){let U=`${B.file}::${B.skillName}`;if(!J.has(U))J.add(U),A.agentsBlocks.push(B)}}return A}async function M($){try{return await T$($),!0}catch{return!1}}async function R$($,L){if(!await M($))return;let j=await i($,"utf-8");for(let S of["agent-skill-manager","skill-manager","pskills"]){let A=`<!-- ${S}: ${L} -->`,z=`<!-- /${S}: ${L} -->`,G=j.indexOf(A),J=j.indexOf(z);if(G===-1||J===-1)continue;let X=G;if(X>0&&j[X-1]===`
3
- `)X--;let B=J+z.length;if(B<j.length&&j[B]===`
4
- `)B++;j=j.slice(0,X)+j.slice(B)}await F$($,j,"utf-8")}async function SL($,L){let j=[];for(let S of $.directories)try{if(S.isSymlink)await m(S.path),j.push(`Removed symlink: ${S.path}`);else await m(S.path,{recursive:!0,force:!0}),j.push(`Removed directory: ${S.path}`);if(L&&_(S.path)!==_(L)){let A=l(S.path),z=K$(A,L);await V$(z,S.path,"dir"),j.push(`Created symlink: ${S.path} -> ${z}`)}}catch(A){j.push(`Failed to remove ${S.path}: ${A.message}`)}for(let S of $.ruleFiles)if(await M(S))try{await m(S),j.push(`Removed rule file: ${S}`)}catch(A){j.push(`Failed to remove ${S}: ${A.message}`)}for(let S of $.agentsBlocks)try{await R$(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 jL($){let L=[];for(let j of $.directories)if(await M(j.path)){let A=(await O$(j.path)).isSymbolicLink()?"symlink":"directory";L.push(`${j.path} (${A})`)}for(let j of $.ruleFiles)if(await M(j))L.push(j);for(let j of $.agentsBlocks)if(await M(j.file)){let S=await i(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 N=()=>{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:($)=>N()?`\x1B[1m${$}\x1B[0m`:$,cyan:($)=>N()?`\x1B[36m${$}\x1B[0m`:$,green:($)=>N()?`\x1B[32m${$}\x1B[0m`:$,yellow:($)=>N()?`\x1B[33m${$}\x1B[0m`:$,dim:($)=>N()?`\x1B[2m${$}\x1B[0m`:$,white:($)=>N()?`\x1B[37m${$}\x1B[0m`:$,red:($)=>N()?`\x1B[31m${$}\x1B[0m`:$,blue:($)=>N()?`\x1B[34m${$}\x1B[0m`:$,blueBold:($)=>N()?`\x1B[34;1m${$}\x1B[0m`:$,magenta:($)=>N()?`\x1B[35m${$}\x1B[0m`:$,bgDim:($)=>N()?`\x1B[48;5;236m${$}\x1B[0m`:$,bgRed:($)=>N()?`\x1B[41m\x1B[37m\x1B[1m${$}\x1B[0m`:$,bgYellow:($)=>N()?`\x1B[43m\x1B[30m\x1B[1m${$}\x1B[0m`:$,bgGreen:($)=>N()?`\x1B[42m\x1B[30m\x1B[1m${$}\x1B[0m`:$,bgCyan:($)=>N()?`\x1B[46m\x1B[30m\x1B[1m${$}\x1B[0m`:$};function R($){if(!$)return"";switch($.toLowerCase()){case"low":return Z.green($);case"medium":return Z.yellow($);case"high":return Z.red($);case"max":return Z.magenta($);default:return $}}var s={claude:Z.blueBold,codex:Z.cyan,openclaw:Z.yellow,agents:Z.green,custom:Z.magenta,cursor:Z.blue,windsurf:Z.cyan,cline:Z.green,roocode:Z.magenta,continue:Z.yellow,copilot:Z.white,aider:Z.red,opencode:Z.cyan,zed:Z.blue,augment:Z.green,amp:Z.yellow};function p($,L){return(s[$]||Z.dim)(L)}function k($,L){if(!N())return`[${L}]`;return(s[$]||Z.dim)(`[${L}]`)}function q($){let L=process.env.HOME||process.env.USERPROFILE||"";if(L&&$.startsWith(L))return"~"+$.slice(L.length);return $}function XL($){if($.length===0)return"No skills found.";let L=["Name","Version","Creator","Effort","Tool","Scope","Type","Path"],j=$.map((X)=>[X.name,X.version,X.creator||"—",X.effort||"—",X.providerLabel,X.scope,X.isSymlink?"symlink":"directory",q(X.path)]),S=L.map((X,Y)=>Math.max(X.length,...j.map((B)=>B[Y].length))),A=(X,Y)=>X.padEnd(Y),z=L.map((X,Y)=>A(X,S[Y])).join(" "),G=S.map((X)=>"-".repeat(X)).join("--"),J=j.map((X)=>X.map((Y,B)=>A(Y,S[B])).join(" "));return[N()?Z.bold(z):z,G,...J].join(`
5
- `)}function e($){let L=new Map;for(let S of $){let A=`${S.dirName}||${S.scope}`,z=L.get(A)??[];z.push(S),L.set(A,z)}let j=[];for(let[,S]of L){let A=S[0],z=new Set(S.map((J)=>J.scope)),G=new Set(S.map((J)=>J.isSymlink?"symlink":"directory"));j.push({name:A.name,version:A.version,creator:A.creator||"",effort:A.effort||"",providers:S.map((J)=>({provider:J.provider,label:J.providerLabel})),scope:z.size>1?"mixed":A.scope,type:G.size>1?"mixed":A.isSymlink?"symlink":"directory",path:q(A.path),warningCount:S.reduce((J,X)=>J+(X.warnings?.length??0),0)})}return j}function YL($){if($.length===0)return"No skills found.";let L=e($),j=[],S=Math.max(4,...L.map((I)=>I.name.length)),A=Math.max(7,...L.map((I)=>I.version.length)),z=Math.max(7,...L.map((I)=>Math.min((I.creator||"—").length,15))),G=Math.max(6,...L.map((I)=>(I.effort||"—").length)),J=7,X=9,Y=L.map((I)=>I.providers.map((T)=>k(T.provider,T.label)).join(" ")),B=L.map((I)=>I.providers.map((T)=>`[${T.label}]`).join(" ")),U=Math.max(9,...B.map((I)=>I.length)),H=(I,T)=>I.padEnd(T),Q=`${H("Name",S)} ${H("Version",A)} ${H("Creator",z)} ${H("Effort",G)} ${H("Tools",U)} ${H("Scope",J)} ${H("Type",X)}`;j.push(N()?Z.bold(Q):Q),j.push(`${"-".repeat(S)} ${"-".repeat(A)} ${"-".repeat(z)} ${"-".repeat(G)} ${"-".repeat(U)} ${"-".repeat(J)} ${"-".repeat(X)}`);for(let I=0;I<L.length;I++){let T=L[I],w=H(T.name,S),C=H(T.version,A),x=(T.creator||"—").slice(0,15),v=H(x,z),W=T.effort||"—",y=T.effort?R(T.effort):"—",b=G-W.length,h=y+" ".repeat(Math.max(0,b)),f=U-B[I].length,z$=Y[I]+" ".repeat(Math.max(0,f)),X$=H(T.scope,J),Y$=H(T.type,X),Z$=T.warningCount>0?` ${Z.yellow(`(${T.warningCount} warning${T.warningCount>1?"s":""})`)}`:"";j.push(`${w} ${C} ${v} ${h} ${z$} ${X$} ${Y$}${Z$}`)}let O=L.length,D=$.length,F=new Set($.map((I)=>I.provider)),E=$.filter((I)=>I.scope==="global").length,P=$.filter((I)=>I.scope==="project").length;j.push("");let c=`${D} skills (${O} unique) across ${F.size} tools | ${E} global, ${P} project`;return j.push(Z.dim(c)),j.join(`
6
- `)}function E$($,L){if(!N()||!L)return $;let j=$.toLowerCase().indexOf(L.toLowerCase());if(j===-1)return $;let S=$.slice(0,j),A=$.slice(j,j+L.length),z=$.slice(j+L.length);return`${S}${Z.bold(Z.yellow(A))}${z}`}function ZL($,L){if($.length===0)return`No skills matching "${L}". Try ${Z.bold("asm list")} to see all skills.`;let j=e($),S=[];S.push(Z.dim(`Found ${$.length} result${$.length===1?"":"s"} (${j.length} unique) matching "${L}"`)+`
7
- `);let A=Math.max(4,...j.map((D)=>D.name.length)),z=Math.max(7,...j.map((D)=>D.version.length)),G=Math.max(7,...j.map((D)=>Math.min((D.creator||"—").length,15))),J=Math.max(6,...j.map((D)=>(D.effort||"—").length)),X=j.map((D)=>D.providers.map((F)=>k(F.provider,F.label)).join(" ")),Y=j.map((D)=>D.providers.map((F)=>`[${F.label}]`).join(" ")),B=Math.max(9,...Y.map((D)=>D.length)),U=7,H=9,Q=(D,F)=>D.padEnd(F),O=`${Q("Name",A)} ${Q("Version",z)} ${Q("Creator",G)} ${Q("Effort",J)} ${Q("Tools",B)} ${Q("Scope",U)} ${Q("Type",H)}`;S.push(N()?Z.bold(O):O),S.push(`${"-".repeat(A)} ${"-".repeat(z)} ${"-".repeat(G)} ${"-".repeat(J)} ${"-".repeat(B)} ${"-".repeat(U)} ${"-".repeat(H)}`);for(let D=0;D<j.length;D++){let F=j[D],E=E$(F.name,L),P=A-F.name.length,c=E+" ".repeat(Math.max(0,P)),I=Q(F.version,z),T=(F.creator||"—").slice(0,15),w=Q(T,G),C=F.effort||"—",x=F.effort?R(F.effort):"—",v=J-C.length,W=x+" ".repeat(Math.max(0,v)),y=B-Y[D].length,b=X[D]+" ".repeat(Math.max(0,y)),h=Q(F.scope,U),f=Q(F.type,H);S.push(`${c} ${I} ${w} ${W} ${b} ${h} ${f}`)}return S.join(`
8
- `)}function JL($,L){if($.length===0)return"";let j=[];j.push(Z.dim(`Found ${$.length} available skill${$.length===1?"":"s"} matching "${L}"`)+`
9
- `);for(let S of $){j.push(` ${Z.dim("To install:")} ${Z.green(`asm install ${S.installUrl}`)}`);let A=S.verified?Z.blue(" [verified]"):"";j.push(` ${Z.cyan(S.name)} ${Z.dim(`v${S.version}`)}${A} ${Z.dim(`[${S.repoLabel}]`)}`);for(let z of j$(S.description,76))j.push(` ${z}`);j.push("")}return j.join(`
10
- `)}var $$=new Set(["Bash","Write","Edit","NotebookEdit"]),P$=new Set(["WebFetch","WebSearch"]);function c$($){if($$.has($))return Z.red($);if(P$.has($))return Z.yellow($);return Z.green($)}function L$($){if($.length===0)return"";return $.map(c$).join(" ")}function S$($){let L=$.filter((S)=>$$.has(S));if(L.length===0)return null;let j=[];if(L.includes("Bash"))j.push("execute shell commands");if(L.includes("Write")||L.includes("Edit")||L.includes("NotebookEdit"))j.push("modify files");return`This skill can ${j.join(" and ")}`}async function w$($){let L=[],j=(A,z)=>`${N()?Z.bold(A+":"):A+":"} ${z}`;if(L.push(j("Name",$.name)),L.push(j("Version",$.version)),L.push(j("Creator",$.creator||"—")),L.push(j("License",$.license||"—")),$.compatibility)L.push(j("Compatibility",$.compatibility));if($.effort)L.push(j("Effort",R($.effort)));if(L.push(j("Tool",$.providerLabel)),L.push(j("Scope",$.scope)),L.push(j("Location",$.location)),L.push(j("Path",q($.path))),L.push(j("Type",$.isSymlink?"symlink":"directory")),$.isSymlink&&$.symlinkTarget)L.push(j("Symlink Target",$.symlinkTarget));let S=$.fileCount??await g($.path);if(L.push(j("File Count",String(S))),$.description)L.push(""),L.push(j("Description",$.description));if($.allowedTools&&$.allowedTools.length>0){L.push(""),L.push(N()?Z.bold("Allowed Tools:"):"Allowed Tools:"),L.push(` ${L$($.allowedTools)}`);let A=S$($.allowedTools);if(A)L.push(` ${N()?Z.yellow("⚠"):"!"} ${A}`)}if($.warnings&&$.warnings.length>0){L.push(""),L.push(N()?Z.bold("Warnings:"):"Warnings:");for(let A of $.warnings)L.push(` ${N()?Z.yellow("!"):"!"} [${A.category}] ${A.message}`)}return L.join(`
11
- `)}async function BL($){if($.length===0)return"No skills found.";if($.length===1)return w$($[0]);let L=[],j=(Y,B)=>`${N()?Z.bold(Y+":"):Y+":"} ${B}`,S=$[0],A=S.name;if(L.push(""),L.push(N()?Z.blueBold(` ${A}`):` ${A}`),L.push(N()?Z.dim(" "+"-".repeat(A.length+2)):" "+"-".repeat(A.length+2)),L.push(""),L.push(j(" Version",S.version)),L.push(j(" Creator",S.creator||"—")),L.push(j(" License",S.license||"—")),S.compatibility)L.push(j(" Compatibility",S.compatibility));if(S.effort)L.push(j(" Effort",R(S.effort)));let z=S.fileCount??await g(S.path);L.push(j(" File Count",String(z)));let G=$.map((Y)=>k(Y.provider,Y.providerLabel)).join(" ");if(L.push(j(" Installed in",G)),S.description){L.push(""),L.push(N()?Z.bold(" Description:"):" Description:");let Y=j$(S.description,72);for(let B of Y)L.push(" "+B)}if(S.allowedTools&&S.allowedTools.length>0){L.push(""),L.push(N()?Z.bold(" Allowed Tools:"):" Allowed Tools:"),L.push(` ${L$(S.allowedTools)}`);let Y=S$(S.allowedTools);if(Y)L.push(` ${N()?Z.yellow("⚠"):"!"} ${Y}`)}L.push("");let J=` Installations (${$.length})`;L.push(N()?Z.bold(J):J);for(let Y=0;Y<$.length;Y++){let B=$[Y],U=p(B.provider,B.providerLabel),H=B.isSymlink?"symlink":"directory",Q=Z.dim(B.scope);if(L.push(` ${U} (${Q}, ${H})`),L.push(` ${Z.dim("Path:")} ${q(B.path)}`),B.isSymlink&&B.symlinkTarget)L.push(` ${Z.dim("Target:")} ${B.symlinkTarget}`)}let X=$.flatMap((Y)=>{if(!Y.warnings||Y.warnings.length===0)return[];return Y.warnings.map((B)=>({...B,provider:Y.providerLabel}))});if(X.length>0){L.push("");let Y=` Warnings (${X.length})`;L.push(N()?Z.bold(Y):Y);for(let B of X){let U=N()?Z.yellow("!"):"!";L.push(` ${U} [${B.category}] ${B.message}`)}}return L.push(""),L.join(`
12
- `)}function j$($,L){let j=$.split(/\s+/),S=[],A="";for(let z of j)if(A.length+z.length+1>L&&A.length>0)S.push(A),A=z;else A=A?A+" "+z:z;if(A)S.push(A);return S}function GL($){return JSON.stringify($,null,2)}function NL($){let L=[],j=new Set,S=new Map,A=[];for(let X of $){let Y=S.get(X.realPath);if(Y){if(X.isSymlink)continue;if(Y.isSymlink)A[A.indexOf(Y)]=X,S.set(X.realPath,X);else A.push(X)}else S.set(X.realPath,X),A.push(X)}let z=new Map;for(let X of A){let Y=z.get(X.dirName)??[];Y.push(X),z.set(X.dirName,Y)}for(let[X,Y]of z)if(new Set(Y.map((U)=>U.location)).size>=2){L.push({key:X,reason:"same-dirName",instances:Y});for(let U of Y)j.add(U.path)}let G=new Map;for(let X of A){if(!X.name)continue;let Y=G.get(X.name)??[];Y.push(X),G.set(X.name,Y)}for(let[X,Y]of G){if(new Set(Y.map((Q)=>Q.dirName)).size<2)continue;let U=Y.filter((Q)=>!j.has(Q.path));if(U.length<2)continue;if(new Set(U.map((Q)=>Q.dirName)).size<2)continue;L.push({key:X,reason:"same-frontmatterName",instances:U})}L.sort((X,Y)=>{if(X.reason!==Y.reason)return X.reason==="same-dirName"?-1:1;return X.key.localeCompare(Y.key)});let J=L.reduce((X,Y)=>X+Y.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:$.length,duplicateGroups:L,totalDuplicateInstances:J}}function C$($){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 x$($){return $==="same-dirName"?"same dirName":"same name"}function IL($){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(`(${x$(j.reason)})`)}`);let S=C$(j.instances);for(let A=0;A<S.length;A++){let z=S[A],G=p(z.provider,z.providerLabel),J=A===0?Z.green(" [keep]"):Z.dim(" "),X=Z.dim(`(${z.scope})`);L.push(` ${J} ${G} ${X} ${Z.dim(q(z.path))}`)}L.push("")}return L.push(Z.dim(` Run ${Z.bold("asm audit -y")} to auto-remove duplicates`)),L.push(""),L.join(`
13
- `)}function DL($){return JSON.stringify($,null,2)}function FL($){let L=$.trim();if(!L)return["vi",[]];let j=[],S="",A=!1,z=0;while(z<L.length){let G=L[z];if(G==='"'){A=!0,z++;while(z<L.length&&L[z]!=='"'){if(L[z]==="\\"&&z+1<L.length){let J=L[z+1];if(J==='"'||J==="\\"){S+=J,z+=2;continue}}S+=L[z],z++}z++}else if(G==="'"){A=!0,z++;while(z<L.length&&L[z]!=="'")S+=L[z],z++;z++}else if(G===" "||G==="\t"){if(S.length>0||A)j.push(S),S="",A=!1;z++}else S+=G,z++}if(S.length>0||A)j.push(S);if(j.length===0)return["vi",[]];return[j[0],j.slice(1)]}import{readFileSync as v$}from"fs";import{resolve as W$,dirname as y$}from"path";import{fileURLToPath as b$}from"url";import{execSync as h$}from"child_process";var f$=y$(b$(import.meta.url)),A$="1.19.0";try{let $=v$(W$(f$,"../../package.json"),"utf-8");A$=JSON.parse($).version}catch{}var u="3548a49";try{u=h$("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||u}catch{}var g$=A$,m$=u,qL=`v${g$} (${m$})`;
14
- export{d as e,t as f,o as g,g as h,n$ as i,a$ as j,r$ as k,M$ as l,LL as m,SL as n,jL as o,Z as p,R as q,p as r,q as s,XL as t,YL as u,ZL as v,JL as w,$$ as x,P$ as y,BL as z,j$ as A,GL as B,NL as C,C$ as D,x$ as E,IL as F,DL as G,qL as H,FL as I};