前言¶
用 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 客户端。下面是一次完整的并排使用流程:
- 打开主会话,点击 header 中的消息气泡+图标,侧聊立即出现,无需先发送第一条消息;隐藏与关闭按钮位于原生 header 右上角。
- 在侧聊中像普通 DSH 会话一样选择模型、输入消息、使用附件、工具和审批流程。
- 拖动中间分隔线调整两栏比例;聚焦分隔线后可用方向键微调,按住 Shift 可加速调整,侧聊占比限制在 25%–70%。
- 在主消息中选中文字,点击「引用到侧聊」,输入框上方会显示可预览、可删除的引用提示;输入框草稿本身保持为空,引用只在发送时加入侧聊请求。
- 点击侧聊 header 的面板图标可隐藏面板;之后从主 header 的消息气泡图标恢复同一个侧聊。
- 点击关闭按钮后,可选择「保留对话」或「删除并关闭」。
选择「保留对话」的侧聊,下次打开时会恢复最近保留的那一条,而不是重新创建空会话。
适用场景与注意事项¶
适合的场景:主会话在跑长任务时需要并行提问、让另一个会话查资料或改文件,又不想打断当前节奏;或者想在不出现在会话列表里的情况下做一次隔离的小实验。
使用前需要了解的边界:
- 主会话与侧聊共享同一个 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 / 幻方无官方从属关系,收录信息来自插件线索)