前言¶
在 DeepSeek Harness(DSH)里跑智能体,常见两类问题:一是长任务里推理容易发散或反复改计划;二是上下文窗口被占满后,要么硬续聊丢细节,要么开新会话又要从头对齐。社区插件 dsh-context-keeper(维护者 Orliba)把「怎么思考」写进持久 system prompt,再用本地会话文件做预算观测和交接包,并附带离线 trace 分析 CLI。它不会通过截断或压低推理来省 token——README 明确说明测量后放弃了「缩短思考」的原目标。
这是什么¶
一句话:主机端插件 + 离线分析器。插件在每次请求里注入一段可配置的推理规则,注册 /context-watch、/handoff 等命令,并在 UI 上展示官方 contextPressure 投影;CLI 直接读磁盘上的 DSH 会话文件,汇总思考量与 trace,不调用模型。
分类属于 DSH 社区目录中的「工作流」。仓库:https://github.com/Orliba/dsh-context-keeper;目录页:https://www.skillhub.cn/plugins/Orliba/dsh-context-keeper。SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。
兼容性与依赖¶
资料中的声明如下:
- DeepSeek Harness:
>= 0.2.0-rc.1(见package.json的dsh.engines.dsh) - Node.js:
>= 22(使用内置zlib.zstdDecompressSync) - 已验证环境:DSH Desktop 44.7.0(Windows)——回合 footer 的 context 徽标可挂载,
/context-watch与/handoff可针对本地会话文件运行
插件依赖公开 API:systemPrompt.section、commands.register、conversation.chat.turnTail / conversation.composer.dock 座位,以及 contextPressure 投影。若未来版本 API 变化,主机端会警告一次并停止注册,避免拖垮 profile;客户端在投影不可用时仅不渲染。
核心功能¶
推理规则(主机端 system prompt)¶
插件注册名为 context-keeper:how-to-reason 的 section,默认 order 650(在 deployment persona 之后、工具目录之前)。规则共五行,每条对应可观察行为,例如:行动前先定目标与验收方式;无新证据不改结论;推理卡住时去查证据而非空转;风险与推理深度匹配;明确未知项。完整条文见仓库 plugin/rule.mjs 与 docs/rule-text.md。
设计选择是 prompt section 而非流式拦截。README 记录了对「循环 trace、重复推导、早承诺长尾巴」等假设的实测,均未支撑自动降档或停轮;且 llm/stream、agent/turn-stopping 等挂载点在本树中不稳定。section 一次声明、每轮可见,不依赖事后检测。
另有一条静态上下文预算说明写入 system prompt,故意不写数字,避免每轮变化破坏 provider 的 prefix cache。
上下文观测与交接(v0.3 起)¶
两个用户命令,均只读 DSH 已写入的会话文件,零次模型调用:
/context-watch:占用率、绿/黄/橙/红档位、剩余空间、每轮增长、最近一次 compaction 回收量/handoff:在<workspace>/.context-keeper/handoff/写入可携带的交接包与完整归档;复用 DSH 的compaction/summary检查点作为早期上下文,近期尾部原文引用
设计说明见仓库 docs/distill-design-v3.md。
UI:context 徽标与提醒(v0.4 起)¶
- 回合 footer(
conversation.chat.turnTail座位):读取contextPressure,按占用率着色——绿 (<50%)、黄 (50–65%)、橙 (65–80%)、红 (≥80%),并显示百分比;橙/红起显示「建议交接」/「该交接了」类提示,悬停可见完整句子 - 输入框下方 dock(
conversation.composer.dock):仅在橙/红时出现,提供 开新会话 按钮;通过 client Remote 调用session.create+session.prompt,在新会话中 seed 提示去读.context-keeper/handoff下最新交接包。按钮不会内联交接内容(避免再耗 token)。创建后无法自动跳转到新会话,需从侧栏打开——面板中会说明
上述 UI 与提醒不会自动进入模型输入;除点击开新会话外不消耗 token。
客户端实现在 plugin/client.js(package.json 的 dsh.client);无需单独配置路径。
离线 CLI:读「它实际想了什么」¶
在已具备本包的前提下,可用 Node 22+ 运行 bin/cli.mjs(无构建步骤、无额外依赖)。README 示例:
# 扫描 DSH home 下所有会话,按思考量排序
node bin/cli.mjs scan "$DSH_HOME/sessions"
# 单会话汇总
node bin/cli.mjs report path/to/session.v4.jsonl.zstd
# 最长 trace
node bin/cli.mjs traces path/to/session.v4.jsonl.zstd --limit 20
安装与启用¶
作为 DSH 插件安装(命令来自 README):
dsh plugin --profile <your-profile> add dsh-context-keeper
安装后重启该 profile。关闭而不卸载可设配置 enabled: false,或在 patch 中增加:
- id: context-keeper
disabled: true
配置项(资料原文表格):
| Option | Default | Meaning |
|---|---|---|
enabled |
true |
false 时不注册任何内容 |
text |
built-in rule | 完全替换规则正文 |
order |
650 |
section 在组装 prompt 中的位置 |
maxChars |
2000 |
在段落边界截断 |
典型用法¶
- 安装并重启 profile,正常在长任务会话中工作;观察每轮 footer 色点与占用率。
- 需要量化时输入
/context-watch,查看档位与 headroom,再决定是否交接。 - 窗口进入橙/红,或任务需换会话时运行
/handoff,然后在 dock 提醒里点 开新会话,在新会话中让 agent 按 seed 读取 handoff 目录继续。 - 事后复盘时,对
session.v4.jsonl.zstd跑node bin/cli.mjs report或traces,对照插件注入的规则与实际 trace。
DSH 第三方命令名须匹配 ^[a-z][a-z0-9_-]*$,菜单显示为命令名本身;可读性写在中文单行描述里,因此菜单中是 /handoff、/context-watch 而非自定义英文标题。
适用场景与注意¶
适合:需要稳定推理习惯、长会话上下文管理、以及离线审计思考 trace 的 DSH 用户与插件开发者。
注意:
- 插件以当前 DSH 进程权限运行;安装前请自行查看源码与许可证(资料中为 MIT,
package.json版本 1.0.0)。 - 不承诺缩短模型思考;交接与观测均基于本地会话与官方投影,不替代你们自己的安全与合规审查。
systemPrompt.section缺失时插件 warn 一次并空注册,其余 profile 不受影响——开发中曾覆盖「未声明服务抛错」「声明但未提供的服务永久 pending」等失败模式并有测试。
结尾¶
dsh-context-keeper 把推理规范、上下文预算可视化、handoff 与离线分析放在同一仓库:主机端轻量、可关;客户端纯展示加一个明确的开新会话动作;CLI 补观测闭环。进一步细节以 README 与 docs/ 为准。