DeepSeek Harness 插件

Lstalu/dsh-quota-meter-plus

Star 数 ★ 1 分类 用量与计费 收录于 2026-11-10

ai-shushu/dsh-quota-meter 的增强衍生版,不能与上游同装(都占用 /quota 路由)。DSH 的会话额度与花费监控:按可编辑的模型价目表(含峰谷价)对真实 token 用量记账,输入框上方显示消耗进度条、会话头部右侧显示余额胶囊(余额需 DeepSeek API Key),额度耗尽时拦截新的模型调用;子代理与辅助调用的消耗并入父会话账本。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:Lstalu/dsh-quota-meter-plus

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

Per-session spend & quota meter for DSH — real token billing, live progress bar, budget blocking, configurable multi-model pricing.

给 DSH 的每个会话窗口设置金额额度:按真实 token 用量 × 可配置价目表记账,输入框上方显示消耗进度条,额度耗尽时自动拦截新的模型调用。

Screenshots / 效果

设置额度 消耗反馈
Set quota Billing feedback
未配价模型提示 限额弹窗
Unpriced model Quota exhausted
余额校准胶囊(v0.3.0)
Balance capsule 屏幕右上角常驻悬浮:账户余额(官方真实值)+ 实测消耗 + 本会话 已花/剩余,可手动 ↻ 刷新

✨ Features / 特性

  • Real-token billing — 按 dsh llm/stream 的真实 usage 记账,缓存命中/未命中/输出分档计费
  • Live progress bar — 输入框上方 2px 细条实时显示剩余额度(右对齐倒退),请求发起时左侧"燃烧"亮点脉动,扣费瞬间弹出 -¥ 金额徽标
  • Budget blocking — 额度耗尽自动拦截新的模型调用(agent/pre-step),并弹出提示
  • Configurable pricing — 价目表 UI 可编辑、按模型持久化;支持峰谷(time-of-day)定价,每个模型可自定义时区与高峰时段
  • Weekend off-peak — 官方新规(2026-08-23 起)周六/周日全天按空闲价计费,自动识别并切换档位
  • Per-session scope — 记账按会话独立;子代理消耗自动并入父会话额度(沿代理链上溯到根父),额度条显示真实总花费;辅助调用(标题生成/上下文压缩)同样计费
  • Persistent ledger — 额度与已花金额跟随会话持久化(~/.dsh/storages/dsh-quota-meter-plus/sessions/),重启 dsh 不丢;会话关闭时自动清理,与对话记录生命周期一致

📦 Install / 安装

Any machine with dsh CLI — 任意装有 dsh 的机器,一条命令:

dsh plugin --profile web add github:Lstalu/dsh-quota-meter-plus

Locked version — 锁版本安装(推荐正式环境):

dsh plugin --profile web add github:Lstalu/dsh-quota-meter-plus#v0.5.1
  • Client(进度条/弹层 UI)→ 刷新浏览器即生效
  • Host(记账/拦截/接口)→ 重启 dsh web 进程生效
  • Uninstall / 卸载:dsh plugin --profile web remove dsh-quota-meter-plus

Local development — 本地开发用 checkout 链接(改动即时反映): dsh plugin --profile web add /path/to/dsh-quota-meter-plus

升级注意(已有安装者):默认价目表随版本更新,但本机 prices.json(如已存在)会覆盖默认值。 升级到含新价格的版本后,需在价格弹层点「重置」或删除 ~/.dsh/storages/dsh-quota-meter-plus/prices.json 才会用到最新默认价。

💰 Pricing / 计价

价目表动态可编辑(UI 入口:额度条行尾「价格」),持久化到 ~/.dsh/storages/dsh-quota-meter-plus/prices.json。 单位 ¥/每 1M tokens。计价基准:官方 2026-09-11 中文页直接给人民币价,不再做汇率折算 (旧版按 2026-08-21 美元价 × 6.78 折算出的数字已全部替换)。价格仍可在 UI 修改。

✅ 官方核对(2026-09-11):价格与 api-docs.deepseek.com/quick_start/pricing 逐项一致。高峰时段为北京 09:00–12:00、14:00–18:00(周一至周五), 空闲 = 高峰半价,周六、周日全天按空闲价计费。 官方 usage 仅报告 prompt_cache_hit_tokens / prompt_cache_miss_tokens, 无独立的缓存写入计费字段(硬盘缓存构建成本并入未命中价), 故 cacheWriteTokens 对 DeepSeek 恒为 0,inputWrite 档仅影响其他厂商。

⚠️ 模型名迁移(2026-09-10 生效):deepseek-v4.1-flash-expires-on-0910 已失效 (服务端 400:no longer supported since 2026-09-10),正式名为 deepseek-flash。 旧名 deepseek-v4-flash 与 deepseek-v4-flash-vision-exp 仍可调用, 但请求由 V4.1-Flash 提供服务并按 Flash 价计费——三者必须同价,否则账目会漂。

deepseek-flash · deepseek-v4-flash · deepseek-v4-flash-vision-exp

缓存命中 缓存未命中 输出
空闲时段(含周末) ¥0.02 ¥1 ¥4
高峰时段 ¥0.04 ¥2 ¥8

deepseek-v4-pro

缓存命中 缓存未命中 输出
空闲时段(含周末) ¥0.15 ¥4.5 ¥13.5
高峰时段 ¥0.30 ¥9 ¥27

📌 V4 Pro 下线计划:北京时间 2026-09-14 12:00 之后至 V4.1 Pro 上线前, deepseek-v4-pro 的请求全部路由到 V4.1 Flash 并按 Flash 价计费; 届时若账目需要精确,应把该条切到 Flash 价或直接用 deepseek-flash。

  • Weekend off-peak / 周末全天空闲:周六、周日(北京时间)全天按空闲价计费(官方 2026-08-23 起执行)
  • Peak hours / 高峰时段:北京时间 9:00–12:00、14:00–18:00(每个峰谷模型可自定义时区与区间)
  • 未知模型回退到 fallback 模型价
  • 计价模型:计费输入 = 未缓存输入 + 缓存命中输入,输出单独计价

🧠 How it works / 工作原理

模型调用结束 → llm/stream 流中 {type:'usage'} 块
  → Host 按模型查价目表(峰谷自动选档)折算金额
  → 累加到会话记账本(spent / calls)
  → 客户端 1s 轮询 /quota/state → 进度条前进 + 扣费徽标弹出
额度耗尽 → agent/pre-step 返回 reject → 拦截新调用 + 提示弹窗

🛠 Develop / 开发

git clone git@github.com:Lstalu/dsh-quota-meter-plus.git
dsh plugin --profile web add ./dsh-quota-meter-plus   # 本地链接安装

改 index.js(host)/ lib/client.js(client)→ client 刷新即生效,host 重启生效。

🔧 增强补丁(相对上游 d9941af)

本仓库为增强维护版,基于官方 d9941af 基线,在官方基础上打了五处补丁(均可提交上游):

  1. 同源防护(安全):/quota/* 是本地写接口(改额度 / 改价目表), 浏览器里任意外部网页都能向 127.0.0.1 发跨源请求。host 端新增 isSameOrigin 校验——带 Origin 的请求要求其 host 与请求 Host 头 完全一致,跨源一律 403;无 Origin 的客户端(curl、本机进程)放行。

  2. inputWrite 计费档(口径修正):cacheWriteTokens 不再并入 "缓存命中"低价档,改用独立的 inputWrite 单价(缺省 = 未命中价, 保守不低估;Anthropic 等写缓存按 1.25× 输入价计的厂商可自行调高)。 三档价格组扩展为四档 { inputMiss, inputHit, output, inputWrite }, 旧价目表自动归一化(缺省 = inputMiss),价格弹层编辑不丢该字段。 DeepSeek 适配器不报告 cacheWriteTokens,该档对 DeepSeek 恒为 0, 默认配置下记账与官方口径一致。

  3. 屏幕右上角常驻悬浮胶囊 + 账户余额校准(v0.3.0):

    • 胶囊固定于屏幕右上角(shell.overlay,z-index 900),常驻显示 「账户余额(官方真实值)+ 实测消耗」与「本会话 已花/剩余」两行; 会话额度 10s 轮询,账户余额 60s 轮询,可手动 ↻ 立即刷新。
    • 余额来自官方接口 GET https://api.deepseek.com/user/balance (platform.deepseek.com/usage 网站余额的同一数据源,文档化、稳定, 无需登录态 cookie 爬网页)。host 端 60s 缓存 + 10s 超时 + 首次 拉取自动记录基线;实测消耗 = 基线 − 当前余额(账户级口径), 供与插件会话记账对照校准。
    • API Key 经胶囊 ⚙ 弹层保存,落盘 ~/.dsh/storages/dsh-quota-meter-plus/config.json(0600,仅本机), 或设环境变量 DSH_DEEPSEEK_API_KEY / DEEPSEEK_API_KEY; 密钥只发往 api.deepseek.com,接口绝不回显。重设基线 按钮可在 充值后重新锚定参考点。
  4. 留空保存 Key 不再清除 + 独立「清除密钥」按钮(v0.4.2,防误清空): /quota/config 收到空的 apiKey 时视为"保留现有 Key",不再覆盖、不再 清除——避免在胶囊 ⚙ 弹层误点「保存」把密钥清掉。只有填入非空 Key 才会 更新;如需清除,用弹层新增的「清除密钥」按钮(带确认)显式清空。

  5. 子代理 / 多 agent 归属改用权威 header(计费归属修复):权威父子关系在 会话 header 里——dsh-subagent 创建子会话时写入 parentSession + origin:'subagent'(+ delegationDepth),活着的 Agent 直接暴露 agent.session.header(dsh-subagent 自己的 authorizeLineage 就这么读)。 host 端在 agent/pre-step(agent loop 对每个 agent 的每一步派发,早于该步的 模型调用)按 header.origin === 'subagent' 认领子会话、建立 child → 根父映射, 并删除旧的 tools/result + /^subagent/ 工具名 FIFO 配对。

    • 为什么不是 subagent/start:它的回调只收到 info(runId/provider/id/local) ——parent 被 createLifecycleEmitter 当作 scoped dispatch 的 carrier 用掉了 (ctx.events.dispatch('emit', [carrier(parent), name, info]) 之后只 callback(info)),第二个参数恒为 undefined。
    • 为什么旧写法漏掉多 agent:它只认 subagent 工具名,而 AgentTeams 成员经 agent_teams_* spawn,永远等不到匹配的 tools/result,映射建不起来 → 成员消耗留在成员自己的账本里(发起会话的额度条看不到),成员会话销毁时 账本文件又被 session/disposed 删除。
    • 为什么不并 fork:fork 会话也带 parentSession(seed lineage),但 origin 不是 'subagent' —— 那是用户自己开的新对话,不能并账;过滤条件 与官方 listChildren 保持一致。
    • 认领子会话时会把其此前(旧版本遗留 / 上一个 epoch)已独立记的消耗补归 根父并清零子账本(重启后凭子账本里的 parentId 恢复映射)。
    • 实测一次国赛多 agent 会话:发起会话只显示 ¥13.38,整棵代理树实际 ¥55.04 (其中今天 ¥47.90,与官方日账单口径一致)。
    • 回归测试:node test/subagent-attribution.test.mjs。

📄 License / 许可

MIT

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。