huawei-cloud-activity-submit · git:20261020.29524d7 · 2026-10-20 · sha256 a649125325b64c56
huawei-cloud-activity-submit git:20261020.29524d7A
Immutable. This exact content never changes and is served at /api/v1/blob/a649125325b64c56.
---
name: huawei-cloud-activity-submit
description: 直连华为云开放能力线上闯关挑战(activity_code=open-capability-2026-1024)的 Agent 提交接口(POST {base}/submit-activity-work),用 AK/SK 请求头(X-HW-AK / X-HW-SK / X-HW-Security-Token)把活动生成的作品链接/公网地址自动提交到“沙箱部署”(milestone=beginner)与“ECS 持久化部署”(milestone=intermediate)两步,并在成功后回报已获得的对应积分;沙箱部署(beginner)完成后**始终**询问用户是否(可选)将作品发布到开发者作品展览馆的闯关活动;若此时未发布则在 ECS(intermediate)完成后再询问一次,若已发布则 ECS 阶段不再询问(npx skills add ... publish-work-to-gallery)。Use when the user asks to 提交作品、提交闯关成果、自动提交活动成果、提交沙箱链接/公网地址, or when a generated sandbox URL needs to be submitted for the 华为云开放能力闯关挑战。本 skill 固定使用**生产环境**(现网)接口,无需也**不要**切换环境。仅用于调用接口,不涉及任何页面/浏览器操作.
---
# 华为云开放能力闯关 · 作品提交 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 Key
- `X-HW-SK`(必填):华为云 Secret Key
- `X-HW-Security-Token`(可选):使用 STS 临时凭证时必填
**ECS 步骤附加请求头**(仅 `intermediate`(ECS 持久化部署)提交时携带):
- `X-HW-PROJECT-ID`:ECS 的 Project ID
- `X-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` 一致):
```json
{
"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` 取值 | 提交字段 |
> |---|---|---|
> | 沙箱部署 | `beginner` | `work_link` |
> | ECS 持久化部署 | `intermediate` | `api_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 执行)
1. **收集链接**:沙箱步骤用公开沙箱域名(`https://xxx.devbridge-s2.hwtunnel.com`,部署后先 `curl -sI <URL>` 验证 200);ECS 步骤用 ECS 公网 HTML 地址(`http://<EIP>/`)。
2. **确定当前步骤**:按流程判断——先提交沙箱(`beginner`),沙箱通过后再提交 ECS(`intermediate`);只提交当前已完成的步骤。
3. **校验链接格式**:脚本会在提交前自动校验(沙箱域名、`http(s)://` 前缀与 `index.html`、说明 ≤500 字);不通过时会打印原因,修正后再提交。
4. **执行提交**:运行 `submit.mjs`(见下)。参数与步骤字段对应(本 skill 固定使用生产环境接口)。
5. **回报用户**:
- 成功:提示“提交成功,已获得{沙箱部署 / ECS 持久化部署}对应积分 {1000 / 2000} 分”,并说明该步骤已完成、可继续下一步。
- 失败:原样反馈接口返回的 `message`(如 `里程碑参数不合法`、`当前里程碑需提交接口地址`、`作品链接无效`、`缺少请求头 X-HW-AK`)。
6. **发布到作品展览馆(用户可选,见下节)**:`beginner`(沙箱部署)提交成功后**始终询问**用户是否将作品发布到**开发者作品展览馆的闯关活动**(脚本在此时把发布状态**重置为 false**);若用户**未发布**,则在 `intermediate`(ECS 持久化部署)提交成功后**再询问一次**;若沙箱阶段**已发布**(`galleryPublished=true`)则 ECS 阶段**不再询问**。发布成功后**运行 `node submit.mjs --gallery-published` 记录状态**。
7. **资源清理(全部完成后)**:`intermediate`(ECS 持久化部署)提交成功即 `allCompleted=true`,**必须**用 `question` 工具询问用户是否清理本次活动创建的**按量付费资源**(选项:全部清理 / 仅删 ECS / 暂不清理),按用户选择执行或跳过;脚本也会在成功输出中打印清理提醒。
## 脚本用法
脚本位于本 skill 目录:`submit.mjs`(纯 Node,Node ≥ 18,无需额外依赖)。
```bash
# 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
```
凭证可通过命令行参数或环境变量提供:
```bash
# 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`
1. **询问用户**(用 `question` 工具):是否将作品提交到**开发者作品展览馆的闯关活动**展示?(**用户可选**,明确同意才继续;不同意就结束,不要勉强)
2. **用户同意后**,执行:
```bash
npx skills add https://gitcode.com/Lingxi-HandsOn/gallery.git --skill publish-work-to-gallery -y 2>&1
```
3. 该命令会安装 `publish-work-to-gallery` skill;随后**按该 skill 的指引**,收集并将用户本地做闯关任务产生的代码(前端、后端等项目的实际目录)推送至开发者作品展览馆的闯关活动。发布时**默认使用 `trainingCampId=47d6ba99-fca0-4797-947d-a8776f506df1`(闯关活动),无需再选择训练营**。**代码目录名不固定**,以用户本次实际生成/使用的目录为准,不要假定某个固定仓库名。
4. 用户不同意则跳过本步骤,直接结束。
**注意事项**:
- **询问时机**:`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](references/iam-policies.md) — IAM 权限说明(本 skill 使用 AK/SK 请求头鉴权,不依赖 IAM 策略)
- [references/verification-method.md](references/verification-method.md) — 验证方法(如何端到端验证提交功能)
- [references/acceptance-criteria.md](references/acceptance-criteria.md) — 验收标准(生产就绪的客观验收条件)