dsh-auth-cookie-guard:遏制 Harness 桌面端 dsh-auth Cookie 堆積

前言

DeepSeek Harness 桌面殼每次啓動都會用隨機端口拉起 Host(--port 0),認證 Cookie 的名字又與 127.0.0.1:<端口> 綁定。瀏覽器對 Cookie 按主機聚合、不區分端口,舊端口的 dsh-auth-* 會一直留在 jar 裏;多次開關之後,請求頭的 Cookie 會撐破 Node 默認 16KB 上限,窗口白屏或打不開。下面介紹社區 Host 插件 dsh-auth-cookie-guard 如何在不改業務邏輯的前提下做回收與自愈。

這是什麼

dsh-auth-cookie-guard 是 DeepSeek Harness 的 Host 插件,由維護者 Ethan1999991231 發佈,在 SkillHub 插件目錄 中歸類爲聯網工具。它針對「反覆開關桌面 Harness 後窗口打不開」這一現象:源碼與 RFC 行爲表明,約第 71 次開關時單主機上堆積的 dsh-auth-* 會使 HTTP 請求頭超過默認 16384 字節,觸發 HPE_HEADER_OVERFLOW。插件在響應路徑上過期非當前端口的 Cookie,並在已溢出時通過 clientError 路徑引導瀏覽器丟棄舊 Cookie 後重試。

故障鏈路(背景)

理解插件前,先把鏈條對齊到倉庫 README 裏引用的 Harness 組件行爲:

  1. 桌面 Host 以 127.0.0.1 和端口 0 啓動,每次端口不同。
  2. Cookie 名形如 dsh-auth- + 對 authority 的哈希,authority 含端口;默認有效期 30 天,且官方路徑沒有主動過期舊端口 Cookie 的邏輯。
  3. 瀏覽器向 127.0.0.1 發請求時帶上該主機下所有歷史 dsh-auth-*。
  4. Host Web 服務未放寬 maxHeaderSize 時,Node 默認 16KB 上限會導致超限請求在進業務前失敗。

README 中按單條約 225 字節估算,閾值約 70.8 次,與「第 71 次開關越界」的反饋一致。插件解決的是這條鏈路,而不是替代官方長期方案(例如在啓動時清理非本實例 authority 的 Cookie,或調整 Cookie 命名策略)。

核心功能

經 README 覈實,插件做三件事:

回收(治本)

包裹 dsh-host-frontend-static 裏對 connection.authorizeIndex 的調用。在寫響應時,對 Cookie jar 裏「不屬於當前監聽端口」的 dsh-auth-* 追加 Max-Age=0 的 Set-Cookie。當 jar 中 dsh-auth-* 超過滯回閾值 4 條時開始回收,使同類 Cookie 數量被壓在 5 條以內,避免再次爬到 71 條附近。

自愈(治已壞)

已堆滿 jar 的請求可能到不了正常業務處理,但 Node 仍會拋出帶 rawPacket 的 HPE_HEADER_OVERFLOW。插件從截斷包中解析 Cookie 名與原 URL,返回 303 See Other 並逐條下發過期 Cookie;瀏覽器丟棄後自動重試,幾跳內可恢復打開,無需手動清站點數據。

診斷

運行狀態寫入 $DSH_HOME/auth-cookie-guard/state.json,字段包括回收次數、見過的最大 jar 規模、溢出修復次數等,便於確認插件是否在起作用。

安全邊界與實現方式

插件採用防禦式掛載:不修改請求業務邏輯、不改配置文件;ctx.effect 卸載時還原被包裹的方法;內部結構不匹配時退化爲 no-op 並打日誌。

README 明確的安全約束包括:

  • 滯回閾值 REAP_ABOVE = 4:jar 不超過 4 條時不動作,降低誤傷同一 DSH_HOME 下另一 Harness 實例(不同 authority)登錄態的風險。
  • 只過期當前請求 Cookie 頭裏出現過的 dsh-auth-* 名字,不憑猜測構造。
  • 同主機校驗:僅當請求 authority 的 hostname 與本監聽器一致時纔回收。
  • Secure 對齊:監聽器爲 https 時,過期 Set-Cookie 同樣帶 Secure。

插件只處理 dsh-auth- 前綴且出現在請求中的名字,不讀憑據文件、不聯網。

安裝與啓用

需要 DeepSeek Harness 0.2.1-rc.5 或更新(依賴 connection.browserAuth 與公開的 webServer.server)。package.json 要求 Node >= 20。許可證爲 MIT,當前發佈版本 1.0.0。

任選一種安裝方式(命令來自倉庫 README):

# 1) 從 npm
dsh plugin --profile desktop add dsh-auth-cookie-guard

# 2) 從 Release 裏的 tarball
dsh plugin --profile desktop add ./dsh-auth-cookie-guard-1.0.0.tgz

# 3) 從本地源碼(link,改完即時生效)
dsh plugin --profile desktop add ./

裝完後重啓一次 Harness。同一 profile 內不要同時安裝本地 link 版(@local/dsh-auth-cookie-guard)與 npm 發佈版:loader 行 id 相同會導致 duplicate loader entry 啓動失敗;切換前先刪掉另一版。

典型用法與驗證

確認插件在工作

安裝並重啓後,可查看狀態文件:

{ "reaped": 12, "reapEvents": 5, "overflowRepairs": 0, "maxJarSeen": 3, "errors": 0 }

overflowRepairs 大於 0 表示某次啓動曾撞上已溢出的舊 jar,並由自愈路徑恢復。

開發與發佈側自測

倉庫內提供零依賴測試(README 原文):

npm test        # 真起 node:http 服務,覆蓋閾值、保留當前 Cookie、16KB 溢出自愈等
npm run check   # node --check index.js

拿到 tarball 時也可:

tar -xzf dsh-auth-cookie-guard-1.0.0.tgz && cd package && node test/guard.test.mjs

適用場景與注意

適合誰:經常使用 Harness desktop profile、習慣反覆開關桌面窗口,或已經遇到「開關很多次後頁面打不開 / 白屏」的開發者。它屬於社區維護的緩解方案,不是 DeepSeek Harness 官方內置行爲。

安裝前建議:插件以當前 DSH 進程權限在 Host 內運行,會通過 Set-Cookie 修改瀏覽器中與 dsh-auth-* 相關的項。安裝前應閱讀 GitHub 源碼與 LICENSE,確認與己方安全策略一致。SkillHub 目錄與 DeepSeek / 幻方無官方從屬關係,生態定位是「一切皆插件」的社區擴展。

README 亦說明:更理想的官方修復方向是啓動時清理與本實例 authority 不一致的 Cookie,或調整 Cookie 與端口的綁定方式;在此之前的日常開發中,本插件可作爲 Host 側補丁使用。

結尾

dsh-auth-cookie-guard 把隨機端口帶來的 dsh-auth-* 堆積釘在可控規模內,並在請求頭已溢出的情況下嘗試自動修復,同時把回收與修復次數落到 state.json 便於覈對。若你正在桌面 Harness 上反覆拉起 Host,可先按 README 安裝、重啓,再對照狀態文件與 overflowRepairs 判斷是否曾觸發溢出自愈。

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

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

小夜