@co-engram/core 0.1.0

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 (531) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -0
  3. package/dist/config/defaults.d.ts +45 -0
  4. package/dist/config/defaults.d.ts.map +1 -0
  5. package/dist/config/defaults.js +70 -0
  6. package/dist/config/defaults.js.map +1 -0
  7. package/dist/config/index.d.ts +84 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +230 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/types.d.ts +145 -0
  12. package/dist/config/types.d.ts.map +1 -0
  13. package/dist/config/types.js +14 -0
  14. package/dist/config/types.js.map +1 -0
  15. package/dist/contradiction/arbiter.d.ts +51 -0
  16. package/dist/contradiction/arbiter.d.ts.map +1 -0
  17. package/dist/contradiction/arbiter.js +112 -0
  18. package/dist/contradiction/arbiter.js.map +1 -0
  19. package/dist/contradiction/auto-degrade.d.ts +53 -0
  20. package/dist/contradiction/auto-degrade.d.ts.map +1 -0
  21. package/dist/contradiction/auto-degrade.js +79 -0
  22. package/dist/contradiction/auto-degrade.js.map +1 -0
  23. package/dist/contradiction/detector.d.ts +33 -0
  24. package/dist/contradiction/detector.d.ts.map +1 -0
  25. package/dist/contradiction/detector.js +76 -0
  26. package/dist/contradiction/detector.js.map +1 -0
  27. package/dist/contradiction/index.d.ts +11 -0
  28. package/dist/contradiction/index.d.ts.map +1 -0
  29. package/dist/contradiction/index.js +11 -0
  30. package/dist/contradiction/index.js.map +1 -0
  31. package/dist/contradiction/resolver.d.ts +45 -0
  32. package/dist/contradiction/resolver.d.ts.map +1 -0
  33. package/dist/contradiction/resolver.js +196 -0
  34. package/dist/contradiction/resolver.js.map +1 -0
  35. package/dist/contradiction/types.d.ts +73 -0
  36. package/dist/contradiction/types.d.ts.map +1 -0
  37. package/dist/contradiction/types.js +7 -0
  38. package/dist/contradiction/types.js.map +1 -0
  39. package/dist/dedup/dedupe.d.ts +49 -0
  40. package/dist/dedup/dedupe.d.ts.map +1 -0
  41. package/dist/dedup/dedupe.js +111 -0
  42. package/dist/dedup/dedupe.js.map +1 -0
  43. package/dist/dedup/hash.d.ts +27 -0
  44. package/dist/dedup/hash.d.ts.map +1 -0
  45. package/dist/dedup/hash.js +43 -0
  46. package/dist/dedup/hash.js.map +1 -0
  47. package/dist/dedup/index.d.ts +12 -0
  48. package/dist/dedup/index.d.ts.map +1 -0
  49. package/dist/dedup/index.js +12 -0
  50. package/dist/dedup/index.js.map +1 -0
  51. package/dist/dedup/llm-triage.d.ts +48 -0
  52. package/dist/dedup/llm-triage.d.ts.map +1 -0
  53. package/dist/dedup/llm-triage.js +100 -0
  54. package/dist/dedup/llm-triage.js.map +1 -0
  55. package/dist/dedup/merge.d.ts +41 -0
  56. package/dist/dedup/merge.d.ts.map +1 -0
  57. package/dist/dedup/merge.js +55 -0
  58. package/dist/dedup/merge.js.map +1 -0
  59. package/dist/dedup/similar.d.ts +45 -0
  60. package/dist/dedup/similar.d.ts.map +1 -0
  61. package/dist/dedup/similar.js +103 -0
  62. package/dist/dedup/similar.js.map +1 -0
  63. package/dist/dedup/types.d.ts +72 -0
  64. package/dist/dedup/types.d.ts.map +1 -0
  65. package/dist/dedup/types.js +18 -0
  66. package/dist/dedup/types.js.map +1 -0
  67. package/dist/disclosure/adaptive.d.ts +86 -0
  68. package/dist/disclosure/adaptive.d.ts.map +1 -0
  69. package/dist/disclosure/adaptive.js +196 -0
  70. package/dist/disclosure/adaptive.js.map +1 -0
  71. package/dist/disclosure/budget.d.ts +51 -0
  72. package/dist/disclosure/budget.d.ts.map +1 -0
  73. package/dist/disclosure/budget.js +91 -0
  74. package/dist/disclosure/budget.js.map +1 -0
  75. package/dist/disclosure/index.d.ts +11 -0
  76. package/dist/disclosure/index.d.ts.map +1 -0
  77. package/dist/disclosure/index.js +11 -0
  78. package/dist/disclosure/index.js.map +1 -0
  79. package/dist/disclosure/tier-loader.d.ts +58 -0
  80. package/dist/disclosure/tier-loader.d.ts.map +1 -0
  81. package/dist/disclosure/tier-loader.js +205 -0
  82. package/dist/disclosure/tier-loader.js.map +1 -0
  83. package/dist/dreaming/decay.d.ts +46 -0
  84. package/dist/dreaming/decay.d.ts.map +1 -0
  85. package/dist/dreaming/decay.js +69 -0
  86. package/dist/dreaming/decay.js.map +1 -0
  87. package/dist/dreaming/deep.d.ts +48 -0
  88. package/dist/dreaming/deep.d.ts.map +1 -0
  89. package/dist/dreaming/deep.js +41 -0
  90. package/dist/dreaming/deep.js.map +1 -0
  91. package/dist/dreaming/index.d.ts +12 -0
  92. package/dist/dreaming/index.d.ts.map +1 -0
  93. package/dist/dreaming/index.js +12 -0
  94. package/dist/dreaming/index.js.map +1 -0
  95. package/dist/dreaming/light.d.ts +54 -0
  96. package/dist/dreaming/light.d.ts.map +1 -0
  97. package/dist/dreaming/light.js +114 -0
  98. package/dist/dreaming/light.js.map +1 -0
  99. package/dist/dreaming/rem.d.ts +128 -0
  100. package/dist/dreaming/rem.d.ts.map +1 -0
  101. package/dist/dreaming/rem.js +228 -0
  102. package/dist/dreaming/rem.js.map +1 -0
  103. package/dist/dreaming/scheduler.d.ts +75 -0
  104. package/dist/dreaming/scheduler.d.ts.map +1 -0
  105. package/dist/dreaming/scheduler.js +138 -0
  106. package/dist/dreaming/scheduler.js.map +1 -0
  107. package/dist/dreaming/trash.d.ts +174 -0
  108. package/dist/dreaming/trash.d.ts.map +1 -0
  109. package/dist/dreaming/trash.js +466 -0
  110. package/dist/dreaming/trash.js.map +1 -0
  111. package/dist/evolution/category.d.ts +127 -0
  112. package/dist/evolution/category.d.ts.map +1 -0
  113. package/dist/evolution/category.js +271 -0
  114. package/dist/evolution/category.js.map +1 -0
  115. package/dist/evolution/index.d.ts +8 -0
  116. package/dist/evolution/index.d.ts.map +1 -0
  117. package/dist/evolution/index.js +8 -0
  118. package/dist/evolution/index.js.map +1 -0
  119. package/dist/evolution/triggered.d.ts +107 -0
  120. package/dist/evolution/triggered.d.ts.map +1 -0
  121. package/dist/evolution/triggered.js +278 -0
  122. package/dist/evolution/triggered.js.map +1 -0
  123. package/dist/generative/cross-pollinate.d.ts +144 -0
  124. package/dist/generative/cross-pollinate.d.ts.map +1 -0
  125. package/dist/generative/cross-pollinate.js +390 -0
  126. package/dist/generative/cross-pollinate.js.map +1 -0
  127. package/dist/generative/gap-detector.d.ts +80 -0
  128. package/dist/generative/gap-detector.d.ts.map +1 -0
  129. package/dist/generative/gap-detector.js +250 -0
  130. package/dist/generative/gap-detector.js.map +1 -0
  131. package/dist/generative/hypothesis.d.ts +161 -0
  132. package/dist/generative/hypothesis.d.ts.map +1 -0
  133. package/dist/generative/hypothesis.js +356 -0
  134. package/dist/generative/hypothesis.js.map +1 -0
  135. package/dist/generative/index.d.ts +9 -0
  136. package/dist/generative/index.d.ts.map +1 -0
  137. package/dist/generative/index.js +9 -0
  138. package/dist/generative/index.js.map +1 -0
  139. package/dist/graph/clustering.d.ts +117 -0
  140. package/dist/graph/clustering.d.ts.map +1 -0
  141. package/dist/graph/clustering.js +196 -0
  142. package/dist/graph/clustering.js.map +1 -0
  143. package/dist/graph/index.d.ts +13 -0
  144. package/dist/graph/index.d.ts.map +1 -0
  145. package/dist/graph/index.js +13 -0
  146. package/dist/graph/index.js.map +1 -0
  147. package/dist/graph/layout.d.ts +46 -0
  148. package/dist/graph/layout.d.ts.map +1 -0
  149. package/dist/graph/layout.js +269 -0
  150. package/dist/graph/layout.js.map +1 -0
  151. package/dist/graph/presets.d.ts +134 -0
  152. package/dist/graph/presets.d.ts.map +1 -0
  153. package/dist/graph/presets.js +190 -0
  154. package/dist/graph/presets.js.map +1 -0
  155. package/dist/graph/registry.d.ts +42 -0
  156. package/dist/graph/registry.d.ts.map +1 -0
  157. package/dist/graph/registry.js +158 -0
  158. package/dist/graph/registry.js.map +1 -0
  159. package/dist/graph/snapshot.d.ts +113 -0
  160. package/dist/graph/snapshot.d.ts.map +1 -0
  161. package/dist/graph/snapshot.js +194 -0
  162. package/dist/graph/snapshot.js.map +1 -0
  163. package/dist/graph/traverse.d.ts +84 -0
  164. package/dist/graph/traverse.d.ts.map +1 -0
  165. package/dist/graph/traverse.js +190 -0
  166. package/dist/graph/traverse.js.map +1 -0
  167. package/dist/graph/view-config.d.ts +99 -0
  168. package/dist/graph/view-config.d.ts.map +1 -0
  169. package/dist/graph/view-config.js +208 -0
  170. package/dist/graph/view-config.js.map +1 -0
  171. package/dist/host/detect-git-author.d.ts +26 -0
  172. package/dist/host/detect-git-author.d.ts.map +1 -0
  173. package/dist/host/detect-git-author.js +53 -0
  174. package/dist/host/detect-git-author.js.map +1 -0
  175. package/dist/host/index.d.ts +7 -0
  176. package/dist/host/index.d.ts.map +1 -0
  177. package/dist/host/index.js +7 -0
  178. package/dist/host/index.js.map +1 -0
  179. package/dist/i18n/en.d.ts +8 -0
  180. package/dist/i18n/en.d.ts.map +1 -0
  181. package/dist/i18n/en.js +211 -0
  182. package/dist/i18n/en.js.map +1 -0
  183. package/dist/i18n/field-names.d.ts +95 -0
  184. package/dist/i18n/field-names.d.ts.map +1 -0
  185. package/dist/i18n/field-names.js +329 -0
  186. package/dist/i18n/field-names.js.map +1 -0
  187. package/dist/i18n/index.d.ts +92 -0
  188. package/dist/i18n/index.d.ts.map +1 -0
  189. package/dist/i18n/index.js +135 -0
  190. package/dist/i18n/index.js.map +1 -0
  191. package/dist/i18n/types.d.ts +92 -0
  192. package/dist/i18n/types.d.ts.map +1 -0
  193. package/dist/i18n/types.js +7 -0
  194. package/dist/i18n/types.js.map +1 -0
  195. package/dist/i18n/zh.d.ts +197 -0
  196. package/dist/i18n/zh.d.ts.map +1 -0
  197. package/dist/i18n/zh.js +216 -0
  198. package/dist/i18n/zh.js.map +1 -0
  199. package/dist/importance/index.d.ts +7 -0
  200. package/dist/importance/index.d.ts.map +1 -0
  201. package/dist/importance/index.js +7 -0
  202. package/dist/importance/index.js.map +1 -0
  203. package/dist/importance/vector.d.ts +113 -0
  204. package/dist/importance/vector.d.ts.map +1 -0
  205. package/dist/importance/vector.js +202 -0
  206. package/dist/importance/vector.js.map +1 -0
  207. package/dist/index/digest-builder.d.ts +59 -0
  208. package/dist/index/digest-builder.d.ts.map +1 -0
  209. package/dist/index/digest-builder.js +195 -0
  210. package/dist/index/digest-builder.js.map +1 -0
  211. package/dist/index/graph-builder.d.ts +32 -0
  212. package/dist/index/graph-builder.d.ts.map +1 -0
  213. package/dist/index/graph-builder.js +104 -0
  214. package/dist/index/graph-builder.js.map +1 -0
  215. package/dist/index/incremental.d.ts +31 -0
  216. package/dist/index/incremental.d.ts.map +1 -0
  217. package/dist/index/incremental.js +47 -0
  218. package/dist/index/incremental.js.map +1 -0
  219. package/dist/index/index.d.ts +11 -0
  220. package/dist/index/index.d.ts.map +1 -0
  221. package/dist/index/index.js +11 -0
  222. package/dist/index/index.js.map +1 -0
  223. package/dist/index/orchestrator.d.ts +60 -0
  224. package/dist/index/orchestrator.d.ts.map +1 -0
  225. package/dist/index/orchestrator.js +99 -0
  226. package/dist/index/orchestrator.js.map +1 -0
  227. package/dist/index/types.d.ts +116 -0
  228. package/dist/index/types.d.ts.map +1 -0
  229. package/dist/index/types.js +10 -0
  230. package/dist/index/types.js.map +1 -0
  231. package/dist/index.d.ts +37 -0
  232. package/dist/index.d.ts.map +1 -0
  233. package/dist/index.js +37 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/learning/index.d.ts +7 -0
  236. package/dist/learning/index.d.ts.map +1 -0
  237. package/dist/learning/index.js +7 -0
  238. package/dist/learning/index.js.map +1 -0
  239. package/dist/learning/loop.d.ts +79 -0
  240. package/dist/learning/loop.d.ts.map +1 -0
  241. package/dist/learning/loop.js +116 -0
  242. package/dist/learning/loop.js.map +1 -0
  243. package/dist/lifecycle/freshness.d.ts +35 -0
  244. package/dist/lifecycle/freshness.d.ts.map +1 -0
  245. package/dist/lifecycle/freshness.js +60 -0
  246. package/dist/lifecycle/freshness.js.map +1 -0
  247. package/dist/lifecycle/index.d.ts +7 -0
  248. package/dist/lifecycle/index.d.ts.map +1 -0
  249. package/dist/lifecycle/index.js +7 -0
  250. package/dist/lifecycle/index.js.map +1 -0
  251. package/dist/lineage/index.d.ts +10 -0
  252. package/dist/lineage/index.d.ts.map +1 -0
  253. package/dist/lineage/index.js +10 -0
  254. package/dist/lineage/index.js.map +1 -0
  255. package/dist/lineage/trace.d.ts +142 -0
  256. package/dist/lineage/trace.d.ts.map +1 -0
  257. package/dist/lineage/trace.js +316 -0
  258. package/dist/lineage/trace.js.map +1 -0
  259. package/dist/maintenance/engine.d.ts +78 -0
  260. package/dist/maintenance/engine.d.ts.map +1 -0
  261. package/dist/maintenance/engine.js +291 -0
  262. package/dist/maintenance/engine.js.map +1 -0
  263. package/dist/maintenance/index.d.ts +8 -0
  264. package/dist/maintenance/index.d.ts.map +1 -0
  265. package/dist/maintenance/index.js +8 -0
  266. package/dist/maintenance/index.js.map +1 -0
  267. package/dist/maintenance/types.d.ts +111 -0
  268. package/dist/maintenance/types.d.ts.map +1 -0
  269. package/dist/maintenance/types.js +24 -0
  270. package/dist/maintenance/types.js.map +1 -0
  271. package/dist/observability/audit-log.d.ts +77 -0
  272. package/dist/observability/audit-log.d.ts.map +1 -0
  273. package/dist/observability/audit-log.js +101 -0
  274. package/dist/observability/audit-log.js.map +1 -0
  275. package/dist/observability/effectiveness-tracker.d.ts +162 -0
  276. package/dist/observability/effectiveness-tracker.d.ts.map +1 -0
  277. package/dist/observability/effectiveness-tracker.js +251 -0
  278. package/dist/observability/effectiveness-tracker.js.map +1 -0
  279. package/dist/observability/index.d.ts +16 -0
  280. package/dist/observability/index.d.ts.map +1 -0
  281. package/dist/observability/index.js +16 -0
  282. package/dist/observability/index.js.map +1 -0
  283. package/dist/observability/necessity-evaluator.d.ts +116 -0
  284. package/dist/observability/necessity-evaluator.d.ts.map +1 -0
  285. package/dist/observability/necessity-evaluator.js +487 -0
  286. package/dist/observability/necessity-evaluator.js.map +1 -0
  287. package/dist/observability/proposal-engine.d.ts +224 -0
  288. package/dist/observability/proposal-engine.d.ts.map +1 -0
  289. package/dist/observability/proposal-engine.js +651 -0
  290. package/dist/observability/proposal-engine.js.map +1 -0
  291. package/dist/perspectives/index.d.ts +7 -0
  292. package/dist/perspectives/index.d.ts.map +1 -0
  293. package/dist/perspectives/index.js +7 -0
  294. package/dist/perspectives/index.js.map +1 -0
  295. package/dist/perspectives/multi-view.d.ts +81 -0
  296. package/dist/perspectives/multi-view.d.ts.map +1 -0
  297. package/dist/perspectives/multi-view.js +221 -0
  298. package/dist/perspectives/multi-view.js.map +1 -0
  299. package/dist/prompt-builder/builder.d.ts +47 -0
  300. package/dist/prompt-builder/builder.d.ts.map +1 -0
  301. package/dist/prompt-builder/builder.js +136 -0
  302. package/dist/prompt-builder/builder.js.map +1 -0
  303. package/dist/prompt-builder/index.d.ts +8 -0
  304. package/dist/prompt-builder/index.d.ts.map +1 -0
  305. package/dist/prompt-builder/index.js +8 -0
  306. package/dist/prompt-builder/index.js.map +1 -0
  307. package/dist/prompt-builder/types.d.ts +42 -0
  308. package/dist/prompt-builder/types.d.ts.map +1 -0
  309. package/dist/prompt-builder/types.js +10 -0
  310. package/dist/prompt-builder/types.js.map +1 -0
  311. package/dist/prompt-signals/cache.d.ts +36 -0
  312. package/dist/prompt-signals/cache.d.ts.map +1 -0
  313. package/dist/prompt-signals/cache.js +70 -0
  314. package/dist/prompt-signals/cache.js.map +1 -0
  315. package/dist/prompt-signals/index.d.ts +12 -0
  316. package/dist/prompt-signals/index.d.ts.map +1 -0
  317. package/dist/prompt-signals/index.js +11 -0
  318. package/dist/prompt-signals/index.js.map +1 -0
  319. package/dist/prompt-signals/stats.d.ts +45 -0
  320. package/dist/prompt-signals/stats.d.ts.map +1 -0
  321. package/dist/prompt-signals/stats.js +119 -0
  322. package/dist/prompt-signals/stats.js.map +1 -0
  323. package/dist/prompt-signals/types.d.ts +53 -0
  324. package/dist/prompt-signals/types.d.ts.map +1 -0
  325. package/dist/prompt-signals/types.js +34 -0
  326. package/dist/prompt-signals/types.js.map +1 -0
  327. package/dist/provenance/index.d.ts +7 -0
  328. package/dist/provenance/index.d.ts.map +1 -0
  329. package/dist/provenance/index.js +7 -0
  330. package/dist/provenance/index.js.map +1 -0
  331. package/dist/provenance/reliability.d.ts +133 -0
  332. package/dist/provenance/reliability.d.ts.map +1 -0
  333. package/dist/provenance/reliability.js +213 -0
  334. package/dist/provenance/reliability.js.map +1 -0
  335. package/dist/reinforcement/config.d.ts +34 -0
  336. package/dist/reinforcement/config.d.ts.map +1 -0
  337. package/dist/reinforcement/config.js +43 -0
  338. package/dist/reinforcement/config.js.map +1 -0
  339. package/dist/reinforcement/index.d.ts +12 -0
  340. package/dist/reinforcement/index.d.ts.map +1 -0
  341. package/dist/reinforcement/index.js +12 -0
  342. package/dist/reinforcement/index.js.map +1 -0
  343. package/dist/reinforcement/ltd.d.ts +59 -0
  344. package/dist/reinforcement/ltd.d.ts.map +1 -0
  345. package/dist/reinforcement/ltd.js +90 -0
  346. package/dist/reinforcement/ltd.js.map +1 -0
  347. package/dist/reinforcement/ltp.d.ts +63 -0
  348. package/dist/reinforcement/ltp.d.ts.map +1 -0
  349. package/dist/reinforcement/ltp.js +99 -0
  350. package/dist/reinforcement/ltp.js.map +1 -0
  351. package/dist/reinforcement/related.d.ts +39 -0
  352. package/dist/reinforcement/related.d.ts.map +1 -0
  353. package/dist/reinforcement/related.js +92 -0
  354. package/dist/reinforcement/related.js.map +1 -0
  355. package/dist/retrieval/filter.d.ts +18 -0
  356. package/dist/retrieval/filter.d.ts.map +1 -0
  357. package/dist/retrieval/filter.js +68 -0
  358. package/dist/retrieval/filter.js.map +1 -0
  359. package/dist/retrieval/fts.d.ts +44 -0
  360. package/dist/retrieval/fts.d.ts.map +1 -0
  361. package/dist/retrieval/fts.js +120 -0
  362. package/dist/retrieval/fts.js.map +1 -0
  363. package/dist/retrieval/index.d.ts +10 -0
  364. package/dist/retrieval/index.d.ts.map +1 -0
  365. package/dist/retrieval/index.js +10 -0
  366. package/dist/retrieval/index.js.map +1 -0
  367. package/dist/retrieval/orchestrator.d.ts +78 -0
  368. package/dist/retrieval/orchestrator.d.ts.map +1 -0
  369. package/dist/retrieval/orchestrator.js +156 -0
  370. package/dist/retrieval/orchestrator.js.map +1 -0
  371. package/dist/retrieval/scoring.d.ts +105 -0
  372. package/dist/retrieval/scoring.d.ts.map +1 -0
  373. package/dist/retrieval/scoring.js +165 -0
  374. package/dist/retrieval/scoring.js.map +1 -0
  375. package/dist/signals/extract.d.ts +98 -0
  376. package/dist/signals/extract.d.ts.map +1 -0
  377. package/dist/signals/extract.js +388 -0
  378. package/dist/signals/extract.js.map +1 -0
  379. package/dist/signals/file-sink.d.ts +81 -0
  380. package/dist/signals/file-sink.d.ts.map +1 -0
  381. package/dist/signals/file-sink.js +227 -0
  382. package/dist/signals/file-sink.js.map +1 -0
  383. package/dist/signals/index.d.ts +12 -0
  384. package/dist/signals/index.d.ts.map +1 -0
  385. package/dist/signals/index.js +12 -0
  386. package/dist/signals/index.js.map +1 -0
  387. package/dist/signals/rpe.d.ts +60 -0
  388. package/dist/signals/rpe.d.ts.map +1 -0
  389. package/dist/signals/rpe.js +68 -0
  390. package/dist/signals/rpe.js.map +1 -0
  391. package/dist/signals/types.d.ts +80 -0
  392. package/dist/signals/types.d.ts.map +1 -0
  393. package/dist/signals/types.js +14 -0
  394. package/dist/signals/types.js.map +1 -0
  395. package/dist/storage/engram-index.d.ts +73 -0
  396. package/dist/storage/engram-index.d.ts.map +1 -0
  397. package/dist/storage/engram-index.js +215 -0
  398. package/dist/storage/engram-index.js.map +1 -0
  399. package/dist/storage/engram-store.d.ts +147 -0
  400. package/dist/storage/engram-store.d.ts.map +1 -0
  401. package/dist/storage/engram-store.js +221 -0
  402. package/dist/storage/engram-store.js.map +1 -0
  403. package/dist/storage/git-stage.d.ts +56 -0
  404. package/dist/storage/git-stage.d.ts.map +1 -0
  405. package/dist/storage/git-stage.js +147 -0
  406. package/dist/storage/git-stage.js.map +1 -0
  407. package/dist/storage/git.d.ts +57 -0
  408. package/dist/storage/git.d.ts.map +1 -0
  409. package/dist/storage/git.js +156 -0
  410. package/dist/storage/git.js.map +1 -0
  411. package/dist/storage/hash.d.ts +23 -0
  412. package/dist/storage/hash.d.ts.map +1 -0
  413. package/dist/storage/hash.js +31 -0
  414. package/dist/storage/hash.js.map +1 -0
  415. package/dist/storage/index.d.ts +14 -0
  416. package/dist/storage/index.d.ts.map +1 -0
  417. package/dist/storage/index.js +14 -0
  418. package/dist/storage/index.js.map +1 -0
  419. package/dist/storage/path.d.ts +51 -0
  420. package/dist/storage/path.d.ts.map +1 -0
  421. package/dist/storage/path.js +72 -0
  422. package/dist/storage/path.js.map +1 -0
  423. package/dist/storage/repository.d.ts +342 -0
  424. package/dist/storage/repository.d.ts.map +1 -0
  425. package/dist/storage/repository.js +1221 -0
  426. package/dist/storage/repository.js.map +1 -0
  427. package/dist/storage/synapse-store.d.ts +113 -0
  428. package/dist/storage/synapse-store.d.ts.map +1 -0
  429. package/dist/storage/synapse-store.js +279 -0
  430. package/dist/storage/synapse-store.js.map +1 -0
  431. package/dist/tools/doctor-tools.d.ts +53 -0
  432. package/dist/tools/doctor-tools.d.ts.map +1 -0
  433. package/dist/tools/doctor-tools.js +97 -0
  434. package/dist/tools/doctor-tools.js.map +1 -0
  435. package/dist/tools/engram-tools.d.ts +166 -0
  436. package/dist/tools/engram-tools.d.ts.map +1 -0
  437. package/dist/tools/engram-tools.js +834 -0
  438. package/dist/tools/engram-tools.js.map +1 -0
  439. package/dist/tools/index.d.ts +16 -0
  440. package/dist/tools/index.d.ts.map +1 -0
  441. package/dist/tools/index.js +16 -0
  442. package/dist/tools/index.js.map +1 -0
  443. package/dist/tools/llm-descriptions.d.ts +61 -0
  444. package/dist/tools/llm-descriptions.d.ts.map +1 -0
  445. package/dist/tools/llm-descriptions.js +556 -0
  446. package/dist/tools/llm-descriptions.js.map +1 -0
  447. package/dist/tools/proposal-tools.d.ts +40 -0
  448. package/dist/tools/proposal-tools.d.ts.map +1 -0
  449. package/dist/tools/proposal-tools.js +99 -0
  450. package/dist/tools/proposal-tools.js.map +1 -0
  451. package/dist/tools/registry.d.ts +30 -0
  452. package/dist/tools/registry.d.ts.map +1 -0
  453. package/dist/tools/registry.js +43 -0
  454. package/dist/tools/registry.js.map +1 -0
  455. package/dist/tools/schemas.d.ts +715 -0
  456. package/dist/tools/schemas.d.ts.map +1 -0
  457. package/dist/tools/schemas.js +383 -0
  458. package/dist/tools/schemas.js.map +1 -0
  459. package/dist/tools/skill-tools.d.ts +26 -0
  460. package/dist/tools/skill-tools.d.ts.map +1 -0
  461. package/dist/tools/skill-tools.js +84 -0
  462. package/dist/tools/skill-tools.js.map +1 -0
  463. package/dist/tools/synapse-tools.d.ts +28 -0
  464. package/dist/tools/synapse-tools.d.ts.map +1 -0
  465. package/dist/tools/synapse-tools.js +177 -0
  466. package/dist/tools/synapse-tools.js.map +1 -0
  467. package/dist/tools/tool.d.ts +84 -0
  468. package/dist/tools/tool.d.ts.map +1 -0
  469. package/dist/tools/tool.js +22 -0
  470. package/dist/tools/tool.js.map +1 -0
  471. package/dist/tools/wrapped.d.ts +28 -0
  472. package/dist/tools/wrapped.d.ts.map +1 -0
  473. package/dist/tools/wrapped.js +172 -0
  474. package/dist/tools/wrapped.js.map +1 -0
  475. package/dist/types/disclosure.d.ts +70 -0
  476. package/dist/types/disclosure.d.ts.map +1 -0
  477. package/dist/types/disclosure.js +9 -0
  478. package/dist/types/disclosure.js.map +1 -0
  479. package/dist/types/engram.d.ts +203 -0
  480. package/dist/types/engram.d.ts.map +1 -0
  481. package/dist/types/engram.js +7 -0
  482. package/dist/types/engram.js.map +1 -0
  483. package/dist/types/index.d.ts +15 -0
  484. package/dist/types/index.d.ts.map +1 -0
  485. package/dist/types/index.js +15 -0
  486. package/dist/types/index.js.map +1 -0
  487. package/dist/types/intention.d.ts +91 -0
  488. package/dist/types/intention.d.ts.map +1 -0
  489. package/dist/types/intention.js +9 -0
  490. package/dist/types/intention.js.map +1 -0
  491. package/dist/types/repository-types.d.ts +113 -0
  492. package/dist/types/repository-types.d.ts.map +1 -0
  493. package/dist/types/repository-types.js +18 -0
  494. package/dist/types/repository-types.js.map +1 -0
  495. package/dist/types/scene.d.ts +52 -0
  496. package/dist/types/scene.d.ts.map +1 -0
  497. package/dist/types/scene.js +12 -0
  498. package/dist/types/scene.js.map +1 -0
  499. package/dist/types/skill.d.ts +107 -0
  500. package/dist/types/skill.d.ts.map +1 -0
  501. package/dist/types/skill.js +10 -0
  502. package/dist/types/skill.js.map +1 -0
  503. package/dist/types/slugify.d.ts +34 -0
  504. package/dist/types/slugify.d.ts.map +1 -0
  505. package/dist/types/slugify.js +55 -0
  506. package/dist/types/slugify.js.map +1 -0
  507. package/dist/types/synapse-id.d.ts +22 -0
  508. package/dist/types/synapse-id.d.ts.map +1 -0
  509. package/dist/types/synapse-id.js +34 -0
  510. package/dist/types/synapse-id.js.map +1 -0
  511. package/dist/types/synapse.d.ts +99 -0
  512. package/dist/types/synapse.d.ts.map +1 -0
  513. package/dist/types/synapse.js +9 -0
  514. package/dist/types/synapse.js.map +1 -0
  515. package/dist/verification/index.d.ts +11 -0
  516. package/dist/verification/index.d.ts.map +1 -0
  517. package/dist/verification/index.js +11 -0
  518. package/dist/verification/index.js.map +1 -0
  519. package/dist/verification/metacognition.d.ts +102 -0
  520. package/dist/verification/metacognition.d.ts.map +1 -0
  521. package/dist/verification/metacognition.js +284 -0
  522. package/dist/verification/metacognition.js.map +1 -0
  523. package/dist/verification/state-machine.d.ts +77 -0
  524. package/dist/verification/state-machine.d.ts.map +1 -0
  525. package/dist/verification/state-machine.js +126 -0
  526. package/dist/verification/state-machine.js.map +1 -0
  527. package/dist/verification/upgrade.d.ts +133 -0
  528. package/dist/verification/upgrade.d.ts.map +1 -0
  529. package/dist/verification/upgrade.js +364 -0
  530. package/dist/verification/upgrade.js.map +1 -0
  531. package/package.json +70 -0
@@ -0,0 +1,228 @@
1
+ /**
2
+ * REM Dreaming(跨情境抽象 + 模式发现)
3
+ *
4
+ * 神经科学依据:REM 睡眠期间,海马与皮层协同重放,发现跨情境的共同模式。
5
+ *
6
+ * 实现(spec §5.2):
7
+ * 1. 取所有 active engram
8
+ * 2. 相似度聚类(基于 TokenJaccardSimilarityEngine)
9
+ * 3. 对每个 ≥ minClusterSize 的 cluster 调用 abstractionProvider 抽象
10
+ * 4. 生成 ConsolidationProposal(title/content/sourceIds/confidence)
11
+ * 5. confidence ≥ autoAdoptionThreshold → 自动创建 pattern engram + 连接 derives_from
12
+ *
13
+ * Core 层提供 PatternAbstractionProvider 接口,宿主可注入真正的 LLM 抽象器;
14
+ * 默认实现 LocalHeuristicPatternAbstraction 基于 token 频率提取共同 tokens。
15
+ *
16
+ * @module @co-engram/core/dreaming
17
+ */
18
+ import { randomUUID } from "node:crypto";
19
+ import { tokenizeForDedup, TokenJaccardSimilarityEngine, } from "../dedup/similar.js";
20
+ // ============================================================
21
+ // 默认启发式抽象
22
+ // ============================================================
23
+ /**
24
+ * 启发式模式抽象(无 LLM)
25
+ *
26
+ * 算法:
27
+ * 1. 合并 cluster 内所有 engram 的 tokens
28
+ * 2. 按 token 频率倒序,取 top N 作为"共同关键词"
29
+ * 3. title = "Pattern: {top1} {top2} {top3}"
30
+ * 4. content = 共同关键词列表 + source 列表
31
+ * 5. confidence = (top1 频率 / cluster size) × 加权
32
+ *
33
+ * 这是 P2 启发式;生产环境应该用 LLM 做语义抽象。
34
+ */
35
+ export class LocalHeuristicPatternAbstraction {
36
+ options;
37
+ constructor(options = {}) {
38
+ this.options = options;
39
+ }
40
+ abstract(input) {
41
+ const topTokens = this.options.topTokens ?? 5;
42
+ const minConfidence = this.options.minConfidence ?? 0.3;
43
+ if (input.engrams.length === 0) {
44
+ return {
45
+ title: "Pattern: <empty>",
46
+ content: "",
47
+ summary: "空 cluster",
48
+ confidence: 0,
49
+ reason: "empty cluster",
50
+ };
51
+ }
52
+ // 合并所有 tokens 并统计频率
53
+ const tokenFreq = new Map();
54
+ for (const e of input.engrams) {
55
+ const tokens = tokenizeForDedup(`${e.title} ${e.summary} ${e.content}`);
56
+ for (const t of tokens) {
57
+ tokenFreq.set(t, (tokenFreq.get(t) ?? 0) + 1);
58
+ }
59
+ }
60
+ // 取出现频率 ≥ 一半 engram 的 token 作为"共同关键词"
61
+ const threshold = Math.ceil(input.engrams.length / 2);
62
+ const commonTokens = [...tokenFreq.entries()]
63
+ .filter(([, count]) => count >= threshold)
64
+ .sort((a, b) => b[1] - a[1])
65
+ .slice(0, topTokens)
66
+ .map(([t]) => t);
67
+ if (commonTokens.length === 0) {
68
+ return {
69
+ title: `Pattern: ${input.engrams[0].domainTags[0] ?? "unknown"}`,
70
+ content: "共同 tokens 不足,无法抽象出明确模式",
71
+ summary: "低相似度 cluster",
72
+ confidence: minConfidence,
73
+ reason: "no common tokens above threshold",
74
+ };
75
+ }
76
+ const title = `Pattern: ${commonTokens.slice(0, 3).join(" / ")}`;
77
+ const content = [
78
+ `# ${title}`,
79
+ "",
80
+ `**抽象来源**:${input.engrams.length} 个 engram`,
81
+ "",
82
+ "**共同关键词**:",
83
+ ...commonTokens.map((t) => `- ${t}`),
84
+ "",
85
+ "**来源 engram**:",
86
+ ...input.engrams.map((e) => `- [${e.id}] ${e.title}`),
87
+ ].join("\n");
88
+ // confidence = 共同 token 数 / 期望数(归一化到 [0,1])
89
+ const confidence = Math.min(1, commonTokens.length / topTokens);
90
+ const reason = `${commonTokens.length} common tokens across ${input.engrams.length} engrams`;
91
+ return {
92
+ title,
93
+ content,
94
+ summary: `${commonTokens.length} 个共同关键词`,
95
+ confidence,
96
+ reason,
97
+ };
98
+ }
99
+ }
100
+ /**
101
+ * 简单贪心聚类:按 id 字典序遍历,每个 engram 找未聚类的相似邻居组成 cluster
102
+ */
103
+ export function clusterSimilarEngrams(repo, options = {}) {
104
+ const similarityThreshold = options.similarityThreshold ?? 0.4;
105
+ const maxClusterSize = options.maxClusterSize ?? 10;
106
+ const engine = new TokenJaccardSimilarityEngine(repo);
107
+ const entries = [...repo.listEngrams()].sort((a, b) => a.id < b.id ? -1 : 1);
108
+ const clustered = new Set();
109
+ const clusters = [];
110
+ for (const entry of entries) {
111
+ if (clustered.has(entry.id))
112
+ continue;
113
+ const engram = repo.readEngram(entry.id);
114
+ if (engram.status !== "active")
115
+ continue;
116
+ const candidates = engine.findCandidatesSync(`${engram.title} ${engram.summary} ${engram.content}`, { topK: maxClusterSize, minSimilarity: similarityThreshold });
117
+ const memberIds = [entry.id];
118
+ clustered.add(entry.id);
119
+ for (const c of candidates) {
120
+ if (c.id === entry.id)
121
+ continue;
122
+ if (clustered.has(c.id))
123
+ continue;
124
+ const candidateEngram = repo.readEngram(c.id);
125
+ if (candidateEngram.status !== "active")
126
+ continue;
127
+ memberIds.push(c.id);
128
+ clustered.add(c.id);
129
+ if (memberIds.length >= maxClusterSize)
130
+ break;
131
+ }
132
+ if (memberIds.length > 1) {
133
+ clusters.push({ representativeId: entry.id, memberIds });
134
+ }
135
+ }
136
+ return clusters;
137
+ }
138
+ /**
139
+ * 执行 REM Dreaming
140
+ *
141
+ * 1. 聚类所有 active engram
142
+ * 2. 对每个 ≥ minClusterSize 的 cluster 生成抽象提案
143
+ * 3. confidence ≥ autoAdoptionThreshold → 自动创建 pattern engram + derives_from synapse
144
+ *
145
+ * 注意:core 层不绑定 LLM;abstractionProvider 由宿主注入。
146
+ */
147
+ export async function runRemDreaming(repo, options = {}) {
148
+ const provider = options.abstractionProvider ?? new LocalHeuristicPatternAbstraction();
149
+ const minClusterSize = options.minClusterSize ?? 3;
150
+ const autoAdoptionThreshold = options.autoAdoptionThreshold ?? 0.85;
151
+ const createdBy = options.createdBy ?? "dreaming-rem";
152
+ const dryRun = options.dryRun ?? false;
153
+ const clusters = clusterSimilarEngrams(repo, options.clustering ?? {});
154
+ const proposals = [];
155
+ const adopted = [];
156
+ const skipped = [];
157
+ for (const cluster of clusters) {
158
+ if (cluster.memberIds.length < minClusterSize)
159
+ continue;
160
+ const engrams = cluster.memberIds.map((id) => {
161
+ const e = repo.readEngram(id);
162
+ return {
163
+ id: e.id,
164
+ title: e.title,
165
+ summary: e.summary,
166
+ content: e.content,
167
+ domainTags: [...e.domainTags],
168
+ };
169
+ });
170
+ const output = await provider.abstract({ engrams });
171
+ const proposal = {
172
+ title: output.title,
173
+ content: output.content,
174
+ summary: output.summary,
175
+ confidence: output.confidence,
176
+ reason: output.reason,
177
+ sourceIds: cluster.memberIds,
178
+ clusterRepresentativeId: cluster.representativeId,
179
+ };
180
+ proposals.push(proposal);
181
+ if (output.confidence >= autoAdoptionThreshold && !dryRun) {
182
+ // 自动采纳:创建 pattern engram + derives_from synapse
183
+ const patternEngram = repo.createEngram({
184
+ title: proposal.title,
185
+ content: proposal.content,
186
+ summary: proposal.summary,
187
+ kind: "pattern",
188
+ domainTags: [...new Set(engrams.flatMap((e) => e.domainTags))],
189
+ importance: 0.7,
190
+ confidence: output.confidence,
191
+ sourceType: "inferred",
192
+ createdBy,
193
+ });
194
+ // 连接 derives_from 每个 source
195
+ const timestamp = patternEngram.createdAt;
196
+ for (const sourceId of proposal.sourceIds) {
197
+ const synapse = {
198
+ id: randomUUID(),
199
+ from: patternEngram.id,
200
+ to: sourceId,
201
+ kind: "derives_from",
202
+ weight: 0.8,
203
+ direction: "directional",
204
+ evidence: [],
205
+ createdBy,
206
+ createdAt: timestamp,
207
+ updatedAt: timestamp,
208
+ retrievalWeight: 0.8,
209
+ };
210
+ repo.addOutgoingSynapse(patternEngram.id, synapse);
211
+ }
212
+ adopted.push({ patternEngramId: patternEngram.id, proposal });
213
+ }
214
+ else if (output.confidence < autoAdoptionThreshold) {
215
+ skipped.push({
216
+ proposal,
217
+ reason: `confidence ${output.confidence.toFixed(2)} < threshold ${autoAdoptionThreshold}`,
218
+ });
219
+ }
220
+ }
221
+ return {
222
+ clustersScanned: clusters.length,
223
+ proposals,
224
+ adopted,
225
+ skipped,
226
+ };
227
+ }
228
+ //# sourceMappingURL=rem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rem.js","sourceRoot":"","sources":["../../src/dreaming/rem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AA0C7B,+DAA+D;AAC/D,UAAU;AACV,+DAA+D;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,gCAAgC;IAExB;IADnB,YACmB,UAGb,EAAE;QAHW,YAAO,GAAP,OAAO,CAGlB;IACL,CAAC;IAEJ,QAAQ,CAAC,KAAuB;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC;QAExD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;aACnB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,YAAY,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;gBACjE,OAAO,EAAE,wBAAwB;gBACjC,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,aAAa;gBACzB,MAAM,EAAE,kCAAkC;aAC3C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG;YACd,KAAK,KAAK,EAAE;YACZ,EAAE;YACF,YAAY,KAAK,CAAC,OAAO,CAAC,MAAM,WAAW;YAC3C,EAAE;YACF,YAAY;YACZ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,EAAE;YACF,gBAAgB;YAChB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;SACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,4CAA4C;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,yBAAyB,KAAK,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC;QAE7F,OAAO;YACL,KAAK;YACL,OAAO;YACP,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,SAAS;YACxC,UAAU;YACV,MAAM;SACP,CAAC;IACJ,CAAC;CACF;AAkBD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAsB,EACtB,UAA6B,EAAE;IAE/B,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,GAAG,CAAC;IAC/D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpD,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACrB,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,SAAS;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAEzC,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAC1C,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,EACrD,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAC7D,CAAC;QAEF,MAAM,SAAS,GAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;gBAAE,SAAS;YAChC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,SAAS;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,eAAe,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YAClD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,SAAS,CAAC,MAAM,IAAI,cAAc;gBAAE,MAAM;QAChD,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AA0CD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAsB,EACtB,UAA8B,EAAE;IAEhC,MAAM,QAAQ,GACZ,OAAO,CAAC,mBAAmB,IAAI,IAAI,gCAAgC,EAAE,CAAC;IACxE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;IACnD,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,IAAI,CAAC;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IAEvC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,MAAM,OAAO,GAGR,EAAE,CAAC;IACR,MAAM,OAAO,GACX,EAAE,CAAC;IAEL,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,cAAc;YAAE,SAAS;QAExD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;aAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,MAAM,QAAQ,GAA0B;YACtC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,uBAAuB,EAAE,OAAO,CAAC,gBAAgB;SAClD,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,MAAM,CAAC,UAAU,IAAI,qBAAqB,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1D,gDAAgD;YAChD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;gBACtC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC9D,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,UAAU;gBACtB,SAAS;aACV,CAAC,CAAC;YACH,4BAA4B;YAC5B,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;YAC1C,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAY;oBACvB,EAAE,EAAE,UAAU,EAAE;oBAChB,IAAI,EAAE,aAAa,CAAC,EAAE;oBACtB,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,GAAG;oBACX,SAAS,EAAE,aAAa;oBACxB,QAAQ,EAAE,EAAE;oBACZ,SAAS;oBACT,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,SAAS;oBACpB,eAAe,EAAE,GAAG;iBACrB,CAAC;gBACF,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,GAAG,qBAAqB,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ;gBACR,MAAM,EAAE,cAAc,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,qBAAqB,EAAE;aAC1F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,eAAe,EAAE,QAAQ,CAAC,MAAM;QAChC,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Dreaming 调度器(host-agnostic)
3
+ *
4
+ * 提供简单的"按间隔触发"抽象,不绑定 cron 库。
5
+ * 宿主(OpenClaw / Claude Code MCP)负责:
6
+ * - 实际的时间触发(cron / setInterval / 外部事件)
7
+ * - 低负载时段判断(spec 2.5.6)
8
+ * - CLI 命令(spec 2.5.5)
9
+ *
10
+ * Core 只提供:
11
+ * - 注册 light/deep 任务
12
+ * - 立即触发(trigger)
13
+ * - 启停定时调度(基于 setInterval)
14
+ *
15
+ * @module @co-engram/core/dreaming
16
+ */
17
+ import type { EngramRepository } from "../storage/repository.js";
18
+ import { type LightDreamingOptions, type LightDreamingResult } from "./light.js";
19
+ import { type DeepDreamingOptions, type DeepDreamingResult } from "./deep.js";
20
+ import { type RemDreamingOptions, type RemDreamingResult } from "./rem.js";
21
+ export type DreamingStage = "light" | "deep" | "rem";
22
+ export interface DreamingScheduleConfig {
23
+ /** Light Dreaming 间隔(毫秒)。默认 1 小时。 */
24
+ readonly lightIntervalMs?: number;
25
+ /** Deep Dreaming 间隔(毫秒)。默认 24 小时。 */
26
+ readonly deepIntervalMs?: number;
27
+ /** Rem Dreaming 间隔(毫秒)。默认 7 天。P4 新增。 */
28
+ readonly remIntervalMs?: number;
29
+ /** Light Dreaming 选项 */
30
+ readonly lightOptions?: LightDreamingOptions;
31
+ /** Deep Dreaming 选项 */
32
+ readonly deepOptions?: DeepDreamingOptions;
33
+ /** Rem Dreaming 选项。P4 新增。 */
34
+ readonly remOptions?: RemDreamingOptions;
35
+ }
36
+ export interface DreamingRunRecord {
37
+ readonly stage: DreamingStage;
38
+ readonly at: string;
39
+ readonly result: LightDreamingResult | DeepDreamingResult | RemDreamingResult;
40
+ }
41
+ export type DreamingRunHandler = (record: DreamingRunRecord) => void;
42
+ /**
43
+ * Dreaming 调度器
44
+ *
45
+ * 使用:
46
+ * const scheduler = createDreamingScheduler(repo, {
47
+ * lightIntervalMs: 60_000,
48
+ * deepIntervalMs: 24 * 60 * 60_000,
49
+ * })
50
+ * scheduler.onRun((record) => log(record))
51
+ * scheduler.start()
52
+ * // ... 应用运行期间自动触发
53
+ * scheduler.stop()
54
+ *
55
+ * 或者立即手动触发:
56
+ * scheduler.trigger('light')
57
+ * scheduler.trigger('deep')
58
+ */
59
+ export interface DreamingScheduler {
60
+ /** 注册运行回调(可多次调用添加多个 handler) */
61
+ onRun(handler: DreamingRunHandler): void;
62
+ /** 启动定时调度 */
63
+ start(): void;
64
+ /** 停止定时调度 */
65
+ stop(): void;
66
+ /** 立即触发指定阶段 */
67
+ trigger(stage: DreamingStage): DreamingRunRecord;
68
+ /** 是否正在运行 */
69
+ isRunning(): boolean;
70
+ }
71
+ /**
72
+ * 创建 Dreaming 调度器
73
+ */
74
+ export declare function createDreamingScheduler(repo: EngramRepository, config?: DreamingScheduleConfig): DreamingScheduler;
75
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/dreaming/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,qCAAqC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,wCAAwC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAC7C,uBAAuB;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAC3C,6BAA6B;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;CAC/E;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAErE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,aAAa;IACb,KAAK,IAAI,IAAI,CAAC;IACd,aAAa;IACb,IAAI,IAAI,IAAI,CAAC;IACb,eAAe;IACf,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAAC;IACjD,aAAa;IACb,SAAS,IAAI,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,gBAAgB,EACtB,MAAM,GAAE,sBAA2B,GAClC,iBAAiB,CAkHnB"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Dreaming 调度器(host-agnostic)
3
+ *
4
+ * 提供简单的"按间隔触发"抽象,不绑定 cron 库。
5
+ * 宿主(OpenClaw / Claude Code MCP)负责:
6
+ * - 实际的时间触发(cron / setInterval / 外部事件)
7
+ * - 低负载时段判断(spec 2.5.6)
8
+ * - CLI 命令(spec 2.5.5)
9
+ *
10
+ * Core 只提供:
11
+ * - 注册 light/deep 任务
12
+ * - 立即触发(trigger)
13
+ * - 启停定时调度(基于 setInterval)
14
+ *
15
+ * @module @co-engram/core/dreaming
16
+ */
17
+ import { runLightDreaming, } from "./light.js";
18
+ import { runDeepDreaming, } from "./deep.js";
19
+ import { runRemDreaming, } from "./rem.js";
20
+ /**
21
+ * 创建 Dreaming 调度器
22
+ */
23
+ export function createDreamingScheduler(repo, config = {}) {
24
+ const lightIntervalMs = config.lightIntervalMs ?? 60 * 60 * 1000;
25
+ const deepIntervalMs = config.deepIntervalMs ?? 24 * 60 * 60 * 1000;
26
+ const remIntervalMs = config.remIntervalMs ?? 7 * 24 * 60 * 60 * 1000;
27
+ const handlers = [];
28
+ let lightTimer = null;
29
+ let deepTimer = null;
30
+ let remTimer = null;
31
+ let running = false;
32
+ const emit = (record) => {
33
+ for (const h of handlers) {
34
+ try {
35
+ h(record);
36
+ }
37
+ catch {
38
+ // handler 异常不影响调度(仅记录)
39
+ }
40
+ }
41
+ };
42
+ const runStage = async (stage) => {
43
+ const at = new Date().toISOString();
44
+ if (stage === "light") {
45
+ const result = runLightDreaming(repo, config.lightOptions ?? {});
46
+ return { stage, at, result };
47
+ }
48
+ if (stage === "deep") {
49
+ const result = runDeepDreaming(repo, config.deepOptions ?? {});
50
+ return { stage, at, result };
51
+ }
52
+ // rem
53
+ const result = await runRemDreaming(repo, config.remOptions ?? {});
54
+ return { stage, at, result };
55
+ };
56
+ return {
57
+ onRun(handler) {
58
+ handlers.push(handler);
59
+ },
60
+ start() {
61
+ if (running)
62
+ return;
63
+ running = true;
64
+ lightTimer = setInterval(() => {
65
+ runStage("light")
66
+ .then(emit)
67
+ .catch(() => { });
68
+ }, lightIntervalMs);
69
+ deepTimer = setInterval(() => {
70
+ runStage("deep")
71
+ .then(emit)
72
+ .catch(() => { });
73
+ }, deepIntervalMs);
74
+ remTimer = setInterval(() => {
75
+ runStage("rem")
76
+ .then(emit)
77
+ .catch(() => { });
78
+ }, remIntervalMs);
79
+ // unref:定时器不阻止 Node 进程退出(宿主决定生命周期)
80
+ lightTimer.unref?.();
81
+ deepTimer.unref?.();
82
+ remTimer.unref?.();
83
+ },
84
+ stop() {
85
+ if (!running)
86
+ return;
87
+ running = false;
88
+ if (lightTimer) {
89
+ clearInterval(lightTimer);
90
+ lightTimer = null;
91
+ }
92
+ if (deepTimer) {
93
+ clearInterval(deepTimer);
94
+ deepTimer = null;
95
+ }
96
+ if (remTimer) {
97
+ clearInterval(remTimer);
98
+ remTimer = null;
99
+ }
100
+ },
101
+ trigger(stage) {
102
+ const at = new Date().toISOString();
103
+ if (stage === "light") {
104
+ const result = runLightDreaming(repo, config.lightOptions ?? {});
105
+ const record = { stage, at, result };
106
+ emit(record);
107
+ return record;
108
+ }
109
+ if (stage === "deep") {
110
+ const result = runDeepDreaming(repo, config.deepOptions ?? {});
111
+ const record = { stage, at, result };
112
+ emit(record);
113
+ return record;
114
+ }
115
+ // rem 是 async,trigger 同步签名无法等待。
116
+ // 返回 placeholder record,真实 result 通过 onRun handler 拿到。
117
+ const placeholder = {
118
+ clustersScanned: 0,
119
+ proposals: [],
120
+ adopted: [],
121
+ skipped: [],
122
+ };
123
+ const record = { stage, at, result: placeholder };
124
+ runRemDreaming(repo, config.remOptions ?? {})
125
+ .then((realResult) => {
126
+ emit({ stage, at, result: realResult });
127
+ })
128
+ .catch(() => {
129
+ // 失败不阻塞
130
+ });
131
+ return record;
132
+ },
133
+ isRunning() {
134
+ return running;
135
+ },
136
+ };
137
+ }
138
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/dreaming/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * 记忆回收站(Trash Sweep)
3
+ *
4
+ * 神经科学类比:遗忘不等于物理销毁——已被"遗忘"的突触在一段时间内仍可被找回。
5
+ * 此模块把"已 forgotten 超过 N 天"的 engram 从主索引物理移动到 `.trash/YYYY-MM/`,
6
+ * 既给了恢复窗口,又降低了 FTS / 图遍历对陈旧数据的扫描成本。
7
+ *
8
+ * 设计约束:
9
+ * - 文件系统操作:rename / mkdir。优先 git mv(若仓库为 git 仓库),否则退化为 fs.rename。
10
+ * - 不动 synapse 引用:允许 dangling(其他 engram 仍可能指向被回收的 id)。
11
+ * 这是有意的:未来若 restore,引用自动恢复有效。
12
+ * - purge(物理删除)独立阶段,默认 365 天后才删,且需要显式开启。
13
+ * - engram 是单文件 (.md),移动一个文件即可;同时更新 engram-index.json
14
+ * 以保证主索引不再列出已回收的条目。
15
+ *
16
+ * 时间戳策略:
17
+ * 使用 engram 文件的 mtime 作为"最后被触碰时刻"的近似。
18
+ * 原因:forgotten 状态切换走 `updateLifecycle`,不写 updatedAt;mtime 是最接近真相的信号。
19
+ * 已知缺陷:任何对文件的写入都会刷新 mtime。对 forgotten engram 来说,这种写入很少发生,
20
+ * 所以近似在 90%+ 场景下是准确的。后续如需精确,可加 `forgottenAt` 字段。
21
+ *
22
+ * @module @co-engram/core/dreaming
23
+ */
24
+ import type { EngramRepository } from "../storage/repository.js";
25
+ import type { AuditLog } from "../observability/audit-log.js";
26
+ /** Trash 配置 */
27
+ export interface TrashOptions {
28
+ /** 当前时间(测试用),默认 new Date() */
29
+ readonly nowIso?: string;
30
+ /** forgotten 后多少天才进入回收站(默认 30 天) */
31
+ readonly afterDays?: number;
32
+ /** 回收站中多少天后物理删除(默认 365 天);0 或负数表示永不删除 */
33
+ readonly purgeAfterDays?: number;
34
+ /** 只读模式:只计算不落盘 */
35
+ readonly dryRun?: boolean;
36
+ /** 可选审计日志:sweep/restore/purge 时自动记录 */
37
+ readonly auditLog?: AuditLog;
38
+ }
39
+ /** 单次 sweep 结果 */
40
+ export interface TrashSweepResult {
41
+ /** 扫描的 forgotten engram 数 */
42
+ readonly scanned: number;
43
+ /** 已移入回收站的 id 列表 */
44
+ readonly trashed: string[];
45
+ /** 已从回收站物理删除的 id 列表(purge 阶段) */
46
+ readonly purged: string[];
47
+ /** 跳过的 id → 原因 */
48
+ readonly skipped: Array<{
49
+ id: string;
50
+ reason: string;
51
+ }>;
52
+ }
53
+ /** Trash 根目录名(相对仓库根) */
54
+ export declare const TRASH_DIR_NAME = ".trash";
55
+ /** 默认进入回收站阈值:forgotten 后 30 天 */
56
+ export declare const DEFAULT_TRASH_AFTER_DAYS = 30;
57
+ /** 默认物理删除阈值:进入回收站后 365 天 */
58
+ export declare const DEFAULT_TRASH_PURGE_AFTER_DAYS = 365;
59
+ /**
60
+ * 计算某个月份分区名(YYYY-MM)
61
+ *
62
+ * 使用 UTC 以避免本地时区在跨日边界的不一致。
63
+ */
64
+ export declare function formatTrashPartition(date: Date): string;
65
+ /**
66
+ * 计算 engram 在 trash 分区下的相对路径
67
+ *
68
+ * 输入:原 engram 相对路径(如 "testing/adb/foo.md"),分区名 "2026-06"
69
+ * 输出:".trash/2026-06/testing/adb/foo.md"
70
+ *
71
+ * 注:trash 下不再分 content/meta/synapses 子目录(单文件布局)。
72
+ */
73
+ export declare function deriveTrashFilePath(relativePath: string, partition: string): string;
74
+ /** 旧版三路径 API(兼容调用方/测试):派生 trash 下的镜像路径 */
75
+ export declare function deriveTrashFilePaths(relativePath: string, partition: string): {
76
+ content: string;
77
+ meta: string;
78
+ synapses: string;
79
+ };
80
+ /**
81
+ * 执行 trash sweep
82
+ *
83
+ * 流程:
84
+ * 1. 扫描所有 engram,过滤出 status=forgotten
85
+ * 2. 对每个 forgotten engram,读文件 mtime,判断是否 ≥ afterDays
86
+ * 3. 满足条件 → 计算分区(按当前时间)→ 移动单文件到 .trash/<partition>/<relativePath>
87
+ * 4. (可选)扫描 .trash/ 中已存在且 ≥ purgeAfterDays 的分区,物理删除
88
+ *
89
+ * 安全保证:
90
+ * - 目标路径已存在时跳过(避免覆盖)
91
+ * - 移动失败时记录到 skipped,不抛
92
+ */
93
+ export declare function sweepToTrash(repo: EngramRepository, options?: TrashOptions): TrashSweepResult;
94
+ /**
95
+ * 列出 trash 中的所有 engram(跨分区)
96
+ *
97
+ * 用于 restore 工具的"查询接口"和排查。
98
+ */
99
+ export interface TrashedEngram {
100
+ /** 原 engram id */
101
+ readonly id: string;
102
+ /** 所在分区(YYYY-MM) */
103
+ readonly partition: string;
104
+ /** 在 trash 中的绝对路径(.md 文件) */
105
+ readonly contentPath: string;
106
+ /** 进入 trash 的时间(分区目录 mtime) */
107
+ readonly trashedAt: string;
108
+ }
109
+ export declare function listTrashed(repo: EngramRepository): TrashedEngram[];
110
+ /**
111
+ * 在 trash 中查找指定 id 的 engram
112
+ */
113
+ export declare function findTrashed(repo: EngramRepository, engramId: string): TrashedEngram | null;
114
+ /**
115
+ * 一键清空回收站(永久删除)
116
+ *
117
+ * 与 sweepToTrash 内部的 purgeExpiredTrash 不同,本函数:
118
+ * - 不按时间过滤,而是清掉所有(或指定 partition)的 trashed engram
119
+ * - 由用户在 UI 显式触发,审计日志记 actor='user'(非 system)
120
+ * - 同步审计:每条删除写一条 action='purge' 审计
121
+ *
122
+ * 安全策略:
123
+ * - dryRun=true 时只计算 purged id,不真正删除
124
+ * - partition 未传 → 清所有分区
125
+ * - partition 传入但不存在 → 返回空(不抛)
126
+ *
127
+ * @returns purged id 列表(按字典序)
128
+ */
129
+ export declare function purgeAllTrash(repo: EngramRepository, options?: {
130
+ /** 仅清空指定分区(YYYY-MM);不传则清所有分区 */
131
+ readonly partition?: string;
132
+ /** 只读模式:只返回会删的 id,不真正删除 */
133
+ readonly dryRun?: boolean;
134
+ /** 可选审计日志 */
135
+ readonly auditLog?: AuditLog;
136
+ /** 审计行为者(默认 'user',因为是用户在 UI 触发) */
137
+ readonly actor?: "user" | "llm" | "system";
138
+ }): {
139
+ purged: readonly string[];
140
+ partitionsRemoved: readonly string[];
141
+ };
142
+ /**
143
+ * 读取 trash 中某个 engram 的完整内容(供 UI 预览)
144
+ *
145
+ * 返回 frontmatter + body,以及 partition / trashedAt 元信息。
146
+ * 不存在时返回 null(由调用方决定 404)。
147
+ */
148
+ export declare function readTrashed(repo: EngramRepository, engramId: string): {
149
+ readonly id: string;
150
+ readonly partition: string;
151
+ readonly trashedAt: string;
152
+ readonly frontmatter: Record<string, unknown>;
153
+ readonly content: string;
154
+ readonly contentPath: string;
155
+ } | null;
156
+ /**
157
+ * 从 trash 恢复 engram:物理移回原位 + status 切回 active
158
+ *
159
+ * 流程:
160
+ * 1. 在 .trash/ 中查找 id(可能跨多个分区)
161
+ * 2. 把单文件移回 <root>/<originalRelativePath>
162
+ * 3. repo.updateLifecycle(id, 'active', 'fresh') 重置检索状态
163
+ *
164
+ * 不抛:找不到返回 { ok: false, reason }。
165
+ */
166
+ export declare function restoreFromTrash(repo: EngramRepository, engramId: string, options?: {
167
+ readonly auditLog?: AuditLog;
168
+ }): {
169
+ ok: true;
170
+ } | {
171
+ ok: false;
172
+ reason: string;
173
+ };
174
+ //# sourceMappingURL=trash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trash.d.ts","sourceRoot":"","sources":["../../src/dreaming/trash.ts"],"names":[],"mappings":"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"}