dsh-side-chat:在 DeepSeek Harness 主对话旁打开原生并行会话

前言

用 DeepSeek Harness(下文简称 DSH)跑长任务时,常见的情况是:主对话正在改代码、跑命令,你临时想问一个不相关的问题,或者让另一个会话去查一个文件。直接开新会话,上下文要重新铺一遍;把问题塞进主对话,又会打断当前任务的节奏。

dsh-side-chat 针对的就是这个场景:在主对话旁边并排打开一个侧聊,两边都是完整的 DSH 会话,互不打断。按 DSH「一切皆插件」的思路,它以 Web 插件的形式加载,不改动 DSH 本体。

这是什么

dsh-side-chat 是由 KarlOfLaw 维护的 DSH 插件,MIT 许可,当前版本 1.2.0,badge 显示测试 24 passing。

一句话定位:在 DSH 主对话旁边,打开一个真正独立、原生、理解上下文的并行对话。

它不是浮在主对话上方的临时面板,也不是手写的聊天界面。第一次打开时,插件通过 DSH 的 agents.create/resume 创建一个带 parentSession 的真实 Session,并立即归档,所以不会出现在 workspace 左侧会话列表里。侧聊有自己的 transcript,与主会话相互独立,但共享同一个 workspace。

核心能力

下面按使用时的关注点列出主要能力,均来自插件的 README 与包信息。

  • 真实独立会话:通过 DSH agents.create/resume 创建或恢复带 parentSession 的 Session,不占用 subagent routing。
  • 完整原生 UI:左右两栏都渲染完整的 ConversationRoot,消息、工具、审批、附件、输入框、模型和权限控件仍由 DSH 提供;空白侧聊在发送第一条消息之前就显示原生 header 和输入框。
  • 按需理解主对话:插件不复制主 transcript。侧聊需要背景时,通过 side_chat_context 按需检索有界、相关的父会话片段。
  • 真正并排:只增加一个最小 split shell,分隔条可拖拽,聚焦后可用方向键微调,按住 Shift 加速;侧聊占比限制在 25%–70%。
  • 不污染会话列表:新侧聊立即归档,不出现在 workspace 左侧列表中。
  • 选文即问:在主消息中选中文字后可「引用到侧聊」,引用可预览、可删除,不会在原生输入框中残留 @ 或隐藏文本;引用只在发送时加入该次侧聊请求。
  • 可隐藏、可恢复、可删除:隐藏只收起面板,保留后可恢复;关闭时可选择安全删除。
  • 原生模式与模型:新侧聊默认标准模式,可选 PTC、极简或创造模式。
  • 会话隔离:每个主会话维护自己的侧聊状态,切换主会话不会串用另一条侧聊。
  • 兼容 Better Sidebar:两种右侧并行面板自动互斥,并对齐 header 控件。

host 侧只增加侧聊需要的生命周期与上下文能力,结构如下:

主 Session
  └─ archived side Session (parentSession=主 Session)
       ├─ 原生 DSH Agent / preset / tools / approvals
       ├─ 独立 transcript,共享 workspace
       └─ side_chat_context → 按需读取父会话的相关上下文

client 侧保留 DSH 已注册的原生 conversation component,插件没有自己的消息 renderer 和输入实现;split shell 只负责布局、分隔条和生命周期入口。

安装与启用

要求 Node.js 22 或更高版本,以及能够加载 Web 插件的 DSH。

先下载插件包(优先从 GitHub Releases 获取,也可用仓库内 release/ 目录),然后执行安装命令:

# 从 GitHub Release 下载后:
dsh plugin --profile web add .\dsh-side-chat-1.2.0.tgz

# 或使用仓库内副本:
dsh plugin --profile web add .\release\dsh-side-chat-1.2.0.tgz

安装完成后,从希望 Agent 操作的工程目录启动 DSH,打开输出的网址,插件会自动加载到 Web 客户端:

cd D:\path\to\your-project
dsh web --port 3080

插件可以在 DSH 设置的「侧边聊天」页面启用或停用,同一页面也能选择新侧聊默认使用的原生 Agent 模式。

后续更新与卸载使用以下命令,更新后需要重启 DSH Web:

# 更新
dsh plugin --profile web update dsh-side-chat

# 卸载
dsh plugin --profile web remove dsh-side-chat

典型用法

经过上面的安装步骤,插件已经加载到 Web 客户端。下面是一次完整的并排使用流程:

  1. 打开主会话,点击 header 中的消息气泡+图标,侧聊立即出现,无需先发送第一条消息;隐藏与关闭按钮位于原生 header 右上角。
  2. 在侧聊中像普通 DSH 会话一样选择模型、输入消息、使用附件、工具和审批流程。
  3. 拖动中间分隔线调整两栏比例;聚焦分隔线后可用方向键微调,按住 Shift 可加速调整,侧聊占比限制在 25%–70%。
  4. 在主消息中选中文字,点击「引用到侧聊」,输入框上方会显示可预览、可删除的引用提示;输入框草稿本身保持为空,引用只在发送时加入侧聊请求。
  5. 点击侧聊 header 的面板图标可隐藏面板;之后从主 header 的消息气泡图标恢复同一个侧聊。
  6. 点击关闭按钮后,可选择「保留对话」或「删除并关闭」。

选择「保留对话」的侧聊,下次打开时会恢复最近保留的那一条,而不是重新创建空会话。

适用场景与注意事项

适合的场景:主会话在跑长任务时需要并行提问、让另一个会话查资料或改文件,又不想打断当前节奏;或者想在不出现在会话列表里的情况下做一次隔离的小实验。

使用前需要了解的边界:

  • 主会话与侧聊共享同一个 workspace。侧聊中的文件修改、命令执行、审批等副作用是真实的;隐藏、保留或关闭面板不会撤销这些操作。
  • 侧聊按需读取的是有界的父会话上下文,不保证包含主会话全部历史细节。
  • 单次选文引用最多保留 8,000 个字符,超出的部分会被截断。
  • 当前选文入口主要针对鼠标选择;移动端长按选文和触摸操作条尚未做专门优化。
  • 完整会话渲染依赖 DSH SessionProvider 的 BindingContext seam;若上游移除该 seam,插件会显式报错,不会退回自定义聊天界面。
  • 安全彻底删除依赖 JSONL 会话存储和正式本地插件包提供的删除能力;不支持时会保留数据并返回明确错误。
  • 和其他 DSH 插件一样,插件以当前 dsh 进程的权限运行。安装前建议阅读仓库源码和 LICENSE(MIT),确认符合自己的安全要求再装进环境。

小结

dsh-side-chat 做的事情不复杂:把「并行对话」从一个浮层或手写界面,落到一个归档的、带 parentSession 的真实 DSH Session 上,UI 和能力全部复用 DSH 原生组件,主对话与侧聊通过有界上下文按需互通。如果你经常需要在主任务旁边并行提问,值得一试。

  • GitHub:https://github.com/KarlOfLaw/dsh-side-chat
  • 社区插件目录:https://www.skillhub.cn/plugins/KarlOfLaw/dsh-side-chat (目录为社区独立站点,与 DeepSeek / 幻方无官方从属关系,收录信息来自插件线索)
羽毛球分组比赛记分
小程序二维码

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

小夜