前言¶
在 DSH(DeepSeek Harness)Web 里同时维护多个工作区时,侧边栏会列出全部工作区及其会话。日常只想盯一个项目目录时,列表仍然很长,视线容易被别的分组打断。官方浏览区没有对外暴露「按工作区过滤列表」的接口,单靠折叠也不能把其它工作区的标题藏起来。
下面介绍的 dsh-workspace-focus(维护者 qiansanyu)是社区客户端插件:进入「聚焦」后,侧边栏只保留当前聚焦的那一个工作区,并在会话头部提供状态标签与操作入口。插件当前在 GitHub 上星标为 0,许可证 MIT,版本 0.1.0(以 package.json 为准)。
这是什么¶
一句话:工作区聚焦——把 DSH Web 侧边栏收窄到当前聚焦的工作区,并在会话头部提供聚焦入口与状态提示。
分类属于 客户端(dsh.client,仅 Web 平台)。它不替代官方工作区模型,而是在现有 WorkspaceBrowser 与设置服务之上做视图折叠、CSS 隐藏组标题,以及 URL / 存储中的作用域管理。
核心功能¶
侧边栏收窄¶
未聚焦时,侧边栏照常显示所有工作区;聚焦某个工作区后,其它工作区及其会话从侧边栏消失,退出聚焦后恢复。实现上结合两条通道:读写官方浏览区注册的视图 store(折叠非聚焦工作区),以及按 data-row-key="workspace:<id>" 注入 CSS 隐藏其它工作区的组标题行。
会话头部标签¶
当前会话属于某个工作区时,标题栏右侧出现工作区标签,三种状态:未聚焦(灰色)、聚焦且会话在该工作区内(蓝色 + 蓝点)、聚焦但会话在其它工作区(警告色 +「未聚焦」)。单击不触发聚焦(防误触);双击在「聚焦到当前工作区」与「退出聚焦」之间切换;右键或键盘 Enter / Space 打开菜单(工作区列表、聚焦、在此工作区新建会话、复制聚焦链接、退出聚焦等)。子智能体等不属于任何工作区的会话不显示标签。
设置与聚焦链接¶
「设置 → 工作区聚焦」提供 enabled(默认开,关则隐藏头部标签)与 focusEnabled(默认开,关则退出聚焦并还原侧边栏),写入 profile 的 cordis.patch.yml。聚焦后地址栏带 ?ws=<工作区路径>,可通过菜单复制链接,在他处或新标签页打开同一聚焦状态。
作用域(每标签页独立)¶
读取顺序为 URL → sessionStorage['dsh.workspace.focus'] → localStorage['dsh.workspace.focus.default']。「退出聚焦」会清空三层状态,避免刷新后又被默认值拉回。
安装与启用¶
前提:DSH Web 0.2.x(dsh --version 确认;开发时使用过 0.2.2-rc.1),且 PATH 上有 pnpm(dsh plugin 会把参数转发给 pnpm)。
命令行(推荐)¶
在 web profile 下执行:
dsh plugin --profile web add git+https://github.com/qiansanyu/dsh-workspace-focus.git
装完后会把 dsh-workspace-focus 追加进 profile 的 dsh.profile.bundles,一般无需手改配置。刷新页面即可;若未生效可重启 dsh web(关闭 HMR 的 profile 只能重启)。等价简写为 github:qiansanyu/dsh-workspace-focus;HTTPS 不通时可改用 git+ssh://git@github.com/qiansanyu/dsh-workspace-focus.git。
Web 界面¶
侧边栏 →「插件」→「添加插件」→「安装第三方插件」,填入同一 Git 地址,同样会自动勾选 bundle。
卸载¶
dsh plugin --profile web remove dsh-workspace-focus
同一 profile 不宜并存多份工作区聚焦插件,否则会抢用 window.__DSH_WORKSPACE_FOCUS__。
典型用法¶
- 打开属于某工作区的会话,在头部右侧查看工作区标签。
- 双击标签,侧边栏收窄到该工作区;再次双击退出聚焦。
- 需要可分享状态:聚焦后使用菜单「复制聚焦链接」,对方打开带
?ws=的 URL 即进入相同聚焦(工作区不存在时参数保留但不聚焦,不会破坏界面)。 - 在聚焦状态下新建会话:优先用菜单「在此工作区新建会话」,头部官方「新建会话」按钮不受插件拦截,可能落在非聚焦工作区。
其它插件可通过 window.__DSH_WORKSPACE_FOCUS__ 调用 focus(path)、exit()、toggle(path)、subscribe(fn) 等,并监听 dsh:workspace-focus 事件(详见仓库 README)。
适用场景与注意¶
适合谁:长期在多个 DSH 工作区之间切换、但经常需要「只盯一个目录」的开发者。
安装前:插件随当前 DSH Web profile 加载,与 dsh web 进程权限一致;安装第三方插件前建议浏览 源码仓库 与 MIT 许可证。
已知边界(README 已说明,摘要点):
- 未归入任何工作区的会话在聚焦时会从侧边栏整桶消失(成员关系需通过
attachSession等显式记账)。 - 官方视图状态
dsh.workspace.view.v5跨标签页共享,多标签各自聚焦时折叠状态可能互相覆盖;退出聚焦会按插件快照dsh.workspace.focus.snapshot还原。 - 侧边栏上方搜索仍走 Host 全量查询,可能搜到其它工作区的会话。
- 聚焦工作区被删除时自动退出聚焦;官方若改动
data-row-keyDOM 契约,隐藏标题可能降级为「只折叠不隐藏」,功能不会故意破坏数据。
社区插件目录与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本插件由社区维护。
结尾¶
dsh-workspace-focus 在不改官方会话列表 API 的前提下,用视图折叠、DOM 标识与头部交互,把 Web 侧边栏收成「当前工作区」视图,并用 URL 与存储分层记住聚焦状态。查阅与安装可参考: