OpenCode Go balance pill at the right end of the composer tool row: rolling/weekly/monthly quota remaining straight from the Zen usage endpoint, with hover detail and warn/danger coloring.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-go-balance
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:iamfromchangsha/dsh-go-balance
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Live OpenCode Go subscription balance for DeepSeek Harness (DSH) Web UI: a pill at the right end of the composer tool row showing the rolling / weekly / monthly quota remaining, straight from the same OpenCode Zen usage endpoint the Go dashboard reads — no estimation.
Features
- Real balance, not an estimate — polls
https://opencode.ai/zen/go/v1/usagewith your Go API key and renders the exact same numbers as the Go dashboard. - Compact pill —
Go 96% · 94% · 97%(rolling / weekly / monthly remaining), right before the send button. - Hover detail — used percent, reset time of each window, and data freshness in the tooltip.
- Warn / danger coloring — the pill turns yellow when any window is below 30% remaining, red below 15%.
- Resilient — a failed refresh keeps the last known snapshot, dimmed and marked stale; the pill hides entirely while nothing is known (e.g. the credential is not configured).
- Credential-safe — the API key is resolved at runtime from the DSH credential service (
OPENCODE_ZERO_API_KEY) and never leaves the host process; no key is stored in this repository or shipped to the browser.
Install
dsh plugin --profile web add dsh-go-balance
Then restart DSH (dsh web). The plugin appends itself to the profile bundle layer automatically; nothing else to configure.
Alternatively, install straight from this repository:
dsh plugin --profile web add github:iamfromchangsha/dsh-go-balance
For a local checkout:
# from the plugin repo
dsh plugin --profile web add file:./ # relative file spec, anchored to your cwd
Credential
The plugin reads the OpenCode Go API key from the DSH credential service under the reference OPENCODE_ZERO_API_KEY (your $DSH_HOME/.credentials.yaml or process environment). It is resolved per refresh inside the host process only.
Config
The bundle row exposes one optional key:
| Key | Default | Meaning |
|---|---|---|
intervalMs |
60000 |
How often the host re-polls the OpenCode Zen usage endpoint. |
Override it in the profile patch layer ($DSH_HOME/profiles/web/cordis.patch.yml):
- id: go-balance
config:
intervalMs: 120000
How it works
One npm package hosts both halves of the plugin:
- Host half (
lib/index.js) — thegoUsageservice: resolvesOPENCODE_ZERO_API_KEYthroughctx.credentials, polls the Zen usage endpoint on a timer (plus lazily when a request finds the cache older than 30s), validates the response shape, and serves the snapshot atGET /go-usage. - Browser half (
lib/client.js) — registers into theconversation.input.rightslot (right end of the composer tool row), re-reads/go-usageevery 60 seconds and whenever the tab becomes visible again.
Security & robustness
- Concurrency-deduped refresh — refresh calls share one in-flight promise, so the timer and lazy requests never pile up against the upstream API.
- Error hygiene — browser-facing errors carry only a
code(plus an optional HTTPstatus); internal details such as DNS failure messages go to the host log only. - Route hardening — the DSH webServer enforces no auth of its own ("No TLS, auth, or origin policy"), so the loopback bind is the boundary;
/go-usageadditionally rejects browser cross-origin reads (non-loopbackOrigin→ 403). The snapshot carries only quota percentages and reset times — never the key or any identity. - Range validation —
percentmust be a finite number in[0, 100]; malformed upstream values drop the whole snapshot and keep the last good one.
Development
node --check lib/index.js && node --check lib/client.js
lib/client.js is committed and shipped; no build step runs on install.
Limitations
- Requires an active OpenCode Go subscription and the
OPENCODE_ZERO_API_KEYcredential on the DSH host. - Web surface only (the slot it renders into is part of the DSH Web UI).
- The snapshot is a user-facing reference for the current account quota; it is not a billing record.
License
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 2622
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
ccch1mneyyy/dsh-TUI★ 1231
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 1198
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
omdsh-dev/dsh-at-file★ 214
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 159
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 114
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.