前言¶
在 DeepSeek Harness(DSH)里同时开着多个工作区、多个会话时,「刚才在哪个窗口聊过」很容易靠记忆硬找。官方侧栏有「任务」「频道」等页签,但并不会按「这一次启动 DSH 以来」单独列出你动过的会话。dsh-run-sessions 是社区维护的客户端侧栏插件:在「任务 / 频道」旁边增加 本次启动(This run) 页签,只展示本次进程启动后有活动的会话,支持点进、高亮、右键移除和拖拽排序。本文基于插件仓库 README 与 package.json(当前版本 0.2.0,许可证 MIT)整理安装与用法。
这是什么¶
- 名称:
dsh-run-sessions - 维护者:ayachinene285
- 分类:客户端(
dsh.client.platform: web) - 仓库:github.com/ayachinene285/dsh-run-sessions
- 定位:只读旁挂侧栏插件,不接管、不替换官方侧栏;找不到挂载点时不动作。
插件依赖 dsh-im-connect 提供的页签注册表(__dshNativeTabs)。未安装 im-connect 时本插件不会显示,也不会报错。
核心功能¶
| 能力 | 说明 |
|---|---|
| 本次启动列表 | 仅显示 updatedAt >= 本次进程启动时间 且非空白新会话,按最近活动排序 |
| 选中高亮 | 当前打开的会话有底色与加粗标题(沿用 --dsw-alias-interactive-bg-hover)及 aria-current |
| 右键菜单 | 打开 / 从本次启动移除;移除后可在底部一键恢复 |
| 拖拽排序 | 可拖动改顺序;新出现的会话默认排在最上面 |
| 留在本页签 | 从列表点开会话时,侧栏不自动跳回「任务」;频道会话在粘性窗口内也不会被「频道」页签抢走 |
| 跟随语言 | 文案随 DSH locale 服务中英文切换 |
| 持久范围 | 移出列表与手动顺序存在 localStorage,刷新页面保留;重启 DSH 后列表按设计重置 |
过滤与会话数据来源:页面侧读取已有 ctx.sessions.list,不额外请求 Host 会话接口。
「本次启动」如何判断¶
宿主在 lib/index.js 首次 import 时记录 STARTED_AT,并通过只读接口暴露:
GET /api/dsh-run-sessions/state
返回形如 { startedAt, now, pid }。页面用 startedAt 过滤会话;每次 DSH 重启 startedAt 变化,列表自然清空;仅刷新页面不影响 cutoff。
浏览器控制台可核对:
await (await fetch('/api/dsh-run-sessions/state')).json()
调试日志前缀为 [run-sessions]。
安装与启用¶
插件以当前 dsh 进程 权限运行;安装前请自行审阅源码与 MIT 许可证。社区目录页:skillhub.cn/plugins/ayachinene285/dsh-run-sessions(与 DeepSeek / 幻方无官方从属关系,DSH 生态理念是「一切皆插件」)。
方式一:本地插件链接(README 推荐)¶
git clone https://github.com/ayachinene285/dsh-run-sessions.git
cd dsh-run-sessions
# 装进当前 profile(桌面版一般是 desktop)
dsh plugin --profile desktop add "$(pwd)"
方式二:手动改 profile¶
命令行不方便时:
- 将插件目录放到
~/.dsh/profiles/<profile>/node_modules/dsh-run-sessions(目录联接即可); - 在该 profile 的
package.json中:
-dependencies增加"dsh-run-sessions": "link:/path/to/dsh-run-sessions"
-dsh.profile.bundles数组末尾增加"dsh-run-sessions" - 完全退出 DSH 再打开(客户端 bundle 按启动时版本缓存,仅刷新页面不生效)。
方式三:拷贝文件¶
将 lib/、cordis.patch.yml、package.json 复制到上述 node_modules 目录,同样修改 package.json 后重启 DSH。
典型用法¶
- 安装并重启 DSH 后,确认已启用 dsh-im-connect。
- 在侧栏「任务 / 频道」旁打开 本次启动 页签,查看本次启动以来有更新的会话。
- 点击列表项进入会话;当前项会高亮。
- 右键可「打开」或「从本次启动移除」;误移除可用底部「恢复」。
- 需要固定浏览顺序时,直接拖拽会话行;新会话默认出现在顶部。
从本页签打开的会话会通过 matchSession 被认领,避免侧栏跳回「任务」或频道页签争抢焦点。
实现要点(了解边界用)¶
侧栏「任务 / 频道」由 dsh-im-connect 绘制并暴露 insert / getTabs / subscribe / addSessionFilter。本插件仅 registry.insert({ id, label, order: 30, render, matchSession }),不替换官方组件;apply() 带 try/catch,面板外包 error boundary,最坏情况只是少一个页签。
主要文件(无构建步骤,改 lib/client.js 后需完全重启 DSH):
package.json # dsh.bundle.patch + dsh.client(platform: web)
cordis.patch.yml # 只 insert 本插件
lib/index.js # 宿主:启动时间 + /api/dsh-run-sessions/state
lib/client.js # 浏览器:页签、列表、右键、拖拽
适用场景与注意¶
- 适合:一次启动内频繁切换多个会话、希望有「短记忆」列表的 DSH 桌面 / Web 客户端用户。
- 不适合指望跨重启的历史:「本次启动」严格按进程,重启后列表清空是设计行为,不是 bug。
- 依赖:必须有 dsh-im-connect 的页签注册表,否则页签不出现。
- 安全:插件随 DSH 进程运行,安装前请检查仓库源码;勿在未审阅的情况下用于不可信环境。
结尾¶
dsh-run-sessions 在侧栏补了一块「这一次启动以来聊过的会话」视图,减少在多工作区间来回翻找的成本;实现上只读现有会话 store,并与 im-connect 协作保持页签粘性。需要安装命令与行为细节时,以 README 为准。
- 目录页:https://www.skillhub.cn/plugins/ayachinene285/dsh-run-sessions
- GitHub:https://github.com/ayachinene285/dsh-run-sessions