dsh-readcache
Manifest valid★ 2Version-token-validated in-process result cache for the DSH read tool: repeated reads of unchanged files skip file I/O and line rendering, with a readcache tool for stats and clearing.
dsh-readcache
⚡ 给 DSH read 工具的版本令牌校验结果缓存。
长会话会反复重读未变更的文件——上下文压缩后的恢复、并行子代理、编辑前后的对比,每一次重复都要重新做文件 I/O 和行号渲染,读到的却是字节完全相同的内容。dsh-readcache 包装了 tools/execute 事件瀑布,让这些重复读取直接命中进程内缓存,且每一次命中都对照文件系统自己的版本令牌重新校验。
为什么它是安全的
朴素的缓存会吐旧内容,这个插件不会:
| 性质 | 机制 |
|---|---|
| 绝不吐旧内容 | 每次命中都重新 stat 文件,要求版本令牌精确匹配(本地后端为 dev:ino:size:mtimeNs:ctimeNs)。任何写路径——edit/write 工具、bash、外部编辑器——都会改变令牌并立即失效对应条目。 |
| 无写入竞态 | 未命中时,执行结果只有在二次 stat 仍报告执行前令牌的情况下才会入缓存(双 stat 防护)。 |
| 保留"先读后改"约束 | 缓存键包含代理 id。文件系统的观察门(fs-observation-policy)要求每个代理编辑前必须自己读过该文件;按代理隔离键值保证每次命中都以该代理自己的先前观察为凭据。 |
| 内存有界 | LRU 上限:300 条 / 总量 16 MiB / 单条 4 MiB。 |
只有 read 工具的成功、非中止、可无损 JSON 序列化的结果才会入缓存;失败结果原样透传。
readcache 工具
插件注册一个模型可见的工具:
readcache(action:"stats"|"clear")— 汇报命中/未命中等计数与已节省字符数、条目数;或清空缓存。
stats 输出示例:
{
"hits": 2,
"misses": 4,
"hitRatio": 33.3,
"stale": 1,
"stores": 4,
"evictions": 0,
"savedChars": 1210,
"clearedEntries": 0,
"entries": 3,
"cachedChars": 1662,
"maxEntries": 300
}
安装
dsh plugin --profile web add dsh-readcache
或从本地检出安装:
cd dsh-readcache && npm pack
dsh plugin --profile web add ../dsh-readcache/dsh-readcache-1.0.1.tgz
安装后重启 DeepSeek Harness 生效。
设计说明
- 拦截点:
tools/execute的 around 分发瀑布——官方超时策略用的同一条缝。调用身份保持不变,只有结果被复用。 - 声明
inject,不和加载器赛跑:插件导出inject = ["fs", "tools"],Cordis 会把它保持在等待态,直到基础 bundle 提供这两个服务。若用软性ctx.get("fs")提前返回,可能在启动竞态中抢跑并让整个缓存静默失效——这正是 1.0.1 修复的 bug。 - 为什么用 stat 而不是 fs 观察事件:
fs.stat是无副作用的纯探测;观察事件依赖触发顺序,且命中时无法复核。 - 仅宿主侧:缓存完全活在宿主进程里。客户端仪表盘(经 Remote service)在 v1.1 路线图上。
- 入缓存的对象是冻结的
ToolExecutionResult;一次无损 JSON 往返(JSON.parse(JSON.stringify(...)))保证存下的副本不持有任何指向运行时的活引用。
已验证行为
- 同参数重读未变更文件 →
hits +1,省掉 I/O。 - 两次读取之间文件被外部修改 → 返回新内容(不吐旧内容),
stale +1。 - 另一个代理首次读取已缓存文件 →
misses +1(按代理隔离成立)。
许可证
MIT
Compatibility
Versions
| Latest version | Published | Size |
|---|---|---|
| 1.0.1 | — | — |
Comments
Loading…
Similar plugins
by zhangyy0423
dsh plugin: per-turn receipts (todo counts, goal id, fail-closed plan verdict) that survive the next turn, plus a read-only veripipe_receipt tool.
★ 0
MIT
JavaScript
Oct 8, 2026
dsh plugin --profile web add dsh-veripipeby MkaliezZ
Version-aware documentation query with excerpt bounding for DSH; host-supplied lookup, no hard-coded web provider.
★ 0
MIT
TypeScript
Aug 29, 2026
dsh plugin --profile web add @mkaliezz/dsh-docsAdds a Reading tab to the DSH web client that shows process steps and live reasoning in source order, collapses successful turns to the final answer, and keeps the original tabs, composer, and tooling
★ 2
NOASSERTION
TypeScript
dsh plugin --profile web add dsh-clearview阅读代码 · DSH 独立插件:一个独立于普通工作区选择的代码阅读模式:先理解业务,再梳理调用链、精读实现,最后通过具体场景验证理解。
★ 0
MIT
JavaScript
dsh plugin --profile web add dsh-code-readingby ZSeven-W
DeepSeek Harness (DSH) plugin: a read-only ledger for the plugins you already have installed — a capability inventory with file:line evidence, declared-vs-detected reconciliation, cross-profile versio
★ 25
↓ 101/wk
MIT
JavaScript
Oct 28, 2026
dsh plugin --profile web add @zseven-w/dsh-harborDocument-code consistency guard: audits version headers / changelog tables / directory trees / module & test counts / cross-doc references for drift, with severity-sorted, read-only fix suggestions.
★ 0
dsh plugin --profile web add dsh-doc-guard