把正在运行的对话浮到所在工作区会话列表的最上方,运行结束后仍保留在该位置。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-session-active-top
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:JohnshyCY/dsh-session-active-top
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-session-active-top
让正在运行的会话自动浮到工作区会话目录最上方,多会话来回翻找不再费劲。
特性 · 安装 · 验证 · 实现原理 · 故障排查 · 已知限制 · 反馈
快速开始
dsh plugin --profile desktop add dsh-session-active-top
装完即时生效(HMR,无需重启桌面应用):让任意会话进入运行态,它就会跳到会话目录顶部。完整说明见安装。
这是什么
DSH 工作区左侧的会话目录默认按时间或手动顺序排列。多个对话同时进行时,正在对话的那条常常沉到列表中间甚至底部,来回滚动才能找到。
本插件把处于 running 状态的会话提到所在工作区会话目录的最上方,并在它停止后保留这个位置 —— 不自动归位,方便随时切回来。它只调整显示顺序,不改动任何会话内容。
特性
- 运行即上浮:会话一进入
running,立刻排到所在工作区目录最上方。 - 停止不归位:浮上来后一直留在那里,运行结束也不会掉回去。
- 块内按活跃度:上浮的会话之间按真实
updatedAt降序,当前正在对话的那条永远在最前。 - 不占用置顶:不写
pinnedSessionIds、不显示图钉图标;用户手动置顶的会话仍在图钉分区里更靠前,两者互不干扰。 - 保留手动顺序:上浮块之外(你自己拖过的顺序)完全不动。
- 刷新 / 重启仍在:位置写入内核自身的排序状态,刷新页面或重启应用后依旧生效。
- 纯前端、零运行时依赖:只有 client 半个插件,Host 侧是空实现;不启后台进程、不联网、不碰会话数据。
安装
要求:DSH 客户端及其 dsh CLI(随 DSH 安装,位于安装目录 resources/runtime/cli/bin/dsh.cmd)。已在 DSH 0.2.2-rc.1 上验证。插件作用于浏览器侧的 Web UI 层,无构建步骤。
方式 A:命令行(npm,推荐)
dsh plugin --profile desktop add dsh-session-active-top
从 npm 拉正式包注册进 profile。核心已启用 HMR,Host 侧实时重组、client 侧经 plugins/events 的 type: "graph" 帧交付,装完即时生效;若页面未自动加载,刷新一次 Web GUI 即可。
--profile指向你正在使用的 profile;若dsh已默认选中它,可省略该参数。profile 目录一般在$DSH_HOME/profiles/<profile>,若在工作区之外,安装时需放开对应目录权限。
方式 B:插件市场
在 DSH 插件市场搜索 dsh-session-active-top,一键安装(社区收录审核通过后可用)。
方式 C:本地目录(开发调试)
dsh plugin --profile desktop add link:<本插件目录的绝对路径>
以 junction 链接本地目录,改文件即热重载,适合边改代码边验证。
卸载
dsh plugin --profile desktop remove dsh-session-active-top
注意:卸载不会还原已写入的手动顺序(等价于你曾经拖动过一次),上浮名单也会留在 localStorage。要彻底清空,可在 DevTools 执行:
localStorage.removeItem('dsh-session-active-top:raised');
验证
- 设置 → 插件列表可见
dsh-session-active-top且为启用;/plugins/events的 graph 帧含该插件条目。 - 让另一个会话进入 running(发一条消息),它应立刻跳到会话目录顶部。
- 停止该会话:仍留在顶部,不会回落。
- 其余会话顺序不变;手动置顶的会话与图钉图标不受影响。
实现原理
内核(dsh-client-ui-workspace)没有提供「会话列表排序」扩展点,排序在组件里写死,且两种排序模式落点不同:
| 目录排序模式 | 实际生效的顺序来源 | 插件做法 |
|---|---|---|
时间(orderBy: "updated") |
orderByRecency 读快照里的 updatedAt |
包装 sessions.list.getSnapshot(),给上浮会话一个远大于真实时间戳的合成 updatedAt(只存在于运行时副本,不回写真实数据) |
手动(orderBy: "manual") |
reconcileManualOrder 回放持久化的 sessionOrderByAccount |
调用视图 store 自己的 setSessionOrder(accountKey, order, orders),把上浮会话前置进已保存顺序 |
手动模式下只改快照是无效的 —— 这正是第一版「看不出上浮」的原因:老会话都在已保存的手动顺序里,改 updatedAt 只会影响「其余」段。必须写持久化顺序;写入走内核自己的 action,等价于用户拖动一次,所以刷新 / 重启后位置仍在,且运行结束不会自动回落。
每次快照变化都会重排上浮块内部(按 updatedAt 降序),你正在对话的会话就在最前;上浮块之外完全不动。
- Node 半(
lib/index.js):空实现,不做任何事。 - 客户端(
lib/client.js):注入sessions与slots,解析视图 store、包装快照、订阅变化并重排上浮块;卸载时还原包装。 - 上浮名单只记在浏览器
localStorage(dsh-session-active-top:raised),按 profile 隔离。
故障排查
| 现象 | 原因 / 处理 |
|---|---|
| 装了没反应 | 确认 --profile 指向当前实例、刷新一次 Web GUI、检查插件列表为启用;/plugins/events 的 graph 帧应含该插件 |
| 当前对话没在最前 | 上浮块按 updatedAt 降序,给该会话发一条消息刷新活跃时间即可 |
| 置顶会话的顺序没变 | 置顶会话属于图钉分区,本插件只在普通分区排序,两者互不影响 |
| 想清掉上浮名单 | DevTools 里 localStorage.removeItem('dsh-session-active-top:raised') 后刷新 |
已知限制
- 内核没有「会话列表排序」扩展点,本插件靠运行时包装内部 store 并调用未写入文档契约的内部 action;DSH 升级若改动这部分实现,插件可能需要跟进。详见 FEEDBACK.md。
- 手动模式下写入的持久化顺序不会因卸载而还原(等价于用户拖动过一次)。
- 上浮名单存在浏览器
localStorage,换 profile 或换机器不会同步。
发布
在 GitHub 上创建 Release 会触发 .github/workflows/publish.yml,经 OIDC 可信发布自动推送到 npm。版本号以 package.json 为准。
许可证
链接
同类插件
ranxianglei/billion-context★ 5790
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
Minglink/dsh-infinite-gen-4★ 4078
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
liangmianya/dsh-synapse★ 697
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
MichengAI/dsh-archive-manager★ 325
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
Nwflower/dsh-chat-import★ 299
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
SiriLee/dsh-rewind★ 248
对话回退:一键回到任意更早的用户消息,同窗口内完成,不新建分支、不残留副本;目标消息自动填回输入框,可一并还原工作区文件——即完整的 Claude Code /rewind 语义。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。