- Accueil
- Plugins
- Sessions et messages
- dsh-context-compressor
dsh-context-compressor
qwert702/dsh-context-compressor
Compression de contexte en un clic pour l’UI Web dsh : le bouton « 压缩 » dans le titre de session résume toute la conversation en quelques lignes, ouvre une nouvelle session dans le même workspace avec ce résumé et bascule dessus. L’originale reste intacte.
Installer
dsh plugin --profile web add github:qwert702/dsh-context-compressorREADME
dsh-context-compressor
小模型上下文压缩插件,面向 DeepSeek Harness Web GUI,当前适配 harness 0.2.0-rc.2(v0.1.x 对应的是 0.1.7 之前的契约,配置走已删除的 settings.register() 命名空间)。
上下文一长、小上下文模型就装不下——点一下会话标题栏的「压缩」按钮:插件把整段对话总结成几句话,新建一个同工作区的会话,把摘要作为第一条消息注入,然后自动切过去继续聊。原对话原样保留在侧边栏,一个字都不丢。
一键安装:
dsh plugin --profile web add <仓库或本地路径>例如本地路径:
dsh plugin --profile web add D:\CBN-HT\Desktop\AI编程\dsh插件\dsh-context-compressor装完重启 harness(dsh web)、刷新页面,会话标题栏右侧会出现「压缩」按钮。
功能
- 一键压缩:标题栏「压缩」→ 内联确认「压缩后新建会话继续?」→ 自动完成并切换。
- 几句话的摘要:摘要请求让模型把对话压成紧凑中文要点(3~10 条、每条一句话),关键信息(路径、命令、函数名、错误信息、数字、决定、用户偏好)原样保留——新会话上下文极小,小模型轻松装下。
- 新建会话继续:新会话与原文同工作区、继承 agentPreset、
parentSession指向原会话(侧边栏里嵌套显示来源),标题自动带上「· 续」;原会话作为完整历史保留,可随时回去翻。 - 摘要当背景、不当指令:注入消息带
<compacted-summary>标记和"已建立背景"前言,模型把它当作既有上下文直接续接,不会当成新任务去执行。 - 复用会话自身模型:摘要请求走 harness 的
ctx.llm,跟随会话路由的 provider/model;回放保留会话自身的 system + tools + 消息前缀,命中提供方 KV 缓存(同一会话连续压缩基本不重复烧输入钱)。 - 不碰 API key、不改写原会话:key 只存在于服务器,由 harness 凭据服务解析;原会话事件日志只读。
与内置压缩的关系
harness 自带 compaction-basic(自动按上下文阈值压缩 + /compact 命令),那是原地压缩:保留最近尾部,把更早的对话替换成一条结构化 checkpoint 消息。
本插件是另一条路径:整段对话压成几句话 → 开新会话注入。适合上下文窗口很小、连结构化 checkpoint 都嫌长的模型(比如自定义的小模型)。两者不冲突,可以同时装:
- 想要"原地瘦身、接着聊" → 用内置的
/compact或自动压缩; - 想要"干净的新会话 + 几句摘要" → 用本插件的「压缩」按钮。
工作原理
- 点击「压缩」→ 浏览器调
POST /api/dsh-context-compressor/compress,带上当前sessionId。 - host 端取会话事件日志(
session.snapshotEvents();0.2.0 已删除同步的session.events访问器)与 surface,最新优先回放到字符上限(maxInputChars,超出丢最旧),接上压缩指令,用会话自身的 system + tools + 前缀调ctx.llm.stream()。 - 模型输出中文要点摘要。host 端新建同 cwd 会话(
parentSession指向原会话),把「前言 +<compacted-summary>摘要</compacted-summary>」作为第一条 user 消息 append 进去并 flush 落盘。 - 浏览器刷新会话列表 → 用 Workspace UI 的
uiWorkspace.openSession(id)切到新会话(0.2.0 的 sessions 运行时不再有open())→ 标题加「· 续」。
新会话第一条消息会由用户手动发送;发消息时 harness 自动为该会话创建 agent(懒恢复),摘要随历史一起进入上下文。
配置(可选)
配置走 harness 0.1.7+/0.2.0 的 loader 配置通道:插件导出 Config(schemastery schema),由 loader 校验 profile 条目里的 config 后调用 apply(ctx, config)。在你的 profile 补丁层 ~/.dsh/profiles/<profile>/cordis.patch.yml 里覆盖条目 ui-context-compressor 的 config:
- id: ui-context-compressor
config:
enabled: true # 总开关
maxInputChars: 20000 # 回放字符上限(超出时丢弃最旧消息)
maxTokens: 2048 # 摘要输出 token 预算
summarizationProvider: '' # 留空 = 跟随会话路由的 provider/model
summarizationModel: ''
不配置即用以上默认值;只写其中几项时,未写的字段逐项回退到默认值。改完配置后重启 harness 生效(配置只在 host 半区解析并注入路由,浏览器半区不缓存配置)。
summarizationProvider / summarizationModel 需成对填写(例如 asdf / qwen38),用于覆盖"跟随会话模型"的默认行为。
旧的
~/.dsh/settings.yaml命名空间dsh-context-compressor在 0.2.0 已无效(settings.register()被删除)。
仓库布局
lib/index.js— host 半区:Config导出(loader 配置通道)+POST /api/dsh-context-compressor/compress路由(守卫 → 回放 → 摘要 → 新建会话 → 注入 → flush)。lib/client.js— 浏览器半区:conversation.session.header.actions链式条目(「压缩」按钮 + 内联确认 + 切到新会话 + 标题续接),纯函数evaluateSnapshot/currentTitle/renameSession/continueInFreshSession各自可测。test/smoke.cjs—node test/smoke.cjs:host(Config 导出/路由注册/守卫全路径/成功链路/config 覆盖与逐项回退/摘要失败)+ client(注册/快照守卫全分支/非响应式标题读取/retain→ready→rename→release/compressRequest/SSR 渲染)断言。
已知限制
- 手动触发:只提供按钮,不自动触发。需要按上下文阈值自动压缩的话,harness 内置
compaction-basic已经做了,直接配置即可。 - 忙时拒绝:模型正在回复(open turn)、该会话已有压缩进行中,或浏览器侧还有未提交的本地消息(
pendingSubmissions)时,路由返回busy/ 按钮保持禁用,失败可重试。 - 摘要跟随会话路由模型:如果会话从没发过消息(没有 request header),且未配置
summarizationProvider/Model,压缩会失败——本会话能点按钮说明肯定有历史,正常不会触发。 - 标题续接是尽力而为:新会话由 host 直接落盘创建,浏览器侧要先
sessions.retain(id, { source: 'contextCompressor' })才能拿到会话面改名;改名失败只打一条 warn,不影响压缩结果。 - 跨会话不迁移临时状态:新会话只有摘要里的内容,未落进摘要的临时变量/中间结论不会自动带过去;摘要质量决定续接质量。
- 浏览器半区手动维护:
lib/client.js为手写 bundle(与 dsh-continue-on-limit / dsh-auto-translate 同一技术路线),不经过构建步骤;改动后直接生效,冒烟测试兜底。
License
MIT
Plugins associés
dsh-web-ui (dsh-chat-recovery)
zhu1090093659/dsh-web-ui
billion-context
ranxianglei/billion-context
dsh-synapse
liangmianya/dsh-synapse
dsh-archive-manager
michengai/dsh-archive-manager