dsh-handoff-hub:多 Session 交接文档同步

前言

在 DeepSeek Harness(DSH)里,同一工作区往往会同时开着多个独立 Session,各自写各自的 handoff 文档。常见结果是:每人只维护自己的那份,很少有人去读别人最新的一版,协作信息滞后。

手动在聊天里 @ 另一个 Session、或反复打开目录找 .md 文件,能凑合,但无法保证「同时」让所有对等方去读并更新。Handoff Hub 针对的是这一类交接文件协调问题;它故意不做工作流引擎、任务看板或通用记忆系统,只对齐你已经在用的 handoff 文件。

这是什么

dsh-handoff-hub(仓库 LiFePO2/dsh-handoff-hub)是社区维护的非官方插件,维护者为 LiFePO2,在 SkillHub 上归类为「记忆」相关能力;实现上它协调的是工作区内的 handoff 文档,而不是替代 DSH 自带的记忆插件。

一句话定位:为彼此独立的 DSH Session 提供交接文档索引、注册、一次性群发提醒,以及可选的目录变更提醒和 Session 群组管理面板。

插件本身不调用模型 API,而是通过 DSH 内置的 ctx.schedule 服务,向目标 Session 投递普通用户角色消息,由各自绑定的模型处理。

核心功能

四个 Agent 工具

工具 作用
handoff_board 索引工作区 handoff「房间」:已注册对等方、各文档绝对路径与大小时间戳,以及未注册但在线的 Session 标题
handoff_join 以显示名注册当前 Session,并原子写入(或指向)其 handoff 文档
handoff_nudge 为每个目标创建一次性 Schedule 任务,同时请各对等方读取他人文档、更新自己的文档并重新注册;可带额外参考文档
handoff_leave 仅从名册移除本 Session,不删除 handoff 文档

Session 群组面板

插件附带浏览器端(dsh.client),在侧边栏增加 Sessions 入口和完整管理页,可查看成员、文档大小与时间、在线状态、未注册 Session,并支持单独或全部 Nudge、移除成员、邀请未注册 Session、切换目录自动提醒等。页面通过本机 Host 路由 GET /handoff-hub/state 与 POST /handoff-hub/action 通信;写操作需请求头 x-handoff-hub: 1,插件不暴露 token,也不为页面读取文档正文。

目录变更提醒(可选)

默认关闭(autoRemind.enabled: false)。开启后监听房间顶层 *.md 的 mtime/size:去抖(默认 debounceSeconds 30 秒)、跳过变更文档作者、仅提醒那些自己的文档比变更更旧(或缺失)的已注册对等方,并在 mergeSeconds(默认 60 秒)内合并连发提醒。以启用时的目录为基线,不重放历史变更;未注册 Session 不会被定向提醒。

投递语义说明

handoff_nudge 为每个目标创建 timing.kind = "after"、target.kind = "session" 的一次性任务。工具返回的是排队回执,不是「已阅读」证明;每个目标还会收到 Schedule 服务生成的 [SCHEDULE CHANGE] 通知,实际提醒为第二条消息。重启后任务仍由 Schedule 恢复。每次提醒会消耗目标 Session 的一轮模型交互,这是设计上的预期成本。

安装与启用

环境要求(见 package.json):DeepSeek Harness >= 0.2.2-rc.1 且 < 0.3.0,Node.js ^22.19 || >=24,以及包含待协调 Session 的工作区。当前版本 1.1.0,许可证 MIT。包尚未发布到 npm,支持本地目录安装或通过 Discover 市场索引安装。

方式一:本地 bundle

先将仓库克隆到本机,再让 DSH Agent 执行 bundle 安装(plugin_manager 需完整权限批准):

git clone https://github.com/LiFePO2/dsh-handoff-hub.git
plugin_manager install_bundle target=<克隆目录的绝对路径>

路径含空格时需加引号,例如 target="D:\plugins\dsh-handoff-hub"。bundle 会插入名为 handoff-hub 的行,激活后各 Agent 可见上述四个工具;通常无需重启 DSH,但若更新已链接的包,需重载该行或重启 DSH 后生效。

安装任意 DSH bundle 会运行 profile 的包管理器。若你在 profile 的 node_modules 下手工打过补丁(例如自定义 @openai/codex),请先备份或固定版本;本插件无依赖,不会主动改动那些包。

方式二:Plugins Discover 市场索引

在 DSH 中打开 Plugins → Discover → Add market index,填入:

https://raw.githubusercontent.com/LiFePO2/dsh-handoff-hub/main/market/index.json

索引将发布 revision 固定到包含该插件的 commit,Discover 会安装经审阅的对应版本。

典型用法

各 Session 首次加入

在每个协作 Session 中执行一次(示例字段来自 README):

handoff_join
  name: "codex"
  doc: "2026-11-10-codex.md"
  content: "# Handoff: codex\n\n## Current state\n...\n"

查看房间并群发同步

在任意 Session:

handoff_board                      # 谁在场、文档在哪
handoff_nudge                      # 请所有已注册对等方立即同步

定向提醒与附带参考文档

无需对方先注册也可对指定 Session 发起提醒(仍受工作区审计约束):

handoff_nudge
  targets: ["session-..."]
  note: "Please read the usage guide before continuing."

向每个目标附带额外可读路径:

handoff_nudge
  references: ["work/handoff-hub/plugin/README.md"]

结束协作

handoff_leave

成功排队时,工具可能返回类似:

[handoff-hub] Queued a handoff sync reminder to 3/3 sessions (about 1s delay).
- codex: queued · task schedule-... · fires 2026-11-10T08:31:42Z

若目标 Session 不存在,对应行会标记 failed 及 [session_not_found]。

适用场景与注意

适合谁: 同一 DSH 工作区内有多模型或多 Agent Session 并行,且你们已经用 Markdown(或其它格式)维护 handoff 文件,需要「同时推一把」让大家读 peer 文档并更新自己那份,而不是搭建独立工作流平台。

不适合当作: 长期记忆库、任务追踪或跨工作区同步;它只协调当前工作区房间内的 handoff 文件。

安全与信任: 插件以当前 DSH 进程权限运行,会通过 Schedule 向其它 Session 注入用户消息。安装前应阅读仓库源码与 MIT 许可证,确认与你的工作区数据边界一致。本文为社区插件介绍,SkillHub 目录站与 DeepSeek / 幻方无官方从属关系,插件 README 亦声明非 DeepSeek 官方背书。

配置: 目录自动提醒相关项以仓库完整配置文档为准;资料中明确出现的默认项包括 autoRemind.enabled: false、debounceSeconds(30)、mergeSeconds(60)。

结尾

Handoff Hub 把多 Session 协作里最容易断裂的一环——交接文档是否被同级 Session 同时读到并回写——收成四个工具和可选 UI,依赖 DSH 自带的 Schedule 投递,而不替代你现有的 handoff 格式与写法。

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

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

小夜