@easbot/skills 0.3.12 → 0.3.13

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 (59) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/chunks/blob-3PZEQWTP.mjs +1 -0
  4. package/dist/chunks/blob-ZDEX2HRV.cjs +1 -0
  5. package/dist/chunks/chunk-4D5RQDWJ.mjs +5 -0
  6. package/dist/chunks/{chunk-OWG6N2K6.cjs → chunk-5BL3KG26.cjs} +2 -2
  7. package/dist/chunks/chunk-5W7HC7BY.mjs +22 -0
  8. package/dist/chunks/chunk-CXH3OTTQ.cjs +22 -0
  9. package/dist/chunks/{chunk-2VZUPTI7.cjs → chunk-CY6UI6SJ.cjs} +1 -1
  10. package/dist/chunks/chunk-E7AHWFZN.cjs +2 -0
  11. package/dist/chunks/chunk-ISMGLHYS.cjs +1 -0
  12. package/dist/chunks/chunk-K2XGYOXP.mjs +267 -0
  13. package/dist/chunks/chunk-ML6B4IQL.mjs +1 -0
  14. package/dist/chunks/{chunk-4R6NKPNW.mjs → chunk-NKIQLESR.mjs} +2 -2
  15. package/dist/chunks/chunk-ROCFLAYZ.mjs +2 -0
  16. package/dist/chunks/chunk-RVR3DSD2.cjs +2 -0
  17. package/dist/chunks/{chunk-RWSBKHQ2.cjs → chunk-SXUY2J75.cjs} +2 -2
  18. package/dist/chunks/chunk-UJWB7QQ6.cjs +267 -0
  19. package/dist/chunks/chunk-ZBKGF7PA.mjs +1 -0
  20. package/dist/chunks/chunk-ZYDDQV73.mjs +2 -0
  21. package/dist/chunks/cli-handler-667TYY4I.cjs +1 -0
  22. package/dist/chunks/cli-handler-YSDUNKKZ.mjs +1 -0
  23. package/dist/chunks/{installer-FB26E7JZ.mjs → installer-REG45DC2.mjs} +1 -1
  24. package/dist/chunks/installer-SOVGUW3M.cjs +1 -0
  25. package/dist/chunks/local-lock-AWD3LLEY.mjs +1 -0
  26. package/dist/chunks/local-lock-GIZDVF3X.cjs +1 -0
  27. package/dist/chunks/scan-57D2H7LP.cjs +1 -0
  28. package/dist/chunks/scan-WAXGJM5N.mjs +1 -0
  29. package/dist/chunks/{skill-lock-KHPVP7AD.mjs → skill-lock-DZMA75MY.mjs} +1 -1
  30. package/dist/chunks/skill-lock-XTWQYBRG.cjs +1 -0
  31. package/dist/chunks/store-F7PGGZIO.cjs +1 -0
  32. package/dist/chunks/store-IVDLGLET.mjs +1 -0
  33. package/dist/cli.cjs +1 -1
  34. package/dist/cli.mjs +1 -1
  35. package/dist/index.cjs +1 -1
  36. package/dist/index.d.cts +51 -7
  37. package/dist/index.d.ts +51 -7
  38. package/dist/index.mjs +1 -1
  39. package/package.json +4 -5
  40. package/dist/chunks/blob-DOVEGVIE.cjs +0 -1
  41. package/dist/chunks/blob-JSMTOYEN.mjs +0 -1
  42. package/dist/chunks/chunk-2YVJ7YP6.mjs +0 -22
  43. package/dist/chunks/chunk-676OG55M.mjs +0 -5
  44. package/dist/chunks/chunk-6PJ3YQA7.mjs +0 -2
  45. package/dist/chunks/chunk-72DXY4B7.mjs +0 -1
  46. package/dist/chunks/chunk-GR2NJUJ6.mjs +0 -255
  47. package/dist/chunks/chunk-JFEBB5CL.cjs +0 -22
  48. package/dist/chunks/chunk-KV7EP6AW.cjs +0 -255
  49. package/dist/chunks/chunk-TCFGU43L.cjs +0 -2
  50. package/dist/chunks/cli-handler-RAJ42VDN.mjs +0 -1
  51. package/dist/chunks/cli-handler-YAJ5J5VA.cjs +0 -1
  52. package/dist/chunks/installer-GOQTCUJ4.cjs +0 -1
  53. package/dist/chunks/local-lock-4AA55ORE.cjs +0 -1
  54. package/dist/chunks/local-lock-LG5YL33V.mjs +0 -1
  55. package/dist/chunks/scan-QEVID2TF.mjs +0 -1
  56. package/dist/chunks/scan-XWU3FCE3.cjs +0 -1
  57. package/dist/chunks/skill-lock-LET33FVT.cjs +0 -1
  58. package/dist/chunks/store-3NRBE47N.mjs +0 -1
  59. package/dist/chunks/store-EHYH46YY.cjs +0 -1
@@ -1 +0,0 @@
1
- 'use strict';var chunkTCFGU43L_cjs=require('./chunk-TCFGU43L.cjs');require('./chunk-XGUPIAAF.cjs'),require('./chunk-VRHWDHQV.cjs');Object.defineProperty(exports,"BLOB_ALLOWED_OWNERS",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.x}});Object.defineProperty(exports,"BLOB_ALLOWED_REPOS",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.w}});Object.defineProperty(exports,"fetchRepoTree",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.A}});Object.defineProperty(exports,"findSkillMdPaths",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.C}});Object.defineProperty(exports,"getSkillFolderHashFromTree",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.B}});Object.defineProperty(exports,"resetRepoTreeAuthState",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.z}});Object.defineProperty(exports,"toSkillSlug",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.y}});Object.defineProperty(exports,"tryBlobInstall",{enumerable:true,get:function(){return chunkTCFGU43L_cjs.D}});
@@ -1 +0,0 @@
1
- export{x as BLOB_ALLOWED_OWNERS,w as BLOB_ALLOWED_REPOS,A as fetchRepoTree,C as findSkillMdPaths,B as getSkillFolderHashFromTree,z as resetRepoTreeAuthState,y as toSkillSlug,D as tryBlobInstall}from'./chunk-6PJ3YQA7.mjs';import'./chunk-RWZ4LFSN.mjs';import'./chunk-WQGSYA5D.mjs';
@@ -1,22 +0,0 @@
1
- import {c,b as b$1,n}from'./chunk-6PJ3YQA7.mjs';import {p,m,o}from'./chunk-RWZ4LFSN.mjs';import {b}from'./chunk-WQGSYA5D.mjs';import {rm,mkdtemp,readFile,rename,mkdir,writeFile,rmdir,cp,readdir,stat}from'fs/promises';import {dirname,join,normalize,resolve,sep,basename,relative,isAbsolute}from'path';import {createHash}from'crypto';import {existsSync}from'fs';import fe from'simple-git';import {Filesystem,Glob,Wildcard}from'@easbot/utils';import {tmpdir}from'os';import {execFile}from'child_process';import {promisify}from'util';import {gunzipSync,inflateRawSync}from'zlib';var U=6;function ce(n){let t=n.indexOf(":");return t<0||t===n.length-1?null:{marketId:n.slice(0,t),pluginSlug:n.slice(t+1)}}function ue(n){let t=ce(n);return t?`plugins/${t.pluginSlug}`:null}function St(n,t,e){if(!n.marketId||!n.pluginId)return null;let r=ue(n.pluginId);return r?`${t.replace(/\\/g,"/").replace(/\/+$/,"")}/${n.marketId}/${r}/${e}`:null}var Pt=3e5,Z=(()=>{let n=process.env.SKILLS_CLONE_TIMEOUT;if(!n)return Pt;let t=Number.parseInt(n,10);return Number.isFinite(t)&&t>0?t:Pt})(),bt=promisify(execFile),L=class extends Error{constructor(e,r,i=false,s=false){super(e);b(this,"url");b(this,"isTimeout");b(this,"isAuthError");this.name="GitCloneError",this.url=r,this.isTimeout=i,this.isAuthError=s;}};function Se(n){let t=n.match(/^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?$/i);if(t){let e=t[1],r=t[2];return {owner:e,repo:r,slug:`${e}/${r}`,sshUrl:`git@github.com:${e}/${r}.git`}}try{let e=new URL(n);if(e.hostname!=="github.com")return null;let r=e.pathname.match(/^\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/);if(!r)return null;let i=r[1],s=r[2];return {owner:i,repo:s,slug:`${i}/${s}`,sshUrl:`git@github.com:${i}/${s}.git`}}catch{return null}}function xe(n){try{let t=new URL(n);return t.protocol==="https:"&&t.hostname==="github.com"}catch{return false}}function It(n){let t=n.toLowerCase();return t.includes("saml sso")||t.includes("enforced sso")||t.includes("enabled or enforced saml")||t.includes("re-authorize the oauth application")}function Ee(n){return n.includes("Authentication failed")||n.includes("could not read Username")||n.includes("Permission denied")||n.includes("Repository not found")||n.includes("requested URL returned error: 403")||It(n)}function J(n){let t={...process.env};return delete t.GIT_ASKPASS,delete t.GIT_EDITOR,delete t.GIT_SEQUENCE_EDITOR,delete t.GIT_PAGER,delete t.GIT_SSH_COMMAND,delete t.GIT_CONFIG_GLOBAL,delete t.GIT_CONFIG_SYSTEM,delete t.PAGER,delete t.EDITOR,delete t.VISUAL,t.GIT_TERMINAL_PROMPT="0",t.GIT_LFS_SKIP_SMUDGE="1",Object.assign(t,n),fe({timeout:{block:Z},config:["filter.lfs.required=false","protocol.version=2","remote.origin.promisor=false"]}).env(t)}async function Lt(n){try{await rm(n,{recursive:!0,force:!0});}catch{}await mkdir(n,{recursive:true});}async function Pe(n,t,e){let r=n.slug;try{let{stdout:s,stderr:o}=await bt("gh",["auth","status","-h","github.com"],{timeout:5e3,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),l=`${s}${o}`;/Git operations protocol:\s+ssh/i.test(l)&&(r=n.sshUrl);}catch{return false}return await bt("gh",["repo","clone",r,t,"--",...e?["--depth=1","--branch",e]:["--depth=1"]],{timeout:Z,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}}),true}function be(n,t,e){return t&&It(e)?`GitHub blocked HTTPS access to ${n} because the organization enforces SAML SSO.
2
- skills tried your existing git credentials and available fallbacks, but none succeeded.
3
- - Re-authorize your GitHub credentials/app for that org's SSO policy
4
- - Or rerun with SSH: easbot skills add ${t.sshUrl}
5
- - Verify access with: gh auth status -h github.com or ssh -T git@github.com`:t?`Authentication failed for ${n}.
6
- - For private repos, ensure you have access
7
- - Retry with SSH: easbot skills add ${t.sshUrl}
8
- - Check access with: gh auth status -h github.com or ssh -T git@github.com`:`Authentication failed for ${n}.
9
- - For private repos, ensure you have access
10
- - For SSH: Check your keys with 'ssh -T git@github.com'
11
- - For HTTPS: Run 'gh auth login' or configure git credentials`}async function $t(n,t,e){if(e){await Filesystem.mkdir(dirname(e),{recursive:true});let o=t?["--depth","1","--branch",t]:["--depth","1"];try{return await J().clone(n,e,o),e}catch(l){throw await rm(e,{recursive:true,force:true}).catch(()=>{}),l}}let r=await mkdtemp(join(tmpdir(),"skills-")),i=t?["--depth","1","--branch",t]:["--depth","1"],s=Se(n);try{return await J().clone(n,r,i),r}catch(o){let l=o instanceof Error?o.message:String(o),a=l.includes("block timeout")||l.includes("timed out"),c=Ee(l);if(a){try{await rm(r,{recursive:!0,force:!0});}catch{}let f=Math.round(Z/1e3);throw new L(`Clone timed out after ${f}s. Common causes:
12
- - Large repository: raise the timeout with SKILLS_CLONE_TIMEOUT=600000 (10m)
13
- - Slow network: retry, or clone manually and pass the local path to 'skills add'
14
- - Private repo without credentials: ensure auth is configured
15
- - For SSH: ssh-add -l (to check loaded keys)
16
- - For HTTPS: gh auth status (if using GitHub CLI)`,n,true,false)}if(c&&s&&xe(n)){try{if(await Lt(r),await Pe(s,r,t))return r}catch{}try{return await Lt(r),await J({GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND??"ssh -o BatchMode=yes"}).clone(s.sshUrl,r,i),r}catch{}}try{await rm(r,{recursive:!0,force:!0});}catch{}if(c)throw new L(be(n,s,l),n,false,true);let u=l.includes("filter.smudge")?`
17
- - The repo defines a smudge/clean filter that Git considers unsafe.
18
- Enable it with: git config --global protocol.allowUnsafeFilter true
19
- Or upgrade Git, or unset filter.<driver>.* in the source repo.`:"";throw new L(`Failed to clone ${n}: ${l}${u}`,n,false,false)}}async function In(n){let t=normalize(resolve(n)),e=normalize(resolve(tmpdir()));if(!t.startsWith(e+sep)&&t!==e)throw new Error("Attempted to clean up directory outside of temp directory");await rm(n,{recursive:true,force:true});}function Q(n){if(n.type==="local")return null;let t=n.url.match(/^git@[^:]+:(.+)$/);if(t){let e=t[1];return e=e.replace(/\.git$/,""),e.includes("/")?e:null}if(n.url.startsWith("ssh://"))try{let r=new URL(n.url).pathname.slice(1);return r=r.replace(/\.git$/,""),r.includes("/")?r:null}catch{return null}if(!n.url.startsWith("http://")&&!n.url.startsWith("https://"))return null;try{let r=new URL(n.url).pathname.slice(1);if(r=r.replace(/\.git$/,""),r.includes("/"))return r}catch{}return null}function Kn(n){let t=n.match(/^([^/]+)\/([^/]+)$/);return t?{owner:t[1],repo:t[2]}:null}async function Un(n,t){try{let e=await fetch(`https://api.github.com/repos/${n}/${t}`);return e.ok?(await e.json()).private===!0:null}catch{return null}}async function Wt(n,t){try{let e=await fetch(`https://api.github.com/repos/${n}/${t}`,{headers:{Accept:"application/vnd.github+json"}});if(!e.ok)return null;let r=await e.json();return typeof r.default_branch=="string"&&r.default_branch.length>0?r.default_branch:null}catch{return null}}function O(n){let e=n.replace(/\\/g,"/").split("/");for(let r of e)if(r==="..")throw new Error(`Unsafe subpath: "${n}" contains path traversal segments. Subpaths must not contain ".." components.`);return n}function Ie(n){return isAbsolute(n)||n.startsWith("./")||n.startsWith("../")||n==="."||n===".."||/^[a-zA-Z]:[/\\]/.test(n)}var $e={"coinbase/agentWallet":"coinbase/agentic-wallet-skills"};function Y(n){try{return decodeURIComponent(n)}catch{return n}}function Ae(n){if(n.startsWith("github:")||n.startsWith("gitlab:")||n.startsWith("git@")||/^ssh:\/\/.+\.git(?:$|[/?])/i.test(n))return true;if(n.startsWith("http://")||n.startsWith("https://"))try{let t=new URL(n),e=t.pathname;if(t.hostname==="github.com")return /^\/[^/]+\/[^/]+(?:\.git)?(?:\/tree\/[^/]+(?:\/.*)?)?\/?$/.test(e);if(t.hostname==="gitlab.com")return /^\/.+?\/[^/]+(?:\.git)?(?:\/-\/tree\/[^/]+(?:\/.*)?)?\/?$/.test(e)}catch{}return /^https?:\/\/.+\.git(?:$|[/?])/i.test(n)?true:!n.includes(":")&&!n.startsWith(".")&&!n.startsWith("/")&&/^([^/]+)\/([^/]+)(?:\/(.+)|@(.+))?$/.test(n)}function Re(n){let t=n.indexOf("#");if(t<0)return {inputWithoutFragment:n};let e=n.slice(0,t),r=n.slice(t+1);if(!r)return {inputWithoutFragment:e};if(!Ae(e))return {inputWithoutFragment:n};let i=r.indexOf("@");if(i===-1)return {inputWithoutFragment:e,ref:Y(r)};let s=r.slice(0,i),o=r.slice(i+1);return {inputWithoutFragment:e,ref:s?Y(s):void 0,subpath:o?Y(o):void 0}}function At(n,t,e){return t?`${n}#${t}${e?`@${e}`:""}`:n}function Rt(n){if(Ie(n)){let g=resolve(n);return {type:"local",url:g,localPath:g}}let{inputWithoutFragment:t,ref:e,subpath:r}=Re(n);n=t;let i=$e[n];i&&(n=i);let s=n.match(/^github:(.+)$/);if(s)return Rt(At(s[1],e,r));let o=n.match(/^gitlab:(.+)$/);if(o)return Rt(At(`https://gitlab.com/${o[1]}`,e,r));let l=n.match(/github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)\/(.+)/);if(l){let[,g,m,w,S]=l;return {type:"github",url:`https://github.com/${g}/${m}.git`,ref:w||e,subpath:S&&O(S)}}let a=n.match(/github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)$/);if(a){let[,g,m,w]=a;return {type:"github",url:`https://github.com/${g}/${m}.git`,ref:w||e}}let c=n.match(/github\.com\/([^/]+)\/([^/]+)/);if(c){let[,g,m]=c,w=m.replace(/\.git$/,"");return {type:"github",url:`https://github.com/${g}/${w}.git`,...e?{ref:e}:{}}}let u=n.match(/^(https?):\/\/([^/]+)\/(.+?)\/-\/tree\/([^/]+)\/(.+)/);if(u){let[,g,m,w,S,p]=u;if(m!=="github.com"&&w)return {type:"gitlab",url:`${g}://${m}/${w.replace(/\.git$/,"")}.git`,ref:S||e,subpath:p&&O(p)}}let f=n.match(/^(https?):\/\/([^/]+)\/(.+?)\/-\/tree\/([^/]+)$/);if(f){let[,g,m,w,S]=f;if(m!=="github.com"&&w)return {type:"gitlab",url:`${g}://${m}/${w.replace(/\.git$/,"")}.git`,ref:S||e}}let k=n.match(/gitlab\.com\/(.+?)(?:\.git)?\/?$/);if(k){let g=k[1];if(g.includes("/"))return {type:"gitlab",url:`https://gitlab.com/${g}.git`,...e?{ref:e}:{}}}let E=n.match(/^([^/@]+)\/([^/@]+)@(.+)?$/);if(E&&!n.includes(":")&&!n.startsWith(".")&&!n.startsWith("/")){let g=E[1],m=E[2],w=E[3];if(!w)return {type:"github",url:`https://github.com/${g}/${m}.git`,...e?{ref:e}:{}};let S=O(w);return {type:"github",url:`https://github.com/${g}/${m}.git`,...e?{ref:e}:{},...S?{subpath:S}:{}}}let P=n.match(/^([^/@]+)\/([^/@]+)(?:\/(.+?))?\/?$/);if(P&&!n.includes(":")&&!n.startsWith(".")&&!n.startsWith("/")){let[,g,m,w]=P;return {type:"github",url:`https://github.com/${g}/${m}.git`,...e?{ref:e}:{},subpath:r??(w&&O(w))}}return We(n)?{type:"well-known",url:n}:{type:"git",url:n,...e?{ref:e}:{},...r?{subpath:r}:{}}}function We(n){if(!n.startsWith("http://")&&!n.startsWith("https://"))return false;try{let t=new URL(n);return !(["github.com","gitlab.com","raw.githubusercontent.com"].includes(t.hostname)||n.endsWith(".git"))}catch{return false}}var Kt="https://schemas.agentskills.io/discovery/0.2.0/schema.json",De=/\/schemas\/agent-skills\/index\.v1\.json$/,Fe=50*1024*1024,Ce=1e3;function Te(n,t){let e=n.skillPath;if(typeof e=="string"&&e.trim()!==""&&e!==null)return e.replace(/^\/+/,"").replace(/\/+$/,"");if(typeof n.sourceUrl=="string"&&n.sourceUrl)try{let i=new URL(n.sourceUrl).pathname,s=/\/\.well-known\/(?:agent-skills|skills)\/(.*?)\/SKILL\.md$/,o=i.match(s);if(o?.[1])return o[1];let l=i.match(/^(.*?)\/[^/]+\/SKILL\.md$/);if(l?.[1])return l[1]}catch{}if(typeof n.installName=="string"&&n.installName){let r=n.installName.lastIndexOf("@");if(r>=0){let i=n.installName.slice(r+1);if(i.includes("/"))return i.replace(/^\/+/,"")}}return t}var tt=class{constructor(){b(this,"id","well-known");b(this,"displayName","Well-Known Skills");b(this,"WELL_KNOWN_PATHS",[".well-known/agent-skills",".well-known/skills"]);b(this,"INDEX_FILE","index.json");}match(t){if(!t.startsWith("http://")&&!t.startsWith("https://"))return {matches:false};try{let e=new URL(t);return ["github.com","gitlab.com","huggingface.co"].includes(e.hostname)?{matches:!1}:{matches:!0,sourceIdentifier:`wellknown/${e.hostname}`}}catch{return {matches:false}}}async fetchIndex(t){return (await this.fetchIndexCandidates(t))[0]??null}async fetchIndexCandidates(t){try{let e=new URL(t),r=e.pathname.replace(/\/$/,""),i=[],s=r.match(/\/\.well-known\/(agent-skills|skills)\/?$/);if(s?.[1]){let l=`.well-known/${s[1]}`;i.push({indexUrl:`${e.protocol}//${e.host}${r}/${this.INDEX_FILE}`,baseUrl:`${e.protocol}//${e.host}${r.replace(/\/\.well-known\/(?:agent-skills|skills)$/,"")}`,wellKnownPath:l});}for(let l of this.WELL_KNOWN_PATHS)i.push({indexUrl:`${e.protocol}//${e.host}${r}/${l}/${this.INDEX_FILE}`,baseUrl:`${e.protocol}//${e.host}${r}`,wellKnownPath:l}),r&&r!==""&&i.push({indexUrl:`${e.protocol}//${e.host}/${l}/${this.INDEX_FILE}`,baseUrl:`${e.protocol}//${e.host}`,wellKnownPath:l});let o=[];for(let{indexUrl:l,baseUrl:a,wellKnownPath:c}of i)try{let u=await fetch(l);if(!u.ok)continue;let f=await u.json(),k=this.normalizeIndex(f,l,c);if(!k)continue;o.push({index:k.index,entries:k.entries,resolvedBaseUrl:a,resolvedWellKnownPath:c,indexUrl:l});}catch{}return o}catch{return []}}normalizeIndex(t,e,r){if(!t||typeof t!="object")return null;let i=t;if(!Array.isArray(i.skills))return null;let s=i.$schema;if(s===Kt){let a=[],c=[];for(let u of i.skills){if(!this.isValidSkillEntryV2(u))continue;let f=new URL(u.url,e).toString();a.push({version:"0.2.0",name:u.name,description:u.description,type:u.type,artifactUrl:f,digest:u.digest,indexEntry:u}),c.push(u);}return a.length===0?null:{index:{$schema:Kt,skills:c},entries:a}}if(typeof s=="string"&&De.test(s)){let a=[],c=[];for(let u of i.skills){if(!this.isValidSkillEntryEasbotV1(u))continue;let f=new URL(u.sourceUrl,e).toString();a.push({version:"easbot-v1",name:u.name,description:u.description,skillMdUrl:f,installName:u.installName,indexEntry:u}),c.push(u);}return a.length===0?null:{index:{$schema:s,skills:c},entries:a}}if(s!==void 0)return null;let o=[],l=[];for(let a of i.skills){if(!this.isValidSkillEntryV1(a))return null;o.push(a),l.push({version:"0.1.0",name:a.name,description:a.description,files:a.files,baseUrl:this.getLegacySkillBaseUrl(e,r),wellKnownPath:r,indexEntry:a});}return {index:{skills:o},entries:l}}getLegacySkillBaseUrl(t,e){let r=new URL(t),i=`/${e}/${this.INDEX_FILE}`;return `${r.protocol}//${r.host}${r.pathname.slice(0,-i.length)}`}isValidSkillName(t){return !(typeof t!="string"||t.length===0||t.length>64||!/^[a-z0-9-]+$/.test(t)||t.startsWith("-")||t.endsWith("-")||t.includes("--"))}isSafeLegacyFilePath(t){return !(typeof t!="string"||t.length===0||t.startsWith("/")||t.startsWith("\\")||t.includes("..")||t.includes("\0"))}isValidSkillEntryEasbotV1(t){if(!t||typeof t!="object")return false;let e=t;if(!this.isValidSkillName(e.name)||typeof e.description!="string"||!e.description||e.description.length>1024||typeof e.sourceUrl!="string"||!e.sourceUrl)return false;try{new URL(e.sourceUrl,"https://easbot.cn/.well-known/agent-skills/index.json");}catch{return false}return true}isValidSkillEntryV1(t){if(!t||typeof t!="object")return false;let e=t;if(!this.isValidSkillName(e.name)||typeof e.description!="string"||!e.description||!Array.isArray(e.files)||e.files.length===0)return false;for(let i of e.files)if(!this.isSafeLegacyFilePath(i))return false;return e.files.some(i=>typeof i=="string"&&i.toLowerCase()==="skill.md")}isValidSkillEntryV2(t){if(!t||typeof t!="object")return false;let e=t;if(!this.isValidSkillName(e.name)||typeof e.description!="string"||!e.description||e.description.length>1024||e.type!=="skill-md"&&e.type!=="archive"||typeof e.url!="string"||!e.url||typeof e.digest!="string"||!/^sha256:[a-f0-9]{64}$/.test(e.digest))return false;try{new URL(e.url,"https://example.com/.well-known/agent-skills/index.json");}catch{return false}return true}async fetchSkill(t){try{let e=new URL(t),r=await this.fetchIndexCandidates(t);for(let i of r){let{entries:s}=i,o=null,l=e.pathname.match(/\/.well-known\/(?:agent-skills|skills)\/([^/]+)\/?$/);if(l?.[1]&&l[1]!=="index.json"?o=l[1]:s.length===1&&(o=s[0].name),!o)continue;let a=s.find(u=>u.name===o);if(!a)continue;let c=await this.fetchSkillByEntry(a);if(c)return c}return null}catch{return null}}async fetchSkillByEntry(t,e,r){return typeof t=="string"?e?this.fetchLegacySkillByEntry({version:"0.1.0",name:e.name,description:e.description,files:e.files,baseUrl:t,wellKnownPath:r??this.WELL_KNOWN_PATHS[0],indexEntry:e}):null:t.version==="0.1.0"?this.fetchLegacySkillByEntry(t):t.version==="easbot-v1"?this.fetchEasbotV1SkillByEntry(t):this.fetchArtifactSkillByEntry(t)}async fetchEasbotV1SkillByEntry(t){try{let e=await fetch(t.skillMdUrl);if(!e.ok)return null;let r=await e.text(),{data:i}=c(r);if(typeof i.name!="string"||typeof i.description!="string")return null;let s=new Map;s.set("SKILL.md",r);let o=Te(t.indexEntry,i.name);return this.createSkill({name:i.name,description:i.description,content:r,installName:o,sourceUrl:t.skillMdUrl,metadata:i.metadata,files:s,indexEntry:t.indexEntry})}catch{return null}}async fetchLegacySkillByEntry(t){try{let e=`${t.baseUrl.replace(/\/$/,"")}/${t.wellKnownPath}/${t.name}`,r=`${e}/SKILL.md`,i=await fetch(r);if(!i.ok)return null;let s=await i.text(),{data:o}=c(s);if(typeof o.name!="string"||typeof o.description!="string")return null;let l=new Map;l.set("SKILL.md",s);let c$1=t.files.filter(f=>f.toLowerCase()!=="skill.md").map(async f=>{try{let k=`${e}/${f}`,E=await fetch(k);if(E.ok){let P=await E.arrayBuffer();return {path:f,content:new Uint8Array(P)}}}catch{}return null}),u=await Promise.all(c$1);for(let f of u)f&&l.set(f.path,f.content);return this.createSkill({name:o.name,description:o.description,content:s,installName:t.name,sourceUrl:r,metadata:o.metadata,files:l,indexEntry:t.indexEntry})}catch{return null}}async fetchArtifactSkillByEntry(t){try{let e=await fetch(t.artifactUrl);if(!e.ok)return null;let r=e.headers.get("content-type")??"",i=new Uint8Array(await e.arrayBuffer());if(this.computeDigest(i)!==t.digest)return null;if(t.type==="skill-md"){let c$1=new TextDecoder().decode(i),{data:u}=c(c$1);if(typeof u.name!="string"||typeof u.description!="string")return null;let f=new Map;return f.set("SKILL.md",c$1),this.createSkill({name:u.name,description:u.description,content:c$1,installName:t.name,sourceUrl:t.artifactUrl,metadata:u.metadata,files:f,indexEntry:t.indexEntry})}let s=this.extractArchive(i,t.artifactUrl,r),o=s.get("SKILL.md");if(!o)return null;let l=typeof o=="string"?o:new TextDecoder().decode(o);s.set("SKILL.md",l);let{data:a}=c(l);return typeof a.name!="string"||typeof a.description!="string"?null:this.createSkill({name:a.name,description:a.description,content:l,installName:t.name,sourceUrl:t.artifactUrl,metadata:a.metadata,files:s,indexEntry:t.indexEntry})}catch{return null}}createSkill(t){return {name:b$1(t.name),description:b$1(t.description),content:t.content,installName:t.installName,sourceUrl:t.sourceUrl,metadata:t.metadata&&typeof t.metadata=="object"?t.metadata:void 0,files:t.files,indexEntry:t.indexEntry}}async fetchAllSkills(t){try{let e=await this.fetchIndexCandidates(t);for(let r of e){let i=r.entries.map(l=>this.fetchSkillByEntry(l)),o=(await Promise.all(i)).filter(l=>l!==null);if(o.length>0)return o}return []}catch{return []}}computeDigest(t){return `sha256:${createHash("sha256").update(t).digest("hex")}`}extractArchive(t,e,r){if(this.isZipArchive(t,e,r))return this.extractZip(t);if(this.isTarGzArchive(t,e,r))return this.extractTarGz(t);throw new Error("Unsupported archive format")}isZipArchive(t,e,r){return r.includes("application/zip")||e.toLowerCase().endsWith(".zip")||t[0]===80&&t[1]===75}isTarGzArchive(t,e,r){let i=e.toLowerCase();return r.includes("application/gzip")||r.includes("application/x-gzip")||i.endsWith(".tar.gz")||i.endsWith(".tgz")||t[0]===31&&t[1]===139}normalizeArchivePath(t){if(!t||t.includes("\0")||t.startsWith("/")||t.startsWith("\\")||/^[A-Za-z]:/.test(t)||t.includes("\\"))return null;let e=t.split("/").filter(Boolean);return e.length===0||e.some(r=>r==="."||r==="..")?null:e.join("/")}addArchiveFile(t,e,r,i){let s=this.normalizeArchivePath(e);if(!s)throw new Error(`Unsafe archive path: ${e}`);if(i.bytes+=r.byteLength,i.bytes>Fe)throw new Error("Archive exceeds maximum unpacked size");if(t.size>=Ce)throw new Error("Archive contains too many files");t.set(s,r);}extractTarGz(t){let e=gunzipSync(Buffer.from(t)),r=new Map,i={bytes:0},s=0;for(;s+512<=e.length;){let o=e.subarray(s,s+512);if(o.every(P=>P===0))break;let l=this.readTarString(o,0,100),a=this.readTarString(o,124,12).trim(),c=o[156],u=this.readTarString(o,345,155),f=u?`${u}/${l}`:l,k=Number.parseInt(a||"0",8);if(!Number.isFinite(k)||k<0)throw new Error("Invalid tar entry size");if(s+=512,c===50||c===49)throw new Error("Archive links are not supported");if(c===0||c===48){let P=e.subarray(s,s+k);this.addArchiveFile(r,f,new Uint8Array(P),i);}s+=Math.ceil(k/512)*512;}if(!r.has("SKILL.md"))throw new Error("Archive missing root SKILL.md");return r}readTarString(t,e,r){let i=t.subarray(e,e+r),s=i.indexOf(0);return new TextDecoder().decode(s>=0?i.subarray(0,s):i)}extractZip(t){let e=Buffer.from(t),r=this.findZipEndOfCentralDirectory(e);if(r<0)throw new Error("Invalid zip archive");let i=e.readUInt16LE(r+10),s=e.readUInt32LE(r+16),o=new Map,l={bytes:0},a=s;for(let c=0;c<i;c++){if(e.readUInt32LE(a)!==33639248)throw new Error("Invalid zip directory");let u=e.readUInt16LE(a+8),f=e.readUInt16LE(a+10),k=e.readUInt32LE(a+20),E=e.readUInt32LE(a+24),P=e.readUInt16LE(a+28),g=e.readUInt16LE(a+30),m=e.readUInt16LE(a+32),w=e.readUInt32LE(a+38),S=e.readUInt32LE(a+42),p=a+46,y=e.subarray(p,p+P),x=new TextDecoder(u&2048?"utf-8":void 0).decode(y);if(a=p+P+g+m,x.endsWith("/"))continue;if(u&1)throw new Error("Encrypted zip entries are not supported");let M=w>>>16&61440;if(M===40960||M===4096)throw new Error("Archive links are not supported");if(e.readUInt32LE(S)!==67324752)throw new Error("Invalid zip local header");let z=e.readUInt16LE(S+26),ae=e.readUInt16LE(S+28),ht=S+30+z+ae,mt=e.subarray(ht,ht+k),_;if(f===0)_=mt;else if(f===8)_=inflateRawSync(mt);else throw new Error(`Unsupported zip compression method: ${f}`);if(_.byteLength!==E)throw new Error("Zip entry size mismatch");this.addArchiveFile(o,x,new Uint8Array(_),l);}if(!o.has("SKILL.md"))throw new Error("Archive missing root SKILL.md");return o}findZipEndOfCentralDirectory(t){let e=Math.max(0,t.length-65535-22);for(let r=t.length-22;r>=e;r--)if(t.readUInt32LE(r)===101010256)return r;return -1}toRawUrl(t){try{let e=new URL(t);if(t.toLowerCase().endsWith("/skill.md"))return t;let r=this.WELL_KNOWN_PATHS[0],i=e.pathname.match(/\/.well-known\/(?:agent-skills|skills)\/([^/]+)\/?$/);if(i?.[1]){let o=e.pathname.replace(/\/.well-known\/(?:agent-skills|skills)\/.*$/,"");return `${e.protocol}//${e.host}${o}/${r}/${i[1]}/SKILL.md`}let s=e.pathname.replace(/\/$/,"");return `${e.protocol}//${e.host}${s}/${r}/${this.INDEX_FILE}`}catch{return t}}getSourceIdentifier(t){try{return new URL(t).hostname.replace(/^www\./,"")}catch{return "unknown"}}async hasSkillsIndex(t){return await this.fetchIndex(t)!==null}},Ut=new tt;function et(n,t){let e=normalize(resolve(t)),r=normalize(resolve(n));return r.startsWith(e+sep)||r===e}function j(n){return n.startsWith("./")}async function Ft(n){let t=new Map;try{let e=await readFile(join(n,".claude-plugin/marketplace.json"),"utf-8"),r=JSON.parse(e),i=r.metadata?.pluginRoot;if(i===void 0||j(i))for(let o of r.plugins??[]){if(!o.name||typeof o.source!="string"&&o.source!==void 0||o.source!==void 0&&!j(o.source))continue;let l=join(n,i??"",o.source??"");if(et(l,n)&&o.skills&&o.skills.length>0)for(let a of o.skills){if(!j(a))continue;let c=join(l,a);et(c,n)&&t.set(resolve(c),o.name);}}}catch{}try{let e=await readFile(join(n,".claude-plugin/plugin.json"),"utf-8"),r=JSON.parse(e);if(r.name&&r.skills&&r.skills.length>0)for(let i of r.skills){if(!j(i))continue;let s=join(n,i);et(s,n)&&t.set(resolve(s),r.name);}}catch{}return t}var je=["node_modules",".git","dist","build","__pycache__"];async function He(n){let t=join(n,".gitignore");try{let e=await readFile(t,"utf-8");return Glob.parseGitignoreContent(e)}catch{return []}}function nt(n){return n.toLowerCase().replace(/[\s_]+/g,"-")}function Ve(n){return n.split(sep).join("/").replace(/\/+/g,"/")}function Ge(){let n=process.env.INSTALL_INTERNAL_SKILLS;return n==="1"||n==="true"}async function jt(n){try{let t=join(n,"SKILL.md");return (await stat(t)).isFile()}catch{return false}}async function Tt(n,t){try{let e=await readFile(n,"utf-8"),{data:r}=c(e);if(!r.name||!r.description||typeof r.name!="string"||typeof r.description!="string")return null;let i=r.metadata&&typeof r.metadata=="object"&&!Array.isArray(r.metadata)?r.metadata:void 0;return i?.internal===!0&&!Ge()&&!t?.includeInternal?null:{name:b$1(r.name),description:b$1(r.description),path:dirname(n),rawContent:e,metadata:i}}catch{return null}}async function Ht(n,t=0,e=5){if(t>e)return [];try{let[r,i]=await Promise.all([jt(n),readdir(n,{withFileTypes:!0}).catch(()=>[])]),s=r?[n]:[],o=await Promise.all(i.filter(l=>l.isDirectory()&&!je.includes(l.name)).map(l=>Ht(join(n,l.name),t+1,e)));return [...s,...o.flat()]}catch{return []}}function Be(n,t){let e=normalize(resolve(n)),r=normalize(resolve(join(n,t)));return r.startsWith(e+sep)||r===e}async function st(n$1,t,e){let r=[],i=new Set,s=await G(n$1),o=new Set(Object.keys(s.skills).map(nt));if(t&&!Be(n$1,t))throw new Error(`Invalid subpath: "${t}" resolves outside the repository directory. Subpath must not contain ".." segments that escape the base path.`);let l=t?join(n$1,t):n$1,a=await Ft(l),c=p=>{let y=resolve(p.path);return a.has(y)&&(p.pluginName=a.get(y)),p},u=n(),f=p=>{if(o.size===0)return false;let y=Ve(relative(n$1,p.path));if(!u.some(z=>y===z||y.startsWith(`${z}/`)))return false;let pt=nt(p.name),M=nt(basename(p.path));return o.has(pt)||o.has(M)},k=async p=>{if(!await jt(p))return false;let y=await Tt(join(p,"SKILL.md"),e);return !y||i.has(y.name)||f(y)||(y=c(y),r.push(y),i.add(y.name)),true},E=t?t.replace(/^\/+|\/+$/g,"").split("/").filter(p=>p.length>0):[],P=E.length>0?`**/${E.join("/")}/**/SKILL.md`:"**/SKILL.md",g=await Glob.scan(P,{cwd:l,absolute:true,ignore:[...Glob.DEFAULT_IGNORE_PATTERNS,...await He(l)]}),m="/",w=l.split(sep).join(m);g.sort((p,y)=>p.split(m).length-y.split(m).length);let S=[];for(let p of g){if(S.some(x=>p.startsWith(`${x}${m}`)||p===x))continue;let y=dirname(p);if(await k(y)){let x=y.split(sep).join(m);if(x===w)continue;S.push(x);}}if(r.length===0||e?.fullDepth){let p=await Ht(l);for(let y of p){let x=await Tt(join(y,"SKILL.md"),e);x&&!i.has(x.name)&&!f(x)&&(x=c(x),r.push(x),i.add(x.name));}}return r}function qe(n){return n.name||basename(n.path)}function nr(n,t){let e=t.map(r=>r.toLowerCase());return n.filter(r=>{let i=r.name.toLowerCase(),s=qe(r).toLowerCase();return e.some(o=>o===i||o===s)})}var Vt="*";function rr(n,t){if(!n||n.length===0)return [];let e=new Set(t),r=[];for(let i of n)if(i!==Vt){if(i.includes("/")||i.includes("**")){r.push(i);continue}Gt.test(i)?t.some(s=>Wildcard.match(s,i))||r.push(i):e.has(i)||r.push(i);}return r}function ir(n,t){let e={wildcard:false,matched:[],invalid:[]};if(!n||n.length===0)return e;let r=new Set(t),i=new Set;for(let s of n){if(s===Vt){e.wildcard=true;continue}if(s.includes("/")||s.includes("**")){e.invalid.push(s);continue}if(Gt.test(s))for(let o of t)Wildcard.match(o,s)&&i.add(o);else r.has(s)?i.add(s):e.invalid.push(s);}return e.matched=Array.from(i),e}var Gt=/[*?[{}]/;var ot="houjallen/agent-skills";async function xr(n){let t=n.defaultPlugin;if(!t||typeof t.marketId!="string"||t.marketId.length===0)return ot;let e=n.markets[t.marketId];if(!e)return ot;let r=e.localPath??e.url;if(!r)return ot;let i=r;return e.subpath&&(i=`${i}@${e.subpath}`),e.ref&&(i=`${i}#${e.ref}`),i}function tn(n){if(!n||typeof n!="object"||Array.isArray(n))return null;let t=n;if(typeof t.marketId!="string"||t.marketId.length===0)return null;let e={marketId:t.marketId};return typeof t.pluginId=="string"&&t.pluginId.length>0&&(e.pluginId=t.pluginId),e}function h(n){return Filesystem.normalize(n)}function qt(n){if(n==="general"||n==="coder"||n==="all")return n}function en({scope:n}){let t=n==="project"?p():m(),e=Filesystem.join(t,n==="project"?".easbot":"easbot","skills");return Filesystem.normalize(e)}function T(){return Filesystem.join(m(),"skills","store")}function Yt(){return Filesystem.join(T(),"index.json")}function ct(n){let t=`${n.type}|${n.url}|${n.ref??""}`;return createHash("sha256").update(t).digest("hex")}function Qt(n){let t=ct(n);return Filesystem.join(T(),t)}function D(){return Filesystem.join(o(),"skills","cache")}function nn(n,t,e){if(e&&e.length>0)return N(e);let r=rn(n);if(r)return r;if(t?.includes("/")){let i=t.split("/")[0];if(i)return N(i)}return "default"}function rn(n){let t=n.localPath??n.url;if(!t)return null;if(n.type==="well-known")try{let i=new URL(t),s=i.hostname.replace(/^www\./,"").replace(/\./g,"-"),o=i.pathname.replace(/^\/+/,"").split("/")[0]||"";return o&&!s.endsWith(`-${o}`)?N(`${s}-${o}`):N(s)}catch{return null}let e=t.match(/^(?:https?:\/\/[^/]+\/|git@[^:]+:)([^/]+)\/([^/]+?)(?:\.git)?\/?$/);if(e)return N(e[2]??"");let r=t.split(/[\\/]/).filter(Boolean).pop();return r?N(r.replace(/\.git$/,"")):null}function N(n){let t=n.trim().replace(/[:\\/\0]/g,"-").replace(/\.git$/,"").replace(/\s+/g,"-");return t.length>64&&(t=t.slice(0,64)),t.length>0?t:"default"}function dt(n){if(n.type==="well-known")return sn(n.url);let t=Q(n);if(t)return Filesystem.join(D(),n.type,t);let e=n.url.replace(/^https?:\/\//,"").replace(/^git@[^:]+:/,"").replace(/\.git$/,"").replace(/[/:]/g,"-");return Filesystem.join(D(),n.type,e)}function sn(n){let t,e;try{let r=new URL(n);t=r.hostname.replace(/^www\./,"");let i=r.pathname.match(/\/\.well-known\/(agent-skills|skills)/);i?.[1]?e=`.well-known/${i[1]}`:e=".well-known/agent-skills";}catch{let r=createHash("sha256").update(n).digest("hex").slice(0,16);return Filesystem.join(D(),"wellknown",`unknown-${r}`)}return Filesystem.join(D(),"wellknown",t,e)}async function te(n){n.skillNames??[];if(n.type==="local")return on(n);let e=n.mode??"install",{cacheDir:r,source:i,cloneError:s}=await ln(n,e);return {tempDir:r,cacheHit:false,source:i,cloneError:s}}var ut=class extends Error{constructor(e){super(`Local source path does not exist: ${e}`);b(this,"localPath",e);this.name="LocalPathNotFoundError";}};async function on(n,t){let e=n.localPath??n.url;if(!existsSync(e))throw new ut(e);let r=Qt(n);return existsSync(r)&&await ee(r)?{tempDir:r,cacheHit:true,source:"local-cp",cloneError:null}:{tempDir:e,cacheHit:false,source:"local-cp",cloneError:null}}async function ln(n,t){let e=n.ref;if(!e){let l=Q(n);if(l){let[a,c]=l.split("/");if(a&&c){let u=await Wt(a,c);u&&(e=u);}}}e||(e="HEAD");let r=dt(n);if(n.type==="well-known")return existsSync(r)?{cacheDir:r,source:"cache-pull",cloneError:null}:(await Filesystem.mkdir(h(r),{recursive:true}),await fn(n.url,r),{cacheDir:r,source:"well-known-fetch",cloneError:null});if(existsSync(r))try{let l=fe(r);return t==="update"?(await l.fetch(),await l.checkout(e),{cacheDir:r,source:"cache-pull",cloneError:null}):(await l.checkout(e),{cacheDir:r,source:"cache-pull",cloneError:null})}catch{return {cacheDir:r,source:"cache-pull",cloneError:null}}async function i(l,a,c){return $t(l,a,c)}let s=null,o=null;try{return await Filesystem.mkdir(h(Filesystem.dirname(r)),{recursive:!0}),s=`${r}.clone-tmp`,await i(n.url,e,s),await rename(h(s),h(r)),{cacheDir:r,source:"cache-clone",cloneError:null}}catch(l){return l instanceof L?o=l:l instanceof Error&&(o=new L(`Failed to clone ${n.url}: ${l.message}`,n.url,false,false)),await Filesystem.mkdir(h(r),{recursive:true}).catch(()=>{}),{cacheDir:r,source:"cache-pull",cloneError:o}}finally{if(s)try{await rm(h(s),{recursive:!0,force:!0});}catch{}}}async function W(){let n=h(Yt()),t;try{t=await Filesystem.readText(n);}catch{return {version:6,markets:{}}}let e;try{e=JSON.parse(t);}catch{try{await rename(h(n),`${h(n)}.corrupt-${Date.now()}`);}catch{}return {version:6,markets:{}}}let r=e;if(r.version!==6||!r.markets)return {version:6,markets:{}};let i={version:6,markets:r.markets};if("defaultPlugin"in r){let s=tn(r.defaultPlugin);s&&(i.defaultPlugin=s);}return i}async function q(n){await Filesystem.writeJson(h(Yt()),n);}async function Er(){let n=await W(),t={};for(let e of Object.values(n.markets))for(let r of Object.values(e.plugins))for(let[i,s]of Object.entries(r.skills))t[i]={marketId:e.id,pluginId:r.id,pluginName:r.name,storePath:e.storePath,pluginSlug:r.id.split(":").slice(1).join(":")||r.id,url:e.url,type:e.type,localPath:e.localPath,subpath:e.subpath,ref:e.ref,addedAt:e.addedAt,skillPath:s.skillPath,computedHash:s.computedHash,sourceKey:e.id,sourcePath:e.localPath??e.storePath};return t}async function Pr(n,t,e,r,i){let s=await W(),o=s.markets[n];o||(o={...i,id:n,addedAt:i.addedAt??new Date().toISOString(),plugins:{}},s.markets[n]=o);let l=o.plugins[t];l||(l={id:t,name:t.split(":").slice(1).join(":")||t,skills:{}},o.plugins[t]=l),l.skills[e]=r,await q(s);}async function an(){let n=await W(),t=[];for(let e of Object.values(n.markets))for(let r of Object.values(e.plugins))for(let i of Object.values(r.skills))t.push({skillName:i.name,marketId:e.id,pluginId:r.id,entry:i});return t.sort((e,r)=>{let i=e.marketId.localeCompare(r.marketId);if(i!==0)return i;let s=e.pluginId.localeCompare(r.pluginId);return s!==0?s:e.skillName.localeCompare(r.skillName)}),t}async function cn(n){return (await an()).filter(e=>e.skillName===n)}async function br(n,t,e){let i=(await W()).markets[n];if(!i)return;let s=i.plugins[t];if(!s)return;let o=s.skills[e];if(o)return {skillName:o.name,marketId:n,pluginId:t,entry:o}}async function Lr(n,t,e){let r=await W(),i=r.markets[n];if(!i)return false;let s=i.plugins[t];return !s||!(e in s.skills)?false:(delete s.skills[e],await q(r),true)}async function un(n){let t=await cn(n);if(t.length===0)return [];let e=await W(),r=[];for(let i of t){let s=e.markets[i.marketId]?.plugins[i.pluginId];s&&n in s.skills&&(delete s.skills[n],r.push(i));}return r.length>0&&await q(e),r}async function vr(n,t,e,r,i,s,o){await ft([{skillName:n,parsed:t,sourceKey:e,sourcePath:r,storePath:i,skillPath:s,...o&&{computedHash:o}}]);}async function ft(n){if(n.length===0)return;let t=await W(),e=new Date().toISOString();for(let r of n){let i=r.sourceKey,s=nn(r.parsed,r.skillPath,r.pluginName),o=`${i}:${s}`,l=t.markets[i];if(!l){let u=r.parsed.type==="local"?r.parsed.localPath??r.parsed.url:dt(r.parsed);l={id:i,type:r.parsed.type,url:r.parsed.url,localPath:r.parsed.localPath,subpath:r.parsed.subpath,ref:r.parsed.ref,storePath:r.storePath,cachePath:u,addedAt:e,plugins:{}},t.markets[i]=l;}let a=l.plugins[o];a||(a={id:o,name:s,sourcePath:r.parsed.subpath,skills:{}},l.plugins[o]=a);let c={name:r.skillName,description:r.description??"",skillPath:r.skillPath,computedHash:r.computedHash};r.scope&&(c.scope=r.scope),a.skills[r.skillName]=c;}await q(t);}async function Ir(n){return (await un(n)).length>0}async function fn(n,t){let e;try{e=await Ut.fetchAllSkills(n);}catch{return}if(e.length!==0)for(let r of e)try{await dn(r,t);}catch{}}async function dn(n,t){let e=Filesystem.join(t,n.installName),r=Filesystem.normalize(e),i=Filesystem.normalize(t);if(!r.startsWith(`${i}/`)&&r!==i)throw new Error(`Unsafe skill dir: ${n.installName}`);await mkdir(h(e),{recursive:true});for(let[s,o]of n.files){let l=Filesystem.join(e,s),a=Filesystem.normalize(l);if(!a.startsWith(`${r}/`)&&a!==r||s.includes("\0"))continue;let c=dirname(h(l));c!==h(e)&&await mkdir(c,{recursive:true}),await writeFile(h(l),typeof o=="string"?o:Buffer.from(o));}}async function $r(n){return (await te({type:"git",url:n.url,ref:n.ref})).tempDir}async function Ar(n,t={}){let e=Qt(n),r=false;if(existsSync(e)&&(r=await ee(e),!r))try{await rmdir(h(e));}catch{}if(r){let a=await st(e,void 0,{includeInternal:t.includeInternal,fullDepth:t.fullDepth});if(a.length>0){let u=await Promise.all(a.map(async f=>{let k=lt(e,f.path);return {skillName:f.name,parsed:n,sourceKey:ct(n),sourcePath:e,storePath:e,skillPath:k,description:f.description,scope:qt(f.metadata?.scope),...f.pluginName&&{pluginName:f.pluginName},computedHash:await at(f.path)}}));await ft(u);}let c=n.type==="local"?"local-cp":"cache-pull";return {storeDir:e,cacheHit:true,source:c,skills:a,blobSkills:[],cloneError:null}}let i=await te(n);await Filesystem.mkdir(h(e),{recursive:true}).catch(()=>{});let s=await st(i.tempDir,void 0,{includeInternal:t.includeInternal,fullDepth:t.fullDepth}),o=[],l=Filesystem.normalize(e).replace(/\\/g,"/");for(let a of s){let c=lt(i.tempDir,a.path),u=Filesystem.join(e,c),f=`${lt(i.tempDir,a.path)}/SKILL.md`,k=Filesystem.normalize(u).replace(/\\/g,"/"),E="/",P=l.endsWith(E)?l:l+E;if(!k.startsWith(P)&&k!==l)throw new Error(`[INVARIANT 0048-yyy] cp target escapes storeRoot: target=${k} storeRoot=${l}
20
- source skill path=${a.path} (parsed.type=${n.type})
21
- \u4E1A\u52A1\u4EFB\u4F55\u65F6\u5019\u4E0D\u80FD\u64CD\u4F5C\u7528\u6237\u7684 local \u76EE\u5F55\u6216\u6587\u4EF6\u3002`);let g;try{await Filesystem.mkdir(h(Filesystem.dirname(u)),{recursive:!0}),await cp(h(a.path),h(u),{recursive:!0}),g=await at(u);}catch{}a.path=u,o.push({skill:a,skillRel:c,sourceSkillPath:f,targetPath:u,computedHash:g});}if(o.length>0){let a=o.filter(c=>c.computedHash).map(c=>({skillName:c.skill.name,parsed:n,sourceKey:ct(n),sourcePath:i.tempDir,storePath:e,skillPath:c.skillRel,description:c.skill.description,scope:qt(c.skill.metadata?.scope),...c.skill.pluginName&&{pluginName:c.skill.pluginName},computedHash:c.computedHash}));await ft(a);}return {storeDir:e,cacheHit:i.cacheHit,source:i.source,skills:s,blobSkills:[],cloneError:i.cloneError??null}}function lt(n,t){let r=Filesystem.normalize(n).replace(/\\/g,"/"),i=Filesystem.normalize(t).replace(/\\/g,"/"),s=r.toLowerCase();return i.toLowerCase().startsWith(`${s}/`)?i.slice(s.length+1):""}async function ee(n){try{return (await readdir(h(n))).length>0}catch{return false}}function Rr(n){try{let t=Filesystem.normalize(n);for(let e of [D(),T()]){let r=Filesystem.normalize(e);if(t===r||t.startsWith(`${r}/`))return !0}return !1}catch{return false}}async function Wr({cachePath:n,skillName:t,scope:e}){let r=Filesystem.join(en({scope:e}),t);return existsSync(r)&&await rm(h(r),{recursive:true,force:true}),await cp(h(n),h(r),{recursive:true}),r}async function Kr(n){let t=dt(n);existsSync(t)&&await rm(h(t),{recursive:true,force:true});}async function Ur(){let n=D();existsSync(n)&&await rm(h(n),{recursive:true,force:true});}var kn="skills-lock.json",ie=4;function se(n){return join(n||process.cwd(),kn)}function Or(n,t){return n?St(n,T(),t):null}async function G(n){let t=se(n);try{let e=await readFile(t,"utf-8"),r=JSON.parse(e);return typeof r.version!="number"||!r.skills||r.version<ie?gt():r}catch{return gt()}}async function oe(n,t){let e=se(t),r={};for(let o of Object.keys(n.skills).sort())r[o]=n.skills[o];let i={version:n.version,skills:r},s=JSON.stringify(i,null,2)+`
22
- `;await writeFile(e,s,"utf-8");}async function at(n){let t=[];await le(n,n,t),t.sort((r,i)=>r.relativePath.localeCompare(i.relativePath));let e=createHash("sha256");for(let r of t)e.update(r.relativePath),e.update(r.content);return e.digest("hex")}async function le(n,t,e){let r=await readdir(t,{withFileTypes:true});await Promise.all(r.map(async i=>{let s=join(t,i.name);if(i.isDirectory()){if(i.name===".git"||i.name==="node_modules")return;await le(n,s,e);}else if(i.isFile()){let o=await readFile(s),l=relative(n,s).split("\\").join("/");e.push({relativePath:l,content:o});}}));}async function jr(n,t,e){let r=await G(e),i=new Date().toISOString(),s=r.skills[n];r.skills[n]={...t,installedAt:s?.installedAt??i,updatedAt:i},await oe(r,e);}async function Hr(n,t){let e=await G(t);return n in e.skills?(delete e.skills[n],await oe(e,t),true):false}function gt(){return {version:ie,skills:{}}}export{un as $,Be as A,st as B,qe as C,nr as D,rr as E,ir as F,ot as G,xr as H,tn as I,en as J,T as K,Yt as L,ct as M,Qt as N,D as O,nn as P,dt as Q,te as R,ut as S,W as T,q as U,Er as V,Pr as W,an as X,cn as Y,br as Z,Lr as _,Q as a,vr as aa,Kn as b,ft as ba,Un as c,Ir as ca,O as d,$r as da,Rt as e,Ar as ea,Pt as f,lt as fa,L as g,ee as ga,Se as h,Rr as ha,xe as i,Wr as ia,It as j,Kr as ja,$t as k,Ur as ka,In as l,tt as m,Ut as n,U as o,St as p,ie as q,se as r,Or as s,G as t,oe as u,at as v,jr as w,Hr as x,Ge as y,Tt as z};
@@ -1,5 +0,0 @@
1
- import {v}from'./chunk-2YVJ7YP6.mjs';import {h,r,e,f,c}from'./chunk-6PJ3YQA7.mjs';import {k,p,q}from'./chunk-RWZ4LFSN.mjs';import {mkdir,readdir,writeFile,readFile,cp,lstat,access,rm,realpath,readlink,symlink}from'fs/promises';import {existsSync}from'fs';import {join,basename,dirname,normalize,resolve,sep,relative,extname}from'path';import {homedir,platform}from'os';var V=".agents",X="skills",Se=".agents/skills";async function ge(t){try{return await v(t)}catch{return}}async function G(t,e,a,r,n={}){if(n.expectedMode&&n.agentType){let l=await ne(t,n.agentType,{global:a,cwd:r});if(!l.installed||l.mode!==n.expectedMode)return false}let i=await ge(e);if(!i)return false;let s;if(a){let{readSkillLock:l}=await import('./skill-lock-KHPVP7AD.mjs');s=(await l()).skills[t]?.computedHash;}else {let{readLocalLock:l}=await import('./local-lock-LG5YL33V.mjs');s=(await l(r)).skills[t]?.computedHash;}return s?s===i:false}function P(t){return t.toLowerCase().replace(/[^a-z0-9._]+/g,"-").replace(/^[.-]+|[.-]+$/g,"").substring(0,255)||"unnamed-skill"}function w(t,e){let a=normalize(resolve(t)),r=normalize(resolve(e));return r.startsWith(a+sep)||r===a}function Y(t,e){return w(t,e)||w(e,t)}function N(t,e){let a=t?k()||homedir():e||p()||process.cwd();return join(a,V,X)}function te(t,e){let a=e||p()||process.cwd();return join(a,h,P(t),"skills")}function D(t,e$1,a,r$1){if(r(t,e$1?"global":"project"))return N(e$1,a);if(t==="eve"&&r$1)return te(r$1,a);let n=e[t],i=k()||homedir(),s=e$1?i:a||p()||process.cwd();return e$1?n.globalSkillsDir===void 0?join(s,n.skillsDir):n.globalSkillsDir:join(s,n.skillsDir)}function he(t,e){return resolve(dirname(t),e)}async function S(t){try{await rm(t,{recursive:!0,force:!0});}catch{}await mkdir(t,{recursive:true});}async function j(t,e){try{let a=resolve(t),r=resolve(e),[n,i]=await Promise.all([realpath(a).catch(()=>a),realpath(r).catch(()=>r)]);if(n===i)return !0;let s=q(t),l=q(e);if(s===l)return !0;try{if((await lstat(e)).isSymbolicLink()){let d=await readlink(e);if(he(e,d)===a)return !0;await rm(e);}else await rm(e,{recursive:!0});}catch(k){if(k&&typeof k=="object"&&"code"in k&&k.code==="ELOOP")try{await rm(e,{force:!0});}catch{}}let u=dirname(e);await mkdir(u,{recursive:!0});let h=q(u),g=relative(h,t),f=platform()==="win32"?"junction":void 0;return await symlink(f==="junction"?a:g,e,f),!0}catch{return false}}async function Me(t,e$1,a={}){let r$1=e[e$1],n=a.global??false,i=a.cwd||process.cwd(),s=a.eveSubagent;if(n&&r$1.globalSkillsDir===void 0)return {success:false,path:"",mode:a.mode??"symlink",error:`${r$1.displayName} does not support global skill installation`};let l=t.name||basename(t.path),u=P(l),h=a.mode??"symlink",f=e$1==="eve"&&h==="symlink"?D(e$1,n,i,s):N(n,i),o=join(f,u),k=D(e$1,n,i,s),d=join(k,P(t.name||basename(t.path))),c=q(d),m=q(o);if(!w(f,o))return {success:false,path:d,mode:h,error:"Invalid skill name: potential path traversal detected"};if(!w(k,d))return {success:false,path:d,mode:h,error:"Invalid skill name: potential path traversal detected"};try{if(Y(t.path,c))return {success:!0,path:c,mode:h,skipped:!0};if(h==="copy")return await G(u,t.path,n,i,{expectedMode:"copy",agentType:e$1})&&existsSync(c)?{success:!0,path:c,canonicalPath:m,mode:"copy",skipped:!0,skippedReason:"up-to-date"}:(await S(c),await R(t.path,c,e$1),{success:!0,path:c,canonicalPath:m,mode:"copy"});if(Y(t.path,c))return {success:!0,path:c,canonicalPath:m,mode:"symlink",skipped:!0};if(await G(u,t.path,n,i)&&existsSync(m)||(await S(m),await R(t.path,m,e$1)),!n&&r(e$1,"project"))return {success:!0,path:m,canonicalPath:m,mode:"copy"};if(n&&r(e$1,"global"))return {success:!0,path:m,canonicalPath:m,mode:"symlink"};if(!n){let z=join(i,e[e$1].skillsDir.split("/")[0]);if(!existsSync(z))return {success:!0,path:m,canonicalPath:m,mode:"symlink",skipped:!0}}return o===d?{success:!0,path:d,canonicalPath:o,mode:"copy"}:await j(t.path,c)?{success:!0,path:c,canonicalPath:m,mode:"symlink"}:await G(u,t.path,n,i,{expectedMode:"copy",agentType:e$1})&&existsSync(c)?{success:!0,path:c,canonicalPath:m,mode:"symlink",skipped:!0,skippedReason:"up-to-date"}:(await S(c),await R(t.path,c,e$1),{success:!0,path:c,canonicalPath:m,mode:"symlink",symlinkFailed:!0})}catch(b){return {success:false,path:c,mode:h,error:b instanceof Error?b.message:"Unknown error"}}}async function je(t,e$1,a={}){let{isGlobal:r$1=false,agentType:n,cwd:i,storePath:s}=a,l=q(t),u=q(e$1);if(l===u)return {success:true,path:u,canonicalPath:t,mode:"copy"};if(!r$1&&n&&i&&!r(n,"project")){let f=join(i,e[n].skillsDir.split("/")[0]);if(!existsSync(f))return {success:true,path:e$1,canonicalPath:t,mode:"symlink",skipped:true}}let h=s?q(s):l;return await j(h,u)?{success:true,path:e$1,canonicalPath:t,mode:"symlink"}:{success:true,path:e$1,canonicalPath:t,mode:"symlink",symlinkFailed:true}}async function _e(t,e,a={}){let{agentType:r="easbot"}=a,n=q(t),i=q(e);if(n===i)return {success:true,path:i,canonicalPath:t,mode:"copy"};try{return await S(i),await R(n,i,r),{success:!0,path:i,canonicalPath:t,mode:"copy"}}catch(s){return {success:false,path:e,mode:"copy",error:s instanceof Error?s.message:"Unknown error"}}}var ke=new Set(["metadata.json"]),we=new Set([".git","__pycache__","__pypackages__"]),ye=(t,e=false)=>!!(ke.has(t)||e&&we.has(t));function L(t){let{data:e,content:a}=c(t),r={};if(typeof e.description=="string"&&(r.description=e.description),typeof e.license=="string"&&(r.license=e.license),e.metadata&&typeof e.metadata=="object"&&!Array.isArray(e.metadata)){let s=Object.fromEntries(Object.entries(e.metadata).filter(l=>typeof l[1]=="string"));Object.keys(s).length>0&&(r.metadata=s);}let n=Object.keys(r);return n.length===0?a.replace(/^\r?\n/u,""):`---
2
- ${n.map(s=>`${s}: ${JSON.stringify(r[s])}`).join(`
3
- `)}
4
- ---
5
- ${a.replace(/^\r?\n/u,"")}`}async function R(t,e,a){await mkdir(e,{recursive:true});let r=await readdir(t,{withFileTypes:true});await Promise.all(r.filter(n=>!ye(n.name,n.isDirectory())).map(async n=>{let i=join(t,n.name),s=join(e,n.name);if(n.isDirectory())await R(i,s,a);else try{if(a==="eve"&&n.name.toLowerCase()==="skill.md"){await writeFile(s,L(await readFile(i,"utf-8")));return}await cp(i,s,{dereference:!0,recursive:!0});}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT"&&n.isSymbolicLink())console.warn(`Skipping broken symlink: ${i}`);else throw l}}));}function be(t){return t.some(e=>basename(e.path).toLowerCase()==="skill.md")}function U(t){return `${P(t)}.md`}function ve(t){let e=t.find(r=>basename(r.path).toLowerCase()==="skill.md");if(e)return L(e.contents);let a=t.find(r=>extname(r.path).toLowerCase()===".md");return a?L(a.contents):""}async function Ue(t,e,a={}){return (await ne(t,e,a)).installed}async function ne(t,e$1,a={}){let r=e[e$1],n=P(t);if(a.global&&r.globalSkillsDir===void 0)return {installed:false,mode:null,path:""};let i=a.global?r.globalSkillsDir:e$1==="eve"&&a.eveSubagent?te(a.eveSubagent,a.cwd):join(a.cwd||process.cwd(),r.skillsDir),s=join(i,n);if(!w(i,s))return {installed:false,mode:null,path:""};try{let l=await lstat(s);return l.isSymbolicLink()?{installed:!0,mode:"symlink",path:s}:l.isDirectory()?{installed:!0,mode:"copy",path:s}:{installed:!1,mode:null,path:s}}catch{return {installed:false,mode:null,path:s}}}function Be(t,e,a={}){let r=P(t),n=D(e,a.global??false,a.cwd,a.eveSubagent),i=join(n,r);if(!w(n,i))throw new Error("Invalid skill name: potential path traversal detected");return i}async function H(t,e){try{return await access(join(t,"SKILL.md")),{created:!1}}catch{}return await mkdir(t,{recursive:true}),await e(t),{created:true}}function $e(t,e={}){let a=P(t),r=e.agent==="eve"?D("eve",e.global??false,e.cwd,e.eveSubagent):N(e.global??false,e.cwd),n=join(r,a);if(!w(r,n))throw new Error("Invalid skill name: potential path traversal detected");return n}async function ze(t,e$1,a={}){let r$1=e[e$1],n=a.global??false,i=a.cwd||process.cwd(),s=a.mode??"symlink",l=a.eveSubagent;if(n&&r$1.globalSkillsDir===void 0)return {success:false,path:"",mode:s,error:`${r$1.displayName} does not support global skill installation`};let u=P(t.installName),h=e$1==="eve"&&s==="symlink"?D(e$1,n,i,l):N(n,i),g=join(h,u),f=D(e$1,n,i,l),o=join(f,u);if(!w(h,g))return {success:false,path:o,mode:s,error:"Invalid skill name: potential path traversal detected"};if(!w(f,o))return {success:false,path:o,mode:s,error:"Invalid skill name: potential path traversal detected"};try{if(s==="copy"){await S(o);let c=e$1==="eve"?U(t.installName):"SKILL.md",m=join(o,c);return await writeFile(m,e$1==="eve"?L(t.content):t.content,"utf-8"),{success:!0,path:o,mode:"copy"}}let k=e$1==="eve"?U(t.installName):"SKILL.md";if(await H(g,async c=>{let m=join(c,k);await writeFile(m,e$1==="eve"?L(t.content):t.content,"utf-8");}),n&&r(e$1,"global"))return {success:!0,path:g,canonicalPath:g,mode:"symlink"};if(!await j(g,o)){await S(o);let c=e$1==="eve"?U(t.installName):"SKILL.md",m=join(o,c);return await writeFile(m,e$1==="eve"?L(t.content):t.content,"utf-8"),{success:!0,path:o,canonicalPath:g,mode:"symlink",symlinkFailed:!0}}return {success:!0,path:o,canonicalPath:g,mode:"symlink"}}catch(k){return {success:false,path:o,mode:s,error:k instanceof Error?k.message:"Unknown error"}}}async function Ke(t,e$1,a={}){let r$1=e[e$1],n=a.global??false,i=a.cwd||process.cwd(),s=a.mode??"symlink",l=a.eveSubagent;if(n&&r$1.globalSkillsDir===void 0)return {success:false,path:"",mode:s,error:`${r$1.displayName} does not support global skill installation`};let u=P(t.installName),h=e$1==="eve"&&s==="symlink"?D(e$1,n,i,l):N(n,i),g=join(h,u),f=D(e$1,n,i,l),o=join(f,u);if(!w(h,g))return {success:false,path:o,mode:s,error:"Invalid skill name: potential path traversal detected"};if(!w(f,o))return {success:false,path:o,mode:s,error:"Invalid skill name: potential path traversal detected"};async function k(d){for(let[c,m]of t.files){let b=join(d,c);if(!w(d,b))continue;let $=dirname(b);$!==d&&await mkdir($,{recursive:true}),await writeFile(b,e$1==="eve"&&basename(c).toLowerCase()==="skill.md"&&typeof m=="string"?L(m):m);}}try{return s==="copy"?(await S(o),await k(o),{success:!0,path:o,mode:"copy"}):(await H(g,k),n&&r(e$1,"global")?{success:!0,path:g,canonicalPath:g,mode:"symlink"}:await j(g,o)?{success:!0,path:o,canonicalPath:g,mode:"symlink"}:(await S(o),await k(o),{success:!0,path:o,canonicalPath:g,mode:"symlink",symlinkFailed:!0}))}catch(d){return {success:false,path:o,mode:s,error:d instanceof Error?d.message:"Unknown error"}}}async function Ge(t,e$1,a={}){let r$1=e[e$1],n=a.global??false,i=a.cwd||process.cwd(),s=a.mode??"symlink",l=a.eveSubagent;if(n&&r$1.globalSkillsDir===void 0)return {success:false,path:"",mode:s,error:`${r$1.displayName} does not support global skill installation`};let u=P(t.installName),h=D(e$1,n,i,l);if(e$1==="eve"&&!be(t.files)){let d=join(h,U(t.installName));if(!w(h,d))return {success:false,path:d,mode:s,error:"Invalid skill name: potential path traversal detected"};try{return await mkdir(h,{recursive:!0}),await rm(d,{recursive:!0,force:!0}),await writeFile(d,ve(t.files),"utf-8"),{success:!0,path:d,mode:"copy"}}catch(c){return {success:false,path:d,mode:s,error:c instanceof Error?c.message:"Unknown error"}}}let g=e$1==="eve"&&s==="symlink"?D(e$1,n,i,l):N(n,i),f=join(g,u),o=join(h,u);if(!w(g,f))return {success:false,path:o,mode:s,error:"Invalid skill name: potential path traversal detected"};if(!w(h,o))return {success:false,path:o,mode:s,error:"Invalid skill name: potential path traversal detected"};async function k(d){for(let c of t.files){let m=join(d,c.path);if(!w(d,m))continue;let b=dirname(m);b!==d&&await mkdir(b,{recursive:true}),await writeFile(m,e$1==="eve"&&basename(c.path).toLowerCase()==="skill.md"?L(c.contents):c.contents,"utf-8");}}try{if(s==="copy")return await S(o),await k(o),{success:!0,path:o,mode:"copy"};if(await H(f,k),n&&r(e$1,"global"))return {success:!0,path:f,canonicalPath:f,mode:"symlink"};if(!n&&!r(e$1,"project")){let c=join(i,e[e$1].skillsDir.split("/")[0]);if(!existsSync(c))return {success:!0,path:f,canonicalPath:f,mode:"symlink",skipped:!0}}return await j(f,o)?{success:!0,path:o,canonicalPath:f,mode:"symlink"}:(await S(o),await k(o),{success:!0,path:o,canonicalPath:f,mode:"symlink",symlinkFailed:!0})}catch(d){return {success:false,path:o,mode:s,error:d instanceof Error?d.message:"Unknown error"}}}async function He(t={}){let e=t.cwd||process.cwd(),{scanInstalledSkillDirs:a}=await import('./scan-QEVID2TF.mjs'),r=t.agentFilter?null:await f(),n=t.agentFilter??r??void 0,i=await a({scope:t.scope,cwd:e,agentFilter:n}),s=u=>u.replace(/\\/g,"/").replace(/\/[^/]+\/?$/,"").replace(/\/+$/,""),l=new Map;for(let u of i){let h=s(u.skillDir),g=`${u.scope}::${h}::${u.name}`,f=l.get(g);if(f){for(let o of u.agents)f.agents.includes(o)||f.agents.push(o);continue}l.set(g,{name:u.name,description:"",path:u.skillDir,canonicalPath:u.skillDir,scope:u.scope,agents:[...u.agents]});}return Array.from(l.values())}export{V as a,X as b,Se as c,P as d,N as e,te as f,D as g,Me as h,je as i,_e as j,Ue as k,ne as l,Be as m,H as n,$e as o,ze as p,Ke as q,Ge as r,He as s};
@@ -1,2 +0,0 @@
1
- import {l,k}from'./chunk-RWZ4LFSN.mjs';import {createHash}from'crypto';import {parse}from'yaml';import {existsSync,readdirSync,readFileSync}from'fs';import {join,resolve}from'path';import {homedir}from'os';import {xdgConfig}from'xdg-basedir';import {Wildcard}from'@easbot/utils';function T(s){let l=s.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);return l?{data:parse(l[1])??{},content:l[2]??""}:{data:{},content:s}}var Z=/\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]/g,Q=/\x1b\][\s\S]*?(?:\x07|\x1b\\)/g,V=/\x1b[P^_][\s\S]*?(?:\x1b\\)/g,X=/\x1b[\x20-\x7e]/g,Y=/[\x80-\x9f]/g,ee=/[\x00-\x06\x07\x08\x0b\x0c\x0d-\x1a\x1c-\x1f\x7f]/g;function te(s){return s.replace(Q,"").replace(V,"").replace(Z,"").replace(X,"").replace(Y,"").replace(ee,"")}function A(s){return te(s).replace(/[\r\n]+/g," ").trim()}function t(){return k()}function y(){return xdgConfig??join(k(),".config")}function R(){return process.env.CODEX_HOME?.trim()||join(t(),".codex")}function j(){return process.env.CLAUDE_CONFIG_DIR?.trim()||join(t(),".claude")}function _(){return process.env.VIBE_HOME?.trim()||join(t(),".vibe")}function O(){return process.env.HERMES_HOME?.trim()||join(t(),".hermes")}function E(){return process.env.AUTOHAND_HOME?.trim()||join(t(),".autohand")}function z(){return process.env.APPDATA?.trim()}function H(){return process.env.FLATPAK_XDG_CONFIG_HOME?.trim()}function re(s,l){try{let r=JSON.parse(readFileSync(s,"utf-8"));return !!(r.dependencies?.[l]||r.devDependencies?.[l])}catch{return false}}function ie(s=t(),l=existsSync){return l(join(s,".openclaw"))?join(s,".openclaw/skills"):l(join(s,".clawdbot"))?join(s,".clawdbot/skills"):l(join(s,".moltbot"))?join(s,".moltbot/skills"):join(s,".openclaw/skills")}var m={easbot:{name:"easbot",displayName:"EASBot",skillsDir:".easbot/skills",get globalSkillsDir(){return join(l(),"easbot","skills")},detectInstalled:async()=>true},"aider-desk":{name:"aider-desk",displayName:"AiderDesk",skillsDir:".aider-desk/skills",get globalSkillsDir(){return join(t(),".aider-desk/skills")},detectInstalled:async()=>existsSync(join(t(),".aider-desk"))},amp:{name:"amp",displayName:"Amp",skillsDir:".agents/skills",get globalSkillsDir(){return join(y(),"agents/skills")},detectInstalled:async()=>existsSync(join(y(),"amp"))},antigravity:{name:"antigravity",displayName:"Antigravity",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".gemini/antigravity/skills")},detectInstalled:async()=>existsSync(join(t(),".gemini/antigravity"))},"antigravity-cli":{name:"antigravity-cli",displayName:"Antigravity CLI",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".gemini/antigravity-cli/skills")},detectInstalled:async()=>existsSync(join(t(),".gemini/antigravity-cli"))},astrbot:{name:"astrbot",displayName:"AstrBot",skillsDir:"data/skills",get globalSkillsDir(){return join(t(),".astrbot/data/skills")},detectInstalled:async()=>existsSync(join(process.cwd(),"data/skills"))||existsSync(join(t(),".astrbot"))},"autohand-code":{name:"autohand-code",displayName:"Autohand Code CLI",skillsDir:".autohand/skills",get globalSkillsDir(){return join(E(),"skills")},detectInstalled:async()=>existsSync(E())},augment:{name:"augment",displayName:"Augment",skillsDir:".augment/skills",get globalSkillsDir(){return join(t(),".augment/skills")},detectInstalled:async()=>existsSync(join(t(),".augment"))},bob:{name:"bob",displayName:"IBM Bob",skillsDir:".bob/skills",get globalSkillsDir(){return join(t(),".bob/skills")},detectInstalled:async()=>existsSync(join(t(),".bob"))},"claude-code":{name:"claude-code",displayName:"Claude Code",skillsDir:".claude/skills",get globalSkillsDir(){return join(j(),"skills")},detectInstalled:async()=>existsSync(j())},openclaw:{name:"openclaw",displayName:"OpenClaw",skillsDir:".openclaw/skills",get globalSkillsDir(){return ie()},detectInstalled:async()=>existsSync(join(t(),".openclaw"))||existsSync(join(t(),".clawdbot"))||existsSync(join(t(),".moltbot"))},cline:{name:"cline",displayName:"Cline",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".agents","skills")},detectInstalled:async()=>existsSync(join(t(),".cline"))},"codearts-agent":{name:"codearts-agent",displayName:"CodeArts Agent",skillsDir:".codeartsdoer/skills",get globalSkillsDir(){return join(t(),".codeartsdoer/skills")},detectInstalled:async()=>existsSync(join(t(),".codeartsdoer"))},codebuddy:{name:"codebuddy",displayName:"CodeBuddy",skillsDir:".codebuddy/skills",get globalSkillsDir(){return join(t(),".codebuddy/skills")},detectInstalled:async()=>existsSync(join(process.cwd(),".codebuddy"))||existsSync(join(t(),".codebuddy"))},codemaker:{name:"codemaker",displayName:"Codemaker",skillsDir:".codemaker/skills",get globalSkillsDir(){return join(t(),".codemaker/skills")},detectInstalled:async()=>existsSync(join(t(),".codemaker"))},codestudio:{name:"codestudio",displayName:"Code Studio",skillsDir:".codestudio/skills",get globalSkillsDir(){return join(t(),".codestudio/skills")},detectInstalled:async()=>existsSync(join(t(),".codestudio"))},codex:{name:"codex",displayName:"Codex",skillsDir:".agents/skills",get globalSkillsDir(){return join(R(),"skills")},detectInstalled:async()=>existsSync(R())||existsSync("/etc/codex")},"command-code":{name:"command-code",displayName:"Command Code",skillsDir:".commandcode/skills",get globalSkillsDir(){return join(t(),".commandcode/skills")},detectInstalled:async()=>existsSync(join(t(),".commandcode"))},continue:{name:"continue",displayName:"Continue",skillsDir:".continue/skills",get globalSkillsDir(){return join(t(),".continue/skills")},detectInstalled:async()=>existsSync(join(process.cwd(),".continue"))||existsSync(join(t(),".continue"))},cortex:{name:"cortex",displayName:"Cortex Code",skillsDir:".cortex/skills",get globalSkillsDir(){return join(t(),".snowflake/cortex/skills")},detectInstalled:async()=>existsSync(join(t(),".snowflake/cortex"))},crush:{name:"crush",displayName:"Crush",skillsDir:".crush/skills",get globalSkillsDir(){return join(t(),".config/crush/skills")},detectInstalled:async()=>existsSync(join(t(),".config/crush"))},cursor:{name:"cursor",displayName:"Cursor",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".cursor/skills")},detectInstalled:async()=>existsSync(join(t(),".cursor"))},deepagents:{name:"deepagents",displayName:"Deep Agents",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".deepagents/agent/skills")},detectInstalled:async()=>existsSync(join(t(),".deepagents"))},devin:{name:"devin",displayName:"Devin for Terminal",skillsDir:".devin/skills",get globalSkillsDir(){return join(y(),"devin/skills")},detectInstalled:async()=>existsSync(join(y(),"devin"))},dexto:{name:"dexto",displayName:"Dexto",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".agents/skills")},detectInstalled:async()=>existsSync(join(t(),".dexto"))},droid:{name:"droid",displayName:"Droid",skillsDir:".factory/skills",get globalSkillsDir(){return join(t(),".factory/skills")},detectInstalled:async()=>existsSync(join(t(),".factory"))},eve:{name:"eve",displayName:"Eve",skillsDir:"agent/skills",globalSkillsDir:void 0,detectInstalled:async()=>{let s=process.cwd();return existsSync(join(s,"agent"))&&re(join(s,"package.json"),"eve")}},firebender:{name:"firebender",displayName:"Firebender",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".firebender/skills")},detectInstalled:async()=>existsSync(join(t(),".firebender"))},forgecode:{name:"forgecode",displayName:"ForgeCode",skillsDir:".forge/skills",get globalSkillsDir(){return join(t(),".forge/skills")},detectInstalled:async()=>existsSync(join(t(),".forge"))},"gemini-cli":{name:"gemini-cli",displayName:"Gemini CLI",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".gemini/skills")},detectInstalled:async()=>existsSync(join(t(),".gemini"))},"github-copilot":{name:"github-copilot",displayName:"GitHub Copilot",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".copilot/skills")},detectInstalled:async()=>existsSync(join(t(),".copilot"))},goose:{name:"goose",displayName:"Goose",skillsDir:".goose/skills",get globalSkillsDir(){return join(y(),"goose/skills")},detectInstalled:async()=>existsSync(join(y(),"goose"))},"hermes-agent":{name:"hermes-agent",displayName:"Hermes Agent",skillsDir:".hermes/skills",get globalSkillsDir(){return join(O(),"skills")},detectInstalled:async()=>existsSync(O())},"inference-sh":{name:"inference-sh",displayName:"inference.sh",skillsDir:".inferencesh/skills",get globalSkillsDir(){return join(t(),".inferencesh/skills")},detectInstalled:async()=>existsSync(join(t(),".inferencesh"))},jazz:{name:"jazz",displayName:"Jazz",skillsDir:".jazz/skills",get globalSkillsDir(){return join(t(),".jazz/skills")},detectInstalled:async()=>existsSync(join(t(),".jazz"))||existsSync(join(process.cwd(),".jazz"))},junie:{name:"junie",displayName:"Junie",skillsDir:".junie/skills",get globalSkillsDir(){return join(t(),".junie/skills")},detectInstalled:async()=>existsSync(join(t(),".junie"))},"iflow-cli":{name:"iflow-cli",displayName:"iFlow CLI",skillsDir:".iflow/skills",get globalSkillsDir(){return join(t(),".iflow/skills")},detectInstalled:async()=>existsSync(join(t(),".iflow"))},kilo:{name:"kilo",displayName:"Kilo Code",skillsDir:".kilocode/skills",get globalSkillsDir(){return join(t(),".kilocode/skills")},detectInstalled:async()=>existsSync(join(t(),".kilocode"))},"kimi-code-cli":{name:"kimi-code-cli",displayName:"Kimi Code CLI",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".agents/skills")},detectInstalled:async()=>existsSync(join(t(),".kimi-code"))||existsSync(join(t(),".kimi"))},"kiro-cli":{name:"kiro-cli",displayName:"Kiro CLI",skillsDir:".kiro/skills",get globalSkillsDir(){return join(t(),".kiro/skills")},detectInstalled:async()=>existsSync(join(t(),".kiro"))},kode:{name:"kode",displayName:"Kode",skillsDir:".kode/skills",get globalSkillsDir(){return join(t(),".kode/skills")},detectInstalled:async()=>existsSync(join(t(),".kode"))},lingma:{name:"lingma",displayName:"Lingma",skillsDir:".lingma/skills",get globalSkillsDir(){return join(t(),".lingma/skills")},detectInstalled:async()=>existsSync(join(t(),".lingma"))},loaf:{name:"loaf",displayName:"Loaf",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".agents/skills")},detectInstalled:async()=>existsSync(join(t(),".loaf"))},mcpjam:{name:"mcpjam",displayName:"MCPJam",skillsDir:".mcpjam/skills",get globalSkillsDir(){return join(t(),".mcpjam/skills")},detectInstalled:async()=>existsSync(join(t(),".mcpjam"))},"mistral-vibe":{name:"mistral-vibe",displayName:"Mistral Vibe",skillsDir:".vibe/skills",get globalSkillsDir(){return join(_(),"skills")},detectInstalled:async()=>existsSync(_())},moxby:{name:"moxby",displayName:"Moxby",skillsDir:".moxby/skills",get globalSkillsDir(){return join(t(),".moxby/skills")},detectInstalled:async()=>existsSync(join(t(),".moxby"))},mux:{name:"mux",displayName:"Mux",skillsDir:".mux/skills",get globalSkillsDir(){return join(t(),".mux/skills")},detectInstalled:async()=>existsSync(join(t(),".mux"))},opencode:{name:"opencode",displayName:"OpenCode",skillsDir:".agents/skills",get globalSkillsDir(){return join(y(),"opencode/skills")},detectInstalled:async()=>existsSync(join(y(),"opencode"))},openhands:{name:"openhands",displayName:"OpenHands",skillsDir:".openhands/skills",get globalSkillsDir(){return join(t(),".openhands/skills")},detectInstalled:async()=>existsSync(join(t(),".openhands"))},ona:{name:"ona",displayName:"Ona",skillsDir:".ona/skills",get globalSkillsDir(){return join(t(),".ona/skills")},detectInstalled:async()=>existsSync(join(t(),".ona"))},pi:{name:"pi",displayName:"Pi",skillsDir:".pi/skills",get globalSkillsDir(){return join(t(),".pi/agent/skills")},detectInstalled:async()=>existsSync(join(t(),".pi/agent"))},qoder:{name:"qoder",displayName:"Qoder",skillsDir:".qoder/skills",get globalSkillsDir(){return join(t(),".qoder/skills")},detectInstalled:async()=>existsSync(join(t(),".qoder"))},"qoder-cn":{name:"qoder-cn",displayName:"Qoder CN",skillsDir:".qoder/skills",get globalSkillsDir(){return join(t(),".qoder-cn/skills")},detectInstalled:async()=>existsSync(join(t(),".qoder-cn"))},"qwen-code":{name:"qwen-code",displayName:"Qwen Code",skillsDir:".qwen/skills",get globalSkillsDir(){return join(t(),".qwen/skills")},detectInstalled:async()=>existsSync(join(t(),".qwen"))},replit:{name:"replit",displayName:"Replit",skillsDir:".agents/skills",get globalSkillsDir(){return join(y(),"agents/skills")},detectInstalled:async()=>existsSync(join(process.cwd(),".replit"))},reasonix:{name:"reasonix",displayName:"Reasonix",skillsDir:".reasonix/skills",get globalSkillsDir(){return join(t(),".reasonix/skills")},detectInstalled:async()=>existsSync(join(t(),".reasonix"))},rovodev:{name:"rovodev",displayName:"Rovo Dev",skillsDir:".rovodev/skills",get globalSkillsDir(){return join(t(),".rovodev/skills")},detectInstalled:async()=>existsSync(join(t(),".rovodev"))},roo:{name:"roo",displayName:"Roo Code",skillsDir:".roo/skills",get globalSkillsDir(){return join(t(),".roo/skills")},detectInstalled:async()=>existsSync(join(t(),".roo"))},"tabnine-cli":{name:"tabnine-cli",displayName:"Tabnine CLI",skillsDir:".tabnine/agent/skills",get globalSkillsDir(){return join(t(),".tabnine/agent/skills")},detectInstalled:async()=>existsSync(join(t(),".tabnine"))},terramind:{name:"terramind",displayName:"Terramind",skillsDir:".terramind/skills",get globalSkillsDir(){return join(t(),".terramind/skills")},detectInstalled:async()=>existsSync(join(t(),".terramind"))},tinycloud:{name:"tinycloud",displayName:"Tinycloud",skillsDir:".tinycloud/skills",get globalSkillsDir(){return join(t(),".tinycloud/skills")},detectInstalled:async()=>existsSync(join(t(),".tinycloud"))},trae:{name:"trae",displayName:"Trae",skillsDir:".trae/skills",get globalSkillsDir(){return join(t(),".trae/skills")},detectInstalled:async()=>existsSync(join(t(),".trae"))},"trae-cn":{name:"trae-cn",displayName:"Trae CN",skillsDir:".trae/skills",get globalSkillsDir(){return join(t(),".trae-cn/skills")},detectInstalled:async()=>existsSync(join(t(),".trae-cn"))},warp:{name:"warp",displayName:"Warp",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".agents/skills")},detectInstalled:async()=>existsSync(join(t(),".warp"))},windsurf:{name:"windsurf",displayName:"Windsurf",skillsDir:".windsurf/skills",get globalSkillsDir(){return join(t(),".codeium/windsurf/skills")},detectInstalled:async()=>existsSync(join(t(),".codeium/windsurf"))},zed:{name:"zed",displayName:"Zed",skillsDir:".agents/skills",get globalSkillsDir(){return join(t(),".agents/skills")},detectInstalled:async()=>existsSync(join(y(),"zed"))||!!z()&&existsSync(join(z(),"Zed"))||!!H()&&existsSync(join(H(),"zed"))},zencoder:{name:"zencoder",displayName:"Zencoder",skillsDir:".zencoder/skills",get globalSkillsDir(){return join(t(),".zencoder/skills")},detectInstalled:async()=>existsSync(join(t(),".zencoder"))},zenflow:{name:"zenflow",displayName:"Zenflow",skillsDir:".zencoder/skills",get globalSkillsDir(){return join(t(),".zencoder/skills")},detectInstalled:async()=>existsSync(join(t(),".zencoder"))},neovate:{name:"neovate",displayName:"Neovate",skillsDir:".neovate/skills",get globalSkillsDir(){return join(t(),".neovate/skills")},detectInstalled:async()=>existsSync(join(t(),".neovate"))},pochi:{name:"pochi",displayName:"Pochi",skillsDir:".pochi/skills",get globalSkillsDir(){return join(t(),".pochi/skills")},detectInstalled:async()=>existsSync(join(t(),".pochi"))},promptscript:{name:"promptscript",displayName:"PromptScript",skillsDir:".agents/skills",globalSkillsDir:void 0,detectInstalled:async()=>existsSync(join(process.cwd(),".promptscript"))||existsSync(join(process.cwd(),"promptscript.yaml"))},adal:{name:"adal",displayName:"AdaL",skillsDir:".adal/skills",get globalSkillsDir(){return join(t(),".adal/skills")},detectInstalled:async()=>existsSync(join(t(),".adal"))},universal:{name:"universal",displayName:"Universal",skillsDir:".agents/skills",get globalSkillsDir(){return join(y(),"agents/skills")},detectInstalled:async()=>false}};async function _e(){return (await Promise.all(Object.entries(m).map(async([l,r])=>({type:l,installed:await r.detectInstalled()})))).filter(l=>l.installed).map(l=>l.type)}function Oe(s){return m[s]}var M=join("agent","subagents");function ae(s=process.cwd()){let l=join(s,M);if(!existsSync(l))return [];try{return readdirSync(l,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name).sort()}catch{return []}}function U(s,l){let r=m[s];if(l==="project")return r.skillsDir===".agents/skills";if(r.globalSkillsDir===void 0)return false;let i=resolve(k()||homedir(),".agents","skills");return resolve(r.globalSkillsDir)===i}function oe(s){return Object.entries(m).filter(([l])=>U(l,s)).map(([l])=>l)}function Ee(s){let l=new Set(oe(s));return Object.keys(m).filter(r=>!l.has(r))}var G=/^\.[^/]+\/skills$/;function $(){let s=new Set;for(let l of Object.values(m))l.skillsDir&&G.test(l.skillsDir)&&s.add(l.skillsDir);return Array.from(s).sort()}function ce(){let s=new Set;for(let l of Object.values(m))l.globalSkillsDir!==void 0&&s.add(l.globalSkillsDir);return Array.from(s).sort()}function ze(){let s=$(),l=ce(),r=Array.from(new Set([...s,...l])).sort();return {project:s,global:l,all:r}}function W(){return $().map(s=>`${s}/`)}function He(s,l){let r=m[s];return l==="global"?U(s,"global"):r.skillsDir===".agents/skills"}var q="*";function Fe(s){if(!s||s.length===0)return [];let l=Object.keys(m),r=[];for(let i of s)if(i!==q){if(i.includes("/")||i.includes("**")){r.push(i);continue}K.test(i)?l.some(a=>Wildcard.match(a,i))||r.push(i):l.includes(i)||r.push(i);}return r}function Be(s){if(!s||s.length===0)return [];let l=Object.keys(m);if(s.includes(q))return [...l];if(s.some(r=>K.test(r))){let r=new Set;for(let i of s)if(!(i.includes("/")||i.includes("**")))for(let a of l)Wildcard.match(a,i)&&r.add(a);return Array.from(r)}return Array.from(new Set(s.filter(r=>!r.includes("/")&&!r.includes("**"))))}var K=/[*?[{}]/;function de(s={}){let l=s.cwd??process.cwd(),r=s.agentFilter??Object.keys(m),i=new Set;for(let a of r){let o=m[a];if(!o.skillsDir||!G.test(o.skillsDir))continue;let u=o.skillsDir===".agents/skills"?join(l,".agents","skills"):join(l,o.skillsDir);if(a==="eve")for(let g of ae(l)){let b=join(l,M,g,"skills");i.add(h(`${b}/**/SKILL.md`));}i.add(h(`${u}/**/SKILL.md`));}return Array.from(i).sort()}function ge(s={}){let l=s.agentFilter??Object.keys(m),r=new Set;for(let i of l){let a=m[i];a.globalSkillsDir!==void 0&&r.add(h(`${a.globalSkillsDir}/**/SKILL.md`));}return Array.from(r).sort()}function Me(s={}){let l=de(s),r=ge(s),i=Array.from(new Set([...l,...r])).sort();return {project:l,global:r,all:i}}function h(s){return s.replace(/\\/g,"/")}function Ue(){let s=new Set;for(let r of Object.values(m)){if(r.globalSkillsDir===void 0)continue;let i=h(r.globalSkillsDir);i!==""&&s.add(i);}let l=h(join(k()||homedir(),".agents","skills"));return s.add(l),Array.from(s).sort()}var ke=process.env.SKILLS_DOWNLOAD_URL||"https://skills.sh",me={"zapier/connectors":{downloadUrl:s=>`https://connectors-skills.zapier.com/download/${encodeURIComponent(s)}/snapshot.json`}},Ze=["houjallen","vercel-labs","anthropics"],v=1e4;function pe(s){return s.toLowerCase().replace(/[\s_]+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"")}var C=false;function Qe(){C=false;}async function N(s,l,r){try{let i=`https://api.github.com/repos/${s}/git/trees/${encodeURIComponent(l)}?recursive=1`,a={Accept:"application/vnd.github.v3+json","User-Agent":"skills-cli"};r&&(a.Authorization=`Bearer ${r}`);let o=await fetch(i,{headers:a,signal:AbortSignal.timeout(v)});if(o.ok){let g=await o.json();return {tree:{sha:g.sha,branch:l,tree:g.tree},rateLimited:!1}}return {tree:null,rateLimited:o.status===403&&o.headers.get("x-ratelimit-remaining")==="0"}}catch{return {tree:null,rateLimited:false}}}async function fe(s,l,r){let i=l?[l]:["HEAD","main","master"];if(C&&r){let u=r();if(!u)return null;for(let g of i){let b=await N(s,g,u);if(b.tree)return b.tree}return null}let a=false;for(let u of i){let g=await N(s,u,null);if(g.tree)return g.tree;if(g.rateLimited){a=true;break}}if(!a||!r)return null;C=true;let o=r();if(!o)return null;for(let u of i){let g=await N(s,u,o);if(g.tree)return g.tree}return null}function Ve(s,l){let r=l.replace(/\\/g,"/");return r.toLowerCase().endsWith("/skill.md")?r=r.slice(0,-9):r.toLowerCase().endsWith("skill.md")&&(r=r.slice(0,-8)),r.endsWith("/")&&(r=r.slice(0,-1)),r?s.tree.find(a=>a.type==="tree"&&a.path===r)?.sha??null:s.sha}var ye=["","skills/","skills/.curated/","skills/.experimental/","skills/.system/"];function be(){let s=W();return Array.from(new Set([...ye,...s]))}function De(s,l){let r=s.tree.filter(k=>k.type==="blob"&&k.path.toLowerCase().endsWith("skill.md")).map(k=>k.path),i=l?l.endsWith("/")?l:l+"/":"",a=i?r.filter(k=>k.startsWith(i)||k===i+"SKILL.md"):r;if(a.length===0)return [];let o=[],u=new Set,g=new Set(["node_modules",".git","dist","build","__pycache__"]),b=new Set(a.map(k=>k.toLowerCase()));for(let k of be()){let c=i+k,p=k!=="";for(let d of a){if(!d.startsWith(c))continue;let x=d.slice(c.length);if(x.toLowerCase()==="skill.md"){u.has(d)||(o.push(d),u.add(d));continue}let f=x.split("/");if(f.length===2&&f[1].toLowerCase()==="skill.md"){u.has(d)||(o.push(d),u.add(d));continue}if(p&&f.length===3&&f[2].toLowerCase()==="skill.md"&&!g.has(f[0])&&!g.has(f[1])){let D=`${c}${f[0]}/SKILL.md`.toLowerCase();!b.has(D)&&!u.has(d)&&(o.push(d),u.add(d));}}}return o.length>0?o:a.filter(k=>k.split("/").length<=6)}async function Se(s,l,r){try{let i=`https://raw.githubusercontent.com/${s}/${l}/${r}`,a=await fetch(i,{signal:AbortSignal.timeout(v)});return a.ok?await a.text():null}catch{return null}}async function he(s,l){try{let[r,i]=s.split("/"),a=`${ke}/api/download/${encodeURIComponent(r)}/${encodeURIComponent(i)}/${encodeURIComponent(l)}`,u=me[s.toLowerCase()]?.downloadUrl(l)??a,g=await fetch(u,{signal:AbortSignal.timeout(v)});return g.ok?await g.json():null}catch{return null}}function xe(s){let l=createHash("sha256");for(let r of [...s].sort((i,a)=>i.path.localeCompare(a.path)))l.update(r.path),l.update(r.contents);return l.digest("hex")}async function Xe(s,l={}){let r=await fe(s,l.ref,l.getToken);if(!r)return null;let i=De(r,l.subpath);if(i.length===0)return null;let a=await Promise.all(i.map(async c=>{let p=await Se(s,r.branch,c);return {mdPath:c,content:p}})),o=[];for(let{mdPath:c,content:p}of a){if(!p)continue;let{data:d}=T(p);if(!d.name||!d.description||typeof d.name!="string"||typeof d.description!="string"||d.metadata?.internal===true&&!l.includeInternal)continue;let f=A(d.name),D=A(d.description);o.push({mdPath:c,name:f,description:D,content:p,slug:pe(f),metadata:d.metadata});}if(o.length===0)return null;let u=s.toLowerCase(),g=await Promise.all(o.map(async c=>{let p=await he(u,c.slug);return {skill:c,download:p}}));return g.every(c=>c.download!==null)?{skills:g.map(({skill:c,download:p})=>{let d=c.mdPath.toLowerCase(),f=(d.endsWith("/skill.md")?c.mdPath.slice(0,-9):d==="skill.md"?"":c.mdPath.slice(0,-9))?p.files:p.files.filter(D=>D.path.toLowerCase()==="skill.md");return {name:c.name,description:c.description,path:"",rawContent:c.content,metadata:c.metadata,files:f,snapshotHash:f.length===p.files.length?p.hash:xe(f),repoPath:c.mdPath}}),tree:r}:null}
2
- export{fe as A,Ve as B,De as C,Xe as D,te as a,A as b,T as c,ie as d,m as e,_e as f,Oe as g,M as h,ae as i,U as j,oe as k,Ee as l,G as m,$ as n,ce as o,ze as p,W as q,He as r,Fe as s,Be as t,Me as u,Ue as v,me as w,Ze as x,pe as y,Qe as z};
@@ -1 +0,0 @@
1
- import {g}from'./chunk-676OG55M.mjs';import {z}from'./chunk-2YVJ7YP6.mjs';import {u,v as v$1,e}from'./chunk-6PJ3YQA7.mjs';import {Glob}from'@easbot/utils';import {stat,realpath}from'fs/promises';import {dirname,join}from'path';async function v(i={}){let o=i.cwd??process.cwd(),e$1=i.scope??"project",r=u({cwd:o,agentFilter:i.agentFilter}),s;if(e$1==="project"?s=r.project:e$1==="global"?s=r.global:s=r.all,s.length===0)return [];let a=new Set,c=[],T=await Promise.all(s.map(n=>Glob.scan(n,{cwd:o,absolute:true,ignore:Glob.DEFAULT_IGNORE_PATTERNS,follow:true})));for(let n of T)for(let l of n)a.has(l)||(a.add(l),c.push(l));let $=Object.keys(e),G="/",m=[],F=o.replace(/\\/g,"/"),M=v$1();for(let n of c){let l=dirname(n),g$1=l.replace(/\\/g,"/"),p=g$1.split(G),B=p.length>=3?`${p[p.length-3]??""}/${p[p.length-2]??""}`:"",d=await z(n);if(!d)continue;let E=g$1.startsWith(`${F}/`),I=M.some(t=>t!==""&&g$1.startsWith(`${t}/`)),f=E&&!I?"project":"global",k=[],R=e$1==="both"?f==="project":e$1==="project",C=e$1==="both"?f==="global":e$1==="global",b=t=>t.replace(/\\/g,"/"),L=b(l).replace(/\/[^/]+\/?$/,"");for(let t of $){let P=e[t],S=[];R&&P.skillsDir!==void 0&&S.push(g(t,false,o)),C&&P.globalSkillsDir!==void 0&&S.push(g(t,true,o));for(let w of S)if(b(w).replace(/\/+$/,"")===L)try{let D=join(w,d.name);if(!(await stat(D)).isDirectory())continue;await realpath(D),k.includes(t)||k.push(t);break}catch{}}m.push({name:d.name,skillDir:l,skillMdPath:n,parentDir:B,scope:f,agents:k});}return m}async function Z(i={}){let o=await v(i),e=new Set,r=[];for(let s of o){let a=`${s.scope}:${s.name}`;if(e.has(a))continue;e.add(a);let c=await z(s.skillMdPath);c&&r.push(c);}return r}export{v as a,Z as b};