DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

wai549077 /

wai549077/dsh-aliyun-balance

Verified

DSH 插件:悬浮一行显示阿里云代金券 + 账户余额(还能花的钱),悬停看券面值/已用/最早失效时间。只读 BSS 存量,不做消费统计。

★ 1 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@2b9fe1bd

dsh-aliyun-balance

阿里云代金券 / 余额看板 —— 在 DSH 界面上悬浮一行,一眼看到还有多少钱能花。

主要服务于领了阿里云 300 元「云工开物」高校认证学生专属代金券、并用千问平台 API 接入 DSH 的用户 —— 随时知道这张券还剩多少、什么时候到期。

可用 ☰ ¥128.50        ← 界面上浮着这一行(数字是你自己的)
  • 悬停这一行 → 展开明细卡片(券余额、面值 / 已用、最早失效时间、现金 / 信控)
  • 点 ☰ → 打开完整面板(配凭据、调外观、切显示项)

只报「还剩多少」,不报「花了多少」。 插件只读阿里云 BSS 的当前存量,不做任何消费统计 —— 想知道花了多少请用 dsh-cost-meter(见与其它插件的关系)。


最快三步

  1. 装插件 —— 见安装(克隆本仓库到本地固定目录,让 DSH 装上)
  2. 拿 AK/SK —— 阿里云 RAM 里建一个只读子账号,创建 AccessKey
  3. 填进去 —— DSH 里打开面板 → 凭据区填 AK / SK → 保存 → 点「测试连接」

不配置也能用:那一行会显示「未配置」。

实测环境:DSH Desktop(Windows)2.0.17。web profile(dsh web)的注入机制同源,但未经实测,欢迎反馈(见安装)。


安装

DSH 是从本地目录装插件的:先在一个固定位置拿到本插件的目录,再让 DSH 装上。 下面几种方式拿到的目录内容一致,区别只是你怎么拿到它。

npm 包已上线(dsh-aliyun-balance), GitHub 仓库也已公开。插件市场直装随后上线 —— 上线后一句话即可: 对 DSH 说「把 dsh-aliyun-balance 装上」,它会调用内置的 plugin_manager 装进 desktop profile。

从 GitHub 克隆(推荐)

git clone https://github.com/wai549077/dsh-aliyun-balance.git dsh-aliyun-balance

下载 zip

在本仓库页面下载 zip,解压到固定位置。

从 npm 拿

npm i dsh-aliyun-balance

或让 DSH 自己装(不能用于 desktop profile,见下):

dsh plugin add dsh-aliyun-balance

让 DSH 装上

把含 package.json 的那一层目录放到一个固定位置 —— 别放临时目录,装好后移动目录需要重装。 然后在 DSH 桌面端的会话里说:

把 D:\Plugins\dsh-aliyun-balance 这个本地目录作为插件装上

装完自检

  • 界面上出现那一行,显示可用合计(券 + 余额)
  • %USERPROFILE%\.dsh\.dsh-aliyun-balance.log 里应出现 {"event":"apply"}

没看到那一行就重开一次客户端 —— 新装通常热生效,但实测有热生效不完整的先例。

桌面端与 web profile

⚠️ 桌面端读的是 desktop profile,而 dsh plugin 命令行按设计拒绝操作它 (profile "desktop" is managed exclusively by the Electron application)。所以:

目标 装法
桌面端 上面的对话式安装(或插件市场直装)
web(dsh web) dsh plugin --profile web add dsh-aliyun-balance

实测环境是 DSH Desktop(Windows)2.0.17。web profile 的注入机制同源,但未经实测,欢迎反馈。


配置凭据

1. 建一个 RAM 子账号

阿里云控制台 → RAM 访问控制 → 用户 → 创建用户。不要用主账号。

建议勾选「使用永久 AccessKey 访问」,不要勾「使用控制台访问」(不给它登录密码,权限更小)。

2. 只给只读权限

方式 做法
授权单个 Action bss:DescribeAcccount(查余额,官方原文就是双 c)、bss:DescribeCoupons(查代金券)
或者直接挂系统策略 AliyunBSSReadOnlyAccess

插件只查余额与代金券这两类接口,不查其它任何阿里云接口。

面板里可以改 endpoint,但只允许 *.aliyuncs.com(含国际站,如 business.ap-southeast-1.aliyuncs.com); 填成别的域名会被拒绝。所以插件的网络出口不会超出阿里云,但也不止固定的那一个主机。

3. 创建 AccessKey

为该子账号创建 AccessKey,拿到 AccessKey ID / Secret。

⚠️ Secret 只在创建时显示一次,关掉就再也看不到了(只能删了重建)。先复制出来再关窗口。

4. 填进 DSH

打开本插件的面板 → 凭据与设置 → 填入 AK / SK → 保存凭据(提交后输入框即清空)→ 测试连接 验证。

⚠️ 凭据是明文落盘的

插件把 AK/SK 写进 DSH 官方凭据服务,而 DSH 的本地凭据文件 ~/.dsh/.credentials.yaml 是明文 YAML(靠文件权限保护)。因此:

  • 一定要用只读子账号的 AK,不要用主账号 AK
  • 插件的设置接口永不回显密钥,只返回 hasAk / hasSk
  • 插件只调用 business.aliyuncs.com 一个主机,只做查询,没有任何写操作

界面

那一行

可用 ☰ ¥128.50 —— 「可用」是可用合计 = 代金券余额 + 阿里云账户余额:券会被抵扣掉、 账户余额也能花,两者相加才是真正还能用的钱。

操作 效果
按住拖动 拖到任意位置,自动记忆
双击 复位到默认位置
单击 立即绕过缓存刷新一次(☰ 按钮除外,它只管开面板)
悬停 展开明细卡片

挂件默认贴着窗口底部;窗口比默认位小时会自动收进视口内,不会跑出屏幕。 缩放窗口(小窗 ↔ 全屏)会重新定位:贴着底部放的就始终贴底,拖到别处的就钉在原地不动。换窗口大小也不会飘。

悬停明细

纯展示,不可交互(鼠标进不去)。显示:可用合计、券余额、阿里云余额、现金 / 信控、 券面值与已用、券失效时间、计价时段、数据时间(计价时段可在菜单里关掉)。

每一行都是从阿里云直接读到的,没有一个是推算出来的。

菜单面板

点 ☰ 打开,再点一次收起(鼠标移到按钮上,会在下方冒一个「菜单」小提示框)。面板是三个入口行:

[ ] 凭据与设置 ·············· AK·SK 已配置  ▸
[ ] 外观与挂件 ·············· 可拖动 · 默认外观  ▸
[✓] 计价时段 ················ 闲时(便宜)· 4小时后转忙  ▸
  • 每行右侧是当前值摘要 —— 不展开也能看出状态
  • 点一行才展开该区的设置项,可同时展开多个,状态会记住;默认全部收起
  • 行左侧带方框的是该项总开关;点开关不会展开这一行(否则想关掉时会顺手把区拉开)
  • 关闭方式:右上角 × / Esc / 点面板外
  • 面板整体落在那一行之外,不会被挂件挡住;屏幕中部时高度按剩余空间自动收,不顶出视口

凭据与设置:AK / SK 输入、保存凭据、测试连接、立即刷新,以及一行只读的自动刷新节奏提示。

外观与挂件:

选项 说明
锁定位置 勾选后钉在当前坐标,拖动与双击复位停用
背景色 / 文字色 取色器,实时生效
不透明度 0–100%,只淡背景与投影;边框与文字不随之变淡
隐藏边框 关掉那一行的描边
恢复默认外观 回到出厂值(见下)
  • 出厂默认是「只留文字 + 细描边」:颜色跟随 DSH 主题(不自定义任何颜色), 不透明度 0 把背景与投影淡掉,但保留边框 —— 好让新装的人一眼找到挂件在哪。
  • 自定义只作用在那一行上,悬停明细与面板仍跟随主题。
  • ⚠️ 恢复默认外观只改外观四项,不动「锁定位置」与「计价时段」。

显示项 → 计价时段(默认开):控制悬停明细里要不要显示「计价时段」那一行。

⚠️ 这条时段是千问平台的口径(闲时 22:00–08:00,东八区),且只对按闲忙双档计价的模型成立 —— 目前是 deepseek-v4.1-flash / deepseek-v4-pro-0813 / deepseek-v4-flash-0731 这三支。 其它模型全天同价,此时这一行只是一条时刻提示,不代表你的花费会变。用不上就关掉。

配色

全部走 DSH 主题令牌(--dsw-alias-*),跟随明暗主题自动切换。


数字怎么读

  • 「可用额度」不包含代金券 —— 券余额单独成区;那一行显示的是券 + 余额的合计
  • 余额与券每 5 分钟刷新一次;单击那一行可强制绕过缓存
  • 它们读的是 BSS 的当前存量,不是账单,也不适合反推消费:实测余额 / 券扣减有延迟, 一轮对话前后的差值不可靠
  • 插件不统计任何消费:不看会话事件、不做金额估算

与其它插件的关系

本插件 dsh-cost-meter
回答什么 还剩多少 花了多少
数据来源 阿里云 BSS 当前存量(券 + 余额) 逐轮 token × 单价
覆盖面 阿里云一家 18 个 provider、数百个模型

互补,不重叠。 而代金券余额与抵扣明细全市场只有本插件有 —— dsh-cost-meter 的 阿里云查询把 Action 写死成 GetFundAccountAvailableAmount,改不成查券。


故障排查

现象 处理
装完没出现那一行 重开一次客户端;看 %USERPROFILE%\.dsh\.dsh-aliyun-balance.log 有无 {"event":"apply"}
「未配置凭据」 配只读 AK;面板里「测试连接」验证
查余额报 Forbidden RAM 子账号缺 bss:Describe* / bss:Query* 只读权限
挂件位置乱了 双击那一行复位;若勾了「锁定位置」先取消锁定
想看前端跑到哪一步 ~/.dsh/.dsh-aliyun-balance.log 的 client-ping(positioned / tokens 等阶段)

开发

node --test "test/*.test.mjs"     # 全量单测(必须用 glob,传目录会报 ERR_UNSUPPORTED_DIR_IMPORT)
node test/normalize.test.mjs      # 单跑一个文件

改动的生效方式不一样,这点很容易误判:

改什么 怎么生效
assets/widget.js 整个退出再重开客户端。宿主每次请求都重读磁盘,但渲染进程会缓存这个响应 —— 实测改完十几分钟仍有实例在跑旧代码,只刷新页面不保险
lib/*.js 必须重启内核(只重启桌面客户端外壳无效)

调试钩子默认不挂。 挂件内部状态里含正在输入的 AK / SK 草稿,所以 window.__DSHAB__ 只在显式打开后才存在 —— 浏览器控制台里执行 window.__DSHAB_DEBUG__ = true 再刷新页面。

文件导览

  • lib/index.js 宿主侧:注入行 / 三条路由 / 凭据 / 调度
    • 注:ok 的语义是「凭据可用」,不是「取数全成功」;分区失败体现在 errors 里
  • lib/bss-client.js 阿里云 BSS ACS3-HMAC-SHA256 签名(有黄金哈希用例)
  • lib/normalize.js 余额与代金券归一化、buildOverview 组装
  • lib/cache.js 新鲜度判定
  • assets/widget.js 前端挂件:那一行 + 悬停卡片 + 面板(原生 DOM,无构建步骤)
  • test/ 6 个测试文件;test/widget.test.mjs 用桩 DOM 直接评测真实前端文件

关于

本插件由 AI 辅助完成 —— 代码、文档与测试均在 AI 协助下迭代产出,经人工审阅与实测。

(界面上那一行显示的是你自己的阿里云数据,插件不上传任何信息。)


License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 2b9fe1bd1580

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout