前言¶
DSH 的理念是「一切皆插件」,用量查詢這種小事通常也該由插件來做,而不是手動開一個網頁再切回來。用 OpenCode Go 的人有個反覆出現的動作:寫代碼時想知道 5 小時額度還剩多少,於是切到 Console,記下數字,再切回來。這個插件的定位就是把這個動作折回 Harness 界面裏——輸入框底欄放一個徽標,設置頁放一節,別的什麼都不加。
下面介紹的插件由 Jfreey 維護,在社區目錄 SkillHub 上歸在「客戶端」分類,目前靠插件管理器指向倉庫安裝。它只做一件事:顯示 OpenCode Go 的用量。沒有多餘界面,沒有額外依賴,不需要構建步驟。
這是什麼¶
一句話定位:一個輕量的 DSH 客戶端插件,把 OpenCode Go 的三類額度(5 小時滾動、周、月)顯示在 composer dock 的徽標和 Settings 頁面裏。
它解決的問題是「用量可見性」。插件從 https://opencode.ai/zen/go/v1/usage 讀取上面三檔額度,用你已經保存的密鑰鑑權,把百分比和重置時間渲染成進度條。密鑰不進瀏覽器,頁面只收到百分比和重置時間。
維護者:Jfreey。許可證:MIT,倉庫內隨附 LICENSE 文件。
核心功能¶
輸入框底欄徽標。 composer dock 裏顯示一個緊湊的 Go [進度條] 5h 13% 徽標,位置在 Turn-count 徽標的左側。進度條可以關掉,跟蹤的級別(5h / week / month)可配置,也可以按定時輪換。
展開面板。 鼠標懸停、點擊或聚焦徽標,展開的面板裏是三個額度各一條進度條,加上已用百分比、重置倒計時、手動刷新按鈕,以及進度條、級別、輪換的開關。這裏的改動保存在瀏覽器本地。
設置頁。 Settings → OpenCode Go 一節包含三張卡片。打開時先讀緩存、不額外查一次上游,之後每 60 秒自動刷新,按鈕用於立刻取一次。
中英雙語。 UI 跟隨 Harness 應用語言,插件註冊了中文和英文兩套詞條。訪問讀數走宿主只讀路由,且面板會提示讀數與 Console 最多差 1 個百分點。
安裝與啓用¶
倉庫本身就是可安裝的 bundle(package.json 裏聲明瞭 dsh.bundle)。在 Harness 的插件管理器裏指向該目錄或該 GitHub 倉庫即可,沒有需要手敲的安裝命令。安裝後刷新頁面:底欄出現 Go 徽標,設置裏出現「OpenCode Go」一節。
它依賴 DeepSeek Harness 0.2.x,具體用到的是 dsh.client、ctx.slots、ctx.locale 三個契約。版本不夠的話先升級 Harness。
安裝前建議把倉庫裏這幾個文件讀一遍,尤其是 index.js、client.js 和 cordis.patch.yml——patch 文件會改宿主代碼,值得確認改動範圍再啓用。許可證是 MIT,商用和二次分發都允許。
配置¶
插件配置寫成插件行的形式:
- id: opencode-go-usage
name: 'dsh-opencode-go-usage'
config:
apiKeyEnv: OPENCODE_GO_API_KEY # 憑據引用名
# apiKey: oc_sk_... # 也可以直接寫死,不推薦
path: /dsh-opencode-go/usage # Host 只讀路由
cacheSeconds: 60 # 宿主緩存秒數,也是底欄刷新週期
dock: true # 底欄徽標總開關
bar: true # 徽標裏的進度條
level: rolling # 跟蹤級別:rolling (5h) | weekly | monthly
rotate: false # 級別輪換顯示
rotateSeconds: 5 # 輪換間隔(最小 2 秒),僅 rotate: true 時生效
level 也接受 week/w/周 與 month/m/月;無法識別時回落到 rolling。任何配置改動都要重載 Harness(重啓應用或重新啓用該 bundle)才生效。
密鑰從哪裏來¶
插件不需要你手動寫密鑰,它按下面的順序逐次解析:
- 插件行裏的
config.apiKey(顯式填寫時優先)。 - 憑據服務裏的
config.apiKeyEnv引用,默認名是OPENCODE_GO_API_KEY——也就是「設置 → 模型」裏爲opencode-go保存的那把密鑰。 - 同名進程環境變量。
所以只要模型頁裏已經有 opencode-go 的憑據,插件裝上就能直接讀數。
刷新與緩存¶
不同界面對同一條路由的行爲不同:
| 場景 | 請求 | 行爲 |
|---|---|---|
| 底欄徽標 | GET /dsh-opencode-go/usage |
每 60 秒拉一次;宿主緩存未過期時直接返回緩存 |
| 面板「刷新」 | GET …?refresh=1 |
跳過緩存,強制向上遊查詢 |
| 設置頁打開 | GET …?cache=1 |
有緩存就用緩存(哪怕過期),只有從未讀過時才查上游 |
| 設置頁保持打開 | GET /dsh-opencode-go/usage |
每 60 秒自動刷新,與底欄同一節奏 |
| 設置頁「刷新」 | GET …?refresh=1 |
立刻查一次上游 |
憑據變化(credentials/reference-updated 事件)會清空緩存,換 key 後下一次請求就用新憑據,不會繼續顯示上一個賬號的數字。
HTTP 路由¶
Host 提供一條只讀路由 GET /dsh-opencode-go/usage,?refresh=1 強制刷新,?cache=1 只讀緩存。返回體的例子:
{
"ok": true,
"fetchedAt": "2026-11-04T12:40:00.000Z",
"credentialSource": "stored",
"dock": true,
"display": { "bar": true, "level": "rolling", "rotate": false, "rotateSeconds": 5 },
"servedFromCache": true,
"stale": false,
"usage": {
"rolling": { "status": "ok", "percent": 12.5, "resetsAt": "2026-11-04T17:33:21.000Z" },
"weekly": { "status": "ok", "percent": 4.1, "resetsAt": "2026-11-09T00:00:00.000Z" },
"monthly": { "status": "ok", "percent": 1.2, "resetsAt": "2026-12-04T12:23:50.000Z" }
}
}
失敗時返回 { "ok": false, "error": { "code": "NO_KEY|UNAUTHORIZED|FORBIDDEN|TIMEOUT|NETWORK|UPSTREAM|SHAPE", "message": "…" } },據此可以區分是沒配密鑰、鑑權失敗還是上游異常。
適用場景與注意¶
適合兩類人:一是不想切窗口查限額、希望用量一直可見的人;二是想給別的 provider 做同類用量插件、需要一個可參考實現的人——這個插件面很小,入口只有 dock 和 Settings 兩處,代碼量也少。
需要注意的幾點:
- 插件以當前 dsh 進程的權限運行,能讀到進程環境變量和憑據庫裏的引用。安裝前檢查源碼與許可證,確認你願意讓插件拿到這些權限。
- 路由是隻讀、同源的 GET,不經過 Harness 的瀏覽器登錄閘門。Harness 默認只監聽迴環地址;一旦你把它暴露到局域網或隧道,這條路由也會隨之可達。
- 進度條顏色使用主題 token(
--dsw-alias-*),明暗主題都適用,不需要額外適配。 - 讀數就是接口返回的整數百分比,與 Console 最多差 1 個百分點,插件面板上已註明。
目錄頁:https://www.skillhub.cn/plugins/Jfreey/dsh-opencode-go-usage
GitHub:https://github.com/Jfreey/dsh-opencode-go-usage