DeepSeek Harness 插件

dsh-dcp-fan56

Deterministic context-pruning compaction backend for dsh (DeepSeek Harness) — zero-LLM summaries, /dcp command, works out of the box. Design references Opencode-DCP/opencode-dynamic-context-pruning.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
fan56/dsh-dcp
最近更新
2026年8月20日
分类
工具与能力
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/fan56/dsh-dcp
插件名:dsh-dcp-fan56
作者:fan56

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.md来源说明 · 只读预览
README 语言

dsh-dcp

dsh(DeepSeek Harness)的确定性压缩后端:上下文压缩不调 LLM,开箱即用。

> 简体中文 · English

为什么做

dsh 默认的压缩(compaction-basic)每次压缩都要让模型把旧对话重新总结一遍——费 token、慢、结果还不稳定。我们参考 opencode 社区的 opencode-dcp(去重、清错、"技术摘要代替散文"),做了一个纯代码版本:

  • 零 LLM 调用:压缩本身不消耗任何额外 token
  • 输出稳定:相同对话永远得到相同摘要
  • 中文友好:用户原话/路径/命令/报错逐字保留,按 CJK 真实密度计价
  • 继承官方全部安全机制:触发、保留尾巴、事务锁、tool-pairing 边界都复用 dsh 官方实现(只替换"摘要"这一环)

效果

与官方默认压缩的对比

官方 compaction-basicdsh-dcp
摘要方式每次调 LLM 重写确定性代码抽取
每次压缩的模型调用1 次0 次
输出稳定性同对话多次可能不同相同输入永远相同
摘要内容语义归纳逐字保硬信息(路径/命令/报错/待办/用户原话)
中文依赖模型转写原样保留 + CJK 计价
触发/保留/溢出/安全官方继承官方,完全相同
检查点格式官方兼容(可互相合并)

设计上还吸收了 opencode-dcp 的思路(去重、清错、/dcp 命令、技术摘要),但按 dsh 的压缩接口重新实现——它服务于 opencode,dsh-dcp 服务于 dsh。

CJK 适配

内容逐字保留、不做英文转写;token 计价按 CJK 真实密度(中/日/韩/全角约 2 字符/token),不沿用宿主"4 字符/token"对中文的低估——中文会话的摘要预算反映真实成本,不会被饿死,信息更密集。

真实 dsh 会话实测

一段约 8 万 token 的历史压成约 700 token(~100x),全程零 LLM 调用;缓存命中率几乎不变(压缩后总会有一个"冷请求",任何后端都一样)。

真实会话里压缩出的检查点(中文内容逐字保留):

## Primary Request and Intent
- 帮我把登录页的重定向 bug 修掉

## Files and Code
- /app/src/auth/login.ts — W×1 R×1

## Errors and Fixes
- bash: FAIL src/auth.test.ts

## Pending Jobs
- add regression test

## Critical Context
- dsh-dcp 确定性压缩了 12 条消息 / 8 次工具调用(未调用 LLM 摘要)

Not in scope

  • 不做语义归纳:不"理解"代码,只保留"出现过的事实"。需要深度语义摘要的场景,请继续用官方 compaction-basic
  • dsh 已经有的我们不重复做

- 工具结果剪枝(compaction-tool-result-pruner,确定性按大小剪) - 触发策略、保留尾巴、溢出恢复(直接继承官方;本插件仅新增轮数触发,见上) - /compact 命令、UI 检查点卡片(dsh 自带)

安装

推荐:配合我们的 dsh-tui-pi 用(tui 已依赖 dsh-dcp):

npm i @aiwayds/dsh-tui-pi
dsh plugin add @aiwayds/dsh-dcp     # 激活 dcp,bundle 自动挂载

独立使用

npm i @aiwayds/dsh-dcp
npx dsh-dcp-setup                   # 安全脚本:带日期备份 → 只追加 → 幂等判断,不碰你已有的配置

> dsh-dcp 挂在 dsh 的压缩接口上,只对挂载了它的 profile 生效。web profile 没挂 tui,继续用官方压缩,不受影响。

/dcp 命令

命令作用
/dcp状态:配置、压缩次数、省下的 token
/dcp compact立即压缩(零 LLM)
/dcp set <k> <v>会话内调参,并提示如何持久化

可调键:deduppurgeErrorsmaxItemsmaxItemCharsmaxSummaryTokenslanguagetokenEstimatethresholdRatioroundIntervalnotice

/dcp 状态还会列出每个发生过压缩的会话(per-session 概览,含子代理),例如 per-session: session-1 (2 compactions, ~444 tokens), child (1 compaction, ~22 tokens)。压缩按会话独立计数;已销毁的会话(含 one-shot 子代理)自动从概览消失;列表封顶一行(最多前 10 个会话,超出显示 +N more)。

触发条件

触发时机说明
压力触发每步请求前token ≥ thresholdRatio(继承上游默认 0.8;本插件 bundle 挂载默认 0.7,见配置表)× 上下文窗口
溢出恢复模型报 context 超限时继承官方
轮数触发会话每收到 roundInterval 条 assistant message本插件新增;一条 = 一次 LLM 往返(每轮工具迭代各算一条,one-shot 子代理也能触发)。默认 50:第 50 条后触发第一次,之后每 50 条一次(100、150……);任何一次压缩(含压力触发)都会重置轮数时钟。到达条数后的第一个空闲点触发(阈值之下也压)。0 关闭;需保持 auto: true(默认开)
手动/dcp compact/compact随时可用
  • subagent 同样生效:进程内 subagent(含 continuable 与 one-shot 子代理)走同一套事件分发,压力/溢出/轮数触发对子会话独立计数、独立触发。轮数触发按 assistant message 计数,所以全程只有 1 个 turn 的 one-shot 子代理(多次工具迭代)也能触发。
  • 压缩可见性:每次压缩成功后,会话里追加一行 dcp: 已压缩 N 条历史(约 X tokens,触发方式) 通知行(前端渲染为折叠行)。注意该行也会作为上下文随请求发给模型(每次压缩约 15–25 tokens),且 0.4.0 起默认开启notice: false 可关闭。/dcp 的 stats 持续累计(压力触发的多次 region 提交各计一次)。

配置

全部可选,默认即用:

默认说明
thresholdRatio0.8压力触发阈值(继承上游 compaction-basic 默认 0.8;本插件 bundle patch 挂载时默认 0.7,中文场景建议 0.7)
roundInterval50每 N 条 assistant message(一次 LLM 往返)触发一次压缩(0 关闭)。默认 50:50、100、150……每次压缩后重数
noticetrue压缩后在会话中追加一行通知
languagezh摘要语言;zh 额外识别中文报错和"待办:"
tokenEstimatecjkCJK(中/日/韩/全角)按 ~2 字符/token 计价;ascii 与宿主一致
deduptrue标注重复工具调用
purgeErrorstrue旧报错折叠成一条提示
maxItems / maxItemChars10 / 200摘要密度
maxSummaryTokens2048摘要 token 预算

> 升级提示(0.5.0)roundInterval 的计数单位由 completed turn 改为 assistant message——同值下触发会更频繁(一个 turn 内往往有多条 assistant message)。

设计参考

开发

npm install && npm test     # 65 个用例:抽取/压缩/命令/配置/触发/安装脚本

License

MIT