deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
The best-adapted bottom info bar for DeepSeek Harness, and a drop-in replacement for the native stats row under the composer. It shows live balance and subscription quota (ChatGPT & OpenCode Go) at a glance, alongside provider & model, peak/off-peak pricing, and real spend — smart and concise, conflict-free, and native in look and feel: it auto-detects the billing mode, replaces the native row instead of duplicating it, and matches the model switcher exactly. Install once; it activates automatically on every launch.

From top to bottom, the combined screenshot shows ChatGPT subscription, DeepSeek API, and OpenCode Go subscription. Each account is shown in full view followed by compact view.
OpenCode Go · V4 Flash), the 5-hour / weekly / monthly quota remaining per window (remaining = 100 − used, bold and color-coded: green when >20% remaining, amber when ≤20%), and a countdown to the next reset (e.g. 距重置 1d 21h). In compact mode the shortest-duration window is shown (5-hour preferred; falls back to weekly/monthly if unavailable); in full mode all three windows appear. A ⚠ alert appears when any window drops to 20% or less remaining. Quota is pulled from two subscription sources:~/.codex/auth.json. Binding, token refresh and the openai-codex model route are not part of this plugin — install the companion plugin dsh-chatgpt-subscription (separate repo) to bind your ChatGPT account; this bar only reads the token to display quota. Missing/expired token → "not bound / re-bind" hint instead of an error. Hover over "⚠ refresh failed" for details on auto-retry behavior.opencode.ai/zen/go/v1/usage via OPENCODE_GO_API_KEY (Settings → Models) or the opencode CLI login (~/.local/share/opencode/auth.json); missing key → "not configured" hint instead of an error.
Both sources show the remaining quota and the reset time for each of the 5-hour / weekly / monthly windows, so you always know when your quota renews. Quota and countdown always match — both come from the same window.DeepSeek-V4-Flash); the provider name is bold, and is omitted when it is already a prefix of the model name./user/balance API, auto-refreshes every 60 s, and keeps the last known snapshot on failure so usage is never interrupted.llm/stream request (usage × unit price) and aggregates precisely by this conversation / today / this month / all time. Records are persisted to disk — nothing is lost on restart.dsh CLI) installed and used via the web interface (dsh web)dsh plugin)git clone https://github.com/songoao25/dsh-bottom-info-bar.git
cd dsh-bottom-info-bar
./install.sh # installs to the "web" profile; use --profile <name> to override
git clone https://github.com/songoao25/dsh-bottom-info-bar.git
dsh plugin --profile web add /path/to/dsh-bottom-info-bar/plugin
Restart
dsh webafter installing. Plugins are composed when the host process starts; a page refresh alone is not enough.
For detailed installation, troubleshooting, and upgrade instructions, see docs/INSTALL.md.
DEEPSEEK_API_KEY). Without it, the plugin shows a hint and every other feature keeps working.codex / chatgpt / opencode-go / opencode / openai-codex → subscription; everything else → balance). An internal billingMode: 'auto' | 'balance' | 'subscription' setting (default auto) allows forcing a mode.~/.codex/auth.json (mode 0600) and registers the ChatGPT models. This bar only reads that token to fetch quota (chatgpt.com/backend-api/wham/usage); it never refreshes, writes back, or injects credentials. Without a token the bar shows a "not bound — install dsh-chatgpt-subscription to authorize" hint; an expired token shows a "re-bind" hint.OPENCODE_GO_API_KEY under Settings → Models, or log in with the opencode CLI (writes the opencode-go entry in ~/.local/share/opencode/auth.json). Without a key the bar shows a "not configured" hint instead of an error.chatgpt.com backend is an undocumented interface — it may change or stop working at any time; failures degrade gracefully (last snapshot kept, auto-retry), never a crash.All spend data lives in the plugin's own data directory, isolated from other plugins and DSH configuration:
~/.dsh/dsh-bottom-info-bar/
└── usage-records.json # per-request usage ledger (persisted across restarts)
~/.dsh/dsh-bottom-info-bar/ (directory mode 0700, file mode 0600 — readable only by the current user).DSH_BOTTOM_INFO_BAR_DATA_DIR to relocate the whole data directory (e.g. an external drive or a synced folder).llm/stream request (ts / model / provider / sessionId / input / cacheRead / cacheWrite / output). No conversation content and no API keys are ever stored.cd dsh-bottom-info-bar
./uninstall.sh # remove the plugin only
# or: dsh plugin --profile web remove dsh-bottom-info-bar
ChatGPT subscription (binding & token maintenance) is owned by the separate plugin dsh-chatgpt-subscription; uninstalling this info bar does not touch it.
After restarting, the native stats row returns automatically with no residue (the ledger file under ~/.dsh/dsh-bottom-info-bar/ is your data and is kept; remove it manually if you want to reset the statistics).
| Symptom | Fix |
|---|---|
| Bar does not appear after a page refresh | Restart dsh web (the host process loads plugins) |
| Balance shows "DEEPSEEK_API_KEY not configured" | Add the key under Settings → Models |
| Balance shows "⚠ refresh failed, showing last snapshot" | Transient network/key issue; retries automatically after 60 s. The last successful data is kept so the bar never goes blank. Hover over the warning for a detailed explanation and retry timing. |
| Shows "OpenCode Go not configured" | Add OPENCODE_GO_API_KEY under Settings → Models, or configure OpenCode Go in the opencode CLI |
| How do I bind my ChatGPT subscription? | Install the companion plugin dsh-chatgpt-subscription and authorize on the official page — it maintains the token this bar reads for quota display |
| ChatGPT quotas look wrong or empty | The wham endpoint is undocumented and may change; failures keep the last snapshot and retry every 60 s. Hover over "⚠ refresh failed" to see the retry explanation. |
| Why does compact mode show a different window? | Compact mode prioritizes the shortest-duration window (5-hour > weekly > monthly) because it refreshes fastest. If the 5-hour window is unavailable, it falls back to weekly or monthly. Quota and countdown always match — both come from the same window. |
| Why is the model's reasoning process not shown? | DSH does not render the model's internal reasoning in the UI — a DSH interface-layer limitation, not the plugin's |
| Want the original stats row back | Uninstall the plugin and restart |
plugin/src/host.js (host) + plugin/src/client-bundle.js (client)cd plugin && npm run build (generates lib/)node tests/run-all.mjsMIT © 2026 songoao25
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: awesome-dsh-plugin。