前言¶
在 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(推荐)¶
- 打开 DSH → Plugins(插件) → Add plugin(添加插件)。
- 输入包名:
dsh-opencode-go-x-session
- 安装完成后完全重启 DSH。
方式二:CLI¶
将 desktop 换成你实际使用的 profile 名:
dsh plugin --profile desktop add dsh-opencode-go-x-session
执行后同样完全重启 DSH。
验证是否生效¶
- DSH 启动日志应出现类似一行:
opencode-session-header: active (providers opencode-go*, hosts opencode.ai)
- 将
debug设为true,在 OpenCode Go 路由上开一轮对话,日志中可见:
[opencode-session-header] x-opencode-session: <session-id> -> <url>
- 原先症状应消失:不再出现
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 / 幻方无官方从属关系。