前言¶
DeepSeek Harness (dsh) 原生支持按提供方配置請求頭,但該字段僅在 settings.yaml 中可編輯,模型設置頁沒有入口。本插件通過 dsh 的插件機制,在模型設置頁增加了請求頭編輯器,並額外實現了 ${sessionId} 的按會話展開功能。
是什麼¶
這是一個爲 DeepSeek Harness(dsh)的模型設置頁添加“自定義請求頭”編輯器的插件。由用戶 duanyunlun 維護,通過插件機制在不修改源碼的情況下,爲每個 pi-ai 提供方卡片增刪請求頭,並將 ${sessionId} 替換爲當前會話 ID。
安裝¶
安裝前需確保系統已安裝 Node.js ^22.19.0 || >=24.0.0 和 pnpm。
# 從 npm 安裝(已發佈)
dsh plugin --profile desktop add dsh-provider-headers
# 從本地目錄安裝
dsh plugin --profile desktop add /path/to/dsh-provider-headers
# 從本地打包文件安裝
dsh plugin --profile desktop add ./dsh-provider-headers-0.1.0.tgz
安裝後需重啓對應 profile 才能加載瀏覽器端代碼。卸載時執行:
dsh plugin --profile desktop remove dsh-provider-headers
使用¶
- 打開 設置 → 模型。
- 展開任意一個 pi-ai 提供方卡片(DeepSeek 官方、內置第三方或自定義提供方均可)。
- 卡片中會出現 “自定義請求頭(N)”,展開後按
名稱/值逐行填寫。 - 點擊 保存,配置將寫入 Harness 原生的
settings.yaml。
典型示例¶
以 OpenCode Go 爲例,該服務要求所有推理請求攜帶 x-opencode-session。在對應卡片中添加一行:
| 名稱 | 值 |
|---|---|
x-opencode-session |
${sessionId} |
保存後,每次流式請求都會帶上屬於該會話的 ID。若不需要會話展開,直接填寫固定值即可。
機制說明¶
Harness 原生配置無法實現 ${sessionId} 的按會話展開,因爲同一路由下所有會話共用一個值。插件通過以下機制實現:
- 監聽
llm/stream瀑布流,將一次流式調用放入攜帶會話 ID 的AsyncLocalStorage作用域。 - 在插件生命週期內包裝
globalThis.fetch,只有處於上述作用域內的請求才會附加展開後的請求頭。
固定值的請求頭仍走 Harness 原生邏輯,不受影響。
配置¶
插件支持在 settings.yaml 中配置以下項:
- id: model-headers
config:
dynamic: true # 默認 true,設爲 false 則不安裝 fetch 包裝與監聽器
hosts: [] # 默認空,填寫則按主機後綴收窄生效範圍
注意事項¶
- 僅覆蓋 pi-ai 路由:
llm-deepseek路由的 Config 中沒有headers字段,該路由的卡片不會出現此編輯器。 - user-agent 無法覆蓋:它是 Harness 的歸屬標識,插件無法修改。
- ${sessionId} 僅對流式生效:“獲取可用模型”請求不經過
llm/stream,因此那裏仍發送字面量。 - 明文存儲:請求頭值以明文存儲在
settings.yaml,不要將密鑰寫進請求頭,請使用 Harness 的憑據字段。 - 編輯器位置:渲染在卡片內而非獨立的“編輯”表單,這是模型設置頁僅有的擴展槽位。
結尾¶
本插件填補了 DSH 模型設置頁缺少請求頭 UI 入口的空白,並解決了原生配置無法隨會話動態變化的問題。它通過標準的插件機制實現,卸載後可完全還原。更多細節可參考插件目錄或源碼倉庫。