dsh-folder-sidebar:把工作区侧栏改成分文件夹进入式导航

前言

DeepSeek Harness(DSH)在 Web 客户端里默认用侧栏同时展示多个工作区及其下的会话。工作区和会话一多,列表会变长,需要在同一屏里反复滚动、在折叠分组里找目标会话。DSH 的生态思路是「一切皆插件」——侧栏交互也可以由社区插件替换或增强。下面介绍维护者 Aliboder 发布的客户端插件 dsh-folder-sidebar:把「工作区 / 会话」改成两级导航,侧栏先只列工作区(以文件夹形式呈现),点进某个工作区后再看该工作区的会话列表,并支持返回上一级。

这是什么

dsh-folder-sidebar 是 DSH 的 客户端(Web) 插件:用文件夹式侧栏替代默认的「所有工作区会话摊在同一列表」的浏览方式。工作区即文件夹;进入文件夹后才渲染该工作区的会话;顶栏仍保留与官方对齐的搜索、视图选项和添加工作区入口。

插件在 Host 侧注册 session projection(folder-sidebar/turn),在 Client 侧注入 UI(client.js),不 import 宿主包,图标按 ui-primitives 几何复刻。

核心功能

两级导航与顶栏

  1. 第一级:工作区文件夹列表。每行含文件夹图标(兼状态位)、名称、… 菜单、会话数、进入箭头 ›。
  2. 第二级:进入某工作区后,顶栏结构不变;其下多一条文件夹行(‹ 返回 + 名称 + + 新建会话)。点行内任意位置返回文件夹列表;点 + 在当前工作区新开会话且不触发返回。
  3. 默认定位:打开侧栏时停在当前会话所在的工作区;返回后停在文件夹列表,不会被自动拉回。
  4. 窄栏:侧栏收起时只显示一个文件夹图标,点击展开。

顶栏固定为标题「工作区」+ 搜索 + 视图选项 + 添加工作区,两级界面一致。

搜索

  • 顶栏集成搜索:平时为放大镜按钮;点击后输入框淡入并占满顶栏(约 150–180ms 过渡,尊重 prefers-reduced-motion),带关闭按钮,Esc 可关。
  • 标题匹配即时本地过滤;内容匹配 250 ms 防抖后走 Host 会话检索,结果带工作区与命中片段;点击结果打开会话并收起搜索。
  • 搜索激活时列表变为跨工作区的扁平结果。

视图选项与排序

视图选项合并排序与显示筛选(对齐官方,一个菜单两段):

  1. 排序(文件夹级与会话级各自独立,菜单标题会标明「排序 · 文件夹 / 会话」):手动顺序 / 按名称 / 按最近活动,以及正序 ↑ / 倒序 ↓。
  2. 显示:隐藏已归档(默认)/ 全部会话 / 仅显示已归档。

偏好写入浏览器 localStorage:dsh.folder-sidebar.sort({ folders: {mode, dir}, sessions: {mode, dir} })、dsh.folder-sidebar.archived。文件夹级仅在「手动顺序 + 正序」下显示「上移 / 下移」并支持拖拽排序(其他模式下顺序为派生值)。会话级「手动顺序」与「按最近活动」等价;置顶会话任何模式下都排最前。

状态位

会话行:行首 12px 状态位(运行转圈、未读完成绿 ✓、等待黄 ?、失败/中断红 !、用户停止空心灰点、已读/空闲淡灰点等),数据来自 useSessionStatus 与 Host 投影 projectionsBySession[id].values['folder-sidebar/turn']。

文件夹行:状态叠在文件夹图标上,按优先级聚合子会话状态(等待 > 运行 > 失败 > 未读完成 > 主动停止;同优先级取 since 最早)。悬停约 350 ms 显示状态详情悬浮卡。

与官方侧栏相比:失败、主动停止、文件夹级聚合为插件新增;空闲时仍显示淡灰点为有意偏离官方(官方 idle 不渲染点)。

菜单与归档

会话行 … 或右键:置顶、重命名、分叉、复制会话 ID、归档(运行中归档需二次确认)。文件夹行:重命名工作区、新建会话、上移/下移(仅手动+正序)、删除工作区(二次确认,只删注册)。Host 不提供会话删除,仅归档/取消归档。

归档行为对齐官方:已归档行半透明且不可打开;归档成功提示条可撤销;未分组会话出现在列表末尾伪文件夹;subagent 来源会话隐藏。

其他行为

  • 长名称悬停时横向滚动(尊重 prefers-reduced-motion)。
  • 操作失败时在底部提示条展示,不仅写 console。
  • 文件夹级在「手动顺序 + 正序」且非搜索中时,行为说明支持拖拽排序(落点指示线、经 Host workspace 排序接口持久化);同条件下菜单仍提供「上移 / 下移」。README 与官方对照表一行将「跨组落点等完整拖拽」标为待做,以仓库当前 README 全文为准。

已知限制(来自 README):无「展开其余」水位线;搜索期间列表被结果替代;文件夹状态位只统计当前筛选下可见会话。

安装与启用

推荐从 npm 安装:

npm install dsh-folder-sidebar

或在 DSH 的 Plugin Manager / plugin_manager 里将 install_bundle 目标设为 dsh-folder-sidebar。

本地链接源码时:install_bundle 指向插件目录;Client(client.js、locale)改动刷新页面即可;Host(index.js 投影)改动需完整重启 DSH;启用/停用 bundle 后浏览器需刷新才会挂载/卸载。

package.json 中引擎要求:node >= 20,dsh 版本范围为 >=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-0 <0.3.0-0。

安装前请自行查看仓库源码与 MIT 许可证;插件随当前 DSH 进程权限运行,与任何 DSH 插件一样,安装即信任该 bundle 的 Host 与 Client 代码。

典型用法

  1. 安装并启用 bundle 后刷新 Web 客户端,侧栏变为文件夹列表。
  2. 点击某个工作区文件夹,进入该工作区会话列表;需要切换工作区时点文件夹行左侧返回。
  3. 在当前工作区点文件夹行右侧 + 或菜单「在此新建会话」创建会话。
  4. 顶栏放大镜进入跨工作区搜索;顶栏漏斗调整排序与归档显示。
  5. 需要调整工作区顺序时,将文件夹级排序设为「手动顺序 + 正序」,再拖拽或使用菜单「上移 / 下移」。

适用场景与注意

适合:长期开多个 DSH 工作区、每个工作区下会话较多,希望侧栏先选工作区再选会话,并需要与官方接近的搜索、归档、状态提示体验的用户。

注意:

  • 插件替换/增强侧栏 UI,并在 Host 注册 session projection;升级 DSH 大版本时需核对 engines.dsh 是否仍兼容。
  • 状态中的失败/中断依赖 Host 侧投影,Client 单独刷新无法替代 Host 重启后的投影逻辑变更。
  • 社区目录与 GitHub 为信息来源;星标等元数据以目录页当时展示为准(目录线索为 0 star),不作为功能依据。

结尾

dsh-folder-sidebar 把 DSH Web 侧栏改成「工作区文件夹 → 会话列表」的两级结构,并在搜索、排序、归档与状态展示上对齐官方习惯,同时补充文件夹级状态聚合与失败/停止等提示。若要安装或读完整行为说明,见 npm 包 dsh-folder-sidebar、社区目录 https://www.skillhub.cn/plugins/Aliboder/dsh-folder-sidebar 与 GitHub https://github.com/Aliboder/dsh-folder-sidebar。

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

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

Xiaoye