DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

k-ying /

k-ying/manualcompact-billion

Verified

Keep DSH's native /compact (manual compaction) while billion-context keeps automatic compression.

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

manualcompact-billion

让 dsh 的原生手动压缩 /compact 回来,同时不动 billion-context 的自动压缩。

它解决什么

装了 billion-context 之后,dsh 里的 /compact 会消失。原因不是 bug:billion 带了一个 bili-compaction-gate 插件,它在配置解析阶段把两个包改成 disabled: true:

  • @deepseek-ai/dsh-compaction-basic(压缩后端)
  • @deepseek-ai/dsh-command-compact(/compact 命令)

于是 dsh 既没有自动压缩,也没有手动压缩——而 billion 自己的压缩方案在部分场景(非标准线路、拦截没生效)下并不工作,你就落到「两边都没有」的境地。

这个插件把这两条重新打开,并且把后端钉成 auto: false:只手动,不自动。billion 继续管它的自动压缩,两边互不抢。

原理

dsh 的配置解析是一条 waterfall(洋葱模型):每个监听者调用 next() 拿到下游结果,还能再改。billion 的 gate 挂在链上做禁用。

本插件用 { global: true, prepend: true } 注册在最外层:

我们的钩子(最外层)
  └─ billion 的 gate(禁用两个包)
       └─ 基础配置(两个包原本是启用的)
  ← gate 返回「已禁用」
← 我们收到「已禁用」,改回「启用 + auto:false」

因为最外层的返回值才是最终结果,所以我们的修改生效,而 gate 自己完全不知道。

它只改三种值:两个 disabled: true → false,一个 config.auto = false。不碰 billion 的包、代理、gate,也不注册任何服务。

一个刻意的限制:只在被禁用时才动手

如果配置里没有任何被 gate 禁用的行(比如你哪天卸了 billion),插件直接原样返回,连 auto 都不碰。这样它不会在你卸掉 billion 之后,悄悄把你的自动压缩关掉。

安装

方式一:从 GitHub 一键安装(推荐)

dsh plugin --profile web add github:k-ying/manualcompact-billion

web 是 dsh 的默认 profile,绝大多数人用的就是它。dsh 会把 github:owner/repo 转成真实 Git 地址拉取安装,cordis.patch.yml 随包自动挂载,不用手改配置。

先确认你该装到哪个 profile

dsh 的插件按 profile 隔离,装错 profile 等于没装。三个办法确认:

# 1) 看这台机器上有哪些 profile
ls ~/.dsh/profiles

# 2) 看某个 profile 里已经装了什么
dsh plugin --profile web list

# 3) 看这个 profile 的插件配置文件在哪(装完就写在这里)
ls ~/.dsh/profiles/web/cordis.patch.yml

对照着选:

你的情况 profile 名 配置文件
命令行 dsh,或浏览器打开的 Web UI web(默认) ~/.dsh/profiles/web/cordis.patch.yml
桌面版应用(Tauri 打包的那个) 一般是 tauri ~/.dsh/profiles/tauri/cordis.patch.yml
自己建过别的 你起的名字 ~/.dsh/profiles/<名字>/cordis.patch.yml

不确定的话先跑 ls ~/.dsh/profiles:里面没有 tauri 目录,就说明你用的是 web。桌面版对应:

dsh plugin --profile tauri add github:k-ying/manualcompact-billion

想锁定版本可以带 tag:

dsh plugin --profile web add github:k-ying/manualcompact-billion#v0.1.0

方式二:本地目录安装

dsh plugin --profile web add ~/Documents/AI/manualcompact-billion

(把 web 换成你自己的 profile 名即可。)

方式三:手写 patch 条目

不想走插件管理器,也可以在 profile 的 cordis.patch.yml 里手写一条:

- id: manualcompact-billion
  name: 'file:///path/to/manualcompact-billion/index.js'

装完都要做的一步

完全退出 dsh 再打开(不是关窗口)。配置是启动时算出来的,热改不会重新走一遍 waterfall。

验证

重启后,随便开一个会话:

  • 敲 /compact,应该能压(或回「没有可压缩的历史」——那也说明命令活着)。
  • 失败的样子:命令面板里没有 /compact,或报「没有压缩后端」。

日志里搜 manualcompact-billion: 会看到一行自检:

manualcompact-billion: native compaction restored (command×1, basic×1, groups×2, auto=off)

没这行,说明插件没加载,或者配置里根本没有被禁用的行。

开关

环境变量 作用
MANUALCOMPACT_OFF=1 插件完全让位,什么都不改
MANUALCOMPACT_ALLOW_AUTO=1 不钉 auto: false,保留你原来的自动压缩设置(会和 billion 抢历史,不建议)

卸载

dsh plugin --profile tauri remove manualcompact-billion

重启即可。没有任何持久副作用:配置是每次启动时算出来的,插件不在就恢复原样。

风险与限制

  • 它逆着上游的假设走。 billion 的设计是「我接管了就不许宿主压」,没有「接管失败时放行」这一档。本插件补的正是这个缺口,但上游不保证兼容。
  • billion 真有压缩动作时,你手动 /compact 会让会话历史变化,billion 下一次请求发现增量对不上,会触发一次全量 resync:多一个冷请求、缓存命中掉一格。是费用和速度的损失,不是数据损坏。
  • 它不解决「billion 能不能压某个供应商」的问题。Command Code 那类非标准线路该不压还是不压。
  • 上游改包名或事件名时插件会静默失效(/compact 又消失),但不会弄坏 dsh。失效时把 BASIC_PACKAGE / COMMAND_PACKAGE 改一下即可。

开发

npm test

14 条用例,覆盖:配置转换、嵌套 group、幂等、不改原对象、以及用假 ctx 模拟 waterfall 验证「prepend 确实压在 gate 外层」。

—/ 5

No ratings yet

Verified DSH bundle

Commit 01b3cf4a90f5

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