前言¶
在 DSH 里接 OpenCode Go 订阅时,你通常只能拿到一个内置 provider:模型列表是构建期写死的快照,网关新增模型要等上游发版才能用;看不到额度窗口,也看不到花费;想单独关掉某个模型,也没有开关。@dan-ai-studio/dshopencodego 补的就是这几件事。
这个插件由 dan-ai-studio 维护,仓库分类是「模型推理」,目前 GitHub 星标 1、fork 0,License 为 MIT。它不是一个新模型,也不是新的推理服务,而是在 DSH 的插件机制上给 opencode-go 路由换了一个适配器,并附带用量与设置界面。
这是什么¶
一句话定位:给 DeepSeek Harness(DSH)提供的 OpenCode Go provider 适配器,让模型列表实时来自网关,并保证每个推理请求都携带网关要求的 x-opencode-session 头。
它解决的问题分两层:
- 网关侧的接口约束。Go 要求每个请求带稳定的
x-opencode-session,缺失会直接返回400 MissingSessionID。 - 使用体验。模型目录、额度、花费、逐模型开关这些原生 DSH 不提供的信息,由插件补齐。
原生 DSH 已经能连 OpenCode Go(llm-pi-ai 内置该 provider)。安装前建议先看清下面的对照表,确认你要的是本插件独有的能力,而不是只想连通。
与原生能力对照¶
| 能力 | 原生 DSH | 本插件 |
|---|---|---|
| 实时模型目录 | 构建期快照,网关新增模型要等 pi-ai 发版 | 实时读取网关目录,多级回退 + TTL 缓存 |
| 额度窗口(5 小时 / 本周 / 本月) | 无 | 有 |
| 花费估算 | 无 | 有 |
逐模型开关 modelVisibility |
无 | 有 |
关于会话头有一点需要说明:它曾是这个插件的原始存在理由,但 pi-ai 已在 2026-09-09(commit 561a2e06)实现注入,llm-pi-ai 现在会自动携带该头,原生 DSH 也不会缺会话头。插件目前仍保留自己的实现(为缺失会话 id 的请求提供一次性 UUID 兜底),后续待上游收敛后再收缩,评估过程见仓库的 docs/scope-review-2026-10.md。
核心能力¶
下面按插件实际声明的能力列,不额外推断。
- 实时模型目录。模型列表从网关读取,配多级回退和 TTL 缓存,不再依赖 pi-ai 打包时生成的固定表。缓存时长由
refreshMinutes控制,默认 60 分钟,取值 1 ~ 10080(7 天)。 - 额度窗口。展示 5 小时 / 本周 / 本月三个窗口的用量。
- 花费估算。按轮给出花费,配合请求日志可看到单轮花费。
- 逐模型开关
modelVisibility。在设置页直接开关某个模型;未写到的模型走默认规则。 - 逐模型容量与协议覆盖。
modelLimits覆盖 contextWindow 与 maxTokens,modelProtocols作为最后兜底指定协议。 - 请求日志。默认关闭,打开后提供侧边栏整页与「会话内请求日志」标签页两个入口,记录时间、模型、会话、输入/输出/缓存、缓存命中、tok/s、首字、耗时与状态,点击行可展开 HTTP 明细。
- 连接保留。
keepAliveTimeoutMs决定与网关的连接在两次请求之间保留多久,计时器每次收到回答后重新计时。 - 重试策略。
retryPolicy由dsh-llm-retry执行,支持normal/always两种模式。
安装与启用¶
前提:DSH 在 0.2.0 系列(0.2.0-rc.1 及之后);Node ^22.19.0 || >=24.0.0;dsh 与 pnpm 可用。
先注意路由互斥:同一个 profile 里 opencode-go 只能由一个适配器提供。装本插件前,先卸载旧插件,或清空 llm-pi-ai 配置里名为 opencode-go 的 provider:
dsh plugin --profile <p> remove @dan-ai-studio/dsh-opencode-go
否则插件会记录一条明确的占用诊断,路由不会注册(其余功能照常)。
方式一:npm(推荐)¶
dsh plugin --profile web add @dan-ai-studio/dshopencodego@<版本>
仓库 package.json 当前版本为 0.1.77。
安装后要确认插件真的加载了,--dump-config 不能作为证据。启动输出里应出现插件自己的注册日志:
dshopencodego: route "opencode-go" registered as OpenCode Go
enabled: false 时是 dshopencodego: disabled by configuration; …。没有这条日志就没加载;被版本门禁拒绝时,同一条输出流里会打印 Plugin … is incompatible with dsh …。
没有 HMR 的 profile 安装后会回报 restart-required(restartReason: no-hmr),需要重启 DSH 后才生效。日志位置:启动失败会把完整诊断写到 $DSH_HOME/logs/startup-<时间戳>-<uuid>.log 并打印该路径;dsh plugin 失败会打印 dsh: plugin command failed; diagnostics: <路径>。
确认会话头是否真的发出去了,可以用仓库自带的零成本预检:
node tools/verify/live-check.mjs --check-only
它会打印本次将会携带的 x-opencode-session 与 x-session-affinity。去掉 --check-only、加 --allow-live 才会真发一次最小请求(会产生费用),脚本随后断言并打印 OK x-opencode-session: <会话 id>。
方式二:GitHub Release¶
dsh plugin --profile web add https://github.com/dan-ai-studio/dshopencodego/releases/download/v<版本>/dan-ai-studio-dshopencodego-<版本>.tgz
方式三:本地构建¶
npm ci
npm run build
npm pack
dsh plugin --profile web add ./dan-ai-studio-dshopencodego-<版本>.tgz
用本地路径安装 tarball。把远程 tarball URL 装进一个已有缓存的 profile 会撞上 pnpm 的 ERR_PNPM_MISSING_TARBALL_INTEGRITY。
升级与卸载:
dsh plugin --profile web add <新版本 tarball 或包名>
dsh plugin --profile web remove @dan-ai-studio/dshopencodego
pnpm 对同名本地 tarball 会静默复用旧内容(added 0),升级本地构建时请改文件名再装。
桌面端¶
DSH 桌面端是 Electron 壳 + 完整的 dsh Web 应用,本插件的 client 半边声明的平台就是 web。桌面端使用自己的 profile $DSH_HOME/profiles/desktop,与 profiles/web 互不共享:凭证、模型可见性与插件设置都要在桌面端重新配一次。
安装必须走应用内界面,不要用上面的 dsh plugin 命令,因为桌面端 profile 由 Electron 自己拥有,CLI 不能启动也不能修改它。
- 打开桌面端 → 设置 → Plugins(插件)页;
- 安装规格填
@dan-ai-studio/dshopencodego(或指定版本,如@dan-ai-studio/dshopencodego@0.1.11),确认安装; - 按提示重启应用,再到设置页填 API Key,引用名
OPENCODE_GO_API_KEY。
桌面端内置的 DSH 版本要落在已声明并验证过的版本带内(>=0.2.0-rc.1 <0.3.0)。若插件导致启动失败,桌面端的原生恢复对话框可以一键禁用第三方插件、备份 cordis.patch.yml 后重启。
配置¶
配置写在 profile 的 cordis.patch.yml:
- id: dshopencodego
name: '@dan-ai-studio/dshopencodego'
config:
enabled: true
apiKeyEnv: OPENCODE_GO_API_KEY
baseURL: https://opencode.ai/inference/go/v1
refreshMinutes: 60
streamIdleTimeoutMs: 300000
keepAliveTimeoutMs: 600000
imageBudgetPreset: dsh
modelVisibility:
glm-5: true
modelLimits:
kimi-k3:
contextWindow: 262144
maxTokens: 32768
modelProtocols:
some-new-model: openai-responses
pinnedAddresses:
opencode.ai: 104.18.32.47
requestLogEnabled: false
requestLogDebug: false
requestLogMaxEntries: 200
retryPolicy:
mode: normal
maxRetries: 2
retryableCodes: [RATE_LIMIT, TIMEOUT]
backoff:
initialDelayMs: 500
maxDelayMs: 10000
jitterRatio: 0.1
几个默认值和取值范围:
baseURL默认https://opencode.ai/inference/go/v1,也可指定为https://opencode.ai/inference/v1(Console 主端点,含按量/免费模型)。只能是不带 query / fragment 的 http(s) 地址,写?x=1会在保存配置时被拒。refreshMinutes取值 1 ~ 10080。streamIdleTimeoutMs默认 300000,上限2147483647。它约束的是两次流事件之间的最长静默,不是请求总时长,长思考模型只要持续产出事件就不会被误判。超时抛出TIMEOUT,属可重试类。keepAliveTimeoutMs默认 600000,取值 1 ~ 1800000。它只影响固定了地址(pinnedAddresses)的部署:没有固定地址时走系统自己的 fetch,插件不加任何东西。连接一旦断开,下一轮第一个 token 要多付一次约 200ms 的 TCP 与 TLS 握手,所以这条配置在对话场景下有实际意义。设置页以秒显示与填写,存储时换算成毫秒。imageBudgetPreset三选一:dsh/dshopencodego/pi-ai,默认dsh。modelProtocols合法值只有anthropic-messages/openai-completions/openai-responses。写错会让该模型以「配置缺失」出现(开关关闭、不可选),而不是回退到猜测。requestLogEnabled默认关闭。关闭后入口一并消失,请求路径与没有该日志时逐字节一致。保留条数requestLogMaxEntries取值 50 ~ 500,默认 200。retryPolicy是联合类型:normal读maxRetries/retryableCodes/backoff,always只读backoff。maxRetries默认 5,backoff的initialDelayMs默认 500、maxDelayMs默认 10000、jitterRatio默认 0.1。
上述约束在写入 profile 时就校验,不会拖到第一次请求。
API Key 通过 Harness 凭证库提供(引用名 OPENCODE_GO_API_KEY),也可以直接 export OPENCODE_GO_API_KEY=...。
典型用法¶
装完插件、填好 API Key 之后,常规流程是:
- 重启 DSH(无 HMR 的 profile 必须重启),确认启动输出里有插件注册日志。
- 打开设置页,在模型列表里用
modelVisibility关掉不需要的模型,或用modelLimits为个别模型指定 contextWindow 与 maxTokens。 - 如果要排查某一轮为什么慢,打开
requestLogEnabled,在会话内的「请求日志」标签页看本会话请求的耗时、tok/s、首字与状态,点开行可看 HTTP 明细。 - 网关侧新增模型后,目录会在
refreshMinutes到期后自动刷新;希望立刻生效就缩短该值或等待下一轮缓存过期。
需要确认插件在跑而不想发真实请求时,用 --check-only 预检即可,它会把这次将会携带的 x-opencode-session 与 x-session-affinity 打印出来。
适用场景与注意¶
适合这几类情况:
- 已经用原生 provider 连通 OpenCode Go,但需要实时模型目录、额度窗口或花费估算。
- 需要在设置页逐个开关模型,或为特定模型覆盖容量参数。
- 需要逐请求日志来定位慢请求、缓存命中与连接复用情况。
不适合:只是要一个能用的 OpenCode Go 连接,且不需要上面任何一项能力——原生 DSH 已经内置该 provider。
注意事项:
- 插件以当前 DSH 进程的权限运行,会访问网络与 Harness 凭证库(引用名
OPENCODE_GO_API_KEY)。安装前先读一遍源码与许可证(MIT),确认行为符合你的部署环境。 - 路由互斥。同一个 profile 里
opencode-go只能由一个适配器提供,装之前先卸载旧插件或清空对应 provider 配置。 - profile 之间不共享凭证。桌面端的
profiles/desktop与profiles/web互不共享,凭证、模型可见性与插件设置都要在桌面端重新配一次。 - 目录页与社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,它不是官方应用商店,安装与版本信息以 GitHub 仓库为准。
- 本插件当前版本为
0.1.77,DSH 版本需落在>=0.2.0-rc.1 <0.3.0-0;星标 1、fork 0,属于早期阶段的社区项目,改动节奏以仓库 release 为准。
小结¶
这个插件做的事情很窄:给 DSH 的 opencode-go 路由换一个适配器,把模型目录、额度、花费和逐模型开关补上,再附带一份逐请求日志。如果你的使用场景正好落在这几项上,值得一试;如果只是要连通,原生 DSH 已经够用。
- 目录页:https://www.skillhub.cn/plugins/dan-ai-studio/dshopencodego
- GitHub:https://github.com/dan-ai-studio/dshopencodego