dsh-ecustcic-quota
Verifieddsh-ecustcic-quota · v1.3.0 · MIT · Web UI
CIC 剩余额度监控:在侧边栏底部显示 ai.ecustcic.com(ECUSTCIC / ModelGate)的账户级剩余配额,点开可看每档周期、重置时间与限速。
Install
dsh plugin add dsh-ecustcic-quota Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Readme
dsh-ecustcic-quota
在 DeepSeek Harness 侧边栏底部显示 ai.ecustcic.com(ECUSTCIC / ModelGate)账户级剩余额度,点开可看每一档周期(每小时 / 每日 / 每周 / 每月)的请求数与 Token 余量、重置时间与限速。
它长什么样
侧边栏底部一行:◔ CIC ▬▬▬▬ 83%。百分比是最紧张的那一档周期的剩余比例,条随占比变短;余量低于 25% 变琥珀色、低于 10% 变红色。侧边栏收起时退化为一个仪表图标 + 状态色圆点。
点一下弹出详情面板:
- 大号剩余百分比 + 最紧档位与重置倒计时
- 每档周期一组:周期名、剩余比例、进度条,以及该档所有生效限额(请求数、Token 数各一行,
null的维度不显示) - 账户累计用量、限速(RPM / QPS / TPM,
不限表示rate为-1) - 上次更新时间与实际刷新间隔,右上角可手动刷新
数据按配置的间隔轮询(默认 10 分钟,对网关友好);页面隐藏时暂停,回到前台仅当数据明显过期才重取,手动刷新随时可用。
数据从哪来
网关接口:GET /api/user/quota(见 ModelGate API.md),认证用 Authorization: Bearer sk-gw-...。
关键点:请求在 Host 侧发出。原因有两条:
- 该接口不返回 CORS 头,浏览器页面无法跨源读取;
- API Key 不能下发到浏览器。
Host 半把结果通过 ctx.connection 的私有 RPC 通道(/ecustcic-quota)交给浏览器半,这条通道在 Web GUI 与桌面壳里都能用,浏览器永远看不到 Key。
安装
本插件同时发布到 npm 官方源和 CNB 制品库,两个源内容一致。装进任意 DSH 应用有两种方式。
方式一:插件市场(推荐)
打开 DSH,在侧边栏的面板列表里点「插件」(和「会话」「文件」并列的那一行)。
点「添加插件」→「安装第三方插件」。
「包名或地址」填:
dsh-ecustcic-quota「安装源」:
默认安装源即可(包已发布到 npm 官方源);
国内网络慢或连不上时,改选「自定义地址」,填:
https://npm.cnb.cool/ecustcic/dsh-ecustcic-quota/-/packages/
点「安装」,装完按提示重启 DSH。
两点说明:
- 两个源都公开只读,不需要登录、不需要令牌;
- 安装界面只填包名和源地址,不要在这里填
sk-gw-...之类的密钥——密钥由插件自动复用(见下方「配置凭据」)。
装不上时先核对包名和源地址是否和上面完全一致。若你的 DSH 版本面板列表里没有 「插件」,用下面的手动方式。
方式二:手动装进 profile
插件必须挂在 DSH profile 的 bundle 列表里。以 desktop profile 为例,编辑
~/.dsh/profiles/desktop/package.json:
{
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-ecustcic-quota"]
}
},
"dependencies": {
"dsh-ecustcic-quota": "^1.3.0"
}
}
用 npm 官方源不需要额外配置;想走 CNB 源,在 profile 目录加一行 .npmrc:
registry=https://npm.cnb.cool/ecustcic/dsh-ecustcic-quota/-/packages/
然后在该目录执行 pnpm install,并重启 DSH(宿主半是 Node 侧代码,改完要重启,光刷新页面不够)。
如果重启后 DSH 起不来:把
dsh-ecustcic-quota从dsh.profile.bundles里删掉即可恢复。
本地开发
# 1. clone 到个人插件目录
git clone https://cnb.cool/bestzyq/dsh-ecustcic-quota ~/.dsh/vendor/dsh-ecustcic-quota
# 2. 装进 profile(会自动 hardlink 到 profiles/<name>/node_modules)
dsh plugin --profile desktop add file:$HOME/.dsh/vendor/dsh-ecustcic-quota
# 3. 校验合成结果
dsh --profile desktop --dump-config | grep -A2 ecustcic
包内自带 cordis.patch.yml,作为 bundle 被引入时自动插入一行 loader entry(id: ecustcic-quota)。
凭据:直接用模型配置里的那把 Key
插件不保存也不单独配置 API Key。Host 半每次读取时都向 cordis loader 要合成后的 provider 表(bundle 层 + 你的 patch 层都已合并),按主机名 ai.ecustcic.com 找到那个 provider,用它自己声明的凭据名取 Key:
- id: llm-pi-ai
config:
providers:
cic:
apiKeyEnv: CIC_API_KEY # ← 凭据名,叫什么都行,不限于 ECUSTCIC_API_KEY
baseURL: https://ai.ecustcic.com/api/v1
- 凭据名完全来自 provider:
CIC_API_KEY、MY_RANDOM_KEY都一样,插件不假设任何名字; - 取到后经
ctx.credentials.resolve()现读:~/.dsh/.credentials.yaml的refs→ 进程环境变量 →.env回退,存的时候带不带Bearer前缀都行; - provider 若带内联
apiKey也可直接用;同一台主机上有多个 provider 时优先选声明了凭据的那个; - 网关根地址取同一
baseURL的 origin,baseURL/baseUrl两种拼写都认; - 配置读取做了防御:
fiber.config与options.config都看(加载失败的行也暴露它的端点),loader 取不到就降级为「未发现」,绝不让插件激活失败。
所以只要 DSH 里能用指向 ai.ecustcic.com 的模型,卡片就能读配额;换 Key、换凭据名都只需改模型配置,下一次刷新即生效,不用重启。找不到时错误会列出它实际看到的 provider(如 deepseek (newapi.bestzyq.cn), cic (ai.ecustcic.com)),方便定位。
配置项(可选)
写在 cordis.patch.yml(或任意 patch 层):
| 配置项 | 默认值 | 说明 |
|---|---|---|
baseUrl |
https://ai.ecustcic.com |
上游地址,只按主机名匹配 |
apiKeyEnv |
空(自动发现) | 凭据名覆盖。只接受 [A-Za-z_][A-Za-z0-9_]*,直接粘 sk-gw-… 会被忽略 |
refreshIntervalMs |
600000 |
刷新间隔(默认 10 分钟),30000–3600000,越界自动收敛 |
requestTimeoutMs |
15000 |
单次上游超时,1000–120000 |
浏览器侧的轮询周期跟随 refreshIntervalMs(面板底部会写实际值)。Key 本身不进浏览器:面板只在「更新于」的悬浮提示里显示来源(如 CIC_API_KEY · file)与打码片段。
结构
| 文件 | 作用 |
|---|---|
lib/index.js |
Host 半:从模型配置发现凭据、请求网关、15 秒缓存与并发去重、注册 /ecustcic-quota RPC 通道(state / refresh) |
lib/client.js |
浏览器半:sidebar.footer.action 里的 CIC 指示器 + 详情弹层 |
cordis.patch.yml |
bundle 补丁,插入 loader 行 |
locale/*.json |
插件市场/插件列表用的标题与说明 |
Host 半只依赖 Node 内建模块(fetch 来自 Node 20+),不 import 任何 @deepseek-ai/* 包;浏览器半只 require 平台基线里的 react 与 react-dom。
已知取舍
- 面板固定 296px 宽,
max-height: min(100vh - 32px, 720px);周期太多时才会出现滚动条。 - 轮询默认 10 分钟,可通过
refreshIntervalMs调整(见上方配置项)。 - Host 侧缓存跟随
refreshIntervalMs(上限 15 秒),手动刷新会强制穿透缓存。 - 凭据在每次读取时重新解析,所以改模型 Key / 凭据名后下一次刷新即生效,不必重启。
- 纯 Node 内建实现(
fetch/URL),Windows / macOS / Linux 桌面端与dsh web通用,无平台分支。 - 只在提供
connection+webServer的组合(Web / 桌面)里加载;纯 headless profile 不需要这个插件。
发布渠道
| 渠道 | 地址 | 说明 |
|---|---|---|
| npm 官方源 | https://www.npmjs.com/package/dsh-ecustcic-quota | latest |
| CNB 制品库 | https://npm.cnb.cool/ecustcic/dsh-ecustcic-quota/-/packages/ |
国内加速 |
| 源码 | https://cnb.cool/bestzyq/dsh-ecustcic-quota | MIT |
License
MIT