dsh-opencode-go-x-session:为 OpenCode Go 路由补全 x-opencode-session 请求头

前言

在 DeepSeek Harness(DSH)里把模型路由配成 OpenCode Go(opencode-go 或 opencode-go-*)时,上游要求每次推理请求都带上 x-opencode-session:同一会话用稳定 id,用于路由和 prompt-cache 亲和。自 2026-09-05 起,缺少该头的请求会被拒绝,典型报错为 400 MissingSessionID。

DSH 只在部分 pi-ai 目录请求(带 sessionId)上原生发送该头;自动审查(auto-review)以及手写的 OpenCode Go 路由(如 opencode-go-free-none)往往没有。下面介绍社区插件 dsh-opencode-go-x-session(仓库 pengpenglele/dsh-opencode-go-x-session-code),它在传输层为匹配的 OpenCode Go 请求补上请求头,并覆盖自动审查那条调用链。

这是什么

dsh-opencode-go-x-session 是仅作用于 DSH 宿主进程的插件(npm 包名与安装名一致),维护者为 pengpenglele,分类属于联网工具。它在已配置的 OpenCode Go 提供商路由上,为发往 opencode.ai(含子域)的模型请求添加 x-opencode-session,且不改动其他主机或其他路由上的请求。

若你在 DSH 里看到 opencode-go 路由上的 400 MissingSessionID,或 OpenCode Go 会话下自动审查报 Auto review of tool "..." failed,README 将其列为适用安装场景。

环境要求

安装前请对照 README 与 package.json 中的声明:

项 要求
DSH >= 0.2.1-rc.2
Node.js >= 22.19.0
路由 已配置 OpenCode Go 提供商路由(opencode-go 或 opencode-go-*),并配有各自的 apiKeyEnv / baseURL
主机 请求目标为 opencode.ai(含子域)

当前 npm 版本为 1.2.1,许可证 MIT。插件以当前 DSH 进程权限运行;安装前建议在 GitHub 上查看源码与许可证,再决定是否启用。

核心功能

自动注入会话头

安装并完全重启 DSH 后,无需额外配置即可生效:opencode-go 及所有 opencode-go-* 路由指向 opencode.ai 的请求会自动带上 x-opencode-session,取值为 DSH 会话 id,同一会话多轮稳定、并发会话彼此区分。

自动审查场景

自动审查的请求跑在被审查 agent 的 driver 链里;插件通过 ctx.agents.currentInitiator() 解析该会话 id,使审查请求仍具备 prompt-cache 亲和,而不是退回到共享 id。

可热更新的设置项

设置 → 插件 → OpenCode Session Header。字段均为可选,保存后对下一次请求生效(volatile()),无需重启:

字段 默认值 含义
enabled true 总开关;false 时立即移除 fetch 补丁
providers ['opencode-go*'] 匹配的提供商路由 id,支持尾缀 *;空列表则不再注入
hosts ['opencode.ai'] 主机白名单,条目含子域;空列表则不做主机校验(例如走代理)
fallbackSessionId dsh-auto-review 当请求、作用域、发起方会话 id 均不存在时使用
debug false 通过 host logger 记录每次注入

默认模式不覆盖 plain opencode(非 Go)路由;若使用,需在 providers 中加入 opencode。代理到其他主机名时,把该主机加入 hosts,或将 hosts 设为 []。

安装与启用

Bundle 在 DSH 启动时组装,安装后必须完全重启 DSH 才会加载插件。

方式一:Web UI(推荐)

  1. 打开 DSH → Plugins(插件) → Add plugin(添加插件)。
  2. 输入包名:
dsh-opencode-go-x-session
  1. 安装完成后完全重启 DSH。

方式二:CLI

将 desktop 换成你实际使用的 profile 名:

dsh plugin --profile desktop add dsh-opencode-go-x-session

执行后同样完全重启 DSH。

验证是否生效

  1. DSH 启动日志应出现类似一行:
opencode-session-header: active (providers opencode-go*, hosts opencode.ai)
  1. 将 debug 设为 true,在 OpenCode Go 路由上开一轮对话,日志中可见:
[opencode-session-header] x-opencode-session: <session-id> -> <url>
  1. 原先症状应消失:不再出现 400 MissingSessionID;OpenCode Go 模型上的自动审查不再因缺少 session 而失败。

禁用与卸载

  • 设置里 enabled: false:立即恢复原始 fetch,无需重启。
  • 在插件管理中禁用 opencode-session-header 行:卸载整个插件并恢复原始 fetch。
  • 卸载包并重启:
dsh plugin --profile desktop remove dsh-opencode-go-x-session

常见问题(节选)

现象 处理方向
仍报 400 MissingSessionID 路由未匹配:在 providers 中加入精确 id 或 something* 模式
自定义端点仍 400 主机未在白名单:加入 hosts 或设 hosts: []
设置页没有该插件 未加载:重启 DSH 并查启动日志
插件拒绝加载 DSH 低于 0.2.1-rc.2,需升级 DSH
已启用仍不注入 其他插件后于本插件包装 globalThis.fetch;或请求已带静态 x-opencode-session(已有头优先,需去掉静态头)
自动审查仍失败 确认审查所用路由在 providers 内且插件已启用

工作原理(概要)

插件在支持的 llm/stream waterfall 上监听:对匹配 providers 的请求,按顺序解析会话 id——请求自身的 sessionId、外层 model-call 作用域、发起方 agent 的 currentInitiator()、最后 fallbackSessionId;并通过包装 globalThis.fetch,在主机白名单内且缺少该头时为 OpenAI SDK 默认传输补上 x-opencode-session。

结尾

在 DSH 社区生态里,OpenCode Go 与自动审查对 x-opencode-session 的缺口可以用传输层插件补齐,而不必在每个路由上手工写头。若你的 profile 已配 OpenCode Go 并遇到 MissingSessionID 或审查失败,可按上文安装 dsh-opencode-go-x-session 并重启验证。

  • 目录页:https://www.skillhub.cn/plugins/pengpenglele/dsh-opencode-go-x-session-code
  • GitHub:https://github.com/pengpenglele/dsh-opencode-go-x-session-code

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

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

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

小夜