前言¶
在使用 DeepSeek Harness(DSH)进行智能体开发或日常调用时,除了查看算力消耗,有时也需要了解阿里云账号下的代金券余额。手动去阿里云控制台查询不够直观,也不利于在开发时快速核对预算。
本插件在 DSH 侧边栏底部与 cost-meter 的余额行并排显示「阿里云代金券剩余额度」,支持点击行打开配置面板,查看余额、面值、张数与到期日。
是什么¶
- 名称:dsh-alicoupon
- 维护者:yangguozhongmax-max
- 定位:DSH 侧边栏插件,用于只读查询阿里云 BSS
DescribeCoupon接口,获取代金券剩余额度。 - 核心价值:在 DSH 界面内直接查看阿里云代金券信息,无需切换标签页或登录阿里云控制台。
核心功能¶
- 只读接口查询:使用阿里云 BSS 的
DescribeCoupon接口(business.aliyuncs.com,2023-09-30,ACS3-HMAC-SHA256 签名),只读查询当前账号下的可用代金券。 - 凭据安全:AccessKey 只保存在 DSH 凭据库(
~/.dsh/.credentials.yaml),绝不回传给浏览器;接口响应仅包含余额、面值、张数、到期日。 - 双重刷新机制:
- 宿主(Node 侧):每refreshMinutes(默认 1 分钟)重查一次阿里云。
- 浏览器(UI 侧):每 60 秒读取宿主快照,页面重新可见或窗口聚焦时各读一次。 - 配置面板:点击侧边栏那一行打开配置面板,可修改标签、刷新间隔、立即刷新、直接填入/清除阿里云 AccessKey,并查看凭据各项状态。
- 体检工具:提供
doctor.mjs脚本,检查插件是否挂载、凭据配置、路由可用性等。
安装与启用¶
插件需要 DSH 0.2.x(桌面 App 或 dsh web)以及 Node.js ≥ 20.10。AccessKey 需要一个能看到对应代金券的阿里云账号,且权限只需 bss:DescribeCoupon。
五步装好(约 5 分钟)¶
- 获取代码(二选一):
git clone https://github.com/yangguozhongmax-max/dsh-alicoupon.git
# 或
npm install github:yangguozhongmax-max/dsh-alicoupon
- 挂进 DSH profile(幂等):
cd dsh-alicoupon && node scripts/link-into-profile.mjs desktop
- 创建只读 AccessKey:
- 阿里云控制台 → 访问控制 RAM → 用户 → 创建用户。
- 访问方式只勾「使用永久 AccessKey 访问」。
- 授权任选其一:AliyunBSSReadOnlyAccess(系统策略);- 或最小化策略:
{
"Version": "1",
"Statement": [{ "Effect": "Allow", "Action": ["bss:DescribeCoupon"], "Resource": "*" }]
}
- 记下 AccessKey ID / Secret(只显示一次)。
-
填入凭据(三选一):
- 在侧边栏点那一行,在面板里填。
- 手工改~/.dsh/.credentials.yaml的refs:。
- 设环境变量ALIBABA_CLOUD_ACCESS_KEY_ID与ALIBABA_CLOUD_ACCESS_KEY_SECRET。 -
重启 App:
宿主模块只在启动时 import,重启后侧边栏会出现那一行。
使用脚本挂载(推荐)¶
node scripts/link-into-profile.mjs # 默认 desktop
node scripts/link-into-profile.mjs web # 指定 profile
node scripts/link-into-profile.mjs desktop --copy # 无权限时用复制
node scripts/link-into-profile.mjs desktop --dry # 预览会做什么
node scripts/link-into-profile.mjs desktop --unlink # 撤销
Web profile(dsh web)用 CLI 安装¶
dsh plugin --profile web add github:yangguozhongmax-max/dsh-alicoupon
dsh plugin --profile web add /path/to/dsh-alicoupon
桌面 App 安装(三种方式)¶
- App 内安装:设置 → 插件里安装本包。
- 用脚本挂载:
node scripts/link-into-profile.mjs desktop。 - 纯手工:放包 + 改
dsh.profile.bundles。
安装后需重启 App。
典型用法¶
- 安装完成后重启 DSH,侧边栏底部会出现一行「阿里云代金券」。
- 点击该行打开配置面板:
- 修改标签(默认「阿里云代金券」)。
- 调整refreshMinutes(默认 1 分钟)。
- 点击「立即刷新」。
- 直接填入/清除 AccessKey。
- 查看凭据状态(来源、是否可写等)。 - 侧边栏会显示当前代金券的剩余额度、面值、张数与到期日。
- 如遇问题,运行体检:
node scripts/doctor.mjs
node scripts/doctor.mjs --profile web
node scripts/doctor.mjs --port 50989
配置项¶
配置可通过三种方式修改,优先级从高到低:
- 配置面板(立即生效,无需重启)。
- 本 profile 的
cordis.patch.yml(覆盖同一id的行配置)。 - 插件默认值。
示例 cordis.patch.yml:
- id: alicoupon
label: 千问学生券
refreshMinutes: 1
timeoutMs: 15000
credentialRefs:
accessKeyId: ALIBABA_CLOUD_ACCESS_KEY_ID
accessKeySecret: ALIBABA_CLOUD_ACCESS_KEY_SECRET
securityToken: ALIBABA_CLOUD_SECURITY_TOKEN
配置面板写入的文件:~/.dsh/storages/dsh-alicoupon/config.json,仅包含 label 与 refreshMinutes。
排错¶
运行体检¶
node scripts/doctor.mjs
node scripts/doctor.mjs --profile web
node scripts/doctor.mjs --port 50989
体检会检查插件挂载、文件完整性、凭据 ref 配置、路由可用性等。
探针测试¶
node scripts/probe.mjs <AccessKeyId> <AccessKeySecret> [SecurityToken] [--raw] [--label 千问学生券]
# 或读取环境变量:node scripts/probe.mjs
正常输出示例:
{
"label": "阿里云代金券 · 2027-10-20 到期",
"unit": "CNY",
"remaining": 286.18,
"maxBudget": 300,
"count": 1,
"expiresAt": "2027-10-20"
}
常见现象与原因¶
| 现象 | 含义 | 处理方式 |
|---|---|---|
| 行显示「· 待配置」 | 凭据未读到 AK | 检查 refs: 键名、环境变量、AK 是否被删除 |
| 行显示「· 查询失败」 | AK 错、被删或未授权 | 悬停查看阿里云返回的具体错误(如 InvalidAccessKeyId、Forbidden) |
| 数字不更新 | 未到达刷新间隔或宿主定时器未运行 | 点行查看「更新于」;调小 refreshMinutes |
| 路由 404 | 宿主半边未加载 | 检查包名是否在 dsh.profile.bundles、查看日志 |
| 侧边栏一行都不出现,App 无报错 | 插件未挂载或客户端注册失败 | 查看 ~/.dsh/storages/dsh-alicoupon/client.log |
适用场景与注意¶
- 适合:需要频繁查看阿里云代金券余额的开发者、智能体开发者、使用 DSH 进行批量调用的用户。
- 注意:
- 插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证。
- 依赖 Node.js ≥ 20.10。
- 凭据只保存在本地,插件不连接除
business.aliyuncs.com以外的服务器。 - 宿主模块只在启动时 import,安装后需重启 App。
结尾¶
本插件在 DSH 侧边栏提供只读的阿里云代金券余额查询能力,方便在开发与调用过程中快速核对预算。文档与代码仓库如下:
- GitHub:https://github.com/yangguozhongmax-max/dsh-alicoupon
- SkillHub 目录:https://www.skillhub.cn/plugins/yangguozhongmax-max/dsh-alicoupon