dsh-cookie-fix: Limit desktop dsh-auth session cookies to avoid HTTP 431 startup failure

前言

DeepSeek Harness 桌面端每次启动都会在本地随机回环端口上跑 webserver,并通过 GET / 做一次启动令牌交换。交换过程会写入名字形如 dsh-auth-* 的会话 cookie,有效期 30 天。Cookie 按主机存储、不区分端口,因此多次启动后,同一主机(例如 127.0.0.1)下的 jar 里会不断累积这些 cookie。

桌面欢迎握手使用 credentials: "include" 发起请求,会把整个 jar 一并带上。累计启动次数足够多后,Cookie 请求头可能超过 Node.js 默认约 16 KiB 的上限,服务器返回 HTTP 431 Request Header Fields Too Large,界面表现为 desktop welcome: Web authentication failed,应用无法正常进入。

下面介绍社区插件 dsh-cookie-fix(维护者 qiongqi-empty):在 Host 侧自动把 dsh-auth-* 控制在 3 条以内,从机制上避免再顶到请求头上限。它是 Host-only 的 DSH bundle,不依赖 pnpm 包、没有构建步骤,通过官方插件管理器安装即可。

这是什么

dsh-cookie-fix 是仅运行在 DSH Host 上的插件 bundle(包名 dsh-cookie-fix,界面显示为 Cookie 清理器 / Cookie Fix)。它不修改 app.asar、不注入客户端脚本、不注册后台进程,只在桌面端 webserver 上对特定响应做 cookie 清理。

仓库地址:https://github.com/qiongqi-empty/dsh-cookie-fix。当前 package 版本为 1.0.0,许可证 MIT。插件在 DeepSeek Harness Desktop 0.2.1-rc.5(nightly,Electron 44)上开发并验证;未在 engines.dsh 中写死版本号,实现只依赖 webServer 服务与 Node 标准库。

核心功能

插件在 DSH Host 的 webserver 上注册请求监听器,只处理每次启动时的 GET /(启动令牌交换):

  1. 解析请求里已有的 dsh-auth-* cookie;
  2. 保留「当前 authority 对应的一条(本次响应会重新签发)+ 最新 2 条旧 cookie」;
  3. 在同一 HTTP 响应里追加 Set-Cookie,对其余旧 cookie 设置 Max-Age=0 等删除指令。

Electron session 与 Chromium 会执行这些删除指令,因此每次启动后 jar 里最多剩 3 条 dsh-auth-*,请求头体积不会无限增长。新签发的 auth cookie 仍排在第一个 Set-Cookie,不改变桌面端读取 cookie 的既有逻辑。

行为边界(来自 README):

  • 仅在 GET / 且请求中确实带有 3 条以上 dsh-auth-* 时才改响应头;平时不改动任何响应。
  • 不联网,不读取、不上报 cookie 值;只根据 cookie 名称与签名 payload 中的 issuedAt 排序并删除已随请求发送的旧项。
  • 卸载 bundle 后监听器随 plugin fiber 释放,桌面端恢复官方行为;残留的少量 cookie 会在 30 天内自然过期。

安装与启用

图形界面(官方 Plugins 页面)

  1. 打开 DeepSeek Harness 的 插件 / Plugins 页面。
  2. 点 添加插件。
  3. 粘贴下面地址(不要带末尾斜杠):
https://github.com/qiongqi-empty/dsh-cookie-fix
  1. 点 安装。列表中出现 Cookie 清理器 / Cookie Fix(dsh-cookie-fix)且为启用状态即可。
  2. 若页面提示需重启才能加载新插件,重启一次 DeepSeek Harness。

装好后每次启动都会自动清理多余的 dsh-auth-*,无需额外配置或手动操作。若从 GitHub 安装超时,可在对话框里切换 安装源 → 中国大陆镜像,或改用命令行安装。

命令行(等价)

dsh plugin --profile desktop add https://github.com/qiongqi-empty/dsh-cookie-fix

卸载

  • 图形界面:插件页面 → 已安装 → dsh-cookie-fix / Cookie 清理器 → 卸载。
  • 命令行:
dsh plugin --profile desktop remove dsh-cookie-fix

典型用法

正常使用下没有单独「调用 API」的步骤:安装并启用后,插件随桌面端启动生效。

若已出现 431、应用完全打不开,需要先让 Harness 能再次启动。插件必须在应用能跑起来之后才能安装。README 给出的恢复步骤如下:

  1. 完全退出 DeepSeek Harness(含托盘图标)。
  2. 删除 Chromium 的 cookie 数据库(仅重置本地网页 cookie,不影响 ~/.dsh 里的账号凭据)。Windows 路径示例:
%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies
  1. 重新启动 DeepSeek Harness,再按上文步骤安装插件。

开发者可在不启动 DSH 的情况下跑仓库自带自测:

node test.mjs

README 说明该脚本验证:10 条 cookie 时恰好追加 7 条删除、新 auth cookie 仍排第一、cookie 少时不改响应、其它路径不受影响。

适用场景与注意

适合谁:长期使用 DeepSeek Harness 桌面端、频繁重启或升级、曾遇到或想预防 HTTP 431 / Web authentication failed 的开发者。

权限与安全:插件以当前 DSH 进程权限运行,逻辑集中在单文件 index.mjs,安装前建议自行阅读源码与 MIT 许可证。社区插件目录(如 SkillHub 上的条目页)是独立生态站点,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的 GitHub 仓库为准。

不适用或需知:纯 CLI / 非 desktop profile 若不存在相同 cookie 累积问题,则不必安装;若未来 DSH 移除 webServer 服务,插件会安全地不生效,不会阻止 Harness 启动。

结尾

dsh-cookie-fix 用 Host 侧、可逆的方式把随机端口带来的 dsh-auth-* 堆积限制在 3 条以内,针对 Node 16 KiB 请求头上限导致的桌面启动失败给出固定解法。需要时可从 Plugins 页面或 CLI 安装,不需要时卸载 bundle 即可恢复官方行为。

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

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

Xiaoye