前言¶
在 DeepSeek Harness(DSH)里做长对话或复杂任务时,上下文窗口迟早会顶满。常见出路只有两条:让系统压缩旧内容,细节被摘要抹平,模型像「换了个人」;或者开新会话,下一段完全不知道刚才聊到哪。社区插件 dsh-rollover(维护者 ZyxQl-Ala,分类:记忆)在这两条路之间补了一环:在窗口快满前把「上一段发生了什么」写成《接续前情》,换到新的一段会话时再注入一次,让同一条任务线能接下去。
这是什么¶
dsh-rollover 是 DSH 的上下文滚段插件。它监听本地会话投影里的占用压力(contextPressure),在可配置的阈值处提醒或自动存档,并把 handoff 存到本地状态目录;当检测到活跃会话切换到新的 session 时,把上一段的《接续前情》只注入一次,避免重复刷屏。
当前版本 0.2.0(MIT 许可证),要求 DSH >=0.2.1-rc.1 <0.3.0-0、Node >=20。纯本地运行,无网络、无遥测;会话识别依赖 DSH 自带的投影缓存(storages/session_projcache/sessions),不申请额外权限。
它解决什么问题¶
README 里把满窗后的两种糟糕结局写得很直白:压缩丢细节,或新会话断片。本插件的流程可以概括为三步:
- 盯占用:超过
warnAt(默认 45%)在系统提示里提醒「顺手写进记忆」;超过threshold(默认 60%)提醒「该滚段了」。 - 存接续前情:工具
rollover_handoff把最近keepTurns轮对话提炼成《接续前情》,写入<state>/rollover/handoffs/<sessionId>.md。 - 接住下一段:若同时安装 dsh-decay-memory,可一并写入 📌 永久记忆;换 session 后由插件把 handoff 自动注入一次。
从 0.2.0 起还支持自动存档:占用达到 autoAt(默认 60%)时插件自行生成 handoff(不依赖模型调工具),同一会话有 10 分钟冷却(autoCooldownMs)。
核心工具与配置¶
插件向 Harness 暴露两个工具:
| 工具 | 作用 |
|---|---|
rollover_status |
当前占用比例、是否该滚段(fine / getting-full / should-roll) |
rollover_handoff |
生成并保存《接续前情》,可附一句留给下一段的话 |
默认配置如下(可在设置页或 API 修改):
{
"warnAt": 0.45,
"threshold": 0.6,
"keepTurns": 12,
"maxChars": 5000,
"injectIntoMemory": true,
"stateDir": ""
}
stateDir 为空时使用 $DSH_HOME/rollover。相关文件:
$DSH_HOME/rollover/handoffs/<sessionId>.md 接续前情正文
$DSH_HOME/rollover/state.json 已注入记录
$DSH_HOME/decay-memory/memory.json 可选:与 dsh-decay-memory 联用时
与 dsh-decay-memory 的配合¶
- 单独使用:提醒、生成 handoff 文件;新段注入依赖插件自己的 prompt section。
- 与 dsh-decay-memory 联用:handoff 同时进入 📌 永久记忆,换段后与既有记忆一起注入,衔接更稳。
设置页与 HTTP 接口(0.2.0+)¶
插件自带设置 UI:
- DSH 设置面板左侧新增「上下文滚段」一节(client 通过 iframe 嵌 host 页面)。
- 独立页:
<你的 DSH 地址>/rollover。
页面上可查看当前会话占用、handoff 存档(自动/手动、已注入/待注入),调整阈值与冷却,或点击「立即生成接续前情」。
同源 API(需 DSH 登录态):
GET /rollover/api/state
POST /rollover/api/config { warnAt, threshold, autoAt, autoCooldownMs, keepTurns, maxChars, autoHandoff, injectIntoMemory }
POST /rollover/api/action { op: "handoff" | "reset-injected" | "delete-handoff", ... }
安装与启用¶
SkillHub 目录页给出的安装说明是交给 DSH 的自然语言指令,而非单独的 shell 一行命令。在 Harness 中可按页面「发送给 DeepSeek Harness 安装」区块复制:
请安装 DSH 插件 ZyxQl-Ala/dsh-rollover。
安装前请确认本机 DSH 与 Node 版本满足 package.json 中的 engines;插件以当前 DSH 进程权限读写 $DSH_HOME 下的 rollover(及可选的 decay-memory)数据,安装前应自行查看 GitHub 仓库 源码与 MIT 许可证。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。
典型用法¶
- 安装并启用插件后,长对话过程中可定期调用
rollover_status,确认处于 fine、getting-full 还是 should-roll。 - 在系统提示出现滚段提醒,或占用达到阈值时,调用
rollover_handoff(或依赖 0.2.0 的自动存档),生成《接续前情》;需要时可写一句给「下一段的自己」。 - 上下文满窗后开启新 session(或 DSH 切换到新段),插件检测到 session 变化,将上一段 handoff 注入一次;若需重新注入,可通过设置页或
POST /rollover/api/action的reset-injected等操作管理状态。
适用场景与注意¶
适合需要多段衔接的长任务:代码重构分多次聊、调研笔记跨会话、或不想完全依赖压缩摘要时,用本地 handoff 保留「接哪里、剩什么」。
注意:handoff 质量取决于提炼逻辑与 keepTurns / maxChars;自动存档有冷却,避免同一会话内反复写盘。与 decay-memory 联用时,📌 条目会长期占用记忆槽,可按需关闭 injectIntoMemory 或只保留文件 handoff。
结尾¶
dsh-rollover 把「快满窗 → 存接续前情 → 新段注入一次」做成可配置、可可视化的本地流程,减轻压缩与新会话之间的断层。目录与版本信息见 SkillHub:dsh-rollover,源码与完整 README 见 GitHub:ZyxQl-Ala/dsh-rollover。