dsh-opencode-routing: Unified OpenCode Account Pool, Quota Routing, and Usage Dashboard

前言

在 DeepSeek Harness(DSH)里走 OpenCode Go 等推理 provider 时,常见问题是:单个 API Key 额度用尽或鉴权失败后,对话要手动换号;官方 /inference/go/v1/usage 只给账户级滚动/周/月百分比,不按模型拆分,而套餐本身对每个模型单独计量。若再拆成「路由插件」和「用量插件」两个包,Settings 里也要维护两处。下面介绍社区插件 dsh-opencode-routing(维护者 2869949486,GitHub:2869949486/dsh-opencode-routing),它把原先的 dsh-opencode-quota-router 与 dsh-opencode-usage-settings 合并为一个 npm 包,在单一 Settings 页「OpenCode 账户与用量」里同时管理账户池、自动 failover、配额路由,以及按账户/按模型的用量展示。

这是什么

dsh-opencode-routing 是 DSH 的模型推理类插件:OpenCode 多账户池、A→B 自动切换、配额路由,外加 per-account / per-model 用量看板,全部集中在一个 Settings 区块。客户端侧是一个 settings.section,默认每 60 秒刷新;服务端暴露两个 HTTP 端点:GET /opencode-usage.json(用量,?refresh=1 强制刷新)和 GET|POST /opencode-quota-router.json(账户池与路由)。插件自带 cordis.patch.yml,声明 opencode-go / opencode-free provider,并插入单一配置项 id: opencode-router。

账户池与自动 failover

账户池顺序即使用顺序;任意时刻只有一个「当前」账户,其密钥会写入 provider 读取的凭证引用(默认 OPENCODE_API_KEY)。切换账户无需改 provider 配置:resolveApiKey 在 agent/request 钩子之后、每次流式调用时执行。

  1. A 用尽、B 接管:在官方额度确认耗尽后遇到 QUOTA / ACCOUNT_QUOTA / 429,或遇到鉴权类错误(AUTH、INVALID_CREDENTIAL、MISSING_CREDENTIAL、ACCOUNT_SIGN_IN_REQUIRED、CLIENT_UPGRADE_REQUIRED)时,当前账户会被标记不可用(额度窗口重置前,或鉴权失败默认 30 分钟),路由切到下一个启用账户并重试同一步,不会降级整轮对话。
  2. 单模型隔离:若仅某一个模型超 allowance 而池内仍有预算,默认只隔离该模型 30 分钟,其它模型继续走套餐。
  3. 整池用尽:才走路由里配置的 fallback(示例默认为 DeepSeek 账户);每 30 分钟(或滚动窗口重置时)用零 token 的 GET /inference/go/v1/usage 探测,满足条件后自动回到 OpenCode 套餐。
  4. 重置:Settings 中「重置封禁标记」会清除所有用尽/鉴权标记并立即回到账户池,不改动账户与密钥本身。

用量看板

官方 usage 接口只返回四舍五入的 rolling / weekly / monthly 百分比,没有按模型拆分;而 Go 套餐对每个模型单独计量(5 小时约等于月 allowance 的 20%,周 50%,月 100%)。页面因此呈现两套数字:

  • 官方百分比:每个账户一行,直接来自 API,包含其它客户端与其它机器上的真实用量。
  • 按模型金额:本地估算。扫描 $DSH_HOME/sessions 最近 40 天,只统计 provider 以 opencode 开头的 assistant/message 事件,按公开价目(含 DeepSeek 峰时 2×)计价;其它工具产生的用量没有本地记录。

「查看用量」打开单账户对话框,展示三个窗口、重置时间与探测结果(只探测该账户,不切换模型)。峰时卡片并排展示官方 API 与 OpenCode 两套日历、当前时段及距切换的小时数(一位小数)。模型卡片有能力标签与 tooltip;页头链到 OpenCode Console 订阅页。每个价格单元格展示 cached-input、uncached-input、output 三行,便于对比缓存命中(绿色行)与官方 API 同 token 计费。

DeepSeek 非峰时为北京时间工作日 09:00–12:00、14:00–18:00 之外(含午休、夜间、周末及法定假日)半价;OpenCode 仅按 UTC 工作日 01–04、06–10 计峰,不遵循中国法定假日(维护者说明:Go 定价按 OpenCode 自身日程)。插件内置 2026–2031 中国法定假日表,仅在 usage.holidayAware: true 时用于官方侧估算,默认关闭。订阅价与 allowance 可用 usage.planPriceUsd / usage.planAllowanceUsd 覆盖。

UI 文案在 client.js 的 DICT 中,支持 zh、zh-tw、en 及 es / fr / de / pt / ja / ko / ru 等,浏览器语言优先。

安装与启用

在 DSH 环境中安装 npm 包(README 给出的命令如下,勿自行拼接 dsh plugin add github:...):

npm i dsh-opencode-routing

包内 cordis.patch.yml 示例片段如下。顶层键(如 usageUrl、apiKeyRef、probeIntervalMs)对两半配置共用;usage: 与 router: 子对象各自有 path,不能共用一个扁平命名空间:

- insert:
    - id: opencode-router
      name: 'dsh-opencode-routing'
      config:
        usageUrl: https://opencode.ai/inference/go/v1/usage
        apiKeyRef: OPENCODE_API_KEY
        usage:
          path: /opencode-usage
          plan: go
        router:
          path: /opencode-quota-router
          routes:
            - primary: { provider: opencode-go, model: deepseek-v4.1-flash }
              fallback: { provider: deepseek-account, model: deepseek-flash }

package.json 声明引擎要求 dsh: ^0.2.0-rc.1,许可证为 MIT。

Settings API 与典型操作

通过 HTTP 可在不打开 UI 的情况下管理池子(路径由配置中的 usage.path / router.path 决定,默认示例如上)。

GET /opencode-quota-router.json 返回 {mode, reason, active, accounts[], quarantine[], routes[], lastFailure},账户密钥始终以 hint 掩码展示。POST 同一路径,body 为 {action, ...}:

action 参数 效果
add label?, key 创建账户(key ≥ 8 字符),存储并探测
update id, label? / enabled? / key? 重命名、启停、轮换密钥
remove id 删除账户及密钥(至少保留一个)
activate id 立即切换到该账户
move id, direction: up\|down 调整顺序
probe id? 探测全部或单个账户
reset — 清除用尽/鉴权标记并回到池内

GET /opencode-usage.json 返回 {plan, configuredPlan, detectedPlan, holidayAware, peak, usage, accounts[], activeAccount, models[], totals};加 ?refresh=1 会先拉取最新官方快照。

Settings 里可增删改账户、拖拽排序、探测连通性;「编辑密钥」通过 GET /opencode-quota-router.json?key=<account id> 预填当前密钥(仅本地端点)。打开页面只读快照,不会自动触发探测;「下次探测」默认可视化为 30 分钟倒计时。

适用场景与注意

适合:长期用 DSH 调用 OpenCode Go(或多账户轮换)、需要在额度/鉴权失败时自动切号并重试、又希望在同一页对照官方百分比与本地按模型估算成本的开发者。

注意:

  1. 插件以当前 dsh 进程权限运行,会读写会话目录与路由状态;安装前请阅读 仓库源码 与 MIT 许可证,自行评估密钥存储与本地 API 暴露范围。
  2. 按模型金额仅为本地估算,不能替代 OpenCode 账单;其它客户端产生的用量只体现在官方百分比行。
  3. 峰时/假日规则在 DeepSeek 官方与 OpenCode 之间不一致,对比价目时需理解插件文档中的说明,并按需开启 usage.holidayAware。
  4. DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

经过上面的步骤,可以把 OpenCode 多账户 failover、配额路由和用量看板收拢到一个 Settings 页,减少换 Key 与拆插件维护的成本。详情与更新以 GitHub README 为准:

  • 目录页:https://www.skillhub.cn/plugins/2869949486/dsh-opencode-routing
  • 仓库:https://github.com/2869949486/dsh-opencode-routing
羽毛球分组比赛记分
小程序二维码

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

Xiaoye