dsh-plugin-scroll-memory:插件列表滚动位置记忆

前言

在 DeepSeek Harness(DSH)里浏览插件时,列表和详情往往共用同一个滚动容器。点开某条插件后,列表 DOM 被替换,容器高度缩回一屏,浏览器会把 scrollTop 钳到 0;点「返回插件」时,内核并没有把之前的滚动偏移写回去,于是一次次回到列表顶部。插件一多,想逐个看简介就会不断重复往下滚。下面介绍社区插件 dsh-plugin-scroll-memory(维护者 chenyidong,分类:记忆),专门处理「列表 ↔ 详情」这一跳时的位置恢复。

这是什么

dsh-plugin-scroll-memory 是纯客户端 DSH 插件(约 100 行),在 Web / 桌面端的插件管理页生效:列表可见时持续记录容器的 scrollTop,从详情回到列表时把记录值写回,避免每次都从顶部重来。它不注册 slot、不调用 host 服务、不修改内核 app.asar,卸载后不留残留。当前 package 版本为 0.1.0,许可证 MIT,引擎要求 dsh 为 >=0.2.0-rc.1 <0.3.0-0。

问题从哪来

插件页把列表和详情渲染在同一个滚动容器里。进入详情时列表被整体替换,容器高度塌回一屏,scrollTop 被浏览器夹到 0;返回列表时没有逻辑恢复偏移,因此默认总是顶部。在插件数量较多、需要连续浏览条目时,这一点尤其碍事。

核心功能与覆盖范围

经过上面的步骤理解机制后,可以这样概括插件行为:

  1. 列表态:容器处于列表时,持续记录 scrollTop。
  2. 回到列表:详情节点消失(刚返回列表)时,在下一帧写回记录值;若列表高度尚未撑开,再补一帧重试。
  3. 详情内滚动:在详情里继续往下滚不会覆盖已记忆的列表位置;例如在详情底部再返回,仍会回到进入详情前那一行。

详情态依靠 DSH 内核已有的 DOM 标记识别,三种详情页均有效:

标记 对应页面
[data-plugin-detail] 组合包详情
[data-plugin-item-detail] 官方插件条目详情
[data-market-detail] 「发现」市场条目详情

实现上一律读实时 DOM,而不是缓存 UI 状态。切到详情时浏览器会把 scrollTop 夹到 0 并触发 scroll 事件,但那一刻详情节点已存在,该伪事件不会被误记成「列表在顶部」。

安装与启用

插件以当前 dsh 进程的权限运行;安装前建议浏览 GitHub 仓库 源码并确认 MIT 许可证与行为是否符合预期。

先选定要使用的 profile,再执行官方 README 中的安装命令:

dsh plugin --profile <profile> add github:chenyidong/dsh-plugin-scroll-memory

安装完成后重启该 profile,客户端配置为 platform: web、immediately: true,装好后在插件管理页即可生效。

本地开发时可将源码目录 link 到 profile(同样来自 README):

dsh plugin --profile <profile> add link:/path/to/dsh-plugin-scroll-memory

典型用法

日常使用不需要额外配置项:在插件列表滚到中间 → 点开任意插件详情 → 点「返回插件」→ 列表应停在原处。

仓库提供基于假 DOM 的测试,可在插件目录下自行验证三种情形:

node test.cjs

或用 npm script:

npm test

覆盖:列表滚动后进详情再返回;详情内滚动不污染列表位置;列表本在顶部时返回仍在顶部。

适用场景与限制

适合:经常在 DSH Web 或桌面端插件页连续查看多条插件/市场条目,且主要痛点是「详情返回列表跳顶」的开发者。

不适用或需注意:

  • 终端 TUI 插件页不在覆盖范围内。
  • 依赖内核的 data-plugin-body、data-plugin-detail 等标记;宿主大版本调整 DOM 时,插件可能需要跟随更新。
  • 离开插件页再进入不会保留位置(容器会重新挂载);本插件只解决同一插件页内「列表 ↔ 详情」往返。
  • 社区目录 skillhub.cn 插件页 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;安装来源以 GitHub README 命令为准。

结尾

dsh-plugin-scroll-memory 用最小的客户端逻辑补上插件管理页缺失的滚动恢复,让「逐个看插件」不再伴随重复的滚轮操作。进一步了解可访问目录页 skillhub.cn/plugins/chenyidong/dsh-plugin-scroll-memory 与源码 github.com/chenyidong/dsh-plugin-scroll-memory。

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

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

小夜