dsh-opencode-go-quota-settings
在 DSH 设置页显示 OpenCode GO 套餐额度(5 小时滚动、每周、每月),通过同源代理读取官方用量接口;不注册侧栏组件。本插件是 Astervolans/dsh-opencode-go-usage(上游为 yumusb/dsh-opencode-go-usage 的 fork)的改造分支,安装前请先卸载上游插件——两者会各自注册一份 OpenCode GO 设置页,不能同装。
安装
dsh plugin --profile web add dsh-opencode-go-quota-settings
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-opencode-go-quota-settings
在 设置 → OpenCode GO 里查看额度、模型目录和连接配置,并在同一个页面填写密钥;密钥与
DSH 自己的 opencode-go 模型路由同源,不需要重复配置。不占用左侧栏。这是
@astervolans/dsh-opencode-go-usage
的改造分支(上游又是 yumusb/dsh-opencode-go-usage 的 fork)。
与上游的差异
· 上游 1.5.0 · 本分支
入口 · 侧栏底部常驻 widget(sidebar.footer.action) · 设置页(settings.section),与 Command Code / Codex 的账户页同级
展示 · 三条进度条 + 时间条,收起为百分比徽标 · 三张额度卡:剩余百分比、进度条、已用比例、重置倒计时、绝对时间与窗口占比
密钥来源 · 只能另配 OPENCODE_GO_API_KEY · 复用 DSH 模型路由的同一把 key:providers.opencode-go.apiKeyEnv → llm-pi-ai/opencode-go 登录凭据 → OPENCODE_API_KEY → 兜底 OPENCODE_GO_API_KEY
密钥配置 · 只能改 ~/.dsh/.credentials.yaml · 设置页内直接填写;写入模型路由使用的同一凭据引用,必要时同时补上 providers.opencode-go.apiKeyEnv,与模型页保存等效
额外读取 · 只有额度 · 模型目录(/v1/models:上下文、输出上限、视觉/工具/推理能力、每 1M token 价格、峰时倍率);密钥指纹(不暴露明文);诊断快照
页内配置 · 无 · 连接与刷新卡片:网关地址、自动刷新间隔、额度缓存 TTL、x-opencode-session、显示模型目录/诊断;写入本插件设置,热生效
侧栏占用 · 有 · 无,不注册任何侧栏槽位
更新检查 · 读 npm registry · 已移除(本包走 git 分发)
路由 / 命令 · /opencode-go/usage、/opencode-go · /dsh-opencode-go-quota-settings/usage、/dsh-opencode-go-quota-settings/models、/opencode-go-quota(可与上游并存不撞)
会话头修复 · 有(x-opencode-session) · 保留,并可在页面里开启/关闭
数据来源是官方 OpenCode Go 接口:GET https://opencode.ai/zen/go/v1/usage 和
GET https://opencode.ai/zen/go/v1/models。host 端用你的 key 调用,浏览器只访问同源代理,key 不进前端。
安装
先移除旧插件(避免设置页出现两份 OpenCode GO):
dsh plugin --profile web remove @astervolans/dsh-opencode-go-usage dsh plugin --profile web add dsh-opencode-go-quota-settings
(未使用 npm 时也可从源码安装:dsh plugin --profile web add github:zztdandan/dsh-opencode-go-quota-settings。)
重启 dsh web,硬刷新浏览器。入口:设置 → OpenCode GO;对话里也可用 /opencode-go-quota。
在 DSH Go(手机 App)里
dsh-go 的 App 端有两条路:插件有宿主 schema 时按字段生成原生表单,否则把插件自己的
settings.section 页面当成整页网页岛显示。本插件和 Command Code / Prime Memory 选同一条路——
关闭自动生成的表单(ctx.settings.configure({ auto: false })),让 App 直接打开插件自己的设置页:
- 一个页面装下全部:额度三窗口、模型目录、密钥卡片、连接参数同屏,和网页版看到的一致;
手机上宽度自适应(560px 以下单列、触摸目标加大)。
- 额度:滚动 5 小时 / 每周 / 每月剩余百分比、进度条、重置倒计时与绝对时间,手动刷新或按间隔自动刷新。
- 密钥:页面里的密钥卡片可直接填写、清除,写入主机凭据服务;与「设置 → 模型 → OpenCode Go」同源。
- 模型管理:按名称搜索、按能力筛选(全部 / 已启用 / 免费 / 视觉 / 推理 / 工具),逐个开关后保存,
写入 llm-pi-ai 的 providers.<route>.models,模型选择器立即只显示启用的模型;「恢复目录默认」撤销限制。
本机目录装不了的模型会标「本机目录无」并禁止开启。
- 诊断:按开关显示排查快照。
- 插件名与简介来自
locale/{zh,en}.json的meta.title/meta.description,App 里显示
「OpenCode GO 额度」而不是包名。
为什么不再占用输入框上方的状态条:那一行是 App 里最稀缺的位置,本插件的数据更新频率低,
放进设置页就够了。原生表单也一并关掉,避免同一个插件出现两份设置入口。
密钥:与模型设置同源
插件不再要求你为额度单独复制一遍 key。它按 DSH 自己的 opencode-go 路由解析顺序读取:
1. llm-pi-ai 的 providers.opencode-go.apiKeyEnv(没有 opencode-go 时也会参考 providers.opencode);
2. llm-pi-ai 登录流程写入的凭据记录 llm-pi-ai/opencode-go;
3. pi-ai 的原生环境引用 OPENCODE_API_KEY;
4. 最后才是本插件的兜底配置 apiKeyEnv(默认 OPENCODE_GO_API_KEY)。
所以只要 设置 → 模型 → OpenCode Go 里能聊天,这里就能读额度;已配置时页面会显示正在使用的引用和来源,不会索要第二把 key。
也可以直接在 设置 → OpenCode GO 的 API 密钥 卡片里粘贴 key 保存:
- 优先写入模型路由命名的引用(如
OPENCODE_API_KEY、自定义apiKeyEnv);模型使用登录凭据时写入兜底引用(默认OPENCODE_GO_API_KEY)并把它绑定到模型路由,使用原生环境时写回OPENCODE_API_KEY; - 如果模型路由还没有命名引用,页面会像模型页一样补上
providers.opencode-go.apiKeyEnv,把 key 绑定到 OpenCode Go; - 如果模型页里还没有 OpenCode Go,第一次保存会把该 provider 和 key 一起创建;
- 已经配好 key(例如旧版本留下的
OPENCODE_GO_API_KEY,或 DSH 登录凭据)但模型页还没绑定?页面会显示 同步到模型设置,点一下即可,不需要重新粘贴 key; - 保存后立即绕过额度缓存并刷新,模型和额度都使用这把新 key。
仍可用文件方式配置(与模型页写入的是同一个凭据域):
```yaml
# ~/.dsh/.credentials.yaml
OPENCODE_API_KEY: sk-...
```
模型目录(读取)
额度卡下方的 模型目录 来自官方 GET /v1/models,不是本地硬编码:
- 每个模型显示 id、上下文/输出上限、视觉/工具/推理能力、推理档位、每 1M token 的输入/输出/缓存读价格、峰时倍率和协议;
- 搜索框按名称、ID、家族或 canonical id 过滤;
- DSH 的默认模型(
agent-default-model)会高亮并排在最前; - “刷新模型”强制重新读取;host 端缓存 5 分钟,密钥或端点变化时自动失效;
- “测试连接”会强制请求一次
/v1/models,显示模型数量与往返延迟。
连接与刷新(页内配置)
页面底部的 连接与刷新 卡片直接编辑本插件的设置,和 设置 → 插件 里的配置表单是同一份,写入后热生效:
控件 · 对应字段 · 说明
网关地址 · baseUrl · 默认 https://opencode.ai/zen/go
自动刷新 · refreshMs · 30 秒 / 1 分钟 / 2 分钟 / 5 分钟
额度缓存 · cacheMs · 0 / 15 / 30 / 60 / 300 秒;只影响额度请求,页面上手动刷新会绕过
注入 x-opencode-session · injectSessionHeader · 可运行时开关;关闭后聊天可能被网关拒绝
显示模型目录 · showModels · 关闭后只保留额度、密钥和连接卡片
显示诊断信息 · showDiagnostics · 打开后出现诊断卡片
诊断
开启 显示诊断信息 后,页面会显示:
- 密钥引用、来源、指纹、候选引用列表;
- 模型路由的
apiKeyEnv、profile 是否存在、是否已可服务; x-opencode-session的注入次数、最近一次llm/stream的 provider / base / session 是否存在;- 模型目录的读取时间与延迟。
“复制诊断”输出的是同一份 JSON,不包含密钥明文,可直接贴到 issue 里。
版本门禁:peerDependencies为@deepseek-ai/dsh >=0.1.7-rc.1 <0.3.0,覆盖 0.2.1-rc.2。
配置
键 · 默认 · 说明
apiKeyEnv · OPENCODE_GO_API_KEY · 兜底凭据引用;也是 apiKey 密钥的写入目标,仅当模型路由没有 apiKeyEnv、没有登录凭据、也没有 OPENCODE_API_KEY 时使用
baseUrl · https://opencode.ai/zen/go · GO 网关地址;额度、模型目录和会话头共用
cacheMs · 30000 · host 端额度缓存 TTL;设置页保存密钥或点“刷新”会绕过
refreshMs · 60000 · 设置页自动刷新间隔(最小 15 秒)
modelsCacheMs · 300000 · host 端模型目录缓存 TTL(最小 60 秒)
requestTimeoutMs · 20000 · 调用 /v1/usage、/v1/models 的超时(1–120 秒)
injectSessionHeader · true · 为 GO 网关聊天请求注入 x-opencode-session;可热开关
showModels · true · 设置页是否显示模型目录卡片
showDiagnostics · false · 设置页是否显示诊断卡片
发布(自动化)
发布由 GitHub Actions 完成,规则是版本号变了才发:
npm version patch --no-git-tag-version
VERSION=$(node -p "require('./package.json').version")
git commit -am "chore: release v$VERSION"
git push origin master
Release 工作流会检查 npm 上是否已有该版本:没有则 npm publish --provenance、打 v<version> tag、创建 GitHub Release;已有则跳过(幂等)。细节与各市场的跟随方式见 [docs/releasing.md](docs/releasing.md)。
验证边界
- 已在 DSH
0.2.1-rc.2的隔离 profile 中用真实 OpenCode Go key 实测(2026-10-31,只调用只读的/v1/usage、/v1/models,不产生推理用量): - 安装后启动正常,设置导航出现 OpenCode GO 项;
GET /dsh-opencode-go-quota-settings/usage返回真实三窗口数据(r
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:13,最后更新 2026-11-02