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