dsh-split-workspaces:在 Harness Web UI 中平铺多工作区对话

前言

在 DeepSeek Harness(DSH)里用 Web 界面工作时,常见做法是侧边栏选一个工作区,主面板只跟一条对话。要同时看多套仓库、多路会话,往往要在工作区之间来回切换,上下文也容易错位。

dsh-split-workspaces 把主面板改成可调整的多窗格棋盘:每个窗格绑定一个工作区,各自复用完整的 embedded 对话(记录、输入、流式输出)。下面介绍它的能力边界、怎么用,以及和宿主、其它插件的配合方式。

这是什么

dsh-split-workspaces 是维护者 liufeicc 发布的本地 DSH 插件包(npm 包名 @local/dsh-split-workspaces,README 标注版本 1.0.0,MIT 许可证)。分类上属于 客户端 插件:package.json 中 dsh.client.platform 为 web,并在客户端注入会话、对话、侧边栏、工作区等 UI 模块。

一句话定位:在 Harness Web UI 主面板里,把多个工作区上下左右平铺,一格一个完整对话;分隔条改尺寸,拖标题栏交换位置,焦点窗格用品牌色标题栏标出。

核心功能

进入平铺面板

侧边栏在 Plugins 图标旁增加一行「两个平铺格子」图标。点击后,主区域切换到 多工作区平铺 面板;顶部有标题和 添加工作区(或英文 UI 下的 Add workspace),下方是窗格棋盘。

每个窗格里有什么

每个窗格有独立标题栏:工作区名与路径、打开目录、替换工作区、分屏、Agent 模式选择、MCP / SKILL 开关(按工作区策略)、切换会话、关闭等。

窗格内部挂载共享的 conversation.content Factory(embedded 变体),并包在显式 SessionProvider 下,因此每格都是完整对话,而不是只读预览。

若系统注册了额外的 conversation.view(例如装了 Git 面板会出现「对话 / Git」),窗格对话区上方会出现视图标签栏;每格独立选择,默认对话。Trajectory(轨迹)只在主对话提供,平铺窗格不列出。 没有额外视图插件时标签栏不渲染,行为与改造前一致。

平铺与布局

  1. 添加工作区:新窗格总是接到整块棋盘的最右侧;下拉列出尚未铺开的工作区,也可用文件夹选择器 新建工作区。
  2. 分屏(两步菜单):先在标题栏选方向(左 / 右 / 上 / 下),再选要放进新窗格的工作区(或新建)。方向本身不会立刻分屏,也不会给当前工作区再开一格——目的是摊开不同工作区。例如「上排两格并排、下排一格」可先对 A 向下分并选 C,再对 A 向右分并选 B。
  3. 拖动分隔条:按布局方向调整比例;双击恢复均分;聚焦分隔条后方向键微调(Shift 加大步长)。比例按容器百分比保存,窗口缩放后比例不变。
  4. 拖标题栏交换位置:按住标题栏(避开内部按钮与菜单)拖到另一窗格上松手才交换;交换的是位置,各格的工作区、会话、预选 Agent 模式随格一起走。
  5. Alt+方向键:在棋盘内把焦点移到该方向上最近的窗格,并把光标送进输入框;快捷键登记在 设置 → 快捷键,不可再分配给其它命令。

替换工作区与打开目录

替换工作区(每格标题栏一个图标):只换这一格绑定的工作区,布局树与分隔比例不变。菜单形状与 添加工作区 相同;已在棋盘上的工作区不会出现在候选里(要对调两格请拖标题栏)。

打开目录:把这一格的工作区目录交给系统文件管理器。实现上复用已安装的 @deepseek-ai/dsh-api-session-controller:canOpenWorkspacePath() 判断部署能否把路径交给桌面,openWorkspacePath({ path }) 校验并打开。无图形环境、路径不可达等情况会在该窗格错误行给出本地化说明。

会话与删除

切换会话 下拉每一行自带删除按钮,删除的是该行会话,不必是当前显示会话。确认与停会话等逻辑交给 dsh-session-delete 提供的 sessionDeleteUi(本插件点击时惰性 ctx.get)。未安装该插件时按钮仍在,错误行会说明删除服务不可用。删除成功后,所有钉住该会话的窗格会松手并按规则回退或进入空态。

保存布局

右上角 保存布局 把当前棋盘(分屏方向、比例、顺序、焦点)、每格会话与 Agent 预设、任务分派图(边与说明)、面板模式写入浏览器 localStorage。页面重载后第一次进入平铺面板时恢复;同页内切换面板不覆盖实时布局。缺失的工作区、会话等会静默丢弃;旁侧垃圾桶仅清除保存记录。模型按会话由 DSH 持久化,恢复会话即恢复当时的模型。

设计模式与任务分派

面板可在 平铺模式 与 任务分派(设计) 间切换。设计模式把每个会话画成卡片,用有向箭头表示委派关系(树结构:禁止成环,每个会话最多一个上级)。箭头持久化在 Host 的 ~/.dsh/storages/pane_dispatch_bindings.json。授权后上游会话获得作用域版 dispatch_task 工具,可向目标会话派任务并按 wait 策略等待结果。点卡片会回到平铺并聚焦显示该会话的窗格。

Host 侧还提供批处理、重定向、等待子任务等配套能力(见仓库 README「设计模式」专节与 dispatch_task 参数表)。

安装与启用

本次核对使用的 GitHub README(中英文)未给出形如 dsh plugin add … 的独立一行安装命令。请以社区目录页为准查阅维护者发布的安装方式:

SkillHub 为 DSH 社区插件目录站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行阅读源码与 MIT 许可证,确认插件将以当前 dsh 进程权限在本地运行。

README 中的 本地开发 说明:在 profile 里用 link: 指向插件目录;dsh-client-hmr 约每 500ms 轮询入口 client.js 以热重载浏览器端。若同时安装 dsh-dev-hmr,保存 index.js 或 host.*.js 可热重载 Host 插件;仅当 package.json 依赖变更或新增包时才需重启 dsh web。修改 client.*.js 后需 touch client.js 以刷新入口版本戳:

touch client.js

启用后,在 Harness Web UI 侧边栏点击平铺图标即可进入多工作区面板;dsh.client.immediately 为 true,客户端加载时会立即注入。

典型用法

并排对比两个仓库的 Agent

  1. 点击侧边栏平铺图标进入面板。
  2. 用 添加工作区 或第一格标题栏的 分屏 把第二个(及更多)工作区铺到棋盘右侧或上下方向。
  3. 在各格 切换会话 或新建会话,独立输入;用分隔条调整阅读宽度。
  4. 需要下次打开仍保持棋盘时,点 保存布局,再刷新页面验证恢复。

用 Alt+方向键在多格间打字

满屏多窗格时,用 Alt+←/→/↑/↓ 移动焦点并直接进入目标格输入框,无需鼠标点选。

编排跨会话委派

  1. 切换到 设计 / 任务分派模式,在卡片间拖出箭头建立树状授权。
  2. 回到平铺,在授权上游会话中调用 dispatch_task(参数含 task、targets、wait 等,见 README 表格)。
  3. 与 保存布局 一并持久化的分派图会在重载后由 Host 存储文件恢复。

手动验收流程见 README「本地开发」末尾清单(含 dsh web --no-open --port 0 与无头浏览器探针说明)。

适用场景与注意

适合谁

  • 需要在同一浏览器里并行跟进多个工作区、多路会话的 DSH 用户。
  • 要用可视化分派图管理会话间 dispatch_task 授权的团队或个人。

依赖与协作

  • 打开目录 依赖 @deepseek-ai/dsh-api-session-controller 的 Session 远端能力;容器或无桌面环境会表现为不可用。
  • 会话删除的完整体验依赖 dsh-session-delete;未安装时仅删除入口不可用,其它平铺功能仍可用。
  • MCP、SKILL 可见性按工作区共享;Agent 模式预选按窗格暂存、按会话生效(README 中有对比说明)。

安全与审查

插件代码在 GitHub 公开仓库维护(当前线索显示 0 stars,不代表质量结论)。安装执行的是你看过的那份源码;勿在未审阅的情况下把不可信插件加入 profile。

结尾

dsh-split-workspaces 把 Harness Web UI 从「单工作区单对话」扩展成可持久化布局的多窗格工作台,并在同一面板内提供会话级任务分派设计视图。若你已经在用 DSH 管理多个代码目录,可先在测试 profile 里启用,再按 README 的契约测试或浏览器探针验证与你部署的匹配度。

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

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

Xiaoye