dsh-opencode-go-meter
DeepSeek Harness (dsh) 插件:在设置页侧边栏监测OpenCode Go订阅套餐剩余量与每个API Key的Token用量。
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 17, 2026
- Updated
- Aug 17, 2026
Introduction
dsh-opencode-go-meter
DeepSeek Harness Web GUI 插件:在设置页侧边栏新增 「OpenCode Go 用量」 分区,监测 OpenCode Go 订阅的套餐剩余量与每个 API Key 的 Token 用量。
核心功能
多维配额监控
- 三窗口进度条:实时展示 5 小时滚动 / 每周 / 每月 的已用百分比及重置倒计时。
- 智能告警:任一窗口使用率 ≥ 80% 时自动触发页面横幅提醒。
- 套餐识别:自动解析账号套餐类型(如
lite),支持通过配置自定义各套餐限额常量。
Per-Key 用量明细
- 全量字段:单 Key 维度展示请求数、输入/输出/推理/缓存读写 Token、总 Token 及费用 (USD)。
- 智能命名:优先显示官方
keyName,支持keyLabels映射覆盖,兼容多账号插件配置。 - 合计统计:自动汇总所有 Key 数据,支持按留存期(默认 90 天)聚合。
双数据源
- 官方明细(首选):配置 Auth Cookie 后,拉取 opencode.ai workspace 全端调用记录(含非 DSH 流量)。
- 本地估算(兜底):无 Cookie 时自动降级为 DSH 本机
llm/stream归因统计,UI 明确标识数据来源。 - 零查询启动:基于
overview.json快照机制,重启后秒开页面;仅在快照过期时后台静默刷新,杜绝加载卡顿。 - 后台自动同步:独立于页面运行(默认 5min/次),支持增量同步与历史全量回填,确保数据连续性。。
安装
方式一:pnpm 管理(推荐)
dsh plugin --profile web add ./dsh-opencode-go-meter
方式二:手动安装
- 将
dsh-opencode-go-meter目录复制到$DSH_HOME/profiles/web/node_modules/路径下 - 编辑
$DSH_HOME/profiles/web/cordis.patch.yml,追加以下配置:
- insert:
- id: opencode-go-meter
name: 'dsh-opencode-go-meter'
配置完成后重启 dsh web,主机侧与客户端 bundle 即可生效。
配置项
在 cordis.patch.yml 的插件条目下通过 config 字段配置,完整参数如下:
- insert:
- id: opencode-go-meter
name: 'dsh-opencode-go-meter'
config:
baseUrl: https://opencode.ai/zen/go/v1/usage
timeoutMs: 8000
quotaCacheMs: 60000
recordsSyncMs: 60000
autoSyncMs: 300000 # 后台自动同步间隔(毫秒),设为 0 关闭
fullSyncMaxPages: 1000 # 全量回填最大页数(每页 50 条)
fullSyncMaxMs: 900000 # 单次全量回填总时长上限(毫秒),超时中止、下次续跑,0 为不限制
syncAwaitMs: 8000 # overview/refresh 接口等待同步完成的最长时间,超时则先返回已有数据
snapshotMaxAgeMs: 300000 # 本地快照有效期(毫秒);有效期内打开页面直接读快照,不发网络请求,0 表示始终使用快照
apiKey: '' # 也可通过凭据 OPENCODE_GO_API_KEY 或 opencode auth.json 读取
authCookie: '' # 也可通过凭据 OPENCODE_GO_AUTH_COOKIE 或页面内粘贴录入
workspaceId: '' # 留空则自动解析第一个工作区
providerFilter: opencode # 本地归因仅统计 provider 路由包含该字符串的调用
alertThreshold: 80 # 告警阈值(百分比)
retentionDays: 90 # 本地数据留存天数
keyLabels: {} # 可选:keyID 到显示名的映射,优先级最高,例如 { key_xxx: "我的主力 Key" };也会自动读取 opencode-go-multi-auth 的账号配置
planLimits: {} # 可选:按套餐自定义额度展示,例如 { lite: { rolling: "$12", weekly: "$30", monthly: "$60" } }
凭据解析优先级
表格
| 凭据类型 | 解析顺序 |
|---|---|
| API Key(配额查询用) | config.apiKey → 凭据项 OPENCODE_GO_API_KEY → ~/.local/share/opencode/auth.json |
| auth cookie(明细查询用) | config.authCookie → 凭据项 OPENCODE_GO_AUTH_COOKIE → 页面内保存的 $DSH_HOME/plugins/opencode-go-meter/cookie.txt |
数据说明
- 配额为账号维度:同一 OpenCode Go 账号下所有 API Key 的配额占比一致;单 Key 维度仅展示用量明细,官方记录按
keyID分组统计,本地数据按 provider 路由分组。 - 总 Token 计算规则:总 Token = 输入 Token(含缓存读)+ 输出 Token + 推理 Token;缓存写 Token 单独列示,不计入总 Token。
- 剩余额度展示:官方接口仅返回已用百分比与重置时间,不返回绝对 Token 数值;额度默认使用展示常量,可通过
planLimits按套餐自定义(默认值为 $12 / $30 / $60)。 - 合计数据范围:默认统计最近 90 天数据。首次运行会自动回填官方保留的历史记录(实测官方仅保留约 2–4 周),后续按分钟级增量累积;90 天为本地数据的裁剪上限,不代表可回填的历史时长。
- 套餐标识:从用量记录的
enrichment.plan字段解析(如lite),仅用于展示与额度映射,不影响统计逻辑。
技术实现与文件结构
纯 ESM 模块,无需构建步骤,为 Host + Client 双面插件。
表格
| 文件 | 职责 |
|---|---|
index.js | 主机侧:实现 OpencodeUsageGateway 远程服务,提供 overview /refresh/backfill /saveCookie/clearCookie 接口;管理后台自动同步定时器 |
local-meter.js | 本地用量归因:基于 llm/stream waterfall 链路统计,使用 JSONL 存储,作为官方数据的兜底方案 |
typert.host.js | 手写 Typert 主机接口清单,开启 zod 严格校验 |
client.js | 客户端 bundle:实现设置页分区 UI,包含配额卡、明细表格、合计行、来源标识、刷新 / 回填按钮、告警提示、Cookie 管理 |
package.json | 双面插件声明:包含 main、exports["./client"]、exports["./typert"] 与 dsh.client 字段 |
数据统一存储在 $DSH_HOME/plugins/opencode-go-meter/ 目录下:
records.jsonl:官方用量记录local.jsonl:本地统计样本cookie.txt:Cookie 存储文件(权限 0600)overview.json:最近一次查询快照(权限 0600)meta.json:回填标记与同步时间记录(权限 0600)
已知局限与稳健性设计
- 接口未公开:官方 API 无文档且可能变动,插件采用防御式解析,失败时自动回退本地数据并提示。
- 防卡死机制:
- 所有网络请求均有硬性超时 + Abort 保护。
- 页面加载设 30s 全局超时,刷新时保留旧数据并显示 Loading 态。
overview/refresh超过syncAwaitMs即返回当前数据,同步任务转入后台。
- Cookie 有效期:401 错误时自动提示重新粘贴;增量同步遇「整页重复」自动停止。
- 回填容错:全量回填受
fullSyncMaxMs保护,超时自动中止并在下次同步时断点续跑。
参考
- xiaoqi20/dsh-opencode-go-usage — DSH 插件结构模板(配额百分比)
- yphyphyph/opencode-go-gauge — server-fn 用量记录接口的逆向参考
License
MIT