前言¶
在 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 生效。
- 运行即上浮:会话进入
running后,立刻排到所在工作区目录最上方。 - 停止不归位:上浮后一直留在该位置,运行结束也不会自动掉回原来的时间序或手动序。
- 块内按活跃度:多个上浮会话之间按真实
updatedAt降序;当前正在对话的那条排在最前。 - 保留手动顺序:上浮块之外的顺序(含你自己拖过的部分)不动。
- 刷新 / 重启仍在:排序状态写入内核侧持久化(手动模式)或运行时快照包装(时间模式),刷新页面或重启应用后位置仍有效。
- 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 给出的验证流程可直接复现:
- 设置 → 插件列表可见
dsh-session-active-top且为启用;graph 帧含该插件。 - 让另一个会话进入 running(例如发一条消息),它应立刻跳到会话目录顶部。
- 停止该会话:仍留在顶部,不回落。
- 其余会话顺序不变;手动置顶与会话图钉不受影响。
若「当前对话没在最前」:上浮块内按 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 时,可看社区目录页与源码仓库: