dsh-cookie-guard:清理 DSH 桌面端堆積的 dsh-auth-* Cookie,避免 431 打不開

前言

Windows 上的 DeepSeek Harness 桌面端用一段時間後,可能在某次啓動時突然打不開,報 Web authentication failed。排查方向往往先想到登錄態失效、Host 端口衝突,但實際原因是 Cookie 庫被登錄 Cookie 撐太大了:每次啓動都會多沉積一條 dsh-auth-*,從不清理,攢到約 70 條時 Cookie 請求頭超過 Node 默認的 16 KB 上限,本地 Host 直接回 431。

下面介紹的 m0yun/dsh-cookie-guard 就是針對這個問題的插件。它不做快捷方式加殼、不改啓動方式,而是在 DSH 啓動時掛一個後臺清理器,等 DSH 退出後刪掉上一輪及更早的 dsh-auth-*,下一次啓動就是乾淨的。

這是什麼

dsh-cookie-guard 由 M0Yun 維護,分類 admin-security,目錄頁星標爲 1。定位很單一:後臺清理 DSH 桌面端殘留的 dsh-auth-* 登錄 Cookie,解決由 Cookie 堆積引起的 431 打不開問題。許可證爲 MIT。

問題根因在 @deepseek-ai/dsh-client-connection:Cookie 名由 authority 哈希得到,

const COOKIE_PREFIX = "dsh-auth-";
function cookieName(authority) {
  return COOKIE_PREFIX + encodeBase64Url(createHash("sha256").update(authority).digest());
}
// authority = "127.0.0.1:<隨機端口>"

Host 每次啓動都換隨機端口,因此每次啓動的 Cookie 名都不一樣;Max-Age 又是幾十天,Chromium 不會主動清,DSH 裏也沒有刪除舊 Cookie 的代碼。沉積量隨啓動次數線性增長:

啓動次數 沉積的 dsh-auth-* Cookie 請求頭
1 1 條 ~0.2 KB
30 30 條 ~6 KB
70 70 條 > 16 KB → 431

核心功能

清理器的工作方式分三步:

  1. 插件加載時(Host 啓動)detach 一個獨立清理進程 lib/cleaner.mjs,父進程退出它也不受影響。
  2. 清理器每 15 秒探測一次 Cookies 庫能否獨佔打開。打不開說明 DSH 還在跑(Chromium 獨佔該文件),繼續等;打得開說明 DSH 已退出,立刻執行 delete from cookies where name like 'dsh-auth-%' 加 VACUUM,然後自己退出。
  3. 下次啓動時庫裏只剩本次要寫的那一條,請求頭穩定在幾百字節。

清理只用 node:sqlite(Node 22.5+ 內置),沒有第三方依賴,也不需要 Python 或 PowerShell。插件目錄結構如下:

lib/index.js      cordis 插件:註冊 cookie_guard 工具 + 啓動清理器
lib/cleaner.mjs   後臺清理器:等鎖釋放 → 刪 dsh-auth-* → 退出
cordis.patch.yml  bundle 註冊行

安裝與啓用

安裝命令來自 README 原文,從倉庫直接裝:

# 直接從倉庫裝(推薦)
dsh plugin add github:M0Yun/dsh-cookie-guard

# 或者裝本地目錄
dsh plugin add D:\path\to\dsh-cookie-guard

需要注意一點:npm 上的 dsh-cookie-guard 不是這個倉庫,那是別人的同名包(0.1.1),不要用 dsh plugin add dsh-cookie-guard。

安裝後重啓 Harness,插件開始工作。之後正常開關 DSH 即可,不用改任何使用習慣。回滾命令:

dsh plugin remove dsh-cookie-guard

插件只會在 %APPDATA%\@deepseek-ai\dsh-desktop\Network\ 下寫 Cookies.guard.pid 和 Network.guard.log,卸載時刪掉即可。

典型用法

agent 側暴露了一個工具 cookie_guard,有兩個 action:

action 作用
status Cookie 庫體積、dsh-auth-* 條數(庫未被佔用時)、清理器是否在跑、上次清理記錄
clean 庫已被佔用則把清理排到 DSH 退出後;庫空着則立刻清一次

狀態日誌寫在 %APPDATA%\@deepseek-ai\dsh-desktop\Network.guard.log,一行一次清理,形如:

2026-11-04T16:17:24.467Z pruned 60 cookie(s); 62 -> 2

可以按這個格式確認清理是否真的發生過,而不用猜插件有沒有生效。

適用場景與注意

適合 Windows 桌面端、啓動次數較多、出現過 431 或 Web authentication failed 的 DSH 用戶。使用前留意以下幾點:

  • 只清 dsh-auth-*,其他 Cookie(包括平臺登錄)一條不動。
  • 清理發生在 DSH 退出後:當前這一輪啓動期間,庫裏仍然是上一輪積累的量;第一次裝完後要退出一次 DSH 纔會初見效果。
  • 如果 DSH 長時間不退出,清理器就一直等,默認最多 24 小時,可用 config.maxHours 調整。
  • 只支持 Windows 桌面端,Web/headless 不受影響。
  • 插件以當前 dsh 進程的權限運行,會讀寫 DSH 的 Cookie 庫和 %APPDATA% 下的日誌文件。安裝前應先檢查源碼與許可證(MIT © M0Yun),確認與自己的使用環境相符。

結尾

dsh-cookie-guard 的價值在於把一個很難手動排查的問題(啓動失敗、登錄態異常)收斂成一次退出後自動完成的清理,且改動範圍限定在 dsh-auth-*,不影響其他 Cookie。目錄頁:https://www.skillhub.cn/plugins/M0Yun/dsh-cookie-guard ;倉庫:https://github.com/M0Yun/dsh-cookie-guard 。該目錄站是社區站點,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜