agent-skill-manager 2.1.0 → 2.2.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.
Files changed (33) hide show
  1. package/README.md +1 -1
  2. package/data/skill-index/Affitor_affiliate-skills.json +2757 -54
  3. package/data/skill-index/Eronred_aso-skills.json +1561 -31
  4. package/data/skill-index/GPTomics_bioSkills.json +22829 -440
  5. package/data/skill-index/Galaxy-Dawn_claude-scholar.json +2497 -49
  6. package/data/skill-index/Imbad0202_academic-research-skills.json +209 -5
  7. package/data/skill-index/K-Dense-AI_claude-scientific-skills.json +6969 -135
  8. package/data/skill-index/Leonxlnx_taste-skill.json +417 -9
  9. package/data/skill-index/Master-cai_Research-Paper-Writing-Skills.json +53 -2
  10. package/data/skill-index/MiniMax-AI_skills.json +1197 -24
  11. package/data/skill-index/affaan-m_everything-claude-code.json +23869 -460
  12. package/data/skill-index/alirezarezvani_claude-skills.json +26417 -509
  13. package/data/skill-index/anthropics_skills.json +937 -19
  14. package/data/skill-index/bytedance_deer-flow.json +1145 -23
  15. package/data/skill-index/coreyhaines31_marketingskills.json +1873 -37
  16. package/data/skill-index/github_awesome-copilot.json +22933 -442
  17. package/data/skill-index/heygen-com_hyperframes.json +261 -6
  18. package/data/skill-index/himself65_finance-skills.json +1093 -22
  19. package/data/skill-index/kemiljk_fluid-design.json +53 -2
  20. package/data/skill-index/kepano_obsidian-skills.json +261 -6
  21. package/data/skill-index/luongnv89_skills.json +1873 -37
  22. package/data/skill-index/mattpocock_skills.json +1093 -22
  23. package/data/skill-index/nextlevelbuilder_ui-ux-pro-max-skill.json +365 -8
  24. package/data/skill-index/obra_superpowers.json +729 -15
  25. package/data/skill-index/sickn33_antigravity-awesome-skills.json +230777 -4439
  26. package/data/skill-index/slavingia_skills.json +521 -11
  27. package/dist/agent-skill-manager.js +161 -161
  28. package/dist/chunk-796ss41d.js +15 -0
  29. package/dist/{chunk-1becp2v6.js → chunk-d61nf7gg.js} +1 -1
  30. package/dist/{chunk-a26gjzjk.js → chunk-vgzgtfy6.js} +1 -1
  31. package/dist/{chunk-x537ndd4.js → chunk-y89teqgt.js} +43 -42
  32. package/package.json +1 -1
  33. package/dist/chunk-6mbpytcj.js +0 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-skill-manager",
3
- "version": "2.1.0",
3
+ "version": "2.2.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": {
@@ -1,15 +0,0 @@
1
- import{O as T,U as D}from"./chunk-a26gjzjk.js";import{readdir as M,stat as W,lstat as zz,readlink as Fz,readFile as f,realpath as t}from"fs/promises";import{join as E,resolve as a,basename as Iz}from"path";import{homedir as g}from"os";function d(z){let Y={},$=z.split(`
2
- `),Z=!1,J=!1,X=null,L=[],H="none",Q=-1,U=null;function G(){if(X){let O=L.join(" ").trim();if(O)Y[X]=O;X=null,L=[],H="none",Q=-1}}for(let O of $){if(O.trim()==="---")if(!J){J=!0,Z=!0;continue}else{G();break}if(!Z)continue;if(H!=="none"&&X){let A=O.replace(/^\s*/,""),I=O.length-A.length;if(I>0&&A.length>0){if(Q===-1)Q=I;L.push(A);continue}else if(A.length===0)continue;else G()}if(U!==null){let A=O.match(/^\s+(\w[\w-]*):\s*(.*?)\s*$/);if(A){let I=A[1],_=A[2].replace(/^["']|["']$/g,"");if(_)Y[`${U}.${I}`]=_;continue}if(O.trim().length>0)U=null;else continue}let j=O.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(j){G();let A=j[1],I=j[2];if(I==="|"||I===">")X=A,L=[],H=I==="|"?"literal":"folded";else if(I==="|+"||I===">+"||I==="|-"||I===">-")X=A,L=[],H=I.startsWith("|")?"literal":"folded";else{let F=I.replace(/^["']|["']$/g,"");if(F)Y[A]=F;else U=A}}}return G(),Y}function n(z){return z["metadata.version"]||z.version||"0.0.0"}function o(z){let Y=z["allowed-tools"]||"";if(!Y.trim())return[];return Y.split(/[\s,]+/).map(($)=>$.trim()).filter(Boolean)}var _z=E(g(),".claude","plugins","marketplaces"),qz=E(g(),".codex","plugins","cache"),Tz=E(g(),".codex","config.toml"),JY=E(g(),".agents","plugins","marketplace.json");function Ez(z,Y){let $=[];for(let Z of z.providers){if(!Z.enabled){T(`scan: skipping disabled provider "${Z.name}"`);continue}if(Y==="global"||Y==="both"){let J=D(Z.global);T(`scan: adding location ${J} (${Z.label}, global)`),$.push({dir:J,location:`global-${Z.name}`,scope:"global",providerName:Z.name,providerLabel:Z.label})}if(Y==="project"||Y==="both"){let J=D(Z.project);T(`scan: adding location ${J} (${Z.label}, project)`),$.push({dir:J,location:`project-${Z.name}`,scope:"project",providerName:Z.name,providerLabel:Z.label})}}for(let Z of z.customPaths)if(Y===Z.scope||Y==="both"){let J=D(Z.path);T(`scan: adding custom location ${J} (${Z.label}, ${Z.scope})`),$.push({dir:J,location:`${Z.scope}-custom`,scope:Z.scope,providerName:"custom",providerLabel:Z.label})}return $}async function i(z){try{return(await M(z,{recursive:!0})).length}catch{return 0}}async function Nz(z){let Y=[];T(`scanning: ${z.dir} (${z.location})`);let $;try{$=await M(z.dir)}catch{return T(`scanning: ${z.dir} — not found, skipping`),Y}for(let Z of $){let J=E(z.dir,Z);try{if(!(await W(J)).isDirectory()){T(` skip: "${Z}" — not a directory`);continue}}catch{T(` skip: "${Z}" — stat failed`);continue}let X=E(J,"SKILL.md"),L;try{L=await f(X,"utf-8")}catch{T(` skip: "${Z}" — no SKILL.md`);continue}let H=d(L),Q=!1,U=null;try{if((await zz(J)).isSymbolicLink())Q=!0,U=await Fz(J)}catch{}let G=a(J),O;try{O=await t(J)}catch{O=G}Y.push({name:H.name||Z,version:n(H),description:(H.description||"").replace(/\s*\n\s*/g," ").trim(),creator:H["metadata.creator"]||"",license:(H.license||"").trim(),compatibility:(H.compatibility||"").trim(),allowedTools:o(H),effort:H.effort||H["metadata.effort"]||void 0,dirName:Z,path:G,originalPath:J,location:z.location,scope:z.scope,provider:z.providerName,providerLabel:z.providerLabel,isSymlink:Q,symlinkTarget:U,realPath:O})}return T(`found ${Y.length} skill(s) in ${z.dir}`),Y}async function Yz(z){let Y=[],$;try{$=await M(z)}catch{return Y}for(let Z of $){let J=E(z,Z),X;try{X=await zz(J)}catch{continue}if(X.isSymbolicLink())continue;if(X.isDirectory()){let L=E(J,"SKILL.md");try{await W(L),Y.push(J)}catch{let H=await Yz(J);Y.push(...H)}}}return Y}async function Rz(z){let Y=z??_z,$=[];T(`scan: checking plugin marketplaces at ${Y}`);let Z;try{Z=await M(Y)}catch{return T("scan: plugin marketplaces dir not found, skipping"),$}for(let J of Z){let X=E(Y,J),L;try{L=await W(X)}catch{continue}if(!L.isDirectory())continue;T(`scan: scanning marketplace "${J}"`);let H=await Yz(X);for(let Q of H){let U=E(Q,"SKILL.md"),G;try{G=await f(U,"utf-8")}catch{continue}let O=d(G),j=Iz(Q),A=a(Q),I;try{I=await t(Q)}catch{I=A}$.push({name:O.name||j,version:n(O),description:(O.description||"").replace(/\s*\n\s*/g," ").trim(),creator:O["metadata.creator"]||"",license:(O.license||"").trim(),compatibility:(O.compatibility||"").trim(),allowedTools:o(O),effort:O.effort||O["metadata.effort"]||void 0,dirName:j,path:A,originalPath:Q,location:`global-plugin-${J}`,scope:"global",provider:"plugin",providerLabel:`Plugin (${J})`,isSymlink:!1,symlinkTarget:null,realPath:I,marketplace:J})}}return T(`scan: found ${$.length} plugin marketplace skill(s)`),$}function Mz(z){let Y=new Map,$=null;for(let Z of z.split(`
3
- `)){let J=Z.trim(),X=J.match(/^\[plugins\.([^\]]+)\]$/);if(X){$=X[1].trim().replace(/^["']|["']$/g,"");continue}if(J.startsWith("[")){$=null;continue}if($&&J.startsWith("enabled")){let L=J.match(/^enabled\s*=\s*(true|false)/i);if(L)Y.set($,L[1].toLowerCase()==="true")}}return Y}async function Sz(z){let Y=z??Tz;try{let $=await f(Y,"utf-8");return Mz($)}catch{return T(`codex: config.toml not found at ${Y}, skipping enabled check`),new Map}}async function xz(z,Y){let $=z??qz,Z=[];T(`codex: checking plugin cache at ${$}`);let J;try{J=await M($)}catch{return T("codex: plugin cache dir not found, skipping"),Z}let X=await Sz(Y);for(let L of J){let H=E($,L),Q;try{Q=await W(H)}catch{continue}if(!Q.isDirectory())continue;let U;try{U=await M(H)}catch{continue}for(let G of U){let O=E(H,G),j;try{j=await W(O)}catch{continue}if(!j.isDirectory())continue;let A;try{A=await M(O)}catch{continue}let I=(await Promise.all(A.map(async(R)=>{try{return(await W(E(O,R))).isDirectory()?R:null}catch{return null}}))).filter((R)=>R!==null);if(I.length===0)continue;let F=I.sort(Zz).at(-1),_=E(O,F),S=E(_,".codex-plugin","plugin.json"),N;try{let R=await f(S,"utf-8");N=JSON.parse(R)}catch{T(`codex: no valid plugin.json at ${S}, skipping`);continue}let x=a(_),V;try{V=await t(_)}catch{V=x}let q=N.interface?.displayName||N.name||G,y=N.version||F,P=(N.description||"").replace(/\s*\n\s*/g," ").trim(),v=X.has(G)?X.get(G):!0;Z.push({name:q,version:y,description:P,creator:"",license:"",compatibility:"",allowedTools:[],dirName:G,path:x,originalPath:_,location:`global-codex-plugin-${L}`,scope:"global",provider:"codex-plugin",providerLabel:`Codex Plugin (${L})`,isSymlink:!1,symlinkTarget:null,realPath:V,marketplace:L,codexPlugin:{category:N.interface?.category,hasMcpConfig:N.mcp!=null&&Object.keys(N.mcp).length>0,pluginName:G,pluginVersion:F,enabled:v}})}}return T(`codex: found ${Z.length} plugin(s) in cache`),Z}async function XY(z,Y,$,Z){let J=Ez(z,Y),X=Y==="global"||Y==="both",[L,H,Q]=await Promise.all([Promise.all(J.map(Nz)),X?Rz($):Promise.resolve([]),X?xz(Z):Promise.resolve([])]),U=L.flat(),G=new Set(U.map((j)=>j.realPath)),O=new Set(U.map((j)=>j.name.toLowerCase()));for(let j of H)if(!G.has(j.realPath)&&!O.has(j.name.toLowerCase()))U.push(j),G.add(j.realPath),O.add(j.name.toLowerCase());for(let j of Q)if(!G.has(j.realPath)&&!O.has(j.name.toLowerCase()))U.push(j),G.add(j.realPath),O.add(j.name.toLowerCase());return U}function QY(z,Y){if(!Y.trim())return z;let $=Y.toLowerCase();return z.filter((Z)=>Z.name.toLowerCase().includes($)||Z.description.toLowerCase().includes($)||Z.creator.toLowerCase().includes($)||Z.effort&&Z.effort.toLowerCase().includes($)||Z.location.toLowerCase().includes($)||Z.providerLabel.toLowerCase().includes($))}function Zz(z,Y){let $=z.split("."),Z=Y.split("."),J=Math.max($.length,Z.length);for(let X=0;X<J;X++){let L=parseInt($[X]??"0",10),H=parseInt(Z[X]??"0",10);if(isNaN(L)||isNaN(H))return z.localeCompare(Y);if(L!==H)return L-H}return 0}function UY(z,Y){let $=[...z];switch(Y){case"name":$.sort((Z,J)=>Z.name.localeCompare(J.name));break;case"version":$.sort((Z,J)=>Zz(Z.version,J.version));break;case"location":$.sort((Z,J)=>Z.location.localeCompare(J.location));break}return $}import{rm as r,readFile as Jz,writeFile as Dz,access as Wz,lstat as wz,symlink as Cz}from"fs/promises";import{join as $z,resolve as w,dirname as Xz,relative as yz}from"path";import{homedir as Pz}from"os";var vz=Pz();function bz(z,Y){let $={directories:[],ruleFiles:[],agentsBlocks:[]};$.directories.push({path:z.originalPath,isSymlink:z.isSymlink});let Z=z.dirName;if(z.scope==="project")$.ruleFiles.push(w(".cursor","rules",`${Z}.mdc`),w(".windsurf","rules",`${Z}.md`),w(".github","instructions",`${Z}.instructions.md`)),$.agentsBlocks.push({file:w("AGENTS.md"),skillName:Z});if(z.scope==="global"){for(let L of Y.providers){if(!L.enabled)continue;let H=D(L.global),Q=$z(Xz(H),"AGENTS.md");$.agentsBlocks.push({file:Q,skillName:Z})}let J=$z(vz,".codex","AGENTS.md");if(!$.agentsBlocks.some((L)=>L.file===J))$.agentsBlocks.push({file:J,skillName:Z})}return $}function jY(z,Y,$){let Z=Y.filter((Q)=>Q.dirName===z);if(Z.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let J={directories:[],ruleFiles:[],agentsBlocks:[]},X=new Set,L=new Set,H=new Set;for(let Q of Z){let U=bz(Q,$);for(let G of U.directories)if(!X.has(G.path))X.add(G.path),J.directories.push(G);for(let G of U.ruleFiles)if(!L.has(G))L.add(G),J.ruleFiles.push(G);for(let G of U.agentsBlocks){let O=`${G.file}::${G.skillName}`;if(!H.has(O))H.add(O),J.agentsBlocks.push(G)}}return J}async function b(z){try{return await Wz(z),!0}catch{return!1}}async function hz(z,Y){if(!await b(z))return;let $=await Jz(z,"utf-8");for(let Z of["agent-skill-manager","skill-manager","pskills"]){let J=`<!-- ${Z}: ${Y} -->`,X=`<!-- /${Z}: ${Y} -->`,L=$.indexOf(J),H=$.indexOf(X);if(L===-1||H===-1)continue;let Q=L;if(Q>0&&$[Q-1]===`
4
- `)Q--;let G=H+X.length;if(G<$.length&&$[G]===`
5
- `)G++;$=$.slice(0,Q)+$.slice(G)}await Dz(z,$,"utf-8")}async function AY(z,Y){let $=[];for(let Z of z.directories)try{if(Z.isSymlink)await r(Z.path),$.push(`Removed symlink: ${Z.path}`);else await r(Z.path,{recursive:!0,force:!0}),$.push(`Removed directory: ${Z.path}`);if(Y&&w(Z.path)!==w(Y)){let J=Xz(Z.path),X=yz(J,Y);await Cz(X,Z.path,"dir"),$.push(`Created symlink: ${Z.path} -> ${X}`)}}catch(J){$.push(`Failed to remove ${Z.path}: ${J.message}`)}for(let Z of z.ruleFiles)if(await b(Z))try{await r(Z),$.push(`Removed rule file: ${Z}`)}catch(J){$.push(`Failed to remove ${Z}: ${J.message}`)}for(let Z of z.agentsBlocks)try{await hz(Z.file,Z.skillName),$.push(`Cleaned AGENTS.md block in: ${Z.file}`)}catch(J){$.push(`Failed to clean AGENTS.md block: ${J.message}`)}return $}async function KY(z){let Y=[];for(let $ of z.directories)if(await b($.path)){let J=(await wz($.path)).isSymbolicLink()?"symlink":"directory";Y.push(`${$.path} (${J})`)}for(let $ of z.ruleFiles)if(await b($))Y.push($);for(let $ of z.agentsBlocks)if(await b($.file)){let Z=await Jz($.file,"utf-8");if(Z.includes(`<!-- agent-skill-manager: ${$.skillName} -->`)||Z.includes(`<!-- skill-manager: ${$.skillName} -->`)||Z.includes(`<!-- pskills: ${$.skillName} -->`))Y.push(`${$.file} (AGENTS.md block)`)}return Y}var K=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},B={bold:(z)=>K()?`\x1B[1m${z}\x1B[0m`:z,cyan:(z)=>K()?`\x1B[36m${z}\x1B[0m`:z,green:(z)=>K()?`\x1B[32m${z}\x1B[0m`:z,yellow:(z)=>K()?`\x1B[33m${z}\x1B[0m`:z,dim:(z)=>K()?`\x1B[2m${z}\x1B[0m`:z,white:(z)=>K()?`\x1B[37m${z}\x1B[0m`:z,red:(z)=>K()?`\x1B[31m${z}\x1B[0m`:z,blue:(z)=>K()?`\x1B[34m${z}\x1B[0m`:z,blueBold:(z)=>K()?`\x1B[34;1m${z}\x1B[0m`:z,magenta:(z)=>K()?`\x1B[35m${z}\x1B[0m`:z,bgDim:(z)=>K()?`\x1B[48;5;236m${z}\x1B[0m`:z,bgRed:(z)=>K()?`\x1B[41m\x1B[37m\x1B[1m${z}\x1B[0m`:z,bgYellow:(z)=>K()?`\x1B[43m\x1B[30m\x1B[1m${z}\x1B[0m`:z,bgGreen:(z)=>K()?`\x1B[42m\x1B[30m\x1B[1m${z}\x1B[0m`:z,bgCyan:(z)=>K()?`\x1B[46m\x1B[30m\x1B[1m${z}\x1B[0m`:z};function k(z){if(!z)return"";switch(z.toLowerCase()){case"low":return B.green(z);case"medium":return B.yellow(z);case"high":return B.red(z);case"max":return B.magenta(z);default:return z}}var Qz={claude:B.blueBold,codex:B.cyan,"codex-plugin":B.cyan,openclaw:B.yellow,agents:B.green,custom:B.magenta,cursor:B.blue,windsurf:B.cyan,cline:B.green,roocode:B.magenta,continue:B.yellow,copilot:B.white,aider:B.red,opencode:B.cyan,zed:B.blue,augment:B.green,amp:B.yellow};function l(z,Y){return(Qz[z]||B.dim)(Y)}function s(z,Y){if(!K())return`[${Y}]`;return(Qz[z]||B.dim)(`[${Y}]`)}function C(z){let Y=process.env.HOME||process.env.USERPROFILE||"";if(Y&&z.startsWith(Y))return"~"+z.slice(Y.length);return z}function IY(z){if(z.length===0)return"No skills found.";let Y=["Name","Version","Creator","Effort","Tool","Scope","Type","Path"],$=z.map((Q)=>[Q.name,Q.version,Q.creator||"—",Q.effort||"—",Q.providerLabel,Q.scope,Q.isSymlink?"symlink":"directory",C(Q.path)]),Z=Y.map((Q,U)=>Math.max(Q.length,...$.map((G)=>G[U].length))),J=(Q,U)=>Q.padEnd(U),X=Y.map((Q,U)=>J(Q,Z[U])).join(" "),L=Z.map((Q)=>"-".repeat(Q)).join("--"),H=$.map((Q)=>Q.map((U,G)=>J(U,Z[G])).join(" "));return[K()?B.bold(X):X,L,...H].join(`
6
- `)}function Uz(z){let Y=new Map;for(let Z of z){let J=`${Z.dirName}||${Z.scope}`,X=Y.get(J)??[];X.push(Z),Y.set(J,X)}let $=[];for(let[,Z]of Y){let J=Z[0],X=new Set(Z.map((H)=>H.scope)),L=new Set(Z.map((H)=>H.isSymlink?"symlink":"directory"));$.push({name:J.name,version:J.version,creator:J.creator||"",effort:J.effort||"",providers:Z.map((H)=>({provider:H.provider,label:H.providerLabel})),scope:X.size>1?"mixed":J.scope,type:L.size>1?"mixed":J.isSymlink?"symlink":"directory",path:C(J.path),warningCount:Z.reduce((H,Q)=>H+(Q.warnings?.length??0),0)})}return $}function _Y(z){if(z.length===0)return"No skills found.";let Y=Uz(z),$=[],Z=Math.max(4,...Y.map((V)=>V.name.length)),J=Math.max(7,...Y.map((V)=>V.version.length)),X=Math.max(7,...Y.map((V)=>Math.min((V.creator||"—").length,15))),L=Math.max(6,...Y.map((V)=>(V.effort||"—").length)),H=7,Q=9,U=Y.map((V)=>V.providers.map((q)=>s(q.provider,q.label)).join(" ")),G=Y.map((V)=>V.providers.map((q)=>`[${q.label}]`).join(" ")),O=Math.max(9,...G.map((V)=>V.length)),j=(V,q)=>V.padEnd(q),A=`${j("Name",Z)} ${j("Version",J)} ${j("Creator",X)} ${j("Effort",L)} ${j("Tools",O)} ${j("Scope",H)} ${j("Type",Q)}`;$.push(K()?B.bold(A):A),$.push(`${"-".repeat(Z)} ${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(L)} ${"-".repeat(O)} ${"-".repeat(H)} ${"-".repeat(Q)}`);for(let V=0;V<Y.length;V++){let q=Y[V],y=j(q.name,Z),P=j(q.version,J),v=(q.creator||"—").slice(0,15),R=j(v,X),h=q.effort||"—",m=q.effort?k(q.effort):"—",c=L-h.length,u=m+" ".repeat(Math.max(0,c)),p=O-G[V].length,jz=U[V]+" ".repeat(Math.max(0,p)),Az=j(q.scope,H),Kz=j(q.type,Q),Vz=q.warningCount>0?` ${B.yellow(`(${q.warningCount} warning${q.warningCount>1?"s":""})`)}`:"";$.push(`${y} ${P} ${R} ${u} ${jz} ${Az} ${Kz}${Vz}`)}let I=Y.length,F=z.length,_=new Set(z.map((V)=>V.provider)),S=z.filter((V)=>V.scope==="global").length,N=z.filter((V)=>V.scope==="project").length;$.push("");let x=`${F} skills (${I} unique) across ${_.size} tools | ${S} global, ${N} project`;return $.push(B.dim(x)),$.join(`
7
- `)}function fz(z,Y){if(!K()||!Y)return z;let $=z.toLowerCase().indexOf(Y.toLowerCase());if($===-1)return z;let Z=z.slice(0,$),J=z.slice($,$+Y.length),X=z.slice($+Y.length);return`${Z}${B.bold(B.yellow(J))}${X}`}function qY(z,Y){if(z.length===0)return`No skills matching "${Y}". Try ${B.bold("asm list")} to see all skills.`;let $=Uz(z),Z=[];Z.push(B.dim(`Found ${z.length} result${z.length===1?"":"s"} (${$.length} unique) matching "${Y}"`)+`
8
- `);let J=Math.max(4,...$.map((F)=>F.name.length)),X=Math.max(7,...$.map((F)=>F.version.length)),L=Math.max(7,...$.map((F)=>Math.min((F.creator||"—").length,15))),H=Math.max(6,...$.map((F)=>(F.effort||"—").length)),Q=$.map((F)=>F.providers.map((_)=>s(_.provider,_.label)).join(" ")),U=$.map((F)=>F.providers.map((_)=>`[${_.label}]`).join(" ")),G=Math.max(9,...U.map((F)=>F.length)),O=7,j=9,A=(F,_)=>F.padEnd(_),I=`${A("Name",J)} ${A("Version",X)} ${A("Creator",L)} ${A("Effort",H)} ${A("Tools",G)} ${A("Scope",O)} ${A("Type",j)}`;Z.push(K()?B.bold(I):I),Z.push(`${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(L)} ${"-".repeat(H)} ${"-".repeat(G)} ${"-".repeat(O)} ${"-".repeat(j)}`);for(let F=0;F<$.length;F++){let _=$[F],S=fz(_.name,Y),N=J-_.name.length,x=S+" ".repeat(Math.max(0,N)),V=A(_.version,X),q=(_.creator||"—").slice(0,15),y=A(q,L),P=_.effort||"—",v=_.effort?k(_.effort):"—",R=H-P.length,h=v+" ".repeat(Math.max(0,R)),m=G-U[F].length,c=Q[F]+" ".repeat(Math.max(0,m)),u=A(_.scope,O),p=A(_.type,j);Z.push(`${x} ${V} ${y} ${h} ${c} ${u} ${p}`)}return Z.join(`
9
- `)}function TY(z,Y){if(z.length===0)return"";let $=[];$.push(B.dim(`Found ${z.length} available skill${z.length===1?"":"s"} matching "${Y}"`)+`
10
- `);for(let Z of z){$.push(` ${B.dim("To install:")} ${B.green(`asm install ${Z.installUrl}`)}`);let J=Z.verified?B.blue(" [verified]"):"";$.push(` ${B.cyan(Z.name)} ${B.dim(`v${Z.version}`)}${J} ${B.dim(`[${Z.repoLabel}]`)}`);for(let X of Lz(Z.description,76))$.push(` ${X}`);$.push("")}return $.join(`
11
- `)}var Gz=new Set(["Bash","Write","Edit","NotebookEdit"]),gz=new Set(["WebFetch","WebSearch"]);function kz(z){if(Gz.has(z))return B.red(z);if(gz.has(z))return B.yellow(z);return B.green(z)}function Bz(z){if(z.length===0)return"";return z.map(kz).join(" ")}function Hz(z){let Y=z.filter((Z)=>Gz.has(Z));if(Y.length===0)return null;let $=[];if(Y.includes("Bash"))$.push("execute shell commands");if(Y.includes("Write")||Y.includes("Edit")||Y.includes("NotebookEdit"))$.push("modify files");return`This skill can ${$.join(" and ")}`}async function mz(z){let Y=[],$=(J,X)=>`${K()?B.bold(J+":"):J+":"} ${X}`;if(Y.push($("Name",z.name)),Y.push($("Version",z.version)),Y.push($("Creator",z.creator||"—")),Y.push($("License",z.license||"—")),z.compatibility)Y.push($("Compatibility",z.compatibility));if(z.effort)Y.push($("Effort",k(z.effort)));if(Y.push($("Tool",z.providerLabel)),Y.push($("Scope",z.scope)),Y.push($("Location",z.location)),Y.push($("Path",C(z.path))),Y.push($("Type",z.isSymlink?"symlink":"directory")),z.isSymlink&&z.symlinkTarget)Y.push($("Symlink Target",z.symlinkTarget));let Z=z.fileCount??await i(z.path);if(Y.push($("File Count",String(Z))),z.description)Y.push(""),Y.push($("Description",z.description));if(z.allowedTools&&z.allowedTools.length>0){Y.push(""),Y.push(K()?B.bold("Allowed Tools:"):"Allowed Tools:"),Y.push(` ${Bz(z.allowedTools)}`);let J=Hz(z.allowedTools);if(J)Y.push(` ${K()?B.yellow("⚠"):"!"} ${J}`)}if(z.warnings&&z.warnings.length>0){Y.push(""),Y.push(K()?B.bold("Warnings:"):"Warnings:");for(let J of z.warnings)Y.push(` ${K()?B.yellow("!"):"!"} [${J.category}] ${J.message}`)}return Y.join(`
12
- `)}async function EY(z){if(z.length===0)return"No skills found.";if(z.length===1)return mz(z[0]);let Y=[],$=(U,G)=>`${K()?B.bold(U+":"):U+":"} ${G}`,Z=z[0],J=Z.name;if(Y.push(""),Y.push(K()?B.blueBold(` ${J}`):` ${J}`),Y.push(K()?B.dim(" "+"-".repeat(J.length+2)):" "+"-".repeat(J.length+2)),Y.push(""),Y.push($(" Version",Z.version)),Y.push($(" Creator",Z.creator||"—")),Y.push($(" License",Z.license||"—")),Z.compatibility)Y.push($(" Compatibility",Z.compatibility));if(Z.effort)Y.push($(" Effort",k(Z.effort)));let X=Z.fileCount??await i(Z.path);Y.push($(" File Count",String(X)));let L=z.map((U)=>s(U.provider,U.providerLabel)).join(" ");if(Y.push($(" Installed in",L)),Z.description){Y.push(""),Y.push(K()?B.bold(" Description:"):" Description:");let U=Lz(Z.description,72);for(let G of U)Y.push(" "+G)}if(Z.allowedTools&&Z.allowedTools.length>0){Y.push(""),Y.push(K()?B.bold(" Allowed Tools:"):" Allowed Tools:"),Y.push(` ${Bz(Z.allowedTools)}`);let U=Hz(Z.allowedTools);if(U)Y.push(` ${K()?B.yellow("⚠"):"!"} ${U}`)}Y.push("");let H=` Installations (${z.length})`;Y.push(K()?B.bold(H):H);for(let U=0;U<z.length;U++){let G=z[U],O=l(G.provider,G.providerLabel),j=G.isSymlink?"symlink":"directory",A=B.dim(G.scope);if(Y.push(` ${O} (${A}, ${j})`),Y.push(` ${B.dim("Path:")} ${C(G.path)}`),G.isSymlink&&G.symlinkTarget)Y.push(` ${B.dim("Target:")} ${G.symlinkTarget}`)}let Q=z.flatMap((U)=>{if(!U.warnings||U.warnings.length===0)return[];return U.warnings.map((G)=>({...G,provider:U.providerLabel}))});if(Q.length>0){Y.push("");let U=` Warnings (${Q.length})`;Y.push(K()?B.bold(U):U);for(let G of Q){let O=K()?B.yellow("!"):"!";Y.push(` ${O} [${G.category}] ${G.message}`)}}return Y.push(""),Y.join(`
13
- `)}function Lz(z,Y){let $=z.split(/\s+/),Z=[],J="";for(let X of $)if(J.length+X.length+1>Y&&J.length>0)Z.push(J),J=X;else J=J?J+" "+X:X;if(J)Z.push(J);return Z}function NY(z){return JSON.stringify(z,null,2)}function SY(z){let Y=[],$=new Set,Z=new Map,J=[];for(let Q of z){let U=Z.get(Q.realPath);if(U){if(Q.isSymlink)continue;if(U.isSymlink)J[J.indexOf(U)]=Q,Z.set(Q.realPath,Q);else J.push(Q)}else Z.set(Q.realPath,Q),J.push(Q)}let X=new Map;for(let Q of J){let U=X.get(Q.dirName)??[];U.push(Q),X.set(Q.dirName,U)}for(let[Q,U]of X)if(new Set(U.map((O)=>O.location)).size>=2){Y.push({key:Q,reason:"same-dirName",instances:U});for(let O of U)$.add(O.path)}let L=new Map;for(let Q of J){if(!Q.name)continue;let U=L.get(Q.name)??[];U.push(Q),L.set(Q.name,U)}for(let[Q,U]of L){if(new Set(U.map((A)=>A.dirName)).size<2)continue;let O=U.filter((A)=>!$.has(A.path));if(O.length<2)continue;if(new Set(O.map((A)=>A.dirName)).size<2)continue;Y.push({key:Q,reason:"same-frontmatterName",instances:O})}Y.sort((Q,U)=>{if(Q.reason!==U.reason)return Q.reason==="same-dirName"?-1:1;return Q.key.localeCompare(U.key)});let H=Y.reduce((Q,U)=>Q+U.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:z.length,duplicateGroups:Y,totalDuplicateInstances:H}}function cz(z){return[...z].sort((Y,$)=>{if(Y.scope!==$.scope)return Y.scope==="global"?-1:1;let Z=Y.providerLabel.localeCompare($.providerLabel);if(Z!==0)return Z;return Y.path.localeCompare($.path)})}function uz(z){return z==="same-dirName"?"same dirName":"same name"}function xY(z){if(z.duplicateGroups.length===0)return B.green("No duplicate skills found.");let Y=[];Y.push(""),Y.push(B.bold(` Found ${z.duplicateGroups.length} duplicate group(s) (${z.totalDuplicateInstances} total instances):`)),Y.push("");for(let $ of z.duplicateGroups){Y.push(` ${B.yellow(`"${$.key}"`)} ${B.dim(`(${uz($.reason)})`)}`);let Z=cz($.instances);for(let J=0;J<Z.length;J++){let X=Z[J],L=l(X.provider,X.providerLabel),H=J===0?B.green(" [keep]"):B.dim(" "),Q=B.dim(`(${X.scope})`);Y.push(` ${H} ${L} ${Q} ${B.dim(C(X.path))}`)}Y.push("")}return Y.push(B.dim(` Run ${B.bold("asm audit -y")} to auto-remove duplicates`)),Y.push(""),Y.join(`
14
- `)}function DY(z){return JSON.stringify(z,null,2)}function wY(z){let Y=z.trim();if(!Y)return["vi",[]];let $=[],Z="",J=!1,X=0;while(X<Y.length){let L=Y[X];if(L==='"'){J=!0,X++;while(X<Y.length&&Y[X]!=='"'){if(Y[X]==="\\"&&X+1<Y.length){let H=Y[X+1];if(H==='"'||H==="\\"){Z+=H,X+=2;continue}}Z+=Y[X],X++}X++}else if(L==="'"){J=!0,X++;while(X<Y.length&&Y[X]!=="'")Z+=Y[X],X++;X++}else if(L===" "||L==="\t"){if(Z.length>0||J)$.push(Z),Z="",J=!1;X++}else Z+=L,X++}if(Z.length>0||J)$.push(Z);if($.length===0)return["vi",[]];return[$[0],$.slice(1)]}import{readFileSync as pz}from"fs";import{resolve as dz,dirname as nz}from"path";import{fileURLToPath as oz}from"url";import{execSync as tz}from"child_process";var az=nz(oz(import.meta.url)),Oz="2.1.0";try{let z=pz(dz(az,"../../package.json"),"utf-8");Oz=JSON.parse(z).version}catch{}var e="bc495a4";try{e=tz("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||e}catch{}var iz=Oz,rz=e,hY=`v${iz} (${rz})`;
15
- export{d as e,n as f,o as g,i as h,XY as i,QY as j,UY as k,bz as l,jY as m,AY as n,KY as o,B as p,k as q,l as r,C as s,IY as t,_Y as u,qY as v,TY as w,Gz as x,gz as y,EY as z,Lz as A,NY as B,SY as C,cz as D,uz as E,xY as F,DY as G,iz as H,hY as I,wY as J};