shxtmaker/dsh-usage-monitor0

dsh-quota-monitor

供应商可用周期限额监控:DSH sidebar 小组件 + 详情页,支持 DeepSeek 余额 / OpenCode 窗口与 allowance / Command Code 额度,含当日消耗量与当前供应商过滤;自动探测 DSH 已添加供应商并自动填入 API Key(密钥脱敏存储,手动 Key 不覆盖)。

包名
dsh-quota-monitor
版本
0.2.0
最近更新
2026年9月1日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:shxtmaker/dsh-usage-monitor

dsh-usage-monitor(用量监控)

DeepSeek Harness 插件:显示各供应商可用周期限额——sidebar 脚部小组件 + 详情页,支持

  • DeepSeek:账户余额(/user/balance
  • OpenCode:5h 滚动 / 周 / 月窗口用量(/zen/go/v1/usage)+ allowance 计量表(/api/go/status,OAuth + x-org-id)
  • Command Code:5h / 周窗口额度 + 套餐月额度(/alpha/billing/*,plan 表随上游;DSH 自动填入的聊天网关 baseURL 会自动收敛到同源根路径 /alpha/*

数据层移植自 Token-Consumption-Monitoring refactor/unified-query-methods 分支的「统一查询方法」模式(Describe→Scan→Query),只保留纯 HTTP 方法;Windows 专属方法(WebView2 控制台、本地 SQLite)已按规格丢弃。

功能

  • 小组件(sidebar 脚部)经 DSH 官方槽位 sidebar.footer.action 嵌入侧边栏底部(设置行正上方),与其他脚部按钮/组件(remote-web-ui、cordis-panel 等)同处内容流、并排渲染,不扫描/不劫持 DOM、不做 fixed 悬浮、不遮挡任何现有组件;宽栏下为紧凑条(状态点 + 概览 + 今日 token 总消耗),点击展开 Popover(各供应商限额项/重置/错误/上次刷新);侧栏收起为 56px rail 时自动切换为图标态,点击直接打开详情。只显示当前供应商(DSH 启用 ∩ 近期流量,「无 DSH 路由的供应商恒为候选」;只有真实 session/event 才算流量信号,冷启动未调用或近 24h 无任何流量时按启用清单兜底显示,兜底时标注「近 24h 无流量」)
  • 详情页:供应商分栏(kanban 风),栏头状态胶囊 + 限额项卡片;刷新历史表格默认收起;刷新全部 / 设置入口
  • 设置:原生设置卡片(settings.plugin.item 槽位)+ 详情页内面板;每供应商 启用 / API Key(password 掩码)/ Base URL / 警告·临界阈值;全局轮询间隔;测试连接按钮
  • 调度:默认 60s 轮询(10–3600 可配);同供应商 in-flight 合并去重;失败指数退避(30s→1m→2m→4m→10m;401/403 → 30min);手动刷新立即执行并重置计时器
  • 历史:每供应商最近 50 条、全局 500 条(内存,重启即清)
  • 本地用量数据:当日 token 消耗按「供应商 × 小时桶」落盘($DSH_HOME/quota-monitor/usage.json,原子写、防抖 2s),重启保留;按保留期修剪(默认 7 天,1–90 可配)
  • 密钥:DSH 原生 settings 命名空间 quota-monitor$DSH_HOME/settings.yaml,热重载、原子写、role('secret') 脱敏)
  • 自动探测:启动 / settings 热重载 / llm/adapters-updated / credentials/reference-updated 时探测 DSH LLM 注册表(ctx.llm 目录 + 存活路由)与 llm-deepseek / llm-pi-ai 配置节;命中支持路由(deepseek-official、pi-ai deepseek / opencode-go / commandcode-goat 及前缀变体)且 DSH user 层已配置/凭据库已存密钥 → 自动启用 + Base URL + API Key 自动填入(从 DSH 凭据库/环境变量拷贝进插件 settings,role('secret') 脱敏;仅当插件侧 Key 为空时填写);用户手动填过 Key 或显式关闭的不覆盖;已探测但暂不支持的供应商(openrouter 等)仅在设置面板提示

客户端渲染契约(v0.2 重构)

浏览器半 lib/client.js 不再以任何方式操作侧边栏 DOM,全部走 DSH 官方客户端注入面:

槽位注册 id/key内容
sidebar.footer.action(list)id: quota-monitor小组件主体:宽栏紧凑条 / rail 图标态;Popover 与弹层经 createPortal 挂 body
settings.plugin.itemkey: quota-monitor设置页「插件清单 → 用量监控」卡片,打开设置弹层
  • 依赖声明:dsh.client.inject 只列 boot graph 内真实存在的包(dsh-client-locale / dsh-client-ui-sidebar / dsh-client-ui-settings / dsh-client-ui-settings-plugins),不再引用 dsh-client-runtime 等图中不存在的模块。
  • 定位策略:Popover 采用官方「贴底展开」定位(bottom 对齐锚点条上沿 + 视口钳制),与 dsh-client-ui-cordis / dsh-remote-web-ui 的脚部弹层一致;详情/设置是居中 overlay,均为临时弹层,不常驻不遮挡。
  • rail 态:外壳传 wide=false 时小组件自动切换为图标按钮(打开详情),无需自建折叠逻辑。

结构

lib/index.js      宿主半:settings 注册、轮询调度、当前供应商/当日消耗量折叠、/api 路由、自动探测接入
lib/detect.js     自动探测 DSH 已添加供应商(ctx.llm 目录/存活路由 + 配置节 + 凭据解析)与自动填入补丁
lib/providers.js  数据层:三种供应商取数方法(可独立复用)
lib/client.js     客户端半:脚部槽位小组件 / Popover / 详情页 / 设置面板(纯 React.createElement,无构建)
test/smoke.mjs    数据层冒烟(Mock fetch)
test/detect.mjs   自动探测单元测试(目录/凭据/去重/无密钥)
test/mock-dsh.mjs 宿主半集成冒烟(Mock ctx + fetch)

宿主路由(loopback 同源守卫):

路由说明
GET /api/quota-monitor/state完整状态(供应商/当前集/当日消耗/历史/设置回显 + 探测诊断 detect
POST /api/quota-monitor/refresh强制刷新全部启用的供应商,返回新状态
POST /api/quota-monitor/test{supplier} 单次取数测试
POST /api/quota-monitor/settings深合并写入设置(密钥留空 = 不变)

安装