dsh-cookie-guard: Limiting Desktop dsh-auth Cookie Lifespan to Prevent Startup Crashes

前言

DeepSeek Harness(DSH)桌面端每次启动时,Desktop Host 会以 --port 0 随机监听端口。连接服务 @deepseek-ai/dsh-client-connection 会按 host:port 的 SHA256 为每个端口写入名为 dsh-auth-* 的会话 Cookie,默认保留 30 天且不会自动清理。欢迎页通过 Chromium net.fetch 发起请求时,会把历史上所有 dsh-auth-* 一并塞进 Cookie 头;Node 默认 maxHeaderSize 为 16 KB,大约 90 条 Cookie 就会触发 HTTP 431,Electron 侧表现为 desktop welcome: Web authentication failed,应用无法启动。Web 模式端口固定,不受此问题影响。下面介绍社区插件 dsh-cookie-guard 如何用声明式 bundle 补丁把 Cookie 最长寿命从 30 天压到 7 天,并在已「卡死」的机器上提供独立清理脚本。

这是什么

dsh-cookie-guard 由维护者 kevindawn11-hash 发布,分类为客户端插件,托管于 GitHub,社区目录页见 SkillHub。它不修改已安装的 Electron 主进程、不写运行时逻辑,只在 desktop profile 里通过 bundle patch 覆盖 connection 节点的 cookieMaxAgeDays,从而限制 Cookie 累积速度;补丁随 profile 存在,应用更新后仍有效。

症状与根因(便于对号入座)

启动失败时界面常见:

DeepSeek Harness is unavailable
The application could not start or stopped unexpectedly.

诊断日志(Windows 下 %APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-*-host.log)里可能出现 desktop welcome: Web authentication failed,或 Host 侧 HTTP 431(Request Header Fields Too Large)。README 记载:约 13 天内累积 71 条 Cookie(约 12 KB)即可复现;若每天启动 3~5 次,长期使用桌面端的用户往往在一个月内会遇到。这与账号、网络或第三方插件无关,是 Cookie 无界增长导致的请求头过大。

核心功能

  1. 声明式 bundle 补丁:将 cookieMaxAgeDays 设为 7(相对默认 30 天),使 7 天内启动次数对应的 Cookie 数量远低于 16 KB 上限。
  2. 不侵入安装包:补丁在 profile 中生效,不改动 app.asar,无 Electron main 进程 hack。
  3. 独立清理工具:包内 tools/prune-cookies.mjs 可在不安装插件、且 DSH 完全关闭时,备份并删除 Chromium Network\Cookies 中所有 dsh-auth-* 行,供已无法启动的环境救急。

补丁内容在资料中给出为:

- id: connection
  config:
    cookieMaxAgeDays: 7

DSH 在 @deepseek-ai/dsh-web-app 之后应用 bundle patch,因此会覆盖 connection 节点配置。若你每天重启、希望更紧的上限,可将天数改为 1;若常开一周以上会话,可适当增大。

安装与启用

需要 Node.js >= 22,以及自带 desktop profile 的 DSH 构建(资料写明 0.2.1-rc.3 及之后)。插件以当前 DSH Host 进程权限运行;安装前建议阅读仓库源码与 MIT 许可证。

推荐:一条命令

与社区插件市场(如 dsh-plugin.org、dsh-market)相同的安装路径:

dsh plugin --profile desktop add dsh-cookie-guard

安装后重启 DeepSeek Harness。

从 GitHub 添加

dsh plugin --profile desktop add github:kevindawn11-hash/dsh-cookie-guard

手动写入 desktop profile

在 PowerShell 中:

cd $env:USERPROFILE\.dsh\profiles\desktop
pnpm add dsh-cookie-guard

在同一目录的 package.json 里,把 "dsh-cookie-guard" 追加到 dsh.profile.bundles,再重启 DSH。

仅清理、不装插件

DSH 完全退出后:

node tools/prune-cookies.mjs

脚本会备份 Network\Cookies,再删除所有 dsh-auth-*;下次启动会重新签发 Cookie。

验证

重启后,可用 README 中的方式查询 Cookie 名称与过期时间(Windows,APPDATA 指向用户 AppData):

node -e "const{DatabaseSync}=require('node:sqlite');const db=new DatabaseSync(process.env.APPDATA+'\\@deepseek-ai\\dsh-desktop\\Network\\Cookies');console.log(db.prepare(\"select name,expires_utc from cookies where name like 'dsh-auth-%'\").all())"

Chromium 时间戳为自 1601 年以来的微秒数。

适用场景与限制

适合:长期使用 DSH 桌面打包版(Windows/macOS)、频繁重启导致大量 dsh-auth-* 堆积的用户;在 upstream 修复前作为缓解措施。

限制:插件运行在 Host 进程内,无法在运行时读写 Electron 主进程的 Chromium Cookie 库(运行时被独占锁定),因此只能限制增量,不能替历史 Cookie 做自动清扫。彻底修复需上游改动(资料指向 docs/upstream-issue.md:例如在 host.start() 前清理过期 Cookie,或按 host 哈希命名 Cookie 以便覆盖而非新增)。

兼容性(来自 README 表格):0.2.1-rc.3、0.2.1-rc.5 均可复现问题且补丁有效。CLI / dsh web 不受影响。

npm 包当前版本为 0.1.1。

结尾

dsh-cookie-guard 用最小 patch 把桌面会话 Cookie 寿命 capped 到 7 天,降低 HTTP 431 与认证失败导致的启动崩溃概率;已中招时可用 prune-cookies.mjs 救场。DSH 生态强调「一切皆插件」,社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

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

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

Xiaoye