omp-memory-dsh:在 DSH 与 omp 之间共用项目级教训记忆

前言

在 DeepSeek Harness(DSH)里跑编码智能体时,会话内的上下文会随轮次结束而消散;若团队里同时用 oh-my-pi(omp)做同类工作,两边往往各自沉淀「教训」,却读不到对方写进磁盘的那一份。结果是同一仓库里重复踩坑,或 DSH 侧根本不知道 omp 已在 learned.md 里记过什么。

社区插件 omp-memory-dsh(维护者 meisijiya,分类:记忆)的定位,是在 DSH 侧适配 omp 的项目级记忆:向 system prompt 注入 omp 已有的摘要与教训窗口,并提供 learn 把新教训写回同一份 learned.md,同时用「零删除」与默认拒绝封顶淘汰等约束,降低跨 agent 写同一文件时的风险。

这是什么

omp-memory-dsh 把 omp 的项目级记忆目录接入 DSH,使 DSH 与 omp 在同一项目键下共用 memory_summary.md 与 learned.md 所承载的教训沉淀。维护者为 meisijiya;社区目录见 SkillHub 条目(当前展示版本 v0.2.0)。源码与发行包托管在 GitHub:meisijiya/omp-memory-dsh。

它不替代 omp 的 autolearn、managed-skills 或 config.yml,也不改写 omp 除 learned.md 以外的记忆产物。

核心功能

下面介绍文档中已说明、且与「跨 agent 共享 lessons、零删除红线」一致的能力。

读侧:注入记忆窗口

  1. 会话首次装配 system prompt 时,按项目键读取 memory_summary.md 与 learned.md。
  2. 摘要与教训共享约 5000 token 预算;learned.md 采用头尾窗口(约 60% / 40%),中间省略并带截断提示,避免半条 bullet。
  3. 内容注入到 interpolate: false 的 section,并附带 omp 原版规则说明;项目键在会话开始时冻结,避免工作目录变化导致写到别的项目目录。

写侧:learn 与 memory_read

  • learn:把一条持久教训写入本项目共享的 learned.md(必填 memory,可选 context)。写入前经过内容检查、脱敏与长度归一、目录存在性、文件锁、撕裂守卫、封顶策略、写前 CAS 指纹与原子写等闸门;失败会抛错并说明原因(例如默认 evictionPolicy: "refuse" 下,若写入会触发 omp 的 100 条封顶淘汰,则拒绝写入且文件不变)。
  • memory_read:按行分页只读完整记忆(offset、limit,单次行数受 maxPageLines 限制),用于查看注入窗口未覆盖的段落。

omp 侧的 learn / autolearn 行为不受本插件影响;两边读取的是同一文件路径下的内容(默认根目录见下文配置)。

安全与「零删除」约束

插件会写本地文件系统,且目标文件也由 omp 使用。文档强调的默认保守策略包括:

  • 源码层面不调用删除类 API(rm / unlink / truncate / rmdir 等),并由测试扫描约束。
  • 唯一可写目标为 join(root, <项目键>, "learned.md");MEMORY.md、memory_summary.md、raw_memories.md、rollout_summaries/、skills/、config.yml 等保持只读或不触碰。
  • 项目记忆目录不存在时拒绝写入,不替 omp 静默建目录。
  • writeEnabled: false 时对记忆目录零写;enabled: false 时不注册、不碰文件系统。

安装与启用

安装前请自行审阅仓库源码与许可证(SkillHub 与 GitHub 上的 MIT 等信息以页面为准)。插件以当前 dsh 进程权限运行,能读写你配置的记忆根目录及 sidecar 账本路径。

环境要求(文档声明)

组件 要求
DeepSeek Harness >=0.2.1-rc.1 <0.3.0-0
Node.js >=22.6.0
omp (oh-my-pi) v18.12.2 及以后

安装命令

推荐从预构建 tarball 安装(无需本地构建):

dsh plugin --profile web add https://github.com/meisijiya/omp-memory-dsh/releases/download/v0.2.0/omp-memory-dsh-0.2.0.tgz

或从 GitHub 源码安装(会执行 prepare 自动构建):

dsh plugin --profile web add github:meisijiya/omp-memory-dsh

本包为 DSH bundle,声明了 dsh.bundle.patch,dsh plugin add 后一般会自动生效。装完后需重启 DSH(插件在进程启动时装载)。

若手动挂到 profile,可在 cordis.patch.yml 中插入(包名而非绝对路径):

- insert:
    - id: omp-memory
      name: 'omp-memory-dsh'
      config:
        enabled: true
        evictionPolicy: 'refuse'

配置要点

所有项均有默认值;不配置也可运行。Linux 上若 omp 使用 $XDG_STATE_HOME/omp/memories,而插件默认为 ~/.omp/agent/memories,须显式设置 root。

配置项 默认 说明
enabled true 总开关
inject true 是否向 system prompt 注入记忆
root "" → ~/.omp/agent/memories 记忆根目录
writeEnabled true false 时只读注入、零写
evictionPolicy "refuse" 100 条封顶时是否允许淘汰最旧教训;可与 omp 对齐时用 "omp-parity"
sectionOrder 950 注入 section 排序
lockTimeoutMs 2000 写锁等待超时
requireApproval false 是否走审批;无审批服务时不应开启
ledger true sidecar 溯源账本(~/.dsh/omp-memory-dsh/ledger/)
maxPageLines 200 memory_read 单次最大行数

典型用法

1. 与 omp 并行使用同一仓库

  1. 确保 omp 已在该项目下生成记忆目录(否则 DSH 的 learn 会拒绝写入)。
  2. 在 DSH profile 中安装并启用插件;Linux 按需设置 root。
  3. 重启 DSH 后开启新会话:应能在 system prompt 中看到来自 memory_summary.md / learned.md 的注入片段。
  4. 在 DSH 中调用 learn 写入教训后,可在 omp 同一项目键下验证是否读到相同内容(文档描述为双向一致性验证场景)。

2. 只读注入、禁止 DSH 写入

将 writeEnabled 设为 false,保留注入,避免 DSH 改动 learned.md。

3. 查看被窗口省略的教训

在会话中调用 memory_read,例如从偏移 0 起分页读取(具体参数以工具 schema 为准):

memory_read(offset=0, limit=50)

适用场景与注意

适合谁:已在本地使用 omp 项目级记忆、又希望在 DSH 中复用同一套 lessons,且能接受「DSH 默认不触发 omp 的静默淘汰」这一护栏的团队或个人。

需要注意:

  • 只做项目级记忆,不覆盖 omp 的 managed-skills 与 auto-learn 自进化。
  • omp 的 100 条教训封顶是上游规则;本插件默认 refuse 仅保证 DSH 不加速淘汰,omp 自身写入仍可能淘汰旧条。
  • DSH 写侧比 omp 多一层内容护栏(如拒收指令式内容与部分凭据形状),同一条内容可能出现「omp 能写、DSH 不能写」的分叉;读侧为保持字节一致,对 omp 已写入的明文凭据仍可能原样注入。
  • 注入是预算窗口,不是全文;大项目需配合 memory_read。
  • 安装插件前请检查源码与许可证;社区目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系, listing 也不等于安全审计。

结尾

omp-memory-dsh 解决的是 DSH 与 omp 在同一项目里「教训各写各的、读不到彼此」的割裂:读侧对齐 omp 的注入预算与文件布局,写侧只动 learned.md,并用零删除设计与默认拒绝封顶淘汰,把跨 agent 共写同一记忆文件的风险压到可预期的范围。

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

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

Xiaoye