dsh-session-organizer:DSH Web 侧边栏两级会话组织

前言

在 DeepSeek Harness(DSH)里同时维护多个工作区和大量会话时,侧边栏往往只能按工作区平铺列表。若还要把会话再分类,社区里常见做法是分别安装 dsh-workspace-hub 与 dsh-session-categories 两个插件,功能有重叠,槽位也可能冲突。下面介绍维护者 a1137261060 发布的客户端插件 dsh-session-organizer:用单一插件在 Web 侧边栏实现「工作区分组 + 工作区内会话文件夹」两级组织,并附带状态点、待处理概览与搜索。

这是什么

dsh-session-organizer 面向 DSH web profile 的侧边栏,通过替换 sidebar.workspaces 槽位(priority -100)提供两级结构:

  • 第一级:自定义工作区分组,支持颜色、拖拽、折叠;
  • 第二级:每个工作区独立的会话文件夹,支持嵌套、拖拽与折叠。

README 写明其替代「dsh-workspace-hub + dsh-session-categories」的组合方案;插件分类为客户端,当前 package 版本 0.2.2,在 DSH 0.2.1-rc.2(web profile)下测试,MIT 许可,engines.dsh 要求 >=0.2.1-rc.1。

社区目录页:SkillHub - dsh-session-organizer。源码与说明:GitHub - a1137261060/dsh-session-organizer。

核心功能

工作区分组(第一级)

  1. 新建、重命名、删除分组(带颜色标识,自动分配配色);
  2. 拖拽工作区进出分组,或在分组内排序;拖拽分组卡片调整分组顺序;
  3. 全部分组一键展开或折叠;
  4. 删除分组时,其中工作区变为「未分组」,工作区及其会话不删除;
  5. 未分组工作区归入「未分组」卡片。

会话文件夹(第二级)

  1. 每个工作区独立文件夹体系,支持嵌套子文件夹;
  2. 拖拽会话进出文件夹、在文件夹内排序;跨文件夹拖拽会自动移动;
  3. 新建、重命名、删除文件夹(删除时会话变为「未分类」,会话不删除);
  4. 文件夹内可直接「新建会话」(自动归入该文件夹)与「新建子文件夹」;
  5. 未分类会话列在文件夹之后,不再单独占分区标题。

会话行与状态

会话行对齐 DSH 0.2.1 原生语义的状态点:等待交互/阻塞(黄)、运行中(蓝·脉动)、手动未处理(橙·光环)、已完成未读(绿)、空闲(灰),实时更新。无标题会话优先显示首条提问文本,其次「未命名 · 最近活动时间」。

⋯ 菜单支持:标记为未处理、移动到文件夹(含嵌套树)、重命名、分叉(子会话继承源会话文件夹)、归档、复制会话 ID。

待处理会话概览

搜索框下方实时展示「哪个工作区的哪个文件夹有待处理」:

  • 待处理包括:等待交互(审批、方案确认、提问等 agent 阻塞场景)、手动「未处理」标记、已完成未读,按优先级排列;
  • 按 工作区 → 文件夹(或未分类) 分组,组头显示位置与数量,可折叠;
  • 点击会话行直接打开;无待处理时区域隐藏;
  • 数据来自 DSH 0.2.1 全局会话状态 hook。

手动「未处理」标记通过 ⋯ 菜单操作,不会因打开会话自动清除;持久化到 ~/.dsh/dshorg-manual-unread.json。被标记会话出现在待处理区域,状态点为橙色带光环。

搜索与保留的原生操作

  • 标题搜索开箱即用;消息全文搜索依赖 host 侧 @deepseek-ai/dsh-session-query-sqlite(见下文配置)。
  • 搜索时隐藏分组视图,按标题/消息分组展示结果。
  • 仍保留:打开/重命名/分叉/归档会话,各入口新建会话,工作区的添加/重命名/删除等。

安装与启用

插件以当前 dsh 进程权限运行;安装前建议在 GitHub 查看源码与 MIT 许可证。

从 GitHub 安装(README 推荐):

dsh plugin --profile web add https://github.com/a1137261060/dsh-session-organizer/archive/refs/heads/main.tar.gz

本地开发可用 link 方式(改代码后重启 dsh web 加载):

dsh plugin --profile web add link:<插件绝对路径>

安装后重启 dsh web 服务并刷新页面,侧边栏即变为分组视图。

消息全文搜索的前提

DSH 组合默认对 session-query-sqlite 为 openAt: never(关闭)。若需消息全文搜索,在 profile 的 cordis.patch.yml 中覆盖:

- id: session-query-sqlite
  config:
    path: 'C:/Users/<你>/.dsh/session-search.db'   # 持久化索引路径(POSIX 同理)
    openAt: first-search

未开启时消息搜索会提示失败,标题搜索不受影响。

典型用法

README 中的操作路径可概括为:

  1. 顶部:会话(新建)、工作区(添加)、分组(新建分组);
  2. 工作区行 ⋯:移动到分组、新建会话、新建文件夹、重命名、删除;
  3. 文件夹行悬停:新建会话、新建子文件夹、重命名、删除;
  4. 会话行 ⋯:标记为未处理、移动到文件夹、重命名、分叉、归档、复制会话 ID;
  5. 利用搜索框下方待处理区域跨工作区跳转需处理的会话;
  6. 工作区名、文件夹名、会话名完整显示(自动换行);整行可点击,拖拽时使用独立 MIME application/x-dshorg。

数据持久化与结构

  • 分组与文件夹:localStorage(快速渲染)+ host 磁盘 ~/.dsh/dshorg-groups.json、~/.dsh/dshorg-session-folders.json;
  • 换浏览器、清缓存、重启 dsh web 后配置不丢;工作区删除或会话归档/删除时会自动清理相关归属;
  • 工作区列表未加载完成时不会误清数据。

包内结构(摘自 README):

dsh-session-organizer/
├── package.json
├── cordis.patch.yml
├── lib/
│   ├── index.js        # host:/api/dshorg/* 磁盘持久化
│   └── client.js       # client:替换 sidebar.workspaces
├── LICENSE
└── README.md

实现为自包含模式:client 经 window.__ModuleLoader__.load 加载(仅依赖 react),host 为 ESM(node:fs / node:path),无第三方运行时依赖。

适用场景与注意

适合:在 DSH Web 侧栏同时管理多工作区、多会话,需要分组/文件夹、待处理一览和拖拽整理的用户。

务必注意:

  1. 与同样替换 sidebar.workspaces 的插件(如 dsh-workspace-hub、dsh-session-categories)互斥,请勿同时安装;
  2. 针对 DSH 0.2.1 系 API 适配,升级 DSH 后若槽位或服务变更可能需要插件更新;
  3. 插件属社区生态(SkillHub 等为独立目录站,与 DeepSeek / 幻方无官方从属关系),星标与维护节奏以 GitHub 为准。

结尾

dsh-session-organizer 把工作区分组与会话文件夹合并进一个 Web 侧栏插件,并补上状态点、待处理概览与搜索,减少「双插件」组合带来的冗余与冲突。需要安装命令与配置细节时,以 README 为准:

  • 目录页:https://www.skillhub.cn/plugins/a1137261060/dsh-session-organizer
  • GitHub:https://github.com/a1137261060/dsh-session-organizer
羽毛球分组比赛记分
小程序二维码

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

Xiaoye