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 裏做有邊界、可手改、可進倉庫的協作記憶。

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

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

小夜