dsh-plugin-branch-origin:给分叉会话标出来源对话

前言

在 DSH(DeepSeek Harness)里 fork 会话时,平台会记录真实的父子关系,也会在侧栏用缩进体现层级,但侧栏并不会直接写出「这条分叉是从哪段对话拆出来的」。官方 fork 后子会话标题往往是 <源标题> (1) 这类带计数的形式,单靠数字很难一眼看出这是某次分叉,而不是新建的普通对话。

如果你经常在同一源对话上开多个实验分支,或从消息菜单、其他插件、ctx.sessions.fork 等入口分叉,就需要在标题和侧栏里同时看到来源信息。dsh-plugin-branch-origin 由社区维护者 WindFromKadath 发布,在 DSH 社区插件目录中归类为「趣味换装」,当前 GitHub 星标为 0;它用两条互补通道给每个新 fork 打上来源标签,零依赖、无构建链,版本 v0.1.2,MIT 许可证。

这是什么

dsh-plugin-branch-origin 是 DSH 的 Cordis 插件:在 fork 发生时改写子会话标题,并在侧栏行首增加一个只读的来源徽标。它不改变 DSH 已有的 SessionHeader.parentSession 链路,而是把「来自哪段对话」变成可见文案。

维护者:WindFromKadath。
目录页:https://www.skillhub.cn/plugins/WindFromKadath/dsh-plugin-branch-origin
源码:https://github.com/WindFromKadath/dsh-plugin-branch-origin

核心功能

插件只有一条核心规则,其余行为都由此推导。实现分「宿主侧」与「客户端侧」两半,默认同时开启。

标题前缀(宿主侧)

新 fork 完成后,若子会话标题仍属于「继承自源标题」状态(去掉官方尾缀 (1) 后与源标题一致),标题会被设为:

⤷ 来源:<源会话标题>

⤷ 来源: 是固定产品字符串(字面含义为 source),不做多语言翻译,便于跨语言环境识别。

若 DSH 随后把标题改成 <源标题> (1),插件会收敛为 ⤷ 来源:<源标题> (1),保留计数以便同一源的多个 fork 可区分。若用户或其它 lineage 类插件已改过标题(例如 ⑂1 …、my experiment),或标题已以 ⤷ 来源: 开头,则不再写入。无父会话的新建会话、源会话当时无标题等情况也会保持原样。子 agent 会话(header.origin === 'subagent')默认不处理,可通过 labelSubagents 开启。

注意:标题里的来源是 fork 时刻的快照;你重命名子会话后,标题中的 ⤷ 来源:… 会随标题一起消失。这是把标签写进标题字符串的固有代价。

侧栏徽标(客户端侧)

侧栏不替换官方行组件,只在有非空 parent 且非 subagent 的行首显示 ⤷;悬停该行会出现「来源」区块,展示源对话标题。

情况 表现
重命名 fork 后的子会话 标题里的来源可能没了,徽标仍在
重命名源对话 徽标显示列表中的当前标题;标题前缀仍是 fork 时的快照
源对话不在当前列表快照中 显示 (未命名对话),不崩溃

普通会话、subagent 及其 fork 默认无徽标。

安装与启用

该插件按 desktop profile 安装(README 记载 2026-10-07 与 dsh-plugin-branch 同形态,并在 trial 环境验证过)。安装会在 profile 的 package.json 里加入 link: 依赖、把包名写入 dsh.profile.bundles,并在 node_modules 下链到本仓库。仓库提供一条脚本负责安装、检查与卸载:

node .verify/install-desktop.mjs --status      # 仅检查,不写文件
node .verify/install-desktop.mjs              # 安装(幂等,可重复执行修复)
node .verify/install-desktop.mjs --uninstall  # 卸载

安装后必须完全退出并重新打开 DSH Desktop:HMR 不会热加载插件行,客户端半部分的加载决策也会缓存到重启为止。README 还提到:若应用曾从自身状态重写 profile manifest 并清掉本地 link: 依赖与 bundle 项,重新执行上述安装命令即可(幂等)。

重启前若需只读检查组合是否正确,可在仓库根目录执行:

node --import ./test/register.mjs .verify/diagnose-desktop-compose.mjs
node .verify/check-client-manifest.mjs

本插件零 import,不受「junction 安装无法解析宿主包」那类依赖型插件限制。

典型用法

完成安装并重启 DSH Desktop 后,可按下面步骤自测 README 描述的行为:

  1. 在侧栏对任意对话选择「fork session」→ 新会话标题应变为 ⤷ 来源:<源会话标题>,行首出现 ⤷ 徽标。
  2. 重命名该 fork 会话 → 标题中的来源前缀会消失,但行首 ⤷ 仍在,悬停仍能看到源对话名称。

fork 入口不限于侧栏:消息菜单、其它插件触发的 fork、ctx.sessions.fork 等,只要产生带父链接的新 fork,且标题仍处「继承」状态,都会走同一套标注逻辑。插件不会对启用前已存在的 fork 做回溯扫描。

fork 后约 4.6 秒内(settleMs 600 + graceMs 4000)标题仍可能继续向带计数的形式收敛;在此窗口内若你手动改名,插件不会覆盖(标题已非继承态)。

适用场景与注意

适合谁:经常从同一对话 fork 多条分支、需要在侧栏快速辨认「从哪拆出来」的 DSH 用户;与官方缩进、计数标题并存,不替代 parentSession,只补可见性。

运行与信任:DSH 插件在当前 dsh 进程权限下加载并执行宿主侧逻辑;客户端脚本注入 Web 侧栏 UI。安装前请自行阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

已知限制(摘自 README):

  • 标题来源不随子会话重命名保留;侧栏徽标保留。
  • 标题内来源为 fork 时快照;源对话改名后徽标跟新、标题前缀不跟新。
  • 仅标注插件加载后的新 fork。
  • 需要 Node.js >= 22.5(见 package.json 的 engines)。

开发者可在克隆后的仓库内跑 npm test、npm run client-smoke、npm run rm-test 等命令做离线或真机 harness 验证;细节见仓库 README 的 Checks 表。

结尾

dsh-plugin-branch-origin 用标题前缀和侧栏徽标两条通道,回答「这条 fork 从哪来」——一条直观写在标题里,一条在改名后仍能通过悬停看到 live 源名。若你在 desktop profile 使用 DSH 并频繁分叉会话,可按仓库内的 install-desktop.mjs 安装、重启客户端后试用。

  • 插件目录:https://www.skillhub.cn/plugins/WindFromKadath/dsh-plugin-branch-origin
  • GitHub:https://github.com/WindFromKadath/dsh-plugin-branch-origin
羽毛球分组比赛记分
小程序二维码

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

小夜