前言¶
DSH(DeepSeek Harness)桌面版每次啓動都會在本地隨機端口上拉起宿主進程,並通過瀏覽器會話完成 Web 認證。這條路徑在反覆啓動後會碰到一個與「登錄失效」無關的故障:Chromium 裏 dsh-auth-* Cookie 越積越多,最終把 Cookie 請求頭撐到 Node 默認上限附近,HTTP 層直接返回 431,殼層則統一報成 Web authentication failed。
手工刪除整份 Cookies 數據庫只能臨時止血,且會連帶清掉其他站點狀態。下面介紹社區插件 dsh-auth-cookie-guard(維護者 vi0let-dev,分類:客戶端):它在每次頁面加載後自動只刪多餘的 dsh-auth-*,保留當前端口那一枚,並在設置頁給出數量與風險指標。
這是什麼¶
dsh-auth-cookie-guard 是 DSH 桌面版插件,針對報錯形態大致如下:
Error: desktop welcome: Web authentication failed
at connectDesktopWelcome (.../lib/main.js:...)
根因是認證 Cookie 命名帶端口哈希,而 Chromium 按主機隔離 Cookie、不按端口;127.0.0.1 上歷次啓動留下的 dsh-auth-* 會隨請求一併發送。每啓動一次多一枚,默認約 30 天過期;按 README 估算,大約 70~90 次啓動後請求頭可能逼近 16 KiB 上限。
插件不把「清 Cookie」留給用戶手工刪庫,而是在運行中通過同源 API 與 Set-Cookie 讓瀏覽器只保留當前宿主端口對應的一枚,其餘過期刪除。它不讀會話內容、不寫用戶目錄、不聯網,也不刪除非 dsh-auth-* 的 Cookie。
問題機制(簡要)¶
理解插件行爲,需要先弄清桌面版的幾條事實(均來自項目 README):
- 桌面版啓動時宿主綁定新的迴環端口(實測落在
1024–15000段,例如127.0.0.1:13708)。 - 會話 Cookie 名爲
dsh-auth-<base64url(sha256("host:port"))>,名字裏編碼了端口。 - 同一主機下所有
dsh-auth-*會在每次請求裏一起發出;累積到數十枚後,Cookie頭過長觸發 431,應用代碼來不及介入。
因此適合用插件做「每次啓動後的定向清理」,而不是反覆刪整庫。
核心功能¶
README 中列出的能力如下,安裝後一般無需額外操作即可生效。
| 能力 | 說明 |
|---|---|
| 啓動自動清理 | 頁面加載後向插件路由發同源請求;從 Cookie 頭讀出所有 dsh-auth-*,只保留當前端口那一枚,其餘用 Set-Cookie 置空刪除 |
| 設置頁狀態 | 設置 →「認證 Cookie 守衛」:當前宿主地址、當前 Cookie 短名、上次請求攜帶數量與估算字節、風險分級、上次清理結果 |
| 一鍵清理 | 「立即清理」立即執行一次並回顯刪除數量 |
| 頁面內配置 | enabled、dryRun、warnAt 可在設置頁切換並保存,寫入當前 profile 的 cordis.patch.yml |
| 救援腳本 | 已 431 無法打開桌面版時,退出應用後運行 scripts/purge-auth-cookies.mjs,備份後只刪 dsh-auth-* 相關行 |
安全邊界(README 強調):路由要求 loopback 的 Host 與同源自定義頭 x-dsh-auth-cookie-guard;當前端口 Cookie 缺失時整批放棄刪除,避免誤踢會話;單次響應最多刪除 180 枚。運行時零第三方依賴,救援腳本使用 Node 內置 node:sqlite(要求 Node ^22.19.0 || >=24.0.0)。
安裝與啓用¶
安裝後需重啓 DSH 纔會加載新的 JS 模塊。官方 README 給出兩種方式(二選一,本倉庫不代你執行):
dsh plugin --profile desktop add github:vi0let-dev/dsh-auth-cookie-guard
本地開發或從目錄安裝時:
dsh plugin --profile desktop add <本目錄絕對路徑>
也可在 DSH 插件管理頁添加。package.json 標明插件版本 0.2.2,DSH 引擎要求 >=0.2.1-rc.2 <0.3.0。
安裝前應自行查看 GitHub 倉庫 源碼與 MIT 許可證;插件在 DSH 進程權限下運行,與任意社區插件一樣,信任邊界由你決定。
典型用法¶
經過上面的步驟重啓桌面版之後,可按三種粒度使用。
1. 自動模式(默認)
enabled 默認爲 true,每次啓動自動清理舊的認證 Cookie,通常無需手動干預。
2. 手動清理與狀態
打開 設置 →「認證 Cookie 守衛」→「立即清理」。頁面上「上次請求攜帶 N 枚認證 Cookie」中的 N 是是否接近風險的關鍵指標;README 建議健康值長期維持在 1~2。
3. 已經打不開桌面版時
頁面加載是自動清理的前提;請求頭已超限、啓動直接失敗時,需在完全退出桌面版後運行救援腳本:
# 1. 完全退出桌面版(托盤退出,並確認無殘留進程)
# 2. 在插件目錄下運行:
node scripts/purge-auth-cookies.mjs
# 只想先看看有多少枚、不改數據:
node scripts/purge-auth-cookies.mjs --dry-run
腳本會備份 Cookies 數據庫(同目錄生成 Cookies.dsh-cookie-guard-<時間戳>.bak),再只處理 127.0.0.1 / localhost 上名爲 dsh-auth-* 的條目。Windows 上數據庫路徑爲 %APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies;macOS/Linux 由腳本按平臺推導。
配置項¶
三個開關可在設置頁修改,點「保存」經 DSH configEditor 寫入當前 profile 的 cordis.patch.yml(非插件包內默認文件,升級插件不會覆蓋你已保存的項)。
| 字段 | 類型 | 默認 | 說明 |
|---|---|---|---|
enabled |
boolean | true |
啓動時自動清理;關閉後僅保留手動「立即清理」 |
dryRun |
boolean | false |
只報告不刪除,用於觀察將清掉哪些 Cookie |
warnAt |
integer 1–500 | 40 |
設置頁開始黃色告警的 Cookie 條數 |
「立即清理」不受 enabled / dryRun 限制。若當前 profile 沒有 configEditor,頁面會提示無法保存,仍可手改 profile 的 cordis.patch.yml。
適用場景與注意¶
適合誰:長期使用 DSH 桌面版、啓動頻繁、或曾遇到 Web authentication failed 且懷疑 Cookie 頭過長的一線開發者。
已知限制(README):
- 自動清理只對「能成功加載頁面」的啓動有效;已 431 的狀態必須先跑救援腳本。
- 插件無法直接改 Chromium 的
Cookies數據庫(運行中被獨佔),修復一律走瀏覽器應答。 - 宿主若改用
https或非127.0.0.1主機名,刪除邏輯以getOrigin()爲準;跨主機名情形未全覆蓋。 - 倉庫說明真機 Electron 行爲以本地測試與
AUDIT.md爲準,安裝前可自行覈對。
卸載:在插件管理頁停用並移除,重啓 DSH;可能的殘留僅爲救援腳本生成的 Cookies.dsh-cookie-guard-*.bak 備份。
結尾¶
dsh-auth-cookie-guard 把桌面版 dsh-auth-* Cookie 累積問題從「偶爾刪庫」變成「每次啓動定向清理 + 可觀測閾值」,降低因請求頭超限導致的啓動失敗概率。
DSH 生態主張「一切皆插件」;SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。選用插件時請以自己的環境、許可證與源碼審計結論爲準。