额度耗尽自动换 Key,实时查看套餐余额
34.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add whitelonng/dsh-opencode-go-pool该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 66 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dependency_conflict · 2026/10/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-opencode-go-pool(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 00:32:37
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 8 处,展示前 8 条)
- 写入本地文件pool.js:348
mkdirSync(dirname(this.stateFile), { recursive: true }) - 写入本地文件pool.js:350
writeFileSync(tmp, JSON.stringify(this.snapshot(), null, 2)) - 写入本地文件pool.js:351
renameSync(tmp, this.stateFile) - 读取本地文件pool.js:360
const raw = JSON.parse(readFileSync(this.stateFile, 'utf8')) - 读取本地文件models.js:155
const arr = JSON.parse(readFileSync(path, 'utf8')) - 写入本地文件models.js:172
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件models.js:174
writeFileSync(tmp, JSON.stringify(entries, null, 2)) - 写入本地文件models.js:175
renameSync(tmp, path)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-credentials@deepseek-ai/dsh-settings@deepseek-ai/dsh-llm@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/dsh-home-paths给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 多密钥池管理
- 配额耗尽自动切换
- 套餐用量面板
DeepSeek Harness 插件:多密钥池,配额用尽自动故障转移,附带 OpenCode Go 套餐用量面板
README
由 DeepSeek 最新模型翻译生成dsh-opencode-go-pool
DeepSeek Harness(DSH)插件:OpenCode Go 套餐的多 Key 池 —— 当前 Key 额度耗尽时自动、无感地切换到下一个 Key,并在设置页提供与官网一致的套餐余额管理卡片(5 小时滚动 / 每周 / 每月 已用·剩余·重置时间)。
- 每个 OpenCode Go 账号有独立的 5 小时滚动 + 每周 + 每月额度。DSH 官方供应商(dsh-llm-pi-ai 的 opencode-go 路由)每个供应商只能填一个 Key,额度耗尽后必须手动更换——本插件接管该路由,用 Key 池 + 自动故障切换解决。
- 余额数据来自 OpenCode 官方用量接口(与官网同源,见下文)。
展开完整文档(README 剩余 1 节)
dsh-opencode-go-pool
DeepSeek Harness(DSH)插件:OpenCode Go 套餐的多 Key 池 —— 当前 Key 额度耗尽时自动、无感地切换到下一个 Key,并在设置页提供与官网一致的套餐余额管理卡片(5 小时滚动 / 每周 / 每月 已用·剩余·重置时间)。
- 每个 OpenCode Go 账号有独立的 5 小时滚动 + 每周 + 每月额度。DSH 官方供应商(dsh-llm-pi-ai 的 opencode-go 路由)每个供应商只能填一个 Key,额度耗尽后必须手动更换——本插件接管该路由,用 Key 池 + 自动故障切换解决。
- 余额数据来自 OpenCode 官方用量接口(与官网同源,见下文)。
功能
| 功能 | 说明 |
| 🔄 自动切换 Key | 请求因额度耗尽(QUOTA)失败时,在同一次流式调用内静默换下一个 Key 重发,对话零感知;凭据失效(401/INVALID_CREDENTIAL)同样自动跳过 |
| 📊 套餐管理卡片 | 设置侧边栏「OpenCode Go 套餐池」页:每个 Key 的 5h 滚动 / 每周 / 每月 已用%·剩余%·重置倒计时,与官网一致 |
| 🎛 运行态管理 | 卡片内:立即切换、停用/启用、清除失效、新增/删除 Key(写入插件命名空间,带版本栅栏,无需改 yml) |
| ♻️ 自动复活 | 额度耗尽的 Key 在其 5h 窗口重置后(用量接口报告恢复)自动回到池中 |
| 🧭 无缝接管 | 接管 opencode-go 路由:删除「设置 → 模型」中的 opencode-go 行后自动完成,历史会话与模型选择器完全不变 |
| 🗂 模型选择 | 卡片内勾选该路由暴露哪些模型:「全部模型」跟随官方目录;自定义时未勾选的模型不出现在聊天模型下拉、也无法发起请求;默认折叠,点「展开」查看 |
| 📥 拉取最新模型 | 卡片内「拉取模型」从官方 models 接口抓取供应商最新模型列表;目录里还没有的新模型即时进入可选列表(按默认协议接入,勾选即可尝试) |
安装
dsh plugin --profile web add github:whitelonng/dsh-opencode-go-pool
重启 DSH(插件变更需重启生效)。随后:
1. 迁移:打开「设置 → 模型」,删除 opencode-go 供应商行(本插件会自动接管该路由;未删除时插件保持休眠并在卡片中显示引导)。
2. 配置 Key:打开「设置 → OpenCode Go 套餐池」→「Key 管理」,为每个账号添加一行(id 自动生成;label 为显示名;凭据引用填环境变量名,如 OPENCODE_GO_KEY_A)。
3. 填写密钥:把每个 Key 的明文写入凭据页(设置 → 模型 → 凭据,对应环境变量名),或 ~/.dsh/.credentials.yaml / 环境变量。明文 Key 永不进入插件配置、日志或任何 RPC 响应。
手工安装(等价步骤)
$DSH_HOME/profiles/web/cordis.patch.yml 加入插件行:
- id: opencode-go-pool
name: 'dsh-opencode-go-pool'
config:
route: opencode-go # 接管官方路由;冲突时休眠等待接管
keys: [] # 初始为空,由卡片管理(也可在此预置)
preemptAtPercent: 100 # B[OpenCodeGoPoolAdapter.stream]
B --> C[KeyPool 选择当前活动 Key跳过 exhausted/disabled/invalid/近耗尽]
C --> D[PiAiAdapter 发起请求凭据按引用经 credentials seam 解析]
D --> E{结果}
E -->|成功| F[正常流式返回]
E -->|额度耗尽 QUOTA| G{是否已输出内容?}
G -->|否| H[标记该 Key 耗尽轮换下一 Key]
H --> C
G -->|是(流中途)| I[轮换 Key 后上抛错误]
I --> J[llm-retry 按扩展策略开新一轮命中新 Key]
E -->|401 / 凭据失效| K[标记 invalid → 轮换]
K --> C
E -->|全部 Key 耗尽| L[向对话呈现明确额度错误]
M[用量网关 30s 轮询官方 /v1/usage] -.按用量避让与复活.-> C
N[设置页套餐池卡片] -.停用/立即切换/增删 Key.-> C
- 静默切换发生在同一次 stream() 内:额度错误在产出任何 token 前到达时,直接换 Key 重发,上层(agent loop)看到的是一次成功的流式回复。
- 流中途限额(已吐 token 后 429)无法静默重试;此时先轮换 Key 再上抛,插件同时把 QUOTA 加入该路由的可重试码(预算 = Key 数),dsh-llm-retry 会自动开新一轮命中新 Key。
- 路由接管:opencode-go 路由被 dsh-llm-pi-ai 持有时,插件休眠并监听 llm/adapters-updated,路由一释放即原子接管;老会话记录的路由 id 不变,历史对话无缝继续。
- 凭据:配置只存凭据引用名(apiKeyEnv),明文走 DSH 凭据 seam,每次请求按引用解析;解析失败大声报 MISSING_CREDENTIAL,绝不回落到无关的环境变量 Key。
- 模型选择:卡片勾选后写入 modelMode/models;适配器的 listModels 只返回勾选的模型(聊天模型下拉即时生效),resolveModel/stream 对未勾选模型返回明确的 UNKNOWN_MODEL。选择变化会重发 llm/adapters-updated,模型选择器无需重启即可刷新。
- 持久化:运行态(活动 Key / 耗尽 / 失效 / 停用)原子写入 $DSH_HOME/opencode-go-pool.state.json,重启恢复。
用量接口
GET https://opencode.ai/zen/go/v1/usage
Authorization: Bearer
返回三个窗口的 percent(0–100)与 resetsAt(ISO-8601):
{ "usage": { "rolling": {"status":"ok","percent":9, "resetsAt":"…"},
"weekly": {"status":"ok","percent":12,"resetsAt":"…"},
"monthly": {"status":"ok","percent":6, "resetsAt":"…"} } }
该接口未写入 OpenCode 公开文档,解析做了防御式处理:形状变动只影响卡片显示(降级为错误提示),不影响自动切换功能;usageBaseUrl 可配置。
配置项
| 键 | 默认 | 含义 |
| route | opencode-go | 接管官方路由;改为 opencode-go-pool 时注册自有路由(与官方并存,模型选择器需手动切换一次) |
| keys | [] | Key 列表:{id, label, apiKeyEnv};通常留空由卡片管理 |
| preemptAtPercent | 100 | 5h 滚动用量达到该百分比即主动避让;100 = 仅在失败时切换 |
| modelMode | all | all=暴露官方目录全部模型(新模型自动可用);custom=仅暴露 models 勾选的模型 |
| models | [] | modelMode=custom 时的模型 id 列表;卡片内「模型选择」勾选后写入 |
| usageBaseUrl | https://opencode.ai/zen/go/v1/usage | 用量接口地址 |
| modelsBaseUrl | https://opencode.ai/zen/go/v1/models | 「拉取模型」接口地址 |
| usageRefreshMs | 30000 | 卡片轮询间隔(host 侧另有 15s TTL 缓存) |
| timeoutMs | 15000 | 用量请求超时 |
与其他插件的关系
- 本插件覆盖 dsh-opencode-go-usage 的全部功能(多 Key 版),安装后可卸载后者。
- 与 dsh-llm-pi-ai 共存:接管模式下请删除其 opencode-go 行;pi-ai 的其他供应商不受影响。
开发
纯 ESM,零构建步骤:
- Host 半:index.js(插件 + 池适配器 + 接管)、pool.js(状态机)、usage.js(用量网关)、models.js(模型目录拉取)、typert.host.js(RPC 清单)
- 浏览器半:client.js(lazy-CJS bundle,window.__ModuleLoader__.load 格式)
- 测试:node --test test/.test.mjs(38 项:状态机 13、用量网关 7、cordis 烟测 8(接管协议与静默切换端到端)、真实服务集成 5(LlmRuntime 注册表/llm.stream 全链路/settings 写入/接管握手)、客户端 bundle 执行与渲染 5;缺少 harness 依赖时相关测试优雅跳过)
node --test test/.test.mjs
注意事项
- 多账号使用请自行确认符合 OpenCode 服务条款;本插件只提供技术能力。
- 全池耗尽时对话会收到明确的额度错误,卡片会全红显示;5h 窗口重置后自动恢复。
- 每 Key 每次静默重试会重复计费输入 token(额度失败本身不计费),成本上限 = 池大小 × 单请求。
许可证
MIT
验证记录(无 GUI 真实启动)
除 38 项测试外,插件已在真实 DSH host 中完成无 GUI 启动验证(dsh CLI + 一次性测试 profile):
DSH_HOME=/tmp/dsh-boot-test/home \
OPENCODE_GO_KEY_A=sk-test-placeholder-aaaa OPENCODE_GO_KEY_B=sk-test-placeholder-bbbb \
node $DSH_APP/node_modules/@deepseek-ai/dsh/lib/bin.js --profile test "ping"
预期输出(证明 agent 请求真实派发进池适配器并完成轮换):
dsh: QUOTA: opencode-go-pool: every key is exhausted, disabled, or invalid …
状态文件同时记录:两个 Key 因真实 401(AuthError: Invalid API key.)被标记 invalid、依次轮换、lastSwitch.reason: invalid。真实凭据下额度耗尽(QUOTA)走完全相同的轮换机器。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
whitelonng/dsh-opencode-go-pool
额度耗尽自动换 Key,实时查看套餐余额
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目