dsh-memory-budget:为有上限的长期记忆提供 MEMORY.md / USER.md 与字符预算

前言

在 DeepSeek Harness(DSH)里做长线协作时,模型往往只能依赖当前会话的上下文。把项目路径、约定、踩过的坑和用户偏好写进固定文件、并在每次会话注入系统提示,是 Hermes Agent 一类工具常用的做法;若不做字符上限,记忆会无限膨胀,最终挤占提示预算甚至拖慢响应。

下面介绍维护者 chengzhixing 发布的客户端插件 dsh-memory-budget(npm 包名同名,当前资料记载版本 0.1.1)。它在 DSH 中实现「两个 Markdown 文件 + 硬字符预算 + 超限必须合并 + 每会话注入系统提示」,语义对齐 Hermes 的 memory 工具,并针对 DSH 做了存储路径与写入后刷新等行为调整。SkillHub 目录简介为「个人测试用」,星标为 0;安装与配置应以 GitHub README 为准。

这是什么

dsh-memory-budget 是 DSH 的 bounded long-term memory 组合包:通过 memory 工具维护 MEMORY.md(项目/环境事实)与 USER.md(用户偏好),按条目分隔、按字符封顶,并把用量百分比渲染进系统提示的「长期记忆」段落。插件不联网、不起子进程,只读写配置目录下的记忆文件(及 .bak / 瞬时 .tmp)。

仓库:https://github.com/chengzhixing/dsh-memory-budget
目录页:https://www.skillhub.cn/plugins/chengzhixing/dsh-memory-budget
许可证:MIT(见仓库 LICENSE)。

核心功能

双文件与默认预算

文件 存什么 默认上限
MEMORY.md 项目/环境事实:路径、命令、约定、踩过的坑 4000 字符
USER.md 用户偏好与协作方式 1500 字符
  • 条目之间用 \n§\n 分隔,纯文本,可随时手改。
  • 默认目录为 <DSH_HOME>/memories/;DSH_HOME 未设置时,Windows 上为 %USERPROFILE%\.dsh。
  • 每次会话将两文件渲染为系统提示中的一段,并显示用量,例如:
MEMORY (your personal notes) [42% — 1,680/4,000 chars]
══════════════════════════════════════════════
条目一…
§
条目二…

memory 工具

模型(或宿主)可调用:

memory(action=add|replace|remove|list, target=memory|user,
       content=..., old_text=..., operations=[{action,content,old_text}, ...])
  • add:追加一条;完全重复则不做任何事。
  • replace:old_text 为子串,命中第一条包含它的条目后整体换成 content;超限时用于合并条目。
  • remove:同上规则删除该条。
  • operations:批量操作,按最终字符预算原子提交;任一步失败则整批不落盘。
  • 超限时会返回当前用量、建议用 replace 合并后再试,并附带当前全部条目。
  • 成功返回带 done: true 与提示勿重复写入,减少模型反复写同一条。

持久化采用 tmp+rename 原子写,并保留 .bak。

相对 Hermes 的设计取舍

点 Hermes 本插件
提示刷新 启动时冻结快照,本会话内写入不可见 默认 refreshOnWrite: true:写入后下一条立刻可见(可能使 prefix cache 失效);false 时回到冻结语义
存储位置 hermes-home/memories <DSH_HOME>/memories,也可通过 dir 指到仓库目录做版本管理
预算 7000 / 1500 4000 / 1500(可配)
注入防护 threat-pattern 扫描 未做(DSH 威胁模型不同,条目来源为模型自身)

命名说明:npm 上的 dsh-memory 已被占用,SkillHub 上的 dsh-memory 对应另一插件;本仓库与它们无关。

安装与启用

DSH 生态里插件常以 profile 组合包方式安装;不要凭插件名自行拼接 dsh plugin add github:owner/repo。README 给出三种方式,市场安装一般走方式 A。

方式 A:组合包(推荐)

在目标 profile(一般为 ~\.dsh\profiles\desktop)的 package.json 中:

"dependencies": { "dsh-memory-budget": "^0.1.1" },
"dsh": { "profile": { "bundles": ["...", "dsh-memory-budget"] } }

随后在该 profile 目录执行 pnpm install 并重启 DSH。包内 cordis.patch.yml 会自动插入 memory 条目——不要再往 profile 的 cordis.patch.yml 里手写同 id 的 - insert: 块,同一 id 插两次会导致组合失败。

方式 B:本地脚本(开发用)

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1

脚本将包复制到 <profile>\node_modules\dsh-memory-budget;若 dsh.profile.bundles 已包含 dsh-memory-budget 则跳过 patch 追加,否则在 profile 的 cordis.patch.yml 末尾追加 - insert: 块。

方式 C:手工两步

  1. 复制本仓库目录到 <profile>\node_modules\dsh-memory-budget。
  2. 在 <profile>\cordis.patch.yml 末尾追加:
- insert:
    - id: memory
      name: dsh-memory-budget
      inject: [tools]
      config:
        memoryCharLimit: 4000
        userCharLimit: 1500

重启 DSH 后,新会话中应能看到 memory 工具,系统提示里出现「## 长期记忆」相关段落。

运行环境:package.json 要求 Node >=20,DSH 引擎 >=0.1.7-rc.1。

配置项

在 cordis.patch.yml 的 config 或组合包默认中可调整:

键 默认 说明
dir "" 空则 <DSH_HOME>/memories;可指向仓库目录以便 git 管理记忆
memoryCharLimit 4000 MEMORY.md 预算
userCharLimit 1500 USER.md 预算
promptOrder 120 提示段排序权重
refreshOnWrite true 写入后是否立刻重建提示段

典型用法

  1. 安装并重启后,在新会话中由模型调用 memory(action=add, target=memory, content=...) 记录路径、命令或约定。
  2. 接近上限时,README 要求先 replace 合并多条为更短条目,再 add;不要指望超限后仍静默写入。
  3. 需要把记忆纳入 git 时,将 dir 设为仓库内目录,手改或工具写入的 MEMORY.md / USER.md 即可随仓库存档。
  4. 查看当前条目:memory(action=list, target=memory|user)。

维护者在仓库内用 npm test(需先 npm install 装 devDependencies)跑 11 个用例,覆盖存储、超限、批量原子性、提示块用量与工具注册 schema 等;这是在本地验证插件行为,不是终端用户必做步骤。

适用场景与注意

适合谁: 希望在 DSH 桌面 profile 中长期保留可编辑、有上限的结构化记忆,并愿意在接近预算时用 replace 做合并的开发者;需要与 Hermes 类似「双文件 + § 分隔」语义、又运行在 DSH 工具链上时,可直接对照 README 中的差异表。

权限与安全: 插件以当前 DSH 进程权限读写本地文件。安装前建议浏览源码与 SECURITY.md;dsh.so 启发式扫描可能对 fs.writeFileSync 与读取 process.env 报出提示,README 中说明了范围与威胁模型。

卸载: 组合包方式从 profile 的 bundles 与 dependencies 移除 dsh-memory-budget 后 pnpm install 并重启;脚本或手工方式则删除对应 - insert: 块与 node_modules\dsh-memory-budget。memories\ 下文件可保留,不影响卸载。

SkillHub 等社区目录独立于 DeepSeek / 幻方,属于「一切皆插件」生态下的第三方收录;本文事实均来自上述 README 与 package.json,未编造案例或用户反馈。

结尾

dsh-memory-budget 把长期记忆收成两个有字符上限的 Markdown 文件,用 memory 工具维护,并在每会话系统提示里展示用量——适合在 DSH 里做有边界、可手改、可进仓库的协作记忆。

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

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

小夜