dsh-cookie-guard: Periodic cleanup of dsh-auth cookies to avoid 431 authentication failures in DSH Desktop

前言

DeepSeek Harness 桌面版(Windows)每次启动,本地服务端口是随机的。会话 cookie 按 dsh-auth- 加 authority(127.0.0.1:端口)的哈希命名,但 Chromium 只按域名存 cookie,不认端口。每重启一次,127.0.0.1 下就多一条新 cookie,旧条目在约 30 天内不会被清。攒到七十条左右,请求头会超过 Node 默认的 16384 字节上限,请求在进业务代码前被拒,HTTP 431;界面上常见「Web 认证失败」,提示重装或禁用第三方插件——这与是否安装其它插件无关。社区插件 dsh-cookie-guard(维护者 kongbaiwin,分类 admin-security)针对这类堆积做定期清理,下面介绍其定位、机制与用法。

这是什么

dsh-cookie-guard 是 DeepSeek Harness 桌面版(Windows)专用插件:在 DSH 未独占 Cookies 库时,按策略删除过期的 dsh-auth-* cookie(或可选整库替换),避免请求头膨胀触发 431。插件本身不在 DSH 进程里直接删库——Chromium 运行时库被锁,只读都打不开——而是生成 guard.cmd、注册系统计划任务,并在用户登录后通过启动文件夹中的隐藏 VBS 延迟触发外部的 cleaner.mjs 执行清理。

问题与机制

为何会 431

  • Cookie 名:dsh-auth- + 对 127.0.0.1:端口 算出的哈希。
  • 存储维度:域名 127.0.0.1,端口变化不会覆盖旧 cookie。
  • 结果:反复重启后同域下多条 dsh-auth-* 同时随请求发出,总 header 体积超限。

插件如何调度

插件(跑在 DSH 里)
├─ 写一个 guard.cmd
├─ 建系统计划任务(每天固定时间)
└─ 往「启动」文件夹放一个隐藏 VBS(登录后 60 秒)
        ↓  真正动手的是它
cleaner.mjs
├─ 先探测库锁:锁着就跳过,绝不硬来
├─ 按 dsh-auth- 前缀精确删,其它 cookie 一条不碰
└─ 把结果写进 guard.log

平台账户登录依赖本地 grant(x-dsh-auth-token 头),默认清理范围不包含这类凭据所依赖的其它站点 cookie;默认模式只删 dsh-auth- 前缀。

核心功能

装好后在 设置 → Cookie 清理 中配置:

项 说明
启用 关闭会一并撤掉系统计划任务和启动垫片
每天 / 每隔 二选一:每天为固定时刻(默认 20:00);每隔为每 N 分钟(1–1439)
清多少 只清 dsh-auth-*(推荐)或整个 Cookies 文件替换
留备份 清理前复制一份,保留最近 3 份
立即清一次 登记为「等 DSH 完全退出后执行」,最多等 6 小时

卡片下方可查看计划任务状态、下次运行时间、登录垫片是否放置、Cookies 库大小及最近清理记录。

数据目录(DSH_HOME 默认为 %USERPROFILE%\.dsh,若设置了环境变量则以其为准):

<DSH_HOME>/cookie-guard/
├─ config.json   配置
├─ guard.cmd     计划任务调用的入口
├─ guard.log     每次清理的记录
└─ backups/      备份(开启备份时)

安装与启用

只支持 Windows(依赖 schtasks 与启动文件夹)。桌面版 profile 名为 desktop;若命令行提示 profile "desktop" is managed exclusively by the Electron application,请改用 Harness 插件管理器安装。

方式一:从本地目录

解压 zip 后执行:

dsh plugin --profile desktop add <解压后的目录路径>

或在插件管理器中选择「从本地目录安装」。安装完成后 重启 DSH。

方式二:从 GitHub

dsh plugin --profile desktop add github:<你的用户名>/dsh-cookie-guard

将 <你的用户名> 换为仓库所属用户(例如维护者 kongbaiwin 时即为 github:kongbaiwin/dsh-cookie-guard)。非 desktop profile 时把 --profile desktop 换成对应 profile 名。

典型用法

  1. 按上文任一方式安装并重启 DSH。
  2. 打开 设置 → Cookie 清理,启用开关,选择「每天 20:00」或合适的「每隔 N 分钟」。
  3. 「清多少」保持推荐项「只清 dsh-auth-*」;需要回滚时可开启「留备份」。
  4. 若 DSH 已长期未关、库仍被占用,可点「立即清一次」,完全退出 DSH 后由外部 cleaner 执行(最多等待 6 小时)。

日志若出现「Cookies 仍被占用,跳过」,表示清理时刻 DSH 仍在运行——这是设计行为,不是失败。DSH 开着时计划任务触发的清理也会跳过;兜底依赖登录后启动文件夹垫片触发的那次。

适用场景与注意

适合谁:长期在 Windows 上使用 DSH 桌面版、频繁重启本地服务、曾出现或想预防「Web 认证失败 / 431」的用户。

限制(README 明确说明):

  1. DSH 运行时不会清库,避免硬删损坏数据。
  2. 登录触发器通过启动文件夹垫片实现(避免 ONLOGON 计划任务需管理员权限);不需要时可删除启动文件夹中的 DSH Cookie Guard.vbs。

已无法打开 DSH、无法装插件时:完全退出 DSH 后,手动删除:

%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies
%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies-journal

再启动 DSH,库会重建,账号登录不受影响;之后可再安装本插件以防再次堆积。

卸载:先在设置中关闭启用(会清理任务与垫片),再从插件管理器移除插件。

DSH 生态强调「一切皆插件」;社区目录站点与 DeepSeek / 幻方无官方从属关系。插件在 DSH 进程权限下运行并会写系统计划任务与启动项,安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认符合本机安全策略。

参考链接

  • 社区目录页:https://www.skillhub.cn/plugins/kongbaiwin/dsh-cookie-guard
  • GitHub:https://github.com/kongbaiwin/dsh-cookie-guard
羽毛球分组比赛记分
小程序二维码

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

Xiaoye