agent-skill-manager 1.17.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.
Files changed (34) hide show
  1. package/README.md +171 -45
  2. package/data/skill-index/Affitor_affiliate-skills.json +1 -1
  3. package/data/skill-index/Eronred_aso-skills.json +1 -1
  4. package/data/skill-index/GPTomics_bioSkills.json +26 -2
  5. package/data/skill-index/Galaxy-Dawn_claude-scholar.json +1 -1
  6. package/data/skill-index/Imbad0202_academic-research-skills.json +57 -0
  7. package/data/skill-index/K-Dense-AI_claude-scientific-skills.json +165 -9
  8. package/data/skill-index/Leonxlnx_taste-skill.json +1 -1
  9. package/data/skill-index/Master-cai_Research-Paper-Writing-Skills.json +1 -1
  10. package/data/skill-index/MiniMax-AI_skills.json +50 -2
  11. package/data/skill-index/affaan-m_everything-claude-code.json +1 -1
  12. package/data/skill-index/alirezarezvani_claude-skills.json +5421 -0
  13. package/data/skill-index/anthropics_skills.json +1 -1
  14. package/data/skill-index/bytedance_deer-flow.json +2 -2
  15. package/data/skill-index/coreyhaines31_marketingskills.json +1 -1
  16. package/data/skill-index/github_awesome-copilot.json +99 -3
  17. package/data/skill-index/himself65_finance-skills.json +3 -3
  18. package/data/skill-index/kemiljk_fluid-design.json +1 -1
  19. package/data/skill-index/kepano_obsidian-skills.json +1 -1
  20. package/data/skill-index/luongnv89_skills.json +37 -37
  21. package/data/skill-index/mattpocock_skills.json +14 -2
  22. package/data/skill-index/nextlevelbuilder_ui-ux-pro-max-skill.json +1 -1
  23. package/data/skill-index/obra_superpowers.json +1 -1
  24. package/data/skill-index/sickn33_antigravity-awesome-skills.json +223 -7
  25. package/data/skill-index/slavingia_skills.json +14 -2
  26. package/data/skill-index-resources.json +19 -1
  27. package/dist/agent-skill-manager.js +442 -283
  28. package/dist/chunk-2qybtcgb.js +3 -0
  29. package/dist/chunk-b38qq69j.js +3 -0
  30. package/dist/chunk-jexzjtx5.js +15 -0
  31. package/dist/{chunk-n7f2ekqj.js → chunk-w4et4kfd.js} +1 -1
  32. package/package.json +2 -2
  33. package/dist/chunk-75kgtp8z.js +0 -14
  34. package/dist/chunk-t6myftbf.js +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-skill-manager",
3
- "version": "1.17.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{J as V,P as K}from"./chunk-t6myftbf.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.17.0";try{let $=v$(W$(f$,"../../package.json"),"utf-8");A$=JSON.parse($).version}catch{}var u="a89f7a8";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 a,t as b,o as c,g as d,n$ as e,a$ as f,r$ as g,M$ as h,LL as i,SL as j,jL as k,Z as l,R as m,p as n,q as o,XL as p,YL as q,ZL as r,JL as s,$$ as t,P$ as u,BL as v,j$ as w,GL as x,NL as y,C$ as z,x$ as A,IL as B,DL as C,qL as D,FL as E};
@@ -1,3 +0,0 @@
1
- import{createRequire as E}from"node:module";var S=Object.create;var{getPrototypeOf:U,defineProperty:Z,getOwnPropertyNames:j}=Object;var v=Object.prototype.hasOwnProperty;var C=(x,$,b)=>{b=x!=null?S(U(x)):{};let q=$||!x||!x.__esModule?Z(b,"default",{value:x,enumerable:!0}):b;for(let V of j(x))if(!v.call(q,V))Z(q,V,{get:()=>x[V],enumerable:!0});return q};var _=(x,$)=>()=>($||x(($={exports:{}}).exports,$),$.exports);var u=E(import.meta.url);import{readFile as W,writeFile as k,mkdir as s,copyFile as R}from"fs/promises";import{join as B,resolve as Y,dirname as A}from"path";import{fileURLToPath as o}from"url";import{homedir as H}from"os";var K=!1,L=0;function h(x){if(K=x,x)L=performance.now()}function z(x){if(!K)return;let $=Math.round(performance.now()-L),q=globalThis.__CLI_NO_COLOR?`[verbose] +${$}ms`:`\x1B[2m[verbose] +${$}ms\x1B[0m`;console.error(`${q} ${x}`)}var n=o(import.meta.url),X=A(n),w=H(),J=B(w,".config","agent-skill-manager"),y=B(J,"config.json"),G=B(J,".skill-lock.json"),m=B(J,"skill-index"),D=[{name:"claude",label:"Claude Code",global:"~/.claude/skills",project:".claude/skills",enabled:!0},{name:"agents",label:"Agents",global:"~/.agents/skills",project:".agents/skills",enabled:!0},{name:"codex",label:"Codex",global:"~/.codex/skills",project:".codex/skills",enabled:!0},{name:"opencode",label:"OpenCode",global:"~/.config/opencode/skills",project:".opencode/skills",enabled:!0},{name:"openclaw",label:"OpenClaw",global:"~/.openclaw/skills",project:".openclaw/skills",enabled:!0},{name:"cursor",label:"Cursor",global:"~/.cursor/rules",project:".cursor/rules",enabled:!0},{name:"copilot",label:"GitHub Copilot",global:"~/.github/instructions",project:".github/instructions",enabled:!0},{name:"windsurf",label:"Windsurf",global:"~/.windsurf/rules",project:".windsurf/rules",enabled:!0},{name:"antigravity",label:"Google Antigravity",global:"~/.antigravity/skills",project:".antigravity/skills",enabled:!0},{name:"gemini",label:"Gemini CLI",global:"~/.gemini/skills",project:".gemini/skills",enabled:!0},{name:"cline",label:"Cline",global:"~/Documents/Cline/Rules",project:".clinerules",enabled:!0},{name:"roocode",label:"Roo Code",global:"~/.roo/rules",project:".roo/rules",enabled:!0},{name:"continue",label:"Continue",global:"~/.continue/rules",project:".continue/rules",enabled:!0},{name:"aider",label:"Aider",global:"~/.aider/skills",project:".aider/skills",enabled:!0},{name:"zed",label:"Zed",global:"~/.config/zed/prompt_overrides",project:".zed/rules",enabled:!0},{name:"augment",label:"Augment",global:"~/.augment/rules",project:".augment/rules",enabled:!0},{name:"amp",label:"Amp",global:"~/.amp/skills",project:".amp/skills",enabled:!0}];function Q(){return{version:1,providers:D.map((x)=>({...x})),customPaths:[],preferences:{defaultScope:"both",defaultSort:"name"}}}function f(){return y}function p(){return G}function t(){return m}function g(){return Y(X,"..","data","skill-index")}function N(){return Y(X,"..","data","skill-index-resources.json")}async function i(){let x=N(),$=await W(x,"utf-8");return JSON.parse($)}function a(x){if(x.startsWith("~/"))return B(w,x.slice(2));if(x.startsWith("/"))return x;return Y(x)}function O(x){let $=Q(),b=x.providers||[],q=new Set(b.map((V)=>V.name));for(let V of $.providers)if(!q.has(V.name))b.push({...V});return{version:x.version??$.version,providers:b,customPaths:x.customPaths??[],preferences:{defaultScope:x.preferences?.defaultScope??$.preferences.defaultScope,defaultSort:x.preferences?.defaultSort??$.preferences.defaultSort}}}async function e(){z(`config: checking ${y}`);let x;try{x=await W(y,"utf-8")}catch($){if($?.code==="ENOENT"){z("config: using defaults (file not found)");let b=Q();return await M(b),b}throw $}try{let $=JSON.parse(x);return z(`config: loaded from ${y}`),O($)}catch{let $=y+".bak";z(`config: parse error, backing up to ${$}`),await R(y,$),console.error(`Warning: Config file was corrupted. Backup saved to ${$}. Using defaults.`);let b=Q();return await M(b),b}}async function M(x){await s(J,{recursive:!0}),await k(y,JSON.stringify(x,null,2)+`
2
- `,"utf-8")}export{M as saveConfig,a as resolveProviderPath,i as loadSkillIndexResources,e as loadConfig,N as getSkillIndexResourcesPath,p as getLockPath,t as getIndexDir,Q as getDefaultConfig,f as getConfigPath,g as getBundledIndexDir};
3
- export{C as F,_ as G,u as H,h as I,z as J,Q as K,f as L,p as M,t as N,g as O,a as P,e as Q,M as R};