dsh-client-ui-workspace-suite:把 DSH 客户端工作区做成可浏览的目录树

前言

在 DSH 桌面客户端里,工作区通常以平铺列表呈现:monorepo 下多个子项目挤在同一层,添加工作区时走系统目录对话框,看不到层级,也不方便在应用内新建文件夹。会话窗口的工作区菜单还可能把每个 src、lib 子目录都列出来,选错根目录就开始会话的情况并不少见。

下面介绍社区插件 dsh-client-ui-workspace-suite(维护者 Self-Identity,分类:客户端)。它把「工作区」从一层列表升级成可浏览的目录树:资源管理器式选择、嵌套工作区树、按工作区的总览页,以及根级会话工作区菜单。目标宿主为 @deepseek-ai/dsh-desktop-runtime 0.2.1-rc.2,实现上是纯渲染层组合包,不注册 Host 工具、不发网络请求。

这是什么

一句话定位:Explorer 风格的工作区选择器、多级工作区树,以及每个工作区的总览页,面向 DSH Web/桌面客户端 UI。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,本文介绍的也是社区插件,不是官方应用商店条目。

核心功能

插件由四个可独立开关的模块组成,默认全开;任意模块可在 插件 → 配置 里关闭,以回到对应区域的出厂行为(见下文「边界」中关于目录对话框的全局副作用)。

痛点 插件行为 配置键
系统对话框看不到层级、不能行内建文件夹 资源管理器式选择弹窗 modulePicker
工作区平铺,子项目混在一起 多级工作区树 moduleTree
看不到工作区内容与 Token 消耗 工作区总览 moduleOverview
会话菜单列出过多子目录 只列根级;有子工作区时先选再开会话 moduleHeroMenu

资源管理器式选择弹窗

两个入口会打开同一弹窗:新对话页的「添加工作区」、侧边栏的「+添加」。

  1. 树形浏览:单击展开/收起;双击或点复选框勾选;勾选目录会自动展开。
  2. 行内新建文件夹:悬停行尾 +,输入名称后按 Enter;空名不创建,同级重名会行内提示。
  3. 路径输入:粘贴绝对路径后按 Enter,祖先链展开到该级并聚焦。
  4. 可嵌套选择:新勾选须与已有选择可比(祖先、后代或兄弟);勾兄弟会补上共同父节点,但不会拉入整个盘符根。
  5. 确认后选择进入哪个工作区;默认选中根节点,点「跳过」则只注册不进入。

多级工作区树

工作区按最近的已注册祖先目录嵌套;层内顺序为:文件夹图标 → 父工作区 → 父工作区会话 → 子工作区。

  • 置顶/取消置顶带 180ms FLIP 动画,并尊重 prefers-reduced-motion。
  • 搜索框旁的折叠按钮可收起全部子工作区,状态会持久化。
  • 行使用 role=treeitem 与 aria-expanded,支持键盘导航。
  • 删除工作区从最深一层级联删除;删不掉的会提示。
  • 未分组会话在列表末尾单独成节(细分割线 + 小标题),不伪装成工作区行。

工作区总览

入口:工作区行 → 更多 → 工作区总览。

  • 头部展示文件夹图标、名称、绝对路径,以及该工作区及其全部子工作区的 Token 总量(悬停可看按模型拆分)。
  • 完全展开的会话树;Token 数字主要出现在总览页。
  • 依赖卡(可关):一次目录列举,并对 package.json、tsconfig.json、Dockerfile、.nvmrc 做定点探测;不递归、不读锁文件。
  • 每个会话展示最近若干轮,可跳回会话。
  • 根目录 README.md 由插件自带轻量 Markdown 渲染器渲染(不注入 HTML,javascript: 链接不可点)。

会话窗口的工作区菜单

  • 只列根级工作区。
  • 选中项存在已注册子工作区时,先询问用哪一个开始会话。
  • 「添加工作区」置顶,并打开资源管理器式选择弹窗。

安装与启用

安装步骤以仓库 README 为准,在客户端内添加 npm 包名(不要自行拼接 dsh plugin add github:...):

  1. 客户端侧边栏 → 插件 → 添加插件。
  2. 填写包名与版本,例如:
dsh-client-ui-workspace-suite@1.2.0

也可选择本地源码目录(需自行构建;开发侧常用 node tools/build.mjs 生成 lib/client.js)。

  1. 点击 安装 → 立即启用;若提示「改动在下次启动生效」,请重启客户端。
  2. 卡片显示 已启用 / 已挂载 后,工作区列表应切换为树状视图。

package.json 中声明的 DSH 引擎范围为 >=0.2.1-rc.2 <0.3.0,与 README 中的兼容性表一致。安装前建议对照 GitHub 仓库 源码与 MIT 许可证;插件在客户端进程权限下运行,与任何 DSH 插件一样,启用即信任其 UI 与本地存储行为。

配置项

在 插件 → 配置 中可调整模块开关与其它选项(资料中出现的键如下)。

分组 键
模块 modulePicker、moduleTree、moduleOverview、moduleHeroMenu
选择弹窗 pickerDepth(打开时预展开层数,0 = 只展开当前层)
工作区列表 treeMaxHeightPct、treeScroll、collapseAllByDefault、includeArchived、includeSubagent
总览 showTokens、showTurns、showEnv、readme、readmeMaxHeightPct(15–90)
外观 scrollbarWidth(4–20px,默认 8px),仅作用于本插件自有滚动区

滚动条宽度解析顺序:--suite-scrollbar-width → 全局 --dsh-scrollbar-width → 8px。若同时安装 dsh-client-ui-thick-scrollbar,会跟随其全局宽度。

偏好与启动诊断写在浏览器 localStorage:dsh-workspace-suite.settings.v1、dsh-workspace-suite.boot;换机器或清缓存会重置。

典型用法

下面按日常操作顺序说明,均可直接在已启用插件的客户端里复现。

添加并进入工作区

  1. 在新对话页点「添加工作区」,或侧边栏点「+添加」。
  2. 在弹窗中逐级展开目录,勾选目标路径(可用路径输入框粘贴绝对路径)。
  3. 需要时在行尾 + 新建文件夹,确认后选择要进入的工作区根节点,或点「跳过」仅注册。

在 monorepo 里管理多个子项目

  1. 为各子目录分别注册工作区后,侧边栏应显示嵌套树而非平铺列表。
  2. 用搜索旁折叠按钮收起子树;需要时在子工作区行上直接新建会话。
  3. 删除父工作区时,插件会从最深子层开始级联删除,直到子树干净。

查看 Token 与会话结构

  1. 在工作区行打开 更多 → 工作区总览。
  2. 查看子树 Token 总量与按模型明细,在会话树中跳转到指定轮次。
  3. 按需关闭依赖卡或 README 展示(对应总览相关配置键)。

在会话中切换工作区

  1. 打开会话窗口顶部工作区菜单(仅根级列表)。
  2. 若该根下有多个已注册子工作区,按提示选择实际 cwd 再开始或继续会话。

适用场景与注意

适合谁

  • 本地 monorepo 或多仓库并行,需要在 DSH 客户端里按目录层级组织工作区。
  • 希望在不离开应用的情况下浏览路径、行内建文件夹,并查看某工作区(含子工作区)的 Token 与会话结构。
  • 希望会话顶栏工作区菜单保持根级,避免子目录刷屏。

务必知晓的边界

  1. 目录选择服务互斥:组合包将目录服务钉在 browse 后端以支持应用内浏览器。启用后,应用内任何地方都不会再弹出系统目录对话框;仅关闭 modulePicker 不会恢复系统对话框——需禁用或卸载整个组合包并重启。卸载步骤见 README「卸载」一节。
  2. 插槽接管:以影子插槽替换 sidebar.workspaces(priority -100)和 conversation.hero.workspace(priority -1),并参与 directory-picker 组合行;与其它注册同一插槽的插件可能按 priority 竞争,只有一个生效。
  3. 不做的事:不修改会话内容、模型行为或网络请求;不写文件(除非你点 + 建文件夹);不在工作区之间迁移已有会话(会话 cwd 由宿主在创建时固定)。
  4. 排查:localStorage 的 dsh-workspace-suite.boot 保留最近三条失败记录(如 overview-failed、factory-failed);常见原因包括未重启、未进 dsh.profile.bundles、客户端升级导致契约变化。

结尾

dsh-client-ui-workspace-suite 把 DSH 客户端的工作区交互收成「可选目录树 + 嵌套列表 + 总览页 + 根级会话菜单」四块能力,并通过配置键按需关闭模块。若你主要痛点是平铺列表和系统选目录对话框,可以先按 dsh-client-ui-workspace-suite@1.2.0 安装,接受 browse 后端带来的全局副作用后再长期使用。

  • 目录页:https://www.skillhub.cn/plugins/Self-Identity/dsh-client-ui-workspace-suite
  • GitHub:https://github.com/Self-Identity/dsh-client-ui-workspace-suite
羽毛球分组比赛记分
小程序二维码

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

小夜