前言¶
DeepSeek Harness(DSH)通過本地 Host 提供 Web 界面,瀏覽器用 dsh-auth-* 會話 Cookie 完成鑑權。Host 每次啓動若採用動態端口,瀏覽器仍按 127.0.0.1 共用同一 Cookie jar,舊啓動留下的 Cookie 不會被自動刪除;多次啓動後 Cookie 請求頭可逼近 Node 的 16 KiB 上限,請求在到達業務邏輯前即被拒絕,表現爲 431 Request Header Fields Too Large,有時界面只顯示 401 或「Web authentication failed」。刪會話、重裝往往無法恢復,因爲 jar 裏堆積的是歷史端口對應的 Cookie。
下面介紹社區插件 dsh-auth-cookie-sweep(維護者 GuYou9799,分類 admin-security):在 Host 進程內對響應路徑做包裝,在合適閾值下過期不屬於當前 authority 的陳舊 dsh-auth-*,避免長期反覆啓動把請求頭撐爆。插件以 npm 包 dsh-auth-cookie-sweep 分發,當前版本 0.1.4,許可證 MIT。
這是什麼¶
dsh-auth-cookie-sweep 是掛在 Host 進程裏的 Cordis 小插件:依賴公開的 webServer 服務,包裝 ServerResponse.writeHead,在發響應前根據請求的 authority 識別「其它啓動」留下的 dsh-auth-*,並按策略追加 Max-Age=0 的 Set-Cookie,讓瀏覽器從 jar 中刪掉它們。
與改 app.asar、重打包 Electron 相比,它不改變 DSH 本體;README 說明其不存儲數據、不附帶前端 bundle、不聯網。DSH 升級後仍可用,只要 webServer 行爲保持兼容。
Cookie 爲何會累積¶
理解插件前,先對齊 DSH 側與瀏覽器側的行爲(README 中的歸納):
| 組件 | 行爲 |
|---|---|
@deepseek-ai/dsh-desktop-host |
以 --port 0 等方式啓動 Host,每次啓動端口可能不同 |
@deepseek-ai/dsh-client-connection |
Cookie 名爲 dsh-auth- + sha256(authority),與當次 Host 的 authority 綁定 |
| 瀏覽器 | Cookie 不按端口隔離,同一 host 下多條 dsh-auth-* 會隨每次請求一併送出 |
| 有效期 | 約 30 天,且無登出流程刪除舊 Cookie |
於是每啓動一次常多出一條 Cookie,jar 只增不減;Cookie 頭大約每次增長 200 字節量級。到約第 72 次啓動附近可能越過 16 KiB,Node HTTP 解析器在任何 handler(含 DSH 自身)運行前就拒絕請求,故障表現爲「永久性」無法打開。
核心功能¶
響應階段的清理邏輯¶
對每個進入 Host 的請求,插件大致做三件事:
- 讀取
Cookie頭與當前請求的 authority(與 Host 歸一化方式一致:HTTP 爲host[:port],HTTPS 爲scheme://host[:port]); - 找出屬於其它 authority(舊啓動)的
dsh-auth-*; - 在滿足清理條件時,在 Host 原有響應頭之外追加過期指令,例如:
set-cookie: dsh-auth-fkJh9Q9…=; Max-Age=0; Path=/; HttpOnly; SameSite=Strict
當前這次啓動簽發的 Cookie 不會被誤刪;Host 在 303 換取時仍可正常下發新 Cookie,並與清理指令出現在同一條響應裏。
併發保護¶
單條「外來」dsh-auth-* 可能屬於另一個正在運行的 DSH 實例(另一端口)。貿然刪除會讓該實例掉線並再生成 Cookie。因此僅在下列情況之一才清理:
- 外來會話 Cookie 數量 ≥
minStaleCookies(默認 3),或 - 整個
Cookie頭已達到/超過maxCookieHeaderBytes(默認 4096 字節)。
多開一個實例通常只會多一條 Cookie,在默認閾值下不被清理;長期反覆啓動則不會在 jar 裏無限堆積。
實現與依賴範圍¶
- 入口
lib/index.js:inject: ["webServer"],在 HTTP 服務器創建後掛request監聽,卸載時通過ctx.effect移除。 lib/purge.js:authority 與 cookie 名推導(與dsh-client-connection一致)、閾值策略、writeHead包裝。- 除清理計數外基本不打日誌;不讀取、保存或打印 Cookie 值。
- 運行環境:
engines要求 Node^22.19.0 || >=24.0.0,DSH>=0.2.0-rc.2。
README 記載在 DSH 0.2.2-rc.1 上做過驗證;集成測試模擬約 300 次啓動,斷言 jar 規模與請求頭體積受控。
安裝與啓用¶
本插件是普通的 profile bundle(cordis.patch.yml 經 dsh.bundle.patch 注入)。web profile 可用 CLI 安裝:
dsh plugin --profile web add dsh-auth-cookie-sweep
若使用本地目錄,可用 file: 前綴指向絕對路徑(README 示例):
dsh plugin --profile web add file:/插件的絕對路徑/dsh-auth-cookie-sweep
dsh plugin add 只添加依賴;若你的插件管理器不會自動維護 bundle 列表,還需把包名寫入 ~/.dsh/profiles/<profile>/package.json 的 dsh.profile.bundles,例如:
{
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-auth-cookie-sweep"]
}
}
}
不啓動 DSH 也可檢查組合是否生效:
dsh --profile web --dump-config | grep -A2 auth-cookie-sweep
期望輸出中包含 id: dsh-auth-cookie-sweep 等條目。
桌面版(desktop profile):CLI 會拒絕 dsh --profile desktop 一類操作,README 建議通過應用內插件管理器/插件市場安裝,或自行修改 ~/.dsh/profiles/desktop/package.json 中的依賴與 bundles 後重啓 DSH。
社區插件目錄頁:https://www.skillhub.cn/plugins/GuYou9799/dsh-auth-cookie-sweep(與 DeepSeek / 幻方無官方從屬關係,僅爲社區收錄站點)。
配置項¶
在 bundle 的 insert 上可增加可選 config(非法或越界值會被收斂到安全範圍):
- insert:
- id: dsh-auth-cookie-sweep
name: dsh-auth-cookie-sweep
config:
minStaleCookies: 3 # 1..256
maxCookieHeaderBytes: 4096 # 512..16384
maxDeletions: 64 # 1..512,單次響應最多過期指令條數
secure: false # 省略則跟隨 Host 協議
已經打不開時怎麼辦¶
插件無法挽救已經超過 16 KiB、已被 Node 在解析階段以 431 拒絕的請求——此時任何 Host 側 JavaScript 都不會執行。需要先手工清空一次 jar,之後由插件長期抑制再堆積:
- 瀏覽器:開發者工具 → Application → Cookies → 對應
http://127.0.0.1:<端口>→ 刪除所有dsh-auth-*,或清除該站點數據。 - 桌面版 Electron:退出 DSH 後刪除
%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies與Network\Cookies-journal(README 稱 DSH 不依賴該存儲中的其它 Cookie),再啓動。
適用場景與注意¶
適合誰:長期在本地反覆啓動 DSH Web / 桌面 Host、且使用瀏覽器或 Electron 共用 127.0.0.1 Cookie jar 的開發者;希望用 Host 側小改動避免「幾十次啓動後再也打不開」的場景。
侷限(README 原文要點):
- 對已觸發
431的 jar 必須先手工清理一次。 - 只處理到達本 Host 的 Cookie;其它 origin 或 profile 的 jar 各自管理。
- 瀏覽器對單域名 Cookie 數量也有上限;插件把數量壓到足夠低,避免該上限成爲新症狀。
安全與信任:插件隨當前 DSH Host 進程權限運行,會介入 HTTP 響應頭中的 Set-Cookie。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認與自身環境策略一致。社區目錄與 GitHub 爲公開信息來源,不代表官方應用商店審覈結論。
結尾¶
dsh-auth-cookie-sweep 針對 DSH 本地 Web 鑑權 Cookie 按啓動累積、最終撐爆 Cookie 請求頭的問題,在 Host 響應路徑上按閾值過期陳舊 dsh-auth-*,並保留對併發多實例的保守策略。安裝命令以 README 爲準:dsh plugin --profile web add dsh-auth-cookie-sweep。