BTW Side Chat:在 DSH 里用 `/btw` 开只读侧栏问答

前言

在 DeepSeek Harness(DSH)里做长任务时,主会话往往已经堆满上下文:改代码、跑工具、对需求。若此时只想顺手问一句「这段报错什么意思」「为什么这个测试会失败」,常见做法是在同一条会话里插一句问题,或新开一个空会话再粘贴背景。前者容易把主任务带偏,后者又要重新交代上下文。

下面介绍的 BTW Side Chat(仓库 Big-Smarty/dsh-btw-sidechat)走另一条路:用全局命令 /btw 从当前会话 fork 出子会话,继承已完成轮次里的完整 transcript(用户消息、助手回复、工具结果),在 只读 策略下回答你的侧问,并在 右侧边栏 以类似 Codex 的独立窗口展示,不打断主任务流。

这是什么

BTW Side Chat 是 DSH 的 客户端类 第三方插件,维护者为 Big-Smarty。一句话定位:在 Harness 里用 /btw 基于当前对话 fork 只读侧聊,答案在右侧边栏窗口中呈现。

插件以 MIT 许可证发布,当前包版本为 0.1.0(见仓库 package.json)。Host 侧提供 /btw 命令与 fork、只读策略;Client 侧注册 dsh-resource://btwchat/... 资源、右侧边栏标签页与命令卡片。无构建步骤、无额外 npm 依赖,为纯 ESM Host 代码加浏览器模块,UI 支持中英文。

核心功能

完整继承上下文

DSH 的 session log 是唯一事实来源。/btw 会 fork 当前会话 最新已完成轮次 的前缀;子会话能看到父会话的用户消息、助手回答和工具结果,不做 重新摘要。若父会话仍在进行中的轮次里发送 /btw,进行中的那一轮不会进入 fork;若尚无任何已完成轮次,会返回明确错误而不是创建空子会话。

只读策略

子会话先固定为原生工具展示,再与允许列表求交,并通过单调递增的 per-agent guard 拒绝其余工具(含后续注册的 run_code 等)。README 列出的允许工具包括:read、read_image、glob、grep、web_search、web_fetch、skill。不能写文件、跑 shell、改配置、创建 goal、拉起子 agent 等;侧聊里的追问与回答 不会 写回父会话上下文。

部分部署在 agent 作用域注册的 tool schema 仍可能出现在列表中,但 guard 会拒绝执行;侧聊 system prompt 也会说明仅可使用所列工具。

右侧边栏与命令卡片

执行 /btw 后,Client 会在右侧打开 dsh-resource://btwchat/... 标签页,内嵌常规 Conversation(继承的 transcript、流式回答、Markdown、以及用于追问的 composer)。主 transcript 里会出现紧凑的 侧聊卡片(含问题与 Open 按钮),便于稍后重新打开标签页。

会话持久化

侧聊是正常的 fork 会话,会出现在工作区会话列表中,重启后仍可恢复;冷启动恢复时会根据标题前缀 BTW · 重新套用只读策略(若你手动改掉标题前缀,后续冷恢复可能不再识别为侧聊)。

环境与前置条件

README 写明需要 DeepSeek Harness 0.2.1-rc.2 或具备相近能力的版本,且需具备:右侧边栏、Session Controller、以及对 /btw 命令 的支持。

Web / Desktop only(侧窗): 侧窗依赖右侧边栏,仅 DSH Web 或 Desktop 配置下的 Client 半会打开窗口。在 TUI Host 上仍会创建子会话,但不会弹出侧窗。

全局命令冲突: 同一时间只能有一个插件提供全局 /btw。启用本插件前,请禁用其他 /btw 提供方(例如 @michengai/dsh-btw);两个同名全局命令会导致加载错误,而非静默覆盖。

安装与启用

安装步骤以仓库 README 为准,通过 DSH 界面安装第三方插件(不要使用未在文档中出现的 CLI 拼接命令)。

  1. 在 DSH 侧边栏打开 Plugins。
  2. 选择 Add plugin → Install third-party plugin。
  3. 填入仓库地址:
https://github.com/Big-Smarty/dsh-btw-sidechat.git

本地 clone 路径也可用于安装,并便于联调修改。安装并启用 bundle 后 刷新页面一次,以便 Client 半加载。

也可让 DSH 中的 agent 从同一 URL 安装该 bundle。

插件在 DSH 进程中以你当前 Harness 的权限运行。安装前建议浏览 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。

典型用法

操作 方式
提侧问 /btw why does the retry test fail?(将引号内换成你的问题)
看回答 侧聊自动在右侧边栏打开
追问 在侧聊 composer 中继续输入;同一只读子会话应答
再次打开 在父会话 transcript 中点击 /btw 卡片上的 Open
关闭窗口 关闭标签页即可;子会话仍保留在会话列表

command/executed 的自动打开是 本浏览器标签页本地 行为。若在另一标签页、刷新后,或由 Host 侧触发 /btw,需用命令卡片的 Open 手动打开侧窗。

工作原理(概要)

README 中的流程可概括为:

  1. Host 命令调用 sessionController.fork({ sessionId }),创建带父事件前缀与 preset 的子会话。
  2. 在首条 prompt 前固定工具展示、计算只读交集、安装 tools.restrict 与 tools.guard,并注入 btw:side-chat system prompt 段。
  3. 子会话标题设为 BTW · <question>,兼作恢复时的标记。
  4. 通过 sessionController.prompt 送入问题,命令结果返回 dsh-resource://btwchat/session/<child>?parent=…&q=…。
  5. Client 注册 btwchat 资源提供方、右侧边栏 tab、键为 btw 的命令卡片,并监听本地 command/executed 以刷新会话目录并打开 tab。
  6. Tab 在子会话的 SessionProvider 内以 embedded 模式渲染标准 conversation.content。

更细的架构说明见仓库内 docs/ARCHITECTURE.md。

适用场景与限制

适合: 主会话正在推进实现或调试,你需要基于 同一份已发生的对话与工具结果 做解释、归因或只读检索(读工作区、glob/grep、可选 web 工具),且不希望侧问污染主上下文或误触发写操作。

需注意:

  • 关闭侧窗 不会 自动归档 fork;会话会像普通 fork 一样留在列表中。
  • web_search 与 web_fetch 会把文本发给搜索/抓取提供方;若继承的 transcript 敏感,可在 index.js 的 READ_ONLY_TOOLS 中移除它们(README Limits 节)。
  • 生态上 DSH 强调「一切皆插件」;社区目录站点与 DeepSeek / 幻方无官方从属关系,本插件为社区维护的第三方 bundle。

链接

经过上面的步骤,你可以在不打断主任务的前提下,用 /btw 把「当前对话里已经发生的事」当作只读上下文,在右侧边栏里单独问清楚。

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

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

Xiaoye