deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DeepSeek Harness(dsh web)额度插件:在输入框下方显示账户额度与本会话估算消耗;右下角另有可拖动的累计消耗胶囊。设置在侧栏「额度」(最后一项,货币硬币图标),分成多张可折叠卡片。
兼容性:适配 DSH Session v2(
dsh 0.1.3-alpha.2起),已在dsh 0.1.5-rc.1上验证;不再兼容旧版会话事件。
🟢 余额 ¥97.69;OpenCode Go 模式如 🟢 Go 额度 月 6% · 周 12% · 5h 9%。点击圆点可立即强刷。deepseek-flash / deepseek-v4-flash / deepseek-v4-flash-vision-exp 自 2026-09-10 12:00 起切换为 V4.1 Flash 新价。TPS n tok/s。可在「设置 → 展示 → 生成 TPS」关闭。dsh plugin --profile web add dsh-credits
装完后重启 dsh web。本地开发可改为:
dsh plugin --profile web add <本目录绝对路径>
升级:
dsh plugin --profile web remove dsh-credits
pnpm store prune
dsh plugin --profile web add dsh-credits@latest
卸载:
dsh plugin --profile web remove dsh-credits
悬停底部读数会展开详情:DeepSeek 列出全部币种钱包,Go 列出三个用量窗口,下面是本会话估算。

底部额度默认独立占一行:


OpenCode Go 模式下,卡片改成三个窗口的用量百分比与重置时间:

右下角可拖动的累计消耗胶囊,按今天 / 昨天 / 本周 / 本月 / 自定义区间汇总跨会话估算:

设置 → 额度:多张可折叠卡片,同一功能区两列排布,每张卡单独保存。


额度查询现在以 DSH 供应商列表为主体:每个供应商都有独立的额度开关、信息来源和保存按钮。

识别出适合的模板后会直接显示为「内置模板」,展开后仍可切换其他套餐或余额模板:

没有适合的模板时,可使用自定义 HTTP 接口配置请求、鉴权、返回字段与数值换算:


在「设置 → 额度 → 额度查询」中:
切换模型时只查看当前 DSH 供应商自己的绑定;没有配置或已关闭的供应商不显示额度,也不会回退到无关账户。本会话消耗和 TPS 不受影响。每个供应商拥有独立的查询与缓存,因此可以在 DSH 中添加多个指向 OpenCode Go 的自定义供应商,并为每个账号分别配置同一个模板。
自定义接口不要求编写整段 JSON 配置,常用设置都可以在页面完成:
1e-12。重置时间字段只用于显示。直接填写的 Token 或 Cookie 保存到 DSH credentials,不写入导出的普通配置;页面只显示「已设置」,可输入新值覆盖。附加请求头中的 Cookie、Authorization、Token、API Key 等敏感字段也会脱敏。
设置页保存后会立即更新当前 dsh web 进程。若要让额度绑定在服务重启后仍然保留,请从「YAML 导出」卡片复制配置到当前 profile 的 cordis.patch.yml;直接填写的敏感凭证无需写入 YAML。
内置额度源:
| provider | 说明 | 上游接口 | 密钥 |
|---|---|---|---|
deepseek |
DeepSeek 官方余额 | GET /user/balance |
DEEPSEEK_API_KEY |
opencode-go |
OpenCode Go 订阅用量 | GET https://opencode.ai/zen/go/v1/usage |
OPENCODE_GO_API_KEY 或 OpenCode auth.json |
除 DeepSeek 和 OpenCode Go 外,设置页内置了以下模板:
硅基流动不再提供内置余额模板。旧 /user/info 无法可靠反映网页现金余额和代金券;需要时请给对应 DSH 供应商选择「自定义 HTTP 接口」,自行配置网页接口与会话凭证。网页内部接口可能随时调整,Cookie 失效时需要重新填写。
高级 YAML 的每个 providerQuotas 绑定可以使用三种数据形态:
balance:DeepSeek 风格多币种余额usage:OpenCode Go 风格多窗口用量metric:任意单指标/多指标剩余额度(HTTP + JSONPath)服务端会按 DSH 供应商分别缓存所有已启用额度源;切模型时底部直接换展示,不必再等一轮查询。
| 当前对话模型的供应商 | 底部展示 |
|---|---|
| 绑定为 OpenCode Go 模板的供应商 | 该账号的订阅用量(5 小时 / 周 / 月) |
| 绑定为 DeepSeek 模板的供应商 | 该账号的官方余额 |
| 绑定为余额/套餐模板或自定义 HTTP 的供应商 | 该供应商自己的解析结果 |
| 未配置或单独关闭的供应商 | 不显示额度;本会话消耗与 TPS 仍可正常显示 |
OpenCode Go 密钥解析顺序:opencodeApiKey → OPENCODE_GO_API_KEY(credentials / 环境变量)→ ~/.local/share/opencode/auth.json。
覆盖文件:$DSH_HOME/profiles/web/cordis.patch.yml。也可在设置 → 额度 改完后按卡片点「保存」。
新配置以 providerQuotas 为准,不再需要全局的额度查询模式、默认展示源或未匹配回退项。providerId 必须与 DSH 供应商列表中的实际 ID 一致。旧版 quotaMode、provider、quotaSources 等字段仍会兼容读取,但新配置不建议继续使用。
常用展示项:
| 配置 | 默认 | 说明 |
|---|---|---|
providerQuotas |
[] |
每个 DSH 供应商独立的额度来源绑定;未显式配置时会在后台匹配内置模板,失败则准备一份关闭的自定义 HTTP 配置 |
showDock |
true |
是否显示底部额度读数 |
dockLayout |
own |
own 独立换行;shared 与底部已有统计共用一行 |
showCapsule |
true |
右下角累计消耗胶囊 |
showPopover |
true |
悬停底部读数时的双栏详情 |
showTps |
true |
是否显示最近一次生成 TPS |
enabled |
true |
额度功能总开关;关闭后隐藏相关 UI、停止轮询,并锁定展示和额度查询;不影响模型单价和 YAML 导出 |
- id: dsh-credits
config:
showDock: true
dockLayout: own
showCapsule: true
showPopover: true
providerQuotas:
- providerId: opencode-go
enabled: true
sourceType: template
templateId: opencode-go
thresholdMode: percent
warningThreshold: 30 # 剩余额度 < 30% 黄灯
dangerThreshold: 10 # 剩余额度 < 10% 红灯
refreshIntervalMs: 300000
- providerId: go-personal # DSH 中另一个自定义供应商,使用另一份 Key
enabled: true
sourceType: template
templateId: opencode-go
thresholdMode: percent
warningThreshold: 30
dangerThreshold: 10
refreshIntervalMs: 300000
currency: USD
两个 DSH 供应商需要分别保存自己的 Key;插件会产生 provider:opencode-go 和 provider:go-personal 两个适配器及缓存。切到哪个供应商,就显示哪个账号的三个用量窗口。状态灯按「剩余最少」的窗口判定;套餐没有固定美元上限可展示。
- id: dsh-credits
config:
providerQuotas:
- providerId: deepseek-official
enabled: true
sourceType: template
templateId: deepseek
thresholdMode: value
warningThreshold: 10
dangerThreshold: 5
refreshIntervalMs: 300000
currency: CNY
prices:
deepseek-flash:
cacheHit: 0.04
cacheMiss: 2
output: 8
peak: { cacheHit: 0.04, cacheMiss: 2, output: 8 }
offPeak: { cacheHit: 0.02, cacheMiss: 1, output: 4 }
deepseek-v4-pro:
cacheHit: 0.3
cacheMiss: 9
output: 27
peak: { cacheHit: 0.3, cacheMiss: 9, output: 27 }
offPeak: { cacheHit: 0.15, cacheMiss: 4.5, output: 13.5 }
deepseek-chat: { cacheHit: 0.1, cacheMiss: 1, output: 2 }
deepseek-reasoner: { cacheHit: 1, cacheMiss: 4, output: 16 }
- id: dsh-credits
config:
providerQuotas:
- providerId: deepseek-official
enabled: true
sourceType: template
templateId: deepseek
thresholdMode: value
warningThreshold: 2.0
dangerThreshold: 0.5
refreshIntervalMs: 300000
currency: USD
prices:
deepseek-flash:
cacheHit: 0.006
cacheMiss: 0.3
output: 1.2
peak: { cacheHit: 0.006, cacheMiss: 0.3, output: 1.2 }
offPeak: { cacheHit: 0.003, cacheMiss: 0.15, output: 0.6 }
deepseek-v4-pro:
cacheHit: 0.042
cacheMiss: 1.26
output: 3.78
peak: { cacheHit: 0.042, cacheMiss: 1.26, output: 3.78 }
offPeak: { cacheHit: 0.021, cacheMiss: 0.63, output: 1.89 }
prices 是「当前 currency 下每 1M token」的单价。V4 / V4.1 可写 peak / offPeak(高峰 / 低谷)。内置 deepseek-flash / deepseek-v4-flash / deepseek-v4-pro / deepseek-v4-flash-vision-exp 如果只有三个刊例字段,插件仍按内置时间表计价(兼容旧配置);配置值恰好等于某段历史官方价时也会继续按时间表重算,只有用户手改过的峰谷 / 单价才作为自定义覆盖。自行添加的模型只写三字段则全天按该价计,等效峰谷倍率 1。高峰为北京时间周一至周五 09:00–12:00、14:00–18:00,其余时段(含周末全天)为低谷。DeepSeek 账户的 CNY / USD 是两套独立钱包:底部会列出选定货币,以及其它仍有余额的钱包;悬停卡片列出全部钱包。计价货币只影响本会话/累计估算和状态灯,不会把其它钱包藏掉。计价仅支持官方提供的 CNY / USD 两套价格,不做汇率换算;旧版 EUR 实际复用了 USD 数值,升级后会按 USD 显示。CNY / USD 各自照官方价目列出:V4.1 Flash 低谷 $0.003 / $0.15 / $0.60、高峰 $0.006 / $0.30 / $1.20;V4 Flash(含 vision-exp)低谷 $0.007 / $0.22 / $0.66、高峰 $0.014 / $0.44 / $1.32,V4 Pro 低谷 $0.022 / $0.66 / $1.98、高峰 $0.044 / $1.32 / $3.96。时间线:V4 峰谷自 2026-08-17 00:00 起;V4.1 Flash 自 2026-09-10 12:00 起。历史用量始终按该笔发生的时间点计价。没有精确价表的 DeepSeek 新模型会按名字回退:含 flash → 默认 Flash,含 pro → 默认 Pro,其它 deepseek* → 默认 Flash;本会话消耗卡片会在模型名后显示黄色感叹号并提示回退到了哪个默认价。完全没有可回退定价的模型(例如 glm)也会列出,金额显示“无法计算”。
设置页已经覆盖常用配置。只有批量维护、版本控制或特殊解析时才建议手写 providerQuotas:
- id: dsh-credits
config:
providerQuotas:
- providerId: my-provider
enabled: true
sourceType: custom
source:
id: quota-my-provider
name: My Plan
kind: metric
request:
method: GET
url: https://example.com/quota
dshProvider: my-provider # 复用这个 DSH 供应商的 Key
authStyle: bearer
response:
metrics:
- key: remaining
label: 剩余额度
calculation: direct
valuePath: $.data.remaining
totalPath: $.data.total
unit: USD
aggregate: value
scale: 1
offset: 0
resetsAtPath: $.data.resetsAt
自定义 HTTP 支持直接取「剩余」,也支持用「总额 - 已用」计算剩余。OpenRouter 已是内置模板,不需要再写代理脚本。
请求鉴权支持:
Bearer、Authorization: Token、Basic Auth、任意请求头、Cookie、URL 查询参数application/x-www-form-urlencoded 请求体credentials.set 只写保存;设置页和配置 API 只显示「已设置」,不会回显原值,再次填写即覆盖x-subject-id响应映射支持普通点路径、数组下标和 [*] 通配符;数组可取第一项、求和、计数、最小值或最大值,最后再应用乘数与加减偏移。例如 $.data.wallets[*].remaining 配合「求和」可汇总代金券列表。当前每个供应商绑定只请求一个 URL;现金与代金券若来自两个接口,暂时不能在同一绑定中组合请求。
硅基流动未提供内置模板,可使用登录后的网页接口配置自定义 HTTP。以下示例只说明字段结构,不应把真实 Cookie 提交到仓库:
- id: dsh-credits
config:
providerQuotas:
- providerId: siliconflow-cn
enabled: true
sourceType: custom
source:
id: quota-siliconflow-cn
name: 硅基流动-国内额度
kind: metric
request:
method: GET
url: https://cloud.siliconflow.cn/walletd-server/api/v1/subject/profile/peek
credentialMode: direct
authStyle: cookie
headers:
x-subject-id: <当前账号的 subject id>
response:
metrics:
- key: remaining
label: 剩余额度
calculation: direct
valuePath: $.data.financialInfo.balance
totalPath: $.data.financialInfo.recharged
unit: CNY
aggregate: value
scale: 1e-12
offset: 0
页面配置时,将完整 Cookie 填入凭证输入框,x-subject-id 放在附加请求头。先测试并确认实际返回字段;如果接口返回的金额使用 10^-12 为单位,就把换算乘数设为 1e-12。网页接口及字段可能调整,Cookie 过期后需要重新填写。代金券接口与现金余额是两个请求,当前版本不能自动合并。
浏览器只读本地缓存,不直连上游:
| 路径 | 作用 |
|---|---|
GET /query-credits |
账户额度缓存。响应里同时带所有已启用额度源的 views;?source= 只决定顶层摊平哪一套,?force=1 强刷 |
GET /query-credits/spend?range=today |
跨会话累计消耗。range 可为 today / yesterday / week / month / custom;自定义时再带 from、to(YYYY-MM-DD 或 ISO) |
GET /query-credits/config |
读当前配置 |
POST /query-credits/config |
保存配置并立即生效 |
POST /query-credits/test-connection |
使用当前供应商草稿测试模板或自定义 HTTP,并返回可选字段或脱敏后的错误诊断 |
本会话花费由 queryCreditsCost 投影折叠 Session v2 的 assistant/message / assistant/attempt settlement(每笔带事件时间),重试产生的实际用量也会计入,并按该笔发生时的北京时间峰谷价计价;前端切货币时仍按各自行情重算,不会用“此刻”的单价覆盖早上的高峰用量。TPS 由 liveTokenUsage 计算:从 settlement 压缩流还原“首个输出 token → 最后一个输出 token”的时间窗,配合 provider 精确 usage 得到该步平均输出速度。当前步尚未算出时沿用上一步的数值并置为斜体,本步结算后换成新值并恢复正体。累计消耗同样计入失败与重试尝试、按事件时间计价,并落盘到 $DSH_HOME/storages/dsh-credits-spend.json。胶囊位置和所选时间范围记在浏览器 localStorage。
密钥走 Harness credentials,默认不写进配置文件。
迁移到 DSH Session v2(dsh 0.1.3-alpha.2 起);不再兼容旧版会话事件。
assistant/message / assistant/attempt settlement 读取精确 usagedeepseek-flash 内置定价deepseek-flash / deepseek-v4-flash / deepseek-v4-flash-vision-exp 自 2026-09-10 12:00(北京时间)起按 V4.1 Flash 新表计费:CNY 低谷 0.02 / 1 / 4、高峰 0.04 / 2 / 8;USD 低谷 0.003 / 0.15 / 0.60、高峰 0.006 / 0.30 / 1.20flash → 默认 Flash,含 pro → 默认 Pro,其它 deepseek* → 默认 Flash;本会话消耗卡片在模型名后标出黄色感叹号并提示所用回退定价glm)仍会列出,金额显示“无法计算”deepseek-v4.1-flash-expires-on-0910 不再内置schema / view 字段和已移除的 dsh-client-runtime 注入dsh-credentials peer dependency 更新到 0.1.3-alpha.2阈值与查询频率全面改为供应商级独立配置,移除全局「阈值与刷新」设置卡。
providerQuotas 保存opencode-go/deepseek-v4-flash额度查询重构为供应商级配置,并扩展自定义 HTTP、诊断和模型计价能力。
deepseek / opencode-go 抽象为额度源适配器注册表balance / usage / metrickind 渲染,不再写死 opencode-godeepseek-v4-flash-vision-exp 定价,恢复官方默认价不会删除自定义模型适配 dsh 0.1.1-rc.1 的新版会话投影接口。
wire 视图设置页改成多张可折叠卡片,截图同步换成当前界面。
悬停双栏卡片改成响应式:字号随卡片宽度缩放,窄窗口时两列改上下叠,主标题不再被挤换行。
适配官方设置页,不再用输入框旁边的齿轮。
¥ 的硬币普通 git push 不会发包。 只有推送符合 v* 的 tag(例如 v0.4.0)才会触发 .github/workflows/publish.yml。
第一次发布前:
dsh-credits 目前可用)。NPM_TOKEN,值贴刚才的 token。不要写进代码或 README。package.json 的 version 与即将打的 tag 一致后:git tag v0.4.0
git push origin v0.4.0
之后 Actions 会执行 npm publish --provenance --access public。发布成功即可:
dsh plugin --profile web add dsh-credits
npm test
curl http://127.0.0.1:3080/query-credits
curl http://127.0.0.1:3080/query-credits/spend?range=today
curl http://127.0.0.1:3080/plugins/dsh-credits/client.js
src/index.js(ESM,零构建)client/client.js(手写 __ModuleLoader__ 工厂)。改完需重启 dsh webnpm test(零依赖冒烟)Q: 插件怎么知道查的是谁的额度?
A: 插件先根据当前模型的 DSH 供应商 ID 找到它自己的 providerQuotas 绑定。内置模板默认复用该供应商保存的 Base URL 与 Key;自定义 HTTP 则按页面选择使用直接凭证、DSH 供应商 Key、凭证引用或无鉴权。Key 不会发给浏览器。
Q: 状态灯规则?
A: 每个供应商使用自己的 warningThreshold / dangerThreshold。DeepSeek 按余额金额对比,OpenCode Go 按剩余额度百分比对比;未填写时使用该模式的默认值。🟢 ≥ 预警线;🟡 告急线~预警线;🔴 < 告急线或接口不可用。
Q: 切模型后底部读数会跟着变吗?
A: 会。插件按当前模型的 DSH 供应商 ID 读取它自己的 providerQuotas 绑定;没配置或单独关闭时不显示额度,不会回退到其它账号。
Q: “自动识别”去哪了?
A: 它现在只是后台默认逻辑,不再是页面选项。识别成功时会直接显示匹配到的内置模板,你仍可修改模板;识别失败时使用自定义 HTTP 配置。
Q: 一个自定义供应商能同时查询现金余额和代金券两个接口吗?
A: 当前不能。一个供应商绑定只发送一个 HTTP 请求,可以在同一个响应内配置多个指标或汇总数组;来自两个不同 URL 的数据暂时不能合并。
Q: 8 月 17 日峰谷价会自动切吗?
A: 会。北京时间 2026-08-17 00:00 之后,V4 Flash / Pro / Flash Vision Exp 在周一至周五 09:00–12:00、14:00–18:00 按高峰价;工作日其余时段及周末全天按低谷价。
Q: 9 月 10 日的 V4.1 Flash 新价会自动切吗?
A: 会。北京时间 2026-09-10 12:00 起 deepseek-flash / deepseek-v4-flash / deepseek-v4-flash-vision-exp 按 V4.1 Flash 新价计费。历史样本始终按该笔发生的时间点计价。
Q: 用了官方还没收录 / 不存在的模型(例如 deepseek-v5-flash、glm)会怎样?
A: DeepSeek 系新模型按名字回退到默认 Flash / Pro 定价,并在本会话消耗卡片里用黄色感叹号标出回退到了哪个价;完全无法回退的模型(例如 glm)仍会列出,金额显示“无法计算”。需要精确金额时可在设置里为对应模型补一条自定义单价。
Q: TPS 多久刷新一次?数字为什么有时候是斜体?
A: 每一步刷新一次,显示该步的平均输出速度(时间窗取压缩流里“首个输出 token → 最后一个输出 token”,不含收尾等待)。斜体表示“这不是当前这步的最终数值”——当前步还在生成、尚未算出时先显示上一步的数值并置为斜体,本步结算后换成新值并恢复正体。
Q: 官方调价了怎么办?
A: 设置 → 模型单价里有「检查官方定价」按钮:抓官方定价页与内置表比对,把有差异的项列为候选,勾选后写入草稿,保存前可以再核对。内置表本身会随插件版本更新。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。