DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

JiessieM /

JiessieM/dsh-memory-organizer

Verified

DSH 记忆本自动整理插件

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@3d452d75

dsh-memory-organizer

给已经存在的记忆本瘦身,不是另起一套记忆系统。

它盯着你的 markdown 记忆本,固定记忆区一旦超过阈值,就把最旧的内容整块搬进归档目录,原位只留一行占位——只搬运,不改一个字。

跟具体哪个记忆插件无关:只要本子里有一个「标题带记忆词」的区、按本文的标题格式写节,它就管得了。


它解决什么问题

DSH 的 dsh-whale-loli 插件把记忆本整个塞进提示词,上限 16000 字符。超了怎么办?它是这么切的(src/memory.js:361-372):

keptRoll = keptRoll.slice(1);          // 先丢最旧的滚动摘要
// 再丢详细区
keptArchive = [];                       // 清空归档索引
keptFixed = fixed.slice(0, maxChars - 320) + '…(固定记忆太长,已截断)';

从前往后硬切。

而新写的记忆追加在文件末尾,正好在被切掉的那一头。也就是说:记忆本一超限,你写进去的东西从写下那一刻就是不可见的——写进去等于没写,而且不报错。

这不是省额度的问题,是保命的问题。只要固定记忆区压在阈值以内,整块就能完整注入,一个字都不丢。

所以阈值默认 15000(留 1000 给滚动摘要 / 详细区 / 归档索引)。


装

dsh plugin --profile desktop add dsh-memory-organizer

或者从源码装:

git clone https://github.com/JiessieM/dsh-memory-organizer.git
cd dsh-memory-organizer
dsh plugin --profile desktop add link:$(pwd)

装完重启 DSH 才会加载。

怎么确认活着:启动约 3 秒后会写一个心跳文件:

<DSH_HOME>/memoryORZ/.organizer-heartbeat

内容长这样:

2026-11-02T18:23:19.280Z pid=22100 threshold=15000 tick whale-loli-v2-live.md:12804

tick 后面的数字是当前固定记忆区的字符数。之后每 60 秒刷一次。


它怎么找记忆本

不写死文件名,扫两处:

  • <DSH_HOME>/*.md
  • <DSH_HOME>/<一级子目录>/*.md —— 只下一层,不往 node_modules 那种深坑里钻

然后按两条判断到底是不是记忆本:

  1. 体积正常 —— 10 字节到 8 MB 之间
  2. 前 12 行里有记忆相关的标题 —— # 我的记忆、# Memory、# 固定记忆、# 长时回忆录 都算。不绑定任何插件、不要求具体叫什么叫法

侧重点是「标题」:正文里随口写一句「这个功能用到记忆模块」的笔记不算,标题里写着记忆的才算。这一条把误判挡掉了大半。

扫描时跳过 memoryORZ/(自己搬出去的归档)、node_modules/、plugins/、profiles/、attachments/、logs/、archive/ 这些目录,也跳过 【YY-MM-DD】… 开头的归档文件和 .bak-* 备份。

区名叫什么都行

没有 # 固定记忆 这个硬性要求。文件里第一个「标题带记忆词」的一级标题就是记忆区:

# 固定记忆        ✅
# 永久记忆        ✅
# 我的记忆本      ✅
# Memory          ✅
# Core Memory     ✅

# 鲸鱼娘记忆 · whale-loli-v2-live.md 这种文件头不会被当成区(带 .md 的跳过)。

一个区都没有也一样管:认出来之后先给你补一个 # 固定记忆 进去,再搭壳。位置在文件第一个一级标题之后,原有内容一个字不动。

多本同时管,各归各的目录,互不串。

找不到?用 files 指路

显式给了 files,插件就不扫描、也不校验指纹,指哪儿打哪儿:

config:
  files:
    - whale-loli-v2-live.md          # 相对路径,相对 <DSH_HOME>
    - D:/notes/my-memory.md          # 也可以给绝对路径

一条字符串或一个数组都行。


记忆怎么分类

固定记忆区里放三个分区,新记忆一律写进 ## 近期记忆:

# 固定记忆

<!-- memory-format:v1 -->
- 记忆整理规则(插件只搬运,不改内容;概述、词条、状态标记全由我写)

## 印象          ← 常驻,插件永不搬
### 自我形象
### 主人
### 其他人
### 重要事件

## 技能          ← 索引区,只记哪些技能还在、哪些搬走了

## 近期记忆      ← 干活区,插件从这里搬(最旧的在上)

新建记忆本:不用自己搭壳

从零开始时,建一个 .md 扔进 <DSH_HOME>,里面只写一行就够:

# 固定记忆

插件巡到它(最多 60 秒)会自动补上格式块和三个分区壳,变成上面那张结构图的样子。补完就不再动——第二次巡检 changed 为假,一个字节都不写。

已有的记忆本(比如 whale-loli 新建出来的那种)被认出来时也一样:第一次补壳,之后只搬内容。

(自己手写整套结构当然也行,插件会认出来已经齐了,不重复插。)

标题格式

### 主题(可归档)【技能】【26-10-31】
- 一条小小节(10-31 14时)
- 另一条

拆开看:

部分 取值 必须
(进行中) / (可归档) 只有这两个词 有日期时才有意义
【印象】 【技能】 【事件】 三类 没标的节插件不碰
【26-10-31】 YY-MM-DD 可省

状态词是固定词表,插件从标题末尾往前剥,剥不下来就停——所以 (新形象 2026-10-27 定稿) 这种括号不会被误当成状态。

日期用横杠不用斜杠:26-10-31,斜杠在 Windows 文件名里非法。


搬的规则

按"每轮是否必须上场"分死活,不按主题分(主题分不完)。

1. 印象区 —— 一条都不动。称呼、忌讳、硬规矩、定型的教训放这儿,它就该常驻。

2. 标了(可归档)的整节 —— 直接搬走。

3. 【技能】节的小小节 —— 三层降级:

  • 超过 6 条 → 搬到剩 6 条,原位留一行 - 已归档 N 条小小节
  • 还降不下来 → 每节继续往下压,但最低留 2 条
  • 2 条都还超 → 整节迁走,并在 ## 技能 记一行索引

那个占位行是标记,不是垃圾——它让"搬过的节"和"从没搬过的节"在外观上区分得开。跨次运行会累加:上次 - 已归档 2 条,这次又搬 2 条,变成 - 已归档 4 条,不会并排长两条。

4. 进行中的事件 —— 不动。只有你自己标了(可归档)才会搬。


归档长什么样

落在:

<DSH_HOME>/memoryORZ/<记忆文件名>/

比如:

~/.dsh/memoryORZ/whale-loli-v2-live/
  【26-10-23】【技能】英语学习.md
  【26-10-28】【事件】搬家.md
  【26-11-03】【技能】做饭(进行中).md

文件内容:

# 英语学习【技能】【26-10-23】

> 归档自 `whale-loli-v2-live.md` · 26-10-23 · 原因:固定记忆 15203 字符超过 15000

(原文,一个字不改)

几个细节:

  • 同主题跨轮续写进同一个文件,不会每次新建一个 -2.md。文件名用首次归档的日期,后面每次续写加分隔线和当次日期。
  • 文件名不带(可归档)——归档之后这词没意义了,只保留(进行中)。
  • 整节迁走时,那条 - 已归档 N 条 占位行不进归档内容,改在文首写一句"另有 N 条更早的归档在别处"。

安全

  • 只搬不改。文件里每个字都原样进归档,插件不总结、不改写、不删内容。
  • 先备份再写盘:每次落盘前先 copyFileSync 一份 <记忆本>.bak-<时间戳>。
  • 原子写:写 .tmp-<pid>-<ts> 再 renameSync,中途断电不会留下半个文件。
  • 不发工具、不注册提示变量,不碰 whale-loli 的注入通道。文件变小了,它的 composeMemory() 注入自然就少,零冲突。

配置

cordis.patch.yml 里改:

- insert:
    - id: memory-organizer
      name: dsh-memory-organizer
      config:
        threshold: 15000
        intervalMs: 60000
键 默认 说明
threshold 15000 固定记忆区字符阈值。别调到接近 16000,那段余量是给其他三个区留的
intervalMs 60000 巡检间隔。插件每轮只 stat 一次文件属性,超阈值才真解析
dryRun false 只报告不落盘
files 自动发现 显式指定要管哪几个记忆本(字符串或数组,可给绝对路径)。给了就不扫描、不校验指纹

两个坑(写给要改 whale-loli 的人)

这插件跟 dsh-whale-loli 的解析逻辑强相关,两处必须知道:

一、# 固定记忆 区外的内容活不下来。

renderMemory() 每次写盘都按四个区重建整个文件,区标题以外的所有内容(包括文件头)会被直接丢弃。所以格式规则块必须塞在 # 固定记忆 里面,放文件开头等于每次写记忆就丢一次。

二、> 开头的行会被吃掉。

parseMemory() 里 zones.fixed.filter() 会把 > 行当引用滤掉,空行也滤。所以规则块每行用 - 开头,不能用 > 。

(顺带:这两条也解释了为什么容器头 ## 印象 下面得有一行普通正文——只有子节没有正文的标题会被 keepPopulatedHeads 删掉,注入里结构就塌平了。)


许可

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 3d452d75308b

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout