← 返回列表
未验证
@kuanfu0430/dsh-sidebar-branch-chat
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/26 · 已提供中文文档
为 dsh-better-sidebar 添加一个 Branch Chat 标签页:具有独立归档会话,包含上下文摘要,并拥有与主代理相同的工具。
综合分
27.9
GitHub 分
27.9
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add kuanfu0430/dsh-sidebar-branch-chat该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:仅索引本站尚未对其实装验证,仅收录元数据
- 是什么
- dsh 原生插件 · browser
- 装得上吗
- 本站尚未做安装检查
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 30 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
数据截至 2026/9/23(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成@kuanfu0430/dsh-sidebar-branch-chat
在 dsh-better-sidebar 中新增一个 分支对话 标签页:从当前主对话打开一个独立的归档会话,注入头部/中部/尾部上下文摘要,并使用与主 agent 相同的工具运行。分支历史保留在分支会话中,不会出现在主对话列表中。
在 dsh-better-sidebar 新增「分支对话」标签页:从当前主对话开出独立的归档 session,注入头/中/尾上下文摘要,并使用与主 agent 相同的完整工具。分支内容只写入分支 session,不会进入主对话列表。
运行时依赖 / 执行期依赖
本插件是一个配套标签页。它不会内嵌或 fork Better Sidebar。
本插件是 companion 标签页,不 fork、不安装第二份、不修改 Better Sidebar。
| 依赖项 | 作用 | awesome-dsh-plugin |
| --- | --- | --- |
| omdsh-dev/DSH-better-sidebar(dsh-better-sidebar ≥ 0.11.0) | 提供 ctx.betterSidebar.registerTab | 列为 omdsh-dev/DSH-better-sidebar |
请先安装 Better Sidebar。如果缺少该 service 或 registerTab,本插件仍会保持加载,但会隐藏分支对话标签页并记录缺失的能力。
请先安装 Better Sidebar。缺少 service/registerTab 时,本插件仍会加载,但只停用分支标签页并写出缺少的能力。
本仓库的计划上架条目位于 docs/awesome-dsh-plugin.yml。在它被合并到 awesome-dsh-plugin 之后,dsh-market 可以从精选注册表中收录它。
本仓预定上架条目见 docs/awesome-dsh-plugin.yml。合并进 awesome-dsh-plugin 后,dsh-market 会从精选目录收录。
安装 / 安装
1. Better Sidebar (already on the curated list / 已在精选目录)
dsh plugin --profile web add dsh-better-sidebar
2. This plugin from GitHub / 从 GitHub 安装本插件
dsh plugin --profile web add github:kuanfu0430/dsh-sidebar-branch-chat
重启 dsh web,然后从 Better Sidebar 标签栏打开 分支对话 标签页。
重启 dsh web,在 Better Sidebar 标签栏开启「分支对话」。
根目录的 package.json 声明了 dsh.bundle.patch 以及 cordis.patch.yml,因此 dsh plugin add 可以安装它。没有构建步骤。
根目录 package.json 已声明 dsh.bundle.patch 与 cordis.patch.yml,可直接用 dsh plugin add 安装,无需编译。
挂载方式 / 挂载方式
- 可选 peer:dsh-better-sidebar >= 0.11.0。该 profile 必须提供唯一的 Better Sidebar 实例。
- 所有跨插件调用都通过 compat.js 进行。仅使用公开的 ctx.betterSidebar.registerTab API。新行为以能力成员资格为门控,而不是基于猜测的次版本号。
- 宿主半部分使用空会话 + agents.create / resume。分支不是子代理:主聊天不会收到子代理生命周期事件,分支也无法挂回主会话。
Features / 功能
- 一个空白输入框:首次发送会创建分支(标签 = 消息的前 20 个字符);之后的发送会继续该分支。
- 分支是一个新的空会话。它不会复制主聊天事件。上下文是一个头部 / 中部 / 尾部三明治结构(首条用户文本、中部启发式标题、最后一个包含工具的已完成回合),并标记为仅供参考。
- 分支代理加入主代理当前正在运行的预设生成(composeFrom):相同的工具清单和模型家族。没有清单的部署保持为空;插件不会假装工具存在。
- 分支会立即归档(archiveSession)。归档失败会报告失败并释放句柄。分支在主会话列表和搜索中不可见;它只存在于侧边栏标签页中。
- 该标签页显示用户消息和助手回复。摘要文本、分支框架提示以及工具参数 / 结果会被隐藏。忙碌时它会显示一个加载指示器以及状态(思考中 / {Tool} / 回答中)。回答通过 text-delta 增长(忙碌时每 300 ms 轮询一次)。
- 助手气泡使用官方平台的 MarkdownText 种子(与主聊天相同的 GFM / 清理器)。用户消息保持为纯 pre-wrap 文本。
- 工具栏:切换现有分支(●/○),并选择此分支的模型 / 推理强度。停止是页脚按钮(空 + 忙碌 = 停止)。带文本按 Enter 会引导当前回合;空按 Enter 会刷新排队的后续消息而不停止。
- 进行中的额外消息会显示为输入框上方的队列。分支会复制主聊天的权限预设,包括完全访问沙箱。如果策略是询问,沙箱提权会在标签页内得到答复(allowed-once / 拒绝)。allowed-once 授权不会被继承。ask_user_question 不会在标签页内得到答复。
Limits / 限制
- 分支遵循主会话生命周期:仅当主聊天页面打开时才能创建 / 继续。关闭主页面会暂停分支;记录仍保留在持久存储中。
- 记录采用 JSON 轮询(空闲 1.5 s,忙碌 300 ms)。冷分支在 live: false 后停止事件轮询,直到下一次发送或手动切换。此版本不使用 SSE。
- 聊天隔离不是工作区隔离。 分支复用主会话 cwd 和完整的写入工具集。文件 / shell / git 副作用共享主工作树。框架提示是模型可见的软约束,不是权限边界。
Known behaviour / 已知行为
- 上下文继承是三明治结构,而不是事件副本。它会在最后一个完整的 turn/end 处截断。头部是第一条原始用户文本;中部列出中间的用户问题;尾部保留该回合的工具调用 / 结果。进行中的回合会被省略。上限位于 digest.js 中(每个工具结果 16 KB,总计 64 KB)。
- 来自其他插件的自定义早期压缩策略不适用于分支。分支使用官方的 80% 安全网。
- 摘要和框架提示对模型可见,并从 UI 投影中剥离。
- 归档后,标签页仍可列出/继续该分支(实时存储 + sessionQuery)。archive / create 成功表示归档写入已完成。
- 当主会话离开存储时,其分支代理会停止(session/disposed)。如果主聊天在创建/恢复过程中关闭,新的句柄会被释放。分支会话本身仍然存在;重新打开主聊天可以继续它。
- 预设仍遵循主代理的实时生成(composedPreset + composeFrom)。模型选择是按分支进行的:侧边栏可以选择任何可路由的模型,不遵循主聊天,并且从不调用 saveSelection / session.selectModel。
- archive 会停止当前轮次,然后从主列表中隐藏该分支。
- 旧主聊天中的历史 subagent-settled 通知来自 v1 子代理设计。当前设计不会发出任何此类通知。
API
/sidebar-branch/api/* 下的宿主路由仅在回环 / 信任围栏上可用(与 Better Sidebar 相同的规则)。
- create { sessionId, message, provider?, model?, reasoningEffort? } → { childId }
- message { sessionId, childId, text, provider?, model?, reasoningEffort? } → { ok: true }
- flush { sessionId, childId } → { ok: true, flushed }
- stop { sessionId, childId } → { ok: true, outcome }
- archive { sessionId, childId } → { ok: true }
- list { sessionId } → { branches: [{ id, label, activity }] }
- events { sessionId, childId, afterSeq } → { live, seedLength, events, nextSeq, total, busy, status, draft, queue, approvals }
- decide { sessionId, childId, approvalId, outcome } → { ok, outcome }(allowed-once / rejected)
- models { sessionId, childId? } → { current, routable, groups, failures }
- selectModel { sessionId, childId?, provider, model, reasoningEffort? } → { selected }
开发 / 開發
node --check index.js client.js compat.js composer.js digest.js interaction.js project.js
node ./test.mjs
许可证
MIT