@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 @@
1
+ {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/observability/audit-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * 有效性追踪器(Effectiveness Tracker)
3
+ *
4
+ * 管理 retrieve_hit 后的观察窗口,自动判定 retrieve_effective / retrieve_inconclusive。
5
+ *
6
+ * 流程:
7
+ * 1. engram_search 命中 → openWindow(engramId, kind, query)
8
+ * 2. 在窗口期内调 reinforceEngram → closeAsEffective(engramId)
9
+ * 3. light maintenance 阶段 → sweepExpired() 把超时窗口标记为 inconclusive
10
+ *
11
+ * 窗口长度按 engram kind 区分:
12
+ * - observation: 6h
13
+ * - fact: 24h(默认)
14
+ * - pattern: 48h
15
+ * - procedure: 48h
16
+ * - hypothesis: 7d
17
+ * 多 kind(engram.kinds) 取最长。
18
+ *
19
+ * 存储格式: $DATA_ROOT/.co-engram/observation-windows.jsonl
20
+ * 落盘原因: 进程重启不丢窗口;多 host 实例(Claude Code + OpenClaw)共享状态。
21
+ *
22
+ * 派生接口:
23
+ * - effectiveness(engramId) → EffectivenessReport
24
+ * 本 tracker 提供 hits/effective/inconclusive(从 windows 文件派生),
25
+ * contradicted 从注入的 auditLog 派生。
26
+ *
27
+ * @module @co-engram/core/observability
28
+ */
29
+ import type { EngramKind } from "../types/engram.js";
30
+ import type { AuditLog } from "./audit-log.js";
31
+ /** kind → 窗口长度(毫秒) */
32
+ export declare const DEFAULT_EFFECTIVENESS_WINDOWS: Readonly<Record<EngramKind, number>>;
33
+ /** 默认的最少命中次数门槛 */
34
+ export declare const DEFAULT_MIN_HITS = 3;
35
+ /** 某 engram 的有效率统计 */
36
+ export interface EffectivenessReport {
37
+ /** retrieve_hit 总次数(从 windows 文件读所有状态记录计数) */
38
+ readonly hits: number;
39
+ /** retrieve_effective 次数(从 windows 读 closed_by_reinforce) */
40
+ readonly effective: number;
41
+ /** retrieve_inconclusive 次数(从 windows 读 closed_by_timeout) */
42
+ readonly inconclusive: number;
43
+ /** contradicted 次数(从 audit 读) */
44
+ readonly contradicted: number;
45
+ /**
46
+ * 有效率:[0, 1] 或 null(数据不足)
47
+ *
48
+ * 公式: effective / (effective + inconclusive + contradicted)
49
+ * - inconclusive 进分母但不进分子(算半负面信号)
50
+ * - contradicted 不额外加权
51
+ * - hits < minHits(默认 3) → 返回 null
52
+ */
53
+ readonly effectiveRate: number | null;
54
+ }
55
+ /** 单个观察窗口记录 */
56
+ export interface ObservationWindow {
57
+ /** 唯一 ID(randomUUID) */
58
+ readonly id: string;
59
+ /** 被检索命中的 engram id */
60
+ readonly engramId: string;
61
+ /** 检索查询(便于后续元学习) */
62
+ readonly query: string;
63
+ /** 命中时的分数 */
64
+ readonly score: number;
65
+ /** 命中时间(ISO) */
66
+ readonly hitAt: string;
67
+ /** 窗口截止时间(ISO) */
68
+ readonly deadline: string;
69
+ /** 该 engram 的 kind(决定窗口长度) */
70
+ readonly kind: EngramKind;
71
+ /** 会话 ID */
72
+ readonly sessionId?: string;
73
+ /** 状态:open / closed_by_reinforce / closed_by_failure / closed_by_timeout */
74
+ readonly status: "open" | "closed_by_reinforce" | "closed_by_failure" | "closed_by_timeout";
75
+ }
76
+ /**
77
+ * 计算给定 kinds 的窗口长度(取最长)
78
+ *
79
+ * 多 kind engram 取 max——任何维度未闭环都不算"完成"。
80
+ */
81
+ export declare function computeWindowMs(kinds: readonly EngramKind[], overrides?: Partial<Readonly<Record<EngramKind, number>>>): number;
82
+ /** sweepExpired 结果 */
83
+ export interface SweepResult {
84
+ /** 关闭的窗口数 */
85
+ readonly closed: number;
86
+ /** 关闭的 engram id 列表(去重) */
87
+ readonly engramIds: readonly string[];
88
+ }
89
+ /**
90
+ * 有效性追踪器
91
+ *
92
+ * 不抛:所有写操作 fire-and-forget。
93
+ */
94
+ export declare class EffectivenessTracker {
95
+ private readonly filePath;
96
+ private readonly auditLog;
97
+ private readonly windowsByKind?;
98
+ constructor(dataRoot: string, auditLog: AuditLog, options?: {
99
+ windowsByKind?: Partial<Readonly<Record<EngramKind, number>>>;
100
+ });
101
+ /**
102
+ * 开观察窗口(engram_search 命中时调)
103
+ *
104
+ * 同一 engram 同时只允许有一个 open 窗口——重复命中时刷新 deadline。
105
+ */
106
+ openWindow(input: {
107
+ readonly engramId: string;
108
+ readonly query: string;
109
+ readonly score: number;
110
+ readonly kinds: readonly EngramKind[];
111
+ readonly sessionId?: string;
112
+ readonly nowIso?: string;
113
+ }): ObservationWindow;
114
+ /**
115
+ * 标记某 engram 的最近 open 窗口为 effective(engram_reinforce 时调)
116
+ *
117
+ * @returns true 如果找到并关闭了一个 open 窗口
118
+ */
119
+ closeAsEffective(engramId: string, nowIso?: string): boolean;
120
+ /**
121
+ * 标记某 engram 的最近 open 窗口为 failure(engram_report_failure 时调)
122
+ *
123
+ * 失败已通过 report_failure audit 单独记录,这里仅关闭窗口避免后续触发 inconclusive。
124
+ */
125
+ closeAsFailure(engramId: string, nowIso?: string): boolean;
126
+ /**
127
+ * 扫描超时窗口,写 retrieve_inconclusive + 关闭
128
+ *
129
+ * 在 maintenance engine light 阶段调用。
130
+ */
131
+ sweepExpired(nowIso?: string): SweepResult;
132
+ /** 列出当前所有 open 窗口(调试/Viewer 用) */
133
+ listOpen(): readonly ObservationWindow[];
134
+ /**
135
+ * 派生某 engram 的有效率统计
136
+ *
137
+ * 数据源:
138
+ * - hits/effective/inconclusive:从 observation-windows.jsonl 派生
139
+ * · hits = 所有该 engram 的窗口记录数(每次 retrieve_hit 都开一个窗口)
140
+ * · effective = closed_by_reinforce 状态计数
141
+ * · inconclusive = closed_by_timeout 状态计数
142
+ * - contradicted:从 audit.jsonl 派生(只有 audit 记录这种事件)
143
+ *
144
+ * hits < minHits(默认 3) → effectiveRate = null
145
+ *
146
+ * 与历史版本的差异:不再从 audit 读 retrieve_* 事件,因为它们每条对话消息
147
+ * 都可能产生,噪音太大。window 文件已经包含完整的 hits/effective/inconclusive
148
+ * 状态,effectiveness 公式精度保留。
149
+ */
150
+ effectiveness(engramId: string, options?: {
151
+ readonly minHits?: number;
152
+ }): EffectivenessReport;
153
+ /** 文件绝对路径 */
154
+ get path(): string;
155
+ /** 清空所有记录(测试用) */
156
+ clear(): void;
157
+ private closeExisting;
158
+ private readAll;
159
+ private writeAll;
160
+ private appendRecord;
161
+ }
162
+ //# sourceMappingURL=effectiveness-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectiveness-tracker.d.ts","sourceRoot":"","sources":["../../src/observability/effectiveness-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * 有效性追踪器(Effectiveness Tracker)
3
+ *
4
+ * 管理 retrieve_hit 后的观察窗口,自动判定 retrieve_effective / retrieve_inconclusive。
5
+ *
6
+ * 流程:
7
+ * 1. engram_search 命中 → openWindow(engramId, kind, query)
8
+ * 2. 在窗口期内调 reinforceEngram → closeAsEffective(engramId)
9
+ * 3. light maintenance 阶段 → sweepExpired() 把超时窗口标记为 inconclusive
10
+ *
11
+ * 窗口长度按 engram kind 区分:
12
+ * - observation: 6h
13
+ * - fact: 24h(默认)
14
+ * - pattern: 48h
15
+ * - procedure: 48h
16
+ * - hypothesis: 7d
17
+ * 多 kind(engram.kinds) 取最长。
18
+ *
19
+ * 存储格式: $DATA_ROOT/.co-engram/observation-windows.jsonl
20
+ * 落盘原因: 进程重启不丢窗口;多 host 实例(Claude Code + OpenClaw)共享状态。
21
+ *
22
+ * 派生接口:
23
+ * - effectiveness(engramId) → EffectivenessReport
24
+ * 本 tracker 提供 hits/effective/inconclusive(从 windows 文件派生),
25
+ * contradicted 从注入的 auditLog 派生。
26
+ *
27
+ * @module @co-engram/core/observability
28
+ */
29
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
30
+ import { dirname, join } from "node:path";
31
+ /** kind → 窗口长度(毫秒) */
32
+ export const DEFAULT_EFFECTIVENESS_WINDOWS = {
33
+ observation: 6 * 60 * 60 * 1000, // 6h
34
+ fact: 24 * 60 * 60 * 1000, // 24h
35
+ pattern: 48 * 60 * 60 * 1000, // 48h
36
+ procedure: 48 * 60 * 60 * 1000, // 48h
37
+ hypothesis: 7 * 24 * 60 * 60 * 1000, // 7d
38
+ };
39
+ /** 默认的最少命中次数门槛 */
40
+ export const DEFAULT_MIN_HITS = 3;
41
+ /**
42
+ * 计算给定 kinds 的窗口长度(取最长)
43
+ *
44
+ * 多 kind engram 取 max——任何维度未闭环都不算"完成"。
45
+ */
46
+ export function computeWindowMs(kinds, overrides) {
47
+ if (kinds.length === 0) {
48
+ return DEFAULT_EFFECTIVENESS_WINDOWS.fact;
49
+ }
50
+ return Math.max(...kinds.map((k) => overrides?.[k] ?? DEFAULT_EFFECTIVENESS_WINDOWS[k]));
51
+ }
52
+ /**
53
+ * 有效性追踪器
54
+ *
55
+ * 不抛:所有写操作 fire-and-forget。
56
+ */
57
+ export class EffectivenessTracker {
58
+ filePath;
59
+ auditLog;
60
+ windowsByKind;
61
+ constructor(dataRoot, auditLog, options = {}) {
62
+ this.filePath = join(dataRoot, ".co-engram", "observation-windows.jsonl");
63
+ this.auditLog = auditLog;
64
+ this.windowsByKind = options.windowsByKind;
65
+ }
66
+ /**
67
+ * 开观察窗口(engram_search 命中时调)
68
+ *
69
+ * 同一 engram 同时只允许有一个 open 窗口——重复命中时刷新 deadline。
70
+ */
71
+ openWindow(input) {
72
+ const now = input.nowIso ?? new Date().toISOString();
73
+ const windowMs = computeWindowMs(input.kinds, this.windowsByKind);
74
+ const deadline = new Date(new Date(now).getTime() + windowMs).toISOString();
75
+ // 关闭可能存在的 open 窗口(替换语义)
76
+ this.closeExisting(input.engramId, "closed_by_timeout", now,
77
+ /* silent */ true);
78
+ const win = {
79
+ id: randomId(),
80
+ engramId: input.engramId,
81
+ query: input.query,
82
+ score: input.score,
83
+ hitAt: now,
84
+ deadline,
85
+ kind: input.kinds[0] ?? "fact",
86
+ sessionId: input.sessionId,
87
+ status: "open",
88
+ };
89
+ this.appendRecord(win);
90
+ // 不写 audit:window 文件已经记录了 hit,effectiveness() 从 windows 派生。
91
+ // 写 retrieve_hit audit 会让 audit.jsonl 被检索事件淹没。
92
+ return win;
93
+ }
94
+ /**
95
+ * 标记某 engram 的最近 open 窗口为 effective(engram_reinforce 时调)
96
+ *
97
+ * @returns true 如果找到并关闭了一个 open 窗口
98
+ */
99
+ closeAsEffective(engramId, nowIso) {
100
+ return this.closeExisting(engramId, "closed_by_reinforce", nowIso,
101
+ /* silent */ false);
102
+ }
103
+ /**
104
+ * 标记某 engram 的最近 open 窗口为 failure(engram_report_failure 时调)
105
+ *
106
+ * 失败已通过 report_failure audit 单独记录,这里仅关闭窗口避免后续触发 inconclusive。
107
+ */
108
+ closeAsFailure(engramId, nowIso) {
109
+ return this.closeExisting(engramId, "closed_by_failure", nowIso,
110
+ /* silent */ true);
111
+ }
112
+ /**
113
+ * 扫描超时窗口,写 retrieve_inconclusive + 关闭
114
+ *
115
+ * 在 maintenance engine light 阶段调用。
116
+ */
117
+ sweepExpired(nowIso) {
118
+ const now = nowIso ?? new Date().toISOString();
119
+ const records = this.readAll();
120
+ const closedIds = new Set();
121
+ let closed = 0;
122
+ const updated = records.map((r) => {
123
+ if (r.status === "open" && r.deadline <= now) {
124
+ closed += 1;
125
+ closedIds.add(r.engramId);
126
+ // 不写 audit:window 文件已经记录了 closed_by_timeout 状态,
127
+ // effectiveness() 从 windows 派生 inconclusive 计数。
128
+ return { ...r, status: "closed_by_timeout" };
129
+ }
130
+ return r;
131
+ });
132
+ if (closed > 0) {
133
+ this.writeAll(updated);
134
+ }
135
+ return { closed, engramIds: [...closedIds] };
136
+ }
137
+ /** 列出当前所有 open 窗口(调试/Viewer 用) */
138
+ listOpen() {
139
+ return this.readAll().filter((r) => r.status === "open");
140
+ }
141
+ /**
142
+ * 派生某 engram 的有效率统计
143
+ *
144
+ * 数据源:
145
+ * - hits/effective/inconclusive:从 observation-windows.jsonl 派生
146
+ * · hits = 所有该 engram 的窗口记录数(每次 retrieve_hit 都开一个窗口)
147
+ * · effective = closed_by_reinforce 状态计数
148
+ * · inconclusive = closed_by_timeout 状态计数
149
+ * - contradicted:从 audit.jsonl 派生(只有 audit 记录这种事件)
150
+ *
151
+ * hits < minHits(默认 3) → effectiveRate = null
152
+ *
153
+ * 与历史版本的差异:不再从 audit 读 retrieve_* 事件,因为它们每条对话消息
154
+ * 都可能产生,噪音太大。window 文件已经包含完整的 hits/effective/inconclusive
155
+ * 状态,effectiveness 公式精度保留。
156
+ */
157
+ effectiveness(engramId, options = {}) {
158
+ const minHits = options.minHits ?? DEFAULT_MIN_HITS;
159
+ const oneYearAgo = new Date(Date.now() - 365 * 24 * 60 * 60 * 1000).toISOString();
160
+ const records = this.readAll().filter((r) => r.engramId === engramId && r.hitAt >= oneYearAgo);
161
+ const hits = records.length;
162
+ const effective = records.filter((r) => r.status === "closed_by_reinforce").length;
163
+ const inconclusive = records.filter((r) => r.status === "closed_by_timeout").length;
164
+ // contradicted 从 audit 派生(只有 audit 记录这种事件)
165
+ const contradicted = this.auditLog.query({
166
+ engramId,
167
+ action: "contradicted",
168
+ since: oneYearAgo,
169
+ limit: 100000,
170
+ }).length;
171
+ const denominator = effective + inconclusive + contradicted;
172
+ const effectiveRate = hits < minHits || denominator === 0 ? null : effective / denominator;
173
+ return { hits, effective, inconclusive, contradicted, effectiveRate };
174
+ }
175
+ /** 文件绝对路径 */
176
+ get path() {
177
+ return this.filePath;
178
+ }
179
+ /** 清空所有记录(测试用) */
180
+ clear() {
181
+ if (existsSync(this.filePath)) {
182
+ writeFileSync(this.filePath, "", "utf8");
183
+ }
184
+ }
185
+ // ============================================================
186
+ // 内部
187
+ // ============================================================
188
+ closeExisting(engramId, newStatus, nowIso, silent) {
189
+ const now = nowIso ?? new Date().toISOString();
190
+ const records = this.readAll();
191
+ // 从尾部往前找最近的 open 窗口
192
+ let foundIdx = -1;
193
+ for (let i = records.length - 1; i >= 0; i--) {
194
+ if (records[i].engramId === engramId && records[i].status === "open") {
195
+ foundIdx = i;
196
+ break;
197
+ }
198
+ }
199
+ if (foundIdx === -1)
200
+ return false;
201
+ const target = records[foundIdx];
202
+ records[foundIdx] = { ...target, status: newStatus };
203
+ this.writeAll(records);
204
+ // 不写 audit:window 文件已经记录了 closed_by_reinforce 状态,
205
+ // effectiveness() 从 windows 派生 effective 计数。
206
+ // silent=true(failure 关闭)时本来也不写 audit。
207
+ return true;
208
+ }
209
+ readAll() {
210
+ if (!existsSync(this.filePath))
211
+ return [];
212
+ const raw = readFileSync(this.filePath, "utf8");
213
+ return raw
214
+ .split("\n")
215
+ .filter((line) => line.trim().length > 0)
216
+ .map((line) => {
217
+ try {
218
+ return JSON.parse(line);
219
+ }
220
+ catch {
221
+ return null;
222
+ }
223
+ })
224
+ .filter((r) => r !== null);
225
+ }
226
+ writeAll(records) {
227
+ const dir = dirname(this.filePath);
228
+ if (!existsSync(dir)) {
229
+ mkdirSync(dir, { recursive: true });
230
+ }
231
+ const content = records.map((r) => JSON.stringify(r)).join("\n") + "\n";
232
+ writeFileSync(this.filePath, content, "utf8");
233
+ }
234
+ appendRecord(record) {
235
+ try {
236
+ const dir = dirname(this.filePath);
237
+ if (!existsSync(dir)) {
238
+ mkdirSync(dir, { recursive: true });
239
+ }
240
+ appendFileSync(this.filePath, `${JSON.stringify(record)}\n`, "utf8");
241
+ }
242
+ catch {
243
+ // intentional
244
+ }
245
+ }
246
+ }
247
+ /** 简易 ID 生成(避免引入 crypto 在测试中产生不同 UUID) */
248
+ function randomId() {
249
+ return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
250
+ }
251
+ //# sourceMappingURL=effectiveness-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectiveness-tracker.js","sourceRoot":"","sources":["../../src/observability/effectiveness-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Observability barrel
3
+ *
4
+ * 四大组件:
5
+ * - AuditLog 记录状态变更 + 有效性信号(append-only jsonl)
6
+ * - EffectivenessTracker 管理 retrieve_hit 后的观察窗口
7
+ * - NecessityEvaluator proposal 必要性评估(Layer 2)
8
+ * - ProposalEngine 主题聚类 + 候选提示
9
+ *
10
+ * @module @co-engram/core/observability
11
+ */
12
+ export * from "./audit-log.js";
13
+ export * from "./effectiveness-tracker.js";
14
+ export * from "./necessity-evaluator.js";
15
+ export * from "./proposal-engine.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Observability barrel
3
+ *
4
+ * 四大组件:
5
+ * - AuditLog 记录状态变更 + 有效性信号(append-only jsonl)
6
+ * - EffectivenessTracker 管理 retrieve_hit 后的观察窗口
7
+ * - NecessityEvaluator proposal 必要性评估(Layer 2)
8
+ * - ProposalEngine 主题聚类 + 候选提示
9
+ *
10
+ * @module @co-engram/core/observability
11
+ */
12
+ export * from "./audit-log.js";
13
+ export * from "./effectiveness-tracker.js";
14
+ export * from "./necessity-evaluator.js";
15
+ export * from "./proposal-engine.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * 必要性评估器(Necessity Evaluator)
3
+ *
4
+ * 在 cluster 晋升 proposal 前,判断"这个反复出现的话题是否值得固化为团队记忆"。
5
+ * 设计参考 flexmem 的 task 层 `shouldSkipSummary`(8 条规则)+ mem0 的"重要性
6
+ * 判断交给 extraction LLM,filter 层只过滤明显垃圾"的分工哲学。
7
+ *
8
+ * 两层设计:
9
+ * - Layer 1(proposal-engine.observe 入口):规则预过滤,零成本挡机械噪声
10
+ * - Layer 2(proposal-engine.maybePromoteToProposal):必要性评估
11
+ * - 默认 RuleBasedNecessityEvaluator(零依赖,挡 80% 低质量提案)
12
+ * - host 可注入 LlmNecessityEvaluator(用 LLM 判断语义必要性)
13
+ *
14
+ * core 不绑定 LLM provider,通过 LlmClient 接口抽象;host 自行实现具体适配器
15
+ * (Anthropic / OpenAI-compatible / 本地模型)。
16
+ *
17
+ * @module @co-engram/core/observability
18
+ */
19
+ /**
20
+ * Provider-agnostic LLM 调用接口
21
+ *
22
+ * host 实现具体适配器:
23
+ * - claude-code-mcp:Anthropic API
24
+ * - openclaw-plugin:OpenAI-compatible endpoint(可读 ~/.openclaw/openclaw.json)
25
+ */
26
+ export interface LlmClient {
27
+ /**
28
+ * 同步完成一次 LLM 调用,返回生成的文本
29
+ *
30
+ * 实现需保证:
31
+ * - 失败时抛错(由调用方决定 fallback)
32
+ * - 不在内部 catch(LlmNecessityEvaluator 需感知失败以触发 fallback)
33
+ */
34
+ complete(prompt: string, opts?: {
35
+ readonly maxTokens?: number;
36
+ readonly temperature?: number;
37
+ readonly timeoutMs?: number;
38
+ }): Promise<string>;
39
+ }
40
+ /** 评估输入 */
41
+ export interface NecessityInput {
42
+ /** cluster 累积的样本(已截断为短字符串,最多 maxSamples 条) */
43
+ readonly samples: readonly string[];
44
+ /** 累积次数 */
45
+ readonly occurrences: number;
46
+ /** 首次见到时间 ISO */
47
+ readonly firstSeenAt: string;
48
+ /** 最后见到时间 ISO */
49
+ readonly lastSeenAt: string;
50
+ /** 已有 engram 标题(用于重复检测提示,可选) */
51
+ readonly existingTitles: readonly string[];
52
+ }
53
+ /** 评估结果 */
54
+ export interface NecessityVerdict {
55
+ /** 是否值得固化为团队记忆 */
56
+ readonly necessary: boolean;
57
+ /** 理由(展示给用户看,帮助审批决策) */
58
+ readonly reason: string;
59
+ /** 触发的规则名(规则版填充,如 'high_repetition'/'too_short';LLM 版留空) */
60
+ readonly rule?: string;
61
+ /** LLM 建议的标题(LLM 版填充,作为用户审批时的草稿) */
62
+ readonly suggestedTitle?: string;
63
+ }
64
+ /** 评估器接口 */
65
+ export interface NecessityEvaluator {
66
+ evaluate(input: NecessityInput): Promise<NecessityVerdict>;
67
+ }
68
+ /** 预过滤结果 */
69
+ export interface PrefilterVerdict {
70
+ readonly accepted: boolean;
71
+ readonly rule?: string;
72
+ readonly reason?: string;
73
+ }
74
+ /**
75
+ * 判断消息是否由 trivial 词主导(占比 > 60%)
76
+ *
77
+ * 用于 Layer 1 入口和 Layer 2 cluster 评估
78
+ */
79
+ export declare function isTrivialDominated(content: string, threshold?: number): boolean;
80
+ /**
81
+ * Layer 1 预过滤单条消息
82
+ *
83
+ * @param content 消息原文
84
+ * @param role 消息角色(user/assistant/system)
85
+ * @returns accepted=true 通过;accepted=false 时 rule/reason 标明拒绝原因
86
+ */
87
+ export declare function prefilterMessage(content: string, role: "user" | "assistant" | "system"): PrefilterVerdict;
88
+ /**
89
+ * 规则版必要性评估器
90
+ *
91
+ * 在 cluster 累积到 threshold 后,从 samples/occurrences 判断是否值得提案。
92
+ * 规则参考 flexmem `shouldSkipSummary`,适配 co-engram 单层 proposal 场景:
93
+ * - rule:high_repetition samples 内 uniqueRatio < 0.5(机械重复)
94
+ * - rule:few_unique_samples unique samples < 2(完全雷同)
95
+ * - rule:too_short 平均长度 < 30 chars
96
+ * - rule:low_density 平均有效 token < 5
97
+ * - rule:trivial_dominated 70%+ samples 命中 trivial 词表
98
+ *
99
+ * 全部通过 → necessary=true,reason="通过 N 条规则检查"
100
+ */
101
+ export declare class RuleBasedNecessityEvaluator implements NecessityEvaluator {
102
+ evaluate(input: NecessityInput): Promise<NecessityVerdict>;
103
+ }
104
+ /**
105
+ * LLM 版必要性评估器
106
+ *
107
+ * host 注入 LlmClient,core 不绑定 provider。
108
+ * LLM 失败时 fallback 到 RuleBasedNecessityEvaluator,保证可用性。
109
+ */
110
+ export declare class LlmNecessityEvaluator implements NecessityEvaluator {
111
+ private readonly client;
112
+ private readonly fallback;
113
+ constructor(client: LlmClient);
114
+ evaluate(input: NecessityInput): Promise<NecessityVerdict>;
115
+ }
116
+ //# sourceMappingURL=necessity-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"necessity-evaluator.d.ts","sourceRoot":"","sources":["../../src/observability/necessity-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GACA,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAMD,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,WAAW;IACX,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iBAAiB;IACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iBAAiB;IACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,WAAW;AACX,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,YAAY;AACZ,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC5D;AAiFD,YAAY;AACZ,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAO5E;AAqBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GACpC,gBAAgB,CAqDlB;AA+GD;;;;;;;;;;;;GAYG;AACH,qBAAa,2BAA4B,YAAW,kBAAkB;IAC9D,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAqEjE;AAoCD;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;IAGlD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAE1B,MAAM,EAAE,SAAS;IAIxC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAiDjE"}