54shitaimzf/dsh-price-less

dsh-price-less

DeepSeek Harness 的上下文管家:替你记住“现在在干嘛”,自动整理送进模型的上下文——该留的留、该删的删、拿不准的不动,让 AI 编程长会话不跑偏,每个 token 都花在刀刃上。

待分类ai-agentcoding-agentcontext-engineering
dsh-price-less —— 官方鲸鱼与上下文 token 消耗环

dsh-price-less

DeepSeek Harness 上下文管理插件

留下无价的想法,省去有价的过程。

English · 中文


先读这个:依赖要求与实验状态

⚠️ 本插件是实验性的、未发布的,且依赖打过补丁的 harness。 它不是生产可用软件。它会改写会话历史,依赖一个尚未进入上游的 harness 补丁, 触发行为仍在真实会话上验证。安装前请先读完本节。

硬依赖

#依赖缺失后果
1一份本地的 DeepSeek Harness 源码 checkout致命。 没有已发布的 npm 包,也没有 tarball——必须对着你自己的 harness 树从源码构建(DSH_CHECKOUT=… npm run build)。别人机器上的绝对路径在你这里不成立。
2带本地 ignorable 通道 补丁的宿主(会话包里的 SESSION_LOG_INTENT / LogIntent)静默降级。 事实不再写成真正的会话事件,而是退回 KV 镜像表(fact_mirror),于是事实轨在回放与导出中不可见。这个补丁不在上游——原版 DSH 宿主没有它。
3surfaceOp 端点名与会话格式与基线一致的宿主(格式 v3、{startSeq,endSeq})构建期致命。 src/platform/history.ts 里有一道编译期锚,宿主漂移时会故意变红。不要去消红——改它旁边那个常量。
4Node 20+、dev_inject_plugin 与一次 DSH 重启重新编译出的 lib/ 只有在宿主重启后才生效。
5你自己的辅助模型路由(可选、默认关闭)判别、/init、星标断面与边界压缩会调用辅助模型:真实 API 花费,且提示词内容会送到你配置的服务商。不开启就不会有任何调用。

实验状态——哪些没有保证

  • 真实场景验证很薄。 R1–R4 是"施工完成"(代码写完、npm run gate 全绿),不是"规模化验证过"。真机回放里边界压缩只成功触发过 1 次;触发链仍在调,判别器 task 粒度在 2026-09-11 又改了一版(v5)。本 README 里的数字会变。
  • 行为会随提交变化。 task 粒度、触发阈值、提示词契约都在改。每次改动都留账本快照(docs/ledger-history.md);本 README 的任何数字都是某个时点的快照,不是承诺。
  • 它会改写你的会话历史。 压缩通过 harness 的 replace API 重写消息区间。每条路径都有守卫(失败惰性:拿不准就什么都不改),但这仍是一个上下文插件能做的风险最高的事——首次使用前请备份 ~/.dsh/sessions。
  • 它绑定在特定宿主构建上。 验证最充分的配置是某个本地 harness 版本,而不是发布版。升级 harness 可能无声地把插件弄坏——照 docs/14-upstream-upgrade.md 走。
  • 省 token 是目标,不是承诺。 没有公开的逐会话成本基准;全部开启时,辅助调用可能比省下的还贵。
  • 没有支持承诺。 单人维护、无发布流程、无兼容矩阵、无弃用政策。MIT,无担保。

目录

项目介绍

AI 编程会话越长越贵,也越容易跑偏。dsh-price-less 是非官方的 DeepSeek Harness 上下文管家:它替你记住“现在在干嘛”,把送进模型的上下文整理得更瘦,拿不准的绝不动刀——让每个 token 都花在刀刃上。

  • 显式大任务(task):/task 一句话告诉插件现在在干嘛;开新任务、收尾旧任务,始终由你拍板
  • 项目档案(project frame):/init 一问一答生成项目背景卡,模型始终带着“这是个什么项目”干活
  • 自动识别:判断每条消息是延续当前大任务,还是开了新的大任务——先关键词规则,拿不准才请轻量模型
  • 星标按钮 / 提示词优化器:一键把当前意图整理成确定化的执行包,先给你预览、确认后才生效
  • 工具剪切:写时整形工具输出、剪掉被后续写入超越的旧读、冲刷已经结束的追问/验证 run
  • 压缩器:把闭合的 task 折叠进带热尾的版本化档案,另有 35% 窗口压力路径与防溢出保险丝
  • 只记账、可回放:插件每个动作都留下可回放的事实日志;任何失败都“不动刀”,绝不弄丢你的内容

它是怎么工作的

一句话:你只管说“现在在干嘛”,插件负责把上下文整理瘦;拿不准的,一律不动刀。

四层防御按“什么时候动手”从早到晚排开:

flowchart LR
    A["① 写时整形<br/>工具结果入账前"] --> B["② 交换对剪切<br/>task 进行中"]
    B --> C["③ 压缩<br/>task 闭合 / 窗口到 35%"]
    C --> D["④ 恢复<br/>会话重启"]
层什么时候动手动什么绝不动什么
① 写时整形工具结果入账前只整形“过程日志”(≥120 行且 ≥16 KiB)失败信息、列表、数据查询一律原文
② 交换对剪切task 进行中被后续写入覆盖的旧读、声明表读件、已结束的追问/验证 run结论会落成一条通知,原始结论不丢
③ 压缩task 闭合,或主模型窗口用到 35%把旧内容折成“档案(总分)+ 热尾(最近逐字事实)”错误不进热尾;档案只存总分;热尾条目仅在内容不能自证位置时才带“路径@版本:行号”定位标注
④ 恢复会话重启 / resume重放卷宗与档案,用纯函数重算状态不调模型、不改历史、只降级不臆造

三条底线贯穿全部四层:

  • 失败方向 = 保留:判据不成立、解析失败、超时 → 不剪、不替换、不回填。
  • 剪点必须在结果入账前定死:不依赖模型回应,也不用行为信号(那会打断缓存、反而更贵)。
  • 带外原则:插件内部标志永远不进模型视野,模型只看到整理后的内容。

想看每次动作花了什么,读 logs/context-economy.log;想复盘历史账本,见 docs/ledger-history.md。

当前状态

区域状态
R1 平台底座(事件、存储、技能目录、模型调用、历史改写、工具)已完成
R2 识别与优化核心(P8–P14d:大任务边界、项目档案、自动识别、提示词优化器、星标按钮)已完成
R3 剪切(写时整形、T0/T0-R、run 冲刷)已完成
R4 压缩(边界装配、热尾、压力路径、保险丝、恢复编排)已完成
新构建生效需要重启 DSH 加载重新构建的 lib/
npm / tarball 发布尚未发布

重要:自动识别默认关闭,需要显式设置 discriminator.auto = true 才会启用。工具剪切(shear.enabled)与两条压缩路径默认开启。所有事实只记账;任何失败都不改动内容。

核心特性

  • 大任务边界:/task、/task close、/task——把连续的工作切成一段段边界清晰的大任务
  • 项目档案:/init 提案 → 你确认 → 写入项目档案 v1(project_frame)
  • 自动识别:显式指令 → 零成本关键词规则 → 比对过往判定 → 轻量模型兜底;任何一步拿不准就保持原样(fail-lazy)
  • 提示词优化器 + 星标按钮:/optimize-prompt 与星标按钮共用同一断面;产物 = 关键事实逐字保留 + 大胆重写,先预览后生效
  • 工具剪切:写时整形(只碰过程日志)、被写超越的旧读、声明表读件修复、结束的追问/验证 run 冲刷
  • 压缩器:task 边界折叠进版本化档案 + 热尾;35% 窗口压力路径;防溢出保险丝;会话启动恢复
  • 工作区隔离:档案/前缀键按会话工作区(header.cwd)隔离
  • 只记账、可回放:context-economy/* 事件全部 log-only、ignorable;通道缺失时自动降级为 KV 事实镜像

架构

架构

图源 = docs/architecture.zh-CN.svg(英文版 architecture.svg)。实线 = 已实现;虚线 = 待验证方向。图上每个盒子就近标注了对应的修正编号。

分层职责

从上往下是一条数据流,从下往上是“谁听谁”的约束:

层人话正典词规矩
顶部你和 harness宿主事件流从会话进入插件
domains/决定做什么编排面命令、自动识别、剪切/压缩/恢复的流程串接
core/决定怎么算纯核零 harness import,只做计算,可单测
platform/决定怎么连适配层唯一 harness 触点(H1–H15),换宿主只改这一层
底部留下了什么数据 / 事实持久 KV + 会话事实 + 诊断日志,全部可回放
src/
├─ platform/    # 适配层:插件与 harness 打交道的唯一出口
├─ core/        # 纯逻辑:只做计算,不依赖 harness
├─ domains/     # 编排层:命令、自动识别、流程串接
├─ config.ts    # 配置项与默认值
├─ settings.ts  # 设置界面接线
└─ index.ts     # 插件入口
client/         # 设置卡片与星标按钮界面
docs/           # 设计文档与施工工单

关键机制与真机修正

下面每一条都已落进代码与账本,图上按机制就近标注:

修正内容账本
F1工具端口必须 ctx.inject(['tools']) 后经回调传入,否则剪切整体空转§60
F2边界压缩前加 60s 判词屏障,避免新任务背着旧任务上下文开跑§60
F3工作区隔离:档案/前缀键唯一键源 = 会话 header.cwd§70
F4 / F5a诊断日志去重;档案渲染结论先行 + 类型标签§60
F8a / F8b估计器对齐 DSH token-meter,两桶密度(CJK 1.5 / 其余 2.9 字符/token)§61
F9a–F9g区间取自权威表面、产物 schema v2、热尾事实载体、双预算 10K/10K、路径相对化§62–§68
F10契约 v3:总分零指针、热尾指向档案、档案只存总分、错误不进热尾§69
F11列表类命令(Get-ChildItem / ls / dir …)一律不剪§70
F12影子模式零字节:只记事实,绝不往正文写注记§70
F13判别器 v4:task = 对同一工作对象 / 类似目标的持续改进;子task 不分流§70
F14热尾按需定位标注:内容不能自证位置才加“路径@版本:行号”,并记可定位性 / 额外搜索账本§79
P14c / P14d判别链瘦身;★ 断面产品契约(关键事实保真 + 大胆重写、禁标签、同 prompt 二次点击只展开)§33 / §35–§37
P17c装配 HT 软门 + 丢弃归因§44
P20c压力阀门 = pressureRatio(0.35) × 主模型窗口;缺窗口 → 125K → 安全网 100K§48
W2T-entry 准入收紧为“过程日志白名单”,失败 / 列表 / 数据查询原文保留§73
N 系列 / T-loop协商剪除与工具思考后截断整体退役(真机 0 命中 / 缓存断裂)§71 / §72

快速开始

环境要求

  • 支持 ESM 的 Node.js(建议 Node 20+)
  • 本地 DeepSeek Harness 源码仓库(用于构建)
  • dsh CLI 或 dev_inject_plugin(用于加载插件)

宿主版本:peerDependencies 范围同时接受补丁版 0.1.3-alpha.* 与预发布 0.1.5-* (>=0.1.3-alpha.1 <2 || >=0.1.5-alpha.0 <2)。两条已实测的注意项(2026-09-10 于 harness 源码上验证):

  • ignorable 写入通道(SESSION_LOG_INTENT / LogIntent)是本仓 harness 的本地补丁, 尚未进入上游。在 vanilla 宿主上事实轨降级为 KV 镜像,账本口径不变 (docs/12 §3)。
  • 上游 0.1.5 把 replace surfaceOp 端点改名({start,end} → {startSeq,endSeq})并把会话 格式升到 v3。src/platform/history.ts 为这一漂移备了编译期锚:对准这类宿主时该锚会 故意变红。不要去消掉它——改它旁边那一个 REPLACE_OP_KEYS 常量即可 (docs/implement/REPAIR-2026-09-10.md §8)。

源码安装

当前只有源码构建 / 开发者安装方式,还没有发布 npm 包或 tarball。

# 1. 安装依赖
npm install --legacy-peer-deps --ignore-scripts --no-audit --no-fund --no-package-lock

# 2. 从源码构建(需要本地 DSH checkout)
DSH_CHECKOUT=/path/to/deepseek-harness npm run build

# 3. 注入到 DSH 实例
dev_inject_plugin /path/to/dsh-price-less

计划中的发布形态(当前不可用):

  • npm:dsh plugin add dsh-price-less
  • tarball:dsh plugin add ./dsh-price-less-0.0.1.tgz

使用

/init 我要做一个上下文管理插件
/init confirm

/task 设计命令面
/task
/task close

/optimize-prompt
  • /init 只是提案,/init confirm 才写入项目档案;随时 /init cancel 取消。
  • /task 开新任务;之后的消息由自动识别(若开启)判断是延续还是新任务;/task close 标记收尾,边界压缩据此触发。
  • /optimize-prompt 或星标按钮先弹预览:确认后才回填,你编辑过的版本即终稿。
  • 任何一步失败都不会改动内容——最坏情况是什么也没发生。

配置

配置分组:shear(工具剪切)、compression(压缩)、discriminator(自动识别 / 辅助模型)。可在 GUI 设置卡片里改,也可以直接写 ~/.dsh/settings.yaml:

context-economy:
  shear:
    enabled: true
  compression:
    boundary: true
    pressure: true
    pressureRatio: 0.35      # 压力阀门 = 比例 × 主模型上下文窗口
    domainTokens: 125000     # 主模型未声明窗口时的假定窗口
    retainTokens: 10000      # 热尾预算
    thresholdTokens: 100000  # 末位绝对安全网
    archiveCapTokens: 10000  # 档案区硬帽(只计总分)
  discriminator:
    auto: false              # 自动识别默认关闭
    # provider: deepseek-official
    # model: deepseek-v4-flash-vision-exp
    # reasoningEffort: high
配置类型默认值说明
shear.enabledbooleantrue工具剪切总开关
compression.boundarybooleantruetask 边界压缩
compression.pressurebooleantrue压力路径压缩
compression.pressureRationumber0.35压力阀门 = 比例 × 主模型上下文窗口
compression.domainTokensnumber125000主模型未声明窗口时的假定窗口
compression.retainTokensnumber10000热尾预算
compression.thresholdTokensnumber100000末位绝对安全网
compression.archiveCapTokensnumber10000档案区硬帽(只计总分)
discriminator.autobooleanfalse自动识别总开关
discriminator.provider / modelstring未设置辅助模型路由;两项都设置时覆盖,留空则跟随会话模型
discriminator.reasoningEffortstring未设置辅助调用推理档;未设置 = 跟随模型默认

schema 未给 provider / model 声明默认值,插件也不再内置任何默认模型(2026-09-10:原硬编码档按命名已到期,且"插件猜模型名"本身是漂移源)。留空时,辅助调用(自动识别、/init、星标断面、边界压缩)优先跟随当前会话模型(最近一次请求的 provider/model);会话首条消息尚无请求记录 → 跳过判别并发可观测事实 CE_JUDGE_NO_ROUTE(/init、星标则命令面/前端明确回报"模型未配置"),从第二条消息起自动跟随。两项都填写时以配置为准。开启 discriminator.auto 或使用 /init、星标按钮、边界压缩可能会调用辅助模型,产生 API 费用,并可能把相关提示词内容发送给所配置的服务商。

命令

命令作用
/task <描述>显式开启一个新大任务
/task close收尾当前大任务
/task查看当前大任务状态
/init <项目目标>发起项目档案初始化提案
/init confirm确认并写入项目档案 v1(project_frame)
/init cancel取消当前提案
/init查看当前项目档案
/optimize-prompt命令形态的提示词优化器入口(星标按钮是主界面)

会话事实

当前已发射的自定义事件均为只记账(log-only),并携带 ignorable: true。

事件含义
context-economy/task-boundary大任务边界事实(开了 / 关了哪个任务)
context-economy/judge-recorded / judge-error / judge-verdict自动识别记录与结论
context-economy/optimize-run星标断面全账
context-economy/shear-applied / shear-decision / shear-error / shear-run-plan剪切落刀、裁决、失败、星标剪切清单
context-economy/assemble-run边界装配账
context-economy/compress-run压缩调用账
context-economy/pressure-fired / hard-truncate压力触发 / 防溢出保险丝
context-economy/restore-step / restore-degraded / restore-done会话启动恢复编排

文档

设计正典维护在 docs/ 下:

docs/implement/archive/ 里的 R1–R4 工单与其余退役文档为本地只读(.gitignore 排除,全文保留在 git 历史);其中两份研究记录已入库:W2c 形态解析评估 与 N 系列总纲。

路线图

阶段范围状态
R1平台底座:事件、存储、技能目录、模型调用、历史改写、工具已完成
R2识别与优化:大任务边界、项目档案、自动识别、提示词优化器、星标按钮已完成
R3剪切:工具结果瘦身、被超越旧读、run 冲刷已完成
R4压缩:边界装配、压力路径、保险丝、恢复编排已完成
B 系列分支-合并上下文(checkout/merge)——空间换效率待验证 —— TODO §3
R 系列思考回放剪除待验证 —— TODO §3

已知限制

下面是简版;完整前置警示见 先读这个:依赖要求与实验状态。

  • 真实场景验证很薄:R1–R4 是施工完成,不是规模化验证过。真机回放里边界压缩只成功触发过 1 次;触发链仍在调,判别器 task 粒度在 2026-09-11 又改了一版。
  • 尚未发布:package.json 仍标记为 private,暂无官方 npm/tarball 发布。
  • 重新构建后需重启:机制在下次重启时加载新的 lib/。
  • 自动识别默认关闭:discriminator.auto 默认为 false,避免产生非预期的辅助模型费用。
  • 辅助模型调用可能产生费用:开启自动识别、使用 /init、星标按钮或边界压缩,都可能把内容发送给所配置的服务商。
  • 依赖 ignorable 通道:如果宿主 harness 未包含本地 ignorable 通道,插件事实会降级到 KV 镜像,而不是写入会话事件;在上游通道合并前,回放和可观测性可能受限。
  • 档案文档多为本地:docs/implement/archive/ 默认被 .gitignore 排除(全文保留在 git 历史);仅 W2c-output-shape.md 与 00-master-N-series.md 两份研究记录入库。
  • 需要本地 checkout:当前构建需要本地 DeepSeek Harness 源码仓库和 dev_inject_plugin。
  • 非隶属关系:本项目与 DeepSeek 无隶属关系。

贡献

欢迎提交 Issue 与 PR。提交前请确保:

npm run gate

全绿。

修改文档时,请同步更新 README.md 和 README.zh-CN.md。

许可证

MIT

致谢

本项目与 DeepSeek 无隶属关系。