前言¶
在 DeepSeek Harness(DSH)里用 Composer 写代码时,界面通常会显示上下文用量(context meter)。若你同时订阅了 OpenCode Go,额度还分 5 小时滚动、周、月等窗口;这些数字在官方控制台里,和当前对话界面是分开的。来回切换容易在额度快用尽时才发现。
下面介绍社区插件 dsh-opencode-go-usage(维护者 lccc233):它把 OpenCode Go 三个额度窗口做成 Composer 停靠区里、紧挨 context meter 右侧的三个小圆环,悬停可展开明细。插件归类为「工作流」,面向已在 DSH Web GUI 中日常对话、又需要盯 OpenCode Go 用量的开发者。
这是什么¶
dsh-opencode-go-usage 是 DSH 的 Web GUI 插件:在聊天输入框(composer dock)旁展示 OpenCode Go plan 的额度占用,不注册工具、不注入 system prompt、不订阅 session 事件,因此不增加面向模型的 token,也不影响 KV cache。
数据来源是 OpenCode 官方接口 GET https://opencode.ai/zen/go/v1/usage(Authorization: Bearer <key>)。Host 端通过 ctx.credentials 解析 API Key 并代请求上游,浏览器只轮询本机 loopback 上的快照路由,密钥不会进入浏览器。
界面与数据含义¶
紧凑模式下始终可见三个 14px 圆环(2px 描边),分别对应 5h rolling / weekly / monthly,环上无文字;填充比例表示该窗口的已用百分比(percent),剩余为 100 − percent。
颜色阈值(资料原文):
- 已用
<60%:绿色 - 已用
≥60%:琥珀色 - 已用
≥85%:红色 - 无数据:灰色环
- 上游失败:三环均为红色
悬停、聚焦或点击可展开详情:每个窗口一条 6px 进度条,并显示剩余比例、重置倒计时、采样时间与手动刷新。环与行的 title、aria-label 中会带上可读摘要(例如 5h rolling · 3% used (97 left · resets in 3h25m))。
上游 JSON 结构示例(字段以官方为准):
{ "usage": {
"rolling": { "status": "ok", "percent": 3, "resetsAt": "2026-10-02T16:18:57.800Z" },
"weekly": { "status": "ok", "percent": 1, "resetsAt": "2026-10-05T00:00:00.000Z" },
"monthly": { "status": "ok", "percent": 59, "resetsAt": "2026-10-11T12:22:02.000Z" } } }
环境与依赖¶
安装前请确认:
- DSH 0.2.0-rc.2(插件开发与验证针对的版本),启用 Web GUI profile(
@deepseek-ai/dsh-web-app),且具备conversation.composer.dock插槽(随@deepseek-ai/dsh-client-ui-conversation提供)。 - 有效的 OpenCode Go 订阅及 API Key。默认凭据引用为
OPENCODE_GO_API_KEY(与llm-pi-aiprovider 相同)。可在 Settings → Models 配置,或写入~/.dsh/.credentials.yaml,或导出同名环境变量。 - Windows、macOS 或 Linux。开发校验需要 Node 22+。
安装与启用¶
DSH 主目录默认为 ~/.dsh(Windows 为 %USERPROFILE%\.dsh)。Profile 位于 ~/.dsh/profiles/<name>/;桌面版 Electron 使用 desktop profile,下文示例以 desktop 为准。
无论哪种路径,启用插件都需要三件事:
- Profile 能解析到包:
~/.dsh/profiles/<name>/node_modules/dsh-opencode-go-usage存在(实体目录、junction 或 symlink)。 ~/.dsh/profiles/<name>/package.json的dependencies中记录该包。~/.dsh/profiles/<name>/cordis.patch.yml中有对应的 Loaderinsert行。
修改 package.json 与 patch 时请使用无 BOM 的 UTF-8;Windows PowerShell 的 Set-Content -Encoding UTF8 可能写入 BOM,导致 DSH 无法解析 JSON。
完成上述步骤后 重启 DSH。全新包不会在配置热重载时进入 Loader 图,需启动时加载。
路径 A:克隆到插件目录并链入 profile(desktop 推荐)¶
先把仓库放到 profile 可解析的位置,再链入 node_modules:
git clone https://github.com/lccc233/dsh-opencode-go-usage.git ~/.dsh/plugins/dsh-opencode-go-usage
Windows(junction):
cmd /c mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-opencode-go-usage" "%USERPROFILE%\.dsh\plugins\dsh-opencode-go-usage"
POSIX(symlink):
ln -s ~/.dsh/plugins/dsh-opencode-go-usage ~/.dsh/profiles/desktop/node_modules/dsh-opencode-go-usage
在 ~/.dsh/profiles/desktop/package.json 中登记依赖(路径相对 profile 目录):
{
"name": "dsh-profile-desktop",
"private": true,
"dependencies": {
"dsh-opencode-go-usage": "file:../../plugins/dsh-opencode-go-usage"
}
}
在 ~/.dsh/profiles/desktop/cordis.patch.yml 增加 Loader 行:
- insert:
- id: opencode-go-usage
name: "dsh-opencode-go-usage"
config:
apiKeyEnv: OPENCODE_GO_API_KEY
endpoint: https://opencode.ai/zen/go/v1/usage
refreshMs: 60000
timeoutMs: 10000
route: /opencode-go-usage/snapshot
路径 B:profile 自带的插件管理器¶
若环境已部署 @deepseek-ai/dsh-plugin-manager 且有 dsh CLI,可对非 desktop profile 执行:
dsh plugin --profile <name> add dsh-opencode-go-usage
该命令会完成依赖安装、bundle 记录与 patch 行。注意:desktop profile 不能这样管理(dsh plugin --profile desktop 会被拒绝);desktop 请用路径 A。本仓库在 package.json 中声明 dsh.bundle.patch,作为 bundle 安装时会写入相同 insert。
路径 C:作为 profile bundle¶
在 profile 的 package.json → dsh.profile.bundles 中加入包名,由仓库自带的 cordis.patch.yml 插入 Loader 行:
{
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-opencode-go-usage"] } }
}
profile 层手写行与 bundle 层使用相同 id: opencode-go-usage,profile 层 config 可覆盖 bundle 层。
配置项¶
| 字段 | 默认值 | 含义 |
|---|---|---|
apiKeyEnv |
OPENCODE_GO_API_KEY |
每次刷新经 ctx.credentials 解析;可回退同名环境变量 |
apiKey |
— | 明文 Key(不推荐,会出现在 patch 中) |
endpoint |
https://opencode.ai/zen/go/v1/usage |
额度接口 |
refreshMs |
60000 |
缓存时长;浏览器按同周期轮询 |
timeoutMs |
10000 |
单次上游请求超时 |
route |
/opencode-go-usage/snapshot |
本机 Web 服务快照路径 |
验证与日常使用¶
启动 DSH 后,端口见启动日志中的 dsh web: URL。先用 curl 确认 Host 半部已加载:
curl http://127.0.0.1:<port>/opencode-go-usage/snapshot/probe
probe 返回插件名、版本(当前包版本 0.1.0)、路由与采样时间等;404 表示未加载(路径错误、缺少 insert 或 import 失败)。
拉取快照:
curl http://127.0.0.1:<port>/opencode-go-usage/snapshot
返回各窗口的 percent、resetsAt 及 stale、error 等字段。随后在 Web GUI 打开对话页,Composer dock 中 context meter 右侧应出现三个额度圆环;需要明细时悬停即可。
卸载时从 cordis.patch.yml 移除对应 insert、从 package.json 去掉依赖并删除 node_modules 中的包,再重启 DSH(完整步骤见仓库 README)。
适用场景与注意¶
适合:已在 DSH Web GUI(含 desktop profile)中使用 Composer,且持有 OpenCode Go 订阅、希望在与上下文用量同一行观察三档额度窗口的开发者。
请注意:
- 插件在 当前 DSH 进程权限 下运行,会代你调用 OpenCode 额度 API;安装前应阅读 GitHub 源码 与 MIT 许可证,确认行为符合你的安全策略。
- 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,目录站是独立社区索引。
- 版本与 DSH 的匹配以 README 为准(开发验证版本 0.2.0-rc.2);升级 DSH 或 OpenCode 接口后若异常,可对照 probe/snapshot 的
lastError与仓库 Issue。
链接¶
- 社区目录:https://www.skillhub.cn/plugins/lccc233/dsh-opencode-go-usage
- 源码与完整部署说明:https://github.com/lccc233/dsh-opencode-go-usage
经过上面的步骤,你可以在不动对话 prompt 的前提下,把 OpenCode Go 的 rolling / weekly / monthly 额度贴在 Composer 旁,用颜色阈值和悬停明细避免额度用尽才发现的问题。