agent-skill-manager 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/dist/agent-skill-manager.js +143 -121
- package/dist/chunk-221zx7k2.js +8 -0
- package/dist/chunk-8e2d1703.js +8 -0
- package/dist/chunk-c662hngs.js +90 -0
- package/dist/chunk-dg0nqb63.js +90 -0
- package/dist/chunk-njbwyyw5.js +9 -0
- package/dist/chunk-t21tdjjx.js +90 -0
- package/dist/chunk-y00s0dtt.js +9 -0
- package/dist/chunk-yvfqvjev.js +90 -0
- package/dist/chunk-zh7g5bam.js +3 -0
- package/package.json +5 -3
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{createRequire as r}from"node:module";var h=Object.create;var{getPrototypeOf:p,defineProperty:I,getOwnPropertyNames:F}=Object;var b=Object.prototype.hasOwnProperty;var Ro=(o,L,$)=>{$=o!=null?h(p(o)):{};let S=L||!o||!o.__esModule?I($,"default",{value:o,enumerable:!0}):$;for(let c of F(o))if(!b.call(S,c))I(S,c,{get:()=>o[c],enumerable:!0});return S};var Ho=r(import.meta.url);import{readFile as m,writeFile as g,mkdir as u,copyFile as d}from"fs/promises";import{join as K,resolve as k}from"path";import{homedir as a}from"os";var H=!1,D=0;function Mo(o){if(H=o,o)D=performance.now()}function q(o){if(!H)return;let L=Math.round(performance.now()-D),S=globalThis.__CLI_NO_COLOR?`[verbose] +${L}ms`:`\x1B[2m[verbose] +${L}ms\x1B[0m`;console.error(`${S} ${o}`)}var O=a(),_=K(O,".config","agent-skill-manager"),v=K(_,"config.json"),i=[{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 G(){return{version:1,providers:i.map((o)=>({...o})),customPaths:[],preferences:{defaultScope:"both",defaultSort:"name"}}}function no(){return v}function y(o){if(o.startsWith("~/"))return K(O,o.slice(2));if(o.startsWith("/"))return o;return k(o)}function s(o){let L=G(),$=o.providers||[],S=new Set($.map((c)=>c.name));for(let c of L.providers)if(!S.has(c.name))$.push({...c});return{version:o.version??L.version,providers:$,customPaths:o.customPaths??[],preferences:{defaultScope:o.preferences?.defaultScope??L.preferences.defaultScope,defaultSort:o.preferences?.defaultSort??L.preferences.defaultSort}}}async function Po(){q(`config: checking ${v}`);let o;try{o=await m(v,"utf-8")}catch(L){if(L?.code==="ENOENT"){q("config: using defaults (file not found)");let $=G();return await M($),$}throw L}try{let L=JSON.parse(o);return q(`config: loaded from ${v}`),s(L)}catch{let L=v+".bak";q(`config: parse error, backing up to ${L}`),await d(v,L),console.error(`Warning: Config file was corrupted. Backup saved to ${L}. Using defaults.`);let $=G();return await M($),$}}async function M(o){await u(_,{recursive:!0}),await g(v,JSON.stringify(o,null,2)+`
|
|
2
|
+
`,"utf-8")}import{readdir as E,stat as l,lstat as e,readlink as oo,readFile as $o,realpath as Lo}from"fs/promises";import{join as V,resolve as So}from"path";function C(o){let L={},$=o.split(`
|
|
3
|
+
`),S=!1,c=!1,j=null,Q=[],X="none",t=-1;function B(){if(j){let z=Q.join(" ").trim();if(z)L[j]=z;j=null,Q=[],X="none",t=-1}}for(let z of $){if(z.trim()==="---")if(!c){c=!0,S=!0;continue}else{B();break}if(!S)continue;if(X!=="none"&&j){let J=z.replace(/^\s*/,""),Z=z.length-J.length;if(Z>0&&J.length>0){if(t===-1)t=Z;Q.push(J);continue}else if(J.length===0)continue;else B()}let Y=z.match(/^(\w[\w-]*):\s*(.*?)\s*$/);if(Y){B();let J=Y[1],Z=Y[2];if(Z==="|"||Z===">")j=J,Q=[],X=Z==="|"?"literal":"folded";else if(Z==="|+"||Z===">+"||Z==="|-"||Z===">-")j=J,Q=[],X=Z.startsWith("|")?"literal":"folded";else{let R=Z.replace(/^["']|["']$/g,"");if(R)L[J]=R}}}return B(),L}function co(o,L){let $=[];for(let S of o.providers){if(!S.enabled){q(`scan: skipping disabled provider "${S.name}"`);continue}if(L==="global"||L==="both"){let c=y(S.global);q(`scan: adding location ${c} (${S.label}, global)`),$.push({dir:c,location:`global-${S.name}`,scope:"global",providerName:S.name,providerLabel:S.label})}if(L==="project"||L==="both"){let c=y(S.project);q(`scan: adding location ${c} (${S.label}, project)`),$.push({dir:c,location:`project-${S.name}`,scope:"project",providerName:S.name,providerLabel:S.label})}}for(let S of o.customPaths)if(L===S.scope||L==="both"){let c=y(S.path);q(`scan: adding custom location ${c} (${S.label}, ${S.scope})`),$.push({dir:c,location:`${S.scope}-custom`,scope:S.scope,providerName:"custom",providerLabel:S.label})}return $}async function N(o){try{return(await E(o,{recursive:!0})).length}catch{return 0}}async function to(o){let L=[];q(`scanning: ${o.dir} (${o.location})`);let $;try{$=await E(o.dir)}catch{return q(`scanning: ${o.dir} — not found, skipping`),L}for(let S of $){let c=V(o.dir,S);try{if(!(await l(c)).isDirectory()){q(` skip: "${S}" — not a directory`);continue}}catch{q(` skip: "${S}" — stat failed`);continue}let j=V(c,"SKILL.md"),Q;try{Q=await $o(j,"utf-8")}catch{q(` skip: "${S}" — no SKILL.md`);continue}let X=C(Q),t=!1,B=null;try{if((await e(c)).isSymbolicLink())t=!0,B=await oo(c)}catch{}let z=So(c),Y;try{Y=await Lo(c)}catch{Y=z}L.push({name:X.name||S,version:X.version||"0.0.0",description:(X.description||"").replace(/\s*\n\s*/g," ").trim(),dirName:S,path:z,originalPath:c,location:o.location,scope:o.scope,provider:o.providerName,providerLabel:o.providerLabel,isSymlink:t,symlinkTarget:B,realPath:Y})}return q(`found ${L.length} skill(s) in ${o.dir}`),L}async function go(o,L){let $=co(o,L);return(await Promise.all($.map(to))).flat()}function uo(o,L){if(!L.trim())return o;let $=L.toLowerCase();return o.filter((S)=>S.name.toLowerCase().includes($)||S.description.toLowerCase().includes($)||S.location.toLowerCase().includes($)||S.providerLabel.toLowerCase().includes($))}function Bo(o,L){let $=o.split("."),S=L.split("."),c=Math.max($.length,S.length);for(let j=0;j<c;j++){let Q=parseInt($[j]??"0",10),X=parseInt(S[j]??"0",10);if(isNaN(Q)||isNaN(X))return o.localeCompare(L);if(Q!==X)return Q-X}return 0}function ko(o,L){let $=[...o];switch(L){case"name":$.sort((S,c)=>S.name.localeCompare(c.name));break;case"version":$.sort((S,c)=>Bo(S.version,c.version));break;case"location":$.sort((S,c)=>S.location.localeCompare(c.location));break}return $}import{rm as w,readFile as P,writeFile as jo,access as zo,lstat as Qo}from"fs/promises";import{join as n,resolve as f,dirname as Xo}from"path";import{homedir as Yo}from"os";var Zo=Yo();function qo(o,L){let $={directories:[],ruleFiles:[],agentsBlocks:[]};$.directories.push({path:o.originalPath,isSymlink:o.isSymlink});let S=o.dirName;if(o.scope==="project")$.ruleFiles.push(f(".cursor","rules",`${S}.mdc`),f(".windsurf","rules",`${S}.md`),f(".github","instructions",`${S}.instructions.md`)),$.agentsBlocks.push({file:f("AGENTS.md"),skillName:S});if(o.scope==="global"){for(let Q of L.providers){if(!Q.enabled)continue;let X=y(Q.global),t=n(Xo(X),"AGENTS.md");$.agentsBlocks.push({file:t,skillName:S})}let c=n(Zo,".codex","AGENTS.md");if(!$.agentsBlocks.some((Q)=>Q.file===c))$.agentsBlocks.push({file:c,skillName:S})}return $}function o$(o,L,$){let S=L.filter((t)=>t.dirName===o);if(S.length===0)return{directories:[],ruleFiles:[],agentsBlocks:[]};let c={directories:[],ruleFiles:[],agentsBlocks:[]},j=new Set,Q=new Set,X=new Set;for(let t of S){let B=qo(t,$);for(let z of B.directories)if(!j.has(z.path))j.add(z.path),c.directories.push(z);for(let z of B.ruleFiles)if(!Q.has(z))Q.add(z),c.ruleFiles.push(z);for(let z of B.agentsBlocks){let Y=`${z.file}::${z.skillName}`;if(!X.has(Y))X.add(Y),c.agentsBlocks.push(z)}}return c}async function A(o){try{return await zo(o),!0}catch{return!1}}async function Jo(o,L){if(!await A(o))return;let $=await P(o,"utf-8");for(let S of["agent-skill-manager","skill-manager","pskills"]){let c=`<!-- ${S}: ${L} -->`,j=`<!-- /${S}: ${L} -->`,Q=$.indexOf(c),X=$.indexOf(j);if(Q===-1||X===-1)continue;let t=Q;if(t>0&&$[t-1]===`
|
|
4
|
+
`)t--;let z=X+j.length;if(z<$.length&&$[z]===`
|
|
5
|
+
`)z++;$=$.slice(0,t)+$.slice(z)}await jo(o,$,"utf-8")}async function $$(o){let L=[];for(let $ of o.directories)try{if($.isSymlink)await w($.path),L.push(`Removed symlink: ${$.path}`);else await w($.path,{recursive:!0,force:!0}),L.push(`Removed directory: ${$.path}`)}catch(S){L.push(`Failed to remove ${$.path}: ${S.message}`)}for(let $ of o.ruleFiles)if(await A($))try{await w($),L.push(`Removed rule file: ${$}`)}catch(S){L.push(`Failed to remove ${$}: ${S.message}`)}for(let $ of o.agentsBlocks)try{await Jo($.file,$.skillName),L.push(`Cleaned AGENTS.md block in: ${$.file}`)}catch(S){L.push(`Failed to clean AGENTS.md block: ${S.message}`)}return L}async function L$(o){let L=[];for(let $ of o.directories)if(await A($.path)){let c=(await Qo($.path)).isSymbolicLink()?"symlink":"directory";L.push(`${$.path} (${c})`)}for(let $ of o.ruleFiles)if(await A($))L.push($);for(let $ of o.agentsBlocks)if(await A($.file)){let S=await P($.file,"utf-8");if(S.includes(`<!-- agent-skill-manager: ${$.skillName} -->`)||S.includes(`<!-- skill-manager: ${$.skillName} -->`)||S.includes(`<!-- pskills: ${$.skillName} -->`))L.push(`${$.file} (AGENTS.md block)`)}return L}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 t$(o){if(o.length===0)return"No skills found.";let L=["Name","Version","Provider","Scope","Type","Path"],$=o.map((t)=>[t.name,t.version,t.providerLabel,t.scope,t.isSymlink?"symlink":"directory",t.path]),S=L.map((t,B)=>Math.max(t.length,...$.map((z)=>z[B].length))),c=(t,B)=>t.padEnd(B),j=L.map((t,B)=>c(t,S[B])).join(" "),Q=S.map((t)=>"─".repeat(t)).join("──"),X=$.map((t)=>t.map((B,z)=>c(B,S[z])).join(" "));return[W()?U.bold(j):j,Q,...X].join(`
|
|
6
|
+
`)}async function B$(o){let L=[],$=(c,j)=>`${W()?U.bold(c+":"):c+":"} ${j}`;if(L.push($("Name",o.name)),L.push($("Version",o.version)),L.push($("Provider",o.providerLabel)),L.push($("Scope",o.scope)),L.push($("Location",o.location)),L.push($("Path",o.path)),L.push($("Type",o.isSymlink?"symlink":"directory")),o.isSymlink&&o.symlinkTarget)L.push($("Symlink Target",o.symlinkTarget));let S=o.fileCount??await N(o.path);if(L.push($("File Count",String(S))),o.description)L.push(""),L.push($("Description",o.description));return L.join(`
|
|
7
|
+
`)}function j$(o){return JSON.stringify(o,null,2)}function X$(o){let L=[],$=new Set,S=new Map,c=[];for(let t of o){let B=S.get(t.realPath);if(B){if(t.isSymlink)continue;if(B.isSymlink)c[c.indexOf(B)]=t,S.set(t.realPath,t);else c.push(t)}else S.set(t.realPath,t),c.push(t)}let j=new Map;for(let t of c){let B=j.get(t.dirName)??[];B.push(t),j.set(t.dirName,B)}for(let[t,B]of j)if(new Set(B.map((Y)=>Y.location)).size>=2){L.push({key:t,reason:"same-dirName",instances:B});for(let Y of B)$.add(Y.path)}let Q=new Map;for(let t of c){if(!t.name)continue;let B=Q.get(t.name)??[];B.push(t),Q.set(t.name,B)}for(let[t,B]of Q){if(new Set(B.map((Z)=>Z.dirName)).size<2)continue;let Y=B.filter((Z)=>!$.has(Z.path));if(Y.length<2)continue;if(new Set(Y.map((Z)=>Z.dirName)).size<2)continue;L.push({key:t,reason:"same-frontmatterName",instances:Y})}L.sort((t,B)=>{if(t.reason!==B.reason)return t.reason==="same-dirName"?-1:1;return t.key.localeCompare(B.key)});let X=L.reduce((t,B)=>t+B.instances.length,0);return{scannedAt:new Date().toISOString(),totalSkills:o.length,duplicateGroups:L,totalDuplicateInstances:X}}function Wo(o){return[...o].sort((L,$)=>{if(L.scope!==$.scope)return L.scope==="global"?-1:1;let S=L.providerLabel.localeCompare($.providerLabel);if(S!==0)return S;return L.path.localeCompare($.path)})}function Uo(o){return o==="same-dirName"?"same dirName":"same name"}function Y$(o){if(o.duplicateGroups.length===0)return U.green("No duplicate skills found.");let L=[];L.push(U.bold(`Found ${o.duplicateGroups.length} duplicate group(s) (${o.totalDuplicateInstances} total instances):`)),L.push("");for(let $ of o.duplicateGroups){L.push(U.yellow(` Group: "${$.key}" (${Uo($.reason)})`));let S=Wo($.instances);for(let c=0;c<S.length;c++){let j=S[c],Q=c===0?U.green(" (recommended keep)"):"";L.push(` ${U.dim("•")} ${j.path} [${j.providerLabel}/${j.scope}]${Q}`)}L.push("")}return L.join(`
|
|
8
|
+
`)}function Z$(o){return JSON.stringify(o,null,2)}import{readFileSync as vo}from"fs";import{resolve as yo,dirname as Ao}from"path";import{fileURLToPath as fo}from"url";import{execSync as Go}from"child_process";var Ko=Ao(fo(import.meta.url)),T="1.3.0";try{let o=vo(yo(Ko,"../../package.json"),"utf-8");T=JSON.parse(o).version}catch{}var x="3691585";try{x=Go("git rev-parse --short HEAD",{encoding:"utf-8"}).trim()||x}catch{}var wo=T,xo=x,y$=`v${wo} (${xo})`;
|
|
9
|
+
export{Ro as a,Ho as b,Mo as c,q as d,G as e,no as f,y as g,Po as h,M as i,C as j,N as k,go as l,uo as m,ko as n,qo as o,o$ as p,$$ as q,L$ as r,U as s,t$ as t,B$ as u,j$ as v,X$ as w,Wo as x,Uo as y,Y$ as z,Z$ as A,y$ as B};
|