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 席位完成這件事,配置項少、錯誤配置會明確報錯。

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

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

小夜