dsh-run-sessions:侧栏「本次启动」会话列表

前言

在 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

命令行不方便时:

  1. 将插件目录放到 ~/.dsh/profiles/<profile>/node_modules/dsh-run-sessions(目录联接即可);
  2. 在该 profile 的 package.json 中:
    - dependencies 增加 "dsh-run-sessions": "link:/path/to/dsh-run-sessions"
    - dsh.profile.bundles 数组末尾增加 "dsh-run-sessions"
  3. 完全退出 DSH 再打开(客户端 bundle 按启动时版本缓存,仅刷新页面不生效)。

方式三:拷贝文件

将 lib/、cordis.patch.yml、package.json 复制到上述 node_modules 目录,同样修改 package.json 后重启 DSH。

典型用法

  1. 安装并重启 DSH 后,确认已启用 dsh-im-connect。
  2. 在侧栏「任务 / 频道」旁打开 本次启动 页签,查看本次启动以来有更新的会话。
  3. 点击列表项进入会话;当前项会高亮。
  4. 右键可「打开」或「从本次启动移除」;误移除可用底部「恢复」。
  5. 需要固定浏览顺序时,直接拖拽会话行;新会话默认出现在顶部。

从本页签打开的会话会通过 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
羽毛球分组比赛记分
小程序二维码

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

小夜