dsh-opencode-go-multi-quota:把多个 OpenCode Go 账号的剩余额度摆在 DSH 输入框下方

前言

用 DeepSeek Harness 接 OpenCode Go 开发,常见的痛点是额度不透明:当前会话落在哪个账号上、这个账号 5 小时 / 每周 / 每月还剩多少,输入框旁边看不到,只能切到 OpenCode 控制台逐个确认。多开几个 provider 之后更难记清,额度耗尽常常要等到发送消息失败才发现。

dsh-opencode-go-multi-quota 就是针对这个问题的客户端插件。它由 jackgucarbon 维护,在 DSH composer 下方显示所有已配置 OpenCode Go 账号的剩余额度,并跟随当前会话的 provider 自动切换。

这是什么

一句话定位:DeepSeek Harness 的一个客户端插件,在 composer 下方汇总多个 OpenCode Go 账号的用量,并跟随会话 provider。仓库为 jackgucarbon/dsh-opencode-go-multi-quota,当前版本 1.1.0,许可证 MIT,星标为 0。它只解决「看额度」,不负责切换账号或转发凭据。

核心功能

下面介绍它已经实现的能力,均来自 README。

  • 多账号自动识别:从 llm-pi-ai.providers 读取配置,挑出所有形如 OpenCode Go 的 provider,插件代码里不写死账号数量。
  • 跟随会话 provider:使用会话作用域的 modelDirectories store,切换模型时参数条立即换成对应账号的额度。
  • 自适应布局:1 个账号用 320px 紧凑卡;2 个账号用 360px 双列矩阵;3 个以上用「当前账号卡 + 其他账号可展开行」,不会出现横向滚动。当前账号高亮,限流 标红。
  • 状态信息紧凑:每格显示剩余百分比、已用百分比、↻ 重置时间。当天重置只显示 HH:mm,其他日期显示 MM/DD HH:mm。
  • 分账号缓存:Host 为每个 provider 单独缓存 60 秒,单个账号失败不影响其他账号。
  • 浏览器侧不出现 key:凭据只在 Host 进程解析,页面只拿到百分比,不会下发密钥。

账号是怎么被发现的

每次请求时,Host 读取已加载的 @deepseek-ai/dsh-llm-pi-ai 入口及其 config.providers。一个 provider 会被纳入,当它有 apiKeyEnv,并且满足以下任一项:

1、provider id 以 opencode 开头;
2、baseURL 包含 opencode.ai;
3、apiKeyEnv 包含 OPENCODE。

apiKeyEnv 的值就是需要解析的凭据引用。只有已存储凭据记录、没有 apiKeyEnv 的 provider 不会被显示。

如果加载器配置读不到,Host 会退回到两个约定引用 OPENCODE_GO_API_KEY 和 OPENCODE_API_KEY。没有任何匹配 provider 时显示 “No OpenCode accounts found”,而不是一直转圈。

安装与启用

该包只从 GitHub 分发,没有发布 npm 版本。推荐在 DSH Web UI 中打开 Plugins → Install,用下面的 GitHub spec 安装:

github:jackgucarbon/dsh-opencode-go-multi-quota

Plugin Manager 会把 bundle 加入 profile 并重新加载。

CLI 安装只会添加包依赖,还需要自己把 bundle 加进 dsh.profile.bundles。命令如下:

dsh plugin --profile desktop add github:jackgucarbon/dsh-opencode-go-multi-quota

随后在配置里确认 bundles 列表:

{
  "dsh": {
    "profile": {
      "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-opencode-go-multi-quota"]
    }
  }
}

安装后如果 Host 端没有自动重载,需要重启 DSH,然后刷新页面。

Host API

插件在 Host 侧注册了一个同源只读路由,客户端通过它取额度:

请求 响应
GET /plugin/opencode-go-multi-quota 默认 provider(第一个被发现的,或 opencode-go)
GET /plugin/opencode-go-multi-quota?provider=opencode 指定名称的一个 provider
GET /plugin/opencode-go-multi-quota?provider=all 所有发现的账号,附带 detected 标志
上述任一 URL 加 &refresh=1 跳过 60 秒缓存

上游接口是 GET https://opencode.ai/zen/go/v1/usage,使用 Bearer token。该调用是只读的,不消耗套餐额度。

典型用法

配置好账号后,正常在 DSH 里对话即可。插件注入到 composer 下方,默认展示第一个被发现账号的额度;在参数条切换模型时,modelDirectories 变化会驱动显示切换到对应 provider。有多个账号时,右侧可展开查看其他账号,当前账号一列高亮。

需要排查额度异常时,可以直接请求只读路由,例如取全部账号:

curl http://localhost:<端口>/plugin/opencode-go-multi-quota?provider=all&refresh=1

加 refresh=1 可绕过 60 秒缓存,立刻看到当前值,适合验证某一个账号是否刚被耗尽。

适用场景与注意

适合已经在 DSH 里配置了一个或多个 OpenCode Go provider、希望随时看到剩余额度的开发者。它依赖标准 Web 客户端里的 @deepseek-ai/dsh-client-ui-model-selection,因此需要使用对应的客户端 bundle。

需要注意三点。

1、插件以当前 dsh 进程的权限运行,安装前应先查看源码与许可证(MIT)再决定是否启用。
2、额度路由是同源只读的,但没有鉴权,且 refresh=1 会绕过缓存。不要把 DSH Web 服务暴露到不可信网络,前面加代理或鉴权层。
3、自动发现规则刻意放宽。如果存在一个不是 Go 的 OpenCode provider 且凭据引用含 OPENCODE,它可能被纳入并显示失败。这时可以收窄规则,或把它从 llm-pi-ai.providers 里移除。

兼容性方面,插件基于 DeepSeek Harness 0.2.1-rc.5 构建并测试,engines.dsh 约束为 >=0.2.1-rc.5 <0.3.0。它使用客户端 modelDirectories 服务和 Host 侧 loader、credentials、webServer 服务,这些服务一旦有破坏性变更,插件就需要更新。README 提到测试用假 key 和 mock fetch,不需要真实凭据即可运行 npm test。

结尾

这个插件的价值在于把分散在多个账号上的剩余额度集中到一个固定位置,并跟随当前会话 provider,省去反复开控制台确认的动作。它只做显示和只读查询,凭据不出 Host 进程。

目录页:https://www.skillhub.cn/plugins/jackgucarbon/dsh-opencode-go-multi-quota

GitHub:https://github.com/jackgucarbon/dsh-opencode-go-multi-quota

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜