`dsh-recent-sessions`: View "Recent" Sessions Across Workspaces at the Bottom of the DSH Web Sidebar

前言

在 DeepSeek Harness(DSH)Web 界面里,会话往往按工作区分组挂在左侧树形侧栏中。切换工作区或滚动列表时,要找回「刚才还在聊、但不在当前分组里」的会话,通常只能依赖记忆在工作区间来回找,或接受原生列表里没有统一的「最近活动」视图。

社区插件 dsh-recent-sessions(维护者 hotheat,仓库 hotheat/dsh-recent-sessions)在侧栏工作区树的底部追加一块「最近」列表:跨工作区收集有内容的会话,按最后活动时间倒序排列,并过滤空白、已归档及 subagent 会话。实现上参考了 ttmouse/dsh-recent 的 ModuleLoader、槽位与 portal 机制;原生 UI 契约以 DeepSeek Harness 源码为准。

这是什么

dsh-recent-sessions 是面向 DSH Web 的客户端插件(package.json 中 dsh.client.platform 为 web)。它在左侧工作区树的可识别分组结构下,通过 React portal 将「最近」区块挂到树容器末尾,与工作区列表共用滚动区域;在单列表、搜索模式或无法识别分组段时整块隐藏。

插件当前版本为 0.1.0,许可证 MIT,声明的 DSH 引擎要求为 >=0.2.1-rc.2。

核心功能

列表内容与排序

  • 跨工作区汇总「有内容」的会话,按最后活动时间倒序。
  • 过滤:空白会话、已归档会话、subagent 会话不出现。
  • 同一时间的多条记录保留宿主侧栏里的原有顺序。

展示与交互

  • 插件通过 sidebar.footer.action 注册;从 owner props 读取 wide(宽侧栏相关展示)。
  • 展开侧栏时渲染「最近」;收起侧栏时整个区块卸载。
  • 头部可折叠,折叠状态写入浏览器 localStorage 键 dsh-recent-sessions:collapsed。
  • 首屏显示 10 条,点击「展开更多」每次再增加 10 条。
  • 点击标题调用 ctx.uiWorkspace.openSession(id) 打开对应会话。
  • 状态指示复用原生 StateDot:运行中显示原生 spinner,等待响应为 warning 点,跑完未读为 done 点,其余不显示;读屏通过行按钮的 aria-label 播报;鼠标悬停时用原生 tooltip 显示「项目名 · 相对时间」。
  • 标题优先用宿主的 title,缺失时用 displayTitle;中英文跟随宿主 locale(默认中文);颜色跟随宿主主题 token。

挂载与边界

  • 展开时以第一个工作区分组段的父节点定位树容器;portal 固定进插件自有的 host,host 挂在树容器最后。
  • 工作区列表很长时,需要滚到底部才能看到「最近」。
  • 只有检测到分组段但取不到父节点的异常结构时,才回退到 footer 内联显示,并使用限高的内部滚动。
  • 过滤后没有会话时,整个区块隐藏。
  • 插件只移动自己拥有的 host;观察器仅监听侧栏内子节点变化,通过 requestAnimationFrame 合并重定位,卸载时取消待执行帧并移除 host。

安装与启用

Web 配置档下安装(命令来自仓库 README):

dsh plugin --profile web add github:hotheat/dsh-recent-sessions

浏览器端插件由 DSH 启动时载入内存;安装或修改插件后需要重启 dsh web,仅刷新页面不足以生效。

卸载:

dsh plugin --profile web remove dsh-recent-sessions

若需重置折叠偏好,可在浏览器中删除 localStorage 键 dsh-recent-sessions:collapsed。

典型用法

安装并重启 dsh web 后,打开 DSH Web,展开左侧侧栏并滚到工作区树底部(在有多工作区分组且存在符合条件的会话时),即可看到「最近」区块:

  1. 点击某条会话标题,直接在该工作区打开会话。
  2. 需要更多历史时,使用「展开更多」分批加载。
  3. 不需要占用视线时,折叠头部;选择会保存在本机 localStorage。

仓库内提供的验证步骤(面向开发与 CI,可在克隆后的目录执行):

node --check lib/index.js
node --check lib/client.js
npm test

其中 test/client-load.mjs 检查 ModuleLoader 与槽位契约;test/rows.mjs 检查派生、排序、过滤及分页;test/portal.mjs 检查短树挂载、无分组隐藏、host 移动、异常结构回退、帧合并与观察器清理。

适用场景与注意

适合:经常在 DSH Web 里跨多个工作区切换、希望按「最近活动」快速回到会话的开发者或日常使用者;且侧栏处于正常的多工作区分组树结构(非单列表、非搜索模式)。

注意:

  • 插件以当前 dsh 进程的权限运行;安装前请自行查看 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。
  • 侧栏结构不符合插件识别条件时,「最近」不会出现——这是设计上的隐藏,而非安装失败。
  • 社区目录页 skillhub.cn 上的条目 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,本插件是 Web 侧栏增强的一种可选方案。

结尾

dsh-recent-sessions 把「最近有内容的会话」集中到 DSH Web 侧栏树底部,减少跨工作区找回对话的成本。进一步了解可访问目录页 https://www.skillhub.cn/plugins/hotheat/dsh-recent-sessions 与源码仓库 https://github.com/hotheat/dsh-recent-sessions。

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

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

Xiaoye