dsh-auth-cookie-guard:自动清理桌面版累积的 dsh-auth 认证 Cookie

前言

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):

  1. 桌面版启动时宿主绑定新的回环端口(实测落在 1024–15000 段,例如 127.0.0.1:13708)。
  2. 会话 Cookie 名为 dsh-auth-<base64url(sha256("host:port"))>,名字里编码了端口。
  3. 同一主机下所有 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):

  1. 自动清理只对「能成功加载页面」的启动有效;已 431 的状态必须先跑救援脚本。
  2. 插件无法直接改 Chromium 的 Cookies 数据库(运行中被独占),修复一律走浏览器应答。
  3. 宿主若改用 https 或非 127.0.0.1 主机名,删除逻辑以 getOrigin() 为准;跨主机名情形未全覆盖。
  4. 仓库说明真机 Electron 行为以本地测试与 AUDIT.md 为准,安装前可自行核对。

卸载:在插件管理页停用并移除,重启 DSH;可能的残留仅为救援脚本生成的 Cookies.dsh-cookie-guard-*.bak 备份。

结尾

dsh-auth-cookie-guard 把桌面版 dsh-auth-* Cookie 累积问题从「偶尔删库」变成「每次启动定向清理 + 可观测阈值」,降低因请求头超限导致的启动失败概率。

DSH 生态主张「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。选用插件时请以自己的环境、许可证与源码审计结论为准。

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

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

Xiaoye