dafiyu-fold
Manifest validArchive the original context before DSH compaction replaces it with a summary. Wraps the official summarize() without touching the engine.
dafiyu-fold
v1.0.0 | MIT
折之前,把要被折掉的原文存一份。
DSH 的官方上下文压缩(compaction)把一大段历史压成摘要时,只留摘要,原文就没了。 被折掉的那些话——你说的、它说的、当时为什么那么想——说得再准也找不回来。
这个插件不替换官方引擎、不改它的提示词、不动任何阈值。 它只做一件事:在官方动手之前,把这一段原文整段抄到磁盘。
它做什么
每一轮折叠发生前,你会得到一份 Markdown:
~/.dsh/fold-archive/折叠-插件-2026-10-18T06-19-18.md
里面是按角色分好的一条条消息,原样保留。摘要照旧由官方生成,你照旧在会话里看到摘要——只是这一次,原文也在。
它不做什么
- 不替换官方压缩引擎(是包一层,不是换掉)
- 不改提示词、阈值、保留量
- 不联网、不上传、不发任何东西出去
- 不动会话文件本身(折叠仍然由官方完成,它只是在旁边抄一份)
安装
一键从 GitHub 装(DSH 0.2.0 实测可用,8 秒装完 v1.0.0):
dsh plugin --profile desktop add github:cazhaniyyah603-ui/dafiyu-fold
装完还要做两件事,缺一样它都不会干活:
- 把
dafiyu-fold加进 profile 的package.json→dsh.profile.bundles数组; - 在
cordis.patch.yml里把- id: dafiyu-fold那一行写进 compaction 分组内(见下一节,这条最容易错)。
也可以手动装:把仓库目录放进插件目录,然后在 profile 的 package.json 的 dependencies 里写 "dafiyu-fold": "link:/绝对路径/到/dafiyu-fold"。
⚠️ 关键一步:必须放进 compaction 分组
这是唯一容易配错的地方,也是这个插件最值得说的一条经验。
DSH 把一个折叠服务关在 isolate 分组 里:
- id: compaction
name: cordis:group
group: true
isolate:
compaction: true # ← 服务只在这间屋子里对外开放
toolResultPruner: true
config:
- id: compaction-basic
name: '@deepseek-ai/dsh-compaction-basic'
config:
thresholdRatio: 0.22
retainTokens: 40000
isolate 的语义是:这个服务只对同一个分组里的插件可见。
所以插件那一行必须写成 compaction-basic 的兄弟:
config:
- id: compaction-basic
name: '@deepseek-ai/dsh-compaction-basic'
config:
thresholdRatio: 0.22
retainTokens: 40000
- id: dafiyu-fold # ← 放在这里
name: dafiyu-fold
写在 profile 最外层是不行的——inject(['compaction']) 会永远等不到,apply 里也读不到 ctx.compaction(会报 cannot get property "compaction" without inject)。
验证它真的在跑
看日志:
tail -f ~/.dsh/dafiyu-fold.log
正常应该是这样:
[...] apply 进来了 ✓
[...] inject('compaction') 的回调进来了 ✓
[...] inject 回调:包好了 ✓ 以后每次折叠都会先把原文落盘
看到最后一行,就说明成了。之后每次折叠都会多一个 折叠-插件-*.md。
配置
| 环境变量 | 默认值 | 作用 |
|---|---|---|
DAFIYU_FOLD_DIR | ~/.dsh/fold-archive | 原文存哪儿 |
DAFIYU_FOLD_LOG | ~/.dsh/dafiyu-fold.log | 日志写哪儿 |
它是怎么包的
ctx.inject(['compaction'], child => {
const proto = Object.getPrototypeOf(child.compaction);
const original = proto.summarize;
proto.summarize = async (input, agent, signal) => {
存档(input);
return original.call(this, input, agent, signal);
};
});
拿到活着的那台引擎,只覆盖 summarize() 这一个方法。官方引擎的其余部分一动不动。
已知限制
- 这是对内部接口的包裹(
summarize是官方引擎的子类钩子),DSH 大版本升级时可能失效。失效的表现是日志里出现没有 summarize ✗,删掉插件那一行即可,不会影响启动。 - 只留这一次调用收到的输入。如果官方引擎在一次折叠里分多轮调用,会得到多份文件——这正是想要的行为。
- 存档目录会一直变大。介意的话自己定期清理,插件不做自动删除(不替人删东西)。
更新记录
v1.0.0 — 2026-10-18
- 第一版。折之前把原文整段落盘,摘要照旧走官方。
- 只包
summarize(),不改引擎其余部分。 - 默认目录
~/.dsh/fold-archive/,可用DAFIYU_FOLD_DIR/DAFIYU_FOLD_LOG覆盖。 - 已知的配置坑(isolate 分组)已写进 README 上面那节。
- 发布前验过:五份文件无 BOM;用假引擎真调过一次
summarize,原文确实落盘、返回值原样透传。
License
MIT
Comments
Loading…
From the same category
DeepSeek Harness plugin for Reactive Resume: bridges your resumes and job applications into a Harness session over MCP.
★ 41.7k
↓ 164/wk
MIT
Aug 24, 2026
dsh plugin --profile web add dsh-plugin-reactive-resumeby Tencent
Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.
★ 9.2k
↓ 6.2k/wk
MIT
TypeScript
Oct 19, 2026
dsh plugin --profile terminal add @wxg-prc-cpg/browser-skill-dsh-pluginby dsh-market
The plugin market inside DeepSeek Harness — browse, search, one-click install · DSH 可视化插件市场
★ 7.5k
↓ 163.6k/wk
MIT
TypeScript
Oct 19, 2026
dsh plugin --profile web add dshmarketby yjh051108
dsh-routing-suite — injector + router-standard kit: install the runtime injector first, then the task-aware reasoning-mode router preset (measured P1-P23).
★ 7k
MIT
JavaScript
Sep 18, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby Q00
Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode,
★ 6.3k
MIT
Python
Oct 19, 2026
by superdesigndev
OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn
★ 5.8k
NOASSERTION
Python
Oct 20, 2026
dsh plugin --profile web add treg-dsh