dsh-cookie-guard:限制桌面端 dsh-auth Cookie 壽命,避免啓動崩潰

前言

DeepSeek Harness(DSH)桌面端每次啓動時,Desktop Host 會以 --port 0 隨機監聽端口。連接服務 @deepseek-ai/dsh-client-connection 會按 host:port 的 SHA256 爲每個端口寫入名爲 dsh-auth-* 的會話 Cookie,默認保留 30 天且不會自動清理。歡迎頁通過 Chromium net.fetch 發起請求時,會把歷史上所有 dsh-auth-* 一併塞進 Cookie 頭;Node 默認 maxHeaderSize 爲 16 KB,大約 90 條 Cookie 就會觸發 HTTP 431,Electron 側表現爲 desktop welcome: Web authentication failed,應用無法啓動。Web 模式端口固定,不受此問題影響。下面介紹社區插件 dsh-cookie-guard 如何用聲明式 bundle 補丁把 Cookie 最長壽命從 30 天壓到 7 天,並在已「卡死」的機器上提供獨立清理腳本。

這是什麼

dsh-cookie-guard 由維護者 kevindawn11-hash 發佈,分類爲客戶端插件,託管於 GitHub,社區目錄頁見 SkillHub。它不修改已安裝的 Electron 主進程、不寫運行時邏輯,只在 desktop profile 裏通過 bundle patch 覆蓋 connection 節點的 cookieMaxAgeDays,從而限制 Cookie 累積速度;補丁隨 profile 存在,應用更新後仍有效。

症狀與根因(便於對號入座)

啓動失敗時界面常見:

DeepSeek Harness is unavailable
The application could not start or stopped unexpectedly.

診斷日誌(Windows 下 %APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-*-host.log)裏可能出現 desktop welcome: Web authentication failed,或 Host 側 HTTP 431(Request Header Fields Too Large)。README 記載:約 13 天內累積 71 條 Cookie(約 12 KB)即可復現;若每天啓動 3~5 次,長期使用桌面端的用戶往往在一個月內會遇到。這與賬號、網絡或第三方插件無關,是 Cookie 無界增長導致的請求頭過大。

核心功能

  1. 聲明式 bundle 補丁:將 cookieMaxAgeDays 設爲 7(相對默認 30 天),使 7 天內啓動次數對應的 Cookie 數量遠低於 16 KB 上限。
  2. 不侵入安裝包:補丁在 profile 中生效,不改動 app.asar,無 Electron main 進程 hack。
  3. 獨立清理工具:包內 tools/prune-cookies.mjs 可在不安裝插件、且 DSH 完全關閉時,備份並刪除 Chromium Network\Cookies 中所有 dsh-auth-* 行,供已無法啓動的環境救急。

補丁內容在資料中給出爲:

- id: connection
  config:
    cookieMaxAgeDays: 7

DSH 在 @deepseek-ai/dsh-web-app 之後應用 bundle patch,因此會覆蓋 connection 節點配置。若你每天重啓、希望更緊的上限,可將天數改爲 1;若常開一週以上會話,可適當增大。

安裝與啓用

需要 Node.js >= 22,以及自帶 desktop profile 的 DSH 構建(資料寫明 0.2.1-rc.3 及之後)。插件以當前 DSH Host 進程權限運行;安裝前建議閱讀倉庫源碼與 MIT 許可證。

推薦:一條命令

與社區插件市場(如 dsh-plugin.org、dsh-market)相同的安裝路徑:

dsh plugin --profile desktop add dsh-cookie-guard

安裝後重啓 DeepSeek Harness。

從 GitHub 添加

dsh plugin --profile desktop add github:kevindawn11-hash/dsh-cookie-guard

手動寫入 desktop profile

在 PowerShell 中:

cd $env:USERPROFILE\.dsh\profiles\desktop
pnpm add dsh-cookie-guard

在同一目錄的 package.json 裏,把 "dsh-cookie-guard" 追加到 dsh.profile.bundles,再重啓 DSH。

僅清理、不裝插件

DSH 完全退出後:

node tools/prune-cookies.mjs

腳本會備份 Network\Cookies,再刪除所有 dsh-auth-*;下次啓動會重新簽發 Cookie。

驗證

重啓後,可用 README 中的方式查詢 Cookie 名稱與過期時間(Windows,APPDATA 指向用戶 AppData):

node -e "const{DatabaseSync}=require('node:sqlite');const db=new DatabaseSync(process.env.APPDATA+'\\@deepseek-ai\\dsh-desktop\\Network\\Cookies');console.log(db.prepare(\"select name,expires_utc from cookies where name like 'dsh-auth-%'\").all())"

Chromium 時間戳爲自 1601 年以來的微秒數。

適用場景與限制

適合:長期使用 DSH 桌面打包版(Windows/macOS)、頻繁重啓導致大量 dsh-auth-* 堆積的用戶;在 upstream 修復前作爲緩解措施。

限制:插件運行在 Host 進程內,無法在運行時讀寫 Electron 主進程的 Chromium Cookie 庫(運行時被獨佔鎖定),因此只能限制增量,不能替歷史 Cookie 做自動清掃。徹底修復需上游改動(資料指向 docs/upstream-issue.md:例如在 host.start() 前清理過期 Cookie,或按 host 哈希命名 Cookie 以便覆蓋而非新增)。

兼容性(來自 README 表格):0.2.1-rc.3、0.2.1-rc.5 均可復現問題且補丁有效。CLI / dsh web 不受影響。

npm 包當前版本爲 0.1.1。

結尾

dsh-cookie-guard 用最小 patch 把桌面會話 Cookie 壽命 capped 到 7 天,降低 HTTP 431 與認證失敗導致的啓動崩潰概率;已中招時可用 prune-cookies.mjs 救場。DSH 生態強調「一切皆插件」,社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

  • 目錄頁:https://www.skillhub.cn/plugins/kevindawn11-hash/dsh-cookie-guard
  • GitHub:https://github.com/kevindawn11-hash/dsh-cookie-guard
羽毛球分组比赛记分
小程序二维码

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

小夜