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
@@ -1,96 +0,0 @@
1
- # RecallNest Eval Baseline
2
-
3
- - Generated: 2026-03-06T09:46:36.449Z
4
- - Cases: 6
5
- - Passed: 6/6
6
- - Average score: 91.7%
7
-
8
- | Case | Profile | Score | Pass | Hits | Top scopes |
9
- |------|---------|-------|------|------|------------|
10
- | telegram_bridge | debug | 100% | yes | 5 | asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db |
11
- | openclaw_memory | writing | 87% | yes | 6 | cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c |
12
- | writing_style | writing | 90% | yes | 5 | cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b |
13
- | visual_style | default | 100% | yes | 5 | asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e |
14
- | working_relationship | default | 73% | yes | 5 | asset:7e3c2155, memory, memory, memory, cc:6160fc10 |
15
- | aws_ssh_access | debug | 100% | yes | 6 | cc:3590cd5a, cc:07d67b1c, cc:3590cd5a, cc:3590cd5a, cc:0d1e2e19 |
16
-
17
- ## Case Notes
18
-
19
- ### telegram_bridge
20
- - Query: telegram bridge
21
- - Score: 100%
22
- - Pass: yes
23
- - Hits: 5
24
- - Top scopes: asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db
25
- - Top snippet: [Pinned Asset] [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Summary: [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Snippet: [助手]...
26
- - Matched any: telegram-cli-bridge, telegram-ai-bridge, Telegram bridge
27
- - Matched all: -
28
- - Matched scopes: cc, asset
29
- - Forbidden matches: -
30
- - Notes: Bridge maintenance and migration history should be easy to recall.
31
-
32
- ### openclaw_memory
33
- - Query: OpenClaw 记忆系统
34
- - Score: 87%
35
- - Pass: yes
36
- - Hits: 6
37
- - Top scopes: cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c
38
- - Top snippet: [助手] 先看看 OpenClaw 的 memory 结构。
39
- - Matched any: OpenClaw, 记忆系统, memory-lancedb-pro, LanceDB
40
- - Matched all: -
41
- - Matched scopes: cc
42
- - Forbidden matches: -
43
- - Notes: Core memory architecture discussion should be recoverable.
44
-
45
- ### writing_style
46
- - Query: 写作风格 口语化 不端着 可自嘲
47
- - Score: 90%
48
- - Pass: yes
49
- - Hits: 5
50
- - Top scopes: cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b
51
- - Top snippet: [助手] 根据你的档案: - **医学出身,文化口工作,AI 野路子,不是程序员** - 公众号「我的AI小木屋」运营者,作者名 **小试AI** - GitHub: AliceLJY - 写作风格:口语化、不端着、可以自嘲但不说教 - 技术栈:本地 Docker(task...
52
- - Matched any: 可自嘲, 写作风格
53
- - Matched all: 口语化, 不端着
54
- - Matched scopes: cc
55
- - Forbidden matches: -
56
- - Notes: User writing-style preferences should rank high.
57
-
58
- ### visual_style
59
- - Query: 审美偏好 手绘涂鸦 高对比撞色
60
- - Score: 100%
61
- - Pass: yes
62
- - Hits: 5
63
- - Top scopes: asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e
64
- - Top snippet: [Pinned Asset] 用户视觉审美偏好 Summary: 用户常用视觉风格是手绘涂鸦风加高对比撞色;在内容包装和配图生成时,应优先沿用这一审美方向,除非任务目标明确要求其他风格。 Snippet: [用户] 1. 给刚才写的文章生成配图(封面1张+插图1张就够,测试...
65
- - Matched any: 审美偏好
66
- - Matched all: 手绘涂鸦, 高对比撞色
67
- - Matched scopes: cc, asset
68
- - Forbidden matches: -
69
- - Notes: Visual preference memories should stay stable.
70
-
71
- ### working_relationship
72
- - Query: 我们相处态度
73
- - Score: 73%
74
- - Pass: yes
75
- - Hits: 5
76
- - Top scopes: asset:7e3c2155, memory, memory, memory, cc:6160fc10
77
- - Top snippet: [Pinned Asset] 用户协作关系偏好 Summary: 用户明确要求与 AI 维持平等协作关系:我们是好搭子、最佳搭档,不是上下级关系。沟通和执行应体现互相补位,而非服从式口吻。 Snippet: [用户] 哎呀,我不是你老板,我们是最佳搭档啊!!!记住!!!!我...
78
- - Matched any: 直接, 逻辑
79
- - Matched all: -
80
- - Matched scopes: cc, asset
81
- - Forbidden matches: -
82
- - Notes: Abstract, summarized relationship queries should work without precise keywords.
83
-
84
- ### aws_ssh_access
85
- - Query: aws ssh
86
- - Score: 100%
87
- - Pass: yes
88
- - Hits: 6
89
- - Top scopes: cc:3590cd5a, cc:07d67b1c, cc:3590cd5a, cc:3590cd5a, cc:0d1e2e19
90
- - Top snippet: [用户] 现在是aws bot又不在了 [助手] 这是因为之前 antigravity 用了 key2(AWS bot 的 token)登录,把 AWS bot 的 Discord session 挤掉了。虽然现在 antigravity 已经换成 key3,但 AWS 云...
91
- - Matched any: AWS bot, aws bot, ssh, key2, Discord, 容器
92
- - Matched all: -
93
- - Matched scopes: cc
94
- - Forbidden matches: -
95
- - Notes: Real-world AWS access queries should use the wording the operator actually types.
96
-
@@ -1,82 +0,0 @@
1
- # RecallNest Eval Baseline
2
-
3
- - Generated: 2026-03-06T09:11:01.487Z
4
- - Cases: 5
5
- - Passed: 5/5
6
- - Average score: 95.3%
7
-
8
- | Case | Profile | Score | Pass | Hits | Top scopes |
9
- |------|---------|-------|------|------|------------|
10
- | telegram_bridge | debug | 100% | yes | 5 | asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db |
11
- | openclaw_memory | writing | 87% | yes | 6 | cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c |
12
- | writing_style | writing | 90% | yes | 5 | cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b |
13
- | visual_style | default | 100% | yes | 5 | asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e |
14
- | aws_ssh_access | debug | 100% | yes | 6 | cc:3590cd5a, cc:07d67b1c, cc:3590cd5a, cc:3590cd5a, cc:0d1e2e19 |
15
-
16
- ## Case Notes
17
-
18
- ### telegram_bridge
19
- - Query: telegram bridge
20
- - Score: 100%
21
- - Pass: yes
22
- - Hits: 5
23
- - Top scopes: asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db
24
- - Top snippet: [Pinned Asset] [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Summary: [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Snippet: [助手]...
25
- - Matched any: telegram-cli-bridge, telegram-ai-bridge, Telegram bridge
26
- - Matched all: -
27
- - Matched scopes: cc, asset
28
- - Forbidden matches: -
29
- - Notes: Bridge maintenance and migration history should be easy to recall.
30
-
31
- ### openclaw_memory
32
- - Query: OpenClaw 记忆系统
33
- - Score: 87%
34
- - Pass: yes
35
- - Hits: 6
36
- - Top scopes: cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c
37
- - Top snippet: [助手] 先看看 OpenClaw 的 memory 结构。
38
- - Matched any: OpenClaw, 记忆系统, memory-lancedb-pro, LanceDB
39
- - Matched all: -
40
- - Matched scopes: cc
41
- - Forbidden matches: -
42
- - Notes: Core memory architecture discussion should be recoverable.
43
-
44
- ### writing_style
45
- - Query: 写作风格 口语化 不端着 可自嘲
46
- - Score: 90%
47
- - Pass: yes
48
- - Hits: 5
49
- - Top scopes: cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b
50
- - Top snippet: [助手] 根据你的档案: - **医学出身,文化口工作,AI 野路子,不是程序员** - 公众号「我的AI小木屋」运营者,作者名 **小试AI** - GitHub: AliceLJY - 写作风格:口语化、不端着、可以自嘲但不说教 - 技术栈:本地 Docker(task...
51
- - Matched any: 可自嘲, 写作风格
52
- - Matched all: 口语化, 不端着
53
- - Matched scopes: cc
54
- - Forbidden matches: -
55
- - Notes: User writing-style preferences should rank high.
56
-
57
- ### visual_style
58
- - Query: 审美偏好 手绘涂鸦 高对比撞色
59
- - Score: 100%
60
- - Pass: yes
61
- - Hits: 5
62
- - Top scopes: asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e
63
- - Top snippet: [Pinned Asset] 用户视觉审美偏好 Summary: 用户常用视觉风格是手绘涂鸦风加高对比撞色;在内容包装和配图生成时,应优先沿用这一审美方向,除非任务目标明确要求其他风格。 Snippet: [用户] 1. 给刚才写的文章生成配图(封面1张+插图1张就够,测试...
64
- - Matched any: 审美偏好
65
- - Matched all: 手绘涂鸦, 高对比撞色
66
- - Matched scopes: cc, asset
67
- - Forbidden matches: -
68
- - Notes: Visual preference memories should stay stable.
69
-
70
- ### aws_ssh_access
71
- - Query: aws ssh
72
- - Score: 100%
73
- - Pass: yes
74
- - Hits: 6
75
- - Top scopes: cc:3590cd5a, cc:07d67b1c, cc:3590cd5a, cc:3590cd5a, cc:0d1e2e19
76
- - Top snippet: [用户] 现在是aws bot又不在了 [助手] 这是因为之前 antigravity 用了 key2(AWS bot 的 token)登录,把 AWS bot 的 Discord session 挤掉了。虽然现在 antigravity 已经换成 key3,但 AWS 云...
77
- - Matched any: AWS bot, aws bot, ssh, key2, Discord, 容器
78
- - Matched all: -
79
- - Matched scopes: cc
80
- - Forbidden matches: -
81
- - Notes: Real-world AWS access queries should use the wording the operator actually types.
82
-
@@ -1,82 +0,0 @@
1
- # RecallNest Eval Baseline
2
-
3
- - Generated: 2026-03-06T08:18:24.009Z
4
- - Cases: 5
5
- - Passed: 5/5
6
- - Average score: 89.3%
7
-
8
- | Case | Profile | Score | Pass | Hits | Top scopes |
9
- |------|---------|-------|------|------|------------|
10
- | telegram_bridge | debug | 100% | yes | 5 | asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db |
11
- | openclaw_memory | writing | 87% | yes | 6 | cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c |
12
- | writing_style | writing | 90% | yes | 5 | cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b |
13
- | visual_style | default | 100% | yes | 5 | asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e |
14
- | aws_bot_config | debug | 70% | yes | 6 | memory, cc:d56c0e12, memory, memory, cc:a87ce7f0 |
15
-
16
- ## Case Notes
17
-
18
- ### telegram_bridge
19
- - Query: telegram bridge
20
- - Score: 100%
21
- - Pass: yes
22
- - Hits: 5
23
- - Top scopes: asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db
24
- - Top snippet: [Pinned Asset] [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Summary: [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Snippet: [助手]...
25
- - Matched any: telegram-cli-bridge, telegram-ai-bridge, Telegram bridge
26
- - Matched all: -
27
- - Matched scopes: cc, asset
28
- - Forbidden matches: -
29
- - Notes: Bridge maintenance and migration history should be easy to recall.
30
-
31
- ### openclaw_memory
32
- - Query: OpenClaw 记忆系统
33
- - Score: 87%
34
- - Pass: yes
35
- - Hits: 6
36
- - Top scopes: cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c
37
- - Top snippet: [助手] 先看看 OpenClaw 的 memory 结构。
38
- - Matched any: OpenClaw, 记忆系统, memory-lancedb-pro, LanceDB
39
- - Matched all: -
40
- - Matched scopes: cc
41
- - Forbidden matches: -
42
- - Notes: Core memory architecture discussion should be recoverable.
43
-
44
- ### writing_style
45
- - Query: 写作风格 口语化 不端着 可自嘲
46
- - Score: 90%
47
- - Pass: yes
48
- - Hits: 5
49
- - Top scopes: cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b
50
- - Top snippet: [助手] 根据你的档案: - **医学出身,文化口工作,AI 野路子,不是程序员** - 公众号「我的AI小木屋」运营者,作者名 **小试AI** - GitHub: AliceLJY - 写作风格:口语化、不端着、可以自嘲但不说教 - 技术栈:本地 Docker(task...
51
- - Matched any: 可自嘲, 写作风格
52
- - Matched all: 口语化, 不端着
53
- - Matched scopes: cc
54
- - Forbidden matches: -
55
- - Notes: User writing-style preferences should rank high.
56
-
57
- ### visual_style
58
- - Query: 审美偏好 手绘涂鸦 高对比撞色
59
- - Score: 100%
60
- - Pass: yes
61
- - Hits: 5
62
- - Top scopes: asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e
63
- - Top snippet: [Pinned Asset] 用户视觉审美偏好 Summary: 用户常用视觉风格是手绘涂鸦风加高对比撞色;在内容包装和配图生成时,应优先沿用这一审美方向,除非任务目标明确要求其他风格。 Snippet: [用户] 1. 给刚才写的文章生成配图(封面1张+插图1张就够,测试...
64
- - Matched any: 审美偏好
65
- - Matched all: 手绘涂鸦, 高对比撞色
66
- - Matched scopes: cc, asset
67
- - Forbidden matches: -
68
- - Notes: Visual preference memories should stay stable.
69
-
70
- ### aws_bot_config
71
- - Query: AWS bot 配置 gpt-5.4
72
- - Score: 70%
73
- - Pass: yes
74
- - Hits: 6
75
- - Top scopes: memory, cc:d56c0e12, memory, memory, cc:a87ce7f0
76
- - Top snippet: [当前阶段] - 五 Bot 稳定运行:AntiBot(本地 Opus 4.6)、睿智(本地 Gemini 3 Pro CLI)、小试AI(本地 Codex gpt-5.2-codex)、AWS-bot(Codex gpt-5.2-codex)、LanceDB Test(本...
77
- - Matched any: AWS-bot, openclaw.json
78
- - Matched all: -
79
- - Matched scopes: cc
80
- - Forbidden matches: -
81
- - Notes: Operational config changes should be easy to recover.
82
-
@@ -1,138 +0,0 @@
1
- # RecallNest Eval Baseline
2
-
3
- - Generated: 2026-03-08T08:25:34.870Z
4
- - Cases: 9
5
- - Passed: 8/9
6
- - Average score: 90.1%
7
-
8
- | Case | Profile | Score | Pass | Hits | Top scopes |
9
- |------|---------|-------|------|------|------------|
10
- | telegram_bridge | debug | 100% | yes | 5 | asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db |
11
- | openclaw_memory | writing | 87% | yes | 6 | cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c |
12
- | writing_style | writing | 90% | yes | 5 | cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b |
13
- | visual_style | default | 100% | yes | 5 | asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e |
14
- | working_relationship | default | 67% | no | 5 | asset:7e3c2155, memory, cc:57d92130, memory, memory |
15
- | aws_ssh_access | debug | 100% | yes | 6 | cc:3590cd5a, cc:07d67b1c, cc:3590cd5a, cc:3590cd5a, cc:0d1e2e19 |
16
- | fuzzy_bot_crash | debug | 94% | yes | 5 | cc:bb8ef732, cc:6ecc2b88, cc:6681d5e7, cc:1387b665, cc:1bad6838 |
17
- | fuzzy_ai_feelings | writing | 73% | yes | 5 | cc:84a3b1b2, cc:82820c11, cc:52a15bab, cc:59542b2b, cc:852cd20c |
18
- | fuzzy_image_style | default | 100% | yes | 5 | cc:722a3419, cc:7cff70c8, cc:14e244df, cc:16945beb, cc:722a3419 |
19
-
20
- ## Case Notes
21
-
22
- ### telegram_bridge
23
- - Query: telegram bridge
24
- - Score: 100%
25
- - Pass: yes
26
- - Hits: 5
27
- - Top scopes: asset:12184154, cc:4bc6afd3, gemini:bdbe41c6, cc:8bfc1be5, asset:brief:ee8852db
28
- - Top snippet: [Pinned Asset] [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Summary: [助手] 现在更新 telegram-cli-bridge 自己的 README(已经有旧引用)。 Snippet: [助手]...
29
- - Matched any: telegram-cli-bridge, telegram-ai-bridge, Telegram bridge
30
- - Matched all: -
31
- - Matched scopes: cc, asset
32
- - Forbidden matches: -
33
- - Notes: Bridge maintenance and migration history should be easy to recall.
34
-
35
- ### openclaw_memory
36
- - Query: OpenClaw 记忆系统
37
- - Score: 87%
38
- - Pass: yes
39
- - Hits: 6
40
- - Top scopes: cc:71b45899, cc:71b45899, cc:59542b2b, cc:b0b87b08, cc:09541b9c
41
- - Top snippet: [助手] 先看看 OpenClaw 的 memory 结构。
42
- - Matched any: OpenClaw, 记忆系统, memory-lancedb-pro, LanceDB
43
- - Matched all: -
44
- - Matched scopes: cc
45
- - Forbidden matches: -
46
- - Notes: Core memory architecture discussion should be recoverable.
47
-
48
- ### writing_style
49
- - Query: 写作风格 口语化 不端着 可自嘲
50
- - Score: 90%
51
- - Pass: yes
52
- - Hits: 5
53
- - Top scopes: cc:ee847c5c, memory, cc:bf01f818, cc:d55409bf, cc:97327f1b
54
- - Top snippet: [助手] 根据你的档案: - **医学出身,文化口工作,AI 野路子,不是程序员** - 公众号「我的AI小木屋」运营者,作者名 **小试AI** - GitHub: AliceLJY - 写作风格:口语化、不端着、可以自嘲但不说教 - 技术栈:本地 Docker(task...
55
- - Matched any: 可自嘲, 写作风格
56
- - Matched all: 口语化, 不端着
57
- - Matched scopes: cc
58
- - Forbidden matches: -
59
- - Notes: User writing-style preferences should rank high.
60
-
61
- ### visual_style
62
- - Query: 审美偏好 手绘涂鸦 高对比撞色
63
- - Score: 100%
64
- - Pass: yes
65
- - Hits: 5
66
- - Top scopes: asset:557a61f6, cc:2437f802, cc:8d0e747e, cc:f9de0d68, cc:7561947e
67
- - Top snippet: [Pinned Asset] 用户视觉审美偏好 Summary: 用户常用视觉风格是手绘涂鸦风加高对比撞色;在内容包装和配图生成时,应优先沿用这一审美方向,除非任务目标明确要求其他风格。 Snippet: [用户] 1. 给刚才写的文章生成配图(封面1张+插图1张就够,测试...
68
- - Matched any: 审美偏好
69
- - Matched all: 手绘涂鸦, 高对比撞色
70
- - Matched scopes: cc, asset
71
- - Forbidden matches: -
72
- - Notes: Visual preference memories should stay stable.
73
-
74
- ### working_relationship
75
- - Query: 我们相处态度
76
- - Score: 67%
77
- - Pass: no
78
- - Hits: 5
79
- - Top scopes: asset:7e3c2155, memory, cc:57d92130, memory, memory
80
- - Top snippet: [Pinned Asset] 用户协作关系偏好 Summary: 用户明确要求与 AI 维持平等协作关系:我们是好搭子、最佳搭档,不是上下级关系。沟通和执行应体现互相补位,而非服从式口吻。 Snippet: [用户] 哎呀,我不是你老板,我们是最佳搭档啊!!!记住!!!!我...
81
- - Matched any: 逻辑
82
- - Matched all: -
83
- - Matched scopes: cc, asset
84
- - Forbidden matches: -
85
- - Notes: Abstract, summarized relationship queries should work without precise keywords.
86
-
87
- ### aws_ssh_access
88
- - Query: aws ssh
89
- - Score: 100%
90
- - Pass: yes
91
- - Hits: 6
92
- - Top scopes: cc:3590cd5a, cc:07d67b1c, cc:3590cd5a, cc:3590cd5a, cc:0d1e2e19
93
- - Top snippet: [用户] 现在是aws bot又不在了 [助手] 这是因为之前 antigravity 用了 key2(AWS bot 的 token)登录,把 AWS bot 的 Discord session 挤掉了。虽然现在 antigravity 已经换成 key3,但 AWS 云...
94
- - Matched any: AWS bot, aws bot, ssh, key2, Discord, 容器
95
- - Matched all: -
96
- - Matched scopes: cc
97
- - Forbidden matches: -
98
- - Notes: Real-world AWS access queries should use the wording the operator actually types.
99
-
100
- ### fuzzy_bot_crash
101
- - Query: 上次那个 bot 突然挂了是怎么回事来着
102
- - Score: 94%
103
- - Pass: yes
104
- - Hits: 5
105
- - Top scopes: cc:bb8ef732, cc:6ecc2b88, cc:6681d5e7, cc:1387b665, cc:1bad6838
106
- - Top snippet: environment and routes the issue directly to our team for investigation. 4. Check status.anthropic.com to see whether there is an active ...
107
- - Matched any: 崩溃, crash, error, 报错, 修复, docker
108
- - Matched all: -
109
- - Matched scopes: cc
110
- - Forbidden matches: -
111
- - Notes: Fuzzy colloquial query about bot crash should find debugging conversations.
112
-
113
- ### fuzzy_ai_feelings
114
- - Query: 之前聊过一个关于 AI 到底有没有感受的话题
115
- - Score: 73%
116
- - Pass: yes
117
- - Hits: 5
118
- - Top scopes: cc:84a3b1b2, cc:82820c11, cc:52a15bab, cc:59542b2b, cc:852cd20c
119
- - Top snippet: [用户] 9. 第三推荐:I can't tell if I'm experiencing or simulating experiencing 链接: https://www.moltbook.com/post/6fe6491e-5e9c-4371-961d-f90c4d...
120
- - Matched any: 意识, experiencing
121
- - Matched all: -
122
- - Matched scopes: cc
123
- - Forbidden matches: -
124
- - Notes: Vague conversational query about AI consciousness should recall philosophical discussions.
125
-
126
- ### fuzzy_image_style
127
- - Query: 那个配图风格轮换的逻辑是怎么搞的
128
- - Score: 100%
129
- - Pass: yes
130
- - Hits: 5
131
- - Top scopes: cc:722a3419, cc:7cff70c8, cc:14e244df, cc:16945beb, cc:722a3419
132
- - Top snippet: [助手] 好,搞清楚了。结构是: - `~/.openclaw-antigravity/` 挂载到容器的 `/home/node/.openclaw`(配置 + workspace) - workspace 文件(MEMORY.md、scripts、images 等)是 A...
133
- - Matched any: 风格, style, 轮换, catalog, 配图
134
- - Matched all: -
135
- - Matched scopes: cc
136
- - Forbidden matches: -
137
- - Notes: Casual question about image style rotation should find implementation discussions.
138
-
package/lm DELETED
@@ -1,19 +0,0 @@
1
- #!/bin/bash
2
- # RecallNest CLI shortcut
3
- # Usage:
4
- # lm search "keywords" — search memory
5
- # lm ingest — ingest all sources
6
- # lm ingest --source cc — ingest Claude Code only
7
- # lm stats — show stats
8
- # lm reset --yes — reset index
9
-
10
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
11
-
12
- # Load .env if present (CLI also loads it, this is for standalone use)
13
- if [ -f "$SCRIPT_DIR/.env" ]; then
14
- set -a
15
- source "$SCRIPT_DIR/.env"
16
- set +a
17
- fi
18
-
19
- cd "$SCRIPT_DIR" && bun run src/cli.ts "$@"
@@ -1,105 +0,0 @@
1
- # RecallNest v1.2: 首个可传播版本 Plan
2
-
3
- > 目标:别人 15 分钟能跑起来,30 分钟能感知价值
4
- > 负责人:CC (实现) + 用户 (审批)
5
- > 预计:3-4 天
6
-
7
- ---
8
-
9
- ## 阻塞项(必须修,按优先级排)
10
-
11
- ### B1: `recallnest doctor` 命令(新增) ✅ DONE
12
- **问题**:用户装完后没有一键验证手段,每个环节都可能静默失败
13
- **方案**:新增 `lm doctor` 子命令,检查清单:
14
- - [x] Bun 运行时可用?(检测版本)
15
- - [x] Jina API key 已配置?(读 .env)
16
- - [x] Jina API key 有效?(发一个测试 embedding 请求)
17
- - [x] CC transcript 路径可访问?(auto-detect 或 config)
18
- - [x] LanceDB 数据目录可写?
19
- - [x] 已有索引?多少条?
20
- - 输出:绿色 PASS / 红色 FAIL + 修复建议
21
-
22
- ### B2: README 安装体验重写 ✅ DONE
23
- **问题**:Bun 未提及、Jina key 获取无引导、步骤跳跃
24
- **方案**:
25
- - [x] Prerequisites 段:明确列出 Bun ≥1.0 + Node ≥20(Bun 优先,Node 作为 fallback 说明)
26
- - [x] 快速开始改为 5 步 copy-paste:clone → install → 配 key → doctor → search
27
- - [x] 每步附带预期输出(用户知道"成功了"长什么样)
28
- - [x] 添加 "Troubleshooting" 段:Bun not found / Jina 401 / 路径不存在
29
-
30
- ### B3: Jina API key 前置验证 ✅ DONE
31
- **问题**:config 加载成功,但第一次 ingest 才报 embedding 失败,错误信息是 OpenAI SDK 的原始 401
32
- **方案**:
33
- - [x] `ingest` 命令启动时,先调 embedder 发一个测试请求(embed "test")
34
- - [x] 失败则立即报错:`Jina API key invalid or missing. Get one at https://jina.ai/embeddings/`
35
- - [x] `doctor` 命令复用同一验证逻辑
36
-
37
- ### B4: Gemini 支持诚实化 ✅ DONE
38
- **问题**:README 说支持 Gemini CLI,config 里有 gemini 源,但实际 Gemini 会话是加密 protobuf,解析不了
39
- **方案**:
40
- - [x] README 中 Gemini 行标注为 `Coming soon`(不是 ✅)
41
- - [x] config.json.example 中移除 gemini source(新用户不会误配)
42
- - [x] ingest 遇到 gemini source 时打印明确 warning:`Gemini CLI sessions are encrypted protobuf; skipping`
43
- - [x] doctor 显示 Gemini 状态为 warn(已有配置的用户看到明确提示)
44
- - 不删代码,保留未来扩展能力
45
-
46
- ### B5: 配置路径健壮化 ✅ DONE
47
- **问题**:`./data/lancedb` 是相对路径,换目录就炸;auto-detect 失败后建议不够具体
48
- **方案**:
49
- - [x] config.json.example 默认路径改为 `~/.recallnest/data/lancedb`(绝对,用户无感)
50
- - [x] 首次运行自动创建目录(validateStoragePath 已有 mkdirSync recursive)
51
- - [x] auto-detect 失败时,给出完整示例(含用户名的真实路径)
52
- - [x] config.json 加入 .gitignore,用户配置不被 git 覆盖
53
- - [x] findConfigPath 失败时提示 `cp config.json.example config.json`
54
-
55
- ---
56
-
57
- ## 加分项(做了更好,不阻塞发布)
58
-
59
- ### P1: Demo 查询内置 ✅ DONE
60
- - [x] `lm demo` 命令:用 3 个内置 query 跑搜索,展示结果格式
61
- - [x] 显示索引统计 + 每条结果的分数/来源/预览
62
-
63
- ### P2: 一键安装脚本
64
- - [ ] `curl -fsSL https://raw.githubusercontent.com/.../install.sh | bash`
65
- - [ ] 检测 Bun → clone → npm install → 提示配 key → 跑 doctor
66
- - [ ] 可以 Q2 再做,现在 README 手动步骤够用
67
-
68
- ### P3: CI 基础 ✅ DONE
69
- - [x] GitHub Actions:push/PR 时跑 `doctor --ci` + TypeScript check
70
- - [x] `lm doctor --ci` 模式跳过 API key 在线验证
71
-
72
- ### P4: CHANGELOG.md ✅ DONE
73
- - [x] v1.0.0 到 v1.2.0 的变更记录
74
- - [x] 后续每个 release 维护
75
-
76
- ---
77
-
78
- ## 不做的事(明确排除)
79
-
80
- - ❌ 不做 Docker 化(用户群是 CLI/MCP 用户,不是 Docker 用户)
81
- - ❌ 不做 NPM 发布(先 git clone 模式验证需求)
82
- - ❌ 不做 UI 重写(现有 UI 够用,不是本次重点)
83
- - ❌ 不做多用户支持(单 operator 场景)
84
- - ❌ 不重写检索逻辑(已经够好,不是本次范围)
85
-
86
- ---
87
-
88
- ## 执行顺序
89
-
90
- ```
91
- Day 1: B1 (doctor) + B3 (Jina 验证) — 核心安全网 ✅
92
- Day 2: B5 (路径健壮化) + B4 (Gemini 诚实化) + B2 (README 重写) ✅
93
- Day 3: P1 (demo 查询) + P3 (CI) + P4 (CHANGELOG) ✅
94
- Day 4: 自测完整流程
95
- ```
96
-
97
- ---
98
-
99
- ## 验收标准
100
-
101
- 1. 全新 macOS 机器(有 Bun),从 clone 到第一条搜索结果 ≤ 15 分钟
102
- 2. `lm doctor` 全绿
103
- 3. Jina key 错误时,3 秒内给出明确修复建议
104
- 4. README 无需翻代码即可完成安装
105
- 5. `lm search "telegram bridge"` 返回有意义结果
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env bun
2
- /**
3
- * Archive raw fact fragments that have already been distilled.
4
- * Targets: entries in distill-completed scopes with importance < 0.4, no L0, category=fact.
5
- * Action: set tier="archived", importance=0.05 — they won't surface but data isn't lost.
6
- *
7
- * Usage:
8
- * bun scripts/archive-distilled-junk.ts --dry-run # preview
9
- * bun scripts/archive-distilled-junk.ts # execute
10
- */
11
-
12
- import fs from "fs";
13
- import path from "path";
14
- import { loadDotEnv, loadConfig, expandHome } from "../src/runtime-config.js";
15
- import { loadLanceDB } from "../src/store.js";
16
-
17
- loadDotEnv();
18
- const config = loadConfig();
19
- const dryRun = process.argv.includes("--dry-run");
20
-
21
- const PROGRESS_FILE = path.join(import.meta.dir, "..", "data", "distill-progress.json");
22
-
23
- async function main() {
24
- // Load distill progress to know which scopes are done
25
- const progress = JSON.parse(fs.readFileSync(PROGRESS_FILE, "utf-8"));
26
- const completedScopes = new Set<string>(progress.completedScopes);
27
- console.log(`=== Archive distilled junk${dryRun ? " (dry run)" : ""} ===\n`);
28
- console.log(` Distill-completed scopes: ${completedScopes.size}`);
29
-
30
- const lancedb = await loadLanceDB();
31
- const dbPath = expandHome(config.database?.path || "data/lancedb");
32
- const db = await lancedb.connect(dbPath);
33
- const table = await db.openTable("memories");
34
-
35
- // Read all fact entries
36
- const allFacts = await table.query()
37
- .where("category = 'fact'")
38
- .select(["id", "text", "vector", "category", "scope", "importance", "timestamp", "metadata"])
39
- .toArray();
40
-
41
- console.log(` Total fact entries: ${allFacts.length}`);
42
-
43
- // Filter: in completed scope, importance < 0.4, no L0
44
- const toArchive: any[] = [];
45
- const sampleJunk: string[] = [];
46
-
47
- for (const row of allFacts) {
48
- const scope = (row.scope as string) || "";
49
- if (!completedScopes.has(scope)) continue;
50
-
51
- const imp = Number(row.importance);
52
- if (imp >= 0.4) continue;
53
-
54
- const metaStr = (row.metadata as string) || "{}";
55
- let meta: Record<string, unknown>;
56
- try { meta = JSON.parse(metaStr); } catch { continue; }
57
-
58
- // Has L0 = already a quality entry, skip
59
- if (typeof meta.l0_abstract === "string" && meta.l0_abstract.length > 0) continue;
60
-
61
- // Mark as archived
62
- meta.tier = "archived";
63
- meta.archived_reason = "distilled-junk-cleanup-2026-03-26";
64
-
65
- toArchive.push({
66
- id: row.id,
67
- text: row.text,
68
- vector: Array.from(row.vector as Iterable<number>),
69
- category: row.category,
70
- scope: scope,
71
- importance: 0.05, // near-zero so it never surfaces
72
- timestamp: Number(row.timestamp),
73
- metadata: JSON.stringify(meta),
74
- });
75
-
76
- // Collect samples
77
- if (sampleJunk.length < 10) {
78
- const text = (row.text as string).slice(0, 80);
79
- sampleJunk.push(` ${(row.id as string).slice(0, 8)} imp=${imp.toFixed(2)} scope=${scope.slice(0, 15)} | ${text}`);
80
- }
81
- }
82
-
83
- console.log(` Junk to archive: ${toArchive.length}`);
84
- console.log(` Would keep: ${allFacts.length - toArchive.length} fact entries\n`);
85
-
86
- if (sampleJunk.length > 0) {
87
- console.log(` Sample junk:\n${sampleJunk.join("\n")}\n`);
88
- }
89
-
90
- if (dryRun) {
91
- console.log(` (dry run — no changes made)`);
92
- return;
93
- }
94
-
95
- if (toArchive.length === 0) {
96
- console.log(` Nothing to archive.`);
97
- return;
98
- }
99
-
100
- // Batch update
101
- const batchSize = 1000;
102
- for (let i = 0; i < toArchive.length; i += batchSize) {
103
- const batch = toArchive.slice(i, i + batchSize);
104
- const ids = batch.map((r: any) => `'${r.id.replace(/'/g, "''")}'`).join(",");
105
- await table.delete(`id IN (${ids})`);
106
- await table.add(batch);
107
- console.log(` Batch ${Math.floor(i / batchSize) + 1}: archived ${batch.length} entries`);
108
- }
109
-
110
- console.log(`\nDone. Archived ${toArchive.length} junk fact entries (importance → 0.05, tier → archived).`);
111
- }
112
-
113
- main().catch(err => {
114
- console.error("Archive failed:", err);
115
- process.exit(1);
116
- });