agent-skill-manager 1.3.0 → 1.4.1

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.
@@ -0,0 +1,9 @@
1
+ import{createRequire as n}from"node:module";var N=Object.create;var{getPrototypeOf:F,defineProperty:H,getOwnPropertyNames:b}=Object;var h=Object.prototype.hasOwnProperty;var Co=(o,c,$)=>{$=o!=null?N(F(o)):{};let L=c||!o||!o.__esModule?H($,"default",{value:o,enumerable:!0}):$;for(let S of b(o))if(!h.call(L,S))H(L,S,{get:()=>o[S],enumerable:!0});return L};var Ho=n(import.meta.url);import{readFile as p,writeFile as g,mkdir as r}from"fs/promises";import{join as G,resolve as m}from"path";import{homedir as u}from"os";var R=!1,I=0;function Io(o){if(R=o,o)I=performance.now()}function B(o){if(!R)return;let c=Math.round(performance.now()-I),L=globalThis.__CLI_NO_COLOR?`[verbose] +${c}ms`:`\x1B[2m[verbose] +${c}ms\x1B[0m`;console.error(`${L} ${o}`)}var O=u(),P=G(O,".config","agent-skill-manager"),y=G(P,"config.json"),k=[{name:"claude",label:"Claude Code",global:"~/.claude/skills",project:".claude/skills",enabled:!0},{name:"codex",label:"Codex",global:"~/.codex/skills",project:".codex/skills",enabled:!0},{name:"openclaw",label:"OpenClaw",global:"~/.openclaw/skills",project:".openclaw/skills",enabled:!0},{name:"agents",label:"Agents",global:"~/.agents/skills",project:".agents/skills",enabled:!0}];function _(){return{version:1,providers:k.map((o)=>({...o})),customPaths:[],preferences:{defaultScope:"both",defaultSort:"name"}}}function Vo(){return y}function v(o){if(o.startsWith("~/"))return G(O,o.slice(2));if(o.startsWith("/"))return o;return m(o)}function d(o){let c=_(),$=o.providers||[],L=new Set($.map((S)=>S.name));for(let S of c.providers)if(!L.has(S.name))$.push({...S});return{version:o.version??c.version,providers:$,customPaths:o.customPaths??[],preferences:{defaultScope:o.preferences?.defaultScope??c.preferences.defaultScope,defaultSort:o.preferences?.defaultSort??c.preferences.defaultSort}}}async function Eo(){B(`config: checking ${y}`);try{let o=await p(y,"utf-8"),c=JSON.parse(o);return B(`config: loaded from ${y}`),d(c)}catch{B("config: using defaults (file not found or invalid)");let o=_();return await a(o),o}}async function a(o){await r(P,{recursive:!0}),await g(y,JSON.stringify(o,null,2)+`
2
+ `,"utf-8")}import{readdir as M,stat as i,lstat as s,readlink as l,readFile as e,realpath as oo}from"fs/promises";import{join as x,resolve as $o}from"path";function D(o){let c={},$=o.split(`
3
+ `),L=!1,S=!1,Y=null,X=[],Z="none",j=-1;function z(){if(Y){let Q=X.join(" ").trim();if(Q)c[Y]=Q;Y=null,X=[],Z="none",j=-1}}for(let Q of $){if(Q.trim()==="---")if(!S){S=!0,L=!0;continue}else{z();break}if(!L)continue;if(Z!=="none"&&Y){let J=Q.replace(/^\s*/,""),q=Q.length-J.length;if(q>0&&J.length>0){if(j===-1)j=q;X.push(J);continue}else if(J.length===0)continue;else z()}let t=Q.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(t){z();let J=t[1],q=t[2];if(q==="|"||q===">")Y=J,X=[],Z=q==="|"?"literal":"folded";else if(q==="|+"||q===">+"||q==="|-"||q===">-")Y=J,X=[],Z=q.startsWith("|")?"literal":"folded";else{let K=q.replace(/^["']|["']$/g,"");if(K)c[J]=K}}}return z(),c}function co(o,c){let $=[];for(let L of o.providers){if(!L.enabled){B(`scan: skipping disabled provider "${L.name}"`);continue}if(c==="global"||c==="both"){let S=v(L.global);B(`scan: adding location ${S} (${L.label}, global)`),$.push({dir:S,location:`global-${L.name}`,scope:"global",providerName:L.name,providerLabel:L.label})}if(c==="project"||c==="both"){let S=v(L.project);B(`scan: adding location ${S} (${L.label}, project)`),$.push({dir:S,location:`project-${L.name}`,scope:"project",providerName:L.name,providerLabel:L.label})}}for(let L of o.customPaths)if(c===L.scope||c==="both"){let S=v(L.path);B(`scan: adding custom location ${S} (${L.label}, ${L.scope})`),$.push({dir:S,location:`${L.scope}-custom`,scope:L.scope,providerName:"custom",providerLabel:L.label})}return $}async function Lo(o){try{return(await M(o,{recursive:!0})).length}catch{return 0}}async function So(o){let c=[];B(`scanning: ${o.dir} (${o.location})`);let $;try{$=await M(o.dir)}catch{return B(`scanning: ${o.dir} — not found, skipping`),c}for(let L of $){let S=x(o.dir,L);try{if(!(await i(S)).isDirectory()){B(` skip: "${L}" — not a directory`);continue}}catch{B(` skip: "${L}" — stat failed`);continue}let Y=x(S,"SKILL.md"),X;try{X=await e(Y,"utf-8")}catch{B(` skip: "${L}" — no SKILL.md`);continue}let Z=D(X),j=!1,z=null;try{if((await s(S)).isSymbolicLink())j=!0,z=await l(S)}catch{}let Q=$o(S),t;try{t=await oo(S)}catch{t=Q}let J=await Lo(S);c.push({name:Z.name||L,version:Z.version||"0.0.0",description:(Z.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:L,path:Q,originalPath:S,location:o.location,scope:o.scope,provider:o.providerName,providerLabel:o.providerLabel,isSymlink:j,symlinkTarget:z,realPath:t,fileCount:J})}return B(`found ${c.length} skill(s) in ${o.dir}`),c}async function go(o,c){let $=co(o,c);return(await Promise.all($.map(So))).flat()}function ro(o,c){if(!c.trim())return o;let $=c.toLowerCase();return o.filter((L)=>L.name.toLowerCase().includes($)||L.description.toLowerCase().includes($)||L.location.toLowerCase().includes($)||L.providerLabel.toLowerCase().includes($))}function mo(o,c){let $=[...o];switch(c){case"name":$.sort((L,S)=>L.name.localeCompare(S.name));break;case"version":$.sort((L,S)=>L.version.localeCompare(S.version));break;case"location":$.sort((L,S)=>L.location.localeCompare(S.location));break}return $}import{rm as w,readFile as E,writeFile as jo,access as zo,lstat as Qo}from"fs/promises";import{join as V,resolve as A,dirname as Xo}from"path";import{homedir as Yo}from"os";var Zo=Yo();function qo(o,c){let $={directories:[],ruleFiles:[],agentsBlocks:[]};$.directories.push({path:o.originalPath,isSymlink:o.isSymlink});let L=o.dirName;if(o.scope==="project")$.ruleFiles.push(A(".cursor","rules",`${L}.mdc`),A(".windsurf","rules",`${L}.md`),A(".github","instructions",`${L}.instructions.md`)),$.agentsBlocks.push({file:A("AGENTS.md"),skillName:L});if(o.scope==="global"){for(let X of c.providers){if(!X.enabled)continue;let Z=v(X.global),j=V(Xo(Z),"AGENTS.md");$.agentsBlocks.push({file:j,skillName:L})}let S=V(Zo,".codex","AGENTS.md");if(!$.agentsBlocks.some((X)=>X.file===S))$.agentsBlocks.push({file:S,skillName:L})}return $}function lo(o,c,$){let L=c.filter((j)=>j.dirName===o);if(L.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let S={directories:[],ruleFiles:[],agentsBlocks:[]},Y=new Set,X=new Set,Z=new Set;for(let j of L){let z=qo(j,$);for(let Q of z.directories)if(!Y.has(Q.path))Y.add(Q.path),S.directories.push(Q);for(let Q of z.ruleFiles)if(!X.has(Q))X.add(Q),S.ruleFiles.push(Q);for(let Q of z.agentsBlocks){let t=`${Q.file}::${Q.skillName}`;if(!Z.has(t))Z.add(t),S.agentsBlocks.push(Q)}}return S}async function f(o){try{return await zo(o),!0}catch{return!1}}async function to(o,c){if(!await f(o))return;let $=await E(o,"utf-8");for(let L of["agent-skill-manager","skill-manager","pskills"]){let S=`<!-- ${L}: ${c} -->`,Y=`<!-- /${L}: ${c} -->`,X=$.indexOf(S),Z=$.indexOf(Y);if(X===-1||Z===-1)continue;let j=X;if(j>0&&$[j-1]===`
4
+ `)j--;let Q=Z+Y.length;if(Q<$.length&&$[Q]===`
5
+ `)Q++;$=$.slice(0,j)+$.slice(Q)}await jo(o,$,"utf-8")}async function eo(o){let c=[];for(let $ of o.directories)try{if($.isSymlink)await w($.path),c.push(`Removed symlink: ${$.path}`);else await w($.path,{recursive:!0,force:!0}),c.push(`Removed directory: ${$.path}`)}catch(L){c.push(`Failed to remove ${$.path}: ${L.message}`)}for(let $ of o.ruleFiles)if(await f($))try{await w($),c.push(`Removed rule file: ${$}`)}catch(L){c.push(`Failed to remove ${$}: ${L.message}`)}for(let $ of o.agentsBlocks)try{await to($.file,$.skillName),c.push(`Cleaned AGENTS.md block in: ${$.file}`)}catch(L){c.push(`Failed to clean AGENTS.md block: ${L.message}`)}return c}async function o$(o){let c=[];for(let $ of o.directories)if(await f($.path)){let S=(await Qo($.path)).isSymbolicLink()?"symlink":"directory";c.push(`${$.path} (${S})`)}for(let $ of o.ruleFiles)if(await f($))c.push($);for(let $ of o.agentsBlocks)if(await f($.file)){let L=await E($.file,"utf-8");if(L.includes(`<!-- agent-skill-manager: ${$.skillName} -->`)||L.includes(`<!-- skill-manager: ${$.skillName} -->`)||L.includes(`<!-- pskills: ${$.skillName} -->`))c.push(`${$.file} (AGENTS.md block)`)}return c}var W=()=>{if(process.env.NO_COLOR!==void 0)return!1;if(globalThis.__CLI_NO_COLOR)return!1;if(!process.stdout.isTTY)return!1;return!0},U={bold:(o)=>W()?`\x1B[1m${o}\x1B[0m`:o,cyan:(o)=>W()?`\x1B[36m${o}\x1B[0m`:o,green:(o)=>W()?`\x1B[32m${o}\x1B[0m`:o,yellow:(o)=>W()?`\x1B[33m${o}\x1B[0m`:o,dim:(o)=>W()?`\x1B[2m${o}\x1B[0m`:o,red:(o)=>W()?`\x1B[31m${o}\x1B[0m`:o,blueBold:(o)=>W()?`\x1B[1m\x1B[34m${o}\x1B[0m`:o};function c$(o){if(o.length===0)return"No skills found.";let c=["Name","Version","Provider","Scope","Type","Path"],$=o.map((j)=>[j.name,j.version,j.providerLabel,j.scope,j.isSymlink?"symlink":"directory",j.path]),L=c.map((j,z)=>Math.max(j.length,...$.map((Q)=>Q[z].length))),S=(j,z)=>j.padEnd(z),Y=c.map((j,z)=>S(j,L[z])).join(" "),X=L.map((j)=>"─".repeat(j)).join("──"),Z=$.map((j)=>j.map((z,Q)=>S(z,L[Q])).join(" "));return[W()?U.bold(Y):Y,X,...Z].join(`
6
+ `)}function L$(o){let c=[],$=(L,S)=>`${W()?U.bold(L+":"):L+":"} ${S}`;if(c.push($("Name",o.name)),c.push($("Version",o.version)),c.push($("Provider",o.providerLabel)),c.push($("Scope",o.scope)),c.push($("Location",o.location)),c.push($("Path",o.path)),c.push($("Type",o.isSymlink?"symlink":"directory")),o.isSymlink&&o.symlinkTarget)c.push($("Symlink Target",o.symlinkTarget));if(c.push($("File Count",String(o.fileCount))),o.description)c.push(""),c.push($("Description",o.description));return c.join(`
7
+ `)}function S$(o){return JSON.stringify(o,null,2)}function Q$(o){let c=[],$=new Set,L=new Map,S=[];for(let j of o){let z=L.get(j.realPath);if(z){if(j.isSymlink)continue;if(z.isSymlink)S[S.indexOf(z)]=j,L.set(j.realPath,j);else S.push(j)}else L.set(j.realPath,j),S.push(j)}let Y=new Map;for(let j of S){let z=Y.get(j.dirName)??[];z.push(j),Y.set(j.dirName,z)}for(let[j,z]of Y)if(new Set(z.map((t)=>t.location)).size>=2){c.push({key:j,reason:"same-dirName",instances:z});for(let t of z)$.add(t.path)}let X=new Map;for(let j of S){if(!j.name)continue;let z=X.get(j.name)??[];z.push(j),X.set(j.name,z)}for(let[j,z]of X){if(new Set(z.map((q)=>q.dirName)).size<2)continue;let t=z.filter((q)=>!$.has(q.path));if(t.length<2)continue;if(new Set(t.map((q)=>q.dirName)).size<2)continue;c.push({key:j,reason:"same-frontmatterName",instances:t})}c.sort((j,z)=>{if(j.reason!==z.reason)return j.reason==="same-dirName"?-1:1;return j.key.localeCompare(z.key)});let Z=c.reduce((j,z)=>j+z.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:o.length,duplicateGroups:c,totalDuplicateInstances:Z}}function Bo(o){return[...o].sort((c,$)=>{if(c.scope!==$.scope)return c.scope==="global"?-1:1;let L=c.providerLabel.localeCompare($.providerLabel);if(L!==0)return L;return c.path.localeCompare($.path)})}function Jo(o){return o==="same-dirName"?"same dirName":"same name"}function X$(o){if(o.duplicateGroups.length===0)return U.green("No duplicate skills found.");let c=[];c.push(U.bold(`Found ${o.duplicateGroups.length} duplicate group(s) (${o.totalDuplicateInstances} total instances):`)),c.push("");for(let $ of o.duplicateGroups){c.push(U.yellow(` Group: "${$.key}" (${Jo($.reason)})`));let L=Bo($.instances);for(let S=0;S<L.length;S++){let Y=L[S],X=S===0?U.green(" (recommended keep)"):"";c.push(` ${U.dim("•")} ${Y.path} [${Y.providerLabel}/${Y.scope}]${X}`)}c.push("")}return c.join(`
8
+ `)}function Y$(o){return JSON.stringify(o,null,2)}import{readFileSync as Wo}from"fs";import{resolve as Uo,dirname as vo}from"path";import{fileURLToPath as yo}from"url";import{execSync as fo}from"child_process";var Ao=vo(yo(import.meta.url)),T="1.3.0";try{let o=Wo(Uo(Ao,"../../package.json"),"utf-8");T=JSON.parse(o).version}catch{}var C="3691585";try{C=fo("git rev-parse --short HEAD",{encoding:"utf-8"}).trim()||C}catch{}var Go=T,wo=C,W$=`v${Go} (${wo})`;
9
+ export{Co as a,Ho as b,Io as c,B as d,_ as e,Vo as f,v as g,Eo as h,a as i,D as j,go as k,ro as l,mo as m,qo as n,lo as o,eo as p,o$ as q,U as r,c$ as s,L$ as t,S$ as u,Q$ as v,Bo as w,Jo as x,X$ as y,Y$ as z,W$ as A};