前言¶
自 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。
核心功能¶
- 掛接官方席位:監聽宿主
llm-pi-ai/request-headers瀑布,在合法配置下爲符合條件的請求追加會話頭。 - 雙路匹配:
providers(與事件中的provider精確匹配)與hostSuffixes(baseURL主機後綴)二選一或組合;二者爲空則配置校驗失敗,避免靜默無效。 - 會話標識模式:
mode: session-id使用宿主會話 id(跨輪次、壓縮與重啓穩定);mode: uuid在進程內生成並複用不透明 uuid,可配置maxTrackedSessions(默認 4096)上限。 - 配置校驗可見:未知鍵、空數組、非法頭名、誤寫 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 席位完成這件事,配置項少、錯誤配置會明確報錯。