前言¶
用 DSH 或同类 AI 编码助手开新会话时,背景、偏好和已经拍板的结论往往要重讲一遍;偶尔把要点写进一两个 Markdown,文件会越堆越长,每轮都要付上下文成本,过期结论又很难下线。
OpenSpec 一类 spec-driven 工具解决的是「代码偏离计划」,但它们是 pull:模型得被提醒去读 spec,新会话不会自动带上记忆。dsh-memory-delta 走 push 路线:会话开始时把该知道的蒸馏内容塞给模型,且尽量只推送相对上一轮的 增量;细节仍可按需检索。下面介绍它是什么、怎么装、怎么用。
这是什么¶
dsh-memory-delta 是 DeepSeek Harness(DSH) 插件,同时提供零依赖独立 CLI mem。维护者在 GitHub 上的仓库为 lpf20200901/dsh-memory-delta(Gitee 为只读镜像)。设计思路借用了 OpenSpec 的 spec / change / archive 纪律,方向相反:记忆 推入 会话,而不是等 agent 去 拉。
插件在 SkillHub 等社区目录中归类为「记忆」;DSH 生态是「一切皆插件」,社区站点与 DeepSeek / 幻方无官方从属关系。
存储分层与写入规则¶
记忆库(默认 <session cwd>/memory,可用配置或 $DSH_MEMORY_ROOT 覆盖)按 流程阶段 与 内容类型 组织:
| 目录 | 阶段 | 内容 | 谁可写 | 是否注入 |
|---|---|---|---|---|
inbox/ |
候选 | 模型认为值得保留的结论 | 仅模型(memory_write) |
否 |
facts/ |
在用 | 踩坑与规避:环境限制、工具行为、真实失败与修复 | 仅人类 promote | 是 |
decisions/ |
在用 | 约定与选型及理由 | 仅人类 promote | 是 |
archive/ |
已归档 | 被取代或不再适用的条目 | 归档操作 | 否(可搜索、可恢复) |
主流程:模型只写 inbox → 人类 promote 到 facts 或 decisions → 退役进 archive。拿不准放哪边时:若「明天世界变了就不成立」倾向 facts/;若只有你能推翻则倾向 decisions/。
mem init 会在记忆目录生成 README.md、memory.config.json、index.md、journal.md 等,并说明各层含义。条目为带 frontmatter 的 Markdown,状态含 active / superseded / expired;同一 scope+key 只允许一条 active,更新需显式 --supersedes,避免错误结论进入永久注入层。
核心能力¶
差分注入与字节预算¶
注入层有硬字节预算(可由 store 的 memory.config.json#injectBudget 决定,常见默认约 3072)。每条 standing 条目带 12 字符内容哈希;插件在 side-car 文件 <harness home>/storages/dsh-memory-delta/inject-state/<session-id>.json 记住上一轮状态,之后只推送新增、更新、删除;无变化时 不注入任何内容。README 中对比过:无 diff 的 instructions 类插件在多次小编辑后会重复注入整文件,浪费 token。
首轮注入全部 active 条目作为 baseline;后续轮次只推 delta。diff 状态放在 side-car,不塞进会话消息的 source,以符合 DSH session-format 白名单。
DSH 侧工具与界面¶
| 能力 | 说明 |
|---|---|
memory_search |
对 facts / decisions / inbox / archive / journal 等做相关性排序检索;中文按 bigram 匹配;结果通过 tool 的 render 文本返回给模型 |
memory_write |
仅写入 inbox,不能改 standing 层 |
| 蒸馏提醒 | 会话进行若干步且记忆已是最新时,提醒用 memory_write 记录结论;每会话一次,且不携带会污染 diff 的状态 |
| 到期复核 | verify_when 到期时提醒人类复核,模型只能把新结论写 inbox |
| bundled skill | 默认 skill: true 时注册 /dsh-memory-delta;可 skill: false 关闭 |
| 侧边栏「记忆」 | 需配合如 dsh-better-sidebar;提供分组、搜索、promote / 归档等(经 POST /dsh-memory-delta/action,可用 allowWrite: false 关闭写操作) |
插件直接 import 与 CLI 共用的 store 模块,不在 DSH 内 spawn mem(沙箱对命名管道有限制)。
CLI mem¶
与插件共用同一套 store 与排序逻辑。典型命令如下(节选):
mem init --root ./memory --scope "workspace:/path/to/project"
mem new --type fact --id win-update-cache --key disk-cleanup \
--conclusion "Cleaning the update cache reclaimed nothing measurable" \
--reason "Directory emptied but free space did not move" --tags windows,disk
mem promote win-update-cache
mem promote win-update-cache-v2 --supersedes win-update-cache
mem recall <keywords> [--where all|facts|decisions|inbox|archive|journal|sessions|index]
mem validate [--fix]
mem inject [--json] [--budget 3072]
mem due [--within N] [--json]
全局安装 CLI:
npm i -g dsh-memory-delta
需要 Node.js >= 20。package 当前版本为 1.3.4,许可证 MIT。
安装与启用¶
README 强调两种常见误配会 静默失败:把包写进 package.json 的 dsh.profile.bundles(启动时会被市场 registry 覆盖);在 cordis.patch.yml 里写裸条目而不包在 - insert: 下。
从 npm / DSH 命令安装¶
插件已发布到 npm,DSH 可从 registry 安装:
cd ~/.dsh && dsh plugin --profile web add dsh-memory-delta
社区插件市场条目为 lpf20200901/dsh-memory-delta,从市场安装会使用包内自带的 bundle patch;该 patch 有意不设置 maxBytes,注入上限由 store 的 memory.config.json 决定。
本地开发 / 手动安装¶
DSH_HOME 在桌面版常见为 %APPDATA%\dsh-desktop\harness(Linux 等环境以实际 harness home 为准,解析链:config.stateDir → ctx.dshHomePath → $DSH_HOME → ~/.dsh)。
- 将包复制到 profile 的
node_modules,例如:
<DSH_HOME>\profiles\web\node_modules\dsh-memory-delta\
package.json
bin\mem.mjs
src\plugin.mjs src\hook.mjs src\planner.mjs
- 在
<DSH_HOME>\profiles\web\cordis.patch.yml追加:
- insert:
- id: dsh-memory-delta
name: dsh-memory-delta
config:
root: ''
enabled: true
dueWithin: 0
panel: true
allowWrite: true
skill: true
- 保存后 patch 层会被 watch,热加载,无需重启。
卸载:删除上述 - insert: 块并删除 node_modules\dsh-memory-delta。
已知风险(2026-10-08 观测):通过市场安装或卸载 其他 插件时,profile 的 cordis.patch.yml 可能被重写,手写 - insert:(含注释)会丢失,表现为文件仍在 node_modules 但不再注入。安装后应确认文件中仍有 - id: dsh-memory-delta。
典型用法¶
- 在项目下执行
mem init,或依赖插件默认root: ''(即会话工作目录下的memory)。 - 会话中模型用
memory_write把候选结论写入 inbox;人类确认后mem promote或侧边栏提升进 facts / decisions。 - 需要更新同一语义 key 时,用
--supersedes显式取代旧条目,旧内容进 archive。 - 调试注入 payload 时用
mem inject [--json];检查 store 健康用mem validate [--fix]。
适用场景与注意¶
适合:长期维护同一仓库或工作区、希望新会话自动带上精简且不过期的约定与踩坑记录,又愿意用 promote / supersede 做人工把关的开发者。
注意:
- 插件以 当前 DSH 进程权限 读写记忆目录与 side-car;安装前应阅读 源码与许可证,确认路径与写权限符合预期。
- 错误结论若被 promote 到 standing 层,会在每轮注入中持续存在;务必坚持「模型只写 inbox」。
- 依赖
@deepseek-ai/cordis等 peer 包,需与所用 DSH 内核版本兼容;README 记录了 session-format v4 等对注入消息source.kind的要求。 - 侧边栏记忆 Tab、skill 注册为可选能力;无 Web 侧栏时仍可差分注入与 CLI 并用。
链接¶
- 社区目录页:https://www.skillhub.cn/plugins/lpf20200901/dsh-memory-delta
- 源码与完整文档:https://github.com/lpf20200901/dsh-memory-delta
- 常见疑问(中文):仓库内
docs/faq.zh.md
经过上面的步骤,你可以在 DSH 里把跨会话记忆做成可审查、可 diff、可归档的 Markdown store,并在会话开始时只支付增量上下文成本。