dsh-sidechat:与主会话强绑定的旁侧对话

前言

在 DSH 里跑主线任务时,常会临时冒出小问题:某条报错什么意思、某个参数怎么填、刚才结论的边界在哪。这些问题值得立刻问一句,却未必值得写进主会话转录——一旦塞进主线,上下文会被题外话拉长,后续回合还要为无关内容买单。

常见做法是再开一个独立窗口或外部聊天客户端。那样工具链、工作区和权限预设往往跟当前任务脱节,「刚才那个」也得自己复述。dsh-sidechat 的思路更接近 Codex 的 /side:在同一套 DSH 宿主里开一条真实会话级的旁侧对话,自动带上主会话增量背景,且不向主会话写入任何消息。

这是什么

dsh-sidechat(旁侧对话)是由维护者 rannyrjjy 发布的 DSH 客户端插件(SkillHub 目录 · GitHub)。它在 Web 客户端增加可对话的全局侧边栏:旁侧对话跑在正常的 DSH 会话上,因此侧栏里同样有工具、工作区、权限预设和模型配置,与主对话并列可见、各跑各的。

插件当前包版本为 0.1.0,许可证 MIT;在 DSH 0.2.1-rc.5 上开发并验证。社区目录上的星标约为 7(以目录页展示为准)。

它解决什么问题

旁侧对话面向「途中冒出的题外话和临时疑问」,设计上强调四点(均来自项目说明):

  • 知道你在干什么:每次提问会读取主会话转录快照,只带上次之后的新增内容,不必重复叙述「刚才那个」。
  • 不污染主线:背景只发给旁侧会话;主会话不接收消息,转录不变。
  • 立刻能问:主任务在跑时旁侧仍是独立会话,互不阻塞。
  • 强绑当前会话:切换主会话时,旁侧面板跟着换成该会话对应的一条旁侧对话;切回则恢复原旁侧内容。

核心功能

强绑定:每个主会话一条旁侧会话

侧栏不是单一全局聊天框。绑定关系形如:主会话 A 对应旁侧会话 A’,主会话 B 对应 B’。切换会话时面板立即切换;在某一主会话里点「新对话」只解绑该会话,不影响其他会话的旁侧对话。

绑定表保存在浏览器 localStorage 的 dsh-sidechat:bindings:v2,重启浏览器后仍保留。

上下文带入与截断

发送流程概括如下:

  1. 借主会话读取一次转录快照;
  2. 按绑定表里的 seq 水位线,只拼接上次之后的新增内容,并加上标记拼成背景;
  3. 将「背景 + 你的问题」发到旁侧会话;
  4. 主会话完全不参与本轮写入。

为控制旁侧上下文体积,有三层截断:最多 24 条消息、单条 900 字、总量 8000 字。背景块在旁侧转录里带 <!-- dsh-sidechat:main-context --> 标记,展示时会被剥掉,侧栏里主要看到自己输入的那句话。

三个入口,同一个面板

入口 位置 说明
/side 任意会话输入框 敲 /side 回车,打开右侧「旁侧对话」tab(不产生模型消息);无当前会话时打开主面板
左侧栏「旁侧对话」 全局左侧导航 无会话也可点,主区打开同一面板
右侧栏 tab 会话右侧停靠区 与主对话并排显示

三者共用同一面板、同一旁侧会话。

显示与流式

侧栏渲染 user/message、assistant/message 与流式块,并对工具调用做轻量提示;生成过程中会显示「思考中… · 已思考 N 字」。有意不展示 DSH 注入的运行时上下文、技能清单、system-reminder 等以 user 角色落盘的背景消息,判定方式与官方 dsh-session-title 一致。

实现上为零依赖、零构建的手写 ModuleLoader bundle,浏览器逻辑在 lib/client.js,通过 ctx.slots、ctx.sidebarRightTabs、ctx.commandUi、ctx.uiSession、ctx.sessions 等客户端面注册 UI 与会话行为。

安装与启用

安装前请自行查看仓库源码与 MIT 许可证,并确认你使用的 DSH profile。插件在当前 DSH 进程权限下运行,旁侧会话与主对话共享同一工作区与权限预设。

<profile> 为 DSH profile 名,可在 ~/.dsh/profiles/ 下查看(Windows 为 %USERPROFILE%\.dsh\profiles\)。常见有 desktop(桌面 App)与 web(dsh web 网页版);不确定时对照你平时使用的那一项。

下面介绍两种资料中给出的安装方式。

将插件源码目录放到本机绝对路径后,执行:

dsh plugin --profile <profile> add link:/absolute/path/to/dsh-sidechat

发布包(file)

从 Releases 下载 dsh-sidechat-<version>.tgz,例如:

dsh plugin --profile <profile> add file:/absolute/path/to/dsh-sidechat-0.1.0.tgz

装完后必须重启 DSH。资料说明浏览器侧 bundle 在宿主启动时组装,仅刷新页面不够。

卸载:

dsh plugin --profile <profile> remove dsh-sidechat

装不上、找不到 dsh 命令或需手工步骤时,见仓库内 INSTALL.md。

典型用法

经过上面的步骤重启宿主后,可按下面顺序使用。

  1. 在主区打开一个会话。没有主会话时面板会提示,无法把旁侧对话绑到具体主线。
  2. 用 /side、左侧「旁侧对话」或右侧 tab 打开面板;在底部输入第一句话,会自动为当前主会话新建旁侧对话。
  3. 顶部 停止 可中断当前轮;新对话 仅丢掉当前主会话的绑定,下次说话会新建旁侧会话。头部小字展示绑定关系:主会话尾号 · 旁侧会话尾号。

注意:/side 只识别裸命令。输入 /side 你好 会被当作普通文本发给当前主会话;应先 /side 打开面板,再在聚焦后的输入框继续说话。

想观察各阶段耗时,可在浏览器控制台开启调试(重载后生效):

localStorage.setItem('dsh-sidechat:debug', '1')
window.__sidechatTimings

资料中的实测(DSH 0.2.1-rc.5,DeepSeek-V4.1-Flash)表明插件自身开销多在 100 ms 以内;首字约 300 ms,整段回答约 1~8 s,慢时常与推理等级、首问冷缓存或模型通道排队有关。

适用场景与注意

适合谁:长时间在主会话里跑任务、又不想为临时问题污染转录的 DSH Web 用户;需要与主线共享工具与工作区、但又希望并行问一句的人。

边界(来自 README):

  • 侧栏为轻量视图:工具调用只显示名称一行,不展开参数与结果,不做完整 markdown 富渲染或附件缩略图。
  • 上下文是发送瞬间的快照;主会话之后又跑了几步,要等下一问才会带上新进展。
  • 绑定在 localStorage;换 profile 或删除会话可能导致绑定失效,面板会提示并自动重建。
  • 必须有主会话才能提问,没有「脱离会话的全局聊天」模式。
  • DSH 客户端插件 API 仍在演进,跨大版本升级时需留意兼容性声明(当前标注兼容 0.2.1-rc.5)。

结尾

dsh-sidechat 把「旁侧问一句」收进 DSH 本体:旁侧是真实会话,工具与权限与主线一致,又能用增量背景回答「刚才那个」,且主线转录零写入。若你要在 SkillHub 浏览条目或跟进版本,可访问 https://www.skillhub.cn/plugins/rannyrjjy/dsh-sidechat 与 https://github.com/rannyrjjy/dsh-sidechat。

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

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

Xiaoye