dsh-perf-guard:长会话下的滚动、思考链与失败重试

前言

在 DSH(DeepSeek Harness)里跑智能体,会话一长,DOM 节点和内存都会涨;流式输出时还要自己盯滚动条,思考块默认折叠时容易错过正在输出的推理行。网关 502、静默截断、号池繁忙这类错误若只靠手动点重试,会打断节奏。社区插件 dsh-perf-guard(显示名「性能守卫」)面向这些痛点:只改交互与性能相关行为,不改任何主题、配色或布局。下面按定位、能力、安装与设置说明用法与注意点。

这是什么

dsh-perf-guard 由维护者 TaoLe-si 发布,MIT 许可证,当前 package 版本为 1.1.1。插件通过 Cordis patch 注入宿主与 Web 客户端逻辑,基线要求 engines.dsh: ">=0.2.1-rc.4";低于该版本的 DSH 内核会被直接禁用,无法挂载。DOM 行为依赖 @deepseek-ai/dsh-client-ui-chat@0.2.1-rc.4 的选择器契约,宿主 UI 大版本升级后需要复核。

核心功能

自动跟随(默认开启)

长回复流式到达时,若用户处于贴底阅读态,插件用 requestAnimationFrame 缓动追到最新一行(每帧逼近约 45%),而不是瞬移跳底。

  1. 向上滚动(滚轮、PageUp、拖动滚动条)会立即脱离跟随。
  2. 内容重排、浏览器滚动锚定不会被误判成用户上滚。
  3. 视口回到底部 24px 内自动恢复跟随。
  4. 跟随过程中若宿主已渲染「回到底部」按钮,点一次可让宿主的 followingTail 状态机自愈(节流 900ms)。
  5. 阅读态(非贴底)下不会写 scrollTop,也不会自动点「回到底部」。

思考链自动展开(默认开启)

只展开正在流式输出的思考行,选择器为 [data-variant="think"][data-state="running"]。

过程组折叠导致思考行不在 DOM 时,先用 [data-streaming] / [data-shimmer] 判断是否在输出,再展开最新的过程组。历史回合保持折叠;用户手动收起过的行记入 WeakSet,之后不再自动打开。

截断与传输失败重试(默认开启,可配置)

插件按 HTTP 状态、LlmError、传输错误码和消息模式分类处理:例如 429 / 502 / 503 默认重试,400–403 默认只记日志;500 / 504 需在设置里打开才重试。TRANSPORT、STREAM_*、TIMEOUT、ETIMEDOUT 以及「上游空转」「账号池繁忙」「上游输出中断」「静默截断」「长度截断」等场景在 README 中有完整对照表。

重试次数上限为 0–50,或设为 不限(maxRetries = -1)。HTTP 状态类错误默认只在本轮尚未输出内容时重试;网关类 500/502/503/504 若在流到一半才返回,在「截断 / 传输中断重试」开关打开时也允许重试——已推给界面的增量无法收回,重试后可能出现半截再接完整内容,不需要该行为时可关掉该开关。ABORTED / CANCELLED 永不重试;429 优先读 Retry-After,其余指数退避(0.8s 起,封顶 15s)。长度截断(max_tokens 等)重试通常仍会截断,根治方式是调大模型的 maxTokens。

长会话降载(默认开启)

离屏过程块使用 content-visibility: auto(整回合版本为实验项,默认关)。工具输出限高并内部滚动;滚动期间暂停动画与毛玻璃合成,停手 140ms 后恢复。DOM 节点超过 12000 或 JS 堆超过约 1.1GB 时自动切保守模式。

package 元数据中还概括了「待办常驻」等能力;具体 UI 以当前版本客户端为准,安装后可在设置页查看开关说明。

安装与启用

先做 profile 为 desktop 的安装(命令来自仓库 README):

# 从 GitHub 安装(无需发 npm)
dsh plugin --profile desktop add github:TaoLe-si/dsh-perf-guard

本地开发时可链接目录:

dsh plugin --profile desktop add link:/absolute/path/to/dsh-perf-guard

也可在 <profile>/cordis.patch.yml 末尾手动插入 patch 条目(id: perf-guard,name: dsh-perf-guard)。宿主支持半热重载;浏览器端通常需要刷新一次界面(Ctrl+R)。

设置与宿主接口

在 DSH 设置 → 性能守卫(settings.section,id perf-guard)中可调整:思考链与跟随、错误与重试(含状态码开关与「不限」)、自检(滚动容器、跟随状态、思考行计数、距底部)、会话日志体积排行。

偏好写入 localStorage['dsh-perf-guard:prefs'];重试策略写入 ~/.dsh/perf-guard.retry.json。

除静态资源外,下列 API 均要求请求头 x-dsh-plugin: perf-guard:

路径 说明
GET /api/perf-guard/health 版本探活
GET /api/perf-guard/stats 宿主内存、会话日志排行、重试配置、最近错误
GET/POST /api/perf-guard/retry 读取或更新重试配置

典型用法与自检

安装并刷新 Web 界面后,默认即开启跟随、思考链展开、重试与降载。需要收紧重试时,在性能守卫设置里关闭「截断 / 传输中断重试」或降低 maxRetries,避免与「不限」组合在上游持续空转时长时间退避重试(退避封顶 15s)。

开发者在仓库根目录可跑自动化测试:

npm test

覆盖项包括:test/host-smoke.mjs(状态码、退避、重试中间件)、test/follow-sim.mjs(跟随控制器七场景)、test/client-smoke.mjs(客户端装配)、test/fixture/follow.html(Edge headless 浏览器断言)。

适用场景与注意

适合经常在 DSH desktop profile 下进行长 transcript、多工具输出的智能体开发或日常使用,希望少手动滚底、少手动展开思考块,并在可恢复的网关/传输错误上自动退避重试的场景。

务必知晓:插件与 DSH 宿主同一进程权限运行,安装前应阅读 GitHub 源码 与 MIT 许可证,自行判断是否信任维护者。已知限制包括:长度截断重试通常无效;优化侧重渲染层,不降低宿主解压会话日志时的内存峰值。社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-perf-guard 把长会话里常见的滚动、思考链可见性与可恢复错误处理收成一组默认开启、可在设置里细调的行为,且不碰主题与布局。需要安装命令、重试表与 API 细节时,以 GitHub README 为准;浏览社区索引可打开 SkillHub 目录页。

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

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

Xiaoye