dsh-cairn: Let Task State Survive DSH Context Compaction

前言

在 DeepSeek Harness(DSH)里做长会话时,宿主会把早期对话压成一条摘要。压一两次往往还能接着干;多压几轮之后,「当初为什么否决方案 A」「参数定的是 0.75 还是 0.8」「测试到底有没有跑过」这类细节会从上下文里消失,模型还可能推翻刚才已经确认过的结论。单靠对话历史,很难在多次压缩后保持同一条任务线的连续性。

下面介绍社区插件 dsh-cairn(维护者 Saretheya,GitHub:Saretheya/dsh-cairn)。它在里程碑处让模型写入检查点,存进插件自有目录,并在每次压缩后把检查点重新注入系统提示词——利用 DSH 系统提示首节点不参与压缩这一机制,把「压缩碰不到的地方」当作权威副本。检查点不会写入你的工作区。

这是什么

dsh-cairn 的定位是:在上下文被 DSH 有损压缩之后,仍保留当前目标、已定结论、否决方案、待办与证据。README 用登山路标(cairn)作比喻:沿途堆几块石头,后人循石而行。

插件分类在 SkillHub 目录中归为「记忆」;npm 包 dsh-cairn 当前版本为 1.0.1(以 package.json 为准),许可 MIT,目标 DSH 版本 0.2.x(README 写明 0.2.1-rc.5 实测)。它不修改你的 cordis.patch.yml,也不写 settings.yaml;卸载后数据随插件目录一起消失。

核心功能

检查点与重注入

模型通过工具 checkpoint_write 写下或更新检查点;旧代自动归档,保留最近 20 代。插件在 systemPrompt.section 中注入内容,因此可跨越任意多次压缩。

注入不是每轮全文塞满,而是按检查点与会话关系分四档(README 中的「四档注入策略」):

情形 注入内容 README 实测体积参考
同一会话 全文(≤12000 字符) 起约 240 字符
跨会话、7 天内、主题相关 摘要卡片(≤900 字符) 约 175 字符
跨会话、过期或主题不相关 一行指针 约 95 字符
尚无检查点 不注入 0 字符

跨会话时「主题相关」依赖检查点里的 topic 和 keywords;README 强调这两个字段务必填写,否则跨会话往往只会得到一行提示。

工具一览

工具 作用
checkpoint_write 写入/更新检查点
checkpoint_read 读回全文,或按关键词过滤行
context_status 查看 token 占用、窗口,以及检查点为何被注入或未注入
context_compact 在支持压缩服务的环境里预约主动压缩;若宿主压缩服务不在插件所在平面,则只落盘并如实告知

另随包提供 context-checkpoint 技能,声明里程碑、压缩后对账、上下文压力等触发条件;并在压缩完成后注入唤醒消息,提示模型直接接着做、勿重述已完成工作。

主动提醒(非全靠模型自觉)

插件在上下文占用跨越档位时会向会话注入提醒(同一档位只提醒一次):

档位 阈值 提醒要点
warm ≥ 窗口 50% 先 checkpoint_write,再 context_compact
near ≥ 80% 立刻更新检查点
over ≥ 90% 立即更新检查点

本会话已有检查点时,系统提示词还会常驻一段规则:上下文紧张时先落盘再压缩;与项目 repo 冲突时以 repo 为准。

数据存放位置

全部在插件目录,工作区不增文件:

<DSH_HOME>/plugins/dsh-cairn/data/
├── checkpoints/<工作区标识>/
│   ├── current.md
│   ├── current.meta.json
│   └── gen-NNN.md
├── active-variant.lock
├── tmp/
└── logs/

单份写入上限 60000 字符(超出拒绝);注入上限 12000 字符(超出截断并提示,全文仍可用 checkpoint_read)。跨会话卡片有效期 7 天;context_compact 要求落盘新鲜度在 10 分钟内。

安装与启用

DSH 生态里能力以插件形式扩展;社区目录页见 SkillHub:Saretheya/dsh-cairn,与 DeepSeek / 幻方无官方从属关系,安装前建议自行查看源码与许可证。

官方 README 给出的安装命令如下:

dsh plugin --profile desktop add dsh-cairn

安装后重启 DSH。需要 DSH 0.2.x;Node 引擎要求见 package.json(^22.19.0 || >=24.0.0)。插件以当前 DSH 进程权限运行,安装前应确认你信任维护者与代码内容。

典型用法

README 没有单独的长篇「教程脚本」,用法围绕工具与纪律展开,可按下面顺序理解。

  1. 在里程碑写检查点
    根因确定、方案拍板、模块改完、测试通过、用户确认决策等时机,调用 checkpoint_write,内容应包含目标、结论、否决方案及原因、待办与证据(Evidence);并填写 topic、keywords 以便日后跨会话召回。

  2. 上下文变紧时
    收到插件的 warm / near / over 提醒时,先更新检查点,再视环境调用 context_compact。压缩发生后,依赖系统提示中的检查点与唤醒消息继续任务,可用 checkpoint_read 查全文或过滤行。

  3. 排查注入行为
    调用 context_status 查看当前窗口占用以及本工作区检查点为何注入摘要、全文或仅一行指针。

  4. 纯增量、长期不压缩的场景
    README 指出:若任务从不到 50% 且从不压缩,上述档位提醒可能不会触发。可在项目 AGENTS.md 里写里程碑纪律(例如「每个模块改完调用一次 checkpoint_write」),把落盘变成固定动作。

写入检查点示例结构以 README 语义为准(字段名以工具/schema 为准):目标、已定结论、已否决方案、待办、Evidence 要点,以及 topic / keywords。

适用场景与注意

适合谁:长时间在同一 DSH 会话里做复杂任务(调试、多轮方案比较、测试证据追踪),或希望在 7 天内用新会话接着同一主题且控制 token 的人。

已知限制(来自 README):

  • 插件不会自动总结对话;写什么由模型(及你在 AGENTS.md 中的纪律)决定。
  • 跨会话相关性是关键词级,不是语义 embedding;策略偏保守,可能只给一行指针。
  • 主动压缩是否可用取决于 DSH 装配;核心落盘与重注入不依赖该能力。
  • 同一 data/ 目录只允许一个实例生效;多实例指向同一插件目录时,后到的会休眠。

安全与信任:插件读写仅限 <DSH_HOME>/plugins/dsh-cairn/data/,不写入工作区;仍建议在安装前阅读 仓库源码 与 MIT 许可证条款。

结尾

dsh-cairn 不改动 DSH 压缩本身,而是把检查点放在系统提示中压缩无法触及的位置,并在压缩后重新注入,减轻「摘要把细节冲掉、模型否认刚才结论」的问题。数据留在插件目录,不污染项目仓库。

  • 目录页:https://www.skillhub.cn/plugins/Saretheya/dsh-cairn
  • GitHub:https://github.com/Saretheya/dsh-cairn
羽毛球分组比赛记分
小程序二维码

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

Xiaoye