@modusensus/dsh-mneme 0.6.7 → 0.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/test.yml +32 -0
- package/.release-notes-v0.6.9.md +13 -0
- package/CHANGELOG.md +89 -0
- package/LICENSE +21 -21
- package/README.md +219 -463
- package/SECURITY.md +544 -0
- package/docs/devlog/2026-08-14-dsh-mneme-dev-log.md +247 -0
- package/docs/devlog/2026-08-15-dsh-mneme-audit-stress-dev-log.md +145 -0
- package/docs/devlog/2026-08-15-dsh-mneme-pipeline-dev-log.md +56 -0
- package/docs/devlog/2026-08-15-dsh-mneme-reflection-dev-log.md +77 -0
- package/docs/devlog/2026-08-15-dsh-mneme-review-fixes-dev-log.md +64 -0
- package/docs/devlog/2026-08-15-dsh-mneme-semantic-dev-log.md +90 -0
- package/dsh-mneme/CHANGELOG.md +248 -0
- package/dsh-mneme/LICENSE +21 -0
- package/dsh-mneme/README.md +465 -0
- package/{cordis.patch.yml → dsh-mneme/cordis.patch.yml} +15 -15
- package/dsh-mneme/docs/AGENT_MEMORY_RESEARCH.md +183 -0
- package/dsh-mneme/docs/ENTITIES.md +245 -0
- package/dsh-mneme/docs/LOCAL_MODEL.md +141 -0
- package/dsh-mneme/docs/MIGRATION.md +127 -0
- package/dsh-mneme/docs/SEMANTIC.md +256 -0
- package/dsh-mneme/docs/SLEEP.md +163 -0
- package/{lib → dsh-mneme/lib}/api.js +783 -783
- package/{lib → dsh-mneme/lib}/client.js +1757 -1757
- package/{src → dsh-mneme/lib}/commands.js +64 -64
- package/{lib → dsh-mneme/lib}/config.js +298 -288
- package/{lib → dsh-mneme/lib}/dream/clustering.js +118 -118
- package/{src → dsh-mneme/lib}/dream/decisions.js +488 -439
- package/{lib → dsh-mneme/lib}/dream/sleep.js +561 -554
- package/{src → dsh-mneme/lib}/dream/tag-extractor.js +156 -156
- package/{lib → dsh-mneme/lib}/dream.js +958 -929
- package/{src → dsh-mneme/lib}/embedding.js +154 -154
- package/{src → dsh-mneme/lib}/entities/extractor.js +242 -242
- package/{src → dsh-mneme/lib}/hot-memory.js +53 -53
- package/{lib → dsh-mneme/lib}/index.js +361 -361
- package/{src → dsh-mneme/lib}/inject.js +208 -208
- package/{lib → dsh-mneme/lib}/local-embedder.js +282 -282
- package/{lib → dsh-mneme/lib}/mirror.js +170 -170
- package/{lib → dsh-mneme/lib}/parser/tag.js +59 -59
- package/{lib → dsh-mneme/lib}/parser/wiki-link.js +38 -38
- package/{src → dsh-mneme/lib}/quality-filter.js +123 -123
- package/{lib → dsh-mneme/lib}/reranker.js +218 -218
- package/{lib → dsh-mneme/lib}/search/adaptive.js +22 -22
- package/{lib → dsh-mneme/lib}/search/bm25.js +96 -96
- package/{src → dsh-mneme/lib}/search/tag-boost.js +61 -61
- package/{src → dsh-mneme/lib}/service.js +1726 -1726
- package/{lib → dsh-mneme/lib}/settings.js +172 -172
- package/{lib → dsh-mneme/lib}/store.js +2238 -2238
- package/{lib → dsh-mneme/lib}/summarize.js +236 -236
- package/{lib → dsh-mneme/lib}/tools.js +290 -290
- package/{lib → dsh-mneme/lib}/vector-index.js +116 -116
- package/dsh-mneme/package-lock.json +1936 -0
- package/dsh-mneme/package.json +80 -0
- package/{scripts → dsh-mneme/scripts}/benchmark-embed.js +201 -201
- package/{scripts → dsh-mneme/scripts}/benchmark-recall.js +133 -133
- package/{scripts → dsh-mneme/scripts}/benchmark-rerank.js +166 -166
- package/{scripts → dsh-mneme/scripts}/e2e-dsh.js +218 -218
- package/{scripts → dsh-mneme/scripts}/stress-dsh.js +255 -255
- package/{scripts → dsh-mneme/scripts}/sync-lib.js +52 -52
- package/{src → dsh-mneme/src}/api.js +783 -783
- package/{lib → dsh-mneme/src}/commands.js +64 -64
- package/{src → dsh-mneme/src}/config.js +298 -288
- package/{src → dsh-mneme/src}/dream/clustering.js +118 -118
- package/{lib → dsh-mneme/src}/dream/decisions.js +488 -439
- package/{src → dsh-mneme/src}/dream/sleep.js +561 -554
- package/{lib → dsh-mneme/src}/dream/tag-extractor.js +156 -156
- package/{src → dsh-mneme/src}/dream.js +958 -929
- package/{lib → dsh-mneme/src}/embedding.js +154 -154
- package/{lib → dsh-mneme/src}/entities/extractor.js +242 -242
- package/{lib → dsh-mneme/src}/hot-memory.js +53 -53
- package/{src → dsh-mneme/src}/index.js +361 -361
- package/{lib → dsh-mneme/src}/inject.js +208 -208
- package/{src → dsh-mneme/src}/local-embedder.js +282 -282
- package/{src → dsh-mneme/src}/mirror.js +170 -170
- package/{src → dsh-mneme/src}/parser/tag.js +59 -59
- package/{src → dsh-mneme/src}/parser/wiki-link.js +38 -38
- package/{lib → dsh-mneme/src}/quality-filter.js +123 -123
- package/{src → dsh-mneme/src}/reranker.js +218 -218
- package/{src → dsh-mneme/src}/search/adaptive.js +22 -22
- package/{src → dsh-mneme/src}/search/bm25.js +96 -96
- package/{lib → dsh-mneme/src}/search/tag-boost.js +61 -61
- package/{lib → dsh-mneme/src}/service.js +1726 -1726
- package/{src → dsh-mneme/src}/settings.js +172 -172
- package/{src → dsh-mneme/src}/store.js +2238 -2238
- package/{src → dsh-mneme/src}/summarize.js +236 -236
- package/{src → dsh-mneme/src}/tools.js +290 -290
- package/{src → dsh-mneme/src}/vector-index.js +116 -116
- package/{test → dsh-mneme/test}/api.test.js +594 -594
- package/{test → dsh-mneme/test}/audit.test.js +448 -448
- package/{test → dsh-mneme/test}/benchmark.test.js +35 -35
- package/{test → dsh-mneme/test}/boundary-v0625.test.js +82 -82
- package/{test → dsh-mneme/test}/client.test.js +368 -368
- package/{test → dsh-mneme/test}/clustering.test.js +100 -100
- package/{test → dsh-mneme/test}/commands.test.js +69 -69
- package/{test → dsh-mneme/test}/config.test.js +50 -50
- package/{test → dsh-mneme/test}/conflict-freeze.test.js +290 -290
- package/{test → dsh-mneme/test}/directory.test.js +134 -134
- package/{test → dsh-mneme/test}/dream.test.js +1060 -901
- package/{test → dsh-mneme/test}/entities.test.js +522 -522
- package/{test → dsh-mneme/test}/epistemic.test.js +298 -298
- package/{test → dsh-mneme/test}/fnew-0112.test.js +311 -311
- package/{test → dsh-mneme/test}/fnew-03.test.js +422 -422
- package/{test → dsh-mneme/test}/graph-api.test.js +175 -175
- package/{test → dsh-mneme/test}/helpers/dream-mock.js +82 -82
- package/{test → dsh-mneme/test}/hot-memory.test.js +174 -174
- package/{test → dsh-mneme/test}/inject.test.js +103 -103
- package/{test → dsh-mneme/test}/llm-audit.test.js +279 -279
- package/{test → dsh-mneme/test}/local-embedder.test.js +227 -227
- package/{test → dsh-mneme/test}/mirror-dirty.test.js +424 -424
- package/{test → dsh-mneme/test}/mirror-edit-digest.test.js +187 -187
- package/{test → dsh-mneme/test}/mirror-generation.test.js +499 -499
- package/{test → dsh-mneme/test}/mirror.test.js +249 -249
- package/{test → dsh-mneme/test}/normalize-decisions.test.js +120 -120
- package/{test → dsh-mneme/test}/peer-blockers.test.js +190 -190
- package/{test → dsh-mneme/test}/policy-epoch.test.js +259 -259
- package/{test → dsh-mneme/test}/provenance.test.js +103 -103
- package/{test → dsh-mneme/test}/quality-filter.test.js +118 -118
- package/{test → dsh-mneme/test}/reasoning-effort.test.js +199 -199
- package/{test → dsh-mneme/test}/recall-evals.test.js +235 -235
- package/{test → dsh-mneme/test}/recall-layer.test.js +315 -315
- package/{test → dsh-mneme/test}/receipt-chain.test.js +451 -451
- package/{test → dsh-mneme/test}/reflection.test.js +226 -226
- package/{test → dsh-mneme/test}/reranker.test.js +240 -240
- package/{test → dsh-mneme/test}/search-fusion.test.js +90 -90
- package/{test → dsh-mneme/test}/semantic.test.js +124 -124
- package/{test → dsh-mneme/test}/service-search.test.js +199 -199
- package/{test → dsh-mneme/test}/service.test.js +435 -435
- package/{test → dsh-mneme/test}/settings.test.js +118 -118
- package/{test → dsh-mneme/test}/sleep.test.js +365 -365
- package/{test → dsh-mneme/test}/store.test.js +436 -436
- package/{test → dsh-mneme/test}/stress.test.js +209 -209
- package/{test → dsh-mneme/test}/summarize.test.js +191 -191
- package/{test → dsh-mneme/test}/tag-boost.test.js +125 -125
- package/{test → dsh-mneme/test}/tag.test.js +312 -312
- package/{test → dsh-mneme/test}/tools.test.js +285 -285
- package/{test → dsh-mneme/test}/vector-index.test.js +221 -221
- package/{test → dsh-mneme/test}/wiki-link.test.js +332 -332
- package/package.json +18 -40
- package//346/250/252/345/271/205.png +0 -0
package/README.md
CHANGED
|
@@ -1,463 +1,219 @@
|
|
|
1
|
-
<p align="center"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
dsh
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
|
87
|
-
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
###
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
### 三路召回融合与会话热记忆 🔎(v0.5.0)
|
|
222
|
-
|
|
223
|
-
- **BM25 稀疏第三路召回**(`src/search/bm25.js`):与向量召回、FTS5/LIKE 关键词并列——ASCII 词元 + CJK bigram 分词、IDF 加权(归一化 [0,1]),专有名词 / ID / 代码片段等散词查询不再依赖子串命中。融合规则:未召回行按 `0.3×BM25分` 回填;仅向量召回行获得词法加分;LIKE 已命中行不叠分。`bm25SearchEnabled` 可关
|
|
224
|
-
- **自适应阈值**(`src/search/adaptive.js`):取代固定 `0.65` 截断——`entity:`/`attr:` 前缀放宽 0.5,短查询(<5 字符)收紧 0.7,长查询(>50)放宽 0.6,Top1/Top5 分差 > 0.3 时放宽让尾部进 Rerank;显式传 `threshold` 或 `adaptiveThresholdEnabled=false` 走旧行为
|
|
225
|
-
- **会话级短期热记忆**(`src/hot-memory.js`):最近 N 轮对话(默认 5 轮,`hotMemoryRounds`)按 token 预算(默认 2000,`hotMemoryMaxTokens`)滚动截断,从会话事件日志无状态重建、不落库;注入顺序为「短期上下文 → 长期记忆召回 → 摘要」
|
|
226
|
-
- **选择性注入**:query 向量可用时注入候选按主题相似度重排(`selectiveInjectEnabled` 可关);**搜索时语义去重**为激进选项(`searchSemanticDedup=true` 显式开启,近重复行 Rerank 前丢弃)
|
|
227
|
-
- **召回基准**(`scripts/benchmark-recall.js`):标准查询集驱动,计算 Recall@5 与 MRR,`legacy`(三特性全关)vs `fused`(默认配置)双跑对比
|
|
228
|
-
|
|
229
|
-
## 🆕 最近版本亮点
|
|
230
|
-
|
|
231
|
-
| 版本 | 亮点 |
|
|
232
|
-
|------|------|
|
|
233
|
-
| **v0.6.7** | 记忆面板前端增强:记忆删除端点 + autoTag 手动开关 + 目录 VS Code 式文件树 + 面板卡片式布局(分类栏 + search/tree/detail 三卡);716 测试全绿 |
|
|
234
|
-
| **v0.6.6** | kimi-k3 复验 4 项修复:autoTag 跳过已打标记忆并合并、tag: 搜索召回统计门控(避免零召回拖垮 TopK);710 测试全绿 |
|
|
235
|
-
| **v0.6.5** | 整合 v0.6.2-0.6.4:Tag 系统 + 目录视图 + Tag 加权召回(全部 opt-in);709 测试全绿 |
|
|
236
|
-
| **v0.6.4** | Tag 加权召回:query/session tag 交集 boost(`tagBoostEnabled` 默认关) |
|
|
237
|
-
| **v0.6.3** | 目录视图:Tag 文件夹 + 无标签兜底 + 点击跳详情 |
|
|
238
|
-
| **v0.6.2** | Tag 系统:`#标签` + autoDream 自动打标 + `tag:` 搜索 + 面板 chips |
|
|
239
|
-
| **v0.6.1** | Wiki-Link 双向链接(笔记化记忆库第一步):[[笔记]] 跨记忆链接 + 反向链接面板 + links_to partial 唯一索引;654 测试全绿 |
|
|
240
|
-
| **v0.6.0** | 会话生命周期(把对话当存档点):`session_disposed_at` 独立字段软隐藏会话删除的记忆(与 `archived` 正交,可恢复)+ `memory_delete` 支持描述删除 + 事件订阅熔断;阿里云 kimi-k2.7-code 审查 4 项修复;628 测试全绿 |
|
|
241
|
-
| **v0.5.0** | 主区「记忆库」视图(取代侧边栏抽屉)+ 记忆图谱可视化(ego-graph API + 零依赖 SVG 力导向)+ BM25 三路召回融合 + 自适应阈值 + 会话热记忆 + 召回基准评测;593 测试全绿 |
|
|
242
|
-
| **v0.4.2** | autoSummarize 自定义模型:`summarizeProvider`/`summarizeModel` 配置项,可独立指定轻量模型(如 qwen3.6-plus)用于会话摘要,节省主模型 token;473 测试全绿 |
|
|
243
|
-
| **v0.4.0** | 系统级睡眠 Sleep Mode:空闲触发的四阶段深度维护(冲突消解 / 归档降级 / 模式发现 / 关系补全),可中断、串行安全、fail-safe,分层压缩释放冷记忆;471 测试全绿 |
|
|
244
|
-
| **v0.3.9** | 修复第三方审计 4 项 FAIL:CAS 同事务原子化、Mirror 降级回执透传、逐 type 物理终态收敛、Generation 强整数校验与并发初始化稳定化 |
|
|
245
|
-
| **v0.3.8** | audit peer 复验 6 项运行时阻断全部修复:desired generation 同事务原子递增(崩溃窗口不再静默跳过)、同步失败不静默、原子 generation 增量(多进程零丢失)、逐 type committed/failed/pending 回执、读取失败显式 unknown、generation 上界/负数 CHECK |
|
|
246
|
-
| **v0.3.7** | 启动竞态修复:人工编辑 md 镜像后重启向量重建失败(回灌移入 init 就绪后 + scheduleEmbed 就绪门) |
|
|
247
|
-
| **v0.3.6** | mirror 同步状态机:generation/applied_generation 债务建模、F-NEW-03 mirror 健康状态、持久 dirty + 启动 recoverMirror |
|
|
248
|
-
| **v0.3.0** | 记忆基因:实体/属性/关系三表 + 时间轴 + 实体搜索 + autoDream supersedes |
|
|
249
|
-
|
|
250
|
-
## 🗺️ 进化路线图
|
|
251
|
-
|
|
252
|
-
| 版本 | 状态 | 主题 | 说明 |
|
|
253
|
-
|------|------|------|------|
|
|
254
|
-
| v0.2.x | ✅ 完成 | 语义增强 + 反思更新 | 本地 Embedding/Rerank/聚类、`failure_memories` 失败追踪 |
|
|
255
|
-
| v0.3.0 | ✅ 完成 | 记忆基因 | entities/attrs/relations 三表 + 时间轴 + 实体搜索 |
|
|
256
|
-
| v0.3.6–0.3.8 | ✅ 完成 | 镜像一致性 + 审计加固 | generation 同步状态机、audit peer 6 项运行时阻断修复、450 测试全绿 |
|
|
257
|
-
| v0.3.9 | ✅ 完成 | 审计加固 A/B/D/F | compareAndUpdate 同事务原子性、degraded 回执、逐 type 物理终态、整数 fail-closed、并发初始化稳定 |
|
|
258
|
-
| **v0.4.0** | ✅ 完成 | 系统级睡眠 Sleep Mode | 空闲触发的四阶段深度维护(冲突消解 / 归档降级 / 模式发现 / 关系补全)、分层压缩、可中断串行 fail-safe;471 测试全绿 |
|
|
259
|
-
| **v0.4.2** | ✅ 完成 | autoSummarize 自定义模型 | `summarizeProvider`/`summarizeModel` 配置项支持,可独立指定轻量模型(如 qwen3.6-plus)用于会话摘要,节省主模型 token;473 测试全绿 |
|
|
260
|
-
| **v0.4.3** | ✅ 完成 | autoDream 大记忆量修复 | issue#9 B+A:`dreamMaxTokens` 上限 32768→131072 + `dreamReasoningEffort`/`sleepReasoningEffort` 思考开关(none 默认,主对话不受影响);478 测试全绿 |
|
|
261
|
-
| **v0.4.4** | ✅ 完成 | autoDream 决策覆盖修复 | issue#9 方案C:滑动窗口 `dreamMaxSnapshotSize`(默认200,updated_at 倒序截断) + 隐式 keep `dreamImplicitKeep`(默认true) + 覆盖率下限 `dreamMinExplicitCoverage`(默认50%) + 固定决策 schema;487 测试全绿 |
|
|
262
|
-
| **v0.4.5** | ✅ 完成 | epistemic trust + recall eval | 记忆可信度分级 `trustEpistemicWeighting`(observation>inferred>subjective:检索排序优先高可信、注入标注 `[verified]`、dream merge/conflict 偏向高可信;opt-in 默认关)+ 检索评估 `evaluateRetrieval` 落库 `recall_evals`(`evalPersistTestResults` opt-in 默认关,生产检索始终走 `recall_runs` 无条件隔离);518 测试全绿 |
|
|
263
|
-
| **v0.4.6** | ✅ 完成 | 8 项修复(向量链路 + 注入/质量/审计) | 向量链路修复(embedSingle 适配 / `autoReindexOnBoot` 存量回填 / `vector_meta` 元数据)+ 注入语义召回 `hybridInject` + 同标题追加 `content_history` + 注入长度上限(单条 300 / 整块 1500)+ 记忆质量过滤 `memoryQualityFilter` + LLM 消耗审计 `llmAudit`(表 + 埋点 + 只读 API);553 测试全绿 |
|
|
264
|
-
| **v0.4.7** | ✅ 完成 | schema 迁移幂等化 | 并发打开同一 db 时 `PRAGMA table_info` 检查与 ALTER 非原子,可能重复 `ADD COLUMN` 报 duplicate column name;改用 `addColumn` helper 吞掉竞态(try/catch),12 处迁移统一收口 |
|
|
265
|
-
| **v0.5.0** | ✅ 完成 | 召回融合与记忆可视化 | 主区「记忆库」视图 + 记忆图谱(ego-graph API + 零依赖 SVG 力导向)+ BM25 三路召回融合 + 自适应阈值 + 会话热记忆 + 召回基准;593 测试全绿 |
|
|
266
|
-
| **v0.6.0** | ✅ 完成 | 会话生命周期 | 把对话当存档点:`session_disposed_at` 软隐藏会话删除的记忆(与 `archived` 正交、可恢复)+ `memory_delete` 描述删除 + 事件熔断;628 测试全绿 |
|
|
267
|
-
| **v0.6.1** | ✅ 完成 | Wiki-Link 双向链接 | 笔记化记忆库第一步:`[[target]]` 跨记忆链接 + 反向链接面板 + links_to partial 唯一索引;654 测试全绿 |
|
|
268
|
-
| **v0.6.2** | ✅ 完成 | Tag 系统 | `#标签` 解析 + autoDream 自动打标 + `tag:` 搜索 + 面板 chips + mirror `#tag` 行(全部 opt-in) |
|
|
269
|
-
| **v0.6.3** | ✅ 完成 | 目录视图 | Tag 文件夹手风琴 + 无标签兜底 + 点击跳详情 + `GET /api/dsh-mneme/directory` 端点 |
|
|
270
|
-
| **v0.6.4** | ✅ 完成 | Tag 加权召回 | query/session tag 交集 boost(×1.15 / ×1.08),`tagBoostEnabled` 默认关 |
|
|
271
|
-
| **v0.7.0+** | 🚀 远期 | 自进化记忆 | 兴趣漂移跟踪 + 跨 workspace 记忆共享(等 DSH 支持) |
|
|
272
|
-
|
|
273
|
-
> 新能力一律做成**可开关的功能**(配置启用/关闭),默认保守开启、不破坏现有行为。`failure_memories` 表与 autoDream 决策引擎已为后续反思性成长铺好路。
|
|
274
|
-
|
|
275
|
-
## 📦 安装
|
|
276
|
-
|
|
277
|
-
### 前置条件
|
|
278
|
-
|
|
279
|
-
- [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)
|
|
280
|
-
- Node 24+(`node:sqlite`)
|
|
281
|
-
|
|
282
|
-
### 安装步骤
|
|
283
|
-
|
|
284
|
-
#### 方式一:npm 安装(推荐)
|
|
285
|
-
|
|
286
|
-
dsh-mneme 是一个 **bundle**(声明了 `dsh.bundle` manifest),安装即自动激活,无需手动写配置:
|
|
287
|
-
|
|
288
|
-
```bash
|
|
289
|
-
# 1. 安装插件(自动注册 bundle 层)
|
|
290
|
-
dsh plugin --profile web add @modusensus/dsh-mneme
|
|
291
|
-
|
|
292
|
-
# 2. 重启
|
|
293
|
-
dsh web
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
> 如需自定义配置(阈值、延迟等),可在 `~/.dsh/profiles/web/cordis.patch.yml` 中按 `id: dsh-mneme` 覆盖默认值(见下方配置表)。
|
|
297
|
-
|
|
298
|
-
#### 方式二:从源码安装
|
|
299
|
-
|
|
300
|
-
```bash
|
|
301
|
-
git clone https://github.com/modusensus/dsh-mneme.git
|
|
302
|
-
cd dsh-mneme
|
|
303
|
-
dsh plugin --profile web add .
|
|
304
|
-
dsh web
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
#### 自定义配置(可选)
|
|
308
|
-
|
|
309
|
-
默认配置即可用。如需调整,在 `~/.dsh/profiles/web/cordis.patch.yml` 中覆盖:
|
|
310
|
-
|
|
311
|
-
```yaml
|
|
312
|
-
- id: dsh-mneme
|
|
313
|
-
name: '@modusensus/dsh-mneme'
|
|
314
|
-
config:
|
|
315
|
-
memoryDir: ~/.dsh/memory
|
|
316
|
-
autoInject: true
|
|
317
|
-
autoSummarize: true
|
|
318
|
-
maxInjectedItems: 5
|
|
319
|
-
importanceThreshold: 3
|
|
320
|
-
autoDream: true
|
|
321
|
-
dreamThresholdCount: 10
|
|
322
|
-
dreamThresholdChars: 5000
|
|
323
|
-
dreamDelayMs: 2000
|
|
324
|
-
# 会话生命周期(v0.6.0,默认关):会话被删时软隐藏其记忆,可恢复
|
|
325
|
-
# sessionLifecycleEnabled: false
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
## ⚙️ 配置
|
|
329
|
-
|
|
330
|
-
| 键 | 默认值 | 说明 |
|
|
331
|
-
|----|--------|------|
|
|
332
|
-
| `memoryDir` | `~/.dsh/memory` | 记忆存储目录(SQLite + Markdown) |
|
|
333
|
-
| `autoInject` | `true` | 会话启动自动注入记忆 |
|
|
334
|
-
| `autoSummarize` | `true` | 会话结束自动提炼摘要 |
|
|
335
|
-
| `summarizeProvider` / `summarizeModel` | 空 | 摘要的 LLM 路由覆盖(空=使用当前会话模型);推荐轻量模型节省主模型 token |
|
|
336
|
-
| `maxInjectedItems` | `5` | 最多注入几条记忆 |
|
|
337
|
-
| `importanceThreshold` | `3` | 注入的最低重要性(1-5) |
|
|
338
|
-
| `autoDream` | `true` | 自动记忆整理开关 |
|
|
339
|
-
| `dreamThresholdCount` | `10` | 触发整理的记忆条数阈值 |
|
|
340
|
-
| `dreamThresholdChars` | `5000` | 触发整理的总字符阈值 |
|
|
341
|
-
| `dreamDelayMs` | `2000` | 整理异步延迟(去抖) |
|
|
342
|
-
| `dreamProvider` / `dreamModel` | 空 | dream 的 LLM 路由回退(默认用 agent 默认模型) |
|
|
343
|
-
| `dreamMaxTokens` | `8192` | dream LLM 调用最大 token 数(上限 131072;大记忆量建议调大,见下方调优指南) |
|
|
344
|
-
| `dreamReasoningEffort` | `none` | dream LLM 推理强度透传:`off` / `low` / `medium` / `high` / `none`(`off`=显式关闭思考,思考型模型(如 deepseek-v4-flash)必须用它,否则推理会烧光 token 预算导致正文为空;`none`=不传该字段,沿用模型默认) |
|
|
345
|
-
| `apiToken` | 空 | 可选 API 鉴权 token;设置后写操作与密钥接口要求 `Authorization: Bearer <apiToken>` |
|
|
346
|
-
| `embedProvider` | `openai` | 语义后端:`openai`(默认,兼容 v0.1)/ `local`(ONNX 离线)/ `ollama` |
|
|
347
|
-
| `localEmbedModel` | `Xenova/bge-small-zh-v1.5` | 本地 ONNX embedding 模型 |
|
|
348
|
-
| `localEmbedDimension` | `512` | 本地 embedding 向量维度 |
|
|
349
|
-
| `localEmbedDevice` | `cpu` | 本地推理设备:`cpu` / `gpu` |
|
|
350
|
-
| `localEmbedBatchSize` | `8` | 本地 embedding 批大小(1-64) |
|
|
351
|
-
| `ollamaBaseUrl` | `http://localhost:11434` | Ollama 服务地址 |
|
|
352
|
-
| `ollamaModel` | `nomic-embed-text` | Ollama embedding 模型 |
|
|
353
|
-
| `embedModelCacheDir` | 空 | 模型缓存目录(空 = 用户级 `~/.dsh/mneme/models`) |
|
|
354
|
-
| `embedModelMirror` | `https://hf-mirror.com` | 模型下载镜像源 |
|
|
355
|
-
| `vectorSearchTopK` | `20` | 向量搜索返回 Top-K |
|
|
356
|
-
| `vectorSearchThreshold` | `0.65` | 向量搜索相似度阈值 |
|
|
357
|
-
| `hybridSearchVectorWeight` | `0.6` | 混合搜索向量权重 |
|
|
358
|
-
| `hybridSearchKeywordWeight` | `0.4` | 混合搜索关键词权重 |
|
|
359
|
-
| `rerankEnabled` | `false` | 是否启用 Rerank 精排(显式开启才加载本地 onnxruntime 模型) |
|
|
360
|
-
| `rerankProvider` | `none` | Rerank 后端:`local` / `none`(默认 `none`) |
|
|
361
|
-
| `rerankModel` | `Xenova/bge-reranker-base` | Rerank 交叉编码模型 |
|
|
362
|
-
| `rerankBatchSize` | `8` | Rerank 批大小 |
|
|
363
|
-
| `rerankMaxCandidates` | `30` | Rerank 最大候选数 |
|
|
364
|
-
| `rerankScoreThreshold` | `0.1` | Rerank 分数阈值(低于丢弃) |
|
|
365
|
-
| `reflectionUpdateEnabled` | `true` | update 决策总开关 |
|
|
366
|
-
| `reflectionFailureTracking` | `true` | 失败追踪总开关 |
|
|
367
|
-
| `reflectionUpdateMaxPerRun` | `2` | 每次整理最多 update 数 |
|
|
368
|
-
| `reflectionUpdateMinAgeHours` | `24` | 新建记忆保护期(小时) |
|
|
369
|
-
| `entityExtractionEnabled` | `false` | 实体抽取总开关(v0.3.0;存储层恒可用) |
|
|
370
|
-
| `entityExtractionModel` | 空 | 抽取专用模型(空 = 用 agent 默认模型) |
|
|
371
|
-
| `entityExtractionMaxEntities` | `10` | 每次抽取实体数上限 |
|
|
372
|
-
| `entityExtractionMaxAttrs` | `20` | 每实体属性数上限 |
|
|
373
|
-
| `entitySearchEnabled` | `true` | `entity:` / `attr:` 前缀搜索开关 |
|
|
374
|
-
| `trustEpistemicWeighting` | `false` | 记忆可信度加权(v0.4.5,opt-in 默认关):记忆按来源分级 `observation`> `inferred` > `subjective`,开启后检索排序优先高可信记忆、注入对 observation 标注 `[verified]`、dream merge/conflict 偏向高可信一方;关闭时 `epistemic_status` 仅随保存落库、不参与行为 |
|
|
375
|
-
| `evalPersistTestResults` | `false` | 检索评估落库(v0.4.5,opt-in 默认关):开启后 `evaluateRetrieval` 把 precision/recall/mrr 快照写入 `recall_evals`;默认关时仅返回调用方不落库。生产 `searchMemories` 审计始终走 `recall_runs`,无条件不触碰 `recall_evals` |
|
|
376
|
-
| `autoReindexOnBoot` | `true` | 存量记忆缺 embedding 时,向量已配置则启动后延迟后台按批次限速自动回填重建(设为 `false` 仅手动重建) |
|
|
377
|
-
| `hybridInject` | `true` | 注入语义召回优先(v0.4.6,Bug4):`injectCandidates` 带非空 query 时先走向量索引语义召回候选,规则筛选补足/去重;空 query / 无向量回退旧逻辑 |
|
|
378
|
-
| `bm25SearchEnabled` | `true` | BM25 稀疏第三路召回(v0.5.0):ASCII 词元 + CJK bigram,IDF 加权,散词/ID/代码片段查询不再依赖子串命中 |
|
|
379
|
-
| `adaptiveThresholdEnabled` | `true` | 自适应相似度阈值(v0.5.0):按查询形态动态截断(前缀 0.5 / 短查询 0.7 / 长查询 0.6 / 头部分差大放宽 0.5),显式传 `threshold` 走旧行为 |
|
|
380
|
-
| `hotMemoryEnabled` | `true` | 会话级短期热记忆总开关(v0.5.0):关闭后热记忆块不再注入(长期召回不受影响) |
|
|
381
|
-
| `hotMemoryRounds` | `5` | 会话级短期热记忆轮次(v0.5.0):最近 N 轮对话滚动注入,从会话事件日志无状态重建、不落库 |
|
|
382
|
-
| `hotMemoryMaxTokens` | `2000` | 热记忆 token 预算(v0.5.0,200-32000),超出滚动截断 |
|
|
383
|
-
| `selectiveInjectEnabled` | `true` | 选择性注入(v0.5.0):query 向量可用时注入候选按主题相似度重排,替代固定规则序 |
|
|
384
|
-
| `searchSemanticDedup` | `false` | 搜索时语义去重(v0.5.0,激进选项默认关):embedding 余弦 ≥0.95 近重复行在 Rerank 前丢弃 |
|
|
385
|
-
| `searchSemanticDedupThreshold` | `0.95` | 语义去重相似度阈值(v0.5.0,默认 0.95,范围 0.5-1.0):`searchSemanticDedup=true` 时生效,调整可防小模型误折叠 |
|
|
386
|
-
| `memoryQualityFilter` | `{enabled:true, archiveThreshold:30, degradeThreshold:60, minContentLength:10}` | 记忆质量过滤(v0.4.6,默认开):写库前启发式打分 0-100,元记忆词汇/自指/过短/重复/近似重复扣分;≥60 正常存储,30-60 降权(注入排序按 importance×quality/100),<30 归档标记 `low_quality`(显式搜索仍可召回,永不自动注入) |
|
|
387
|
-
| `llmAudit` | `{enabled:true, retentionDays:90}` | LLM 消耗审计(v0.4.6,默认开):每次后台 LLM 调用(autoDream/autoSummarize)写 `llm_audit_logs`(tokens/duration/status/source);失败记 error 不阻塞;只读 API `/api/dsh-mneme/semantic/llm-audit` + `/llm-audit/stats` |
|
|
388
|
-
| `sessionLifecycleEnabled` | `false` | 会话生命周期(v0.6.0,默认关):开启后会话被删除/销毁时自动把该会话出生的记忆软隐藏(`session_disposed_at`,与 `archived` 正交、可恢复);存量无 `session_id` 的记忆永不参与清理 |
|
|
389
|
-
|
|
390
|
-
> 🔐 **API 安全**:DSH 无内置鉴权且默认仅监听 `127.0.0.1`。插件 API 默认开放(便于 Web 面板即装即用)。如需防护(如局域网暴露),在配置中设置 `apiToken`:写操作(画像/规则/命令)与密钥端点(`vector-config`、`vector-reindex`)需携带 `Authorization: Bearer <token>`(前端设置面板可填入同一 token),只读的 `list` / `search` / `semantic` 保持开放。`/api/dsh-mneme/vector-config` 返回的 `apiKey` 已掩码(`sk-***…`),存储仍保留明文供调用;前端回传空或掩码值表示"不改 key"。
|
|
391
|
-
|
|
392
|
-
## 🏗️ 架构
|
|
393
|
-
|
|
394
|
-
```
|
|
395
|
-
┌─────────────────────────────────────────────────┐
|
|
396
|
-
│ 存储层:SQLite (archived/forgotten 状态) │
|
|
397
|
-
│ + Markdown 镜像(人工可编辑,双向同步) │
|
|
398
|
-
├─────────────────────────────────────────────────┤
|
|
399
|
-
│ 服务层:saveWithDedupe / injectCandidates │
|
|
400
|
-
│ / mergeHumanEdits / onWrite 钩子 │
|
|
401
|
-
├─────────────────────────────────────────────────┤
|
|
402
|
-
│ 模型接口:7 个工具 + 自动注入 + 会话摘要 │
|
|
403
|
-
├─────────────────────────────────────────────────┤
|
|
404
|
-
│ autoDream:阈值调度 → LLM 决策清单 │
|
|
405
|
-
│ → 校验(fail-safe)→ 应用 → 摘要 │
|
|
406
|
-
├─────────────────────────────────────────────────┤
|
|
407
|
-
│ Web 面板:设置面板内嵌 + 浏览/搜索(含向量) │
|
|
408
|
-
└─────────────────────────────────────────────────┘
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
**源码结构**:
|
|
412
|
-
|
|
413
|
-
```
|
|
414
|
-
src/
|
|
415
|
-
├── store.js # SQLite 存储(CRUD、搜索、归档/遗忘、schema 迁移)
|
|
416
|
-
├── mirror.js # Markdown 镜像(渲染/解析,人工优先)
|
|
417
|
-
├── service.js # 领域逻辑(去重合并、注入筛选、写入钩子)
|
|
418
|
-
├── config.js # schemastery 配置 schema
|
|
419
|
-
├── tools.js # 7 个模型工具(defineTool)
|
|
420
|
-
├── inject.js # systemPrompt.context 动态注入
|
|
421
|
-
├── summarize.js # 会话结束 LLM 摘要
|
|
422
|
-
├── dream.js # autoDream 调度 + runDream(LLM 决策 + 摘要)
|
|
423
|
-
├── dream/decisions.js# 决策校验(fail-safe)+ 决策应用
|
|
424
|
-
├── entities/extractor.js # 实体抽取器(v0.3.0:LLM JSON 抽取 + 去重 + fail-safe)
|
|
425
|
-
├── search/bm25.js # BM25 稀疏召回(v0.5.0:分词 + IDF 索引)
|
|
426
|
-
├── search/adaptive.js# 自适应相似度阈值(v0.5.0)
|
|
427
|
-
├── hot-memory.js # 会话级短期热记忆(v0.5.0:滚动轮次 + token 预算)
|
|
428
|
-
├── embedding.js # OpenAI 兼容 embeddings 客户端 + 向量检索
|
|
429
|
-
├── api.js # HTTP 路由(Web 面板数据通道)
|
|
430
|
-
└── index.js # 插件接线
|
|
431
|
-
lib/
|
|
432
|
-
├── client.js # Web 面板(手写 ModuleLoader bundle)
|
|
433
|
-
└── *.js # src 的同步分发产物
|
|
434
|
-
test/ # 716 个 node:test 测试(含审计与三轴线压测不变量)
|
|
435
|
-
scripts/ # e2e-dsh.js 端到端演示 · stress-dsh.js 三轴线压测 · sync-lib.js 同步 · benchmark-recall.js 召回基准
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
## 🧪 开发
|
|
439
|
-
|
|
440
|
-
```bash
|
|
441
|
-
cd dsh-mneme
|
|
442
|
-
npm install # 安装 peer 依赖(以 devDependencies 形式,用于本地测试)
|
|
443
|
-
npm test # 运行 716 个测试
|
|
444
|
-
npm run stress # 三轴线压测:长会话检索 / 冲突仲裁 / 多 Agent 并发(离线 mock LLM)
|
|
445
|
-
npm run sync # 把 src/ 同步到 lib/(发布时由 prepack 钩子自动执行)
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
> 压测(`npm run stress`)三条轴线:**长会话检索**(Recall@k、陈旧残留率)、**冲突裁决**(可重放仲裁集:审计快照 hash + receipt + 幂等回放)、**多 Agent 并发**(丢更新、重复合并、事务/崩溃恢复)。每次 autoDream 运行都会写入审计表 `dream_runs`(输入快照 digest + 决策清单 + 逐 id 去向 + receipt),让高通过率下也能定位静默错误。
|
|
449
|
-
|
|
450
|
-
> `lib/` 是 `src/` 的同步分发产物(`npm run sync`),其中 `lib/client.js` 为手写 Web 面板源码,不受同步影响。
|
|
451
|
-
|
|
452
|
-
## 📄 设计文档
|
|
453
|
-
|
|
454
|
-
> 设计文档位于仓库根 `docs/`,链接以 `../docs/` 相对路径指向(GitHub 上从本目录打开可正常跳转)。
|
|
455
|
-
|
|
456
|
-
- [实体结构化记忆设计](docs/ENTITIES.md)
|
|
457
|
-
- [语义增强架构](docs/SEMANTIC.md)
|
|
458
|
-
- [本地模型部署指南](docs/LOCAL_MODEL.md)
|
|
459
|
-
- [从 v0.1 升级说明](docs/MIGRATION.md)
|
|
460
|
-
|
|
461
|
-
## 📜 License
|
|
462
|
-
|
|
463
|
-
MIT
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="横幅.png" alt="dsh-mneme banner" width="100%" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">dsh-mneme</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/@modusensus/dsh-mneme"><img src="https://img.shields.io/npm/v/@modusensus/dsh-mneme?color=blue&label=npm" alt="npm version"></a>
|
|
9
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="license"></a>
|
|
10
|
+
<a href="https://github.com/awesome-dsh-plugin/awesome-dsh-plugin"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome"></a>
|
|
11
|
+
<a href="https://github.com/modusensus/dsh-mneme/actions"><img src="https://img.shields.io/github/actions/workflow/status/modusensus/dsh-mneme/test.yml" alt="CI"></a>
|
|
12
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-24%2B-blue" alt="node"></a>
|
|
13
|
+
<a href="https://github.com/modusensus/dsh-mneme"><img src="https://img.shields.io/badge/tests-716%20passed-success" alt="tests"></a>
|
|
14
|
+
<a href="https://www.npmjs.com/package/@modusensus/dsh-mneme"><img src="https://img.shields.io/npm/dm/@modusensus/dsh-mneme?color=blue&label=downloads" alt="npm downloads"></a>
|
|
15
|
+
<a href="https://codecov.io/gh/modusensus/dsh-mneme"><img src="https://img.shields.io/codecov/c/github/modusensus/dsh-mneme/main" alt="coverage"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center"><strong><a href="#中文">中文</a> | <a href="#english">English</a></strong></p>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<a name="中文"></a>
|
|
23
|
+
|
|
24
|
+
# 🇨🇳 dsh-mneme(中文)
|
|
25
|
+
|
|
26
|
+
> **记忆基因 · 让记忆自我进化** —— 从文本仓库到结构化知识库,记忆不再只是存储,而是会生长。
|
|
27
|
+
|
|
28
|
+
`dsh-mneme` 是一个 [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness) 插件,为 Agent 提供持久的跨会话记忆能力。**Mneme**(Μνήμη)——希腊记忆女神 Mnemosyne 之名,掌管记忆与梦境,正如 autoDream 在后台巩固记忆。
|
|
29
|
+
|
|
30
|
+
## 它能解决什么问题
|
|
31
|
+
|
|
32
|
+
每次新开对话,AI 都像第一次认识你?
|
|
33
|
+
|
|
34
|
+
**dsh-mneme 给 DeepSeek Harness 装上跨会话记忆。** 你聊过的项目、提过的偏好、做过的决定,AI 都记得——即使关掉了窗口,下次打开还在。
|
|
35
|
+
|
|
36
|
+
### 三个典型场景
|
|
37
|
+
|
|
38
|
+
| 场景 | 没装插件 | 装了插件 |
|
|
39
|
+
|------|---------|---------|
|
|
40
|
+
| 周一聊完项目需求,周三继续 | "能再描述一下你的项目吗?" | "你指的是上周提到的博客重构吗?当时你说想用 Astro。" |
|
|
41
|
+
| 告诉 AI 你的编码习惯 | 每轮都要重复交代 | 一次设定,长期生效 |
|
|
42
|
+
| 整理大量资料后关窗口 | 资料丢了 | 自动归档,随时检索找回 |
|
|
43
|
+
|
|
44
|
+
## 核心特性
|
|
45
|
+
|
|
46
|
+
- **跨会话记忆** — 对话中 AI 自动记录关键信息,新会话自动注入相关记忆
|
|
47
|
+
- **自动整理** — 后台自动去重、合并、归档,记忆库越用越精炼
|
|
48
|
+
- **删对话 ≠ 删记忆** — 删除聊天窗口不会丢掉已保存的记忆(可配置)
|
|
49
|
+
- **你的数据你做主** — 所有记忆以 Markdown 格式存于本地,随时打开查看和编辑
|
|
50
|
+
- **完全离线** — 默认无需 API Key,所有处理在本地完成
|
|
51
|
+
|
|
52
|
+
## 安装
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# 安装插件(自动注册 bundle 层)
|
|
56
|
+
dsh plugin --profile web add @modusensus/dsh-mneme
|
|
57
|
+
dsh web
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
> 需要 Node 24+(`node:sqlite`)。完整安装 / 配置 / 架构见 [插件文档](dsh-mneme/README.md)。
|
|
61
|
+
|
|
62
|
+
## 快速配置(可选)
|
|
63
|
+
|
|
64
|
+
装完即用,以下按需开启:
|
|
65
|
+
|
|
66
|
+
| 需求 | 配置项 | 默认值 | 改法 |
|
|
67
|
+
|------|--------|--------|------|
|
|
68
|
+
| 完全离线运行 | `embedProvider` | `openai` | 改为 `local` |
|
|
69
|
+
| 删除对话时保留记忆 | `sessionLifecycleEnabled` | `false` | 改为 `true` |
|
|
70
|
+
| 让 AI 自动提取结构化信息 | `entityExtractionEnabled` | `false` | 改为 `true` |
|
|
71
|
+
|
|
72
|
+
> 在 DSH 设置面板 → 记忆库设置 中修改。完整配置说明见 [配置文档](dsh-mneme/docs/CONFIG.md)。
|
|
73
|
+
|
|
74
|
+
## 隐私承诺
|
|
75
|
+
|
|
76
|
+
- 数据只存在你的电脑本地,不上传任何服务器
|
|
77
|
+
- 记忆是 Markdown 文件,人类可读、可手工编辑
|
|
78
|
+
- 默认零网络依赖,不需要 API Key
|
|
79
|
+
- 无遥测、无分析、无远程日志
|
|
80
|
+
|
|
81
|
+
## 文档
|
|
82
|
+
|
|
83
|
+
| 文档 | 路径 |
|
|
84
|
+
|------|------|
|
|
85
|
+
| 插件完整文档(功能 / 安装 / 配置 / 架构) | [dsh-mneme/README.md](dsh-mneme/README.md) |
|
|
86
|
+
| 实体结构化设计 | [dsh-mneme/docs/ENTITIES.md](dsh-mneme/docs/ENTITIES.md) |
|
|
87
|
+
| 语义架构 | [dsh-mneme/docs/SEMANTIC.md](dsh-mneme/docs/SEMANTIC.md) |
|
|
88
|
+
| 本地模型部署指南 | [dsh-mneme/docs/LOCAL_MODEL.md](dsh-mneme/docs/LOCAL_MODEL.md) |
|
|
89
|
+
| v0.1 迁移说明 | [dsh-mneme/docs/MIGRATION.md](dsh-mneme/docs/MIGRATION.md) |
|
|
90
|
+
| 版本历史 | [CHANGELOG.md](CHANGELOG.md) |
|
|
91
|
+
| 安全策略 | [SECURITY.md](SECURITY.md) |
|
|
92
|
+
|
|
93
|
+
## 🗺️ 路线图
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
🧬 基因(v0.3.0)→ 🛡️ 审计加固(v0.3.6–0.3.9)→ 💤 睡眠维护(v0.4.0)→ 🕸️ 召回融合与图谱(v0.5.0)→ ✨ 自进化(v0.6.0)→ 🔮 兴趣漂移 + 跨 workspace(v0.7.0+)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
| 版本 | 主题 | 状态 |
|
|
100
|
+
|------|------|------|
|
|
101
|
+
| **v0.3.0** | 记忆基因:entities/attrs/relations 三表 + 时间轴 | ✅ |
|
|
102
|
+
| **v0.4.0** | Sleep Mode:空闲四阶段深度维护 | ✅ |
|
|
103
|
+
| **v0.5.0** | 召回融合与记忆可视化:BM25 + 图谱 + 热记忆 | ✅ |
|
|
104
|
+
| **v0.6.0** | 会话生命周期:删会话 ≠ 删记忆 | ✅ |
|
|
105
|
+
| **v0.7.0+** | 兴趣漂移 + 跨 workspace | 🚧 远期 |
|
|
106
|
+
|
|
107
|
+
## 🧪 本地开发
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
cd dsh-mneme
|
|
111
|
+
npm install
|
|
112
|
+
npm test # 716 个测试
|
|
113
|
+
npm run stress # 三轴线压测
|
|
114
|
+
npm run sync # src → lib 同步
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 📜 License
|
|
118
|
+
|
|
119
|
+
MIT
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
<a name="english"></a>
|
|
124
|
+
|
|
125
|
+
# 🇬🇧 dsh-mneme (English)
|
|
126
|
+
|
|
127
|
+
> **Memory Genome · Let memory evolve** — from text warehouse to structured knowledge base. Memory is no longer just stored; it grows.
|
|
128
|
+
|
|
129
|
+
`dsh-mneme` is a [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness) plugin providing persistent cross-session memory. **Mneme** (Μνήμη) — named after Mnemosyne, the Greek goddess of memory and dreams, mirroring how autoDream consolidates memories in the background.
|
|
130
|
+
|
|
131
|
+
## What it does
|
|
132
|
+
|
|
133
|
+
Every time you start a new chat, the AI acts like it's never met you?
|
|
134
|
+
|
|
135
|
+
**dsh-mneme gives DeepSeek Harness cross-session memory.** Projects you've discussed, preferences you've mentioned, decisions you've made — the AI remembers them even after you close the window.
|
|
136
|
+
|
|
137
|
+
### Three typical scenarios
|
|
138
|
+
|
|
139
|
+
| Scenario | Without plugin | With plugin |
|
|
140
|
+
|----------|---------------|-------------|
|
|
141
|
+
| Continue a project discussion from Monday on Wednesday | "Can you describe your project again?" | "You mean the blog refactor from last week? You mentioned wanting to use Astro." |
|
|
142
|
+
| Tell the AI your coding habits | Repeat every session | Set once, remember forever |
|
|
143
|
+
| Close window after organizing research | Notes are lost | Auto-archived, retrievable anytime |
|
|
144
|
+
|
|
145
|
+
## Core Features
|
|
146
|
+
|
|
147
|
+
- **Cross-session memory** — AI automatically records key info during chats; new sessions inject relevant memories
|
|
148
|
+
- **Auto-consolidation** — Background deduplication, merging, and archival; the memory store refines itself over time
|
|
149
|
+
- **Delete session ≠ delete memories** — Closing a chat window doesn't lose saved memories (configurable)
|
|
150
|
+
- **Your data, your control** — All memories stored as local Markdown files, human-readable and editable
|
|
151
|
+
- **Fully offline** — Zero API Key needed by default; all processing happens locally
|
|
152
|
+
|
|
153
|
+
## Install
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
dsh plugin --profile web add @modusensus/dsh-mneme
|
|
157
|
+
dsh web
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
> Requires Node 24+ (`node:sqlite`). Full install / config / architecture docs in the [plugin README](dsh-mneme/README.md).
|
|
161
|
+
|
|
162
|
+
## Quick Config (Optional)
|
|
163
|
+
|
|
164
|
+
Works out of the box. Enable these as needed:
|
|
165
|
+
|
|
166
|
+
| Need | Config key | Default | Change |
|
|
167
|
+
|------|-----------|---------|--------|
|
|
168
|
+
| Fully offline | `embedProvider` | `openai` | Change to `local` |
|
|
169
|
+
| Keep memories when deleting sessions | `sessionLifecycleEnabled` | `false` | Change to `true` |
|
|
170
|
+
| Structured entity extraction | `entityExtractionEnabled` | `false` | Change to `true` |
|
|
171
|
+
|
|
172
|
+
> Change in DSH Settings Panel → Memory Settings. Full config docs [here](dsh-mneme/docs/CONFIG.md).
|
|
173
|
+
|
|
174
|
+
## Privacy
|
|
175
|
+
|
|
176
|
+
- Data stays on your machine only, never uploaded
|
|
177
|
+
- Memories are Markdown files, human-readable and editable
|
|
178
|
+
- Zero network dependency by default, no API Key required
|
|
179
|
+
- No telemetry, no analytics, no remote logging
|
|
180
|
+
|
|
181
|
+
## Docs
|
|
182
|
+
|
|
183
|
+
| Doc | Path |
|
|
184
|
+
|-----|------|
|
|
185
|
+
| Full plugin docs | [dsh-mneme/README.md](dsh-mneme/README.md) |
|
|
186
|
+
| Entity structure design | [dsh-mneme/docs/ENTITIES.md](dsh-mneme/docs/ENTITIES.md) |
|
|
187
|
+
| Semantic architecture | [dsh-mneme/docs/SEMANTIC.md](dsh-mneme/docs/SEMANTIC.md) |
|
|
188
|
+
| Local model guide | [dsh-mneme/docs/LOCAL_MODEL.md](dsh-mneme/docs/LOCAL_MODEL.md) |
|
|
189
|
+
| v0.1 migration | [dsh-mneme/docs/MIGRATION.md](dsh-mneme/docs/MIGRATION.md) |
|
|
190
|
+
| Changelog | [CHANGELOG.md](CHANGELOG.md) |
|
|
191
|
+
| Security | [SECURITY.md](SECURITY.md) |
|
|
192
|
+
|
|
193
|
+
## 🗺️ Roadmap
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
🧬 Gene (v0.3.0) → 🛡️ Audit hardening (v0.3.6–0.3.9) → 💤 Sleep maintenance (v0.4.0) → 🕸️ Recall fusion & graph (v0.5.0) → ✨ Self-evolve (v0.6.0) → 🔮 Interest drift + cross-workspace (v0.7.0+)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
| Version | Theme | Status |
|
|
200
|
+
|---------|-------|--------|
|
|
201
|
+
| **v0.3.0** | Memory genome: entities/attrs/relations + timeline | ✅ |
|
|
202
|
+
| **v0.4.0** | Sleep Mode: idle 4-phase deep maintenance | ✅ |
|
|
203
|
+
| **v0.5.0** | Recall fusion & visualization: BM25 + graph + hot memory | ✅ |
|
|
204
|
+
| **v0.6.0** | Session lifecycle: delete session ≠ delete memories | ✅ |
|
|
205
|
+
| **v0.7.0+** | Interest drift + cross-workspace | 🚧 Long-term |
|
|
206
|
+
|
|
207
|
+
## 🧪 Local Development
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
cd dsh-mneme
|
|
211
|
+
npm install
|
|
212
|
+
npm test # 716 tests
|
|
213
|
+
npm run stress # three-axis stress test
|
|
214
|
+
npm run sync # src → lib sync
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## 📜 License
|
|
218
|
+
|
|
219
|
+
MIT
|