前言¶
DSH 的记忆默认堆在 ~/.dsh/memory/ 下,一堆 markdown。能用,但你看不见:不知道写了哪些记忆、它们之间有什么关系、人格藏在哪个文件里、上个会话说到哪儿断了。插件 zyu-23/dsh-memory-nebula 想做的就是把这个目录摊开——记忆可视化成力导向星云图,并且把记忆、人格、状态三类数据的读写统一接管下来。
维护者是 Zyu-23,分类属于「记忆」,GitHub 星标为 0,版本 0.1.0,MIT 许可。属于个人探索性质的插件,下面介绍的能力都来自其 README,不代表已大规模验证。
这是什么¶
一句话:一个 DSH 插件,做四件事:把记忆画成力导向星云图;提供 memory_write / memory_read / memory_list / memory_delete / memory_search 五个记忆工具;把人格存成 persona.json 每轮注入;记录「此刻正在做什么」的状态,换会话不丢。
它兼容 dsh-auto-memory 的 markdown 格式,思路借鉴了 peterpoal134/memory-brain(AGPL-3.0)的「存 / 喂 / 查」设计,本实现为独立编写,采用 MIT 许可。
核心功能¶
星云图¶
- 双星云:自动扫描
~/.dsh/memory/<slug>/发现多个工作区,每个工作区一个「阵营」;只有一个工作区就是单星云,不硬编码路径。 - 力导向布局:Canvas 2D 手写物理引擎,参数为斥力 2600 / 弹簧 0.045 / 阻尼 0.86;节点按类型着色(人 / 物 / 话题 / 地点 / 技能 / 人格)。
- 点节点看详情:关联记忆列表 + 每条记忆的正本路径。
- 人格簇:图中间一簇金色节点,对应「她是谁」。
- 三种入口:侧栏 Tab(小窗)/ 侧栏图标(全屏)/ 主面板。
记忆与检索¶
memory_search 是四路打分合并:分词(中文 bigram)→ IDF 加权 → 字段加权(名字 > 描述 > 正文)→ 关键词、图谱、重要性、新鲜度合并。没有 embedding,同义不同词可能查不到。
人格与状态¶
人格数据在 ~/.dsh/memory-nebula/persona.json,每轮注入 <memory_nebula_persona>;状态在 ~/.dsh/memory-nebula/state.json,每轮注入 <memory_nebula_state>。
状态更新有两条路:主力是手动调 nebula_state 工具,记录准确;兜底是新会话开始时如果状态超过 30 分钟没更新,插件用当前用户消息自动记一笔,前缀「(自动)」,可被手动更新覆盖。
注入与存储¶
注入走 systemPrompt.section,order 4300 人格 / 4400 状态 / 4500 记忆召回,注入文本按检索结果签名去抖,目的是减少 KV 缓存失效。记忆正本仍是 markdown + YAML frontmatter,写入是原子的(tmp → rename)。
安装与启用¶
官方 README 只给了「手动安装(推荐)」,这条路径可用;npm 渠道暂未发布,所以没有可执行的一键命令。坚持不要凭插件名拼 dsh plugin add github:owner/repo,那个包名和命令不能保证可用。
1、把本仓库整个目录放进你 DSH profile 的 node_modules/:
<你的 DSH 目录>/profiles/<profile>/node_modules/dsh-memory-nebula/
这一步是下载源码后手工放置,README 未提供 dsh plugin 形式的快捷安装。
2、编辑该 profile 的 package.json:
{
"dependencies": {
"dsh-memory-nebula": "0.1.0"
},
"dsh": {
"profile": {
"bundles": [
"...",
"dsh-memory-nebula"
]
}
}
}
3、重启 DSH,然后验证:打开侧栏看到「记忆星云」图标即成功,点开是一张空白星云图 + 引导提示。
首次启动插件会自动初始化两个空白数据文件:~/.dsh/memory-nebula/entities.json(默认 entities: [])和 ~/.dsh/memory-nebula/persona.json(默认 directives: [] / sections: [])。这是设计如此,星云图开箱即空,内容要自己写;已有数据不会被覆盖,所以升级安全。
还要注意 peerDependencies 的版本区间:@deepseek-ai/cordis >=4.0.2 <5.0.0,@deepseek-ai/dsh-home-paths / dsh-llm / dsh-tools 都是 >=0.1.5-rc.2 <0.3.0,node 要求 ^22.19.0 || >=24.0.0。
典型用法¶
下面四步来自 README 的「使用(从零开始)」,是一个可复现的最小闭环。
第 1 步,看图。打开侧栏「记忆星云」,刚装好时图是空白的,中间显示提示:星云还是空的 → memory_write 写记忆 → nebula_extract 抽实体 → 刷新。
第 2 步,写第一条记忆:
{
"name": "my-first-memory",
"description": "一句话摘要",
"type": "project",
"body": "记忆正文……"
}
第 3 步,抽实体,让这条记忆进图:
{ "memoryName": "my-first-memory", "side": "host" }
它会读这条记忆,用 LLM 判断涉及哪些实体、要不要新建,然后更新 entities.json。
第 4 步,刷新星云图,节点就长出来了。之后每条记忆重复「写 → 抽」,图会越来越丰富。
交互上:拖拽节点、滚轮缩放、拖空白平移;点节点看关联记忆和正本路径;金色人格节点点开看人格条目内容。注意图是静态快照,改了记忆要刷新页面,抽实体也要手动调 nebula_extract。
想自定义人格,默认是空的,编辑 ~/.dsh/memory-nebula/persona.json:
{
"directives": ["LANG_ZH_CN_ONLY", "ADDRESS_AS_USER"],
"sections": [
{ "id": "identity", "title": "身份", "category": "身份", "content": "你是……" }
]
}
directives 是压缩指令(给模型解析用),sections 是自然语言描述,每条在图上对应一个金色节点。填好后每轮自动注入。
想手工加实体,也可以直接编辑 ~/.dsh/memory-nebula/entities.json:
{
"entities": [
{ "id": 1, "name": "我的项目", "type": "topic", "side": "host" }
],
"edges": [],
"memoryEntities": { "host": {}, "qq": {} }
}
实体 id 不要重复,图布局依赖 id 做确定性定位。
数据位置¶
| 数据 | 位置 |
|---|---|
| 记忆正本 | ~/.dsh/memory/<slug>/*.md(markdown + frontmatter) |
| 实体关系 | ~/.dsh/memory-nebula/entities.json |
| 人格 | ~/.dsh/memory-nebula/persona.json |
| 状态 | ~/.dsh/memory-nebula/state.json(多工作区时按工作区拆成 state-<key>.json) |
| 节点目录 | ~/.dsh/memory-nebula/contexts/ |
| 注入调试 | ~/.dsh/memory-nebula/last-inject.json |
排障时先看 last-inject.json,能直接看到这轮注入的内容。
适用场景与注意¶
适合这几类人:想看到记忆之间关系的 DSH 用户;想把人格从 AGENTS.md 挪到结构化文件、要求每轮注入的人;在多个工作区之间切换、希望「正在做什么」跨会话保留的人。
注意几点:
- 插件以当前 dsh 进程的权限运行,能读写你 profile 下的文件和
~/.dsh/数据。安装前请检查源码,确认entities.json/persona.json/state.json的写入内容符合预期。 - 许可证是 MIT,但
persona.json里写的是自定义人格指令,属于你自己的配置。 - README 明确写了本插件不提供备份功能,要备份请自行向 DSH 提要求写备份脚本,或用 git / 云盘同步
~/.dsh/memory/。 - 已知限制:检索无 embedding,同义不同词可能查不到;图是静态快照;抽实体是手动的。
- 若要改客户端渲染代码:修改
lib/client.template.js后复制为client.js,lib/*.js是宿主模块。
结尾¶
这款插件的价值在把记忆从一堆 markdown 变成看得见的星云,并顺手统一了记忆 / 人格 / 状态的管理。它当前还是早期版本(0.1.0,星标 0),收益取决于你是否有真的需要可视化记忆、需要跨会话状态的场景;纯文本记忆工具的用户不必急着换。
目录页:https://www.skillhub.cn/plugins/Zyu-23/dsh-memory-nebula
GitHub:https://github.com/Zyu-23/dsh-memory-nebula