dsh-split-session:DSH Web 四窗格分屏 Session 视图

前言

在 DeepSeek Harness(DSH)里同时跟进多个 Session,常见做法是来回切换侧边栏条目,或开多个浏览器标签。前者打断上下文,后者占用窗口且难以对齐布局。社区里已有多种分屏类插件,思路从「无限窗格 + 自动网格」到「iframe 嵌整客户端」不等。dsh-split-session 走另一条路:主窗口最多四个原生嵌入式 Conversation,启动时默认打开分屏,并从侧边栏拖入 Session。下面介绍它做什么、怎么装、怎么用,以及和同类插件的差异边界。

这是什么

dsh-split-session 是 DSH Web GUI 的客户端插件,维护者为 kylernunan。一句话定位:在一个窗口里并排或网格展示最多四个实时 Conversation,每个窗格绑定独立 Session,不是 iframe,也不是静态 transcript 拷贝。

插件分类为客户端;仓库 GitHub 当前 package 版本为 0.3.1,许可证 MIT。社区目录页:https://www.skillhub.cn/plugins/kylernunan/dsh-split-session(独立站点,与 DeepSeek / 幻方无官方从属关系)。

核心功能

资料中明确列出的能力如下。

窗格与布局

  1. 同一窗口内 2~4 个窗格,最多 2×2 四宫格;可关闭窗格回到两窗格。
  2. 布局形态包括:左右并排、上下堆叠、上二下一、四宫格。
  3. 两窗格时,面板标题栏可切换并排 / 堆叠方向;两窗格布局下可用 Swap 交换两侧 Session。

原生 Conversation

每个窗格通过标准 SessionProvider 绑定 Session,渲染 Conversation 包的 conversation.content Factory 的 embedded 变体。按 README 说明,各窗格内 streaming、composer、斜杠命令、审批、排队 turn、todos、插件视图等均应正常工作。

拖放与选择

  1. 从侧边栏拖动 Session 行到任意窗格;各窗格显示半区 / 四分之一区标签,指针下高亮;分隔条附近有较宽 dead band,减少目标闪烁。
  2. 把一个窗格的 Session 拖到另一个窗格上可 交换。
  3. 窗格数少于四个时,拖到面板标题栏会出现 Drop to add a pane,松手可将拖动的 Session 加为新窗格。
  4. 点击窗格标题可在该窗格内切换 Session(按最近活动排序的顶层 Session;其他窗格已占用的 Session 会排除)。

尺寸与持久化

  1. 拖动列 / 行分隔条调整比例;聚焦分隔条可用方向键(±2%);Home 或双击可重置该轴。
  2. 窗格列表、两轴比例、两窗格方向写入浏览器 localStorage(键名 dsh.split-session.v2;旧版 v1 两窗格布局会自动迁移),刷新后布局保留。

启动与交互细节

  1. 默认在页面启动时以分屏为主视图,并展开当前 workspace 分组,便于拖 Session。
  2. 打开或切换窗格时不会把键盘焦点强行拉进该窗格的 composer(focus-safe)。
  3. 随宿主主题与 locale 支持暗色 / 亮色与中英文。

上限

README 的 Limits 节开头明确:四窗格为上限(后文在抓取资料中截断,此处不延伸未给出的条目)。

安装与启用

插件以当前 DSH 进程权限运行;安装前建议自行查看仓库源码与 MIT 许可证。官方 README 给出的安装方式如下(均需 --profile desktop)。

从 GitHub 安装(仓库自带已构建的 client bundle,无需本地 build):

dsh plugin --profile desktop add github:kylernunan/dsh-split-session

从预构建 release 包(示例版本与 README 一致):

dsh plugin --profile desktop add https://github.com/kylernunan/dsh-split-session/releases/download/v0.3.1/dsh-split-session-0.3.1.tgz

从本地 checkout:

dsh plugin --profile desktop add /path/to/dsh-split-session

npm 发布后(README 标注为 once published):

dsh plugin --profile desktop add dsh-split-session

安装后刷新页面或重启应用。之后在 Plugins → Installed plugins → Split session view 中开关。

卸载:

dsh plugin --profile desktop remove dsh-split-session

若希望启动时直接进入单 Conversation 而非分屏,可在浏览器控制台执行:

localStorage.setItem('dsh.split-session.open-on-launch', 'false')

删除该键可恢复默认启动行为。

典型用法

按 README 的可复现操作归纳如下。

  1. 增加窗格:点面板标题栏网格旁的 +,最多四个。
  2. 关闭窗格:窗格标题行的 ✕(仅当窗格数大于两个时可用)。
  3. 切换窗格 Session:点窗格标题,在 picker 中选择。
  4. 拖入 Session:从侧边栏拖 Session 行到目标窗格;或窗格间拖放以交换。
  5. 拖入并新建窗格:窗格未满四时,拖到面板标题栏的 “Drop to add a pane” 区域后松手。
  6. 调整大小:拖分隔条,或用键盘微调 / 重置(见上文)。
  7. 退出分屏视图:标题栏 ✕ 回到 Conversation,不改变当前选中的 Session。

面板顶部还提供 Swap(两窗格)、Stack(两窗格轴向)等控件,与 README 示意图中的标题栏一致。

实现要点(可选阅读)

插件无 Host 行为,能力集中在浏览器端:注册 main 面板(键 split)与 sidebar.panellist;声明 session 作用域子槽 split.pane;通过 Session Controller 保留各窗格 Session 引用;用 CSS grid 与两条比例分隔条排布窗格。它不 import 其他 feature 插件的值,Conversation 经 Factory 注入,Session 经标准 seat 与 sessions 服务;不请求非 baseline 模块,故无需 dsh.client.external 声明。拖放监听侧边栏 [data-row-key^="session:"] 行的 dragstart,在面板表面跟踪指针并分配最近窗格,不修改侧边栏行顺序。

与同类插件的对比

README 提供的对照表强调:本插件刻意做得更小、且原生渲染;四窗格上限、默认启动分屏、侧边栏拖入、零 external peers。功能重叠度最高的是 mhlywxl/dsh-split-workspace(更多窗格与自动网格等)。其余如 dsh-split-screen、dsh-split-view、@syncended/dsh-split-screen、yuloop/dsh-web-split 等在 README 表格中有形态简述,选型时可按是否需要 iframe、hibernation、多 tab 等维度对照仓库说明,此处不展开未核实细节。

适用场景与注意

适合:需要在同一 DSH Web 窗口内并行查看或操作少量 Session(最多四个),且希望每个窗格都是完整原生 Conversation(含 composer 与插件视图)的场景,例如对照两个 agent 任务、一边写 spec 一边跑实现 Session。

注意

  1. 布局与启动偏好存在浏览器 localStorage,换浏览器或清站点数据会丢失。
  2. 四窗格上限是产品设计边界,不是配置项可调。
  3. DSH 生态理念是「一切皆插件」;本插件仅扩展 Web 客户端 UI,不改变 Host 侧权限模型。安装即信任维护者发布的 bundle,生产环境请自行审计 lib/client.js 等产物。

结尾

dsh-split-session 把 DSH Web 主窗口收成最多四格的原生 Session 视图,默认启动、侧边栏拖放、布局持久化,安装命令以 README 为准。进一步细节与 issue 见 GitHub 仓库,目录索引见 SkillHub 插件页。

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

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

小夜