🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

守卫式上下文压缩 yoza10635/dsh-argp

DeepSeek Harnessv1.11.0
yoza106357 天前有提交已提供中文文档扫描:含敏感能力memory

dsh-argp — 双引擎上下文压缩:逐原子守卫压缩 + 引用图确定性剪枝

40.4/100
综合分
15
GitHub 星标
1,512
npm 周下载
—/5
用户评分

数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-argp
npm 源 · dsh-argp 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · dev
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-argp @ 1.11.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:49:52

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 4 处,展示前 4 条)
  • 发起网络请求
    lib/peratom/compressor.js:145
    this.fetchImpl = config.fetchImpl ?? ((...args) => fetch(...args));
  • 发起网络请求
    lib/peratom/cite-declarer.js:392
    this.fetchImpl = config.fetchImpl ?? ((...args) => fetch(...args));
  • 写入本地文件
    lib/peratom/cite-declarer.js:609
    appendFileSync(file, JSON.stringify(row) + '\n');
  • 写入本地文件
    lib/peratom/llm-adapter.js:220
    writeFileSync(file, JSON.stringify(payload, null, 2));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-agent-loop-testkit@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-commands@deepseek-ai/dsh-compaction@deepseek-ai/dsh-compaction-basic@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm@deepseek-ai/dsh-llm-deepseek@deepseek-ai/dsh-llm-pi-ai
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 逐原子守卫压缩
  • 引用图确定性剪枝
  • 日志字节级还原
v1.11.02026-10-27
· [1.11.0] - 2026-10-27(stable 推进:真机浸泡通过 + Tier B 活体测试 + 死代码清扫) 发行说明(汇总版):本版 = 1.11.0-beta.1 全部内容(见下一节:预算真值 + D2 焦点漂移修复 + stable 前收尾批 + Tier A 集成测试)加上推进期两个提交:Tier B 活体集成测试与死代码/陈旧注释清扫。beta → stable 的推进依据:真机 web profile(宿主 0.2.1-rc.2,Qwen3.8-Flash-Next)浸泡通过——多会话交错下 /argp 桶各自独立(A/B 的 retain/now 各自取值无串台)、服务重启后会话 resume 记忆完整(模型准确回起重启前内容)、/argp 显示版本号/graph+peratom/source=anchored/[this process] 全部在位、服务日志零 error。 · Added · Tier B 活体集成测试(npm run test:live):testkit harness 上 agent 轮保持脚本化(驱动确定性),purpose='compaction' 调用经生产 wire 序列化器转发真实 OpenAI 兼容端点——与生产 dsh-llm 路径同形态(无 response_format,靠 extractJson 兜底)。ARGP_ITEST_LLM 门控(默认 经 scripts/live-env.mjs 预置;未设/不可达整文件自跳过,npm test 保持零网络)。L1 单轮契约(解析零失败 / 零调用错误 / 会话不破 / 事务括号配对)+ L2 五轮采样质量门(完成解析 5/5、可落地决策 ≥1、flush 事务 ≥3、相对无压缩基线净瘦 ≥1000 字符)。对 Qwen3.8-Flash-Next 三连跑全部可复现(temperature 0)。 - 真模型服从率发现:Qwen Flash 在后续轮 4/5 次省略 infoLevel/infoText(提示词已声明必填,dsh-llm 路径 schema 仅文本描述)——引擎信任边界按设计回退逐字保面(安全方向,零损坏);首压(干净上下文)服从完整。提示词硬化(few-shot 等)留待 1.11.x。 - HLS 尾注修复档实证:turn-1 的 extract 候选 86 字符被保真守卫拒收后机械补全缺失硬 token,3225→1065 字符(67% 瘦身)落地。 · Changed · 死代码与陈旧注释清扫:删 hostHasLlm(全库零引用)、client booleanField(enableSummarize 卡片行撤除后的孤儿工厂)、SplitDecision(零引用类型)、client ArgpUserSettings.enableSummarize 接口残留;降级链注释对齐现状(summarize 撤除后 lifecycle≡force,唯一分叉是 fail,三档保留为公开配置契约)。零行为变化;ts-prune 全库扫描的误报(barrel/测试在用/宿主 loader 契约)已逐一核实排除。
v1.11.0-beta.12026-10-26
· [1.11.0-beta.1] - 2026-10-26(beta 渠道:预算真值 + 焦点漂移 + stable 前收尾批) 发行说明:三段攒批。批次 2(预算真值,9a48edb)+ 评审二批(D2 焦点漂移,dede2ac)+ Tier A 集成测试(3f4c3b6)+ 批次 3(stable 前收尾「诚实面与工程」,本提交)。评审二批来源:docs/design-review-v1.11.0-beta.1-2026-10-25.md D2/§7 的可动项——评审确认 this.rt 焦点指针在 async 恢复点会被其他会话抢绑换装,且 beta.0 的 abort 反例存在恒真断言(未锁住任何行为)。 · Changed(批次 3:stable 前收尾「诚实面与工程」) · 宿主依赖升 0.2.1-rc.3 线全量验证(3-6):devDeps 钉 0.2.1-rc.3(testkit 同步,评审参考宿主线),peer 放宽 ^0.2.0-rc.1(覆盖 0.2.0 宿主到 0.2.1 finals,桌面 rc.2 不破)。全量 460 例在 rc.3 生产回路上绿(含集成测试)。 · summarize 档撤除(3-1):degradationStrategy: 'summarize' 与 enableSummarize 旋钮移除——原为恒返回 null 的 stub(A6 保守决策),与"可选降级"的宣称不符;存量配置值运行时自然落入 lifecycle→force 链,无破坏。 · frozenCatalog 核验为真(非死段)(3-1):评审"首绑即冻结为空、机制不存在"的判断对新会话成立、对 resume 会话不成立——重启后首绑时账本先从日志重建,catalog 拍到真实目录并在本进程恒定回放(测试锁定)。修正了过度声明的"恒为空串"注释。 · /argp 报数纠正(3-2):台账/召回/cites 改按发起命令的会话取桶(旧实现读引擎焦点桶,多会话下显示别的会话的账);retain 口径与引擎一致(显式值走 capRetain 绝对上界并在截断时标注 (capped from N);比例值 = 可压缩内容 × retainRatio,不再是误导的 window×ratio;显式窗口未解析时显示配置值而非默认 16384);无台账时按日志真值报数(不再伪造 0);recall/cites 标注 [this process](重启归零非会话真值);auditWarnings 露出。 · 设置卡 restore-default 恒失败修复(3-2):set/unset 落盘后快照异步刷新,写后立即校验读到陈旧 user 层 ⇒ 每次保存/恢复默认误判失败。改为等待快照收敛(60ms 轮询 + 1.5s 超时)。 · 旋钮数对齐(3-2):schema 8 项 = 卡片 8 行(补上缺渲染的 minSpanChars/charsPerToken,撤 enableSummarize),中英 locale 同步。 · rawResponse 默认脱敏(3-3):peratom 遥测的模型原始响应只保头 200 字符 + 全文 sha256 短摘要(响应可能回显会话内容/密钥类敏感串);ARGP_PERATOM_RAW_FULL=1 显式 opt-in 全文。 · 发布与 CI(3-4):release.yml 加 tag=package.json=CHANGELOG 三方一致硬校验(正文抽取不再静默回退);CI 加宿主契约矩阵(最低 0.2.0-rc.1/最新 0.2.1-rc.3 × Node 22/24 × Win/Linux,跑全量测试)+ tarball 安装冒烟;新增提示词组装"无未展开模板变量"闸({{cwd}} 类复发防线,压缩请求体逐字节扫描)。 · 三处正确性修正(3-5):recallQuery 平分排序比较器反对称化(旧式在 U-U 相遇时恒 -1,V8 小数组插入排序会把同分 U 倒序)+ maxResults 夹取 1..20(工具入参未夹取);pruneIntervals 事务后 tool-pairing 不变量审计(自动图剪路径此前无校验——悬空 tool_call 必穿 surface 尾切,一次调用全局检测,违例落 auditWarnings);shadowedSeqs 增量账本核验锁定(恰等于 compaction/prune 逐事件真值、整段 summary claim 不污染、被记节点必已离 surface)。 · Fixed(评审二批:焦点漂移 / D2) · async 恢复点回绑焦点:compactIfNeeded/isPressureExceeded 在
v1.11.0-beta.02026-10-25
· [1.11.0-beta.0] - 2026-10-25(会话所有权:per-Session 状态分桶 + exec 路由 + 提交语义) 发行说明:两份外部评审在根因层收敛的第一个架构主题——多会话/多代理健壮性(〔Q〕评分 D 的两大 BLOCKER / 〔K〕阶段 A+B)。此前引擎的全部会话态(台账、召回预算、shadowed 游标、usage 锚点、冻结 catalog、声明边缓存)是进程级单例:子代理/双会话宿主下 A→B 切换时 B 读到 A 的剪枝索引(同 seq 不同内容 = 跨会话泄漏)、A 的预算压制 B 的召回、A 的锚点让 B 误触发。本版全部按 Session 分桶(WeakMap),异步路径显式经 exec.agent.session 路由。beta 期验证焦点:多会话宿主下的召回正确性与压缩事务完整性;单会话行为不变(437 例全绿 + 10 例反例集)。 · Changed · 会话运行时状态 per-Session 分桶(1-1,〔Q〕M4):新增 src/session-state.ts(SessionRuntimeState,约 22 字段/桶)+ 引擎 stateOf(session)(WeakMap 懒建)。台账(records/prunedNodeIndex/closurePrunes)、召回预算与计数、shadowed 三件套、冻结 catalog、usage 锚点、账本重建去重集、守卫覆盖全部随会话切换;同步路径(图剪)经 getter 兼容层读焦点桶(零调用点改动),异步路径显式带 session。闭包 id 计数器保持进程级单调(跨会话唯一无害)。 · 召回工具 + recall-zoom 按 exec.agent.session 路由(1-2):三个召回工具与 recall_summary/recall_detail 的 execute 改收 (args, exec),会话解析 = exec.agent.session(多会话宿主逐调用正确)→ 焦点绑定兜底(单会话语义不变)。zoom 的两档召回预算滑窗同步 per-session(A 会话的 compaction/end 不再归零 B 的预算)。 · declarer 边缓存会话键化(1-6):edgeCache 进程单例 → WeakMap 每会话 512 条 LRU——A 会话声明的 18→25 不再注入 B 会话的建图。buildInjectEdges 加可选 session 参数(有 session 只注入该桶;历史调用方合并全部桶)。声明失败从"await 前记账永久跳过"改为有界重试(同轮 ≤2 次,成功才记账;解析失败/网络失败同待遇)。 · Fixed · 水位语义:提交成功才推进(1-3,〔K〕P1-3 裁决定案):旧实现"LLM 规划成功即推水位",而发射段 flushStashed 是先 splice 后吞错——规划成功但落盘失败的窗口被消费即弃(pending 已删、水位已进),该批原子永久跳过且无任何错误痕迹。现在:flushStashed 先试后删(flushEntry 成功才 splice 并推水位)、失败保留条目自动重试(单条 ≤2 次,超限有界放弃并留错误账)、零动作窗口视为"已考虑"照常推进(防无限重规划)。两段式的 idle 段只暂存不推水位(peratom-pre-pressure ⑦ 的锁已按新语义更新)。 · stale-surface 代际守卫(1-4):idle 暂存 → 下一次 pre-step 发射的窗口期里,并发图剪/手动 /compact 可能已把同一批 seq 换掉;旧决策写向换代后的 surface 要么撞宿主 span 校验要么写错对象。发射前校验收集窗口目标是否已被 replace 副本覆盖(surfaceOp 挂在副本事件上,判定必须扫 replace 覆盖集而非目标事件自身)⇒ 过期决策放弃发射(skipReason=stale-surface 入账,不重试)。 · 同会话 pass 串行(1-4):两个 idle pass 不再并发读写同一窗口(新 pass 排在既有在飞链之后);跨会话互不阻塞(分桶 per-session)。 · AbortSignal 贯穿 peratom LLM 链(1-5):compressor/declarer 的 LLM 调用全部收 signal,AbortSignal.any 合并超时(abort 与超时任一触发即断流);abort 不进 schema 兼容重试(不是网络失败);暂存前/写点前各有 throwIfAborted 取消点——abort 后半成品不入队、已入队条目留在 pending 等下一窗
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
展开完整文档(README 剩余 1 节)
dsh-argp — 双引擎上下文压缩:逐原子守卫压缩 + 引用图确定性剪枝

dsh-argp 是 DeepSeek Harness(dsh)的第三方上下文压缩引擎:替换「让模型自由改写历史」的摘要式压缩——LLM 只提方案、确定性守卫负责处置,被压缩 / 被剪枝的原文保留在 append-only 日志、可按 seq 召回(文本块逐字;工具调用参数为 JSON 语义等价重建),压缩目标按字符口径收敛(0-LLM 图规则;字符 ≠ provider 实际 token,估算误差见「已知限制」)。双引擎形态、安装即挂、无需手工配置;显式 peratom: false 可退回纯 0-LLM 图剪枝(见安装与挂载)。

dsh-argp 概览:守护式两阶段上下文压缩

dsh plugin --profile <name> add dsh-argp # 安装即挂;装好后在会话里输入 /argp 查看实时状态

三个核心机制:

- Stage-1 逐原子压缩(eager,每轮)——轮末对当轮原子做「缩放」而非丢弃:模型按原子自选 extract(逐字摘录)/ summary(概括,丢弃项入账审计)/ false(保留原文),确定性守卫裁定提案能否落地——extract 缺任一高信号 token 即整体拒绝。LLM 只提议;原文保留在只追加日志(守卫覆盖编码在内的高信号 token,非全量无损承诺)。
- Stage-2 引用图剪枝(lazy,三级触发)——原子引用图(确定性 A→R 配对边 + 模型声明的语义 cites 边)上按反向拓扑序整原子摘除,压缩阶段 0 次 LLM 调用,剪枝量按字符口径收敛到预算;触发为三级阶梯:轮初主动 / 轮中压力剪 / 截断自动续写(见「三级触发」)。
- append-only 日志是唯一事实源——被压/被剪内容原文永远在日志里,两级召回 recall_summary / recall_detail 随取随回(text 块逐字字面量,哈希测试锁定;tool-call 参数为对象时 JSON 语义等价重建并精确标注;保真仅保证结构化承重 token 逐字,散文级不保证逐字;大节点 from/limit 分页续读)。上下文是日志的一个渲染视图,不是历史本身。

为什么

摘要式压缩(LLM 重写历史)有三重代价:

1. 信息有损——精确 token(路径、错误码、配置值)在改写中最先死,且不可找回;
2. 缓存全断——重写后的历史使 system+前缀逐轮变化,跨轮 KV/prefix cache 从变化点起全部失效;
3. 压缩率失控——摘要长度由模型心情决定,预算不可兑现。

ARGP 的回答:LLM 在环内、但戴着镣铐——它的输出永远是「不可信输入提案」,守卫按 verbatim 纪律裁决;遗忘是确定性的——0-LLM 图规则保证收敛与预算;历史不可变——append-only 日志承载全部原文,召回契约(never guess)兜底。

实测(30 轮合成多轮编码任务,四臂对照,spike 37):四臂中唯一同时达成 7/7 探针保真且成本低于现役基线的臂是双引擎全开臂(A);传统摘要基线(D)最便宜但探针 5/7——吞掉精确字符串与关键大意。卖点不是「最便宜」,是「保真前提下最省」(A 全成本分量 ≤ 基线 C;比 D 贵 3.39×——这个差距就是保真的价格,明码标价)。

实现方式(双引擎管线、反向拓扑剪枝、shadow-price 契约、模块职责)见 ARCHITECTURE.md。

核心机制

Stage-1:PeratomCompressor(eager 熵降)

1. 确定性门控(gate.ts):纯谓词判定「该轮是否可压」(长 user 消息 / 超 512 字符 tool result / 非版本链成员);LLM 只执行「怎么压」。
2. 逐原子决策:单次 LLM 调用返回 {seq, level, text} 决策——extract(逐字子集拷贝,守卫硬拒缺失)/ summary(概括放行,丢弃 token 逐条入账 summaryDropped 供审核)/ false(显式不压,保原文);长 user 消息走拆分(dialog 逐字抄写 + 余量聚合 U-info,空隙归 info)。
3. no-op 守卫:收益 ≤5% 的「全文照抄」副本视同 false,不 emit replace(0 收益替换白花 surface 换代)。
4. tail-only 替换:只允许 sourceEventSeqs ⊆ 当轮区间(越界即 bug,断言锁定);前缀指纹测试证明 N 轮逐轮压缩后请求前缀稳定(缓存经济的生命线)。

Stage-2:ArgpGraphEngine(lazy 图剪枝,0-LLM)

1. 原子化 + 建图:确定性边(assistant → 其 tool result,经 toolCallId)+ 语义边(模型按契约输出的 {"cites":[{"t":"前缀","l":"c|s|x"}]},四级分级 critical/supporting/contextual/isolated)。
2. 拓扑剪枝:反复摘除入度为 0 的原子(边等级 → 有效重要性 → 最近引用轮次排序),被剪引用方的出边消失、下游逐 pass 解锁;闭包生命周期(ACTIVE→COMPLETED→PRUNABLE→PRUNED)整闭包退休已完成任务。
3. 压缩目标按字符口径收敛(trigger/retain 均为字符×charsPerToken 估算,真实 token 以 provider usage 锚点为准,不构成逐 token 精确承诺):触发线 window = contextWindow×0.8(默认);保留目标 retain = 可压缩内容 × 0.2(1.5.1 起:可压缩内容 = 完整请求 − system/tools/MCP 固定开销 = 剪枝目标量 visible,恒定压缩率 80%;旧公式 retain = window×0.2 = 0.16W 把固定开销算进基数,与目标量不含固定开销不对称)。触发时机是三级阶梯(见下节"三级触发");降级链 lifecycle→force→fail(1.11.0-beta.1 起 summarize 档与 enableSummarize 旋钮已撤——原为恒返回 null 的 stub,与"可选降级"宣称不符)+ 反应式补救阶梯(第 2 次起放宽 recency/turn 守卫)收敛到预算或显式失败。

三级触发(Stage-2 触发阶梯)

Stage-2 的"lazy"不是单一阈值检查,而是三级阶梯(1.4.0 引入、1.5.0 修订):

1. 轮初主动(L1):只在每轮首个 pre-step(step === 1)做压力判定,阈值 = window(默认 contextWindow×0.8)。估值计入本步已 claim、尚未落盘进 surface 的 user 消息——宿主先 claim 新 user 消息再 dispatch pre-step,轮初拿到的是精确内容而非预测,用户轮初的大段粘贴不会漏;轮初同时跑 per-atom LLM pass(原子降熵)+ 图剪。
2. 轮中压力剪(L1',0-LLM):midTurnPrune 默认 true——step > 1 且压力达标时只做 0-LLM 图剪(不跑 per-atom LLM pass——那是 79s–3min 的阻塞,轮内不划算),并把 turnGuard 放宽到 midTurnTurnGuard(默认 0,允许剪本轮的旧 A/R;recencyGuard 照常保护最新节点)。超额的来源恰恰是本轮的 tool result,旧守卫(turnGuard=1)把整轮保护起来正是 1.3.x 轮中剪"几乎无效"的根因;剪落在那个 pre-step ⇒ 同一个 step 的请求即已瘦身 ⇒ 天然自动继续本 turn。
3. 截断自动续写(L3):输出被外部钳制(finish=max-tokens 且 outputTokens < 本次请求的 maxTokens = 宿主/适配器把输出预算啃小了,容量压力的真信号)时:若本 turn 随后要结束(agent/turn-stopping 钩子)⇒ 就地强制剪 + steer 一条续写消息,同一个 turn 继续推进(用户不必再发"继续");否则(turn 还在跑)⇒ 下一个 pre-step 强制剪。续写文案可用 continuationNotice 覆盖(空串 = 只剪不续);上限 reactiveRetries(默认 2,每次"连续被钳" episode 内,第 2 次起放宽 recency/turn 守卫,用尽交回 overflow 路径)。

配置旋钮:midTurnPrune(默认 true)/ midTurnTurnGuard(默认 0)/ continuationNotice(默认内置一句)/ reactiveRetries(默认 2);1.4.0 的 midTurnActive 保留为兼容别名(true = 轮中剪开 + 沿用默认守卫的 1.3.x 对照档,false = 关)。

桥接与召回

- CiteDeclarer(每轮):模型按窗口声明跨轮引用边,经 injectEdges 通道喂给 Stage-2——实测召回效率 ≈ 无边臂的 2.6×(zoom 精准定位)。
- RecallZoom:recall_summary(seq)(读压缩态)/ recall_detail(seq, from?, limit?)(日志原文:text 块逐字,tool-call 参数对象时 JSON 语义等价重建并标注;大节点分页续读);4 倍制预算(summary 预算 = 4×detail),超限返回引导文案而非硬拒。历史被剪原子另有 recall_pruned / list_pruned。

模型要求

per-atom 的拆分/压缩决策质量依赖模型指令遵循能力;守卫保证任何模型上都"不会压坏"(错误方向只往少压错),但收益随服从率缩放:

- 实测基准:本地 Qwen3.6-35B-A3B / Qwen3.8-27B 全链路 30/60 轮 0 error、探针 7/7;拆分抄写表示法解析失败 0%(vs 区间定位法 72%)。
- DeepSeek 系模型的已知特性:系统提示词与用户指令冲突时(如任务 prompt 写 "nothing else")cites 声明可为 0——语义选择性归零,但 Stage-1 守卫压缩与 Stage-2 确定性剪枝照常工作、不变式全过(50 轮 v4-flash 实证)。任务 prompt 给 cites 留出口后声明率恢复(10 轮实测 43.6%)。

安装与挂载

从 npm 安装。安装即挂、双引擎全开:peratom 缺省 = 挂(默认值落在代码里、不受各层 patch 整块替换影响,见下文「Stage-1(双引擎):缺省即挂」),Stage-1 三管线与 Stage-2 图引擎同时生效,无需任何手工配置:

dsh plugin --profile <name> add dsh-argp
⚠️ 新版发布后 24 小时内安装,请显式指定版本。 pnpm 11 起 minimumReleaseAge 默认为 1440 分钟(24h):刚发布的版本会被跳过,pnpm 静默回落到上一个已过冷却期的旧版本——不报错,只是装错版本。dsh-argp 每次发新版后,旧版本的 peerDeps 往往已不匹配当前宿主,于是宿主抛 Plugin dsh-argp@<旧版本> is incompatible with dsh <宿主版本>。报错里的版本号比 npm latest 旧,就是撞上了这个冷却期(与本仓库/镜像无关:npmmirror 与 npmjs 的 dist-tags 一致)。

两种解法(推荐前者,粒度最小):

dsh plugin --profile <name> add dsh-argp@<最新版本> # ① 显式钉版本,绕过冷却期

② 在 profile 的 pnpm-workspace.yaml 里豁免本包(长期有效,其余包仍受冷却期保护) minimumReleaseAgeExclude:
- dsh-argp

stock 摘要器的禁用已随包完成:包的 bundle patch 自带 - id: compaction-basic / disabled: true,安装后无需在 profile 层再做这一步(列在这里只为说明它被谁关掉)。挂载同样由包的 bundle patch(cordis.patch.yml)负责(insert 创建 entry);profile 层只做配置覆盖(modify),不要再 insert(否则 duplicate loader entry id)。

极简(minimal)preset 下不生效(1.9.0 起):ARGP 在 skipPresets 列出的 preset 下退场——默认 ['minimal'],即极简 preset 的会话不剪枝、不压缩,历史保持原生态(与未安装本插件一致)。判定按会话实际运行的 preset(可被 preset 切换事件改变);无 preset 信息的会话(headless/CLI)不受影响。要让 ARGP 在 minimal 下也生效,在 profile 层 modify 加 config: { skipPresets: [] }。

Stage-1(双引擎):缺省即挂

生产挂载路径是引擎构造期经 config.peratom 自挂:peratom 缺省 = 挂——Stage-1 三管线(compressor / declarer / zoom)在构造期挂载并内部接线,安装后即为双引擎,不需要任何手工配置。

要退回纯 Stage-2(0-LLM 图剪枝),显式关停:

- id: dsh-argp
config:
peratom: false # 或 null;二者等价:只要 Stage-2,不挂 Stage-1

为什么默认值在代码里、而不是包的 bundle patch 里:dsh 各层 patch 的 config 是整块替换而非深合并(层序 bundle → profile → home → CLI)。默认值若只写在 bundle patch 的 insert 行,用户在设置页动任一旋钮(表单值写回 profile 的 cordis.patch.yml)就会整块冲掉 peratom,双引擎静默退回纯 Stage-2 —— 即 §11.13.1 那个缺口复发的形态。

可选:为 Stage-1 指定独立 LLM 后端(不配则自动跟随宿主路由):

- id: dsh-argp
config:
peratom:
compressor:
llm: { provider: deepseek-official, model: deepseek-flash } # dsh-llm 后端
declarer:
llm: { provider: deepseek-official, model: deepseek-flash } # 可指向独立 lite 档
zoom: {} # 两级 recall;块内缺省即挂载

⚠️ 在 profile / home / CLI 层写 - id: dsh-argp 的 config 会整块替换上一层:想让 Stage-1 保持开启不必重述 peratom(缺省即挂);只有在确实要关停时才写 peratom: false。
⚠️ 缺省且调用方自带 injectEdges / onOverflowCompress / onPrePressureCompress 时不自动挂载——尊重调用方的自装配(高级 API 向后兼容)。

llm 子块可省:llm 与 endpoint/apiKey 两路皆缺时自动跟随宿主路由(1.3.0 的 autoDshLlmSpec:真会话里现取 agent.options.{provider,model} + 宿主 ctx.llm 服务,宿主换模型自动跟随);三路都解不出时组件自然 disabled(零网络)。配了 llm 走宿主 dsh-llm(生产形态);否则按 endpoint/apiKey config 或环境变量走 OpenAI 兼容直连(本地 llama.cpp 实验形态)。Stage-2 预算默认比例驱动(window=ctx×0.8 / retain=window×0.2),无须硬编码。

presetClean 默认开启:挂载期对仍挂 stock 摘要器的 shipped preset 生成净化副本 <id>-argp(摘除 compaction-basic/tool-result-pruner、保留 command-compact——/compact 自动指向 ARGP 图剪),幂等、fail-soft;presetClean: false 关闭。

查看状态:/argp

装好后,在会话里输入 /argp 即可看到 ARGP 的实时状态(只读,不触发压缩):

ARGP 1.10.1 · engine: graph+peratom · preset: standard budget: trigger 131.1k / retain 26.2k · now 88.4k (source=anchored) prunes:7 · 末 3 段 / 41 项 / 12.8k→3.1k · 剪枝索引 156 recall:12 次调用 · 9 次命中(75%) cites:声明 34 · 解析 29(2 条歧义,1 条失败)

各段含义:engine——graph = 纯 Stage-2(0-LLM),graph+peratom = 双引擎;preset 后附 ARGP inactive 表示当前 preset 命中 skipPresets(本插件在此会话不生效)。budget——触发线 / 保留目标 / 当前占用,source 是占用量的估算来源(anchored = 锚定在 provider 回报的真实 usage,最准)。prunes——剪枝次数与末次形状,forced = 候选耗尽后强制剪。cites 段仅在双引擎 declarer 在位时输出。

手动压缩走宿主原生的 /compact(由 preset 层挂载的 command-compact 提供,落到本引擎的 compactNow)——本插件不另开压缩入口。

第三方市场检测(dsh.so)

宿主 dsh 本身没有官方插件市场(plugin-manager 直装 npm),dsh.so 是社区自建的第三方收录站兼检测站。它的徽章分两层,两层含义差别很大:

| 层 | 检测内容 | 全站通过率 |
| L4 | 沙盒内 npm 安装(依赖/peer 能否真的装起来) | 100% |
| L5 | 同沙盒内 web 启动 + 冒烟动作 + 清单标记为 active | 74.5% |

也就是说:装不上从来不是普遍问题,起得来才是(L4 全绿而 L5 有约四分之一失败)。徽章显示的是该 dsh 版本下最近一次检测的结果,不是永久状态,跨 dsh 版本的红/绿不可直接比较。

本插件当前在 dsh.so 上:L4 通过、L5.2(web 启动层)检测失败(1.9.0 / 1.9.1 @ dsh 0.2.0-rc.2;最后一次绿是 1.7.0 @ rc.1)。本地已按沙盒签名(win32 x64 / Node 24 / dsh 0.2.0-rc.2 / web profile)穷举复现——含/不含本插件、checkout 与发布态、完整与精简 profile 全绿,未能复现该失败;宿主侧也不存在检测所用的 /ping、/health 端点,该冒烟动作属站点私有协议,本地无法模拟。结论是不可归因于本插件,根因待站点方数据。生产部署走本地 tgz + 手工 profile 挂载,不经市场路径,不受此项影响。

验证结果

四臂对照(30 轮合成多轮编码,本地 Qwen3.6-35B-A3B,spike 37)

| 臂 | 配置 | 探针 | 成本(空闲价) | 结论 |
| A 双引擎全开 | compressor + declarer + graph + zoom | 7/7 | ¥0.454 | 唯一 7/7 且 ≤ 基线成本的臂 |
| B 无边 | declarer 关 | 7/7 | ¥0.556 | 召回次数 31 vs A 的 12(declarer ≈2.6× 更省) |
| C 现役基线 | 仅 graph(溢出才剪) | 6/7(R2 漏检) | ¥0.802 | A 全成本分量 ≤ C |
| D 摘要基线 | dsh 原生 BasicCompactionEngine | 5/7(丢精确 token + 大意) | ¥0.134 | 最便宜但丢保真——反衬「保真前提下最省」 |

防干涉:A/B/C 三臂 append-origin 原文零替换(A 140 / B 154 / C 216 事件);前缀稳定:A 臂 21 个主请求指纹全同。

水位与轮次放大

固定窗口(16K tok)下的实测行为(P5-bis,本地 Qwen3.6-35B-A3B,2026-08-28;证据细节见 CHANGELOG):

- 轮数显著放大:零压缩对照在 ~20 轮触窗终止,双引擎同预算下持续存活至满预算(~60 轮量级)——固定窗口下的可持续轮数呈数量级提升(下界口径,禁裸引用「数倍」,须带窗口/任务/模型三要素)。
- 缓存逐请求前缀稳定性零劣化:双引擎与零压缩对照的逐请求前缀指纹分布一致;压缩事件仅引入一次性重算税,无持续累积劣化。

Graph 引擎历史验证(v0.3.x,DeepSeek v4-flash / Qwen3.8-27B)

50 轮 t-long:U 锚点 7/7、needle 7/7(5/7 经 recall 找回)、4 事务 0 error、压缩目标达成(32K,字符口径;该基准对应当时的 retain 公式,与现行口径不同);200K 主流档成本 ¥2.695 vs 基线 high ¥3.087(该基线含 77% 空流 error,系平台 B-5 缺陷——对照数字按此口径解读,disabled 档 ¥3.19 为更干净的对照)。

复现

| 实验 | 命令 | 验证内容 |
| 四臂对照(需本地模型) | ARGP_ARM=A\|B\|C\|D\|E node spike/37-peratom-three-arm.ts | 探针保真、成本三元组、防干涉、K_no/放大 |
| per-atom soak | npm run spike36 | 门控/链/守恒/前缀/VK-atom 八判决 |
| 50 轮 t-long | ARGP_DEEPSEEK_THINKING=enabled node spike/06-tlong.ts | L1/L2/L3 不变式、锚点/needle、精确预算 |
| 合成 0-LLM | npm run spike8a | 单事务零 LLM 调用 |
| 逐原子审计 | node spike/atom-audit.mjs <产物目录> | 事件驱动逐原子压缩/剪枝明细 |

npm run check = typecheck + smoke + 单测(415/415 全绿,2026-10-12)。每个数字都带产物路径(证据落点见 CHANGELOG.md)。
历史 DeepSeek 臂的模型口径:v0.3.x 时期的 DeepSeek 臂用 deepseek-v4-flash 实测——该模型已于 2026-09 退役,官方 API 由 deepseek-flash(DeepSeek-V4.1-Flash)承接,旧名仅作兼容路由(宿主 llm-deepseek 的现役 catalog 为 deepseek-flash / deepseek-v4-pro)。上文数字均为当时模型产物,不可在新 API 上原样复现;重跑 DeepSeek 臂的脚本会自动使用 deepseek-flash(spike/deepseek.ts 共享挂载已随迁,可经 DEEPSEEK_MODEL 覆盖)。

平台缺口反馈(给 dsh)

tool/result 替换无结构化元数据通道(B-1)、compaction/prune 游离于事务状态机(B-3)、headless 测试装配 tokenMeter 静默失效(B-4)、摘要空流(B-5)、surface 窗口丢弃无痕迹(B-6)——正式记录见 dsh Discussions(#1090 及关联帖)。

已知限制

- B-6 窗口截断盲区:未被 ARGP 替换的 live 节点在逼近 contextWindow 时被请求组装层截掉最旧部分、不留痕迹——recall_pruned 取不回它们。缓解:比例预算前移触发点;根治在 dsh 侧(B-6 立案中)。
- 模型依赖(如实版,见上):守卫保证安全,收益依赖服从率;lite 档多模型分工的服从率未实测(台账 D21)。
- per-atom 输出税:Stage-1 每轮的压缩调用是 side-channel 成本(30 轮实测 completion 7.2K tokens,不进上下文但计入总成本);dsh-llm 后端的 usage 已入 record,spike 汇总口径接入中。
- tombstone 召回链路:1.8.0 起每块墓碑自带原节点 seq([elided seq=N; recall_pruned(N) for detail]),recall_pruned(seq) 一跳可取回,不再需要 list_pruned --keyword 反查;且"墓碑再立碑"已按终止态排除(G1),原 seq 不再被链式替换稀释。仍受 B-6 窗口截断盲区限制(未替换的 live 节点取不回)。

问题反馈

- Bug:开 Issue。附 dsh --version、本包版本、profile 配置(windowTokens/retainTokens 等)与最小复现步骤,定位会快很多。
- 设计讨论 / 使用问题:开 Discussion。

License

MIT
预览分享卡片长什么样 ↓yoza10635/dsh-argp
分享 · DeepSeek Harness Hub
yoza10635/dsh-argp

dsh-argp — 双引擎上下文压缩:逐原子守卫压缩 + 引用图确定性剪枝

回到顶部