🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

空闲自动压缩 fpm0312/dsh-auto-compact

DeepSeek Harness
fpm031218 天前有提交已提供中文文档扫描:含敏感能力

会话空闲且上下文超阈值时自动压缩历史

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add fpm0312/dsh-auto-compact
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/03·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 18 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
  • 写入本地文件
    lib/index.js:542
    mkdirSync(dirname(statusPath), { recursive: true });
  • 写入本地文件
    lib/index.js:544
    writeFileSync(temp, JSON.stringify(payload, null, 2) + "\n", "utf8");
  • 写入本地文件
    lib/index.js:545
    renameSync(temp, statusPath);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 插件:上下文超过 45% 且静默 3 分钟时自动压缩会话历史

README

由 DeepSeek 最新模型翻译生成
dsh-auto-compact DeepSeek Harness 插件:上下文占用超过 30%、且对话 3 分钟没有动静时,自动压缩会话历史。 阈值、静默时长、巡检间隔、冷却时间都可配置。 EN — 一个 DSH 宿主插件:只要会话的上下文占用超过阈值(默认 30%)且对话已经空闲一段时间(默认 3 分钟),就自动压缩该会话。零运行时依赖;它只决定何时压缩,实际摘要交给官方 @deepseek-ai/dsh-compaction-basic 后端,通过 /compact 完成。 它解决什么问题 DSH 自带的自动压缩只在「回合进行中、跑到模型上下文阈值(默认 80%)」时才触发。 长会话往往在回合结束时停在 60%~80% 之间,之后你放着不动,下一句话照样要带着一坨旧历史进请求:首 token 慢、贵,还容易在再聊几轮后直接顶到上限。 这个插件补上「空闲期」这一段:只要某个会话已经静默够久,且上下文占用已过线,它就在后台把旧历史压成一条 checkpoint,等你回来时上下文是干净的。
展开完整文档(README 剩余 1 节)
dsh-auto-compact

DeepSeek Harness 插件:上下文占用超过 30%、且对话 3 分钟没有动静时,自动压缩会话历史。

阈值、静默时长、巡检间隔、冷却时间都可配置。

EN — 一个 DSH 宿主插件:只要会话的上下文占用超过阈值(默认 30%)且对话已经空闲一段时间(默认 3 分钟),就自动压缩该会话。零运行时依赖;它只决定何时压缩,实际摘要交给官方 @deepseek-ai/dsh-compaction-basic 后端,通过 /compact 完成。

它解决什么问题

DSH 自带的自动压缩只在「回合进行中、跑到模型上下文阈值(默认 80%)」时才触发。
长会话往往在回合结束时停在 60%~80% 之间,之后你放着不动,下一句话照样要带着一坨旧历史进请求:首 token 慢、贵,还容易在再聊几轮后直接顶到上限。

这个插件补上「空闲期」这一段:只要某个会话已经静默够久,且上下文占用已过线,它就在后台把旧历史压成一条 checkpoint,等你回来时上下文是干净的。

判定规则

每个巡检周期(默认 15s)对每个存活会话依次检查:

| 条件 | 说明 |
| agent.status === "idle" | 回合正在跑时绝不介入,不和进行中的对话抢状态 |
| 静默 ≥ idleMs | 会话日志事件、agent 状态变化、收件箱投递都会刷新「最后活跃时间」 |
| 上下文 ≥ thresholdRatio | 取 token-meter 的上下文投影(与界面显示的百分比同源) |
| 距离上次尝试 ≥ cooldownMs | 成功、失败、跳过都计入冷却,避免反复打扰模型 |
| 不在压缩中 | 单个会话同时只允许一次自动压缩 |

命中后调用官方压缩链路,把可压缩的历史压成一条 checkpoint。压缩本身产生的事件会刷新活跃时间,所以不会连环触发。

安装

方式一:从 tgz 安装(推荐)

dsh plugin --profile desktop add file:C:/Plugins/dsh-auto-compact-0.1.0.tgz

方式二:从源码(GitHub)

git clone https://github.com/fpm0312/dsh-auto-compact.git
cd dsh-auto-compact
npm pack
dsh plugin --profile desktop add "file:$PWD/dsh-auto-compact-0.1.2.tgz"

PowerShell 里最后一行写成:

dsh plugin --profile desktop add "file:$((Get-Location).Path)\dsh-auto-compact-0.1.2.tgz"

开发调试可以直接用 link: 挂目录(改动免重装,但需要重启应用让宿主重新 import):

dsh plugin --profile desktop add "link:$PWD"

方式三:手工挂载(等价)

1. 把本包放进 profile 的依赖里(~/.dsh/profiles/desktop/package.json): "dsh-auto-compact": "file:C:/Plugins/dsh-auto-compact-0.1.0.tgz"
2. 在同一个文件的 dsh.profile.bundles 里追加 "dsh-auto-compact"。
3. 在 profile 目录执行 pnpm install。

本包自带 cordis.patch.yml(dsh.bundle.patch),安装后会把 auto-compact 一行插进配置树,不需要手改 cordis.patch.yml。桌面端的 profile 监听会在 package.json / patch 变化时热重载插件树;否则重启一次应用即可。

配置

配置写在插件行上(profile 的 cordis.patch.yml,或直接用上面的 config 段覆盖):

- id: auto-compact
name: dsh-auto-compact
config:
thresholdRatio: 0.30 # 上下文占用阈值(占模型上下文窗口比例) idleMs: 180000 # 静默多久算“没动静”(毫秒) pollMs: 15000 # 巡检间隔(毫秒) cooldownMs: 300000 # 两次尝试之间的最小间隔(毫秒) minTokens: 0 # 低于这个绝对 token 数不压缩 compactTimeoutMs: 600000 # 单次压缩超时 dryRun: false # true = 只记录“本该压缩”,不真的压 statusFile: true # 心跳状态文件;false 关闭,或给绝对路径 via: auto # auto | service | command verbose: true # 是否输出 info 日志

via 是什么

压缩后端挂在每个 agent preset 的隔离作用域里,宿主平面拿不到 ctx.compaction。
插件按以下顺序找通道:

1. service:agent.ctx.get("compaction") 能拿到就直接调 compactNow();
2. command:拿不到就执行内置的 /compact 命令 —— 同一条官方压缩链路,会在会话日志里留下 command/run + command/done,界面上可见。

auto(默认)先试 1 再退 2;service / command 可以强制只走某一条。

可观测性

- 心跳文件:默认 ~/.dsh/auto-compact.status.json,每次巡检后刷新。文件里有每个会话的 totalTokens / contextWindow / ratio / reason / lastAction,一眼就能看出「这次为什么没压」。
- 命令:/autocompact 查看当前会话的占用与判定;/autocompact now 立即评估一次(跳过静默等待,但仍受阈值与冷却约束)。
- 日志:前缀 [auto-compact],info 级汇报压缩结果,warn 级汇报真故障;「agent 忙 / 被取消」这类正常竞争只记 info。

设计取舍

- 只做决策,不重写压缩:真正的摘要、写 checkpoint、替换 surface 全部交给 @deepseek-ai/dsh-compaction-basic,插件只负责「什么时候该压」。
- 零 @deepseek-ai/* 依赖:安装成 tgz 后不需要解析宿主的 peer 依赖,宿主升级也不会因为类型/内部实现变化把插件带崩。
- 空闲优先:绝不压缩正在跑的回合。压缩是重活(要调一次模型),空闲期做最划算。
- 百分比与界面同源:优先读 token-meter 的 contextPressure 投影(pressureTokens + surfaceTokens - sampledSurfaceTokens),拿不到才退回 measure().totalTokens 估算。

开发

node --test test/auto-compact.test.mjs # 16 个用例:决策矩阵 + 假宿主集成
node --check lib/index.js
npm pack # 产出 tgz

test/ 里用假宿主驱动 apply(),覆盖:静默判定、阈值边界、运行中不介入、事件刷新计时、冷却、dryRun、命令兜底、投影优先、心跳文件、/autocompact。

已知限制

- 只对空闲会话生效;回合进行中的压力压缩仍然交给 compaction-basic 自己的阈值(默认 80%)。两者互补,不冲突。
- 压缩会真实调用一次模型(摘要),会计费;cooldownMs 就是为此存在的。
- 如果 profile 里根本没有挂载任何压缩后端,/compact 也不存在,插件会如实报 missing 并在心跳文件里留痕,不会静默失败。
预览分享卡片长什么样 ↓fpm0312/dsh-auto-compact
分享 · DeepSeek Harness Hub
fpm0312/dsh-auto-compact

会话空闲且上下文超阈值时自动压缩历史

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部