dsh-project-memory:跨会话的工程记忆

前言

在 DeepSeek Harness(DSH)上跑编码智能体时,同一个仓库往往会开很多轮会话。模型本身不会记住上一轮已经查过的根因,也不会记住项目里已经证伪过的改法,于是常见现象是:重复推导、重复踩坑。社区里有人用长 transcript 或手工贴笔记补上下文,但 transcript 体积大、噪声多,且容易把「猜测」和「已验证结论」混在一起。

下面介绍维护者 yuyuyyyyyyyyyyyy 发布的 dsh-project-memory(分类:记忆)。它在宿主侧为每个项目维护可持久化的工程结论记录,在智能体规划任务之前把少量相关条目召回进 prompt;存储的是结构化结论,而不是完整对话流水。

这是什么

dsh-project-memory 是一个 host-plane Cordis 插件:不修改 Harness 核心包,也不复制或编辑内置 preset。它通过 dsh.bundle.patch 挂载到 profile,提供 projectMemory 服务,并在每次组装 system prompt 时做 recall,同时向智能体注册一组 memory 工具。

插件当前版本为 1.1.1(见仓库 package.json),许可证 MIT,运行环境要求 Node >= 20。

核心能力

无需选择 preset / 模式

因为是 host-plane 插件,安装后对 所有 agent preset 生效(README 列举包括 standard、ptc、minimal、cordis 以及自写 preset)。模式选择器里没有名为 project-memory 的 preset 可选;若旧安装残留该 preset,文档建议删除,功能不依赖它。

注入时机与 standing contract

贡献 Hook 作用
projectMemory 服务 host plane 按项目跨会话共享记录
project-memory:recall ctx.systemPrompt.context() 在 prompt 组装阶段召回,早于智能体规划
project-memory:usage ctx.systemPrompt.section() 约定:先搜再记;本轮产生可复用知识则写入;修正而非重复堆叠
memory_search ctx.tools.register() 按文件、符号、错误文本、症状、特性等显式检索
memory_record ctx.tools.register() 写入一条结构化结论
memory_correct ctx.tools.register() 将旧结论标为 superseded / corrected / invalidated / confirmed,可关联替代记录
memory_forget ctx.tools.register() 删除单条或有限批量 inactive 记录(带项目校验)
memory_audit ctx.tools.register() 查看召回/写入/修订内容及原因

记录结构(结论 vs 流水)

单条记录把观测、推断和结论分开,避免未证实的猜测被当成「历史」。字段分组包括:身份(id、project、project_path、session_id 等)、问题(problem、symptoms[])、facts[](观测)、hypotheses[](推断及 open|rejected|confirmed)、尝试与失败(attempts[]、failed_attempts[])、结论侧(root_cause、conclusion、verification)、结果(changes[]、constraints[])、召回信号(related_files[]、related_symbols[]、tags[])以及修订状态(status、superseded_by 等)。

memory_record 在 conclusion: "verified" 时要求 verification 非空,否则拒绝写入。

自动 Recall

每次组装 prompt 时,插件从会话日志构造查询:

  • 最后一条人类消息(source.kind === 'user',不含注入上下文或 tool 结果);
  • 近期 tool/call 参数里 harvest 的文件路径与符号;
  • 当前会话 cwd。

候选记录仅保留同一项目,按路径、符号、标签、问题/症状词、失败尝试/约束等信号加权打分;默认最多保留 3 条(maxRecallRecords,配置可选)。得分低于 minScore 时不注入任何块,避免无关任务带来空块或额外成本。已被 supersede 或 invalidate 的记录会被过滤。

项目隔离由 projectIdOf(cwd)(规范化 cwd 的 slug + hash)实现;Windows 路径会 case-fold,分隔符会规范化。

审计与调试

每次 recall、写入、修订会写入有界 audit trail,可通过 memory_audit 按 action、项目过滤,查看 query、候选数、注入的 record id、相关性原因与注入体积。设置环境变量 DSH_PROJECT_MEMORY_DEBUG=1,或在插件 row 上设 debug: true,可在 info 级别打日志。

安装与启用

安装前请自行阅读仓库源码与 LICENSE;插件以当前 dsh 进程的权限读写宿主侧存储,安装即表示信任该包。

官方安装命令(README Install 节原文):

dsh plugin --profile web add github:yuyuyyyyyyyyyyyy/dsh-project-memory

将 web 换成你的 profile 名;github: 也可换成 registry 名、tarball 或本地路径。执行后重启 dsh 即完成安装。该包声明 dsh.bundle.patch,dsh plugin 会把它追加到 profile 的 dsh.profile.bundles,再由包内 cordis.patch.yml 在宿主侧挂载插件。

dsh plugin 会转发到 pnpm,因此需要 pnpm 在 PATH 上(例如 corepack enable pnpm 或 npm i -g pnpm)。包内无 install scripts。

无 pnpm 时可手动:把目录放到 $DSH_HOME/profiles/node_modules/dsh-project-memory/(或 profile 下 Node 能 walk 到的 node_modules),在 $DSH_HOME/profiles/<profile>/package.json 的 dsh.profile.bundles 数组中加入 "dsh-project-memory",然后重启 dsh。

可选配置(README Configuration 节,键均可选)示例片段:

- insert:
    - id: project-memory
      name: dsh-project-memory
      config:
        maxRecallRecords: 3

文档说明 patch row 的 name 必须是字面量字符串,不能是 !!js 表达式;改插件源码后需重启 dsh 才会加载新模块。同一 $DSH_HOME 下两个 dsh 进程不能共享同一会话(会 SessionAlreadyOwnedError)。

典型用法(智能体侧)

README 通过 project-memory:usage 约定行为,智能体在任务中应:

  1. 需要背景时先用 memory_search(或依赖每次 prompt 前的自动 recall);
  2. 本轮得到可跨会话复用的根因、失败路径、约束时,用 memory_record 写入;
  3. 发现旧结论有误时,用 memory_correct 标记修订关系,而不是再写一条重复结论;
  4. 需要排查「为什么召回了这些、哪些被筛掉」时,用 memory_audit。

具体字段与工具参数以仓库 README 与源码为准。

适用场景与注意

适合:长期维护同一代码仓库、多 session 协作的 DSH 编码智能体;希望减少重复试错、把「已验证根因 / 已失败方案 / 项目约束」沉淀成可检索结论的团队或个人。

注意:

  • 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,安装来源请自行判断。
  • 勿编造未在文档出现的配置项;完整配置键见 README(抓取资料中 Configuration 一节有截断,以 GitHub 为准)。
  • 并发:不同 session 可并行,但文档 Concurrent writers 一节说明了多写者对存储的影响,生产使用前建议阅读 README 全文。

链接

  • 目录页:https://www.skillhub.cn/plugins/yuyuyyyyyyyyyyyy/dsh-project-memory
  • 源码与文档:https://github.com/yuyuyyyyyyyyyyyy/dsh-project-memory

经过上面的步骤,一次 dsh plugin add 即可在全部 preset 下启用按项目隔离的工程记忆,并在规划前自动召回相关结论。

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

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

Xiaoye