前言¶
在 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-client-ui-workspace-suite - 当前资料中的版本:
1.2.0(MIT) - 目录页:SkillHub 插件页
- 源码与说明:GitHub — Self-Identity/dsh-client-ui-workspace-suite
DSH 生态强调「一切皆插件」;SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,本文介绍的也是社区插件,不是官方应用商店条目。
核心功能¶
插件由四个可独立开关的模块组成,默认全开;任意模块可在 插件 → 配置 里关闭,以回到对应区域的出厂行为(见下文「边界」中关于目录对话框的全局副作用)。
| 痛点 | 插件行为 | 配置键 |
|---|---|---|
| 系统对话框看不到层级、不能行内建文件夹 | 资源管理器式选择弹窗 | modulePicker |
| 工作区平铺,子项目混在一起 | 多级工作区树 | moduleTree |
| 看不到工作区内容与 Token 消耗 | 工作区总览 | moduleOverview |
| 会话菜单列出过多子目录 | 只列根级;有子工作区时先选再开会话 | moduleHeroMenu |
资源管理器式选择弹窗¶
两个入口会打开同一弹窗:新对话页的「添加工作区」、侧边栏的「+添加」。
- 树形浏览:单击展开/收起;双击或点复选框勾选;勾选目录会自动展开。
- 行内新建文件夹:悬停行尾
+,输入名称后按Enter;空名不创建,同级重名会行内提示。 - 路径输入:粘贴绝对路径后按
Enter,祖先链展开到该级并聚焦。 - 可嵌套选择:新勾选须与已有选择可比(祖先、后代或兄弟);勾兄弟会补上共同父节点,但不会拉入整个盘符根。
- 确认后选择进入哪个工作区;默认选中根节点,点「跳过」则只注册不进入。
多级工作区树¶
工作区按最近的已注册祖先目录嵌套;层内顺序为:文件夹图标 → 父工作区 → 父工作区会话 → 子工作区。
- 置顶/取消置顶带 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:...):
- 客户端侧边栏 → 插件 → 添加插件。
- 填写包名与版本,例如:
dsh-client-ui-workspace-suite@1.2.0
也可选择本地源码目录(需自行构建;开发侧常用 node tools/build.mjs 生成 lib/client.js)。
- 点击 安装 → 立即启用;若提示「改动在下次启动生效」,请重启客户端。
- 卡片显示 已启用 / 已挂载 后,工作区列表应切换为树状视图。
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;换机器或清缓存会重置。
典型用法¶
下面按日常操作顺序说明,均可直接在已启用插件的客户端里复现。
添加并进入工作区
- 在新对话页点「添加工作区」,或侧边栏点「+添加」。
- 在弹窗中逐级展开目录,勾选目标路径(可用路径输入框粘贴绝对路径)。
- 需要时在行尾
+新建文件夹,确认后选择要进入的工作区根节点,或点「跳过」仅注册。
在 monorepo 里管理多个子项目
- 为各子目录分别注册工作区后,侧边栏应显示嵌套树而非平铺列表。
- 用搜索旁折叠按钮收起子树;需要时在子工作区行上直接新建会话。
- 删除父工作区时,插件会从最深子层开始级联删除,直到子树干净。
查看 Token 与会话结构
- 在工作区行打开 更多 → 工作区总览。
- 查看子树 Token 总量与按模型明细,在会话树中跳转到指定轮次。
- 按需关闭依赖卡或 README 展示(对应总览相关配置键)。
在会话中切换工作区
- 打开会话窗口顶部工作区菜单(仅根级列表)。
- 若该根下有多个已注册子工作区,按提示选择实际
cwd再开始或继续会话。
适用场景与注意¶
适合谁
- 本地 monorepo 或多仓库并行,需要在 DSH 客户端里按目录层级组织工作区。
- 希望在不离开应用的情况下浏览路径、行内建文件夹,并查看某工作区(含子工作区)的 Token 与会话结构。
- 希望会话顶栏工作区菜单保持根级,避免子目录刷屏。
务必知晓的边界
- 目录选择服务互斥:组合包将目录服务钉在
browse后端以支持应用内浏览器。启用后,应用内任何地方都不会再弹出系统目录对话框;仅关闭modulePicker不会恢复系统对话框——需禁用或卸载整个组合包并重启。卸载步骤见 README「卸载」一节。 - 插槽接管:以影子插槽替换
sidebar.workspaces(priority-100)和conversation.hero.workspace(priority-1),并参与directory-picker组合行;与其它注册同一插槽的插件可能按 priority 竞争,只有一个生效。 - 不做的事:不修改会话内容、模型行为或网络请求;不写文件(除非你点
+建文件夹);不在工作区之间迁移已有会话(会话cwd由宿主在创建时固定)。 - 排查:
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