前言¶
在 DeepSeek Harness(DSH)里同时跟进多个 agent 会话时,常见做法是来回切换左侧会话列表:主栏只能显示一个当前会话,另一侧的输出只能等切过去再看。若你已经在用 Harness 的 Web UI(桌面端或 dsh web),又希望主栏继续当前对话、同时在右侧实时查看另一个会话的流式输出,社区插件 Session panes / 多会话分屏(@bob-cheung/dsh-session-panes)就是针对这一场景的客户端扩展。下面介绍它做什么、如何安装,以及使用时需要注意的点。
这是什么¶
维护者 Bob-Cheung 在 GitHub 开源的 dsh-plugin-session-panes 是一个 DeepSeek Harness Web UI 插件:在右侧边栏以独立窗格(标签页)并排打开多个会话。点击会话行上的按钮,或把会话拖到窗口右侧,该会话会出现在右侧;主栏当前会话不受影响。
- 包名:
@bob-cheung/dsh-session-panes(清单版本1.0.0) - 许可证:MIT
- 分类:客户端(仅 Web 客户端有行为;Host 侧
index.js为空实现) - 社区目录页:https://www.skillhub.cn/plugins/Bob-Cheung/dsh-plugin-session-panes
仓库根目录即插件包本身(package.json 在根上),不是 monorepo。安装时 target 指向含 package.json 的仓库根目录。
核心功能¶
资料中已说明的能力如下,安装后无面向用户的配置项,按默认行为工作。
- 两种打开方式:悬停会话行,点「在右侧打开」;或按住该按钮拖到视口右侧(从宽度 55% 起为投放区,即右侧约 45%)后松手。
- 多窗格并存:每个会话对应右侧一个独立标签(
preferNewPane),可同时查看多个会话的实时输出;关闭标签即释放对该会话的 retain。 - 与原生拖拽共存:会话行用于排序的原生拖拽仍可用;插件只拦截「起始于行上按钮」的按压,且只处理从左栏发往右侧的拖拽。
- 拖拽反馈:拖动时有跟随指针的标题浮层,右侧投放区高亮并提示「拖到此处」。
- 中英文与主题:界面与插件元数据提供简体中文与英文,跟随 Harness 语言;样式使用
--dsw-alias-*变量,适配明暗主题。 - 无构建步骤:纯 ESM + 运行时
React.createElement,无依赖、无安装脚本。
若右侧边栏尚未挂载,插件会先在主栏打开该会话以激活侧栏,再自动在右侧打开对应窗格。
环境要求¶
- 已安装 DeepSeek Harness,并使用 Web UI。
- Harness 需提供右侧边栏相关服务与插槽(
sidebarRight、sidebar.right.pane.tab、sidebar.workspaces.session.row.action、shell.overlay等)。README 写明已在 0.1.5-rc.1(desktop profile)上验证安装与使用。 - 安装插件本身不需要 Node.js 或构建工具;本地用
git clone或 ZIP 获取源码时,本机需能访问仓库或解压文件。
安装与启用¶
插件以 链接 方式安装到 checkout,不是拷贝进 Harness 目录。安装前应自行查看仓库源码与 MIT 许可证;插件在 当前 dsh 进程权限 下运行,与任何社区插件一样,只安装你信任的包。
一句话安装(推荐)¶
在 DSH 任意会话里对 agent 说:
下载并安装成插件,下载地址为:git clone https://github.com/Bob-Cheung/dsh-plugin-session-panes.git
agent 会克隆仓库并把克隆目录安装为插件。返回 application: applied 后 刷新一次页面(需要本机有 Git)。
手动安装¶
- 克隆仓库(无 Git 可在仓库页 Code → Download ZIP 解压):
git clone https://github.com/Bob-Cheung/dsh-plugin-session-panes.git
- 让 agent 安装该目录,或直接调用插件管理器(
target为含package.json的绝对路径):
plugin_manager(action: "install_bundle", target: "D:\\tools\\dsh-plugin-session-panes")
首次安装可能弹出权限确认。ZIP 解压后若多一层同名目录,target 须指向真正含 package.json 的那一层。
安装成功后,在「插件管理 / Plugins」中应能看到 Session panes / 多会话分屏,带图标与中英文描述。若移动过插件目录或重装过,有时需 重启 Harness,而不只是刷新页面。
更新与卸载¶
更新(链接安装时):
git pull
然后 重启 Harness(替换已加载的 JavaScript 模块通常需要重启,仅刷新页面不一定够)。
卸载:
plugin_manager(action: "remove_bundle", target: "@bob-cheung/dsh-session-panes")
卸载后刷新页面。
典型用法¶
- 在左侧会话列表找到目标会话。
- 悬停该行,点击「在右侧打开」;或按住该按钮拖到窗口右侧高亮区域后松手。
- 会话以新标签出现在右侧边栏,可继续输入并查看流式输出。
- 关闭标签即关闭该窗格。
工作原理(便于排查问题)¶
插件通过 Cordis patch 注入客户端逻辑,主要组成如下。
| 组成 | 说明 |
|---|---|
| 资源协议 | 注册 sessionchat,地址形如 dsh-resource://sessionchat/session/<sessionId>?title=<标题>;打开时 ctx.sessions.retain(),标签关闭时 release()。 |
| 侧栏标签 | sidebarRightTabs.register() 注册 sessionchat 类型,priority: 'extension'。 |
| 标签内容 | 在 sidebar.right.pane.tab 注册 SessionChatTab,复用主界面聊天视图(view: 'chat')。 |
| 行按钮 | 在 sidebar.workspaces.session.row.action 注册 SessionRowAction,负责点击与拖拽。 |
| 拖拽浮层 | 在 shell.overlay 注册 DropOverlay。 |
需要微调行为时,可改 client.js 顶部常量(非用户配置项):例如 DROP_RATIO 默认 0.55、拖拽阈值默认 6 px;改动 KIND / RESOURCE_PROTOCOL 时需同步多处引用。
适用场景与注意¶
适合谁:经常在 Harness Web UI 里并行盯多个会话(例如一个会话跑长任务、另一个会话改配置或查文档),又不想放弃主栏当前上下文的使用者。
兼容性:仅作用于 Web 客户端;依赖 Harness 提供的右侧边栏与上述插槽。会话 ID 按 session-<uuid> 识别;若行上未暴露 data-session-id 等属性,可能退化为从拖拽数据解析 UUID。
常见问题(来自 README):
- 没有出现「在右侧打开」:确认插件已启用并刷新;仍不行则重启 Harness。
- 拖到右侧无反应:须从会话行按钮开始拖,松手落在右侧约 45% 高亮区内。
- 右侧空白窗格:多为资源创建失败,查看控制台错误,并确认 Harness 版本提供
sidebarRight。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录由社区维护,与 DeepSeek / 幻方无官方从属关系。本文事实均来自插件仓库 README 与 package.json。
结尾¶
多会话分屏把「右侧边栏 + 会话 retain」接到 Harness 会话列表上,用点击或拖到右侧约 45% 区域即可并排查看多个会话,主栏会话保持不变。需要安装包或源码时,可看社区目录页 https://www.skillhub.cn/plugins/Bob-Cheung/dsh-plugin-session-panes 与 GitHub 仓库 https://github.com/Bob-Cheung/dsh-plugin-session-panes。