@remnic/core 1.1.31 → 9.3.516

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 (1102) hide show
  1. package/dist/abstraction-nodes.js +2 -2
  2. package/dist/access-cli.d.ts +1 -1
  3. package/dist/access-cli.js +158 -121
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +9 -5
  6. package/dist/access-http.js +51 -51
  7. package/dist/access-idempotency.d.ts +2 -0
  8. package/dist/access-idempotency.js +1 -1
  9. package/dist/access-mcp.d.ts +16 -9
  10. package/dist/access-mcp.js +44 -44
  11. package/dist/access-schema.d.ts +45 -13
  12. package/dist/access-schema.js +8 -8
  13. package/dist/{access-service-CkZyb35d.d.ts → access-service-CZfksQuS.d.ts} +11 -130
  14. package/dist/access-service.d.ts +7 -4
  15. package/dist/access-service.js +40 -40
  16. package/dist/action-confidence.d.ts +1 -0
  17. package/dist/active-memory-bridge.d.ts +1 -0
  18. package/dist/active-memory-bridge.js +3 -2
  19. package/dist/active-recall.d.ts +1 -0
  20. package/dist/active-recall.js +14 -9
  21. package/dist/active-recall.js.map +1 -1
  22. package/dist/adapters/claude-code.d.ts +6 -2
  23. package/dist/adapters/claude-code.js +2 -2
  24. package/dist/adapters/codex.d.ts +5 -1
  25. package/dist/adapters/codex.js +2 -2
  26. package/dist/adapters/hermes.js +2 -2
  27. package/dist/adapters/index.js +6 -6
  28. package/dist/adapters/registry.js +6 -6
  29. package/dist/adapters/replit.d.ts +4 -2
  30. package/dist/adapters/replit.js +2 -2
  31. package/dist/adapters/types.d.ts +4 -0
  32. package/dist/adapters/types.js +1 -1
  33. package/dist/behavior-learner.d.ts +1 -0
  34. package/dist/behavior-signals.d.ts +1 -0
  35. package/dist/behavior-signals.js +1 -1
  36. package/dist/bootstrap.d.ts +5 -3
  37. package/dist/bootstrap.js +2 -2
  38. package/dist/boxes.d.ts +1 -0
  39. package/dist/boxes.js +1 -1
  40. package/dist/briefing.d.ts +1 -0
  41. package/dist/briefing.js +9 -9
  42. package/dist/buffer-surprise-report.d.ts +1 -0
  43. package/dist/buffer.d.ts +1 -0
  44. package/dist/buffer.js +2 -2
  45. package/dist/bulk-import/index.d.ts +28 -0
  46. package/dist/bulk-import/index.js +31 -0
  47. package/dist/calibration.d.ts +2 -0
  48. package/dist/calibration.js +50 -17
  49. package/dist/calibration.js.map +1 -1
  50. package/dist/{capsule-crypto-5CYAGVC5.js → capsule-crypto-7FJQINUR.js} +2 -2
  51. package/dist/{capsule-merge-4MGKE7C5.js → capsule-merge-T2JRE46P.js} +3 -3
  52. package/dist/causal-behavior.d.ts +1 -0
  53. package/dist/causal-behavior.js +4 -4
  54. package/dist/causal-chain.js +4 -4
  55. package/dist/causal-consolidation.d.ts +16 -1
  56. package/dist/causal-consolidation.js +115 -32
  57. package/dist/causal-consolidation.js.map +1 -1
  58. package/dist/causal-retrieval.js +14 -6
  59. package/dist/causal-retrieval.js.map +1 -1
  60. package/dist/causal-trajectory-graph.js +2 -2
  61. package/dist/causal-trajectory.js +2 -2
  62. package/dist/{chunk-SAZS2QZB.js → chunk-23UORJ4S.js} +3 -3
  63. package/dist/{chunk-76FLAAUC.js → chunk-2AN2L4NL.js} +17 -6
  64. package/dist/chunk-2AN2L4NL.js.map +1 -0
  65. package/dist/{chunk-W4L6CZKA.js → chunk-2DL3OFLD.js} +15 -10
  66. package/dist/chunk-2DL3OFLD.js.map +1 -0
  67. package/dist/{chunk-NJ3MJQZX.js → chunk-2I5JGH3M.js} +2 -2
  68. package/dist/{chunk-NJ3MJQZX.js.map → chunk-2I5JGH3M.js.map} +1 -1
  69. package/dist/{chunk-7OZ53EXP.js → chunk-2NLLXCJG.js} +21 -10
  70. package/dist/chunk-2NLLXCJG.js.map +1 -0
  71. package/dist/{chunk-PK7H5L6Y.js → chunk-2NM43EWN.js} +2 -2
  72. package/dist/{chunk-PYXS46O7.js → chunk-3BP57I6J.js} +2 -2
  73. package/dist/{chunk-FBYESMQ2.js → chunk-3C5RPJAX.js} +2 -2
  74. package/dist/{chunk-FKFMOY3N.js → chunk-42NQ7AVG.js} +3 -4
  75. package/dist/{chunk-FKFMOY3N.js.map → chunk-42NQ7AVG.js.map} +1 -1
  76. package/dist/chunk-4426WSWL.js +73 -0
  77. package/dist/chunk-4426WSWL.js.map +1 -0
  78. package/dist/{chunk-LIRZNNUP.js → chunk-44442YCH.js} +5 -2
  79. package/dist/chunk-44442YCH.js.map +1 -0
  80. package/dist/{chunk-H3ME6L6D.js → chunk-46GJIW5M.js} +23 -20
  81. package/dist/chunk-46GJIW5M.js.map +1 -0
  82. package/dist/{chunk-QDZ2RLEC.js → chunk-472U7RDF.js} +3 -3
  83. package/dist/chunk-472U7RDF.js.map +1 -0
  84. package/dist/{chunk-NN2DKE4T.js → chunk-4H5ZJHEN.js} +16 -3
  85. package/dist/{chunk-NN2DKE4T.js.map → chunk-4H5ZJHEN.js.map} +1 -1
  86. package/dist/{chunk-56K5QLHX.js → chunk-4HP7HIE3.js} +56 -13
  87. package/dist/chunk-4HP7HIE3.js.map +1 -0
  88. package/dist/{chunk-RK2Y4XOM.js → chunk-4JRRISLU.js} +9 -6
  89. package/dist/chunk-4JRRISLU.js.map +1 -0
  90. package/dist/{chunk-XKLD5OK4.js → chunk-4RR6ROTB.js} +10 -11
  91. package/dist/chunk-4RR6ROTB.js.map +1 -0
  92. package/dist/{chunk-YROHKYBY.js → chunk-5UHVGNZD.js} +22 -6
  93. package/dist/chunk-5UHVGNZD.js.map +1 -0
  94. package/dist/{chunk-ZAVUCJ4H.js → chunk-5V456VRV.js} +154 -69
  95. package/dist/chunk-5V456VRV.js.map +1 -0
  96. package/dist/{chunk-77H5NU3M.js → chunk-6BR7L222.js} +82 -18
  97. package/dist/chunk-6BR7L222.js.map +1 -0
  98. package/dist/{chunk-4KGVTPGD.js → chunk-6F6BXB7A.js} +9 -8
  99. package/dist/chunk-6F6BXB7A.js.map +1 -0
  100. package/dist/{chunk-NMZY542O.js → chunk-6URPAY2D.js} +41 -17
  101. package/dist/chunk-6URPAY2D.js.map +1 -0
  102. package/dist/{chunk-N53K2EXC.js → chunk-6VF75M3X.js} +2 -2
  103. package/dist/{chunk-XSZEP4SF.js → chunk-6XSPNR6L.js} +6 -5
  104. package/dist/chunk-6XSPNR6L.js.map +1 -0
  105. package/dist/{chunk-6H2TESSP.js → chunk-765K3SAT.js} +3 -3
  106. package/dist/{chunk-EDTHC6UD.js → chunk-77NAFXUD.js} +2 -2
  107. package/dist/{chunk-S7KDBTWT.js → chunk-7F7Z6MOS.js} +29 -14
  108. package/dist/chunk-7F7Z6MOS.js.map +1 -0
  109. package/dist/{chunk-MZH6EHNR.js → chunk-7H6CFEBJ.js} +41 -14
  110. package/dist/chunk-7H6CFEBJ.js.map +1 -0
  111. package/dist/{chunk-MGKYQQYF.js → chunk-7Q3RCKAQ.js} +2 -2
  112. package/dist/chunk-7RXCMVFQ.js +27 -0
  113. package/dist/chunk-7RXCMVFQ.js.map +1 -0
  114. package/dist/{chunk-DGXUHMOV.js → chunk-A2IYSXDQ.js} +25 -6
  115. package/dist/chunk-A2IYSXDQ.js.map +1 -0
  116. package/dist/{chunk-EABGC2TL.js → chunk-A2Z6UCWT.js} +26 -4
  117. package/dist/chunk-A2Z6UCWT.js.map +1 -0
  118. package/dist/{chunk-5375UYTQ.js → chunk-A6D7A2FW.js} +4 -4
  119. package/dist/chunk-A6D7A2FW.js.map +1 -0
  120. package/dist/{chunk-FAAFWE4G.js → chunk-ALEPI75L.js} +24 -6
  121. package/dist/chunk-ALEPI75L.js.map +1 -0
  122. package/dist/{chunk-3SLRNYNG.js → chunk-AUDJPF4N.js} +15 -4
  123. package/dist/chunk-AUDJPF4N.js.map +1 -0
  124. package/dist/chunk-B5XMS73R.js +145 -0
  125. package/dist/chunk-B5XMS73R.js.map +1 -0
  126. package/dist/{chunk-HXXBL2KD.js → chunk-BECQDWBA.js} +44 -4
  127. package/dist/chunk-BECQDWBA.js.map +1 -0
  128. package/dist/{chunk-7SEAZFFB.js → chunk-BEUDU7Y4.js} +24 -4
  129. package/dist/chunk-BEUDU7Y4.js.map +1 -0
  130. package/dist/chunk-CHBI22MI.js +159 -0
  131. package/dist/chunk-CHBI22MI.js.map +1 -0
  132. package/dist/{chunk-GDFS42HT.js → chunk-CHCA44C3.js} +15 -8
  133. package/dist/chunk-CHCA44C3.js.map +1 -0
  134. package/dist/chunk-CINZGPSJ.js +22 -0
  135. package/dist/chunk-CINZGPSJ.js.map +1 -0
  136. package/dist/chunk-CMTINOFS.js +36 -0
  137. package/dist/chunk-CMTINOFS.js.map +1 -0
  138. package/dist/{chunk-34DQE4KF.js → chunk-CO7ZO4TU.js} +2 -2
  139. package/dist/{chunk-PFV5C235.js → chunk-CPPS65WS.js} +2 -1
  140. package/dist/{chunk-PFV5C235.js.map → chunk-CPPS65WS.js.map} +1 -1
  141. package/dist/{chunk-DINWEURR.js → chunk-CSKLPDN6.js} +20 -6
  142. package/dist/chunk-CSKLPDN6.js.map +1 -0
  143. package/dist/chunk-CWWMTTQE.js +566 -0
  144. package/dist/chunk-CWWMTTQE.js.map +1 -0
  145. package/dist/{chunk-IQT3XTKW.js → chunk-D24OXEPB.js} +13 -7
  146. package/dist/chunk-D24OXEPB.js.map +1 -0
  147. package/dist/{chunk-WIICJPET.js → chunk-DEUNUKTD.js} +6 -4
  148. package/dist/{chunk-WIICJPET.js.map → chunk-DEUNUKTD.js.map} +1 -1
  149. package/dist/{chunk-ZYVPLJ4T.js → chunk-DHGSZ3UD.js} +9 -7
  150. package/dist/chunk-DHGSZ3UD.js.map +1 -0
  151. package/dist/{chunk-JR4ZC3G4.js → chunk-DLJ4IR6M.js} +91 -41
  152. package/dist/chunk-DLJ4IR6M.js.map +1 -0
  153. package/dist/{chunk-U4SCL7B7.js → chunk-DRD2Q7HQ.js} +82 -18
  154. package/dist/chunk-DRD2Q7HQ.js.map +1 -0
  155. package/dist/{chunk-2IWUMAES.js → chunk-E62SBGQ3.js} +28 -13
  156. package/dist/chunk-E62SBGQ3.js.map +1 -0
  157. package/dist/{chunk-C5BCH4ZS.js → chunk-EAZGEEG2.js} +21 -3
  158. package/dist/chunk-EAZGEEG2.js.map +1 -0
  159. package/dist/{chunk-TPB3I2AC.js → chunk-ECZU5BJH.js} +31 -10
  160. package/dist/chunk-ECZU5BJH.js.map +1 -0
  161. package/dist/chunk-EDQVAMQI.js +308 -0
  162. package/dist/chunk-EDQVAMQI.js.map +1 -0
  163. package/dist/{chunk-RRF5UOBJ.js → chunk-EI6V5UXY.js} +22 -15
  164. package/dist/chunk-EI6V5UXY.js.map +1 -0
  165. package/dist/{chunk-ZKSK55RC.js → chunk-ETUPBUHB.js} +2 -2
  166. package/dist/{chunk-25MQ7IHJ.js → chunk-EUML3N6B.js} +17 -6
  167. package/dist/chunk-EUML3N6B.js.map +1 -0
  168. package/dist/{chunk-5RGLBDQF.js → chunk-EVZFIAPG.js} +12 -12
  169. package/dist/chunk-EVZFIAPG.js.map +1 -0
  170. package/dist/{chunk-QRNI5JBH.js → chunk-EYIEWJNI.js} +2 -2
  171. package/dist/{chunk-TPU5L5EY.js → chunk-FCOQXV3T.js} +272 -411
  172. package/dist/chunk-FCOQXV3T.js.map +1 -0
  173. package/dist/{chunk-TMQLARTH.js → chunk-FK556DDH.js} +34 -15
  174. package/dist/chunk-FK556DDH.js.map +1 -0
  175. package/dist/{chunk-43PJZYGL.js → chunk-FPGE5NVO.js} +45 -10
  176. package/dist/chunk-FPGE5NVO.js.map +1 -0
  177. package/dist/{chunk-3VAL7ZL2.js → chunk-FUC4LZMD.js} +60 -25
  178. package/dist/chunk-FUC4LZMD.js.map +1 -0
  179. package/dist/{chunk-C6QPK5GG.js → chunk-FZZ2QTJI.js} +2 -2
  180. package/dist/{chunk-D46YSIYX.js → chunk-G3Z3QEF5.js} +19 -11
  181. package/dist/{chunk-D46YSIYX.js.map → chunk-G3Z3QEF5.js.map} +1 -1
  182. package/dist/{chunk-3JXBXXM2.js → chunk-G4IAEX6D.js} +2 -2
  183. package/dist/{chunk-MSWG7JI6.js → chunk-G56P5RLD.js} +8 -2
  184. package/dist/chunk-G56P5RLD.js.map +1 -0
  185. package/dist/{chunk-AGZQD76C.js → chunk-GCGJW34D.js} +48 -2
  186. package/dist/chunk-GCGJW34D.js.map +1 -0
  187. package/dist/chunk-H2NCNXMS.js +159 -0
  188. package/dist/chunk-H2NCNXMS.js.map +1 -0
  189. package/dist/{chunk-XYIK4LF6.js → chunk-H3FZVNRN.js} +8 -2
  190. package/dist/chunk-H3FZVNRN.js.map +1 -0
  191. package/dist/{chunk-YU5KIWYQ.js → chunk-HC6EKOID.js} +94 -43
  192. package/dist/chunk-HC6EKOID.js.map +1 -0
  193. package/dist/{chunk-TK4UEOSK.js → chunk-HDDRVXX4.js} +8 -8
  194. package/dist/chunk-HDDRVXX4.js.map +1 -0
  195. package/dist/{chunk-LLQ2LLWF.js → chunk-HENLZHIT.js} +15 -5
  196. package/dist/chunk-HENLZHIT.js.map +1 -0
  197. package/dist/{chunk-N2D6GXBM.js → chunk-HINSGUA7.js} +28 -20
  198. package/dist/chunk-HINSGUA7.js.map +1 -0
  199. package/dist/{chunk-APO3DCMU.js → chunk-HLAVGJ62.js} +30 -8
  200. package/dist/chunk-HLAVGJ62.js.map +1 -0
  201. package/dist/{chunk-TPMQ3G6Z.js → chunk-HOJZMQ4J.js} +2 -2
  202. package/dist/chunk-HOJZMQ4J.js.map +1 -0
  203. package/dist/{chunk-LUDTDZLK.js → chunk-HPWVAEET.js} +33 -7
  204. package/dist/chunk-HPWVAEET.js.map +1 -0
  205. package/dist/{chunk-NZL6GGQE.js → chunk-HQ6NIBL6.js} +92 -30
  206. package/dist/chunk-HQ6NIBL6.js.map +1 -0
  207. package/dist/{chunk-UWVJF25J.js → chunk-HWVTS5NO.js} +20 -6
  208. package/dist/chunk-HWVTS5NO.js.map +1 -0
  209. package/dist/{chunk-2WWLHTZY.js → chunk-IC4GELZE.js} +2 -2
  210. package/dist/{chunk-QA2ZAPBU.js → chunk-IPLYGWQF.js} +28 -20
  211. package/dist/chunk-IPLYGWQF.js.map +1 -0
  212. package/dist/{chunk-A6KTB5R6.js → chunk-IQ3OI2RR.js} +3 -3
  213. package/dist/chunk-IQ3OI2RR.js.map +1 -0
  214. package/dist/{chunk-6LVVDPJ4.js → chunk-J64TK33U.js} +3 -4
  215. package/dist/chunk-J64TK33U.js.map +1 -0
  216. package/dist/{chunk-6FC5EGNV.js → chunk-JBPKEARU.js} +15 -5
  217. package/dist/{chunk-6FC5EGNV.js.map → chunk-JBPKEARU.js.map} +1 -1
  218. package/dist/{chunk-RHY3HH7P.js → chunk-JFEKNTX7.js} +125 -33
  219. package/dist/chunk-JFEKNTX7.js.map +1 -0
  220. package/dist/{chunk-TZOLIGIG.js → chunk-JJEJJ7RK.js} +4 -2
  221. package/dist/chunk-JJEJJ7RK.js.map +1 -0
  222. package/dist/{chunk-PCUKNJAZ.js → chunk-JKV57BTN.js} +2 -2
  223. package/dist/{chunk-EJI5XIBB.js → chunk-JLNBQWZ2.js} +55 -7
  224. package/dist/chunk-JLNBQWZ2.js.map +1 -0
  225. package/dist/{chunk-PIRJPV5T.js → chunk-JNANKJLN.js} +2 -2
  226. package/dist/chunk-JNANKJLN.js.map +1 -0
  227. package/dist/{chunk-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
  228. package/dist/chunk-JUC24CTX.js.map +1 -0
  229. package/dist/{chunk-OIGNEXKZ.js → chunk-K5O2QY6T.js} +5 -1
  230. package/dist/{chunk-OIGNEXKZ.js.map → chunk-K5O2QY6T.js.map} +1 -1
  231. package/dist/{chunk-ZTFCYYEZ.js → chunk-KCYE2MZM.js} +3 -3
  232. package/dist/chunk-KCYE2MZM.js.map +1 -0
  233. package/dist/{chunk-JWPLJLDU.js → chunk-KD3QD3A5.js} +2 -2
  234. package/dist/{chunk-JWPLJLDU.js.map → chunk-KD3QD3A5.js.map} +1 -1
  235. package/dist/{chunk-YRMVARQP.js → chunk-KFY3SGN7.js} +49 -2
  236. package/dist/chunk-KFY3SGN7.js.map +1 -0
  237. package/dist/{chunk-CYFQJMUV.js → chunk-KIB7SDIJ.js} +15 -10
  238. package/dist/chunk-KIB7SDIJ.js.map +1 -0
  239. package/dist/{chunk-3KW65B36.js → chunk-KILOTVIF.js} +95 -48
  240. package/dist/chunk-KILOTVIF.js.map +1 -0
  241. package/dist/{chunk-MXFBBHJU.js → chunk-KJMYHC7K.js} +10 -5
  242. package/dist/chunk-KJMYHC7K.js.map +1 -0
  243. package/dist/{chunk-W3LR522O.js → chunk-KM2A35EO.js} +36 -34
  244. package/dist/chunk-KM2A35EO.js.map +1 -0
  245. package/dist/{chunk-575RMLWN.js → chunk-KXULCVOC.js} +30 -24
  246. package/dist/chunk-KXULCVOC.js.map +1 -0
  247. package/dist/{chunk-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
  248. package/dist/chunk-L227SKTB.js.map +1 -0
  249. package/dist/{chunk-BVF3AGJP.js → chunk-LJBOVCQG.js} +26 -11
  250. package/dist/chunk-LJBOVCQG.js.map +1 -0
  251. package/dist/{chunk-2KI4QFHU.js → chunk-LMDRGRJ2.js} +2 -2
  252. package/dist/{chunk-MY6TPVXW.js → chunk-LMPHTYJC.js} +2 -2
  253. package/dist/{chunk-EHRTFRWW.js → chunk-LQHDIS7L.js} +10 -5
  254. package/dist/chunk-LQHDIS7L.js.map +1 -0
  255. package/dist/chunk-LUDUFZTV.js +170 -0
  256. package/dist/chunk-LUDUFZTV.js.map +1 -0
  257. package/dist/{chunk-5HRY2WRF.js → chunk-LZ3VEOU5.js} +2 -2
  258. package/dist/{chunk-Q7P4WJDP.js → chunk-M5T4Q2ZU.js} +1 -1
  259. package/dist/chunk-M5T4Q2ZU.js.map +1 -0
  260. package/dist/{chunk-ICRIXAP2.js → chunk-MC4FJXPA.js} +16 -6
  261. package/dist/chunk-MC4FJXPA.js.map +1 -0
  262. package/dist/{chunk-WPGJYVUH.js → chunk-MGVIEM2O.js} +23 -6
  263. package/dist/chunk-MGVIEM2O.js.map +1 -0
  264. package/dist/{chunk-NGAVDO7E.js → chunk-OADWQ5CR.js} +2 -2
  265. package/dist/{chunk-2NMMFZ5T.js → chunk-OD4FM2U7.js} +6 -3
  266. package/dist/chunk-OD4FM2U7.js.map +1 -0
  267. package/dist/{chunk-OZHRDTDX.js → chunk-OKTXM5H4.js} +11 -1
  268. package/dist/chunk-OKTXM5H4.js.map +1 -0
  269. package/dist/{chunk-RXDLTSWT.js → chunk-ONPLNAPX.js} +16 -7
  270. package/dist/chunk-ONPLNAPX.js.map +1 -0
  271. package/dist/{chunk-FJ43PRLT.js → chunk-ORFGK3XI.js} +20 -14
  272. package/dist/chunk-ORFGK3XI.js.map +1 -0
  273. package/dist/{chunk-DOM4GKSW.js → chunk-OZKVVUJB.js} +3 -3
  274. package/dist/{chunk-3TNBOMQT.js → chunk-PCI747N2.js} +13 -13
  275. package/dist/{chunk-3TNBOMQT.js.map → chunk-PCI747N2.js.map} +1 -1
  276. package/dist/{chunk-MT4HVDUZ.js → chunk-PM3QHTFT.js} +3 -3
  277. package/dist/{chunk-4DWOBS2A.js → chunk-PRQJ5ESM.js} +27 -2
  278. package/dist/{chunk-4DWOBS2A.js.map → chunk-PRQJ5ESM.js.map} +1 -1
  279. package/dist/chunk-PU44GBL4.js +52 -0
  280. package/dist/chunk-PU44GBL4.js.map +1 -0
  281. package/dist/{chunk-MJFNCJXV.js → chunk-Q4CAQGKQ.js} +47 -9
  282. package/dist/chunk-Q4CAQGKQ.js.map +1 -0
  283. package/dist/{chunk-U3WSW6PZ.js → chunk-QMYXNM4P.js} +90 -35
  284. package/dist/chunk-QMYXNM4P.js.map +1 -0
  285. package/dist/{chunk-XVVIG67A.js → chunk-QVJ4NWL2.js} +62 -18
  286. package/dist/chunk-QVJ4NWL2.js.map +1 -0
  287. package/dist/{chunk-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
  288. package/dist/chunk-QY7YA7OL.js.map +1 -0
  289. package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
  290. package/dist/{chunk-2PRLKQAH.js → chunk-RLV3PQGH.js} +35 -19
  291. package/dist/chunk-RLV3PQGH.js.map +1 -0
  292. package/dist/{chunk-WW3QQF4H.js → chunk-ROZJACKP.js} +16 -1
  293. package/dist/chunk-ROZJACKP.js.map +1 -0
  294. package/dist/{chunk-7MNMYOFP.js → chunk-RSUYKGGZ.js} +3 -4
  295. package/dist/chunk-RSUYKGGZ.js.map +1 -0
  296. package/dist/{chunk-LT3NLYSI.js → chunk-RUZOJKNF.js} +10 -7
  297. package/dist/chunk-RUZOJKNF.js.map +1 -0
  298. package/dist/{chunk-326G7DJK.js → chunk-RW5DGAGO.js} +67 -13
  299. package/dist/chunk-RW5DGAGO.js.map +1 -0
  300. package/dist/{chunk-KOSORCJG.js → chunk-S53PKKWK.js} +63 -24
  301. package/dist/chunk-S53PKKWK.js.map +1 -0
  302. package/dist/{chunk-65PG43EQ.js → chunk-S7WU3Y3D.js} +21 -4
  303. package/dist/chunk-S7WU3Y3D.js.map +1 -0
  304. package/dist/{chunk-SKE7JYKA.js → chunk-SFXKHM7P.js} +2 -2
  305. package/dist/{chunk-HMDCOMYU.js → chunk-SKGV326D.js} +3 -3
  306. package/dist/{chunk-I5GLV3VE.js → chunk-SML26KED.js} +33 -26
  307. package/dist/{chunk-I5GLV3VE.js.map → chunk-SML26KED.js.map} +1 -1
  308. package/dist/chunk-T2PO5MUF.js +62 -0
  309. package/dist/chunk-T2PO5MUF.js.map +1 -0
  310. package/dist/{chunk-C7VW7C3F.js → chunk-TDKQGLJW.js} +3 -3
  311. package/dist/chunk-TDKQGLJW.js.map +1 -0
  312. package/dist/{chunk-3QKK7QOS.js → chunk-TERNBNJB.js} +3 -3
  313. package/dist/chunk-TERNBNJB.js.map +1 -0
  314. package/dist/{chunk-MXC3AP5I.js → chunk-TGQ2NTWH.js} +12 -7
  315. package/dist/chunk-TGQ2NTWH.js.map +1 -0
  316. package/dist/{chunk-3Y4P7RXM.js → chunk-TMSXWOBZ.js} +3 -4
  317. package/dist/chunk-TMSXWOBZ.js.map +1 -0
  318. package/dist/{chunk-3ZLVGM76.js → chunk-TTGZV5R3.js} +106 -44
  319. package/dist/chunk-TTGZV5R3.js.map +1 -0
  320. package/dist/{chunk-5UM2VJ6D.js → chunk-UEY3VB6W.js} +2 -2
  321. package/dist/{chunk-I6K5FBRQ.js → chunk-UI3NYK34.js} +4 -1
  322. package/dist/{chunk-I6K5FBRQ.js.map → chunk-UI3NYK34.js.map} +1 -1
  323. package/dist/{chunk-VBJ7V5SK.js → chunk-UIPDNLXA.js} +21 -8
  324. package/dist/chunk-UIPDNLXA.js.map +1 -0
  325. package/dist/{chunk-GIF42EW3.js → chunk-UP6MOYCB.js} +3 -3
  326. package/dist/{chunk-K4FLSOR5.js → chunk-USYGGIJZ.js} +44 -15
  327. package/dist/chunk-USYGGIJZ.js.map +1 -0
  328. package/dist/{chunk-FIT6DMX6.js → chunk-UWY7GIVS.js} +152 -54
  329. package/dist/chunk-UWY7GIVS.js.map +1 -0
  330. package/dist/{chunk-MRILGULB.js → chunk-V2RCP53Q.js} +2 -2
  331. package/dist/{chunk-XKECPATV.js → chunk-VFUEZZBS.js} +113 -4
  332. package/dist/chunk-VFUEZZBS.js.map +1 -0
  333. package/dist/{chunk-FSFEQI74.js → chunk-W7L6HXUC.js} +2 -2
  334. package/dist/{chunk-3IQ2TR4N.js → chunk-WLEB7WCG.js} +2 -2
  335. package/dist/{chunk-GL6I6MEQ.js → chunk-WSGF57U2.js} +3 -3
  336. package/dist/{chunk-KNKUID7G.js → chunk-X7Y7WX73.js} +72 -6
  337. package/dist/chunk-X7Y7WX73.js.map +1 -0
  338. package/dist/{chunk-5NPGSAVB.js → chunk-XEKAG3FM.js} +23 -5
  339. package/dist/chunk-XEKAG3FM.js.map +1 -0
  340. package/dist/{chunk-3APJ5EVB.js → chunk-XKIQZXUB.js} +41 -26
  341. package/dist/chunk-XKIQZXUB.js.map +1 -0
  342. package/dist/chunk-XKXKSQU7.js +92 -0
  343. package/dist/chunk-XKXKSQU7.js.map +1 -0
  344. package/dist/{chunk-JA3AK3PT.js → chunk-XNLXAWHX.js} +4 -4
  345. package/dist/{chunk-CULXMQJH.js → chunk-XPXEJRUB.js} +3 -3
  346. package/dist/chunk-XPXEJRUB.js.map +1 -0
  347. package/dist/{chunk-PZIAX57I.js → chunk-XR6DNK4U.js} +7 -4
  348. package/dist/chunk-XR6DNK4U.js.map +1 -0
  349. package/dist/{chunk-47VWKCAF.js → chunk-XSQ4SGM5.js} +33 -4
  350. package/dist/chunk-XSQ4SGM5.js.map +1 -0
  351. package/dist/{chunk-66DHUKLO.js → chunk-XSWKORGM.js} +16 -14
  352. package/dist/chunk-XSWKORGM.js.map +1 -0
  353. package/dist/{chunk-QR3C7BKQ.js → chunk-XZ4WBBB5.js} +7 -8
  354. package/dist/chunk-XZ4WBBB5.js.map +1 -0
  355. package/dist/{chunk-WNARATI3.js → chunk-Y2SXZ5KZ.js} +59 -11
  356. package/dist/chunk-Y2SXZ5KZ.js.map +1 -0
  357. package/dist/{chunk-QLLBRHAT.js → chunk-YDMVYYD2.js} +229 -264
  358. package/dist/chunk-YDMVYYD2.js.map +1 -0
  359. package/dist/{chunk-SIC6U3GZ.js → chunk-YHV3KRKS.js} +3 -3
  360. package/dist/{chunk-ZPKBYX2F.js → chunk-YNDLCWXS.js} +85 -9
  361. package/dist/chunk-YNDLCWXS.js.map +1 -0
  362. package/dist/{chunk-W6AQJ2PY.js → chunk-YNXOKMJP.js} +35 -16
  363. package/dist/chunk-YNXOKMJP.js.map +1 -0
  364. package/dist/{chunk-VLXA6PI2.js → chunk-YQMZ7IH2.js} +4 -4
  365. package/dist/{chunk-TMM4S4IJ.js → chunk-YR6GIWWY.js} +58 -8
  366. package/dist/chunk-YR6GIWWY.js.map +1 -0
  367. package/dist/{chunk-DK5LDEQM.js → chunk-YR7XMOWK.js} +39 -23
  368. package/dist/chunk-YR7XMOWK.js.map +1 -0
  369. package/dist/{chunk-U7EJOMFC.js → chunk-ZEY4KYRQ.js} +41 -14
  370. package/dist/chunk-ZEY4KYRQ.js.map +1 -0
  371. package/dist/chunk-ZFXCQPNO.js +27 -0
  372. package/dist/chunk-ZFXCQPNO.js.map +1 -0
  373. package/dist/citations.js +1 -1
  374. package/dist/{cli-kuh9PwZ5.d.ts → cli-CPe_2KB1.d.ts} +8 -31
  375. package/dist/cli.d.ts +10 -6
  376. package/dist/cli.js +124 -119
  377. package/dist/commitment-ledger.js +2 -2
  378. package/dist/compat/checks.js +1 -2
  379. package/dist/compounding/engine.d.ts +3 -2
  380. package/dist/compounding/engine.js +11 -11
  381. package/dist/compounding/preference-consolidator.d.ts +1 -0
  382. package/dist/compounding/preference-consolidator.js +8 -8
  383. package/dist/compounding/preference-consolidator.js.map +1 -1
  384. package/dist/compression-optimizer.d.ts +1 -0
  385. package/dist/compression-optimizer.js +1 -1
  386. package/dist/config.d.ts +1 -0
  387. package/dist/config.js +3 -2
  388. package/dist/connectors/codex-materialize-runner.d.ts +1 -0
  389. package/dist/connectors/codex-materialize-runner.js +12 -11
  390. package/dist/connectors/codex-materialize.d.ts +1 -0
  391. package/dist/connectors/codex-materialize.js +3 -2
  392. package/dist/connectors/index.d.ts +1 -0
  393. package/dist/connectors/index.js +14 -14
  394. package/dist/{connectors-cli-CwbyjGR7.d.ts → connectors-cli-DbTPNj2H.d.ts} +7 -1
  395. package/dist/connectors-cli.d.ts +1 -1
  396. package/dist/connectors-cli.js +3 -1
  397. package/dist/consolidation-provenance-check.d.ts +1 -0
  398. package/dist/consolidation-provenance-check.js +2 -2
  399. package/dist/consolidation-undo.d.ts +1 -0
  400. package/dist/consolidation-undo.js +1 -1
  401. package/dist/contradiction/index.d.ts +3 -1
  402. package/dist/contradiction/index.js +3 -3
  403. package/dist/{contradiction-review-ATP4S6IC.js → contradiction-review-6V2LXXK6.js} +2 -2
  404. package/dist/{contradiction-scan-5A4IDZV5.js → contradiction-scan-GIRVC4C7.js} +3 -3
  405. package/dist/conversation-index/backend.d.ts +3 -1
  406. package/dist/conversation-index/backend.js +3 -3
  407. package/dist/conversation-index/chunker.d.ts +1 -0
  408. package/dist/conversation-index/cleanup.js +1 -1
  409. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  410. package/dist/conversation-index/faiss-adapter.js +1 -1
  411. package/dist/conversation-index/indexer.d.ts +5 -2
  412. package/dist/conversation-index/indexer.js +1 -1
  413. package/dist/conversation-index/search.d.ts +2 -1
  414. package/dist/cross-namespace-budget.js +1 -1
  415. package/dist/cue-anchors.js +2 -2
  416. package/dist/dashboard-runtime.d.ts +6 -0
  417. package/dist/dashboard-runtime.js +3 -3
  418. package/dist/day-summary.d.ts +1 -0
  419. package/dist/day-summary.js +2 -2
  420. package/dist/delinearize.d.ts +1 -0
  421. package/dist/direct-answer-wiring.d.ts +1 -0
  422. package/dist/direct-answer.d.ts +1 -0
  423. package/dist/{dreams-ledger-LR2NBAZE.js → dreams-ledger-3WSCI5V4.js} +5 -4
  424. package/dist/{dreams-ledger-LR2NBAZE.js.map → dreams-ledger-3WSCI5V4.js.map} +1 -1
  425. package/dist/embedding-fallback.d.ts +3 -0
  426. package/dist/embedding-fallback.js +2 -2
  427. package/dist/enrichment/index.d.ts +1 -0
  428. package/dist/enrichment/index.js +1 -1
  429. package/dist/entity-retrieval.d.ts +2 -0
  430. package/dist/entity-retrieval.js +9 -9
  431. package/dist/entity-schema.d.ts +1 -0
  432. package/dist/evals.js +1 -1
  433. package/dist/explicit-capture.d.ts +5 -3
  434. package/dist/explicit-capture.js +2 -2
  435. package/dist/extraction-judge-telemetry.d.ts +2 -0
  436. package/dist/extraction-judge-training.d.ts +2 -0
  437. package/dist/extraction-judge.d.ts +2 -0
  438. package/dist/extraction.d.ts +2 -0
  439. package/dist/extraction.js +12 -12
  440. package/dist/{faiss-adapter-CzPghc4C.d.ts → faiss-adapter-BHecI1fF.d.ts} +4 -1
  441. package/dist/fallback-llm.d.ts +11 -1
  442. package/dist/fallback-llm.js +8 -6
  443. package/dist/{first-start-migration-4MHQEOSD.js → first-start-migration-CKTCTCQI.js} +5 -5
  444. package/dist/graph-dashboard-diff.d.ts +4 -0
  445. package/dist/graph-dashboard-diff.js +1 -1
  446. package/dist/graph-dashboard-parser.js +1 -1
  447. package/dist/{graph-edge-decay-5DI5GUNL.js → graph-edge-decay-MUP5J7CC.js} +6 -6
  448. package/dist/graph-events.js +1 -1
  449. package/dist/graph-snapshot.js +3 -3
  450. package/dist/graph.js +2 -2
  451. package/dist/harmonic-retrieval.js +4 -4
  452. package/dist/identity-continuity.d.ts +1 -0
  453. package/dist/importance.d.ts +1 -0
  454. package/dist/importers/index.d.ts +244 -0
  455. package/dist/importers/index.js +20 -0
  456. package/dist/index.d.ts +20 -350
  457. package/dist/index.js +885 -562
  458. package/dist/index.js.map +1 -1
  459. package/dist/intent.d.ts +1 -0
  460. package/dist/lcm/archive.d.ts +2 -2
  461. package/dist/lcm/archive.js +2 -2
  462. package/dist/lcm/engine.d.ts +3 -2
  463. package/dist/lcm/engine.js +6 -6
  464. package/dist/lcm/index.d.ts +1 -0
  465. package/dist/lcm/index.js +8 -8
  466. package/dist/lcm/recall.js +1 -1
  467. package/dist/lcm/summarizer.js +3 -3
  468. package/dist/lcm/tools.d.ts +1 -0
  469. package/dist/lifecycle.d.ts +1 -0
  470. package/dist/live-connectors-runner.d.ts +1 -0
  471. package/dist/live-connectors-runner.js +6 -6
  472. package/dist/local-llm.d.ts +1 -0
  473. package/dist/local-llm.js +2 -2
  474. package/dist/maintenance/archive-observations.js +1 -1
  475. package/dist/maintenance/memory-governance.d.ts +3 -1
  476. package/dist/maintenance/memory-governance.js +10 -8
  477. package/dist/maintenance/migrate-observations.js +3 -2
  478. package/dist/maintenance/observation-ledger-utils.d.ts +3 -0
  479. package/dist/maintenance/observation-ledger-utils.js +2 -1
  480. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -1
  481. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -8
  482. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -1
  483. package/dist/maintenance/rebuild-memory-projection.js +13 -10
  484. package/dist/maintenance/rebuild-observations.d.ts +1 -0
  485. package/dist/maintenance/rebuild-observations.js +3 -2
  486. package/dist/mcp-memory-inspector-app.d.ts +7 -4
  487. package/dist/mcp-memory-inspector-app.js +1 -1
  488. package/dist/memory-action-policy.d.ts +1 -0
  489. package/dist/memory-cache.d.ts +1 -0
  490. package/dist/memory-cache.js +1 -1
  491. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -0
  492. package/dist/memory-projection-store.d.ts +1 -0
  493. package/dist/memory-projection-store.js +1 -1
  494. package/dist/memory-provenance.d.ts +1 -0
  495. package/dist/memory-worth-outcomes.d.ts +1 -0
  496. package/dist/migrate/from-engram.js +2 -2
  497. package/dist/{migrate-from-identity-anchor-G27MCD6A.js → migrate-from-identity-anchor-EB4XI4Q2.js} +2 -2
  498. package/dist/model-registry.js +1 -1
  499. package/dist/models-json.d.ts +1 -0
  500. package/dist/namespaces/migrate.d.ts +3 -0
  501. package/dist/namespaces/migrate.js +26 -24
  502. package/dist/namespaces/principal.d.ts +1 -0
  503. package/dist/namespaces/principal.js +2 -1
  504. package/dist/namespaces/search.d.ts +2 -1
  505. package/dist/namespaces/search.js +17 -15
  506. package/dist/namespaces/storage.d.ts +4 -2
  507. package/dist/namespaces/storage.js +10 -9
  508. package/dist/native-knowledge.d.ts +1 -0
  509. package/dist/native-knowledge.js +1 -1
  510. package/dist/negative.js +1 -1
  511. package/dist/network/webdav.d.ts +16 -1
  512. package/dist/network/webdav.js +5 -3
  513. package/dist/objective-state-writers.js +4 -4
  514. package/dist/objective-state.js +2 -2
  515. package/dist/offline-sync.d.ts +4 -0
  516. package/dist/offline-sync.js +4 -4
  517. package/dist/operator-toolkit.d.ts +4 -1
  518. package/dist/operator-toolkit.js +37 -34
  519. package/dist/opik-exporter.js +1 -1
  520. package/dist/{orchestrator-DuWl9Hwx.d.ts → orchestrator-Co9nxRLF.d.ts} +4 -74
  521. package/dist/orchestrator.d.ts +5 -3
  522. package/dist/orchestrator.js +101 -98
  523. package/dist/page-versioning.js +1 -1
  524. package/dist/path-X2K5XCHL.js +9 -0
  525. package/dist/patterns-cli.d.ts +1 -0
  526. package/dist/peers/index.d.ts +328 -0
  527. package/dist/{peers-HCVGHMAE.js → peers/index.js} +4 -4
  528. package/dist/pipeline-D18UAKlN.d.ts +32 -0
  529. package/dist/plugin-entry-resolver.d.ts +9 -0
  530. package/dist/plugin-entry-resolver.js +8 -0
  531. package/dist/plugin-entry-resolver.js.map +1 -0
  532. package/dist/plugin-id.d.ts +2 -21
  533. package/dist/plugin-id.js +33 -4
  534. package/dist/plugin-id.js.map +1 -1
  535. package/dist/policy-runtime.d.ts +4 -0
  536. package/dist/policy-runtime.js +1 -1
  537. package/dist/profiling.js +1 -1
  538. package/dist/qmd-recall-cache.d.ts +1 -0
  539. package/dist/qmd.d.ts +2 -1
  540. package/dist/qmd.js +3 -3
  541. package/dist/recall-disclosure-escalation.d.ts +1 -0
  542. package/dist/recall-explain-renderer.d.ts +1 -0
  543. package/dist/recall-explain-renderer.js +3 -3
  544. package/dist/recall-state.d.ts +8 -1
  545. package/dist/recall-state.js +2 -1
  546. package/dist/recall-tag-filter.d.ts +1 -0
  547. package/dist/recall-xray-cli.d.ts +1 -0
  548. package/dist/recall-xray-cli.js +4 -4
  549. package/dist/recall-xray-renderer.d.ts +1 -0
  550. package/dist/recall-xray-renderer.js +3 -3
  551. package/dist/recall-xray.d.ts +1 -0
  552. package/dist/recall-xray.js +2 -2
  553. package/dist/relevance.d.ts +7 -1
  554. package/dist/relevance.js +2 -1
  555. package/dist/replay/normalizers/chatgpt.js +2 -2
  556. package/dist/replay/normalizers/claude.js +2 -2
  557. package/dist/replay/normalizers/openclaw.js +2 -2
  558. package/dist/replay/normalizers/shared.js +1 -1
  559. package/dist/replay/runner.js +1 -1
  560. package/dist/rerank.js +1 -1
  561. package/dist/{resolution-B7FNQSSP.js → resolution-ZY7VM6WS.js} +3 -3
  562. package/dist/resolution-ZY7VM6WS.js.map +1 -0
  563. package/dist/resolve-auth-token.d.ts +1 -0
  564. package/dist/resolve-auth-token.js +1 -1
  565. package/dist/resolve-provider-secret.d.ts +19 -29
  566. package/dist/resolve-provider-secret.js +2 -6
  567. package/dist/resume-bundles.js +10 -9
  568. package/dist/retrieval-agents.d.ts +2 -1
  569. package/dist/retrieval-agents.js +2 -1
  570. package/dist/retrieval-tiers.d.ts +1 -0
  571. package/dist/routing/engine.d.ts +1 -0
  572. package/dist/routing/store.d.ts +3 -0
  573. package/dist/routing/store.js +1 -1
  574. package/dist/runtime/env.js +1 -1
  575. package/dist/schemas.d.ts +191 -17
  576. package/dist/schemas.js +1 -1
  577. package/dist/sdk-compat.js +1 -1
  578. package/dist/search/document-scanner.js +1 -1
  579. package/dist/search/embed-helper.d.ts +7 -2
  580. package/dist/search/embed-helper.js +3 -1
  581. package/dist/search/factory.d.ts +2 -1
  582. package/dist/search/factory.js +15 -14
  583. package/dist/search/index.d.ts +2 -1
  584. package/dist/search/index.js +21 -20
  585. package/dist/search/lancedb-backend.d.ts +8 -7
  586. package/dist/search/lancedb-backend.js +4 -2
  587. package/dist/search/meilisearch-backend.d.ts +8 -7
  588. package/dist/search/meilisearch-backend.js +4 -2
  589. package/dist/search/noop-backend.d.ts +2 -1
  590. package/dist/search/noop-backend.js +1 -1
  591. package/dist/search/orama-backend.d.ts +10 -8
  592. package/dist/search/orama-backend.js +8 -4
  593. package/dist/search/port.d.ts +2 -1
  594. package/dist/search/remote-backend.d.ts +2 -1
  595. package/dist/search/remote-backend.js +1 -1
  596. package/dist/secure-store/index.d.ts +16 -3
  597. package/dist/secure-store/index.js +2 -2
  598. package/dist/{semantic-VwGI14Ok.d.ts → semantic-SLAa_prH.d.ts} +5 -3
  599. package/dist/semantic-consolidation.d.ts +1 -0
  600. package/dist/semantic-consolidation.js +14 -13
  601. package/dist/semantic-rule-promotion.js +8 -8
  602. package/dist/semantic-rule-verifier.d.ts +1 -0
  603. package/dist/semantic-rule-verifier.js +8 -8
  604. package/dist/session-integrity.d.ts +1 -0
  605. package/dist/session-integrity.js +1 -1
  606. package/dist/session-observer-bands.d.ts +1 -0
  607. package/dist/session-observer-state.d.ts +6 -1
  608. package/dist/session-observer-state.js +1 -1
  609. package/dist/shared-context/manager.d.ts +5 -0
  610. package/dist/shared-context/manager.js +3 -3
  611. package/dist/signal.d.ts +1 -0
  612. package/dist/signal.js +1 -1
  613. package/dist/source-attribution.js +1 -1
  614. package/dist/state-store-4QZISH3J.js +30 -0
  615. package/dist/state-store-4QZISH3J.js.map +1 -0
  616. package/dist/storage-C4DX8CuG.d.ts +157 -0
  617. package/dist/storage.d.ts +2 -0
  618. package/dist/storage.js +7 -7
  619. package/dist/store-contract.js +1 -1
  620. package/dist/summarizer.d.ts +1 -0
  621. package/dist/summarizer.js +7 -7
  622. package/dist/summary-snapshot.d.ts +1 -0
  623. package/dist/surfaces/dreams.js +48 -17
  624. package/dist/surfaces/dreams.js.map +1 -1
  625. package/dist/temporal-supersession.d.ts +1 -0
  626. package/dist/temporal-supersession.js +1 -1
  627. package/dist/temporal-validity.d.ts +1 -0
  628. package/dist/threading.d.ts +1 -0
  629. package/dist/tier-migration.d.ts +1 -0
  630. package/dist/tier-routing.d.ts +1 -0
  631. package/dist/{tier-stats-62ZVDFKS.js → tier-stats-SKML2OSF.js} +5 -5
  632. package/dist/tmt.js +1 -1
  633. package/dist/tokens.js +2 -2
  634. package/dist/topics.d.ts +1 -0
  635. package/dist/{trace-C5ETWBEF.js → trace-WM7V4CKI.js} +31 -1
  636. package/dist/trace-WM7V4CKI.js.map +1 -0
  637. package/dist/transcript.d.ts +1 -0
  638. package/dist/transcript.js +2 -2
  639. package/dist/transfer/autodetect.js +7 -7
  640. package/dist/transfer/backup.js +5 -5
  641. package/dist/transfer/capsule-export.js +5 -5
  642. package/dist/transfer/capsule-import.d.ts +6 -0
  643. package/dist/transfer/capsule-import.js +4 -4
  644. package/dist/transfer/export-json.js +3 -3
  645. package/dist/transfer/export-md.js +3 -3
  646. package/dist/transfer/export-sqlite.js +3 -3
  647. package/dist/transfer/fs-utils.d.ts +2 -1
  648. package/dist/transfer/fs-utils.js +5 -3
  649. package/dist/transfer/import-json.js +3 -3
  650. package/dist/transfer/import-md.js +3 -3
  651. package/dist/transfer/import-sqlite.js +3 -3
  652. package/dist/trust-zones.js +2 -2
  653. package/dist/types-B1VHaf2w.d.ts +126 -0
  654. package/dist/types-BliCnURB.d.ts +83 -0
  655. package/dist/types.d.ts +35 -0
  656. package/dist/types.js +1 -1
  657. package/dist/utility-learner.js +3 -3
  658. package/dist/utility-runtime.d.ts +1 -0
  659. package/dist/utility-runtime.js +4 -4
  660. package/dist/utility-telemetry.js +2 -2
  661. package/dist/verified-recall.js +9 -9
  662. package/dist/work/board.js +2 -2
  663. package/dist/work/boundary.js +1 -1
  664. package/dist/work/storage.d.ts +5 -0
  665. package/dist/work/storage.js +1 -1
  666. package/dist/work-product-ledger.js +2 -2
  667. package/package.json +74 -3
  668. package/scripts/ensure-better-sqlite3.mjs +8 -7
  669. package/scripts/faiss_index.py +141 -29
  670. package/src/access-cli.test.ts +87 -2
  671. package/src/access-cli.ts +59 -5
  672. package/src/access-http.test.ts +150 -0
  673. package/src/access-http.ts +103 -34
  674. package/src/access-idempotency.ts +136 -3
  675. package/src/access-mcp.test.ts +155 -0
  676. package/src/access-mcp.ts +116 -30
  677. package/src/access-schema.ts +22 -4
  678. package/src/access-service-namespace.test.ts +9 -9
  679. package/src/access-service-project-tag.test.ts +37 -0
  680. package/src/access-service.ts +15 -14
  681. package/src/active-recall.test.ts +29 -1
  682. package/src/active-recall.ts +11 -7
  683. package/src/adapters/claude-code.ts +7 -8
  684. package/src/adapters/codex.ts +6 -7
  685. package/src/adapters/hermes.ts +1 -5
  686. package/src/adapters/registry.test.ts +63 -0
  687. package/src/adapters/registry.ts +10 -0
  688. package/src/adapters/replit.ts +5 -7
  689. package/src/adapters/types.ts +24 -1
  690. package/src/behavior-signals.ts +1 -1
  691. package/src/binary-lifecycle/backend.ts +16 -4
  692. package/src/binary-lifecycle/pipeline.test.ts +149 -0
  693. package/src/binary-lifecycle/pipeline.ts +49 -7
  694. package/src/binary-lifecycle/scanner.ts +19 -4
  695. package/src/boxes.ts +119 -32
  696. package/src/buffer-session.test.ts +28 -0
  697. package/src/buffer.ts +10 -14
  698. package/src/bulk-import/types.ts +10 -0
  699. package/src/calibration.test.ts +99 -0
  700. package/src/calibration.ts +57 -13
  701. package/src/causal-consolidation.test.ts +214 -0
  702. package/src/causal-consolidation.ts +131 -14
  703. package/src/causal-retrieval.ts +16 -3
  704. package/src/citations.test.ts +75 -0
  705. package/src/citations.ts +19 -6
  706. package/src/cli.ts +134 -109
  707. package/src/coding/coding-namespace.test.ts +7 -0
  708. package/src/coding/coding-namespace.ts +8 -0
  709. package/src/coding/review-context.test.ts +30 -0
  710. package/src/coding/review-context.ts +79 -9
  711. package/src/coding/wire-coding-context.test.ts +16 -0
  712. package/src/compat/checks.test.ts +33 -0
  713. package/src/compat/checks.ts +64 -4
  714. package/src/compounding/engine.ts +2 -2
  715. package/src/compounding/preference-consolidator.test.ts +47 -0
  716. package/src/compounding/preference-consolidator.ts +8 -8
  717. package/src/compression-optimizer.ts +5 -2
  718. package/src/config.test.ts +34 -2
  719. package/src/config.ts +62 -18
  720. package/src/connectors/codex-materialize-runner.ts +4 -3
  721. package/src/connectors/codex-materialize.ts +149 -34
  722. package/src/connectors/index.test.ts +144 -7
  723. package/src/connectors/index.ts +86 -15
  724. package/src/connectors/live/github.test.ts +47 -0
  725. package/src/connectors/live/github.ts +29 -1
  726. package/src/connectors/live/index.ts +2 -0
  727. package/src/connectors/live/live-connectors.test.ts +359 -73
  728. package/src/connectors/live/notion.test.ts +84 -0
  729. package/src/connectors/live/notion.ts +18 -1
  730. package/src/connectors/live/state-store.ts +419 -38
  731. package/src/connectors/weclone-installer.test.ts +16 -18
  732. package/src/connectors-cli.ts +19 -0
  733. package/src/console/trace.test.ts +28 -0
  734. package/src/console/trace.ts +42 -5
  735. package/src/contradiction/contradiction-judge.test.ts +49 -0
  736. package/src/contradiction/contradiction-judge.ts +15 -5
  737. package/src/contradiction/contradiction-review.ts +31 -7
  738. package/src/contradiction/contradiction-scan.ts +28 -18
  739. package/src/contradiction/contradiction.test.ts +237 -1
  740. package/src/contradiction/resolution.ts +43 -4
  741. package/src/conversation-index/backend.ts +13 -5
  742. package/src/conversation-index/cleanup.ts +25 -4
  743. package/src/conversation-index/faiss-adapter.ts +24 -15
  744. package/src/conversation-index/indexer.test.ts +71 -10
  745. package/src/conversation-index/indexer.ts +22 -3
  746. package/src/cross-namespace-budget.test.ts +59 -0
  747. package/src/cross-namespace-budget.ts +15 -7
  748. package/src/curation/index.ts +18 -17
  749. package/src/dashboard-runtime.test.ts +98 -0
  750. package/src/dashboard-runtime.ts +96 -6
  751. package/src/dedup/index.test.ts +133 -0
  752. package/src/dedup/index.ts +73 -10
  753. package/src/dedup/semantic.test.ts +77 -2
  754. package/src/dedup/semantic.ts +26 -6
  755. package/src/embedding-fallback.ts +47 -15
  756. package/src/enrichment/audit.ts +8 -1
  757. package/src/enrichment/pipeline.ts +21 -13
  758. package/src/enrichment/web-search-provider.ts +1 -6
  759. package/src/entity-retrieval.ts +57 -6
  760. package/src/evals.ts +22 -13
  761. package/src/explicit-capture.test.ts +40 -0
  762. package/src/explicit-capture.ts +14 -2
  763. package/src/extraction.ts +42 -30
  764. package/src/fallback-llm.ts +35 -2
  765. package/src/graph-dashboard-diff.test.ts +57 -0
  766. package/src/graph-dashboard-diff.ts +24 -2
  767. package/src/graph-dashboard-parser.test.ts +31 -0
  768. package/src/graph-dashboard-parser.ts +4 -1
  769. package/src/graph-events.ts +6 -4
  770. package/src/graph.test.ts +69 -0
  771. package/src/graph.ts +7 -4
  772. package/src/importers/base.test.ts +70 -0
  773. package/src/importers/base.ts +56 -7
  774. package/src/index.ts +5 -2
  775. package/src/lcm/archive.ts +65 -16
  776. package/src/lcm/engine.ts +27 -8
  777. package/src/lcm/recall.ts +5 -5
  778. package/src/lcm-engine.test.ts +87 -1
  779. package/src/lcm-recall.test.ts +71 -0
  780. package/src/live-connectors-runner.ts +100 -36
  781. package/src/maintenance/archive-observations.ts +24 -3
  782. package/src/maintenance/atomic-file.ts +85 -0
  783. package/src/maintenance/dreams-ledger.ts +15 -8
  784. package/src/maintenance/memory-governance.test.ts +53 -0
  785. package/src/maintenance/memory-governance.ts +15 -5
  786. package/src/maintenance/observation-ledger-utils.ts +6 -5
  787. package/src/maintenance/purge.test.ts +64 -0
  788. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +22 -9
  789. package/src/maintenance/rebuild-memory-projection.ts +22 -9
  790. package/src/maintenance/rebuild-observations.ts +7 -3
  791. package/src/mcp-memory-inspector-app.ts +26 -3
  792. package/src/memory-cache.test.ts +19 -0
  793. package/src/memory-cache.ts +1 -0
  794. package/src/memory-extension/codex-publisher.ts +25 -4
  795. package/src/memory-extension-host/host-discovery.test.ts +69 -0
  796. package/src/memory-extension-host/host-discovery.ts +63 -6
  797. package/src/memory-projection-store.ts +114 -62
  798. package/src/message-parts/index.ts +46 -31
  799. package/src/message-parts/message-parts.test.ts +77 -0
  800. package/src/migrate/from-engram.ts +68 -14
  801. package/src/model-registry.test.ts +38 -0
  802. package/src/model-registry.ts +12 -7
  803. package/src/namespaces/identity.test.ts +66 -0
  804. package/src/namespaces/identity.ts +23 -0
  805. package/src/namespaces/migrate.test.ts +62 -0
  806. package/src/namespaces/migrate.ts +82 -14
  807. package/src/namespaces/principal.test.ts +37 -1
  808. package/src/namespaces/principal.ts +18 -7
  809. package/src/namespaces/search.test.ts +96 -7
  810. package/src/namespaces/search.ts +32 -25
  811. package/src/namespaces/storage.ts +93 -11
  812. package/src/native-knowledge.ts +23 -3
  813. package/src/negative.ts +50 -5
  814. package/src/network/webdav.ts +177 -58
  815. package/src/offline-sync.test.ts +128 -18
  816. package/src/offline-sync.ts +41 -7
  817. package/src/onboarding/index.test.ts +105 -0
  818. package/src/onboarding/index.ts +17 -5
  819. package/src/operator-toolkit.ts +43 -5
  820. package/src/orchestrator.ts +120 -27
  821. package/src/page-versioning.ts +31 -5
  822. package/src/peers/peers.test.ts +70 -0
  823. package/src/peers/storage.ts +32 -3
  824. package/src/plugin-entry-resolver.test.ts +60 -0
  825. package/src/plugin-entry-resolver.ts +48 -0
  826. package/src/plugin-id.test.ts +38 -0
  827. package/src/plugin-id.ts +31 -64
  828. package/src/policy-runtime.test.ts +75 -0
  829. package/src/policy-runtime.ts +32 -3
  830. package/src/procedural/procedure-miner.test.ts +152 -0
  831. package/src/procedural/procedure-miner.ts +124 -19
  832. package/src/profiling.test.ts +23 -0
  833. package/src/profiling.ts +10 -1
  834. package/src/projection/index.test.ts +253 -0
  835. package/src/projection/index.ts +159 -18
  836. package/src/qmd-client.test.ts +45 -0
  837. package/src/qmd.ts +13 -10
  838. package/src/recall-disclosure.test.ts +15 -1
  839. package/src/recall-state.ts +24 -5
  840. package/src/relevance.ts +24 -5
  841. package/src/replay/normalizers/chatgpt.ts +14 -4
  842. package/src/replay/normalizers/claude.ts +8 -3
  843. package/src/replay/normalizers/openclaw.ts +35 -12
  844. package/src/replay/normalizers/replay-normalizers.test.ts +65 -0
  845. package/src/replay/normalizers/shared.ts +4 -1
  846. package/src/replay/runner.ts +1 -1
  847. package/src/rerank.test.ts +41 -1
  848. package/src/rerank.ts +2 -2
  849. package/src/resolve-auth-token.test.ts +29 -0
  850. package/src/resolve-auth-token.ts +12 -7
  851. package/src/resolve-provider-secret.test.ts +78 -22
  852. package/src/resolve-provider-secret.ts +55 -223
  853. package/src/retrieval-agents.ts +51 -14
  854. package/src/review/index.test.ts +75 -1
  855. package/src/review/index.ts +88 -30
  856. package/src/routing/store.ts +36 -6
  857. package/src/runtime/env.test.ts +73 -0
  858. package/src/runtime/env.ts +7 -11
  859. package/src/schemas.ts +16 -1
  860. package/src/search/abort.ts +18 -0
  861. package/src/search/document-scanner.test.ts +80 -0
  862. package/src/search/document-scanner.ts +51 -9
  863. package/src/search/embed-helper.ts +19 -6
  864. package/src/search/factory.ts +9 -5
  865. package/src/search/lancedb-backend.ts +66 -23
  866. package/src/search/meilisearch-backend.ts +39 -13
  867. package/src/search/noop-backend.ts +1 -1
  868. package/src/search/orama-backend.test.ts +27 -0
  869. package/src/search/orama-backend.ts +69 -16
  870. package/src/search/port.ts +4 -1
  871. package/src/search/remote-backend.ts +1 -1
  872. package/src/secure-store/cli-handlers.ts +70 -6
  873. package/src/secure-store/cli-renderer.ts +13 -7
  874. package/src/secure-store/secure-fs.ts +11 -5
  875. package/src/secure-store/secure-store.test.ts +70 -0
  876. package/src/semantic-consolidation.test.ts +45 -0
  877. package/src/semantic-consolidation.ts +3 -3
  878. package/src/session-integrity.test.ts +98 -0
  879. package/src/session-integrity.ts +51 -1
  880. package/src/session-observer-state.ts +108 -41
  881. package/src/shared-context/manager.ts +93 -15
  882. package/src/signal.test.ts +14 -0
  883. package/src/signal.ts +8 -1
  884. package/src/source-attribution.test.ts +8 -0
  885. package/src/source-attribution.ts +24 -2
  886. package/src/spaces/index.test.ts +93 -0
  887. package/src/spaces/index.ts +75 -9
  888. package/src/storage.ts +14 -1
  889. package/src/store-contract.test.ts +35 -0
  890. package/src/store-contract.ts +39 -5
  891. package/src/summarizer.ts +24 -18
  892. package/src/summary-snapshot.test.ts +77 -0
  893. package/src/surfaces/dreams.test.ts +73 -0
  894. package/src/surfaces/dreams.ts +53 -19
  895. package/src/sync/index.ts +42 -17
  896. package/src/taxonomy/taxonomy-loader.ts +43 -4
  897. package/src/temporal-supersession.test.ts +67 -0
  898. package/src/temporal-supersession.ts +8 -0
  899. package/src/tmt.test.ts +50 -0
  900. package/src/tmt.ts +35 -11
  901. package/src/tokens.test.ts +18 -0
  902. package/src/tokens.ts +7 -0
  903. package/src/training-export/converter.test.ts +55 -2
  904. package/src/training-export/converter.ts +36 -10
  905. package/src/training-export/registry.test.ts +17 -0
  906. package/src/training-export/registry.ts +19 -1
  907. package/src/transcript.ts +2 -2
  908. package/src/transfer/backup.ts +18 -7
  909. package/src/transfer/capsule-crypto.ts +105 -21
  910. package/src/transfer/capsule-encrypt.test.ts +106 -7
  911. package/src/transfer/capsule-export.ts +23 -14
  912. package/src/transfer/capsule-import.ts +11 -2
  913. package/src/transfer/exclusions.ts +7 -0
  914. package/src/transfer/export-sqlite.ts +14 -13
  915. package/src/transfer/fs-utils.ts +52 -1
  916. package/src/transfer/import-json.ts +12 -7
  917. package/src/transfer/import-md.ts +5 -5
  918. package/src/transfer/import-sqlite.ts +4 -5
  919. package/src/trust-zones.ts +1 -1
  920. package/src/types.ts +25 -0
  921. package/src/utility-telemetry.ts +1 -1
  922. package/src/utils/category-dir.test.ts +15 -0
  923. package/src/utils/category-dir.ts +3 -1
  924. package/src/work/boundary.ts +30 -18
  925. package/src/work/storage.ts +116 -38
  926. package/src/work-product-ledger.ts +1 -1
  927. package/dist/chunk-25MQ7IHJ.js.map +0 -1
  928. package/dist/chunk-2IWUMAES.js.map +0 -1
  929. package/dist/chunk-2NMMFZ5T.js.map +0 -1
  930. package/dist/chunk-2PRLKQAH.js.map +0 -1
  931. package/dist/chunk-326G7DJK.js.map +0 -1
  932. package/dist/chunk-3APJ5EVB.js.map +0 -1
  933. package/dist/chunk-3KW65B36.js.map +0 -1
  934. package/dist/chunk-3QKK7QOS.js.map +0 -1
  935. package/dist/chunk-3SLRNYNG.js.map +0 -1
  936. package/dist/chunk-3VAL7ZL2.js.map +0 -1
  937. package/dist/chunk-3Y4P7RXM.js.map +0 -1
  938. package/dist/chunk-3ZLVGM76.js.map +0 -1
  939. package/dist/chunk-43PJZYGL.js.map +0 -1
  940. package/dist/chunk-47VWKCAF.js.map +0 -1
  941. package/dist/chunk-4KGVTPGD.js.map +0 -1
  942. package/dist/chunk-5375UYTQ.js.map +0 -1
  943. package/dist/chunk-56K5QLHX.js.map +0 -1
  944. package/dist/chunk-575RMLWN.js.map +0 -1
  945. package/dist/chunk-5NPGSAVB.js.map +0 -1
  946. package/dist/chunk-5RGLBDQF.js.map +0 -1
  947. package/dist/chunk-65PG43EQ.js.map +0 -1
  948. package/dist/chunk-66DHUKLO.js.map +0 -1
  949. package/dist/chunk-6LVVDPJ4.js.map +0 -1
  950. package/dist/chunk-76FLAAUC.js.map +0 -1
  951. package/dist/chunk-77H5NU3M.js.map +0 -1
  952. package/dist/chunk-7MNMYOFP.js.map +0 -1
  953. package/dist/chunk-7OZ53EXP.js.map +0 -1
  954. package/dist/chunk-7SEAZFFB.js.map +0 -1
  955. package/dist/chunk-A6KTB5R6.js.map +0 -1
  956. package/dist/chunk-AGZQD76C.js.map +0 -1
  957. package/dist/chunk-APO3DCMU.js.map +0 -1
  958. package/dist/chunk-BVF3AGJP.js.map +0 -1
  959. package/dist/chunk-C5BCH4ZS.js.map +0 -1
  960. package/dist/chunk-C7VW7C3F.js.map +0 -1
  961. package/dist/chunk-CULXMQJH.js.map +0 -1
  962. package/dist/chunk-CYFQJMUV.js.map +0 -1
  963. package/dist/chunk-D654IBA6.js +0 -61
  964. package/dist/chunk-D654IBA6.js.map +0 -1
  965. package/dist/chunk-DGXUHMOV.js.map +0 -1
  966. package/dist/chunk-DINWEURR.js.map +0 -1
  967. package/dist/chunk-DK5LDEQM.js.map +0 -1
  968. package/dist/chunk-EABGC2TL.js.map +0 -1
  969. package/dist/chunk-EHRTFRWW.js.map +0 -1
  970. package/dist/chunk-EJI5XIBB.js.map +0 -1
  971. package/dist/chunk-FAAFWE4G.js.map +0 -1
  972. package/dist/chunk-FAJ7FZYM.js +0 -11
  973. package/dist/chunk-FAJ7FZYM.js.map +0 -1
  974. package/dist/chunk-FDU6HUUL.js +0 -147
  975. package/dist/chunk-FDU6HUUL.js.map +0 -1
  976. package/dist/chunk-FIT6DMX6.js.map +0 -1
  977. package/dist/chunk-FJ43PRLT.js.map +0 -1
  978. package/dist/chunk-FLTNHQK6.js +0 -262
  979. package/dist/chunk-FLTNHQK6.js.map +0 -1
  980. package/dist/chunk-GDFS42HT.js.map +0 -1
  981. package/dist/chunk-H3ME6L6D.js.map +0 -1
  982. package/dist/chunk-HXXBL2KD.js.map +0 -1
  983. package/dist/chunk-ICRIXAP2.js.map +0 -1
  984. package/dist/chunk-IQT3XTKW.js.map +0 -1
  985. package/dist/chunk-JR4ZC3G4.js.map +0 -1
  986. package/dist/chunk-K4FLSOR5.js.map +0 -1
  987. package/dist/chunk-KNKUID7G.js.map +0 -1
  988. package/dist/chunk-KOSORCJG.js.map +0 -1
  989. package/dist/chunk-LIRZNNUP.js.map +0 -1
  990. package/dist/chunk-LLQ2LLWF.js.map +0 -1
  991. package/dist/chunk-LPMVBPA3.js +0 -236
  992. package/dist/chunk-LPMVBPA3.js.map +0 -1
  993. package/dist/chunk-LT3NLYSI.js.map +0 -1
  994. package/dist/chunk-LUDTDZLK.js.map +0 -1
  995. package/dist/chunk-MJFNCJXV.js.map +0 -1
  996. package/dist/chunk-MSWG7JI6.js.map +0 -1
  997. package/dist/chunk-MXC3AP5I.js.map +0 -1
  998. package/dist/chunk-MXFBBHJU.js.map +0 -1
  999. package/dist/chunk-MZH6EHNR.js.map +0 -1
  1000. package/dist/chunk-N2D6GXBM.js.map +0 -1
  1001. package/dist/chunk-NBNN5GOB.js.map +0 -1
  1002. package/dist/chunk-NMZY542O.js.map +0 -1
  1003. package/dist/chunk-NZL6GGQE.js.map +0 -1
  1004. package/dist/chunk-OZHRDTDX.js.map +0 -1
  1005. package/dist/chunk-PIRJPV5T.js.map +0 -1
  1006. package/dist/chunk-PZIAX57I.js.map +0 -1
  1007. package/dist/chunk-Q7P4WJDP.js.map +0 -1
  1008. package/dist/chunk-QA2ZAPBU.js.map +0 -1
  1009. package/dist/chunk-QDZ2RLEC.js.map +0 -1
  1010. package/dist/chunk-QLLBRHAT.js.map +0 -1
  1011. package/dist/chunk-QR3C7BKQ.js.map +0 -1
  1012. package/dist/chunk-RHY3HH7P.js.map +0 -1
  1013. package/dist/chunk-RK2Y4XOM.js.map +0 -1
  1014. package/dist/chunk-RR2PKP3I.js +0 -63
  1015. package/dist/chunk-RR2PKP3I.js.map +0 -1
  1016. package/dist/chunk-RRF5UOBJ.js.map +0 -1
  1017. package/dist/chunk-RXDLTSWT.js.map +0 -1
  1018. package/dist/chunk-RYED3SPJ.js +0 -42
  1019. package/dist/chunk-RYED3SPJ.js.map +0 -1
  1020. package/dist/chunk-S7KDBTWT.js.map +0 -1
  1021. package/dist/chunk-TK4UEOSK.js.map +0 -1
  1022. package/dist/chunk-TMM4S4IJ.js.map +0 -1
  1023. package/dist/chunk-TMQLARTH.js.map +0 -1
  1024. package/dist/chunk-TPB3I2AC.js.map +0 -1
  1025. package/dist/chunk-TPMQ3G6Z.js.map +0 -1
  1026. package/dist/chunk-TPU5L5EY.js.map +0 -1
  1027. package/dist/chunk-TZOLIGIG.js.map +0 -1
  1028. package/dist/chunk-U3WSW6PZ.js.map +0 -1
  1029. package/dist/chunk-U4SCL7B7.js.map +0 -1
  1030. package/dist/chunk-U66YHYC7.js +0 -31
  1031. package/dist/chunk-U66YHYC7.js.map +0 -1
  1032. package/dist/chunk-U7EJOMFC.js.map +0 -1
  1033. package/dist/chunk-UWVJF25J.js.map +0 -1
  1034. package/dist/chunk-VBJ7V5SK.js.map +0 -1
  1035. package/dist/chunk-W3LR522O.js.map +0 -1
  1036. package/dist/chunk-W4L6CZKA.js.map +0 -1
  1037. package/dist/chunk-W6AQJ2PY.js.map +0 -1
  1038. package/dist/chunk-WELDCG6C.js.map +0 -1
  1039. package/dist/chunk-WNARATI3.js.map +0 -1
  1040. package/dist/chunk-WPGJYVUH.js.map +0 -1
  1041. package/dist/chunk-WW3QQF4H.js.map +0 -1
  1042. package/dist/chunk-XIG5PDM7.js.map +0 -1
  1043. package/dist/chunk-XKECPATV.js.map +0 -1
  1044. package/dist/chunk-XKLD5OK4.js.map +0 -1
  1045. package/dist/chunk-XSZEP4SF.js.map +0 -1
  1046. package/dist/chunk-XVVIG67A.js.map +0 -1
  1047. package/dist/chunk-XYIK4LF6.js.map +0 -1
  1048. package/dist/chunk-YRMVARQP.js.map +0 -1
  1049. package/dist/chunk-YROHKYBY.js.map +0 -1
  1050. package/dist/chunk-YU5KIWYQ.js.map +0 -1
  1051. package/dist/chunk-ZAVUCJ4H.js.map +0 -1
  1052. package/dist/chunk-ZPKBYX2F.js.map +0 -1
  1053. package/dist/chunk-ZTFCYYEZ.js.map +0 -1
  1054. package/dist/chunk-ZYVPLJ4T.js.map +0 -1
  1055. package/dist/path-MR5JPYOP.js +0 -9
  1056. package/dist/state-store-VZU2IA53.js +0 -16
  1057. package/dist/trace-C5ETWBEF.js.map +0 -1
  1058. /package/dist/{capsule-crypto-5CYAGVC5.js.map → bulk-import/index.js.map} +0 -0
  1059. /package/dist/{contradiction-review-ATP4S6IC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  1060. /package/dist/{capsule-merge-4MGKE7C5.js.map → capsule-merge-T2JRE46P.js.map} +0 -0
  1061. /package/dist/{chunk-SAZS2QZB.js.map → chunk-23UORJ4S.js.map} +0 -0
  1062. /package/dist/{chunk-PK7H5L6Y.js.map → chunk-2NM43EWN.js.map} +0 -0
  1063. /package/dist/{chunk-PYXS46O7.js.map → chunk-3BP57I6J.js.map} +0 -0
  1064. /package/dist/{chunk-FBYESMQ2.js.map → chunk-3C5RPJAX.js.map} +0 -0
  1065. /package/dist/{chunk-N53K2EXC.js.map → chunk-6VF75M3X.js.map} +0 -0
  1066. /package/dist/{chunk-6H2TESSP.js.map → chunk-765K3SAT.js.map} +0 -0
  1067. /package/dist/{chunk-EDTHC6UD.js.map → chunk-77NAFXUD.js.map} +0 -0
  1068. /package/dist/{chunk-MGKYQQYF.js.map → chunk-7Q3RCKAQ.js.map} +0 -0
  1069. /package/dist/{chunk-34DQE4KF.js.map → chunk-CO7ZO4TU.js.map} +0 -0
  1070. /package/dist/{chunk-ZKSK55RC.js.map → chunk-ETUPBUHB.js.map} +0 -0
  1071. /package/dist/{chunk-QRNI5JBH.js.map → chunk-EYIEWJNI.js.map} +0 -0
  1072. /package/dist/{chunk-C6QPK5GG.js.map → chunk-FZZ2QTJI.js.map} +0 -0
  1073. /package/dist/{chunk-3JXBXXM2.js.map → chunk-G4IAEX6D.js.map} +0 -0
  1074. /package/dist/{chunk-2WWLHTZY.js.map → chunk-IC4GELZE.js.map} +0 -0
  1075. /package/dist/{chunk-PCUKNJAZ.js.map → chunk-JKV57BTN.js.map} +0 -0
  1076. /package/dist/{chunk-2KI4QFHU.js.map → chunk-LMDRGRJ2.js.map} +0 -0
  1077. /package/dist/{chunk-MY6TPVXW.js.map → chunk-LMPHTYJC.js.map} +0 -0
  1078. /package/dist/{chunk-5HRY2WRF.js.map → chunk-LZ3VEOU5.js.map} +0 -0
  1079. /package/dist/{chunk-NGAVDO7E.js.map → chunk-OADWQ5CR.js.map} +0 -0
  1080. /package/dist/{chunk-DOM4GKSW.js.map → chunk-OZKVVUJB.js.map} +0 -0
  1081. /package/dist/{chunk-MT4HVDUZ.js.map → chunk-PM3QHTFT.js.map} +0 -0
  1082. /package/dist/{chunk-ZK7I7JYV.js.map → chunk-R3PS27B4.js.map} +0 -0
  1083. /package/dist/{chunk-SKE7JYKA.js.map → chunk-SFXKHM7P.js.map} +0 -0
  1084. /package/dist/{chunk-HMDCOMYU.js.map → chunk-SKGV326D.js.map} +0 -0
  1085. /package/dist/{chunk-5UM2VJ6D.js.map → chunk-UEY3VB6W.js.map} +0 -0
  1086. /package/dist/{chunk-GIF42EW3.js.map → chunk-UP6MOYCB.js.map} +0 -0
  1087. /package/dist/{chunk-MRILGULB.js.map → chunk-V2RCP53Q.js.map} +0 -0
  1088. /package/dist/{chunk-FSFEQI74.js.map → chunk-W7L6HXUC.js.map} +0 -0
  1089. /package/dist/{chunk-3IQ2TR4N.js.map → chunk-WLEB7WCG.js.map} +0 -0
  1090. /package/dist/{chunk-GL6I6MEQ.js.map → chunk-WSGF57U2.js.map} +0 -0
  1091. /package/dist/{chunk-JA3AK3PT.js.map → chunk-XNLXAWHX.js.map} +0 -0
  1092. /package/dist/{chunk-SIC6U3GZ.js.map → chunk-YHV3KRKS.js.map} +0 -0
  1093. /package/dist/{chunk-VLXA6PI2.js.map → chunk-YQMZ7IH2.js.map} +0 -0
  1094. /package/dist/{contradiction-scan-5A4IDZV5.js.map → contradiction-review-6V2LXXK6.js.map} +0 -0
  1095. /package/dist/{migrate-from-identity-anchor-G27MCD6A.js.map → contradiction-scan-GIRVC4C7.js.map} +0 -0
  1096. /package/dist/{first-start-migration-4MHQEOSD.js.map → first-start-migration-CKTCTCQI.js.map} +0 -0
  1097. /package/dist/{graph-edge-decay-5DI5GUNL.js.map → graph-edge-decay-MUP5J7CC.js.map} +0 -0
  1098. /package/dist/{path-MR5JPYOP.js.map → importers/index.js.map} +0 -0
  1099. /package/dist/{peers-HCVGHMAE.js.map → migrate-from-identity-anchor-EB4XI4Q2.js.map} +0 -0
  1100. /package/dist/{resolution-B7FNQSSP.js.map → path-X2K5XCHL.js.map} +0 -0
  1101. /package/dist/{state-store-VZU2IA53.js.map → peers/index.js.map} +0 -0
  1102. /package/dist/{tier-stats-62ZVDFKS.js.map → tier-stats-SKML2OSF.js.map} +0 -0
@@ -0,0 +1,98 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdir, mkdtemp, readFile, rm, symlink, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import test from "node:test";
6
+
7
+ import { applySessionRepair, planSessionRepair } from "./session-integrity.js";
8
+ import type { SessionIntegrityReport, SessionRepairPlan } from "./session-integrity.js";
9
+
10
+ test("session repair rejects forged transcript paths outside memoryDir", async () => {
11
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-session-repair-"));
12
+ const outside = await mkdtemp(path.join(os.tmpdir(), "remnic-session-outside-"));
13
+ try {
14
+ await mkdir(path.join(memoryDir, "transcripts"), { recursive: true });
15
+ const outsideFile = path.join(outside, "forged.jsonl");
16
+ await writeFile(outsideFile, "not json\n", "utf8");
17
+ const plan: SessionRepairPlan = {
18
+ generatedAt: new Date().toISOString(),
19
+ dryRun: false,
20
+ memoryDir,
21
+ allowSessionFileRepair: false,
22
+ actions: [
23
+ {
24
+ kind: "rewrite_transcript",
25
+ description: "forged",
26
+ targetPath: outsideFile,
27
+ },
28
+ ],
29
+ };
30
+
31
+ const result = await applySessionRepair({ plan });
32
+ assert.equal(result.actionsApplied, 0);
33
+ assert.match(result.errors.join("\n"), /escapes configured memoryDir/);
34
+ assert.equal(await readFile(outsideFile, "utf8"), "not json\n");
35
+ } finally {
36
+ await rm(memoryDir, { recursive: true, force: true });
37
+ await rm(outside, { recursive: true, force: true });
38
+ }
39
+ });
40
+
41
+ test("session repair rejects symlinked transcript targets", async () => {
42
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-session-repair-"));
43
+ const outside = await mkdtemp(path.join(os.tmpdir(), "remnic-session-outside-"));
44
+ try {
45
+ const transcripts = path.join(memoryDir, "transcripts");
46
+ await mkdir(transcripts, { recursive: true });
47
+ const outsideFile = path.join(outside, "real.jsonl");
48
+ const linkFile = path.join(transcripts, "link.jsonl");
49
+ await writeFile(outsideFile, "not json\n", "utf8");
50
+ await symlink(outsideFile, linkFile);
51
+ const plan: SessionRepairPlan = {
52
+ generatedAt: new Date().toISOString(),
53
+ dryRun: false,
54
+ memoryDir,
55
+ allowSessionFileRepair: false,
56
+ actions: [
57
+ {
58
+ kind: "rewrite_transcript",
59
+ description: "symlink",
60
+ targetPath: linkFile,
61
+ },
62
+ ],
63
+ };
64
+
65
+ const result = await applySessionRepair({ plan });
66
+ assert.equal(result.actionsApplied, 0);
67
+ assert.match(result.errors.join("\n"), /repair target crosses symlink/);
68
+ assert.equal(await readFile(outsideFile, "utf8"), "not json\n");
69
+ } finally {
70
+ await rm(memoryDir, { recursive: true, force: true });
71
+ await rm(outside, { recursive: true, force: true });
72
+ }
73
+ });
74
+
75
+ test("planned session repair carries the report memoryDir into apply-time validation", () => {
76
+ const report: SessionIntegrityReport = {
77
+ generatedAt: "2026-05-22T00:00:00.000Z",
78
+ memoryDir: "/tmp/remnic-memory",
79
+ healthy: false,
80
+ sessions: [],
81
+ checkpoint: {
82
+ present: true,
83
+ healthy: false,
84
+ path: "/tmp/remnic-memory/state/checkpoint.json",
85
+ },
86
+ issues: [
87
+ {
88
+ code: "checkpoint_invalid_json",
89
+ severity: "error",
90
+ message: "bad checkpoint",
91
+ filePath: "/tmp/remnic-memory/state/checkpoint.json",
92
+ },
93
+ ],
94
+ };
95
+
96
+ const plan = planSessionRepair({ report, dryRun: false });
97
+ assert.equal(plan.memoryDir, "/tmp/remnic-memory");
98
+ });
@@ -1,5 +1,5 @@
1
1
  import path from "node:path";
2
- import { readFile, readdir, unlink, writeFile } from "node:fs/promises";
2
+ import { lstat, readFile, readdir, realpath, unlink, writeFile } from "node:fs/promises";
3
3
  import type { Checkpoint, TranscriptEntry } from "./types.js";
4
4
 
5
5
  export type SessionIntegrityIssueCode =
@@ -70,6 +70,7 @@ export interface SessionRepairAction {
70
70
  export interface SessionRepairPlan {
71
71
  generatedAt: string;
72
72
  dryRun: boolean;
73
+ memoryDir: string;
73
74
  allowSessionFileRepair: boolean;
74
75
  actions: SessionRepairAction[];
75
76
  }
@@ -487,6 +488,7 @@ export function planSessionRepair(options: PlanSessionRepairOptions): SessionRep
487
488
  return {
488
489
  generatedAt: new Date().toISOString(),
489
490
  dryRun: options.dryRun,
491
+ memoryDir: options.report.memoryDir,
490
492
  allowSessionFileRepair: options.allowSessionFileRepair === true,
491
493
  actions,
492
494
  };
@@ -535,11 +537,13 @@ export async function applySessionRepair(
535
537
  for (const action of plan.actions) {
536
538
  try {
537
539
  if (action.kind === "rewrite_transcript") {
540
+ await assertRepairTargetAllowed(plan.memoryDir, action);
538
541
  await rewriteTranscriptFile(action.targetPath);
539
542
  actionsApplied += 1;
540
543
  continue;
541
544
  }
542
545
  if (action.kind === "remove_checkpoint") {
546
+ await assertRepairTargetAllowed(plan.memoryDir, action);
543
547
  try {
544
548
  await unlink(action.targetPath);
545
549
  } catch (err) {
@@ -567,3 +571,49 @@ export async function applySessionRepair(
567
571
  errors,
568
572
  };
569
573
  }
574
+
575
+ async function assertRepairTargetAllowed(memoryDir: string, action: SessionRepairAction): Promise<void> {
576
+ const root = path.resolve(memoryDir);
577
+ const target = path.resolve(action.targetPath);
578
+ if (action.kind === "rewrite_transcript") {
579
+ const transcriptsRoot = path.join(root, "transcripts");
580
+ if (!target.endsWith(".jsonl")) {
581
+ throw new Error("transcript repair target must end in .jsonl");
582
+ }
583
+ await assertNoSymlinkPath(transcriptsRoot, target);
584
+ return;
585
+ }
586
+ if (action.kind === "remove_checkpoint") {
587
+ const checkpointPath = path.join(root, "state", "checkpoint.json");
588
+ if (target !== checkpointPath) {
589
+ throw new Error("checkpoint repair target must be the configured checkpoint.json");
590
+ }
591
+ await assertNoSymlinkPath(root, target);
592
+ }
593
+ }
594
+
595
+ async function assertNoSymlinkPath(root: string, target: string): Promise<void> {
596
+ const rootReal = await realpath(root);
597
+ const targetDir = path.dirname(target);
598
+ const targetDirReal = await realpath(targetDir);
599
+ const relative = path.relative(rootReal, targetDirReal);
600
+ if (relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative))) {
601
+ const normalizedTarget = path.join(targetDirReal, path.basename(target));
602
+ let current = rootReal;
603
+ for (const segment of path.relative(rootReal, normalizedTarget).split(path.sep)) {
604
+ if (!segment) continue;
605
+ current = path.join(current, segment);
606
+ try {
607
+ const stat = await lstat(current);
608
+ if (stat.isSymbolicLink()) {
609
+ throw new Error(`repair target crosses symlink: ${current}`);
610
+ }
611
+ } catch (err) {
612
+ const code = typeof err === "object" && err && "code" in err ? String((err as { code?: unknown }).code ?? "") : "";
613
+ if (code !== "ENOENT") throw err;
614
+ }
615
+ }
616
+ return;
617
+ }
618
+ throw new Error("repair target escapes configured memoryDir");
619
+ }
@@ -215,38 +215,53 @@ export class SessionObserverState {
215
215
 
216
216
  async save(): Promise<void> {
217
217
  await this.withSaveLock(async () => {
218
- const merged = new Map<string, SessionObserverCursor>();
219
- const persisted = await this.readPersistedState();
220
- if (persisted) {
221
- for (const [key, value] of this.normalizePersistedSessions(persisted.sessions).entries()) {
222
- merged.set(key, value);
223
- }
224
- }
225
- for (const [key, current] of this.sessions.entries()) {
226
- const existing = merged.get(key);
227
- if (!existing) {
228
- merged.set(key, current);
229
- continue;
230
- }
231
- merged.set(key, mergeSessionCursor(existing, current));
232
- }
218
+ const merged = await this.readMergedSessions();
233
219
  this.sessions = merged;
234
220
 
235
- const sessions: Record<string, SessionObserverCursor> = {};
236
- for (const [key, value] of merged.entries()) {
237
- sessions[key] = value;
238
- }
239
- const payload: SessionObserverPersistedState = { version: 1, sessions };
240
- await mkdir(path.dirname(this.statePath), { recursive: true });
241
- await writeFile(this.statePath, JSON.stringify(payload, null, 2), "utf-8");
221
+ await this.writeSessions(merged);
242
222
  });
243
223
  }
244
224
 
245
- private enqueueSave(): Promise<void> {
246
- this.saveQueue = this.saveQueue
225
+ private async readMergedSessions(): Promise<Map<string, SessionObserverCursor>> {
226
+ const merged = new Map<string, SessionObserverCursor>();
227
+ const persisted = await this.readPersistedState();
228
+ if (persisted) {
229
+ for (const [key, value] of this.normalizePersistedSessions(persisted.sessions).entries()) {
230
+ merged.set(key, value);
231
+ }
232
+ }
233
+ for (const [key, current] of this.sessions.entries()) {
234
+ const existing = merged.get(key);
235
+ if (!existing) {
236
+ merged.set(key, current);
237
+ continue;
238
+ }
239
+ merged.set(key, mergeSessionCursor(existing, current));
240
+ }
241
+ return merged;
242
+ }
243
+
244
+ private async writeSessions(sessionsMap: Map<string, SessionObserverCursor>): Promise<void> {
245
+ const sessions: Record<string, SessionObserverCursor> = {};
246
+ for (const [key, value] of sessionsMap.entries()) {
247
+ sessions[key] = value;
248
+ }
249
+ const payload: SessionObserverPersistedState = { version: 1, sessions };
250
+ await mkdir(path.dirname(this.statePath), { recursive: true });
251
+ await writeFile(this.statePath, JSON.stringify(payload, null, 2), "utf-8");
252
+ }
253
+
254
+ private enqueueObservation(
255
+ input: SessionObservationInput,
256
+ ): Promise<SessionObservationDecision> {
257
+ const operation = this.saveQueue
247
258
  .catch(() => undefined)
248
- .then(() => this.save());
249
- return this.saveQueue;
259
+ .then(() => this.observeWithSaveLock(input));
260
+ this.saveQueue = operation.then(
261
+ () => undefined,
262
+ () => undefined,
263
+ );
264
+ return operation;
250
265
  }
251
266
 
252
267
  private bandForTotalBytes(totalBytes: number): SessionObserverBandConfig {
@@ -258,20 +273,48 @@ export class SessionObserverState {
258
273
  }
259
274
 
260
275
  async observe(input: SessionObservationInput): Promise<SessionObservationDecision> {
276
+ return this.enqueueObservation(input);
277
+ }
278
+
279
+ private async observeWithSaveLock(
280
+ input: SessionObservationInput,
281
+ ): Promise<SessionObservationDecision> {
282
+ let decision: SessionObservationDecision | undefined;
283
+ await this.withSaveLock(async () => {
284
+ const localExisting = this.sessions.get(input.sessionKey);
285
+ const sessions = await this.readMergedSessions();
286
+ decision = await this.observeMerged(
287
+ input,
288
+ sessions,
289
+ localExisting ? { ...localExisting } : undefined,
290
+ );
291
+ });
292
+ if (!decision) {
293
+ throw new Error("session observer decision was not computed");
294
+ }
295
+ return decision;
296
+ }
297
+
298
+ private async observeMerged(
299
+ input: SessionObservationInput,
300
+ sessions: Map<string, SessionObserverCursor>,
301
+ localExisting?: SessionObserverCursor,
302
+ ): Promise<SessionObservationDecision> {
261
303
  const nowIso = input.observedAt ?? new Date().toISOString();
262
304
  const totalBytes = sanitizeNonNegativeInt(input.totalBytes);
263
305
  const totalTokens = sanitizeNonNegativeInt(input.totalTokens);
264
306
  const band = this.bandForTotalBytes(totalBytes);
265
307
 
266
- const existing = this.sessions.get(input.sessionKey);
308
+ const existing = sessions.get(input.sessionKey);
267
309
  if (!existing) {
268
- this.sessions.set(input.sessionKey, {
310
+ sessions.set(input.sessionKey, {
269
311
  sessionKey: input.sessionKey,
270
312
  cursorBytes: totalBytes,
271
313
  cursorTokens: totalTokens,
272
314
  lastObservedAt: nowIso,
273
315
  });
274
- await this.enqueueSave();
316
+ this.sessions = sessions;
317
+ await this.writeSessions(sessions);
275
318
  return {
276
319
  triggered: false,
277
320
  deltaBytes: 0,
@@ -282,13 +325,32 @@ export class SessionObserverState {
282
325
  }
283
326
 
284
327
  const session = { ...existing };
328
+ const observedMs = parseIsoMs(nowIso);
329
+ const existingObservedMs = parseIsoMs(session.lastObservedAt);
330
+ const existingResetMs = parseIsoMs(session.lastResetAt);
331
+ if (existingResetMs > 0 && observedMs < existingResetMs) {
332
+ this.sessions = sessions;
333
+ return { triggered: false, deltaBytes: 0, deltaTokens: 0, band, reason: "baseline" };
334
+ }
335
+
285
336
  if (totalBytes < session.cursorBytes || totalTokens < session.cursorTokens) {
286
- session.cursorBytes = totalBytes;
287
- session.cursorTokens = totalTokens;
288
- session.lastObservedAt = nowIso;
289
- session.lastResetAt = nowIso;
290
- this.sessions.set(input.sessionKey, session);
291
- await this.enqueueSave();
337
+ const localSawReset =
338
+ localExisting !== undefined
339
+ && (totalBytes < sanitizeNonNegativeInt(localExisting.cursorBytes)
340
+ || totalTokens < sanitizeNonNegativeInt(localExisting.cursorTokens));
341
+ const canApplyReset = localSawReset && observedMs >= existingObservedMs;
342
+
343
+ if (canApplyReset) {
344
+ session.cursorBytes = totalBytes;
345
+ session.cursorTokens = totalTokens;
346
+ session.lastObservedAt = nowIso;
347
+ session.lastResetAt = nowIso;
348
+ } else if (observedMs >= existingObservedMs) {
349
+ session.lastObservedAt = nowIso;
350
+ }
351
+ sessions.set(input.sessionKey, session);
352
+ this.sessions = sessions;
353
+ await this.writeSessions(sessions);
292
354
  return { triggered: false, deltaBytes: 0, deltaTokens: 0, band, reason: "baseline" };
293
355
  }
294
356
 
@@ -302,8 +364,11 @@ export class SessionObserverState {
302
364
  if (!crossedThreshold) {
303
365
  const unchanged = deltaBytes === 0 && deltaTokens === 0;
304
366
  if (!unchanged) {
305
- this.sessions.set(input.sessionKey, session);
306
- await this.enqueueSave();
367
+ sessions.set(input.sessionKey, session);
368
+ this.sessions = sessions;
369
+ await this.writeSessions(sessions);
370
+ } else {
371
+ this.sessions = sessions;
307
372
  }
308
373
  return {
309
374
  triggered: false,
@@ -319,8 +384,9 @@ export class SessionObserverState {
319
384
  Number.isFinite(lastTriggeredMs) && nowMs - lastTriggeredMs < this.debounceMs;
320
385
 
321
386
  if (withinDebounce) {
322
- this.sessions.set(input.sessionKey, session);
323
- await this.enqueueSave();
387
+ sessions.set(input.sessionKey, session);
388
+ this.sessions = sessions;
389
+ await this.writeSessions(sessions);
324
390
  return {
325
391
  triggered: false,
326
392
  deltaBytes,
@@ -333,8 +399,9 @@ export class SessionObserverState {
333
399
  session.lastTriggeredAt = nowIso;
334
400
  session.cursorBytes = totalBytes;
335
401
  session.cursorTokens = totalTokens;
336
- this.sessions.set(input.sessionKey, session);
337
- await this.enqueueSave();
402
+ sessions.set(input.sessionKey, session);
403
+ this.sessions = sessions;
404
+ await this.writeSessions(sessions);
338
405
  return {
339
406
  triggered: true,
340
407
  deltaBytes,
@@ -1,4 +1,5 @@
1
- import { mkdir, readFile, readdir, appendFile, writeFile, stat } from "node:fs/promises";
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdir, readFile, readdir, appendFile, writeFile, stat, rename, rm } from "node:fs/promises";
2
3
  import path from "node:path";
3
4
  import { z } from "zod";
4
5
  import { log } from "../logger.js";
@@ -86,6 +87,17 @@ function ymd(d: Date): string {
86
87
  return d.toISOString().slice(0, 10);
87
88
  }
88
89
 
90
+ function safeDateSegment(date: string): string {
91
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(date)) {
92
+ throw new Error(`Invalid shared-context date: ${JSON.stringify(date)}; expected YYYY-MM-DD`);
93
+ }
94
+ const parsed = new Date(`${date}T00:00:00.000Z`);
95
+ if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== date) {
96
+ throw new Error(`Invalid shared-context date: ${JSON.stringify(date)}; expected a real calendar date`);
97
+ }
98
+ return date;
99
+ }
100
+
89
101
  const CROSS_SIGNAL_STOPWORDS = new Set([
90
102
  "a",
91
103
  "an",
@@ -373,15 +385,38 @@ function compareFeedbackPriority(a: SharedFeedbackEntry, b: SharedFeedbackEntry)
373
385
  );
374
386
  }
375
387
 
388
+ function markdownLineText(value: string): string {
389
+ return value.replace(/[\r\n]+/g, " ").replace(/\s+/g, " ").trim();
390
+ }
391
+
392
+ function markdownLineList(values: readonly string[]): string {
393
+ return values.map(markdownLineText).filter(Boolean).join(", ");
394
+ }
395
+
376
396
  function formatFeedbackLine(entry: SharedFeedbackEntry): string {
377
- const extras: string[] = [`feedback: ${entry.date}`];
378
- if (entry.severity) extras.push(`severity: ${entry.severity}`);
379
- if (entry.refs?.length) extras.push(`refs: ${entry.refs.join(", ")}`);
380
- return `- [${entry.agent}] ${entry.decision}: ${entry.reason} [${extras.join("; ")}]`;
397
+ const extras: string[] = [`feedback: ${markdownLineText(entry.date)}`];
398
+ if (entry.severity) extras.push(`severity: ${markdownLineText(entry.severity)}`);
399
+ if (entry.refs?.length) extras.push(`refs: ${markdownLineList(entry.refs)}`);
400
+ return `- [${markdownLineText(entry.agent)}] ${entry.decision}: ${markdownLineText(entry.reason)} [${extras.join("; ")}]`;
381
401
  }
382
402
 
383
403
  function formatOverlapLine(entry: SharedCrossSignalOverlap): string {
384
- return `- \`${entry.token}\` (${entry.agentCount} agents: ${entry.agents.join(", ")}) [sources: ${entry.sourcePaths.join(", ")}]`;
404
+ return `- \`${entry.token}\` (${entry.agentCount} agents: ${markdownLineList(entry.agents)}) [sources: ${markdownLineList(entry.sourcePaths)}]`;
405
+ }
406
+
407
+ async function writeFileAtomic(filePath: string, content: string): Promise<void> {
408
+ await mkdir(path.dirname(filePath), { recursive: true });
409
+ const tempPath = path.join(
410
+ path.dirname(filePath),
411
+ `.${path.basename(filePath)}.${process.pid}.${randomUUID()}.tmp`,
412
+ );
413
+ try {
414
+ await writeFile(tempPath, content, { encoding: "utf-8", flag: "wx" });
415
+ await rename(tempPath, filePath);
416
+ } catch (error) {
417
+ await rm(tempPath, { force: true }).catch(() => undefined);
418
+ throw error;
419
+ }
385
420
  }
386
421
 
387
422
  export function resolveSharedContextDir(config: PluginConfig): string {
@@ -399,6 +434,7 @@ export class SharedContextManager {
399
434
  private readonly feedbackDir: string;
400
435
  private readonly feedbackInboxPath: string;
401
436
  private readonly crossSignalsDir: string;
437
+ private readonly dailySynthesisChains = new Map<string, Promise<void>>();
402
438
 
403
439
  constructor(private readonly config: PluginConfig) {
404
440
  const base = resolveSharedContextDir(config);
@@ -553,17 +589,48 @@ export class SharedContextManager {
553
589
  await appendFile(this.prioritiesInboxPath, lines, "utf-8");
554
590
  }
555
591
 
592
+ private async withDailySynthesisLock<T>(date: string, fn: () => Promise<T>): Promise<T> {
593
+ const previous = this.dailySynthesisChains.get(date) ?? Promise.resolve();
594
+ let releaseCurrent!: () => void;
595
+ const current = new Promise<void>((resolve) => {
596
+ releaseCurrent = resolve;
597
+ });
598
+ const queued = previous.catch(() => undefined).then(() => current);
599
+ this.dailySynthesisChains.set(date, queued);
600
+ await previous.catch(() => undefined);
601
+ try {
602
+ return await fn();
603
+ } finally {
604
+ releaseCurrent();
605
+ if (this.dailySynthesisChains.get(date) === queued) {
606
+ this.dailySynthesisChains.delete(date);
607
+ }
608
+ }
609
+ }
610
+
556
611
  async synthesizeCrossSignals(opts: {
557
612
  date?: string;
558
613
  maxSummaryItems?: number;
559
614
  }): Promise<SharedCrossSignalSynthesisResult> {
560
- const date = opts.date ?? ymd(new Date());
615
+ const date = safeDateSegment(opts.date ?? ymd(new Date()));
616
+ return this.withDailySynthesisLock(date, () => this.synthesizeCrossSignalsUnlocked({
617
+ date,
618
+ maxSummaryItems: opts.maxSummaryItems,
619
+ }));
620
+ }
621
+
622
+ private async synthesizeCrossSignalsUnlocked(opts: {
623
+ date: string;
624
+ maxSummaryItems?: number;
625
+ }): Promise<SharedCrossSignalSynthesisResult> {
626
+ const date = opts.date;
561
627
  const maxSummaryItems = Math.max(1, opts.maxSummaryItems ?? 8);
562
628
 
563
629
  // Collect outputs for the day (best-effort).
564
630
  const outputs: Array<{ agent: string; path: string; title: string; raw: string }> = [];
565
631
  try {
566
- const agents = await readdir(this.outputsDir, { withFileTypes: true });
632
+ const agents = (await readdir(this.outputsDir, { withFileTypes: true }))
633
+ .sort((a, b) => a.name.localeCompare(b.name));
567
634
  for (const a of agents) {
568
635
  if (!a.isDirectory()) continue;
569
636
  const dayDir = path.join(this.outputsDir, a.name, date);
@@ -583,6 +650,12 @@ export class SharedContextManager {
583
650
  } catch {
584
651
  // ignore
585
652
  }
653
+ outputs.sort(
654
+ (a, b) =>
655
+ a.agent.localeCompare(b.agent)
656
+ || a.path.localeCompare(b.path)
657
+ || a.title.localeCompare(b.title),
658
+ );
586
659
 
587
660
  // Collect feedback entries for the day.
588
661
  const feedback: SharedFeedbackEntry[] = [];
@@ -700,7 +773,7 @@ export class SharedContextManager {
700
773
  };
701
774
 
702
775
  const crossSignalsPath = path.join(this.crossSignalsDir, `${date}.json`);
703
- await writeFile(crossSignalsPath, `${JSON.stringify(report, null, 2)}\n`, "utf-8");
776
+ await writeFileAtomic(crossSignalsPath, `${JSON.stringify(report, null, 2)}\n`);
704
777
 
705
778
  const recurringThemeLines = mergedOverlaps.length === 0
706
779
  ? ["- No multi-agent topic overlap detected."]
@@ -718,7 +791,7 @@ export class SharedContextManager {
718
791
  const promotionLines = promotionCandidates.length === 0
719
792
  ? ["- No promotion candidates yet."]
720
793
  : promotionCandidates.map((entry) =>
721
- `- Consider promoting \`${entry.token}\` into priorities or operating rules [sources: ${entry.sourcePaths.join(", ")}]`
794
+ `- Consider promoting \`${entry.token}\` into priorities or operating rules [sources: ${markdownLineList(entry.sourcePaths)}]`
722
795
  );
723
796
 
724
797
  const crossSignalsMarkdown = [
@@ -742,13 +815,13 @@ export class SharedContextManager {
742
815
  "",
743
816
  "## Sources",
744
817
  ...(sources.length === 0 ? ["- (none)"] : sources.map((source) =>
745
- `- [${source.agent}] ${source.title} (${source.path})`
818
+ `- [${markdownLineText(source.agent)}] ${markdownLineText(source.title)} (${markdownLineText(source.path)})`
746
819
  )),
747
820
  "",
748
821
  ].join("\n");
749
822
 
750
823
  const crossSignalsMarkdownPath = path.join(this.crossSignalsDir, `${date}.md`);
751
- await writeFile(crossSignalsMarkdownPath, crossSignalsMarkdown, "utf-8");
824
+ await writeFileAtomic(crossSignalsMarkdownPath, crossSignalsMarkdown);
752
825
 
753
826
  return {
754
827
  date,
@@ -760,9 +833,14 @@ export class SharedContextManager {
760
833
  }
761
834
 
762
835
  async curateDaily(opts: { date?: string; maxChars?: number }): Promise<SharedDailyCurationResult> {
763
- const date = opts.date ?? ymd(new Date());
836
+ const date = safeDateSegment(opts.date ?? ymd(new Date()));
837
+ return this.withDailySynthesisLock(date, () => this.curateDailyUnlocked({ ...opts, date }));
838
+ }
839
+
840
+ private async curateDailyUnlocked(opts: { date: string; maxChars?: number }): Promise<SharedDailyCurationResult> {
841
+ const date = opts.date;
764
842
  const maxChars = Math.max(2_000, opts.maxChars ?? 20_000);
765
- const crossSignals = await this.synthesizeCrossSignals({ date });
843
+ const crossSignals = await this.synthesizeCrossSignalsUnlocked({ date });
766
844
  const feedbackLines = crossSignals.report.feedbackEntries.length === 0
767
845
  ? ["- (none)"]
768
846
  : crossSignals.report.feedbackEntries.map((entry) => formatFeedbackLine(entry));
@@ -796,7 +874,7 @@ export class SharedContextManager {
796
874
  const trimmed = out.length > maxChars ? out.slice(0, maxChars) + "\n\n...(trimmed)\n" : out;
797
875
 
798
876
  const roundtablePath = path.join(this.roundtableDir, `${date}.md`);
799
- await writeFile(roundtablePath, trimmed, "utf-8");
877
+ await writeFileAtomic(roundtablePath, trimmed);
800
878
 
801
879
  log.info(`shared-context curated daily roundtable: ${roundtablePath}`);
802
880
  return {
@@ -0,0 +1,14 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+
4
+ import { scanSignals } from "./signal.js";
5
+
6
+ test("scanSignals skips invalid custom patterns without throwing", () => {
7
+ const result = scanSignals("please always remember the deployment window", [
8
+ "[",
9
+ "deployment",
10
+ ]);
11
+
12
+ assert.equal(result.level, "high");
13
+ assert.ok(result.patterns.some((pattern) => pattern === "custom:deployment"));
14
+ });
package/src/signal.ts CHANGED
@@ -48,7 +48,14 @@ export function scanSignals(
48
48
  ): SignalScanResult {
49
49
  const matched: string[] = [];
50
50
 
51
- const customRegexes = customPatterns.map((p) => new RegExp(p, "i"));
51
+ const customRegexes: RegExp[] = [];
52
+ for (const pattern of customPatterns) {
53
+ try {
54
+ customRegexes.push(new RegExp(pattern, "i"));
55
+ } catch {
56
+ // Invalid custom patterns should not make the scan path fail closed.
57
+ }
58
+ }
52
59
 
53
60
  for (const rx of customRegexes) {
54
61
  if (rx.test(text)) {
@@ -16,6 +16,7 @@ import {
16
16
  parseAllCitations,
17
17
  parseCitation,
18
18
  stripCitation,
19
+ stripCitationForTemplate,
19
20
  } from "./source-attribution.js";
20
21
 
21
22
  test("formatCitation emits the default template with provided fields", () => {
@@ -739,6 +740,13 @@ test("hasCitationForTemplate (Finding 1): bracket-wrapped compact template is ac
739
740
  );
740
741
  });
741
742
 
743
+ test("stripCitationForTemplate removes bracket-wrapped compact citations", () => {
744
+ assert.equal(
745
+ stripCitationForTemplate("Fact body. [agent-abc123]", "{agent}-{sessionId}"),
746
+ "Fact body.",
747
+ );
748
+ });
749
+
742
750
  // Finding 2: stripCitation must be a no-op on uncited input
743
751
  test("stripCitation (Finding 2): returns uncited input byte-for-byte unchanged", () => {
744
752
  // Core regression: the old implementation normalised all repeated whitespace
@@ -620,9 +620,13 @@ export function stripCitationForTemplate(
620
620
  let match: RegExpExecArray | null;
621
621
 
622
622
  while ((match = globalMatcher.exec(text)) !== null) {
623
- const before = text.slice(lastIndex, match.index).replace(/[ \t]+$/, "");
623
+ const matchEnd = match.index + match[0].length;
624
+ const enclosure = enclosingDelimiterRange(text, match.index, matchEnd);
625
+ const removalStart = enclosure?.start ?? match.index;
626
+ const removalEnd = enclosure?.end ?? matchEnd;
627
+ const before = text.slice(lastIndex, removalStart).replace(/[ \t]+$/, "");
624
628
  result += before;
625
- lastIndex = match.index + match[0].length;
629
+ lastIndex = removalEnd;
626
630
  // Guard against zero-width matches causing an infinite loop.
627
631
  if (match[0].length === 0) {
628
632
  globalMatcher.lastIndex++;
@@ -637,3 +641,21 @@ export function stripCitationForTemplate(
637
641
 
638
642
  return result.trimEnd();
639
643
  }
644
+
645
+ function enclosingDelimiterRange(
646
+ text: string,
647
+ start: number,
648
+ end: number,
649
+ ): { start: number; end: number } | undefined {
650
+ if (start <= 0 || end >= text.length) return undefined;
651
+ const opener = text[start - 1];
652
+ const closer = text[end];
653
+ if (
654
+ (opener === "[" && closer === "]") ||
655
+ (opener === "(" && closer === ")") ||
656
+ (opener === "<" && closer === ">")
657
+ ) {
658
+ return { start: start - 1, end: end + 1 };
659
+ }
660
+ return undefined;
661
+ }