dsh-session-folders:在侧边栏会话树上加一层文件夹

前言

DSH 的侧边栏默认把所有会话平铺在同一个列表里,按工作区分组。一个 profile 用久了,会话条目多起来之后,想找某类对话只能靠名字前缀或者固定配合搜索,分组能力基本没有。官方列表本身不提供折叠分组,也不支持拖拽归类。这份资料介绍的插件 yinqisy/dsh-session-folders 就是针对这个痛点:它不重建列表,而是在官方那棵会话树上附加一层可折叠、可排序的分类夹,把对话收纳进目录里。插件由 YinqiSY 维护,属于客户端分类,许可为 MIT,当前版本 1.0.2。

这是什么

一句话定位:给 DSH 侧边栏的会话树增加文件夹分类能力,拖进拖出即可改变会话归属。插件的官方描述是「File DeepSeek Harness conversations into folders inside the sidebar’s own session tree — decorates the official list instead of replacing it」,也就是只做装饰,不替换官方列表。

它解决三个具体问题:会话多了之后无法按主题归拢;官方「展开其余 N 个会话」截断控件会把部分会话藏起来,分类看不到完整列表;换用其它会话管理插件后,官方行的操作能力(点击、菜单、置顶、归档)会受影响。

核心功能

下面几项能力都来自插件 README:

  • 工作区行保留官方原有按钮,插件在「全选」右侧插入一个文件夹加号按钮,点击后在行下方就地展开输入框,回车即可创建分类。
  • 分类头可以折叠/展开,⋯ 菜单支持重命名和删除;删除是两段式确认,避免误删。
  • 分类头之间可以拖动排序;把对话行拖到分类头上即归入。
  • 存在一个「未分类」头,同样是可折叠的,也可以作为把对话移出分类的投放目标。
  • 对话行沿用官方行,点击、⋯ 菜单、置顶、归档、拖拽排序以及其它插件的行内按钮全部照常工作。

插件的工作方式是在不移动任何官方节点的前提下完成装饰:

  1. 把每个工作区分组改成 flex 列,把分类头作为独立节点插进去;
  2. 给官方行设置 CSS order,让它们落在各自分类的波段里;
  3. 折叠只给对应行加 display:none,展开即恢复;
  4. 行的身份直接读官方已有的 data-row-key(workspace:<id> / session:<id>),不依赖 React 内部结构。

同步过程由一个只关注会话树区域的 MutationObserver 驱动、按帧节流,每一步都包在 try/catch 里;如果官方 DOM 结构发生变化,插件不做任何事,侧边栏保持原样。

README 给出的效果示意如下,新建分类按钮位于工作区行内:

会话                                  +
DSAI                    全选  ▣+  ⋯          ← 新建分类按钮就在工作区行里
  ⌄ MC                    4             ⋯     ← 分类,可折叠、可拖动排序
      对话 A
  ⌄ 插件                  1             ⋯
      对话 B
  ⌄ 未分类                                    ← 拖到这里即移出分类

安装与启用

README 提供的安装命令是:

dsh plugin --profile web add github:YinqiSY/dsh-session-folders

如果需要在插件管理里以本地目录方式安装,README 提到这种方式在开发时更常用。命令中的 --profile web 与 dsh/client.platform: web 的配置一致。

典型用法

安装后主要通过侧边栏操作即可,全程不需要命令行:在工作区行点击文件夹加号按钮,输入分类名回车创建;把对话拖到分类头上完成归类;点分类标题折叠或展开;在分类头的 ⋯ 菜单里重命名或删除;把对话拖到「未分类」头上移出分类。

对于希望通过 Agent 操作的场景,插件把同一套能力暴露为 session_categories 工具,支持 list / create / rename / delete / assign / unassign 六种操作,与 UI 调用的是完全相同的宿主函数。

数据持久化在以下位置:

<DSH_PROFILE_DIR>/data/session-categories/state.json

插件不会在工作区目录里创建、移动或改名任何文件,也不碰会话日志。删除分类只是解除归属,对话会回到「未分类」。

适用场景与注意

适合会在同一个 profile 里维护多个工作区、并且希望按主题把会话归拢的使用者,尤其是已经装了中文增强套件 deepseek-harness-zh_pro 的用户。README 说明已验证与该套件 v0.11.1 共存无冲突,两者的槽位注册、命名空间、行 id、CSS 类名和 DOM 操作方式互不重叠。

需要注意三点。第一,插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证;许可证是 MIT。第二,README 的防护说明提到,桌面端只要有一个 profile 条目未激活,整个 web 启动就会失败,因此被注册的条目会同步激活,只是把注册延后到服务就绪(whenService),客户端 apply 永不抛异常。第三,DOM 层的每次行数变化(包括掉到 0)以及任何失败都会被写入 <数据目录>/client.log,日志超过 256 KB 会自动清空,排查问题时可以先看这份日志。

结尾

这个插件的价值不在于提供新的会话管理模型,而在于在官方那棵树上加了一层轻量的分类装饰:不搬节点、不改官方行,用 order / display 实现分组与折叠,因此官方功能和其它插件继续有效。目录页见 https://www.skillhub.cn/plugins/YinqiSY/dsh-session-folders,源码见 https://github.com/YinqiSY/dsh-session-folders。

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

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

小夜