关于 huawei-cloud-activity-submit
huawei-cloud-activity-submit 是通过华为云生产 API 向开放能力闯关活动提交作品链接的 Skill。它会校验链接,按顺序提交沙箱和 ECS 步骤,并在成功后回报积分。
主要功能
- 01通过生产 API 提交作品
- 02使用华为云 AK/SK 鉴权
- 03提交前校验步骤链接
- 04依次提交沙箱与 ECS 步骤
- 05成功后回报获得的积分
适用场景
- 01向活动提交沙箱部署链接
- 02完成沙箱步骤后提交 ECS 公网地址
- 03提交前检查步骤链接格式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-activity-submit安装后在 Claude Code 中输入/huawei-cloud-activity-submit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
submit.mjsreferences/acceptance-criteria.mdiam-policies.mdverification-method.md详细介绍
来自项目 README华为云开放能力闯关 · 作品提交 Skill(生产环境)
让 Agent 直接调用活动 Agent 提交接口(AK/SK 鉴权)完成成果提交(不做任何页面/浏览器操作),提交成功后向用户提示已获得的对应步骤积分。
Overview
本 Skill 让 Agent 直接调用华为云"开放能力闯关挑战"(activity_code = open-capability-2026-1024)的 Agent 提交接口(AK/SK 鉴权),将活动生成的作品链接自动提交到对应步骤,并在成功后回报已获得的积分。
核心特点:
- 纯 API 调用:不涉及任何页面/浏览器操作,直接 POST 提交接口。
- 固定生产环境:本 skill 固定使用生产环境接口,不切换环境。
- 两步顺序提交:
beginner(沙箱部署,1000 分)→intermediate(ECS 持久化部署,2000 分)。 - AK/SK 鉴权:通过请求头
X-HW-AK/X-HW-SK/X-HW-Security-Token认证,不依赖 hcloud CLI。 - ECS 步骤附加请求头:
intermediate提交时携带X-HW-PROJECT-ID/X-HW-REGION。 - 纯 Node.js 脚本:
submit.mjs(Node ≥ 18,无外部依赖),不使用 KooCLI。 - 可选展览馆发布:沙箱部署后始终询问;若未发布则 ECS 后再问一次;已发布则不再询问。
- 资源清理提醒:ECS 提交成功后提醒用户清理按量付费资源。
何时使用
- 用户说“把作品/成果/沙箱链接提交到活动” “帮我提交闯关成果” “提交沙箱域名/公网地址” 等。
- 活动已生成沙箱作品链接(前端站点)和/或 ECS 公网地址,需要提交到对应步骤。
- 仅针对活动
activity_code = open-capability-2026-1024。
提交接口
| 项 | 值 |
|---|---|
| 基地址(生产,固定) | https://open-dataset.huaweicloud.com/api/v1/hdopenservice/agent |
| 提交 | POST {base}/submit-activity-work |
前端页面走
/user/...(SSO 登录会话);Agent 走/agent/...(AK/SK 请求头),两者请求体与响应一致。本 skill 固定使用生产环境基地址,不切换环境。
鉴权(AK/SK 请求头):
X-HW-AK(必填):华为云 Access KeyX-HW-SK(必填):华为云 Secret KeyX-HW-Security-Token(可选):使用 STS 临时凭证时必填
ECS 步骤附加请求头(仅 intermediate(ECS 持久化部署)提交时携带):
X-HW-PROJECT-ID:ECS 的 Project IDX-HW-REGION:ECS 的 region(如cn-north-4)
凭证优先级:命令行参数 > 环境变量(
HW_ACCESS_KEY/HW_SECRET_KEY/HW_SECURITY_TOKEN,兼容HUAWEICLOUD_SDK_AK/HUAWEICLOUD_SDK_SK/HUAWEICLOUD_SDK_SECURITY_TOKEN、HW_AK/HW_SK)。切勿把凭证写入仓库。
提交请求体(Content-Type: application/json,与 /user/submit-activity-work 一致):
{
"activity_code": "open-capability-2026-1024",
"milestone": "beginner | intermediate",
"work_link": "https://xxx.devbridge-s2.hwtunnel.com",
"api_link": "http://<ECS_EIP>/hc-activity/index.html",
"summary": "作品说明(可选,≤500 字)"
}
按步骤取字段:
beginner(沙箱部署):只传work_link(沙箱站点链接)intermediate(ECS 持久化部署):只传api_link(ECS 公网访问地址,需含index.html,如http://<EIP>/hc-activity/index.html)
响应:{ "code": "success", "message": "..." };code === "success" 即提交成功。
步骤、字段对应、校验与积分
两步,必须按顺序提交:beginner(沙箱部署)→ intermediate(ECS 持久化部署);前一步通过后才能提交下一步。
字段/取值对应(重要):后端
milestone取值沿用旧版beginner/intermediate(页面文案已改名为“沙箱部署 / ECS 持久化部署”);旧advanced步骤已取消,不存在。
页面步骤 milestone取值提交字段 沙箱部署 beginnerwork_linkECS 持久化部署 intermediateapi_link
--milestone同时接受别名:sandbox→beginner、ecs→intermediate(脚本自动归一化)。
沙箱域名正则(同前端 SANDBOX_RE):^https:\/\/[^/]*devbridge-s2\.hwtunnel\.com(\/|$)
| 步骤 | milestone | 需提交 | 校验 | 成功后积分 |
|---|---|---|---|---|
| 沙箱部署 | beginner | 沙箱站点链接(work_link) | 沙箱域名 | 1000 分(¥100) |
| ECS 持久化部署 | intermediate | 公网访问地址(api_link) | http(s):// 开头且含 index.html(如 http://<EIP>/hc-activity/index.html) | 2000 分(¥200) |
操作步骤(Agent 执行)
- 收集链接:沙箱步骤用公开沙箱域名(
https://xxx.devbridge-s2.hwtunnel.com,部署后先curl -sI <URL>验证 200);ECS 步骤用 ECS 公网 HTML 地址(http://<EIP>/)。 - 确定当前步骤:按流程判断——先提交沙箱(
beginner),沙箱通过后再提交 ECS(intermediate);只提交当前已完成的步骤。 - 校验链接格式:脚本会在提交前自动校验(沙箱域名、
http(s)://前缀与index.html、说明 ≤500 字);不通过时会打印原因,修正后再提交。 - 执行提交:运行
submit.mjs(见下)。参数与步骤字段对应(本 skill 固定使用生产环境接口)。 - 回报用户:
- 成功:提示“提交成功,已获得{沙箱部署 / ECS 持久化部署}对应积分 {1000 / 2000} 分”,并说明该步骤已完成、可继续下一步。
- 失败:原样反馈接口返回的
message(如里程碑参数不合法、当前里程碑需提交接口地址、作品链接无效、缺少请求头 X-HW-AK)。
- 发布到作品展览馆(用户可选,见下节):
beginner(沙箱部署)提交成功后始终询问用户是否将作品发布到开发者作品展览馆的闯关活动(脚本在此时把发布状态重置为 false);若用户未发布,则在intermediate(ECS 持久化部署)提交成功后再询问一次;若沙箱阶段已发布(galleryPublished=true)则 ECS 阶段不再询问。发布成功后运行node submit.mjs --gallery-published记录状态。 - 资源清理(全部完成后):
intermediate(ECS 持久化部署)提交成功即allCompleted=true,必须用question工具询问用户是否清理本次活动创建的按量付费资源(选项:全部清理 / 仅删 ECS / 暂不清理),按用户选择执行或跳过;脚本也会在成功输出中打印清理提醒。
脚本用法
脚本位于本 skill 目录:submit.mjs(纯 Node,Node ≥ 18,无需额外依赖)。
# 1) 沙箱部署:提交沙箱域名 URL(milestone=beginner)
node submit.mjs --milestone beginner \
--work-link https://abcd1234-3000.devbridge-s2.hwtunnel.com \
--summary "2048 单文件小游戏"
# 2) ECS 持久化部署:提交公网访问地址(milestone=intermediate;链接需含 index.html;带 ECS 的 Project ID / region)
node submit.mjs --milestone intermediate \
--api-link http://<ECS_EIP>/hc-activity/index.html \
--project-id <PROJECT_ID> --region cn-north-4
凭证可通过命令行参数或环境变量提供:
# PowerShell
$env:HW_ACCESS_KEY = "<AK>"
$env:HW_SECRET_KEY = "<SK>"
$env:HW_SECURITY_TOKEN = "<使用 STS 临时凭证时填写>" # 可选
# 或直接:node submit.mjs --ak <AK> --sk <SK> [--security-token <token>]
成功输出示例(实际为多行 JSON):
{
"ok": true,
"milestone": "intermediate",
"label": "ECS 持久化部署",
"points": 2000,
"message": "...",
"allCompleted": true
}
提交成功,已获得ECS 持久化部署对应积分 2000 分。
发布到开发者作品展览馆的闯关活动展示(用户可选)
询问时机:
beginner(沙箱部署)提交成功后始终询问用户是否发布到作品展览馆(脚本在此时把galleryPublished重置为 false);- 沙箱阶段已发布(运行过
node submit.mjs --gallery-published,即galleryPublished=true)→intermediate(ECS 持久化部署)阶段不再询问; - 沙箱阶段未发布(仍为 false)→
intermediate(ECS)提交成功后再询问一次。
是否发布由用户决定——同意才发布,拒绝则跳过、不勉强。发布成功后运行 node submit.mjs --gallery-published 记录状态。
默认直接提交到此活动:作品默认提交到作品展览馆的「闯关活动」,跳过训练营选择,不再让用户挑营地。
- 活动名:
闯关活动trainingCampId:47d6ba99-fca0-4797-947d-a8776f506df1
- 询问用户(用
question工具):是否将作品提交到开发者作品展览馆的闯关活动展示?(用户可选,明确同意才继续;不同意就结束,不要勉强) - 用户同意后,执行:
npx skills add https://gitcode.com/Lingxi-HandsOn/gallery.git --skill publish-work-to-gallery -y 2>&1 - 该命令会安装
publish-work-to-galleryskill;随后按该 skill 的指引,收集并将用户本地做闯关任务产生的代码(前端、后端等项目的实际目录)推送至开发者作品展览馆的闯关活动。发布时默认使用trainingCampId=47d6ba99-fca0-4797-947d-a8776f506df1(闯关活动),无需再选择训练营。代码目录名不固定,以用户本次实际生成/使用的目录为准,不要假定某个固定仓库名。 - 用户不同意则跳过本步骤,直接结束。
注意事项:
- 询问时机:
beginner(沙箱部署)提交成功后始终询问;若用户未发布,则intermediate(ECS 持久化部署)提交成功后再询问一次;沙箱阶段已发布(galleryPublished=true)则 ECS 阶段不再询问(与操作步骤第 6 步、上方「询问时机」一致)。 - 是否提交展览馆完全由用户决定,用户拒绝则跳过,不得代替用户决定。
- 执行前先与用户确认或识别闯关任务实际产生的代码目录(前端、后端项目,目录名不固定),只推送相关代码,避免带上无关文件。可由用户指定,或扫描本次工作区中生成的项目目录来确定。
- 如
npx skills add需要联网/安装,失败时如实反馈错误并让用户决定是否重试。
Prerequisites
- Node.js ≥ 18:本 skill 的提交脚本
submit.mjs使用原生fetch(),需 Node 18 或以上版本。 - 华为云 AK/SK:需要有效的 Access Key 和 Secret Key,用于接口鉴权请求头。可选 STS 临时凭证的 SecurityToken。
- 凭证来源优先级:命令行参数 > 环境变量(
HW_ACCESS_KEY/HW_SECRET_KEY/HW_SECURITY_TOKEN,兼容HUAWEICLOUD_SDK_AK/HUAWEICLOUD_SDK_SK/HW_AK/HW_SK)。
- 凭证来源优先级:命令行参数 > 环境变量(
- ECS 步骤额外参数:
intermediate(ECS 持久化部署)提交时需提供--project-id和--region(或环境变量HW_PROJECT_ID/HW_REGION,或 hcloud 配置)。 - 网络访问:需能访问提交接口基地址(
https://open-dataset.huaweicloud.com)。 - 作品链接:
- 沙箱部署步骤(
beginner):需已部署的沙箱域名(https://xxx.devbridge-s2.hwtunnel.com格式)。 - ECS 持久化部署步骤(
intermediate):需 ECS 公网访问地址(含index.html,如http://<EIP>/hc-activity/index.html)。
- 沙箱部署步骤(
- 不使用 KooCLI:本 skill 直接通过 HTTP 请求头鉴权调用活动 API,不依赖 hcloud CLI,因此不需要
--cli-region参数。
注意事项
- 只调接口,不做页面操作:不要驱动浏览器、不要模拟点击页面表单。
- 固定环境、不切换:本 skill 始终使用生产环境;传入
--env/--base等环境参数会被忽略(不报错、无效果),不会切到其它环境(测试环境请改用huawei-activity-submit-test)。 - 顺序提交:步骤必须按
beginner(沙箱)→intermediate(ECS)依次提交,接口会校验顺序。 - ECS 步骤附加请求头:
intermediate(ECS 持久化部署)提交时需携带X-HW-PROJECT-ID(ECS 的 Project ID)与X-HW-REGION(ECS 的 region);脚本通过--project-id/--region(或环境变量HW_PROJECT_ID/HW_REGION,或 hcloud 配置)取值,缺失会报错。 - 沙箱域名强校验:
beginner步骤的链接必须是https://xxx.devbridge-s2.hwtunnel.com形式的沙箱域名;intermediate步骤提交的公网地址必须http(s)://开头(如http://<EIP>/hc-activity/index.html),缺index.html时脚本会自动补全。 - 凭证安全:AK/SK(及临时凭证的 SecurityToken)仅用于本次会话,不要写入仓库或提交到版本库;优先用环境变量传入,避免明文出现在命令行历史。
- SK 明文传输说明:
X-HW-SK以请求头明文传递是活动 API 自身设计(/agent/*接口要求 AK/SK 头),依赖 HTTPS 传输加密;请勿将 SK 写入仓库、日志或对外分享。 - 提交不可重复使用:同一地址提交后即与该账户绑定,勿重复提交相同链接。
Reference Documents
- references/iam-policies.md — IAM 权限说明(本 skill 使用 AK/SK 请求头鉴权,不依赖 IAM 策略)
- references/verification-method.md — 验证方法(如何端到端验证提交功能)
- references/acceptance-criteria.md — 验收标准(生产就绪的客观验收条件)