@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,48 @@
1
+ /**
2
+ * LLM Triage(三态裁决)
3
+ *
4
+ * 接口:LlmTriageProvider(由宿主实现,绑定具体 LLM provider)
5
+ * 默认实现:LocalHeuristicTriage(启发式规则,无需 LLM)
6
+ *
7
+ * 启发式规则(P1 默认):
8
+ * 1. contentHash 完全匹配(sha256)→ DUPLICATE(confidence=1.0)
9
+ * 2. title 完全相同 + similarity ≥ titleMatchUpdateThreshold → UPDATE
10
+ * 3. similarity ≥ highSimilarityUpdateThreshold(无论 title)→ UPDATE
11
+ * 4. similarity ≥ newRelatedThreshold → NEW(标记可能相关,但不合并)
12
+ * 5. 其他 → NEW
13
+ *
14
+ * similarity 字段由 SimilarityEngine 给出(如 TokenJaccardSimilarityEngine),
15
+ * triage 信任引擎结果,不重新计算。
16
+ *
17
+ * 启发式适合 P1 测试和小规模数据;生产环境用 LlmTriageProvider
18
+ * 调用真正的 LLM 做语义判断。
19
+ *
20
+ * @module @co-engram/core/dedup
21
+ */
22
+ import type { LlmTriageProvider, TriageInput, TriageResult } from "./types.js";
23
+ /** 启发式 triage 阈值(可配置) */
24
+ export interface HeuristicThresholds {
25
+ /** title 完全相同 + similarity ≥ 此值 → UPDATE */
26
+ readonly titleMatchUpdateThreshold: number;
27
+ /** similarity ≥ 此值(无论 title)→ UPDATE */
28
+ readonly highSimilarityUpdateThreshold: number;
29
+ /** similarity ≥ 此值 → 至少考虑为 NEW(不合并) */
30
+ readonly newRelatedThreshold: number;
31
+ }
32
+ export declare const DEFAULT_THRESHOLDS: HeuristicThresholds;
33
+ /**
34
+ * 启发式 triage(不调用 LLM)
35
+ *
36
+ * 适合 P1 阶段测试和小规模数据;
37
+ * 当候选 < 5 且规则明确时,与 LLM 结果接近。
38
+ */
39
+ export declare class LocalHeuristicTriage implements LlmTriageProvider {
40
+ private readonly thresholds;
41
+ constructor(thresholds?: HeuristicThresholds);
42
+ triage(input: TriageInput): Promise<TriageResult>;
43
+ /**
44
+ * 同步版本:用于 engram_create 自动 dedupe
45
+ */
46
+ triageSync(input: TriageInput): TriageResult;
47
+ }
48
+ //# sourceMappingURL=llm-triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-triage.d.ts","sourceRoot":"","sources":["../../src/dedup/llm-triage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAEV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,uCAAuC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,kBAAkB,EAAE,mBAIhC,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,iBAAiB;IAE1D,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,GAAE,mBAAwC;IAGjE,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY;CAkE7C"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * LLM Triage(三态裁决)
3
+ *
4
+ * 接口:LlmTriageProvider(由宿主实现,绑定具体 LLM provider)
5
+ * 默认实现:LocalHeuristicTriage(启发式规则,无需 LLM)
6
+ *
7
+ * 启发式规则(P1 默认):
8
+ * 1. contentHash 完全匹配(sha256)→ DUPLICATE(confidence=1.0)
9
+ * 2. title 完全相同 + similarity ≥ titleMatchUpdateThreshold → UPDATE
10
+ * 3. similarity ≥ highSimilarityUpdateThreshold(无论 title)→ UPDATE
11
+ * 4. similarity ≥ newRelatedThreshold → NEW(标记可能相关,但不合并)
12
+ * 5. 其他 → NEW
13
+ *
14
+ * similarity 字段由 SimilarityEngine 给出(如 TokenJaccardSimilarityEngine),
15
+ * triage 信任引擎结果,不重新计算。
16
+ *
17
+ * 启发式适合 P1 测试和小规模数据;生产环境用 LlmTriageProvider
18
+ * 调用真正的 LLM 做语义判断。
19
+ *
20
+ * @module @co-engram/core/dedup
21
+ */
22
+ import { computeContentHash } from "../storage/hash.js";
23
+ export const DEFAULT_THRESHOLDS = {
24
+ titleMatchUpdateThreshold: 0.7,
25
+ highSimilarityUpdateThreshold: 0.85,
26
+ newRelatedThreshold: 0.5,
27
+ };
28
+ /**
29
+ * 启发式 triage(不调用 LLM)
30
+ *
31
+ * 适合 P1 阶段测试和小规模数据;
32
+ * 当候选 < 5 且规则明确时,与 LLM 结果接近。
33
+ */
34
+ export class LocalHeuristicTriage {
35
+ thresholds;
36
+ constructor(thresholds = DEFAULT_THRESHOLDS) {
37
+ this.thresholds = thresholds;
38
+ }
39
+ async triage(input) {
40
+ return this.triageSync(input);
41
+ }
42
+ /**
43
+ * 同步版本:用于 engram_create 自动 dedupe
44
+ */
45
+ triageSync(input) {
46
+ if (input.candidates.length === 0) {
47
+ return {
48
+ verdict: "NEW",
49
+ reason: "no candidates",
50
+ confidence: 1,
51
+ };
52
+ }
53
+ const newHash = computeContentHash(input.newContent);
54
+ let bestUpdate = null;
55
+ let bestRelated = null;
56
+ for (const candidate of input.candidates) {
57
+ // 1. hash 完全匹配 → DUPLICATE
58
+ if (newHash === candidate.contentHash) {
59
+ return {
60
+ verdict: "DUPLICATE",
61
+ duplicateOf: candidate.id,
62
+ reason: `exact contentHash match: ${candidate.contentHash}`,
63
+ confidence: 1,
64
+ };
65
+ }
66
+ const similarity = candidate.similarity;
67
+ const titleMatch = candidate.title === input.newTitle;
68
+ // 2/3. 判断 UPDATE 条件(信任引擎给出的 similarity)
69
+ const shouldUpdate = (titleMatch &&
70
+ similarity >= this.thresholds.titleMatchUpdateThreshold) ||
71
+ similarity >= this.thresholds.highSimilarityUpdateThreshold;
72
+ if (shouldUpdate && (!bestUpdate || similarity > bestUpdate.similarity)) {
73
+ bestUpdate = { candidate, similarity };
74
+ continue;
75
+ }
76
+ // 4. 记录可能相关(但不合并)
77
+ if (similarity >= this.thresholds.newRelatedThreshold) {
78
+ if (!bestRelated || similarity > bestRelated.similarity) {
79
+ bestRelated = { candidate, similarity };
80
+ }
81
+ }
82
+ }
83
+ if (bestUpdate) {
84
+ return {
85
+ verdict: "UPDATE",
86
+ updateTarget: bestUpdate.candidate.id,
87
+ reason: `similarity=${bestUpdate.similarity.toFixed(3)} title=${bestUpdate.candidate.title === input.newTitle ? "match" : "diff"}`,
88
+ confidence: bestUpdate.similarity,
89
+ };
90
+ }
91
+ return {
92
+ verdict: "NEW",
93
+ reason: bestRelated
94
+ ? `best related similarity=${bestRelated.similarity.toFixed(3)} below update threshold`
95
+ : "no candidate above update threshold",
96
+ confidence: 0.9,
97
+ };
98
+ }
99
+ }
100
+ //# sourceMappingURL=llm-triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-triage.js","sourceRoot":"","sources":["../../src/dedup/llm-triage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 合并路径(UPDATE)
3
+ *
4
+ * 当 triage 裁决 UPDATE 时,调用本模块合并新旧内容:
5
+ * - 用新内容覆盖旧 content
6
+ * - 保留旧 meta 中不可变字段(createdBy/createdAt)
7
+ * - version += 1
8
+ * - mergeHistory 追加一条记录
9
+ * - 更新 updatedAt / updatedBy
10
+ *
11
+ * 注意:本模块只做合并语义;具体落盘通过 repository.updateEngram。
12
+ *
13
+ * @module @co-engram/core/dedup
14
+ */
15
+ import type { EngramRepository } from "../storage/repository.js";
16
+ import type { MergeHistoryEntry } from "./types.js";
17
+ export interface MergeInput {
18
+ readonly id: string;
19
+ readonly newTitle?: string;
20
+ readonly newContent?: string;
21
+ readonly newSummary?: string;
22
+ readonly newImportance?: number;
23
+ readonly mergedBy: string;
24
+ readonly reason: string;
25
+ }
26
+ export interface MergeResult {
27
+ readonly id: string;
28
+ readonly version: number;
29
+ readonly mergeHistoryEntry: MergeHistoryEntry;
30
+ }
31
+ /**
32
+ * 合并 engram(UPDATE 路径)
33
+ *
34
+ * 流程:
35
+ * 1. 读旧 engram
36
+ * 2. 计算 fromHash / toHash
37
+ * 3. 用 updateEngram 写入新字段(version 自动 +1)
38
+ * 4. 在 meta.yaml 追加 mergeHistory(通过 updateMeta 单独写入)
39
+ */
40
+ export declare function mergeEngram(repo: EngramRepository, input: MergeInput): MergeResult;
41
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/dedup/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,UAAU,GAChB,WAAW,CAkCb"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * 合并路径(UPDATE)
3
+ *
4
+ * 当 triage 裁决 UPDATE 时,调用本模块合并新旧内容:
5
+ * - 用新内容覆盖旧 content
6
+ * - 保留旧 meta 中不可变字段(createdBy/createdAt)
7
+ * - version += 1
8
+ * - mergeHistory 追加一条记录
9
+ * - 更新 updatedAt / updatedBy
10
+ *
11
+ * 注意:本模块只做合并语义;具体落盘通过 repository.updateEngram。
12
+ *
13
+ * @module @co-engram/core/dedup
14
+ */
15
+ /**
16
+ * 合并 engram(UPDATE 路径)
17
+ *
18
+ * 流程:
19
+ * 1. 读旧 engram
20
+ * 2. 计算 fromHash / toHash
21
+ * 3. 用 updateEngram 写入新字段(version 自动 +1)
22
+ * 4. 在 meta.yaml 追加 mergeHistory(通过 updateMeta 单独写入)
23
+ */
24
+ export function mergeEngram(repo, input) {
25
+ if (!repo.exists(input.id)) {
26
+ throw new Error(`Engram not found: ${input.id}`);
27
+ }
28
+ const old = repo.readEngram(input.id);
29
+ const newContent = input.newContent ?? old.content;
30
+ // 1. 触发 updateEngram(version+1 + 字段更新)
31
+ const updated = repo.updateEngram(input.id, {
32
+ title: input.newTitle,
33
+ content: input.newContent,
34
+ summary: input.newSummary,
35
+ importance: input.newImportance,
36
+ updatedBy: input.mergedBy,
37
+ });
38
+ // 2. 构造 merge history entry
39
+ const entry = {
40
+ at: updated.updatedAt,
41
+ fromHash: old.contentHash,
42
+ toHash: updated.contentHash,
43
+ reason: input.reason,
44
+ mergedBy: input.mergedBy,
45
+ };
46
+ // 3. P1:mergeHistory 暂存在内存(不落盘)
47
+ // P2 会扩展 meta schema 加 mergeHistory 数组字段
48
+ // 目前通过 mergeEngram 返回值暴露给调用方,由上层决定如何持久化
49
+ return {
50
+ id: input.id,
51
+ version: updated.version,
52
+ mergeHistoryEntry: entry,
53
+ };
54
+ }
55
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/dedup/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqBH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,IAAsB,EACtB,KAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC;IAEnD,uCAAuC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE;QAC1C,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,UAAU,EAAE,KAAK,CAAC,aAAa;QAC/B,SAAS,EAAE,KAAK,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,KAAK,GAAsB;QAC/B,EAAE,EAAE,OAAO,CAAC,SAAS;QACrB,QAAQ,EAAE,GAAG,CAAC,WAAW;QACzB,MAAM,EAAE,OAAO,CAAC,WAAW;QAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,gCAAgC;IAChC,4CAA4C;IAC5C,wCAAwC;IAExC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,KAAK;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 相似度候选查找
3
+ *
4
+ * P1 实现:Token Jaccard 相似度(中英混合分词)
5
+ * P2 升级:向量余弦相似度(embedding model)
6
+ *
7
+ * 接口稳定:SimilarityEngine 抽象,P2 替换底层实现即可。
8
+ *
9
+ * @module @co-engram/core/dedup
10
+ */
11
+ import type { EngramRepository } from "../storage/repository.js";
12
+ import type { DedupCandidate, SimilarityEngine } from "./types.js";
13
+ /**
14
+ * Token 化(与 retrieval/fts.ts 保持一致的策略)
15
+ *
16
+ * - 中文:单字 + bigram
17
+ * - 英文:word boundary
18
+ * - 小写化
19
+ */
20
+ export declare function tokenizeForDedup(text: string): Set<string>;
21
+ /**
22
+ * Jaccard 相似度:|A ∩ B| / |A ∪ B|
23
+ *
24
+ * 返回 [0,1],越大越相似。
25
+ */
26
+ export declare function jaccardSimilarity(a: Set<string>, b: Set<string>): number;
27
+ /**
28
+ * Token Jaccard 相似度引擎(P1 默认实现)
29
+ */
30
+ export declare class TokenJaccardSimilarityEngine implements SimilarityEngine {
31
+ private readonly repo;
32
+ constructor(repo: EngramRepository);
33
+ findCandidates(text: string, options: {
34
+ topK: number;
35
+ minSimilarity: number;
36
+ }): Promise<readonly DedupCandidate[]>;
37
+ /**
38
+ * 同步版本:用于 engram_create 自动 dedupe(无 IO 等待)
39
+ */
40
+ findCandidatesSync(text: string, options: {
41
+ topK: number;
42
+ minSimilarity: number;
43
+ }): readonly DedupCandidate[];
44
+ }
45
+ //# sourceMappingURL=similar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similar.d.ts","sourceRoot":"","sources":["../../src/dedup/similar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAQxE;AAED;;GAEG;AACH,qBAAa,4BAA6B,YAAW,gBAAgB;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,gBAAgB;IAE7C,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAIrC;;OAEG;IACH,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAC/C,SAAS,cAAc,EAAE;CA6B7B"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 相似度候选查找
3
+ *
4
+ * P1 实现:Token Jaccard 相似度(中英混合分词)
5
+ * P2 升级:向量余弦相似度(embedding model)
6
+ *
7
+ * 接口稳定:SimilarityEngine 抽象,P2 替换底层实现即可。
8
+ *
9
+ * @module @co-engram/core/dedup
10
+ */
11
+ /**
12
+ * Token 化(与 retrieval/fts.ts 保持一致的策略)
13
+ *
14
+ * - 中文:单字 + bigram
15
+ * - 英文:word boundary
16
+ * - 小写化
17
+ */
18
+ export function tokenizeForDedup(text) {
19
+ if (!text)
20
+ return new Set();
21
+ const lower = text.toLowerCase();
22
+ const tokens = new Set();
23
+ const englishWords = lower.match(/[a-z][a-z0-9_-]{1,}/g) ?? [];
24
+ for (const w of englishWords)
25
+ tokens.add(w);
26
+ const chineseSegments = lower.match(/[一-龥]+/g) ?? [];
27
+ for (const seg of chineseSegments) {
28
+ if (seg.length === 1) {
29
+ tokens.add(seg);
30
+ }
31
+ else {
32
+ for (let i = 0; i < seg.length - 1; i++) {
33
+ tokens.add(seg.slice(i, i + 2));
34
+ }
35
+ for (const ch of seg)
36
+ tokens.add(ch);
37
+ }
38
+ }
39
+ const numbers = lower.match(/\d+/g) ?? [];
40
+ for (const n of numbers)
41
+ tokens.add(n);
42
+ return tokens;
43
+ }
44
+ /**
45
+ * Jaccard 相似度:|A ∩ B| / |A ∪ B|
46
+ *
47
+ * 返回 [0,1],越大越相似。
48
+ */
49
+ export function jaccardSimilarity(a, b) {
50
+ if (a.size === 0 && b.size === 0)
51
+ return 0;
52
+ let intersection = 0;
53
+ for (const t of a) {
54
+ if (b.has(t))
55
+ intersection += 1;
56
+ }
57
+ const union = a.size + b.size - intersection;
58
+ return union === 0 ? 0 : intersection / union;
59
+ }
60
+ /**
61
+ * Token Jaccard 相似度引擎(P1 默认实现)
62
+ */
63
+ export class TokenJaccardSimilarityEngine {
64
+ repo;
65
+ constructor(repo) {
66
+ this.repo = repo;
67
+ }
68
+ async findCandidates(text, options) {
69
+ return this.findCandidatesSync(text, options);
70
+ }
71
+ /**
72
+ * 同步版本:用于 engram_create 自动 dedupe(无 IO 等待)
73
+ */
74
+ findCandidatesSync(text, options) {
75
+ const queryTokens = tokenizeForDedup(text);
76
+ if (queryTokens.size === 0)
77
+ return [];
78
+ const candidates = [];
79
+ for (const entry of this.repo.listEngrams()) {
80
+ const engram = this.repo.readEngram(entry.id);
81
+ const engramTokens = tokenizeForDedup(`${engram.title} ${engram.summary} ${engram.content}`);
82
+ const similarity = jaccardSimilarity(queryTokens, engramTokens);
83
+ if (similarity < options.minSimilarity)
84
+ continue;
85
+ candidates.push({
86
+ id: engram.id,
87
+ title: engram.title,
88
+ summary: engram.summary,
89
+ content: engram.content,
90
+ contentHash: engram.contentHash,
91
+ similarity,
92
+ });
93
+ }
94
+ return candidates
95
+ .sort((a, b) => {
96
+ if (a.similarity !== b.similarity)
97
+ return b.similarity - a.similarity;
98
+ return a.id < b.id ? -1 : 1; // 稳定排序
99
+ })
100
+ .slice(0, options.topK);
101
+ }
102
+ }
103
+ //# sourceMappingURL=similar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similar.js","sourceRoot":"","sources":["../../src/dedup/similar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * 智能去重类型定义
3
+ *
4
+ * FlexMem 风格的三态判断(DUPLICATE / UPDATE / NEW)。
5
+ *
6
+ * 流程:
7
+ * 1. 精确匹配:contentHash 是否已存在 → DUPLICATE
8
+ * 2. 相似度召回:Top-K 候选(token Jaccard 或向量余弦)
9
+ * 3. LLM/启发式 triage:在候选中裁决 → DUPLICATE / UPDATE / NEW
10
+ * 4. 处理:
11
+ * - DUPLICATE:跳过创建,强化原 engram(LTP)
12
+ * - UPDATE:合并 + version+1 + mergeHistory 记录
13
+ * - NEW:正常创建
14
+ *
15
+ * @module @co-engram/core/dedup
16
+ */
17
+ import type { EngramId } from "../types/engram.js";
18
+ /** 三态裁决 */
19
+ export type DedupVerdict = "DUPLICATE" | "UPDATE" | "NEW";
20
+ /** 去重候选 */
21
+ export interface DedupCandidate {
22
+ readonly id: EngramId;
23
+ readonly title: string;
24
+ readonly summary: string;
25
+ readonly content: string;
26
+ readonly contentHash: string;
27
+ readonly similarity: number;
28
+ }
29
+ /** triage 输入(候选 + 新内容) */
30
+ export interface TriageInput {
31
+ readonly newTitle: string;
32
+ readonly newContent: string;
33
+ readonly candidates: readonly DedupCandidate[];
34
+ }
35
+ /** triage 输出 */
36
+ export interface TriageResult {
37
+ readonly verdict: DedupVerdict;
38
+ /** verdict=DUPLICATE 时指向被复制的 engram */
39
+ readonly duplicateOf?: EngramId;
40
+ /** verdict=UPDATE 时指向被更新的 engram */
41
+ readonly updateTarget?: EngramId;
42
+ readonly reason: string;
43
+ readonly confidence: number;
44
+ }
45
+ /** 去重总结果 */
46
+ export interface DedupResult {
47
+ readonly verdict: DedupVerdict;
48
+ readonly targetId?: EngramId;
49
+ readonly reason: string;
50
+ readonly confidence: number;
51
+ readonly candidatesConsidered: number;
52
+ }
53
+ /** 相似度引擎接口(P1: token Jaccard;P2: 向量余弦) */
54
+ export interface SimilarityEngine {
55
+ findCandidates(text: string, options: {
56
+ topK: number;
57
+ minSimilarity: number;
58
+ }): Promise<readonly DedupCandidate[]>;
59
+ }
60
+ /** LLM triage 接口(宿主提供,core 不绑定 provider) */
61
+ export interface LlmTriageProvider {
62
+ triage(input: TriageInput): Promise<TriageResult>;
63
+ }
64
+ /** 合并记录(写入 meta.mergeHistory) */
65
+ export interface MergeHistoryEntry {
66
+ readonly at: string;
67
+ readonly fromHash: string;
68
+ readonly toHash: string;
69
+ readonly reason: string;
70
+ readonly mergedBy: string;
71
+ }
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dedup/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,WAAW;AACX,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE1D,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AAED,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IAChC,oCAAoC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,YAAY;AACZ,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;CACvC;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACnD;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 智能去重类型定义
3
+ *
4
+ * FlexMem 风格的三态判断(DUPLICATE / UPDATE / NEW)。
5
+ *
6
+ * 流程:
7
+ * 1. 精确匹配:contentHash 是否已存在 → DUPLICATE
8
+ * 2. 相似度召回:Top-K 候选(token Jaccard 或向量余弦)
9
+ * 3. LLM/启发式 triage:在候选中裁决 → DUPLICATE / UPDATE / NEW
10
+ * 4. 处理:
11
+ * - DUPLICATE:跳过创建,强化原 engram(LTP)
12
+ * - UPDATE:合并 + version+1 + mergeHistory 记录
13
+ * - NEW:正常创建
14
+ *
15
+ * @module @co-engram/core/dedup
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dedup/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Adaptive Disclosure:按预算自动选择 tier
3
+ *
4
+ * 实现 spec 3.2 的 adaptiveDisclosure 伪代码:
5
+ *
6
+ * candidates = semanticSearch(query)
7
+ * loaded = { c.id: c.toCatalogEntry() for c in candidates } // 阶段 1
8
+ * for c in sortByScore(candidates): // 阶段 2
9
+ * if budget.remaining > c.digestSize:
10
+ * upgrade(c, 'digest')
11
+ * for c in topK(candidates, k=adaptive): // 阶段 3
12
+ * if budget.remaining > c.contentSize:
13
+ * upgrade(c, 'content')
14
+ * // 阶段 4:meta/synapse 由 agent 显式请求
15
+ *
16
+ * 关键特性:
17
+ * - 每个 engram 独立决定 tier(不是全量分层)
18
+ * - budget 不可用时(remaining ≤ 0)停止升级
19
+ * - 相同输入产生相同输出(prompt cache 友好)
20
+ *
21
+ * @module @co-engram/core/disclosure
22
+ */
23
+ import type { EngramId } from "../types/engram.js";
24
+ import type { ContextBudget, DisclosureTier, EngramView } from "../types/disclosure.js";
25
+ import type { EngramRepository } from "../storage/repository.js";
26
+ import type { DigestLine } from "../index/types.js";
27
+ /** 自适应披露输入 */
28
+ export interface AdaptiveDisclosureInput {
29
+ /** 仓库(用于按需加载 tier) */
30
+ readonly repository: EngramRepository;
31
+ /** 候选集(含 score;通常来自 SearchOrchestrator) */
32
+ readonly candidates: ReadonlyArray<{
33
+ id: EngramId;
34
+ score: number;
35
+ }>;
36
+ /** 候选的 DigestLine(用于预估大小) */
37
+ readonly digestLines: Readonly<Record<EngramId, DigestLine>>;
38
+ /** Token 预算(会被消耗,返回剩余) */
39
+ readonly budget: ContextBudget;
40
+ /** Top-K 升级到 content 的 K 值(默认 min(5, candidates.length)) */
41
+ readonly topK?: number;
42
+ /** 摘要层(阶段 2 升级上限;默认全升级) */
43
+ readonly maxDigestUpgrades?: number;
44
+ }
45
+ /** 单条加载结果 */
46
+ export interface LoadedEntry {
47
+ readonly id: EngramId;
48
+ readonly score: number;
49
+ readonly view: EngramView;
50
+ }
51
+ /** 自适应披露输出 */
52
+ export interface AdaptiveDisclosureResult {
53
+ /** 加载的视图(按原 candidates 顺序) */
54
+ readonly loaded: readonly LoadedEntry[];
55
+ /** 实际消耗的 token 数(所有视图累加) */
56
+ readonly tokensUsed: number;
57
+ /** 剩余预算 */
58
+ readonly budgetRemaining: number;
59
+ /** 各 tier 分布:tier → count */
60
+ readonly tierBreakdown: Readonly<Record<DisclosureTier, number>>;
61
+ /** 触发的阶段(1=catalog、2=digest、3=content) */
62
+ readonly reachedStage: 1 | 2 | 3;
63
+ }
64
+ /**
65
+ * 执行自适应披露
66
+ *
67
+ * 算法(严格按 spec 顺序):
68
+ * 1. 所有候选加载为 catalog
69
+ * 2. 按 score 倒序,逐个升级到 digest(若预算够)
70
+ * 3. Top-K(默认 min(5, len))升级到 content(若预算够)
71
+ * 4. meta/synapse 留给 agent 显式请求
72
+ *
73
+ * 顺序稳定性:同 score 的 candidates 保持原数组顺序(稳定排序)。
74
+ */
75
+ export declare function adaptiveDisclosure(input: AdaptiveDisclosureInput): AdaptiveDisclosureResult;
76
+ /**
77
+ * 在自适应结果之上,按 agent 请求升级单个 engram 到指定 tier
78
+ *
79
+ * 用于阶段 4(meta / synapse)的按需请求。
80
+ */
81
+ export declare function upgradeSingle(repository: EngramRepository, current: EngramView, target: DisclosureTier, budget: ContextBudget): {
82
+ view: EngramView;
83
+ budget: ContextBudget;
84
+ tierChanged: boolean;
85
+ };
86
+ //# sourceMappingURL=adaptive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive.d.ts","sourceRoot":"","sources":["../../src/disclosure/adaptive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,cAAc;AACd,MAAM,WAAW,uBAAuB;IACtC,sBAAsB;IACtB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,cAAc;AACd,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,WAAW;IACX,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,6BAA6B;IAC7B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,wBAAwB,CAqG1B;AAoDD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAenE"}