dsh-request-header-fix:爲自選模型請求補上 x-opencode-session

前言

在 DeepSeek Harness(DSH)裏,如果你把模型流量接到要求帶 x-opencode-session 的中轉站(例如轉發到 OpenCode 的線路),會話 UUID 必須出現在 HTTP 請求頭裏,中轉才能把多輪對話串在同一會話上。DSH 內置只會對 opencode、opencode-go 等少數 provider 自動補這個頭;你自己在 profile 裏配置的其它 provider 不會帶上。下面介紹社區插件 dsh-request-header-fix(維護者 a285292107s):在設置裏按 provider → 模型 勾選,只對選中的組合在發模型請求時追加 x-opencode-session: <當前 DSH 會話 UUID>。默認全部關閉,安裝後不改變任何現有請求。

這是什麼

dsh-request-header-fix 是 DSH 的 Cordis 插件包,分類屬於模型推理相關能力。它在 DSH 設置彈窗左側增加「請求頭修正」分區(order 12,排在「模型」與「插件」之間),列出已配置 provider 下的模型,用開關決定是否在 llm/stream 觸發的模型請求裏注入請求頭。裝、卸只改 web profile(依賴、bundles 與本包 patch 提供的 Loader 行),不寫入 DSH 安裝目錄。

核心功能

請求頭注入規則

注入點在 host 進程裏對 globalThis.fetch 的外包:當同時滿足「當前在 llm/stream 上下文」「有 sessionId」「本次請求的 provider 與 model 與勾選配置精確匹配」時,爲請求加上(或覆蓋已有同名頭):

x-opencode-session: <sessionId>

sessionId 來自 DSH 會話 UUID(同會話穩定、跨重啓不變),插件不生成、不持久化 id,也不讀寫會話存儲。未勾選、無 sessionId、或不在模型流上下文(如模型發現、用量查詢)時,請求與原樣一致。

設置頁與持久化

頁面按 provider 分組:組頭顯示名、provider id、已選計數,以及「全選」「清空」;組內每行一個模型開關。配置寫入插件命名空間(Loader id 爲 request-header-fix),字段形態爲 headerFix: Record<provider, string[]>,數組元素是模型 id。示例(寫入 profile 的 cordis.patch.yml 後大致如下):

- id: request-header-fix
  name: dsh-request-header-fix
  config:
    headerFix:
      mydeepseek:
        - deepseek-v4.1-flash
        - qwen3.8-max

deepseek-account 不會出現在列表中(賬號路由不走這套配置)。

默認與安全邊界

默認全關:未勾選任何模型時,行爲與未安裝插件相同。插件唯一的持久化寫入是上述勾選狀態;網絡仍由原 fetch 執行,沒有獨立端口或額外出站。勾選後,你選中的 provider 及其背後的中轉站會收到當前會話 UUID——這是功能設計,不是隱藏副作用。若只想停止帶頭而不卸載,清空全部勾選即可(下一條請求生效);徹底卸載後需重啓 dsh web,舊進程內的 fetch 補丁纔會消失。

安裝與啓用

從 GitHub 安裝(README 給出的命令,只改 profile):

dsh plugin --profile web add github:a285292107s/dsh-request-header-fix

構建產物 lib/ 已隨倉庫提供;若要釘住提交,可使用 github:a285292107s/dsh-request-header-fix#<commit>。

裝完後檢查 %USERPROFILE%\.dsh\profiles\web\package.json:dsh.profile.bundles 中應出現 dsh-request-header-fix。然後重啓 dsh web——host 半邊僅在進程啓動時加載,不重啓看不到「請求頭修正」分區。

本地改代碼時,先在倉庫內 npm install、npm run typecheck、npm run build,再:

dsh plugin --profile web add link:<本倉庫的絕對路徑>

link: 指向含 lib/ 的工作副本;Windows 路徑建議用正斜槓,例如 link:C:/Users/<user>/Desktop/dsh-request-header-fix。

卸載:

dsh plugin --profile web remove dsh-request-header-fix

卸載後同樣要重啓 dsh web。README 註明:卸載不一定會清理 profile 裏已寫入的 headerFix 設置項;若要 profile 乾淨,可在卸載前先清空全部勾選。

典型用法

  1. 按上文命令把插件加入 web profile,重啓 dsh web。
  2. 打開設置 → 請求頭修正,用搜索框按 provider 名/id 或模型名/id 過濾;展開目標 provider,打開需要走 OpenCode 類中轉的模型開關(或組頭「全選」)。
  3. 確認配置已落盤(profile 裏 request-header-fix 的 config.headerFix),在該會話中繼續對話;僅被勾選的 provider + 模型 id 組合會在模型流請求中帶頭。

若中轉仍收不到頭,按 README 故障排查:覈對 cordis.patch.yml 中的勾選、確認發請求的是已加載本插件並已重啓的 dsh web 進程,並注意模型 id 與請求時的 options.model 必須字符串完全一致(無通配)。

適用場景與注意

適合誰: 使用 DSH web profile、自建或第三方 provider,且線路文檔要求 x-opencode-session、但不在 DSH 內置自動補頭的 provider 列表裏的開發者。

環境與版本: 倉庫 README 在 2026-11-02 覈對的環境爲 DSH 0.2.2-alpha.2、Node v24.15.0、npm 11.14.1;插件包版本爲 0.1.1(MIT)。範圍僅 web profile;其它 profile 各有獨立設置命名空間。

安裝前建議: 插件以當前 dsh web 進程權限運行,會在 host 側 patch fetch 並按你的勾選改 outgoing 模型請求頭。安裝前應閱讀 GitHub 倉庫 源碼與許可證,並理解勾選會把會話 UUID 發給對應中轉站。

社區插件目錄由 SkillHub 等站點收錄,與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,是否採用由你自行評估。

結尾

dsh-request-header-fix 用最小改動把「按 provider/模型選擇性補 x-opencode-session」做成可關可卸的設置頁能力,默認不影響現有流量。目錄頁:https://www.skillhub.cn/plugins/a285292107s/dsh-request-header-fix;源碼與完整說明:https://github.com/a285292107s/dsh-request-header-fix。

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

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

小夜