dong-victor/dsh-opencodego-usage0

@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`。

包名
@dong-victor/dsh-opencodego-usage
版本
0.1.5
许可证
MIT
最近更新
2026年8月19日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:dong-victor/dsh-opencodego-usage

@dong-victor/dsh-opencodego-usage

查看链接的 opencode Go 套餐余额的 DSH Web GUI 插件:侧边栏「Go 余额」入口 + 中央列面板,展示 rolling / weekly / monthly 三档用量百分比、状态徽章、重置时间与实时倒计时;同时提供 agent 工具 opencode_go_balance 与系统提示词声明,让助手也能直接回答「opencode Go 套餐还剩多少」。

完全复用 DSH 已有的 LLM 接线(llm-pi-aiopencode-go 路由设置 + credentials 服务),无需再配一把密钥——默认密钥引用就是官方 opencode 模型专用的 OPENCODE_GO_API_KEY,绝不复用 llm-deepseekDEEPSEEK_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 自动切换)。

安装