dsh-summary-index:为 DSH 压缩摘要加索引、锚点守卫与探针,而不接管压缩后端

前言

在 DeepSeek Harness(DSH)里跑长会话时,上下文压缩会把大量工具输出收成一段摘要。压缩后端(例如 dsh-context-zip、dsh-minimal-context)负责何时压、怎么写摘要;开发者真正难的是事后:路径、错误码、提交号是否还在摘要里、能否按事件序号回到原文。单靠 ROUGE 一类相似度并不能回答「这条任务还能不能继续做」。

下面介绍社区工作流插件 dsh-summary-index(维护者 TLNing260310)。它在不注册 ctx.compaction、不替换任何压缩后端的前提下,监听已提交的 compaction/summary 事件,建结构化索引,用确定性规则守卫锚点,并提供只读召回工具。项目自述为 AI 辅助完成的 alpha/demo,许可证 MIT,当前包版本 0.1.1;开发验证使用 DSH API 0.2.1-rc.2 与 Node 24.21.0,peer 覆盖 DSH 0.1.5 至 0.2.x。

这是什么

dsh-summary-index 是宿主侧 DSH 插件:inject: ['tools'],只增加 observer 与 sumidx_* 工具,不注册裸的 search / read,也不插入 agent preset 的 compaction 行。

它做四件事:观察标准 compaction/summary;从被遮蔽的原始事件中确定性提取 P0 字面量并生成带事件号指针的存根;用守卫与探针检查五段式、Anchors 覆盖、指针可达性与原文可读性;在下次 agent/pre-step 注入紧凑索引卡或隔离告警卡,并暴露 sumidx_search / sumidx_read / sumidx_probe。

索引数据落在 append-only JSONL,默认根目录为 DSH_HOME/dsh-summary-index/v1。

与压缩后端的关系

DSH 的 compaction/summary 是已提交事件;session/event 只能观察,不能回滚或改写这次压缩。因此本插件在锚点缺失时不会假装压缩没发生,而是把存根 quarantine(拒绝进入可信索引),保留诊断,并在 pre-step 注入告警与 salvage anchors,引导模型用 sumidx_read 回查原始事件。

若要在提交前让压缩失败,需要替换或包装压缩后端,那已超出本插件「非接管式」的设计边界。

核心功能

五段式与锚点守卫

插件解析摘要中的五段(支持中英文标题):目标与意图、关键决策、当前状态、下一步、Anchors。代码会从原始事件中规则提取高信号字面量,例如 UUID、URL、路径、错误码(ENOENT、HTTP 500 等)、环境变量键、版本号等。每个锚点携带 sourceSeq(DSH 原生 session event 序号),不依赖其他压缩插件的私有段号。

探针而非相似度

不计算 ROUGE/BLEU。压缩后运行确定性探针:pointer、index-search、event-read、source-range、replacement-pointer。sumidx_probe action=questions 可生成 recall 问题包,供 harness 或人工评估,不会自动调模型。

准入模式 guardMode

模式 行为
enforce(默认) 五段完整;P0 字面量须在 Anchors 段;指针可解析;源扫描未截断
compat 五段缺失仅警告;P0 可在摘要任意位置;缺字面量、断指针、源截断仍隔离
observe 只诊断,全部 admitted;不适合高可靠自动化

过小分片默认不建索引:summarizeMinChars 512、summarizeMinNodes 2,这是索引准入阈值,不是压缩触发条件。

只读工具

  • sumidx_search:在当前会话摘要索引中词法检索。
  • sumidx_read:读条目、在条目内搜索、或按允许范围内的 seq 读事件(不重新执行工具)。
  • sumidx_probe:status / run / questions。

安装与启用

包声明 dsh.bundle.patch,dsh plugin add 会把包加入 dsh.profile.bundles 并应用 cordis.patch.yml,一般无需手改 agent preset。README 说明 npmjs 首次发布尚待维护者配置;当前优先可用 GitHub Release 或 GitHub spec。

方式 B:GitHub Release tarball

dsh plugin --profile <profile> add `
  https://github.com/TLNing260310/dsh-summary-index/releases/download/v0.1.1/dsh-summary-index-0.1.1.tgz

方式 C:GitHub 仓库 spec

dsh plugin --profile <profile> add github:TLNing260310/dsh-summary-index

npm 发布后可用:

dsh plugin --profile <profile> add dsh-summary-index

安装后重启 DSH 会话;运行中的旧会话不会追溯注入,新装可通过配置项 backfillLimit(默认 8)回填最近压缩。验证与卸载示例:

dsh --profile <profile> --dump-config
dsh plugin --profile <profile> update dsh-summary-index
dsh plugin --profile <profile> remove dsh-summary-index

Node 引擎要求 >=22.19.0(见 package.json)。

配置示例

在 profile 中插入 bundle 时可按需覆盖默认值,例如:

- insert:
    - id: summary-index
      name: 'dsh-summary-index'
      config:
        enabled: true
        guardMode: enforce
        inject: true
        summarizeMinChars: 512
        summarizeMinNodes: 2
        injectMaxChars: 1800
        probeLimit: 24

inject: false 时关闭 pre-step 索引卡,仅保留工具化召回。完整配置键见仓库 README 配置表(含 indexRoot、maxReadChars 等)。

典型用法

压缩发生后,在 agent 中通过工具召回信息。在错误码场景下搜索索引:

sumidx_search query="ENOENT" status=all limit=8

需要读某条索引对应的原始事件片段时(seq 须在条目 shadowedSeqs 或 summarySeq 内):

sumidx_read action=event entry_id="sumidx:<id>" seq=42 offset=0 limit=12000

检查条目与探针状态,或重新跑探针:

sumidx_probe action=status
sumidx_probe action=run entry_id="sumidx:<id>" limit=24

被隔离条目仍写在审计存储中,可用 sumidx_search status=all 或 sumidx_probe action=status 查看原因码(如 anchor-not-in-anchors-section、probe-failed 等)。

适用场景与注意

适合谁: 已使用 DSH 标准 compaction/summary、希望摘要可寻址、希望在压缩后仍能用确定性规则检查 P0 字面量是否被保留的工作流开发者;可与 dsh-context-zip 等只产出标准 summary 事件的后端共存。

务必知晓:

  1. 插件以当前 DSH 进程权限运行,会读写 DSH_HOME 下 JSONL;安装前请阅读源码与 MIT 许可证,勿把本项目当作唯一的数据完整性保障。
  2. 自述为 alpha/demo,可能存在 DSH 版本兼容与边界行为;Issue/PR 欢迎到 GitHub 仓库。
  3. sumidx_read action=event 读取会话已记录事件,可能含敏感内容;索引 snippet 会对明显 token/JWT 等做 [REDACTED],但仍应在可信会话中使用。
  4. 进程重启后若 raw session 未加载,事件读取可能不可用,索引中的 seq 仍作为指针保留。
  5. 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」的独立社区实践。

结尾

dsh-summary-index 在压缩链路旁加一层结构化索引与确定性守卫:不抢 compression 服务,用 sumidx_* 只读工具与 pre-step 索引卡帮助模型在摘要之后仍能找回路径、错误码和事件序号。细节与审计说明见 GitHub 仓库 与 README;目录入口见 SkillHub。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜