dsh-gateway-models:为 OpenCode Go 与 Command Code 网关路由补齐协议、地址与模型清单

前言

在 DeepSeek Harness(DSH)里走 OpenCode Go、Command Code 这类网关路由时,常见麻烦是:路由缺 api 会报 needs an api、要自己填 baseURL、模型列表不完整,发往 OpenCode 的请求还可能因缺少会话头触发 400 MissingSessionID。手工改路由配置能缓解,但每个宿主、每条路由都要重复维护,且引擎目录里未必已经包含 DeepSeek V4.1 等新型号。

itchenshi/dsh-gateway-models 是社区维护的只有宿主半边的 DSH 插件(分类:模型推理)。它在装配层自动补全上述路由的 wire 协议、默认端点与模型清单,并为 OpenCode 相关请求附加 x-opencode-session,装好后重启引擎即可生效,无需单独打开插件页面。

这是什么

  • 名称:dsh-gateway-models(GitHub:itchenshi/dsh-gateway-models)
  • 维护者:itchenshi
  • 定位:DeepSeek Harness 插件,面向 opencode-go 与 commandcode 网关路由,声明 OpenCode Go / Command Code 的路由协议与 endpoint,补齐模型列表,并处理会话头。
  • 许可:MIT(见仓库 README)

插件不注册页面半边,也不读本机 HTTP 路由;密钥仍由引擎按 apiKeyEnv 解析,插件不写、不读 API key。

核心功能

下面按两条路由分别说明插件在启动装配阶段做了什么(事实以仓库 README 为准)。

OpenCode Go(opencode-go)

  1. 为路由声明 wire 协议 api: openai-completions,避免目录外模型报 needs an api。
  2. 读取引擎自身的模型目录,把 DeepSeek V4.1 系列补进 opencode-go 清单,并排到第一位;用户已配置的条目保留且顺序不变。
  3. 若路由没有 baseURL,补上 https://opencode.ai/zen/go/v1;已配置的地址不会被修改。

重启后可在模型选择器里核对:第一项应为 DeepSeek V4.1 Flash;llm-pi-ai.providers.opencode-go 中 V4.1 排在首位。

Command Code(commandcode)

  1. 为路由声明 api 与 baseURL,用户侧通常只需填密钥,不必手填 API 地址。
  2. 通过公开目录接口 GET https://api.commandcode.ai/provider/v1/models(无需 key、请求不带 Authorization)补齐模型清单,策略为只增不改、幂等。

Command Code 半侧只对用户层已配置过的路由生效(例如填过密钥),并按接口地址 api.commandcode.ai 识别路由;路由名叫 commandcode、commandcode-goat 等均可。

会话头 x-opencode-session

对发往 OpenCode / OpenCode Go 路由的请求附加 x-opencode-session:

  • 默认 mode: uuid:每个会话一个随机 UUID,不把内部会话 ID 发给第三方。
  • 可选 mode: session-id:显式发送内部会话 ID。

用于缓解 MissingSessionID 一类错误,并支持会话亲和等场景。

安装与启用

安装命令须来自官方 README,装完按提示重启引擎(无页面半边,无需额外界面配置)。

DSH Ready GUI(推荐)

插件随 GUI 内置:打开 GUI → 设置窗口 →「第三方插件」勾选网关路由,安装后重启引擎。

其它 DSH 宿主(dsh web / CLI)

任选一条(两条装到的都是仓库完整内容,含 cordis.patch.yml):

# 推荐:直接从 GitHub 装
dsh plugin --profile web add github:itchenshi/dsh-gateway-models

# 备选:从 Release tarball 装(示例版本 v0.2.6)
dsh plugin --profile web add https://github.com/itchenshi/dsh-gateway-models/releases/download/v0.2.6/dsh-gateway-models-0.2.6.tgz

本包不在 npm 上(registry.npmjs.org 查无此包),只能用 GUI 内置或上述两种方式安装。

配置(可选)

cordis.patch.yml 里 id: opencode-go 对应行的 config 全部可选:

键 默认 说明
providers [opencode, opencode-go] 附加会话头的路由名;自定义路由名时加入
commandcodeProviders 无 额外的 Command Code 路由 id;仅当某条路由的地址在配置里看不到时才要填
mode uuid uuid = 每会话随机 UUID;session-id = 发送内部会话 ID
debug false true 时记录每个收到会话头的流式调用
debugFile 无 追加 JSON 日志的路径;仅 $DSH_HOME/logs 或系统临时目录下生效,超过 8 MiB 停止追加

不改动配置时,使用上述默认值即可。

典型用法与验证

没有独立 UI:安装并重启引擎后,插件在装配层改路由配置。

  1. OpenCode Go:在模型选择器确认第一项为 DeepSeek V4.1 Flash;必要时查看 llm-pi-ai.providers.opencode-go 中排序。
  2. Command Code:在已配置密钥的路由上查看模型列表是否相对安装前增多;启动日志中正常会出现类似
    [gateway-models] "commandcode": N model(s) from the provider catalog (list X -> Y) 的行。
  3. 会话头:默认 UUID 模式;若需调试,将 debug 设为 true 或指定合规的 debugFile 路径。

宿主启动日志中若出现
[gateway-models] active for providers [opencode, opencode-go] with mode uuid (debug=off),表示 OpenCode 相关半侧已激活。

适用场景与注意

适合谁

  • 使用 DSH 网关路由(OpenCode Go、Command Code),希望少填 baseURL、少手工维护模型列表的开发者。
  • 需要 DeepSeek V4.1 在 OpenCode Go 列表置顶,或需要从 Command Code 公开目录同步完整模型清单的场景。
  • 遇到 OpenCode 路由 MissingSessionID、需要稳定 per-conversation 会话头时。

环境与兼容性

  • DSH >= 0.2.0-rc.2(0.1.x 因设置服务 API 变更无法写入路由配置)。
  • Node >= 20。
  • 依赖引擎装配层、settings 服务与 llm 事件的公开契约;契约变更时引擎会在启动时显式报插件加载失败,而非静默失效。

安全与信任

插件以当前 DSH 进程权限运行;安装前应阅读仓库源码与 MIT 许可证。除 Command Code 公开模型目录的 GET 请求外,插件不发起需密钥的出站调用,也不注册本机 HTTP 路由。配置写入经 settings 服务校验,失败时整笔拒绝,不会留下半份配置。

常见问题(摘自 README)

  • V4.1 未出现:若日志为 llm.discoverModels() is unavailable 或 could not detect the "opencode-go" model catalog,插件会跳过自动补模型,而不是猜测。
  • Command Code 列表未补齐:若出现 could not read the Command Code model catalog (...),说明公开目录请求失败,原列表保持不变。

DSH 生态理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-gateway-models 把 OpenCode Go 与 Command Code 网关路由上重复的协议、端点、模型与会话头工作收到一个宿主插件里:V4.1 置顶、Command Code 目录同步、默认 x-opencode-session,装完重启即可在模型选择器与日志里验证。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜