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 / 幻方无官方从属关系。

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

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

小夜