dsh-rollover:上下文快满时存接续前情,换段后注入一次

前言

在 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 里把满窗后的两种糟糕结局写得很直白:压缩丢细节,或新会话断片。本插件的流程可以概括为三步:

  1. 盯占用:超过 warnAt(默认 45%)在系统提示里提醒「顺手写进记忆」;超过 threshold(默认 60%)提醒「该滚段了」。
  2. 存接续前情:工具 rollover_handoff 把最近 keepTurns 轮对话提炼成《接续前情》,写入 <state>/rollover/handoffs/<sessionId>.md。
  3. 接住下一段:若同时安装 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 / 幻方无官方从属关系。

典型用法

  1. 安装并启用插件后,长对话过程中可定期调用 rollover_status,确认处于 fine、getting-full 还是 should-roll。
  2. 在系统提示出现滚段提醒,或占用达到阈值时,调用 rollover_handoff(或依赖 0.2.0 的自动存档),生成《接续前情》;需要时可写一句给「下一段的自己」。
  3. 上下文满窗后开启新 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。

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

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

Xiaoye