dsh-sidebar-branch-chat:dsh-better-sidebar 的分支对话标签页

在 DSH 插件生态中,开发者有时需要在当前会话上下文下尝试不同的提示、模型或工具组合,但又不希望污染主对话的历史记录。现有的做法往往需要手动创建新会话或编辑器,且会话会保留在列表中。dsh-sidebar-branch-chat 解决了这个问题,它为 dsh-better-sidebar 新增了一个独立的「分支对话」标签页。这个标签页允许创建即归档的会话,并自动注入上下文摘要,使用与主 agent 相同的工具集。

它是什么

这是一个运行在 dsh-better-sidebar 之上的 companion 标签页插件。它不 fork 或安装 Better Sidebar 的副本,而是通过 API 注入新的标签页。

  • 维护者:kuanfu0430
  • 许可:MIT
  • 依赖:dsh-better-sidebar >= 0.11.0(提供 ctx.betterSidebar.registerTab 能力)

安装与启用

安装命令如下:

dsh plugin --profile web add github:kuanfu0430/dsh-sidebar-branch-chat

安装完成后,需要重启 dsh web,然后从 Better Sidebar 的标签页条中打开「Branch Chat」标签页。

核心功能

该插件实现了以下核心能力:

  1. 独立标签页与空白编辑器:提供一个空白输入框。第一次发送消息时,会创建一个新的分支会话;随后的发送会延续该分支。
  2. 上下文继承(三明治结构):分支会话是一个全新的空会话,不复制主聊天的历史事件。上下文继承采用「头/中/尾」三明治结构:
    • 头:第一条原始用户文本。
    • 中:中间穿插的用户问题。
    • 尾:最后完成的回合,包含工具调用和结果。
    • 注意:未完成的回合会被省略。
  3. 工具与权限:分支 agent 使用主 agent 当前正在运行的预设生成工具,拥有与主 agent 相同的工具列表。权限预设(包括完全访问沙箱)会从主聊天复制过来。
  4. 即时归档与隔离:分支创建后立即归档(archiveSession),在主会话列表和搜索中不可见,仅存在于侧边栏标签页中。
  5. UI 与交互:标签页包含工具栏,用于切换现有分支(●/○)和选择模型/推理努力。辅助气泡使用官方 MarkdownText 种子,摘要和框架提示仅对模型可见,在 UI 投影中被剥离。

典型用法

  1. 创建分支:打开 Branch Chat 标签页,输入消息并发送。这会创建一个新的分支,标签名称取自消息的前 20 个字符。
  2. 切换与模型选择:在工具栏中点击现有分支圆点进行切换,或选择该分支专用的模型和推理努力。
  3. 停止与继续:停止按钮位于底部(空状态或忙碌状态时可用)。在输入框为空时按 Enter 会刷新待处理的队列消息,而不停止当前回合。

适用场景与注意事项

  • 会话生命周期:分支的生命周期绑定在主会话上。只有主聊天页面打开时才能创建或继续分支。关闭主页面会暂停分支,但转录内容仍保存在持久化存储中。
  • 事件轮询:分支的转录通过 JSON 轮询获取(空闲 1.5s,忙碌 300ms)。冷分支在 live: false 后停止轮询,直到下一次发送或手动切换。
  • 工作区隔离:聊天隔离不是工作区隔离。分支会话复用主会话的 cwd(当前工作目录),文件、Shell 和 Git 的副作用共享主工作树。框架提示是模型可见的软约束,而非权限边界。
  • 权限处理:如果主聊天预设是「询问」,沙箱提升会在标签页内回答(allowed-once / 拒绝)。allowed-once 的授权不会继承,ask_user_question 不会在标签页内回答。

总结

dsh-sidebar-branch-chat 提供了一种轻量级的方式,在不影响主聊天记录的情况下进行上下文隔离的测试和探索。它通过 API 挂载标签页,利用三明治上下文继承和即时归档机制,实现了类似「分支」的会话管理。

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

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

小夜