前言¶
用 DeepSeek Harness(DSH)对接 OpenCode 时,官方状态页在浏览器里,Go 套餐额度在控制台或 API 里,本机到 opencode.ai 的线路质量又要自己 ping。三块信息分散,很难在同一次开发会话里判断「是上游挂了、额度打满,还是本地网络抖了一下」。
下面介绍的 dsh-opencode(维护者 JAYcodr,GitHub:JAYcodr/dsh-opencode)是 DSH 生态里的客户端类插件:在 Harness Web UI 一角挂一块悬浮仪表,把线路质量、服务状态灯、Go 额度进度条、可选的真实推理探针和公开用量数据叠在同一块面板里。插件以 MIT 许可发布,与 OpenCode、Anomaly 无隶属关系,只读其公开或未文档化端点。
这是什么¶
一句话:OpenCode 线路仪表——在 DSH Web UI 的 shell.overlay 悬浮层里展示 opencode.ai 的状态、本机往返时延、Go 套餐额度,并可按需发起极小的流式探针验证「Go 推理是否真的通」。
宿主侧用 Cordis patch(cordis.patch.yml)注册轮询与同源 API;浏览器侧 client.js 只消费主题 token,不引入 Harness Client 包。当前仓库版本为 0.1.0(见 package.json)。
核心功能¶
资料中列出的能力可归纳为五块,彼此独立刷新频率可在配置中调节。
线路质量¶
每次抓取 https://opencode.ai/status/api/status 时,在本机测量到 opencode.ai 的往返时延,并提供滑窗均值、抖动、成功率与轮询进度。
服务状态灯¶
反映 opencode.ai/status 公布的控制台、推理、Go、按量、免费等分项状态。
实测 GO(真探针)¶
在配置允许时,用 Go 套餐凭据向 https://opencode.ai/inference/go/openai/v1/chat/completions 发一次极小流式请求(max_tokens: 16,输入 Say ok),得到真实首字时延(TTFT)、计费来源(是否走 go)、本次计入额度与 x-opencode-log-id;失败时按密钥、额度、限流、上游、超时等分类提示。这是唯一会消耗 Go 月额度的请求,README 估算单次约 \(0.00001**,默认每 600 秒一次约 **\)0.001/天,界面会显示「今日 N 次 · 计入 $x」。
Go 额度¶
经 GET https://opencode.ai/zen/go/v1/usage(Bearer 为 Go key,只读、不耗额度)读取 5 小时窗口、本周、本月三条 percent 与 resetsAt;rate-limited 或高占用时进度条与收起态胶囊灯会变色。
数据台账¶
周期性拉取 https://opencode.ai/data/index.json 等公开 JSON,展示用量排位、会话成本、缓存命中、地区分布等;模型价格来自 Go 官方清单,并标注当前时段倍率(如 DeepSeek V4.1 Flash 在工作日部分 UTC 时段为峰值 ×2)。
安装与启用¶
安装方式以仓库 README 为准,不要凭插件名拼接 dsh plugin add github:owner/repo。
- Plugin Manager(npm 发布后):在 DSH 的 Plugin Manager 中搜索并安装
dsh-opencode。README 注明:npm 上的dsh-opencode包名可能被其他作者占用,若走 npm 发布可能需要换名(例如dsh-opencode-meter);尚未发布时可先用目录方式。 - 从目录安装 bundle:将本插件所在目录在 Plugin Manager 里用「从目录安装 bundle」(等价于
plugin_manager的install_bundle),DSH 会 link 进当前 profile。 - 刷新 Web UI(⌘R / Ctrl+R),右上角应出现悬浮仪表;若无,可重启一次 Harness 让客户端模块重扫。
凭据方面:若 profile 已配置 OPENCODE_GO_API_KEY(使用 opencode-go provider 时常见),探针与额度查询可直接使用;否则在仪表「设置」页签保存一把具 Go 订阅的 key,或将配置项 probeKeyEnv 指向你自己的凭据引用名。专用 key 写入 DSH 凭据库 DSH_OPENCODE_PROBE_KEY,不下发浏览器、不出现在 /api/state。
典型用法¶
安装并配置 key 后,可按 README 中的交互方式日常查看:
- 拖动标题栏移动仪表;右上角 ⟳ 立即刷新状态、用量与 Go 额度;⌃ 收成小胶囊(胶囊可拖,轻点展开)。
- 收起后的胶囊灯取「官方 Go 状态」与「最近一次实测结果」的较差者:官方显示正常但本机 key/额度异常时,胶囊也会变红。
- 在状态页 「实测 GO」 使用 「测一下」 手动探针(30 秒冷却);自动探针按
probeIntervalSeconds运行,倒计时显示在界面上。 - 标题旁可关 实测、额度 两个开关:关闭后对应区块隐藏,宿主停止相应定时请求(实测不再花额度、额度不再轮询)。
- 设置页可改探针/额度轮询间隔(分钟)、保存或清除专用 key;改动持久化到
$DSH_HOME/plugin-data/dsh-opencode/settings.json(权限 600)。
同源 API(供 Web UI 使用,不含 key)包括:
GET /dsh-opencode/api/state— 合并状态、用量、探针、额度与设置POST /dsh-opencode/api/probe— 手动探测,可选{"model":"..."},冷却 30sPOST /dsh-opencode/api/settings— 开关与间隔POST /dsh-opencode/api/key、DELETE /dsh-opencode/api/key— 专用 key 读写
配置要点¶
可在 profile 的 cordis.patch.yml 中覆盖插件 dsh-opencode 的 config,例如:
- id: dsh-opencode
config:
statusIntervalSeconds: 60 # 20–600
dataIntervalSeconds: 300 # 60–3600
requestTimeoutSeconds: 15 # 5–60
probeSamples: 120 # 20–500(本地时延样本数)
probeEnabled: true # 关掉则完全不发推理请求
probeIntervalSeconds: 600 # 120–3600
probeKeyEnv: OPENCODE_GO_API_KEY # 凭据引用名,不是 key 本身
probeModel: deepseek-v4.1-flash
probeTimeoutSeconds: 30 # 5–60
goModelsIntervalSeconds: 1800 # 600–7200
usageEnabled: true # Go 额度查询(只读,不消耗额度)
usageIntervalSeconds: 120 # 60–3600
数据来源与默认轮询间隔见下表(均可通过上述字段调整探针与额度相关项):
| 数据 | 地址 | 默认频率 |
|---|---|---|
| 实时状态 | https://opencode.ai/status/api/status |
60s |
| 用量数据 | https://opencode.ai/data/index.json |
300s |
| Go 模型/价格 | https://opencode.ai/inference/go/v1/models |
1800s |
| 实测探针 | https://opencode.ai/inference/go/openai/v1/chat/completions |
600s(可关,最低 120s) |
| Go 额度 | https://opencode.ai/zen/go/v1/usage |
120s(可关,最低 60s) |
适用场景与注意¶
适合谁:在 DSH 里长期使用 OpenCode Go 线路、希望不离开 Harness 就能对照「官方状态 + 本机线路 + 额度 + 可选真探针」的开发者。
运行与安全:插件随当前 DSH 进程权限访问网络与凭据服务;安装前应查看源码与 MIT 许可证,并知悉其会按间隔请求 OpenCode 公开端点,探针开启时会用你们的 Go key 发起计费极小的推理请求。端点可能随官方变更;除探针外数据缓存在宿主内存、不落盘。安全问题见仓库 SECURITY.md。
DSH 奉行「一切皆插件」;社区目录(如 SkillHub 插件页)为独立收录,与 DeepSeek、幻方无官方从属关系。
结尾¶
经过上面的步骤,dsh-opencode 把 OpenCode 状态页、额度 API 和本机链路观测收进 Harness 同一块悬浮仪表,并用可关闭的真探针回答「Go 推理此刻是否真的能走通」。若要进一步了解实现或贡献索引,可查阅 GitHub 仓库 与目录页 SkillHub:JAYcodr/dsh-opencode。