前言¶
在 DeepSeek Harness(DSH)里做长会话时,上下文会随轮次膨胀。内置压缩(compaction)通常只折叠最旧的一段对话,/compact 也不接受参数。实际开发里,更需要删掉的是最近的岔路:调试往返、死胡同问答、一大段工具输出。这些占着可见上下文,却不必逐字保留。
社区插件 dsh-compaction-selective(维护者 DerekZhangbj,分类:记忆)补上这一条路径:你明确说「压哪几轮已结束的对话」,系统在人工确认后,把该区间折成一条摘要,并替换可见界面上的原文;会话日志里原始事件不删,摘要可展开。
下面按定位、能力、安装、用法与限制说明如何使用。
这是什么¶
dsh-compaction-selective 是面向 DSH 的「人机协同、选择性压缩」插件:对已结束的 turn 区间做折叠,且必须经过确认卡才会执行。它不是 DeepSeek 官方产品,也与 DeepSeek / 幻方无隶属关系;生态上 DSH 提倡「一切皆插件」,目录站 skillhub.cn 等为社区独立站点。
- 仓库:https://github.com/DerekZhangbj/dsh-compaction-selective
- 目录页:https://www.skillhub.cn/plugins/DerekZhangbj/dsh-compaction-selective
- 许可证:MIT(见仓库
LICENSE) - 包版本(资料中的
package.json):0.1.1 - 声明兼容 DSH:
engines.dsh: ">=0.2.0-rc.2 <0.3.0",README 写明在 DSH0.2.0–0.2.2范围内维护与验证
核心功能¶
与内置压缩的差异¶
内置逻辑偏向「最旧跨度」;本插件让你指定跨度,例如「最近两轮」或显式范围 34-35。折叠使用 fold 形摘要模板(保留决策、路径、API、未决问题,去掉逐步复述),也可用配置关掉模板、沿用宿主默认样式。
三条入口(Web CLI 与 Electron 桌面端)¶
| 入口 | Web (CLI) | Desktop (Electron) |
|---|---|---|
模型工具 compact_turns + 确认卡 |
支持 | 支持 |
| 输入区按钮 / 面板(概览、轮次表) | 支持 | 支持 |
+ 菜单 → 指令 → 选择性压缩 |
支持 | 支持(不支持时会隐藏) |
| 面板/菜单在空闲态直接按指定区间压缩 | 支持(需本地 15 行补丁) | 不支持(核心在 app.asar) |
第三条「空闲态 + 指定区间」是上游 API 缺口(compactNow 与 compactRegion 能力未组合公开),非插件实现错误。CLI 可用 patches/apply-compaction-patch.ps1 桥接;桌面端无法用补丁时,插件会禁用相关按钮并提示改用对话表单,避免点了才报错。
执行流程(资料中的三步)¶
- 选定已结束 turn 的区间 — 如「最近两轮」或
34-35。 - 预览并确认 — 工具路径展示确认卡:精确轮次、节点数、预估释放 token;未点「确认压缩」或超时则不做任何变更。
- 折叠并替换可见面 — 区间在界面上由一条摘要替代;日志中原文仍在。
护栏(故意保留,不宜削弱)¶
- 折叠前必须人工确认(确认卡;取消/超时不变更会话)。
- 仅已结束 turn;当前进行中 turn 拒绝压缩。
- 节点 0(系统提示)永不触碰。
- 客户端无法判定会话时会请你选择,不猜测会话。
- 面板操作带两步确认,5 秒无操作自动取消。
安装与启用¶
安装方式为把包 link 进 DSH profile,并在 bundles 中启用;资料未提供 dsh plugin add github:... 一类命令,以下摘自 README。
1. 在 profile 的 package.json 中声明依赖:
# ~/.dsh/profiles/<profile>/package.json
"dependencies": { "dsh-compaction-selective": "link:<path-to-this-repo>" }
2. 在 profile 配置里加入 bundle:
"dsh": { "profile": { "bundles": [ "...", "dsh-compaction-selective" ] } }
3. 在 profile 的 node_modules 建立链接:
# Windows:
cmd /c mklink /J <profile>\node_modules\dsh-compaction-selective <path-to-this-repo>
# POSIX:
ln -s <path-to-this-repo> <profile>/node_modules/dsh-compaction-selective
重启 DSH。插件出现在 插件 / Plugins 列表,设置在其详情页;浏览器端需刷新以加载客户端 bundle。
环境要求(package.json): Node >=22;DSH 版本需满足 engines.dsh 范围,不满足时可能被安装门禁拦截(上游提供 dsh plugin allow-version 用于精确版本豁免)。
卸载: 从 bundles 与 dependencies 移除包名、删除链接、重启;若跑过本地补丁,按 patcher 写的 *.bak-* 恢复。
插件以当前 DSH 进程权限运行,安装前请自行查看仓库源码与 MIT 许可证。
配置¶
有效配置 = 内置默认 < bundle 行上的 config: < 设置文件。文件路径:~/.dsh/compaction-selective.json(也可在插件详情页编辑)。
| 键 | 默认 | 含义 |
|---|---|---|
enabled |
true |
总开关 |
minShadowedTokens |
3000 |
选择下限;低于官方「摘要须更小」校验时提前拒绝 |
maxSurfaceShare |
0.6 |
单次折叠最多覆盖可见面的比例 |
approvalTimeoutMs |
180000 |
确认卡等待时长,超时视为未确认 |
maxPerTurn |
1 |
每轮允许折叠次数 |
foldSummary |
true |
是否使用 fold 形摘要模板 |
典型用法¶
对话里用自然语言或区间¶
在会话中说明要压的区间,例如「压缩最近两轮」或「压缩 34-35 轮」。走模型工具路径时会弹出确认卡,展示精确范围、节点数与预估释放量,点击「确认压缩」后才会折叠。
面板与菜单¶
- 输入框左侧 选择性压缩 按钮:打开面板,查看会话概览、最近 1/2/3/5 轮的 token 估计、显式区间与轮次表;操作需两步确认(5 秒无操作自动取消)。
+菜单 → 指令 → 选择性压缩:与其它 DSH 指令同一位置。
界面标签随宿主语言(English / 中文);无语言信息时标签默认中文。
CLI 上启用「空闲态 + 指定区间」(可选)¶
若要在面板/菜单里直接折指定区间,在 CLI 安装上执行仓库中的补丁脚本(升级 DSH 后建议重跑,脚本在 upstream 形态变化时会响亮失败且不写坏文件):
patches/apply-compaction-patch.ps1
桌面应用因 app.asar 无法打同样补丁,请改用对话 + 确认卡路径。
适用场景与注意¶
适合: 长会话里需要减掉指定段落(尤其近期调试枝节)而不是只能压最旧内容;希望在压掉可见复述的同时保留决策与路径类信息;接受「每次折叠都要点确认」的节奏。
注意:
- 只处理已结束 turn;进行中的轮次不能选入区间。
- 与官方「摘要体积」规则一致:
minShadowedTokens等会在不满足时提前拒绝,避免无效折叠。 - 依赖 DSH 内部 slot、
compactRegion、dsh.bundle.patch、dsh.client等契约,未 API 冻结;大版本升级后重跑补丁并执行npm test更稳妥。 - 上游关于「空闲态 + 显式区间」公开 API 的讨论:deepseek-ai/deepseek-harness#discussions/12813
仓库自测命令:
npm test
结尾¶
dsh-compaction-selective 把「压哪几轮」交回给人:指定已结束区间、看清预估、确认后再折成摘要,并尽量不把人带进误操作。若你已在 DSH 0.2.x 上维护长会话,可按上文 link 安装,从对话确认卡或面板两条路径试一轮小段压缩。