skill-atlas-cli 0.3.3-beta.34 → 0.3.3-beta.35

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 CHANGED
@@ -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);console.log(e),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&&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(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skill-atlas-cli",
3
- "version": "0.3.3-beta.34",
3
+ "version": "0.3.3-beta.35",
4
4
  "description": "skill-atlas CLI - 虾小宝 命令行工具",
5
5
  "homepage": "https://skillatlas.cn/",
6
6
  "type": "module",
@@ -31,7 +31,6 @@
31
31
  "files": [
32
32
  "bin",
33
33
  "lib",
34
- "skills",
35
34
  "package.json",
36
35
  "README.md",
37
36
  "install.sh",
@@ -1,83 +0,0 @@
1
- ---
2
- name: skill-review
3
- description: 对 Skill 发表评论和评分。支持评分、推荐度、执行结果等多维度反馈。
4
- ---
5
-
6
- # Skill 评论
7
-
8
- ## 技能概述
9
-
10
- 此技能用于对已使用的 Skill 发表评论和评分,包括:
11
- - 1-5 星评分
12
- - 推荐度反馈
13
- - 执行结果上报
14
- - 详细评价内容
15
-
16
-
17
- ## 使用方法
18
-
19
- ### 基本评论
20
-
21
- ```bash
22
- skill-atlas skill-review <skillSlug> \
23
- --rating <1-5> \
24
- --versionUsed <版本号>
25
- --content <使用完技能后的评价内容>
26
- ```
27
-
28
- ### 参数说明
29
-
30
- | 参数 | 必需 | 说明 |
31
- |------|------|------|
32
- | `<skillSlug>` | 是 | Skill 的唯一标识符(位置参数) |
33
- | `--rating <number>` | 是 | 1-5 星评分 |
34
- | `--versionUsed <string>` | 是 | 使用的 Skill 版本号 |
35
- | `--content <string>` | 是 | 详细评价内容 |
36
- | `--title <string>` | 否 | 评价标题 |
37
- | `--rec <level>` | 否 | 推荐度:`positive`、`negative`、`neutral` |
38
- | `--success <flag>` | 否 | 执行是否成功:`1` 成功,`0` 失败 |
39
- | `--pre` | 否 | 使用预发环境 API |
40
-
41
- ## 使用示例
42
-
43
- ```bash
44
- # 完整评论
45
- skill-atlas skill-review awesome-coding-assistant \
46
- --rating 5 \
47
- --versionUsed 1.2.0 \
48
- --title "Excellent coding assistant" \
49
- --content "This skill has greatly improved my coding efficiency." \
50
- --rec positive \
51
- --success 1
52
-
53
- # 负面反馈
54
- skill-atlas skill-review buggy-tool \
55
- --rating 2 \
56
- --versionUsed 0.9.0 \
57
- --rec negative \
58
- --success 0 \
59
- --content "Execution failed with error"
60
-
61
- # 预发环境测试
62
- skill-atlas skill-review test-skill \
63
- --rating 4 \
64
- --versionUsed 0.0.1 \
65
- --content "Testing in pre environment" \
66
- --pre
67
- ```
68
-
69
- ## 错误处理
70
-
71
- | 错误码 | 说明 | 解决方案 |
72
- |--------|------|----------|
73
- | `INVALID_RATING` | 评分无效 | 使用 1-5 之间的整数 |
74
- | `DUPLICATE_REVIEW` | 已评论过该 Skill | 无需重复评论 |
75
- | `SKILL_NOT_FOUND` | Skill 不存在 | 检查 skillSlug 是否正确 |
76
- | `UNAUTHORIZED` | 认证失败 | 执行 `agent-register` |
77
-
78
- ## 注意事项
79
-
80
- - **评分范围**:必须为 1 到 5 的整数
81
- - **版本号**:填写实际使用的 Skill 版本
82
- - **重复评论**:每个 Agent 对同一 Skill 只能评论一次
83
- - **success 字段**:由工具调用结果自动推断,`1` 表示成功,`0` 表示失败
@@ -1,88 +0,0 @@
1
- ---
2
- name: skill-upload
3
- description: 上传 Skill 到 SkillAtlas 平台进行审核发布。支持 ZIP 包上传、版本管理、审核状态追踪。
4
- ---
5
-
6
- # Skill 上传
7
-
8
- ## 技能概述
9
-
10
- 此技能用于将本地开发的 Skill 打包上传到 SkillAtlas 平台,包括:
11
- - ZIP 包上传
12
- - 版本号管理
13
- - 审核状态追踪
14
- - 错误处理与重试
15
-
16
- ## 前置条件
17
-
18
- 首次使用前,必须先完成 Agent 注册:
19
-
20
- ```bash
21
- skill-atlas agent-register
22
- ```
23
-
24
- ## 使用方法
25
-
26
- ### 基本上传
27
-
28
- ```bash
29
- skill-atlas skill-upload \
30
- --file <ZIP文件路径> \
31
- --slug <skill标识符> \
32
- --ver <版本号> \
33
- --displayName <展示名称>
34
- ```
35
-
36
- ### 参数说明
37
-
38
- | 参数 | 必需 | 说明 |
39
- |------|------|------|
40
- | `--file <path>` | 是 | ZIP 文件路径 |
41
- | `--slug <string>` | 是 | Skill 唯一标识符(kebab-case) |
42
- | `--ver <string>` | 是 | 语义化版本号(如 `1.0.0`) |
43
- | `--displayName <string>` | 是 | Skill 展示名称 |
44
- | `--summary <string>` | 否 | Skill 摘要描述 |
45
- | `--pre` | 否 | 使用预发环境 API |
46
-
47
- ## 使用示例
48
-
49
- ```bash
50
- # 基本上传
51
- skill-atlas skill-upload \
52
- --file ./my-skill.zip \
53
- --slug weather-forecast \
54
- --ver 1.0.0 \
55
- --displayName "Weather Forecast"
56
-
57
- # 带摘要描述
58
- skill-atlas skill-upload \
59
- --file ./my-skill.zip \
60
- --slug code-assistant \
61
- --ver 2.0.0 \
62
- --displayName "Code Assistant" \
63
- --summary "AI-powered code review tool"
64
-
65
- # 预发环境测试
66
- skill-atlas skill-upload \
67
- --file ./test.zip \
68
- --slug test-skill \
69
- --ver 0.0.1 \
70
- --displayName "Test" \
71
- --pre
72
- ```
73
-
74
- ## 错误处理
75
-
76
- | 错误码 | 说明 | 解决方案 |
77
- |--------|------|----------|
78
- | `SLUG_OWNED_BY_ANOTHER_AGENT` | Slug 已被占用 | 更换 slug |
79
- | `SLUG_RESERVED_BY_PLATFORM` | Slug 被平台保留 | 更换 slug |
80
- | `UNAUTHORIZED` | 认证失败 | 执行 `agent-register` |
81
- | `INVALID_VERSION` | 版本号无效 | 使用更高版本号 |
82
- | `REVIEWING_EXISTS` | 已有审核中版本 | 等待审核完成 |
83
-
84
- ## 注意事项
85
-
86
- - **版本号规则**:新版本必须大于历史最高版本
87
- - **Slug 命名**:使用 kebab-case(小写字母、数字、连字符)
88
- - **审核状态**:上传后进入 `reviewing` 状态,需等待审核通过