@modusensus
使用场景
顺着之前的提案顺下来,当我们能让 mneme 能导出记忆为 markdown 后,我认为这意味着用户可以将 mneme 的导出当「能长期维护的笔记」用:一个记忆库导出成一批 markdown,交给编辑器或别的工具索引、浏览、跨机器带走。但这会引入新的问题,用久了自然会串成一条链:整理记忆 → 落盘文件变多 → 需要一个统一的落点来管它们 → 这个落点该不该继续待在 ~/.dsh 下 → 将来要不要把每个工作区的记忆也投影一份到仓库里 。
这条链的第一环已经在做了(#231 的整理接口),后面几环到现在没有落点。它们不是四个独立功能:共用同一套渲染逻辑,只差落在哪、以及能不能改回来。所以想一次把形态与归属议清楚,而不是一个 PR 改一处、每个落点各自发明一套。
已查现状
现在有三个落点,行为各不相同:
~/.dsh/memory/*.md——磁盘镜像,按 type 分五个文件;有回流 :/import 与磁盘镜像的合并走 mirror-digest 加 更新时间 的三方合并,只吃 title 与 content。
/api/dsh-mneme/export——只读导出,format=json 给整表 JSON,format=markdown 按类型分节拼成一个文件,与镜像共用同一条渲染路径。
<workspace>/.mneme/——工作区投影,还不存在。
工作区投影这件事,是回调一条更早的设计 :#17 的 §五「workspace 投影(备份性质,可选)」写过它的一份完整草稿——定位是单向投影、不是权威源;可选、默认关;把 workspace_scope = 当前 workspace 的记忆渲染到 <workspace>/.mneme/,按 type 分文件,frontmatter 带 memory id / WorkspaceId / 导出时间;agent 维度写进 frontmatter 而不建子目录(避免笛卡尔积);价值是「编辑器里直接读项目记忆」与「DB 损坏时的明文兜底」,恢复走显式命令、靠 (type, title, scope) 去重保幂等。
但那是一版随 issue 搁置的草稿,不是生效中的设计 :它没有随那一批落地,也没有排期。你关闭 #17 时列的偏差里就有它——「mirror 分域路径(第 6 条) ……未随本批,作为已知边界跟踪(见 #168 的 PR 描述边界节)」,同一个 issue 的 M3 清单也列了它。也就是说它现在只存在于一个已关闭的 issue 和一个 PR 的描述里;代码里没有任何实现(src/ 下写记忆文件的只有 mirror.js 一处)。
所以下面拿它当回调 看:它的价值在于「当时有人把该带哪些 frontmatter 字段列出来了」,而不在于「它已经定了」。
另外两条现状,都影响怎么选:
目录:记忆库现在是 ~/.dsh/memory(memoryDir 的默认值,放 memory.db 与那五个镜像文件),运行时重载荷在 ~/.dsh/mneme/。而 src/runtime/layout.js 里有一句注释写着这些「都挂在 ~/.dsh/mneme/ 下,便于用户整个删掉重来」——所以迁出这件事与你当初的意图是冲突的,要先对口径。
硬约束:同一个 scope 设计里,sensitivity=1 的记忆「不参与跨库检索、不进 mirror 导出、不入跨项目 dream 提炼」。任何新落点都必须继承这条。
期望的行为变化
同一份记忆,无论落在哪个位置,读到的形态是同一套;并且哪个落点允许改回库、哪个只读 是明确定义的,不靠使用者的印象。
具体到四件事:
格式 :落盘文件带 frontmatter,字段能直接当查询信号(来源、生成者、时间、状态)。我这边看的是 Open Knowledge Format v0.2——一个 concept 一个文件、type 必填,sources / generated / status 可选。它与我们已有的列重叠度不低,但要不要采用、还是只借它的键名,我不预设。
回流 :现在只有全局镜像能改回库,而且只吃 title 与 content——标签、重要性、来源、状态从文件改不回来。要不要扩到元数据,得先定义字段的权威归属(比如 type 算不算身份锚、status: deprecated 对应归档时是不是单向的)。
目录 :记忆库是否从 ~/.dsh 迁到 ~/.mneme 这类用户目录下、按用途分子目录。理由不是整洁:落盘文件一旦是给人读、给人改的,它放在宿主的私有目录里就等于在暗示用户别碰。
投影 :工作区投影要不要重新排期。它跟第 3 条互相牵制——投影目录本身就长在用户仓库里,先把库的位置定下来,投影的位置才有意义。
想先确认的
[Feature Request] 按 agent 与 workspace 隔离记忆:专属记忆 + 全局共享记忆并存 #17 §五 那版草稿只当参考,不当依据。 里面「单向、无回流」这条尤其想重看:当时给的理由是双向同步要解决 git checkout 冲突、双写向量、digest 冲突;但今天全局镜像已经是双向的(/import + mirror-digest 三方合并),而 <workspace>/.mneme/ 在用户的 git 仓库里,读回会跟 git checkout 打架。两个落点的策略本来就可以不同、不必统一——这一条想听你怎么看。
迁出 ~/.dsh 与「便于用户整个删掉重来」怎么取舍;存量安装要不要迁移(memoryDir 是用户可配置键)。
这一串拆成几个 PR、按什么顺序落。
可能的做法(仅供讨论,不是方案)
摆在桌上的只有这几条,我不预设:只给 /export 加一个新出口;镜像文件本身加 frontmatter;彻底改成一条记忆一个文件。粒度的代价可以量化,顺带一提:现在 5 个文件,一条记忆一个文件就是数千个,Windows 上的写入与扫描代价需要实测一次再决定——这条数据可能比格式本身更能定方向。
@modusensus
使用场景
顺着之前的提案顺下来,当我们能让 mneme 能导出记忆为 markdown 后,我认为这意味着用户可以将 mneme 的导出当「能长期维护的笔记」用:一个记忆库导出成一批 markdown,交给编辑器或别的工具索引、浏览、跨机器带走。但这会引入新的问题,用久了自然会串成一条链:整理记忆 → 落盘文件变多 → 需要一个统一的落点来管它们 → 这个落点该不该继续待在
~/.dsh下 → 将来要不要把每个工作区的记忆也投影一份到仓库里。这条链的第一环已经在做了(#231 的整理接口),后面几环到现在没有落点。它们不是四个独立功能:共用同一套渲染逻辑,只差落在哪、以及能不能改回来。所以想一次把形态与归属议清楚,而不是一个 PR 改一处、每个落点各自发明一套。
已查现状
现在有三个落点,行为各不相同:
~/.dsh/memory/*.md——磁盘镜像,按 type 分五个文件;有回流:/import与磁盘镜像的合并走mirror-digest加更新时间的三方合并,只吃title与content。/api/dsh-mneme/export——只读导出,format=json给整表 JSON,format=markdown按类型分节拼成一个文件,与镜像共用同一条渲染路径。<workspace>/.mneme/——工作区投影,还不存在。工作区投影这件事,是回调一条更早的设计:#17 的 §五「workspace 投影(备份性质,可选)」写过它的一份完整草稿——定位是单向投影、不是权威源;可选、默认关;把
workspace_scope = 当前 workspace的记忆渲染到<workspace>/.mneme/,按 type 分文件,frontmatter 带 memory id /WorkspaceId/ 导出时间;agent 维度写进 frontmatter 而不建子目录(避免笛卡尔积);价值是「编辑器里直接读项目记忆」与「DB 损坏时的明文兜底」,恢复走显式命令、靠(type, title, scope)去重保幂等。但那是一版随 issue 搁置的草稿,不是生效中的设计:它没有随那一批落地,也没有排期。你关闭 #17 时列的偏差里就有它——「mirror 分域路径(第 6 条)……未随本批,作为已知边界跟踪(见 #168 的 PR 描述边界节)」,同一个 issue 的 M3 清单也列了它。也就是说它现在只存在于一个已关闭的 issue 和一个 PR 的描述里;代码里没有任何实现(
src/下写记忆文件的只有mirror.js一处)。所以下面拿它当回调看:它的价值在于「当时有人把该带哪些 frontmatter 字段列出来了」,而不在于「它已经定了」。
另外两条现状,都影响怎么选:
~/.dsh/memory(memoryDir的默认值,放memory.db与那五个镜像文件),运行时重载荷在~/.dsh/mneme/。而src/runtime/layout.js里有一句注释写着这些「都挂在~/.dsh/mneme/下,便于用户整个删掉重来」——所以迁出这件事与你当初的意图是冲突的,要先对口径。sensitivity=1的记忆「不参与跨库检索、不进 mirror 导出、不入跨项目 dream 提炼」。任何新落点都必须继承这条。期望的行为变化
同一份记忆,无论落在哪个位置,读到的形态是同一套;并且哪个落点允许改回库、哪个只读是明确定义的,不靠使用者的印象。
具体到四件事:
type必填,sources/generated/status可选。它与我们已有的列重叠度不低,但要不要采用、还是只借它的键名,我不预设。status: deprecated对应归档时是不是单向的)。~/.dsh迁到~/.mneme这类用户目录下、按用途分子目录。理由不是整洁:落盘文件一旦是给人读、给人改的,它放在宿主的私有目录里就等于在暗示用户别碰。想先确认的
/import+mirror-digest三方合并),而<workspace>/.mneme/在用户的 git 仓库里,读回会跟git checkout打架。两个落点的策略本来就可以不同、不必统一——这一条想听你怎么看。~/.dsh与「便于用户整个删掉重来」怎么取舍;存量安装要不要迁移(memoryDir是用户可配置键)。可能的做法(仅供讨论,不是方案)
摆在桌上的只有这几条,我不预设:只给
/export加一个新出口;镜像文件本身加 frontmatter;彻底改成一条记忆一个文件。粒度的代价可以量化,顺带一提:现在 5 个文件,一条记忆一个文件就是数千个,Windows 上的写入与扫描代价需要实测一次再决定——这条数据可能比格式本身更能定方向。