dsh-project-memory:deepseek-harness 的项目级持久记忆插件

前言

在 deepseek-harness(DSH)的插件体系里,模型每次会话通常不会自动保留上一轮项目中确认过的信息。dsh-project-memory 是 JasperGuWP 维护的一个记忆类插件,用于把当前项目的稳定知识写入项目内的 memory/ 目录,让后续会话可以读取。

它把记忆落盘为普通 Markdown 文件,便于人工查看、修改,也可以用 git 做审计和 diff。下面介绍它的功能、安装方式和典型用法。

这是什么

dsh-project-memory 是一个零外部依赖的 DSH 插件。它不预置特定业务知识,安装到哪个项目,就围绕哪个项目的 memory/ 目录工作。

插件提供四个工具:

  • memory_load_context
  • memory_upsert
  • memory_finalize
  • memory_forget

它们分别用于加载相关记忆、写入或更新记忆、把任务结论沉淀为 reference 记忆,以及删除过期或被取代的记忆。

核心功能

文件即记忆

插件把记忆写成普通 Markdown 文件:

  • memory/MEMORY.md 作为纯索引
  • memory/*.md 保存正文

这种结构适合人工审查,也方便纳入版本控制。

工具说明

工具 作用
memory_load_context 会话或任务开始时加载相关记忆,支持关键词检索与 catalog 清单
memory_upsert 写入或更新一条记忆
memory_finalize 在任务收尾时沉淀一条 reference 记忆
memory_forget 删除正文文件和对应索引行,但保护 MEMORY.mdreference.md

敏感信息拦截

当写入内容命中 tokencookiepassword、密钥、JWT.env 等敏感信息时,插件会拒绝保存,并返回 ok:false

工作区感知根目录

插件会按以下顺序确定记忆根目录:

  1. 优先使用 sandboxPolicy.resolve({ session })
  2. 回退到 config.memoryRoot
  3. 再回退到 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 使用。

典型用法

可以用下面的两步验证插件是否按预期工作:

  1. 会话 A 输入:
   记住:这个项目用 pnpm 打包。

预期插件调用 memory_upsert 并成功写入。

  1. 会话 B 输入:
   这个项目怎么打包?

预期插件调用 memory_load_context,并在回答中复述 pnpm

适用场景与注意

dsh-project-memory 适合希望把项目内稳定信息沉淀为可审计文本的 DSH 用户。安装前建议先阅读源码和 MIT 许可证,因为插件会以当前 dsh 进程的权限运行。

使用前注意:

  • 安装或配置后需要重启 dsh 进程。
  • 插件测试于 deepseek-harness,运行环境为 Node >= 22。
  • 运行期只依赖 node:fsnode:path,没有外部 npm 运行时依赖。
  • 如果通过 pnpm 的 git 依赖方式安装时遇到 allowBuilds 提示,按提示在 profile 的 pnpm-workspace.yaml 中添加对应配置后重跑。
  • memory_forget 会删除正文文件和对应索引行,但会保护 MEMORY.mdreference.md
  • 敏感信息拦截是写入时的拦截,不能替代完整的安全边界设计。

链接

GitHub:

https://github.com/JasperGuWP/dsh-project-memory
羽毛球分组比赛记分
小程序二维码

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

小夜