skill-atlas-cli 0.6.0-beta.0 → 0.6.0-beta.2

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 (3) hide show
  1. package/bin/cli.js +16 -16
  2. package/lib/index.js +15 -15
  3. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -4,7 +4,7 @@ import e,{readFileSync as t}from"node:fs";import{cac as n}from"cac";import r fro
4
4
  `)}function Je(){if(!e.existsSync(D))return null;try{let t=JSON.parse(e.readFileSync(D,`utf-8`));return t.agentId&&t.token?{agentId:t.agentId,token:t.token,registeredAt:t.registeredAt,expiresAt:t.expiresAt}:null}catch{return null}}function Ye(){if(!e.existsSync(k)){let t=l.dirname(k);e.existsSync(t)||e.mkdirSync(t,{recursive:!0}),e.writeFileSync(k,JSON.stringify({version:1,installed:{}},null,2)+`
5
5
  `)}}function Xe(){Ye();try{return JSON.parse(e.readFileSync(k,`utf-8`))}catch{return{version:1,installed:{}}}}function Ze(t,n,r){let i=Xe();i.installed[t]={version:n,installedAt:new Date().toISOString(),location:r},e.writeFileSync(k,JSON.stringify(i,null,2)+`
6
6
  `)}function Qe(t){let n=Xe();delete n.installed[t],e.writeFileSync(k,JSON.stringify(n,null,2)+`
7
- `)}var j={CONFIG_DIR:E,OPENCLAW_STATE_DIR:O,LOCKFILE:k,DEVICE_JSON:Le,ASSET_TYPES:Re,ensureConfigDir:A,installDirForType:ze,getApiBase:Be,setApiBase:Ve,applyPreEnvironment:He,getAuthToken:Ue,saveAuthToken:We,getDeviceId:Ge,initLockfile:Ye,readLockfile:Xe,updateLockfile:Ze,removeLockfile:Qe,getAgentId:Ke,saveAgentCredentials:qe,getAgentCredentials:Je};const $e=`https://unpkg.com/skill-atlas-cli`,et=`curl -fsSL ${$e}/install.sh | bash`,tt=`irm ${$e}/install.ps1 | iex`;function nt(){return process.platform===`win32`?tt:et}function rt(e,t=`latest`){return new Promise(n=>{let r=p(`npm`,[`install`,`-g`,`${e}@${t}`,`--force`],{stdio:`inherit`,shell:!0});r.on(`close`,e=>n(e??0)),r.on(`error`,()=>n(1))})}function it(){return new Promise(e=>{let t=process.platform===`win32`?p(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,tt],{stdio:`inherit`,windowsHide:!0}):p(`bash`,[`-c`,et],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const at=`https://maas-skill-hub-cli.oss-cn-hangzhou.aliyuncs.com/uninstall.sh`,ot=`curl -fsSL ${at} | bash`,st=`irm ${at} | iex`;function ct(){return process.platform===`win32`?st:ot}function lt(){return new Promise(e=>{let t=process.platform===`win32`?p(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,st],{stdio:`inherit`,windowsHide:!0}):p(`bash`,[`-c`,ot],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const ut=j.CONFIG_DIR;u(ut,`update-check.json`);var M=Me(Ae(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c}))(),1),N=class extends Error{code;responseData;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.responseData=n}};const P=h.create({timeout:1e4,headers:{"Content-Type":`application/json`}});P.interceptors.request.use(e=>(e.baseURL=j.getApiBase(),e.headers.set(`X-SkillAtlas-Agent-Id`,j.getAgentId()),e)),P.interceptors.response.use(e=>e,e=>{if(e.response){let{data:t,statusText:n}=e.response;throw new N(t?.message||t?.error||n,t?.code,t)}throw e});async function F(e,t={}){let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await P.get(e,{params:n})).data}async function dt(e,t={}){return(await P.post(e,t)).data}async function ft(e,t,n){return(await P.post(e,t,{headers:{Authorization:`Bearer ${n}`}})).data}async function I(e,t,n){let r=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await P.get(e,{params:r,headers:{Authorization:`Bearer ${n}`}})).data}async function L(e){try{return await e()}catch(e){if(e instanceof N&&e.responseData&&typeof e.responseData==`object`)return e.responseData;throw e}}function pt(e){let{items:t,page:n,pageSize:r,total:i}=(e&&typeof e==`object`&&`data`in e?e.data:e)??{};return{items:Array.isArray(t)?t:[],page:n??1,pageSize:r??20,total:i??0}}async function mt(e={}){return pt(await F(`/api/v1/skills`,{page:1,pageSize:20,...e}))}async function ht(e){try{return await F(`/api/v1/skills/${e}`)}catch{return null}}async function gt(e,t){let n=await P.get(`/api/v1/download`,{params:{slug:e,version:t},responseType:`arraybuffer`});return Buffer.from(n.data)}async function _t(e){return L(()=>dt(`/api/v1/agents/register`,e))}async function vt(e){return L(()=>F(`/api/v1/agents/${e}/challenge`))}async function yt(e){return L(()=>dt(`/api/v1/agents/authenticate`,e))}async function bt(e,t){return L(()=>ft(`/api/v1/community/skills/reviews`,e,t))}async function xt(e,t,n,r={},i){return(await P.post(e,t,{headers:{Authorization:`Bearer ${n}`,...r},...i!==void 0&&{timeout:i}})).data}async function St(e,t,n){return(await P.post(e,t,{headers:{Authorization:`Bearer ${n}`,"Content-Type":`multipart/form-data`}})).data}async function Ct(e,t,n){let r=new FormData,i=new Uint8Array(e.file);return r.append(`file`,new Blob([i]),n),r.append(`slug`,e.slug),r.append(`version`,e.version),r.append(`displayName`,e.displayName),e.summary&&r.append(`summary`,e.summary),e.tags&&e.tags.length>0&&e.tags.forEach(e=>r.append(`tags`,e)),L(()=>St(`/api/v1/skills/upload`,r,t))}async function wt(e){return L(()=>F(`/api/v1/agents/${e}/skills/published`))}async function Tt(e,t){return L(()=>I(`/api/v1/skills/uploads`,{page:1,pageSize:20,...e},t))}function Et(){return crypto.randomUUID()}async function Dt(e,t,n,r,i){let a=r||Et();return L(()=>xt(`/api/v1/service-gateway/services/${e}/invoke`,t,n,{"X-Idempotency-Key":a},i))}async function Ot(e){let t=await F(`/api/v1/skills/combinations`,{...e});if(t&&typeof t==`object`&&`data`in t){let e=t.data;return Array.isArray(e)?e:[]}return Array.isArray(t)?t:[]}async function kt(e,t){return L(()=>I(`/api/v1/agents/${e}`,{},t))}async function At(e,t){return L(()=>I(`/api/v1/agents/me/credits/records`,{page:1,pageSize:20,...e},t))}const jt=ht;async function Mt(e,t){return L(()=>ft(`/api/mailboxes`,e,t))}async function Nt(e,t){return L(()=>I(`/api/mailboxes`,{page:1,pageSize:20,...e},t))}async function Pt(e,t,n){return L(()=>ft(`/api/mailboxes/${e}/emails`,t,n))}async function Ft(e,t,n){return L(()=>I(`/api/mailboxes/${e}/emails/sent`,{page:1,pageSize:20,...t},n))}async function It(e,t,n){return L(()=>I(`/api/mailboxes/${e}/emails/sent/${t}`,{},n))}async function Lt(e,t,n){return L(()=>I(`/api/mailboxes/${e}/emails/received`,{page:1,pageSize:20,...t},n))}async function Rt(e,t,n){return L(()=>I(`/api/mailboxes/${e}/emails/received/${t}`,{},n))}const R=ie.homedir(),{env:z}=process,zt=z.XDG_DATA_HOME||(R?g.join(R,`.local`,`share`):void 0),Bt=z.XDG_CONFIG_HOME||(R?g.join(R,`.config`):void 0);z.XDG_STATE_HOME||R&&g.join(R,`.local`,`state`),z.XDG_CACHE_HOME||R&&g.join(R,`.cache`),z.XDG_RUNTIME_DIR;const Vt=(z.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);zt&&Vt.unshift(zt);const Ht=(z.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);Bt&&Ht.unshift(Bt);const B=ae(),Ut=Bt??v(B,`.config`),Wt=process.env.CODEX_HOME?.trim()||v(B,`.codex`),Gt=process.env.CLAUDE_CONFIG_DIR?.trim()||v(B,`.claude`);function Kt(e=B,t=x){return t(v(e,`.openclaw`))?v(e,`.openclaw/skills`):t(v(e,`.clawdbot`))?v(e,`.clawdbot/skills`):t(v(e,`.moltbot`))?v(e,`.moltbot/skills`):v(e,`.openclaw/skills`)}const V={"claude-code":{name:`claude-code`,displayName:`Claude Code`,skillsDir:`.claude/skills`,globalSkillsDir:v(Gt,`skills`),detectInstalled:async()=>x(Gt)},openclaw:{name:`openclaw`,displayName:`OpenClaw`,skillsDir:`skills`,globalSkillsDir:Kt(),detectInstalled:async()=>x(v(B,`.openclaw`))||x(v(B,`.clawdbot`))||x(v(B,`.moltbot`))},cline:{name:`cline`,displayName:`Cline`,skillsDir:`.cline/skills`,globalSkillsDir:v(B,`.cline`,`skills`),detectInstalled:async()=>x(v(B,`.cline`))},antigravity:{name:`antigravity`,displayName:`Antigravity`,skillsDir:`.agent/skills`,globalSkillsDir:v(B,`.gemini/antigravity/skills`),detectInstalled:async()=>x(v(B,`.gemini/antigravity`))},hermes:{name:`hermes`,displayName:`Hermes`,skillsDir:`.hermes/skills`,globalSkillsDir:v(B,`.hermes`,`skills`),detectInstalled:async()=>x(v(B,`.hermes`))},codex:{name:`codex`,displayName:`Codex`,skillsDir:`.agents/skills`,globalSkillsDir:v(Wt,`skills`),detectInstalled:async()=>x(Wt)||x(`/etc/codex`)},cursor:{name:`cursor`,displayName:`Cursor`,skillsDir:`.agents/skills`,globalSkillsDir:v(B,`.cursor/skills`),detectInstalled:async()=>x(v(B,`.cursor`))},"gemini-cli":{name:`gemini-cli`,displayName:`Gemini CLI`,skillsDir:`.agents/skills`,globalSkillsDir:v(B,`.gemini/skills`),detectInstalled:async()=>x(v(B,`.gemini`))},"github-copilot":{name:`github-copilot`,displayName:`GitHub Copilot`,skillsDir:`.github/skills`,globalSkillsDir:v(B,`.copilot/skills`),detectInstalled:async()=>x(v(B,`.copilot`))},"iflow-cli":{name:`iflow-cli`,displayName:`iFlow CLI`,skillsDir:`.iflow/skills`,globalSkillsDir:v(B,`.iflow/skills`),detectInstalled:async()=>x(v(B,`.iflow`))},kilo:{name:`kilo`,displayName:`Kilo Code`,skillsDir:`.kilocode/skills`,globalSkillsDir:v(B,`.kilocode/skills`),detectInstalled:async()=>x(v(B,`.kilocode`))},"kimi-cli":{name:`kimi-cli`,displayName:`Kimi Code CLI`,skillsDir:`.agents/skills`,globalSkillsDir:v(B,`.config/agents/skills`),detectInstalled:async()=>x(v(B,`.kimi`))},"kiro-cli":{name:`kiro-cli`,displayName:`Kiro CLI`,skillsDir:`.kiro/skills`,globalSkillsDir:v(B,`.kiro/skills`),detectInstalled:async()=>x(v(B,`.kiro`))},opencode:{name:`opencode`,displayName:`OpenCode`,skillsDir:`.agents/skills`,globalSkillsDir:v(Ut,`opencode/skills`),detectInstalled:async()=>x(v(Ut,`opencode`))},qoder:{name:`qoder`,displayName:`Qoder`,skillsDir:`.qoder/skills`,globalSkillsDir:v(B,`.qoder/skills`),detectInstalled:async()=>x(v(B,`.qoder`))},qoderwork:{name:`qoderwork`,displayName:`QoderWork`,skillsDir:`.qoderwork/skills`,globalSkillsDir:v(B,`.qoderwork/skills`),detectInstalled:async()=>x(v(B,`.qoderwork`))},"qwen-code":{name:`qwen-code`,displayName:`Qwen Code`,skillsDir:`.qwen/skills`,globalSkillsDir:v(B,`.qwen/skills`),detectInstalled:async()=>x(v(B,`.qwen`))},trae:{name:`trae`,displayName:`Trae`,skillsDir:`.trae/skills`,globalSkillsDir:v(B,`.trae/skills`),detectInstalled:async()=>x(v(B,`.trae`))},"trae-cn":{name:`trae-cn`,displayName:`Trae CN`,skillsDir:`.trae/skills`,globalSkillsDir:v(B,`.trae-cn/skills`),detectInstalled:async()=>x(v(B,`.trae-cn`))},windsurf:{name:`windsurf`,displayName:`Windsurf`,skillsDir:`.windsurf/skills`,globalSkillsDir:v(B,`.codeium/windsurf/skills`),detectInstalled:async()=>x(v(B,`.codeium/windsurf`))},universal:{name:`universal`,displayName:`Universal`,skillsDir:`.agents/skills`,globalSkillsDir:v(Ut,`agents/skills`),showInUniversalList:!1,detectInstalled:async()=>!1}},qt=new le({write(e,t,n){n()}}),Jt=M.default.green(`◆`),Yt=M.default.red(`■`),Xt=M.default.green(`◇`),Zt=M.default.green(`●`),Qt=M.default.dim(`○`);M.default.green(`✓`);const $t=M.default.green(`•`),H=M.default.dim(`│`),U=M.default.dim(`─`),en=Symbol(`cancel`);async function tn(e){let{message:t,items:n,maxVisible:r=8,initialSelected:i=[],required:a=!1,lockedSection:o,leadingSpacer:s=0}=e;return new Promise(e=>{let c=ce.createInterface({input:process.stdin,output:qt,terminal:!!process.stdin.isTTY});process.stdin.isTTY&&process.stdin.setRawMode(!0),ce.emitKeypressEvents(process.stdin,c);let l=``,u=0,d=new Set(i),f=0,p=o?o.items.map(e=>e.value):[],m=(e,t)=>{if(!t)return!0;let n=t.toLowerCase();return e.label.toLowerCase().includes(n)||String(e.value).toLowerCase().includes(n)},h=()=>n.filter(e=>m(e,l)),g=process.stderr.isTTY?process.stderr:process.stdout,ee=()=>{if(f>0&&g.isTTY)for(let e=0;e<f;e++)g.write(`\x1B[1A\x1B[2K`)},_=(e=`active`)=>{ee();let i=[],a=h(),c=e===`active`?Jt:e===`cancel`?Yt:Xt;for(let e=0;e<s;e++)i.push(`${H}`);if(i.push(`${c} ${M.default.bold(t)}`),e===`active`){if(o&&o.items.length>0){i.push(`${H}`);let e=`${M.default.bold(o.title)} ${M.default.dim(`── always included`)}`;i.push(`${H} ${U}${U} ${e} ${U.repeat(12)}`);for(let e of o.items)i.push(`${H} ${$t} ${M.default.bold(e.label)}`);i.push(`${H}`),i.push(`${H} ${U}${U} ${M.default.bold(`Additional agents`)} ${U.repeat(29)}`)}let e=`${H} ${M.default.dim(`Search:`)} ${l}${M.default.inverse(` `)}`;i.push(e),i.push(`${H} ${M.default.dim(`↑↓ move, space select, enter confirm`)}`),i.push(`${H}`);let t=Math.max(0,Math.min(u-Math.floor(r/2),a.length-r)),s=Math.min(a.length,t+r),c=a.slice(t,s);if(a.length===0)i.push(`${H} ${M.default.dim(`No matches found`)}`);else{for(let e=0;e<c.length;e++){let n=c[e],r=t+e,a=d.has(n.value),o=r===u,s=a?Zt:Qt,l=o?M.default.underline(n.label):n.label,f=n.hint?M.default.dim(` (${n.hint})`):``,p=o?M.default.cyan(`❯`):` `;i.push(`${H} ${p} ${s} ${l}${f}`)}let e=t,n=a.length-s;if(e>0||n>0){let t=[];e>0&&t.push(`↑ ${e} more`),n>0&&t.push(`↓ ${n} more`),i.push(`${H} ${M.default.dim(t.join(` `))}`)}}i.push(`${H}`);let f=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];if(f.length===0)i.push(`${H} ${M.default.dim(`Selected: (none)`)}`);else{let e=f.length<=3?f.join(`, `):`${f.slice(0,3).join(`, `)} +${f.length-3} more`;i.push(`${H} ${M.default.green(`Selected:`)} ${e}`)}i.push(`${M.default.dim(`└`)}`)}else if(e===`submit`){let e=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];i.push(`${H} ${M.default.dim(e.join(`, `))}`)}else e===`cancel`&&i.push(`${H} ${M.default.strikethrough(M.default.dim(`Cancelled`))}`);g.write(i.join(`
7
+ `)}var j={CONFIG_DIR:E,OPENCLAW_STATE_DIR:O,LOCKFILE:k,DEVICE_JSON:Le,ASSET_TYPES:Re,ensureConfigDir:A,installDirForType:ze,getApiBase:Be,setApiBase:Ve,applyPreEnvironment:He,getAuthToken:Ue,saveAuthToken:We,getDeviceId:Ge,initLockfile:Ye,readLockfile:Xe,updateLockfile:Ze,removeLockfile:Qe,getAgentId:Ke,saveAgentCredentials:qe,getAgentCredentials:Je};const $e=`https://unpkg.com/skill-atlas-cli`,et=`curl -fsSL ${$e}/install.sh | bash`,tt=`irm ${$e}/install.ps1 | iex`;function nt(){return process.platform===`win32`?tt:et}function rt(e,t=`latest`){return new Promise(n=>{let r=p(`npm`,[`install`,`-g`,`${e}@${t}`,`--force`],{stdio:`inherit`,shell:!0});r.on(`close`,e=>n(e??0)),r.on(`error`,()=>n(1))})}function it(){return new Promise(e=>{let t=process.platform===`win32`?p(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,tt],{stdio:`inherit`,windowsHide:!0}):p(`bash`,[`-c`,et],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const at=`https://maas-skill-hub-cli.oss-cn-hangzhou.aliyuncs.com/uninstall.sh`,ot=`curl -fsSL ${at} | bash`,st=`irm ${at} | iex`;function ct(){return process.platform===`win32`?st:ot}function lt(){return new Promise(e=>{let t=process.platform===`win32`?p(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,st],{stdio:`inherit`,windowsHide:!0}):p(`bash`,[`-c`,ot],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const ut=j.CONFIG_DIR;u(ut,`update-check.json`);var M=Me(Ae(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c}))(),1),N=class extends Error{code;responseData;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.responseData=n}};const P=h.create({timeout:1e4,headers:{"Content-Type":`application/json`}});P.interceptors.request.use(e=>(e.baseURL=j.getApiBase(),e.headers.set(`X-SkillAtlas-Agent-Id`,j.getAgentId()),e)),P.interceptors.response.use(e=>e,e=>{if(e.response){let{data:t,statusText:n}=e.response;throw new N(t?.message||t?.error||n,t?.code,t)}throw e});async function F(e,t={}){let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await P.get(e,{params:n})).data}async function dt(e,t={}){return(await P.post(e,t)).data}async function ft(e,t,n){return(await P.post(e,t,{headers:{Authorization:`Bearer ${n}`}})).data}async function I(e,t,n){let r=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await P.get(e,{params:r,headers:{Authorization:`Bearer ${n}`}})).data}async function L(e){try{return await e()}catch(e){if(e instanceof N&&e.responseData&&typeof e.responseData==`object`)return e.responseData;throw e}}function pt(e){let{items:t,page:n,pageSize:r,total:i}=(e&&typeof e==`object`&&`data`in e?e.data:e)??{};return{items:Array.isArray(t)?t:[],page:n??1,pageSize:r??20,total:i??0}}async function mt(e={}){return pt(await F(`/api/v1/skills`,{page:1,pageSize:20,...e}))}async function ht(e){try{return await F(`/api/v1/skills/${e}`)}catch{return null}}async function gt(e,t){let n=await P.get(`/api/v1/download`,{params:{slug:e,version:t},responseType:`arraybuffer`});return Buffer.from(n.data)}async function _t(e){return L(()=>dt(`/api/v1/agents/register`,e))}async function vt(e){return L(()=>F(`/api/v1/agents/${e}/challenge`))}async function yt(e){return L(()=>dt(`/api/v1/agents/authenticate`,e))}async function bt(e,t){return L(()=>ft(`/api/v1/community/skills/reviews`,e,t))}async function xt(e,t,n,r={},i){return(await P.post(e,t,{headers:{Authorization:`Bearer ${n}`,...r},...i!==void 0&&{timeout:i}})).data}async function St(e,t,n){return(await P.post(e,t,{headers:{Authorization:`Bearer ${n}`,"Content-Type":`multipart/form-data`}})).data}async function Ct(e,t,n){let r=new FormData,i=new Uint8Array(e.file);return r.append(`file`,new Blob([i]),n),r.append(`slug`,e.slug),r.append(`version`,e.version),r.append(`displayName`,e.displayName),e.summary&&r.append(`summary`,e.summary),e.tags&&e.tags.length>0&&e.tags.forEach(e=>r.append(`tags`,e)),L(()=>St(`/api/v1/skills/upload`,r,t))}async function wt(e){return L(()=>F(`/api/v1/agents/${e}/skills/published`))}async function Tt(e,t){return L(()=>I(`/api/v1/skills/uploads`,{page:1,pageSize:20,...e},t))}function Et(){return crypto.randomUUID()}async function Dt(e,t,n,r,i){let a=r||Et();return L(()=>xt(`/api/v1/service-gateway/services/${e}/invoke`,t,n,{"X-Idempotency-Key":a},i))}async function Ot(e){let t=await F(`/api/v1/skills/combinations`,{...e});if(t&&typeof t==`object`&&`data`in t){let e=t.data;return Array.isArray(e)?e:[]}return Array.isArray(t)?t:[]}async function kt(e,t){return L(()=>I(`/api/v1/agents/${e}`,{},t))}async function At(e,t){return L(()=>I(`/api/v1/agents/me/credits/records`,{page:1,pageSize:20,...e},t))}const jt=ht;async function Mt(e,t){return L(()=>ft(`/api/mailboxes`,e,t))}async function Nt(e,t){return L(()=>I(`/api/mailboxes`,{page:1,pageSize:20,...e},t))}async function Pt(e,t){return L(()=>ft(`/api/mailboxes/emails`,e,t))}async function Ft(e,t,n){return L(()=>I(`/api/mailboxes/emails/sent`,{address:e,page:1,pageSize:20,...t},n))}async function It(e,t,n){return L(()=>I(`/api/mailboxes/emails/sent/detail`,{address:e,emailId:t},n))}async function Lt(e,t,n){return L(()=>I(`/api/mailboxes/emails/received`,{address:e,page:1,pageSize:20,...t},n))}async function Rt(e,t,n){return L(()=>I(`/api/mailboxes/emails/received/detail`,{address:e,emailId:t},n))}const R=ie.homedir(),{env:z}=process,zt=z.XDG_DATA_HOME||(R?g.join(R,`.local`,`share`):void 0),Bt=z.XDG_CONFIG_HOME||(R?g.join(R,`.config`):void 0);z.XDG_STATE_HOME||R&&g.join(R,`.local`,`state`),z.XDG_CACHE_HOME||R&&g.join(R,`.cache`),z.XDG_RUNTIME_DIR;const Vt=(z.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);zt&&Vt.unshift(zt);const Ht=(z.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);Bt&&Ht.unshift(Bt);const B=ae(),Ut=Bt??v(B,`.config`),Wt=process.env.CODEX_HOME?.trim()||v(B,`.codex`),Gt=process.env.CLAUDE_CONFIG_DIR?.trim()||v(B,`.claude`);function Kt(e=B,t=x){return t(v(e,`.openclaw`))?v(e,`.openclaw/skills`):t(v(e,`.clawdbot`))?v(e,`.clawdbot/skills`):t(v(e,`.moltbot`))?v(e,`.moltbot/skills`):v(e,`.openclaw/skills`)}const V={"claude-code":{name:`claude-code`,displayName:`Claude Code`,skillsDir:`.claude/skills`,globalSkillsDir:v(Gt,`skills`),detectInstalled:async()=>x(Gt)},openclaw:{name:`openclaw`,displayName:`OpenClaw`,skillsDir:`skills`,globalSkillsDir:Kt(),detectInstalled:async()=>x(v(B,`.openclaw`))||x(v(B,`.clawdbot`))||x(v(B,`.moltbot`))},cline:{name:`cline`,displayName:`Cline`,skillsDir:`.cline/skills`,globalSkillsDir:v(B,`.cline`,`skills`),detectInstalled:async()=>x(v(B,`.cline`))},antigravity:{name:`antigravity`,displayName:`Antigravity`,skillsDir:`.agent/skills`,globalSkillsDir:v(B,`.gemini/antigravity/skills`),detectInstalled:async()=>x(v(B,`.gemini/antigravity`))},hermes:{name:`hermes`,displayName:`Hermes`,skillsDir:`.hermes/skills`,globalSkillsDir:v(B,`.hermes`,`skills`),detectInstalled:async()=>x(v(B,`.hermes`))},codex:{name:`codex`,displayName:`Codex`,skillsDir:`.agents/skills`,globalSkillsDir:v(Wt,`skills`),detectInstalled:async()=>x(Wt)||x(`/etc/codex`)},cursor:{name:`cursor`,displayName:`Cursor`,skillsDir:`.agents/skills`,globalSkillsDir:v(B,`.cursor/skills`),detectInstalled:async()=>x(v(B,`.cursor`))},"gemini-cli":{name:`gemini-cli`,displayName:`Gemini CLI`,skillsDir:`.agents/skills`,globalSkillsDir:v(B,`.gemini/skills`),detectInstalled:async()=>x(v(B,`.gemini`))},"github-copilot":{name:`github-copilot`,displayName:`GitHub Copilot`,skillsDir:`.github/skills`,globalSkillsDir:v(B,`.copilot/skills`),detectInstalled:async()=>x(v(B,`.copilot`))},"iflow-cli":{name:`iflow-cli`,displayName:`iFlow CLI`,skillsDir:`.iflow/skills`,globalSkillsDir:v(B,`.iflow/skills`),detectInstalled:async()=>x(v(B,`.iflow`))},kilo:{name:`kilo`,displayName:`Kilo Code`,skillsDir:`.kilocode/skills`,globalSkillsDir:v(B,`.kilocode/skills`),detectInstalled:async()=>x(v(B,`.kilocode`))},"kimi-cli":{name:`kimi-cli`,displayName:`Kimi Code CLI`,skillsDir:`.agents/skills`,globalSkillsDir:v(B,`.config/agents/skills`),detectInstalled:async()=>x(v(B,`.kimi`))},"kiro-cli":{name:`kiro-cli`,displayName:`Kiro CLI`,skillsDir:`.kiro/skills`,globalSkillsDir:v(B,`.kiro/skills`),detectInstalled:async()=>x(v(B,`.kiro`))},opencode:{name:`opencode`,displayName:`OpenCode`,skillsDir:`.agents/skills`,globalSkillsDir:v(Ut,`opencode/skills`),detectInstalled:async()=>x(v(Ut,`opencode`))},qoder:{name:`qoder`,displayName:`Qoder`,skillsDir:`.qoder/skills`,globalSkillsDir:v(B,`.qoder/skills`),detectInstalled:async()=>x(v(B,`.qoder`))},qoderwork:{name:`qoderwork`,displayName:`QoderWork`,skillsDir:`.qoderwork/skills`,globalSkillsDir:v(B,`.qoderwork/skills`),detectInstalled:async()=>x(v(B,`.qoderwork`))},"qwen-code":{name:`qwen-code`,displayName:`Qwen Code`,skillsDir:`.qwen/skills`,globalSkillsDir:v(B,`.qwen/skills`),detectInstalled:async()=>x(v(B,`.qwen`))},trae:{name:`trae`,displayName:`Trae`,skillsDir:`.trae/skills`,globalSkillsDir:v(B,`.trae/skills`),detectInstalled:async()=>x(v(B,`.trae`))},"trae-cn":{name:`trae-cn`,displayName:`Trae CN`,skillsDir:`.trae/skills`,globalSkillsDir:v(B,`.trae-cn/skills`),detectInstalled:async()=>x(v(B,`.trae-cn`))},windsurf:{name:`windsurf`,displayName:`Windsurf`,skillsDir:`.windsurf/skills`,globalSkillsDir:v(B,`.codeium/windsurf/skills`),detectInstalled:async()=>x(v(B,`.codeium/windsurf`))},universal:{name:`universal`,displayName:`Universal`,skillsDir:`.agents/skills`,globalSkillsDir:v(Ut,`agents/skills`),showInUniversalList:!1,detectInstalled:async()=>!1}},qt=new le({write(e,t,n){n()}}),Jt=M.default.green(`◆`),Yt=M.default.red(`■`),Xt=M.default.green(`◇`),Zt=M.default.green(`●`),Qt=M.default.dim(`○`);M.default.green(`✓`);const $t=M.default.green(`•`),H=M.default.dim(`│`),U=M.default.dim(`─`),en=Symbol(`cancel`);async function tn(e){let{message:t,items:n,maxVisible:r=8,initialSelected:i=[],required:a=!1,lockedSection:o,leadingSpacer:s=0}=e;return new Promise(e=>{let c=ce.createInterface({input:process.stdin,output:qt,terminal:!!process.stdin.isTTY});process.stdin.isTTY&&process.stdin.setRawMode(!0),ce.emitKeypressEvents(process.stdin,c);let l=``,u=0,d=new Set(i),f=0,p=o?o.items.map(e=>e.value):[],m=(e,t)=>{if(!t)return!0;let n=t.toLowerCase();return e.label.toLowerCase().includes(n)||String(e.value).toLowerCase().includes(n)},h=()=>n.filter(e=>m(e,l)),g=process.stderr.isTTY?process.stderr:process.stdout,ee=()=>{if(f>0&&g.isTTY)for(let e=0;e<f;e++)g.write(`\x1B[1A\x1B[2K`)},_=(e=`active`)=>{ee();let i=[],a=h(),c=e===`active`?Jt:e===`cancel`?Yt:Xt;for(let e=0;e<s;e++)i.push(`${H}`);if(i.push(`${c} ${M.default.bold(t)}`),e===`active`){if(o&&o.items.length>0){i.push(`${H}`);let e=`${M.default.bold(o.title)} ${M.default.dim(`── always included`)}`;i.push(`${H} ${U}${U} ${e} ${U.repeat(12)}`);for(let e of o.items)i.push(`${H} ${$t} ${M.default.bold(e.label)}`);i.push(`${H}`),i.push(`${H} ${U}${U} ${M.default.bold(`Additional agents`)} ${U.repeat(29)}`)}let e=`${H} ${M.default.dim(`Search:`)} ${l}${M.default.inverse(` `)}`;i.push(e),i.push(`${H} ${M.default.dim(`↑↓ move, space select, enter confirm`)}`),i.push(`${H}`);let t=Math.max(0,Math.min(u-Math.floor(r/2),a.length-r)),s=Math.min(a.length,t+r),c=a.slice(t,s);if(a.length===0)i.push(`${H} ${M.default.dim(`No matches found`)}`);else{for(let e=0;e<c.length;e++){let n=c[e],r=t+e,a=d.has(n.value),o=r===u,s=a?Zt:Qt,l=o?M.default.underline(n.label):n.label,f=n.hint?M.default.dim(` (${n.hint})`):``,p=o?M.default.cyan(`❯`):` `;i.push(`${H} ${p} ${s} ${l}${f}`)}let e=t,n=a.length-s;if(e>0||n>0){let t=[];e>0&&t.push(`↑ ${e} more`),n>0&&t.push(`↓ ${n} more`),i.push(`${H} ${M.default.dim(t.join(` `))}`)}}i.push(`${H}`);let f=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];if(f.length===0)i.push(`${H} ${M.default.dim(`Selected: (none)`)}`);else{let e=f.length<=3?f.join(`, `):`${f.slice(0,3).join(`, `)} +${f.length-3} more`;i.push(`${H} ${M.default.green(`Selected:`)} ${e}`)}i.push(`${M.default.dim(`└`)}`)}else if(e===`submit`){let e=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];i.push(`${H} ${M.default.dim(e.join(`, `))}`)}else e===`cancel`&&i.push(`${H} ${M.default.strikethrough(M.default.dim(`Cancelled`))}`);g.write(i.join(`
8
8
  `)+`
9
9
  `),f=i.length},v=()=>{process.stdin.removeListener(`keypress`,b),process.stdin.isTTY&&process.stdin.setRawMode(!1),c.close()},y=()=>{a&&d.size===0&&p.length===0||(_(`submit`),v(),e([...p,...Array.from(d)]))},te=()=>{_(`cancel`),v(),e(en)},b=(e,t)=>{if(!t)return;let n=h();if(t.name===`return`){y();return}if(t.name===`escape`||t.ctrl&&t.name===`c`){te();return}if(t.name===`up`){u=Math.max(0,u-1),_();return}if(t.name===`down`){u=Math.min(n.length-1,u+1),_();return}if(t.name===`space`){let e=n[u];e&&(d.has(e.value)?d.delete(e.value):d.add(e.value)),_();return}if(t.name===`backspace`){l=l.slice(0,-1),u=0,_();return}if(t.sequence&&!t.ctrl&&!t.meta&&t.sequence.length===1){l+=t.sequence,u=0,_();return}};process.stdin.on(`keypress`,b),_()})}const nn=_(be(import.meta.url));function rn(e,t){let n=y(b(e)),r=y(b(t));return r.startsWith(n+ne)||r===n}async function an(e){let t=b(e),n=_(t),r=ee(t);try{return v(await he(n),r)}catch{return t}}function on(e,t){return b(_(e),t)}async function sn(e,t){try{let n=b(e),r=b(t),[i,a]=await Promise.all([he(n).catch(()=>n),he(r).catch(()=>r)]);if(i===a||await an(e)===await an(t))return!0;try{if((await de(t)).isSymbolicLink()){if(on(t,await me(t))===n)return!0;await C(t)}else await C(t,{recursive:!0})}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ELOOP`)try{await C(t,{force:!0})}catch{}}let o=_(t);return await S(o,{recursive:!0}),await _e(te(await an(o),e),t,oe()===`win32`?`junction`:void 0),!0}catch{return!1}}async function W(e){try{await C(e,{recursive:!0,force:!0})}catch{}await S(e,{recursive:!0})}async function cn(e,t){let n=!1,r=e.currentVersion?.version??``;if(!e.slug||!r)return _n(e,t),!1;let i=await gt(e.slug,r);return i&&i.length>0&&(n=await gn(i,t)),n||(xe(`No package available, generating from metadata...`),_n(e,t),console.log(` Generated: SKILL.md from metadata`)),n}function ln(e,t,n){let r=V[e],i=t?ae():n||process.cwd();return t?r.globalSkillsDir===void 0?v(i,r.skillsDir):r.globalSkillsDir:v(i,r.skillsDir)}async function un(e,t,n={}){let r=V[t],i=n.global??!1,a=n.cwd||process.cwd(),o=n.mode??`symlink`,s=n.path?.trim(),c=dn(e.slug),l;if(s){let n=b(s);if(l=v(n,c),!rn(n,l))return{success:!1,path:l,mode:`copy`,error:`Invalid path: potential path traversal detected`};try{await W(l),await cn(e,l);try{await G(t,l)}catch{}return{success:!0,path:l,mode:`copy`}}catch(e){return{success:!1,path:l,mode:`copy`,error:e instanceof Error?e.message:`Unknown error`}}}if(i&&r.globalSkillsDir===void 0)return{success:!1,path:``,mode:o,error:`${r.displayName} does not support global skill installation`};let u=fn(i,a),d=v(u,c),f=ln(t,i,a);if(l=v(f,c),!rn(u,d)||!rn(f,l))return{success:!1,path:l,mode:o,error:`Invalid skill name: potential path traversal detected`};async function p(t){await cn(e,t)}try{if(o===`copy`){await W(l),await p(l);try{await G(t,l)}catch{}return{success:!0,path:l,mode:`copy`}}if(await W(d),await p(d),!await sn(d,l)){await W(l),await ue(d,l,{recursive:!0});try{await G(t,l)}catch{}return{success:!0,path:l,canonicalPath:d,mode:`symlink`,symlinkFailed:!0}}try{await G(t,d)}catch{}return{success:!0,path:l,canonicalPath:d,mode:`symlink`}}catch(e){return{success:!1,path:l,mode:o,error:e instanceof Error?e.message:`Unknown error`}}}function dn(e){return e.toLowerCase().replace(/[^a-z0-9._]+/g,`-`).replace(/^[.\-]+|[.\-]+$/g,``).substring(0,255)||`unnamed-skill`}function fn(e,t){return v(e?ae():t||process.cwd(),`.agents`,`skills`)}const pn=`## 必须:执行后评价上报(SkillAtlas)`,mn=`${pn}
10
10
 
@@ -49,26 +49,26 @@ Example: skill-atlas install my-skill`});let n=await m.text({message:`Enter skil
49
49
  `),M.default.green(`上传记录 (第 ${t} 页,共 ${n} 条)`))}function rr(e){if(e instanceof N)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var ir={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas skill-upload-list`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=q.createProgressReporter(n);r.start(`正在查询上传记录...`);try{let n=await Tt({slug:e.slug,status:e.status,page:e.page,pageSize:e.pageSize},t.token);n.success||(r.stop(`查询失败`),m.log.error(n.message||`查询上传记录失败`),process.exit(1)),r.stop(`查询完成`),nr(n.data?.items??[],n.data?.page??1,n.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),m.log.error(rr(e)),process.exit(1)}}};function ar(e){return e.serviceCode?.trim()?e.payload?.trim()?{valid:!0}:{valid:!1,error:`缺少必需参数: --payload`}:{valid:!1,error:`缺少必需参数: --service-code`}}function or(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{valid:!1,error:`payload 必须是有效的 JSON 对象`}:{valid:!0,payload:t}}catch{return{valid:!1,error:`payload 必须是有效的 JSON 格式`}}}function sr(e,t){let n={payload:e};return t.clientRequestId?.trim()&&(n.clientRequestId=t.clientRequestId.trim()),n}function cr(e){if(e instanceof N)switch(e.code){case`SERVICE_DISABLED`:return`服务凭据冷却中,请稍后重试`;case`UPSTREAM_ERROR`:return`第三方服务拒绝请求`;case`UPSTREAM_TIMEOUT_CHARGED`:return`上游服务超时,已按消费处理`;case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;case`INSUFFICIENT_CREDITS`:return`Credits 余额不足`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}function lr(e,t){return`本次扣费: ${e} credits | 剩余: ${t} credits`}var ur={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas service-gateway-invoke`));let n=ar(e);n.valid||(m.log.error(n.error),process.exit(1));let r=or(e.payload);r.valid||(m.log.error(r.error),process.exit(1));let i=sr(r.payload,e),a=e.serviceCode.trim(),o=!process.stdout.isTTY||!process.stdin.isTTY,s=q.createProgressReporter(o);s.start(`正在调用服务: ${a}...`);try{let e=await Dt(a,i,t.token,void 0,18e4);e.success||(s.stop(`调用失败`),m.log.error(e.message||`服务调用失败`),e.data?.creditsCharged!==void 0&&e.data?.creditsBalance!==void 0&&m.log.info(lr(e.data.creditsCharged,e.data.creditsBalance)),process.exit(1)),s.stop(`服务调用成功`);let n=e.data;m.note([` ${M.default.green(`服务编码:`)} ${n.serviceCode}`,` ${M.default.green(`调用状态:`)} ${n.invokeStatus}`,` ${M.default.green(`本次扣费:`)} ${n.creditsCharged} credits`,` ${M.default.green(`剩余余额:`)} ${n.creditsBalance} credits`].join(`
50
50
  `),M.default.green(`调用结果`)),n.result!==void 0&&(console.log(`
51
51
  `+M.default.bold(`返回数据:`)),console.log(JSON.stringify(n.result,null,2))),m.outro(M.default.green(`完成!`))}catch(e){s.stop(`调用失败`);let t=cr(e);if(m.log.error(t),e instanceof N&&e.responseData){let t=e.responseData;t.data?.creditsCharged!==void 0&&t.data?.creditsBalance!==void 0&&m.log.info(lr(t.data.creditsCharged,t.data.creditsBalance))}process.exit(1)}}};const dr=process.env.SKILLATLAS_CONFIG_DIR||l.join(f.homedir(),`.skillatlas`),fr=l.join(dr,`mail-config.json`);function pr(){e.existsSync(dr)||e.mkdirSync(dr,{recursive:!0})}function $(){if(!e.existsSync(fr))return{};try{let t=e.readFileSync(fr,`utf-8`);return JSON.parse(t)}catch{return{}}}function mr(t){pr(),t.updatedAt=new Date().toISOString(),e.writeFileSync(fr,JSON.stringify(t,null,2)+`
52
- `)}function hr(e,t){let n=$();n[e]=t,mr(n)}function gr(e){let t=$()[e];if(t!=null)return String(t)}function _r(){let e=$(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function vr(e){return e in $()&&e!==`updatedAt`}const yr={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function br(e,t,n){return`https://${n?yr.pre:yr.production}/agents/${e}?token=${t}`}var xr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas agent-info`));let{agentId:n,token:r}=t,i=e.pre??!1,a=br(n,r,i),o=i?`预发环境`:`生产环境`,s=null,c=!1,l=q.createProgressReporter();l.start(`正在获取 Agent 信息...`);try{let e=await kt(n,r);e.success&&e.data&&(s=e.data),l.stop(`获取成功`)}catch{c=!0,l.stop(`无法连接服务器,仅显示本地信息`)}let u=[];if(u.push(` ${M.default.green(`Agent ID:`)} ${n}`),u.push(` ${M.default.green(`环境:`)} ${o}`),s?.metadata&&(u.push(` ${M.default.green(`名称:`)} ${s.metadata.name}`),s.metadata.avatar&&u.push(` ${M.default.green(`头像:`)} ${s.metadata.avatar}`)),s?.creditAccount){let e=s.creditAccount;u.push(``),u.push(` ${M.default.cyan(`--- 虾小宝 Credits 账户 ---`)}`),u.push(` ${M.default.green(`可用 Credits:`)} ${e.availableCredits}`),u.push(` ${M.default.green(`冻结 Credits:`)} ${e.frozenCredits}`),u.push(` ${M.default.green(`累计发放:`)} ${e.totalGrantedCredits}`),u.push(` ${M.default.green(`累计消费:`)} ${e.totalConsumedCredits}`),e.welcomeBonus&&u.push(` ${M.default.green(`Welcome Bonus:`)} ${e.welcomeBonus.grantStatus}`)}let d=gr(`mailbox`);d&&(u.push(``),u.push(` ${M.default.cyan(`--- 邮箱信息 ---`)}`),u.push(` ${M.default.green(`默认邮箱 ID:`)} ${d}`)),u.push(``),u.push(` ${M.default.green(`虾小宝主页链接:`)}`),u.push(` [您的虾小宝Agent 主页](${a})`),m.note(u.join(`
53
- `),M.default.green(`Agent 信息`)),c&&m.log.warn(`无法获取在线信息,部分数据可能不完整`),m.outro(M.default.green(`完成!`))}};function Sr(e){switch(e){case`consume`:return M.default.red(e);case`grant`:return M.default.green(e);case`refund`:return M.default.yellow(e);default:return e}}function Cr(e){return e>0?M.default.green(`+${e}`):e<0?M.default.red(`${e}`):`${e}`}function wr(e,t,n){if(e.length===0){m.log.info(`暂无流水记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${Sr(e.changeType)}`,` ${M.default.dim(`变更额度:`)} ${Cr(e.deltaCredits)} | ${M.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${M.default.dim(`服务编码:`)} ${e.serviceCode||M.default.dim(`N/A`)}`,` ${M.default.dim(`时间:`)} ${Y(e.createdAt)}`].join(`
52
+ `)}function hr(e,t){let n=$();n[e]=t,mr(n)}function gr(e){let t=$()[e];if(t!=null)return String(t)}function _r(){let e=$(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function vr(e){return e in $()&&e!==`updatedAt`}function yr(){return gr(`mailbox`)}const br={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function xr(e,t,n){return`https://${n?br.pre:br.production}/agents/${e}?token=${t}`}var Sr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas agent-info`));let{agentId:n,token:r}=t,i=e.pre??!1,a=xr(n,r,i),o=i?`预发环境`:`生产环境`,s=null,c=!1,l=q.createProgressReporter();l.start(`正在获取 Agent 信息...`);try{let e=await kt(n,r);e.success&&e.data&&(s=e.data),l.stop(`获取成功`)}catch{c=!0,l.stop(`无法连接服务器,仅显示本地信息`)}let u=[];if(u.push(` ${M.default.green(`Agent ID:`)} ${n}`),u.push(` ${M.default.green(`环境:`)} ${o}`),s?.metadata&&(u.push(` ${M.default.green(`名称:`)} ${s.metadata.name}`),s.metadata.avatar&&u.push(` ${M.default.green(`头像:`)} ${s.metadata.avatar}`)),s?.creditAccount){let e=s.creditAccount;u.push(``),u.push(` ${M.default.cyan(`--- 虾小宝 Credits 账户 ---`)}`),u.push(` ${M.default.green(`可用 Credits:`)} ${e.availableCredits}`),u.push(` ${M.default.green(`冻结 Credits:`)} ${e.frozenCredits}`),u.push(` ${M.default.green(`累计发放:`)} ${e.totalGrantedCredits}`),u.push(` ${M.default.green(`累计消费:`)} ${e.totalConsumedCredits}`),e.welcomeBonus&&u.push(` ${M.default.green(`Welcome Bonus:`)} ${e.welcomeBonus.grantStatus}`)}let d=gr(`mailbox`);d&&(u.push(``),u.push(` ${M.default.cyan(`--- 邮箱信息 ---`)}`),u.push(` ${M.default.green(`默认邮箱 ID:`)} ${d}`)),u.push(``),u.push(` ${M.default.green(`虾小宝主页链接:`)}`),u.push(` [您的虾小宝Agent 主页](${a})`),m.note(u.join(`
53
+ `),M.default.green(`Agent 信息`)),c&&m.log.warn(`无法获取在线信息,部分数据可能不完整`),m.outro(M.default.green(`完成!`))}};function Cr(e){switch(e){case`consume`:return M.default.red(e);case`grant`:return M.default.green(e);case`refund`:return M.default.yellow(e);default:return e}}function wr(e){return e>0?M.default.green(`+${e}`):e<0?M.default.red(`${e}`):`${e}`}function Tr(e,t,n){if(e.length===0){m.log.info(`暂无流水记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${Cr(e.changeType)}`,` ${M.default.dim(`变更额度:`)} ${wr(e.deltaCredits)} | ${M.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${M.default.dim(`服务编码:`)} ${e.serviceCode||M.default.dim(`N/A`)}`,` ${M.default.dim(`时间:`)} ${Y(e.createdAt)}`].join(`
54
54
  `));m.note(r.join(`
55
55
 
56
- `),M.default.green(`Credits 流水记录 (第 ${t} 页,共 ${n} 条)`))}function Tr(e){if(e instanceof N)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var Er={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas agent-credits-record`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=q.createProgressReporter(n);r.start(`正在查询流水记录...`);try{let n=await At({page:e.page,pageSize:e.pageSize,changeType:e.changeType},t.token);n.success||(r.stop(`查询失败`),m.log.error(n.message||`查询流水记录失败`),process.exit(1)),r.stop(`查询完成`),wr(n.data?.items??[],n.data?.page??1,n.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),m.log.error(Tr(e)),process.exit(1)}}};const Dr=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];var Or={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-create`));let n=e.address?.trim();n||(m.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=e.tags?e.tags.split(`,`).map(e=>e.trim()).filter(Boolean):void 0;if(r?.length){let e=r.filter(e=>!Dr.includes(e));e.length&&(m.log.error(`无效标签: ${e.join(`, `)}`),m.log.info(`可选标签: ${Dr.join(`、`)}`),process.exit(1))}let i=!process.stdout.isTTY||!process.stdin.isTTY,a=q.createProgressReporter(i);a.start(`正在创建邮箱...`);try{let e=await Mt({address:n,tags:r},t.token);e.success||(a.stop(`创建失败`),m.log.error(e.message||`创建邮箱失败`),process.exit(1)),a.stop(`创建成功`);let i=e.data;if(i){let e=[` ${M.default.green(`邮箱 ID:`)} ${i.id}`,` ${M.default.green(`地址:`)} ${i.address}`,` ${M.default.green(`创建时间:`)} ${Y(i.createdAt)}`];m.note(e.join(`
57
- `),M.default.green(`邮箱信息`))}m.outro(M.default.green(`完成!`))}catch(e){a.stop(`创建失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function kr(e,t,n){if(e.length===0){m.log.info(`暂无邮箱记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${e.address}`,` ${M.default.dim(`创建时间:`)} ${Y(e.createdAt)}`].join(`
56
+ `),M.default.green(`Credits 流水记录 (第 ${t} 页,共 ${n} 条)`))}function Er(e){if(e instanceof N)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var Dr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas agent-credits-record`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=q.createProgressReporter(n);r.start(`正在查询流水记录...`);try{let n=await At({page:e.page,pageSize:e.pageSize,changeType:e.changeType},t.token);n.success||(r.stop(`查询失败`),m.log.error(n.message||`查询流水记录失败`),process.exit(1)),r.stop(`查询完成`),Tr(n.data?.items??[],n.data?.page??1,n.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),m.log.error(Er(e)),process.exit(1)}}};const Or=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];var kr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-create`));let n=e.address?.trim();n||(m.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=e.tags?e.tags.split(`,`).map(e=>e.trim()).filter(Boolean):void 0;if(r?.length){let e=r.filter(e=>!Or.includes(e));e.length&&(m.log.error(`无效标签: ${e.join(`, `)}`),m.log.info(`可选标签: ${Or.join(`、`)}`),process.exit(1))}let i=!process.stdout.isTTY||!process.stdin.isTTY,a=q.createProgressReporter(i);a.start(`正在创建邮箱...`);try{let e=await Mt({address:n,tags:r},t.token);e.success||(a.stop(`创建失败`),m.log.error(e.message||`创建邮箱失败`),process.exit(1)),a.stop(`创建成功`);let i=e.data;if(i){let e=[` ${M.default.green(`邮箱 ID:`)} ${i.id}`,` ${M.default.green(`地址:`)} ${i.address}`,` ${M.default.green(`创建时间:`)} ${Y(i.createdAt)}`];m.note(e.join(`
57
+ `),M.default.green(`邮箱信息`))}m.outro(M.default.green(`完成!`))}catch(e){a.stop(`创建失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function Ar(e,t,n){if(e.length===0){m.log.info(`暂无邮箱记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${e.address}`,` ${M.default.dim(`创建时间:`)} ${Y(e.createdAt)}`].join(`
58
58
  `));m.note(r.join(`
59
59
 
60
- `),M.default.green(`邮箱列表 (第 ${t} 页,共 ${n} 条)`))}var Ar={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-list`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=q.createProgressReporter(n);r.start(`正在查询邮箱列表...`);try{let n=await Nt({page:e.page,pageSize:e.pageSize},t.token);n.success||(r.stop(`查询失败`),m.log.error(n.message||`查询邮箱列表失败`),process.exit(1)),r.stop(`查询完成`),kr(n.data?.items??[],n.data?.page??1,n.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function jr(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}var Mr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-send`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(m.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1));let r=Array.isArray(e.to)?e.to.join(`,`):e.to;r?.trim()||(m.log.error(`请提供 --to 参数(收件人地址)`),process.exit(1)),e.subject?.trim()||(m.log.error(`请提供 --subject 参数(邮件主题)`),process.exit(1)),e.body?.trim()||(m.log.error(`请提供 --body 参数(邮件正文)`),process.exit(1));let i=jr(r),a=e.cc?jr(e.cc):void 0,o=e.bcc?jr(e.bcc):void 0,s=!process.stdout.isTTY||!process.stdin.isTTY,c=q.createProgressReporter(s);c.start(`正在发送邮件...`);try{let r=await Pt(n,{to:i,subject:e.subject.trim(),body:e.body.trim(),cc:a,bcc:o},t.token);r.success||(c.stop(`发送失败`),m.log.error(r.message||`发送邮件失败`),process.exit(1)),c.stop(`发送成功`);let s=r.data;if(s){let e=[` ${M.default.green(`发件人:`)} ${s.from}`,` ${M.default.green(`收件人:`)} ${s.to.join(`, `)}`,` ${M.default.green(`主题:`)} ${s.subject}`];m.note(e.join(`
61
- `),M.default.green(`发送结果`))}m.outro(M.default.green(`完成!`))}catch(e){c.stop(`发送失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function Nr(e){return e===`success`?M.default.green(e):M.default.red(e)}function Pr(e,t,n){if(e.length===0){m.log.info(`暂无发件记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${e.subject}`,` ${M.default.dim(`发件人:`)} ${e.mailboxEmail}`,` ${M.default.dim(`收件人:`)} ${e.toAddress}`,` ${M.default.dim(`状态:`)} ${Nr(e.status)} | ${M.default.dim(`时间:`)} ${Y(e.sentAt)}`].join(`
60
+ `),M.default.green(`邮箱列表 (第 ${t} 页,共 ${n} 条)`))}var jr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-list`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=q.createProgressReporter(n);r.start(`正在查询邮箱列表...`);try{let n=await Nt({page:e.page,pageSize:e.pageSize},t.token);n.success||(r.stop(`查询失败`),m.log.error(n.message||`查询邮箱列表失败`),process.exit(1)),r.stop(`查询完成`),Ar(n.data?.items??[],n.data?.page??1,n.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function Mr(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}var Nr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-send`));let n=e.from?.trim();n||=yr(),n||(m.log.error(`请提供 --from 参数(发件人邮箱地址),或通过 mail-config-set -k mailbox -v <address> 设置默认邮箱`),process.exit(1));let r=Array.isArray(e.to)?e.to.join(`,`):e.to;r?.trim()||(m.log.error(`请提供 --to 参数(收件人地址)`),process.exit(1)),e.subject?.trim()||(m.log.error(`请提供 --subject 参数(邮件主题)`),process.exit(1)),e.body?.trim()||(m.log.error(`请提供 --body 参数(邮件正文)`),process.exit(1));let i=Mr(r),a=e.cc?Mr(e.cc):void 0,o=e.bcc?Mr(e.bcc):void 0,s=!process.stdout.isTTY||!process.stdin.isTTY,c=q.createProgressReporter(s);c.start(`正在发送邮件...`);try{let r=await Pt({from:n,to:i,subject:e.subject.trim(),body:e.body.trim(),cc:a,bcc:o},t.token);r.success||(c.stop(`发送失败`),m.log.error(r.message||`发送邮件失败`),process.exit(1)),c.stop(`发送成功`);let s=r.data;if(s){let e=[];s.emailId!=null&&e.push(` ${M.default.green(`邮件 ID:`)} ${s.emailId}`),s.status!=null&&e.push(` ${M.default.green(`状态:`)} ${s.status}`),e.length>0&&m.note(e.join(`
61
+ `),M.default.green(`发送结果`))}m.outro(M.default.green(`完成!`))}catch(e){c.stop(`发送失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function Pr(e){return e===`success`?M.default.green(e):M.default.red(e)}function Fr(e,t,n){if(e.length===0){m.log.info(`暂无发件记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${e.subject}`,` ${M.default.dim(`发件人:`)} ${e.mailboxEmail}`,` ${M.default.dim(`收件人:`)} ${e.toAddress}`,` ${M.default.dim(`状态:`)} ${Pr(e.status)} | ${M.default.dim(`时间:`)} ${Y(e.sentAt)}`].join(`
62
62
  `));m.note(r.join(`
63
63
 
64
- `),M.default.green(`发件列表 (第 ${t} 页,共 ${n} 条)`))}var Fr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-sent-list`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(m.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询发件列表...`);try{let r=await Ft(n,{page:e.page,pageSize:e.pageSize},t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询发件列表失败`),process.exit(1)),i.stop(`查询完成`),Pr(r.data?.items??[],r.data?.page??1,r.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}},Ir={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-sent-detail`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(m.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1)),e.emailId||(m.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询发件详情...`);try{let r=await It(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询发件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(m.log.info(`未找到该邮件`),process.exit(1));let o=[`${M.default.dim(`ID:`)} ${a.id}`,`${M.default.dim(`发件人:`)} ${a.mailboxEmail}`,`${M.default.dim(`收件人:`)} ${a.toAddress}`,`${M.default.dim(`主题:`)} ${a.subject}`,`${M.default.dim(`状态:`)} ${a.status===`success`?M.default.green(a.status):M.default.red(a.status)}`,`${M.default.dim(`发送时间:`)} ${Y(a.sentAt)}`,``,`${M.default.dim(`正文:`)}`,a.body];m.note(o.join(`
65
- `),M.default.green(`发件详情`)),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function Lr(e,t,n){if(e.length===0){m.log.info(`暂无收件记录`);return}let r=e.map((e,t)=>{let n=e.isRead?M.default.dim(`[已读]`):M.default.yellow(`[未读]`),r=e.hasAttachment?M.default.cyan(` 📎`):``;return[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${n}${r} ${e.subject}`,` ${M.default.dim(`发件人:`)} ${e.fromAddress}`,` ${M.default.dim(`收件人:`)} ${e.toAddress}`,` ${M.default.dim(`时间:`)} ${Y(e.receivedAt)} | ${M.default.dim(`大小:`)} ${e.size}`].join(`
64
+ `),M.default.green(`发件列表 (第 ${t} 页,共 ${n} 条)`))}var Ir={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-sent-list`));let n=e.address?.trim();n||(m.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询发件列表...`);try{let r=await Ft(n,{page:e.page,pageSize:e.pageSize},t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询发件列表失败`),process.exit(1)),i.stop(`查询完成`),Fr(r.data?.items??[],r.data?.page??1,r.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}},Lr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-sent-detail`));let n=e.address?.trim();n||(m.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1)),e.emailId||(m.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询发件详情...`);try{let r=await It(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询发件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(m.log.info(`未找到该邮件`),process.exit(1));let o=[`${M.default.dim(`ID:`)} ${a.id}`,`${M.default.dim(`发件人:`)} ${a.mailboxEmail}`,`${M.default.dim(`收件人:`)} ${a.toAddress}`,`${M.default.dim(`主题:`)} ${a.subject}`,`${M.default.dim(`状态:`)} ${a.status===`success`?M.default.green(a.status):M.default.red(a.status)}`,`${M.default.dim(`发送时间:`)} ${Y(a.sentAt)}`,``,`${M.default.dim(`正文:`)}`,a.body];m.note(o.join(`
65
+ `),M.default.green(`发件详情`)),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};function Rr(e,t,n){if(e.length===0){m.log.info(`暂无收件记录`);return}let r=e.map((e,t)=>{let n=e.isRead?M.default.dim(`[已读]`):M.default.yellow(`[未读]`),r=e.hasAttachment?M.default.cyan(` 📎`):``;return[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${n}${r} ${e.subject}`,` ${M.default.dim(`发件人:`)} ${e.fromAddress}`,` ${M.default.dim(`收件人:`)} ${e.toAddress}`,` ${M.default.dim(`时间:`)} ${Y(e.receivedAt)} | ${M.default.dim(`大小:`)} ${e.size}`].join(`
66
66
  `)});m.note(r.join(`
67
67
 
68
- `),M.default.green(`收件列表 (第 ${t} 页,共 ${n} 条)`))}var Rr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-received-list`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(m.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询收件列表...`);try{let r=await Lt(n,{page:e.page,pageSize:e.pageSize,unreadOnly:e.unreadOnly,startTime:e.startTime,subject:e.subject},t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询收件列表失败`),process.exit(1)),i.stop(`查询完成`),Lr(r.data?.items??[],r.data?.page??1,r.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}},zr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-received-detail`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(m.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1)),e.emailId||(m.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询收件详情...`);try{let r=await Rt(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询收件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(m.log.info(`未找到该邮件`),process.exit(1));let o=[`${M.default.dim(`ID:`)} ${a.id}`,`${M.default.dim(`Message-ID:`)} ${a.messageId}`,`${M.default.dim(`发件人:`)} ${a.sender}`,`${M.default.dim(`收件人:`)} ${a.recipient}`,`${M.default.dim(`主题:`)} ${a.subject}`,`${M.default.dim(`接收时间:`)} ${Y(a.receivedAt)}`,`${M.default.dim(`已读:`)} ${a.isRead?M.default.green(`是`):M.default.yellow(`否`)}`];a.attachments&&a.attachments.length>0&&(o.push(``),o.push(`${M.default.dim(`附件:`)}`),a.attachments.forEach((e,t)=>{o.push(` ${t+1}. ${e.filename} (${e.contentType}, ${e.size} bytes)`)})),o.push(``),o.push(`${M.default.dim(`正文:`)}`),o.push(a.textBody||a.htmlBody||`(无内容)`),m.note(o.join(`
69
- `),M.default.green(`收件详情`)),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};const Br=async e=>{m.intro(M.default.bold(`skill-atlas mail-config set`)),e.key?.trim()||(m.log.error(`请提供配置项键名`),process.exit(1)),(e.value===void 0||e.value===null)&&(m.log.error(`请提供配置项值`),process.exit(1));let t=e.key.trim(),n=String(e.value);hr(t,n),m.log.success(`配置项 "${t}" 已设置为 "${n}"`),m.outro(M.default.green(`完成!`))},Vr=async e=>{m.intro(M.default.bold(`skill-atlas mail-config get`)),e.key?.trim()||(m.log.error(`请提供配置项键名`),process.exit(1));let t=e.key.trim();if(!vr(t)){m.log.warn(`配置项 "${t}" 不存在`),m.outro(M.default.yellow(`完成`));return}let n=gr(t);m.log.info(`${t} = ${n}`),m.outro(M.default.green(`完成!`))},Hr=async()=>{m.intro(M.default.bold(`skill-atlas mail-config list`));let e=_r();if(e.length===0){m.log.info(`暂无邮箱配置`),m.outro(M.default.yellow(`完成`));return}let t=e.map(e=>` ${M.default.green(e.key)}: ${e.value}`);m.note(t.join(`
70
- `),M.default.green(`邮箱配置`)),m.outro(M.default.green(`完成!`))};var Ur={run:async(e,t)=>{switch(e){case`set`:await Br({key:t.key,value:t.value});break;case`get`:await Vr({key:t.key});break;case`list`:await Hr();break;default:m.log.error(`未知子命令: ${e}`),m.log.info(`可用子命令: set, get, list`),process.exit(1)}},runSet:Br,runGet:Vr,runList:Hr};function Wr(e){let t=e.currentVersion;return typeof t==`string`?t:t&&typeof t==`object`&&`version`in t?t.version??`—`:`—`}function Gr(e,t,n,i){let a=Math.max(...e.map(e=>(e.slug||``).length),6),o=Math.max(...e.map(e=>Math.min((e.displayName||`—`).length,30)),8),s=` ${r.bold(`Description`.padEnd(o))} ${r.bold(`SkillName`.padEnd(a))} ${r.bold(`Version`)}`,c=` `+`-`.repeat(a+o+12),l=e.map(e=>{let t=(e.slug||`—`).padEnd(a),n=((e.displayName||`—`).length>30?(e.displayName||`—`).slice(0,27)+`...`:e.displayName||`—`).padEnd(o),i=Wr(e);return` ${r.white(n)} ${r.cyan.bold(t)} ${r.dim(`v${i}`)}`});m.note([s,c,...l].join(`
71
- `));let u=(n-1)*i+1,d=Math.min(n*i,t);m.log.message(r.dim(`Showing ${u}-${d} of ${t}`)),m.log.message(r.green(`Install: npx skill-atlas install <skillName>`))}async function Kr(e){let{q:t,k:n}=e,i=t||n||``;try{let e=await mt({q:t,k:n}),{items:a,total:o}=e;if(a.length===0){m.log.error(`No skills found matching "${r.bold(i)}"`);return}Gr(a,o,e.page,e.pageSize)}catch(e){m.log.error(`Search failed: ${e.message}`),process.exit(1)}}var qr={run:Kr};function Jr(e,t){let n=[];return n.push(` ${r.cyan.bold(`${t+1}. ${e.displayName}`)} ${r.dim(`(${e.slug})`)}`),e.summary&&n.push(` ${r.white(e.summary)}`),n.push(` ${r.dim(`Version:`)} ${r.green(e.currentVersion)} | ${r.dim(`Downloads:`)} ${e.downloadCount} | ${r.dim(`CertLevel:`)} ${e.certLevel}`),e.matchedFunctions&&e.matchedFunctions.length>0&&n.push(` ${r.dim(`Matched Functions:`)} ${r.yellow(e.matchedFunctions.join(`, `))}`),n.join(`
72
- `)}function Yr(e,t){if(e.length===0){m.log.warn(`No skill combinations found for "${r.bold(t)}"`);return}m.log.success(`Found ${r.green(e.length)} combination(s) for "${r.bold(t)}"\n`),e.forEach((e,t)=>{let n=r.bold.blue(`Combination ${t+1}`),i=r.dim(`(${e.length} skill${e.length>1?`s`:``})`);console.log(`\n${n} ${i}`),console.log(r.dim(`─`.repeat(50))),e.forEach((e,t)=>{console.log(Jr(e,t))});let a=[...new Set(e.flatMap(e=>e.matchedFunctions||[]))];a.length>0&&console.log(`\n ${r.dim(`Combined coverage:`)} ${r.green(a.join(`, `))}`)}),console.log(`
73
- `+r.dim(`─`.repeat(50))),m.log.message(r.green(`Install: npx skill-atlas install <skillName>`))}async function Xr(e){let{q:t,k:n,certLevel:r,pre:i}=e;(!t||!n)&&(m.log.error(`Missing required parameters: --q and --k are required`),process.exit(1)),X(i);let a=n;try{Yr(await Ot({q:t,k:n,certLevel:r}),a)}catch(e){m.log.error(`Search failed: ${e.message}`),process.exit(1)}}var Zr={run:Xr};async function Qr(e,t=`latest`){let n=(process.env.npm_config_registry||`https://registry.npmjs.org`).replace(/\/$/,``),r=await fetch(`${n}/-/package/${e}/dist-tags`,{signal:AbortSignal.timeout(5e3)});if(!r.ok)throw Error(`获取版本信息失败`);return(await r.json())[t]||`0.0.0`}async function $r(e){let{pkgName:t,currentVersion:n,yes:i,plugin:a,pre:o}=e,s=o?`beta`:`latest`,c=q.createProgressReporter();c.start(o?`检查最新 beta 版本...`:`检查最新版本...`);try{let e=await Qr(t,s);if(c.stop(`检查完成`),d.valid(e)||(m.log.error(`无法解析最新版本: ${e}`),process.exit(1)),d.lte(e,n)){m.log.success(`已是最新版本 ${r.cyan(n)}`);return}let l=o?r.yellow(`[beta] `):``;m.log.message(l+`发现新版本: ${r.red(n)} → ${r.green(e)}`+(a?r.dim(`(将使用官方安装脚本更新 CLI 与插件)`):``));let u=i||!process.stdin.isTTY?!0:await m.confirm({message:`是否立即升级?`,initialValue:!0});if(m.isCancel(u)||u===!1){m.cancel(`已取消升级`);return}c.start(a?`正在通过官方脚本升级(CLI + 插件)…`:`正在升级...`);let f=a?await it():await rt(t,s);c.stop(f===0?`升级完成`:`升级失败`),f!==0&&(a?q.error(`升级失败,可手动执行: `+nt()):q.error(`升级失败,可手动执行: npm install -g `+t+`@`+s),process.exit(1)),m.log.success(a?`已通过官方脚本更新(目标版本 ${r.green(e)})`:`已升级到 ${r.green(e)}`)}catch(e){c.stop(`检查失败`),m.log.error(e.message),a?q.info(`可手动执行: `+nt()):q.info(`可手动执行: npm install -g `+t+`@`+s),process.exit(1)}}var ei={run:$r};async function ti(e){let{yes:t}=e,n=t||q.isNonInteractive();if(m.intro(r.bold(`skill-atlas uninstall`)),!n){let e=await m.confirm({message:`确认要卸载 skill-atlas CLI 吗?`,initialValue:!1});if(m.isCancel(e)||e===!1){m.cancel(`已取消卸载`);return}}let i=q.createProgressReporter(n);i.start(`正在执行卸载脚本...`);try{let e=await lt();i.stop(e===0?`卸载完成`:`卸载失败`),e!==0&&(q.error(`卸载失败,可手动执行: `+ct()),process.exit(1)),m.log.success(r.green(`skill-atlas CLI 已卸载`))}catch(e){i.stop(`卸载失败`),m.log.error(e.message),q.info(`可手动执行: `+ct()),process.exit(1)}}var ni={run:ti};const ri={name:`search`,description:`搜索 skill(按名称或描述匹配),普通搜索,返回单技能列表`,options:[{flags:`--q <query>`,description:`模型的意图 query(语义搜索,必传)`},{flags:`--k <keyword>`,description:`关键词(精确匹配,必传)`}],action:async e=>{let t=e.q?.trim(),n=e.k?.trim();(!t||!n)&&(q.error(`请提供 --q 和 --k 参数`),q.info(`提示: skill-atlas search --q <query> --k <关键词>`),process.exit(1)),await qr.run({q:t,k:n})}},ii={name:`update`,description:`快速升级 CLI 到最新版本`,options:[{flags:`-y, --yes`,description:`非交互模式,跳过确认直接升级`},{flags:`-p, --plugin`,description:`使用官方安装脚本,同步更新 agent 插件与 CLI(推荐: skill-atlas update -y -p)`},{flags:`--pre`,description:`更新到最新 beta 版本(测试环境)`}],action:async e=>{let t=ii._pkgInfo||{name:`skill-atlas`,version:`1.0.0`};await ei.run({pkgName:t.name,currentVersion:t.version,yes:e.yes,plugin:e.plugin,pre:e.pre})}},ai={name:`install [name]`,description:`安装 skill(支持 skill 名称)`,options:[{flags:`-y, --yes`,description:`非交互模式,默认安装到全局`},{flags:`-g, --global`,description:`安装到全局目录`},{flags:`-p, --path <dir>`,description:`安装到自定义路径(目录),如 -p /path/to/skills 或 -p .qoder/skills`},{flags:`-a, --agent <agent...>`,description:`非交互/非 TTY 时指定目标 agent(如 cursor、openclaw)`}],action:async(e,t)=>{await Mn.run(e?[e]:[],{yes:t.yes,global:t.global,agent:t.agent,path:t.path})}},oi={name:`agent-register`,description:`注册 Agent 到 SkillAtlas 社区`,options:[{flags:`-f, --force`,description:`强制重新注册(即使已注册)`},{flags:`--pre`,description:`使用预发环境 API 执行注册与认证`}],action:async e=>{await Un.run({force:e.force,pre:e.pre})}},si={name:`skill-review <skillSlug>`,description:`对指定 Skill 发表评论`,options:[{flags:`-r, --rating <rating>`,description:`评分(1-5 星)`},{flags:`--versionUsed <version>`,description:`使用的 Skill 版本号`},{flags:`-t, --title <title>`,description:`评价标题`},{flags:`-c, --content <content>`,description:`详细评价内容`},{flags:`--rec <level>`,description:`推荐度(positive/negative/neutral)`},{flags:`--success <value>`,description:'Skill 执行是否成功:`"1"` 成功,`"0"` 失败'},{flags:`--pre`,description:`使用预发环境 API`}],action:async(e,t)=>{let n=Nn(t.pre);await qn.run(e,t,n)}},ci={name:`skill-upload`,description:`上传 Skill 到 SkillAtlas 平台`,options:[{flags:`--file <path>`,description:`ZIP 文件路径(必填)`},{flags:`--slug <slug>`,description:`Skill 唯一标识符(kebab-case,必填)`},{flags:`--ver <version>`,description:`语义化版本号(如 1.0.0,必填)`},{flags:`--displayName <name>`,description:`Skill 展示名称(必填)`},{flags:`--summary <summary>`,description:`Skill 摘要描述(必填)`},{flags:`--tags <tags>`,description:`Skill 标签(逗号分隔,如 ai,image,必填)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Qn.run({...e,version:e.ver},t)})},li={name:`skill-published`,description:`查询已发布的技能列表`,options:[{flags:`--pre`,description:`使用预发环境 API`}],action:async e=>{await tr.run({pre:e.pre})}},ui={name:`skill-upload-list`,description:`查询上传记录列表`,options:[{flags:`--slug <slug>`,description:`按 slug 过滤`},{flags:`--status <status>`,description:`按状态过滤(reviewing/passed/rejected)`},{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await ir.run({slug:e.slug,status:e.status,page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,pre:e.pre},t)})},di={name:`service-gateway-invoke`,description:`调用平台统一第三方服务网关`,options:[{flags:`--service-code <code>`,description:`服务编码(如 tavily_search、qwen_image)`},{flags:`--payload <json>`,description:`业务载荷(JSON 格式字符串)`},{flags:`--client-request-id <id>`,description:`客户端请求号(可选)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await ur.run({serviceCode:e.serviceCode,payload:e.payload,clientRequestId:e.clientRequestId||c(),pre:e.pre},t)})},fi=[ri,{name:`search-combinations`,description:`搜索 Skill 组合方案(当单个 Skill 无法满足需求时)`,options:[{flags:`--q <query>`,description:`描述需要完成的完整任务(语义搜索,必传)`},{flags:`--k <keyword>`,description:`搜索关键词(必传)`},{flags:`--certLevel <level>`,description:`安全状态筛选(FULL_CERTIFIED/KEY_REVIEWED/BASIC_REVIEWED)`},{flags:`--pre`,description:`使用预发环境 API`}],action:async e=>{let t=e.q?.trim(),n=e.k?.trim();(!t||!n)&&(q.error(`请提供 --q 和 --k 参数`),q.info(`提示: skill-atlas search-combinations --q <query> --k <关键词>`),process.exit(1)),await Zr.run({q:t,k:n,certLevel:e.certLevel,pre:e.pre})}},ii,ai,oi,{name:`agent-info`,description:`查看当前已注册 Agent 的信息`,options:[{flags:`--pre`,description:`使用预发环境主页地址`}],action:Z(async(e,t)=>{await xr.run({pre:e.pre},t)})},{name:`agent-credits-record`,description:`查询 credits 流水记录`,options:[{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--changeType <type>`,description:`流水类型过滤(consume/grant 等)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Er.run({page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,changeType:e.changeType,pre:e.pre},t)})},si,ci,li,ui,di,{name:`uninstall`,description:`卸载 skill-atlas CLI`,options:[{flags:`-y, --yes`,description:`非交互模式,跳过确认直接卸载`}],action:async e=>{await ni.run({yes:e.yes})}},{name:`mail-create`,description:`创建邮箱`,options:[{flags:`--address <address>`,description:`邮箱地址(必填)`},{flags:`--tags <tags>`,description:`标签(逗号分隔,可选值: 主邮箱/工作/学习/金融/购物/社交/订阅/临时/项目/备用)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Or.run(e,t)})},{name:`mail-list`,description:`查询邮箱列表`,options:[{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Ar.run({page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,pre:e.pre},t)})},{name:`mail-send`,description:`发送邮件`,options:[{flags:`--id <id>`,description:`邮箱 ID(必填)`},{flags:`--to <addresses>`,description:`收件人(逗号分隔,必填)`},{flags:`--subject <subject>`,description:`邮件主题(必填)`},{flags:`--body <body>`,description:`邮件正文(必填)`},{flags:`--cc <addresses>`,description:`抄送(逗号分隔,可选)`},{flags:`--bcc <addresses>`,description:`密送(逗号分隔,可选)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Mr.run(e,t)})},{name:`mail-sent-list`,description:`查询发件列表`,options:[{flags:`--id <id>`,description:`邮箱 ID(必填)`},{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Fr.run({id:e.id,page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,pre:e.pre},t)})},{name:`mail-sent-detail`,description:`查询发件详情`,options:[{flags:`--id <id>`,description:`邮箱 ID(必填)`},{flags:`--email-id <emailId>`,description:`邮件 ID(必填)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Ir.run(e,t)})},{name:`mail-received-list`,description:`查询收件列表`,options:[{flags:`--id <id>`,description:`邮箱 ID(必填)`},{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--unread-only`,description:`仅显示未读邮件`},{flags:`--start-time <time>`,description:`起始时间过滤`},{flags:`--subject <subject>`,description:`按主题过滤`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Rr.run({id:e.id,page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,unreadOnly:e.unreadOnly,startTime:e.startTime,subject:e.subject,pre:e.pre},t)})},{name:`mail-received-detail`,description:`查询收件详情`,options:[{flags:`--id <id>`,description:`邮箱 ID(必填)`},{flags:`--email-id <emailId>`,description:`邮件 ID(必填)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await zr.run(e,t)})},{name:`mail-config-set`,description:`设置邮箱配置项`,options:[{flags:`-k, --key <key>`,description:`配置项键名(必填)`},{flags:`-V, --value <value>`,description:`配置项值(必填)`}],action:async e=>{await Ur.run(`set`,e)}},{name:`mail-config-get`,description:`获取邮箱配置项`,options:[{flags:`-k, --key <key>`,description:`配置项键名(必填)`}],action:async e=>{await Ur.run(`get`,e)}},{name:`mail-config-list`,description:`列出所有邮箱配置项`,options:[],action:async()=>{await Ur.run(`list`,{})}}];function pi(e){ii._pkgInfo=e}const mi=[` _ _ _ _ _ _ `,` ___| | _(_) | | __ _| |_| | __ _ ___ `," / __| |/ / | | |_____ / _` | __| |/ _` / __|",` \\__ \\ <| | | |_____| (_| | |_| | (_| \\__ \\`,` |___/_|\\_\\_|_|_| \\__,_|\\__|_|\\__,_|___/`];function hi(){try{return JSON.parse(t(new URL(`../package.json`,import.meta.url),`utf8`))}catch{return{name:`skill-atlas`,version:`1.0.0`}}}function gi(){mi.forEach(e=>console.log(e)),console.log()}function _i(){return process.stdin.isTTY?!process.argv.includes(`-y`)&&!process.argv.includes(`--yes`):!1}function vi(e,t){let n=e.command(t.name,t.description);t.options?.forEach(e=>{n.option(e.flags,e.description)}),n.action(t.action)}function yi(e){fi.forEach(t=>vi(e,t))}function bi(e){let t=e,n=t.message||String(e);if(t.name===`CACError`){let e=n.match(/Unknown option `(.+?)`/);if(e){let t=e[1];a.error(`未知选项: ${t}`),a.info(`提示: 使用 skill-atlas <command> --help 查看可用选项`),process.exit(1)}let t=n.match(/Missing required arg for option `(.+?)`/);if(t){let e=t[1];a.error(`选项 ${e} 缺少必需的参数值`),a.info(`提示: 使用 skill-atlas <command> --help 查看参数用法`),process.exit(1)}let r=n.match(/option (.+?) value is missing/);if(r){let e=r[1];a.error(`选项 ${e} 需要提供一个值`),a.info(`提示: 使用 skill-atlas <command> --help 查看参数用法`),process.exit(1)}a.error(`命令解析错误: ${n}`),a.info(`提示: 使用 skill-atlas --help 查看帮助`),process.exit(1)}(n.includes(`canceled`)||n.includes(`cancelled`))&&(a.info(`操作已取消`),process.exit(0)),a.error(`执行出错: ${n}`),process.exit(1)}async function xi(){let e=hi();pi(e),await i(e),_i()&&gi();let t=process.argv.slice(2).length===0?[...process.argv.slice(0,2),`--help`]:process.argv,a=n(`skill-atlas`);yi(a),a.help(e=>(e.push({body:r.green(`
74
- 虾小宝官网: https://skillatlas.cn`)}),e)),a.version(e.version);try{a.parse(t)}catch(e){bi(e)}}process.on(`unhandledRejection`,bi),xi().catch(bi);export{};
68
+ `),M.default.green(`收件列表 (第 ${t} 页,共 ${n} 条)`))}var zr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-received-list`));let n=e.address?.trim();n||(m.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询收件列表...`);try{let r=await Lt(n,{page:e.page,pageSize:e.pageSize,unreadOnly:e.unreadOnly,startTime:e.startTime,subject:e.subject},t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询收件列表失败`),process.exit(1)),i.stop(`查询完成`),Rr(r.data?.items??[],r.data?.page??1,r.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}},Br={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas mail-received-detail`));let n=e.address?.trim();n||(m.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1)),e.emailId||(m.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=q.createProgressReporter(r);i.start(`正在查询收件详情...`);try{let r=await Rt(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),m.log.error(r.message||`查询收件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(m.log.info(`未找到该邮件`),process.exit(1));let o=[`${M.default.dim(`ID:`)} ${a.id}`,`${M.default.dim(`Message-ID:`)} ${a.messageId}`,`${M.default.dim(`发件人:`)} ${a.sender}`,`${M.default.dim(`收件人:`)} ${a.recipient}`,`${M.default.dim(`主题:`)} ${a.subject}`,`${M.default.dim(`接收时间:`)} ${Y(a.receivedAt)}`,`${M.default.dim(`已读:`)} ${a.isRead?M.default.green(`是`):M.default.yellow(`否`)}`];a.attachments&&a.attachments.length>0&&(o.push(``),o.push(`${M.default.dim(`附件:`)}`),a.attachments.forEach((e,t)=>{o.push(` ${t+1}. ${e.filename} (${e.contentType}, ${e.size} bytes)`)})),o.push(``),o.push(`${M.default.dim(`正文:`)}`),o.push(a.textBody||a.htmlBody||`(无内容)`),m.note(o.join(`
69
+ `),M.default.green(`收件详情`)),m.outro(M.default.green(`完成!`))}catch(e){i.stop(`查询失败`),m.log.error(e instanceof N?e.message:String(e)),process.exit(1)}}};const Vr=async e=>{m.intro(M.default.bold(`skill-atlas mail-config set`)),e.key?.trim()||(m.log.error(`请提供配置项键名`),process.exit(1)),(e.value===void 0||e.value===null)&&(m.log.error(`请提供配置项值`),process.exit(1));let t=e.key.trim(),n=String(e.value);hr(t,n),m.log.success(`配置项 "${t}" 已设置为 "${n}"`),m.outro(M.default.green(`完成!`))},Hr=async e=>{m.intro(M.default.bold(`skill-atlas mail-config get`)),e.key?.trim()||(m.log.error(`请提供配置项键名`),process.exit(1));let t=e.key.trim();if(!vr(t)){m.log.warn(`配置项 "${t}" 不存在`),m.outro(M.default.yellow(`完成`));return}let n=gr(t);m.log.info(`${t} = ${n}`),m.outro(M.default.green(`完成!`))},Ur=async()=>{m.intro(M.default.bold(`skill-atlas mail-config list`));let e=_r();if(e.length===0){m.log.info(`暂无邮箱配置`),m.outro(M.default.yellow(`完成`));return}let t=e.map(e=>` ${M.default.green(e.key)}: ${e.value}`);m.note(t.join(`
70
+ `),M.default.green(`邮箱配置`)),m.outro(M.default.green(`完成!`))};var Wr={run:async(e,t)=>{switch(e){case`set`:await Vr({key:t.key,value:t.value});break;case`get`:await Hr({key:t.key});break;case`list`:await Ur();break;default:m.log.error(`未知子命令: ${e}`),m.log.info(`可用子命令: set, get, list`),process.exit(1)}},runSet:Vr,runGet:Hr,runList:Ur};function Gr(e){let t=e.currentVersion;return typeof t==`string`?t:t&&typeof t==`object`&&`version`in t?t.version??`—`:`—`}function Kr(e,t,n,i){let a=Math.max(...e.map(e=>(e.slug||``).length),6),o=Math.max(...e.map(e=>Math.min((e.displayName||`—`).length,30)),8),s=` ${r.bold(`Description`.padEnd(o))} ${r.bold(`SkillName`.padEnd(a))} ${r.bold(`Version`)}`,c=` `+`-`.repeat(a+o+12),l=e.map(e=>{let t=(e.slug||`—`).padEnd(a),n=((e.displayName||`—`).length>30?(e.displayName||`—`).slice(0,27)+`...`:e.displayName||`—`).padEnd(o),i=Gr(e);return` ${r.white(n)} ${r.cyan.bold(t)} ${r.dim(`v${i}`)}`});m.note([s,c,...l].join(`
71
+ `));let u=(n-1)*i+1,d=Math.min(n*i,t);m.log.message(r.dim(`Showing ${u}-${d} of ${t}`)),m.log.message(r.green(`Install: npx skill-atlas install <skillName>`))}async function qr(e){let{q:t,k:n}=e,i=t||n||``;try{let e=await mt({q:t,k:n}),{items:a,total:o}=e;if(a.length===0){m.log.error(`No skills found matching "${r.bold(i)}"`);return}Kr(a,o,e.page,e.pageSize)}catch(e){m.log.error(`Search failed: ${e.message}`),process.exit(1)}}var Jr={run:qr};function Yr(e,t){let n=[];return n.push(` ${r.cyan.bold(`${t+1}. ${e.displayName}`)} ${r.dim(`(${e.slug})`)}`),e.summary&&n.push(` ${r.white(e.summary)}`),n.push(` ${r.dim(`Version:`)} ${r.green(e.currentVersion)} | ${r.dim(`Downloads:`)} ${e.downloadCount} | ${r.dim(`CertLevel:`)} ${e.certLevel}`),e.matchedFunctions&&e.matchedFunctions.length>0&&n.push(` ${r.dim(`Matched Functions:`)} ${r.yellow(e.matchedFunctions.join(`, `))}`),n.join(`
72
+ `)}function Xr(e,t){if(e.length===0){m.log.warn(`No skill combinations found for "${r.bold(t)}"`);return}m.log.success(`Found ${r.green(e.length)} combination(s) for "${r.bold(t)}"\n`),e.forEach((e,t)=>{let n=r.bold.blue(`Combination ${t+1}`),i=r.dim(`(${e.length} skill${e.length>1?`s`:``})`);console.log(`\n${n} ${i}`),console.log(r.dim(`─`.repeat(50))),e.forEach((e,t)=>{console.log(Yr(e,t))});let a=[...new Set(e.flatMap(e=>e.matchedFunctions||[]))];a.length>0&&console.log(`\n ${r.dim(`Combined coverage:`)} ${r.green(a.join(`, `))}`)}),console.log(`
73
+ `+r.dim(`─`.repeat(50))),m.log.message(r.green(`Install: npx skill-atlas install <skillName>`))}async function Zr(e){let{q:t,k:n,certLevel:r,pre:i}=e;(!t||!n)&&(m.log.error(`Missing required parameters: --q and --k are required`),process.exit(1)),X(i);let a=n;try{Xr(await Ot({q:t,k:n,certLevel:r}),a)}catch(e){m.log.error(`Search failed: ${e.message}`),process.exit(1)}}var Qr={run:Zr};async function $r(e,t=`latest`){let n=(process.env.npm_config_registry||`https://registry.npmjs.org`).replace(/\/$/,``),r=await fetch(`${n}/-/package/${e}/dist-tags`,{signal:AbortSignal.timeout(5e3)});if(!r.ok)throw Error(`获取版本信息失败`);return(await r.json())[t]||`0.0.0`}async function ei(e){let{pkgName:t,currentVersion:n,yes:i,plugin:a,pre:o}=e,s=o?`beta`:`latest`,c=q.createProgressReporter();c.start(o?`检查最新 beta 版本...`:`检查最新版本...`);try{let e=await $r(t,s);if(c.stop(`检查完成`),d.valid(e)||(m.log.error(`无法解析最新版本: ${e}`),process.exit(1)),d.lte(e,n)){m.log.success(`已是最新版本 ${r.cyan(n)}`);return}let l=o?r.yellow(`[beta] `):``;m.log.message(l+`发现新版本: ${r.red(n)} → ${r.green(e)}`+(a?r.dim(`(将使用官方安装脚本更新 CLI 与插件)`):``));let u=i||!process.stdin.isTTY?!0:await m.confirm({message:`是否立即升级?`,initialValue:!0});if(m.isCancel(u)||u===!1){m.cancel(`已取消升级`);return}c.start(a?`正在通过官方脚本升级(CLI + 插件)…`:`正在升级...`);let f=a?await it():await rt(t,s);c.stop(f===0?`升级完成`:`升级失败`),f!==0&&(a?q.error(`升级失败,可手动执行: `+nt()):q.error(`升级失败,可手动执行: npm install -g `+t+`@`+s),process.exit(1)),m.log.success(a?`已通过官方脚本更新(目标版本 ${r.green(e)})`:`已升级到 ${r.green(e)}`)}catch(e){c.stop(`检查失败`),m.log.error(e.message),a?q.info(`可手动执行: `+nt()):q.info(`可手动执行: npm install -g `+t+`@`+s),process.exit(1)}}var ti={run:ei};async function ni(e){let{yes:t}=e,n=t||q.isNonInteractive();if(m.intro(r.bold(`skill-atlas uninstall`)),!n){let e=await m.confirm({message:`确认要卸载 skill-atlas CLI 吗?`,initialValue:!1});if(m.isCancel(e)||e===!1){m.cancel(`已取消卸载`);return}}let i=q.createProgressReporter(n);i.start(`正在执行卸载脚本...`);try{let e=await lt();i.stop(e===0?`卸载完成`:`卸载失败`),e!==0&&(q.error(`卸载失败,可手动执行: `+ct()),process.exit(1)),m.log.success(r.green(`skill-atlas CLI 已卸载`))}catch(e){i.stop(`卸载失败`),m.log.error(e.message),q.info(`可手动执行: `+ct()),process.exit(1)}}var ri={run:ni};const ii={name:`search`,description:`搜索 skill(按名称或描述匹配),普通搜索,返回单技能列表`,options:[{flags:`--q <query>`,description:`模型的意图 query(语义搜索,必传)`},{flags:`--k <keyword>`,description:`关键词(精确匹配,必传)`}],action:async e=>{let t=e.q?.trim(),n=e.k?.trim();(!t||!n)&&(q.error(`请提供 --q 和 --k 参数`),q.info(`提示: skill-atlas search --q <query> --k <关键词>`),process.exit(1)),await Jr.run({q:t,k:n})}},ai={name:`update`,description:`快速升级 CLI 到最新版本`,options:[{flags:`-y, --yes`,description:`非交互模式,跳过确认直接升级`},{flags:`-p, --plugin`,description:`使用官方安装脚本,同步更新 agent 插件与 CLI(推荐: skill-atlas update -y -p)`},{flags:`--pre`,description:`更新到最新 beta 版本(测试环境)`}],action:async e=>{let t=ai._pkgInfo||{name:`skill-atlas`,version:`1.0.0`};await ti.run({pkgName:t.name,currentVersion:t.version,yes:e.yes,plugin:e.plugin,pre:e.pre})}},oi={name:`install [name]`,description:`安装 skill(支持 skill 名称)`,options:[{flags:`-y, --yes`,description:`非交互模式,默认安装到全局`},{flags:`-g, --global`,description:`安装到全局目录`},{flags:`-p, --path <dir>`,description:`安装到自定义路径(目录),如 -p /path/to/skills 或 -p .qoder/skills`},{flags:`-a, --agent <agent...>`,description:`非交互/非 TTY 时指定目标 agent(如 cursor、openclaw)`}],action:async(e,t)=>{await Mn.run(e?[e]:[],{yes:t.yes,global:t.global,agent:t.agent,path:t.path})}},si={name:`agent-register`,description:`注册 Agent 到 SkillAtlas 社区`,options:[{flags:`-f, --force`,description:`强制重新注册(即使已注册)`},{flags:`--pre`,description:`使用预发环境 API 执行注册与认证`}],action:async e=>{await Un.run({force:e.force,pre:e.pre})}},ci={name:`skill-review <skillSlug>`,description:`对指定 Skill 发表评论`,options:[{flags:`-r, --rating <rating>`,description:`评分(1-5 星)`},{flags:`--versionUsed <version>`,description:`使用的 Skill 版本号`},{flags:`-t, --title <title>`,description:`评价标题`},{flags:`-c, --content <content>`,description:`详细评价内容`},{flags:`--rec <level>`,description:`推荐度(positive/negative/neutral)`},{flags:`--success <value>`,description:'Skill 执行是否成功:`"1"` 成功,`"0"` 失败'},{flags:`--pre`,description:`使用预发环境 API`}],action:async(e,t)=>{let n=Nn(t.pre);await qn.run(e,t,n)}},li={name:`skill-upload`,description:`上传 Skill 到 SkillAtlas 平台`,options:[{flags:`--file <path>`,description:`ZIP 文件路径(必填)`},{flags:`--slug <slug>`,description:`Skill 唯一标识符(kebab-case,必填)`},{flags:`--ver <version>`,description:`语义化版本号(如 1.0.0,必填)`},{flags:`--displayName <name>`,description:`Skill 展示名称(必填)`},{flags:`--summary <summary>`,description:`Skill 摘要描述(必填)`},{flags:`--tags <tags>`,description:`Skill 标签(逗号分隔,如 ai,image,必填)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Qn.run({...e,version:e.ver},t)})},ui={name:`skill-published`,description:`查询已发布的技能列表`,options:[{flags:`--pre`,description:`使用预发环境 API`}],action:async e=>{await tr.run({pre:e.pre})}},di={name:`skill-upload-list`,description:`查询上传记录列表`,options:[{flags:`--slug <slug>`,description:`按 slug 过滤`},{flags:`--status <status>`,description:`按状态过滤(reviewing/passed/rejected)`},{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await ir.run({slug:e.slug,status:e.status,page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,pre:e.pre},t)})},fi={name:`service-gateway-invoke`,description:`调用平台统一第三方服务网关`,options:[{flags:`--service-code <code>`,description:`服务编码(如 tavily_search、qwen_image)`},{flags:`--payload <json>`,description:`业务载荷(JSON 格式字符串)`},{flags:`--client-request-id <id>`,description:`客户端请求号(可选)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await ur.run({serviceCode:e.serviceCode,payload:e.payload,clientRequestId:e.clientRequestId||c(),pre:e.pre},t)})},pi=[ii,{name:`search-combinations`,description:`搜索 Skill 组合方案(当单个 Skill 无法满足需求时)`,options:[{flags:`--q <query>`,description:`描述需要完成的完整任务(语义搜索,必传)`},{flags:`--k <keyword>`,description:`搜索关键词(必传)`},{flags:`--certLevel <level>`,description:`安全状态筛选(FULL_CERTIFIED/KEY_REVIEWED/BASIC_REVIEWED)`},{flags:`--pre`,description:`使用预发环境 API`}],action:async e=>{let t=e.q?.trim(),n=e.k?.trim();(!t||!n)&&(q.error(`请提供 --q 和 --k 参数`),q.info(`提示: skill-atlas search-combinations --q <query> --k <关键词>`),process.exit(1)),await Qr.run({q:t,k:n,certLevel:e.certLevel,pre:e.pre})}},ai,oi,si,{name:`agent-info`,description:`查看当前已注册 Agent 的信息`,options:[{flags:`--pre`,description:`使用预发环境主页地址`}],action:Z(async(e,t)=>{await Sr.run({pre:e.pre},t)})},{name:`agent-credits-record`,description:`查询 credits 流水记录`,options:[{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--changeType <type>`,description:`流水类型过滤(consume/grant 等)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Dr.run({page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,changeType:e.changeType,pre:e.pre},t)})},ci,li,ui,di,fi,{name:`uninstall`,description:`卸载 skill-atlas CLI`,options:[{flags:`-y, --yes`,description:`非交互模式,跳过确认直接卸载`}],action:async e=>{await ri.run({yes:e.yes})}},{name:`mail-create`,description:`创建邮箱`,options:[{flags:`--address <address>`,description:`邮箱地址(必填)`},{flags:`--tags <tags>`,description:`标签(逗号分隔,可选值: 主邮箱/工作/学习/金融/购物/社交/订阅/临时/项目/备用)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await kr.run(e,t)})},{name:`mail-list`,description:`查询邮箱列表`,options:[{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await jr.run({page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,pre:e.pre},t)})},{name:`mail-send`,description:`发送邮件(未指定 --from 时使用默认邮箱)`,options:[{flags:`--from <from>`,description:`发件人邮箱地址(可选,未指定则使用默认邮箱)`},{flags:`--to <addresses>`,description:`收件人(逗号分隔,必填)`},{flags:`--subject <subject>`,description:`邮件主题(必填)`},{flags:`--body <body>`,description:`邮件正文(必填)`},{flags:`--cc <addresses>`,description:`抄送(逗号分隔,可选)`},{flags:`--bcc <addresses>`,description:`密送(逗号分隔,可选)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Nr.run(e,t)})},{name:`mail-sent-list`,description:`查询发件列表`,options:[{flags:`--address <address>`,description:`邮箱地址(必填)`},{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Ir.run({address:e.address,page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,pre:e.pre},t)})},{name:`mail-sent-detail`,description:`查询发件详情`,options:[{flags:`--address <address>`,description:`邮箱地址(必填)`},{flags:`--email-id <emailId>`,description:`邮件 ID(必填)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Lr.run(e,t)})},{name:`mail-received-list`,description:`查询收件列表`,options:[{flags:`--address <address>`,description:`邮箱地址(必填)`},{flags:`--page <page>`,description:`页码(默认: 1)`},{flags:`--pageSize <size>`,description:`每页条数(默认: 20)`},{flags:`--unread-only`,description:`仅显示未读邮件`},{flags:`--start-time <time>`,description:`起始时间过滤`},{flags:`--subject <subject>`,description:`按主题过滤`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await zr.run({address:e.address,page:e.page?Number(e.page):void 0,pageSize:e.pageSize?Number(e.pageSize):void 0,unreadOnly:e.unreadOnly,startTime:e.startTime,subject:e.subject,pre:e.pre},t)})},{name:`mail-received-detail`,description:`查询收件详情`,options:[{flags:`--address <address>`,description:`邮箱地址(必填)`},{flags:`--email-id <emailId>`,description:`邮件 ID(必填)`},{flags:`--pre`,description:`使用预发环境 API`}],action:Z(async(e,t)=>{await Br.run(e,t)})},{name:`mail-config-set`,description:`设置邮箱配置项`,options:[{flags:`-k, --key <key>`,description:`配置项键名(必填)`},{flags:`-V, --value <value>`,description:`配置项值(必填)`}],action:async e=>{await Wr.run(`set`,e)}},{name:`mail-config-get`,description:`获取邮箱配置项`,options:[{flags:`-k, --key <key>`,description:`配置项键名(必填)`}],action:async e=>{await Wr.run(`get`,e)}},{name:`mail-config-list`,description:`列出所有邮箱配置项`,options:[],action:async()=>{await Wr.run(`list`,{})}}];function mi(e){ai._pkgInfo=e}const hi=[` _ _ _ _ _ _ `,` ___| | _(_) | | __ _| |_| | __ _ ___ `," / __| |/ / | | |_____ / _` | __| |/ _` / __|",` \\__ \\ <| | | |_____| (_| | |_| | (_| \\__ \\`,` |___/_|\\_\\_|_|_| \\__,_|\\__|_|\\__,_|___/`];function gi(){try{return JSON.parse(t(new URL(`../package.json`,import.meta.url),`utf8`))}catch{return{name:`skill-atlas`,version:`1.0.0`}}}function _i(){hi.forEach(e=>console.log(e)),console.log()}function vi(){return process.stdin.isTTY?!process.argv.includes(`-y`)&&!process.argv.includes(`--yes`):!1}function yi(e,t){let n=e.command(t.name,t.description);t.options?.forEach(e=>{n.option(e.flags,e.description)}),n.action(t.action)}function bi(e){pi.forEach(t=>yi(e,t))}function xi(e){let t=e,n=t.message||String(e);if(t.name===`CACError`){let e=n.match(/Unknown option `(.+?)`/);if(e){let t=e[1];a.error(`未知选项: ${t}`),a.info(`提示: 使用 skill-atlas <command> --help 查看可用选项`),process.exit(1)}let t=n.match(/Missing required arg for option `(.+?)`/);if(t){let e=t[1];a.error(`选项 ${e} 缺少必需的参数值`),a.info(`提示: 使用 skill-atlas <command> --help 查看参数用法`),process.exit(1)}let r=n.match(/option (.+?) value is missing/);if(r){let e=r[1];a.error(`选项 ${e} 需要提供一个值`),a.info(`提示: 使用 skill-atlas <command> --help 查看参数用法`),process.exit(1)}a.error(`命令解析错误: ${n}`),a.info(`提示: 使用 skill-atlas --help 查看帮助`),process.exit(1)}(n.includes(`canceled`)||n.includes(`cancelled`))&&(a.info(`操作已取消`),process.exit(0)),a.error(`执行出错: ${n}`),process.exit(1)}async function Si(){let e=gi();mi(e),await i(e),vi()&&_i();let t=process.argv.slice(2).length===0?[...process.argv.slice(0,2),`--help`]:process.argv,a=n(`skill-atlas`);bi(a),a.help(e=>(e.push({body:r.green(`
74
+ 虾小宝官网: https://skillatlas.cn`)}),e)),a.version(e.version);try{a.parse(t)}catch(e){xi(e)}}process.on(`unhandledRejection`,xi),Si().catch(xi);export{};
package/lib/index.js CHANGED
@@ -4,7 +4,7 @@ import e,{existsSync as t,mkdirSync as n,readFileSync as r,writeFileSync as i}fr
4
4
  `)}}function Ye(){Je();try{return JSON.parse(e.readFileSync(k,`utf-8`))}catch{return{version:1,installed:{}}}}function Xe(t,n,r){let i=Ye();i.installed[t]={version:n,installedAt:new Date().toISOString(),location:r},e.writeFileSync(k,JSON.stringify(i,null,2)+`
5
5
  `)}function Ze(t){let n=Ye();delete n.installed[t],e.writeFileSync(k,JSON.stringify(n,null,2)+`
6
6
  `)}var j={CONFIG_DIR:E,OPENCLAW_STATE_DIR:O,LOCKFILE:k,DEVICE_JSON:Ie,ASSET_TYPES:Le,ensureConfigDir:A,installDirForType:Re,getApiBase:ze,setApiBase:Be,applyPreEnvironment:Ve,getAuthToken:He,saveAuthToken:Ue,getDeviceId:We,initLockfile:Je,readLockfile:Ye,updateLockfile:Xe,removeLockfile:Ze,getAgentId:Ge,saveAgentCredentials:Ke,getAgentCredentials:qe};const Qe=`https://unpkg.com/skill-atlas-cli`,$e=`curl -fsSL ${Qe}/install.sh | bash`,et=`irm ${Qe}/install.ps1 | iex`;function M(){return process.platform===`win32`?et:$e}function tt(e,t=`latest`){return new Promise(n=>{let r=l(`npm`,[`install`,`-g`,`${e}@${t}`,`--force`],{stdio:`inherit`,shell:!0});r.on(`close`,e=>n(e??0)),r.on(`error`,()=>n(1))})}function nt(){return new Promise(e=>{let t=process.platform===`win32`?l(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,et],{stdio:`inherit`,windowsHide:!0}):l(`bash`,[`-c`,$e],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const rt=`https://maas-skill-hub-cli.oss-cn-hangzhou.aliyuncs.com/uninstall.sh`,it=`curl -fsSL ${rt} | bash`,at=`irm ${rt} | iex`;function ot(){return process.platform===`win32`?at:it}function st(){return new Promise(e=>{let t=process.platform===`win32`?l(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,at],{stdio:`inherit`,windowsHide:!0}):l(`bash`,[`-c`,it],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const ct=j.CONFIG_DIR,lt=o(ct,`update-check.json`);async function ut(e){let t=(process.env.npm_config_registry||`https://registry.npmjs.org`).replace(/\/$/,``),n=await fetch(`${t}/-/package/${e}/dist-tags`,{signal:AbortSignal.timeout(3e3)});if(!n.ok)throw Error(`Fetch failed`);return(await n.json()).latest||`0.0.0`}function dt(){try{return t(lt)?JSON.parse(r(lt,`utf8`)):void 0}catch{return}}function ft(e){try{t(ct)||n(ct,{recursive:!0}),i(lt,JSON.stringify({lastCheck:Date.now(),latest:e})+`
7
- `)}catch{}}function pt(e,t){let n=s.diff(e,t);return n?n===`major`||n===`premajor`||n===`minor`||n===`preminor`:!1}async function mt(e){let t=dt();if(t?.latest&&s.gt(t.latest,e.version))if(process.stdout.isTTY)console.error(`\n 📦 Update available: \x1b[31m${e.version}\x1b[0m → \x1b[32m${t.latest}\x1b[0m\n 👉 Run: \x1b[36mskill-atlas update\x1b[0m\n`);else if(pt(e.version,t.latest)){console.error(`[skill-atlas] 检测到 minor 及以上新版本 ${e.version} → ${t.latest}(非交互环境),正在通过官方安装脚本更新…`);let n=await nt();n!==0&&console.error(`[skill-atlas] 自动更新失败(退出码 ${n}),可手动执行: ${M()}`)}else console.error(`[skill-atlas] 检测到新版本 ${e.version} → ${t.latest}(非 minor/major 升级,非交互环境不自动安装),可执行: ${M()}`);let n=t?.lastCheck||0;Date.now()-n<12e4||ut(e.name).then(e=>{ft(e)}).catch(()=>{})}var N=je(ke(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c}))(),1),P=class extends Error{code;responseData;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.responseData=n}};const F=f.create({timeout:1e4,headers:{"Content-Type":`application/json`}});F.interceptors.request.use(e=>(e.baseURL=j.getApiBase(),e.headers.set(`X-SkillAtlas-Agent-Id`,j.getAgentId()),e)),F.interceptors.response.use(e=>e,e=>{if(e.response){let{data:t,statusText:n}=e.response;throw new P(t?.message||t?.error||n,t?.code,t)}throw e});async function I(e,t={}){let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await F.get(e,{params:n})).data}async function ht(e,t={}){return(await F.post(e,t)).data}async function gt(e,t,n){return(await F.post(e,t,{headers:{Authorization:`Bearer ${n}`}})).data}async function L(e,t,n){let r=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await F.get(e,{params:r,headers:{Authorization:`Bearer ${n}`}})).data}async function R(e){try{return await e()}catch(e){if(e instanceof P&&e.responseData&&typeof e.responseData==`object`)return e.responseData;throw e}}function _t(e){let{items:t,page:n,pageSize:r,total:i}=(e&&typeof e==`object`&&`data`in e?e.data:e)??{};return{items:Array.isArray(t)?t:[],page:n??1,pageSize:r??20,total:i??0}}async function vt(e={}){return _t(await I(`/api/v1/skills`,{page:1,pageSize:20,...e}))}async function yt(e){try{return await I(`/api/v1/skills/${e}`)}catch{return null}}async function bt(e,t){let n=await F.get(`/api/v1/download`,{params:{slug:e,version:t},responseType:`arraybuffer`});return Buffer.from(n.data)}async function xt(e){return R(()=>ht(`/api/v1/agents/register`,e))}async function St(e){return R(()=>I(`/api/v1/agents/${e}/challenge`))}async function Ct(e){return R(()=>ht(`/api/v1/agents/authenticate`,e))}async function wt(e,t){return R(()=>gt(`/api/v1/community/skills/reviews`,e,t))}async function Tt(e,t,n,r={},i){return(await F.post(e,t,{headers:{Authorization:`Bearer ${n}`,...r},...i!==void 0&&{timeout:i}})).data}async function Et(e,t,n){return(await F.post(e,t,{headers:{Authorization:`Bearer ${n}`,"Content-Type":`multipart/form-data`}})).data}async function Dt(e,t,n){let r=new FormData,i=new Uint8Array(e.file);return r.append(`file`,new Blob([i]),n),r.append(`slug`,e.slug),r.append(`version`,e.version),r.append(`displayName`,e.displayName),e.summary&&r.append(`summary`,e.summary),e.tags&&e.tags.length>0&&e.tags.forEach(e=>r.append(`tags`,e)),R(()=>Et(`/api/v1/skills/upload`,r,t))}async function Ot(e){return R(()=>I(`/api/v1/agents/${e}/skills/published`))}async function kt(e,t){return R(()=>L(`/api/v1/skills/uploads`,{page:1,pageSize:20,...e},t))}function At(){return crypto.randomUUID()}async function jt(e,t,n,r,i){let a=r||At();return R(()=>Tt(`/api/v1/service-gateway/services/${e}/invoke`,t,n,{"X-Idempotency-Key":a},i))}async function Mt(e){let t=await I(`/api/v1/skills/combinations`,{...e});if(t&&typeof t==`object`&&`data`in t){let e=t.data;return Array.isArray(e)?e:[]}return Array.isArray(t)?t:[]}async function Nt(e,t){return R(()=>L(`/api/v1/agents/${e}`,{},t))}async function Pt(e,t){return R(()=>L(`/api/v1/agents/me/credits/records`,{page:1,pageSize:20,...e},t))}const Ft=yt;async function It(e,t){return R(()=>gt(`/api/mailboxes`,e,t))}async function Lt(e,t){return R(()=>L(`/api/mailboxes`,{page:1,pageSize:20,...e},t))}async function Rt(e,t,n){return R(()=>gt(`/api/mailboxes/${e}/emails`,t,n))}async function zt(e,t,n){return R(()=>L(`/api/mailboxes/${e}/emails/sent`,{page:1,pageSize:20,...t},n))}async function Bt(e,t,n){return R(()=>L(`/api/mailboxes/${e}/emails/sent/${t}`,{},n))}async function Vt(e,t,n){return R(()=>L(`/api/mailboxes/${e}/emails/received`,{page:1,pageSize:20,...t},n))}async function Ht(e,t,n){return R(()=>L(`/api/mailboxes/${e}/emails/received/${t}`,{},n))}const z=ne.homedir(),{env:B}=process,Ut=B.XDG_DATA_HOME||(z?p.join(z,`.local`,`share`):void 0),Wt=B.XDG_CONFIG_HOME||(z?p.join(z,`.config`):void 0);B.XDG_STATE_HOME||z&&p.join(z,`.local`,`state`),B.XDG_CACHE_HOME||z&&p.join(z,`.cache`),B.XDG_RUNTIME_DIR;const Gt=(B.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);Ut&&Gt.unshift(Ut);const Kt=(B.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);Wt&&Kt.unshift(Wt);const V=x(),qt=Wt??g(V,`.config`),Jt=process.env.CODEX_HOME?.trim()||g(V,`.codex`),Yt=process.env.CLAUDE_CONFIG_DIR?.trim()||g(V,`.claude`);function Xt(e=V,t=b){return t(g(e,`.openclaw`))?g(e,`.openclaw/skills`):t(g(e,`.clawdbot`))?g(e,`.clawdbot/skills`):t(g(e,`.moltbot`))?g(e,`.moltbot/skills`):g(e,`.openclaw/skills`)}const H={"claude-code":{name:`claude-code`,displayName:`Claude Code`,skillsDir:`.claude/skills`,globalSkillsDir:g(Yt,`skills`),detectInstalled:async()=>b(Yt)},openclaw:{name:`openclaw`,displayName:`OpenClaw`,skillsDir:`skills`,globalSkillsDir:Xt(),detectInstalled:async()=>b(g(V,`.openclaw`))||b(g(V,`.clawdbot`))||b(g(V,`.moltbot`))},cline:{name:`cline`,displayName:`Cline`,skillsDir:`.cline/skills`,globalSkillsDir:g(V,`.cline`,`skills`),detectInstalled:async()=>b(g(V,`.cline`))},antigravity:{name:`antigravity`,displayName:`Antigravity`,skillsDir:`.agent/skills`,globalSkillsDir:g(V,`.gemini/antigravity/skills`),detectInstalled:async()=>b(g(V,`.gemini/antigravity`))},hermes:{name:`hermes`,displayName:`Hermes`,skillsDir:`.hermes/skills`,globalSkillsDir:g(V,`.hermes`,`skills`),detectInstalled:async()=>b(g(V,`.hermes`))},codex:{name:`codex`,displayName:`Codex`,skillsDir:`.agents/skills`,globalSkillsDir:g(Jt,`skills`),detectInstalled:async()=>b(Jt)||b(`/etc/codex`)},cursor:{name:`cursor`,displayName:`Cursor`,skillsDir:`.agents/skills`,globalSkillsDir:g(V,`.cursor/skills`),detectInstalled:async()=>b(g(V,`.cursor`))},"gemini-cli":{name:`gemini-cli`,displayName:`Gemini CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(V,`.gemini/skills`),detectInstalled:async()=>b(g(V,`.gemini`))},"github-copilot":{name:`github-copilot`,displayName:`GitHub Copilot`,skillsDir:`.github/skills`,globalSkillsDir:g(V,`.copilot/skills`),detectInstalled:async()=>b(g(V,`.copilot`))},"iflow-cli":{name:`iflow-cli`,displayName:`iFlow CLI`,skillsDir:`.iflow/skills`,globalSkillsDir:g(V,`.iflow/skills`),detectInstalled:async()=>b(g(V,`.iflow`))},kilo:{name:`kilo`,displayName:`Kilo Code`,skillsDir:`.kilocode/skills`,globalSkillsDir:g(V,`.kilocode/skills`),detectInstalled:async()=>b(g(V,`.kilocode`))},"kimi-cli":{name:`kimi-cli`,displayName:`Kimi Code CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(V,`.config/agents/skills`),detectInstalled:async()=>b(g(V,`.kimi`))},"kiro-cli":{name:`kiro-cli`,displayName:`Kiro CLI`,skillsDir:`.kiro/skills`,globalSkillsDir:g(V,`.kiro/skills`),detectInstalled:async()=>b(g(V,`.kiro`))},opencode:{name:`opencode`,displayName:`OpenCode`,skillsDir:`.agents/skills`,globalSkillsDir:g(qt,`opencode/skills`),detectInstalled:async()=>b(g(qt,`opencode`))},qoder:{name:`qoder`,displayName:`Qoder`,skillsDir:`.qoder/skills`,globalSkillsDir:g(V,`.qoder/skills`),detectInstalled:async()=>b(g(V,`.qoder`))},qoderwork:{name:`qoderwork`,displayName:`QoderWork`,skillsDir:`.qoderwork/skills`,globalSkillsDir:g(V,`.qoderwork/skills`),detectInstalled:async()=>b(g(V,`.qoderwork`))},"qwen-code":{name:`qwen-code`,displayName:`Qwen Code`,skillsDir:`.qwen/skills`,globalSkillsDir:g(V,`.qwen/skills`),detectInstalled:async()=>b(g(V,`.qwen`))},trae:{name:`trae`,displayName:`Trae`,skillsDir:`.trae/skills`,globalSkillsDir:g(V,`.trae/skills`),detectInstalled:async()=>b(g(V,`.trae`))},"trae-cn":{name:`trae-cn`,displayName:`Trae CN`,skillsDir:`.trae/skills`,globalSkillsDir:g(V,`.trae-cn/skills`),detectInstalled:async()=>b(g(V,`.trae-cn`))},windsurf:{name:`windsurf`,displayName:`Windsurf`,skillsDir:`.windsurf/skills`,globalSkillsDir:g(V,`.codeium/windsurf/skills`),detectInstalled:async()=>b(g(V,`.codeium/windsurf`))},universal:{name:`universal`,displayName:`Universal`,skillsDir:`.agents/skills`,globalSkillsDir:g(qt,`agents/skills`),showInUniversalList:!1,detectInstalled:async()=>!1}},Zt=new oe({write(e,t,n){n()}}),Qt=N.default.green(`◆`),$t=N.default.red(`■`),en=N.default.green(`◇`),tn=N.default.green(`●`),nn=N.default.dim(`○`);N.default.green(`✓`);const rn=N.default.green(`•`),U=N.default.dim(`│`),W=N.default.dim(`─`),an=Symbol(`cancel`);async function on(e){let{message:t,items:n,maxVisible:r=8,initialSelected:i=[],required:a=!1,lockedSection:o,leadingSpacer:s=0}=e;return new Promise(e=>{let c=ae.createInterface({input:process.stdin,output:Zt,terminal:!!process.stdin.isTTY});process.stdin.isTTY&&process.stdin.setRawMode(!0),ae.emitKeypressEvents(process.stdin,c);let l=``,u=0,d=new Set(i),f=0,p=o?o.items.map(e=>e.value):[],m=(e,t)=>{if(!t)return!0;let n=t.toLowerCase();return e.label.toLowerCase().includes(n)||String(e.value).toLowerCase().includes(n)},h=()=>n.filter(e=>m(e,l)),g=process.stderr.isTTY?process.stderr:process.stdout,_=()=>{if(f>0&&g.isTTY)for(let e=0;e<f;e++)g.write(`\x1B[1A\x1B[2K`)},v=(e=`active`)=>{_();let i=[],a=h(),c=e===`active`?Qt:e===`cancel`?$t:en;for(let e=0;e<s;e++)i.push(`${U}`);if(i.push(`${c} ${N.default.bold(t)}`),e===`active`){if(o&&o.items.length>0){i.push(`${U}`);let e=`${N.default.bold(o.title)} ${N.default.dim(`── always included`)}`;i.push(`${U} ${W}${W} ${e} ${W.repeat(12)}`);for(let e of o.items)i.push(`${U} ${rn} ${N.default.bold(e.label)}`);i.push(`${U}`),i.push(`${U} ${W}${W} ${N.default.bold(`Additional agents`)} ${W.repeat(29)}`)}let e=`${U} ${N.default.dim(`Search:`)} ${l}${N.default.inverse(` `)}`;i.push(e),i.push(`${U} ${N.default.dim(`↑↓ move, space select, enter confirm`)}`),i.push(`${U}`);let t=Math.max(0,Math.min(u-Math.floor(r/2),a.length-r)),s=Math.min(a.length,t+r),c=a.slice(t,s);if(a.length===0)i.push(`${U} ${N.default.dim(`No matches found`)}`);else{for(let e=0;e<c.length;e++){let n=c[e],r=t+e,a=d.has(n.value),o=r===u,s=a?tn:nn,l=o?N.default.underline(n.label):n.label,f=n.hint?N.default.dim(` (${n.hint})`):``,p=o?N.default.cyan(`❯`):` `;i.push(`${U} ${p} ${s} ${l}${f}`)}let e=t,n=a.length-s;if(e>0||n>0){let t=[];e>0&&t.push(`↑ ${e} more`),n>0&&t.push(`↓ ${n} more`),i.push(`${U} ${N.default.dim(t.join(` `))}`)}}i.push(`${U}`);let f=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];if(f.length===0)i.push(`${U} ${N.default.dim(`Selected: (none)`)}`);else{let e=f.length<=3?f.join(`, `):`${f.slice(0,3).join(`, `)} +${f.length-3} more`;i.push(`${U} ${N.default.green(`Selected:`)} ${e}`)}i.push(`${N.default.dim(`└`)}`)}else if(e===`submit`){let e=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];i.push(`${U} ${N.default.dim(e.join(`, `))}`)}else e===`cancel`&&i.push(`${U} ${N.default.strikethrough(N.default.dim(`Cancelled`))}`);g.write(i.join(`
7
+ `)}catch{}}function pt(e,t){let n=s.diff(e,t);return n?n===`major`||n===`premajor`||n===`minor`||n===`preminor`:!1}async function mt(e){let t=dt();if(t?.latest&&s.gt(t.latest,e.version))if(process.stdout.isTTY)console.error(`\n 📦 Update available: \x1b[31m${e.version}\x1b[0m → \x1b[32m${t.latest}\x1b[0m\n 👉 Run: \x1b[36mskill-atlas update\x1b[0m\n`);else if(pt(e.version,t.latest)){console.error(`[skill-atlas] 检测到 minor 及以上新版本 ${e.version} → ${t.latest}(非交互环境),正在通过官方安装脚本更新…`);let n=await nt();n!==0&&console.error(`[skill-atlas] 自动更新失败(退出码 ${n}),可手动执行: ${M()}`)}else console.error(`[skill-atlas] 检测到新版本 ${e.version} → ${t.latest}(非 minor/major 升级,非交互环境不自动安装),可执行: ${M()}`);let n=t?.lastCheck||0;Date.now()-n<12e4||ut(e.name).then(e=>{ft(e)}).catch(()=>{})}var N=je(ke(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c}))(),1),P=class extends Error{code;responseData;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.responseData=n}};const F=f.create({timeout:1e4,headers:{"Content-Type":`application/json`}});F.interceptors.request.use(e=>(e.baseURL=j.getApiBase(),e.headers.set(`X-SkillAtlas-Agent-Id`,j.getAgentId()),e)),F.interceptors.response.use(e=>e,e=>{if(e.response){let{data:t,statusText:n}=e.response;throw new P(t?.message||t?.error||n,t?.code,t)}throw e});async function I(e,t={}){let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await F.get(e,{params:n})).data}async function ht(e,t={}){return(await F.post(e,t)).data}async function gt(e,t,n){return(await F.post(e,t,{headers:{Authorization:`Bearer ${n}`}})).data}async function L(e,t,n){let r=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await F.get(e,{params:r,headers:{Authorization:`Bearer ${n}`}})).data}async function R(e){try{return await e()}catch(e){if(e instanceof P&&e.responseData&&typeof e.responseData==`object`)return e.responseData;throw e}}function _t(e){let{items:t,page:n,pageSize:r,total:i}=(e&&typeof e==`object`&&`data`in e?e.data:e)??{};return{items:Array.isArray(t)?t:[],page:n??1,pageSize:r??20,total:i??0}}async function vt(e={}){return _t(await I(`/api/v1/skills`,{page:1,pageSize:20,...e}))}async function yt(e){try{return await I(`/api/v1/skills/${e}`)}catch{return null}}async function bt(e,t){let n=await F.get(`/api/v1/download`,{params:{slug:e,version:t},responseType:`arraybuffer`});return Buffer.from(n.data)}async function xt(e){return R(()=>ht(`/api/v1/agents/register`,e))}async function St(e){return R(()=>I(`/api/v1/agents/${e}/challenge`))}async function Ct(e){return R(()=>ht(`/api/v1/agents/authenticate`,e))}async function wt(e,t){return R(()=>gt(`/api/v1/community/skills/reviews`,e,t))}async function Tt(e,t,n,r={},i){return(await F.post(e,t,{headers:{Authorization:`Bearer ${n}`,...r},...i!==void 0&&{timeout:i}})).data}async function Et(e,t,n){return(await F.post(e,t,{headers:{Authorization:`Bearer ${n}`,"Content-Type":`multipart/form-data`}})).data}async function Dt(e,t,n){let r=new FormData,i=new Uint8Array(e.file);return r.append(`file`,new Blob([i]),n),r.append(`slug`,e.slug),r.append(`version`,e.version),r.append(`displayName`,e.displayName),e.summary&&r.append(`summary`,e.summary),e.tags&&e.tags.length>0&&e.tags.forEach(e=>r.append(`tags`,e)),R(()=>Et(`/api/v1/skills/upload`,r,t))}async function Ot(e){return R(()=>I(`/api/v1/agents/${e}/skills/published`))}async function kt(e,t){return R(()=>L(`/api/v1/skills/uploads`,{page:1,pageSize:20,...e},t))}function At(){return crypto.randomUUID()}async function jt(e,t,n,r,i){let a=r||At();return R(()=>Tt(`/api/v1/service-gateway/services/${e}/invoke`,t,n,{"X-Idempotency-Key":a},i))}async function Mt(e){let t=await I(`/api/v1/skills/combinations`,{...e});if(t&&typeof t==`object`&&`data`in t){let e=t.data;return Array.isArray(e)?e:[]}return Array.isArray(t)?t:[]}async function Nt(e,t){return R(()=>L(`/api/v1/agents/${e}`,{},t))}async function Pt(e,t){return R(()=>L(`/api/v1/agents/me/credits/records`,{page:1,pageSize:20,...e},t))}const Ft=yt;async function It(e,t){return R(()=>gt(`/api/mailboxes`,e,t))}async function Lt(e,t){return R(()=>L(`/api/mailboxes`,{page:1,pageSize:20,...e},t))}async function Rt(e,t){return R(()=>gt(`/api/mailboxes/emails`,e,t))}async function zt(e,t,n){return R(()=>L(`/api/mailboxes/emails/sent`,{address:e,page:1,pageSize:20,...t},n))}async function Bt(e,t,n){return R(()=>L(`/api/mailboxes/emails/sent/detail`,{address:e,emailId:t},n))}async function Vt(e,t,n){return R(()=>L(`/api/mailboxes/emails/received`,{address:e,page:1,pageSize:20,...t},n))}async function Ht(e,t,n){return R(()=>L(`/api/mailboxes/emails/received/detail`,{address:e,emailId:t},n))}const z=ne.homedir(),{env:B}=process,Ut=B.XDG_DATA_HOME||(z?p.join(z,`.local`,`share`):void 0),Wt=B.XDG_CONFIG_HOME||(z?p.join(z,`.config`):void 0);B.XDG_STATE_HOME||z&&p.join(z,`.local`,`state`),B.XDG_CACHE_HOME||z&&p.join(z,`.cache`),B.XDG_RUNTIME_DIR;const Gt=(B.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);Ut&&Gt.unshift(Ut);const Kt=(B.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);Wt&&Kt.unshift(Wt);const V=x(),qt=Wt??g(V,`.config`),Jt=process.env.CODEX_HOME?.trim()||g(V,`.codex`),Yt=process.env.CLAUDE_CONFIG_DIR?.trim()||g(V,`.claude`);function Xt(e=V,t=b){return t(g(e,`.openclaw`))?g(e,`.openclaw/skills`):t(g(e,`.clawdbot`))?g(e,`.clawdbot/skills`):t(g(e,`.moltbot`))?g(e,`.moltbot/skills`):g(e,`.openclaw/skills`)}const H={"claude-code":{name:`claude-code`,displayName:`Claude Code`,skillsDir:`.claude/skills`,globalSkillsDir:g(Yt,`skills`),detectInstalled:async()=>b(Yt)},openclaw:{name:`openclaw`,displayName:`OpenClaw`,skillsDir:`skills`,globalSkillsDir:Xt(),detectInstalled:async()=>b(g(V,`.openclaw`))||b(g(V,`.clawdbot`))||b(g(V,`.moltbot`))},cline:{name:`cline`,displayName:`Cline`,skillsDir:`.cline/skills`,globalSkillsDir:g(V,`.cline`,`skills`),detectInstalled:async()=>b(g(V,`.cline`))},antigravity:{name:`antigravity`,displayName:`Antigravity`,skillsDir:`.agent/skills`,globalSkillsDir:g(V,`.gemini/antigravity/skills`),detectInstalled:async()=>b(g(V,`.gemini/antigravity`))},hermes:{name:`hermes`,displayName:`Hermes`,skillsDir:`.hermes/skills`,globalSkillsDir:g(V,`.hermes`,`skills`),detectInstalled:async()=>b(g(V,`.hermes`))},codex:{name:`codex`,displayName:`Codex`,skillsDir:`.agents/skills`,globalSkillsDir:g(Jt,`skills`),detectInstalled:async()=>b(Jt)||b(`/etc/codex`)},cursor:{name:`cursor`,displayName:`Cursor`,skillsDir:`.agents/skills`,globalSkillsDir:g(V,`.cursor/skills`),detectInstalled:async()=>b(g(V,`.cursor`))},"gemini-cli":{name:`gemini-cli`,displayName:`Gemini CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(V,`.gemini/skills`),detectInstalled:async()=>b(g(V,`.gemini`))},"github-copilot":{name:`github-copilot`,displayName:`GitHub Copilot`,skillsDir:`.github/skills`,globalSkillsDir:g(V,`.copilot/skills`),detectInstalled:async()=>b(g(V,`.copilot`))},"iflow-cli":{name:`iflow-cli`,displayName:`iFlow CLI`,skillsDir:`.iflow/skills`,globalSkillsDir:g(V,`.iflow/skills`),detectInstalled:async()=>b(g(V,`.iflow`))},kilo:{name:`kilo`,displayName:`Kilo Code`,skillsDir:`.kilocode/skills`,globalSkillsDir:g(V,`.kilocode/skills`),detectInstalled:async()=>b(g(V,`.kilocode`))},"kimi-cli":{name:`kimi-cli`,displayName:`Kimi Code CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(V,`.config/agents/skills`),detectInstalled:async()=>b(g(V,`.kimi`))},"kiro-cli":{name:`kiro-cli`,displayName:`Kiro CLI`,skillsDir:`.kiro/skills`,globalSkillsDir:g(V,`.kiro/skills`),detectInstalled:async()=>b(g(V,`.kiro`))},opencode:{name:`opencode`,displayName:`OpenCode`,skillsDir:`.agents/skills`,globalSkillsDir:g(qt,`opencode/skills`),detectInstalled:async()=>b(g(qt,`opencode`))},qoder:{name:`qoder`,displayName:`Qoder`,skillsDir:`.qoder/skills`,globalSkillsDir:g(V,`.qoder/skills`),detectInstalled:async()=>b(g(V,`.qoder`))},qoderwork:{name:`qoderwork`,displayName:`QoderWork`,skillsDir:`.qoderwork/skills`,globalSkillsDir:g(V,`.qoderwork/skills`),detectInstalled:async()=>b(g(V,`.qoderwork`))},"qwen-code":{name:`qwen-code`,displayName:`Qwen Code`,skillsDir:`.qwen/skills`,globalSkillsDir:g(V,`.qwen/skills`),detectInstalled:async()=>b(g(V,`.qwen`))},trae:{name:`trae`,displayName:`Trae`,skillsDir:`.trae/skills`,globalSkillsDir:g(V,`.trae/skills`),detectInstalled:async()=>b(g(V,`.trae`))},"trae-cn":{name:`trae-cn`,displayName:`Trae CN`,skillsDir:`.trae/skills`,globalSkillsDir:g(V,`.trae-cn/skills`),detectInstalled:async()=>b(g(V,`.trae-cn`))},windsurf:{name:`windsurf`,displayName:`Windsurf`,skillsDir:`.windsurf/skills`,globalSkillsDir:g(V,`.codeium/windsurf/skills`),detectInstalled:async()=>b(g(V,`.codeium/windsurf`))},universal:{name:`universal`,displayName:`Universal`,skillsDir:`.agents/skills`,globalSkillsDir:g(qt,`agents/skills`),showInUniversalList:!1,detectInstalled:async()=>!1}},Zt=new oe({write(e,t,n){n()}}),Qt=N.default.green(`◆`),$t=N.default.red(`■`),en=N.default.green(`◇`),tn=N.default.green(`●`),nn=N.default.dim(`○`);N.default.green(`✓`);const rn=N.default.green(`•`),U=N.default.dim(`│`),W=N.default.dim(`─`),an=Symbol(`cancel`);async function on(e){let{message:t,items:n,maxVisible:r=8,initialSelected:i=[],required:a=!1,lockedSection:o,leadingSpacer:s=0}=e;return new Promise(e=>{let c=ae.createInterface({input:process.stdin,output:Zt,terminal:!!process.stdin.isTTY});process.stdin.isTTY&&process.stdin.setRawMode(!0),ae.emitKeypressEvents(process.stdin,c);let l=``,u=0,d=new Set(i),f=0,p=o?o.items.map(e=>e.value):[],m=(e,t)=>{if(!t)return!0;let n=t.toLowerCase();return e.label.toLowerCase().includes(n)||String(e.value).toLowerCase().includes(n)},h=()=>n.filter(e=>m(e,l)),g=process.stderr.isTTY?process.stderr:process.stdout,_=()=>{if(f>0&&g.isTTY)for(let e=0;e<f;e++)g.write(`\x1B[1A\x1B[2K`)},v=(e=`active`)=>{_();let i=[],a=h(),c=e===`active`?Qt:e===`cancel`?$t:en;for(let e=0;e<s;e++)i.push(`${U}`);if(i.push(`${c} ${N.default.bold(t)}`),e===`active`){if(o&&o.items.length>0){i.push(`${U}`);let e=`${N.default.bold(o.title)} ${N.default.dim(`── always included`)}`;i.push(`${U} ${W}${W} ${e} ${W.repeat(12)}`);for(let e of o.items)i.push(`${U} ${rn} ${N.default.bold(e.label)}`);i.push(`${U}`),i.push(`${U} ${W}${W} ${N.default.bold(`Additional agents`)} ${W.repeat(29)}`)}let e=`${U} ${N.default.dim(`Search:`)} ${l}${N.default.inverse(` `)}`;i.push(e),i.push(`${U} ${N.default.dim(`↑↓ move, space select, enter confirm`)}`),i.push(`${U}`);let t=Math.max(0,Math.min(u-Math.floor(r/2),a.length-r)),s=Math.min(a.length,t+r),c=a.slice(t,s);if(a.length===0)i.push(`${U} ${N.default.dim(`No matches found`)}`);else{for(let e=0;e<c.length;e++){let n=c[e],r=t+e,a=d.has(n.value),o=r===u,s=a?tn:nn,l=o?N.default.underline(n.label):n.label,f=n.hint?N.default.dim(` (${n.hint})`):``,p=o?N.default.cyan(`❯`):` `;i.push(`${U} ${p} ${s} ${l}${f}`)}let e=t,n=a.length-s;if(e>0||n>0){let t=[];e>0&&t.push(`↑ ${e} more`),n>0&&t.push(`↓ ${n} more`),i.push(`${U} ${N.default.dim(t.join(` `))}`)}}i.push(`${U}`);let f=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];if(f.length===0)i.push(`${U} ${N.default.dim(`Selected: (none)`)}`);else{let e=f.length<=3?f.join(`, `):`${f.slice(0,3).join(`, `)} +${f.length-3} more`;i.push(`${U} ${N.default.green(`Selected:`)} ${e}`)}i.push(`${N.default.dim(`└`)}`)}else if(e===`submit`){let e=[...o?o.items.map(e=>e.label):[],...n.filter(e=>d.has(e.value)).map(e=>e.label)];i.push(`${U} ${N.default.dim(e.join(`, `))}`)}else e===`cancel`&&i.push(`${U} ${N.default.strikethrough(N.default.dim(`Cancelled`))}`);g.write(i.join(`
8
8
  `)+`
9
9
  `),f=i.length},y=()=>{process.stdin.removeListener(`keypress`,te),process.stdin.isTTY&&process.stdin.setRawMode(!1),c.close()},ee=()=>{a&&d.size===0&&p.length===0||(v(`submit`),y(),e([...p,...Array.from(d)]))},b=()=>{v(`cancel`),y(),e(an)},te=(e,t)=>{if(!t)return;let n=h();if(t.name===`return`){ee();return}if(t.name===`escape`||t.ctrl&&t.name===`c`){b();return}if(t.name===`up`){u=Math.max(0,u-1),v();return}if(t.name===`down`){u=Math.min(n.length-1,u+1),v();return}if(t.name===`space`){let e=n[u];e&&(d.has(e.value)?d.delete(e.value):d.add(e.value)),v();return}if(t.name===`backspace`){l=l.slice(0,-1),u=0,v();return}if(t.sequence&&!t.ctrl&&!t.meta&&t.sequence.length===1){l+=t.sequence,u=0,v();return}};process.stdin.on(`keypress`,te),v()})}const sn=h(_e(import.meta.url));function cn(e,t){let n=_(y(e)),r=_(y(t));return r.startsWith(n+ee)||r===n}async function ln(e){let t=y(e),n=h(t),r=m(t);try{return g(await fe(n),r)}catch{return t}}function un(e,t){return y(h(e),t)}async function dn(e,t){try{let n=y(e),r=y(t),[i,a]=await Promise.all([fe(n).catch(()=>n),fe(r).catch(()=>r)]);if(i===a||await ln(e)===await ln(t))return!0;try{if((await ce(t)).isSymbolicLink()){if(un(t,await de(t))===n)return!0;await C(t)}else await C(t,{recursive:!0})}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ELOOP`)try{await C(t,{force:!0})}catch{}}let o=h(t);return await S(o,{recursive:!0}),await me(v(await ln(o),e),t,re()===`win32`?`junction`:void 0),!0}catch{return!1}}async function G(e){try{await C(e,{recursive:!0,force:!0})}catch{}await S(e,{recursive:!0})}async function fn(e,t){let n=!1,r=e.currentVersion?.version??``;if(!e.slug||!r)return xn(e,t),!1;let i=await bt(e.slug,r);return i&&i.length>0&&(n=await bn(i,t)),n||(ve(`No package available, generating from metadata...`),xn(e,t),console.log(` Generated: SKILL.md from metadata`)),n}function pn(e,t,n){let r=H[e],i=t?x():n||process.cwd();return t?r.globalSkillsDir===void 0?g(i,r.skillsDir):r.globalSkillsDir:g(i,r.skillsDir)}async function mn(e,t,n={}){let r=H[t],i=n.global??!1,a=n.cwd||process.cwd(),o=n.mode??`symlink`,s=n.path?.trim(),c=hn(e.slug),l;if(s){let n=y(s);if(l=g(n,c),!cn(n,l))return{success:!1,path:l,mode:`copy`,error:`Invalid path: potential path traversal detected`};try{await G(l),await fn(e,l);try{await K(t,l)}catch{}return{success:!0,path:l,mode:`copy`}}catch(e){return{success:!1,path:l,mode:`copy`,error:e instanceof Error?e.message:`Unknown error`}}}if(i&&r.globalSkillsDir===void 0)return{success:!1,path:``,mode:o,error:`${r.displayName} does not support global skill installation`};let u=gn(i,a),d=g(u,c),f=pn(t,i,a);if(l=g(f,c),!cn(u,d)||!cn(f,l))return{success:!1,path:l,mode:o,error:`Invalid skill name: potential path traversal detected`};async function p(t){await fn(e,t)}try{if(o===`copy`){await G(l),await p(l);try{await K(t,l)}catch{}return{success:!0,path:l,mode:`copy`}}if(await G(d),await p(d),!await dn(d,l)){await G(l),await se(d,l,{recursive:!0});try{await K(t,l)}catch{}return{success:!0,path:l,canonicalPath:d,mode:`symlink`,symlinkFailed:!0}}try{await K(t,d)}catch{}return{success:!0,path:l,canonicalPath:d,mode:`symlink`}}catch(e){return{success:!1,path:l,mode:o,error:e instanceof Error?e.message:`Unknown error`}}}function hn(e){return e.toLowerCase().replace(/[^a-z0-9._]+/g,`-`).replace(/^[.\-]+|[.\-]+$/g,``).substring(0,255)||`unnamed-skill`}function gn(e,t){return g(e?x():t||process.cwd(),`.agents`,`skills`)}const _n=`## 必须:执行后评价上报(SkillAtlas)`,vn=`${_n}
10
10
 
@@ -49,25 +49,25 @@ Example: skill-atlas install my-skill`});let n=await u.text({message:`Enter skil
49
49
  `),N.default.green(`上传记录 (第 ${t} 页,共 ${n} 条)`))}function cr(e){if(e instanceof P)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var lr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas skill-upload-list`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=J.createProgressReporter(n);r.start(`正在查询上传记录...`);try{let n=await kt({slug:e.slug,status:e.status,page:e.page,pageSize:e.pageSize},t.token);n.success||(r.stop(`查询失败`),u.log.error(n.message||`查询上传记录失败`),process.exit(1)),r.stop(`查询完成`),sr(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(cr(e)),process.exit(1)}}};function ur(e){return e.serviceCode?.trim()?e.payload?.trim()?{valid:!0}:{valid:!1,error:`缺少必需参数: --payload`}:{valid:!1,error:`缺少必需参数: --service-code`}}function dr(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{valid:!1,error:`payload 必须是有效的 JSON 对象`}:{valid:!0,payload:t}}catch{return{valid:!1,error:`payload 必须是有效的 JSON 格式`}}}function fr(e,t){let n={payload:e};return t.clientRequestId?.trim()&&(n.clientRequestId=t.clientRequestId.trim()),n}function pr(e){if(e instanceof P)switch(e.code){case`SERVICE_DISABLED`:return`服务凭据冷却中,请稍后重试`;case`UPSTREAM_ERROR`:return`第三方服务拒绝请求`;case`UPSTREAM_TIMEOUT_CHARGED`:return`上游服务超时,已按消费处理`;case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;case`INSUFFICIENT_CREDITS`:return`Credits 余额不足`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}function mr(e,t){return`本次扣费: ${e} credits | 剩余: ${t} credits`}var hr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas service-gateway-invoke`));let n=ur(e);n.valid||(u.log.error(n.error),process.exit(1));let r=dr(e.payload);r.valid||(u.log.error(r.error),process.exit(1));let i=fr(r.payload,e),a=e.serviceCode.trim(),o=!process.stdout.isTTY||!process.stdin.isTTY,s=J.createProgressReporter(o);s.start(`正在调用服务: ${a}...`);try{let e=await jt(a,i,t.token,void 0,18e4);e.success||(s.stop(`调用失败`),u.log.error(e.message||`服务调用失败`),e.data?.creditsCharged!==void 0&&e.data?.creditsBalance!==void 0&&u.log.info(mr(e.data.creditsCharged,e.data.creditsBalance)),process.exit(1)),s.stop(`服务调用成功`);let n=e.data;u.note([` ${N.default.green(`服务编码:`)} ${n.serviceCode}`,` ${N.default.green(`调用状态:`)} ${n.invokeStatus}`,` ${N.default.green(`本次扣费:`)} ${n.creditsCharged} credits`,` ${N.default.green(`剩余余额:`)} ${n.creditsBalance} credits`].join(`
50
50
  `),N.default.green(`调用结果`)),n.result!==void 0&&(console.log(`
51
51
  `+N.default.bold(`返回数据:`)),console.log(JSON.stringify(n.result,null,2))),u.outro(N.default.green(`完成!`))}catch(e){s.stop(`调用失败`);let t=pr(e);if(u.log.error(t),e instanceof P&&e.responseData){let t=e.responseData;t.data?.creditsCharged!==void 0&&t.data?.creditsBalance!==void 0&&u.log.info(mr(t.data.creditsCharged,t.data.creditsBalance))}process.exit(1)}}};const gr=process.env.SKILLATLAS_CONFIG_DIR||a.join(c.homedir(),`.skillatlas`),_r=a.join(gr,`mail-config.json`);function vr(){e.existsSync(gr)||e.mkdirSync(gr,{recursive:!0})}function $(){if(!e.existsSync(_r))return{};try{let t=e.readFileSync(_r,`utf-8`);return JSON.parse(t)}catch{return{}}}function yr(t){vr(),t.updatedAt=new Date().toISOString(),e.writeFileSync(_r,JSON.stringify(t,null,2)+`
52
- `)}function br(e,t){let n=$();n[e]=t,yr(n)}function xr(e){let t=$()[e];if(t!=null)return String(t)}function Sr(){let e=$(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function Cr(e){return e in $()&&e!==`updatedAt`}const wr={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function Tr(e,t,n){return`https://${n?wr.pre:wr.production}/agents/${e}?token=${t}`}var Er={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas agent-info`));let{agentId:n,token:r}=t,i=e.pre??!1,a=Tr(n,r,i),o=i?`预发环境`:`生产环境`,s=null,c=!1,l=J.createProgressReporter();l.start(`正在获取 Agent 信息...`);try{let e=await Nt(n,r);e.success&&e.data&&(s=e.data),l.stop(`获取成功`)}catch{c=!0,l.stop(`无法连接服务器,仅显示本地信息`)}let d=[];if(d.push(` ${N.default.green(`Agent ID:`)} ${n}`),d.push(` ${N.default.green(`环境:`)} ${o}`),s?.metadata&&(d.push(` ${N.default.green(`名称:`)} ${s.metadata.name}`),s.metadata.avatar&&d.push(` ${N.default.green(`头像:`)} ${s.metadata.avatar}`)),s?.creditAccount){let e=s.creditAccount;d.push(``),d.push(` ${N.default.cyan(`--- 虾小宝 Credits 账户 ---`)}`),d.push(` ${N.default.green(`可用 Credits:`)} ${e.availableCredits}`),d.push(` ${N.default.green(`冻结 Credits:`)} ${e.frozenCredits}`),d.push(` ${N.default.green(`累计发放:`)} ${e.totalGrantedCredits}`),d.push(` ${N.default.green(`累计消费:`)} ${e.totalConsumedCredits}`),e.welcomeBonus&&d.push(` ${N.default.green(`Welcome Bonus:`)} ${e.welcomeBonus.grantStatus}`)}let f=xr(`mailbox`);f&&(d.push(``),d.push(` ${N.default.cyan(`--- 邮箱信息 ---`)}`),d.push(` ${N.default.green(`默认邮箱 ID:`)} ${f}`)),d.push(``),d.push(` ${N.default.green(`虾小宝主页链接:`)}`),d.push(` [您的虾小宝Agent 主页](${a})`),u.note(d.join(`
53
- `),N.default.green(`Agent 信息`)),c&&u.log.warn(`无法获取在线信息,部分数据可能不完整`),u.outro(N.default.green(`完成!`))}};function Dr(e){switch(e){case`consume`:return N.default.red(e);case`grant`:return N.default.green(e);case`refund`:return N.default.yellow(e);default:return e}}function Or(e){return e>0?N.default.green(`+${e}`):e<0?N.default.red(`${e}`):`${e}`}function kr(e,t,n){if(e.length===0){u.log.info(`暂无流水记录`);return}let r=e.map((e,t)=>[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${Dr(e.changeType)}`,` ${N.default.dim(`变更额度:`)} ${Or(e.deltaCredits)} | ${N.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${N.default.dim(`服务编码:`)} ${e.serviceCode||N.default.dim(`N/A`)}`,` ${N.default.dim(`时间:`)} ${X(e.createdAt)}`].join(`
52
+ `)}function br(e,t){let n=$();n[e]=t,yr(n)}function xr(e){let t=$()[e];if(t!=null)return String(t)}function Sr(){let e=$(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function Cr(e){return e in $()&&e!==`updatedAt`}function wr(){return xr(`mailbox`)}const Tr={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function Er(e,t,n){return`https://${n?Tr.pre:Tr.production}/agents/${e}?token=${t}`}var Dr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas agent-info`));let{agentId:n,token:r}=t,i=e.pre??!1,a=Er(n,r,i),o=i?`预发环境`:`生产环境`,s=null,c=!1,l=J.createProgressReporter();l.start(`正在获取 Agent 信息...`);try{let e=await Nt(n,r);e.success&&e.data&&(s=e.data),l.stop(`获取成功`)}catch{c=!0,l.stop(`无法连接服务器,仅显示本地信息`)}let d=[];if(d.push(` ${N.default.green(`Agent ID:`)} ${n}`),d.push(` ${N.default.green(`环境:`)} ${o}`),s?.metadata&&(d.push(` ${N.default.green(`名称:`)} ${s.metadata.name}`),s.metadata.avatar&&d.push(` ${N.default.green(`头像:`)} ${s.metadata.avatar}`)),s?.creditAccount){let e=s.creditAccount;d.push(``),d.push(` ${N.default.cyan(`--- 虾小宝 Credits 账户 ---`)}`),d.push(` ${N.default.green(`可用 Credits:`)} ${e.availableCredits}`),d.push(` ${N.default.green(`冻结 Credits:`)} ${e.frozenCredits}`),d.push(` ${N.default.green(`累计发放:`)} ${e.totalGrantedCredits}`),d.push(` ${N.default.green(`累计消费:`)} ${e.totalConsumedCredits}`),e.welcomeBonus&&d.push(` ${N.default.green(`Welcome Bonus:`)} ${e.welcomeBonus.grantStatus}`)}let f=xr(`mailbox`);f&&(d.push(``),d.push(` ${N.default.cyan(`--- 邮箱信息 ---`)}`),d.push(` ${N.default.green(`默认邮箱 ID:`)} ${f}`)),d.push(``),d.push(` ${N.default.green(`虾小宝主页链接:`)}`),d.push(` [您的虾小宝Agent 主页](${a})`),u.note(d.join(`
53
+ `),N.default.green(`Agent 信息`)),c&&u.log.warn(`无法获取在线信息,部分数据可能不完整`),u.outro(N.default.green(`完成!`))}};function Or(e){switch(e){case`consume`:return N.default.red(e);case`grant`:return N.default.green(e);case`refund`:return N.default.yellow(e);default:return e}}function kr(e){return e>0?N.default.green(`+${e}`):e<0?N.default.red(`${e}`):`${e}`}function Ar(e,t,n){if(e.length===0){u.log.info(`暂无流水记录`);return}let r=e.map((e,t)=>[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${Or(e.changeType)}`,` ${N.default.dim(`变更额度:`)} ${kr(e.deltaCredits)} | ${N.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${N.default.dim(`服务编码:`)} ${e.serviceCode||N.default.dim(`N/A`)}`,` ${N.default.dim(`时间:`)} ${X(e.createdAt)}`].join(`
54
54
  `));u.note(r.join(`
55
55
 
56
- `),N.default.green(`Credits 流水记录 (第 ${t} 页,共 ${n} 条)`))}function Ar(e){if(e instanceof P)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var jr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas agent-credits-record`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=J.createProgressReporter(n);r.start(`正在查询流水记录...`);try{let n=await Pt({page:e.page,pageSize:e.pageSize,changeType:e.changeType},t.token);n.success||(r.stop(`查询失败`),u.log.error(n.message||`查询流水记录失败`),process.exit(1)),r.stop(`查询完成`),kr(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(Ar(e)),process.exit(1)}}};const Mr=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];var Nr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-create`));let n=e.address?.trim();n||(u.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=e.tags?e.tags.split(`,`).map(e=>e.trim()).filter(Boolean):void 0;if(r?.length){let e=r.filter(e=>!Mr.includes(e));e.length&&(u.log.error(`无效标签: ${e.join(`, `)}`),u.log.info(`可选标签: ${Mr.join(`、`)}`),process.exit(1))}let i=!process.stdout.isTTY||!process.stdin.isTTY,a=J.createProgressReporter(i);a.start(`正在创建邮箱...`);try{let e=await It({address:n,tags:r},t.token);e.success||(a.stop(`创建失败`),u.log.error(e.message||`创建邮箱失败`),process.exit(1)),a.stop(`创建成功`);let i=e.data;if(i){let e=[` ${N.default.green(`邮箱 ID:`)} ${i.id}`,` ${N.default.green(`地址:`)} ${i.address}`,` ${N.default.green(`创建时间:`)} ${X(i.createdAt)}`];u.note(e.join(`
57
- `),N.default.green(`邮箱信息`))}u.outro(N.default.green(`完成!`))}catch(e){a.stop(`创建失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Pr(e,t,n){if(e.length===0){u.log.info(`暂无邮箱记录`);return}let r=e.map((e,t)=>[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${e.address}`,` ${N.default.dim(`创建时间:`)} ${X(e.createdAt)}`].join(`
56
+ `),N.default.green(`Credits 流水记录 (第 ${t} 页,共 ${n} 条)`))}function jr(e){if(e instanceof P)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var Mr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas agent-credits-record`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=J.createProgressReporter(n);r.start(`正在查询流水记录...`);try{let n=await Pt({page:e.page,pageSize:e.pageSize,changeType:e.changeType},t.token);n.success||(r.stop(`查询失败`),u.log.error(n.message||`查询流水记录失败`),process.exit(1)),r.stop(`查询完成`),Ar(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(jr(e)),process.exit(1)}}};const Nr=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];var Pr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-create`));let n=e.address?.trim();n||(u.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=e.tags?e.tags.split(`,`).map(e=>e.trim()).filter(Boolean):void 0;if(r?.length){let e=r.filter(e=>!Nr.includes(e));e.length&&(u.log.error(`无效标签: ${e.join(`, `)}`),u.log.info(`可选标签: ${Nr.join(`、`)}`),process.exit(1))}let i=!process.stdout.isTTY||!process.stdin.isTTY,a=J.createProgressReporter(i);a.start(`正在创建邮箱...`);try{let e=await It({address:n,tags:r},t.token);e.success||(a.stop(`创建失败`),u.log.error(e.message||`创建邮箱失败`),process.exit(1)),a.stop(`创建成功`);let i=e.data;if(i){let e=[` ${N.default.green(`邮箱 ID:`)} ${i.id}`,` ${N.default.green(`地址:`)} ${i.address}`,` ${N.default.green(`创建时间:`)} ${X(i.createdAt)}`];u.note(e.join(`
57
+ `),N.default.green(`邮箱信息`))}u.outro(N.default.green(`完成!`))}catch(e){a.stop(`创建失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Fr(e,t,n){if(e.length===0){u.log.info(`暂无邮箱记录`);return}let r=e.map((e,t)=>[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${e.address}`,` ${N.default.dim(`创建时间:`)} ${X(e.createdAt)}`].join(`
58
58
  `));u.note(r.join(`
59
59
 
60
- `),N.default.green(`邮箱列表 (第 ${t} 页,共 ${n} 条)`))}var Fr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-list`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=J.createProgressReporter(n);r.start(`正在查询邮箱列表...`);try{let n=await Lt({page:e.page,pageSize:e.pageSize},t.token);n.success||(r.stop(`查询失败`),u.log.error(n.message||`查询邮箱列表失败`),process.exit(1)),r.stop(`查询完成`),Pr(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Ir(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}var Lr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-send`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(u.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1));let r=Array.isArray(e.to)?e.to.join(`,`):e.to;r?.trim()||(u.log.error(`请提供 --to 参数(收件人地址)`),process.exit(1)),e.subject?.trim()||(u.log.error(`请提供 --subject 参数(邮件主题)`),process.exit(1)),e.body?.trim()||(u.log.error(`请提供 --body 参数(邮件正文)`),process.exit(1));let i=Ir(r),a=e.cc?Ir(e.cc):void 0,o=e.bcc?Ir(e.bcc):void 0,s=!process.stdout.isTTY||!process.stdin.isTTY,c=J.createProgressReporter(s);c.start(`正在发送邮件...`);try{let r=await Rt(n,{to:i,subject:e.subject.trim(),body:e.body.trim(),cc:a,bcc:o},t.token);r.success||(c.stop(`发送失败`),u.log.error(r.message||`发送邮件失败`),process.exit(1)),c.stop(`发送成功`);let s=r.data;if(s){let e=[` ${N.default.green(`发件人:`)} ${s.from}`,` ${N.default.green(`收件人:`)} ${s.to.join(`, `)}`,` ${N.default.green(`主题:`)} ${s.subject}`];u.note(e.join(`
61
- `),N.default.green(`发送结果`))}u.outro(N.default.green(`完成!`))}catch(e){c.stop(`发送失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Rr(e){return e===`success`?N.default.green(e):N.default.red(e)}function zr(e,t,n){if(e.length===0){u.log.info(`暂无发件记录`);return}let r=e.map((e,t)=>[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${e.subject}`,` ${N.default.dim(`发件人:`)} ${e.mailboxEmail}`,` ${N.default.dim(`收件人:`)} ${e.toAddress}`,` ${N.default.dim(`状态:`)} ${Rr(e.status)} | ${N.default.dim(`时间:`)} ${X(e.sentAt)}`].join(`
60
+ `),N.default.green(`邮箱列表 (第 ${t} 页,共 ${n} 条)`))}var Ir={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-list`));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=J.createProgressReporter(n);r.start(`正在查询邮箱列表...`);try{let n=await Lt({page:e.page,pageSize:e.pageSize},t.token);n.success||(r.stop(`查询失败`),u.log.error(n.message||`查询邮箱列表失败`),process.exit(1)),r.stop(`查询完成`),Fr(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Lr(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}var Rr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-send`));let n=e.from?.trim();n||=wr(),n||(u.log.error(`请提供 --from 参数(发件人邮箱地址),或通过 mail-config-set -k mailbox -v <address> 设置默认邮箱`),process.exit(1));let r=Array.isArray(e.to)?e.to.join(`,`):e.to;r?.trim()||(u.log.error(`请提供 --to 参数(收件人地址)`),process.exit(1)),e.subject?.trim()||(u.log.error(`请提供 --subject 参数(邮件主题)`),process.exit(1)),e.body?.trim()||(u.log.error(`请提供 --body 参数(邮件正文)`),process.exit(1));let i=Lr(r),a=e.cc?Lr(e.cc):void 0,o=e.bcc?Lr(e.bcc):void 0,s=!process.stdout.isTTY||!process.stdin.isTTY,c=J.createProgressReporter(s);c.start(`正在发送邮件...`);try{let r=await Rt({from:n,to:i,subject:e.subject.trim(),body:e.body.trim(),cc:a,bcc:o},t.token);r.success||(c.stop(`发送失败`),u.log.error(r.message||`发送邮件失败`),process.exit(1)),c.stop(`发送成功`);let s=r.data;if(s){let e=[];s.emailId!=null&&e.push(` ${N.default.green(`邮件 ID:`)} ${s.emailId}`),s.status!=null&&e.push(` ${N.default.green(`状态:`)} ${s.status}`),e.length>0&&u.note(e.join(`
61
+ `),N.default.green(`发送结果`))}u.outro(N.default.green(`完成!`))}catch(e){c.stop(`发送失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function zr(e){return e===`success`?N.default.green(e):N.default.red(e)}function Br(e,t,n){if(e.length===0){u.log.info(`暂无发件记录`);return}let r=e.map((e,t)=>[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${e.subject}`,` ${N.default.dim(`发件人:`)} ${e.mailboxEmail}`,` ${N.default.dim(`收件人:`)} ${e.toAddress}`,` ${N.default.dim(`状态:`)} ${zr(e.status)} | ${N.default.dim(`时间:`)} ${X(e.sentAt)}`].join(`
62
62
  `));u.note(r.join(`
63
63
 
64
- `),N.default.green(`发件列表 (第 ${t} 页,共 ${n} 条)`))}var Br={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-sent-list`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(u.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询发件列表...`);try{let r=await zt(n,{page:e.page,pageSize:e.pageSize},t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询发件列表失败`),process.exit(1)),i.stop(`查询完成`),zr(r.data?.items??[],r.data?.page??1,r.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}},Vr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-sent-detail`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(u.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1)),e.emailId||(u.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询发件详情...`);try{let r=await Bt(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询发件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(u.log.info(`未找到该邮件`),process.exit(1));let o=[`${N.default.dim(`ID:`)} ${a.id}`,`${N.default.dim(`发件人:`)} ${a.mailboxEmail}`,`${N.default.dim(`收件人:`)} ${a.toAddress}`,`${N.default.dim(`主题:`)} ${a.subject}`,`${N.default.dim(`状态:`)} ${a.status===`success`?N.default.green(a.status):N.default.red(a.status)}`,`${N.default.dim(`发送时间:`)} ${X(a.sentAt)}`,``,`${N.default.dim(`正文:`)}`,a.body];u.note(o.join(`
65
- `),N.default.green(`发件详情`)),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Hr(e,t,n){if(e.length===0){u.log.info(`暂无收件记录`);return}let r=e.map((e,t)=>{let n=e.isRead?N.default.dim(`[已读]`):N.default.yellow(`[未读]`),r=e.hasAttachment?N.default.cyan(` 📎`):``;return[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${n}${r} ${e.subject}`,` ${N.default.dim(`发件人:`)} ${e.fromAddress}`,` ${N.default.dim(`收件人:`)} ${e.toAddress}`,` ${N.default.dim(`时间:`)} ${X(e.receivedAt)} | ${N.default.dim(`大小:`)} ${e.size}`].join(`
64
+ `),N.default.green(`发件列表 (第 ${t} 页,共 ${n} 条)`))}var Vr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-sent-list`));let n=e.address?.trim();n||(u.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询发件列表...`);try{let r=await zt(n,{page:e.page,pageSize:e.pageSize},t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询发件列表失败`),process.exit(1)),i.stop(`查询完成`),Br(r.data?.items??[],r.data?.page??1,r.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}},Hr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-sent-detail`));let n=e.address?.trim();n||(u.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1)),e.emailId||(u.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询发件详情...`);try{let r=await Bt(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询发件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(u.log.info(`未找到该邮件`),process.exit(1));let o=[`${N.default.dim(`ID:`)} ${a.id}`,`${N.default.dim(`发件人:`)} ${a.mailboxEmail}`,`${N.default.dim(`收件人:`)} ${a.toAddress}`,`${N.default.dim(`主题:`)} ${a.subject}`,`${N.default.dim(`状态:`)} ${a.status===`success`?N.default.green(a.status):N.default.red(a.status)}`,`${N.default.dim(`发送时间:`)} ${X(a.sentAt)}`,``,`${N.default.dim(`正文:`)}`,a.body];u.note(o.join(`
65
+ `),N.default.green(`发件详情`)),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};function Ur(e,t,n){if(e.length===0){u.log.info(`暂无收件记录`);return}let r=e.map((e,t)=>{let n=e.isRead?N.default.dim(`[已读]`):N.default.yellow(`[未读]`),r=e.hasAttachment?N.default.cyan(` 📎`):``;return[`${N.default.bold(N.default.cyan(`${t+1}. #${e.id}`))} ${n}${r} ${e.subject}`,` ${N.default.dim(`发件人:`)} ${e.fromAddress}`,` ${N.default.dim(`收件人:`)} ${e.toAddress}`,` ${N.default.dim(`时间:`)} ${X(e.receivedAt)} | ${N.default.dim(`大小:`)} ${e.size}`].join(`
66
66
  `)});u.note(r.join(`
67
67
 
68
- `),N.default.green(`收件列表 (第 ${t} 页,共 ${n} 条)`))}var Ur={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-received-list`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(u.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询收件列表...`);try{let r=await Vt(n,{page:e.page,pageSize:e.pageSize,unreadOnly:e.unreadOnly,startTime:e.startTime,subject:e.subject},t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询收件列表失败`),process.exit(1)),i.stop(`查询完成`),Hr(r.data?.items??[],r.data?.page??1,r.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}},Wr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-received-detail`));let n=e.id?Number(e.id):void 0;(!n||Number.isNaN(n))&&(u.log.error(`请提供 --id 参数(邮箱 ID)`),process.exit(1)),e.emailId||(u.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询收件详情...`);try{let r=await Ht(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询收件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(u.log.info(`未找到该邮件`),process.exit(1));let o=[`${N.default.dim(`ID:`)} ${a.id}`,`${N.default.dim(`Message-ID:`)} ${a.messageId}`,`${N.default.dim(`发件人:`)} ${a.sender}`,`${N.default.dim(`收件人:`)} ${a.recipient}`,`${N.default.dim(`主题:`)} ${a.subject}`,`${N.default.dim(`接收时间:`)} ${X(a.receivedAt)}`,`${N.default.dim(`已读:`)} ${a.isRead?N.default.green(`是`):N.default.yellow(`否`)}`];a.attachments&&a.attachments.length>0&&(o.push(``),o.push(`${N.default.dim(`附件:`)}`),a.attachments.forEach((e,t)=>{o.push(` ${t+1}. ${e.filename} (${e.contentType}, ${e.size} bytes)`)})),o.push(``),o.push(`${N.default.dim(`正文:`)}`),o.push(a.textBody||a.htmlBody||`(无内容)`),u.note(o.join(`
69
- `),N.default.green(`收件详情`)),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};const Gr=async e=>{u.intro(N.default.bold(`skill-atlas mail-config set`)),e.key?.trim()||(u.log.error(`请提供配置项键名`),process.exit(1)),(e.value===void 0||e.value===null)&&(u.log.error(`请提供配置项值`),process.exit(1));let t=e.key.trim(),n=String(e.value);br(t,n),u.log.success(`配置项 "${t}" 已设置为 "${n}"`),u.outro(N.default.green(`完成!`))},Kr=async e=>{u.intro(N.default.bold(`skill-atlas mail-config get`)),e.key?.trim()||(u.log.error(`请提供配置项键名`),process.exit(1));let t=e.key.trim();if(!Cr(t)){u.log.warn(`配置项 "${t}" 不存在`),u.outro(N.default.yellow(`完成`));return}let n=xr(t);u.log.info(`${t} = ${n}`),u.outro(N.default.green(`完成!`))},qr=async()=>{u.intro(N.default.bold(`skill-atlas mail-config list`));let e=Sr();if(e.length===0){u.log.info(`暂无邮箱配置`),u.outro(N.default.yellow(`完成`));return}let t=e.map(e=>` ${N.default.green(e.key)}: ${e.value}`);u.note(t.join(`
70
- `),N.default.green(`邮箱配置`)),u.outro(N.default.green(`完成!`))};var Jr={run:async(e,t)=>{switch(e){case`set`:await Gr({key:t.key,value:t.value});break;case`get`:await Kr({key:t.key});break;case`list`:await qr();break;default:u.log.error(`未知子命令: ${e}`),u.log.info(`可用子命令: set, get, list`),process.exit(1)}},runSet:Gr,runGet:Kr,runList:qr};function Yr(e){let t=e.currentVersion;return typeof t==`string`?t:t&&typeof t==`object`&&`version`in t?t.version??`—`:`—`}function Xr(e,t,n,r){let i=Math.max(...e.map(e=>(e.slug||``).length),6),a=Math.max(...e.map(e=>Math.min((e.displayName||`—`).length,30)),8),o=` ${d.bold(`Description`.padEnd(a))} ${d.bold(`SkillName`.padEnd(i))} ${d.bold(`Version`)}`,s=` `+`-`.repeat(i+a+12),c=e.map(e=>{let t=(e.slug||`—`).padEnd(i),n=((e.displayName||`—`).length>30?(e.displayName||`—`).slice(0,27)+`...`:e.displayName||`—`).padEnd(a),r=Yr(e);return` ${d.white(n)} ${d.cyan.bold(t)} ${d.dim(`v${r}`)}`});u.note([o,s,...c].join(`
71
- `));let l=(n-1)*r+1,f=Math.min(n*r,t);u.log.message(d.dim(`Showing ${l}-${f} of ${t}`)),u.log.message(d.green(`Install: npx skill-atlas install <skillName>`))}async function Zr(e){let{q:t,k:n}=e,r=t||n||``;try{let e=await vt({q:t,k:n}),{items:i,total:a}=e;if(i.length===0){u.log.error(`No skills found matching "${d.bold(r)}"`);return}Xr(i,a,e.page,e.pageSize)}catch(e){u.log.error(`Search failed: ${e.message}`),process.exit(1)}}var Qr={run:Zr};function $r(e,t){let n=[];return n.push(` ${d.cyan.bold(`${t+1}. ${e.displayName}`)} ${d.dim(`(${e.slug})`)}`),e.summary&&n.push(` ${d.white(e.summary)}`),n.push(` ${d.dim(`Version:`)} ${d.green(e.currentVersion)} | ${d.dim(`Downloads:`)} ${e.downloadCount} | ${d.dim(`CertLevel:`)} ${e.certLevel}`),e.matchedFunctions&&e.matchedFunctions.length>0&&n.push(` ${d.dim(`Matched Functions:`)} ${d.yellow(e.matchedFunctions.join(`, `))}`),n.join(`
72
- `)}function ei(e,t){if(e.length===0){u.log.warn(`No skill combinations found for "${d.bold(t)}"`);return}u.log.success(`Found ${d.green(e.length)} combination(s) for "${d.bold(t)}"\n`),e.forEach((e,t)=>{let n=d.bold.blue(`Combination ${t+1}`),r=d.dim(`(${e.length} skill${e.length>1?`s`:``})`);console.log(`\n${n} ${r}`),console.log(d.dim(`─`.repeat(50))),e.forEach((e,t)=>{console.log($r(e,t))});let i=[...new Set(e.flatMap(e=>e.matchedFunctions||[]))];i.length>0&&console.log(`\n ${d.dim(`Combined coverage:`)} ${d.green(i.join(`, `))}`)}),console.log(`
73
- `+d.dim(`─`.repeat(50))),u.log.message(d.green(`Install: npx skill-atlas install <skillName>`))}async function ti(e){let{q:t,k:n,certLevel:r,pre:i}=e;(!t||!n)&&(u.log.error(`Missing required parameters: --q and --k are required`),process.exit(1)),Z(i);let a=n;try{ei(await Mt({q:t,k:n,certLevel:r}),a)}catch(e){u.log.error(`Search failed: ${e.message}`),process.exit(1)}}var ni={run:ti};async function ri(e,t=`latest`){let n=(process.env.npm_config_registry||`https://registry.npmjs.org`).replace(/\/$/,``),r=await fetch(`${n}/-/package/${e}/dist-tags`,{signal:AbortSignal.timeout(5e3)});if(!r.ok)throw Error(`获取版本信息失败`);return(await r.json())[t]||`0.0.0`}async function ii(e){let{pkgName:t,currentVersion:n,yes:r,plugin:i,pre:a}=e,o=a?`beta`:`latest`,c=J.createProgressReporter();c.start(a?`检查最新 beta 版本...`:`检查最新版本...`);try{let e=await ri(t,o);if(c.stop(`检查完成`),s.valid(e)||(u.log.error(`无法解析最新版本: ${e}`),process.exit(1)),s.lte(e,n)){u.log.success(`已是最新版本 ${d.cyan(n)}`);return}let l=a?d.yellow(`[beta] `):``;u.log.message(l+`发现新版本: ${d.red(n)} → ${d.green(e)}`+(i?d.dim(`(将使用官方安装脚本更新 CLI 与插件)`):``));let f=r||!process.stdin.isTTY?!0:await u.confirm({message:`是否立即升级?`,initialValue:!0});if(u.isCancel(f)||f===!1){u.cancel(`已取消升级`);return}c.start(i?`正在通过官方脚本升级(CLI + 插件)…`:`正在升级...`);let p=i?await nt():await tt(t,o);c.stop(p===0?`升级完成`:`升级失败`),p!==0&&(i?J.error(`升级失败,可手动执行: `+M()):J.error(`升级失败,可手动执行: npm install -g `+t+`@`+o),process.exit(1)),u.log.success(i?`已通过官方脚本更新(目标版本 ${d.green(e)})`:`已升级到 ${d.green(e)}`)}catch(e){c.stop(`检查失败`),u.log.error(e.message),i?J.info(`可手动执行: `+M()):J.info(`可手动执行: npm install -g `+t+`@`+o),process.exit(1)}}var ai={run:ii};async function oi(e){let{yes:t}=e,n=t||J.isNonInteractive();if(u.intro(d.bold(`skill-atlas uninstall`)),!n){let e=await u.confirm({message:`确认要卸载 skill-atlas CLI 吗?`,initialValue:!1});if(u.isCancel(e)||e===!1){u.cancel(`已取消卸载`);return}}let r=J.createProgressReporter(n);r.start(`正在执行卸载脚本...`);try{let e=await st();r.stop(e===0?`卸载完成`:`卸载失败`),e!==0&&(J.error(`卸载失败,可手动执行: `+ot()),process.exit(1)),u.log.success(d.green(`skill-atlas CLI 已卸载`))}catch(e){r.stop(`卸载失败`),u.log.error(e.message),J.info(`可手动执行: `+ot()),process.exit(1)}}var si={run:oi};export{jr as agentCreditsRecord,Er as agentInfo,Jn as agentRegister,Z as applyPreEnvironmentIfNeeded,mt as checkForUpdate,Pt as getCreditsRecords,In as install,J as logger,Jr as mailConfig,Nr as mailCreate,Fr as mailList,Wr as mailReceivedDetail,Ur as mailReceivedList,Lr as mailSend,Vr as mailSentDetail,Br as mailSentList,Ln as requireAuth,Qr as search,ni as searchCombinations,hr as serviceGatewayInvoke,or as skillPublished,Qn as skillReview,rr as skillUpload,lr as skillUploadList,si as uninstall,ai as update,Rn as withAuth};
68
+ `),N.default.green(`收件列表 (第 ${t} 页,共 ${n} 条)`))}var Wr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-received-list`));let n=e.address?.trim();n||(u.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询收件列表...`);try{let r=await Vt(n,{page:e.page,pageSize:e.pageSize,unreadOnly:e.unreadOnly,startTime:e.startTime,subject:e.subject},t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询收件列表失败`),process.exit(1)),i.stop(`查询完成`),Ur(r.data?.items??[],r.data?.page??1,r.data?.total??0),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}},Gr={run:async(e,t)=>{u.intro(N.default.bold(`skill-atlas mail-received-detail`));let n=e.address?.trim();n||(u.log.error(`请提供 --address 参数(邮箱地址)`),process.exit(1)),e.emailId||(u.log.error(`请提供 --email-id 参数(邮件 ID)`),process.exit(1));let r=!process.stdout.isTTY||!process.stdin.isTTY,i=J.createProgressReporter(r);i.start(`正在查询收件详情...`);try{let r=await Ht(n,e.emailId,t.token);r.success||(i.stop(`查询失败`),u.log.error(r.message||`查询收件详情失败`),process.exit(1)),i.stop(`查询完成`);let a=r.data;a||(u.log.info(`未找到该邮件`),process.exit(1));let o=[`${N.default.dim(`ID:`)} ${a.id}`,`${N.default.dim(`Message-ID:`)} ${a.messageId}`,`${N.default.dim(`发件人:`)} ${a.sender}`,`${N.default.dim(`收件人:`)} ${a.recipient}`,`${N.default.dim(`主题:`)} ${a.subject}`,`${N.default.dim(`接收时间:`)} ${X(a.receivedAt)}`,`${N.default.dim(`已读:`)} ${a.isRead?N.default.green(`是`):N.default.yellow(`否`)}`];a.attachments&&a.attachments.length>0&&(o.push(``),o.push(`${N.default.dim(`附件:`)}`),a.attachments.forEach((e,t)=>{o.push(` ${t+1}. ${e.filename} (${e.contentType}, ${e.size} bytes)`)})),o.push(``),o.push(`${N.default.dim(`正文:`)}`),o.push(a.textBody||a.htmlBody||`(无内容)`),u.note(o.join(`
69
+ `),N.default.green(`收件详情`)),u.outro(N.default.green(`完成!`))}catch(e){i.stop(`查询失败`),u.log.error(e instanceof P?e.message:String(e)),process.exit(1)}}};const Kr=async e=>{u.intro(N.default.bold(`skill-atlas mail-config set`)),e.key?.trim()||(u.log.error(`请提供配置项键名`),process.exit(1)),(e.value===void 0||e.value===null)&&(u.log.error(`请提供配置项值`),process.exit(1));let t=e.key.trim(),n=String(e.value);br(t,n),u.log.success(`配置项 "${t}" 已设置为 "${n}"`),u.outro(N.default.green(`完成!`))},qr=async e=>{u.intro(N.default.bold(`skill-atlas mail-config get`)),e.key?.trim()||(u.log.error(`请提供配置项键名`),process.exit(1));let t=e.key.trim();if(!Cr(t)){u.log.warn(`配置项 "${t}" 不存在`),u.outro(N.default.yellow(`完成`));return}let n=xr(t);u.log.info(`${t} = ${n}`),u.outro(N.default.green(`完成!`))},Jr=async()=>{u.intro(N.default.bold(`skill-atlas mail-config list`));let e=Sr();if(e.length===0){u.log.info(`暂无邮箱配置`),u.outro(N.default.yellow(`完成`));return}let t=e.map(e=>` ${N.default.green(e.key)}: ${e.value}`);u.note(t.join(`
70
+ `),N.default.green(`邮箱配置`)),u.outro(N.default.green(`完成!`))};var Yr={run:async(e,t)=>{switch(e){case`set`:await Kr({key:t.key,value:t.value});break;case`get`:await qr({key:t.key});break;case`list`:await Jr();break;default:u.log.error(`未知子命令: ${e}`),u.log.info(`可用子命令: set, get, list`),process.exit(1)}},runSet:Kr,runGet:qr,runList:Jr};function Xr(e){let t=e.currentVersion;return typeof t==`string`?t:t&&typeof t==`object`&&`version`in t?t.version??`—`:`—`}function Zr(e,t,n,r){let i=Math.max(...e.map(e=>(e.slug||``).length),6),a=Math.max(...e.map(e=>Math.min((e.displayName||`—`).length,30)),8),o=` ${d.bold(`Description`.padEnd(a))} ${d.bold(`SkillName`.padEnd(i))} ${d.bold(`Version`)}`,s=` `+`-`.repeat(i+a+12),c=e.map(e=>{let t=(e.slug||`—`).padEnd(i),n=((e.displayName||`—`).length>30?(e.displayName||`—`).slice(0,27)+`...`:e.displayName||`—`).padEnd(a),r=Xr(e);return` ${d.white(n)} ${d.cyan.bold(t)} ${d.dim(`v${r}`)}`});u.note([o,s,...c].join(`
71
+ `));let l=(n-1)*r+1,f=Math.min(n*r,t);u.log.message(d.dim(`Showing ${l}-${f} of ${t}`)),u.log.message(d.green(`Install: npx skill-atlas install <skillName>`))}async function Qr(e){let{q:t,k:n}=e,r=t||n||``;try{let e=await vt({q:t,k:n}),{items:i,total:a}=e;if(i.length===0){u.log.error(`No skills found matching "${d.bold(r)}"`);return}Zr(i,a,e.page,e.pageSize)}catch(e){u.log.error(`Search failed: ${e.message}`),process.exit(1)}}var $r={run:Qr};function ei(e,t){let n=[];return n.push(` ${d.cyan.bold(`${t+1}. ${e.displayName}`)} ${d.dim(`(${e.slug})`)}`),e.summary&&n.push(` ${d.white(e.summary)}`),n.push(` ${d.dim(`Version:`)} ${d.green(e.currentVersion)} | ${d.dim(`Downloads:`)} ${e.downloadCount} | ${d.dim(`CertLevel:`)} ${e.certLevel}`),e.matchedFunctions&&e.matchedFunctions.length>0&&n.push(` ${d.dim(`Matched Functions:`)} ${d.yellow(e.matchedFunctions.join(`, `))}`),n.join(`
72
+ `)}function ti(e,t){if(e.length===0){u.log.warn(`No skill combinations found for "${d.bold(t)}"`);return}u.log.success(`Found ${d.green(e.length)} combination(s) for "${d.bold(t)}"\n`),e.forEach((e,t)=>{let n=d.bold.blue(`Combination ${t+1}`),r=d.dim(`(${e.length} skill${e.length>1?`s`:``})`);console.log(`\n${n} ${r}`),console.log(d.dim(`─`.repeat(50))),e.forEach((e,t)=>{console.log(ei(e,t))});let i=[...new Set(e.flatMap(e=>e.matchedFunctions||[]))];i.length>0&&console.log(`\n ${d.dim(`Combined coverage:`)} ${d.green(i.join(`, `))}`)}),console.log(`
73
+ `+d.dim(`─`.repeat(50))),u.log.message(d.green(`Install: npx skill-atlas install <skillName>`))}async function ni(e){let{q:t,k:n,certLevel:r,pre:i}=e;(!t||!n)&&(u.log.error(`Missing required parameters: --q and --k are required`),process.exit(1)),Z(i);let a=n;try{ti(await Mt({q:t,k:n,certLevel:r}),a)}catch(e){u.log.error(`Search failed: ${e.message}`),process.exit(1)}}var ri={run:ni};async function ii(e,t=`latest`){let n=(process.env.npm_config_registry||`https://registry.npmjs.org`).replace(/\/$/,``),r=await fetch(`${n}/-/package/${e}/dist-tags`,{signal:AbortSignal.timeout(5e3)});if(!r.ok)throw Error(`获取版本信息失败`);return(await r.json())[t]||`0.0.0`}async function ai(e){let{pkgName:t,currentVersion:n,yes:r,plugin:i,pre:a}=e,o=a?`beta`:`latest`,c=J.createProgressReporter();c.start(a?`检查最新 beta 版本...`:`检查最新版本...`);try{let e=await ii(t,o);if(c.stop(`检查完成`),s.valid(e)||(u.log.error(`无法解析最新版本: ${e}`),process.exit(1)),s.lte(e,n)){u.log.success(`已是最新版本 ${d.cyan(n)}`);return}let l=a?d.yellow(`[beta] `):``;u.log.message(l+`发现新版本: ${d.red(n)} → ${d.green(e)}`+(i?d.dim(`(将使用官方安装脚本更新 CLI 与插件)`):``));let f=r||!process.stdin.isTTY?!0:await u.confirm({message:`是否立即升级?`,initialValue:!0});if(u.isCancel(f)||f===!1){u.cancel(`已取消升级`);return}c.start(i?`正在通过官方脚本升级(CLI + 插件)…`:`正在升级...`);let p=i?await nt():await tt(t,o);c.stop(p===0?`升级完成`:`升级失败`),p!==0&&(i?J.error(`升级失败,可手动执行: `+M()):J.error(`升级失败,可手动执行: npm install -g `+t+`@`+o),process.exit(1)),u.log.success(i?`已通过官方脚本更新(目标版本 ${d.green(e)})`:`已升级到 ${d.green(e)}`)}catch(e){c.stop(`检查失败`),u.log.error(e.message),i?J.info(`可手动执行: `+M()):J.info(`可手动执行: npm install -g `+t+`@`+o),process.exit(1)}}var oi={run:ai};async function si(e){let{yes:t}=e,n=t||J.isNonInteractive();if(u.intro(d.bold(`skill-atlas uninstall`)),!n){let e=await u.confirm({message:`确认要卸载 skill-atlas CLI 吗?`,initialValue:!1});if(u.isCancel(e)||e===!1){u.cancel(`已取消卸载`);return}}let r=J.createProgressReporter(n);r.start(`正在执行卸载脚本...`);try{let e=await st();r.stop(e===0?`卸载完成`:`卸载失败`),e!==0&&(J.error(`卸载失败,可手动执行: `+ot()),process.exit(1)),u.log.success(d.green(`skill-atlas CLI 已卸载`))}catch(e){r.stop(`卸载失败`),u.log.error(e.message),J.info(`可手动执行: `+ot()),process.exit(1)}}var ci={run:si};export{Mr as agentCreditsRecord,Dr as agentInfo,Jn as agentRegister,Z as applyPreEnvironmentIfNeeded,mt as checkForUpdate,Pt as getCreditsRecords,In as install,J as logger,Yr as mailConfig,Pr as mailCreate,Ir as mailList,Gr as mailReceivedDetail,Wr as mailReceivedList,Rr as mailSend,Hr as mailSentDetail,Vr as mailSentList,Ln as requireAuth,$r as search,ri as searchCombinations,hr as serviceGatewayInvoke,or as skillPublished,Qn as skillReview,rr as skillUpload,lr as skillUploadList,ci as uninstall,oi as update,Rn as withAuth};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skill-atlas-cli",
3
- "version": "0.6.0-beta.0",
3
+ "version": "0.6.0-beta.2",
4
4
  "description": "skill-atlas CLI - 虾小宝 命令行工具",
5
5
  "homepage": "https://skillatlas.cn/",
6
6
  "type": "module",