OCG Session Head:为自定义 OpenCode Go 路由注入 x-opencode-session

前言

自 2026-09-05 起,OpenCode Go 要求每次推理请求携带稳定的 x-opencode-session 请求头;缺失时服务端会返回 400,错误类型为 MissingSessionID。在 DeepSeek Harness(DSH)里,若你通过 pi-ai 内置的 opencode / opencode-go 官方路径接入,较新的 pi-ai 已会自动补上该头,一般不必再装插件。

另一种常见做法是:实际连的是 OpenCode 服务,但 provider 名称自定(手写 baseURL,api 设为 openai-completions,例如名叫 ocg)。这条路由不会走 pi-ai 的内置包装,请求里也就不会自动带上会话头。下文介绍的 @verneuil/dsh-ocg-session-head(维护者 verneuil)专门解决这个问题:在宿主预留的 llm-pi-ai/request-headers 席位里,按会话写入 x-opencode-session,不猴补丁 globalThis.fetch,也不依赖 AsyncLocalStorage。它是早期 dsh-opencode-session(fetch 猴补丁方案)的替代实现。

这是什么

插件全名 OCG Session Head(npm:@verneuil/dsh-ocg-session-head),归类为模型推理相关能力。做的事只有一件:在 DSH 发出 LLM 请求前,对匹配的 provider / 主机后缀,注入配置好的会话请求头(默认头名为 x-opencode-session)。仓库:https://github.com/verneuil/dsh-ocg-session-head;社区目录:https://www.skillhub.cn/plugins/verneuil/dsh-ocg-session-head。许可证 MIT。

核心功能

  1. 挂接官方席位:监听宿主 llm-pi-ai/request-headers 瀑布,在合法配置下为符合条件的请求追加会话头。
  2. 双路匹配:providers(与事件中的 provider 精确匹配)与 hostSuffixes(baseURL 主机后缀)二选一或组合;二者为空则配置校验失败,避免静默无效。
  3. 会话标识模式:mode: session-id 使用宿主会话 id(跨轮次、压缩与重启稳定);mode: uuid 在进程内生成并复用不透明 uuid,可配置 maxTrackedSessions(默认 4096)上限。
  4. 配置校验可见:未知键、空数组、非法头名、误写 Harness 归因头等会导致插件激活失败并指出字段,不按默认值悄悄回落。

版本与前提

项目 要求
DSH ≥ 0.2.2(llm-pi-ai/request-headers 自 0.2.2-alpha.3 出现,0.2.2-rc.1 起稳定)
Node 纯 ESM、零依赖,无额外 Node 版本声明

在低于 0.2.2 的宿主上安装不会报错,但事件不会触发,行为等同未安装;可先安装、后升级宿主再做联调。

不需要本插件的情况(README 必读条件):

  • 宿主不是 DSH 0.2.2 及以上。
  • OpenCode / OpenCode Go 走 DSH 官方路径(内置 opencode / opencode-go),且 pi-ai 已自动加头。

安装与启用

通过 npm(推荐)

在 DSH 插件管理器中安装 @verneuil/dsh-ocg-session-head,或固定版本(资料示例为 @verneuil/dsh-ocg-session-head@0.1.1),也可直接写入 profile 的 package.json:

"@verneuil/dsh-ocg-session-head": "^0.1.1"

当前 npm 包版本以仓库发布为准(package.json 中可见 0.1.3 等标签,安装时可按需 pin)。

离线 tarball

勿将安装器指向包目录(pnpm 会生成 link:,DSH 解析拦截失效,常见 failed to import)。仅使用 tarball,在 profile dependencies 中写 file: 绝对路径,再用 DSH 捆绑的 node/pnpm 在 profile 目录执行 pnpm install。具体 PowerShell 示例见仓库 README 第 3.2 节。

无论哪种方式,安装后需手动重启 DSH(重启会结束宿主内 AI 进程)。

典型配置

插件自带默认 cordis.patch.yml;可在 profile 的 cordis.patch.yml 中按 id 覆盖(整段 config 会被替换):

- id: dsh-ocg-session-head
  config:
    providers:
      - ocg
    debug: true

常用字段(未列出项见 README 表格):

键 默认 含义
providers ['ocg'] provider 白名单
hostSuffixes ['opencode.ai'] baseURL 主机后缀白名单
header x-opencode-session 注入的头名
mode session-id session-id 或 uuid
debug false 每次成功注入是否打一行日志

若自定义 provider 名不是 ocg,把 providers 改成与你的路由一致的名称即可。

适用场景与注意

适合:DSH ≥ 0.2.2,且 OpenCode Go 以自定义 provider 名 + 手写 baseURL 方式接入的开发者。

不适合:仅使用官方 opencode / opencode-go 路径且已自动带头的情况——多装一层是冗余。

安全与信任:插件在 DSH 进程权限下运行,会向出站 HTTP 请求写入头字段。安装前建议阅读仓库源码与 MIT 许可证;勿在配置里将头名设为宿主保留的归因头(如 user-agent、x-deepseek-harness-*),校验会直接拒绝。

仓库提供无宿主自测:node scripts/self-test.mjs(零依赖),可在本机核对逻辑而不启动 DSH。

结尾

官方 OpenCode 路径已有自动会话头时不必安装;自定义 provider 名称的 OpenCode Go 路由则需要显式注入 x-opencode-session,否则容易碰到 MissingSessionID。OCG Session Head 用宿主官方 request-headers 席位完成这件事,配置项少、错误配置会明确报错。

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

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

Xiaoye