DSH Plugin Store
Back to home

Tyan66666

billion-context-dsh

Model-driven context management (Active Context Pruning / ACP) for the DeepSeek Harness — the model decides when and what to compress. Ported from billion-context-pi (ranxianglei); acp-kernel reused verbatim. CompactionEngine backend with compress/decompress/search_context/acp_status tools.

Stars
7
Language
TypeScript
Created
Aug 13, 2026
Updated
Aug 14, 2026
Runtime
GitHub repoHomepage

Introduction

billion-context-dsh

中文 | English

⚠️ 测试版声明——请勿用于生产环境 本项目(v0.1.6)仍处于开发中的测试版。DeepSeek Harness 本身也处于公开测试版阶段。请勿将两者用于工程化 / 生产环境——预期会有破坏性变更与粗糙之处。

衷心感谢以下项目——请给它们一个 ⭐:
DeepSeek Harness · billion-context-pi · acp-kernel · opencode-acp

Billion-Context for DeepSeek Harness
由模型决定何时压缩、压缩什么——而不是一个硬性上限。


npm license GitHub dsh-plugin

npm install billion-context-dsh


为什么?

当对话变长,模型会耗尽上下文。多数工具直接硬截断——悄悄丢弃早期消息。billion-context-dsh 给模型一个 compress 工具:由 LLM 决定何时压缩什么,写成高保真摘要,保留关键细节(文件路径、决策、错误信息)的同时回收上下文空间。

与 DSH 内置的自动压缩(用自动生成的摘要替换一段范围)不同,billion-context-dsh:

  • 模型驱动 —— 摘要由模型自己书写,没有第二次 LLM 摘要调用(ACP 的成本优势)
  • 只建议、不强令 —— 自动策略只 nudge(提醒),是否压缩、何时压缩由模型决定
  • 持久且可恢复 —— 压缩范围成为 checkpoint 节点,原文保留在 append-only 会话日志中;decompress 可恢复,search_context 可在块内查找
  • 基于 seq 引用 —— 不需要消息标签;surface seq 由 nudge 的范围表携带,范围边界自动平衡、容忍 #callId 片段

这是 billion-context-pi(Pi 编码代理适配器)在 DeepSeek Harness 上的移植:压缩内核(acp-kernel)原样复用,适配层针对 DSH 的 durable-surface 模型重写——经过验证的映射关系见 docs

安装

💡 想让 DeepSeek Harness 帮你装? 本仓库本身就运行在 DSH 上:把 docs/INSTALL.md 交给会话里的 agent,它会读取指南、解析 你的 profile、编辑组合配置并验证挂载。前提:① 配置写在 ~/.dsh 下,需要 你批准一次文件权限;② 装完让它调用 acp_status 自证。

npm install billion-context-dsh

就这样。然后在需要压缩后端的位置加组合配置——两种范围,按需选择:

全局生效(host 平面,所有模式)——推荐。在你的 profile 补丁(如 ~/.dsh/profiles/web/cordis.patch.yml)中追加:

# ACP 作为全局压缩后端:四个模型工具 + `/acp` 命令 + nudge + ACP 提示词段,
# 对所有模式(standard / code / minimal / cordis / 自定义预设)生效。
# 必须同时禁用 host 的 compaction-basic:同一 realm 内两个后端同时
# provide `ctx.compaction` 会冲突。
- id: compaction-basic
  disabled: true

- insert:
    - id: compaction-acp
      name: 'billion-context-dsh'
      config:
        modelContextLimit: 128000   # 可选;省略时自动探测模型真实窗口(回退 128000)

单模式生效(agent preset 的 compaction realm)。先在该 realm 内禁用(或删除)原有的 dsh-compaction-basic,再插入本引擎——同一 realm 内两个后端不能并存:

# 先禁用 realm 内默认后端(或直接删掉这一行)
- id: compaction-basic
  disabled: true

# 再插入本引擎
- id: compaction-acp
  name: 'billion-context-dsh'
  config:
    modelContextLimit: 128000   # 可选;省略时自动探测模型真实窗口(回退 128000)

每个 agent 只留一个上下文管理器。 两个后端同时 provide ctx.compaction 会冲突——同一 realm 内切勿并存。完整安装与验证指南见 docs/INSTALL.md

工作原理

DSH 的每个模型请求都派生自其 append-only 会话日志(surface)。ACP 语义直接映射到这一模型:

ACP 概念DSH 实现
compress 工具遮蔽一段范围持久化 surfaceOp: { op: 'replace' }——模型书写的摘要成为 checkpoint 节点;原文保留在日志中
refs(m00001 标签)surface seq,由 nudge 的可压缩范围表携带
nudge("考虑压缩一下")由内核的压力决策在 agent/pre-step 注入——简短建议,绝非命令
decompress从日志只读恢复被遮蔽的原文
search_context对从日志重建的块摘要与原文打分
acp_status块账本与上下文压力
块状态内存内核状态 + 日志重建账本(无旁车文件)
分层蒸馏(T2/T3)再次压缩某块的摘要节点 = 蒸馏该块(tier 2),蒸馏 tier-2 块得 tier 3;tier 与内核块 id 持久化进日志,重启后内核状态从日志再水合、可继续蒸馏

承载性的压缩指引(工具、哲学、摘要规则)注册为一次性系统提示段,因此 nudge 保持简短。刻意不做自动摘要:自动策略只 nudge 模型(compactIfNeeded 返回 null)。

视频讲解

本项目继承的 ACP 哲学讲解——主动上下文压缩如何在约 20 万 token 内保持会话精简(opencode-acp 与 billion-context-pi)。视频原作者:裘香莲(B 站 UP 主),非本项目制作。

在 B 站观看

模型工具

工具作用
compress用你书写的紧凑摘要替换 seq 范围(边界自动平衡到 tool-call/result 配对点);对某块的摘要节点再次压缩 = 分层蒸馏(tier 2/3)
decompress恢复已压缩块的原始内容(只读)
search_context按关键词搜索压缩块摘要与原文
acp_status上下文占用、压缩块、可压缩范围
/acp从命令栏执行 status / compress / decompress

上游项目与致谢

本项目是一个移植/派生项目,站在以下上游工作的肩膀上——全部为 MIT 许可。衷心感谢 ranxianglei 和 DeepSeek Harness 团队创建并开源这些项目:

上游项目作者角色
billion-context-piranxianglei本项目移植的 Pi 编码代理适配器;适配器设计、工具语义与本项目默认配置的来源
acp-kernelranxianglei框架无关的上下文压缩引擎——原样复用(refs、blocks、tiers、nudge 决策、search、status)
opencode-acpranxiangleiACP("模型决定何时压缩、压缩什么")设计的源头
DeepSeek HarnessDeepSeek AI本项目所扩展的宿主平台(compaction 能力接缝、agent preset、持久化会话日志)

本项目原样复用 acp-kernel 的压缩内核与 billion-context-pi 的默认行为;DSH 适配层(会话事件投影、持久化表面事务、模型工具、nudge、配置)为本仓库原创。上游版权与许可归其各自作者所有;本项目的许可条款见 LICENSE

配置

默认值含义
modelContextLimit自动探测(回退 128000用于内核压力决策的上下文窗口;显式配置时优先且跳过探测
autoModelContextLimittrue从模型 API 自动探测真实窗口(agent.ctx.llm.resolveModelInfo);探测失败回退默认值,acp_status 展示窗口来源
nudgeMinContextLimitPct内核默认 0.45Nudge 窗口下界(用量占比)——仅作配置校验,增长路径的触发没有百分比下限——与 billion-context-pi 相同的默认值
nudgeMaxContextLimitPctengine 默认 0.70(内核/pi 默认 0.75过限线:超过此值则无论增长与否都触发 nudge——刻意低于宿主 compaction-basic 的 80% 自动压缩线,保证强制 nudge 先触发;显式配置优先
nudgeEmergencyThresholdPctengine 默认 0.85(内核/pi 默认 0.95紧急 nudge(绕过每轮去重)——从 0.95 下调:95% 时模型已无操作空间且会被 80% 自动压缩线遮蔽;显式配置优先
coreOverrides任何其他 acp-kernel Config 覆盖(billion-context-pi 的 coreOverrides 逃生口)
autoToolstruectx.tools 注册四个模型工具
autoCommandtruectx.commands 注册 /acp 命令
autoNudgetrue当内核建议时向 agent/pre-step 注入 nudge

开发

npm install
npm run typecheck   # 严格 TS
npm test            # node --import tsx --test tests/*.test.ts
npm run build       # tsup 打包(内联 acp-kernel)+ .d.ts

dist/index.js 自包含,仅外链 @deepseek-ai/* 接缝包(由宿主部署提供)。

架构

src/
├── index.ts        # AcpCompactionEngine(CompactionEngine 后端)+ 接线
├── messages.ts     # M1: 会话事件 ↔ acp-kernel CoreMessage 投影
├── state.ts        # M2: 每会话内核状态
├── region.ts       # M5: 持久化区域事务 + 日志重建块账本
├── tools.ts        # M3: compress / decompress / search_context / acp_status
├── nudge.ts        # M4: 内核压力决策 → 注入的建议式 nudge
├── system-prompt.ts# M4: 一次性 ACP 指引段(让 nudge 保持简短)
├── config.ts       # 内核配置组装(阈值 + coreOverrides)
└── commands.ts     # M4: /acp 斜杠命令

License

MIT