bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
在 DSH 网页界面侧栏打开的整页 OpenCode Go 用量视图:官方 5 小时、每周、每月已用百分比三环、重置倒计时、本地节奏预测与 7 天采样轨迹,并可在多个 API Key 账号之间切换;需先在 DSH 凭据里配置 OPENCODE_GO_API_KEY。
在 DeepSeek Harness Web GUI 左侧栏加一个 OpenCode Go 订阅用量入口,点开是一整页仪表盘:官方接口的 5 小时 / 每周 / 每月 三档额度已用百分比、重置倒计时,以及本地采样出来的轨迹与节奏预测。页面顶部可以添加多把 API Key、在多个账号之间切换,适合同时订阅了多个 OpenCode Go 账号的人。
新装(或改了宿主半)的 bundle 需要重启 DSH 才生效;只改客户端半时重新加载插件即可热更新。
currentColor)。5h / weekly / monthly 三档嵌套在同一个 240° 仪表盘里(开口在底部,外环月、中环周、内环 5h),圆心是当前聚焦档的大字已用百分比、未用比例与重置倒计时;右侧三行图例可切换聚焦档,默认选已用最高的一档。超过 100% 时该圈改为警示色。> 300%。只用本轮周期内的采样:每档在重置时会归零(5h 每 5 小时归零一次),跨过重置点的样本不参与拟合,否则那一跌会被当成「正在下降」,重置后几小时里一直算出 ≈ 0.0%。这是本地推算,不是官方配额。#f5f3ee、墨色文字 #1d1b16、陶土橙强调 #da7756、描边 #e3ddd1;界面宋体、数字等宽;深色模式是同一套配色的暖暗版(#24221f 表面)。只有一个数据源,官方接口:
GET https://opencode.ai/zen/go/v1/usage
Authorization: Bearer <OPENCODE_GO_API_KEY>
返回 { "usage": { "rolling": {…}, "weekly": {…}, "monthly": {…} } },每档是 { "status", "percent", "resetsAt" }。
口径说明:
percent 是已用百分比,不是剩余。界面上所有数字都写「已用」。rolling = 5 小时滚动窗口(界面写作 5h)、weekly = 每周、monthly = 每月。resetsAt(ISO 8601),倒计时由本地时间换算;上游没给或格式不对就显示 —。—,不会编一个 0。插件不写自己的密钥文件,所有 key 都交给 DSH credentials 保管。默认账号复用 OPENCODE_GO_API_KEY,解析顺序:
apiKeyEnv(默认 OPENCODE_GO_API_KEY)——这是引用名;llm-pi-ai 服务里 providers['opencode-go'].apiKeyEnv(本机已指向同一个引用名);credentials.resolve);process.env[引用名]。baseURL 的兜底顺序是:插件配置 baseUrl → llm-pi-ai 的 providers['opencode-go'].baseURL → llm-deepseek 的 providers['opencode-go'].baseURL(只取该路由的 baseURL)→ 默认 https://opencode.ai。
llm-deepseek只用来兜底 baseURL,绝不读它的apiKeyEnv:两个订阅方的额度不能混在一起看。
界面上只显示账号标签和密钥后 4 位(如 …A1b2),完整密钥不会出现在页面、日志或错误信息里。
页面顶部的账号栏里:
OPENCODE_GO_API_KEY 对应的账号,不能删除、不能在插件里换 Key(去 DSH 凭据里改)。.credentials.yaml 的 refs 下,引用名形如 OPENCODE_GO_USAGE_ACC_1A2B3C4D。插件自己的 accounts.json 只存标签、id 和引用名,不存 Key。baseUrl。切换账号只改变「看哪个号」,不会改 DSH 的模型路由配置;采样和轨迹按账号分开,互不串数。
在插件目录所在机器上,把本目录以 link 方式装进 desktop profile:
# 1) 建立 link 依赖(等价于在 profile 目录执行 pnpm add link:<本目录>)
dsh plugin --profile desktop add link:"D:/deep seek harness/chat task/dsh-opencode-go-usage"
# 2) 把包名加进 profile 的 bundle 层(dsh plugin 只转发 pnpm,不会改 bundles)
# 编辑 ~/.dsh/profiles/desktop/package.json:
# "dsh": { "profile": { "bundles": [ ..., "dsh-opencode-go-usage" ] } }
也可以直接从 GitHub 安装(适合没有本地目录的机器):
dsh plugin --profile desktop add github:moondrop12138/dsh-opencode-go-usage
装完同样要确认 dsh.profile.bundles 里有 dsh-opencode-go-usage;关键是 依赖 + dsh.profile.bundles 两处都要有。用 DSH 插件管理界面安装时,这两处会一并处理。
装完 重启 DSH,侧栏出现「OpenCode Go 用量」入口即成功。重启前宿主半不会加载,刷新页面也不会出现入口。
前置条件:
OPENCODE_GO_API_KEY(有效、且账号有 OpenCode Go 订阅);| 键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
apiKeyEnv | string | OPENCODE_GO_API_KEY | 凭据的引用名(不是密钥本身),用于 credentials / 环境变量查值 |
baseUrl | string | 空(等价 https://opencode.ai) | 仅在走企业代理/镜像时需要;会拼成 <baseUrl>/zen/go/v1/usage |
两项都可留空,留空即用上表默认。未知配置项会被忽略。
官方接口只给「此刻的百分比」,没有历史。所以宿主半会在本地维护一份采样:
$DSH_HOME/opencode-go-usage/samples.json(DSH_HOME 缺省 ~/.dsh);{ "version": 2, "accounts": { "<accountId>": { "fingerprint": "…", "samples": [...] } } };旧的 v1 文件启动时自动迁移到 default 桶,旧轨迹不丢;删掉这个文件即可清空历史(页面会回到「还没有采样」空态,不影响实时百分比)。
dsh-token-usage(那是本地会话日志口径,和订阅额度不是一回事)。.credentials.yaml 里,保护级别相同(同 OS 用户可读,见 DSH 凭据说明)。bad-response 错误,需要更新插件。dsh plugin --profile desktop remove dsh-opencode-go-usage
重启 DSH 后侧栏入口与整页一起消失。宿主半会一并撤销 RPC 路由与内存缓存;采样文件不会自动删除,需要的话手动删 $DSH_HOME/opencode-go-usage/。
cd "D:/deep seek harness/chat task/dsh-opencode-go-usage"
node --test # 单测(宿主半 + 客户端半)
node --check lib/host.js # 宿主半语法
node --check lib/client.js # 客户端半语法
node scripts/probe-live.mjs # 真打一次官方接口,打印 HTTP 状态与三档百分比(不打印密钥)
lib/host.js、cordis.patch.yml)必须重启 DSH;客户端半改动重新加载插件即可。fetch,客户端半只 require('react')。