dsh-split-view
把 DeepSeek Harness 主窗口变成终端式分屏,横竖随便拆,每一格都是一整个对话,分屏、关闭、最大化全程不重载。
你有没有过这种经历。一个 agent 正在跑任务,你想同时在旁边再起一个,可官方 web 界面一个窗口只能放一个会话。开新标签页吧,两边各跑各的,切来切去心累;等任务跑完想回头看一眼,又得在一堆标签里翻。你希望它像终端,旁边拆一格,各干各的,抬眼全在。
dsh-split-view 就是干这个的。装上之后主窗口变成一个可拖拽的分屏容器,每一格里跑一个完整的 DSH 客户端。
长什么样
截图待补,先说行为。
- 横竖任意嵌套分屏,可拖动调整大小
- 每个面板一条标题栏,左边实时显示当前会话标题,右边五个按钮,向右分屏、向下分屏、放大还原、刷新、关闭
- 一键复制「会话 id + 会话标题」
安装
npm 包还没发布,先从源码装。
dsh plugin --profile web add -w /path/to/dsh-split-view
dsh web
-w 在第一次 add 时必须带。每个 profile 自带 pnpm-workspace.yaml,pnpm 会把它当成 workspace 根,裸加会报 ERR_PNPM_ADDING_TO_ROOT。
发布之后一条命令就行,dsh plugin --profile web add dsh-split-view(CLI 安装要重启 dsh web 生效)。也可以在插件市场(dshmarket)里搜索 dsh-split-view 一键安装:市场会把插件热挂载进运行中的实例,不用重启,页面刷新一次即可。
卸载用 dsh plugin --profile web remove dsh-split-view,重启恢复单窗口。插件本身如果出问题,boot 会停下来报错,不会静默白屏,所以卸载也就是紧急恢复的办法。
快捷键
| ⇧⌘H | 向右分屏 |
| ⇧⌘V | 向下分屏 |
| ⇧⌘X | 关闭聚焦面板 |
| ⇧⌘Enter | 最大化 / 还原聚焦面板 |
这几个组合是挑出来的,⌘W 关页、⌘D 书签、⌘V 粘贴这些浏览器保留键页面拦不住。关闭键原本用过 ⌘⇧Q,会把浏览器锁死;换 ⌘⇧W,又被飞书的全局热键占了;最后落在 X,就当它是 ✕。都是默认值,可以在设置里改(见下节)。
焦点在 iframe 里时快捷键照样有效,面板内的 agent 捕获后转发给顶层。标题栏按钮做的是同一批动作,tooltip 里的写法按平台来,macOS 显示 ⌘⇧,其余显示 Ctrl+Shift+。点标题栏任意位置就是聚焦那个面板。面板超过 4 秒没就绪会挂一个「⚠ 未就绪 · 重载」角标,点一下单独重载它。
设置
在任意面板里打开设置,左侧导航有一项「分屏」。四组设置:
- 快捷键:点某个动作的组合键进入录制,按新组合完成改绑,Esc 取消。录制时会拦掉不安全的组合——不带 ⌘/Ctrl 的、单个字母不带 Shift/Alt 的(浏览器保留区)、⌘⇧W/Q/T/N 这类有前科或被系统占用的、以及和别的动作撞车的,都会给出提示并拒绝。
- 选中高亮色:聚焦面板的描边和标题栏染色。预设色板、自定义取色器,外加「跟随主题」——跟随当前皮肤的品牌色 token,换皮肤自动跟着变。
- 标题栏:一个开关,隐藏所有面板的标题栏。注意标题栏上有复制会话信息、分屏、最大化、刷新、关闭按钮,双击放大、点标题重命名也走标题栏,隐藏后这些动作只能靠快捷键;点面板聚焦不受影响。
- 恢复默认:一键把上面全部还原,点之前会弹确认。
设置的存储边界和布局一致:真源在顶层窗口的 localStorage(键 dsh-split:prefs),因为画标题栏、描边、分屏容器的都是顶层。面板里的设置面板改完通过 postMessage 交给顶层校验、落盘,再广播回所有面板——跨 origin 的面板也走这条路,启动时还会拉一次全量。所以不管在哪个面板里改、改完立刻全局生效,刷新也不丢。
供其它插件调用
分屏能力整体暴露成了一个 Cordis 服务:面板操作、面板×会话操作(加载指定会话、发消息、改名、换模型、取消回合)、查询与订阅。面向集成方的完整契约——服务 API、URL 契约(给做原生壳的人)与已知限制——见 api.md。
协议
MIT © dsh-split-view contributors