xinman100
dsh-opencode-go-usage-plus
DeepSeek Harness 插件:OpenCode Go 用量与花费实时展示(配额 + 官方日/月/累计统计,侧边栏悬停面板 + 设置页卡片)| DSH plugin: OpenCode Go quota & spend dashboard with official usage.list stats
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-plugin-opencode-go
DeepSeek Harness 插件 —— OpenCode Go 套餐用量与花费实时展示
在 DSH Web 界面实时展示 OpenCode Go 的配额消耗(滚动/周/月)与官方账户级花费统计(今日/本月/累计):侧边栏底部一个「Go」图标,悬停即看统计面板;设置页有完整详情卡片。
中文 | English

✨ 功能
| 能力 | 说明 | |
|---|---|---|
| 🎯 | 侧边栏图标 + 悬停面板 | 左下角「Go」胶囊图标(状态点随本月配额变色:≥70% 黄、≥90% 红);悬停弹出统计面板,离开即关 |
| 🍩 | 配额进度 | 滚动 / 本周 / 本月三条进度条:已用百分比 + 状态色 + 重置倒计时 |
| 📅 | 用量统计 | 滚动用量 / 每周用量 / 每月用量(窗口与配额一致:5h / 7d / 30d,结束于重置时刻):费用($)+ 总 token + 请求数 + 重置剩余时间;另有总计行(总费用 + 总 token) |
| ⚙️ | 设置页详情卡片 | 设置 →「OpenCode Go 用量」:配额条、统计、密钥来源提示、凭据配置表单、立即刷新 |
| 🔑 | 密钥零存储 | API Key 通过 DSH 凭据服务原生读取(.credentials.yaml / 环境变量 / .env,与模型 provider 同源),插件不复制、不落盘 |
| 🔄 | 自动刷新 | 宿主每 60 秒轮询配额接口;官方明细 15 分钟缓存;浏览器每 30 秒读本地快照 |

🗄️ 数据来源与口径
| 数据 | 接口 | 认证 | 说明 |
|---|---|---|---|
| 配额百分比(优先) | https://opencode.ai/workspace/<wid>/go 仪表盘 HTML 解析(usagePercent + resetInSec) | 浏览器 auth Cookie | 滚动 / 周 / 月实时用量 % + 重置倒计时(配置官方凭据后使用,同 GoGauge 口径) |
| 配额百分比(兜底) | GET https://opencode.ai/zen/go/v1/usage | Bearer <API Key> | 未配置官方凭据时的配额来源 |
| 花费明细 | https://opencode.ai/_server(server-fn usage.list) | 浏览器 auth Cookie | 账户级逐请求官方计费(cost 单位 1e-8 美元),与官网账单一致、跨设备 |
- 窗口口径:滚动 = 5 小时、每周 = 7 天、每月 = 30 天,均以对应配额窗口的重置时刻为终点聚合 usage.list 记录(与配额条同一窗口,可对照百分比与金额);配额不可用时回退为 now-5h / now-7d / 自然月
- 总 token = 输入 + 输出 + 推理 + 缓存读 + 缓存写(与 GoGauge 的「输入(含缓存命中)+ 输出 + 推理」口径一致)
- 配额与明细是两种不同计量口径:配额百分比按用量单位计(部分模型限时 2×),明细为逐请求美元计费,二者不可直接换算对比
- 明细不可用时(未配置/凭据过期/网络失败)配额部分照常工作,互不影响
- 抓取上限 5000 页(约 25 万条),超出时面板标注「数据截断」
🚀 安装
插件为纯 JS(无需构建),lib/ 即发布产物。
方式 A:git clone + 目录链接(推荐)
git clone https://github.com/xinman100/dsh-opencode-go-usage-plus
$plugin = (Resolve-Path './dsh-opencode-go-usage-plus').Path
foreach ($profile in @('web', 'desktop')) {
$dir = Join-Path $HOME ".dsh/profiles/$profile/node_modules"
New-Item -ItemType Directory -Force $dir | Out-Null
New-Item -ItemType Junction -Path (Join-Path $dir 'dsh-plugin-opencode-go') -Target $plugin | Out-Null
}
在 ~/.dsh/profiles/<profile>/cordis.patch.yml 注册 loader 条目:
- insert:
- id: opencode-go-usage
name: dsh-plugin-opencode-go
config:
refreshMs: 60000
⚠️ 该插件没有
dsh.bundlemanifest(纯插件模块),不要把它加进 profilepackage.json的dsh.profile.bundles列表——dsh-app-boot会对缺失dsh.bundle的 bundle 报硬错误导致启动失败。
重启 DSH(Web 页面 Ctrl+F5 刷新加载 client)。
方式 B:dsh plugin 命令
dsh plugin --profile web add link:/path/to/dsh-plugin-opencode-go
# 再手动在 profile 的 cordis.patch.yml 插入上面的 loader 条目
⚙️ 配置
插件行配置
| 字段 | 默认值 | 说明 |
|---|---|---|
credentialRef | OPENCODE_GO_API_KEY | 从 DSH 凭据服务解析的密钥名 |
baseUrl | https://opencode.ai | 配额 API 基地址 |
refreshMs | 60000 | 宿主轮询间隔(毫秒,下限 5000) |
官方花费明细凭据(可选,仅需一次)
「日/月/累计」统计需要浏览器 auth Cookie(与 Xenia 的 dsh-opencode-go-usage 面板共用同一配置文件):
- 浏览器登录
opencode.ai→ F12 → Application → Cookies → 复制auth值 - 打开
https://opencode.ai/workspace/<你的工作区>/usage,复制地址栏的wrk_xxx - 在设置页「OpenCode Go 用量」卡片粘贴两者 → 「保存并抓取」
凭据保存在 ~/.config/dsh-opencode-go-usage.json(仅本机)。未配置时配额功能不受影响。
📡 API
GET /api/opencode-go/usage
本地快照(配额 + 统计):
{
"ok": true,
"usage": { // 配额(官方 zen/go/v1/usage)
"rolling": { "percent": 1, "status": "ok", "resetsAt": "..." },
"weekly": { "percent": 62, "status": "ok", "resetsAt": "..." },
"monthly": { "percent": 59, "status": "ok", "resetsAt": "..." }
},
"fetchedAt": 1755,
"keySource": "file",
"credentialRef": "OPENCODE_GO_API_KEY",
"quotaSource": "dashboard", // dashboard(仪表盘解析)| api(Bearer 兜底)
"stats": { // 官方 usage.list 统计(未配置时为 null)
"rolling": { "requests": 964, "cost": 1.52, "tokens": 327041613, "tokensInput": 1636221, "tokensOutput": 530041, "tokensReasoning": 0, "tokensCacheRead": 324600841, "tokensCacheWrite": 0 },
"weekly": { "requests": 7217, "cost": 13.21, "tokens": 1931414647, "tokensInput": 22044225, "tokensOutput": 5827537, "tokensReasoning": 0, "tokensCacheRead": 1901419885, "tokensCacheWrite": 0 },
"monthly": { "requests": 11095, "cost": 23.29, "tokens": 2748490805, "tokensInput": 55002423, "tokensOutput": 9075425, "tokensReasoning": 0, "tokensCacheRead": 2681730957, "tokensCacheWrite": 0 },
"total": { "requests": 11147, "cost": 23.29, "tokens": 2752232540, "tokensInput": 55371480, "tokensOutput": 9109677, "tokensReasoning": 0, "tokensCacheRead": 2685735383, "tokensCacheWrite": 0 },
"fetchedAt": 1755,
"truncated": false,
"skippedPages": 0,
"records": 11147
},
"statsConfigured": true,
"statsError": null // { type, message }:NotConfigured / NoRecords / StatsError
}
GET /api/opencode-go/usage/config
{ "ok": true, "configured": true }
POST /api/opencode-go/usage/config
// body
{ "authCookie": "Fe26.2**...", "workspaceId": "wrk_xxx" }
// 立即返回;官方明细抓取在后台进行,卡片下一次轮询即可看到结果
🔒 隐私与安全
- API Key 只经 DSH 凭据服务读取,插件不保存、不打印、不外传密钥
authCookie 仅保存在本机~/.config/dsh-opencode-go-usage.json,不出本机- 网络请求仅发往
opencode.ai官方接口,不向任何第三方发送数据
❓ 常见问题
| 现象 | 原因 / 处理 |
|---|---|
配额正常但「日/月/累计」提示 NotConfigured | 尚未配置官方凭据,按上文「官方花费明细凭据」粘贴 authCookie + workspaceId |
提示 NoRecords | authCookie 无效或已过期:重新登录 opencode.ai 后复制最新 auth 值 |
| 「累计」与配额百分比对不上 | 口径不同:累计是全部历史美元明细;配额是滚动/周/月窗口用量,二者不可直接对比 |
| 未找到密钥 | 在 DSH 模型设置(Models)配置 OPENCODE_GO_API_KEY,或设置同名环境变量 |
🙏 致谢
- 插件基础(凭据同源读取 + 配额轮询 + 设置页)源自 CangShui/dsh-opencode-go-usage(MIT)
- 官方
usage.listserver-fn 协议与统计口径参考 Xenia0922/dsh-opencode-go-usage - 仪表盘配额解析(
usagePercent+resetInSec)与窗口口径参考 yphyphyph/opencode-go-gauge(GoGauge)
📋 更新日志
见 CHANGELOG.md。