recallnest 1.4.1 → 2.2.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 (233) hide show
  1. package/.env +4 -0
  2. package/CLAUDE.md +7 -3
  3. package/README.md +202 -130
  4. package/README_CN.md +263 -190
  5. package/bin/recallnest.mjs +62 -0
  6. package/config.json +55 -0
  7. package/daily-recall.sh +23 -0
  8. package/integrations/setup-all.sh +31 -0
  9. package/logs/daily-recall.error.log +0 -0
  10. package/logs/daily-recall.log +30 -0
  11. package/logs/ingest-2026-04-11.log +110 -0
  12. package/logs/ingest-2026-04-12.log +90 -0
  13. package/logs/launchagent-stderr.log +0 -0
  14. package/logs/launchagent-stdout.log +0 -0
  15. package/package.json +10 -3
  16. package/src/access-tracker.ts +3 -2
  17. package/src/activity-counter.ts +109 -0
  18. package/src/adaptive-retrieval.ts +6 -5
  19. package/src/admission-control.ts +163 -0
  20. package/src/anchor-generator.ts +80 -0
  21. package/src/api-server.ts +10 -0
  22. package/src/audit-log.ts +122 -0
  23. package/src/auto-gc.ts +98 -29
  24. package/src/auto-recall.ts +33 -4
  25. package/src/capture-engine.ts +372 -23
  26. package/src/cascade-forget.ts +3 -2
  27. package/src/cli.ts +107 -5
  28. package/src/compat.ts +22 -0
  29. package/src/confidence-tracker.ts +210 -47
  30. package/src/conflict-store.ts +12 -3
  31. package/src/consolidation-engine.ts +296 -8
  32. package/src/context-collapse-renderer.ts +222 -0
  33. package/src/context-composer-stable-selection.ts +5 -1
  34. package/src/context-composer.ts +239 -4
  35. package/src/context-reconstructor.ts +404 -0
  36. package/src/conversation-importer.ts +441 -0
  37. package/src/data-checkup.ts +232 -0
  38. package/src/decay-engine.ts +84 -0
  39. package/src/distill-lock.ts +122 -0
  40. package/src/doctor.ts +8 -10
  41. package/src/dream-pipeline.ts +227 -0
  42. package/src/emotion-detector.ts +90 -0
  43. package/src/eval.ts +3 -2
  44. package/src/forget-engine.ts +269 -0
  45. package/src/frequency-tracker.ts +175 -0
  46. package/src/graph-export.ts +644 -0
  47. package/src/ingest.ts +36 -6
  48. package/src/interference-detector.ts +187 -0
  49. package/src/kg-extractor.ts +15 -24
  50. package/src/kg-store.ts +2 -1
  51. package/src/language-hook.ts +67 -0
  52. package/src/llm-client.ts +289 -6
  53. package/src/mcp-server.ts +707 -80
  54. package/src/memory-assets.ts +22 -5
  55. package/src/memory-evolution.ts +365 -0
  56. package/src/memory-lint.ts +429 -0
  57. package/src/memory-output.ts +69 -0
  58. package/src/memory-schema.ts +74 -2
  59. package/src/narrative-schema.ts +79 -0
  60. package/src/narrative-tagger.ts +164 -0
  61. package/src/pii-detector.ts +98 -0
  62. package/src/post-retrieval-filter.ts +76 -0
  63. package/src/prediction-engine.ts +253 -0
  64. package/src/preference-slots.ts +65 -2
  65. package/src/prospective-memory.ts +215 -0
  66. package/src/query-expander.ts +67 -0
  67. package/src/recall-governor.ts +183 -0
  68. package/src/retention-policy.ts +90 -0
  69. package/src/retriever.ts +828 -55
  70. package/src/rif.ts +34 -8
  71. package/src/runtime-config.ts +23 -8
  72. package/src/scope-inventory.ts +4 -3
  73. package/src/scope-policy.ts +4 -0
  74. package/src/session-distiller.ts +307 -0
  75. package/src/session-output.ts +40 -0
  76. package/src/session-schema.ts +37 -0
  77. package/src/session-store.ts +7 -2
  78. package/src/skill-engine.ts +208 -0
  79. package/src/skill-promotion.ts +293 -0
  80. package/src/skill-schema.ts +39 -0
  81. package/src/store.ts +96 -10
  82. package/src/topic-tag.ts +66 -0
  83. package/src/tracker.ts +3 -1
  84. package/src/ui-server.ts +80 -8
  85. package/src/workflow-observation-scope-review.ts +2 -1
  86. package/src/workflow-observation-store.ts +2 -1
  87. package/src/write-verifier.ts +126 -0
  88. package/.claude-plugin/CLAUDE.md +0 -29
  89. package/.claude-plugin/marketplace.json +0 -18
  90. package/.github/workflows/ci.yml +0 -28
  91. package/.mcp.json +0 -9
  92. package/CHANGELOG.md +0 -51
  93. package/DEMO.md +0 -94
  94. package/EVAL.md +0 -89
  95. package/FAILURES.md +0 -75
  96. package/OPERATIONS.md +0 -59
  97. package/ROADMAP.md +0 -198
  98. package/assets/recallnest-workbench.png +0 -0
  99. package/assets/ui/app.js +0 -807
  100. package/assets/ui/index.html +0 -154
  101. package/assets/ui/styles.css +0 -605
  102. package/assets/wechat-qr.jpg +0 -0
  103. package/daily-reflections/2026-03-05.md +0 -15
  104. package/daily-reflections/2026-03-06.md +0 -15
  105. package/daily-reflections/2026-03-07.md +0 -7
  106. package/daily-reflections/2026-03-08.md +0 -34
  107. package/daily-reflections/2026-03-09.md +0 -35
  108. package/daily-reflections/2026-03-10.md +0 -36
  109. package/daily-reflections/2026-03-11.md +0 -35
  110. package/daily-reflections/2026-03-12.md +0 -36
  111. package/daily-reflections/2026-03-13.md +0 -35
  112. package/daily-reflections/2026-03-14.md +0 -35
  113. package/daily-reflections/2026-03-15.md +0 -35
  114. package/daily-reflections/2026-03-16.md +0 -41
  115. package/daily-reflections/2026-03-17.md +0 -10
  116. package/daily-reflections/2026-03-18.md +0 -10
  117. package/daily-reflections/2026-03-19.md +0 -10
  118. package/daily-reflections/2026-03-20.md +0 -10
  119. package/daily-reflections/2026-03-21.md +0 -10
  120. package/daily-reflections/2026-03-22.md +0 -10
  121. package/daily-reflections/2026-03-23.md +0 -10
  122. package/daily-reflections/2026-03-24.md +0 -10
  123. package/daily-reflections/2026-03-25.md +0 -32
  124. package/daily-reflections/2026-03-26.md +0 -37
  125. package/daily-reflections/2026-03-27.md +0 -35
  126. package/daily-reflections/2026-03-28.md +0 -35
  127. package/daily-reflections/2026-03-29.md +0 -35
  128. package/daily-reflections/2026-03-30.md +0 -36
  129. package/daily-reflections/2026-03-31.md +0 -35
  130. package/daily-reflections/2026-04-01.md +0 -35
  131. package/docs/api-reference.md +0 -1291
  132. package/docs/architecture.md +0 -168
  133. package/docs/memory-boundary-contract.md +0 -226
  134. package/docs/memory-categories.md +0 -119
  135. package/docs/pipeline-audit-ultramemory.md +0 -177
  136. package/docs/plans/2026-03-08-query-expansion.md +0 -270
  137. package/docs/plans/2026-03-16-continuity-layer.md +0 -196
  138. package/docs/plans/mcp-tiering-plan.md +0 -126
  139. package/docs/research/recall-quality-audit-2026-03-22.md +0 -153
  140. package/docs/self-evolution.md +0 -198
  141. package/docs/superpowers/plans/2026-03-19-ingest-pipeline-upgrade.md +0 -782
  142. package/docs/superpowers/specs/2026-03-19-ingest-pipeline-upgrade-design.md +0 -77
  143. package/docs/superpowers/specs/2026-03-23-pull-claude-desktop-design.md +0 -95
  144. package/eval/continuity/results-2026-03-16.md +0 -117
  145. package/eval/continuity/results-2026-03-19.md +0 -453
  146. package/eval/continuity/runbook.md +0 -110
  147. package/eval/continuity/seed-cases.md +0 -54
  148. package/eval/reports/2026-03-06-abstract-query-baseline.md +0 -96
  149. package/eval/reports/2026-03-06-aws-ssh-baseline.md +0 -82
  150. package/eval/reports/2026-03-06-baseline.md +0 -82
  151. package/eval/reports/query-expansion.md +0 -138
  152. package/lm +0 -19
  153. package/plan-v1.2-distributable.md +0 -105
  154. package/scripts/archive-distilled-junk.ts +0 -116
  155. package/scripts/backfill-l0l1l2.ts +0 -98
  156. package/scripts/blind-scan.ts +0 -588
  157. package/scripts/cleanup-step1-exact-dups.ts +0 -117
  158. package/scripts/cleanup-step2-template-dups.ts +0 -113
  159. package/scripts/cleanup-step3-stale-content.ts +0 -149
  160. package/scripts/cleanup-step4-orphan-scopes.ts +0 -131
  161. package/scripts/delete-distilled-junk.ts +0 -88
  162. package/scripts/distill-facts.ts +0 -305
  163. package/scripts/health-check.ts +0 -343
  164. package/scripts/incremental-ingest.sh +0 -71
  165. package/scripts/mlp-health-check.ts +0 -382
  166. package/scripts/pull-claude-desktop.ts +0 -515
  167. package/scripts/re-ingest-cc.sh +0 -66
  168. package/scripts/rebalance-memory-health.ts +0 -181
  169. package/scripts/run-desktop-ingest.sh +0 -11
  170. package/scripts/start-server.sh +0 -12
  171. package/scripts/viz-dashboard.html +0 -423
  172. package/scripts/viz-export.ts +0 -703
  173. package/src/__tests__/access-tracker-novelty.test.ts +0 -228
  174. package/src/__tests__/auto-consolidation.test.ts +0 -168
  175. package/src/__tests__/auto-recall.test.ts +0 -131
  176. package/src/__tests__/batch-dedup.test.ts +0 -65
  177. package/src/__tests__/capture-engine.test.ts +0 -1142
  178. package/src/__tests__/capture-heuristic.test.ts +0 -171
  179. package/src/__tests__/cascade-forget.test.ts +0 -210
  180. package/src/__tests__/category-min-scores.test.ts +0 -33
  181. package/src/__tests__/confidence-tracker.test.ts +0 -196
  182. package/src/__tests__/conflict-advisor.test.ts +0 -206
  183. package/src/__tests__/conflict-escalation.test.ts +0 -149
  184. package/src/__tests__/conflict-lifecycle.test.ts +0 -83
  185. package/src/__tests__/conflict-output.test.ts +0 -85
  186. package/src/__tests__/conflict-store.test.ts +0 -374
  187. package/src/__tests__/consolidation-engine.test.ts +0 -181
  188. package/src/__tests__/context-composer-pins.test.ts +0 -64
  189. package/src/__tests__/context-composer-task-selection.test.ts +0 -24
  190. package/src/__tests__/context-renderer.test.ts +0 -91
  191. package/src/__tests__/continuity-eval.test.ts +0 -275
  192. package/src/__tests__/continuity-schema.test.ts +0 -97
  193. package/src/__tests__/core-recall-eval.test.ts +0 -235
  194. package/src/__tests__/core-summary.test.ts +0 -109
  195. package/src/__tests__/dedup-actions.test.ts +0 -58
  196. package/src/__tests__/deterministic-id.test.ts +0 -39
  197. package/src/__tests__/doctor.test.ts +0 -303
  198. package/src/__tests__/drill-down.test.ts +0 -108
  199. package/src/__tests__/embedder.test.ts +0 -122
  200. package/src/__tests__/entity-resolver.test.ts +0 -58
  201. package/src/__tests__/event-segmenter.test.ts +0 -153
  202. package/src/__tests__/hotness-blend.test.ts +0 -76
  203. package/src/__tests__/ingest.test.ts +0 -360
  204. package/src/__tests__/kg-extractor.test.ts +0 -184
  205. package/src/__tests__/kg-store.test.ts +0 -198
  206. package/src/__tests__/llm-consolidation.test.ts +0 -226
  207. package/src/__tests__/memory-boundaries.test.ts +0 -237
  208. package/src/__tests__/memory-health-rebalance.test.ts +0 -144
  209. package/src/__tests__/memory-output.test.ts +0 -215
  210. package/src/__tests__/multi-vector.test.ts +0 -242
  211. package/src/__tests__/ppr-traversal.test.ts +0 -256
  212. package/src/__tests__/preference-guard-smoke.test.ts +0 -211
  213. package/src/__tests__/preference-matcher.test.ts +0 -230
  214. package/src/__tests__/preference-slots.test.ts +0 -106
  215. package/src/__tests__/prospective-memory.test.ts +0 -283
  216. package/src/__tests__/query-entity-detector.test.ts +0 -171
  217. package/src/__tests__/query-expander.test.ts +0 -34
  218. package/src/__tests__/recall-mode.test.ts +0 -64
  219. package/src/__tests__/result-synthesizer.test.ts +0 -198
  220. package/src/__tests__/resume-context.test.ts +0 -4743
  221. package/src/__tests__/retrieval-trace.test.ts +0 -213
  222. package/src/__tests__/retriever-boundary-weight.test.ts +0 -136
  223. package/src/__tests__/retroactive-boost.test.ts +0 -223
  224. package/src/__tests__/scope-inventory.test.ts +0 -200
  225. package/src/__tests__/scope-policy.test.ts +0 -69
  226. package/src/__tests__/session-checkpoint.test.ts +0 -259
  227. package/src/__tests__/session-gc.test.ts +0 -215
  228. package/src/__tests__/store-scope-audit.test.ts +0 -81
  229. package/src/__tests__/temporal-parser.test.ts +0 -241
  230. package/src/__tests__/term-registry.test.ts +0 -121
  231. package/src/__tests__/tool-output-compressor.test.ts +0 -133
  232. package/src/__tests__/version-manager.test.ts +0 -213
  233. package/src/__tests__/workflow-observation.test.ts +0 -400
package/README_CN.md CHANGED
@@ -12,7 +12,8 @@
12
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
13
13
  [![Bun](https://img.shields.io/badge/Runtime-Bun-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-29_tools-blue)](https://modelcontextprotocol.io)
15
+ [![MCP](https://img.shields.io/badge/MCP-41_tools-blue)](https://modelcontextprotocol.io)
16
+ [![Tests](https://img.shields.io/badge/Tests-1428_pass-brightgreen)](https://github.com/AliceLJY/recallnest)
16
17
  [![CC Plugin](https://img.shields.io/badge/Claude_Code-Plugin-blueviolet)](https://github.com/AliceLJY/recallnest)
17
18
 
18
19
  [English](README.md) | **简体中文** | [Roadmap](ROADMAP.md)
@@ -23,52 +24,22 @@
23
24
 
24
25
  ## 为什么需要 RecallNest?
25
26
 
26
- 大多数编程 Agent 一开新窗口就失忆。更糟的是,你的历史上下文分散在三个终端里,互相不通。
27
+ 编程 Agent 每开一个窗口就失忆。项目配置、调试决策、实体映射——散落在 Claude Code、Codex、Gemini CLI 三个终端里,互相不通。
27
28
 
28
- ### 没有 RecallNest —— 每个窗口从零开始:
29
+ RecallNest 的解法:**一个 LanceDB 驱动的记忆层,三个终端共读共写**。一个窗口存入的上下文,另一个窗口自动召回。会话退出时 checkpoint,启动时 resume。记忆会衰减、演化、自组织——不是简单的日志堆积。
29
30
 
30
- > **你(Claude Code):**"Docker 配置在 `/opt/app/config.json`,用 4318 端口。"
31
- >
32
- > *(切到 Codex)*
33
- >
34
- > **你:**"配置路径是……等下让我再找找。"😤
35
- >
36
- > *(第二天,新开 Claude Code 窗口)*
37
- >
38
- > **你:**"这个 bug 上周刚修过!方案是……"
39
- >
40
- > **Agent:**"我没有之前会话的上下文。"🤷
31
+ ### 基准测试:LongMemEval (ICLR 2025)
41
32
 
42
- ### 有了 RecallNest —— 上下文无缝延续:
33
+ 在 6 项记忆能力、500 个问题上评估([评测方法](https://arxiv.org/abs/2407.15168)):
43
34
 
44
- > **你(Claude Code):**"Docker 配置在 `/opt/app/config.json`,用 4318 端口。"
45
- >
46
- > *(切到 Codex —— 同一套记忆层)*
47
- >
48
- > **Agent:**(自动召回项目实体)"使用 `/opt/app/config.json`,端口 4318。"✅
49
- >
50
- > *(第二天,新窗口)*
51
- >
52
- > **Agent:**(resume_context 自动触发)"接续昨天 —— Docker 端口冲突已通过……解决。"✅
35
+ | | RecallNest | 纯向量基线 | 差值 |
36
+ |---|---|---|---|
37
+ | 总体准确率 | **29.6%** | 24.2% | **+5.4pp** |
38
+ | 用户事实 | **64.3%** | 52.9% | +11.4pp |
39
+ | 知识更新 | **43.6%** | 42.3% | +1.3pp |
40
+ | 弃权率 | **55.6%** | 67.8% | **-12.2pp** |
53
41
 
54
- 核心差异:**三个终端共享一套记忆**,上下文跨窗口存活。
55
-
56
- ### 能力一览
57
-
58
- | | 能力 |
59
- |---|---|
60
- | **CC Plugin** | 一行命令装入 Claude Code,无需手动配置 MCP |
61
- | **共享索引** | Claude Code、Codex、Gemini CLI 共用同一个 LanceDB 存储 |
62
- | **双通道接入** | MCP(stdio)给 CLI 工具 + HTTP API 给自定义 Agent |
63
- | **一键接入** | 集成脚本同时安装 MCP 和 continuity 规则 |
64
- | **混合检索** | 向量 + BM25 + 重排序 + Weibull 衰减 + 分层提升 |
65
- | **会话连续性** | `checkpoint_session` + `resume_context` 跨窗口恢复 |
66
- | **Workflow Observation** | 专门的 append-only 工作流观测层,不混入普通 memory |
67
- | **结构化资产** | Pin、Brief、Distill —— 不只是原始日志 |
68
- | **显式升级** | Evidence → Durable Memory,带冲突守卫和合并决议 |
69
- | **6 类记忆** | profile、preferences、entities、events、cases、patterns |
70
- | **4 套检索策略** | default、writing、debug、fact-check —— 按任务类型调优 |
71
- | **多源导入** | 导入三个终端已有的对话历史 |
42
+ **全部 6 项胜出或持平**,无任何退步。混合检索管线(BM25 + 向量 + 时效性 + RIF 去重)比纯向量搜索多召回 12.2% 的相关上下文。
72
43
 
73
44
  ---
74
45
 
@@ -140,6 +111,117 @@ bun run src/cli.ts doctor
140
111
 
141
112
  ---
142
113
 
114
+ ## Web UI
115
+
116
+ <p align="center">
117
+ <img src="assets/dashboard.png" alt="RecallNest Dashboard" width="800" />
118
+ <br><em>Dashboard —— 总量、类别分布、健康评分、增长趋势一目了然。</em>
119
+ </p>
120
+
121
+ <p align="center">
122
+ <img src="assets/screenshots/ui-full.png" alt="RecallNest Search Workbench" width="800" />
123
+ <br><em>Search Workbench —— 混合检索 + Topic Tag 过滤 + 4 套检索策略 + Skills 浏览 + 资产管理。</em>
124
+ </p>
125
+
126
+ <p align="center">
127
+ <img src="assets/knowledge-graph.png" alt="RecallNest Knowledge Graph" width="800" />
128
+ <br><em>Knowledge Graph —— 交互式力导向图,语义桥接揭示跨域隐藏关联。</em>
129
+ </p>
130
+
131
+ ```bash
132
+ bun run src/ui-server.ts
133
+ # → http://localhost:4317
134
+ ```
135
+
136
+ ---
137
+
138
+ ## 核心能力
139
+
140
+ ### 接入与安装
141
+
142
+ | 能力 | 说明 |
143
+ |---|---|
144
+ | **CC Plugin** | 一行命令装入 Claude Code,无需手动配置 MCP |
145
+ | **共享索引** | Claude Code、Codex、Gemini CLI 共用同一个 LanceDB 存储 |
146
+ | **双通道接入** | MCP(stdio)给 CLI 工具 + HTTP API 给自定义 Agent |
147
+ | **一键接入** | 集成脚本同时安装 MCP 和 continuity 规则 |
148
+
149
+ ### 检索与连续性
150
+
151
+ | 能力 | 说明 |
152
+ |---|---|
153
+ | **混合检索** | 6 通道:向量 + BM25 + L0/L1/L2 多向量 + KG 图(PPR) |
154
+ | **4 套检索策略** | default、writing、debug、fact-check —— 按任务类型调优 |
155
+ | **会话连续性** | `checkpoint_session` + `resume_context`(full/light/summary 三种模式)+ 仓库状态守卫 |
156
+ | **会话蒸馏** | 3 层对话压缩:微缩 → LLM 结构化摘要 → 知识提取 |
157
+ | **对话导入** | 支持 Claude Code、Claude.ai、ChatGPT、Slack、纯文本 |
158
+ | **Topic Tags** | scope 内 topic 分区,自动检测,搜索时可过滤 |
159
+
160
+ ### 记忆生命周期与治理
161
+
162
+ | 能力 | 说明 |
163
+ |---|---|
164
+ | **记忆演化** | Supersede 链、衰减评分、LLM 重要性、聚合、归档 |
165
+ | **显式升级** | Evidence → Durable Memory,带冲突守卫、合并决议、审计日志 |
166
+ | **隐私分级** | 4 级(`ephemeral` / `private` / `durable` / `shared`)+ 级联遗忘 |
167
+ | **准入控制** | 写入时门控:噪音过滤、重要性下限、去重、限流 |
168
+ | **Memory Lint** | 矛盾、重复、过期、孤儿检测 + 健康评分 |
169
+ | **离线整合** | `dream` 命令:聚类、合并、修剪积累的记忆 |
170
+
171
+ ### 推理与结构
172
+
173
+ | 能力 | 说明 |
174
+ |---|---|
175
+ | **Knowledge Graph** | 实体关系图 + PPR 算法,支持多跳问题 |
176
+ | **建构式检索** | 多源候选扩展 + 溯源锚定的上下文重建 |
177
+ | **叙事架构** | 三层自传式元数据(生命阶段 → 一般事件 → 具体事件) |
178
+ | **Skill Memory** | 存储、检索、自动提升来自重复模式的可执行技能 |
179
+ | **预测式提醒** | 行为信号预测引擎,主动浮现"你可能需要这个" |
180
+ | **6 类记忆** | profile、preferences、entities、events、cases、patterns —— 类别分化合并策略 |
181
+
182
+ ### 可视化与运维
183
+
184
+ | 能力 | 说明 |
185
+ |---|---|
186
+ | **Dashboard** | Web UI 首页:统计卡片、类别分布、增长趋势、健康概览 |
187
+ | **Workflow Observation** | 专门的 append-only 工作流观测层,不混入普通 memory |
188
+ | **结构化资产** | Pin、Brief、Distill —— 不只是原始日志 |
189
+ | **Data Checkup** | 记忆存储数据质量健康检查 |
190
+ | **导出图谱** | 导出交互式 HTML 知识图谱可视化 |
191
+ | **批量操作** | 单次调用存储最多 20 条记忆,自带去重 |
192
+
193
+ ---
194
+
195
+ ## v2.1 新增:记忆哲学驱动的架构升级
196
+
197
+ v2.0 建立了完整的记忆操作平台;v2.1 加入了记忆哲学驱动的记忆行为。
198
+
199
+ 来自 9 个记忆哲学研究维度的 5 项工程升级:
200
+
201
+ - **情绪感知衰减** *(情感记忆理论)* —— 带有强烈情绪的记忆衰减慢 20-30%。基于关键词的情绪检测计算 `salience`(记忆显著性),注入 Weibull 半衰期公式和重新平衡的 4 因子演化评分。零 LLM 成本。
202
+
203
+ - **记忆伦理层** *(遗忘权 / GDPR 第 17 条)* —— 四级隐私:`ephemeral`(临时)/ `private`(私密)/ `durable`(持久)/ `shared`(共享)。级联遗忘引擎贯穿 KG 三元组、演化链、Pin 资产和摘要。完整审计日志。`forget_memory` MCP 工具支持 Agent 驱动的删除。
204
+
205
+ - **自传叙事架构** *(叙事身份理论 / Conway 三层模型)* —— 记忆标注 `生命阶段 → 一般事件 → 具体事件` 层级,正交于现有 6 类别。检索自动拉取叙事兄弟。上下文渲染按生命阶段分组。支持中英文的规则式标注器。
206
+
207
+ - **建构式检索** *(模拟理论 / Michaelian)* —— 不再返回原始存储文本,而是从扩展候选集(KG 邻居 + 演化链 + 聚类成员 + 叙事兄弟)中重建上下文。Source-map 语义覆盖率替代词汇重叠。矛盾检测与标记。
208
+
209
+ - **预测式前瞻记忆** *(精神时间旅行 / Tulving)* —— 启发式预测引擎从行为信号中浮现"你可能需要这个"提醒:过期的 checkpoint 待办事项、被纠正的工作流观察、高频休眠记忆和未覆盖的查询主题。零 LLM 成本。7 天未接受自动过期。
210
+
211
+ ---
212
+
213
+ ## v2.2 新增:检索质量强化
214
+
215
+ v2.1 加入了哲学记忆行为;v2.2 补齐前沿扫描(ACC、PI-LLM、TSM)发现的最后三个引擎层空白。
216
+
217
+ - **记忆置信度元标签** *(ACC / 双过程不确定性量化)* —— 每条记忆携带结构化 `ConfidenceMetadata`(分数 + 可靠性层级:`direct` 用户亲述 / `inferred` LLM 推断 / `hearsay` 二手转述)。写入时根据 source 自动赋值(manual=0.9, agent=0.7, conversation_import=0.5)。检索评分加权置信度。`resume_context` 对低置信条目标注 `[低置信]`。
218
+
219
+ - **干扰检测 + 主动遗忘门** *(PI-LLM / SleepGate)* —— 语义聚簇检测识别竞争检索的近重复记忆群。增强版 RIF 每簇仅保留 top-K(默认 3),多余的降权 50% 而非删除。写入时预警:scope 内累积 ≥5 条高相似活跃记忆时,最弱的标记 `pending_review`。`data_checkup` 报告干扰密度。
220
+
221
+ - **时间有效性窗口** *(TSM / TiMem / Zep)* —— `store_memory` 接受 `validUntil`(过期时间)和 `eventTime`(事件发生时间)。`search_memory` 支持 `validAt`(时间点查询)和 `includeExpired`(降权 80% 而非隐藏)。auto-GC 对过期记忆施加 2 倍衰减加速。
222
+
223
+ ---
224
+
143
225
  ## 架构
144
226
 
145
227
  ```
@@ -157,7 +239,7 @@ bun run src/cli.ts doctor
157
239
  │ 集成层 │
158
240
  │ ┌─────────────────────┐ ┌────────────────────────────┐ │
159
241
  │ │ MCP Server │ │ HTTP API Server │ │
160
- │ │ 29 个工具 │ │ 19 个端点 │ │
242
+ │ │ 41 个工具 │ │ 21 个端点 │ │
161
243
  │ └─────────┬───────────┘ └──────────┬─────────────────┘ │
162
244
  └────────────┼─────────────────────────┼───────────────────┘
163
245
  └──────────┬──────────────┘
@@ -172,7 +254,7 @@ bun run src/cli.ts doctor
172
254
  │ └────────────┘ └────────────┘ └──────────────────────┘ │
173
255
  │ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
174
256
  │ │ 衰减引擎 │ │ 冲突引擎 │ │ 捕获引擎 │ │
175
- │ │(Weibull) │ │(审计 + │ │(evidence → durable)│ │
257
+ │ │(Weibull) │ │(审计 + │ │(evidence → durable)│ │
176
258
  │ │ │ │ 合并) │ │ │ │
177
259
  │ └────────────┘ └────────────┘ └──────────────────────┘ │
178
260
  └──────────────────────────┬───────────────────────────────┘
@@ -181,164 +263,117 @@ bun run src/cli.ts doctor
181
263
  │ 存储层 │
182
264
  │ ┌─────────────────────┐ ┌────────────────────────────┐ │
183
265
  │ │ LanceDB │ │ Jina Embeddings v5 │ │
184
- │ │(向量 + 列式存储) │ │(1024 维,任务感知) │ │
266
+ │ │(向量 + 列式存储) │ │(1024 维,任务感知) │ │
185
267
  │ └─────────────────────┘ └────────────────────────────┘ │
186
268
  └──────────────────────────────────────────────────────────┘
187
269
  ```
188
270
 
271
+ ### 内部设计
272
+
273
+ - **L0 / L1 / L2 动态折叠** —— 每条记忆存储 3 个粒度层(一句话 / 要点概要 / 完整内容);检索时根据相关性分数和 token 预算动态选择返回哪个层级
274
+ - **Weibull 衰减 + 情绪调制** —— 记忆沿参数化 Weibull 曲线衰减;情绪显著性可额外延长半衰期最高 30%
275
+ - **向量预筛 + LLM 去重** —— 90% 的去重决策用低成本余弦相似度(≥ 0.92);仅临界情况调用 LLM 判断
276
+ - **类别分化合并策略** —— `profile` 和 `preferences` 采用冲突合并(新版覆盖);`events` 和 `cases` 采用追加(保留历史)
277
+ - **展示分 vs 淘汰分双轨制** —— 检索使用双轨评分:tier floor 防止核心记忆被淘汰,decay boost 让新鲜记忆临时浮现而不永久挤掉稳定记忆
278
+
189
279
  > 完整架构详解:[`docs/architecture.md`](docs/architecture.md)
190
280
 
191
281
  ---
192
282
 
193
- ## 集成方式
283
+ ## 接口
194
284
 
195
- RecallNest 提供两条接入路径:
285
+ RecallNest 提供两种接口:
196
286
 
197
- - **MCP** —— 给 Claude Code、Gemini CLI、Codex 等终端工具使用
198
- - **HTTP API** —— 给自定义 Agent 和 SDK 应用使用
287
+ - **MCP** —— 给 Claude Code、Gemini CLI、Codex 使用(原生工具访问)
288
+ - **HTTP API** —— 给自定义 Agent、SDK 应用和任何 HTTP 客户端使用
199
289
 
200
290
  ### Agent 框架示例
201
291
 
202
- 示例位于 [`integrations/examples/`](integrations/examples/):
292
+ 示例代码位于 [`integrations/examples/`](integrations/examples/):
203
293
 
204
- | 框架 | 示例文件 | 语言 |
205
- |------|---------|------|
294
+ | 框架 | 示例 | 语言 |
295
+ |------|------|------|
206
296
  | [Claude Agent SDK](integrations/examples/claude-agent-sdk/) | `memory-agent.ts` | TypeScript |
207
297
  | [OpenAI Agents SDK](integrations/examples/openai-agents-sdk/) | `memory-agent.py` | Python |
208
298
  | [LangChain](integrations/examples/langchain/) | `memory-chain.py` | Python |
209
299
 
210
300
  ---
211
301
 
212
- ## 核心特性
213
-
214
- ### 混合检索
215
-
216
- ```
217
- 查询 → 向量嵌入 ──┐
218
- ├── 混合融合 → 重排序 → Weibull 衰减 → 过滤 → Top-K
219
- 查询 → BM25 全文 ─┘
220
- ```
221
-
222
- - **向量搜索** —— 基于 LanceDB ANN 的语义相似度匹配
223
- - **BM25 全文搜索** —— 基于 LanceDB FTS 的精确关键词匹配
224
- - **混合融合** —— 向量 + BM25 组合评分
225
- - **重排序** —— Jina 交叉编码器重排
226
- - **衰减 + 分层** —— Weibull 时间衰减模型,Core / Working / Peripheral 三层
227
-
228
- ### 会话连续性
229
-
230
- 跨窗口工作流的核心能力:
231
-
232
- - **`checkpoint_session`** —— 快照当前工作状态(决策、未完成项、下一步)
233
- - **repo-state 守卫** —— 保存 checkpoint 前会清洗 `git status` / modified-file 文本,避免易变 repo 状态污染后续 handoff
234
- - **`resume_context`** —— 从 checkpoint + 长期记忆 + pin 编排启动上下文
235
- - **托管规则** —— 集成脚本自动安装 continuity 规则,新窗口自动触发 `resume_context`
236
-
237
- ### Workflow Observation
238
-
239
- RecallNest 现在把 workflow observation 放在专门的 append-only store,而不是硬塞进普通记忆索引:
240
-
241
- - **`workflow_observe`** —— 记录 `resume_context`、`checkpoint_session` 等 workflow primitive 是成功、失败、被纠正,还是被漏掉
242
- - **`workflow_health`** —— 汇总单个 workflow 的 7 天 / 30 天健康度,或输出退化 workflow dashboard
243
- - **`workflow_evidence`** —— 打包最近 issue observation、top signals 和后续建议,方便做规则或测试收口
244
-
245
- 这些记录默认落在 `data/workflow-observations`,不属于那 6 类 memory,也不会被 `resume_context` 当成 stable recall 回注。
246
-
247
- ### 记忆升级与冲突决议
248
-
249
- 原始 transcript 不会静默变成长期记忆:
250
-
251
- - **Evidence → Durable** —— 显式 `promote_memory`,带 `canonicalKey` 和来源追踪
252
- - **冲突守卫** —— canonicalKey 碰撞会生成冲突候选项
253
- - **决议方式** —— 保留已有、接受新的、或合并 —— 带建议和聚类视图
254
- - **审计 + 升级** —— `conflicts audit --export` 输出运营审查报告
255
-
256
- ### 检索策略
257
-
258
- | 策略 | 适用场景 | 偏向 |
259
- |------|---------|------|
260
- | `default` | 日常回忆 | 均衡 |
261
- | `writing` | 写作和灵感挖掘 | 语义更宽,较旧内容也保留 |
262
- | `debug` | 报错、命令、修复 | 关键词优先,偏近期 |
263
- | `fact-check` | 证据查找 | 阈值更严,偏精确匹配 |
264
-
265
- ### 记忆分类
266
-
267
- | 分类 | 说明 | 策略 |
268
- |------|------|------|
269
- | `profile` | 用户身份和背景 | 合并 |
270
- | `preferences` | 习惯、风格、偏好 | 合并 |
271
- | `entities` | 项目、工具、人物 | 合并 |
272
- | `events` | 发生过的事情 | 追加 |
273
- | `cases` | 问题 → 解决方案 | 追加 |
274
- | `patterns` | 可复用工作流 | 合并 |
275
-
276
- 详情:[`docs/memory-categories.md`](docs/memory-categories.md)
277
-
278
- ---
279
-
280
302
  <details>
281
- <summary><strong>MCP 工具(29 个)</strong></summary>
303
+ <summary><strong>MCP 工具(41 个)</strong></summary>
282
304
 
283
305
  | 工具 | 说明 |
284
306
  |------|------|
285
- | `workflow_observe` | 记录一条 append-only workflow observation,不写进普通 memory |
286
- | `workflow_health` | 查看单个 workflow 的健康度,或输出退化 workflow dashboard |
287
- | `workflow_evidence` | 为某个 workflow primitive 生成 evidence pack |
288
- | `store_memory` | 存一条可跨窗口复用的长期记忆 |
289
- | `store_workflow_pattern` | 把可复用工作流存成 durable `patterns` 记忆 |
290
- | `store_case` | 把可复用问题-解决方案存成 durable `cases` 记忆 |
291
- | `promote_memory` | 把 evidence 显式升级成 durable memory |
292
- | `list_conflicts` | 列出或查看 promotion 冲突候选项 |
293
- | `audit_conflicts` | 汇总 stale / escalated 冲突的优先级 |
307
+ | `workflow_observe` | 存储 append-only 工作流观察记录 |
308
+ | `workflow_health` | 查看工作流健康状态或降级面板 |
309
+ | `workflow_evidence` | 构建工作流证据包 |
310
+ | `store_memory` | 存储一条持久记忆 |
311
+ | `store_workflow_pattern` | 存储可复用工作流模式 |
312
+ | `store_case` | 存储问题-方案对 |
313
+ | `promote_memory` | 显式升级 evidence 为持久记忆 |
314
+ | `list_conflicts` | 列出或查看冲突候选 |
315
+ | `audit_conflicts` | 汇总过期/升级的冲突优先级 |
294
316
  | `escalate_conflicts` | 预览或应用冲突升级元数据 |
295
- | `resolve_conflict` | 解决一条冲突候选项(保留 / 接受 / 合并) |
296
- | `checkpoint_session` | 把当前工作状态存成独立 checkpoint |
297
- | `latest_checkpoint` | 查看某个 session 或 scope 的最新 checkpoint |
317
+ | `resolve_conflict` | 解决冲突(保留 / 接受 / 合并) |
318
+ | `checkpoint_session` | 保存当前工作状态 |
319
+ | `latest_checkpoint` | 查看最近的 checkpoint |
298
320
  | `resume_context` | 为新窗口编排启动上下文 |
299
- | `search_memory` | 在任务开始时主动回忆 |
300
- | `explain_memory` | 解释为什么这些记忆被命中 |
301
- | `distill_memory` | 把结果提炼成简报 |
302
- | `brief_memory` | 创建结构化 brief 并回写索引 |
303
- | `pin_memory` | 把一条带 scope 边界的记忆提升成 pinned asset |
304
- | `export_memory` | 把 distill 结果导出到磁盘 |
305
- | `list_pins` | 列出 pinned 记忆 |
321
+ | `search_memory` | 任务开始时主动召回 |
322
+ | `explain_memory` | 解释为什么这些记忆被匹配 |
323
+ | `distill_memory` | 将结果蒸馏为精简摘要 |
324
+ | `brief_memory` | 创建结构化摘要并重新索引 |
325
+ | `pin_memory` | 将记忆升级为 Pin 资产 |
326
+ | `export_memory` | 导出蒸馏摘要到磁盘 |
327
+ | `list_pins` | 列出所有 Pin |
306
328
  | `list_assets` | 列出所有结构化资产 |
307
- | `list_dirty_briefs` | 预览旧规则生成的 dirty brief 资产 |
308
- | `clean_dirty_briefs` | 归档 dirty brief 并清理其索引行 |
329
+ | `list_dirty_briefs` | 预览过时的 Brief 资产 |
330
+ | `clean_dirty_briefs` | 归档过时 Brief 并移除索引 |
309
331
  | `memory_stats` | 查看索引统计 |
310
- | `memory_drill_down` | 查看某条记忆的完整元数据和来源追踪 |
311
- | `auto_capture` | 零 LLM 调用,从文本中启发式提取并存储记忆信号 |
312
- | `set_reminder` | 设置前瞻性记忆提醒,在未来会话中自动浮现 |
313
- | `consolidate_memories` | 聚类近重复记忆并合并(默认 dry-run,不直接写入) |
332
+ | `memory_drill_down` | 查看记忆完整元数据和溯源 |
333
+ | `auto_capture` | 启发式提取记忆信号(零 LLM) |
334
+ | `set_reminder` | 设置前瞻记忆提醒 |
335
+ | `consolidate_memories` | 聚类合并近似记忆(默认 dry-run) |
336
+ | `store_skill` | 存储可执行技能 |
337
+ | `retrieve_skill` | 按语义相似度检索技能 |
338
+ | `scan_skill_promotions` | 扫描可升级为技能的候选 |
339
+ | `list_tools` | 按层级发现工具(core/advanced/full) |
340
+ | `batch_store` | 批量存储最多 20 条记忆 |
341
+ | `distill_session` | 三层管线蒸馏对话为结构化知识 |
342
+ | `import_conversations` | 导入 Claude Code、ChatGPT、Slack 等对话 |
343
+ | `data_checkup` | 运行数据质量健康检查 |
344
+ | `dream` | 离线记忆整合(聚类、合并、修剪) |
345
+ | `memory_lint` | 记忆质量检查:矛盾、重复、过期、孤儿 |
346
+ | `forget_memory` | 级联删除记忆 + KG 清理 + Pin 归档 + 审计 |
347
+ | `export_graph` | 导出交互式 HTML 知识图谱 |
314
348
 
315
349
  </details>
316
350
 
317
351
  <details>
318
- <summary><strong>HTTP API(19 个端点)</strong></summary>
352
+ <summary><strong>HTTP API(21 个端点)</strong></summary>
319
353
 
320
- 基础地址:`http://localhost:4318`
354
+ 基地址:`http://localhost:4318`
321
355
 
322
356
  | 端点 | 方法 | 说明 |
323
357
  |------|------|------|
324
358
  | `/v1/recall` | POST | 快速语义搜索 |
325
- | `/v1/store` | POST | 写入一条新记忆 |
326
- | `/v1/capture` | POST | 批量写入结构化记忆 |
327
- | `/v1/pattern` | POST | 写入结构化 workflow pattern |
328
- | `/v1/case` | POST | 写入结构化 problem-solution case |
329
- | `/v1/promote` | POST | 把 evidence 显式升级成 durable memory |
330
- | `/v1/conflicts` | GET | 列出或查看冲突候选项 |
331
- | `/v1/conflicts/audit` | GET | 汇总冲突优先级 |
332
- | `/v1/conflicts/escalate` | POST | 预览或应用冲突升级元数据 |
333
- | `/v1/conflicts/resolve` | POST | 解决一条冲突候选项(保留 / 接受 / 合并) |
334
- | `/v1/checkpoint` | POST | 写入当前工作状态的 checkpoint |
335
- | `/v1/workflow-observe` | POST | 把 workflow observation 写到独立 store,不混入 durable memory |
336
- | `/v1/checkpoint/latest` | GET | 按 session 或 scope 取最新 checkpoint |
337
- | `/v1/workflow-health` | GET | 查看 workflow 健康度,或返回退化 workflow dashboard |
338
- | `/v1/workflow-evidence` | GET | 从最近 issue observation 生成 workflow evidence pack |
339
- | `/v1/resume` | POST | 为新窗口编排启动上下文 |
340
- | `/v1/search` | POST | 高级搜索,返回完整元数据 |
341
- | `/v1/stats` | GET | 查看记忆统计 |
359
+ | `/v1/store` | POST | 存储一条记忆 |
360
+ | `/v1/capture` | POST | 批量存储结构化记忆 |
361
+ | `/v1/pattern` | POST | 存储工作流模式 |
362
+ | `/v1/case` | POST | 存储问题-方案对 |
363
+ | `/v1/promote` | POST | 升级 evidence 为持久记忆 |
364
+ | `/v1/conflicts` | GET | 列出冲突候选 |
365
+ | `/v1/conflicts/audit` | GET | 冲突审计汇总 |
366
+ | `/v1/conflicts/escalate` | POST | 冲突升级 |
367
+ | `/v1/conflicts/resolve` | POST | 解决冲突 |
368
+ | `/v1/checkpoint` | POST | 保存工作检查点 |
369
+ | `/v1/workflow-observe` | POST | 存储工作流观察 |
370
+ | `/v1/checkpoint/latest` | GET | 获取最近检查点 |
371
+ | `/v1/workflow-health` | GET | 工作流健康面板 |
372
+ | `/v1/workflow-evidence` | GET | 工作流证据包 |
373
+ | `/v1/resume` | POST | 编排新窗口启动上下文 |
374
+ | `/v1/search` | POST | 高级搜索(含完整元数据) |
375
+ | `/v1/stats` | GET | 记忆统计 |
376
+ | `/v1/lint` | GET | 记忆质量报告 |
342
377
  | `/v1/health` | GET | 健康检查 |
343
378
 
344
379
  完整文档:[`docs/api-reference.md`](docs/api-reference.md)
@@ -350,12 +385,12 @@ RecallNest 现在把 workflow observation 放在专门的 append-only store,
350
385
 
351
386
  ```bash
352
387
  # 搜索与探索
353
- bun run src/cli.ts search "你的查询"
354
- bun run src/cli.ts explain "你的查询" --profile debug
355
- bun run src/cli.ts distill "主题" --profile writing
388
+ bun run src/cli.ts search "your query"
389
+ bun run src/cli.ts explain "your query" --profile debug
390
+ bun run src/cli.ts distill "topic" --profile writing
356
391
  bun run src/cli.ts stats
357
392
 
358
- # Workflow observation
393
+ # 工作流观察
359
394
  bun run src/cli.ts workflow-observe resume_context "Fresh window skipped continuity recovery." --outcome missed --scope project:recallnest
360
395
  bun run src/cli.ts workflow-health resume_context --scope project:recallnest
361
396
  bun run src/cli.ts workflow-evidence checkpoint_session --scope project:recallnest
@@ -372,6 +407,12 @@ bun run src/cli.ts conflicts resolve af70545a --keep-existing
372
407
  bun run src/cli.ts conflicts resolve af70545a --merge
373
408
  bun run src/cli.ts conflicts resolve --all --keep-existing --status open
374
409
 
410
+ # 记忆健康与可视化
411
+ bun run src/cli.ts lint # 记忆质量报告
412
+ bun run src/cli.ts lint --scope project:myapp # 指定 scope
413
+ bun run src/cli.ts graph --open # 导出并打开知识图谱
414
+ bun run src/cli.ts graph --max-nodes 50 # 较小的图
415
+
375
416
  # 导入与诊断
376
417
  bun run src/cli.ts ingest --source all
377
418
  bun run src/cli.ts doctor
@@ -379,47 +420,79 @@ bun run src/cli.ts doctor
379
420
 
380
421
  </details>
381
422
 
382
- <details>
383
- <summary><strong>Web UI(调试用)</strong></summary>
423
+ ---
424
+
425
+ ## 多语言支持
426
+
427
+ RecallNest 开箱即用支持英文。如需多语言记忆(中文、日文、泰文及 20+ 种语言),安装 [babel-memory](https://github.com/AliceLJY/babel-memory) 及所需语言包:
384
428
 
385
429
  ```bash
386
- bun run src/ui-server.ts
387
- # → http://localhost:4317
430
+ # 中文
431
+ npm install babel-memory jieba-wasm
432
+
433
+ # 日文
434
+ npm install babel-memory @sglkc/kuromoji
435
+
436
+ # 泰文
437
+ npm install babel-memory wordcut
438
+
439
+ # 欧洲语言(德语、法语、西班牙语、俄语等)
440
+ npm install babel-memory snowball-stemmers
441
+
442
+ # 同时安装多种语言
443
+ npm install babel-memory jieba-wasm @sglkc/kuromoji snowball-stemmers
388
444
  ```
389
445
 
390
- Web UI 主要用于调试和探索,不是主要生产接口。
446
+ RecallNest 启动时自动检测 babel-memory,无需额外配置。未安装 babel-memory 时,RecallNest 仍正常工作,使用标准 BM25 文本搜索。
391
447
 
392
- </details>
448
+ ---
449
+
450
+ ## 项目状态与路线图
451
+
452
+ RecallNest 持续维护中。所有主要架构阶段已完成——完整路线图和未来计划见 [Roadmap](ROADMAP.md)。
393
453
 
394
454
  ---
395
455
 
396
456
  ## 与 memory-lancedb-pro 的关系
397
457
 
398
- RecallNest 最初从 [memory-lancedb-pro](https://github.com/CortexReach/memory-lancedb-pro) fork 而来,共享其混合检索、衰减建模和记忆工程化的核心思路。关键区别:
458
+ RecallNest 起源于 [memory-lancedb-pro](https://github.com/CortexReach/memory-lancedb-pro) 的 fork,共享混合检索、衰减建模、记忆即系统的核心理念。关键区别:
399
459
 
400
- - **memory-lancedb-pro** 是 OpenClaw 插件 —— 为单个 OpenClaw Agent 添加长期记忆。
401
- - **RecallNest** 是独立记忆层 —— 同时服务 Claude Code、Codex 和 Gemini CLI,内建会话连续性、结构化资产和冲突管理。
460
+ - **memory-lancedb-pro** 是 OpenClaw 插件——为单个 OpenClaw Agent 添加长期记忆。
461
+ - **RecallNest** 是独立记忆层——通过 MCP + HTTP API 同时服务 Claude Code、Codex、Gemini CLI,内建会话连续性、结构化资产和冲突管理。
402
462
 
403
463
  ## 致谢
404
464
 
405
465
  | 来源 | 贡献 |
406
466
  |------|------|
407
- | [claude-memory-pro](https://github.com/CortexReach/claude-memory-pro) by [@win4r](https://github.com/win4r) | 检索核心思路和实现基础 |
408
- | Claude Code | 基础架构和早期搭建 |
467
+ | [memory-lancedb-pro](https://github.com/CortexReach/memory-lancedb-pro) by [@win4r](https://github.com/win4r) | Fork 基础——混合检索、衰减建模、记忆架构 |
468
+ | Claude Code | 基础搭建与早期脚手架 |
409
469
  | OpenAI Codex | 产品化和 MCP 扩展 |
410
470
 
411
- 特别感谢秦超老师([@win4r](https://github.com/win4r))和 [CortexReach](https://github.com/CortexReach) 团队的基础工作。
471
+ 特别感谢秦超([@win4r](https://github.com/win4r))和 [CortexReach](https://github.com/CortexReach) 团队的基础性工作。
472
+
473
+ <details>
474
+ <summary><strong>生态系统</strong></summary>
475
+
476
+ **小试AI** 开源 AI 工作流矩阵:
412
477
 
413
- ## Star History
478
+ | 项目 | 说明 |
479
+ |------|------|
480
+ | [babel-memory](https://github.com/AliceLJY/babel-memory) | BM25 多语言预处理——27+ 种语言,零依赖 |
481
+ | [content-alchemy](https://github.com/AliceLJY/content-alchemy) | 5 阶段 AI 写作管线 |
482
+ | [content-publisher](https://github.com/AliceLJY/content-publisher) | 图片生成 + 排版 + 微信公众号发布 |
483
+ | [wechat-ai-bridge](https://github.com/AliceLJY/wechat-ai-bridge) | 在微信中运行 Claude Code / Codex / Gemini |
484
+ | [telegram-ai-bridge](https://github.com/AliceLJY/telegram-ai-bridge) | Telegram Bot:Claude、Codex、Gemini |
485
+ | [telegram-cli-bridge](https://github.com/AliceLJY/telegram-cli-bridge) | Telegram CLI 桥接 Gemini CLI |
486
+ | [openclaw-tunnel](https://github.com/AliceLJY/openclaw-tunnel) | Docker ↔ 宿主机 CLI 桥接 |
487
+ | [openclaw-config](https://github.com/AliceLJY/openclaw-config) | OpenClaw Bot 配置与记忆备份 |
488
+ | [digital-clone-skill](https://github.com/AliceLJY/digital-clone-skill) | 从语料构建数字分身 |
489
+ | [claude-code-studio](https://github.com/AliceLJY/claude-code-studio) | Claude Code 多会话协作平台 |
490
+ | [cc-genius](https://github.com/AliceLJY/cc-genius) | Web 版 Claude 客户端(PWA)—— 自托管,iPad 可用 |
491
+ | [agent-nexus](https://github.com/AliceLJY/agent-nexus) | 一键安装:记忆 + 远程控制 |
492
+ | [cc-cabin](https://github.com/AliceLJY/cc-cabin) | Claude Code 完整工作流脚手架 |
414
493
 
415
- <a href="https://star-history.com/#AliceLJY/recallnest&Date">
416
- <picture>
417
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=AliceLJY/recallnest&type=Date&theme=dark&transparent=true" />
418
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=AliceLJY/recallnest&type=Date&transparent=true" />
419
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=AliceLJY/recallnest&type=Date&transparent=true" />
420
- </picture>
421
- </a>
494
+ </details>
422
495
 
423
- ## 许可证
496
+ ## License
424
497
 
425
498
  MIT
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RecallNest CLI launcher — cross-runtime compatible
4
+ *
5
+ * Priority: bun (native TS, fastest) → node + tsx (fallback)
6
+ */
7
+ import { spawn, execFileSync } from "node:child_process";
8
+ import { dirname, join } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { existsSync } from "node:fs";
11
+
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ const cli = join(__dirname, "..", "src", "cli.ts");
14
+ const args = process.argv.slice(2);
15
+
16
+ function hasBun() {
17
+ try {
18
+ execFileSync("bun", ["--version"], { stdio: "ignore" });
19
+ return true;
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ function run(command, commandArgs) {
26
+ const child = spawn(command, commandArgs, { stdio: "inherit" });
27
+ child.on("close", (code) => process.exit(code || 0));
28
+ child.on("error", (err) => {
29
+ console.error(`Failed to start ${command}: ${err.message}`);
30
+ process.exit(1);
31
+ });
32
+ }
33
+
34
+ if (hasBun()) {
35
+ // Native bun — fastest path
36
+ run("bun", ["run", cli, ...args]);
37
+ } else {
38
+ // Fallback: node + tsx
39
+ const tsxBin = join(__dirname, "..", "node_modules", ".bin", "tsx");
40
+ if (existsSync(tsxBin)) {
41
+ run(tsxBin, [cli, ...args]);
42
+ } else {
43
+ // tsx not found in local node_modules, try global
44
+ try {
45
+ execFileSync("tsx", ["--version"], { stdio: "ignore" });
46
+ run("tsx", [cli, ...args]);
47
+ } catch {
48
+ console.error(`
49
+ RecallNest requires either Bun or tsx to run TypeScript.
50
+
51
+ Option A (recommended):
52
+ curl -fsSL https://bun.sh/install | bash
53
+
54
+ Option B:
55
+ npm install -g tsx
56
+
57
+ Then retry your command.
58
+ `);
59
+ process.exit(1);
60
+ }
61
+ }
62
+ }