@remnic/core 1.0.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 (551) hide show
  1. package/dist/abstraction-nodes.d.ts +52 -0
  2. package/dist/abstraction-nodes.js +15 -0
  3. package/dist/abstraction-nodes.js.map +1 -0
  4. package/dist/access-cli.d.ts +5 -0
  5. package/dist/access-cli.js +308 -0
  6. package/dist/access-cli.js.map +1 -0
  7. package/dist/access-http.d.ts +158 -0
  8. package/dist/access-http.js +32 -0
  9. package/dist/access-http.js.map +1 -0
  10. package/dist/access-idempotency.d.ts +31 -0
  11. package/dist/access-idempotency.js +11 -0
  12. package/dist/access-idempotency.js.map +1 -0
  13. package/dist/access-mcp.d.ts +76 -0
  14. package/dist/access-mcp.js +8 -0
  15. package/dist/access-mcp.js.map +1 -0
  16. package/dist/access-schema.d.ts +266 -0
  17. package/dist/access-schema.js +29 -0
  18. package/dist/access-schema.js.map +1 -0
  19. package/dist/access-service.d.ts +614 -0
  20. package/dist/access-service.js +32 -0
  21. package/dist/access-service.js.map +1 -0
  22. package/dist/behavior-learner.d.ts +16 -0
  23. package/dist/behavior-learner.js +124 -0
  24. package/dist/behavior-learner.js.map +1 -0
  25. package/dist/behavior-signals.d.ts +15 -0
  26. package/dist/behavior-signals.js +11 -0
  27. package/dist/behavior-signals.js.map +1 -0
  28. package/dist/bootstrap.d.ts +46 -0
  29. package/dist/bootstrap.js +9 -0
  30. package/dist/bootstrap.js.map +1 -0
  31. package/dist/boxes.d.ts +93 -0
  32. package/dist/boxes.js +14 -0
  33. package/dist/boxes.js.map +1 -0
  34. package/dist/buffer.d.ts +22 -0
  35. package/dist/buffer.js +9 -0
  36. package/dist/buffer.js.map +1 -0
  37. package/dist/calibration.d.ts +81 -0
  38. package/dist/calibration.js +239 -0
  39. package/dist/calibration.js.map +1 -0
  40. package/dist/causal-behavior.d.ts +79 -0
  41. package/dist/causal-behavior.js +190 -0
  42. package/dist/causal-behavior.js.map +1 -0
  43. package/dist/causal-chain.d.ts +61 -0
  44. package/dist/causal-chain.js +24 -0
  45. package/dist/causal-chain.js.map +1 -0
  46. package/dist/causal-consolidation.d.ts +71 -0
  47. package/dist/causal-consolidation.js +211 -0
  48. package/dist/causal-consolidation.js.map +1 -0
  49. package/dist/causal-retrieval.d.ts +44 -0
  50. package/dist/causal-retrieval.js +184 -0
  51. package/dist/causal-retrieval.js.map +1 -0
  52. package/dist/causal-trajectory-graph.d.ts +13 -0
  53. package/dist/causal-trajectory-graph.js +59 -0
  54. package/dist/causal-trajectory-graph.js.map +1 -0
  55. package/dist/causal-trajectory.d.ts +68 -0
  56. package/dist/causal-trajectory.js +18 -0
  57. package/dist/causal-trajectory.js.map +1 -0
  58. package/dist/chunk-2CJCWDMR.js +87 -0
  59. package/dist/chunk-2CJCWDMR.js.map +1 -0
  60. package/dist/chunk-2NMMFZ5T.js +216 -0
  61. package/dist/chunk-2NMMFZ5T.js.map +1 -0
  62. package/dist/chunk-2PO5ZRKV.js +103 -0
  63. package/dist/chunk-2PO5ZRKV.js.map +1 -0
  64. package/dist/chunk-3QKK7QOS.js +154 -0
  65. package/dist/chunk-3QKK7QOS.js.map +1 -0
  66. package/dist/chunk-3SLRNYNG.js +26 -0
  67. package/dist/chunk-3SLRNYNG.js.map +1 -0
  68. package/dist/chunk-4A24LIM2.js +68 -0
  69. package/dist/chunk-4A24LIM2.js.map +1 -0
  70. package/dist/chunk-6HZ6AO2P.js +164 -0
  71. package/dist/chunk-6HZ6AO2P.js.map +1 -0
  72. package/dist/chunk-763GUIOU.js +302 -0
  73. package/dist/chunk-763GUIOU.js.map +1 -0
  74. package/dist/chunk-AAI7JARD.js +173 -0
  75. package/dist/chunk-AAI7JARD.js.map +1 -0
  76. package/dist/chunk-B7LOFDVE.js +112 -0
  77. package/dist/chunk-B7LOFDVE.js.map +1 -0
  78. package/dist/chunk-BDFZXRSO.js +318 -0
  79. package/dist/chunk-BDFZXRSO.js.map +1 -0
  80. package/dist/chunk-BOUYNNYD.js +707 -0
  81. package/dist/chunk-BOUYNNYD.js.map +1 -0
  82. package/dist/chunk-BRK4ODMI.js +60 -0
  83. package/dist/chunk-BRK4ODMI.js.map +1 -0
  84. package/dist/chunk-C6QPK5GG.js +111 -0
  85. package/dist/chunk-C6QPK5GG.js.map +1 -0
  86. package/dist/chunk-C7VW7C3F.js +117 -0
  87. package/dist/chunk-C7VW7C3F.js.map +1 -0
  88. package/dist/chunk-CDW777AI.js +621 -0
  89. package/dist/chunk-CDW777AI.js.map +1 -0
  90. package/dist/chunk-CULXMQJH.js +185 -0
  91. package/dist/chunk-CULXMQJH.js.map +1 -0
  92. package/dist/chunk-CXWFUJR2.js +1203 -0
  93. package/dist/chunk-CXWFUJR2.js.map +1 -0
  94. package/dist/chunk-DGXUHMOV.js +61 -0
  95. package/dist/chunk-DGXUHMOV.js.map +1 -0
  96. package/dist/chunk-DM2T26WE.js +61 -0
  97. package/dist/chunk-DM2T26WE.js.map +1 -0
  98. package/dist/chunk-DORBM6OB.js +81 -0
  99. package/dist/chunk-DORBM6OB.js.map +1 -0
  100. package/dist/chunk-DT5TVLJE.js +32 -0
  101. package/dist/chunk-DT5TVLJE.js.map +1 -0
  102. package/dist/chunk-EEQLFRUM.js +89 -0
  103. package/dist/chunk-EEQLFRUM.js.map +1 -0
  104. package/dist/chunk-EQINRHYR.js +672 -0
  105. package/dist/chunk-EQINRHYR.js.map +1 -0
  106. package/dist/chunk-ESSMF2FR.js +146 -0
  107. package/dist/chunk-ESSMF2FR.js.map +1 -0
  108. package/dist/chunk-ETOW6ACV.js +158 -0
  109. package/dist/chunk-ETOW6ACV.js.map +1 -0
  110. package/dist/chunk-FYIYMQ5N.js +221 -0
  111. package/dist/chunk-FYIYMQ5N.js.map +1 -0
  112. package/dist/chunk-G3AG3KZN.js +78 -0
  113. package/dist/chunk-G3AG3KZN.js.map +1 -0
  114. package/dist/chunk-GJR6D6KC.js +61 -0
  115. package/dist/chunk-GJR6D6KC.js.map +1 -0
  116. package/dist/chunk-GPGBSNKM.js +380 -0
  117. package/dist/chunk-GPGBSNKM.js.map +1 -0
  118. package/dist/chunk-H63EDPFJ.js +57 -0
  119. package/dist/chunk-H63EDPFJ.js.map +1 -0
  120. package/dist/chunk-HG2NKWR2.js +185 -0
  121. package/dist/chunk-HG2NKWR2.js.map +1 -0
  122. package/dist/chunk-HL4DB7TO.js +13 -0
  123. package/dist/chunk-HL4DB7TO.js.map +1 -0
  124. package/dist/chunk-HLBYLYRD.js +346 -0
  125. package/dist/chunk-HLBYLYRD.js.map +1 -0
  126. package/dist/chunk-HLXVTBF3.js +109 -0
  127. package/dist/chunk-HLXVTBF3.js.map +1 -0
  128. package/dist/chunk-IFFFR3MR.js +68 -0
  129. package/dist/chunk-IFFFR3MR.js.map +1 -0
  130. package/dist/chunk-ISY75RLM.js +1027 -0
  131. package/dist/chunk-ISY75RLM.js.map +1 -0
  132. package/dist/chunk-IZME7KW2.js +1886 -0
  133. package/dist/chunk-IZME7KW2.js.map +1 -0
  134. package/dist/chunk-J3BT33K7.js +720 -0
  135. package/dist/chunk-J3BT33K7.js.map +1 -0
  136. package/dist/chunk-J47FNDR7.js +113 -0
  137. package/dist/chunk-J47FNDR7.js.map +1 -0
  138. package/dist/chunk-JWPLJLDU.js +63 -0
  139. package/dist/chunk-JWPLJLDU.js.map +1 -0
  140. package/dist/chunk-K6WK37A6.js +865 -0
  141. package/dist/chunk-K6WK37A6.js.map +1 -0
  142. package/dist/chunk-KL4CP4SB.js +130 -0
  143. package/dist/chunk-KL4CP4SB.js.map +1 -0
  144. package/dist/chunk-KT4NEUNF.js +315 -0
  145. package/dist/chunk-KT4NEUNF.js.map +1 -0
  146. package/dist/chunk-KWBU5S5U.js +42 -0
  147. package/dist/chunk-KWBU5S5U.js.map +1 -0
  148. package/dist/chunk-L5RPWGFK.js +59 -0
  149. package/dist/chunk-L5RPWGFK.js.map +1 -0
  150. package/dist/chunk-L7WO3MZ4.js +128 -0
  151. package/dist/chunk-L7WO3MZ4.js.map +1 -0
  152. package/dist/chunk-LIRZNNUP.js +74 -0
  153. package/dist/chunk-LIRZNNUP.js.map +1 -0
  154. package/dist/chunk-LK6SGL53.js +22 -0
  155. package/dist/chunk-LK6SGL53.js.map +1 -0
  156. package/dist/chunk-LOBRX7VD.js +200 -0
  157. package/dist/chunk-LOBRX7VD.js.map +1 -0
  158. package/dist/chunk-LPSF4OQH.js +47 -0
  159. package/dist/chunk-LPSF4OQH.js.map +1 -0
  160. package/dist/chunk-LU3GQNDQ.js +152 -0
  161. package/dist/chunk-LU3GQNDQ.js.map +1 -0
  162. package/dist/chunk-M5KEYE5E.js +350 -0
  163. package/dist/chunk-M5KEYE5E.js.map +1 -0
  164. package/dist/chunk-M62O4P4T.js +41 -0
  165. package/dist/chunk-M62O4P4T.js.map +1 -0
  166. package/dist/chunk-MARWOCVP.js +48 -0
  167. package/dist/chunk-MARWOCVP.js.map +1 -0
  168. package/dist/chunk-MDDAA2AO.js +925 -0
  169. package/dist/chunk-MDDAA2AO.js.map +1 -0
  170. package/dist/chunk-MWGVGUIS.js +198 -0
  171. package/dist/chunk-MWGVGUIS.js.map +1 -0
  172. package/dist/chunk-N5AKDXAI.js +74 -0
  173. package/dist/chunk-N5AKDXAI.js.map +1 -0
  174. package/dist/chunk-NGAVDO7E.js +115 -0
  175. package/dist/chunk-NGAVDO7E.js.map +1 -0
  176. package/dist/chunk-NTTLPF7F.js +283 -0
  177. package/dist/chunk-NTTLPF7F.js.map +1 -0
  178. package/dist/chunk-ONRU4L2N.js +240 -0
  179. package/dist/chunk-ONRU4L2N.js.map +1 -0
  180. package/dist/chunk-ORZMT74A.js +209 -0
  181. package/dist/chunk-ORZMT74A.js.map +1 -0
  182. package/dist/chunk-OTAVQCSF.js +268 -0
  183. package/dist/chunk-OTAVQCSF.js.map +1 -0
  184. package/dist/chunk-PGK3VUHN.js +160 -0
  185. package/dist/chunk-PGK3VUHN.js.map +1 -0
  186. package/dist/chunk-Q6FETXJA.js +1362 -0
  187. package/dist/chunk-Q6FETXJA.js.map +1 -0
  188. package/dist/chunk-QANCTXQF.js +271 -0
  189. package/dist/chunk-QANCTXQF.js.map +1 -0
  190. package/dist/chunk-QCCCQT3O.js +189 -0
  191. package/dist/chunk-QCCCQT3O.js.map +1 -0
  192. package/dist/chunk-QDOSNLB4.js +1048 -0
  193. package/dist/chunk-QDOSNLB4.js.map +1 -0
  194. package/dist/chunk-QFQVZOGA.js +2168 -0
  195. package/dist/chunk-QFQVZOGA.js.map +1 -0
  196. package/dist/chunk-QPKFPHOO.js +178 -0
  197. package/dist/chunk-QPKFPHOO.js.map +1 -0
  198. package/dist/chunk-QSVPYQPG.js +268 -0
  199. package/dist/chunk-QSVPYQPG.js.map +1 -0
  200. package/dist/chunk-QWUUMMIK.js +3045 -0
  201. package/dist/chunk-QWUUMMIK.js.map +1 -0
  202. package/dist/chunk-QY2BHY5O.js +2378 -0
  203. package/dist/chunk-QY2BHY5O.js.map +1 -0
  204. package/dist/chunk-SCHEKPYH.js +349 -0
  205. package/dist/chunk-SCHEKPYH.js.map +1 -0
  206. package/dist/chunk-SCU65EZI.js +15 -0
  207. package/dist/chunk-SCU65EZI.js.map +1 -0
  208. package/dist/chunk-T4WRIV2C.js +170 -0
  209. package/dist/chunk-T4WRIV2C.js.map +1 -0
  210. package/dist/chunk-TKO4HZCK.js +1852 -0
  211. package/dist/chunk-TKO4HZCK.js.map +1 -0
  212. package/dist/chunk-TP4FZJIZ.js +93 -0
  213. package/dist/chunk-TP4FZJIZ.js.map +1 -0
  214. package/dist/chunk-TPB3I2AC.js +403 -0
  215. package/dist/chunk-TPB3I2AC.js.map +1 -0
  216. package/dist/chunk-TVVVQQAK.js +1431 -0
  217. package/dist/chunk-TVVVQQAK.js.map +1 -0
  218. package/dist/chunk-U4PV25RD.js +14 -0
  219. package/dist/chunk-U4PV25RD.js.map +1 -0
  220. package/dist/chunk-UCYSTFZR.js +284 -0
  221. package/dist/chunk-UCYSTFZR.js.map +1 -0
  222. package/dist/chunk-UHGBNIOS.js +205 -0
  223. package/dist/chunk-UHGBNIOS.js.map +1 -0
  224. package/dist/chunk-UIYZ5T3I.js +108 -0
  225. package/dist/chunk-UIYZ5T3I.js.map +1 -0
  226. package/dist/chunk-UV2FO7J4.js +747 -0
  227. package/dist/chunk-UV2FO7J4.js.map +1 -0
  228. package/dist/chunk-UZB5KHKX.js +63 -0
  229. package/dist/chunk-UZB5KHKX.js.map +1 -0
  230. package/dist/chunk-V3RXWQIE.js +626 -0
  231. package/dist/chunk-V3RXWQIE.js.map +1 -0
  232. package/dist/chunk-V4YC4LUK.js +444 -0
  233. package/dist/chunk-V4YC4LUK.js.map +1 -0
  234. package/dist/chunk-VEWZZM3H.js +133 -0
  235. package/dist/chunk-VEWZZM3H.js.map +1 -0
  236. package/dist/chunk-WWIQTB2Y.js +98 -0
  237. package/dist/chunk-WWIQTB2Y.js.map +1 -0
  238. package/dist/chunk-X7XN6YU4.js +24 -0
  239. package/dist/chunk-X7XN6YU4.js.map +1 -0
  240. package/dist/chunk-XKECPATV.js +202 -0
  241. package/dist/chunk-XKECPATV.js.map +1 -0
  242. package/dist/chunk-XYIK4LF6.js +75 -0
  243. package/dist/chunk-XYIK4LF6.js.map +1 -0
  244. package/dist/chunk-Y27UJK6V.js +39 -0
  245. package/dist/chunk-Y27UJK6V.js.map +1 -0
  246. package/dist/chunk-Y4Z4I6WK.js +9 -0
  247. package/dist/chunk-Y4Z4I6WK.js.map +1 -0
  248. package/dist/chunk-YAPUAHAY.js +10761 -0
  249. package/dist/chunk-YAPUAHAY.js.map +1 -0
  250. package/dist/chunk-YAZNBMNF.js +92 -0
  251. package/dist/chunk-YAZNBMNF.js.map +1 -0
  252. package/dist/chunk-YCN4BVDK.js +66 -0
  253. package/dist/chunk-YCN4BVDK.js.map +1 -0
  254. package/dist/chunk-YNCQ7E4M.js +388 -0
  255. package/dist/chunk-YNCQ7E4M.js.map +1 -0
  256. package/dist/chunk-YNI4S5WT.js +143 -0
  257. package/dist/chunk-YNI4S5WT.js.map +1 -0
  258. package/dist/chunk-YRMVARQP.js +406 -0
  259. package/dist/chunk-YRMVARQP.js.map +1 -0
  260. package/dist/chunk-Z5AAYHUC.js +79 -0
  261. package/dist/chunk-Z5AAYHUC.js.map +1 -0
  262. package/dist/chunk-Z5LAYHGJ.js +15 -0
  263. package/dist/chunk-Z5LAYHGJ.js.map +1 -0
  264. package/dist/chunk-ZJLY4QSU.js +823 -0
  265. package/dist/chunk-ZJLY4QSU.js.map +1 -0
  266. package/dist/chunk-ZKYI7UVO.js +276 -0
  267. package/dist/chunk-ZKYI7UVO.js.map +1 -0
  268. package/dist/chunk-ZPKBYX2F.js +297 -0
  269. package/dist/chunk-ZPKBYX2F.js.map +1 -0
  270. package/dist/chunking.d.ts +48 -0
  271. package/dist/chunking.js +11 -0
  272. package/dist/chunking.js.map +1 -0
  273. package/dist/cli.d.ts +1162 -0
  274. package/dist/cli.js +7187 -0
  275. package/dist/cli.js.map +1 -0
  276. package/dist/commitment-ledger.d.ts +83 -0
  277. package/dist/commitment-ledger.js +19 -0
  278. package/dist/commitment-ledger.js.map +1 -0
  279. package/dist/compression-optimizer.d.ts +37 -0
  280. package/dist/compression-optimizer.js +13 -0
  281. package/dist/compression-optimizer.js.map +1 -0
  282. package/dist/config.d.ts +6 -0
  283. package/dist/config.js +12 -0
  284. package/dist/config.js.map +1 -0
  285. package/dist/cue-anchors.d.ts +50 -0
  286. package/dist/cue-anchors.js +15 -0
  287. package/dist/cue-anchors.js.map +1 -0
  288. package/dist/dashboard-runtime.d.ts +46 -0
  289. package/dist/dashboard-runtime.js +10 -0
  290. package/dist/dashboard-runtime.js.map +1 -0
  291. package/dist/day-summary.d.ts +6 -0
  292. package/dist/day-summary.js +10 -0
  293. package/dist/day-summary.js.map +1 -0
  294. package/dist/delinearize.d.ts +34 -0
  295. package/dist/delinearize.js +11 -0
  296. package/dist/delinearize.js.map +1 -0
  297. package/dist/embedding-fallback.d.ts +22 -0
  298. package/dist/embedding-fallback.js +8 -0
  299. package/dist/embedding-fallback.js.map +1 -0
  300. package/dist/engine-P26JFSVY.js +19 -0
  301. package/dist/engine-P26JFSVY.js.map +1 -0
  302. package/dist/entity-retrieval.d.ts +23 -0
  303. package/dist/entity-retrieval.js +24 -0
  304. package/dist/entity-retrieval.js.map +1 -0
  305. package/dist/evals.d.ts +282 -0
  306. package/dist/evals.js +32 -0
  307. package/dist/evals.js.map +1 -0
  308. package/dist/explicit-capture.d.ts +60 -0
  309. package/dist/explicit-capture.js +23 -0
  310. package/dist/explicit-capture.js.map +1 -0
  311. package/dist/extraction.d.ts +141 -0
  312. package/dist/extraction.js +22 -0
  313. package/dist/extraction.js.map +1 -0
  314. package/dist/fallback-llm.d.ts +95 -0
  315. package/dist/fallback-llm.js +12 -0
  316. package/dist/fallback-llm.js.map +1 -0
  317. package/dist/graph-dashboard-diff.d.ts +12 -0
  318. package/dist/graph-dashboard-diff.js +8 -0
  319. package/dist/graph-dashboard-diff.js.map +1 -0
  320. package/dist/graph-dashboard-key.d.ts +5 -0
  321. package/dist/graph-dashboard-key.js +7 -0
  322. package/dist/graph-dashboard-key.js.map +1 -0
  323. package/dist/graph-dashboard-parser.d.ts +20 -0
  324. package/dist/graph-dashboard-parser.js +8 -0
  325. package/dist/graph-dashboard-parser.js.map +1 -0
  326. package/dist/graph.d.ts +157 -0
  327. package/dist/graph.js +27 -0
  328. package/dist/graph.js.map +1 -0
  329. package/dist/harmonic-retrieval.d.ts +27 -0
  330. package/dist/harmonic-retrieval.js +12 -0
  331. package/dist/harmonic-retrieval.js.map +1 -0
  332. package/dist/himem.d.ts +23 -0
  333. package/dist/himem.js +7 -0
  334. package/dist/himem.js.map +1 -0
  335. package/dist/hygiene.d.ts +24 -0
  336. package/dist/hygiene.js +9 -0
  337. package/dist/hygiene.js.map +1 -0
  338. package/dist/identity-continuity.d.ts +17 -0
  339. package/dist/identity-continuity.js +19 -0
  340. package/dist/identity-continuity.js.map +1 -0
  341. package/dist/importance.d.ts +25 -0
  342. package/dist/importance.js +11 -0
  343. package/dist/importance.js.map +1 -0
  344. package/dist/index.d.ts +923 -0
  345. package/dist/index.js +2512 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/intent.d.ts +8 -0
  348. package/dist/intent.js +13 -0
  349. package/dist/intent.js.map +1 -0
  350. package/dist/json-extract.d.ts +14 -0
  351. package/dist/json-extract.js +9 -0
  352. package/dist/json-extract.js.map +1 -0
  353. package/dist/json-store.d.ts +5 -0
  354. package/dist/json-store.js +11 -0
  355. package/dist/json-store.js.map +1 -0
  356. package/dist/legacy-hook-compat.d.ts +3 -0
  357. package/dist/legacy-hook-compat.js +35 -0
  358. package/dist/legacy-hook-compat.js.map +1 -0
  359. package/dist/lifecycle.d.ts +52 -0
  360. package/dist/lifecycle.js +21 -0
  361. package/dist/lifecycle.js.map +1 -0
  362. package/dist/local-llm.d.ts +154 -0
  363. package/dist/local-llm.js +10 -0
  364. package/dist/local-llm.js.map +1 -0
  365. package/dist/logger.d.ts +15 -0
  366. package/dist/logger.js +9 -0
  367. package/dist/logger.js.map +1 -0
  368. package/dist/memory-action-policy.d.ts +13 -0
  369. package/dist/memory-action-policy.js +7 -0
  370. package/dist/memory-action-policy.js.map +1 -0
  371. package/dist/memory-cache.d.ts +35 -0
  372. package/dist/memory-cache.js +37 -0
  373. package/dist/memory-cache.js.map +1 -0
  374. package/dist/memory-lifecycle-ledger-utils.d.ts +13 -0
  375. package/dist/memory-lifecycle-ledger-utils.js +23 -0
  376. package/dist/memory-lifecycle-ledger-utils.js.map +1 -0
  377. package/dist/memory-projection-format.d.ts +4 -0
  378. package/dist/memory-projection-format.js +9 -0
  379. package/dist/memory-projection-format.js.map +1 -0
  380. package/dist/memory-projection-store-NxMkbocT.d.ts +221 -0
  381. package/dist/memory-projection-store.d.ts +3 -0
  382. package/dist/memory-projection-store.js +31 -0
  383. package/dist/memory-projection-store.js.map +1 -0
  384. package/dist/model-registry.d.ts +60 -0
  385. package/dist/model-registry.js +8 -0
  386. package/dist/model-registry.js.map +1 -0
  387. package/dist/native-knowledge.d.ts +94 -0
  388. package/dist/native-knowledge.js +26 -0
  389. package/dist/native-knowledge.js.map +1 -0
  390. package/dist/negative.d.ts +26 -0
  391. package/dist/negative.js +8 -0
  392. package/dist/negative.js.map +1 -0
  393. package/dist/objective-state-writers.d.ts +22 -0
  394. package/dist/objective-state-writers.js +313 -0
  395. package/dist/objective-state-writers.js.map +1 -0
  396. package/dist/objective-state.d.ts +75 -0
  397. package/dist/objective-state.js +17 -0
  398. package/dist/objective-state.js.map +1 -0
  399. package/dist/openai-chat-compat.d.ts +13 -0
  400. package/dist/openai-chat-compat.js +11 -0
  401. package/dist/openai-chat-compat.js.map +1 -0
  402. package/dist/operator-toolkit.d.ts +304 -0
  403. package/dist/operator-toolkit.js +41 -0
  404. package/dist/operator-toolkit.js.map +1 -0
  405. package/dist/opik-exporter.d.ts +72 -0
  406. package/dist/opik-exporter.js +361 -0
  407. package/dist/opik-exporter.js.map +1 -0
  408. package/dist/orchestrator-zTa-Qo-1.d.ts +1104 -0
  409. package/dist/orchestrator.d.ts +21 -0
  410. package/dist/orchestrator.js +145 -0
  411. package/dist/orchestrator.js.map +1 -0
  412. package/dist/policy-runtime.d.ts +37 -0
  413. package/dist/policy-runtime.js +13 -0
  414. package/dist/policy-runtime.js.map +1 -0
  415. package/dist/port-C1GZFv8h.d.ts +41 -0
  416. package/dist/profiling.d.ts +80 -0
  417. package/dist/profiling.js +10 -0
  418. package/dist/profiling.js.map +1 -0
  419. package/dist/qmd-recall-cache.d.ts +29 -0
  420. package/dist/qmd-recall-cache.js +13 -0
  421. package/dist/qmd-recall-cache.js.map +1 -0
  422. package/dist/qmd.d.ts +105 -0
  423. package/dist/qmd.js +13 -0
  424. package/dist/qmd.js.map +1 -0
  425. package/dist/recall-qos.d.ts +33 -0
  426. package/dist/recall-qos.js +10 -0
  427. package/dist/recall-qos.js.map +1 -0
  428. package/dist/recall-query-policy.d.ts +20 -0
  429. package/dist/recall-query-policy.js +11 -0
  430. package/dist/recall-query-policy.js.map +1 -0
  431. package/dist/recall-state.d.ts +113 -0
  432. package/dist/recall-state.js +12 -0
  433. package/dist/recall-state.js.map +1 -0
  434. package/dist/recall-tokenization.d.ts +4 -0
  435. package/dist/recall-tokenization.js +9 -0
  436. package/dist/recall-tokenization.js.map +1 -0
  437. package/dist/reconstruct.d.ts +16 -0
  438. package/dist/reconstruct.js +7 -0
  439. package/dist/reconstruct.js.map +1 -0
  440. package/dist/release-changelog.d.ts +7 -0
  441. package/dist/release-changelog.js +30 -0
  442. package/dist/release-changelog.js.map +1 -0
  443. package/dist/relevance.d.ts +18 -0
  444. package/dist/relevance.js +8 -0
  445. package/dist/relevance.js.map +1 -0
  446. package/dist/rerank.d.ts +57 -0
  447. package/dist/rerank.js +11 -0
  448. package/dist/rerank.js.map +1 -0
  449. package/dist/resolve-provider-secret.d.ts +16 -0
  450. package/dist/resolve-provider-secret.js +11 -0
  451. package/dist/resolve-provider-secret.js.map +1 -0
  452. package/dist/resume-bundles.d.ts +66 -0
  453. package/dist/resume-bundles.js +27 -0
  454. package/dist/resume-bundles.js.map +1 -0
  455. package/dist/retrieval-agents.d.ts +129 -0
  456. package/dist/retrieval-agents.js +23 -0
  457. package/dist/retrieval-agents.js.map +1 -0
  458. package/dist/retrieval.d.ts +19 -0
  459. package/dist/retrieval.js +10 -0
  460. package/dist/retrieval.js.map +1 -0
  461. package/dist/sanitize.d.ts +9 -0
  462. package/dist/sanitize.js +9 -0
  463. package/dist/sanitize.js.map +1 -0
  464. package/dist/schemas.d.ts +688 -0
  465. package/dist/schemas.js +51 -0
  466. package/dist/schemas.js.map +1 -0
  467. package/dist/sdk-compat.d.ts +21 -0
  468. package/dist/sdk-compat.js +28 -0
  469. package/dist/sdk-compat.js.map +1 -0
  470. package/dist/semantic-consolidation.d.ts +42 -0
  471. package/dist/semantic-consolidation.js +12 -0
  472. package/dist/semantic-consolidation.js.map +1 -0
  473. package/dist/semantic-rule-promotion.d.ts +28 -0
  474. package/dist/semantic-rule-promotion.js +17 -0
  475. package/dist/semantic-rule-promotion.js.map +1 -0
  476. package/dist/semantic-rule-verifier.d.ts +19 -0
  477. package/dist/semantic-rule-verifier.js +18 -0
  478. package/dist/semantic-rule-verifier.js.map +1 -0
  479. package/dist/session-integrity.d.ts +67 -0
  480. package/dist/session-integrity.js +11 -0
  481. package/dist/session-integrity.js.map +1 -0
  482. package/dist/session-observer-bands.d.ts +6 -0
  483. package/dist/session-observer-bands.js +9 -0
  484. package/dist/session-observer-bands.js.map +1 -0
  485. package/dist/session-observer-state.d.ts +40 -0
  486. package/dist/session-observer-state.js +11 -0
  487. package/dist/session-observer-state.js.map +1 -0
  488. package/dist/signal.d.ts +6 -0
  489. package/dist/signal.js +9 -0
  490. package/dist/signal.js.map +1 -0
  491. package/dist/storage.d.ts +453 -0
  492. package/dist/storage.js +24 -0
  493. package/dist/storage.js.map +1 -0
  494. package/dist/store-contract.d.ts +10 -0
  495. package/dist/store-contract.js +21 -0
  496. package/dist/store-contract.js.map +1 -0
  497. package/dist/summarizer.d.ts +35 -0
  498. package/dist/summarizer.js +17 -0
  499. package/dist/summarizer.js.map +1 -0
  500. package/dist/summary-snapshot.d.ts +8 -0
  501. package/dist/summary-snapshot.js +13 -0
  502. package/dist/summary-snapshot.js.map +1 -0
  503. package/dist/temporal-index.d.ts +139 -0
  504. package/dist/temporal-index.js +29 -0
  505. package/dist/temporal-index.js.map +1 -0
  506. package/dist/threading.d.ts +62 -0
  507. package/dist/threading.js +8 -0
  508. package/dist/threading.js.map +1 -0
  509. package/dist/tier-migration.d.ts +44 -0
  510. package/dist/tier-migration.js +7 -0
  511. package/dist/tier-migration.js.map +1 -0
  512. package/dist/tier-routing.d.ts +21 -0
  513. package/dist/tier-routing.js +10 -0
  514. package/dist/tier-routing.js.map +1 -0
  515. package/dist/tmt.d.ts +79 -0
  516. package/dist/tmt.js +29 -0
  517. package/dist/tmt.js.map +1 -0
  518. package/dist/tokens.d.ts +24 -0
  519. package/dist/tokens.js +21 -0
  520. package/dist/tokens.js.map +1 -0
  521. package/dist/topics.d.ts +29 -0
  522. package/dist/topics.js +9 -0
  523. package/dist/topics.js.map +1 -0
  524. package/dist/transcript.d.ts +171 -0
  525. package/dist/transcript.js +9 -0
  526. package/dist/transcript.js.map +1 -0
  527. package/dist/trust-zones.d.ts +170 -0
  528. package/dist/trust-zones.js +32 -0
  529. package/dist/trust-zones.js.map +1 -0
  530. package/dist/types.d.ts +1243 -0
  531. package/dist/types.js +9 -0
  532. package/dist/types.js.map +1 -0
  533. package/dist/utility-learner.d.ts +59 -0
  534. package/dist/utility-learner.js +17 -0
  535. package/dist/utility-learner.js.map +1 -0
  536. package/dist/utility-runtime.d.ts +21 -0
  537. package/dist/utility-runtime.js +16 -0
  538. package/dist/utility-runtime.js.map +1 -0
  539. package/dist/utility-telemetry.d.ts +68 -0
  540. package/dist/utility-telemetry.js +17 -0
  541. package/dist/utility-telemetry.js.map +1 -0
  542. package/dist/verified-recall.d.ts +17 -0
  543. package/dist/verified-recall.js +19 -0
  544. package/dist/verified-recall.js.map +1 -0
  545. package/dist/version-utils.d.ts +4 -0
  546. package/dist/version-utils.js +7 -0
  547. package/dist/version-utils.js.map +1 -0
  548. package/dist/work-product-ledger.d.ts +65 -0
  549. package/dist/work-product-ledger.js +18 -0
  550. package/dist/work-product-ledger.js.map +1 -0
  551. package/package.json +58 -0
@@ -0,0 +1,59 @@
1
+ import {
2
+ appendEdge
3
+ } from "./chunk-SCHEKPYH.js";
4
+
5
+ // src/causal-trajectory-graph.ts
6
+ function causalTrajectoryGraphNodeId(trajectoryId, stage) {
7
+ return `causal-trajectory/${trajectoryId}#${stage}`;
8
+ }
9
+ function buildCausalTrajectoryGraphEdges(record) {
10
+ const edges = [
11
+ {
12
+ from: causalTrajectoryGraphNodeId(record.trajectoryId, "goal"),
13
+ to: causalTrajectoryGraphNodeId(record.trajectoryId, "action"),
14
+ type: "causal",
15
+ weight: 1,
16
+ label: "goal_to_action",
17
+ ts: record.recordedAt
18
+ },
19
+ {
20
+ from: causalTrajectoryGraphNodeId(record.trajectoryId, "action"),
21
+ to: causalTrajectoryGraphNodeId(record.trajectoryId, "observation"),
22
+ type: "causal",
23
+ weight: 1,
24
+ label: "action_to_observation",
25
+ ts: record.recordedAt
26
+ },
27
+ {
28
+ from: causalTrajectoryGraphNodeId(record.trajectoryId, "observation"),
29
+ to: causalTrajectoryGraphNodeId(record.trajectoryId, "outcome"),
30
+ type: "causal",
31
+ weight: 1,
32
+ label: `observation_to_outcome:${record.outcomeKind}`,
33
+ ts: record.recordedAt
34
+ }
35
+ ];
36
+ if (record.followUpSummary) {
37
+ edges.push({
38
+ from: causalTrajectoryGraphNodeId(record.trajectoryId, "outcome"),
39
+ to: causalTrajectoryGraphNodeId(record.trajectoryId, "follow_up"),
40
+ type: "causal",
41
+ weight: 1,
42
+ label: "outcome_to_follow_up",
43
+ ts: record.recordedAt
44
+ });
45
+ }
46
+ return edges;
47
+ }
48
+ async function appendCausalTrajectoryGraphEdges(options) {
49
+ const edges = buildCausalTrajectoryGraphEdges(options.record);
50
+ for (const edge of edges) {
51
+ await appendEdge(options.memoryDir, edge);
52
+ }
53
+ }
54
+ export {
55
+ appendCausalTrajectoryGraphEdges,
56
+ buildCausalTrajectoryGraphEdges,
57
+ causalTrajectoryGraphNodeId
58
+ };
59
+ //# sourceMappingURL=causal-trajectory-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/causal-trajectory-graph.ts"],"sourcesContent":["import { appendEdge, type GraphEdge } from \"./graph.js\";\nimport type { CausalTrajectoryRecord } from \"./causal-trajectory.js\";\n\nexport type CausalTrajectoryGraphStage = \"goal\" | \"action\" | \"observation\" | \"outcome\" | \"follow_up\";\n\nexport function causalTrajectoryGraphNodeId(trajectoryId: string, stage: CausalTrajectoryGraphStage): string {\n return `causal-trajectory/${trajectoryId}#${stage}`;\n}\n\nexport function buildCausalTrajectoryGraphEdges(record: CausalTrajectoryRecord): GraphEdge[] {\n const edges: GraphEdge[] = [\n {\n from: causalTrajectoryGraphNodeId(record.trajectoryId, \"goal\"),\n to: causalTrajectoryGraphNodeId(record.trajectoryId, \"action\"),\n type: \"causal\",\n weight: 1.0,\n label: \"goal_to_action\",\n ts: record.recordedAt,\n },\n {\n from: causalTrajectoryGraphNodeId(record.trajectoryId, \"action\"),\n to: causalTrajectoryGraphNodeId(record.trajectoryId, \"observation\"),\n type: \"causal\",\n weight: 1.0,\n label: \"action_to_observation\",\n ts: record.recordedAt,\n },\n {\n from: causalTrajectoryGraphNodeId(record.trajectoryId, \"observation\"),\n to: causalTrajectoryGraphNodeId(record.trajectoryId, \"outcome\"),\n type: \"causal\",\n weight: 1.0,\n label: `observation_to_outcome:${record.outcomeKind}`,\n ts: record.recordedAt,\n },\n ];\n\n if (record.followUpSummary) {\n edges.push({\n from: causalTrajectoryGraphNodeId(record.trajectoryId, \"outcome\"),\n to: causalTrajectoryGraphNodeId(record.trajectoryId, \"follow_up\"),\n type: \"causal\",\n weight: 1.0,\n label: \"outcome_to_follow_up\",\n ts: record.recordedAt,\n });\n }\n\n return edges;\n}\n\nexport async function appendCausalTrajectoryGraphEdges(options: {\n memoryDir: string;\n record: CausalTrajectoryRecord;\n}): Promise<void> {\n const edges = buildCausalTrajectoryGraphEdges(options.record);\n for (const edge of edges) {\n await appendEdge(options.memoryDir, edge);\n }\n}\n"],"mappings":";;;;;AAKO,SAAS,4BAA4B,cAAsB,OAA2C;AAC3G,SAAO,qBAAqB,YAAY,IAAI,KAAK;AACnD;AAEO,SAAS,gCAAgC,QAA6C;AAC3F,QAAM,QAAqB;AAAA,IACzB;AAAA,MACE,MAAM,4BAA4B,OAAO,cAAc,MAAM;AAAA,MAC7D,IAAI,4BAA4B,OAAO,cAAc,QAAQ;AAAA,MAC7D,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,IAAI,OAAO;AAAA,IACb;AAAA,IACA;AAAA,MACE,MAAM,4BAA4B,OAAO,cAAc,QAAQ;AAAA,MAC/D,IAAI,4BAA4B,OAAO,cAAc,aAAa;AAAA,MAClE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,IAAI,OAAO;AAAA,IACb;AAAA,IACA;AAAA,MACE,MAAM,4BAA4B,OAAO,cAAc,aAAa;AAAA,MACpE,IAAI,4BAA4B,OAAO,cAAc,SAAS;AAAA,MAC9D,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO,0BAA0B,OAAO,WAAW;AAAA,MACnD,IAAI,OAAO;AAAA,IACb;AAAA,EACF;AAEA,MAAI,OAAO,iBAAiB;AAC1B,UAAM,KAAK;AAAA,MACT,MAAM,4BAA4B,OAAO,cAAc,SAAS;AAAA,MAChE,IAAI,4BAA4B,OAAO,cAAc,WAAW;AAAA,MAChE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,IAAI,OAAO;AAAA,IACb,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,eAAsB,iCAAiC,SAGrC;AAChB,QAAM,QAAQ,gCAAgC,QAAQ,MAAM;AAC5D,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,QAAQ,WAAW,IAAI;AAAA,EAC1C;AACF;","names":[]}
@@ -0,0 +1,68 @@
1
+ import { ObjectiveStateOutcome } from './objective-state.js';
2
+
3
+ interface CausalTrajectoryRecord {
4
+ schemaVersion: 1;
5
+ trajectoryId: string;
6
+ recordedAt: string;
7
+ sessionKey: string;
8
+ goal: string;
9
+ actionSummary: string;
10
+ observationSummary: string;
11
+ outcomeKind: ObjectiveStateOutcome;
12
+ outcomeSummary: string;
13
+ followUpSummary?: string;
14
+ objectiveStateSnapshotRefs?: string[];
15
+ entityRefs?: string[];
16
+ tags?: string[];
17
+ metadata?: Record<string, string>;
18
+ }
19
+ interface CausalTrajectoryStoreStatus {
20
+ enabled: boolean;
21
+ rootDir: string;
22
+ trajectoriesDir: string;
23
+ trajectories: {
24
+ total: number;
25
+ valid: number;
26
+ invalid: number;
27
+ byOutcome: Partial<Record<ObjectiveStateOutcome, number>>;
28
+ latestTrajectoryId?: string;
29
+ latestRecordedAt?: string;
30
+ latestSessionKey?: string;
31
+ };
32
+ latestTrajectory?: CausalTrajectoryRecord;
33
+ invalidTrajectories: Array<{
34
+ path: string;
35
+ error: string;
36
+ }>;
37
+ }
38
+ interface CausalTrajectorySearchResult {
39
+ record: CausalTrajectoryRecord;
40
+ score: number;
41
+ matchedFields: string[];
42
+ }
43
+ declare function resolveCausalTrajectoryStoreDir(memoryDir: string, overrideDir?: string): string;
44
+ declare function validateCausalTrajectoryRecord(raw: unknown): CausalTrajectoryRecord;
45
+ declare function recordCausalTrajectory(options: {
46
+ memoryDir: string;
47
+ causalTrajectoryStoreDir?: string;
48
+ actionGraphRecallEnabled?: boolean;
49
+ cmcEnabled?: boolean;
50
+ cmcStitchLookbackDays?: number;
51
+ cmcStitchMinScore?: number;
52
+ cmcStitchMaxEdgesPerTrajectory?: number;
53
+ record: CausalTrajectoryRecord;
54
+ }): Promise<string>;
55
+ declare function getCausalTrajectoryStoreStatus(options: {
56
+ memoryDir: string;
57
+ causalTrajectoryStoreDir?: string;
58
+ enabled: boolean;
59
+ }): Promise<CausalTrajectoryStoreStatus>;
60
+ declare function searchCausalTrajectories(options: {
61
+ memoryDir: string;
62
+ causalTrajectoryStoreDir?: string;
63
+ query: string;
64
+ maxResults: number;
65
+ sessionKey?: string;
66
+ }): Promise<CausalTrajectorySearchResult[]>;
67
+
68
+ export { type CausalTrajectoryRecord, type CausalTrajectorySearchResult, type CausalTrajectoryStoreStatus, getCausalTrajectoryStoreStatus, recordCausalTrajectory, resolveCausalTrajectoryStoreDir, searchCausalTrajectories, validateCausalTrajectoryRecord };
@@ -0,0 +1,18 @@
1
+ import {
2
+ getCausalTrajectoryStoreStatus,
3
+ recordCausalTrajectory,
4
+ resolveCausalTrajectoryStoreDir,
5
+ searchCausalTrajectories,
6
+ validateCausalTrajectoryRecord
7
+ } from "./chunk-ORZMT74A.js";
8
+ import "./chunk-DT5TVLJE.js";
9
+ import "./chunk-DGXUHMOV.js";
10
+ import "./chunk-LPSF4OQH.js";
11
+ export {
12
+ getCausalTrajectoryStoreStatus,
13
+ recordCausalTrajectory,
14
+ resolveCausalTrajectoryStoreDir,
15
+ searchCausalTrajectories,
16
+ validateCausalTrajectoryRecord
17
+ };
18
+ //# sourceMappingURL=causal-trajectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,87 @@
1
+ import {
2
+ countRecallTokenOverlap,
3
+ normalizeRecallTokens
4
+ } from "./chunk-DT5TVLJE.js";
5
+
6
+ // src/semantic-consolidation.ts
7
+ function findSimilarClusters(memories, config) {
8
+ const excluded = new Set(config.excludeCategories);
9
+ const byCategory = /* @__PURE__ */ new Map();
10
+ for (const m of memories) {
11
+ const cat = m.frontmatter.category;
12
+ if (excluded.has(cat)) continue;
13
+ if (m.frontmatter.status && m.frontmatter.status !== "active") continue;
14
+ const list = byCategory.get(cat) ?? [];
15
+ list.push(m);
16
+ byCategory.set(cat, list);
17
+ }
18
+ const clusters = [];
19
+ let totalCandidates = 0;
20
+ for (const [category, mems] of byCategory) {
21
+ if (totalCandidates >= config.maxPerRun) break;
22
+ const tokenized = mems.map((m) => ({
23
+ memory: m,
24
+ tokens: new Set(normalizeRecallTokens(m.content, []))
25
+ }));
26
+ const clustered = /* @__PURE__ */ new Set();
27
+ for (let i = 0; i < tokenized.length && totalCandidates < config.maxPerRun; i++) {
28
+ if (clustered.has(tokenized[i].memory.frontmatter.id)) continue;
29
+ const cluster = [tokenized[i].memory];
30
+ let totalOverlap = 0;
31
+ let comparisons = 0;
32
+ for (let j = i + 1; j < tokenized.length; j++) {
33
+ if (clustered.has(tokenized[j].memory.frontmatter.id)) continue;
34
+ const aTokens = tokenized[i].tokens;
35
+ const bTokens = tokenized[j].tokens;
36
+ if (aTokens.size === 0 || bTokens.size === 0) continue;
37
+ const overlap = countRecallTokenOverlap(aTokens, [...bTokens].join(" "));
38
+ const maxTokens = Math.max(aTokens.size, bTokens.size);
39
+ const score = maxTokens > 0 ? overlap / maxTokens : 0;
40
+ if (score >= config.threshold) {
41
+ cluster.push(tokenized[j].memory);
42
+ totalOverlap += score;
43
+ comparisons++;
44
+ if (totalCandidates + cluster.length >= config.maxPerRun) break;
45
+ }
46
+ }
47
+ if (cluster.length >= config.minClusterSize) {
48
+ for (const m of cluster) clustered.add(m.frontmatter.id);
49
+ clusters.push({
50
+ category,
51
+ memories: cluster,
52
+ overlapScore: comparisons > 0 ? totalOverlap / comparisons : 0
53
+ });
54
+ totalCandidates += cluster.length;
55
+ }
56
+ }
57
+ }
58
+ return clusters;
59
+ }
60
+ function buildConsolidationPrompt(cluster) {
61
+ const memoryTexts = cluster.memories.map(
62
+ (m, i) => `Memory ${i + 1} (${m.frontmatter.id}, created ${m.frontmatter.created}):
63
+ ${m.content}`
64
+ ).join("\n\n");
65
+ return `You are a memory consolidation system. The following ${cluster.memories.length} memories in the "${cluster.category}" category contain overlapping information.
66
+
67
+ Synthesize them into ONE canonical memory that:
68
+ 1. Preserves ALL unique information from every source memory
69
+ 2. Removes redundancy and repetition
70
+ 3. Uses clear, concise language
71
+ 4. Maintains the same category and tone
72
+ 5. Does NOT add information that isn't in the sources
73
+
74
+ ${memoryTexts}
75
+
76
+ Write ONLY the consolidated memory content (no metadata, no explanation, no preamble):`;
77
+ }
78
+ function parseConsolidationResponse(response) {
79
+ return response.trim();
80
+ }
81
+
82
+ export {
83
+ findSimilarClusters,
84
+ buildConsolidationPrompt,
85
+ parseConsolidationResponse
86
+ };
87
+ //# sourceMappingURL=chunk-2CJCWDMR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/semantic-consolidation.ts"],"sourcesContent":["/**\n * semantic-consolidation.ts — Semantic Consolidation Engine\n *\n * Finds clusters of semantically similar memories using token overlap,\n * synthesizes canonical versions via LLM, and archives the originals.\n * Reduces memory store bloat while preserving all unique information.\n */\n\nimport { log } from \"./logger.js\";\nimport type { MemoryFile } from \"./types.js\";\nimport { normalizeRecallTokens, countRecallTokenOverlap } from \"./recall-tokenization.js\";\n\nexport interface ConsolidationCluster {\n category: string;\n memories: MemoryFile[];\n overlapScore: number;\n canonicalContent?: string;\n}\n\nexport interface SemanticConsolidationResult {\n clustersFound: number;\n memoriesConsolidated: number;\n memoriesArchived: number;\n errors: number;\n clusters: ConsolidationCluster[];\n}\n\n/**\n * Find clusters of semantically similar memories using token overlap.\n */\nexport function findSimilarClusters(\n memories: MemoryFile[],\n config: {\n threshold: number;\n minClusterSize: number;\n excludeCategories: string[];\n maxPerRun: number;\n },\n): ConsolidationCluster[] {\n const excluded = new Set(config.excludeCategories);\n\n // Group by category first\n const byCategory = new Map<string, MemoryFile[]>();\n for (const m of memories) {\n const cat = m.frontmatter.category;\n if (excluded.has(cat)) continue;\n if (m.frontmatter.status && m.frontmatter.status !== \"active\") continue;\n const list = byCategory.get(cat) ?? [];\n list.push(m);\n byCategory.set(cat, list);\n }\n\n const clusters: ConsolidationCluster[] = [];\n let totalCandidates = 0;\n\n for (const [category, mems] of byCategory) {\n if (totalCandidates >= config.maxPerRun) break;\n\n // Token-normalize all memories in this category\n const tokenized = mems.map((m) => ({\n memory: m,\n tokens: new Set(normalizeRecallTokens(m.content, [])),\n }));\n\n // Track which memories are already clustered\n const clustered = new Set<string>();\n\n for (let i = 0; i < tokenized.length && totalCandidates < config.maxPerRun; i++) {\n if (clustered.has(tokenized[i].memory.frontmatter.id)) continue;\n\n const cluster: MemoryFile[] = [tokenized[i].memory];\n let totalOverlap = 0;\n let comparisons = 0;\n\n for (let j = i + 1; j < tokenized.length; j++) {\n if (clustered.has(tokenized[j].memory.frontmatter.id)) continue;\n\n const aTokens = tokenized[i].tokens;\n const bTokens = tokenized[j].tokens;\n if (aTokens.size === 0 || bTokens.size === 0) continue;\n\n // Bidirectional overlap: what fraction of tokens are shared\n const overlap = countRecallTokenOverlap(aTokens, [...bTokens].join(\" \"));\n const maxTokens = Math.max(aTokens.size, bTokens.size);\n const score = maxTokens > 0 ? overlap / maxTokens : 0;\n\n if (score >= config.threshold) {\n cluster.push(tokenized[j].memory);\n totalOverlap += score;\n comparisons++;\n // Enforce maxPerRun within a single cluster\n if (totalCandidates + cluster.length >= config.maxPerRun) break;\n }\n }\n\n if (cluster.length >= config.minClusterSize) {\n for (const m of cluster) clustered.add(m.frontmatter.id);\n clusters.push({\n category,\n memories: cluster,\n overlapScore: comparisons > 0 ? totalOverlap / comparisons : 0,\n });\n totalCandidates += cluster.length;\n }\n }\n }\n\n return clusters;\n}\n\n/**\n * Build the LLM prompt for synthesizing a canonical memory from a cluster.\n */\nexport function buildConsolidationPrompt(cluster: ConsolidationCluster): string {\n const memoryTexts = cluster.memories\n .map(\n (m, i) =>\n `Memory ${i + 1} (${m.frontmatter.id}, created ${m.frontmatter.created}):\\n${m.content}`,\n )\n .join(\"\\n\\n\");\n\n return `You are a memory consolidation system. The following ${cluster.memories.length} memories in the \"${cluster.category}\" category contain overlapping information.\n\nSynthesize them into ONE canonical memory that:\n1. Preserves ALL unique information from every source memory\n2. Removes redundancy and repetition\n3. Uses clear, concise language\n4. Maintains the same category and tone\n5. Does NOT add information that isn't in the sources\n\n${memoryTexts}\n\nWrite ONLY the consolidated memory content (no metadata, no explanation, no preamble):`;\n}\n\n/**\n * Parse the LLM response to extract the canonical content.\n */\nexport function parseConsolidationResponse(response: string): string {\n return response.trim();\n}\n"],"mappings":";;;;;;AA8BO,SAAS,oBACd,UACA,QAMwB;AACxB,QAAM,WAAW,IAAI,IAAI,OAAO,iBAAiB;AAGjD,QAAM,aAAa,oBAAI,IAA0B;AACjD,aAAW,KAAK,UAAU;AACxB,UAAM,MAAM,EAAE,YAAY;AAC1B,QAAI,SAAS,IAAI,GAAG,EAAG;AACvB,QAAI,EAAE,YAAY,UAAU,EAAE,YAAY,WAAW,SAAU;AAC/D,UAAM,OAAO,WAAW,IAAI,GAAG,KAAK,CAAC;AACrC,SAAK,KAAK,CAAC;AACX,eAAW,IAAI,KAAK,IAAI;AAAA,EAC1B;AAEA,QAAM,WAAmC,CAAC;AAC1C,MAAI,kBAAkB;AAEtB,aAAW,CAAC,UAAU,IAAI,KAAK,YAAY;AACzC,QAAI,mBAAmB,OAAO,UAAW;AAGzC,UAAM,YAAY,KAAK,IAAI,CAAC,OAAO;AAAA,MACjC,QAAQ;AAAA,MACR,QAAQ,IAAI,IAAI,sBAAsB,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA,IACtD,EAAE;AAGF,UAAM,YAAY,oBAAI,IAAY;AAElC,aAAS,IAAI,GAAG,IAAI,UAAU,UAAU,kBAAkB,OAAO,WAAW,KAAK;AAC/E,UAAI,UAAU,IAAI,UAAU,CAAC,EAAE,OAAO,YAAY,EAAE,EAAG;AAEvD,YAAM,UAAwB,CAAC,UAAU,CAAC,EAAE,MAAM;AAClD,UAAI,eAAe;AACnB,UAAI,cAAc;AAElB,eAAS,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAC7C,YAAI,UAAU,IAAI,UAAU,CAAC,EAAE,OAAO,YAAY,EAAE,EAAG;AAEvD,cAAM,UAAU,UAAU,CAAC,EAAE;AAC7B,cAAM,UAAU,UAAU,CAAC,EAAE;AAC7B,YAAI,QAAQ,SAAS,KAAK,QAAQ,SAAS,EAAG;AAG9C,cAAM,UAAU,wBAAwB,SAAS,CAAC,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC;AACvE,cAAM,YAAY,KAAK,IAAI,QAAQ,MAAM,QAAQ,IAAI;AACrD,cAAM,QAAQ,YAAY,IAAI,UAAU,YAAY;AAEpD,YAAI,SAAS,OAAO,WAAW;AAC7B,kBAAQ,KAAK,UAAU,CAAC,EAAE,MAAM;AAChC,0BAAgB;AAChB;AAEA,cAAI,kBAAkB,QAAQ,UAAU,OAAO,UAAW;AAAA,QAC5D;AAAA,MACF;AAEA,UAAI,QAAQ,UAAU,OAAO,gBAAgB;AAC3C,mBAAW,KAAK,QAAS,WAAU,IAAI,EAAE,YAAY,EAAE;AACvD,iBAAS,KAAK;AAAA,UACZ;AAAA,UACA,UAAU;AAAA,UACV,cAAc,cAAc,IAAI,eAAe,cAAc;AAAA,QAC/D,CAAC;AACD,2BAAmB,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,yBAAyB,SAAuC;AAC9E,QAAM,cAAc,QAAQ,SACzB;AAAA,IACC,CAAC,GAAG,MACF,UAAU,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,OAAO;AAAA,EAAO,EAAE,OAAO;AAAA,EAC1F,EACC,KAAK,MAAM;AAEd,SAAO,wDAAwD,QAAQ,SAAS,MAAM,qBAAqB,QAAQ,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS3H,WAAW;AAAA;AAAA;AAGb;AAKO,SAAS,2BAA2B,UAA0B;AACnE,SAAO,SAAS,KAAK;AACvB;","names":[]}
@@ -0,0 +1,216 @@
1
+ // src/compression-optimizer.ts
2
+ var MAX_DELTA = 0.15;
3
+ var SPARSE_SAMPLE = 5;
4
+ function clamp(value, min, max) {
5
+ return Math.min(max, Math.max(min, value));
6
+ }
7
+ function parseRecallQuality(reason) {
8
+ if (!reason) return "unknown";
9
+ const text = reason.toLowerCase();
10
+ if (/(recall[_\s-]?good|quality[:=]\s*(good|high)|improv(ed|e)|resolved)/i.test(text)) {
11
+ return "good";
12
+ }
13
+ if (/(recall[_\s-]?poor|quality[:=]\s*(poor|low)|degrad(ed|e)|miss(ed|ing)|irrelevant)/i.test(text)) {
14
+ return "poor";
15
+ }
16
+ return "unknown";
17
+ }
18
+ function nextGuidelineVersion(previousState) {
19
+ if (!previousState) return 1;
20
+ return Math.max(1, previousState.guidelineVersion + 1);
21
+ }
22
+ function nextOptimizerVersion(previousState) {
23
+ if (!previousState) return 1;
24
+ return Math.max(1, previousState.version + 1);
25
+ }
26
+ function roundDelta(value) {
27
+ return Math.round(value * 1e3) / 1e3;
28
+ }
29
+ function confidenceForDelta(delta) {
30
+ const magnitude = Math.abs(delta);
31
+ return magnitude >= 0.09 ? "high" : magnitude >= 0.04 ? "medium" : "low";
32
+ }
33
+ function directionForDelta(delta) {
34
+ return delta > 0 ? "increase" : delta < 0 ? "decrease" : "hold";
35
+ }
36
+ function computeCompressionGuidelineCandidate(events, options = {}) {
37
+ const generatedAt = options.generatedAtIso ?? (/* @__PURE__ */ new Date()).toISOString();
38
+ const previousState = options.previousState ?? null;
39
+ const effectiveEvents = events.filter((event) => event.dryRun !== true);
40
+ const totalCounts = {
41
+ total: effectiveEvents.length,
42
+ applied: 0,
43
+ skipped: 0,
44
+ failed: 0
45
+ };
46
+ const actionMap = /* @__PURE__ */ new Map();
47
+ let windowFrom = effectiveEvents[0]?.timestamp ?? generatedAt;
48
+ let windowTo = effectiveEvents[0]?.timestamp ?? generatedAt;
49
+ for (const event of effectiveEvents) {
50
+ if (event.timestamp < windowFrom) windowFrom = event.timestamp;
51
+ if (event.timestamp > windowTo) windowTo = event.timestamp;
52
+ totalCounts[event.outcome] += 1;
53
+ let summary = actionMap.get(event.action);
54
+ if (!summary) {
55
+ summary = {
56
+ action: event.action,
57
+ total: 0,
58
+ outcomes: { applied: 0, skipped: 0, failed: 0 },
59
+ quality: { good: 0, poor: 0, unknown: 0 }
60
+ };
61
+ actionMap.set(event.action, summary);
62
+ }
63
+ summary.total += 1;
64
+ summary.outcomes[event.outcome] += 1;
65
+ const quality = parseRecallQuality(event.reason);
66
+ summary.quality[quality] += 1;
67
+ }
68
+ const actionSummaries = [...actionMap.values()].sort((a, b) => {
69
+ if (b.total !== a.total) return b.total - a.total;
70
+ return a.action.localeCompare(b.action);
71
+ });
72
+ const ruleUpdates = actionSummaries.map((summary) => {
73
+ const notes = [];
74
+ if (summary.total < SPARSE_SAMPLE) {
75
+ notes.push("Sparse sample size; holding baseline policy.");
76
+ return {
77
+ action: summary.action,
78
+ delta: 0,
79
+ direction: "hold",
80
+ confidence: "low",
81
+ notes
82
+ };
83
+ }
84
+ const successRate = summary.outcomes.applied / summary.total;
85
+ const failureRate = summary.outcomes.failed / summary.total;
86
+ const qualitySeen = summary.quality.good + summary.quality.poor;
87
+ const qualitySignal = qualitySeen > 0 ? (summary.quality.good - summary.quality.poor) / qualitySeen : 0;
88
+ const rawDelta = clamp((successRate - failureRate) * 0.12 + qualitySignal * 0.06, -MAX_DELTA, MAX_DELTA);
89
+ const delta = roundDelta(rawDelta);
90
+ const direction = directionForDelta(delta);
91
+ if (direction === "decrease" && summary.outcomes.failed > summary.outcomes.applied) {
92
+ notes.push("Failures exceed applied outcomes; conservative down-adjustment.");
93
+ } else if (direction === "increase" && summary.quality.good > summary.quality.poor) {
94
+ notes.push("Good recall quality markers support this action.");
95
+ } else if (direction === "decrease" && summary.quality.poor > summary.quality.good) {
96
+ notes.push("Poor recall quality markers exceed good markers.");
97
+ } else {
98
+ notes.push("Outcomes are stable; keep bounded adjustments.");
99
+ }
100
+ const confidence = confidenceForDelta(delta);
101
+ return {
102
+ action: summary.action,
103
+ delta,
104
+ direction,
105
+ confidence,
106
+ notes
107
+ };
108
+ });
109
+ return {
110
+ generatedAt,
111
+ sourceWindow: {
112
+ from: effectiveEvents.length > 0 ? windowFrom : generatedAt,
113
+ to: effectiveEvents.length > 0 ? windowTo : generatedAt
114
+ },
115
+ eventCounts: totalCounts,
116
+ actionSummaries,
117
+ ruleUpdates,
118
+ guidelineVersion: nextGuidelineVersion(previousState),
119
+ optimizerVersion: nextOptimizerVersion(previousState)
120
+ };
121
+ }
122
+ async function refineCompressionGuidelineCandidateSemantically(baseline, options) {
123
+ if (!options.enabled) return baseline;
124
+ if (typeof options.runRefinement !== "function") return baseline;
125
+ const timeoutMs = Math.max(1, Math.floor(options.timeoutMs));
126
+ let timeoutId = null;
127
+ const timeout = new Promise((resolve) => {
128
+ timeoutId = setTimeout(() => resolve(null), timeoutMs);
129
+ });
130
+ const refinementPromise = options.runRefinement(baseline).catch(() => null);
131
+ let refinement = null;
132
+ try {
133
+ refinement = await Promise.race([refinementPromise, timeout]);
134
+ } catch {
135
+ if (timeoutId) clearTimeout(timeoutId);
136
+ return baseline;
137
+ }
138
+ if (timeoutId) clearTimeout(timeoutId);
139
+ if (!refinement || !Array.isArray(refinement.updates) || refinement.updates.length === 0) {
140
+ return baseline;
141
+ }
142
+ const updatesByAction = /* @__PURE__ */ new Map();
143
+ for (const update of refinement.updates) {
144
+ if (!update || typeof update.action !== "string") continue;
145
+ updatesByAction.set(update.action, update);
146
+ }
147
+ let changed = false;
148
+ const ruleUpdates = baseline.ruleUpdates.map((rule) => {
149
+ const patch = updatesByAction.get(rule.action);
150
+ if (!patch) return rule;
151
+ const nextDelta = typeof patch.delta === "number" && Number.isFinite(patch.delta) ? roundDelta(clamp(patch.delta, -MAX_DELTA, MAX_DELTA)) : rule.delta;
152
+ const nextConfidence = patch.confidence ?? confidenceForDelta(nextDelta);
153
+ const nextDirection = directionForDelta(nextDelta);
154
+ const nextNotes = typeof patch.note === "string" && patch.note.trim().length > 0 ? [patch.note.trim()] : rule.notes;
155
+ if (nextDelta !== rule.delta || nextDirection !== rule.direction || nextConfidence !== rule.confidence || nextNotes.join("\n") !== rule.notes.join("\n")) {
156
+ changed = true;
157
+ }
158
+ return {
159
+ ...rule,
160
+ delta: nextDelta,
161
+ direction: nextDirection,
162
+ confidence: nextConfidence,
163
+ notes: nextNotes
164
+ };
165
+ });
166
+ if (!changed) return baseline;
167
+ return {
168
+ ...baseline,
169
+ ruleUpdates
170
+ };
171
+ }
172
+ function renderCompressionGuidelinesMarkdown(candidate) {
173
+ const actionLines = candidate.actionSummaries.length === 0 ? ["- (none)"] : candidate.actionSummaries.map((item) => `- ${item.action}: ${item.total}`);
174
+ const outcomeLines = [
175
+ `- applied: ${candidate.eventCounts.applied}`,
176
+ `- skipped: ${candidate.eventCounts.skipped}`,
177
+ `- failed: ${candidate.eventCounts.failed}`
178
+ ];
179
+ const updateLines = candidate.ruleUpdates.length === 0 ? ["- No telemetry events available yet. Keep defaults conservative and gather action data first."] : candidate.ruleUpdates.map((update) => {
180
+ const sign = update.delta > 0 ? "+" : "";
181
+ return `- ${update.action}: ${update.direction} (${sign}${update.delta.toFixed(3)}, confidence=${update.confidence}) \u2014 ${update.notes.join(" ")}`;
182
+ });
183
+ return [
184
+ "# Compression Guidelines",
185
+ "",
186
+ `Generated: ${candidate.generatedAt}`,
187
+ `Source events analyzed: ${candidate.eventCounts.total}`,
188
+ `Source window: ${candidate.sourceWindow.from} -> ${candidate.sourceWindow.to}`,
189
+ `Guideline version: ${candidate.guidelineVersion}`,
190
+ "",
191
+ "## Action Distribution",
192
+ ...actionLines,
193
+ "",
194
+ "## Outcome Distribution",
195
+ ...outcomeLines,
196
+ "",
197
+ "## Suggested Guidelines",
198
+ ...updateLines,
199
+ ""
200
+ ].join("\n");
201
+ }
202
+ function buildCompressionGuidelinesMarkdown(events, generatedAtIso = (/* @__PURE__ */ new Date()).toISOString(), previousState = null) {
203
+ const candidate = computeCompressionGuidelineCandidate(events, {
204
+ generatedAtIso,
205
+ previousState
206
+ });
207
+ return renderCompressionGuidelinesMarkdown(candidate);
208
+ }
209
+
210
+ export {
211
+ computeCompressionGuidelineCandidate,
212
+ refineCompressionGuidelineCandidateSemantically,
213
+ renderCompressionGuidelinesMarkdown,
214
+ buildCompressionGuidelinesMarkdown
215
+ };
216
+ //# sourceMappingURL=chunk-2NMMFZ5T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compression-optimizer.ts"],"sourcesContent":["import type {\n CompressionGuidelineOptimizerActionSummary,\n CompressionGuidelineOptimizerEventCounts,\n CompressionGuidelineOptimizerRuleUpdate,\n CompressionGuidelineOptimizerState,\n MemoryActionEvent,\n MemoryActionOutcome,\n MemoryActionType,\n} from \"./types.js\";\n\nexport interface CompressionGuidelineCandidate {\n generatedAt: string;\n sourceWindow: {\n from: string;\n to: string;\n };\n eventCounts: CompressionGuidelineOptimizerEventCounts;\n actionSummaries: CompressionGuidelineOptimizerActionSummary[];\n ruleUpdates: CompressionGuidelineOptimizerRuleUpdate[];\n guidelineVersion: number;\n optimizerVersion: number;\n}\n\nexport interface CompressionSemanticRuleRefinement {\n action: MemoryActionType;\n delta?: number;\n confidence?: \"low\" | \"medium\" | \"high\";\n note?: string;\n}\n\nexport interface CompressionSemanticRefinementResult {\n updates: CompressionSemanticRuleRefinement[];\n}\n\nexport interface CompressionSemanticRefinementOptions {\n enabled: boolean;\n timeoutMs: number;\n runRefinement?: (\n candidate: CompressionGuidelineCandidate,\n ) => Promise<CompressionSemanticRefinementResult | null>;\n}\n\nconst MAX_DELTA = 0.15;\nconst SPARSE_SAMPLE = 5;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction parseRecallQuality(reason: string | undefined): \"good\" | \"poor\" | \"unknown\" {\n if (!reason) return \"unknown\";\n const text = reason.toLowerCase();\n if (/(recall[_\\s-]?good|quality[:=]\\s*(good|high)|improv(ed|e)|resolved)/i.test(text)) {\n return \"good\";\n }\n if (/(recall[_\\s-]?poor|quality[:=]\\s*(poor|low)|degrad(ed|e)|miss(ed|ing)|irrelevant)/i.test(text)) {\n return \"poor\";\n }\n return \"unknown\";\n}\n\nfunction nextGuidelineVersion(previousState: CompressionGuidelineOptimizerState | null): number {\n if (!previousState) return 1;\n return Math.max(1, previousState.guidelineVersion + 1);\n}\n\nfunction nextOptimizerVersion(previousState: CompressionGuidelineOptimizerState | null): number {\n if (!previousState) return 1;\n return Math.max(1, previousState.version + 1);\n}\n\nfunction roundDelta(value: number): number {\n return Math.round(value * 1000) / 1000;\n}\n\nfunction confidenceForDelta(delta: number): \"low\" | \"medium\" | \"high\" {\n const magnitude = Math.abs(delta);\n return magnitude >= 0.09 ? \"high\" : magnitude >= 0.04 ? \"medium\" : \"low\";\n}\n\nfunction directionForDelta(delta: number): \"increase\" | \"decrease\" | \"hold\" {\n return delta > 0 ? \"increase\" : delta < 0 ? \"decrease\" : \"hold\";\n}\n\nexport function computeCompressionGuidelineCandidate(\n events: MemoryActionEvent[],\n options: {\n generatedAtIso?: string;\n previousState?: CompressionGuidelineOptimizerState | null;\n } = {},\n): CompressionGuidelineCandidate {\n const generatedAt = options.generatedAtIso ?? new Date().toISOString();\n const previousState = options.previousState ?? null;\n const effectiveEvents = events.filter((event) => event.dryRun !== true);\n const totalCounts: CompressionGuidelineOptimizerEventCounts = {\n total: effectiveEvents.length,\n applied: 0,\n skipped: 0,\n failed: 0,\n };\n\n const actionMap = new Map<MemoryActionType, CompressionGuidelineOptimizerActionSummary>();\n let windowFrom = effectiveEvents[0]?.timestamp ?? generatedAt;\n let windowTo = effectiveEvents[0]?.timestamp ?? generatedAt;\n\n for (const event of effectiveEvents) {\n if (event.timestamp < windowFrom) windowFrom = event.timestamp;\n if (event.timestamp > windowTo) windowTo = event.timestamp;\n totalCounts[event.outcome] += 1;\n\n let summary = actionMap.get(event.action);\n if (!summary) {\n summary = {\n action: event.action,\n total: 0,\n outcomes: { applied: 0, skipped: 0, failed: 0 },\n quality: { good: 0, poor: 0, unknown: 0 },\n };\n actionMap.set(event.action, summary);\n }\n\n summary.total += 1;\n summary.outcomes[event.outcome] += 1;\n const quality = parseRecallQuality(event.reason);\n summary.quality[quality] += 1;\n }\n\n const actionSummaries = [...actionMap.values()].sort((a, b) => {\n if (b.total !== a.total) return b.total - a.total;\n return a.action.localeCompare(b.action);\n });\n\n const ruleUpdates = actionSummaries.map((summary): CompressionGuidelineOptimizerRuleUpdate => {\n const notes: string[] = [];\n if (summary.total < SPARSE_SAMPLE) {\n notes.push(\"Sparse sample size; holding baseline policy.\");\n return {\n action: summary.action,\n delta: 0,\n direction: \"hold\",\n confidence: \"low\",\n notes,\n };\n }\n\n const successRate = summary.outcomes.applied / summary.total;\n const failureRate = summary.outcomes.failed / summary.total;\n const qualitySeen = summary.quality.good + summary.quality.poor;\n const qualitySignal = qualitySeen > 0\n ? (summary.quality.good - summary.quality.poor) / qualitySeen\n : 0;\n const rawDelta = clamp((successRate - failureRate) * 0.12 + qualitySignal * 0.06, -MAX_DELTA, MAX_DELTA);\n const delta = roundDelta(rawDelta);\n\n const direction = directionForDelta(delta);\n if (direction === \"decrease\" && summary.outcomes.failed > summary.outcomes.applied) {\n notes.push(\"Failures exceed applied outcomes; conservative down-adjustment.\");\n } else if (direction === \"increase\" && summary.quality.good > summary.quality.poor) {\n notes.push(\"Good recall quality markers support this action.\");\n } else if (direction === \"decrease\" && summary.quality.poor > summary.quality.good) {\n notes.push(\"Poor recall quality markers exceed good markers.\");\n } else {\n notes.push(\"Outcomes are stable; keep bounded adjustments.\");\n }\n\n const confidence = confidenceForDelta(delta);\n return {\n action: summary.action,\n delta,\n direction,\n confidence,\n notes,\n };\n });\n\n return {\n generatedAt,\n sourceWindow: {\n from: effectiveEvents.length > 0 ? windowFrom : generatedAt,\n to: effectiveEvents.length > 0 ? windowTo : generatedAt,\n },\n eventCounts: totalCounts,\n actionSummaries,\n ruleUpdates,\n guidelineVersion: nextGuidelineVersion(previousState),\n optimizerVersion: nextOptimizerVersion(previousState),\n };\n}\n\nexport async function refineCompressionGuidelineCandidateSemantically(\n baseline: CompressionGuidelineCandidate,\n options: CompressionSemanticRefinementOptions,\n): Promise<CompressionGuidelineCandidate> {\n if (!options.enabled) return baseline;\n if (typeof options.runRefinement !== \"function\") return baseline;\n\n const timeoutMs = Math.max(1, Math.floor(options.timeoutMs));\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const timeout = new Promise<CompressionSemanticRefinementResult | null>((resolve) => {\n timeoutId = setTimeout(() => resolve(null), timeoutMs);\n });\n\n const refinementPromise = options.runRefinement(baseline).catch(() => null);\n\n let refinement: CompressionSemanticRefinementResult | null = null;\n try {\n refinement = await Promise.race([refinementPromise, timeout]);\n } catch {\n if (timeoutId) clearTimeout(timeoutId);\n return baseline;\n }\n if (timeoutId) clearTimeout(timeoutId);\n if (!refinement || !Array.isArray(refinement.updates) || refinement.updates.length === 0) {\n return baseline;\n }\n\n const updatesByAction = new Map<MemoryActionType, CompressionSemanticRuleRefinement>();\n for (const update of refinement.updates) {\n if (!update || typeof update.action !== \"string\") continue;\n updatesByAction.set(update.action, update);\n }\n\n let changed = false;\n const ruleUpdates = baseline.ruleUpdates.map((rule) => {\n const patch = updatesByAction.get(rule.action);\n if (!patch) return rule;\n\n const nextDelta =\n typeof patch.delta === \"number\" && Number.isFinite(patch.delta)\n ? roundDelta(clamp(patch.delta, -MAX_DELTA, MAX_DELTA))\n : rule.delta;\n const nextConfidence = patch.confidence ?? confidenceForDelta(nextDelta);\n const nextDirection = directionForDelta(nextDelta);\n const nextNotes =\n typeof patch.note === \"string\" && patch.note.trim().length > 0\n ? [patch.note.trim()]\n : rule.notes;\n\n if (\n nextDelta !== rule.delta ||\n nextDirection !== rule.direction ||\n nextConfidence !== rule.confidence ||\n nextNotes.join(\"\\n\") !== rule.notes.join(\"\\n\")\n ) {\n changed = true;\n }\n\n return {\n ...rule,\n delta: nextDelta,\n direction: nextDirection,\n confidence: nextConfidence,\n notes: nextNotes,\n };\n });\n\n if (!changed) return baseline;\n return {\n ...baseline,\n ruleUpdates,\n };\n}\n\nexport function renderCompressionGuidelinesMarkdown(candidate: CompressionGuidelineCandidate): string {\n const actionLines =\n candidate.actionSummaries.length === 0\n ? [\"- (none)\"]\n : candidate.actionSummaries.map((item) => `- ${item.action}: ${item.total}`);\n const outcomeLines: string[] = [\n `- applied: ${candidate.eventCounts.applied}`,\n `- skipped: ${candidate.eventCounts.skipped}`,\n `- failed: ${candidate.eventCounts.failed}`,\n ];\n const updateLines =\n candidate.ruleUpdates.length === 0\n ? [\"- No telemetry events available yet. Keep defaults conservative and gather action data first.\"]\n : candidate.ruleUpdates.map((update) => {\n const sign = update.delta > 0 ? \"+\" : \"\";\n return `- ${update.action}: ${update.direction} (${sign}${update.delta.toFixed(3)}, confidence=${update.confidence}) — ${update.notes.join(\" \")}`;\n });\n\n return [\n \"# Compression Guidelines\",\n \"\",\n `Generated: ${candidate.generatedAt}`,\n `Source events analyzed: ${candidate.eventCounts.total}`,\n `Source window: ${candidate.sourceWindow.from} -> ${candidate.sourceWindow.to}`,\n `Guideline version: ${candidate.guidelineVersion}`,\n \"\",\n \"## Action Distribution\",\n ...actionLines,\n \"\",\n \"## Outcome Distribution\",\n ...outcomeLines,\n \"\",\n \"## Suggested Guidelines\",\n ...updateLines,\n \"\",\n ].join(\"\\n\");\n}\n\nexport function buildCompressionGuidelinesMarkdown(\n events: MemoryActionEvent[],\n generatedAtIso: string = new Date().toISOString(),\n previousState: CompressionGuidelineOptimizerState | null = null,\n): string {\n const candidate = computeCompressionGuidelineCandidate(events, {\n generatedAtIso,\n previousState,\n });\n return renderCompressionGuidelinesMarkdown(candidate);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,103 @@
1
+ import {
2
+ log
3
+ } from "./chunk-KWBU5S5U.js";
4
+
5
+ // src/day-summary.ts
6
+ import { existsSync } from "fs";
7
+ import { readFile } from "fs/promises";
8
+ import path from "path";
9
+ import { fileURLToPath } from "url";
10
+ var PROMPT_RELATIVE_PATH = path.join("prompts", "day_summary.prompt.md");
11
+ var EMBEDDED_DAY_SUMMARY_PROMPT = `# Baseline day-summary prompt
12
+
13
+ You are writing an Engram end-of-day summary.
14
+
15
+ Your job:
16
+ - compress the day into a short, useful recap
17
+ - prioritize concrete events, decisions, mood/energy signals, and open loops
18
+ - include a few practical next actions for tomorrow
19
+ - avoid hype, fluff, therapy-speak, and invented facts
20
+
21
+ Output JSON with these keys:
22
+ - \`summary\` \u2014 one short paragraph
23
+ - \`bullets\` \u2014 2 to 5 bullets with the most important moments
24
+ - \`next_actions\` \u2014 1 to 3 concrete actions
25
+ - \`risks_or_open_loops\` \u2014 0 to 3 things that still need attention
26
+
27
+ Rules:
28
+ - stay grounded in the input only
29
+ - if the day was mixed, say so plainly
30
+ - do not overstate confidence or importance
31
+ - prefer specific verbs over vague abstractions
32
+
33
+ Brevity:
34
+ - keep the summary under 90 words
35
+ - keep bullets short and information-dense
36
+ - omit anything that does not change what tomorrow should care about
37
+
38
+ Structure:
39
+ - \`summary\` should be one paragraph only
40
+ - \`bullets\` should contain the most important moments, not generic restatements
41
+ - \`next_actions\` and \`risks_or_open_loops\` should be distinct and non-overlapping
42
+
43
+ Risk:
44
+ - explicitly surface unresolved blockers, dependencies, or fragile assumptions
45
+ - do not bury open loops inside the summary if they deserve separate attention
46
+
47
+ Tone:
48
+ - sound like a clear internal daily note, not a report template
49
+ - stay natural and direct while remaining compact`;
50
+ function candidateRoots() {
51
+ const currentFile = fileURLToPath(import.meta.url);
52
+ const here = path.dirname(currentFile);
53
+ const candidates = [path.resolve(here, ".."), path.resolve(here, "..", "..")];
54
+ const seen = /* @__PURE__ */ new Set();
55
+ return candidates.filter((candidate) => {
56
+ const normalized = path.resolve(candidate);
57
+ if (seen.has(normalized)) return false;
58
+ seen.add(normalized);
59
+ return true;
60
+ });
61
+ }
62
+ function resolvePromptPath() {
63
+ for (const root of candidateRoots()) {
64
+ const candidate = path.join(root, PROMPT_RELATIVE_PATH);
65
+ if (existsSync(candidate)) {
66
+ return candidate;
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ async function loadDaySummaryPrompt() {
72
+ const promptPath = resolvePromptPath();
73
+ if (promptPath) {
74
+ try {
75
+ const raw = await readFile(promptPath, "utf-8");
76
+ const match = raw.match(/```(?:[a-zA-Z0-9_-]+)?\r?\n([\s\S]*?)\r?\n```/);
77
+ if (match?.[1]) {
78
+ return match[1].trim();
79
+ }
80
+ log.warn("day summary prompt file does not contain a fenced prompt block; using embedded fallback");
81
+ } catch (err) {
82
+ log.warn(`day summary prompt file read failed; using embedded fallback: ${err}`);
83
+ }
84
+ }
85
+ return EMBEDDED_DAY_SUMMARY_PROMPT;
86
+ }
87
+ function formatDaySummaryMemories(memories) {
88
+ if (typeof memories === "string") {
89
+ return memories.trim();
90
+ }
91
+ return memories.map((memory) => {
92
+ const category = memory.frontmatter.category || "fact";
93
+ const created = memory.frontmatter.created || "unknown";
94
+ return `[${memory.frontmatter.id}] (${category}, ${created})
95
+ ${memory.content}`;
96
+ }).join("\n\n").trim();
97
+ }
98
+
99
+ export {
100
+ loadDaySummaryPrompt,
101
+ formatDaySummaryMemories
102
+ };
103
+ //# sourceMappingURL=chunk-2PO5ZRKV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/day-summary.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { log } from \"./logger.js\";\nimport type { MemoryFile } from \"./types.js\";\n\nconst PROMPT_RELATIVE_PATH = path.join(\"prompts\", \"day_summary.prompt.md\");\n\n// Embedded fallback prompt for packaged/plugin-install builds where\n// prompts/day_summary.prompt.md may not be present in the runtime bundle.\nconst EMBEDDED_DAY_SUMMARY_PROMPT = `# Baseline day-summary prompt\n\nYou are writing an Engram end-of-day summary.\n\nYour job:\n- compress the day into a short, useful recap\n- prioritize concrete events, decisions, mood/energy signals, and open loops\n- include a few practical next actions for tomorrow\n- avoid hype, fluff, therapy-speak, and invented facts\n\nOutput JSON with these keys:\n- \\`summary\\` — one short paragraph\n- \\`bullets\\` — 2 to 5 bullets with the most important moments\n- \\`next_actions\\` — 1 to 3 concrete actions\n- \\`risks_or_open_loops\\` — 0 to 3 things that still need attention\n\nRules:\n- stay grounded in the input only\n- if the day was mixed, say so plainly\n- do not overstate confidence or importance\n- prefer specific verbs over vague abstractions\n\nBrevity:\n- keep the summary under 90 words\n- keep bullets short and information-dense\n- omit anything that does not change what tomorrow should care about\n\nStructure:\n- \\`summary\\` should be one paragraph only\n- \\`bullets\\` should contain the most important moments, not generic restatements\n- \\`next_actions\\` and \\`risks_or_open_loops\\` should be distinct and non-overlapping\n\nRisk:\n- explicitly surface unresolved blockers, dependencies, or fragile assumptions\n- do not bury open loops inside the summary if they deserve separate attention\n\nTone:\n- sound like a clear internal daily note, not a report template\n- stay natural and direct while remaining compact`;\n\nfunction candidateRoots(): string[] {\n const currentFile = fileURLToPath(import.meta.url);\n const here = path.dirname(currentFile);\n const candidates = [path.resolve(here, \"..\"), path.resolve(here, \"..\", \"..\")];\n\n const seen = new Set<string>();\n return candidates.filter((candidate) => {\n const normalized = path.resolve(candidate);\n if (seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n}\n\nfunction resolvePromptPath(): string | null {\n for (const root of candidateRoots()) {\n const candidate = path.join(root, PROMPT_RELATIVE_PATH);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nexport async function loadDaySummaryPrompt(): Promise<string> {\n const promptPath = resolvePromptPath();\n if (promptPath) {\n try {\n const raw = await readFile(promptPath, \"utf-8\");\n // CRLF-compatible regex: allow \\r\\n or \\n line endings\n const match = raw.match(/```(?:[a-zA-Z0-9_-]+)?\\r?\\n([\\s\\S]*?)\\r?\\n```/);\n if (match?.[1]) {\n return match[1].trim();\n }\n log.warn(\"day summary prompt file does not contain a fenced prompt block; using embedded fallback\");\n } catch (err) {\n log.warn(`day summary prompt file read failed; using embedded fallback: ${err}`);\n }\n }\n return EMBEDDED_DAY_SUMMARY_PROMPT;\n}\n\nexport function formatDaySummaryMemories(memories: string | MemoryFile[]): string {\n if (typeof memories === \"string\") {\n return memories.trim();\n }\n\n return memories\n .map((memory) => {\n const category = memory.frontmatter.category || \"fact\";\n const created = memory.frontmatter.created || \"unknown\";\n return `[${memory.frontmatter.id}] (${category}, ${created})\\n${memory.content}`;\n })\n .join(\"\\n\\n\")\n .trim();\n}\n"],"mappings":";;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAI9B,IAAM,uBAAuB,KAAK,KAAK,WAAW,uBAAuB;AAIzE,IAAM,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCpC,SAAS,iBAA2B;AAClC,QAAM,cAAc,cAAc,YAAY,GAAG;AACjD,QAAM,OAAO,KAAK,QAAQ,WAAW;AACrC,QAAM,aAAa,CAAC,KAAK,QAAQ,MAAM,IAAI,GAAG,KAAK,QAAQ,MAAM,MAAM,IAAI,CAAC;AAE5E,QAAM,OAAO,oBAAI,IAAY;AAC7B,SAAO,WAAW,OAAO,CAAC,cAAc;AACtC,UAAM,aAAa,KAAK,QAAQ,SAAS;AACzC,QAAI,KAAK,IAAI,UAAU,EAAG,QAAO;AACjC,SAAK,IAAI,UAAU;AACnB,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,oBAAmC;AAC1C,aAAW,QAAQ,eAAe,GAAG;AACnC,UAAM,YAAY,KAAK,KAAK,MAAM,oBAAoB;AACtD,QAAI,WAAW,SAAS,GAAG;AACzB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,uBAAwC;AAC5D,QAAM,aAAa,kBAAkB;AACrC,MAAI,YAAY;AACd,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,YAAY,OAAO;AAE9C,YAAM,QAAQ,IAAI,MAAM,+CAA+C;AACvE,UAAI,QAAQ,CAAC,GAAG;AACd,eAAO,MAAM,CAAC,EAAE,KAAK;AAAA,MACvB;AACA,UAAI,KAAK,yFAAyF;AAAA,IACpG,SAAS,KAAK;AACZ,UAAI,KAAK,iEAAiE,GAAG,EAAE;AAAA,IACjF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,yBAAyB,UAAyC;AAChF,MAAI,OAAO,aAAa,UAAU;AAChC,WAAO,SAAS,KAAK;AAAA,EACvB;AAEA,SAAO,SACJ,IAAI,CAAC,WAAW;AACf,UAAM,WAAW,OAAO,YAAY,YAAY;AAChD,UAAM,UAAU,OAAO,YAAY,WAAW;AAC9C,WAAO,IAAI,OAAO,YAAY,EAAE,MAAM,QAAQ,KAAK,OAAO;AAAA,EAAM,OAAO,OAAO;AAAA,EAChF,CAAC,EACA,KAAK,MAAM,EACX,KAAK;AACV;","names":[]}