dsh-session-handoff:长会话交接文档与新会话接力

前言

在 DSH 里做智能体或长任务时,会话往往会越聊越长:上下文窗口被占满、响应变慢,模型也容易「忘」掉早期约定。DSH 自带 compaction 与 fork——前者在原会话里压缩历史,后者把完整历史复制到新会话。若你希望原会话保持不动,又在新会话里用一页结构化摘要接着干,而不是带着整段 baggage 或重新口述需求,就需要在「压缩 / 复制」之外多一步「写交接、开干净会话」。下面介绍社区插件 dsh-session-handoff(DSH 会话接力)。

这是什么

dsh-session-handoff 由维护者 MountBatten718 发布,在 SkillHub 社区目录中归类为工作流插件;GitHub 仓库当前约 2 stars,许可证 MIT,包版本 0.3.1(以仓库 package.json 为准)。

一句话定位:在上下文或会话体积接近阈值时先询问(也可手动 /handoff),用 LLM 把近期对话整理成交接文档(目标、做法、已完成、涉及文件、下一步、开放问题等),在同一工作区创建无旧上下文的新会话,把文档作为首条消息注入并自动打开;原会话不被改写,标题侧可链回。

与 compaction、fork 的差异

/compact fork dsh-session-handoff
原会话 原地压缩 保留 保持原样,标题可链回
新会话载入内容 同一会话 完整历史复制 一页交接笔记
切换时机 达阈值自动 手动 达阈值先问(或按策略自动)

Compaction 是重打包旧上下文,fork 是整份拷贝;本插件把「要记住的」写成 brief,在新会话里轻装继续。

核心功能

以下能力均来自项目 README,可按需裁剪使用。

  1. 手动交接:输入 /handoff、/handoff <N> 或 /handoff all;无参数时使用配置项 turns(默认最近 50 轮用户消息)。
  2. 自动策略:autoMode 支持 replace(在原生 compaction 之前)、hybrid(会话变重时,默认)、native(不自动切换)。
  3. 先问再动:默认 confirm 弹窗确认;可改为 notify / auto。拒绝建议后,触发水位需再涨 50%(askRearmPercent)才会再次询问。
  4. 健康行:输入框上方常驻「context xx% | session xxMB | ~N turns left」。
  5. 干净新会话:继承工作区、模型路由与 agent preset(系统提示 / 工具 / skills),不带旧对话上下文。
  6. 结构化文档:可持久化到磁盘;设置面板可浏览历史交接文档。
  7. 自动打开子会话:客户端等待子会话创建后导航过去(每个子会话仅一次,重放不重复跳转)。
  8. 决策日志:每次决策(动作与原因)可记录并在设置中查看。
  9. 实现方式:仅依赖公开 host 服务,通过单条 dsh.bundle.patch 接入,不改 DSH 核心。

安装与启用

环境要求:DSH 桌面端或 CLI,Node ^22.19.0 || >=24。README 写明在 0.1.0-rc.5–rc.8、0.1.1-rc.2、0.2.0-rc.2、0.2.1-rc.2 等版本上做过测试;engines.dsh 与 peerDependencies 以仓库 package.json 为准。

插件是标准 DSH bundle:放入当前所用 profile 的 node_modules 并在该 profile 注册。桌面 profile 示例(路径按你的环境替换):

# 1) 将仓库放到任意目录(或解压 release 中的 dsh-session-handoff-0.3.1.tgz)
git clone https://github.com/MountBatten718/dsh-session-handoff.git ~/dsh-session-handoff

# 2) 链到桌面 profile 的 node_modules
ln -s ~/dsh-session-handoff ~/.dsh/profiles/desktop/node_modules/dsh-session-handoff

在同一 profile 的 package.json 中登记依赖:

{
  "dependencies": {
    "dsh-session-handoff": "link:/Users/you/dsh-session-handoff"
  }
}

并在该 profile 的 dsh.profile.bundles 中加入 dsh-session-handoff,重启 DSH 生效。

说明:名为 desktop 的 profile 由 Electron 应用独占,CLI 对该名拒绝 plugin add / --dump-config;若要用 CLI 只读检查,可对同一目录使用不同名称的 symlink profile。普通 CLI profile 可按你安装其他本地插件的同样方式处理。

安装前请自行阅读仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,交接摘要会调用你配置的模型处理近期对话文本。

典型用法

在任意会话输入框输入:

/handoff          # 使用配置的 turns(默认 50 轮用户消息)
/handoff 20       # 摘要最近 20 轮用户消息
/handoff all      # 摘要全部用户消息

流程大致为:命令卡片显示 summarizing → LLM 生成交接文档 → 新会话自动打开;原会话保持不变并可从标题链回。

隐私:指定窗口内的用户与助手消息会发送到当前配置的模型以生成摘要,使用前请确认模型与路由符合你的合规要求。

多数选项在 DSH → Settings → Plugins → session handoff 中修改并即时生效。完整 profile 片段示例(字段含义见 README):

- id: handoff
  name: dsh-session-handoff
  config:
    autoMode: hybrid
    autoPromptLevel: confirm
    sessionVolumeBytes: 8388608
    turns: 50
    handoffDocPersist: true

未设置 provider / model 时,新会话沿用当前会话最近记录的模型路由。每次 handoff 还会在 <DSH_HOME>/session-handoff-docs/handoff-trace.jsonl 记录阶段与结果(长文本会脱敏,约 5 MiB 轮转)。

适用场景与注意

适合:单工作区内长时间改代码、拆需求、多轮排错,窗口或会话体积经常顶到阈值,又希望「记下来再开新局」而不是 fork 整段历史或只在原会话里 compact。

注意:

  • README 列出的已知限制包括:部分 DSH 版本已验证;0.1.2-alpha.1 因对话 UI/服务拆分需单独客户端迁移;host 侧 session.snapshotEvents() 已标记 @deprecated,未来内核可能更换读取入口。以仓库 Known limitations 为准。
  • 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,安装第三方 bundle 前请核对来源与权限。

结尾

dsh-session-handoff 补上「记住要点 → 干净新会话继续」这一步:手动 /handoff 或按策略在阈值前询问,用一页交接文档替代整段上下文搬迁。详情与配置见 GitHub:MountBatten718/dsh-session-handoff,目录入口见 SkillHub:dsh-session-handoff。

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

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

Xiaoye