前言¶
在 deepseek-harness(DSH)的插件体系里,模型每次会话通常不会自动保留上一轮项目中确认过的信息。dsh-project-memory 是 JasperGuWP 维护的一个记忆类插件,用于把当前项目的稳定知识写入项目内的 memory/ 目录,让后续会话可以读取。
它把记忆落盘为普通 Markdown 文件,便于人工查看、修改,也可以用 git 做审计和 diff。下面介绍它的功能、安装方式和典型用法。
这是什么¶
dsh-project-memory 是一个零外部依赖的 DSH 插件。它不预置特定业务知识,安装到哪个项目,就围绕哪个项目的 memory/ 目录工作。
插件提供四个工具:
memory_load_contextmemory_upsertmemory_finalizememory_forget
它们分别用于加载相关记忆、写入或更新记忆、把任务结论沉淀为 reference 记忆,以及删除过期或被取代的记忆。
核心功能¶
文件即记忆¶
插件把记忆写成普通 Markdown 文件:
memory/MEMORY.md作为纯索引memory/*.md保存正文
这种结构适合人工审查,也方便纳入版本控制。
工具说明¶
| 工具 | 作用 |
|---|---|
memory_load_context |
会话或任务开始时加载相关记忆,支持关键词检索与 catalog 清单 |
memory_upsert |
写入或更新一条记忆 |
memory_finalize |
在任务收尾时沉淀一条 reference 记忆 |
memory_forget |
删除正文文件和对应索引行,但保护 MEMORY.md 与 reference.md |
敏感信息拦截¶
当写入内容命中 token、cookie、password、密钥、JWT、.env 等敏感信息时,插件会拒绝保存,并返回 ok:false。
工作区感知根目录¶
插件会按以下顺序确定记忆根目录:
- 优先使用
sandboxPolicy.resolve({ session }) - 回退到
config.memoryRoot - 再回退到
process.cwd()
这样可以尽量跟随当前会话所在的工作区。
检索与 reference 控制¶
插件支持关键词检索和 catalog 清单。对于 reference 类记忆,可以通过 maxReferenceEntries 设置条数上限,并在超出上限时自动裁掉最旧条目。
安装与启用¶
插件安装¶
下面是插件安装命令:
dsh plugin --profile web add dsh-project-memory
安装后需要重启 dsh 进程才能生效。
校验与移除¶
安装后可以用下面的命令确认插件配置是否出现:
dsh --profile web --dump-config | grep -A2 project-memory
如果要移除插件,可以使用:
dsh plugin --profile web remove dsh-project-memory
手动本地插件¶
如果不走插件包安装,也可以把 memory-plugin.ts 放到本机,然后在 profile 的 cordis.patch.yml 中添加一个 insert 项:
- insert:
- id: project-memory
name: '/absolute/path/to/memory-plugin.ts'
保存后重启 dsh 进程。
Bundle 入口是预编译的 memory-plugin.js;本地 .ts 方式由 Node 原生 type-stripping 加载,开发环境也可以配合 tsx 使用。
典型用法¶
可以用下面的两步验证插件是否按预期工作:
- 会话 A 输入:
记住:这个项目用 pnpm 打包。
预期插件调用 memory_upsert 并成功写入。
- 会话 B 输入:
这个项目怎么打包?
预期插件调用 memory_load_context,并在回答中复述 pnpm。
适用场景与注意¶
dsh-project-memory 适合希望把项目内稳定信息沉淀为可审计文本的 DSH 用户。安装前建议先阅读源码和 MIT 许可证,因为插件会以当前 dsh 进程的权限运行。
使用前注意:
- 安装或配置后需要重启 dsh 进程。
- 插件测试于 deepseek-harness,运行环境为 Node >= 22。
- 运行期只依赖
node:fs和node:path,没有外部 npm 运行时依赖。 - 如果通过 pnpm 的 git 依赖方式安装时遇到
allowBuilds提示,按提示在 profile 的pnpm-workspace.yaml中添加对应配置后重跑。 memory_forget会删除正文文件和对应索引行,但会保护MEMORY.md与reference.md。- 敏感信息拦截是写入时的拦截,不能替代完整的安全边界设计。
链接¶
GitHub:
https://github.com/JasperGuWP/dsh-project-memory