agent-skill-manager 2.0.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 (34) hide show
  1. package/README.md +2 -2
  2. package/data/skill-index/Affitor_affiliate-skills.json +2813 -50
  3. package/data/skill-index/Eronred_aso-skills.json +1561 -31
  4. package/data/skill-index/GPTomics_bioSkills.json +22988 -443
  5. package/data/skill-index/Galaxy-Dawn_claude-scholar.json +2509 -49
  6. package/data/skill-index/Imbad0202_academic-research-skills.json +223 -19
  7. package/data/skill-index/K-Dense-AI_claude-scientific-skills.json +7015 -697
  8. package/data/skill-index/Leonxlnx_taste-skill.json +429 -9
  9. package/data/skill-index/Master-cai_Research-Paper-Writing-Skills.json +53 -2
  10. package/data/skill-index/MiniMax-AI_skills.json +1291 -22
  11. package/data/skill-index/affaan-m_everything-claude-code.json +27501 -780
  12. package/data/skill-index/alirezarezvani_claude-skills.json +27045 -453
  13. package/data/skill-index/anthropics_skills.json +938 -20
  14. package/data/skill-index/bytedance_deer-flow.json +1201 -19
  15. package/data/skill-index/coreyhaines31_marketingskills.json +1913 -41
  16. package/data/skill-index/github_awesome-copilot.json +25089 -354
  17. package/data/skill-index/heygen-com_hyperframes.json +324 -0
  18. package/data/skill-index/himself65_finance-skills.json +1254 -27
  19. package/data/skill-index/kemiljk_fluid-design.json +53 -2
  20. package/data/skill-index/kepano_obsidian-skills.json +262 -7
  21. package/data/skill-index/luongnv89_skills.json +1917 -69
  22. package/data/skill-index/mattpocock_skills.json +1157 -50
  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 +270593 -6809
  26. package/data/skill-index/slavingia_skills.json +521 -11
  27. package/data/skill-index-resources.json +10 -1
  28. package/dist/agent-skill-manager.js +161 -161
  29. package/dist/chunk-796ss41d.js +15 -0
  30. package/dist/{chunk-1becp2v6.js → chunk-d61nf7gg.js} +1 -1
  31. package/dist/{chunk-a26gjzjk.js → chunk-vgzgtfy6.js} +1 -1
  32. package/dist/{chunk-2kpv20e1.js → chunk-y89teqgt.js} +43 -42
  33. package/package.json +1 -1
  34. package/dist/chunk-b5czdh0p.js +0 -15
@@ -0,0 +1,15 @@
1
+ import{Q as N,W}from"./chunk-vgzgtfy6.js";import{readdir as T,stat as x,lstat as Zz,readlink as Tz,readFile as g,realpath as i}from"fs/promises";import{join as E,resolve as r,basename as Sz}from"path";import{homedir as m}from"os";function n(z){let Y={},$=z.split(`
2
+ `),Z=!1,J=!1,X=null,L=[],H="none",U=-1,Q=null;function B(){if(X){let O=L.join(" ").trim();if(O)Y[X]=O;X=null,L=[],H="none",U=-1}}for(let O of $){if(O.trim()==="---")if(!J){J=!0,Z=!0;continue}else{B();break}if(!Z)continue;if(H!=="none"&&X){let j=O.replace(/^\s*/,""),A=O.length-j.length;if(A>0&&j.length>0){if(U===-1)U=A;L.push(j);continue}else if(j.length===0)continue;else B()}if(Q!==null){let j=O.match(/^\s+(\w[\w-]*):\s*(.*?)\s*$/);if(j){let A=j[1],_=j[2].replace(/^["']|["']$/g,"");if(_)Y[`${Q}.${A}`]=_;continue}if(O.trim().length>0)Q=null;else continue}let V=O.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(V){B();let j=V[1],A=V[2];if(A==="|"||A===">")X=j,L=[],H=A==="|"?"literal":"folded";else if(A==="|+"||A===">+"||A==="|-"||A===">-")X=j,L=[],H=A.startsWith("|")?"literal":"folded";else{let F=A.replace(/^["']|["']$/g,"");if(F)Y[j]=F;else Q=j}}}return B(),Y}function o(z){return z["metadata.version"]||z.version||"0.0.0"}function t(z){let Y=z["allowed-tools"]||"";if(!Y.trim())return[];return Y.split(/[\s,]+/).map(($)=>$.trim()).filter(Boolean)}function a(z){if(!z)return 0;let Y=z.split(/\s+/).map((Z)=>Z.trim()).filter(Boolean).length,$=0;for(let Z=0;Z<z.length;Z++)if(z.charCodeAt(Z)===32)$++;return Y+$}function f(z){if(!Number.isFinite(z)||z<0)return"~0 tokens";if(z<1000)return`~${z} tokens`;if(z<1e4)return`~${(z/1000).toFixed(1).replace(/\.0$/,"")}k tokens`;return`~${Math.round(z/1000)}k tokens`}var Dz=E(m(),".claude","plugins","marketplaces"),Wz=E(m(),".codex","plugins","cache"),xz=E(m(),".codex","config.toml"),KY=E(m(),".agents","plugins","marketplace.json");function wz(z,Y){let $=[];for(let Z of z.providers){if(!Z.enabled){N(`scan: skipping disabled provider "${Z.name}"`);continue}if(Y==="global"||Y==="both"){let J=W(Z.global);N(`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=W(Z.project);N(`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=W(Z.path);N(`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 l(z){try{return(await T(z,{recursive:!0})).length}catch{return 0}}async function Cz(z){let Y=[];N(`scanning: ${z.dir} (${z.location})`);let $;try{$=await T(z.dir)}catch{return N(`scanning: ${z.dir} — not found, skipping`),Y}for(let Z of $){let J=E(z.dir,Z);try{if(!(await x(J)).isDirectory()){N(` skip: "${Z}" — not a directory`);continue}}catch{N(` skip: "${Z}" — stat failed`);continue}let X=E(J,"SKILL.md"),L;try{L=await g(X,"utf-8")}catch{N(` skip: "${Z}" — no SKILL.md`);continue}let H=n(L),U=!1,Q=null;try{if((await Zz(J)).isSymbolicLink())U=!0,Q=await Tz(J)}catch{}let B=r(J),O;try{O=await i(J)}catch{O=B}Y.push({name:H.name||Z,version:o(H),description:(H.description||"").replace(/\s*\n\s*/g," ").trim(),creator:H["metadata.creator"]||"",license:(H.license||"").trim(),compatibility:(H.compatibility||"").trim(),allowedTools:t(H),effort:H.effort||H["metadata.effort"]||void 0,dirName:Z,path:B,originalPath:J,location:z.location,scope:z.scope,provider:z.providerName,providerLabel:z.providerLabel,isSymlink:U,symlinkTarget:Q,realPath:O,tokenCount:a(L)})}return N(`found ${Y.length} skill(s) in ${z.dir}`),Y}async function $z(z){let Y=[],$;try{$=await T(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 x(L),Y.push(J)}catch{let H=await $z(J);Y.push(...H)}}}return Y}async function Pz(z){let Y=z??Dz,$=[];N(`scan: checking plugin marketplaces at ${Y}`);let Z;try{Z=await T(Y)}catch{return N("scan: plugin marketplaces dir not found, skipping"),$}for(let J of Z){let X=E(Y,J),L;try{L=await x(X)}catch{continue}if(!L.isDirectory())continue;N(`scan: scanning marketplace "${J}"`);let H=await $z(X);for(let U of H){let Q=E(U,"SKILL.md"),B;try{B=await g(Q,"utf-8")}catch{continue}let O=n(B),V=Sz(U),j=r(U),A;try{A=await i(U)}catch{A=j}$.push({name:O.name||V,version:o(O),description:(O.description||"").replace(/\s*\n\s*/g," ").trim(),creator:O["metadata.creator"]||"",license:(O.license||"").trim(),compatibility:(O.compatibility||"").trim(),allowedTools:t(O),effort:O.effort||O["metadata.effort"]||void 0,dirName:V,path:j,originalPath:U,location:`global-plugin-${J}`,scope:"global",provider:"plugin",providerLabel:`Plugin (${J})`,isSymlink:!1,symlinkTarget:null,realPath:A,marketplace:J,tokenCount:a(B)})}}return N(`scan: found ${$.length} plugin marketplace skill(s)`),$}function yz(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 bz(z){let Y=z??xz;try{let $=await g(Y,"utf-8");return yz($)}catch{return N(`codex: config.toml not found at ${Y}, skipping enabled check`),new Map}}async function vz(z,Y){let $=z??Wz,Z=[];N(`codex: checking plugin cache at ${$}`);let J;try{J=await T($)}catch{return N("codex: plugin cache dir not found, skipping"),Z}let X=await bz(Y);for(let L of J){let H=E($,L),U;try{U=await x(H)}catch{continue}if(!U.isDirectory())continue;let Q;try{Q=await T(H)}catch{continue}for(let B of Q){let O=E(H,B),V;try{V=await x(O)}catch{continue}if(!V.isDirectory())continue;let j;try{j=await T(O)}catch{continue}let A=(await Promise.all(j.map(async(q)=>{try{return(await x(E(O,q))).isDirectory()?q:null}catch{return null}}))).filter((q)=>q!==null);if(A.length===0)continue;let F=A.sort(Jz).at(-1),_=E(O,F),S=E(_,".codex-plugin","plugin.json"),R;try{let q=await g(S,"utf-8");R=JSON.parse(q)}catch{N(`codex: no valid plugin.json at ${S}, skipping`);continue}let D=r(_),M;try{M=await i(_)}catch{M=D}let P=R.interface?.displayName||R.name||B,y=R.version||F,b=(R.description||"").replace(/\s*\n\s*/g," ").trim(),I=X.has(B)?X.get(B):!0;Z.push({name:P,version:y,description:b,creator:"",license:"",compatibility:"",allowedTools:[],dirName:B,path:D,originalPath:_,location:`global-codex-plugin-${L}`,scope:"global",provider:"codex-plugin",providerLabel:`Codex Plugin (${L})`,isSymlink:!1,symlinkTarget:null,realPath:M,marketplace:L,codexPlugin:{category:R.interface?.category,hasMcpConfig:R.mcp!=null&&Object.keys(R.mcp).length>0,pluginName:B,pluginVersion:F,enabled:I}})}}return N(`codex: found ${Z.length} plugin(s) in cache`),Z}async function VY(z,Y,$,Z){let J=wz(z,Y),X=Y==="global"||Y==="both",[L,H,U]=await Promise.all([Promise.all(J.map(Cz)),X?Pz($):Promise.resolve([]),X?vz(Z):Promise.resolve([])]),Q=L.flat(),B=new Set(Q.map((V)=>V.realPath)),O=new Set(Q.map((V)=>V.name.toLowerCase()));for(let V of H)if(!B.has(V.realPath)&&!O.has(V.name.toLowerCase()))Q.push(V),B.add(V.realPath),O.add(V.name.toLowerCase());for(let V of U)if(!B.has(V.realPath)&&!O.has(V.name.toLowerCase()))Q.push(V),B.add(V.realPath),O.add(V.name.toLowerCase());return Q}function AY(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 Jz(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 IY(z,Y){let $=[...z];switch(Y){case"name":$.sort((Z,J)=>Z.name.localeCompare(J.name));break;case"version":$.sort((Z,J)=>Jz(Z.version,J.version));break;case"location":$.sort((Z,J)=>Z.location.localeCompare(J.location));break}return $}import{rm as s,readFile as Qz,writeFile as hz,access as fz,lstat as gz,symlink as mz}from"fs/promises";import{join as Xz,resolve as w,dirname as Uz,relative as kz}from"path";import{homedir as pz}from"os";var uz=pz();function cz(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=W(L.global),U=Xz(Uz(H),"AGENTS.md");$.agentsBlocks.push({file:U,skillName:Z})}let J=Xz(uz,".codex","AGENTS.md");if(!$.agentsBlocks.some((L)=>L.file===J))$.agentsBlocks.push({file:J,skillName:Z})}return $}function RY(z,Y,$){let Z=Y.filter((U)=>U.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 U of Z){let Q=cz(U,$);for(let B of Q.directories)if(!X.has(B.path))X.add(B.path),J.directories.push(B);for(let B of Q.ruleFiles)if(!L.has(B))L.add(B),J.ruleFiles.push(B);for(let B of Q.agentsBlocks){let O=`${B.file}::${B.skillName}`;if(!H.has(O))H.add(O),J.agentsBlocks.push(B)}}return J}async function v(z){try{return await fz(z),!0}catch{return!1}}async function dz(z,Y){if(!await v(z))return;let $=await Qz(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 U=L;if(U>0&&$[U-1]===`
4
+ `)U--;let B=H+X.length;if(B<$.length&&$[B]===`
5
+ `)B++;$=$.slice(0,U)+$.slice(B)}await hz(z,$,"utf-8")}async function MY(z,Y){let $=[];for(let Z of z.directories)try{if(Z.isSymlink)await s(Z.path),$.push(`Removed symlink: ${Z.path}`);else await s(Z.path,{recursive:!0,force:!0}),$.push(`Removed directory: ${Z.path}`);if(Y&&w(Z.path)!==w(Y)){let J=Uz(Z.path),X=kz(J,Y);await mz(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 v(Z))try{await s(Z),$.push(`Removed rule file: ${Z}`)}catch(J){$.push(`Failed to remove ${Z}: ${J.message}`)}for(let Z of z.agentsBlocks)try{await dz(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 TY(z){let Y=[];for(let $ of z.directories)if(await v($.path)){let J=(await gz($.path)).isSymbolicLink()?"symlink":"directory";Y.push(`${$.path} (${J})`)}for(let $ of z.ruleFiles)if(await v($))Y.push($);for(let $ of z.agentsBlocks)if(await v($.file)){let Z=await Qz($.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},G={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 G.green(z);case"medium":return G.yellow(z);case"high":return G.red(z);case"max":return G.magenta(z);default:return z}}var Gz={claude:G.blueBold,codex:G.cyan,"codex-plugin":G.cyan,openclaw:G.yellow,agents:G.green,custom:G.magenta,cursor:G.blue,windsurf:G.cyan,cline:G.green,roocode:G.magenta,continue:G.yellow,copilot:G.white,aider:G.red,opencode:G.cyan,zed:G.blue,augment:G.green,amp:G.yellow};function e(z,Y){return(Gz[z]||G.dim)(Y)}function zz(z,Y){if(!K())return`[${Y}]`;return(Gz[z]||G.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 xY(z){if(z.length===0)return"No skills found.";let Y=["Name","Version","Creator","Effort","Tool","Scope","Type","Path"],$=z.map((U)=>[U.name,U.version,U.creator||"—",U.effort||"—",U.providerLabel,U.scope,U.isSymlink?"symlink":"directory",C(U.path)]),Z=Y.map((U,Q)=>Math.max(U.length,...$.map((B)=>B[Q].length))),J=(U,Q)=>U.padEnd(Q),X=Y.map((U,Q)=>J(U,Z[Q])).join(" "),L=Z.map((U)=>"-".repeat(U)).join("--"),H=$.map((U)=>U.map((Q,B)=>J(Q,Z[B])).join(" "));return[K()?G.bold(X):X,L,...H].join(`
6
+ `)}function Bz(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||"",tokens:typeof J.tokenCount==="number"?f(J.tokenCount):"",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,U)=>H+(U.warnings?.length??0),0)})}return $}function wY(z){if(z.length===0)return"No skills found.";let Y=Bz(z),$=[],Z=Math.max(4,...Y.map((I)=>I.name.length)),J=Math.max(7,...Y.map((I)=>I.version.length)),X=Math.max(7,...Y.map((I)=>Math.min((I.creator||"—").length,15))),L=Math.max(6,...Y.map((I)=>(I.effort||"—").length)),H=Y.some((I)=>I.tokens.length>0),U=H?Math.max(6,...Y.map((I)=>(I.tokens||"—").length)):0,Q=7,B=9,O=Y.map((I)=>I.providers.map((q)=>zz(q.provider,q.label)).join(" ")),V=Y.map((I)=>I.providers.map((q)=>`[${q.label}]`).join(" ")),j=Math.max(9,...V.map((I)=>I.length)),A=(I,q)=>I.padEnd(q),F=H?` ${A("Tokens",U)}`:"",_=`${A("Name",Z)} ${A("Version",J)} ${A("Creator",X)} ${A("Effort",L)}${F} ${A("Tools",j)} ${A("Scope",Q)} ${A("Type",B)}`;$.push(K()?G.bold(_):_);let S=H?` ${"-".repeat(U)}`:"";$.push(`${"-".repeat(Z)} ${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(L)}${S} ${"-".repeat(j)} ${"-".repeat(Q)} ${"-".repeat(B)}`);for(let I=0;I<Y.length;I++){let q=Y[I],h=A(q.name,Z),p=A(q.version,J),u=(q.creator||"—").slice(0,15),c=A(u,X),d=q.effort||"—",Az=q.effort?k(q.effort):"—",Iz=L-d.length,Fz=Az+" ".repeat(Math.max(0,Iz)),qz=H?` ${A(q.tokens||"—",U)}`:"",_z=j-V[I].length,Nz=O[I]+" ".repeat(Math.max(0,_z)),Ez=A(q.scope,Q),Rz=A(q.type,B),Mz=q.warningCount>0?` ${G.yellow(`(${q.warningCount} warning${q.warningCount>1?"s":""})`)}`:"";$.push(`${h} ${p} ${c} ${Fz}${qz} ${Nz} ${Ez} ${Rz}${Mz}`)}let R=Y.length,D=z.length,M=new Set(z.map((I)=>I.provider)),P=z.filter((I)=>I.scope==="global").length,y=z.filter((I)=>I.scope==="project").length;$.push("");let b=`${D} skills (${R} unique) across ${M.size} tools | ${P} global, ${y} project`;return $.push(G.dim(b)),$.join(`
7
+ `)}function nz(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}${G.bold(G.yellow(J))}${X}`}function CY(z,Y){if(z.length===0)return`No skills matching "${Y}". Try ${G.bold("asm list")} to see all skills.`;let $=Bz(z),Z=[];Z.push(G.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)),U=$.map((F)=>F.providers.map((_)=>zz(_.provider,_.label)).join(" ")),Q=$.map((F)=>F.providers.map((_)=>`[${_.label}]`).join(" ")),B=Math.max(9,...Q.map((F)=>F.length)),O=7,V=9,j=(F,_)=>F.padEnd(_),A=`${j("Name",J)} ${j("Version",X)} ${j("Creator",L)} ${j("Effort",H)} ${j("Tools",B)} ${j("Scope",O)} ${j("Type",V)}`;Z.push(K()?G.bold(A):A),Z.push(`${"-".repeat(J)} ${"-".repeat(X)} ${"-".repeat(L)} ${"-".repeat(H)} ${"-".repeat(B)} ${"-".repeat(O)} ${"-".repeat(V)}`);for(let F=0;F<$.length;F++){let _=$[F],S=nz(_.name,Y),R=J-_.name.length,D=S+" ".repeat(Math.max(0,R)),M=j(_.version,X),P=(_.creator||"—").slice(0,15),y=j(P,L),b=_.effort||"—",I=_.effort?k(_.effort):"—",q=H-b.length,h=I+" ".repeat(Math.max(0,q)),p=B-Q[F].length,u=U[F]+" ".repeat(Math.max(0,p)),c=j(_.scope,O),d=j(_.type,V);Z.push(`${D} ${M} ${y} ${h} ${u} ${c} ${d}`)}return Z.join(`
9
+ `)}function PY(z,Y){if(z.length===0)return"";let $=[];$.push(G.dim(`Found ${z.length} available skill${z.length===1?"":"s"} matching "${Y}"`)+`
10
+ `);for(let Z of z){$.push(` ${G.dim("To install:")} ${G.green(`asm install ${Z.installUrl}`)}`);let J=Z.verified?G.blue(" [verified]"):"";$.push(` ${G.cyan(Z.name)} ${G.dim(`v${Z.version}`)}${J} ${G.dim(`[${Z.repoLabel}]`)}`);for(let X of Kz(Z.description,76))$.push(` ${X}`);$.push("")}return $.join(`
11
+ `)}var Hz=new Set(["Bash","Write","Edit","NotebookEdit"]),oz=new Set(["WebFetch","WebSearch"]);function tz(z){if(Hz.has(z))return G.red(z);if(oz.has(z))return G.yellow(z);return G.green(z)}function Lz(z){if(z.length===0)return"";return z.map(tz).join(" ")}function Oz(z){let Y=z.filter((Z)=>Hz.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 az(z){let Y=[],$=(J,X)=>`${K()?G.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 l(z.path);if(Y.push($("File Count",String(Z))),typeof z.tokenCount==="number")Y.push($("Est. Tokens",f(z.tokenCount)));if(z.description)Y.push(""),Y.push($("Description",z.description));if(z.allowedTools&&z.allowedTools.length>0){Y.push(""),Y.push(K()?G.bold("Allowed Tools:"):"Allowed Tools:"),Y.push(` ${Lz(z.allowedTools)}`);let J=Oz(z.allowedTools);if(J)Y.push(` ${K()?G.yellow("⚠"):"!"} ${J}`)}if(Y.push(""),Y.push(K()?G.bold("Eval Score:"):"Eval Score:"),z.evalSummary){let J=z.evalSummary,X=jz(J.overallScore);Y.push(` Overall: ${X} / 100 (${J.grade})`);let L=J.evaluatedVersion?` — version ${J.evaluatedVersion}`:"";if(Y.push(` ${K()?G.dim("Evaluated:"):"Evaluated:"} ${J.evaluatedAt}${L}`),J.categories.length>0){Y.push(K()?G.dim(" Categories:"):" Categories:");for(let H of J.categories)Y.push(` ${H.name.padEnd(28)} ${H.score}/${H.max}`)}}else Y.push(K()?G.dim(" Not available — run `asm eval "+z.path+"` to generate one."):" Not available — run `asm eval "+z.path+"` to generate one.");if(z.warnings&&z.warnings.length>0){Y.push(""),Y.push(K()?G.bold("Warnings:"):"Warnings:");for(let J of z.warnings)Y.push(` ${K()?G.yellow("!"):"!"} [${J.category}] ${J.message}`)}return Y.join(`
12
+ `)}function jz(z){let Y=String(z);if(!K())return Y;if(z>=90)return G.green(Y);if(z>=80)return G.cyan(Y);if(z>=65)return G.yellow(Y);return G.red(Y)}async function yY(z){if(z.length===0)return"No skills found.";if(z.length===1)return az(z[0]);let Y=[],$=(Q,B)=>`${K()?G.bold(Q+":"):Q+":"} ${B}`,Z=z[0],J=Z.name;if(Y.push(""),Y.push(K()?G.blueBold(` ${J}`):` ${J}`),Y.push(K()?G.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 l(Z.path);if(Y.push($(" File Count",String(X))),typeof Z.tokenCount==="number")Y.push($(" Est. Tokens",f(Z.tokenCount)));let L=z.map((Q)=>zz(Q.provider,Q.providerLabel)).join(" ");if(Y.push($(" Installed in",L)),Y.push(""),Y.push(K()?G.bold(" Eval Score:"):" Eval Score:"),Z.evalSummary){let Q=Z.evalSummary,B=jz(Q.overallScore);Y.push(` Overall: ${B} / 100 (${Q.grade})`);let O=Q.evaluatedVersion?` — version ${Q.evaluatedVersion}`:"";if(Y.push(` ${K()?G.dim("Evaluated:"):"Evaluated:"} ${Q.evaluatedAt}${O}`),Q.categories.length>0)for(let V of Q.categories)Y.push(` ${V.name.padEnd(28)} ${V.score}/${V.max}`)}else Y.push(K()?G.dim(` Not available — run \`asm eval ${Z.path}\` to generate one.`):` Not available — run \`asm eval ${Z.path}\` to generate one.`);if(Z.description){Y.push(""),Y.push(K()?G.bold(" Description:"):" Description:");let Q=Kz(Z.description,72);for(let B of Q)Y.push(" "+B)}if(Z.allowedTools&&Z.allowedTools.length>0){Y.push(""),Y.push(K()?G.bold(" Allowed Tools:"):" Allowed Tools:"),Y.push(` ${Lz(Z.allowedTools)}`);let Q=Oz(Z.allowedTools);if(Q)Y.push(` ${K()?G.yellow("⚠"):"!"} ${Q}`)}Y.push("");let H=` Installations (${z.length})`;Y.push(K()?G.bold(H):H);for(let Q=0;Q<z.length;Q++){let B=z[Q],O=e(B.provider,B.providerLabel),V=B.isSymlink?"symlink":"directory",j=G.dim(B.scope);if(Y.push(` ${O} (${j}, ${V})`),Y.push(` ${G.dim("Path:")} ${C(B.path)}`),B.isSymlink&&B.symlinkTarget)Y.push(` ${G.dim("Target:")} ${B.symlinkTarget}`)}let U=z.flatMap((Q)=>{if(!Q.warnings||Q.warnings.length===0)return[];return Q.warnings.map((B)=>({...B,provider:Q.providerLabel}))});if(U.length>0){Y.push("");let Q=` Warnings (${U.length})`;Y.push(K()?G.bold(Q):Q);for(let B of U){let O=K()?G.yellow("!"):"!";Y.push(` ${O} [${B.category}] ${B.message}`)}}return Y.push(""),Y.join(`
13
+ `)}function Kz(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 bY(z){return JSON.stringify(z,null,2)}function fY(z){let Y=[],$=new Set,Z=new Map,J=[];for(let U of z){let Q=Z.get(U.realPath);if(Q){if(U.isSymlink)continue;if(Q.isSymlink)J[J.indexOf(Q)]=U,Z.set(U.realPath,U);else J.push(U)}else Z.set(U.realPath,U),J.push(U)}let X=new Map;for(let U of J){let Q=X.get(U.dirName)??[];Q.push(U),X.set(U.dirName,Q)}for(let[U,Q]of X)if(new Set(Q.map((O)=>O.location)).size>=2){Y.push({key:U,reason:"same-dirName",instances:Q});for(let O of Q)$.add(O.path)}let L=new Map;for(let U of J){if(!U.name)continue;let Q=L.get(U.name)??[];Q.push(U),L.set(U.name,Q)}for(let[U,Q]of L){if(new Set(Q.map((j)=>j.dirName)).size<2)continue;let O=Q.filter((j)=>!$.has(j.path));if(O.length<2)continue;if(new Set(O.map((j)=>j.dirName)).size<2)continue;Y.push({key:U,reason:"same-frontmatterName",instances:O})}Y.sort((U,Q)=>{if(U.reason!==Q.reason)return U.reason==="same-dirName"?-1:1;return U.key.localeCompare(Q.key)});let H=Y.reduce((U,Q)=>U+Q.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:z.length,duplicateGroups:Y,totalDuplicateInstances:H}}function iz(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 rz(z){return z==="same-dirName"?"same dirName":"same name"}function gY(z){if(z.duplicateGroups.length===0)return G.green("No duplicate skills found.");let Y=[];Y.push(""),Y.push(G.bold(` Found ${z.duplicateGroups.length} duplicate group(s) (${z.totalDuplicateInstances} total instances):`)),Y.push("");for(let $ of z.duplicateGroups){Y.push(` ${G.yellow(`"${$.key}"`)} ${G.dim(`(${rz($.reason)})`)}`);let Z=iz($.instances);for(let J=0;J<Z.length;J++){let X=Z[J],L=e(X.provider,X.providerLabel),H=J===0?G.green(" [keep]"):G.dim(" "),U=G.dim(`(${X.scope})`);Y.push(` ${H} ${L} ${U} ${G.dim(C(X.path))}`)}Y.push("")}return Y.push(G.dim(` Run ${G.bold("asm audit -y")} to auto-remove duplicates`)),Y.push(""),Y.join(`
14
+ `)}function mY(z){return JSON.stringify(z,null,2)}function pY(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 lz}from"fs";import{resolve as sz,dirname as ez}from"path";import{fileURLToPath as zY}from"url";import{execSync as YY}from"child_process";var ZY=ez(zY(import.meta.url)),Vz="2.2.0";try{let z=lz(sz(ZY,"../../package.json"),"utf-8");Vz=JSON.parse(z).version}catch{}var Yz="8e0e2aa";try{Yz=YY("git rev-parse --short HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim()||Yz}catch{}var $Y=Vz,JY=Yz,tY=`v${$Y} (${JY})`;
15
+ export{n as e,o as f,t as g,a as h,f as i,l as j,VY as k,AY as l,IY as m,cz as n,RY as o,MY as p,TY as q,G as r,k as s,e as t,C as u,xY as v,wY as w,CY as x,PY as y,Hz as z,oz as A,yY as B,Kz as C,bY as D,fY as E,iz as F,rz as G,gY as H,mY as I,$Y as J,tY as K,pY as L};
@@ -1,3 +1,3 @@
1
- import{O as z,R as B}from"./chunk-a26gjzjk.js";import{readFile as J,writeFile as K,mkdir as M,copyFile as N}from"fs/promises";import{execFile as O}from"child_process";import{promisify as Q}from"util";import{dirname as R}from"path";var S=Q(O);function G(){return{version:1,skills:{}}}async function H(){let j=B(),v;try{v=await J(j,"utf-8")}catch(q){if(q?.code==="ENOENT")return z("lock: file not found, returning empty lock"),G();throw q}try{let q=JSON.parse(v);if(q.version!==1||typeof q.skills!=="object"||q.skills===null)throw Error("invalid schema");return z(`lock: loaded ${Object.keys(q.skills).length} entries`),q}catch{let q=j+".bak";z(`lock: parse error, backing up to ${q}`);try{await N(j,q)}catch{}return console.error(`Warning: .skill-lock.json was corrupted. Backup saved to ${q}. Starting fresh.`),G()}}async function Z(j,v){let q=await H();q.skills[j]=v,await I(q),z(`lock: wrote entry for "${j}"`)}async function $(j){let v=await H();if(!(j in v.skills)){z(`lock: no entry for "${j}", nothing to remove`);return}delete v.skills[j],await I(v),z(`lock: removed entry for "${j}"`)}async function I(j){let v=B();await M(R(v),{recursive:!0}),await K(v,JSON.stringify(j,null,2)+`
1
+ import{Q as z,T as B}from"./chunk-vgzgtfy6.js";import{readFile as J,writeFile as K,mkdir as M,copyFile as N}from"fs/promises";import{execFile as O}from"child_process";import{promisify as Q}from"util";import{dirname as R}from"path";var S=Q(O);function G(){return{version:1,skills:{}}}async function H(){let j=B(),v;try{v=await J(j,"utf-8")}catch(q){if(q?.code==="ENOENT")return z("lock: file not found, returning empty lock"),G();throw q}try{let q=JSON.parse(v);if(q.version!==1||typeof q.skills!=="object"||q.skills===null)throw Error("invalid schema");return z(`lock: loaded ${Object.keys(q.skills).length} entries`),q}catch{let q=j+".bak";z(`lock: parse error, backing up to ${q}`);try{await N(j,q)}catch{}return console.error(`Warning: .skill-lock.json was corrupted. Backup saved to ${q}. Starting fresh.`),G()}}async function Z(j,v){let q=await H();q.skills[j]=v,await I(q),z(`lock: wrote entry for "${j}"`)}async function $(j){let v=await H();if(!(j in v.skills)){z(`lock: no entry for "${j}", nothing to remove`);return}delete v.skills[j],await I(v),z(`lock: removed entry for "${j}"`)}async function I(j){let v=B();await M(R(v),{recursive:!0}),await K(v,JSON.stringify(j,null,2)+`
2
2
  `,"utf-8")}async function A(j){try{let{stdout:v}=await S("git",["rev-parse","HEAD"],{cwd:j,timeout:5000});return v.trim()||null}catch{return z("lock: could not read commit hash from cloned repo"),null}}export{Z as writeLockEntry,$ as removeLockEntry,H as readLock,A as getCommitHash};
3
3
  export{H as a,Z as b,$ as c,A as d};
@@ -1,3 +1,3 @@
1
1
  import{createRequire as k}from"node:module";var S=Object.create;var{getPrototypeOf:U,defineProperty:K,getOwnPropertyNames:j}=Object;var E=Object.prototype.hasOwnProperty;var F=(x,$,b)=>{b=x!=null?S(U(x)):{};let q=$||!x||!x.__esModule?K(b,"default",{value:x,enumerable:!0}):b;for(let V of j(x))if(!E.call(q,V))K(q,V,{get:()=>x[V],enumerable:!0});return q};var h=(x,$)=>()=>($||x(($={exports:{}}).exports,$),$.exports);var I=k(import.meta.url);import{readFile as W,writeFile as v,mkdir as R,copyFile as A}from"fs/promises";import{join as B,resolve as Z,dirname as s}from"path";import{fileURLToPath as H}from"url";import{homedir as G}from"os";var L=!1,M=0;function T(x){if(L=x,x)M=performance.now()}function z(x){if(!L)return;let $=Math.round(performance.now()-M),q=globalThis.__CLI_NO_COLOR?`[verbose] +${$}ms`:`\x1B[2m[verbose] +${$}ms\x1B[0m`;console.error(`${q} ${x}`)}var D=H(import.meta.url),X=s(D),w=G(),J=B(w,".config","agent-skill-manager"),y=B(J,"config.json"),O=B(J,".skill-lock.json"),m=B(J,"skill-index"),N=[{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:"hermes",label:"Hermes",global:"~/.hermes/skills",project:".hermes/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:N.map((x)=>({...x})),customPaths:[],preferences:{defaultScope:"both",defaultSort:"name"}}}function t(){return y}function f(){return O}function g(){return m}function i(){return Z(X,"..","data","skill-index")}function _(){return Z(X,"..","data","skill-index-resources.json")}async function a(){let x=_(),$=await W(x,"utf-8");return JSON.parse($)}function e(x){if(x.startsWith("~/"))return B(w,x.slice(2));if(x.startsWith("/"))return x;return Z(x)}function u(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,selectedTools:x.preferences?.selectedTools}}}async function C(){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 Y(b),b}throw $}try{let $=JSON.parse(x);return z(`config: loaded from ${y}`),u($)}catch{let $=y+".bak";z(`config: parse error, backing up to ${$}`),await A(y,$),console.error(`Warning: Config file was corrupted. Backup saved to ${$}. Using defaults.`);let b=Q();return await Y(b),b}}async function Y(x){await R(J,{recursive:!0}),await v(y,JSON.stringify(x,null,2)+`
2
2
  `,"utf-8")}async function xx(x){let $=await C();$.preferences.selectedTools=x,await Y($)}export{xx as saveSelectedTools,Y as saveConfig,e as resolveProviderPath,a as loadSkillIndexResources,C as loadConfig,_ as getSkillIndexResourcesPath,f as getLockPath,g as getIndexDir,Q as getDefaultConfig,t as getConfigPath,i as getBundledIndexDir};
3
- export{F as K,h as L,I as M,T as N,z as O,Q as P,t as Q,f as R,g as S,i as T,e as U,C as V,Y as W};
3
+ export{F as M,h as N,I as O,T as P,z as Q,Q as R,t as S,f as T,g as U,i as V,e as W,C as X,Y};