recallnest 2.6.1 → 3.0.1

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.
Files changed (207) hide show
  1. package/CHANGELOG.md +292 -0
  2. package/README.md +280 -195
  3. package/README_CN.md +266 -199
  4. package/config.json.example +8 -1
  5. package/docs/api-reference.md +1 -1
  6. package/integrations/README.md +1 -1
  7. package/integrations/agy/README.md +73 -0
  8. package/integrations/agy/setup.sh +75 -0
  9. package/integrations/setup-all.sh +1 -1
  10. package/package.json +7 -5
  11. package/src/access-tracker.ts +10 -1
  12. package/src/activity-counter.ts +69 -11
  13. package/src/age-label.ts +29 -0
  14. package/src/audit-log.ts +35 -0
  15. package/src/auto-gc.ts +97 -30
  16. package/src/capture-engine.ts +26 -4
  17. package/src/cli.ts +224 -10
  18. package/src/consolidation-engine.ts +317 -123
  19. package/src/context-composer-stable.ts +5 -1
  20. package/src/data-checkup.ts +17 -3
  21. package/src/dream-pipeline.ts +90 -12
  22. package/src/embedder.ts +44 -5
  23. package/src/env-config.ts +71 -0
  24. package/src/forget-engine.ts +8 -2
  25. package/src/gateway-server.ts +272 -0
  26. package/src/ingest.ts +248 -22
  27. package/src/kg-extractor.ts +17 -0
  28. package/src/llm-client.ts +86 -25
  29. package/src/mcp-server.ts +2 -1
  30. package/src/mcp-tools-advanced.ts +7 -2
  31. package/src/mcp-tools-core.ts +11 -1
  32. package/src/mcp-tools-governance.ts +45 -3
  33. package/src/memory-evolution.ts +16 -0
  34. package/src/memory-output.ts +47 -8
  35. package/src/memory-promotion.ts +280 -0
  36. package/src/memory-store-port.ts +32 -3
  37. package/src/memory-utility.ts +314 -0
  38. package/src/pivot-apply.ts +52 -1
  39. package/src/pivot-evidence.ts +128 -0
  40. package/src/ppr-traversal.ts +25 -1
  41. package/src/recall-ledger.ts +76 -0
  42. package/src/retriever.ts +82 -9
  43. package/src/runtime-config.ts +9 -0
  44. package/src/scope-policy.ts +22 -1
  45. package/src/session-engine.ts +11 -4
  46. package/src/session-output.ts +13 -4
  47. package/src/session-store.ts +2 -3
  48. package/src/skill-promotion.ts +218 -1
  49. package/src/store.ts +231 -71
  50. package/src/synthesis-contract.ts +286 -0
  51. package/src/version-manager.ts +83 -0
  52. package/src/workflow-observation-schema.ts +26 -0
  53. package/integrations/gemini-cli/README.md +0 -57
  54. package/integrations/gemini-cli/setup.sh +0 -64
  55. package/src/__tests__/access-tracker-novelty.test.ts +0 -304
  56. package/src/__tests__/activity-counter.test.ts +0 -125
  57. package/src/__tests__/adaptive-fidelity.test.ts +0 -102
  58. package/src/__tests__/admission-control.test.ts +0 -206
  59. package/src/__tests__/anchor-generator.test.ts +0 -67
  60. package/src/__tests__/api-server-security.test.ts +0 -102
  61. package/src/__tests__/auto-consolidation.test.ts +0 -168
  62. package/src/__tests__/auto-recall.test.ts +0 -131
  63. package/src/__tests__/babel-integration.test.ts +0 -144
  64. package/src/__tests__/batch-dedup.test.ts +0 -65
  65. package/src/__tests__/belief-history.test.ts +0 -220
  66. package/src/__tests__/canary-eval.test.ts +0 -114
  67. package/src/__tests__/capture-engine.test.ts +0 -1328
  68. package/src/__tests__/capture-heuristic.test.ts +0 -171
  69. package/src/__tests__/cascade-forget.test.ts +0 -210
  70. package/src/__tests__/category-min-scores.test.ts +0 -116
  71. package/src/__tests__/cc8-cc1-essential-context.test.ts +0 -298
  72. package/src/__tests__/circuit-breaker.test.ts +0 -99
  73. package/src/__tests__/cluster-consolidation.test.ts +0 -945
  74. package/src/__tests__/confidence-metadata.test.ts +0 -125
  75. package/src/__tests__/confidence-tracker.test.ts +0 -261
  76. package/src/__tests__/conflict-advisor.test.ts +0 -206
  77. package/src/__tests__/conflict-escalation.test.ts +0 -149
  78. package/src/__tests__/conflict-lifecycle.test.ts +0 -83
  79. package/src/__tests__/conflict-output.test.ts +0 -85
  80. package/src/__tests__/conflict-store.test.ts +0 -418
  81. package/src/__tests__/connector-v1.test.ts +0 -181
  82. package/src/__tests__/consolidation-engine.test.ts +0 -430
  83. package/src/__tests__/constructive-retrieval.test.ts +0 -509
  84. package/src/__tests__/context-collapse-renderer.test.ts +0 -214
  85. package/src/__tests__/context-composer-pins.test.ts +0 -64
  86. package/src/__tests__/context-composer-task-selection.test.ts +0 -24
  87. package/src/__tests__/context-reconstructor.test.ts +0 -65
  88. package/src/__tests__/context-renderer.test.ts +0 -91
  89. package/src/__tests__/continuity-eval.test.ts +0 -275
  90. package/src/__tests__/continuity-schema.test.ts +0 -97
  91. package/src/__tests__/contracts.test.ts +0 -262
  92. package/src/__tests__/conversation-importer.test.ts +0 -692
  93. package/src/__tests__/core-recall-eval.test.ts +0 -235
  94. package/src/__tests__/core-summary.test.ts +0 -109
  95. package/src/__tests__/data-checkup.test.ts +0 -276
  96. package/src/__tests__/decay-exemption.test.ts +0 -129
  97. package/src/__tests__/dedup-actions.test.ts +0 -58
  98. package/src/__tests__/dedup-guard.test.ts +0 -39
  99. package/src/__tests__/deterministic-id.test.ts +0 -39
  100. package/src/__tests__/distill-lock.test.ts +0 -305
  101. package/src/__tests__/distill-session-argshape.test.ts +0 -79
  102. package/src/__tests__/doctor.test.ts +0 -319
  103. package/src/__tests__/dream-pipeline.test.ts +0 -780
  104. package/src/__tests__/drill-down.test.ts +0 -108
  105. package/src/__tests__/embedder.test.ts +0 -122
  106. package/src/__tests__/emotion-decay.test.ts +0 -46
  107. package/src/__tests__/emotion-detector.test.ts +0 -56
  108. package/src/__tests__/emotion-phase1-integration.test.ts +0 -153
  109. package/src/__tests__/emotion-retrieval.test.ts +0 -56
  110. package/src/__tests__/entity-resolver.test.ts +0 -58
  111. package/src/__tests__/env-config.test.ts +0 -151
  112. package/src/__tests__/error-signature-boost.test.ts +0 -87
  113. package/src/__tests__/error-signature.test.ts +0 -95
  114. package/src/__tests__/error-taxonomy.test.ts +0 -129
  115. package/src/__tests__/ethics-layer.test.ts +0 -476
  116. package/src/__tests__/event-segmenter.test.ts +0 -153
  117. package/src/__tests__/feature-flags-integration.test.ts +0 -54
  118. package/src/__tests__/frequency-tracker.test.ts +0 -113
  119. package/src/__tests__/freshness.test.ts +0 -186
  120. package/src/__tests__/graph-export.test.ts +0 -489
  121. package/src/__tests__/hotness-blend.test.ts +0 -283
  122. package/src/__tests__/ingest-chunking.test.ts +0 -44
  123. package/src/__tests__/ingest.test.ts +0 -360
  124. package/src/__tests__/interference-detector.test.ts +0 -203
  125. package/src/__tests__/kg-extractor.test.ts +0 -192
  126. package/src/__tests__/kg-store.test.ts +0 -300
  127. package/src/__tests__/llm-client-pivot.test.ts +0 -628
  128. package/src/__tests__/llm-consolidation.test.ts +0 -226
  129. package/src/__tests__/maintenance-locks.test.ts +0 -189
  130. package/src/__tests__/mcp-efficiency.test.ts +0 -288
  131. package/src/__tests__/mcp-related-scopes.test.ts +0 -151
  132. package/src/__tests__/memory-boundaries.test.ts +0 -282
  133. package/src/__tests__/memory-evolution-b2-b3-e1.test.ts +0 -345
  134. package/src/__tests__/memory-evolution.test.ts +0 -271
  135. package/src/__tests__/memory-health-rebalance.test.ts +0 -144
  136. package/src/__tests__/memory-lint.test.ts +0 -421
  137. package/src/__tests__/memory-output.test.ts +0 -215
  138. package/src/__tests__/memory-promotion.test.ts +0 -315
  139. package/src/__tests__/migrate-dedup-ids.test.ts +0 -65
  140. package/src/__tests__/multi-vector.test.ts +0 -242
  141. package/src/__tests__/narrative-architecture.test.ts +0 -456
  142. package/src/__tests__/noise-filter.test.ts +0 -205
  143. package/src/__tests__/noise-prototype-bank.test.ts +0 -280
  144. package/src/__tests__/obsidian-connector.test.ts +0 -363
  145. package/src/__tests__/omitted-reporting.test.ts +0 -98
  146. package/src/__tests__/pending-review.test.ts +0 -77
  147. package/src/__tests__/pii-redact.test.ts +0 -333
  148. package/src/__tests__/pivot-apply.test.ts +0 -373
  149. package/src/__tests__/pivot-distill-supervisor.test.ts +0 -457
  150. package/src/__tests__/pivot-distill.test.ts +0 -1178
  151. package/src/__tests__/post-retrieval-filter.test.ts +0 -178
  152. package/src/__tests__/ppr-traversal.test.ts +0 -256
  153. package/src/__tests__/prediction-engine.test.ts +0 -349
  154. package/src/__tests__/predictive-prospective-memory.test.ts +0 -416
  155. package/src/__tests__/preference-guard-smoke.test.ts +0 -211
  156. package/src/__tests__/preference-matcher.test.ts +0 -282
  157. package/src/__tests__/preference-slots.test.ts +0 -205
  158. package/src/__tests__/prospective-memory.test.ts +0 -283
  159. package/src/__tests__/pull-from-macbook-sync-only.test.ts +0 -679
  160. package/src/__tests__/query-entity-detector.test.ts +0 -171
  161. package/src/__tests__/query-expander-alias.test.ts +0 -146
  162. package/src/__tests__/query-expander.test.ts +0 -34
  163. package/src/__tests__/recall-gate.test.ts +0 -266
  164. package/src/__tests__/recall-governor.test.ts +0 -227
  165. package/src/__tests__/recall-mode.test.ts +0 -64
  166. package/src/__tests__/resolve-db-path.test.ts +0 -130
  167. package/src/__tests__/resolve-tier.test.ts +0 -64
  168. package/src/__tests__/result-synthesizer.test.ts +0 -198
  169. package/src/__tests__/resume-context.test.ts +0 -4898
  170. package/src/__tests__/retrieval-eval.test.ts +0 -163
  171. package/src/__tests__/retrieval-trace.test.ts +0 -213
  172. package/src/__tests__/retriever-boundary-weight.test.ts +0 -136
  173. package/src/__tests__/retriever-lazy-init-dispatch.test.ts +0 -123
  174. package/src/__tests__/retroactive-boost.test.ts +0 -223
  175. package/src/__tests__/salience-scoring.test.ts +0 -106
  176. package/src/__tests__/scope-inventory.test.ts +0 -200
  177. package/src/__tests__/scope-policy.test.ts +0 -69
  178. package/src/__tests__/scope-suggester.test.ts +0 -80
  179. package/src/__tests__/session-checkpoint.test.ts +0 -291
  180. package/src/__tests__/session-distiller.test.ts +0 -640
  181. package/src/__tests__/session-gc.test.ts +0 -215
  182. package/src/__tests__/skill-engine.test.ts +0 -552
  183. package/src/__tests__/skill-promotion.test.ts +0 -654
  184. package/src/__tests__/skill-verifier.test.ts +0 -122
  185. package/src/__tests__/source-heartbeat.test.ts +0 -250
  186. package/src/__tests__/stable-context-length-contract.test.ts +0 -62
  187. package/src/__tests__/store-patch-metadata.test.ts +0 -205
  188. package/src/__tests__/store-read-consistency.test.ts +0 -122
  189. package/src/__tests__/store-schema-migration.test.ts +0 -87
  190. package/src/__tests__/store-scope-audit.test.ts +0 -81
  191. package/src/__tests__/store-upsert.test.ts +0 -201
  192. package/src/__tests__/supersede-chain.test.ts +0 -154
  193. package/src/__tests__/temporal-parser.test.ts +0 -241
  194. package/src/__tests__/temporal-validity.test.ts +0 -160
  195. package/src/__tests__/term-registry-terminal-roster.test.ts +0 -127
  196. package/src/__tests__/term-registry.test.ts +0 -121
  197. package/src/__tests__/tool-error-surfacing.test.ts +0 -98
  198. package/src/__tests__/tool-output-compressor.test.ts +0 -160
  199. package/src/__tests__/topic-tag.test.ts +0 -113
  200. package/src/__tests__/trusted-memory.test.ts +0 -839
  201. package/src/__tests__/ui-server-security.test.ts +0 -93
  202. package/src/__tests__/usage-tracker.test.ts +0 -287
  203. package/src/__tests__/version-manager.test.ts +0 -213
  204. package/src/__tests__/workflow-observation-skill-outcome.test.ts +0 -352
  205. package/src/__tests__/workflow-observation.test.ts +0 -433
  206. package/src/__tests__/write-verifier.test.ts +0 -122
  207. /package/integrations/{gemini-cli/gemini-md-snippet.md → agy/agy-md-snippet.md} +0 -0
package/README_CN.md CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  # RecallNest
4
4
 
5
- **面向任意 MCP 客户端的共享记忆层 —— Claude Code、Codex、Kimi、Antigravity、Gemini CLI**
5
+ **面向任意 AI 客户端的共享记忆层 —— CLI agent、桌面 app、你自己的脚本**
6
6
 
7
- *一套记忆,每个终端,上下文跨窗口延续。*
7
+ *一套记忆,每个客户端,上下文跨窗口延续——也跨机器。*
8
8
 
9
9
  基于 LanceDB 的本地优先记忆系统,把散落在各个终端的对话历史沉淀为可复用知识,跨终端共享,自动召回。
10
10
 
11
11
  [![GitHub](https://img.shields.io/github/stars/AliceLJY/recallnest?style=social)](https://github.com/AliceLJY/recallnest)
12
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
13
- [![Runtime](https://img.shields.io/badge/Runtime-Bun_|_Node.js_18+-f9f1e1?logo=bun)](https://bun.sh)
13
+ [![Runtime](https://img.shields.io/badge/Runtime-Bun_|_Node.js_22+-f9f1e1?logo=bun)](https://bun.sh)
14
14
  [![LanceDB](https://img.shields.io/badge/LanceDB-Vector+FTS-orange)](https://lancedb.com)
15
- [![MCP](https://img.shields.io/badge/MCP-43_tools-blue)](https://modelcontextprotocol.io)
15
+ [![MCP](https://img.shields.io/badge/MCP-44_tools-blue)](https://modelcontextprotocol.io)
16
16
  [![CI](https://github.com/AliceLJY/recallnest/actions/workflows/ci.yml/badge.svg)](https://github.com/AliceLJY/recallnest/actions/workflows/ci.yml)
17
17
  [![CC Plugin](https://img.shields.io/badge/Claude_Code-Plugin-blueviolet)](https://github.com/AliceLJY/recallnest)
18
18
 
@@ -26,115 +26,34 @@
26
26
 
27
27
  编程 Agent 每开一个窗口就失忆。项目配置、调试决策、实体映射——散落在 Claude Code、Codex、Kimi、Antigravity 以及你打开的每一个终端里,互相不通。
28
28
 
29
- RecallNest 的解法:**一个 LanceDB 驱动的记忆层,供你的编程 Agent 共读共写**。一个窗口存入的上下文,另一个窗口自动召回。会话退出时 checkpoint,启动时 resume。记忆会衰减、演化、自组织——不是简单的日志堆积。
29
+ RecallNest 是**一个 LanceDB 驱动的记忆层,你所有的 Agent 共读共写**。一个窗口存入的上下文,另一个窗口能召回。会话退出时 checkpoint,启动时 resume。记忆会衰减、演化、自组织——它不是一堆等你 grep 的日志。
30
30
 
31
+ ### 一次召回长什么样
31
32
 
32
- ## 快速开始
33
-
34
- ### 方式 A:Claude Code Plugin(推荐)
35
-
36
- ```bash
37
- /plugin marketplace add AliceLJY/recallnest
38
- /plugin install recallnest@AliceLJY
39
- ```
40
-
41
- RecallNest 随 Claude Code 自动启动,无需手动配置 MCP。
42
-
43
- 安装时 Claude Code 会提示填写 Jina API key。密钥由 Claude Code 的敏感插件配置保存;自动生成的配置和 LanceDB 数据库则放在插件持久数据目录,不会混进按版本更新的插件缓存。
44
-
45
- > Claude Code 插件与 npm 包共用同一个发布版本,并随版本发布同步更新。
46
- >
47
- > **前置要求:** [Bun](https://bun.sh)。首次启动自动安装依赖。
48
-
49
- ### 方式 B:npm 安装
50
-
51
- ```bash
52
- npx recallnest --help # 直接运行
53
- # 或
54
- npm install -g recallnest # 全局安装
55
- recallnest doctor
56
- ```
57
-
58
- 支持 Node.js 18+(通过 tsx)或 Bun,无需 clone 仓库。
59
-
60
- ### 方式 C:手动安装
61
-
62
- ```bash
63
- git clone https://github.com/AliceLJY/recallnest.git
64
- cd recallnest
65
- bun install
66
- cp config.json.example config.json
67
- cp .env.example .env
68
- # 编辑 .env → 填入 JINA_API_KEY
69
- ```
70
-
71
- ### 启动服务
72
-
73
- ```bash
74
- bun run api
75
- # → RecallNest API running at http://localhost:4318
76
- ```
77
-
78
- ### 试一下
79
-
80
- ```bash
81
- # 存入一条记忆
82
- curl -X POST http://localhost:4318/v1/store \
83
- -H "Content-Type: application/json" \
84
- -d '{"text": "用户偏好暗色模式", "category": "preferences"}'
85
-
86
- # 搜索记忆
87
- curl -X POST http://localhost:4318/v1/recall \
88
- -H "Content-Type: application/json" \
89
- -d '{"query": "用户偏好"}'
90
-
91
- # 查看统计
92
- curl http://localhost:4318/v1/stats
93
- ```
94
-
95
- ### 接入终端
96
-
97
- ```bash
98
- bash integrations/claude-code/setup.sh
99
- bash integrations/gemini-cli/setup.sh
100
- bash integrations/codex/setup.sh
101
- ```
33
+ ```text
34
+ Query : deploy rollback
35
+ Hits : 5
102
36
 
103
- 每个脚本会同时安装 MCP 和 continuity 规则,新窗口自动触发 `resume_context`。
104
-
105
- ### 索引已有对话
106
-
107
- ```bash
108
- bun run src/cli.ts ingest --source all
109
- bun run seed:continuity
110
- bun run src/cli.ts doctor
37
+ # ID Score Category Tier Source Date Age Retrieval Path
38
+ 1 ee79037a 46.1% cases peripheral cc 2026-08-25 2d vector
39
+ [assistant] Rolled back to the previous image and pinned the digest so the next…
40
+ prov : evidence/transcript-ingest
41
+ imgs : 52 agent-made in this session · read sess=dca70d4a
111
42
  ```
112
43
 
113
- ---
114
-
115
- ## Web UI
44
+ 这一小块里有三样东西,几乎就是整个设计:
116
45
 
117
- <p align="center">
118
- <img src="assets/dashboard.png" alt="RecallNest Dashboard" width="800" />
119
- <br><em>Dashboard —— 总量、类别分布、健康评分、增长趋势一目了然。</em>
120
- </p>
121
-
122
- <p align="center">
123
- <img src="assets/screenshots/ui-full.png" alt="RecallNest Search Workbench" width="800" />
124
- <br><em>Search Workbench —— 混合检索 + Topic Tag 过滤 + 4 套检索策略 + Skills 浏览 + 资产管理。</em>
125
- </p>
126
-
127
- <p align="center">
128
- <img src="assets/knowledge-graph.png" alt="RecallNest Knowledge Graph" width="800" />
129
- <br><em>Knowledge Graph —— 交互式力导向图,语义桥接揭示跨域隐藏关联。</em>
130
- </p>
46
+ - **`Source cc` · `Age 2d`** —— 它出自两天前的一个 Claude Code 窗口,而你正在另一个终端、
47
+ 甚至另一台机器上读它。整个项目就建在这个前提上。
48
+ - **`prov : evidence/…`** —— 每一行都标着自己待在哪一层。从对话里刮下来的碎片,永远没资格
49
+ 冒充你真正做过的决定;要变成稳定记忆,得另走一道带证据门槛的提升流程。
50
+ - **`imgs : …`** —— 那个 session 里有 52 张图,**一张都没进数据库**。这一行的存在只是让你知道
51
+ 那儿有东西可看,而产生它没花一次模型调用、没多一个向量、没占一份存储。
131
52
 
132
- ```bash
133
- bun run src/ui-server.ts
134
- # → http://localhost:4317
135
- ```
53
+ 最后这条就是整套做法的缩影:**只存"让一样东西能被找到"所需的部分,不存"将来可能被问到"的一切。**
54
+ 完整的推理——包括最显然的那种实现错在哪两个地方——在
55
+ [图片:可寻址,而不是被编码](#图片可寻址而不是被编码)。
136
56
 
137
- ---
138
57
 
139
58
  ## 核心能力
140
59
 
@@ -143,8 +62,8 @@ bun run src/ui-server.ts
143
62
  | 能力 | 说明 |
144
63
  |---|---|
145
64
  | **CC Plugin** | 一行命令装入 Claude Code,无需手动配置 MCP |
146
- | **共享索引** | 所有支持 MCP 的终端共用同一个 LanceDB 存储 |
147
- | **双通道接入** | MCP(stdio)给 CLI 工具 + HTTP API 给自定义 Agent |
65
+ | **共享索引** | 所有客户端共用同一个 LanceDB 存储,跨机指向 `ssh` 即可共用真相源 |
66
+ | **双通道接入** | MCP(stdio)给 CLI agent 与能填 MCP 配置的 GUI app + HTTP API 给只会发请求的客户端 |
148
67
  | **一键接入** | 集成脚本同时安装 MCP 和 continuity 规则 |
149
68
 
150
69
  ### 检索与连续性
@@ -196,133 +115,240 @@ bun run src/ui-server.ts
196
115
 
197
116
  ---
198
117
 
199
- ## v2.6 新增:跨进程一致性与可靠分发
118
+ ## 架构
200
119
 
201
- v2.6 把 v2.5.4 以来的开发整理成一版可升级、可安装、版本口径一致的正式候选:
120
+ ```
121
+ CLIENTS ACCESS CORE ENGINE STORAGE
122
+ ────────────────────── ─────────────────────── ──────────────────────────── ──────────────────────
123
+
124
+ Claude Code MCP over stdio Retriever LanceDB
125
+ Codex ───▶ 44 tools, 3 tiers ───▶ vector + BM25 + RRF ───▶ vector + columnar
126
+ Kimi · Antigravity Classifier · 6 categories
127
+ Doubao desktop Context composer
128
+ HTTP API :4318 resume_context Jina embeddings v5
129
+ your scripts · cron ───▶ 21 endpoints ───▶ Decay · Weibull half-life ─▶ 1024-dim, task-aware
130
+ Conflict · audit + merge
131
+ phone app ───▶ read-only gateway ───▶ Capture: evidence → durable
132
+ :8791, token-gated
133
+ ```
202
134
 
203
- - **跨进程即时可见** —— LanceDB 默认每次读取都检查外部提交,常驻 MCP/API/UI 无需重启即可看见 CLI ingest 写入。可用 `RECALLNEST_READ_CONSISTENCY_INTERVAL=<秒>` 设置允许的延迟窗口,或设为 `off` 恢复旧版不检查行为。
204
- - **更安全的记忆演化** —— 信念变化不再原地覆盖,旧记录保留为 `superseded`;程序性记忆免于时间衰减;冷启动和长度归一化不再压低短实体查询与稳定记忆。
205
- - **更可靠的整合管线** —— `dream` 增加失败分型、总时长预算、聚类前向量回填,以及“成功必须真的产出结果”的断言。
206
- - **更完整的对话来源** —— Kimi、AGY/Antigravity 和 minis 已同步纳入 ingest、scope 边界与术语识别。
207
- - **一个公开版本号** —— npm 元数据、CLI `--version`、MCP 握手、HTTP 健康接口和 Claude Code marketplace 统一遵守 `2.6.0` 发布契约。
208
- - **真正可安装的 Claude Code 插件** —— 安装后自动注册 43 个 MCP 工具与连续性 skill,通过敏感插件配置接收 Jina key,并把配置与 LanceDB 数据放进 Claude Code 的持久插件数据目录。
135
+ > 图内保留英文术语:等宽字体下中文占两格,混排会把对齐打乱。四段从左到右分别是
136
+ > 客户端、接入层(MCP / HTTP / 只读网关)、核心引擎、存储层。
209
137
 
210
- ### 从 v2.5.4 升级
138
+ ### 内部设计
139
+
140
+ - **L0 / L1 / L2 动态折叠** —— 每条记忆存储 3 个粒度层(一句话 / 要点概要 / 完整内容);检索时根据相关性分数和 token 预算动态选择返回哪个层级
141
+ - **Weibull 衰减 + 情绪调制** —— 记忆沿参数化 Weibull 曲线衰减;情绪显著性可额外延长半衰期最高 30%
142
+ - **向量预筛 + LLM 去重** —— 90% 的去重决策用低成本余弦相似度(≥ 0.92);仅临界情况调用 LLM 判断
143
+ - **类别分化合并策略** —— `profile` 和 `preferences` 采用冲突合并(新版覆盖);`events` 和 `cases` 采用追加(保留历史)
144
+ - **展示分 vs 淘汰分双轨制** —— 检索使用双轨评分:tier floor 防止核心记忆被淘汰,decay boost 让新鲜记忆临时浮现而不永久挤掉稳定记忆
211
145
 
212
- - 现有 LanceDB 数据原地打开;缺少新字段的旧表会自动迁移,空表也覆盖。
213
- - 插件数据位于版本缓存之外,更新插件不会清空;手动 clone 仍沿用现有 `config.json` 与数据库路径。
214
- - 检索操作现已写入审计日志。`audit.jsonl` 暂无自动轮转,接近 50 MB 时建议人工归档。
215
- - `RECALLNEST_LAYER_ADMISSION` 仍是显式开启项(`observe` 或 `on`),默认 `off`。
146
+ > 完整架构详解:[`docs/architecture.md`](docs/architecture.md)
216
147
 
217
148
  ---
218
149
 
219
- ## v2.1 新增:记忆哲学驱动的架构升级
150
+ ## 谁能接上
220
151
 
221
- v2.0 建立了完整的记忆操作平台;v2.1 加入了记忆哲学驱动的记忆行为。
152
+ **数据层不知道你的客户端长什么样。** RecallNest 把同一个 LanceDB 存储通过三个出口暴露出来,接法按客户端的能力选,而不是绑死在某一种协议上。
222
153
 
223
- 来自 9 个记忆哲学研究维度的 5 项工程升级:
154
+ | 你的客户端能做什么 | 走哪条 | 已验证 |
155
+ |---|---|---|
156
+ | 执行本地命令(CLI agent) | **MCP over stdio** | Claude Code、Codex、Kimi、Antigravity |
157
+ | 执行本地命令(GUI app,手填 MCP 配置) | **MCP over stdio** | 豆包桌面端——与 Cherry Studio / ChatBox 同一形态 |
158
+ | 只会发 HTTP 请求 | **HTTP API** | 自定义 agent、脚本、定时任务 |
159
+ | 跑在另一台机器上 | 把 stdio 启动命令换成 `ssh <host> recallnest-mcp` | 笔记本上的四个客户端共读家里服务器上的同一个库 |
224
160
 
225
- - **情绪感知衰减** *(情感记忆理论)* —— 带有强烈情绪的记忆衰减慢 20-30%。基于关键词的情绪检测计算 `salience`(记忆显著性),注入 Weibull 半衰期公式和重新平衡的 4 因子演化评分。零 LLM 成本。
161
+ 两条值得直说的推论:
226
162
 
227
- - **记忆伦理层** *(遗忘权 / GDPR 第 17 条)* —— 四级隐私:`ephemeral`(临时)/ `private`(私密)/ `durable`(持久)/ `shared`(共享)。级联遗忘引擎贯穿 KG 三元组、演化链、Pin 资产和摘要。完整审计日志。`forget_memory` MCP 工具支持 Agent 驱动的删除。
163
+ - **不绑单一协议。** 支持填 MCP 配置的 GUI 聊天 app,接入方式和终端里的 agent 完全一样;只会发 HTTP 请求的客户端,读到的仍是同一份记忆。
164
+ - **不绑单台机器。** 因为 MCP 传输走 stdio,启动命令由你定义——把它指向 `ssh`,每台机器上的每个客户端共用同一个真相源,而不是各自长出一个数据库。
228
165
 
229
- - **自传叙事架构** *(叙事身份理论 / Conway 三层模型)* —— 记忆标注 `生命阶段 → 一般事件 → 具体事件` 层级,正交于现有 6 类别。检索自动拉取叙事兄弟。上下文渲染按生命阶段分组。支持中英文的规则式标注器。
166
+ 接一个新客户端不等于要改 RecallNest:够格的客户端自己写一行配置,能力受限的在 HTTP API 前面加一层薄网关。
230
167
 
231
- - **建构式检索** *(模拟理论 / Michaelian)* —— 不再返回原始存储文本,而是从扩展候选集(KG 邻居 + 演化链 + 聚类成员 + 叙事兄弟)中重建上下文。Source-map 语义覆盖率替代词汇重叠。矛盾检测与标记。
168
+ ### 手机上的 AI app:只读网关
232
169
 
233
- - **预测式前瞻记忆** *(精神时间旅行 / Tulving)* —— 启发式预测引擎从行为信号中浮现"你可能需要这个"提醒:过期的 checkpoint 待办事项、被纠正的工作流观察、高频休眠记忆和未覆盖的查询主题。零 LLM 成本。7 天未接受自动过期。
170
+ HTTP API(`:4318`)只监听 `127.0.0.1`,并且会拒绝任何 Host 头不是本地的请求——这是**有意的**:它同时暴露写入路由(`/v1/store`、`/v1/checkpoint`),直接开到公网等于把写权限交出去。
234
171
 
235
- ---
172
+ 所以要让手机上的 AI app 读到同一份记忆,前面加一层只读网关:
236
173
 
237
- ## v2.2 新增:检索质量强化
174
+ ```bash
175
+ openssl rand -hex 32 > ~/.config/recallnest/gateway-token
176
+ chmod 600 ~/.config/recallnest/gateway-token
238
177
 
239
- v2.1 加入了哲学记忆行为;v2.2 补齐前沿扫描(ACC、PI-LLM、TSM)发现的最后三个引擎层空白。
178
+ bun run api # 本机 API,:4318
179
+ bun run gateway # 只读网关,:8791 → 转发到 :4318
180
+ ```
240
181
 
241
- - **记忆置信度元标签** *(ACC / 双过程不确定性量化)* —— 每条记忆携带结构化 `ConfidenceMetadata`(分数 + 可靠性层级:`direct` 用户亲述 / `inferred` LLM 推断 / `hearsay` 二手转述)。写入时根据 source 自动赋值(manual=0.9, agent=0.7, conversation_import=0.5)。检索评分加权置信度。`resume_context` 对低置信条目标注 `[低置信]`。
182
+ 网关只放行读路由(`/recall`、`/search`、`/stats`、`/health`),**任何写路由一律 404**;Bearer token 常量时间比较、每分钟限流、请求与响应都有大小上限。把它放到隧道后面(Tailscale Serve/Funnel、Cloudflare Tunnel 等)即可从手机访问。
242
183
 
243
- - **干扰检测 + 主动遗忘门** *(PI-LLM / SleepGate)* —— 语义聚簇检测识别竞争检索的近重复记忆群。增强版 RIF 每簇仅保留 top-K(默认 3),多余的降权 50% 而非删除。写入时预警:scope 内累积 ≥5 条高相似活跃记忆时,最弱的标记 `pending_review`。`data_checkup` 报告干扰密度。
184
+ ```bash
185
+ curl -X POST https://<你的隧道地址>/recall \
186
+ -H "Authorization: Bearer $(cat ~/.config/recallnest/gateway-token)" \
187
+ -H 'content-type: application/json' \
188
+ -d '{"query":"上次那个部署问题怎么解决的","limit":3,"allScopes":true}'
189
+ ```
244
190
 
245
- - **时间有效性窗口** *(TSM / TiMem / Zep)* —— `store_memory` 接受 `validUntil`(过期时间)和 `eventTime`(事件发生时间)。`search_memory` 支持 `validAt`(时间点查询)和 `includeExpired`(降权 80% 而非隐藏)。auto-GC 对过期记忆施加 2 倍衰减加速。
191
+ 可选:配 `RECALLNEST_GATEWAY_FILE_ROOTS="notes=/abs/path,wiki=/abs/path"` 会多出一个 `GET /files/search`,用 ripgrep 只读检索你指定的 markdown 目录(查询词以 argv 传入,不经过 shell)。不配就没有这个路由。
246
192
 
247
- - **Usage-adjusted Auto-GC** *(默认关闭)* —— `RECALLNEST_USAGE_DECAY=true` 且建构式检索 use 信号开启时,GC 专用分支才会对 cold 记忆的 frequency 项打折;在线检索排序不读取这个分支。
193
+ > 网关默认也只绑 `127.0.0.1`——把它暴露到公网是隧道的职责,请自行评估风险。
248
194
 
249
- ---
195
+ 作者用这条路把 iPhone 上的 [OpenMinis](https://github.com/OpenMinis/OpenMinis) 接了上来:手机 app 经 Tailscale Funnel 打到网关,能查到同一份记忆库。有意思的是它查回的是**它自己**的历史——那些对话导出后回流、被索引,于是一个每次冷启动的手机 agent 有了跨会话的记忆。
196
+
197
+
198
+
199
+ ## 快速开始
200
+
201
+ ### 方式 A:Claude Code Plugin(推荐)
250
202
 
251
- ## v2.3 新增:Connector 生态 + 数据源健康
203
+ ```bash
204
+ /plugin marketplace add AliceLJY/recallnest
205
+ /plugin install recallnest@AliceLJY
206
+ ```
252
207
 
253
- v2.2 强化了检索质量;v2.3 通过标准 Connector 框架和运维健康监控,把 RecallNest 开放给外部数据源。
208
+ RecallNest 随 Claude Code 自动启动,无需手动配置 MCP。
254
209
 
255
- - **Connector-v1 标准** *(GB-2)* —— 一套 JSON 格式(`ConnectorOutputV1`),任何外部脚本都可以输出。Obsidian 笔记、邮件、RSS、日志文件——标准化一次,走完整的 dedup/embed/extract 管线入库。规范见 [`docs/connector-spec.md`](docs/connector-spec.md),适配器骨架见 [`connectors/examples/`](connectors/examples/)(email、logs、RSS)。
210
+ 安装时 Claude Code 会提示填写 Jina API key。密钥由 Claude Code 的敏感插件配置保存;自动生成的配置和 LanceDB 数据库则放在插件持久数据目录,不会混进按版本更新的插件缓存。
256
211
 
257
- - **Obsidian Vault 接入** *(GB-1)* —— 官方 Obsidian 连接器:扫描 `.md` 文件,提取 frontmatter + wikilink,文件夹结构映射为 tag。一条命令:`lm ingest --obsidian /path/to/vault`。
212
+ > Claude Code 插件与 npm 包共用同一个发布版本,并随版本发布同步更新。
213
+ >
214
+ > **前置要求:** [Bun](https://bun.sh)。首次启动自动安装依赖。
258
215
 
259
- - **数据源健康监控** *(GB-3)* —— 每次 connector ingest 写心跳到 `data/source-heartbeat.json`。`data_checkup` 标记过期数据源(>7 天 warning,>30 天 error)。`doctor --ci` 按数据源展示心跳摘要(如"obsidian: 2h ago")。
216
+ ### 方式 B:npm 安装
260
217
 
261
- ---
218
+ ```bash
219
+ npx recallnest --help # 直接运行
220
+ # 或
221
+ npm install -g recallnest # 全局安装
222
+ recallnest doctor
223
+ ```
262
224
 
263
- ## 架构
225
+ 支持 Node.js 22+(通过 tsx)或 Bun,无需 clone 仓库。
264
226
 
227
+ ### 方式 C:手动安装
228
+
229
+ ```bash
230
+ git clone https://github.com/AliceLJY/recallnest.git
231
+ cd recallnest
232
+ bun install
233
+ cp config.json.example config.json
234
+ cp .env.example .env
235
+ # 编辑 .env → 填入 JINA_API_KEY
265
236
  ```
266
- ┌──────────────────────────────────────────────────────────┐
267
- │ 客户端层 │
268
- ├──────────┬──────────┬──────────┬──────────────────────────┤
269
- │ Claude │ Gemini │ Codex │ 自定义 Agent / curl │
270
- │ Code │ CLI │ │ │
271
- └────┬─────┴────┬─────┴────┬─────┴──────┬──────────────────┘
272
- │ │ │ │
273
- └──── MCP (stdio) ───┘ HTTP API(端口 4318)
274
- │ │
275
- ▼ ▼
276
- ┌──────────────────────────────────────────────────────────┐
277
- │ 集成层 │
278
- │ ┌─────────────────────┐ ┌────────────────────────────┐ │
279
- │ │ MCP Server │ │ HTTP API Server │ │
280
- │ │ 43 个工具 │ │ 21 个端点 │ │
281
- │ └─────────┬───────────┘ └──────────┬─────────────────┘ │
282
- └────────────┼─────────────────────────┼───────────────────┘
283
- └──────────┬──────────────┘
284
- ▼
285
- ┌──────────────────────────────────────────────────────────┐
286
- │ 核心引擎 │
287
- │ │
288
- │ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
289
- │ │ 检索器 │ │ 分类器 │ │ 上下文编排器 │ │
290
- │ │(向量 + │ │(6 类分类) │ │(resume_context) │ │
291
- │ │ BM25 + RRF)│ │ │ │ │ │
292
- │ └────────────┘ └────────────┘ └──────────────────────┘ │
293
- │ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
294
- │ │ 衰减引擎 │ │ 冲突引擎 │ │ 捕获引擎 │ │
295
- │ │(Weibull) │ │(审计 + │ │(evidence → durable)│ │
296
- │ │ │ │ 合并) │ │ │ │
297
- │ └────────────┘ └────────────┘ └──────────────────────┘ │
298
- └──────────────────────────┬───────────────────────────────┘
299
- ▼
300
- ┌──────────────────────────────────────────────────────────┐
301
- │ 存储层 │
302
- │ ┌─────────────────────┐ ┌────────────────────────────┐ │
303
- │ │ LanceDB │ │ Jina Embeddings v5 │ │
304
- │ │(向量 + 列式存储) │ │(1024 维,任务感知) │ │
305
- │ └─────────────────────┘ └────────────────────────────┘ │
306
- └──────────────────────────────────────────────────────────┘
237
+
238
+ ### 启动服务
239
+
240
+ ```bash
241
+ bun run api
242
+ # → RecallNest API running at http://localhost:4318
307
243
  ```
308
244
 
309
- ### 内部设计
245
+ ### 试一下
310
246
 
311
- - **L0 / L1 / L2 动态折叠** —— 每条记忆存储 3 个粒度层(一句话 / 要点概要 / 完整内容);检索时根据相关性分数和 token 预算动态选择返回哪个层级
312
- - **Weibull 衰减 + 情绪调制** —— 记忆沿参数化 Weibull 曲线衰减;情绪显著性可额外延长半衰期最高 30%
313
- - **向量预筛 + LLM 去重** —— 90% 的去重决策用低成本余弦相似度(≥ 0.92);仅临界情况调用 LLM 判断
314
- - **类别分化合并策略** —— `profile` 和 `preferences` 采用冲突合并(新版覆盖);`events` 和 `cases` 采用追加(保留历史)
315
- - **展示分 vs 淘汰分双轨制** —— 检索使用双轨评分:tier floor 防止核心记忆被淘汰,decay boost 让新鲜记忆临时浮现而不永久挤掉稳定记忆
247
+ ```bash
248
+ # 存入一条记忆
249
+ curl -X POST http://localhost:4318/v1/store \
250
+ -H "Content-Type: application/json" \
251
+ -d '{"text": "用户偏好暗色模式", "category": "preferences"}'
316
252
 
317
- > 完整架构详解:[`docs/architecture.md`](docs/architecture.md)
253
+ # 搜索记忆
254
+ curl -X POST http://localhost:4318/v1/recall \
255
+ -H "Content-Type: application/json" \
256
+ -d '{"query": "用户偏好"}'
257
+
258
+ # 查看统计
259
+ curl http://localhost:4318/v1/stats
260
+ ```
261
+
262
+ ### 接入终端
263
+
264
+ ```bash
265
+ bash integrations/claude-code/setup.sh
266
+ bash integrations/agy/setup.sh
267
+ bash integrations/codex/setup.sh
268
+ ```
269
+
270
+ 每个脚本会同时安装 MCP 和 continuity 规则,新窗口自动触发 `resume_context`。
271
+
272
+ ### 索引已有对话
273
+
274
+ ```bash
275
+ bun run src/cli.ts ingest --source all
276
+ bun run seed:continuity
277
+ bun run src/cli.ts doctor
278
+ ```
318
279
 
319
280
  ---
320
281
 
282
+ ## 图片:可寻址,而不是被编码
283
+
284
+ 对话里有图,而文本记忆层没有。通常的答案是上一个多模态 embedding 模型,把每张图编码进
285
+ 和文字同一个向量空间。那个答案对相册和商品库是对的,放在这里却是错的形状,理由很便宜:
286
+ **在对话里,一张图几乎从不孤零零地出现。** 它总被"你看这个报错"包着,而紧跟其后的回复
287
+ 通常已经描述了图里是什么。图周围的文字,本来就是这张图的索引。缺的从来不是对像素做语义
288
+ 检索,而是**知道那儿有一张图**。
289
+
290
+ 所以 RecallNest 不编码图片。它只记下**这条记忆所属的 session 里有几张图**,剩下的交给你判断
291
+ 要不要去翻原始对话。图的含义在需要的那一刻、由当时在问的那个模型现场解读。
292
+
293
+ 代价值得说清楚:**不需要多模态模型,不重新 embedding,不存图片,不改动任何一个向量。**
294
+ 给存量的 21,319 条记忆补上这个标记,只动了 metadata。
295
+
296
+ 这里面有两个不那么显然的选择,而且两次的第一版都是错的。
297
+
298
+ ### 粒度取 session,是故意的
299
+
300
+ 标记数的是整个 session,不是单轮——比第一眼该有的粒度更粗,而粗正是重点。
301
+
302
+ 一轮如果只有一张截图、几乎没有文字,它根本过不了长度闸,压根没进过库。在真实对话上实测,
303
+ **含用户贴图的轮次里有 12.5% 是整轮被丢掉的**——而且丢的恰恰是最值钱的那些:七张截图一个字
304
+ 没配,或者「操作步骤在这里」配一张图、而那张图**就是**步骤本身。轮次级的标记,对最该被找到的
305
+ 那批图**无处可挂**。session 级的标记会落到同一个 session 里**其他**进了库的记忆上,而那些才是
306
+ 搜索会捞出来的东西。
307
+
308
+ 代价不加掩饰:同一个 session 的每条记忆都带同一个数字,所以那些图未必和你眼前这一条有关。
309
+ 输出里写的是 `in this session` 而不是 `in this memory`,就是为了这个。
310
+
311
+ ### 分成两类,因为它们回答的不是同一个问题
312
+
313
+ | 类别 | 是什么 | 回答什么问题 |
314
+ |---|---|---|
315
+ | user-pasted | 人贴进消息里的图 | *我发过的那张截图在哪?* |
316
+ | agent-made | 这个 session 产生的其余所有图 | *那个页面当时长什么样?我当时生成的图是哪张?* |
317
+
318
+ 只留第一类很诱人——人翻自己的记忆,想找的是自己的截图。但一个 agent 回溯自己干过的活,
319
+ 要的是第二类:它画的示意图、它截的渲染结果、它为一篇文章配的插图。**1,767 个带图 session 里,
320
+ 有 1,103 个一张人贴的图都没有。** 只留第一类,这些 session 就全哑了——而它们恰恰是 agent
321
+ 做了大量视觉工作的那些。
322
+
323
+ ### 第二类是补集,不是清单
324
+
325
+ 第一版的实现是靠**枚举**定义"AI 产的图":`tool_result` 里的、`payload.output` 里的、
326
+ `tool.result` 里的。每一个位置都真实存在,这份清单依然是错的,因为**图片可能出现的方式只会
327
+ 越来越多**,而枚举会悄无声息地漏掉它没预料到的那一种。
328
+
329
+ 所以第二类改成了补集:数出这条记录里所有的图片信号,减去能明确认定为"人贴的",剩下的
330
+ 一律归入,不问它从哪儿来。在 9,619 份对话记录上:
331
+
332
+ | | 枚举 | 补集 |
333
+ |---|---|---|
334
+ | AI 产的图 | 5,812 | **10,938** |
335
+ | 有图的 session | 1,507 | **1,767** |
336
+ | 人贴的图 | 1,629 | 1,629 |
337
+
338
+ **枚举漏掉了 5,126 张图和 376 个 session**,接近一半。漏得最多的是**生图**——它待在那份清单
339
+ 知道的两个容器之外。而人贴的图在两种口径下数字完全一致,这正是关键的校验点:放宽第二类
340
+ 没有污染精确的第一类。有一条回归测试钉住这件事:它喂给解析器一个源码里从未出现过的
341
+ `image_generation_call`,断言它落进第二类;在枚举式实现下那条测试必红。
342
+
343
+ 一点诚实的说明:补集数的是*信号*,不是确认过的图片张数。一次生图可能同时留下调用和完成
344
+ 两条记录,被数成两张。这个方向是刻意选的——它要回答的是"这儿有没有东西可看",而不是
345
+ "到底几张"。
346
+
321
347
  ## 接口
322
348
 
323
349
  RecallNest 提供两种接口:
324
350
 
325
- - **MCP** —— 给任意 MCP 客户端使用:Claude Code、Codex、Kimi、Antigravity、Gemini CLI(原生工具访问)
351
+ - **MCP(stdio)** —— 给任何能启动一条命令的客户端:CLI agent(Claude Code、Codex、Kimi、Antigravity)与能填 MCP 配置的 GUI app(豆包、Cherry Studio、ChatBox)
326
352
  - **HTTP API** —— 给自定义 Agent、SDK 应用和任何 HTTP 客户端使用
327
353
 
328
354
  ### Agent 框架示例
@@ -338,7 +364,7 @@ RecallNest 提供两种接口:
338
364
  ---
339
365
 
340
366
  <details>
341
- <summary><strong>MCP 工具(43 个)</strong></summary>
367
+ <summary><strong>MCP 工具(44 个)</strong></summary>
342
368
 
343
369
  | 工具 | 说明 |
344
370
  |------|------|
@@ -350,6 +376,7 @@ RecallNest 提供两种接口:
350
376
  | `store_case` | 存储问题-方案对 |
351
377
  | `promote_memory` | 显式升级 evidence 为持久记忆 |
352
378
  | `promote_scan` | 扫描近期 evidence,自动晋升合格记忆为持久存储 |
379
+ | `promote_synthesis` | 扫描 dream 合成出的结论,把自身证据集撑得住的那些晋升为持久记忆 |
353
380
  | `list_conflicts` | 列出或查看冲突候选 |
354
381
  | `audit_conflicts` | 汇总过期/升级的冲突优先级 |
355
382
  | `escalate_conflicts` | 预览或应用冲突升级元数据 |
@@ -462,6 +489,46 @@ bun run src/cli.ts doctor
462
489
 
463
490
  ---
464
491
 
492
+ ## Web UI
493
+
494
+ <p align="center">
495
+ <img src="assets/dashboard.png" alt="RecallNest Dashboard" width="800" />
496
+ <br><em>Dashboard —— 总量、类别分布、健康评分、增长趋势一目了然。</em>
497
+ </p>
498
+
499
+ <p align="center">
500
+ <img src="assets/screenshots/ui-full.png" alt="RecallNest Search Workbench" width="800" />
501
+ <br><em>Search Workbench —— 混合检索 + Topic Tag 过滤 + 4 套检索策略 + Skills 浏览 + 资产管理。</em>
502
+ </p>
503
+
504
+ <p align="center">
505
+ <img src="assets/knowledge-graph.png" alt="RecallNest Knowledge Graph" width="800" />
506
+ <br><em>Knowledge Graph —— 交互式力导向图,语义桥接揭示跨域隐藏关联。</em>
507
+ </p>
508
+
509
+ ```bash
510
+ bun run src/ui-server.ts
511
+ # → http://localhost:4317
512
+ ```
513
+
514
+ ---
515
+
516
+ ## 最近更新
517
+
518
+ **v3.0** 把运行时下限提到 **Node 22**(本次唯一的破坏性变更,Bun 用户不受影响),
519
+ 并给"合成出来的结论"开了一条通往稳定记忆的路:`dream` 产出的洞察现在可以凭它自己
520
+ 那套已验证的证据被提升,而不是永远卡在证据层、下游谁也不敢依赖。
521
+
522
+ 同批还修了一个限流回复引发的无限请求风暴——实测在一个正让我们慢下来的接口上
523
+ 五秒打了六万多次请求。它是被新加的 HTTP 契约测试抓出来的:那些测试让真实的客户端类
524
+ 去打一个本地回环服务,而不是把 SDK 打桩糊过去。
525
+
526
+ 已有的 LanceDB 数据原地打开,不需要导出导入。
527
+
528
+ **完整变更历史(v3.0 到 v1.0,含每个版本的升级说明)在
529
+ [CHANGELOG.md](CHANGELOG.md)。**
530
+
531
+
465
532
  ## 多语言支持
466
533
 
467
534
  RecallNest 开箱即用支持英文。如需多语言记忆(中文、日文、泰文及 20+ 种语言),安装 [babel-memory](https://github.com/AliceLJY/babel-memory) 及所需语言包:
@@ -498,7 +565,7 @@ RecallNest 持续维护中。所有主要架构阶段已完成——完整路线
498
565
  RecallNest 起源于 [memory-lancedb-pro](https://github.com/CortexReach/memory-lancedb-pro) 的 fork,共享混合检索、衰减建模、记忆即系统的核心理念。关键区别:
499
566
 
500
567
  - **memory-lancedb-pro** 是 OpenClaw 插件——为单个 OpenClaw Agent 添加长期记忆。
501
- - **RecallNest** 是独立记忆层——通过 MCP + HTTP API 同时服务任意 MCP 客户端(Claude Code、Codex、Kimi、Antigravity、Gemini CLI),内建会话连续性、结构化资产和冲突管理。
568
+ - **RecallNest** 是独立记忆层——通过 MCP + HTTP API 同时服务 CLI agent、GUI 聊天 app 与纯 HTTP 调用方,内建会话连续性、结构化资产和冲突管理。
502
569
 
503
570
  ## 致谢
504
571
 
@@ -518,13 +585,13 @@ RecallNest 起源于 [memory-lancedb-pro](https://github.com/CortexReach/memory-
518
585
  | 项目 | 说明 |
519
586
  |------|------|
520
587
  | [babel-memory](https://github.com/AliceLJY/babel-memory) | BM25 多语言预处理——27+ 种语言,零依赖 |
521
- | [content-alchemy](https://github.com/AliceLJY/content-alchemy) | 5 阶段 AI 写作管线 |
522
- | [content-publisher](https://github.com/AliceLJY/content-publisher) | 图片生成 + 排版 + 微信公众号发布 |
523
- | [wechat-ai-bridge](https://github.com/AliceLJY/wechat-ai-bridge) | 在微信中运行 Claude Code / Codex / Gemini |
524
- | [telegram-ai-bridge](https://github.com/AliceLJY/telegram-ai-bridge) | Telegram Bot:Claude、Codex、Gemini |
588
+ | content-alchemy *(private)* | 5 阶段 AI 写作管线 |
589
+ | content-publisher *(private)* | 图片生成 + 排版 + 微信公众号发布 |
590
+ | [wechat-ai-bridge](https://github.com/AliceLJY/wechat-ai-bridge) | 在微信中运行 Claude Code / Codex |
591
+ | [telegram-ai-bridge](https://github.com/AliceLJY/telegram-ai-bridge) | Telegram Bot:Claude、Codex、Agy、Kimi |
525
592
  | [telegram-cli-bridge](https://github.com/AliceLJY/telegram-cli-bridge) | Telegram CLI 桥接 Gemini CLI |
526
593
  | [openclaw-tunnel](https://github.com/AliceLJY/openclaw-tunnel) | Docker ↔ 宿主机 CLI 桥接 |
527
- | [openclaw-config](https://github.com/AliceLJY/openclaw-config) | OpenClaw Bot 配置与记忆备份 |
594
+ | openclaw-config *(private)* | OpenClaw Bot 配置与记忆备份 |
528
595
  | [digital-clone-skill](https://github.com/AliceLJY/digital-clone-skill) | 从语料构建数字分身 |
529
596
  | [claude-code-studio](https://github.com/AliceLJY/claude-code-studio) | Claude Code 多会话协作平台 |
530
597
  | [cc-genius](https://github.com/AliceLJY/cc-genius) | Web 版 Claude 客户端(PWA)—— 自托管,iPad 可用 |
@@ -25,6 +25,11 @@
25
25
  "path": "auto",
26
26
  "glob": "*.md",
27
27
  "description": "Claude Code memory files"
28
+ },
29
+ "minis": {
30
+ "path": "~/Desktop/minis-outbox/ingest",
31
+ "glob": "*.jsonl",
32
+ "description": "Minis (iPhone) conversations, dropped here by the agent itself"
28
33
  }
29
34
  },
30
35
  "retrieval": {
@@ -36,6 +41,8 @@
36
41
  "hardMinScore": 0.3
37
42
  },
38
43
  "scopeRelations": {
39
- "project:example-a": ["project:example-b"]
44
+ "project:example-a": [
45
+ "project:example-b"
46
+ ]
40
47
  }
41
48
  }
@@ -298,7 +298,7 @@ Each memory item supports:
298
298
  "source": "agent",
299
299
  "storedAt": "2026-03-16T02:11:00.000Z",
300
300
  "disposition": "stored",
301
- "canonicalKey": "entities:recallnest-is-the-shared-memory-layer-for-claude-code-codex-and-gemini-cli"
301
+ "canonicalKey": "entities:recallnest-is-the-shared-memory-layer-for-claude-code-codex-and-agy"
302
302
  }
303
303
  ]
304
304
  }
@@ -11,7 +11,7 @@ Best for AI coding assistants that support Model Context Protocol natively.
11
11
  | Tool | Setup | What it does |
12
12
  |------|-------|-------------|
13
13
  | [Claude Code](claude-code/) | `setup.sh` adds MCP to `~/.claude.json` and installs rules in `~/.claude/CLAUDE.md` | Proactive continuity plus shared recall |
14
- | [Gemini CLI](gemini-cli/) | `setup.sh` adds MCP to `~/.gemini/settings.json` and installs rules in `~/.gemini/GEMINI.md` | Same MCP tools, shared index, continuity prompts |
14
+ | [Antigravity CLI (agy)](agy/) | `setup.sh` adds MCP to `~/.gemini/config/mcp_config.json` and installs rules in `~/.gemini/config/GEMINI.md` | Same MCP tools, shared index, continuity prompts |
15
15
  | [Codex](codex/) | `setup.sh` adds MCP to `~/.codex/config.toml` and installs rules in `~/.codex/AGENTS.md` | Same MCP tools, shared index, continuity prompts |
16
16
 
17
17
  All three share the same LanceDB index, and all three setup scripts now install a managed RecallNest continuity block so fresh windows are instructed to call `resume_context` and `checkpoint_session` at the right times.