dsh-auth-cookie-guard:遏制 Harness 桌面端 dsh-auth Cookie 堆积

前言

DeepSeek Harness 桌面壳每次启动都会用随机端口拉起 Host(--port 0),认证 Cookie 的名字又与 127.0.0.1:<端口> 绑定。浏览器对 Cookie 按主机聚合、不区分端口,旧端口的 dsh-auth-* 会一直留在 jar 里;多次开关之后,请求头的 Cookie 会撑破 Node 默认 16KB 上限,窗口白屏或打不开。下面介绍社区 Host 插件 dsh-auth-cookie-guard 如何在不改业务逻辑的前提下做回收与自愈。

这是什么

dsh-auth-cookie-guard 是 DeepSeek Harness 的 Host 插件,由维护者 Ethan1999991231 发布,在 SkillHub 插件目录 中归类为联网工具。它针对「反复开关桌面 Harness 后窗口打不开」这一现象:源码与 RFC 行为表明,约第 71 次开关时单主机上堆积的 dsh-auth-* 会使 HTTP 请求头超过默认 16384 字节,触发 HPE_HEADER_OVERFLOW。插件在响应路径上过期非当前端口的 Cookie,并在已溢出时通过 clientError 路径引导浏览器丢弃旧 Cookie 后重试。

故障链路(背景)

理解插件前,先把链条对齐到仓库 README 里引用的 Harness 组件行为:

  1. 桌面 Host 以 127.0.0.1 和端口 0 启动,每次端口不同。
  2. Cookie 名形如 dsh-auth- + 对 authority 的哈希,authority 含端口;默认有效期 30 天,且官方路径没有主动过期旧端口 Cookie 的逻辑。
  3. 浏览器向 127.0.0.1 发请求时带上该主机下所有历史 dsh-auth-*。
  4. Host Web 服务未放宽 maxHeaderSize 时,Node 默认 16KB 上限会导致超限请求在进业务前失败。

README 中按单条约 225 字节估算,阈值约 70.8 次,与「第 71 次开关越界」的反馈一致。插件解决的是这条链路,而不是替代官方长期方案(例如在启动时清理非本实例 authority 的 Cookie,或调整 Cookie 命名策略)。

核心功能

经 README 核实,插件做三件事:

回收(治本)

包裹 dsh-host-frontend-static 里对 connection.authorizeIndex 的调用。在写响应时,对 Cookie jar 里「不属于当前监听端口」的 dsh-auth-* 追加 Max-Age=0 的 Set-Cookie。当 jar 中 dsh-auth-* 超过滞回阈值 4 条时开始回收,使同类 Cookie 数量被压在 5 条以内,避免再次爬到 71 条附近。

自愈(治已坏)

已堆满 jar 的请求可能到不了正常业务处理,但 Node 仍会抛出带 rawPacket 的 HPE_HEADER_OVERFLOW。插件从截断包中解析 Cookie 名与原 URL,返回 303 See Other 并逐条下发过期 Cookie;浏览器丢弃后自动重试,几跳内可恢复打开,无需手动清站点数据。

诊断

运行状态写入 $DSH_HOME/auth-cookie-guard/state.json,字段包括回收次数、见过的最大 jar 规模、溢出修复次数等,便于确认插件是否在起作用。

安全边界与实现方式

插件采用防御式挂载:不修改请求业务逻辑、不改配置文件;ctx.effect 卸载时还原被包裹的方法;内部结构不匹配时退化为 no-op 并打日志。

README 明确的安全约束包括:

  • 滞回阈值 REAP_ABOVE = 4:jar 不超过 4 条时不动作,降低误伤同一 DSH_HOME 下另一 Harness 实例(不同 authority)登录态的风险。
  • 只过期当前请求 Cookie 头里出现过的 dsh-auth-* 名字,不凭猜测构造。
  • 同主机校验:仅当请求 authority 的 hostname 与本监听器一致时才回收。
  • Secure 对齐:监听器为 https 时,过期 Set-Cookie 同样带 Secure。

插件只处理 dsh-auth- 前缀且出现在请求中的名字,不读凭据文件、不联网。

安装与启用

需要 DeepSeek Harness 0.2.1-rc.5 或更新(依赖 connection.browserAuth 与公开的 webServer.server)。package.json 要求 Node >= 20。许可证为 MIT,当前发布版本 1.0.0。

任选一种安装方式(命令来自仓库 README):

# 1) 从 npm
dsh plugin --profile desktop add dsh-auth-cookie-guard

# 2) 从 Release 里的 tarball
dsh plugin --profile desktop add ./dsh-auth-cookie-guard-1.0.0.tgz

# 3) 从本地源码(link,改完即时生效)
dsh plugin --profile desktop add ./

装完后重启一次 Harness。同一 profile 内不要同时安装本地 link 版(@local/dsh-auth-cookie-guard)与 npm 发布版:loader 行 id 相同会导致 duplicate loader entry 启动失败;切换前先删掉另一版。

典型用法与验证

确认插件在工作

安装并重启后,可查看状态文件:

{ "reaped": 12, "reapEvents": 5, "overflowRepairs": 0, "maxJarSeen": 3, "errors": 0 }

overflowRepairs 大于 0 表示某次启动曾撞上已溢出的旧 jar,并由自愈路径恢复。

开发与发布侧自测

仓库内提供零依赖测试(README 原文):

npm test        # 真起 node:http 服务,覆盖阈值、保留当前 Cookie、16KB 溢出自愈等
npm run check   # node --check index.js

拿到 tarball 时也可:

tar -xzf dsh-auth-cookie-guard-1.0.0.tgz && cd package && node test/guard.test.mjs

适用场景与注意

适合谁:经常使用 Harness desktop profile、习惯反复开关桌面窗口,或已经遇到「开关很多次后页面打不开 / 白屏」的开发者。它属于社区维护的缓解方案,不是 DeepSeek Harness 官方内置行为。

安装前建议:插件以当前 DSH 进程权限在 Host 内运行,会通过 Set-Cookie 修改浏览器中与 dsh-auth-* 相关的项。安装前应阅读 GitHub 源码与 LICENSE,确认与己方安全策略一致。SkillHub 目录与 DeepSeek / 幻方无官方从属关系,生态定位是「一切皆插件」的社区扩展。

README 亦说明:更理想的官方修复方向是启动时清理与本实例 authority 不一致的 Cookie,或调整 Cookie 与端口的绑定方式;在此之前的日常开发中,本插件可作为 Host 侧补丁使用。

结尾

dsh-auth-cookie-guard 把随机端口带来的 dsh-auth-* 堆积钉在可控规模内,并在请求头已溢出的情况下尝试自动修复,同时把回收与修复次数落到 state.json 便于核对。若你正在桌面 Harness 上反复拉起 Host,可先按 README 安装、重启,再对照状态文件与 overflowRepairs 判断是否曾触发溢出自愈。

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

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

Xiaoye