dsh-cookie-guard: Weekly health checks for DSH login cookies to prevent request headers from causing white screens

前言

DeepSeek Harness(DSH)桌面端每次启动都会在本地 Chromium 网络库里新增一条以 dsh-auth- 开头的登录 cookie,名字随当次监听的回环端口变化,旧条目在有效期内不会被自动回收。条目一多,这些 cookie 会挤占单个站点约 16 KB 的请求头软上限;社区里常见说法是大约 72 条附近会出现启动失败或页面白屏。手工删库风险高,也不适合长期靠记忆维护。dsh-cookie-guard 把「数条数、超阈值先备份再删、用插件开关控制是否执行」做成 Windows 上的计划任务,面向长期在桌面端用 DSH 的开发者。

这是什么

dsh-cookie-guard 是维护者 mxw0808 发布的 DSH 插件,分类为 admin-security。一句话:它是 DSH 的 cookie 体检员——只在 dsh-auth-* 数量超过阈值时才备份并清理,平时只记日志;在应用里停用插件时,周任务也不会删任何 cookie。

它不联网、不上传、不改 DSH 配置、不动站点数据,也不碰 localStorage 或会话文件。

背景:cookie 为什么会堆

DSH 每次启动监听随机回环端口,登录 cookie 名由主机与端口经 SHA256 等步骤生成,因此每次启动往往多一条新名字的记录,默认约 30 天有效。README 中给出 11 天、51 次启动的实测:51 条 dsh-auth-*,约占请求头 11577 B / 16384 B(71%)。按类似节奏,条数会继续上涨,早于「第 72 次打开必崩」这类经验阈值就可能逼近上限。

插件盯的是 Windows 路径下的 SQLite 库:

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

其中名字以 dsh-auth- 开头的行;单条约 227 字节量级(README 实测单条最大 173 B)。默认阈值 40 条(约 9 KB,README 称约占请求头上限的 55%),到线即清理,不必等到应用已经起不来。

核心功能

定时体检与清理策略

  • 何时执行:每周一 12:00,由 Windows 计划任务 DSH Cookie Weekly Check 触发(插件加载时用 schtasks /Create 自行注册,卸载时用 schtasks /Delete 删除)。
  • DSH 正在运行时:若周一 12:00 时 DSH 仍开着,脚本每 5 分钟探测一次是否已关闭,最多等 3 小时;因 DSH 运行时会独占 Cookies 库,无法在读库状态下清理。
  • 未超阈值:不删数据,向 cookie-report.txt 追加一行(时间、总数、条数、占用字节)。
  • 超过阈值:先将整个库复制为 Cookies.bak-<时间戳>,再删除所有 dsh-auth-* 行,其它 cookie 不动。
  • 失败时:库被占用、找不到 Python、库不存在等情况下只记日志并返回非零退出码,不会删除任何 cookie,等下周再试。

插件开关即任务开关

开关读的是 profile 的 dsh.profile.bundles:插件在启用列表里则周任务正常跑 guard;移出或停用则任务只写一行 nothing to do 后退出,一条 cookie 都不删。判据在周任务脚本里,即使插件 apply 未执行到,开关逻辑仍有效。

三个组成部分

文件 作用
lib/index.js + cordis.patch.yml 插件本体;加载时注册计划任务,卸载时删任务,并写 last-load.json
scripts/dsh_cookie_guard.py 复制 Cookies 到临时目录后用 sqlite 统计;--block N 超阈值时备份并删 dsh-auth-*
scripts/dsh_cookie_weekly.ps1 计划任务入口:检查插件是否启用,等待 DSH 关闭后调用 guard

安装与启用

一条命令由插件自己注册计划任务,脚本从包内目录运行,不需要把文件复制到 %USERPROFILE%,也不需要手工 schtasks。桌面端 desktop profile 若命令行写不进去,可在应用内 设置 → 插件 安装;装完后完全退出 DSH 再打开。

有 git 时:

git clone https://github.com/mxw0808/dsh-cookie-guard.git
dsh plugin --profile desktop add ./dsh-cookie-guard

没有 git:在 GitHub 仓库页 Code → Download ZIP,解压后对解压目录执行:

dsh plugin --profile desktop add <解压出来的目录>

插件加载后会尝试创建或覆盖同名周任务(/F),以当前用户身份运行,一般不需要管理员权限。若你曾用管理员身份手工建过同名任务,需先在「任务计划程序」里删掉,否则插件可能只能启用已有任务而无法改指向路径。

重启后可在插件目录查看 lib/last-load.json:mode: created 表示任务由插件新建;enabled-existing / failed 等也在此记录。

典型用法

手动跑一次体检(可选)

不带参数只统计、不清理:

python <插件目录>\scripts\dsh_cookie_guard.py

超过 40 条才清理:

python <插件目录>\scripts\dsh_cookie_guard.py --block 40

guard 需要 Python 3.8+;dsh_cookie_weekly.ps1 会优先用 DSH 自带的 Python,找不到再退回系统 python。

验证是否生效

  • %LOCALAPPDATA%\dsh-cookie-guard\cookie-weekly.log:周任务时间线
  • <插件目录>\scripts\cookie-report.txt:每次体检数据
  • <插件目录>\lib\last-load.json:宿主加载插件时的 schtasks 结果

日志里 nothing to do 表示插件处于停用;attempt 1: DSH is closed, running guard 表示正在执行清理流程。

适用场景与注意

适合谁:仅在 Windows 上使用 DSH 桌面端(package.json 中 os 为 win32),且长期频繁启动、希望自动控管 dsh-auth-* 数量的用户。非 Windows 上插件会写 skipped 后退出。

权限与安全:插件与计划任务以安装 DSH 的当前用户权限运行;会读写 %APPDATA% 下 DSH 的 Cookies 库并在同目录生成备份文件。安装前应阅读 仓库源码 与 MIT 许可证,自行判断是否满足环境策略。

其它限制(来自 README):

  • 计划任务名固定为 DSH Cookie Weekly Check;profile 名固定为 desktop,改用 web 需改 lib/index.js 与 ps1 两处。
  • 备份文件 Cookies.bak-<时间戳> 可定期手工清理。
  • 社区目录 SkillHub 插件页 与 GitHub 由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是其中的运维向小工具。

结尾

dsh-cookie-guard 把「每周一数 cookie、超 40 条先备份再删、应用内开关控制是否执行」接到 Windows 计划任务上,针对 DSH 桌面端 login cookie 堆积导致请求头过大、启动白屏的问题,给出可复现的安装路径与日志位置。

  • 目录页:https://www.skillhub.cn/plugins/mxw0808/dsh-cookie-guard
  • 源码与说明:https://github.com/mxw0808/dsh-cookie-guard
羽毛球分组比赛记分
小程序二维码

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

Xiaoye