DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

SunlitCrack /

SunlitCrack/dsh-compaction-threshold

Verified

DSH 插件:在插件设置卡里调会话自动压缩的触发阈值与保留比例,保存即时写进 agent preset 隔离的压缩引擎

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@14147db5

dsh-compaction-threshold

在 插件 → dsh-compaction-threshold 的配置卡里调 DSH 的会话压缩阈值,保存后即时生效,不需要重启。

设置项 默认 范围 说明
触发阈值 80% 17–90 自动压缩在已路由模型上下文窗口的百分之多少处触发
保留近期对话 16% 1–89 压缩时逐字保留的最近对话比例,必须小于触发阈值
自动压缩 开 — 关闭后不再自动压缩,手动 /compact 仍可用

例:窗口 1,000,000 的模型,触发阈值 80% → 800,000 tokens 处压缩,逐字保留 160,000 tokens。

为什么不能只改 profile 配置

DSH 内核本来就带压缩(@deepseek-ai/dsh-compaction-basic,默认 thresholdRatio = 0.8 / retainRatio = 0.16),但在 web / desktop 装配下改不到:

  • 组合里进程级那一行 compaction-basic 是被禁用的;
  • 每个 agent preset 在自己的隔离 realm 里各挂一个 BasicCompactionEngine (presets/cordis/agent.cordis.yml 的 compaction 组,isolate: { compaction: true });
  • 往 ~/.dsh/profiles/<name>/cordis.patch.yml 写同 id 行不落到会话实际用的那个引擎。

实现要点(内核 0.1.5-rc.2 实测)

  1. 取得引擎:ctx.get('agentPresets').serviceFor(agent, 'compaction') → 返回该会话所在 preset 隔离 realm 内的 BasicCompactionEngine。
  2. 改值的正确姿势是「替换整个 config 对象」,不能原位赋值:
    • Object.isFrozen(engine.config) === true,而 config 属性本身 writable: true;
    • 原位赋值在 ESM 严格模式下抛 TypeError: Cannot assign to read only property 'thresholdRatio', 被 try/catch 吞掉就等于静默什么都没做(这点极易踩坑);
    • 引擎每次决策都重新读 this.config,所以整体替换即热更新。实测替换后 45 秒回读仍是新值。
  3. 枚举存活会话用 ctx.get('agents').list(): sessionPersistence.list() 的条目形状是 { header, revision, sizeBytes }, 会话 id 在 entry.header.id 里、顶层没有 id;照顶层取会永远扫到 0 个会话。
  4. 两条落地路径:
    • 保存设置时立即扫描存活会话写入(实测 1.5 秒内引擎即为新值);
    • 每个 step 边界 ctx.on('agent/pre-step', …, { prepend: true }) 再兜底同步一次。

不改压缩算法、不碰会话日志:摘要生成、消息替换、checkpoint、持久化、溢出恢复 全部仍是官方 compaction-basic 负责。设置值持久化在设置存储(命名空间 dsh-compaction-threshold),进程重启后由 step 边界重新应用。

安装(本机 DSH Desktop)

Desktop 独占 profile 装配,dsh plugin add 在本机不可用。走本地热装配:

npm pack                                  # → dsh-compaction-threshold-0.1.0.tgz
# 解包到 D:\dsh-plugins\dsh-compaction-threshold
# dev_install_package(dir, profile='desktop')

本插件宿主半边只 import @deepseek-ai/schemastery(0.2.0 起 @deepseek-ai/dsh-settings 的 installSettingsSection / settingsNamespace 已删除,导入它们会让宿主起不来)。 link 安装的插件目录没有自己的 node_modules,因此目录内建立一个指回内核同一份的 junction(不是拷贝,避免版本偏移):

node_modules/@deepseek-ai/schemastery → <app>/dsh/node_modules/@deepseek-ai/schemastery

(<app> = 官方 Harness 安装目录,例如 D:\DeepSeek Harness\resources\app。 注意不要指向社区 Desktop 或其它副本:目标一旦被卸载/移动,悬空链接会让插件 failed to import、宿主启动报错。)

装完硬刷新页面(Ctrl+Shift+R),在 插件 → dsh-compaction-threshold 的配置卡里 即可看到本行(0.2.0 起第三方插件的配置卡在插件页,不在「设置 → 通用」)。

⚠️ 改本插件的代码后需要重启 DSH Desktop 才生效:本机 super-injector 的 dev_reload_package 拿不到 loader.internal,只会"重新装配"旧模块; 且 dev_install_package 见到已存在的 loader entry 会跳过 create。重启后由 profile 的 bundles 列表正常装配。

验证

宿主日志(%APPDATA%\DSH Desktop\logs\host\dsh-<日期>.log)里会有:

[dsh-compaction-threshold] audit-><写入路径> {"event":"applied","thresholdRatio":0.62,…}

同时会往下列第一个可写目录追加一行 JSONL 审计(dsh-compaction-threshold.jsonl): $DSH_HOME → ~/.dsh → 本插件目录。

限制

  • 只调阈值类策略;压缩范围选择、摘要质量、按模型覆盖(modelPolicies)、 摘要模型选择不在本插件范围内。
  • 只支持百分比;按绝对 Token 设阈值需要知道每个模型窗口,未做。
  • 若别处设过 retainTokens,本插件会清掉它(与 retainRatio 互斥)。
  • 某个 preset 若没有压缩组(不压缩的 preset),serviceFor 拿不到引擎,本插件对它无效。

许可

MIT。

—/ 5

No ratings yet

Verified DSH bundle

Commit 14147db523b0

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout