dsh-session-active-top:运行中的会话自动浮到目录顶部

前言

在 DeepSeek Harness(DSH)里同时开多个工作区会话时,左侧会话目录默认按时间或你手动拖过的顺序排列。正在跑的那条对话一旦停手去改别的会话,列表里它常常沉到中间甚至底部,切回来要反复滚动。

社区插件 dsh-session-active-top(维护者 JohnshyCY)只做一件事:把处于 running 状态的会话提到当前工作区会话目录最上方,跑完以后也不自动落回去,只改显示顺序,不改会话内容。下面介绍它是什么、怎么装、以及和内核排序方式的关系。

这是什么

  • 定位:纯前端的 DSH 客户端插件;Host 侧(lib/index.js)为空实现,无后台进程、不联网、不碰会话数据。
  • 包名:dsh-session-active-top(npm 当前资料中的版本为 0.1.1,许可证 MIT)。
  • 解决的问题:多会话并行时,正在运行的对话在目录里一眼找不到;本插件让「运行即上浮」,并在停止后保留位置,方便随时切回。

与手动置顶(图钉、pinnedSessionIds)不同:本插件不写置顶字段、不显示图钉图标;用户手动置顶的会话仍在图钉分区里更靠前,两者互不干扰。

核心功能

以下能力均来自插件 README 与 package.json 说明,安装后由浏览器侧 Web UI 生效。

  1. 运行即上浮:会话进入 running 后,立刻排到所在工作区目录最上方。
  2. 停止不归位:上浮后一直留在该位置,运行结束也不会自动掉回原来的时间序或手动序。
  3. 块内按活跃度:多个上浮会话之间按真实 updatedAt 降序;当前正在对话的那条排在最前。
  4. 保留手动顺序:上浮块之外的顺序(含你自己拖过的部分)不动。
  5. 刷新 / 重启仍在:排序状态写入内核侧持久化(手动模式)或运行时快照包装(时间模式),刷新页面或重启应用后位置仍有效。
  6. HMR:通过 npm 安装后,在 DSH 0.2.2-rc.1 上验证过;装完一般即时生效,必要时刷新一次 Web GUI。

上浮名单记在浏览器 localStorage 键 dsh-session-active-top:raised,按 profile 隔离;换 profile 或换机器不会同步。

安装与启用

前提:已安装 DSH 桌面客户端及 dsh CLI(随 DSH 安装,Windows 上常见路径为安装目录下 resources/runtime/cli/bin/dsh.cmd)。插件作用于浏览器 Web UI,无单独构建步骤。

推荐:命令行从 npm 注册到 profile

dsh plugin --profile desktop add dsh-session-active-top

--profile 指向你正在使用的 profile;若 CLI 已默认选中该 profile,可省略。profile 目录一般在 $DSH_HOME/profiles/<profile>;若在工作区之外,安装时需对目录放开相应权限。

装完后在 设置 → 插件列表 中确认 dsh-session-active-top 已启用;/plugins/events 的 type: "graph" 帧里应出现该插件条目。

其他方式(资料原文)

  • 插件市场:在 DSH 插件市场搜索 dsh-session-active-top 一键安装(社区收录审核通过后可用)。
  • 本地开发:dsh plugin --profile desktop add link:<本插件目录的绝对路径>,改代码可热重载。

卸载

dsh plugin --profile desktop remove dsh-session-active-top

卸载不会还原已改写的手动顺序,也不会清掉 localStorage 里的上浮名单。若要清空上浮记录,可在 DevTools 执行:

localStorage.removeItem('dsh-session-active-top:raised');

典型用法与自测步骤

README 给出的验证流程可直接复现:

  1. 设置 → 插件列表可见 dsh-session-active-top 且为启用;graph 帧含该插件。
  2. 让另一个会话进入 running(例如发一条消息),它应立刻跳到会话目录顶部。
  3. 停止该会话:仍留在顶部,不回落。
  4. 其余会话顺序不变;手动置顶与会话图钉不受影响。

若「当前对话没在最前」:上浮块内按 updatedAt 降序,给该会话再发一条消息刷新活跃时间即可。

实现原理(简要)

内核包 dsh-client-ui-workspace 未提供正式的「会话列表排序」扩展点,插件在客户端(lib/client.js)注入 sessions 与 slots,包装快照并订阅变化,按目录排序模式分支处理:

目录排序模式 顺序来源 插件做法
时间(orderBy: "updated") orderByRecency 读快照 updatedAt 包装 sessions.list.getSnapshot(),对上浮会话在运行时副本上使用远大于真实值的合成 updatedAt(不回写真实数据)
手动(orderBy: "manual") reconcileManualOrder 回放 sessionOrderByAccount 调用视图 store 的 setSessionOrder,把上浮会话前置进已保存顺序(等价于用户拖动一次)

手动模式下仅改快照无效,必须写持久化顺序,因此刷新、重启后位置仍在,且停止运行不会自动归位。

适用场景与注意

适合谁:经常在同一工作区里并行多条 Agent 对话、又不愿每次滚动找「正在跑」会话的 DSH 用户。

安装前应知:

  • 插件随当前 DSH 进程在浏览器侧运行,会以你本机 DSH 的权限访问 Web UI 与 localStorage;安装前可在 GitHub 仓库 查看源码与 MIT 许可证。
  • 实现依赖未写入公开契约的内核内部 action;DSH 升级若改动 workspace 排序实现,插件可能需要跟进(仓库 FEEDBACK.md 有说明)。
  • 手动模式下卸载不会还原顺序;上浮名单仅存本机 localStorage。

故障排查速查

现象 处理
装了没反应 确认 --profile、刷新 Web GUI、插件已启用、graph 帧含插件
置顶顺序没变 置顶在图钉分区,本插件只动普通分区
清上浮名单 localStorage.removeItem('dsh-session-active-top:raised') 后刷新

结尾

dsh-session-active-top 用最小客户端补丁,把 running 会话钉在工作区目录顶部,停止也不收回,和手动置顶分区并行不冲突。需要收录信息或 issue 时,可看社区目录页与源码仓库:

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

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

Xiaoye