dong-victor/dsh-opencodego-usage ↗★ 0
@dong-victor/dsh-opencodego-usage
opencode Go 套餐余额查看插件(DSH Web GUI):侧边栏直接显示 rolling(5小时)/weekly(周)/monthly(余额) 三档用量进度条、百分比与重置时间,60s 自动刷新,无需点击;点击打开详情面板(倒计时、状态徽章、端点/密钥信息);agent 工具 opencode_go_balance 可直接回答套餐用量。密钥默认取 llm-pi-ai 的 opencode-go 路由 apiKeyEnv(OPENCODE_GO_API_KEY,官方 opencode 模型专用密钥)并经 credentials 服务解析,端点默认 https://opencode.ai,无需二次配置。零构建依赖、纯 JS 即装即用:`dsh plugin --profile web add @dong-victor/dsh-opencodego-usage`。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:dong-victor/dsh-opencodego-usage说明文档
阅读完整 README ↗@dong-victor/dsh-opencodego-usage
查看链接的 opencode Go 套餐余额的 DSH Web GUI 插件:侧边栏「Go 余额」入口 + 中央列面板,展示 rolling / weekly / monthly 三档用量百分比、状态徽章、重置时间与实时倒计时;同时提供 agent 工具 opencode_go_balance 与系统提示词声明,让助手也能直接回答「opencode Go 套餐还剩多少」。
完全复用 DSH 已有的 LLM 接线(llm-pi-ai 的 opencode-go 路由设置 + credentials 服务),无需再配一把密钥——默认密钥引用就是官方 opencode 模型专用的 OPENCODE_GO_API_KEY,绝不复用 llm-deepseek 的 DEEPSEEK_API_KEY。
数据来源
官方端点(OpenAI 兼容网关的用量接口):
GET https://opencode.ai/zen/go/v1/usage
Authorization: Bearer
响应:
{
"usage": {
"rolling": { "status": "ok", "percent": 1, "resetsAt": "2026-08-14T06:44:12.569Z" },
"weekly": { "status": "ok", "percent": 12, "resetsAt": "2026-08-17T00:00:00.569Z" },
"monthly": { "status": "ok", "percent": 35, "resetsAt": "2026-08-30T02:03:31.569Z" }
}
}
percent= 该窗口已使用的百分比(100 - percent即剩余额度);status=ok(正常)或其它(如超额时提示注意);resetsAt= 该窗口重置时间(ISO),面板显示本地时间 + 每秒跳动的倒计时。
无密钥 / 无效密钥 → HTTP 401;本插件把 401/403 转成可读错误「密钥缺失、过期或无 Go 套餐权限」。 其它路径(
/zen/go/v1/subscription、/api/usage等)均为 404,/zen/go/v1/usage是唯一可用余额端点(已实测验证)。
架构
双面插件(同 dsh-ssh 模式),零构建依赖、纯 JS、即装即用。运行时唯一的外部依赖是 @deepseek-ai/dsh-tools(工具注册契约,peer 依赖 ^0.1.0-rc.6,与 dsh-ssh 等官方插件声明一致)——由 DSH 宿主按官方版本提供,插件不自带固定旧版副本、不随包维护:
dsh-opencodego-usage/
├── package.json # dsh.bundle.patch + dsh.client 声明(exports["./client"])+ dsh-tools peer 依赖
├── cordis.patch.yml # 向 web profile 行列插入 {id: opencode-go}
├── lib/
│ ├── index.js # 宿主半面(ESM):余额服务 + 路由 + 工具 + 提示词
│ └── client.js # 浏览器半面(手写 CJS bundle,零外部 require)
└── test/ # host-boot + client-smoke 两套回归测试
宿主半面 lib/index.js
| 能力 | 说明 |
|---|---|
GET /api/dsh-opencode-go/balance | 回环防护(仅本机/同源),?refresh=1 绕过缓存;返回 {ok, fetchedAt, cached, source, usage?, error?} |
| 密钥/端点解析 | 默认取 settings.get('llm-pi-ai') 的 providers.opencode-go 路由 baseURL(取 origin)与 apiKeyEnv(即 OPENCODE_GO_API_KEY),回退到插件自带默认 https://opencode.ai / OPENCODE_GO_API_KEY;credentials 服务 resolve(ref),process.env 兜底;绝不继承 llm-deepseek.apiKeyEnv(其 schema 默认是 DEEPSEEK_API_KEY);可用插件 config 覆盖 |
| 缓存 | 内存 30s TTL(可配 cacheTtlMs),缓存命中不触发上游请求 |
| 工具 | opencode_go_balance(dsh-tools defineTool,结构化 schema + markdown render) |
| 提示词 | plugin:dsh-opencode-go 段(order 150),声明能力与限制 |
插件 config(在 patch 入口的 config 字段配置,均可选):
- insert:
- id: opencode-go
name: '@dong-victor/dsh-opencodego-usage'
config:
enabled: true # 总开关
announceToAgent: true # 是否向 agent 声明
# apiBaseUrl: 'https://opencode.ai' # 覆盖端点(默认取 opencode-go 路由 baseURL 的 origin,再回退插件默认)
# apiKeyEnv: 'OPENCODE_GO_API_KEY' # 覆盖凭据引用(默认同左,永不取 llm-deepseek 的 DEEPSEEK_API_KEY)
# cacheTtlMs: 30000
# timeoutMs: 15000
浏览器半面 lib/client.js
- 侧边栏入口:DOM 级注入(MutationObserver 自愈,React 重渲染后同帧复位),余额直接显示在侧边栏、无需点击——头部(图标 + 「Go 余额」)+ 三行明细(5小时 / 周 / 余额),每行含进度条(>60% 变黄、≥90% 变红)、已用百分比、重置时间(24h 内显示 HH:mm,否则 MM/DD HH:mm),60s 自动刷新(宿主 30s 缓存兜底);悬停 tooltip 显示完整明细;
- 点击条目打开中央列面板:
[data-pane="conversation"]内绝对定位容器(不透明背景,避免对话文本透底)+ `` 控制显隐,与 SSH / 任务看板面板互斥(跨插件dsh-panel-activate事件协调); - 三张用量卡:进度条(>60% 变黄、≥90% 变红)、状态徽章、已用/剩余百分比、重置时间 + 每秒倒计时;
- 刷新按钮(
?refresh=1)、关闭按钮、错误横幅、端点/密钥元信息(密钥只显示掩码sk-yAE…eLEj); - 样式全部走 dsh
--dsw-*主题 token,跟随皮肤明暗;中英双语(document.lang自动切换)。
安装