dsh-plugin-context-manager:自动记录对话、注入记忆并折叠真实上下文的 DSH 插件

前言

在 DeepSeek Harness(DSH)里跑长会话,常见两个麻烦:一是上下文窗口有限,早期定下的结论被挤出窗口后,模型就「忘了」;二是换一个会话,上次记下的重点带不过去。常见对策是把摘要塞进 system prompt,但那只作用于辅助提示块,真实对话历史原样增长,token 占用照涨。

下面介绍的 dsh-plugin-context-manager 针对的就是这两点:自动记录每轮对话,按优先级把记忆与跨会话置顶笔记注入每次模型请求,并且直接折叠模型可见的真实对话历史来降低 token 占用。

这是什么

dsh-plugin-context-manager 是 luxiwusuobuneng 维护的 DeepSeek Harness 自定义插件,README 标题写作 dsh-context-manager(上下文管理插件),采用 MIT 许可证。一句话定位:自动记录每轮对话,按优先级注入记忆与跨会话置顶笔记,并折叠真实对话历史以节省 token;数据全部落盘,持久化、重启安全。

仓库拆成三个包,各管一层:

所在层 职责
dsh-context-manager-service-luxi Host 持久化存储、全局记录、Remote API,以及根平面 agent/pre-step 监听器:执行排队的历史折叠、把记录与自定义文本注入真实消息流
dsh-context-manager-agent-luxi Agent preset 行 仅保留回退注入:injectIntoMessages: false 时把记录注入 system-prompt 快照。记录逻辑已退役(2026-08-17 起由服务端全局接管)
dsh-context-manager-ui-luxi Web 层行 浏览器 UI:输入框右下角「上下文」按钮与管理窗口

核心功能

自动记录与优先级注入

每轮对话自动记录成一条记录,按优先级存储:index 0 最重要,注入时按这个顺序取前 N 条。开启 summarize: true 后,每轮交换会异步调用当前默认模型路由,提炼「总结/描述」两行;调用失败自动回退为截断。

记录有上限:超过 maxRecordsPerSession 时,删除 createdAt 最旧的非置顶记录,置顶记录不受上限影响。记录范围是所有 preset 的根会话;子代理和工作流子会话不记录,避免污染与 token 浪费。

置顶笔记与自定义文本进入真实消息流

置顶(⭐)记录和「注入设置」里的自定义文本,会作为一条真实消息前置注入每次模型请求,由服务端在 pre-step 修改 messages 实现(injectIntoMessages),而不是只放进辅助提示块。

真实对话查看与手动折叠

conversationList 列出模型实际看到的每条消息,含角色、文本、token 估算和总占用,也包括之前折叠留下的摘要节点。

foldRange 在「真实对话」里选中一段消息范围排队,下次对话开始时由服务端在 agent/pre-step 内执行 compaction.compactRegion(),把旧文本真正折叠成一条摘要,降低 token 占用。折叠需在回合内执行,所以是「下一条消息后生效」;foldStatus 可查询排队与执行状态。

浏览器管理窗口

安装后在网页输入框右下角出现「上下文」按钮,点开是管理窗口,含记录、真实对话、注入设置等标签页,支持搜索、编辑、跨会话置顶、拖拽排序、导出、清空。

运行时可调与持久化

注入条数(maxInjected)、字符预算(maxInjectionCharsmaxCharsPerRecord)、记录上限(maxRecordsPerSession)等通过 setSettings 运行时覆盖并持久化,不用改配置重启。记录、注入、排队中的折叠、折叠审计全部落盘,重启后照常工作。

安装与启用

先说清楚:这是手动多步安装,不是标准的一键安装。流程是先复制三个包目录,再手动接线 cordis.patch.yml,最后重启 DSH。

第一步,复制包文件。把 dsh-context-manager-service-luxidsh-context-manager-agent-luxidsh-context-manager-ui-luxi 三个文件夹完整复制到 C:\Users\你的用户名\.dsh\profiles\node_modules\;或者在仓库根目录执行下面的命令,由脚本自动复制:

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1

install.ps1 只负责复制三个包,不修改 cordis.patch.yml,接线要手动完成。如果输出 [FAIL],说明对应包的源目录缺少 package.json,先检查目录摆放。

第二步,接线。编辑 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml,向 insert 列表追加三行。若文件里已经有 - insert: 开头的内容,把三行并进去,不要重复键:

- insert:
    - id: compaction-passive
      name: '@deepseek-ai/dsh-compaction-basic'
      config:
        auto: false
    - id: context-manager
      name: 'dsh-context-manager-service-luxi'
      config:
        maxRecordsPerSession: 200
        injectIntoMessages: true
        maxInjectionChars: 800
        maxInjected: 5
        maxGlobalInjected: 3
        maxCharsPerRecord: 200
        summarize: true
        maxSummaryChars: 400
        maxDescriptionChars: 200
        summarizeTimeoutMs: 20000
        summarizeMaxInputChars: 6000
        summarizeMaxOutputTokens: 300
    - id: context-manager-ui
      name: 'dsh-context-manager-ui-luxi'

上面是示例默认值:maxInjected 是每次注入取前几条记录,maxRecordsPerSession 是单会话记录上限,summarize 相关项控制 LLM 总结的长度与超时,都可按需调整。

接线有三条约束:

1、compaction-passive 行是浏览器折叠按钮的依赖,缺行只影响折叠功能,不影响记录。
2、UI 行必须挂在 web 组合(loader 条目);挂到 agent preset 行不会被 clientModules 扫描,bundle 会 404。
3、dsh-context-manager-agent-luxi 行是可选的,只在 injectIntoMessages: false 时提供回退注入,不挂不影响功能。

第三步,验证。经过上面的步骤后,完全重启 DSH(Service/Agent 是进程启动时加载,热重载无效),打开网页版对话界面,输入框右下角出现「上下文」按钮、点击能打开管理窗口,即安装成功。

之后的升级:只改包内代码时,重复第一步和第三步即可。Service 改动必须重启 DSH;纯 UI(client.js)改动刷新浏览器页面即可。

典型用法

折叠一段真实历史

在管理窗口的「真实对话」页选择一段消息范围执行 foldRange,折叠会在下一条消息时于 agent/pre-step 内执行生效。程序化调用走 Remote API,例如:

connection.rpc.call('/api', 'contextManager/foldRange', { args: { sessionId, start, end } });
connection.rpc.call('/api', 'contextManager/foldStatus', { args: { sessionId } });

第一行排队一次折叠请求,第二行查询它的执行状态。

Remote API

浏览器通过 connection.rpc.call('/api', 'contextManager/<method>', { args }) 调用 Remote API,方法包括:listcountrecordremovereorderupdatesetGlobalclearlistGlobalcompactconversationListfoldRangefoldStatussetInjectionTextgetInjectionTextgetSettingssetSettingsclearAll。其中 setSettings 的运行时覆盖会持久化,重启不丢。

适用场景与注意

适合谁:

1、长会话跑得久,早期信息被挤出窗口,想让旧文本真正离开上下文,而不只是在旁边加一份摘要。
2、跨会话要带固定约定或笔记,用置顶记录注入所有会话。
3、需要核对模型实际输入:先用 conversationList 看每条消息的角色、文本与 token 占用,再决定折叠和注入。

注意:

1、安装是手动多步流程,install.ps1 不负责接线,cordis.patch.yml 要自己改。
2、折叠按钮依赖根平面的 compaction-passive 行;缺行只影响折叠,不影响记录。
3、dsh-context-manager-agent-luxi 的记录逻辑已退役(2026-08-17 起由服务端全局接管),只保留回退注入。
4、折叠需在回合内执行,效果落在下一条消息之后,不是立即生效。
5、插件以当前 DSH 进程权限运行,安装前建议通读源码,确认 MIT 许可证与代码行为符合你的使用要求。

小结

dsh-plugin-context-manager 把记录、注入、折叠、查看收进一个插件,注入与折叠都作用于真实消息流,持久化和运行时可调让日常使用少一次重启。安装步骤比一键安装多几步,但每一步的结果都可验证,适合需要长期维护 DSH 会话上下文的开发者。

  • 目录页:https://www.skillhub.cn/plugins/luxiwusuobuneng/dsh-plugin-context-manager
  • GitHub:https://github.com/luxiwusuobuneng/dsh-plugin-context-manager

目录页来自独立的社区插件目录,与 DeepSeek、幻方无官方从属关系;在 DSH「一切皆插件」的理念下,这类第三方插件是对生态的补充。

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

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

小夜