@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,651 @@
1
+ /**
2
+ * 记忆候选引擎(Proposal Engine)
3
+ *
4
+ * 实现"候选提示(prompted candidates)"机制——被动观察对话片段,
5
+ * 当某主题被多次提及但无匹配 engram 时,生成候选提案等待确认。
6
+ *
7
+ * 工作流:
8
+ * 1. observe(message) — host 每次对话都调用,把片段喂进引擎
9
+ * 2. 内部:向量化 → 在线聚类(余弦 > 阈值归同簇)
10
+ * 3. cluster.occurrences ≥ threshold → 检查是否已有匹配 engram
11
+ * 4. 无匹配 → 生成/更新 proposal(status=pending)
12
+ * 5. 下次会话开始 → system prompt 注入提示
13
+ * 6. accept / dismiss — LLM 或用户决策
14
+ *
15
+ * 设计原则:
16
+ * - embedder 注入式: core 不绑定 embedding provider
17
+ * - 默认 embedder: hash-based(无 LLM 成本,准确度低但可用于 M1)
18
+ * - 查重: 仅用 repository.listEngrams() + 标题子串匹配(简单,M1 够用)
19
+ * - 失败静默: 观察失败不阻塞对话流
20
+ *
21
+ * @module @co-engram/core/observability
22
+ */
23
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
24
+ import { createHash } from "node:crypto";
25
+ import { dirname, join } from "node:path";
26
+ import { RuleBasedNecessityEvaluator, prefilterMessage, } from "./necessity-evaluator.js";
27
+ /** 默认配置 */
28
+ export const DEFAULT_PROPOSAL_CONFIG = {
29
+ threshold: 3,
30
+ similarityThreshold: 0.75,
31
+ maxSamples: 3,
32
+ defaultDismissDays: 30,
33
+ minMessageLength: 20,
34
+ };
35
+ /**
36
+ * Proposal Engine
37
+ *
38
+ * 使用:
39
+ * const engine = new ProposalEngine({ repository, embedder, auditLog, dataRoot })
40
+ * await engine.observe({ role: 'user', content: '...', at: nowIso })
41
+ * const pending = engine.listPending()
42
+ * engine.accept(entityId, { title, content, domainTags })
43
+ */
44
+ export class ProposalEngine {
45
+ repository;
46
+ embedder;
47
+ auditLog;
48
+ dataRoot;
49
+ config;
50
+ clustersFile;
51
+ proposalsFile;
52
+ necessityEvaluator;
53
+ constructor(deps) {
54
+ this.repository = deps.repository;
55
+ this.embedder = deps.embedder;
56
+ this.auditLog = deps.auditLog;
57
+ this.dataRoot = deps.dataRoot;
58
+ this.config = { ...DEFAULT_PROPOSAL_CONFIG, ...deps.config };
59
+ this.clustersFile = join(deps.dataRoot, ".co-engram", "topic-clusters.jsonl");
60
+ this.proposalsFile = join(deps.dataRoot, ".co-engram", "proposals.jsonl");
61
+ this.necessityEvaluator =
62
+ deps.necessityEvaluator ?? new RuleBasedNecessityEvaluator();
63
+ }
64
+ /**
65
+ * 观察一条对话消息
66
+ *
67
+ * 流程:
68
+ * 1. Layer 1 规则预过滤(零成本挡机械噪声:trivial/短消息/低密度)
69
+ * 2. 向量化
70
+ * 3. 找最相似的现有 cluster
71
+ * 4. 归簇 or 新建
72
+ * 5. 若 occurrences 达到阈值 → Layer 2 必要性评估 → 查重 → 生成 proposal
73
+ */
74
+ async observe(message) {
75
+ // Layer 1:规则预过滤(挡机械噪声)
76
+ // - system role 不观察(设计意图)
77
+ // - 其他被过滤的情形静默丢弃(不写 audit,避免每条对话消息都产生噪音)
78
+ // Layer 1 拒绝率 60-80%,记 audit 会让 audit.jsonl 被噪声淹没
79
+ if (message.role === "system")
80
+ return;
81
+ const pre = prefilterMessage(message.content, message.role);
82
+ if (!pre.accepted) {
83
+ return;
84
+ }
85
+ const now = message.at ?? new Date().toISOString();
86
+ let vector;
87
+ try {
88
+ vector = await this.embedder(message.content);
89
+ }
90
+ catch {
91
+ // embedder 失败:静默放弃本次观察
92
+ return;
93
+ }
94
+ const clusters = this.readClusters();
95
+ const matchResult = findBestMatch(vector, clusters, this.config.similarityThreshold);
96
+ let updatedClusters;
97
+ let targetCluster;
98
+ if (matchResult) {
99
+ targetCluster = addToCluster(matchResult.cluster, message.content, vector, now, this.config.maxSamples);
100
+ updatedClusters = clusters.map((c) => c.id === targetCluster.id ? targetCluster : c);
101
+ }
102
+ else {
103
+ const candidate = newCluster(vector, message.content, now);
104
+ // 防御:即使 clusterId 算法发生碰撞,也合并到已有 cluster,
105
+ // 避免文件里出现同 id 多行(findBestMatch 没命中但 id 已存在 →
106
+ // 说明相似度算法和 id 算法不一致,仍按 id 合并以保证文件唯一性)
107
+ const collision = clusters.find((c) => c.id === candidate.id);
108
+ if (collision) {
109
+ targetCluster = addToCluster(collision, message.content, vector, now, this.config.maxSamples);
110
+ updatedClusters = clusters.map((c) => c.id === targetCluster.id ? targetCluster : c);
111
+ }
112
+ else {
113
+ targetCluster = candidate;
114
+ updatedClusters = [...clusters, targetCluster];
115
+ }
116
+ }
117
+ this.writeClusters(updatedClusters);
118
+ // 达到阈值 → 检查查重 → 生成 proposal
119
+ if (targetCluster.occurrences >= this.config.threshold) {
120
+ await this.maybePromoteToProposal(targetCluster, now);
121
+ }
122
+ }
123
+ /** 列出 status=pending 的提案 */
124
+ listPending() {
125
+ return this.readProposals().filter((p) => {
126
+ if (p.status !== "pending")
127
+ return false;
128
+ // 检查 dismissedUntil 是否已过期(重新激活)
129
+ if (p.dismissedUntil && p.dismissedUntil > new Date().toISOString()) {
130
+ return false;
131
+ }
132
+ return true;
133
+ });
134
+ }
135
+ /** 列出所有提案(包含 accepted/dismissed,调试用) */
136
+ listAll() {
137
+ return this.readProposals();
138
+ }
139
+ /**
140
+ * 接受提案 → 创建 engram
141
+ *
142
+ * @returns 新建的 engram id
143
+ */
144
+ accept(entityId, input) {
145
+ const proposals = this.readProposals();
146
+ const target = proposals.find((p) => p.entityId === entityId);
147
+ if (!target) {
148
+ throw new Error(`Proposal not found: ${entityId}`);
149
+ }
150
+ const engram = this.repository.createEngram({
151
+ title: input.title,
152
+ content: input.content,
153
+ kind: input.kind ?? "fact",
154
+ domainTags: input.domainTags,
155
+ createdBy: input.createdBy ?? "proposal-engine",
156
+ });
157
+ const updated = {
158
+ ...target,
159
+ status: "accepted",
160
+ acceptedEngramId: engram.id,
161
+ };
162
+ this.writeProposals(proposals.map((p) => (p.entityId === entityId ? updated : p)));
163
+ // 移除对应的 cluster(已转化)
164
+ this.writeClusters(this.readClusters().filter((c) => c.id !== entityId));
165
+ this.auditLog.append({
166
+ actor: "user",
167
+ action: "accept",
168
+ engramId: engram.id,
169
+ metadata: { entityId, occurrences: target.occurrences },
170
+ });
171
+ return engram.id;
172
+ }
173
+ /**
174
+ * 拒绝提案
175
+ *
176
+ * @param entityId 簇 id
177
+ * @param reason 拒绝原因(可选,便于元学习)
178
+ * @param dismissDays 多少天内不再提示(默认 30)
179
+ */
180
+ dismiss(entityId, reason, dismissDays) {
181
+ const proposals = this.readProposals();
182
+ const target = proposals.find((p) => p.entityId === entityId);
183
+ if (!target) {
184
+ throw new Error(`Proposal not found: ${entityId}`);
185
+ }
186
+ const days = dismissDays ?? this.config.defaultDismissDays;
187
+ const dismissedUntil = new Date(Date.now() + days * 24 * 60 * 60 * 1000).toISOString();
188
+ const updated = {
189
+ ...target,
190
+ status: "dismissed",
191
+ dismissReason: reason,
192
+ dismissedUntil,
193
+ };
194
+ this.writeProposals(proposals.map((p) => (p.entityId === entityId ? updated : p)));
195
+ this.auditLog.append({
196
+ actor: "user",
197
+ action: "dismiss",
198
+ metadata: { entityId, reason, dismissedUntil },
199
+ });
200
+ }
201
+ /** 清理过期/已处理数据(测试用) */
202
+ clear() {
203
+ for (const f of [this.clustersFile, this.proposalsFile]) {
204
+ if (existsSync(f))
205
+ writeFileSync(f, "", "utf8");
206
+ }
207
+ }
208
+ // ============================================================
209
+ // 内部
210
+ // ============================================================
211
+ /**
212
+ * 检查是否已有相关 engram;若无则创建/更新 proposal
213
+ *
214
+ * 流程:
215
+ * 1. 查重:已有相似 engram → 跳过
216
+ * 2. 已 accepted → 跳过;已 dismissed 且未过期 → 跳过
217
+ * 3. Layer 2 必要性评估:necessity=false → 记 audit 不晋升
218
+ * 4. necessity=true → 生成/更新 proposal(带 necessityReason)
219
+ */
220
+ async maybePromoteToProposal(cluster, now) {
221
+ const centroidExcerpt = cluster.samples[cluster.samples.length - 1] ?? "";
222
+ // 查重:简单标题/摘要子串匹配(M1 够用,M2 可升级为语义)
223
+ if (this.hasSimilarEngram(centroidExcerpt)) {
224
+ return; // 已有相关 engram,不生成 proposal
225
+ }
226
+ const proposals = this.readProposals();
227
+ const existing = proposals.find((p) => p.entityId === cluster.id);
228
+ if (existing && existing.status === "accepted") {
229
+ return; // 已接受,不再更新
230
+ }
231
+ if (existing && existing.status === "dismissed") {
232
+ // dismissed 但 dismissUntil 已过 → 重新激活
233
+ if (existing.dismissedUntil && existing.dismissedUntil > now) {
234
+ return; // 仍在 dismiss 期
235
+ }
236
+ }
237
+ // Layer 2:必要性评估
238
+ const existingTitles = this.repository.listEngrams().map((e) => e.title);
239
+ const verdict = await this.necessityEvaluator.evaluate({
240
+ samples: cluster.samples,
241
+ occurrences: cluster.occurrences,
242
+ firstSeenAt: cluster.firstSeenAt,
243
+ lastSeenAt: cluster.lastSeenAt,
244
+ existingTitles,
245
+ });
246
+ if (!verdict.necessary) {
247
+ // 不晋升,但保留 cluster(后续新样本可能改变判断)
248
+ this.auditLog.append({
249
+ actor: "system",
250
+ action: "necessity_rejected",
251
+ metadata: {
252
+ entityId: cluster.id,
253
+ occurrences: cluster.occurrences,
254
+ rule: verdict.rule,
255
+ reason: verdict.reason,
256
+ },
257
+ });
258
+ return;
259
+ }
260
+ const proposal = {
261
+ entityId: cluster.id,
262
+ occurrences: cluster.occurrences,
263
+ sampleQuotes: cluster.samples.slice(-this.config.maxSamples),
264
+ centroidExcerpt,
265
+ firstSeenAt: cluster.firstSeenAt,
266
+ lastSeenAt: cluster.lastSeenAt,
267
+ createdAt: existing?.createdAt ?? now,
268
+ status: "pending",
269
+ necessityReason: verdict.reason,
270
+ ...(verdict.suggestedTitle
271
+ ? { suggestedTitle: verdict.suggestedTitle }
272
+ : {}),
273
+ };
274
+ const next = existing
275
+ ? {
276
+ ...existing,
277
+ ...proposal,
278
+ dismissedUntil: undefined,
279
+ dismissReason: undefined,
280
+ }
281
+ : proposal;
282
+ if (existing) {
283
+ this.writeProposals(proposals.map((p) => (p.entityId === cluster.id ? next : p)));
284
+ }
285
+ else {
286
+ this.writeProposals([...proposals, next]);
287
+ // 首次生成 proposal → audit propose
288
+ this.auditLog.append({
289
+ actor: "system",
290
+ action: "propose",
291
+ metadata: { entityId: cluster.id, occurrences: cluster.occurrences },
292
+ });
293
+ }
294
+ }
295
+ /** 查重:简单子串匹配 */
296
+ hasSimilarEngram(excerpt) {
297
+ const entries = this.repository.listEngrams();
298
+ const normalizedExcerpt = normalize(excerpt);
299
+ if (!normalizedExcerpt)
300
+ return false;
301
+ // 提取 excerpt 的关键词(去停用词、取前 5 个)
302
+ const keywords = extractKeywords(normalizedExcerpt, 5);
303
+ if (keywords.length === 0)
304
+ return false;
305
+ for (const entry of entries) {
306
+ const title = normalize(entry.title);
307
+ // 至少 2 个关键词命中才算匹配
308
+ const hits = keywords.filter((k) => title.includes(k)).length;
309
+ if (hits >= 2)
310
+ return true;
311
+ }
312
+ return false;
313
+ }
314
+ readClusters() {
315
+ const raw = readJsonl(this.clustersFile);
316
+ // 防御性 dedupe by id:历史数据可能因 clusterId 碰撞 + push 不查重
317
+ // 出现同 id 多行(已修复,但已有污染数据需在读时清理)。同 id 取
318
+ // occurrences 最大者(代表累积最完整),其余字段以它为准。
319
+ if (raw.length <= 1)
320
+ return raw;
321
+ const byId = new Map();
322
+ for (const c of raw) {
323
+ const existing = byId.get(c.id);
324
+ if (!existing || c.occurrences > existing.occurrences) {
325
+ byId.set(c.id, c);
326
+ }
327
+ }
328
+ const deduped = Array.from(byId.values());
329
+ // 若发生 dedupe,立刻把干净数据写回(下次 observe 走 writeClusters 自然保持)
330
+ if (deduped.length !== raw.length) {
331
+ this.writeClusters(deduped);
332
+ }
333
+ return deduped;
334
+ }
335
+ writeClusters(clusters) {
336
+ writeJsonl(this.clustersFile, clusters);
337
+ }
338
+ readProposals() {
339
+ return readJsonl(this.proposalsFile);
340
+ }
341
+ writeProposals(proposals) {
342
+ writeJsonl(this.proposalsFile, proposals);
343
+ }
344
+ }
345
+ // ============================================================
346
+ // 纯函数(可测试)
347
+ // ============================================================
348
+ /**
349
+ * 创建新 cluster
350
+ */
351
+ export function newCluster(vector, firstSample, at) {
352
+ return {
353
+ id: clusterId(vector),
354
+ centroid: [...vector],
355
+ occurrences: 1,
356
+ samples: [truncate(firstSample, 100)],
357
+ firstSeenAt: at,
358
+ lastSeenAt: at,
359
+ };
360
+ }
361
+ /**
362
+ * 把新样本加入现有 cluster,更新质心
363
+ *
364
+ * 质心更新公式: new = old + (sample - old) / (n+1)
365
+ */
366
+ export function addToCluster(cluster, sample, vector, at, maxSamples) {
367
+ const n = cluster.occurrences + 1;
368
+ const newCentroid = cluster.centroid.map((c, i) => {
369
+ const v = vector[i] ?? 0;
370
+ return c + (v - c) / n;
371
+ });
372
+ const samples = [...cluster.samples, truncate(sample, 100)].slice(-maxSamples);
373
+ return {
374
+ ...cluster,
375
+ centroid: newCentroid,
376
+ occurrences: n,
377
+ samples,
378
+ lastSeenAt: at,
379
+ };
380
+ }
381
+ /**
382
+ * 找最相似的 cluster(余弦)
383
+ *
384
+ * 返回 null 表示无匹配(需新建)
385
+ */
386
+ export function findBestMatch(vector, clusters, threshold) {
387
+ if (clusters.length === 0)
388
+ return null;
389
+ let bestCluster = null;
390
+ let bestSim = -1;
391
+ for (const c of clusters) {
392
+ const sim = cosineSimilarity(vector, c.centroid);
393
+ if (sim > bestSim) {
394
+ bestSim = sim;
395
+ bestCluster = c;
396
+ }
397
+ }
398
+ if (!bestCluster || bestSim < threshold)
399
+ return null;
400
+ return { cluster: bestCluster, similarity: bestSim };
401
+ }
402
+ /** 余弦相似度 */
403
+ export function cosineSimilarity(a, b) {
404
+ const len = Math.max(a.length, b.length);
405
+ let dot = 0;
406
+ let normA = 0;
407
+ let normB = 0;
408
+ for (let i = 0; i < len; i++) {
409
+ const x = a[i] ?? 0;
410
+ const y = b[i] ?? 0;
411
+ dot += x * y;
412
+ normA += x * x;
413
+ normB += y * y;
414
+ }
415
+ if (normA === 0 || normB === 0)
416
+ return 0;
417
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
418
+ }
419
+ /** 从向量派生短 id(便于调试 + 唯一索引) */
420
+ export function clusterId(vector) {
421
+ // 全向量 SHA256 → 16 字符前缀,碰撞概率 ~1/2^64
422
+ //
423
+ // 历史 bug:旧实现只取前 4 + 后 4 维拼 hash,而 DEFAULT_HASHER_EMBEDDER
424
+ // 把词 hash 到 0..N 的随机维度,只要词都没命中前 4/后 4 维,id 必然
425
+ // 碰撞成 c128-0-0-0-0-0-0-0-0(或迁移到 c256 后的同等碰撞),导致 observe
426
+ // 走 newCluster 分支时多次创建同 id 的不同 cluster,污染 topic-clusters.jsonl。
427
+ const serialized = vector.map((n) => n.toFixed(6)).join(",");
428
+ const digest = createHash("sha256").update(serialized).digest("hex");
429
+ return `c${vector.length}-${digest.slice(0, 16)}`;
430
+ }
431
+ /**
432
+ * 默认 embedder: hash-based(无 LLM)
433
+ *
434
+ * 把文本拆词,每个词 hash 到某维度,符号累加。CJK 字符连续段会进一步切成
435
+ * 字符 bigram(我们/以后/所有…)——不加这一步,中文整段会被当成一个超大 token,
436
+ * 导致相似 Chinese 句子的余弦接近正交,proposal pipeline 在中文场景下完全失灵。
437
+ * 准确度低但零成本,可用于 M1 验证机制。M2 由宿主替换为真实 embedding。
438
+ */
439
+ export const DEFAULT_HASHER_EMBEDDER = async (text) => {
440
+ const DIM = 256;
441
+ const vec = new Array(DIM).fill(0);
442
+ const tokens = tokenizeForEmbedding(text);
443
+ for (const w of tokens) {
444
+ let hash = 0;
445
+ for (let i = 0; i < w.length; i++) {
446
+ hash = (hash * 31 + w.charCodeAt(i)) | 0;
447
+ }
448
+ const dim = Math.abs(hash) % DIM;
449
+ const sign = hash < 0 ? -1 : 1;
450
+ vec[dim] += sign;
451
+ }
452
+ // L2 归一化(便于余弦)
453
+ const norm = Math.sqrt(vec.reduce((s, x) => s + x * x, 0));
454
+ if (norm > 0) {
455
+ for (let i = 0; i < DIM; i++)
456
+ vec[i] /= norm;
457
+ }
458
+ return vec;
459
+ };
460
+ /**
461
+ * Hash-based embedder 配套的相似度阈值。
462
+ *
463
+ * `DEFAULT_PROPOSAL_CONFIG.similarityThreshold = 0.75` 是为真实 LLM embedding
464
+ * 设计的;hash-based fallback 的余弦分布完全不同(同义改写最多 ~0.4,完全无关
465
+ * 的文本 ~0.05-0.1),用 0.75 会导致 proposal pipeline 在 hash fallback 下
466
+ * 完全无法成簇——任何话题被反复提及都不会生成 proposal。
467
+ *
468
+ * 0.35 是经验值:在 256 维 + CJK bigram 切分下,足以让"arrow function"
469
+ * 这样的核心词在 4-5 次提及后成簇,又不会把"今天天气真好"和"我们去爬山"
470
+ * 这种无关句子误聚到一起。宿主替换为真实 embedder 时应使用更高阈值(如 0.75)。
471
+ */
472
+ export const DEFAULT_HASHER_SIMILARITY_THRESHOLD = 0.35;
473
+ // ============================================================
474
+ // 辅助
475
+ // ============================================================
476
+ const STOP_WORDS = new Set([
477
+ "the",
478
+ "a",
479
+ "an",
480
+ "and",
481
+ "or",
482
+ "but",
483
+ "is",
484
+ "are",
485
+ "was",
486
+ "were",
487
+ "be",
488
+ "been",
489
+ "being",
490
+ "have",
491
+ "has",
492
+ "had",
493
+ "do",
494
+ "does",
495
+ "did",
496
+ "will",
497
+ "would",
498
+ "could",
499
+ "should",
500
+ "may",
501
+ "might",
502
+ "must",
503
+ "shall",
504
+ "of",
505
+ "in",
506
+ "on",
507
+ "at",
508
+ "to",
509
+ "for",
510
+ "with",
511
+ "by",
512
+ "from",
513
+ "as",
514
+ "into",
515
+ "through",
516
+ "during",
517
+ "before",
518
+ "after",
519
+ "above",
520
+ "below",
521
+ "up",
522
+ "down",
523
+ "out",
524
+ "off",
525
+ "over",
526
+ "under",
527
+ "again",
528
+ "further",
529
+ "i",
530
+ "me",
531
+ "my",
532
+ "we",
533
+ "us",
534
+ "our",
535
+ "you",
536
+ "your",
537
+ "he",
538
+ "him",
539
+ "his",
540
+ "she",
541
+ "her",
542
+ "it",
543
+ "its",
544
+ "they",
545
+ "them",
546
+ "their",
547
+ "this",
548
+ "that",
549
+ "these",
550
+ "those",
551
+ "what",
552
+ "which",
553
+ "who",
554
+ "whom",
555
+ "how",
556
+ "when",
557
+ "why",
558
+ "的",
559
+ "了",
560
+ "是",
561
+ "在",
562
+ "和",
563
+ "与",
564
+ "或",
565
+ "但",
566
+ "可以",
567
+ "应该",
568
+ "需要",
569
+ "我",
570
+ "你",
571
+ "他",
572
+ "她",
573
+ "它",
574
+ "我们",
575
+ "你们",
576
+ "他们",
577
+ "这",
578
+ "那",
579
+ ]);
580
+ function normalize(text) {
581
+ return text
582
+ .toLowerCase()
583
+ .replace(/[^\p{L}\p{N}\s]/gu, " ")
584
+ .replace(/\s+/g, " ")
585
+ .trim();
586
+ }
587
+ // CJK / Hangana / Hangul 范围。用于把连续 CJK 段切成字符 bigram。
588
+ // 没有这一步,中文整段会被 normalize() 当成一个 token。
589
+ const CJK_RUN = /[㐀-鿿豈-﫿぀-ヿ가-힯]/;
590
+ /**
591
+ * 把 normalize 后的文本切成可 hash 的 token:
592
+ * - 拉丁/数字词:原样返回
593
+ * - 连续 CJK/Hangana/Hangul 段:切成字符 bigram("我们以后" → 我们/们以/以后)
594
+ * · 1 字符的孤儿(罕见,通常是被空格分隔的单字)按原样发出
595
+ * · bigram 是 zero-cost 中文语义近似的最优切分粒度:
596
+ * 既能抓住常用双字词(我们/以后/所有),又无需词典或分词器
597
+ */
598
+ function tokenizeForEmbedding(text) {
599
+ const tokens = [];
600
+ for (const word of normalize(text).split(/\s+/).filter(Boolean)) {
601
+ if (CJK_RUN.test(word)) {
602
+ if (word.length === 1) {
603
+ tokens.push(word);
604
+ continue;
605
+ }
606
+ for (let i = 0; i + 1 < word.length; i++) {
607
+ tokens.push(word.slice(i, i + 2));
608
+ }
609
+ }
610
+ else {
611
+ tokens.push(word);
612
+ }
613
+ }
614
+ return tokens;
615
+ }
616
+ function truncate(s, max) {
617
+ return s.length > max ? `${s.slice(0, max - 3)}...` : s;
618
+ }
619
+ function extractKeywords(text, n) {
620
+ return text
621
+ .split(/\s+/)
622
+ .filter((w) => w.length >= 2 && !STOP_WORDS.has(w))
623
+ .slice(0, n);
624
+ }
625
+ function readJsonl(filePath) {
626
+ if (!existsSync(filePath))
627
+ return [];
628
+ const raw = readFileSync(filePath, "utf8");
629
+ return raw
630
+ .split("\n")
631
+ .filter((line) => line.trim().length > 0)
632
+ .map((line) => {
633
+ try {
634
+ return JSON.parse(line);
635
+ }
636
+ catch {
637
+ return null;
638
+ }
639
+ })
640
+ .filter((r) => r !== null);
641
+ }
642
+ function writeJsonl(filePath, records) {
643
+ const dir = dirname(filePath);
644
+ if (!existsSync(dir)) {
645
+ mkdirSync(dir, { recursive: true });
646
+ }
647
+ const content = records.map((r) => JSON.stringify(r)).join("\n") +
648
+ (records.length > 0 ? "\n" : "");
649
+ writeFileSync(filePath, content, "utf8");
650
+ }
651
+ //# sourceMappingURL=proposal-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-engine.js","sourceRoot":"","sources":["../../src/observability/proposal-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Perspectives 模块 barrel(P3 4.4)
3
+ *
4
+ * @module @co-engram/core/perspectives
5
+ */
6
+ export * from "./multi-view.js";
7
+ //# sourceMappingURL=index.d.ts.map