skill-atlas-cli 0.7.0-beta.2 → 0.7.0-beta.3
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/bin/cli.js +2 -2
- package/lib/index.js +2 -2
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e,{readFileSync as t}from"node:fs";import{cac as n}from"cac";import r from"chalk";import{checkForUpdate as i,logger as a}from"../lib/index.js";import{createHash as o,randomBytes as s,randomUUID as c}from"node:crypto";import l,{join as u}from"node:path";import d from"semver";import f from"node:os";import{spawn as p}from"node:child_process";import*as m from"@clack/prompts";import h from"axios";import g,{basename as ee,dirname as _,join as v,normalize as y,relative as te,resolve as b,sep as ne}from"path";import{existsSync as x,writeFileSync as re}from"fs";import ie,{homedir as ae,platform as oe,tmpdir as se}from"os";import*as ce from"readline";import{Writable as le}from"stream";import{cp as ue,lstat as de,mkdir as S,readFile as fe,readdir as pe,readlink as me,realpath as he,rename as ge,rm as C,stat as w,symlink as _e,unlink as ve,writeFile as ye}from"fs/promises";import{fileURLToPath as be}from"url";import{info as xe}from"console";import{execSync as Se}from"child_process";import{createConsola as Ce}from"consola";import T from"secp256k1";var we=Object.create,Te=Object.defineProperty,Ee=Object.getOwnPropertyDescriptor,De=Object.getOwnPropertyNames,Oe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty,Ae=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=De(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ke.call(e,s)&&s!==n&&Te(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=Ee(t,s))||r.enumerable});return e},Me=(e,t,n)=>(n=e==null?{}:we(Oe(e)),je(t||!e||!e.__esModule?Te(n,`default`,{value:e,enumerable:!0}):n,e));const E=process.env.SKILLATLAS_CONFIG_DIR||l.join(f.homedir(),`.skillatlas`),Ne=l.join(E,`auth.json`),D=l.join(E,`skillatlas-meta.json`),Pe={production:{apiBase:`https://skillatlas.cn/`},pre:{apiBase:`https://
|
|
2
|
+
import e,{readFileSync as t}from"node:fs";import{cac as n}from"cac";import r from"chalk";import{checkForUpdate as i,logger as a}from"../lib/index.js";import{createHash as o,randomBytes as s,randomUUID as c}from"node:crypto";import l,{join as u}from"node:path";import d from"semver";import f from"node:os";import{spawn as p}from"node:child_process";import*as m from"@clack/prompts";import h from"axios";import g,{basename as ee,dirname as _,join as v,normalize as y,relative as te,resolve as b,sep as ne}from"path";import{existsSync as x,writeFileSync as re}from"fs";import ie,{homedir as ae,platform as oe,tmpdir as se}from"os";import*as ce from"readline";import{Writable as le}from"stream";import{cp as ue,lstat as de,mkdir as S,readFile as fe,readdir as pe,readlink as me,realpath as he,rename as ge,rm as C,stat as w,symlink as _e,unlink as ve,writeFile as ye}from"fs/promises";import{fileURLToPath as be}from"url";import{info as xe}from"console";import{execSync as Se}from"child_process";import{createConsola as Ce}from"consola";import T from"secp256k1";var we=Object.create,Te=Object.defineProperty,Ee=Object.getOwnPropertyDescriptor,De=Object.getOwnPropertyNames,Oe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty,Ae=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=De(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ke.call(e,s)&&s!==n&&Te(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=Ee(t,s))||r.enumerable});return e},Me=(e,t,n)=>(n=e==null?{}:we(Oe(e)),je(t||!e||!e.__esModule?Te(n,`default`,{value:e,enumerable:!0}):n,e));const E=process.env.SKILLATLAS_CONFIG_DIR||l.join(f.homedir(),`.skillatlas`),Ne=l.join(E,`auth.json`),D=l.join(E,`skillatlas-meta.json`),Pe={production:{apiBase:`https://skillatlas.cn/`},pre:{apiBase:`https://maas-skill-hub-staging.onrender.com/`}},Fe=process.env.SKILLATLAS_ENV||`production`;let Ie=process.env.SKILLATLAS_API_BASE||Pe[Fe].apiBase;const O=process.env.OPENCLAW_STATE_DIR||l.join(f.homedir(),`.openclaw`),k=l.join(O,`seafood-lock.json`),Le=l.join(O,`identity`,`device.json`),Re={skill:`skills`,plugin:`plugins`,trigger:`triggers`,channel:`channels`,experience:`experiences`},ze={project:`maas-skill-hub`,logStore:`cli`,endpoint:process.env.SKILLATLAS_SLS_ENDPOINT||`cn-hangzhou.log.aliyuncs.com`};function Be(){let e=process.env.SKILLATLAS_DISABLE_TELEMETRY;return e===`1`||e===`true`}function Ve(){return ze}function He(){return Fe}function A(){e.existsSync(E)||e.mkdirSync(E,{recursive:!0})}function Ue(e){let t=Re[e];if(!t)throw Error(`Unknown asset type: ${e}. Valid types: ${Object.keys(Re).join(`, `)}`);return l.join(O,t)}function We(){return Ie}function Ge(e){Ie=e.replace(/\/+$/,``)}function Ke(){Ge(Pe.pre.apiBase)}function qe(){if(process.env.OPENCLAWMP_TOKEN)return process.env.OPENCLAWMP_TOKEN;if(A(),e.existsSync(Ne))try{let t=JSON.parse(e.readFileSync(Ne,`utf-8`));if(t.token)return t.token}catch{}return null}function Je(t,n={}){A();let r={token:t,savedAt:new Date().toISOString(),...n};e.writeFileSync(Ne,JSON.stringify(r,null,2)+`
|
|
3
3
|
`)}function Ye(){if(!e.existsSync(Le))return null;try{return JSON.parse(e.readFileSync(Le,`utf-8`)).deviceId||null}catch{return null}}function Xe(){A();let t={};if(e.existsSync(D))try{if(t=JSON.parse(e.readFileSync(D,`utf-8`)),t.agentId)return t.agentId}catch{}return null}function Ze(t,n,r,i){A();let a={};if(e.existsSync(D))try{a=JSON.parse(e.readFileSync(D,`utf-8`))}catch{}a.agentId=t,a.token=n,r&&(a.registeredAt=r),i&&(a.expiresAt=i),a.credentialsSavedAt=new Date().toISOString(),e.writeFileSync(D,JSON.stringify(a,null,2)+`
|
|
4
4
|
`)}function Qe(){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 $e(){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 et(){$e();try{return JSON.parse(e.readFileSync(k,`utf-8`))}catch{return{version:1,installed:{}}}}function tt(t,n,r){let i=et();i.installed[t]={version:n,installedAt:new Date().toISOString(),location:r},e.writeFileSync(k,JSON.stringify(i,null,2)+`
|
|
@@ -49,7 +49,7 @@ Example: skill-atlas install my-skill`});let n=await m.text({message:`Enter skil
|
|
|
49
49
|
`),M.default.green(`上传记录 (第 ${t} 页,共 ${n} 条)`))}function pr(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 mr={run:async(e,t)=>{m.intro(M.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(`查询失败`),m.log.error(n.message||`查询上传记录失败`),process.exit(1)),r.stop(`查询完成`),fr(n.data?.items??[],n.data?.page??1,n.data?.total??0),m.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),m.log.error(pr(e)),process.exit(1)}}};function hr(e){return e.serviceCode?.trim()?e.payload?.trim()?{valid:!0}:{valid:!1,error:`缺少必需参数: --payload`}:{valid:!1,error:`缺少必需参数: --service-code`}}function gr(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 _r(e,t){let n={payload:e};return t.clientRequestId?.trim()&&(n.clientRequestId=t.clientRequestId.trim()),t.skillExecutionId?.trim()&&(n.skillExecutionId=t.skillExecutionId.trim()),t.skillSlug?.trim()&&(n.skillSlug=t.skillSlug.trim()),n}function vr(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 yr(e,t){return`本次扣费: ${e} credits | 剩余: ${t} credits`}var br={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas service-gateway-invoke`));let n=hr(e);n.valid||(m.log.error(n.error),process.exit(1));let r=gr(e.payload);r.valid||(m.log.error(r.error),process.exit(1));let i=_r(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(`调用失败`),m.log.error(e.message||`服务调用失败`),e.data?.creditsCharged!==void 0&&e.data?.creditsBalance!==void 0&&m.log.info(yr(e.data.creditsCharged,e.data.creditsBalance)),process.exit(1)),s.stop(`服务调用成功`);let n=e.data,r=[` ${M.default.green(`服务编码:`)} ${n.serviceCode}`,` ${M.default.green(`调用状态:`)} ${n.invokeStatus}`];n.creditsCharged!==void 0&&r.push(` ${M.default.green(`本次扣费:`)} ${n.creditsCharged} credits`),n.creditsBalance!==void 0&&r.push(` ${M.default.green(`剩余余额:`)} ${n.creditsBalance} credits`),m.note(r.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=vr(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(yr(t.data.creditsCharged,t.data.creditsBalance))}process.exit(1)}}};const xr=process.env.SKILLATLAS_CONFIG_DIR||l.join(f.homedir(),`.skillatlas`),Sr=l.join(xr,`mail-config.json`);function Cr(){e.existsSync(xr)||e.mkdirSync(xr,{recursive:!0})}function wr(){if(!e.existsSync(Sr))return{};try{let t=e.readFileSync(Sr,`utf-8`);return JSON.parse(t)}catch{return{}}}function Tr(t){Cr(),t.updatedAt=new Date().toISOString(),e.writeFileSync(Sr,JSON.stringify(t,null,2)+`
|
|
52
|
-
`)}function Er(e,t){let n=wr();n[e]=t,Tr(n)}function Dr(e){let t=wr()[e];if(t!=null)return String(t)}function Or(){let e=wr(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function kr(e){return e in wr()&&e!==`updatedAt`}const Ar=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];function jr(){return Dr(`mailbox`)}const Mr={production:`skillatlas.cn`,pre:`
|
|
52
|
+
`)}function Er(e,t){let n=wr();n[e]=t,Tr(n)}function Dr(e){let t=wr()[e];if(t!=null)return String(t)}function Or(){let e=wr(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function kr(e){return e in wr()&&e!==`updatedAt`}const Ar=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];function jr(){return Dr(`mailbox`)}const Mr={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function Nr(e,t,n){return`https://${n?Mr.pre:Mr.production}/agents/${e}?token=${t}`}var Pr={run:async(e,t)=>{m.intro(M.default.bold(`skill-atlas agent-info`));let{agentId:n,token:r}=t,i=e.pre??!1,a=Nr(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 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=Dr(`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
53
|
`),M.default.green(`Agent 信息`)),c&&m.log.warn(`无法获取在线信息,部分数据可能不完整`),m.outro(M.default.green(`完成!`))}};function Fr(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 Ir(e){return e>0?M.default.green(`+${e}`):e<0?M.default.red(`${e}`):`${e}`}function Lr(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}`))} ${Fr(e.changeType)}`,` ${M.default.dim(`变更额度:`)} ${Ir(e.deltaCredits)} | ${M.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${M.default.dim(`服务编码:`)} ${e.serviceCode||M.default.dim(`N/A`)}`,` ${M.default.dim(`时间:`)} ${X(e.createdAt)}`].join(`
|
|
54
54
|
`));m.note(r.join(`
|
|
55
55
|
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import e,{existsSync as t,mkdirSync as n,readFileSync as r,writeFileSync as i}from"node:fs";import a,{join as o}from"node:path";import s from"semver";import c from"node:os";import{spawn as l}from"node:child_process";import*as u from"@clack/prompts";import d from"chalk";import f from"axios";import p,{basename as m,dirname as h,join as g,normalize as _,relative as v,resolve as y,sep as ee}from"path";import{existsSync as b,writeFileSync as te}from"fs";import ne,{homedir as re,platform as ie,tmpdir as ae}from"os";import*as oe from"readline";import{Writable as se}from"stream";import{cp as ce,lstat as le,mkdir as x,readFile as ue,readdir as de,readlink as fe,realpath as pe,rename as me,rm as S,stat as C,symlink as he,unlink as ge,writeFile as _e}from"fs/promises";import{fileURLToPath as ve}from"url";import{info as ye}from"console";import{execSync as be}from"child_process";import{createConsola as xe}from"consola";import{createHash as Se,randomBytes as Ce}from"node:crypto";import w from"secp256k1";var we=Object.create,Te=Object.defineProperty,Ee=Object.getOwnPropertyDescriptor,De=Object.getOwnPropertyNames,Oe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty,Ae=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=De(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ke.call(e,s)&&s!==n&&Te(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=Ee(t,s))||r.enumerable});return e},Me=(e,t,n)=>(n=e==null?{}:we(Oe(e)),je(t||!e||!e.__esModule?Te(n,`default`,{value:e,enumerable:!0}):n,e));const T=process.env.SKILLATLAS_CONFIG_DIR||a.join(c.homedir(),`.skillatlas`),Ne=a.join(T,`auth.json`),E=a.join(T,`skillatlas-meta.json`),Pe={production:{apiBase:`https://skillatlas.cn/`},pre:{apiBase:`https://
|
|
1
|
+
import e,{existsSync as t,mkdirSync as n,readFileSync as r,writeFileSync as i}from"node:fs";import a,{join as o}from"node:path";import s from"semver";import c from"node:os";import{spawn as l}from"node:child_process";import*as u from"@clack/prompts";import d from"chalk";import f from"axios";import p,{basename as m,dirname as h,join as g,normalize as _,relative as v,resolve as y,sep as ee}from"path";import{existsSync as b,writeFileSync as te}from"fs";import ne,{homedir as re,platform as ie,tmpdir as ae}from"os";import*as oe from"readline";import{Writable as se}from"stream";import{cp as ce,lstat as le,mkdir as x,readFile as ue,readdir as de,readlink as fe,realpath as pe,rename as me,rm as S,stat as C,symlink as he,unlink as ge,writeFile as _e}from"fs/promises";import{fileURLToPath as ve}from"url";import{info as ye}from"console";import{execSync as be}from"child_process";import{createConsola as xe}from"consola";import{createHash as Se,randomBytes as Ce}from"node:crypto";import w from"secp256k1";var we=Object.create,Te=Object.defineProperty,Ee=Object.getOwnPropertyDescriptor,De=Object.getOwnPropertyNames,Oe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty,Ae=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=De(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ke.call(e,s)&&s!==n&&Te(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=Ee(t,s))||r.enumerable});return e},Me=(e,t,n)=>(n=e==null?{}:we(Oe(e)),je(t||!e||!e.__esModule?Te(n,`default`,{value:e,enumerable:!0}):n,e));const T=process.env.SKILLATLAS_CONFIG_DIR||a.join(c.homedir(),`.skillatlas`),Ne=a.join(T,`auth.json`),E=a.join(T,`skillatlas-meta.json`),Pe={production:{apiBase:`https://skillatlas.cn/`},pre:{apiBase:`https://maas-skill-hub-staging.onrender.com/`}},Fe=process.env.SKILLATLAS_ENV||`production`;let Ie=process.env.SKILLATLAS_API_BASE||Pe[Fe].apiBase;const D=process.env.OPENCLAW_STATE_DIR||a.join(c.homedir(),`.openclaw`),O=a.join(D,`seafood-lock.json`),Le=a.join(D,`identity`,`device.json`),Re={skill:`skills`,plugin:`plugins`,trigger:`triggers`,channel:`channels`,experience:`experiences`},ze={project:`maas-skill-hub`,logStore:`cli`,endpoint:process.env.SKILLATLAS_SLS_ENDPOINT||`cn-hangzhou.log.aliyuncs.com`};function Be(){let e=process.env.SKILLATLAS_DISABLE_TELEMETRY;return e===`1`||e===`true`}function Ve(){return ze}function He(){return Fe}function k(){e.existsSync(T)||e.mkdirSync(T,{recursive:!0})}function Ue(e){let t=Re[e];if(!t)throw Error(`Unknown asset type: ${e}. Valid types: ${Object.keys(Re).join(`, `)}`);return a.join(D,t)}function We(){return Ie}function Ge(e){Ie=e.replace(/\/+$/,``)}function Ke(){Ge(Pe.pre.apiBase)}function qe(){if(process.env.OPENCLAWMP_TOKEN)return process.env.OPENCLAWMP_TOKEN;if(k(),e.existsSync(Ne))try{let t=JSON.parse(e.readFileSync(Ne,`utf-8`));if(t.token)return t.token}catch{}return null}function Je(t,n={}){k();let r={token:t,savedAt:new Date().toISOString(),...n};e.writeFileSync(Ne,JSON.stringify(r,null,2)+`
|
|
2
2
|
`)}function Ye(){if(!e.existsSync(Le))return null;try{return JSON.parse(e.readFileSync(Le,`utf-8`)).deviceId||null}catch{return null}}function Xe(){k();let t={};if(e.existsSync(E))try{if(t=JSON.parse(e.readFileSync(E,`utf-8`)),t.agentId)return t.agentId}catch{}return null}function Ze(t,n,r,i){k();let a={};if(e.existsSync(E))try{a=JSON.parse(e.readFileSync(E,`utf-8`))}catch{}a.agentId=t,a.token=n,r&&(a.registeredAt=r),i&&(a.expiresAt=i),a.credentialsSavedAt=new Date().toISOString(),e.writeFileSync(E,JSON.stringify(a,null,2)+`
|
|
3
3
|
`)}function Qe(){if(!e.existsSync(E))return null;try{let t=JSON.parse(e.readFileSync(E,`utf-8`));return t.agentId&&t.token?{agentId:t.agentId,token:t.token,registeredAt:t.registeredAt,expiresAt:t.expiresAt}:null}catch{return null}}function $e(){if(!e.existsSync(O)){let t=a.dirname(O);e.existsSync(t)||e.mkdirSync(t,{recursive:!0}),e.writeFileSync(O,JSON.stringify({version:1,installed:{}},null,2)+`
|
|
4
4
|
`)}}function et(){$e();try{return JSON.parse(e.readFileSync(O,`utf-8`))}catch{return{version:1,installed:{}}}}function tt(t,n,r){let i=et();i.installed[t]={version:n,installedAt:new Date().toISOString(),location:r},e.writeFileSync(O,JSON.stringify(i,null,2)+`
|
|
@@ -49,7 +49,7 @@ Example: skill-atlas install my-skill`});let n=await u.text({message:`Enter skil
|
|
|
49
49
|
`),M.default.green(`上传记录 (第 ${t} 页,共 ${n} 条)`))}function _r(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 vr={run:async(e,t)=>{u.intro(M.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 Pt({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(`查询完成`),gr(n.data?.items??[],n.data?.page??1,n.data?.total??0),u.outro(M.default.green(`完成!`))}catch(e){r.stop(`查询失败`),u.log.error(_r(e)),process.exit(1)}}};function yr(e){return e.serviceCode?.trim()?e.payload?.trim()?{valid:!0}:{valid:!1,error:`缺少必需参数: --payload`}:{valid:!1,error:`缺少必需参数: --service-code`}}function br(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 xr(e,t){let n={payload:e};return t.clientRequestId?.trim()&&(n.clientRequestId=t.clientRequestId.trim()),t.skillExecutionId?.trim()&&(n.skillExecutionId=t.skillExecutionId.trim()),t.skillSlug?.trim()&&(n.skillSlug=t.skillSlug.trim()),n}function Sr(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 Cr(e,t){return`本次扣费: ${e} credits | 剩余: ${t} credits`}var wr={run:async(e,t)=>{u.intro(M.default.bold(`skill-atlas service-gateway-invoke`));let n=yr(e);n.valid||(u.log.error(n.error),process.exit(1));let r=br(e.payload);r.valid||(u.log.error(r.error),process.exit(1));let i=xr(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 It(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(Cr(e.data.creditsCharged,e.data.creditsBalance)),process.exit(1)),s.stop(`服务调用成功`);let n=e.data,r=[` ${M.default.green(`服务编码:`)} ${n.serviceCode}`,` ${M.default.green(`调用状态:`)} ${n.invokeStatus}`];n.creditsCharged!==void 0&&r.push(` ${M.default.green(`本次扣费:`)} ${n.creditsCharged} credits`),n.creditsBalance!==void 0&&r.push(` ${M.default.green(`剩余余额:`)} ${n.creditsBalance} credits`),u.note(r.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))),u.outro(M.default.green(`完成!`))}catch(e){s.stop(`调用失败`);let t=Sr(e);if(u.log.error(t),e instanceof N&&e.responseData){let t=e.responseData;t.data?.creditsCharged!==void 0&&t.data?.creditsBalance!==void 0&&u.log.info(Cr(t.data.creditsCharged,t.data.creditsBalance))}process.exit(1)}}};const Tr=process.env.SKILLATLAS_CONFIG_DIR||a.join(c.homedir(),`.skillatlas`),Er=a.join(Tr,`mail-config.json`);function Dr(){e.existsSync(Tr)||e.mkdirSync(Tr,{recursive:!0})}function Or(){if(!e.existsSync(Er))return{};try{let t=e.readFileSync(Er,`utf-8`);return JSON.parse(t)}catch{return{}}}function kr(t){Dr(),t.updatedAt=new Date().toISOString(),e.writeFileSync(Er,JSON.stringify(t,null,2)+`
|
|
52
|
-
`)}function Ar(e,t){let n=Or();n[e]=t,kr(n)}function jr(e){let t=Or()[e];if(t!=null)return String(t)}function Mr(){let e=Or(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function Nr(e){return e in Or()&&e!==`updatedAt`}const Pr=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];function Fr(){return jr(`mailbox`)}const Ir={production:`skillatlas.cn`,pre:`
|
|
52
|
+
`)}function Ar(e,t){let n=Or();n[e]=t,kr(n)}function jr(e){let t=Or()[e];if(t!=null)return String(t)}function Mr(){let e=Or(),t=[];for(let[n,r]of Object.entries(e))n!==`updatedAt`&&r!=null&&t.push({key:n,value:String(r)});return t}function Nr(e){return e in Or()&&e!==`updatedAt`}const Pr=[`主邮箱`,`工作`,`学习`,`金融`,`购物`,`社交`,`订阅`,`临时`,`项目`,`备用`];function Fr(){return jr(`mailbox`)}const Ir={production:`skillatlas.cn`,pre:`maas-skill-hub-staging.onrender.com`};function Lr(e,t,n){return`https://${n?Ir.pre:Ir.production}/agents/${e}?token=${t}`}var Rr={run:async(e,t)=>{u.intro(M.default.bold(`skill-atlas agent-info`));let{agentId:n,token:r}=t,i=e.pre??!1,a=Lr(n,r,i),o=i?`预发环境`:`生产环境`,s=null,c=!1,l=J.createProgressReporter();l.start(`正在获取 Agent 信息...`);try{let e=await Rt(n,r);e.success&&e.data&&(s=e.data),l.stop(`获取成功`)}catch{c=!0,l.stop(`无法连接服务器,仅显示本地信息`)}let d=[];if(d.push(` ${M.default.green(`Agent ID:`)} ${n}`),d.push(` ${M.default.green(`环境:`)} ${o}`),s?.metadata&&(d.push(` ${M.default.green(`名称:`)} ${s.metadata.name}`),s.metadata.avatar&&d.push(` ${M.default.green(`头像:`)} ${s.metadata.avatar}`)),s?.creditAccount){let e=s.creditAccount;d.push(``),d.push(` ${M.default.cyan(`--- 虾小宝 Credits 账户 ---`)}`),d.push(` ${M.default.green(`可用 Credits:`)} ${e.availableCredits}`),d.push(` ${M.default.green(`冻结 Credits:`)} ${e.frozenCredits}`),d.push(` ${M.default.green(`累计发放:`)} ${e.totalGrantedCredits}`),d.push(` ${M.default.green(`累计消费:`)} ${e.totalConsumedCredits}`),e.welcomeBonus&&d.push(` ${M.default.green(`Welcome Bonus:`)} ${e.welcomeBonus.grantStatus}`)}let f=jr(`mailbox`);f&&(d.push(``),d.push(` ${M.default.cyan(`--- 邮箱信息 ---`)}`),d.push(` ${M.default.green(`默认邮箱 ID:`)} ${f}`)),d.push(``),d.push(` ${M.default.green(`虾小宝主页链接:`)}`),d.push(` [您的虾小宝Agent 主页](${a})`),u.note(d.join(`
|
|
53
53
|
`),M.default.green(`Agent 信息`)),c&&u.log.warn(`无法获取在线信息,部分数据可能不完整`),u.outro(M.default.green(`完成!`))}};function zr(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 Br(e){return e>0?M.default.green(`+${e}`):e<0?M.default.red(`${e}`):`${e}`}function Vr(e,t,n){if(e.length===0){u.log.info(`暂无流水记录`);return}let r=e.map((e,t)=>[`${M.default.bold(M.default.cyan(`${t+1}. #${e.id}`))} ${zr(e.changeType)}`,` ${M.default.dim(`变更额度:`)} ${Br(e.deltaCredits)} | ${M.default.dim(`变更后余额:`)} ${e.balanceAfter}`,` ${M.default.dim(`服务编码:`)} ${e.serviceCode||M.default.dim(`N/A`)}`,` ${M.default.dim(`时间:`)} ${X(e.createdAt)}`].join(`
|
|
54
54
|
`));u.note(r.join(`
|
|
55
55
|
|