skill-atlas-cli 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +2 -2
- package/package.json +1 -1
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 Je(){qe();try{return JSON.parse(e.readFileSync(O,`utf-8`))}catch{return{version:1,installed:{}}}}function Ye(t,n,r){let i=Je();i.installed[t]={version:n,installedAt:new Date().toISOString(),location:r},e.writeFileSync(O,JSON.stringify(i,null,2)+`
|
|
5
5
|
`)}function Xe(t){let n=Je();delete n.installed[t],e.writeFileSync(O,JSON.stringify(n,null,2)+`
|
|
6
6
|
`)}var M={CONFIG_DIR:T,OPENCLAW_STATE_DIR:D,LOCKFILE:O,DEVICE_JSON:k,ASSET_TYPES:A,ensureConfigDir:j,installDirForType:Le,getApiBase:Re,setApiBase:ze,applyPreEnvironment:Be,getAuthToken:Ve,saveAuthToken:He,getDeviceId:Ue,initLockfile:qe,readLockfile:Je,updateLockfile:Ye,removeLockfile:Xe,getAgentId:We,saveAgentCredentials:Ge,getAgentCredentials:Ke};const Ze=`https://unpkg.com/skill-atlas-cli`,Qe=`curl -fsSL ${Ze}/install.sh | bash`,$e=`irm ${Ze}/install.ps1 | iex`;function N(){return process.platform===`win32`?$e:Qe}function et(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 tt(){return new Promise(e=>{let t=process.platform===`win32`?l(`powershell.exe`,[`-NoProfile`,`-ExecutionPolicy`,`Bypass`,`-Command`,$e],{stdio:`inherit`,windowsHide:!0}):l(`bash`,[`-c`,Qe],{stdio:`inherit`});t.on(`close`,t=>e(t??0)),t.on(`error`,()=>e(1))})}const P=M.CONFIG_DIR,F=o(P,`update-check.json`);async function nt(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 rt(){try{return t(F)?JSON.parse(r(F,`utf8`)):void 0}catch{return}}function it(e){try{t(P)||n(P,{recursive:!0}),i(F,JSON.stringify({lastCheck:Date.now(),latest:e})+`
|
|
7
|
-
`)}catch{}}function at(e,t){let n=s.diff(e,t);return n?n===`major`||n===`premajor`||n===`minor`||n===`preminor`:!1}async function ot(e){let t=rt();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(at(e.version,t.latest)){console.error(`[skill-atlas] 检测到 minor 及以上新版本 ${e.version} → ${t.latest}(非交互环境),正在通过官方安装脚本更新…`);let n=await tt();n!==0&&console.error(`[skill-atlas] 自动更新失败(退出码 ${n}),可手动执行: ${N()}`)}else console.error(`[skill-atlas] 检测到新版本 ${e.version} → ${t.latest}(非 minor/major 升级,非交互环境不自动安装),可执行: ${N()}`);let n=t?.lastCheck||0;Date.now()-n<12e4||nt(e.name).then(e=>{it(e)}).catch(()=>{})}var I=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),L=class extends Error{code;responseData;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.responseData=n}};const R=f.create({timeout:1e4,headers:{"Content-Type":`application/json`}});R.interceptors.request.use(e=>(e.baseURL=M.getApiBase(),e.headers.set(`X-SkillAtlas-Agent-Id`,M.getAgentId()),e)),R.interceptors.response.use(e=>e,e=>{if(e.response){let{data:t,statusText:n}=e.response;throw new L(t?.message||t?.error||n,t?.code,t)}throw e});async function z(e,t={}){let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await R.get(e,{params:n})).data}async function st(e,t={}){return(await R.post(e,t)).data}async function ct(e,t,n){return(await R.post(e,t,{headers:{Authorization:`Bearer ${n}`}})).data}async function lt(e,t,n){let r=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await R.get(e,{params:r,headers:{Authorization:`Bearer ${n}`}})).data}async function B(e){try{return await e()}catch(e){if(e instanceof L&&e.responseData&&typeof e.responseData==`object`)return e.responseData;throw e}}function ut(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 dt(e={}){return ut(await z(`/api/v1/skills`,{page:1,pageSize:20,...e}))}async function ft(e){try{return await z(`/api/v1/skills/${e}`)}catch{return null}}async function pt(e,t){let n=await R.get(`/api/v1/download`,{params:{slug:e,version:t},responseType:`arraybuffer`});return Buffer.from(n.data)}async function mt(e){return B(()=>st(`/api/v1/agents/register`,e))}async function ht(e){return B(()=>z(`/api/v1/agents/${e}/challenge`))}async function gt(e){return B(()=>st(`/api/v1/agents/authenticate`,e))}async function _t(e,t){return B(()=>ct(`/api/v1/community/skills/reviews`,e,t))}async function vt(e,t,n,r={},i){return(await R.post(e,t,{headers:{Authorization:`Bearer ${n}`,...r},...i!==void 0&&{timeout:i}})).data}async function yt(e,t,n){return(await R.post(e,t,{headers:{Authorization:`Bearer ${n}`,"Content-Type":`multipart/form-data`}})).data}async function bt(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),B(()=>yt(`/api/v1/skills/upload`,r,t))}async function xt(e){return B(()=>z(`/api/v1/agents/${e}/skills/published`))}async function St(e,t){return console.log(`Getting upload list with params:`,e),console.log(`Getting upload list with token:`,t),B(()=>lt(`/api/v1/skills/uploads`,{page:1,pageSize:20,...e},t))}function Ct(){return crypto.randomUUID()}async function wt(e,t,n,r,i){let a=r||Ct();return B(()=>vt(`/api/v1/service-gateway/services/${e}/invoke`,t,n,{"X-Idempotency-Key":a},i))}async function Tt(e){let t=await z(`/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 Et(e,t){return B(()=>lt(`/api/v1/agents/${e}`,{},t))}async function Dt(e,t){return B(()=>lt(`/api/v1/agents/me/credits/records`,{page:1,pageSize:20,...e},t))}const Ot=ft,V=ne.homedir(),{env:H}=process,kt=H.XDG_DATA_HOME||(V?p.join(V,`.local`,`share`):void 0),At=H.XDG_CONFIG_HOME||(V?p.join(V,`.config`):void 0);H.XDG_STATE_HOME||V&&p.join(V,`.local`,`state`),H.XDG_CACHE_HOME||V&&p.join(V,`.cache`),H.XDG_RUNTIME_DIR;const jt=(H.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);kt&&jt.unshift(kt);const Mt=(H.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);At&&Mt.unshift(At);const U=re(),Nt=At??g(U,`.config`),Pt=process.env.CODEX_HOME?.trim()||g(U,`.codex`),Ft=process.env.CLAUDE_CONFIG_DIR?.trim()||g(U,`.claude`);function It(e=U,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 W={"claude-code":{name:`claude-code`,displayName:`Claude Code`,skillsDir:`.claude/skills`,globalSkillsDir:g(Ft,`skills`),detectInstalled:async()=>b(Ft)},openclaw:{name:`openclaw`,displayName:`OpenClaw`,skillsDir:`skills`,globalSkillsDir:It(),detectInstalled:async()=>b(g(U,`.openclaw`))||b(g(U,`.clawdbot`))||b(g(U,`.moltbot`))},cline:{name:`cline`,displayName:`Cline`,skillsDir:`.cline/skills`,globalSkillsDir:g(U,`.cline`,`skills`),detectInstalled:async()=>b(g(U,`.cline`))},antigravity:{name:`antigravity`,displayName:`Antigravity`,skillsDir:`.agent/skills`,globalSkillsDir:g(U,`.gemini/antigravity/skills`),detectInstalled:async()=>b(g(U,`.gemini/antigravity`))},codex:{name:`codex`,displayName:`Codex`,skillsDir:`.agents/skills`,globalSkillsDir:g(Pt,`skills`),detectInstalled:async()=>b(Pt)||b(`/etc/codex`)},cursor:{name:`cursor`,displayName:`Cursor`,skillsDir:`.agents/skills`,globalSkillsDir:g(U,`.cursor/skills`),detectInstalled:async()=>b(g(U,`.cursor`))},"gemini-cli":{name:`gemini-cli`,displayName:`Gemini CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(U,`.gemini/skills`),detectInstalled:async()=>b(g(U,`.gemini`))},"github-copilot":{name:`github-copilot`,displayName:`GitHub Copilot`,skillsDir:`.github/skills`,globalSkillsDir:g(U,`.copilot/skills`),detectInstalled:async()=>b(g(U,`.copilot`))},"iflow-cli":{name:`iflow-cli`,displayName:`iFlow CLI`,skillsDir:`.iflow/skills`,globalSkillsDir:g(U,`.iflow/skills`),detectInstalled:async()=>b(g(U,`.iflow`))},"kimi-cli":{name:`kimi-cli`,displayName:`Kimi Code CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(U,`.config/agents/skills`),detectInstalled:async()=>b(g(U,`.kimi`))},"kiro-cli":{name:`kiro-cli`,displayName:`Kiro CLI`,skillsDir:`.kiro/skills`,globalSkillsDir:g(U,`.kiro/skills`),detectInstalled:async()=>b(g(U,`.kiro`))},opencode:{name:`opencode`,displayName:`OpenCode`,skillsDir:`.agents/skills`,globalSkillsDir:g(Nt,`opencode/skills`),detectInstalled:async()=>b(g(Nt,`opencode`))},qoder:{name:`qoder`,displayName:`Qoder`,skillsDir:`.qoder/skills`,globalSkillsDir:g(U,`.qoder/skills`),detectInstalled:async()=>b(g(U,`.qoder`))},qoderwork:{name:`qoderwork`,displayName:`QoderWork`,skillsDir:`.qoderwork/skills`,globalSkillsDir:g(U,`.qoderwork/skills`),detectInstalled:async()=>b(g(U,`.qoderwork`))},"qwen-code":{name:`qwen-code`,displayName:`Qwen Code`,skillsDir:`.qwen/skills`,globalSkillsDir:g(U,`.qwen/skills`),detectInstalled:async()=>b(g(U,`.qwen`))},trae:{name:`trae`,displayName:`Trae`,skillsDir:`.trae/skills`,globalSkillsDir:g(U,`.trae/skills`),detectInstalled:async()=>b(g(U,`.trae`))},"trae-cn":{name:`trae-cn`,displayName:`Trae CN`,skillsDir:`.trae/skills`,globalSkillsDir:g(U,`.trae-cn/skills`),detectInstalled:async()=>b(g(U,`.trae-cn`))},windsurf:{name:`windsurf`,displayName:`Windsurf`,skillsDir:`.windsurf/skills`,globalSkillsDir:g(U,`.codeium/windsurf/skills`),detectInstalled:async()=>b(g(U,`.codeium/windsurf`))},universal:{name:`universal`,displayName:`Universal`,skillsDir:`.agents/skills`,globalSkillsDir:g(Nt,`agents/skills`),showInUniversalList:!1,detectInstalled:async()=>!1}},Lt=new se({write(e,t,n){n()}}),Rt=I.default.green(`◆`),zt=I.default.red(`■`),Bt=I.default.green(`◇`),Vt=I.default.green(`●`),Ht=I.default.dim(`○`);I.default.green(`✓`);const Ut=I.default.green(`•`),G=I.default.dim(`│`),K=I.default.dim(`─`),Wt=Symbol(`cancel`);async function Gt(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=oe.createInterface({input:process.stdin,output:Lt,terminal:!!process.stdin.isTTY});process.stdin.isTTY&&process.stdin.setRawMode(!0),oe.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`?Rt:e===`cancel`?zt:Bt;for(let e=0;e<s;e++)i.push(`${G}`);if(i.push(`${c} ${I.default.bold(t)}`),e===`active`){if(o&&o.items.length>0){i.push(`${G}`);let e=`${I.default.bold(o.title)} ${I.default.dim(`── always included`)}`;i.push(`${G} ${K}${K} ${e} ${K.repeat(12)}`);for(let e of o.items)i.push(`${G} ${Ut} ${I.default.bold(e.label)}`);i.push(`${G}`),i.push(`${G} ${K}${K} ${I.default.bold(`Additional agents`)} ${K.repeat(29)}`)}let e=`${G} ${I.default.dim(`Search:`)} ${l}${I.default.inverse(` `)}`;i.push(e),i.push(`${G} ${I.default.dim(`↑↓ move, space select, enter confirm`)}`),i.push(`${G}`);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(`${G} ${I.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?Vt:Ht,l=o?I.default.underline(n.label):n.label,f=n.hint?I.default.dim(` (${n.hint})`):``,p=o?I.default.cyan(`❯`):` `;i.push(`${G} ${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(`${G} ${I.default.dim(t.join(` `))}`)}}i.push(`${G}`);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(`${G} ${I.default.dim(`Selected: (none)`)}`);else{let e=f.length<=3?f.join(`, `):`${f.slice(0,3).join(`, `)} +${f.length-3} more`;i.push(`${G} ${I.default.green(`Selected:`)} ${e}`)}i.push(`${I.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(`${G} ${I.default.dim(e.join(`, `))}`)}else e===`cancel`&&i.push(`${G} ${I.default.strikethrough(I.default.dim(`Cancelled`))}`);g.write(i.join(`
|
|
7
|
+
`)}catch{}}function at(e,t){let n=s.diff(e,t);return n?n===`major`||n===`premajor`||n===`minor`||n===`preminor`:!1}async function ot(e){let t=rt();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(at(e.version,t.latest)){console.error(`[skill-atlas] 检测到 minor 及以上新版本 ${e.version} → ${t.latest}(非交互环境),正在通过官方安装脚本更新…`);let n=await tt();n!==0&&console.error(`[skill-atlas] 自动更新失败(退出码 ${n}),可手动执行: ${N()}`)}else console.error(`[skill-atlas] 检测到新版本 ${e.version} → ${t.latest}(非 minor/major 升级,非交互环境不自动安装),可执行: ${N()}`);let n=t?.lastCheck||0;Date.now()-n<12e4||nt(e.name).then(e=>{it(e)}).catch(()=>{})}var I=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),L=class extends Error{code;responseData;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.responseData=n}};const R=f.create({timeout:1e4,headers:{"Content-Type":`application/json`}});R.interceptors.request.use(e=>(e.baseURL=M.getApiBase(),e.headers.set(`X-SkillAtlas-Agent-Id`,M.getAgentId()),e)),R.interceptors.response.use(e=>e,e=>{if(e.response){let{data:t,statusText:n}=e.response;throw new L(t?.message||t?.error||n,t?.code,t)}throw e});async function z(e,t={}){let n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await R.get(e,{params:n})).data}async function st(e,t={}){return(await R.post(e,t)).data}async function ct(e,t,n){return(await R.post(e,t,{headers:{Authorization:`Bearer ${n}`}})).data}async function lt(e,t,n){let r=Object.fromEntries(Object.entries(t).filter(([,e])=>e!=null&&e!==``));return(await R.get(e,{params:r,headers:{Authorization:`Bearer ${n}`}})).data}async function B(e){try{return await e()}catch(e){if(e instanceof L&&e.responseData&&typeof e.responseData==`object`)return e.responseData;throw e}}function ut(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 dt(e={}){return ut(await z(`/api/v1/skills`,{page:1,pageSize:20,...e}))}async function ft(e){try{return await z(`/api/v1/skills/${e}`)}catch{return null}}async function pt(e,t){let n=await R.get(`/api/v1/download`,{params:{slug:e,version:t},responseType:`arraybuffer`});return Buffer.from(n.data)}async function mt(e){return B(()=>st(`/api/v1/agents/register`,e))}async function ht(e){return B(()=>z(`/api/v1/agents/${e}/challenge`))}async function gt(e){return B(()=>st(`/api/v1/agents/authenticate`,e))}async function _t(e,t){return B(()=>ct(`/api/v1/community/skills/reviews`,e,t))}async function vt(e,t,n,r={},i){return(await R.post(e,t,{headers:{Authorization:`Bearer ${n}`,...r},...i!==void 0&&{timeout:i}})).data}async function yt(e,t,n){return(await R.post(e,t,{headers:{Authorization:`Bearer ${n}`,"Content-Type":`multipart/form-data`}})).data}async function bt(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)),B(()=>yt(`/api/v1/skills/upload`,r,t))}async function xt(e){return B(()=>z(`/api/v1/agents/${e}/skills/published`))}async function St(e,t){return console.log(`Getting upload list with params:`,e),console.log(`Getting upload list with token:`,t),B(()=>lt(`/api/v1/skills/uploads`,{page:1,pageSize:20,...e},t))}function Ct(){return crypto.randomUUID()}async function wt(e,t,n,r,i){let a=r||Ct();return B(()=>vt(`/api/v1/service-gateway/services/${e}/invoke`,t,n,{"X-Idempotency-Key":a},i))}async function Tt(e){let t=await z(`/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 Et(e,t){return B(()=>lt(`/api/v1/agents/${e}`,{},t))}async function Dt(e,t){return B(()=>lt(`/api/v1/agents/me/credits/records`,{page:1,pageSize:20,...e},t))}const Ot=ft,V=ne.homedir(),{env:H}=process,kt=H.XDG_DATA_HOME||(V?p.join(V,`.local`,`share`):void 0),At=H.XDG_CONFIG_HOME||(V?p.join(V,`.config`):void 0);H.XDG_STATE_HOME||V&&p.join(V,`.local`,`state`),H.XDG_CACHE_HOME||V&&p.join(V,`.cache`),H.XDG_RUNTIME_DIR;const jt=(H.XDG_DATA_DIRS||`/usr/local/share/:/usr/share/`).split(`:`);kt&&jt.unshift(kt);const Mt=(H.XDG_CONFIG_DIRS||`/etc/xdg`).split(`:`);At&&Mt.unshift(At);const U=re(),Nt=At??g(U,`.config`),Pt=process.env.CODEX_HOME?.trim()||g(U,`.codex`),Ft=process.env.CLAUDE_CONFIG_DIR?.trim()||g(U,`.claude`);function It(e=U,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 W={"claude-code":{name:`claude-code`,displayName:`Claude Code`,skillsDir:`.claude/skills`,globalSkillsDir:g(Ft,`skills`),detectInstalled:async()=>b(Ft)},openclaw:{name:`openclaw`,displayName:`OpenClaw`,skillsDir:`skills`,globalSkillsDir:It(),detectInstalled:async()=>b(g(U,`.openclaw`))||b(g(U,`.clawdbot`))||b(g(U,`.moltbot`))},cline:{name:`cline`,displayName:`Cline`,skillsDir:`.cline/skills`,globalSkillsDir:g(U,`.cline`,`skills`),detectInstalled:async()=>b(g(U,`.cline`))},antigravity:{name:`antigravity`,displayName:`Antigravity`,skillsDir:`.agent/skills`,globalSkillsDir:g(U,`.gemini/antigravity/skills`),detectInstalled:async()=>b(g(U,`.gemini/antigravity`))},codex:{name:`codex`,displayName:`Codex`,skillsDir:`.agents/skills`,globalSkillsDir:g(Pt,`skills`),detectInstalled:async()=>b(Pt)||b(`/etc/codex`)},cursor:{name:`cursor`,displayName:`Cursor`,skillsDir:`.agents/skills`,globalSkillsDir:g(U,`.cursor/skills`),detectInstalled:async()=>b(g(U,`.cursor`))},"gemini-cli":{name:`gemini-cli`,displayName:`Gemini CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(U,`.gemini/skills`),detectInstalled:async()=>b(g(U,`.gemini`))},"github-copilot":{name:`github-copilot`,displayName:`GitHub Copilot`,skillsDir:`.github/skills`,globalSkillsDir:g(U,`.copilot/skills`),detectInstalled:async()=>b(g(U,`.copilot`))},"iflow-cli":{name:`iflow-cli`,displayName:`iFlow CLI`,skillsDir:`.iflow/skills`,globalSkillsDir:g(U,`.iflow/skills`),detectInstalled:async()=>b(g(U,`.iflow`))},"kimi-cli":{name:`kimi-cli`,displayName:`Kimi Code CLI`,skillsDir:`.agents/skills`,globalSkillsDir:g(U,`.config/agents/skills`),detectInstalled:async()=>b(g(U,`.kimi`))},"kiro-cli":{name:`kiro-cli`,displayName:`Kiro CLI`,skillsDir:`.kiro/skills`,globalSkillsDir:g(U,`.kiro/skills`),detectInstalled:async()=>b(g(U,`.kiro`))},opencode:{name:`opencode`,displayName:`OpenCode`,skillsDir:`.agents/skills`,globalSkillsDir:g(Nt,`opencode/skills`),detectInstalled:async()=>b(g(Nt,`opencode`))},qoder:{name:`qoder`,displayName:`Qoder`,skillsDir:`.qoder/skills`,globalSkillsDir:g(U,`.qoder/skills`),detectInstalled:async()=>b(g(U,`.qoder`))},qoderwork:{name:`qoderwork`,displayName:`QoderWork`,skillsDir:`.qoderwork/skills`,globalSkillsDir:g(U,`.qoderwork/skills`),detectInstalled:async()=>b(g(U,`.qoderwork`))},"qwen-code":{name:`qwen-code`,displayName:`Qwen Code`,skillsDir:`.qwen/skills`,globalSkillsDir:g(U,`.qwen/skills`),detectInstalled:async()=>b(g(U,`.qwen`))},trae:{name:`trae`,displayName:`Trae`,skillsDir:`.trae/skills`,globalSkillsDir:g(U,`.trae/skills`),detectInstalled:async()=>b(g(U,`.trae`))},"trae-cn":{name:`trae-cn`,displayName:`Trae CN`,skillsDir:`.trae/skills`,globalSkillsDir:g(U,`.trae-cn/skills`),detectInstalled:async()=>b(g(U,`.trae-cn`))},windsurf:{name:`windsurf`,displayName:`Windsurf`,skillsDir:`.windsurf/skills`,globalSkillsDir:g(U,`.codeium/windsurf/skills`),detectInstalled:async()=>b(g(U,`.codeium/windsurf`))},universal:{name:`universal`,displayName:`Universal`,skillsDir:`.agents/skills`,globalSkillsDir:g(Nt,`agents/skills`),showInUniversalList:!1,detectInstalled:async()=>!1}},Lt=new se({write(e,t,n){n()}}),Rt=I.default.green(`◆`),zt=I.default.red(`■`),Bt=I.default.green(`◇`),Vt=I.default.green(`●`),Ht=I.default.dim(`○`);I.default.green(`✓`);const Ut=I.default.green(`•`),G=I.default.dim(`│`),K=I.default.dim(`─`),Wt=Symbol(`cancel`);async function Gt(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=oe.createInterface({input:process.stdin,output:Lt,terminal:!!process.stdin.isTTY});process.stdin.isTTY&&process.stdin.setRawMode(!0),oe.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`?Rt:e===`cancel`?zt:Bt;for(let e=0;e<s;e++)i.push(`${G}`);if(i.push(`${c} ${I.default.bold(t)}`),e===`active`){if(o&&o.items.length>0){i.push(`${G}`);let e=`${I.default.bold(o.title)} ${I.default.dim(`── always included`)}`;i.push(`${G} ${K}${K} ${e} ${K.repeat(12)}`);for(let e of o.items)i.push(`${G} ${Ut} ${I.default.bold(e.label)}`);i.push(`${G}`),i.push(`${G} ${K}${K} ${I.default.bold(`Additional agents`)} ${K.repeat(29)}`)}let e=`${G} ${I.default.dim(`Search:`)} ${l}${I.default.inverse(` `)}`;i.push(e),i.push(`${G} ${I.default.dim(`↑↓ move, space select, enter confirm`)}`),i.push(`${G}`);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(`${G} ${I.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?Vt:Ht,l=o?I.default.underline(n.label):n.label,f=n.hint?I.default.dim(` (${n.hint})`):``,p=o?I.default.cyan(`❯`):` `;i.push(`${G} ${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(`${G} ${I.default.dim(t.join(` `))}`)}}i.push(`${G}`);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(`${G} ${I.default.dim(`Selected: (none)`)}`);else{let e=f.length<=3?f.join(`, `):`${f.slice(0,3).join(`, `)} +${f.length-3} more`;i.push(`${G} ${I.default.green(`Selected:`)} ${e}`)}i.push(`${I.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(`${G} ${I.default.dim(e.join(`, `))}`)}else e===`cancel`&&i.push(`${G} ${I.default.strikethrough(I.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(Wt)},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 Kt=h(ve(import.meta.url));function qt(e,t){let n=_(y(e)),r=_(y(t));return r.startsWith(n+ee)||r===n}async function Jt(e){let t=y(e),n=h(t),r=m(t);try{return g(await pe(n),r)}catch{return t}}function Yt(e,t){return y(h(e),t)}async function Xt(e,t){try{let n=y(e),r=y(t),[i,a]=await Promise.all([pe(n).catch(()=>n),pe(r).catch(()=>r)]);if(i===a||await Jt(e)===await Jt(t))return!0;try{if((await le(t)).isSymbolicLink()){if(Yt(t,await fe(t))===n)return!0;await S(t)}else await S(t,{recursive:!0})}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ELOOP`)try{await S(t,{force:!0})}catch{}}let o=h(t);return await x(o,{recursive:!0}),await he(v(await Jt(o),e),t,ie()===`win32`?`junction`:void 0),!0}catch{return!1}}async function q(e){try{await S(e,{recursive:!0,force:!0})}catch{}await x(e,{recursive:!0})}async function Zt(e,t){let n=!1,r=e.currentVersion?.version??``;if(!e.slug||!r)return sn(e,t),!1;let i=await pt(e.slug,r);return i&&i.length>0&&(n=await on(i,t)),n||(ye(`No package available, generating from metadata...`),sn(e,t),console.log(` Generated: SKILL.md from metadata`)),n}function Qt(e,t,n){let r=W[e],i=t?re():n||process.cwd();return t?r.globalSkillsDir===void 0?g(i,r.skillsDir):r.globalSkillsDir:g(i,r.skillsDir)}async function $t(e,t,n={}){let r=W[t],i=n.global??!1,a=n.cwd||process.cwd(),o=n.mode??`symlink`,s=n.path?.trim(),c=en(e.slug),l;if(s){let n=y(s);if(l=g(n,c),!qt(n,l))return{success:!1,path:l,mode:`copy`,error:`Invalid path: potential path traversal detected`};try{await q(l),await Zt(e,l);try{await J(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=tn(i,a),d=g(u,c),f=Qt(t,i,a);if(l=g(f,c),!qt(u,d)||!qt(f,l))return{success:!1,path:l,mode:o,error:`Invalid skill name: potential path traversal detected`};async function p(t){await Zt(e,t)}try{if(o===`copy`){await q(l),await p(l);try{await J(t,l)}catch{}return{success:!0,path:l,mode:`copy`}}if(await q(d),await p(d),!await Xt(d,l)){await q(l),await ce(d,l,{recursive:!0});try{await J(t,l)}catch{}return{success:!0,path:l,canonicalPath:d,mode:`symlink`,symlinkFailed:!0}}try{await J(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 en(e){return e.toLowerCase().replace(/[^a-z0-9._]+/g,`-`).replace(/^[.\-]+|[.\-]+$/g,``).substring(0,255)||`unnamed-skill`}function tn(e,t){return g(e?re():t||process.cwd(),`.agents`,`skills`)}const nn=`## 自动评价(Post-execution Hook)`,rn=`${nn}
|
|
10
10
|
|
|
@@ -54,7 +54,7 @@ Example: skill-atlas install my-skill`});let n=await u.text({message:`Enter skil
|
|
|
54
54
|
`),I.default.green(`已发布技能 (${e.length})`))}function Wn(e){if(e instanceof L)switch(e.code){case`AGENT_NOT_FOUND`:return`Agent 不存在`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var Gn={run:async(e={})=>{u.intro(I.default.bold(`skill-atlas skill-published`)),Q(e.pre);let t=M.getAgentId();t||(u.log.error(`缺少 agentId,请先执行 agent-register 注册`),process.exit(1));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=X.createProgressReporter(n);r.start(`正在查询已发布技能...`);try{let e=await xt(t);e.success||(r.stop(`查询失败`),u.log.error(e.message||`查询已发布技能失败`),process.exit(1)),r.stop(`查询完成`),Un(e.data?.items??[]),u.outro(I.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(Wn(e)),process.exit(1)}}};function $(e){switch(e){case`passed`:return I.default.green(e);case`rejected`:return I.default.red(e);case`reviewing`:return I.default.yellow(e);case`pending`:return I.default.dim(e);default:return e}}function Kn(e,t,n){if(e.length===0){u.log.info(`暂无上传记录`);return}let r=e.map((e,t)=>[`${I.default.bold(I.default.cyan(`${t+1}. ${e.slug}`))} ${I.default.dim(`v${e.version}`)}`,` ${I.default.dim(`状态:`)} ${$(e.status)}`,` ${I.default.dim(`安全审核:`)} ${$(e.securityStatus)} | ${I.default.dim(`完整性:`)} ${$(e.integrityStatus)} | ${I.default.dim(`可用性:`)} ${$(e.availabilityStatus)}`,` ${I.default.dim(`创建时间:`)} ${Cn(e.createdAt)}`].join(`
|
|
55
55
|
`));u.note(r.join(`
|
|
56
56
|
|
|
57
|
-
`),I.default.green(`上传记录 (第 ${t} 页,共 ${n} 条)`))}function qn(e){if(e instanceof L)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var Jn={run:async(e={})=>{u.intro(I.default.bold(`skill-atlas skill-upload-list`)),Q(e.pre);let t=M.getAgentCredentials();t?.token||(u.log.error(`请先执行 agent-register 注册`),process.exit(1));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=X.createProgressReporter(n);r.start(`正在查询上传记录...`);try{let n=await St({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(`查询完成`),Kn(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(I.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(qn(e)),process.exit(1)}}};function Yn(e){return e.serviceCode?.trim()?e.payload?.trim()?{valid:!0}:{valid:!1,error:`缺少必需参数: --payload`}:{valid:!1,error:`缺少必需参数: --service-code`}}function Xn(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 Zn(e,t){let n={payload:e};return t.clientRequestId?.trim()&&(n.clientRequestId=t.clientRequestId.trim()),n}function Qn(e){if(e instanceof L)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 $n(e,t){return`本次扣费: ${e} credits | 剩余: ${t} credits`}var er={run:async(e={})=>{u.intro(I.default.bold(`skill-atlas service-gateway-invoke`)),Q(e.pre);let t=M.getAgentCredentials();t?.token||(u.log.error(`请先执行 agent-register 注册后再调用服务`),process.exit(1));let n=Yn(e);n.valid||(u.log.error(n.error),process.exit(1));let r=Xn(e.payload);r.valid||(u.log.error(r.error),process.exit(1));let i=Zn(r.payload,e),a=e.serviceCode.trim(),o=!process.stdout.isTTY||!process.stdin.isTTY,s=X.createProgressReporter(o);s.start(`正在调用服务: ${a}...`);try{let e=await wt(a,i,t.token,void 0,18e4);e.success||(s.stop(`调用失败`),u.log.error(e.message||`服务调用失败`),e.data&&u.log.info($n(e.data.creditsCharged,e.data.creditsBalance)),process.exit(1)),s.stop(`服务调用成功`);let n=e.data;u.note([` ${I.default.green(`服务编码:`)} ${n.serviceCode}`,` ${I.default.green(`调用状态:`)} ${n.invokeStatus}`,` ${I.default.green(`本次扣费:`)} ${n.creditsCharged} credits`,` ${I.default.green(`剩余余额:`)} ${n.creditsBalance} credits`].join(`
|
|
57
|
+
`),I.default.green(`上传记录 (第 ${t} 页,共 ${n} 条)`))}function qn(e){if(e instanceof L)switch(e.code){case`UNAUTHORIZED`:return`认证失败,请重新执行 agent-register`;default:return e.message||`请求失败`}return e instanceof Error?e.message:String(e)}var Jn={run:async(e={})=>{u.intro(I.default.bold(`skill-atlas skill-upload-list`)),Q(e.pre);let t=M.getAgentCredentials();t?.token||(u.log.error(`请先执行 agent-register 注册`),process.exit(1));let n=!process.stdout.isTTY||!process.stdin.isTTY,r=X.createProgressReporter(n);r.start(`正在查询上传记录...`);try{let n=await St({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(`查询完成`),Kn(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(I.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(qn(e)),process.exit(1)}}};function Yn(e){return e.serviceCode?.trim()?e.payload?.trim()?{valid:!0}:{valid:!1,error:`缺少必需参数: --payload`}:{valid:!1,error:`缺少必需参数: --service-code`}}function Xn(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 Zn(e,t){let n={payload:e};return t.clientRequestId?.trim()&&(n.clientRequestId=t.clientRequestId.trim()),n}function Qn(e){if(e instanceof L)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 $n(e,t){return`本次扣费: ${e} credits | 剩余: ${t} credits`}var er={run:async(e={})=>{u.intro(I.default.bold(`skill-atlas service-gateway-invoke`)),Q(e.pre);let t=M.getAgentCredentials();t?.token||(u.log.error(`请先执行 agent-register 注册后再调用服务`),process.exit(1));let n=Yn(e);n.valid||(u.log.error(n.error),process.exit(1));let r=Xn(e.payload);r.valid||(u.log.error(r.error),process.exit(1));let i=Zn(r.payload,e),a=e.serviceCode.trim(),o=!process.stdout.isTTY||!process.stdin.isTTY,s=X.createProgressReporter(o);s.start(`正在调用服务: ${a}...`);try{let e=await wt(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($n(e.data.creditsCharged,e.data.creditsBalance)),process.exit(1)),s.stop(`服务调用成功`);let n=e.data;u.note([` ${I.default.green(`服务编码:`)} ${n.serviceCode}`,` ${I.default.green(`调用状态:`)} ${n.invokeStatus}`,` ${I.default.green(`本次扣费:`)} ${n.creditsCharged} credits`,` ${I.default.green(`剩余余额:`)} ${n.creditsBalance} credits`].join(`
|
|
58
58
|
`),I.default.green(`调用结果`)),n.result!==void 0&&(console.log(`
|
|
59
59
|
`+I.default.bold(`返回数据:`)),console.log(JSON.stringify(n.result,null,2))),u.outro(I.default.green(`完成!`))}catch(e){s.stop(`调用失败`);let t=Qn(e);if(u.log.error(t),e instanceof L&&e.responseData){let t=e.responseData;t.data?.creditsCharged!==void 0&&t.data?.creditsBalance!==void 0&&u.log.info($n(t.data.creditsCharged,t.data.creditsBalance))}process.exit(1)}}};const tr={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function nr(e,t,n){return`https://${n?tr.pre:tr.production}/agents/${e}?token=${t}`}var rr={run:async(e={})=>{u.intro(I.default.bold(`skill-atlas agent-info`)),Q(e.pre);let t=M.getAgentCredentials();t||(u.log.error(`未找到 Agent 凭证,请先执行 agent-register 注册`),process.exit(1));let{agentId:n,token:r}=t,i=e.pre??!1,a=nr(n,r,i),o=i?`预发环境`:`生产环境`,s=null,c=!1,l=u.spinner();l.start(`正在获取 Agent 信息...`);try{let e=await Et(n,r);e.success&&e.data&&(s=e.data),l.stop(`获取成功`)}catch{c=!0,l.stop(`无法连接服务器,仅显示本地信息`)}let d=[];if(d.push(` ${I.default.green(`Agent ID:`)} ${n}`),d.push(` ${I.default.green(`环境:`)} ${o}`),s?.metadata&&(d.push(` ${I.default.green(`名称:`)} ${s.metadata.name}`),s.metadata.avatar&&d.push(` ${I.default.green(`头像:`)} ${s.metadata.avatar}`)),s?.creditAccount){let e=s.creditAccount;d.push(``),d.push(` ${I.default.cyan(`--- 虾小宝 Credits 账户 ---`)}`),d.push(` ${I.default.green(`可用 Credits:`)} ${e.availableCredits}`),d.push(` ${I.default.green(`冻结 Credits:`)} ${e.frozenCredits}`),d.push(` ${I.default.green(`累计发放:`)} ${e.totalGrantedCredits}`),d.push(` ${I.default.green(`累计消费:`)} ${e.totalConsumedCredits}`),e.welcomeBonus&&d.push(` ${I.default.green(`Welcome Bonus:`)} ${e.welcomeBonus.grantStatus}`)}d.push(``),d.push(` ${I.default.green(`虾小宝主页链接:`)}`),d.push(` [您的虾小宝Agent 主页](${a})`),u.note(d.join(`
|
|
60
60
|
`),I.default.green(`Agent 信息`)),c&&u.log.warn(`无法获取在线信息,部分数据可能不完整`),u.outro(I.default.green(`完成!`))}};function ir(e){switch(e){case`consume`:return I.default.red(e);case`grant`:return I.default.green(e);case`refund`:return I.default.yellow(e);default:return e}}function ar(e){return e>0?I.default.green(`+${e}`):e<0?I.default.red(`${e}`):`${e}`}function or(e,t,n){if(e.length===0){u.log.info(`暂无流水记录`);return}let r=e.map((e,t)=>[`${I.default.bold(I.default.cyan(`${t+1}. #${e.id}`))} ${ir(e.changeType)}`,` ${I.default.dim(`变更额度:`)} ${ar(e.deltaCredits)} | ${I.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${I.default.dim(`服务编码:`)} ${e.serviceCode||I.default.dim(`N/A`)}`,` ${I.default.dim(`时间:`)} ${Cn(e.createdAt)}`].join(`
|