@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,227 @@
1
+ /**
2
+ * 默认信号收集器实现
3
+ *
4
+ * - FileSignalSink:JSONL 文件持久化(生产用,路径默认 <dataRoot>/.co-engram/signals.jsonl)
5
+ * - MemorySignalSink:内存数组(测试用,断言方便)
6
+ *
7
+ * 设计:
8
+ * - append 只追加一行 JSON,不做 fsync(性能优先)
9
+ * - drain 读取整个文件 + 截断(O(n))
10
+ * - prune 读取 + 过滤 + 重写(O(n))
11
+ *
12
+ * 并发:单进程内 by-design 安全;多进程并发需要文件锁,留作 TODO(MVP 单进程场景够用)。
13
+ *
14
+ * @module @co-engram/core/signals
15
+ */
16
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
17
+ import { dirname, join } from "node:path";
18
+ /**
19
+ * 进程级 exit handler 注册表(单例)
20
+ *
21
+ * 每个 FileSignalSink 实例都需要在进程退出前 flush 一次,但若每个实例都调
22
+ * process.once('beforeExit' / 'exit'),创建 N 个 sink 就会注册 2N 个 listener,
23
+ * 超过 Node 默认的 maxListeners=10 → 触发 MaxListenersExceededWarning。
24
+ *
25
+ * 测试场景会频繁创建 sink(每个用例一个),生产场景通常只 1 个,所以警告主要
26
+ * 污染测试日志。但监听器膨胀本身就是泄漏 + 让人误以为有真问题。
27
+ *
28
+ * 解决:模块级单 Set 跟踪所有 active sinks,只注册一次 exit handler,handler
29
+ * 内部遍历所有 sinks 调 flushSync。WeakSet 自动 GC 回收后的 sink 不会泄漏。
30
+ */
31
+ const activeSinks = new Set();
32
+ let exitHandlerRegistered = false;
33
+ function registerGlobalExitHandlerOnce() {
34
+ if (exitHandlerRegistered)
35
+ return;
36
+ exitHandlerRegistered = true;
37
+ const handler = () => {
38
+ for (const sink of activeSinks) {
39
+ try {
40
+ sink.flushSync();
41
+ }
42
+ catch {
43
+ // ignore — best effort on exit
44
+ }
45
+ }
46
+ };
47
+ process.once("beforeExit", handler);
48
+ process.once("exit", handler);
49
+ }
50
+ /**
51
+ * JSONL 文件信号收集器
52
+ *
53
+ * 文件格式:每行一个 JSON object,字段对应 ToolCallEvent。
54
+ * drain() 会读取全部并截断文件;prune() 会保留最近 N ms 的事件。
55
+ */
56
+ export class FileSignalSink {
57
+ filePath;
58
+ buffer = [];
59
+ flushTimer = null;
60
+ flushIntervalMs;
61
+ flushThreshold;
62
+ constructor(options) {
63
+ this.filePath = options.filePath;
64
+ this.flushIntervalMs = options.flushIntervalMs ?? 5_000;
65
+ this.flushThreshold = options.flushThreshold ?? 50;
66
+ // 注册到全局 exit handler(只真正注册一次 process listener)
67
+ activeSinks.add(this);
68
+ registerGlobalExitHandlerOnce();
69
+ }
70
+ append(event) {
71
+ this.buffer.push(event);
72
+ if (this.buffer.length >= this.flushThreshold) {
73
+ void this.flush();
74
+ }
75
+ else if (this.flushTimer === null) {
76
+ this.flushTimer = setInterval(() => {
77
+ void this.flush();
78
+ }, this.flushIntervalMs);
79
+ this.flushTimer.unref?.();
80
+ }
81
+ }
82
+ drain() {
83
+ // 同步 flush 缓冲,再读取整个文件
84
+ this.flushSync();
85
+ if (!existsSync(this.filePath))
86
+ return [];
87
+ const raw = readFileSync(this.filePath, "utf8").trim();
88
+ if (raw === "")
89
+ return [];
90
+ const events = [];
91
+ for (const line of raw.split("\n")) {
92
+ const trimmed = line.trim();
93
+ if (!trimmed)
94
+ continue;
95
+ try {
96
+ events.push(JSON.parse(trimmed));
97
+ }
98
+ catch {
99
+ // 跳过损坏行(部分写入)
100
+ }
101
+ }
102
+ // 清空文件
103
+ writeFileSync(this.filePath, "", "utf8");
104
+ return events;
105
+ }
106
+ async prune(olderThanMs) {
107
+ const cutoff = Date.now() - olderThanMs;
108
+ const events = this.drain();
109
+ const kept = events.filter((e) => e.at >= cutoff);
110
+ if (kept.length === 0) {
111
+ if (existsSync(this.filePath))
112
+ writeFileSync(this.filePath, "", "utf8");
113
+ return;
114
+ }
115
+ const lines = kept.map((e) => JSON.stringify(e)).join("\n");
116
+ writeFileSync(this.filePath, lines + "\n", "utf8");
117
+ }
118
+ /** 显式 flush(测试或进程退出时调) */
119
+ async flush() {
120
+ this.flushSync();
121
+ }
122
+ /**
123
+ * 主动从 exit handler 注销(测试结束后清理)
124
+ *
125
+ * 不强制要求调用,但测试中创建大量 sink 时调用可避免 Set 无限增长
126
+ * (生产中只有 1 个 sink,生命周期 = 进程生命周期,无所谓)。
127
+ */
128
+ dispose() {
129
+ activeSinks.delete(this);
130
+ }
131
+ flushSync() {
132
+ if (this.buffer.length === 0)
133
+ return;
134
+ if (this.flushTimer !== null) {
135
+ clearInterval(this.flushTimer);
136
+ this.flushTimer = null;
137
+ }
138
+ const pending = this.buffer.splice(0, this.buffer.length);
139
+ const lines = pending.map((e) => JSON.stringify(e)).join("\n") + "\n";
140
+ // 追加模式打开,避免覆盖已有数据
141
+ const fd = openSync(this.filePath, "a");
142
+ try {
143
+ writeFileSync(fd, lines, "utf8");
144
+ }
145
+ finally {
146
+ closeSync(fd);
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * 内存信号收集器(测试用)
152
+ *
153
+ * drain() 返回当前缓冲并清空,但不涉及文件 IO。
154
+ */
155
+ export class MemorySignalSink {
156
+ events = [];
157
+ append(event) {
158
+ this.events.push(event);
159
+ }
160
+ drain() {
161
+ const drained = [...this.events];
162
+ this.events.length = 0;
163
+ return drained;
164
+ }
165
+ async prune(olderThanMs) {
166
+ const cutoff = Date.now() - olderThanMs;
167
+ const kept = this.events.filter((e) => e.at >= cutoff);
168
+ this.events.length = 0;
169
+ this.events.push(...kept);
170
+ }
171
+ /** 当前缓冲长度(不断言 drain 后的状态) */
172
+ get size() {
173
+ return this.events.length;
174
+ }
175
+ /** 查看当前缓冲(不消费) */
176
+ peek() {
177
+ return [...this.events];
178
+ }
179
+ }
180
+ /**
181
+ * 创建默认的 FileSignalSink(便捷工厂)
182
+ *
183
+ * 文件位置:`<dataRoot>/.co-engram/signals.jsonl`,与 audit.jsonl /
184
+ * proposals.jsonl / topic-clusters.jsonl / prompt-signals.json 等其它
185
+ * 状态文件保持一致。
186
+ *
187
+ * 历史遗留:0.x 版本曾写到 `<dataRoot>/signals.jsonl`(根目录),与其它状态
188
+ * 文件不在同一子目录,导致用户备份 `.co-engram/` 时会漏掉 signals。此处会
189
+ * 自动把根目录的旧文件迁移到新位置(只在首次创建 sink 时执行一次,代价极低)。
190
+ */
191
+ export function createDefaultSignalSink(dataRoot) {
192
+ const newPath = join(dataRoot, ".co-engram", "signals.jsonl");
193
+ migrateLegacySignalFile(dataRoot, newPath);
194
+ return new FileSignalSink({ filePath: newPath });
195
+ }
196
+ /** 把 `<dataRoot>/signals.jsonl`(老路径)迁移到 `newPath`,如果老文件存在。
197
+ * 幂等:新路径已存在时不覆盖;老文件不存在时 no-op。 */
198
+ function migrateLegacySignalFile(dataRoot, newPath) {
199
+ const legacyPath = join(dataRoot, "signals.jsonl");
200
+ if (!existsSync(legacyPath))
201
+ return;
202
+ // 新路径已存在:用户已经在新位置写过 → 不覆盖,只把老文件备份标识后留下
203
+ // (避免数据丢失;运维可以人工合并)
204
+ if (existsSync(newPath))
205
+ return;
206
+ try {
207
+ mkdirSync(dirname(newPath), { recursive: true });
208
+ renameSync(legacyPath, newPath);
209
+ }
210
+ catch {
211
+ // 迁移失败不阻塞 sink 创建;老文件依然可读,只是不一致
212
+ }
213
+ }
214
+ /** 仅用于测试:清空文件 */
215
+ export function resetFileSignalSink(sink) {
216
+ // 用反射读取私有 filePath
217
+ const filePath = sink.filePath;
218
+ if (existsSync(filePath)) {
219
+ try {
220
+ unlinkSync(filePath);
221
+ }
222
+ catch {
223
+ // ignore
224
+ }
225
+ }
226
+ }
227
+ //# sourceMappingURL=file-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-sink.js","sourceRoot":"","sources":["../../src/signals/file-sink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Signals 模块 barrel(P4 自动维护服务)
3
+ *
4
+ * 行为信号提取:从工具调用事件流推断 engram 的"真实效用",不依赖 agent 自律上报。
5
+ *
6
+ * @module @co-engram/core/signals
7
+ */
8
+ export * from "./types.js";
9
+ export * from "./file-sink.js";
10
+ export * from "./extract.js";
11
+ export * from "./rpe.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Signals 模块 barrel(P4 自动维护服务)
3
+ *
4
+ * 行为信号提取:从工具调用事件流推断 engram 的"真实效用",不依赖 agent 自律上报。
5
+ *
6
+ * @module @co-engram/core/signals
7
+ */
8
+ export * from "./types.js";
9
+ export * from "./file-sink.js";
10
+ export * from "./extract.js";
11
+ export * from "./rpe.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * RPE(Reward Prediction Error)有效性计算(P4 B)
3
+ *
4
+ * 人类多巴胺机制的工程化映射:
5
+ *
6
+ * effectiveness = actual - expected
7
+ *
8
+ * 其中:
9
+ * expected = 检索时算出的相关性分数(lastRetrievalScore,[0,1])
10
+ * actual = 该 engram 在后续工具调用流中收到的累积信号(signalWeight,[-1,1])
11
+ *
12
+ * effectiveness 为正 → 超预期(强化);为负 → 失望(衰减)。
13
+ *
14
+ * @module @co-engram/core/signals
15
+ */
16
+ import type { EngramRepository } from "../storage/repository.js";
17
+ /** RPE 输入 */
18
+ export interface RpeInput {
19
+ /** 检索时的相关性分数 [0,1],作为"预期值" */
20
+ readonly expected: number;
21
+ /** 累积行为信号 [-1,1],作为"实际值" */
22
+ readonly signalWeight: number;
23
+ /** 触发信号的次数(用于判断是否应更新) */
24
+ readonly signalCount: number;
25
+ }
26
+ /** 默认学习率(Δreinforcement 系数) */
27
+ export declare const DEFAULT_RPE_LEARNING_RATE = 0.1;
28
+ /** effectiveness 死区阈值:|eff| ≤ DEAD_ZONE 时不更新 */
29
+ export declare const RPE_DEAD_ZONE = 0.05;
30
+ /**
31
+ * 计算 RPE(不写库)
32
+ *
33
+ * - signalCount === 0 → 返回 0(无信号不更新)
34
+ * - actual = (clamp(signalWeight, -1, 1) + 1) / 2 // 归一化到 [0,1]
35
+ * - rpe = actual - expected // ∈ [-1, 1]
36
+ *
37
+ * @returns effectiveness ∈ [-1, 1]
38
+ */
39
+ export declare function computeRpe(input: RpeInput): number;
40
+ /**
41
+ * 应用一次 RPE 更新(写库)
42
+ *
43
+ * 根据 effectiveness 符号:
44
+ * eff > 0.05 → effectiveRetrievals += 1, reinforcementScore += eff * lr
45
+ * eff < -0.05 → failedUses += 1, reinforcementScore += eff * lr(负值,衰减)
46
+ * |eff| ≤ 0.05 → 中性,不更新
47
+ *
48
+ * 不触发 version++。
49
+ *
50
+ * @returns 更新详情(供审计/日志)
51
+ */
52
+ export declare function applyRpeUpdate(repo: EngramRepository, engramId: string, effectiveness: number, learningRate?: number): RpeUpdateResult;
53
+ /** RPE 应用结果 */
54
+ export interface RpeUpdateResult {
55
+ readonly engramId: string;
56
+ readonly effectiveness: number;
57
+ readonly action: "reinforced" | "penalized" | "neutral";
58
+ readonly delta: number;
59
+ }
60
+ //# sourceMappingURL=rpe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpe.d.ts","sourceRoot":"","sources":["../../src/signals/rpe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,aAAa;AACb,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yBAAyB;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,+BAA+B;AAC/B,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,gDAAgD;AAChD,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAMlD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,MAAkC,GAC/C,eAAe,CAqBjB;AAED,eAAe;AACf,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * RPE(Reward Prediction Error)有效性计算(P4 B)
3
+ *
4
+ * 人类多巴胺机制的工程化映射:
5
+ *
6
+ * effectiveness = actual - expected
7
+ *
8
+ * 其中:
9
+ * expected = 检索时算出的相关性分数(lastRetrievalScore,[0,1])
10
+ * actual = 该 engram 在后续工具调用流中收到的累积信号(signalWeight,[-1,1])
11
+ *
12
+ * effectiveness 为正 → 超预期(强化);为负 → 失望(衰减)。
13
+ *
14
+ * @module @co-engram/core/signals
15
+ */
16
+ /** 默认学习率(Δreinforcement 系数) */
17
+ export const DEFAULT_RPE_LEARNING_RATE = 0.1;
18
+ /** effectiveness 死区阈值:|eff| ≤ DEAD_ZONE 时不更新 */
19
+ export const RPE_DEAD_ZONE = 0.05;
20
+ /**
21
+ * 计算 RPE(不写库)
22
+ *
23
+ * - signalCount === 0 → 返回 0(无信号不更新)
24
+ * - actual = (clamp(signalWeight, -1, 1) + 1) / 2 // 归一化到 [0,1]
25
+ * - rpe = actual - expected // ∈ [-1, 1]
26
+ *
27
+ * @returns effectiveness ∈ [-1, 1]
28
+ */
29
+ export function computeRpe(input) {
30
+ if (input.signalCount === 0)
31
+ return 0;
32
+ const clampedSignal = Math.max(-1, Math.min(1, input.signalWeight));
33
+ const actual = (clampedSignal + 1) / 2;
34
+ const expected = Math.max(0, Math.min(1, input.expected));
35
+ return actual - expected;
36
+ }
37
+ /**
38
+ * 应用一次 RPE 更新(写库)
39
+ *
40
+ * 根据 effectiveness 符号:
41
+ * eff > 0.05 → effectiveRetrievals += 1, reinforcementScore += eff * lr
42
+ * eff < -0.05 → failedUses += 1, reinforcementScore += eff * lr(负值,衰减)
43
+ * |eff| ≤ 0.05 → 中性,不更新
44
+ *
45
+ * 不触发 version++。
46
+ *
47
+ * @returns 更新详情(供审计/日志)
48
+ */
49
+ export function applyRpeUpdate(repo, engramId, effectiveness, learningRate = DEFAULT_RPE_LEARNING_RATE) {
50
+ if (Math.abs(effectiveness) <= RPE_DEAD_ZONE) {
51
+ return { engramId, effectiveness, action: "neutral", delta: 0 };
52
+ }
53
+ const delta = effectiveness * learningRate;
54
+ if (effectiveness > 0) {
55
+ repo.bumpRetrievalStats(engramId, {
56
+ effectiveDelta: 1,
57
+ reinforcementDelta: delta,
58
+ lastEffectiveAt: new Date().toISOString(),
59
+ });
60
+ return { engramId, effectiveness, action: "reinforced", delta };
61
+ }
62
+ repo.bumpRetrievalStats(engramId, {
63
+ failedDelta: 1,
64
+ reinforcementDelta: delta,
65
+ });
66
+ return { engramId, effectiveness, action: "penalized", delta };
67
+ }
68
+ //# sourceMappingURL=rpe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpe.js","sourceRoot":"","sources":["../../src/signals/rpe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,gDAAgD;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,KAAe;IACxC,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAsB,EACtB,QAAgB,EAChB,aAAqB,EACrB,eAAuB,yBAAyB;IAEhD,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa,EAAE,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,GAAG,YAAY,CAAC;IAE3C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YAChC,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,KAAK;YACzB,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC1C,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QAChC,WAAW,EAAE,CAAC;QACd,kBAAkB,EAAE,KAAK;KAC1B,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 行为信号数据模型(P4 自动维护服务 A 层)
3
+ *
4
+ * 从工具调用事件流中提取 implicit behavioral signals,不依赖 agent 主动上报。
5
+ *
6
+ * 数据流:
7
+ * tools/*.execute → ctx.signalSink.append(ToolCallEvent)
8
+ * → signals.jsonl(JSONL, <dataRoot>/.co-engram/)
9
+ * engine.runLight → sink.drain() → extractSignals(events) → BehavioralSignal[]
10
+ *
11
+ * @module @co-engram/core/signals
12
+ */
13
+ /**
14
+ * 一次工具调用事件(recorded for later signal extraction)
15
+ *
16
+ * 写入时机:tools/wrapped.ts 包裹的 execute 在返回前 append。
17
+ * 写入是非阻塞的(fire-and-forget),失败不影响工具调用本身。
18
+ */
19
+ export interface ToolCallEvent {
20
+ /** 工具名(engram_get / engram_search / synapse_create ...) */
21
+ readonly toolName: string;
22
+ /** 工具入参(只保留可序列化字段) */
23
+ readonly input: Readonly<Record<string, unknown>>;
24
+ /** 输出摘要(避免把整个 engram content 塞进事件流) */
25
+ readonly outputSummary?: string;
26
+ /** 工具结果涉及的 engram id 列表(如 engram_get 的返回 id、engram_search 的 hits) */
27
+ readonly retrievedEngramIds?: readonly string[];
28
+ /** 会话 id(每次工具调用生成新 UUID;extract 用 sliding window 替代会话边界) */
29
+ readonly sessionId: string;
30
+ /** 触发时间(epoch ms) */
31
+ readonly at: number;
32
+ }
33
+ /**
34
+ * 行为信号(从 ToolCallEvent 流提取的"这条 engram 有多被信任/有用"的归一化打分)
35
+ *
36
+ * weight ∈ [-1, 1]:
37
+ * - 正值:engram 被认为有用(强正 ≥ 0.6、弱正 0.2-0.5)
38
+ * - 负值:engram 被认为失败/错误(强负 ≤ -0.6、弱负 -0.2 - -0.5)
39
+ * - 0:中性,通常不产生
40
+ */
41
+ export interface BehavioralSignal {
42
+ /** 关联的 engram id */
43
+ readonly engramId: string;
44
+ /** 权重 [-1, 1] */
45
+ readonly weight: number;
46
+ /** 来源规则名(extract.ts 的 Rule.name) */
47
+ readonly source: string;
48
+ /** 证据(用于审计:触发事件、窗口大小、命中字段等) */
49
+ readonly evidence: Readonly<Record<string, unknown>>;
50
+ /** 触发事件所属的 sessionId */
51
+ readonly sessionId: string;
52
+ /** 信号生成时间(epoch ms) */
53
+ readonly at: number;
54
+ }
55
+ /**
56
+ * 信号收集器接口
57
+ *
58
+ * 宿主负责实现,core 提供默认 FileSignalSink(JSONL) 和 MemorySignalSink(测试用)。
59
+ */
60
+ export interface SignalSink {
61
+ /**
62
+ * 追加一次工具调用事件
63
+ *
64
+ * 实现必须容忍失败(文件锁、磁盘满等),不应阻塞工具调用本身。
65
+ */
66
+ append(event: ToolCallEvent): Promise<void> | void;
67
+ /**
68
+ * 取出全部事件并清空内部缓冲
69
+ *
70
+ * 维护引擎 runLight 会调用此方法,拿到自上次维护以来的事件流。
71
+ */
72
+ drain(): readonly ToolCallEvent[];
73
+ /**
74
+ * 修剪过期事件
75
+ *
76
+ * 默认保留 7 天(runLight 末尾调用)。
77
+ */
78
+ prune(olderThanMs: number): Promise<void> | void;
79
+ }
80
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/signals/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,qEAAqE;IACrE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iBAAiB;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,wBAAwB;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEnD;;;;OAIG;IACH,KAAK,IAAI,SAAS,aAAa,EAAE,CAAC;IAElC;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAClD"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 行为信号数据模型(P4 自动维护服务 A 层)
3
+ *
4
+ * 从工具调用事件流中提取 implicit behavioral signals,不依赖 agent 主动上报。
5
+ *
6
+ * 数据流:
7
+ * tools/*.execute → ctx.signalSink.append(ToolCallEvent)
8
+ * → signals.jsonl(JSONL, <dataRoot>/.co-engram/)
9
+ * engine.runLight → sink.drain() → extractSignals(events) → BehavioralSignal[]
10
+ *
11
+ * @module @co-engram/core/signals
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/signals/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Engram Index — 派生缓存 {stableId → path/title/mtime/...}
3
+ *
4
+ * 设计见 docs/superpowers/specs/2026-06-22-per-edge-synapse-refactor-design.md。
5
+ *
6
+ * 文件位置:`.co-engram/engram-index.json`(gitignore)
7
+ * 用途:
8
+ * - doctor 增量扫描(mtime 比对)
9
+ * - repository 快速查 stableId → path
10
+ * - graph 派生
11
+ * - viewer 渲染
12
+ *
13
+ * @module @co-engram/core/storage
14
+ */
15
+ import type { StableEngramId, EngramIndexEntry } from "../types/repository-types.js";
16
+ import { type EngramFrontmatter } from "./engram-store.js";
17
+ /** .co-engram/ 顶层缓存目录名 */
18
+ export declare const CO_ENGRAM_CACHE_DIR = ".co-engram";
19
+ /** engram-index.json 文件名 */
20
+ export declare const ENGRAM_INDEX_FILENAME = "engram-index.json";
21
+ /** engram-index.json 完整路径 */
22
+ export declare function engramIndexPath(dataRoot: string): string;
23
+ /** 内存中的 index 结构(用 Map 加速查询) */
24
+ export interface EngramIndexMap {
25
+ readonly version: 1;
26
+ readonly entries: Map<StableEngramId, EngramIndexEntry>;
27
+ lastRebuiltAt: string;
28
+ }
29
+ /** 创建空 index */
30
+ export declare function createEmptyEngramIndex(): EngramIndexMap;
31
+ /**
32
+ * 从磁盘读取 index;不存在或损坏返回空 index。
33
+ */
34
+ export declare function readEngramIndex(dataRoot: string): EngramIndexMap;
35
+ /**
36
+ * 落盘 index(gitignore,但结构稳定以便人类 debug)。
37
+ */
38
+ export declare function writeEngramIndex(dataRoot: string, index: EngramIndexMap): void;
39
+ /**
40
+ * 从单条 engram 文件构建 index entry。
41
+ *
42
+ * - slug:frontmatter 显式则锁定,否则从 title slugify
43
+ * - domainTags:frontmatter 显式则锁定,否则从路径推断
44
+ * - mtime / contentHash 必须由调用者传入
45
+ */
46
+ export declare function buildIndexEntryFromFrontmatter(params: {
47
+ readonly relativePath: string;
48
+ readonly frontmatter: EngramFrontmatter;
49
+ readonly mtime: number;
50
+ readonly contentHash: string;
51
+ }): EngramIndexEntry;
52
+ /**
53
+ * 扫描 dataRoot 下所有 .md,构建 engram-index。
54
+ *
55
+ * 规则:
56
+ * - 跳过 SKIP_DIRECTORIES 中的目录(.co-engram, node_modules, .git, synapses)
57
+ * - 无 frontmatter 的 .md 跳过(由 doctor 报告为 orphan_markdown)
58
+ * - frontmatter 缺 id 的 .md 跳过(由 doctor 报告为 orphan_markdown)
59
+ */
60
+ export declare function rebuildEngramIndex(dataRoot: string, onOrphan?: (relativePath: string) => void): EngramIndexMap;
61
+ /**
62
+ * 增量更新:仅更新单条 engram 的 index entry。
63
+ */
64
+ export declare function upsertEngramIndexEntry(index: EngramIndexMap, entry: EngramIndexEntry): EngramIndexMap;
65
+ /**
66
+ * 从 index 中删除一条 engram。
67
+ */
68
+ export declare function removeEngramIndexEntry(index: EngramIndexMap, id: StableEngramId): boolean;
69
+ /**
70
+ * 按 path 查 stableId(用于 doctor 检测文件移动)。
71
+ */
72
+ export declare function findEngramIdByPath(index: EngramIndexMap, relativePath: string): StableEngramId | undefined;
73
+ //# sourceMappingURL=engram-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engram-index.d.ts","sourceRoot":"","sources":["../../src/storage/engram-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAaH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAEjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,4BAA4B;AAC5B,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAyBzD,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACxD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,gBAAgB;AAChB,wBAAgB,sBAAsB,IAAI,cAAc,CAMvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAwBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GACpB,IAAI,CAaN;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GAAG,gBAAgB,CA6BnB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,GACxC,cAAc,CAgDhB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,gBAAgB,GACtB,cAAc,CAGhB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EACrB,EAAE,EAAE,cAAc,GACjB,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,MAAM,GACnB,cAAc,GAAG,SAAS,CAK5B"}