@remnic/core 1.1.31 → 9.3.515

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 (1087) 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 +156 -119
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +8 -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-qrrIrC-0.d.ts} +5 -128
  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-7OZ53EXP.js → chunk-2NLLXCJG.js} +21 -10
  68. package/dist/chunk-2NLLXCJG.js.map +1 -0
  69. package/dist/{chunk-PK7H5L6Y.js → chunk-2NM43EWN.js} +2 -2
  70. package/dist/{chunk-PYXS46O7.js → chunk-3BP57I6J.js} +2 -2
  71. package/dist/{chunk-FBYESMQ2.js → chunk-3C5RPJAX.js} +2 -2
  72. package/dist/{chunk-ZAVUCJ4H.js → chunk-3Q4H3OBR.js} +150 -65
  73. package/dist/chunk-3Q4H3OBR.js.map +1 -0
  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-U7EJOMFC.js → chunk-4Q73JBSM.js} +4 -4
  91. package/dist/{chunk-XKLD5OK4.js → chunk-4RR6ROTB.js} +10 -11
  92. package/dist/chunk-4RR6ROTB.js.map +1 -0
  93. package/dist/{chunk-4KGVTPGD.js → chunk-6F6BXB7A.js} +9 -8
  94. package/dist/chunk-6F6BXB7A.js.map +1 -0
  95. package/dist/{chunk-NMZY542O.js → chunk-6URPAY2D.js} +41 -17
  96. package/dist/chunk-6URPAY2D.js.map +1 -0
  97. package/dist/{chunk-N53K2EXC.js → chunk-6VF75M3X.js} +2 -2
  98. package/dist/{chunk-XSZEP4SF.js → chunk-6XSPNR6L.js} +6 -5
  99. package/dist/chunk-6XSPNR6L.js.map +1 -0
  100. package/dist/{chunk-6H2TESSP.js → chunk-765K3SAT.js} +3 -3
  101. package/dist/{chunk-EDTHC6UD.js → chunk-77NAFXUD.js} +2 -2
  102. package/dist/{chunk-S7KDBTWT.js → chunk-7F7Z6MOS.js} +29 -14
  103. package/dist/chunk-7F7Z6MOS.js.map +1 -0
  104. package/dist/{chunk-MZH6EHNR.js → chunk-7H6CFEBJ.js} +41 -14
  105. package/dist/chunk-7H6CFEBJ.js.map +1 -0
  106. package/dist/{chunk-575RMLWN.js → chunk-7MV5CWTE.js} +26 -20
  107. package/dist/chunk-7MV5CWTE.js.map +1 -0
  108. package/dist/{chunk-MGKYQQYF.js → chunk-7Q3RCKAQ.js} +2 -2
  109. package/dist/chunk-7RXCMVFQ.js +27 -0
  110. package/dist/chunk-7RXCMVFQ.js.map +1 -0
  111. package/dist/{chunk-DGXUHMOV.js → chunk-A2IYSXDQ.js} +25 -6
  112. package/dist/chunk-A2IYSXDQ.js.map +1 -0
  113. package/dist/{chunk-EABGC2TL.js → chunk-A2Z6UCWT.js} +26 -4
  114. package/dist/chunk-A2Z6UCWT.js.map +1 -0
  115. package/dist/{chunk-3VAL7ZL2.js → chunk-A52AKD7C.js} +59 -24
  116. package/dist/chunk-A52AKD7C.js.map +1 -0
  117. package/dist/{chunk-5375UYTQ.js → chunk-A6D7A2FW.js} +4 -4
  118. package/dist/chunk-A6D7A2FW.js.map +1 -0
  119. package/dist/{chunk-FAAFWE4G.js → chunk-ALEPI75L.js} +24 -6
  120. package/dist/chunk-ALEPI75L.js.map +1 -0
  121. package/dist/{chunk-3SLRNYNG.js → chunk-AUDJPF4N.js} +15 -4
  122. package/dist/chunk-AUDJPF4N.js.map +1 -0
  123. package/dist/chunk-B5XMS73R.js +145 -0
  124. package/dist/chunk-B5XMS73R.js.map +1 -0
  125. package/dist/{chunk-HXXBL2KD.js → chunk-BECQDWBA.js} +44 -4
  126. package/dist/chunk-BECQDWBA.js.map +1 -0
  127. package/dist/{chunk-7SEAZFFB.js → chunk-BEUDU7Y4.js} +24 -4
  128. package/dist/chunk-BEUDU7Y4.js.map +1 -0
  129. package/dist/{chunk-XVVIG67A.js → chunk-BLZAVUD2.js} +61 -17
  130. package/dist/chunk-BLZAVUD2.js.map +1 -0
  131. package/dist/chunk-CHBI22MI.js +159 -0
  132. package/dist/chunk-CHBI22MI.js.map +1 -0
  133. package/dist/{chunk-GDFS42HT.js → chunk-CHCA44C3.js} +15 -8
  134. package/dist/chunk-CHCA44C3.js.map +1 -0
  135. package/dist/chunk-CINZGPSJ.js +22 -0
  136. package/dist/chunk-CINZGPSJ.js.map +1 -0
  137. package/dist/chunk-CMTINOFS.js +36 -0
  138. package/dist/chunk-CMTINOFS.js.map +1 -0
  139. package/dist/{chunk-34DQE4KF.js → chunk-CO7ZO4TU.js} +2 -2
  140. package/dist/{chunk-PFV5C235.js → chunk-CPPS65WS.js} +2 -1
  141. package/dist/{chunk-PFV5C235.js.map → chunk-CPPS65WS.js.map} +1 -1
  142. package/dist/{chunk-DINWEURR.js → chunk-CSKLPDN6.js} +20 -6
  143. package/dist/chunk-CSKLPDN6.js.map +1 -0
  144. package/dist/chunk-CWWMTTQE.js +566 -0
  145. package/dist/chunk-CWWMTTQE.js.map +1 -0
  146. package/dist/{chunk-IQT3XTKW.js → chunk-D24OXEPB.js} +13 -7
  147. package/dist/chunk-D24OXEPB.js.map +1 -0
  148. package/dist/{chunk-TPU5L5EY.js → chunk-D6WE5MTW.js} +272 -411
  149. package/dist/chunk-D6WE5MTW.js.map +1 -0
  150. package/dist/{chunk-WIICJPET.js → chunk-DEUNUKTD.js} +6 -4
  151. package/dist/{chunk-WIICJPET.js.map → chunk-DEUNUKTD.js.map} +1 -1
  152. package/dist/{chunk-ZYVPLJ4T.js → chunk-DHGSZ3UD.js} +9 -7
  153. package/dist/chunk-DHGSZ3UD.js.map +1 -0
  154. package/dist/{chunk-JR4ZC3G4.js → chunk-DLJ4IR6M.js} +91 -41
  155. package/dist/chunk-DLJ4IR6M.js.map +1 -0
  156. package/dist/{chunk-U4SCL7B7.js → chunk-DRD2Q7HQ.js} +82 -18
  157. package/dist/chunk-DRD2Q7HQ.js.map +1 -0
  158. package/dist/{chunk-2IWUMAES.js → chunk-E62SBGQ3.js} +28 -13
  159. package/dist/chunk-E62SBGQ3.js.map +1 -0
  160. package/dist/{chunk-C5BCH4ZS.js → chunk-EAZGEEG2.js} +21 -3
  161. package/dist/chunk-EAZGEEG2.js.map +1 -0
  162. package/dist/{chunk-TPB3I2AC.js → chunk-ECZU5BJH.js} +31 -10
  163. package/dist/chunk-ECZU5BJH.js.map +1 -0
  164. package/dist/{chunk-77H5NU3M.js → chunk-EDBEWFJO.js} +82 -18
  165. package/dist/chunk-EDBEWFJO.js.map +1 -0
  166. package/dist/chunk-EDQVAMQI.js +308 -0
  167. package/dist/chunk-EDQVAMQI.js.map +1 -0
  168. package/dist/{chunk-RRF5UOBJ.js → chunk-EI6V5UXY.js} +22 -15
  169. package/dist/chunk-EI6V5UXY.js.map +1 -0
  170. package/dist/{chunk-I5GLV3VE.js → chunk-EIPUHVKE.js} +31 -24
  171. package/dist/{chunk-I5GLV3VE.js.map → chunk-EIPUHVKE.js.map} +1 -1
  172. package/dist/{chunk-ZKSK55RC.js → chunk-ETUPBUHB.js} +2 -2
  173. package/dist/{chunk-25MQ7IHJ.js → chunk-EUML3N6B.js} +17 -6
  174. package/dist/chunk-EUML3N6B.js.map +1 -0
  175. package/dist/{chunk-5RGLBDQF.js → chunk-EVZFIAPG.js} +12 -12
  176. package/dist/chunk-EVZFIAPG.js.map +1 -0
  177. package/dist/{chunk-QRNI5JBH.js → chunk-EYIEWJNI.js} +2 -2
  178. package/dist/{chunk-YU5KIWYQ.js → chunk-FER4WARO.js} +79 -41
  179. package/dist/chunk-FER4WARO.js.map +1 -0
  180. package/dist/{chunk-43PJZYGL.js → chunk-FPGE5NVO.js} +45 -10
  181. package/dist/chunk-FPGE5NVO.js.map +1 -0
  182. package/dist/{chunk-C6QPK5GG.js → chunk-FZZ2QTJI.js} +2 -2
  183. package/dist/{chunk-D46YSIYX.js → chunk-G3Z3QEF5.js} +19 -11
  184. package/dist/{chunk-D46YSIYX.js.map → chunk-G3Z3QEF5.js.map} +1 -1
  185. package/dist/{chunk-3JXBXXM2.js → chunk-G4IAEX6D.js} +2 -2
  186. package/dist/{chunk-MSWG7JI6.js → chunk-G56P5RLD.js} +8 -2
  187. package/dist/chunk-G56P5RLD.js.map +1 -0
  188. package/dist/{chunk-AGZQD76C.js → chunk-GCGJW34D.js} +48 -2
  189. package/dist/chunk-GCGJW34D.js.map +1 -0
  190. package/dist/chunk-H2NCNXMS.js +159 -0
  191. package/dist/chunk-H2NCNXMS.js.map +1 -0
  192. package/dist/{chunk-XYIK4LF6.js → chunk-H3FZVNRN.js} +8 -2
  193. package/dist/chunk-H3FZVNRN.js.map +1 -0
  194. package/dist/{chunk-TK4UEOSK.js → chunk-HDDRVXX4.js} +8 -8
  195. package/dist/chunk-HDDRVXX4.js.map +1 -0
  196. package/dist/{chunk-LLQ2LLWF.js → chunk-HENLZHIT.js} +15 -5
  197. package/dist/chunk-HENLZHIT.js.map +1 -0
  198. package/dist/{chunk-N2D6GXBM.js → chunk-HINSGUA7.js} +28 -20
  199. package/dist/chunk-HINSGUA7.js.map +1 -0
  200. package/dist/{chunk-APO3DCMU.js → chunk-HLAVGJ62.js} +30 -8
  201. package/dist/chunk-HLAVGJ62.js.map +1 -0
  202. package/dist/{chunk-TPMQ3G6Z.js → chunk-HOJZMQ4J.js} +2 -2
  203. package/dist/chunk-HOJZMQ4J.js.map +1 -0
  204. package/dist/{chunk-LUDTDZLK.js → chunk-HPWVAEET.js} +33 -7
  205. package/dist/chunk-HPWVAEET.js.map +1 -0
  206. package/dist/{chunk-NZL6GGQE.js → chunk-HQ6NIBL6.js} +92 -30
  207. package/dist/chunk-HQ6NIBL6.js.map +1 -0
  208. package/dist/{chunk-UWVJF25J.js → chunk-HWVTS5NO.js} +20 -6
  209. package/dist/chunk-HWVTS5NO.js.map +1 -0
  210. package/dist/{chunk-2WWLHTZY.js → chunk-IC4GELZE.js} +2 -2
  211. package/dist/{chunk-QA2ZAPBU.js → chunk-IPLYGWQF.js} +28 -20
  212. package/dist/chunk-IPLYGWQF.js.map +1 -0
  213. package/dist/{chunk-A6KTB5R6.js → chunk-IQ3OI2RR.js} +3 -3
  214. package/dist/chunk-IQ3OI2RR.js.map +1 -0
  215. package/dist/{chunk-6LVVDPJ4.js → chunk-J64TK33U.js} +3 -4
  216. package/dist/chunk-J64TK33U.js.map +1 -0
  217. package/dist/{chunk-6FC5EGNV.js → chunk-JBPKEARU.js} +15 -5
  218. package/dist/{chunk-6FC5EGNV.js.map → chunk-JBPKEARU.js.map} +1 -1
  219. package/dist/{chunk-RHY3HH7P.js → chunk-JFEKNTX7.js} +125 -33
  220. package/dist/chunk-JFEKNTX7.js.map +1 -0
  221. package/dist/{chunk-TZOLIGIG.js → chunk-JJEJJ7RK.js} +4 -2
  222. package/dist/chunk-JJEJJ7RK.js.map +1 -0
  223. package/dist/{chunk-PCUKNJAZ.js → chunk-JKV57BTN.js} +2 -2
  224. package/dist/{chunk-EJI5XIBB.js → chunk-JLNBQWZ2.js} +55 -7
  225. package/dist/chunk-JLNBQWZ2.js.map +1 -0
  226. package/dist/{chunk-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
  227. package/dist/chunk-JUC24CTX.js.map +1 -0
  228. package/dist/{chunk-3ZLVGM76.js → chunk-JYIKKAK3.js} +106 -44
  229. package/dist/chunk-JYIKKAK3.js.map +1 -0
  230. package/dist/{chunk-OIGNEXKZ.js → chunk-K5O2QY6T.js} +5 -1
  231. package/dist/{chunk-OIGNEXKZ.js.map → chunk-K5O2QY6T.js.map} +1 -1
  232. package/dist/{chunk-ZTFCYYEZ.js → chunk-KCYE2MZM.js} +3 -3
  233. package/dist/chunk-KCYE2MZM.js.map +1 -0
  234. package/dist/{chunk-JWPLJLDU.js → chunk-KD3QD3A5.js} +2 -2
  235. package/dist/{chunk-JWPLJLDU.js.map → chunk-KD3QD3A5.js.map} +1 -1
  236. package/dist/{chunk-YRMVARQP.js → chunk-KFY3SGN7.js} +49 -2
  237. package/dist/chunk-KFY3SGN7.js.map +1 -0
  238. package/dist/{chunk-CYFQJMUV.js → chunk-KIB7SDIJ.js} +15 -10
  239. package/dist/chunk-KIB7SDIJ.js.map +1 -0
  240. package/dist/{chunk-3KW65B36.js → chunk-KILOTVIF.js} +95 -48
  241. package/dist/chunk-KILOTVIF.js.map +1 -0
  242. package/dist/{chunk-MXFBBHJU.js → chunk-KJMYHC7K.js} +10 -5
  243. package/dist/chunk-KJMYHC7K.js.map +1 -0
  244. package/dist/{chunk-W3LR522O.js → chunk-KM2A35EO.js} +36 -34
  245. package/dist/chunk-KM2A35EO.js.map +1 -0
  246. package/dist/{chunk-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
  247. package/dist/chunk-L227SKTB.js.map +1 -0
  248. package/dist/{chunk-W6AQJ2PY.js → chunk-L7S47WZT.js} +35 -16
  249. package/dist/chunk-L7S47WZT.js.map +1 -0
  250. package/dist/{chunk-BVF3AGJP.js → chunk-LJBOVCQG.js} +26 -11
  251. package/dist/chunk-LJBOVCQG.js.map +1 -0
  252. package/dist/{chunk-2KI4QFHU.js → chunk-LMDRGRJ2.js} +2 -2
  253. package/dist/{chunk-MY6TPVXW.js → chunk-LMPHTYJC.js} +2 -2
  254. package/dist/{chunk-EHRTFRWW.js → chunk-LQHDIS7L.js} +10 -5
  255. package/dist/chunk-LQHDIS7L.js.map +1 -0
  256. package/dist/chunk-LUDUFZTV.js +170 -0
  257. package/dist/chunk-LUDUFZTV.js.map +1 -0
  258. package/dist/{chunk-5HRY2WRF.js → chunk-LZ3VEOU5.js} +2 -2
  259. package/dist/{chunk-Q7P4WJDP.js → chunk-M5T4Q2ZU.js} +1 -1
  260. package/dist/chunk-M5T4Q2ZU.js.map +1 -0
  261. package/dist/{chunk-ICRIXAP2.js → chunk-MC4FJXPA.js} +16 -6
  262. package/dist/chunk-MC4FJXPA.js.map +1 -0
  263. package/dist/{chunk-WPGJYVUH.js → chunk-MGVIEM2O.js} +23 -6
  264. package/dist/chunk-MGVIEM2O.js.map +1 -0
  265. package/dist/{chunk-YROHKYBY.js → chunk-O27WNHTT.js} +22 -6
  266. package/dist/chunk-O27WNHTT.js.map +1 -0
  267. package/dist/{chunk-NGAVDO7E.js → chunk-OADWQ5CR.js} +2 -2
  268. package/dist/{chunk-2NMMFZ5T.js → chunk-OD4FM2U7.js} +6 -3
  269. package/dist/chunk-OD4FM2U7.js.map +1 -0
  270. package/dist/{chunk-OZHRDTDX.js → chunk-OKTXM5H4.js} +11 -1
  271. package/dist/chunk-OKTXM5H4.js.map +1 -0
  272. package/dist/{chunk-RXDLTSWT.js → chunk-ONPLNAPX.js} +16 -7
  273. package/dist/chunk-ONPLNAPX.js.map +1 -0
  274. package/dist/{chunk-FJ43PRLT.js → chunk-ORFGK3XI.js} +20 -14
  275. package/dist/chunk-ORFGK3XI.js.map +1 -0
  276. package/dist/{chunk-DOM4GKSW.js → chunk-OZKVVUJB.js} +3 -3
  277. package/dist/{chunk-MT4HVDUZ.js → chunk-PM3QHTFT.js} +3 -3
  278. package/dist/{chunk-4DWOBS2A.js → chunk-PRQJ5ESM.js} +27 -2
  279. package/dist/{chunk-4DWOBS2A.js.map → chunk-PRQJ5ESM.js.map} +1 -1
  280. package/dist/chunk-PU44GBL4.js +52 -0
  281. package/dist/chunk-PU44GBL4.js.map +1 -0
  282. package/dist/{chunk-MJFNCJXV.js → chunk-Q4CAQGKQ.js} +47 -9
  283. package/dist/chunk-Q4CAQGKQ.js.map +1 -0
  284. package/dist/{chunk-U3WSW6PZ.js → chunk-QMYXNM4P.js} +90 -35
  285. package/dist/chunk-QMYXNM4P.js.map +1 -0
  286. package/dist/{chunk-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
  287. package/dist/chunk-QY7YA7OL.js.map +1 -0
  288. package/dist/{chunk-QLLBRHAT.js → chunk-R26QUUQN.js} +181 -257
  289. package/dist/chunk-R26QUUQN.js.map +1 -0
  290. package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
  291. package/dist/{chunk-TMQLARTH.js → chunk-RCTS5CKK.js} +33 -14
  292. package/dist/chunk-RCTS5CKK.js.map +1 -0
  293. package/dist/{chunk-2PRLKQAH.js → chunk-RLV3PQGH.js} +35 -19
  294. package/dist/chunk-RLV3PQGH.js.map +1 -0
  295. package/dist/{chunk-WW3QQF4H.js → chunk-ROZJACKP.js} +16 -1
  296. package/dist/chunk-ROZJACKP.js.map +1 -0
  297. package/dist/{chunk-7MNMYOFP.js → chunk-RSUYKGGZ.js} +3 -4
  298. package/dist/chunk-RSUYKGGZ.js.map +1 -0
  299. package/dist/{chunk-LT3NLYSI.js → chunk-RUZOJKNF.js} +10 -7
  300. package/dist/chunk-RUZOJKNF.js.map +1 -0
  301. package/dist/{chunk-326G7DJK.js → chunk-RW5DGAGO.js} +67 -13
  302. package/dist/chunk-RW5DGAGO.js.map +1 -0
  303. package/dist/{chunk-KOSORCJG.js → chunk-S53PKKWK.js} +63 -24
  304. package/dist/chunk-S53PKKWK.js.map +1 -0
  305. package/dist/{chunk-65PG43EQ.js → chunk-S7WU3Y3D.js} +21 -4
  306. package/dist/chunk-S7WU3Y3D.js.map +1 -0
  307. package/dist/{chunk-SKE7JYKA.js → chunk-SFXKHM7P.js} +2 -2
  308. package/dist/{chunk-HMDCOMYU.js → chunk-SKGV326D.js} +3 -3
  309. package/dist/chunk-T2PO5MUF.js +62 -0
  310. package/dist/chunk-T2PO5MUF.js.map +1 -0
  311. package/dist/{chunk-C7VW7C3F.js → chunk-TDKQGLJW.js} +3 -3
  312. package/dist/chunk-TDKQGLJW.js.map +1 -0
  313. package/dist/{chunk-3QKK7QOS.js → chunk-TERNBNJB.js} +3 -3
  314. package/dist/chunk-TERNBNJB.js.map +1 -0
  315. package/dist/{chunk-MXC3AP5I.js → chunk-TGQ2NTWH.js} +12 -7
  316. package/dist/chunk-TGQ2NTWH.js.map +1 -0
  317. package/dist/{chunk-3Y4P7RXM.js → chunk-TMSXWOBZ.js} +3 -4
  318. package/dist/chunk-TMSXWOBZ.js.map +1 -0
  319. package/dist/{chunk-3TNBOMQT.js → chunk-TVRN5QKH.js} +11 -11
  320. package/dist/{chunk-3TNBOMQT.js.map → chunk-TVRN5QKH.js.map} +1 -1
  321. package/dist/{chunk-5UM2VJ6D.js → chunk-UEY3VB6W.js} +2 -2
  322. package/dist/{chunk-I6K5FBRQ.js → chunk-UI3NYK34.js} +4 -1
  323. package/dist/{chunk-I6K5FBRQ.js.map → chunk-UI3NYK34.js.map} +1 -1
  324. package/dist/{chunk-VBJ7V5SK.js → chunk-UIPDNLXA.js} +21 -8
  325. package/dist/chunk-UIPDNLXA.js.map +1 -0
  326. package/dist/{chunk-GIF42EW3.js → chunk-UP6MOYCB.js} +3 -3
  327. package/dist/{chunk-K4FLSOR5.js → chunk-USYGGIJZ.js} +44 -15
  328. package/dist/chunk-USYGGIJZ.js.map +1 -0
  329. package/dist/{chunk-FIT6DMX6.js → chunk-UWY7GIVS.js} +152 -54
  330. package/dist/chunk-UWY7GIVS.js.map +1 -0
  331. package/dist/{chunk-MRILGULB.js → chunk-V2RCP53Q.js} +2 -2
  332. package/dist/{chunk-XKECPATV.js → chunk-VFUEZZBS.js} +113 -4
  333. package/dist/chunk-VFUEZZBS.js.map +1 -0
  334. package/dist/{chunk-FSFEQI74.js → chunk-W7L6HXUC.js} +2 -2
  335. package/dist/{chunk-3IQ2TR4N.js → chunk-WLEB7WCG.js} +2 -2
  336. package/dist/{chunk-GL6I6MEQ.js → chunk-WSGF57U2.js} +3 -3
  337. package/dist/{chunk-KNKUID7G.js → chunk-X7Y7WX73.js} +72 -6
  338. package/dist/chunk-X7Y7WX73.js.map +1 -0
  339. package/dist/{chunk-5NPGSAVB.js → chunk-XEKAG3FM.js} +23 -5
  340. package/dist/chunk-XEKAG3FM.js.map +1 -0
  341. package/dist/{chunk-3APJ5EVB.js → chunk-XKIQZXUB.js} +41 -26
  342. package/dist/chunk-XKIQZXUB.js.map +1 -0
  343. package/dist/chunk-XKXKSQU7.js +92 -0
  344. package/dist/chunk-XKXKSQU7.js.map +1 -0
  345. package/dist/{chunk-JA3AK3PT.js → chunk-XNLXAWHX.js} +4 -4
  346. package/dist/{chunk-CULXMQJH.js → chunk-XPXEJRUB.js} +3 -3
  347. package/dist/chunk-XPXEJRUB.js.map +1 -0
  348. package/dist/{chunk-PZIAX57I.js → chunk-XR6DNK4U.js} +7 -4
  349. package/dist/chunk-XR6DNK4U.js.map +1 -0
  350. package/dist/{chunk-47VWKCAF.js → chunk-XSQ4SGM5.js} +33 -4
  351. package/dist/chunk-XSQ4SGM5.js.map +1 -0
  352. package/dist/{chunk-66DHUKLO.js → chunk-XSWKORGM.js} +16 -14
  353. package/dist/chunk-XSWKORGM.js.map +1 -0
  354. package/dist/{chunk-QR3C7BKQ.js → chunk-XZ4WBBB5.js} +7 -8
  355. package/dist/chunk-XZ4WBBB5.js.map +1 -0
  356. package/dist/{chunk-WNARATI3.js → chunk-Y2SXZ5KZ.js} +59 -11
  357. package/dist/chunk-Y2SXZ5KZ.js.map +1 -0
  358. package/dist/{chunk-SIC6U3GZ.js → chunk-YHV3KRKS.js} +3 -3
  359. package/dist/{chunk-ZPKBYX2F.js → chunk-YNDLCWXS.js} +85 -9
  360. package/dist/chunk-YNDLCWXS.js.map +1 -0
  361. package/dist/{chunk-VLXA6PI2.js → chunk-YQMZ7IH2.js} +4 -4
  362. package/dist/{chunk-TMM4S4IJ.js → chunk-YR6GIWWY.js} +58 -8
  363. package/dist/chunk-YR6GIWWY.js.map +1 -0
  364. package/dist/{chunk-DK5LDEQM.js → chunk-YR7XMOWK.js} +39 -23
  365. package/dist/chunk-YR7XMOWK.js.map +1 -0
  366. package/dist/chunk-ZFXCQPNO.js +27 -0
  367. package/dist/chunk-ZFXCQPNO.js.map +1 -0
  368. package/dist/citations.js +1 -1
  369. package/dist/{cli-kuh9PwZ5.d.ts → cli-X4NJoqSe.d.ts} +8 -31
  370. package/dist/cli.d.ts +10 -6
  371. package/dist/cli.js +122 -117
  372. package/dist/commitment-ledger.js +2 -2
  373. package/dist/compat/checks.js +1 -2
  374. package/dist/compounding/engine.d.ts +3 -2
  375. package/dist/compounding/engine.js +11 -11
  376. package/dist/compounding/preference-consolidator.d.ts +1 -0
  377. package/dist/compounding/preference-consolidator.js +8 -8
  378. package/dist/compounding/preference-consolidator.js.map +1 -1
  379. package/dist/compression-optimizer.d.ts +1 -0
  380. package/dist/compression-optimizer.js +1 -1
  381. package/dist/config.d.ts +1 -0
  382. package/dist/config.js +3 -2
  383. package/dist/connectors/codex-materialize-runner.d.ts +1 -0
  384. package/dist/connectors/codex-materialize-runner.js +12 -11
  385. package/dist/connectors/codex-materialize.d.ts +1 -0
  386. package/dist/connectors/codex-materialize.js +3 -2
  387. package/dist/connectors/index.d.ts +1 -0
  388. package/dist/connectors/index.js +14 -14
  389. package/dist/{connectors-cli-CwbyjGR7.d.ts → connectors-cli-DbTPNj2H.d.ts} +7 -1
  390. package/dist/connectors-cli.d.ts +1 -1
  391. package/dist/connectors-cli.js +3 -1
  392. package/dist/consolidation-provenance-check.d.ts +1 -0
  393. package/dist/consolidation-provenance-check.js +2 -2
  394. package/dist/consolidation-undo.d.ts +1 -0
  395. package/dist/consolidation-undo.js +1 -1
  396. package/dist/contradiction/index.d.ts +3 -1
  397. package/dist/contradiction/index.js +3 -3
  398. package/dist/{contradiction-review-ATP4S6IC.js → contradiction-review-6V2LXXK6.js} +2 -2
  399. package/dist/{contradiction-scan-5A4IDZV5.js → contradiction-scan-GIRVC4C7.js} +3 -3
  400. package/dist/conversation-index/backend.d.ts +3 -1
  401. package/dist/conversation-index/backend.js +3 -3
  402. package/dist/conversation-index/chunker.d.ts +1 -0
  403. package/dist/conversation-index/cleanup.js +1 -1
  404. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  405. package/dist/conversation-index/faiss-adapter.js +1 -1
  406. package/dist/conversation-index/indexer.d.ts +5 -2
  407. package/dist/conversation-index/indexer.js +1 -1
  408. package/dist/conversation-index/search.d.ts +2 -1
  409. package/dist/cross-namespace-budget.js +1 -1
  410. package/dist/cue-anchors.js +2 -2
  411. package/dist/dashboard-runtime.d.ts +6 -0
  412. package/dist/dashboard-runtime.js +3 -3
  413. package/dist/day-summary.d.ts +1 -0
  414. package/dist/day-summary.js +2 -2
  415. package/dist/delinearize.d.ts +1 -0
  416. package/dist/direct-answer-wiring.d.ts +1 -0
  417. package/dist/direct-answer.d.ts +1 -0
  418. package/dist/{dreams-ledger-LR2NBAZE.js → dreams-ledger-3WSCI5V4.js} +5 -4
  419. package/dist/{dreams-ledger-LR2NBAZE.js.map → dreams-ledger-3WSCI5V4.js.map} +1 -1
  420. package/dist/embedding-fallback.d.ts +3 -0
  421. package/dist/embedding-fallback.js +2 -2
  422. package/dist/enrichment/index.d.ts +1 -0
  423. package/dist/enrichment/index.js +1 -1
  424. package/dist/entity-retrieval.d.ts +2 -0
  425. package/dist/entity-retrieval.js +9 -9
  426. package/dist/entity-schema.d.ts +1 -0
  427. package/dist/evals.js +1 -1
  428. package/dist/explicit-capture.d.ts +5 -3
  429. package/dist/explicit-capture.js +2 -2
  430. package/dist/extraction-judge-telemetry.d.ts +2 -0
  431. package/dist/extraction-judge-training.d.ts +2 -0
  432. package/dist/extraction-judge.d.ts +2 -0
  433. package/dist/extraction.d.ts +2 -0
  434. package/dist/extraction.js +12 -12
  435. package/dist/{faiss-adapter-CzPghc4C.d.ts → faiss-adapter-BHecI1fF.d.ts} +4 -1
  436. package/dist/fallback-llm.d.ts +11 -1
  437. package/dist/fallback-llm.js +8 -6
  438. package/dist/{first-start-migration-4MHQEOSD.js → first-start-migration-CKTCTCQI.js} +5 -5
  439. package/dist/graph-dashboard-diff.d.ts +4 -0
  440. package/dist/graph-dashboard-diff.js +1 -1
  441. package/dist/graph-dashboard-parser.js +1 -1
  442. package/dist/{graph-edge-decay-5DI5GUNL.js → graph-edge-decay-MUP5J7CC.js} +6 -6
  443. package/dist/graph-events.js +1 -1
  444. package/dist/graph-snapshot.js +3 -3
  445. package/dist/graph.js +2 -2
  446. package/dist/harmonic-retrieval.js +4 -4
  447. package/dist/identity-continuity.d.ts +1 -0
  448. package/dist/importance.d.ts +1 -0
  449. package/dist/importers/index.d.ts +244 -0
  450. package/dist/importers/index.js +20 -0
  451. package/dist/index.d.ts +20 -350
  452. package/dist/index.js +884 -561
  453. package/dist/index.js.map +1 -1
  454. package/dist/intent.d.ts +1 -0
  455. package/dist/lcm/archive.d.ts +2 -2
  456. package/dist/lcm/archive.js +2 -2
  457. package/dist/lcm/engine.d.ts +3 -2
  458. package/dist/lcm/engine.js +6 -6
  459. package/dist/lcm/index.d.ts +1 -0
  460. package/dist/lcm/index.js +8 -8
  461. package/dist/lcm/recall.js +1 -1
  462. package/dist/lcm/summarizer.js +3 -3
  463. package/dist/lcm/tools.d.ts +1 -0
  464. package/dist/lifecycle.d.ts +1 -0
  465. package/dist/live-connectors-runner.d.ts +1 -0
  466. package/dist/live-connectors-runner.js +6 -6
  467. package/dist/local-llm.d.ts +1 -0
  468. package/dist/local-llm.js +2 -2
  469. package/dist/maintenance/archive-observations.js +1 -1
  470. package/dist/maintenance/memory-governance.d.ts +3 -1
  471. package/dist/maintenance/memory-governance.js +10 -8
  472. package/dist/maintenance/migrate-observations.js +3 -2
  473. package/dist/maintenance/observation-ledger-utils.d.ts +3 -0
  474. package/dist/maintenance/observation-ledger-utils.js +2 -1
  475. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -1
  476. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -8
  477. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -1
  478. package/dist/maintenance/rebuild-memory-projection.js +13 -10
  479. package/dist/maintenance/rebuild-observations.d.ts +1 -0
  480. package/dist/maintenance/rebuild-observations.js +3 -2
  481. package/dist/mcp-memory-inspector-app.d.ts +7 -4
  482. package/dist/mcp-memory-inspector-app.js +1 -1
  483. package/dist/memory-action-policy.d.ts +1 -0
  484. package/dist/memory-cache.d.ts +1 -0
  485. package/dist/memory-cache.js +1 -1
  486. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -0
  487. package/dist/memory-projection-store.d.ts +1 -0
  488. package/dist/memory-projection-store.js +1 -1
  489. package/dist/memory-provenance.d.ts +1 -0
  490. package/dist/memory-worth-outcomes.d.ts +1 -0
  491. package/dist/migrate/from-engram.js +2 -2
  492. package/dist/{migrate-from-identity-anchor-G27MCD6A.js → migrate-from-identity-anchor-EB4XI4Q2.js} +2 -2
  493. package/dist/model-registry.js +1 -1
  494. package/dist/models-json.d.ts +1 -0
  495. package/dist/namespaces/migrate.d.ts +3 -0
  496. package/dist/namespaces/migrate.js +24 -22
  497. package/dist/namespaces/principal.d.ts +1 -0
  498. package/dist/namespaces/principal.js +2 -1
  499. package/dist/namespaces/search.d.ts +1 -0
  500. package/dist/namespaces/search.js +15 -13
  501. package/dist/namespaces/storage.d.ts +4 -2
  502. package/dist/namespaces/storage.js +10 -9
  503. package/dist/native-knowledge.d.ts +1 -0
  504. package/dist/native-knowledge.js +1 -1
  505. package/dist/negative.js +1 -1
  506. package/dist/network/webdav.d.ts +16 -1
  507. package/dist/network/webdav.js +5 -3
  508. package/dist/objective-state-writers.js +4 -4
  509. package/dist/objective-state.js +2 -2
  510. package/dist/offline-sync.js +4 -4
  511. package/dist/operator-toolkit.d.ts +1 -0
  512. package/dist/operator-toolkit.js +35 -32
  513. package/dist/opik-exporter.js +1 -1
  514. package/dist/{orchestrator-DuWl9Hwx.d.ts → orchestrator-Co9nxRLF.d.ts} +4 -74
  515. package/dist/orchestrator.d.ts +5 -3
  516. package/dist/orchestrator.js +99 -96
  517. package/dist/page-versioning.js +1 -1
  518. package/dist/path-X2K5XCHL.js +9 -0
  519. package/dist/patterns-cli.d.ts +1 -0
  520. package/dist/peers/index.d.ts +328 -0
  521. package/dist/{peers-HCVGHMAE.js → peers/index.js} +4 -4
  522. package/dist/pipeline-D18UAKlN.d.ts +32 -0
  523. package/dist/plugin-entry-resolver.d.ts +9 -0
  524. package/dist/plugin-entry-resolver.js +8 -0
  525. package/dist/plugin-entry-resolver.js.map +1 -0
  526. package/dist/plugin-id.d.ts +2 -21
  527. package/dist/plugin-id.js +33 -4
  528. package/dist/plugin-id.js.map +1 -1
  529. package/dist/policy-runtime.d.ts +4 -0
  530. package/dist/policy-runtime.js +1 -1
  531. package/dist/profiling.js +1 -1
  532. package/dist/qmd-recall-cache.d.ts +1 -0
  533. package/dist/qmd.d.ts +1 -0
  534. package/dist/qmd.js +3 -3
  535. package/dist/recall-disclosure-escalation.d.ts +1 -0
  536. package/dist/recall-explain-renderer.d.ts +1 -0
  537. package/dist/recall-explain-renderer.js +3 -3
  538. package/dist/recall-state.d.ts +8 -1
  539. package/dist/recall-state.js +2 -1
  540. package/dist/recall-tag-filter.d.ts +1 -0
  541. package/dist/recall-xray-cli.d.ts +1 -0
  542. package/dist/recall-xray-cli.js +4 -4
  543. package/dist/recall-xray-renderer.d.ts +1 -0
  544. package/dist/recall-xray-renderer.js +3 -3
  545. package/dist/recall-xray.d.ts +1 -0
  546. package/dist/recall-xray.js +2 -2
  547. package/dist/relevance.d.ts +7 -1
  548. package/dist/relevance.js +2 -1
  549. package/dist/replay/normalizers/chatgpt.js +2 -2
  550. package/dist/replay/normalizers/claude.js +2 -2
  551. package/dist/replay/normalizers/openclaw.js +2 -2
  552. package/dist/replay/normalizers/shared.js +1 -1
  553. package/dist/replay/runner.js +1 -1
  554. package/dist/rerank.js +1 -1
  555. package/dist/{resolution-B7FNQSSP.js → resolution-ZY7VM6WS.js} +3 -3
  556. package/dist/resolution-ZY7VM6WS.js.map +1 -0
  557. package/dist/resolve-auth-token.d.ts +1 -0
  558. package/dist/resolve-auth-token.js +1 -1
  559. package/dist/resolve-provider-secret.d.ts +19 -29
  560. package/dist/resolve-provider-secret.js +2 -6
  561. package/dist/resume-bundles.js +10 -9
  562. package/dist/retrieval-agents.d.ts +2 -1
  563. package/dist/retrieval-agents.js +2 -1
  564. package/dist/retrieval-tiers.d.ts +1 -0
  565. package/dist/routing/engine.d.ts +1 -0
  566. package/dist/routing/store.d.ts +3 -0
  567. package/dist/routing/store.js +1 -1
  568. package/dist/runtime/env.js +1 -1
  569. package/dist/schemas.d.ts +191 -17
  570. package/dist/schemas.js +1 -1
  571. package/dist/sdk-compat.js +1 -1
  572. package/dist/search/document-scanner.js +1 -1
  573. package/dist/search/embed-helper.d.ts +7 -2
  574. package/dist/search/embed-helper.js +3 -1
  575. package/dist/search/factory.d.ts +2 -1
  576. package/dist/search/factory.js +13 -12
  577. package/dist/search/index.d.ts +2 -1
  578. package/dist/search/index.js +19 -18
  579. package/dist/search/lancedb-backend.d.ts +7 -6
  580. package/dist/search/lancedb-backend.js +4 -2
  581. package/dist/search/meilisearch-backend.d.ts +7 -6
  582. package/dist/search/meilisearch-backend.js +4 -2
  583. package/dist/search/noop-backend.d.ts +1 -0
  584. package/dist/search/orama-backend.d.ts +9 -7
  585. package/dist/search/orama-backend.js +8 -4
  586. package/dist/search/port.d.ts +1 -0
  587. package/dist/search/remote-backend.d.ts +1 -0
  588. package/dist/secure-store/index.d.ts +16 -3
  589. package/dist/secure-store/index.js +2 -2
  590. package/dist/{semantic-VwGI14Ok.d.ts → semantic-SLAa_prH.d.ts} +5 -3
  591. package/dist/semantic-consolidation.d.ts +1 -0
  592. package/dist/semantic-consolidation.js +14 -13
  593. package/dist/semantic-rule-promotion.js +8 -8
  594. package/dist/semantic-rule-verifier.d.ts +1 -0
  595. package/dist/semantic-rule-verifier.js +8 -8
  596. package/dist/session-integrity.d.ts +1 -0
  597. package/dist/session-integrity.js +1 -1
  598. package/dist/session-observer-bands.d.ts +1 -0
  599. package/dist/session-observer-state.d.ts +6 -1
  600. package/dist/session-observer-state.js +1 -1
  601. package/dist/shared-context/manager.d.ts +5 -0
  602. package/dist/shared-context/manager.js +3 -3
  603. package/dist/signal.d.ts +1 -0
  604. package/dist/signal.js +1 -1
  605. package/dist/source-attribution.js +1 -1
  606. package/dist/state-store-4QZISH3J.js +30 -0
  607. package/dist/state-store-4QZISH3J.js.map +1 -0
  608. package/dist/storage-C4DX8CuG.d.ts +157 -0
  609. package/dist/storage.d.ts +2 -0
  610. package/dist/storage.js +7 -7
  611. package/dist/store-contract.js +1 -1
  612. package/dist/summarizer.d.ts +1 -0
  613. package/dist/summarizer.js +7 -7
  614. package/dist/summary-snapshot.d.ts +1 -0
  615. package/dist/surfaces/dreams.js +48 -17
  616. package/dist/surfaces/dreams.js.map +1 -1
  617. package/dist/temporal-supersession.d.ts +1 -0
  618. package/dist/temporal-supersession.js +1 -1
  619. package/dist/temporal-validity.d.ts +1 -0
  620. package/dist/threading.d.ts +1 -0
  621. package/dist/tier-migration.d.ts +1 -0
  622. package/dist/tier-routing.d.ts +1 -0
  623. package/dist/{tier-stats-62ZVDFKS.js → tier-stats-SKML2OSF.js} +5 -5
  624. package/dist/tmt.js +1 -1
  625. package/dist/tokens.js +2 -2
  626. package/dist/topics.d.ts +1 -0
  627. package/dist/{trace-C5ETWBEF.js → trace-WM7V4CKI.js} +31 -1
  628. package/dist/trace-WM7V4CKI.js.map +1 -0
  629. package/dist/transcript.d.ts +1 -0
  630. package/dist/transcript.js +2 -2
  631. package/dist/transfer/autodetect.js +7 -7
  632. package/dist/transfer/backup.js +5 -5
  633. package/dist/transfer/capsule-export.js +5 -5
  634. package/dist/transfer/capsule-import.d.ts +6 -0
  635. package/dist/transfer/capsule-import.js +4 -4
  636. package/dist/transfer/export-json.js +3 -3
  637. package/dist/transfer/export-md.js +3 -3
  638. package/dist/transfer/export-sqlite.js +3 -3
  639. package/dist/transfer/fs-utils.d.ts +2 -1
  640. package/dist/transfer/fs-utils.js +5 -3
  641. package/dist/transfer/import-json.js +3 -3
  642. package/dist/transfer/import-md.js +3 -3
  643. package/dist/transfer/import-sqlite.js +3 -3
  644. package/dist/trust-zones.js +2 -2
  645. package/dist/types-B1VHaf2w.d.ts +126 -0
  646. package/dist/types-BliCnURB.d.ts +83 -0
  647. package/dist/types.d.ts +35 -0
  648. package/dist/types.js +1 -1
  649. package/dist/utility-learner.js +3 -3
  650. package/dist/utility-runtime.d.ts +1 -0
  651. package/dist/utility-runtime.js +4 -4
  652. package/dist/utility-telemetry.js +2 -2
  653. package/dist/verified-recall.js +9 -9
  654. package/dist/work/board.js +2 -2
  655. package/dist/work/boundary.js +1 -1
  656. package/dist/work/storage.d.ts +5 -0
  657. package/dist/work/storage.js +1 -1
  658. package/dist/work-product-ledger.js +2 -2
  659. package/package.json +74 -3
  660. package/scripts/ensure-better-sqlite3.mjs +8 -7
  661. package/scripts/faiss_index.py +141 -29
  662. package/src/access-cli.test.ts +87 -2
  663. package/src/access-cli.ts +59 -5
  664. package/src/access-http.test.ts +150 -0
  665. package/src/access-http.ts +89 -34
  666. package/src/access-idempotency.ts +136 -3
  667. package/src/access-mcp.test.ts +155 -0
  668. package/src/access-mcp.ts +116 -30
  669. package/src/access-schema.ts +22 -4
  670. package/src/access-service-project-tag.test.ts +37 -0
  671. package/src/access-service.ts +11 -10
  672. package/src/active-recall.test.ts +29 -1
  673. package/src/active-recall.ts +11 -7
  674. package/src/adapters/claude-code.ts +7 -8
  675. package/src/adapters/codex.ts +6 -7
  676. package/src/adapters/hermes.ts +1 -5
  677. package/src/adapters/registry.test.ts +63 -0
  678. package/src/adapters/registry.ts +10 -0
  679. package/src/adapters/replit.ts +5 -7
  680. package/src/adapters/types.ts +24 -1
  681. package/src/behavior-signals.ts +1 -1
  682. package/src/binary-lifecycle/backend.ts +16 -4
  683. package/src/binary-lifecycle/pipeline.test.ts +149 -0
  684. package/src/binary-lifecycle/pipeline.ts +49 -7
  685. package/src/binary-lifecycle/scanner.ts +19 -4
  686. package/src/boxes.ts +119 -32
  687. package/src/buffer-session.test.ts +28 -0
  688. package/src/buffer.ts +10 -14
  689. package/src/bulk-import/types.ts +10 -0
  690. package/src/calibration.test.ts +99 -0
  691. package/src/calibration.ts +57 -13
  692. package/src/causal-consolidation.test.ts +214 -0
  693. package/src/causal-consolidation.ts +131 -14
  694. package/src/causal-retrieval.ts +16 -3
  695. package/src/citations.test.ts +75 -0
  696. package/src/citations.ts +19 -6
  697. package/src/cli.ts +134 -109
  698. package/src/coding/coding-namespace.test.ts +7 -0
  699. package/src/coding/coding-namespace.ts +8 -0
  700. package/src/coding/review-context.test.ts +30 -0
  701. package/src/coding/review-context.ts +79 -9
  702. package/src/coding/wire-coding-context.test.ts +16 -0
  703. package/src/compat/checks.test.ts +33 -0
  704. package/src/compat/checks.ts +64 -4
  705. package/src/compounding/engine.ts +2 -2
  706. package/src/compounding/preference-consolidator.test.ts +47 -0
  707. package/src/compounding/preference-consolidator.ts +8 -8
  708. package/src/compression-optimizer.ts +5 -2
  709. package/src/config.test.ts +34 -2
  710. package/src/config.ts +62 -18
  711. package/src/connectors/codex-materialize-runner.ts +4 -3
  712. package/src/connectors/codex-materialize.ts +149 -34
  713. package/src/connectors/index.test.ts +144 -7
  714. package/src/connectors/index.ts +86 -15
  715. package/src/connectors/live/github.test.ts +47 -0
  716. package/src/connectors/live/github.ts +29 -1
  717. package/src/connectors/live/index.ts +2 -0
  718. package/src/connectors/live/live-connectors.test.ts +359 -73
  719. package/src/connectors/live/notion.test.ts +84 -0
  720. package/src/connectors/live/notion.ts +18 -1
  721. package/src/connectors/live/state-store.ts +419 -38
  722. package/src/connectors/weclone-installer.test.ts +16 -18
  723. package/src/connectors-cli.ts +19 -0
  724. package/src/console/trace.test.ts +28 -0
  725. package/src/console/trace.ts +42 -5
  726. package/src/contradiction/contradiction-judge.test.ts +49 -0
  727. package/src/contradiction/contradiction-judge.ts +15 -5
  728. package/src/contradiction/contradiction-review.ts +31 -7
  729. package/src/contradiction/contradiction-scan.ts +28 -18
  730. package/src/contradiction/contradiction.test.ts +237 -1
  731. package/src/contradiction/resolution.ts +43 -4
  732. package/src/conversation-index/backend.ts +13 -5
  733. package/src/conversation-index/cleanup.ts +25 -4
  734. package/src/conversation-index/faiss-adapter.ts +24 -15
  735. package/src/conversation-index/indexer.test.ts +71 -10
  736. package/src/conversation-index/indexer.ts +22 -3
  737. package/src/cross-namespace-budget.test.ts +59 -0
  738. package/src/cross-namespace-budget.ts +15 -7
  739. package/src/curation/index.ts +18 -17
  740. package/src/dashboard-runtime.test.ts +98 -0
  741. package/src/dashboard-runtime.ts +96 -6
  742. package/src/dedup/index.test.ts +133 -0
  743. package/src/dedup/index.ts +73 -10
  744. package/src/dedup/semantic.test.ts +77 -2
  745. package/src/dedup/semantic.ts +26 -6
  746. package/src/embedding-fallback.ts +47 -15
  747. package/src/enrichment/audit.ts +8 -1
  748. package/src/enrichment/pipeline.ts +21 -13
  749. package/src/enrichment/web-search-provider.ts +1 -6
  750. package/src/entity-retrieval.ts +57 -6
  751. package/src/evals.ts +22 -13
  752. package/src/explicit-capture.test.ts +40 -0
  753. package/src/explicit-capture.ts +14 -2
  754. package/src/extraction.ts +42 -30
  755. package/src/fallback-llm.ts +35 -2
  756. package/src/graph-dashboard-diff.test.ts +57 -0
  757. package/src/graph-dashboard-diff.ts +24 -2
  758. package/src/graph-dashboard-parser.test.ts +31 -0
  759. package/src/graph-dashboard-parser.ts +4 -1
  760. package/src/graph-events.ts +6 -4
  761. package/src/graph.test.ts +69 -0
  762. package/src/graph.ts +7 -4
  763. package/src/importers/base.test.ts +70 -0
  764. package/src/importers/base.ts +56 -7
  765. package/src/index.ts +5 -2
  766. package/src/lcm/archive.ts +65 -16
  767. package/src/lcm/engine.ts +27 -8
  768. package/src/lcm/recall.ts +5 -5
  769. package/src/lcm-engine.test.ts +87 -1
  770. package/src/lcm-recall.test.ts +71 -0
  771. package/src/live-connectors-runner.ts +100 -36
  772. package/src/maintenance/archive-observations.ts +24 -3
  773. package/src/maintenance/atomic-file.ts +85 -0
  774. package/src/maintenance/dreams-ledger.ts +15 -8
  775. package/src/maintenance/memory-governance.test.ts +53 -0
  776. package/src/maintenance/memory-governance.ts +15 -5
  777. package/src/maintenance/observation-ledger-utils.ts +6 -5
  778. package/src/maintenance/purge.test.ts +64 -0
  779. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +22 -9
  780. package/src/maintenance/rebuild-memory-projection.ts +22 -9
  781. package/src/maintenance/rebuild-observations.ts +7 -3
  782. package/src/mcp-memory-inspector-app.ts +26 -3
  783. package/src/memory-cache.test.ts +19 -0
  784. package/src/memory-cache.ts +1 -0
  785. package/src/memory-extension/codex-publisher.ts +25 -4
  786. package/src/memory-extension-host/host-discovery.test.ts +69 -0
  787. package/src/memory-extension-host/host-discovery.ts +63 -6
  788. package/src/memory-projection-store.ts +114 -62
  789. package/src/message-parts/index.ts +46 -31
  790. package/src/message-parts/message-parts.test.ts +77 -0
  791. package/src/migrate/from-engram.ts +68 -14
  792. package/src/model-registry.test.ts +38 -0
  793. package/src/model-registry.ts +12 -7
  794. package/src/namespaces/identity.test.ts +66 -0
  795. package/src/namespaces/identity.ts +23 -0
  796. package/src/namespaces/migrate.test.ts +62 -0
  797. package/src/namespaces/migrate.ts +82 -14
  798. package/src/namespaces/principal.test.ts +37 -1
  799. package/src/namespaces/principal.ts +18 -7
  800. package/src/namespaces/search.test.ts +76 -6
  801. package/src/namespaces/search.ts +22 -21
  802. package/src/namespaces/storage.ts +93 -11
  803. package/src/native-knowledge.ts +23 -3
  804. package/src/negative.ts +50 -5
  805. package/src/network/webdav.ts +177 -58
  806. package/src/onboarding/index.test.ts +105 -0
  807. package/src/onboarding/index.ts +17 -5
  808. package/src/operator-toolkit.ts +39 -4
  809. package/src/orchestrator.ts +52 -17
  810. package/src/page-versioning.ts +31 -5
  811. package/src/peers/peers.test.ts +70 -0
  812. package/src/peers/storage.ts +32 -3
  813. package/src/plugin-entry-resolver.test.ts +60 -0
  814. package/src/plugin-entry-resolver.ts +48 -0
  815. package/src/plugin-id.test.ts +38 -0
  816. package/src/plugin-id.ts +31 -64
  817. package/src/policy-runtime.test.ts +75 -0
  818. package/src/policy-runtime.ts +32 -3
  819. package/src/procedural/procedure-miner.test.ts +152 -0
  820. package/src/procedural/procedure-miner.ts +124 -19
  821. package/src/profiling.test.ts +23 -0
  822. package/src/profiling.ts +10 -1
  823. package/src/projection/index.test.ts +253 -0
  824. package/src/projection/index.ts +159 -18
  825. package/src/qmd-client.test.ts +45 -0
  826. package/src/qmd.ts +8 -8
  827. package/src/recall-disclosure.test.ts +15 -1
  828. package/src/recall-state.ts +24 -5
  829. package/src/relevance.ts +24 -5
  830. package/src/replay/normalizers/chatgpt.ts +14 -4
  831. package/src/replay/normalizers/claude.ts +8 -3
  832. package/src/replay/normalizers/openclaw.ts +35 -12
  833. package/src/replay/normalizers/replay-normalizers.test.ts +65 -0
  834. package/src/replay/normalizers/shared.ts +4 -1
  835. package/src/replay/runner.ts +1 -1
  836. package/src/rerank.test.ts +41 -1
  837. package/src/rerank.ts +2 -2
  838. package/src/resolve-auth-token.test.ts +29 -0
  839. package/src/resolve-auth-token.ts +12 -7
  840. package/src/resolve-provider-secret.test.ts +78 -22
  841. package/src/resolve-provider-secret.ts +55 -223
  842. package/src/retrieval-agents.ts +51 -14
  843. package/src/review/index.test.ts +75 -1
  844. package/src/review/index.ts +88 -30
  845. package/src/routing/store.ts +36 -6
  846. package/src/runtime/env.test.ts +73 -0
  847. package/src/runtime/env.ts +7 -11
  848. package/src/schemas.ts +16 -1
  849. package/src/search/abort.ts +18 -0
  850. package/src/search/document-scanner.test.ts +80 -0
  851. package/src/search/document-scanner.ts +51 -9
  852. package/src/search/embed-helper.ts +19 -6
  853. package/src/search/factory.ts +9 -5
  854. package/src/search/lancedb-backend.ts +62 -22
  855. package/src/search/meilisearch-backend.ts +35 -12
  856. package/src/search/orama-backend.test.ts +27 -0
  857. package/src/search/orama-backend.ts +65 -15
  858. package/src/secure-store/cli-handlers.ts +70 -6
  859. package/src/secure-store/cli-renderer.ts +13 -7
  860. package/src/secure-store/secure-fs.ts +11 -5
  861. package/src/secure-store/secure-store.test.ts +70 -0
  862. package/src/semantic-consolidation.test.ts +45 -0
  863. package/src/semantic-consolidation.ts +3 -3
  864. package/src/session-integrity.test.ts +98 -0
  865. package/src/session-integrity.ts +51 -1
  866. package/src/session-observer-state.ts +108 -41
  867. package/src/shared-context/manager.ts +93 -15
  868. package/src/signal.test.ts +14 -0
  869. package/src/signal.ts +8 -1
  870. package/src/source-attribution.test.ts +8 -0
  871. package/src/source-attribution.ts +24 -2
  872. package/src/spaces/index.test.ts +93 -0
  873. package/src/spaces/index.ts +75 -9
  874. package/src/storage.ts +14 -1
  875. package/src/store-contract.test.ts +35 -0
  876. package/src/store-contract.ts +39 -5
  877. package/src/summarizer.ts +24 -18
  878. package/src/summary-snapshot.test.ts +77 -0
  879. package/src/surfaces/dreams.test.ts +73 -0
  880. package/src/surfaces/dreams.ts +53 -19
  881. package/src/sync/index.ts +42 -17
  882. package/src/taxonomy/taxonomy-loader.ts +43 -4
  883. package/src/temporal-supersession.test.ts +67 -0
  884. package/src/temporal-supersession.ts +8 -0
  885. package/src/tmt.test.ts +50 -0
  886. package/src/tmt.ts +35 -11
  887. package/src/tokens.test.ts +18 -0
  888. package/src/tokens.ts +7 -0
  889. package/src/training-export/converter.test.ts +55 -2
  890. package/src/training-export/converter.ts +36 -10
  891. package/src/training-export/registry.test.ts +17 -0
  892. package/src/training-export/registry.ts +19 -1
  893. package/src/transcript.ts +2 -2
  894. package/src/transfer/backup.ts +18 -7
  895. package/src/transfer/capsule-crypto.ts +105 -21
  896. package/src/transfer/capsule-encrypt.test.ts +106 -7
  897. package/src/transfer/capsule-export.ts +23 -14
  898. package/src/transfer/capsule-import.ts +11 -2
  899. package/src/transfer/exclusions.ts +7 -0
  900. package/src/transfer/export-sqlite.ts +14 -13
  901. package/src/transfer/fs-utils.ts +52 -1
  902. package/src/transfer/import-json.ts +12 -7
  903. package/src/transfer/import-md.ts +5 -5
  904. package/src/transfer/import-sqlite.ts +4 -5
  905. package/src/trust-zones.ts +1 -1
  906. package/src/types.ts +25 -0
  907. package/src/utility-telemetry.ts +1 -1
  908. package/src/utils/category-dir.test.ts +15 -0
  909. package/src/utils/category-dir.ts +3 -1
  910. package/src/work/boundary.ts +30 -18
  911. package/src/work/storage.ts +116 -38
  912. package/src/work-product-ledger.ts +1 -1
  913. package/dist/chunk-25MQ7IHJ.js.map +0 -1
  914. package/dist/chunk-2IWUMAES.js.map +0 -1
  915. package/dist/chunk-2NMMFZ5T.js.map +0 -1
  916. package/dist/chunk-2PRLKQAH.js.map +0 -1
  917. package/dist/chunk-326G7DJK.js.map +0 -1
  918. package/dist/chunk-3APJ5EVB.js.map +0 -1
  919. package/dist/chunk-3KW65B36.js.map +0 -1
  920. package/dist/chunk-3QKK7QOS.js.map +0 -1
  921. package/dist/chunk-3SLRNYNG.js.map +0 -1
  922. package/dist/chunk-3VAL7ZL2.js.map +0 -1
  923. package/dist/chunk-3Y4P7RXM.js.map +0 -1
  924. package/dist/chunk-3ZLVGM76.js.map +0 -1
  925. package/dist/chunk-43PJZYGL.js.map +0 -1
  926. package/dist/chunk-47VWKCAF.js.map +0 -1
  927. package/dist/chunk-4KGVTPGD.js.map +0 -1
  928. package/dist/chunk-5375UYTQ.js.map +0 -1
  929. package/dist/chunk-56K5QLHX.js.map +0 -1
  930. package/dist/chunk-575RMLWN.js.map +0 -1
  931. package/dist/chunk-5NPGSAVB.js.map +0 -1
  932. package/dist/chunk-5RGLBDQF.js.map +0 -1
  933. package/dist/chunk-65PG43EQ.js.map +0 -1
  934. package/dist/chunk-66DHUKLO.js.map +0 -1
  935. package/dist/chunk-6LVVDPJ4.js.map +0 -1
  936. package/dist/chunk-76FLAAUC.js.map +0 -1
  937. package/dist/chunk-77H5NU3M.js.map +0 -1
  938. package/dist/chunk-7MNMYOFP.js.map +0 -1
  939. package/dist/chunk-7OZ53EXP.js.map +0 -1
  940. package/dist/chunk-7SEAZFFB.js.map +0 -1
  941. package/dist/chunk-A6KTB5R6.js.map +0 -1
  942. package/dist/chunk-AGZQD76C.js.map +0 -1
  943. package/dist/chunk-APO3DCMU.js.map +0 -1
  944. package/dist/chunk-BVF3AGJP.js.map +0 -1
  945. package/dist/chunk-C5BCH4ZS.js.map +0 -1
  946. package/dist/chunk-C7VW7C3F.js.map +0 -1
  947. package/dist/chunk-CULXMQJH.js.map +0 -1
  948. package/dist/chunk-CYFQJMUV.js.map +0 -1
  949. package/dist/chunk-D654IBA6.js +0 -61
  950. package/dist/chunk-D654IBA6.js.map +0 -1
  951. package/dist/chunk-DGXUHMOV.js.map +0 -1
  952. package/dist/chunk-DINWEURR.js.map +0 -1
  953. package/dist/chunk-DK5LDEQM.js.map +0 -1
  954. package/dist/chunk-EABGC2TL.js.map +0 -1
  955. package/dist/chunk-EHRTFRWW.js.map +0 -1
  956. package/dist/chunk-EJI5XIBB.js.map +0 -1
  957. package/dist/chunk-FAAFWE4G.js.map +0 -1
  958. package/dist/chunk-FAJ7FZYM.js +0 -11
  959. package/dist/chunk-FAJ7FZYM.js.map +0 -1
  960. package/dist/chunk-FDU6HUUL.js +0 -147
  961. package/dist/chunk-FDU6HUUL.js.map +0 -1
  962. package/dist/chunk-FIT6DMX6.js.map +0 -1
  963. package/dist/chunk-FJ43PRLT.js.map +0 -1
  964. package/dist/chunk-FLTNHQK6.js +0 -262
  965. package/dist/chunk-FLTNHQK6.js.map +0 -1
  966. package/dist/chunk-GDFS42HT.js.map +0 -1
  967. package/dist/chunk-H3ME6L6D.js.map +0 -1
  968. package/dist/chunk-HXXBL2KD.js.map +0 -1
  969. package/dist/chunk-ICRIXAP2.js.map +0 -1
  970. package/dist/chunk-IQT3XTKW.js.map +0 -1
  971. package/dist/chunk-JR4ZC3G4.js.map +0 -1
  972. package/dist/chunk-K4FLSOR5.js.map +0 -1
  973. package/dist/chunk-KNKUID7G.js.map +0 -1
  974. package/dist/chunk-KOSORCJG.js.map +0 -1
  975. package/dist/chunk-LIRZNNUP.js.map +0 -1
  976. package/dist/chunk-LLQ2LLWF.js.map +0 -1
  977. package/dist/chunk-LPMVBPA3.js +0 -236
  978. package/dist/chunk-LPMVBPA3.js.map +0 -1
  979. package/dist/chunk-LT3NLYSI.js.map +0 -1
  980. package/dist/chunk-LUDTDZLK.js.map +0 -1
  981. package/dist/chunk-MJFNCJXV.js.map +0 -1
  982. package/dist/chunk-MSWG7JI6.js.map +0 -1
  983. package/dist/chunk-MXC3AP5I.js.map +0 -1
  984. package/dist/chunk-MXFBBHJU.js.map +0 -1
  985. package/dist/chunk-MZH6EHNR.js.map +0 -1
  986. package/dist/chunk-N2D6GXBM.js.map +0 -1
  987. package/dist/chunk-NBNN5GOB.js.map +0 -1
  988. package/dist/chunk-NMZY542O.js.map +0 -1
  989. package/dist/chunk-NZL6GGQE.js.map +0 -1
  990. package/dist/chunk-OZHRDTDX.js.map +0 -1
  991. package/dist/chunk-PZIAX57I.js.map +0 -1
  992. package/dist/chunk-Q7P4WJDP.js.map +0 -1
  993. package/dist/chunk-QA2ZAPBU.js.map +0 -1
  994. package/dist/chunk-QDZ2RLEC.js.map +0 -1
  995. package/dist/chunk-QLLBRHAT.js.map +0 -1
  996. package/dist/chunk-QR3C7BKQ.js.map +0 -1
  997. package/dist/chunk-RHY3HH7P.js.map +0 -1
  998. package/dist/chunk-RK2Y4XOM.js.map +0 -1
  999. package/dist/chunk-RR2PKP3I.js +0 -63
  1000. package/dist/chunk-RR2PKP3I.js.map +0 -1
  1001. package/dist/chunk-RRF5UOBJ.js.map +0 -1
  1002. package/dist/chunk-RXDLTSWT.js.map +0 -1
  1003. package/dist/chunk-RYED3SPJ.js +0 -42
  1004. package/dist/chunk-RYED3SPJ.js.map +0 -1
  1005. package/dist/chunk-S7KDBTWT.js.map +0 -1
  1006. package/dist/chunk-TK4UEOSK.js.map +0 -1
  1007. package/dist/chunk-TMM4S4IJ.js.map +0 -1
  1008. package/dist/chunk-TMQLARTH.js.map +0 -1
  1009. package/dist/chunk-TPB3I2AC.js.map +0 -1
  1010. package/dist/chunk-TPMQ3G6Z.js.map +0 -1
  1011. package/dist/chunk-TPU5L5EY.js.map +0 -1
  1012. package/dist/chunk-TZOLIGIG.js.map +0 -1
  1013. package/dist/chunk-U3WSW6PZ.js.map +0 -1
  1014. package/dist/chunk-U4SCL7B7.js.map +0 -1
  1015. package/dist/chunk-U66YHYC7.js +0 -31
  1016. package/dist/chunk-U66YHYC7.js.map +0 -1
  1017. package/dist/chunk-UWVJF25J.js.map +0 -1
  1018. package/dist/chunk-VBJ7V5SK.js.map +0 -1
  1019. package/dist/chunk-W3LR522O.js.map +0 -1
  1020. package/dist/chunk-W4L6CZKA.js.map +0 -1
  1021. package/dist/chunk-W6AQJ2PY.js.map +0 -1
  1022. package/dist/chunk-WELDCG6C.js.map +0 -1
  1023. package/dist/chunk-WNARATI3.js.map +0 -1
  1024. package/dist/chunk-WPGJYVUH.js.map +0 -1
  1025. package/dist/chunk-WW3QQF4H.js.map +0 -1
  1026. package/dist/chunk-XIG5PDM7.js.map +0 -1
  1027. package/dist/chunk-XKECPATV.js.map +0 -1
  1028. package/dist/chunk-XKLD5OK4.js.map +0 -1
  1029. package/dist/chunk-XSZEP4SF.js.map +0 -1
  1030. package/dist/chunk-XVVIG67A.js.map +0 -1
  1031. package/dist/chunk-XYIK4LF6.js.map +0 -1
  1032. package/dist/chunk-YRMVARQP.js.map +0 -1
  1033. package/dist/chunk-YROHKYBY.js.map +0 -1
  1034. package/dist/chunk-YU5KIWYQ.js.map +0 -1
  1035. package/dist/chunk-ZAVUCJ4H.js.map +0 -1
  1036. package/dist/chunk-ZPKBYX2F.js.map +0 -1
  1037. package/dist/chunk-ZTFCYYEZ.js.map +0 -1
  1038. package/dist/chunk-ZYVPLJ4T.js.map +0 -1
  1039. package/dist/path-MR5JPYOP.js +0 -9
  1040. package/dist/state-store-VZU2IA53.js +0 -16
  1041. package/dist/trace-C5ETWBEF.js.map +0 -1
  1042. /package/dist/{capsule-crypto-5CYAGVC5.js.map → bulk-import/index.js.map} +0 -0
  1043. /package/dist/{contradiction-review-ATP4S6IC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  1044. /package/dist/{capsule-merge-4MGKE7C5.js.map → capsule-merge-T2JRE46P.js.map} +0 -0
  1045. /package/dist/{chunk-SAZS2QZB.js.map → chunk-23UORJ4S.js.map} +0 -0
  1046. /package/dist/{chunk-PK7H5L6Y.js.map → chunk-2NM43EWN.js.map} +0 -0
  1047. /package/dist/{chunk-PYXS46O7.js.map → chunk-3BP57I6J.js.map} +0 -0
  1048. /package/dist/{chunk-FBYESMQ2.js.map → chunk-3C5RPJAX.js.map} +0 -0
  1049. /package/dist/{chunk-U7EJOMFC.js.map → chunk-4Q73JBSM.js.map} +0 -0
  1050. /package/dist/{chunk-N53K2EXC.js.map → chunk-6VF75M3X.js.map} +0 -0
  1051. /package/dist/{chunk-6H2TESSP.js.map → chunk-765K3SAT.js.map} +0 -0
  1052. /package/dist/{chunk-EDTHC6UD.js.map → chunk-77NAFXUD.js.map} +0 -0
  1053. /package/dist/{chunk-MGKYQQYF.js.map → chunk-7Q3RCKAQ.js.map} +0 -0
  1054. /package/dist/{chunk-34DQE4KF.js.map → chunk-CO7ZO4TU.js.map} +0 -0
  1055. /package/dist/{chunk-ZKSK55RC.js.map → chunk-ETUPBUHB.js.map} +0 -0
  1056. /package/dist/{chunk-QRNI5JBH.js.map → chunk-EYIEWJNI.js.map} +0 -0
  1057. /package/dist/{chunk-C6QPK5GG.js.map → chunk-FZZ2QTJI.js.map} +0 -0
  1058. /package/dist/{chunk-3JXBXXM2.js.map → chunk-G4IAEX6D.js.map} +0 -0
  1059. /package/dist/{chunk-2WWLHTZY.js.map → chunk-IC4GELZE.js.map} +0 -0
  1060. /package/dist/{chunk-PCUKNJAZ.js.map → chunk-JKV57BTN.js.map} +0 -0
  1061. /package/dist/{chunk-2KI4QFHU.js.map → chunk-LMDRGRJ2.js.map} +0 -0
  1062. /package/dist/{chunk-MY6TPVXW.js.map → chunk-LMPHTYJC.js.map} +0 -0
  1063. /package/dist/{chunk-5HRY2WRF.js.map → chunk-LZ3VEOU5.js.map} +0 -0
  1064. /package/dist/{chunk-NGAVDO7E.js.map → chunk-OADWQ5CR.js.map} +0 -0
  1065. /package/dist/{chunk-DOM4GKSW.js.map → chunk-OZKVVUJB.js.map} +0 -0
  1066. /package/dist/{chunk-MT4HVDUZ.js.map → chunk-PM3QHTFT.js.map} +0 -0
  1067. /package/dist/{chunk-ZK7I7JYV.js.map → chunk-R3PS27B4.js.map} +0 -0
  1068. /package/dist/{chunk-SKE7JYKA.js.map → chunk-SFXKHM7P.js.map} +0 -0
  1069. /package/dist/{chunk-HMDCOMYU.js.map → chunk-SKGV326D.js.map} +0 -0
  1070. /package/dist/{chunk-5UM2VJ6D.js.map → chunk-UEY3VB6W.js.map} +0 -0
  1071. /package/dist/{chunk-GIF42EW3.js.map → chunk-UP6MOYCB.js.map} +0 -0
  1072. /package/dist/{chunk-MRILGULB.js.map → chunk-V2RCP53Q.js.map} +0 -0
  1073. /package/dist/{chunk-FSFEQI74.js.map → chunk-W7L6HXUC.js.map} +0 -0
  1074. /package/dist/{chunk-3IQ2TR4N.js.map → chunk-WLEB7WCG.js.map} +0 -0
  1075. /package/dist/{chunk-GL6I6MEQ.js.map → chunk-WSGF57U2.js.map} +0 -0
  1076. /package/dist/{chunk-JA3AK3PT.js.map → chunk-XNLXAWHX.js.map} +0 -0
  1077. /package/dist/{chunk-SIC6U3GZ.js.map → chunk-YHV3KRKS.js.map} +0 -0
  1078. /package/dist/{chunk-VLXA6PI2.js.map → chunk-YQMZ7IH2.js.map} +0 -0
  1079. /package/dist/{contradiction-scan-5A4IDZV5.js.map → contradiction-review-6V2LXXK6.js.map} +0 -0
  1080. /package/dist/{migrate-from-identity-anchor-G27MCD6A.js.map → contradiction-scan-GIRVC4C7.js.map} +0 -0
  1081. /package/dist/{first-start-migration-4MHQEOSD.js.map → first-start-migration-CKTCTCQI.js.map} +0 -0
  1082. /package/dist/{graph-edge-decay-5DI5GUNL.js.map → graph-edge-decay-MUP5J7CC.js.map} +0 -0
  1083. /package/dist/{path-MR5JPYOP.js.map → importers/index.js.map} +0 -0
  1084. /package/dist/{peers-HCVGHMAE.js.map → migrate-from-identity-anchor-EB4XI4Q2.js.map} +0 -0
  1085. /package/dist/{resolution-B7FNQSSP.js.map → path-X2K5XCHL.js.map} +0 -0
  1086. /package/dist/{state-store-VZU2IA53.js.map → peers/index.js.map} +0 -0
  1087. /package/dist/{tier-stats-62ZVDFKS.js.map → tier-stats-SKML2OSF.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/message-parts/index.ts"],"sourcesContent":["export type LcmMessagePartKind =\n | \"text\"\n | \"tool_call\"\n | \"tool_result\"\n | \"patch\"\n | \"file_read\"\n | \"file_write\"\n | \"step_start\"\n | \"step_finish\"\n | \"snapshot\"\n | \"retry\";\n\nexport const LCM_MESSAGE_PART_KINDS: readonly LcmMessagePartKind[] = [\n \"text\",\n \"tool_call\",\n \"tool_result\",\n \"patch\",\n \"file_read\",\n \"file_write\",\n \"step_start\",\n \"step_finish\",\n \"snapshot\",\n \"retry\",\n] as const;\n\nexport type MessagePartSourceFormat =\n | \"openai\"\n | \"anthropic\"\n | \"openclaw\"\n | \"pi\"\n | \"lossless-claw\"\n | \"remnic\";\n\nexport interface LcmMessagePartInput {\n ordinal?: number | null;\n kind: LcmMessagePartKind;\n payload: Record<string, unknown>;\n toolName?: string | null;\n tool_name?: string | null;\n filePath?: string | null;\n file_path?: string | null;\n createdAt?: string | null;\n created_at?: string | null;\n}\n\nexport interface LcmMessagePartRow extends LcmMessagePartInput {\n id: number;\n messageId: number;\n ordinal: number;\n payloadJson: string;\n createdAt: string;\n}\n\nexport interface ParseMessagePartsOptions {\n sourceFormat?: MessagePartSourceFormat;\n renderedContent?: string;\n allowRenderedFallback?: boolean;\n}\n\nconst SECRET_KEY_RE = /(api[_-]?key|authorization|bearer|credential|password|secret|token)/i;\nconst MAX_PAYLOAD_STRING = 8_000;\nconst MAX_FILE_SCAN_CHARS = 20_000;\n\nexport function isLcmMessagePartKind(value: unknown): value is LcmMessagePartKind {\n return (\n typeof value === \"string\" &&\n (LCM_MESSAGE_PART_KINDS as readonly string[]).includes(value)\n );\n}\n\nexport function parseMessageParts(\n input: unknown,\n options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const explicit = normalizeExplicitParts(input);\n if (explicit.length > 0) return explicit;\n\n const format = options.sourceFormat ?? inferSourceFormat(input);\n switch (format) {\n case \"openai\":\n return withRenderedFallback(parseOpenAiMessageParts(input, options), options);\n case \"anthropic\":\n return withRenderedFallback(parseAnthropicMessageParts(input, options), options);\n case \"openclaw\":\n return withRenderedFallback(parseOpenClawMessageParts(input, options), options);\n case \"pi\":\n return withRenderedFallback(parsePiMessageParts(input, options), options);\n case \"lossless-claw\":\n case \"remnic\":\n return withRenderedFallback(normalizeExplicitParts(input), options);\n default:\n return renderedFallbackParts(options);\n }\n}\n\nexport function normalizeExplicitParts(input: unknown): LcmMessagePartInput[] {\n const rawParts = pickArray(input, \"parts\") ?? pickArray(input, \"message_parts\");\n if (!rawParts) return [];\n\n const parts: LcmMessagePartInput[] = [];\n rawParts.forEach((raw, index) => {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return;\n const obj = raw as Record<string, unknown>;\n const kind = normalizeKind(obj.kind ?? obj.type);\n if (!kind) return;\n\n const payload =\n obj.payload && typeof obj.payload === \"object\" && !Array.isArray(obj.payload)\n ? (obj.payload as Record<string, unknown>)\n : { value: sanitizePayload(obj) };\n const toolName = asNonEmptyString(obj.toolName ?? obj.tool_name ?? obj.name);\n const filePath = asNonEmptyString(obj.filePath ?? obj.file_path ?? obj.path);\n const ordinal =\n typeof obj.ordinal === \"number\" && Number.isInteger(obj.ordinal)\n ? Math.max(0, obj.ordinal)\n : index;\n\n parts.push({\n ordinal,\n kind,\n payload: sanitizePayload(payload) as Record<string, unknown>,\n toolName,\n filePath,\n createdAt: asNonEmptyString(obj.createdAt ?? obj.created_at),\n });\n });\n return parts;\n}\n\nexport function parseOpenAiMessageParts(\n input: unknown,\n _options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const items = gatherOpenAiItems(input);\n const parts: LcmMessagePartInput[] = [];\n for (const item of items) {\n const type = asNonEmptyString(item.type) ?? asNonEmptyString(item.kind);\n if (!type) continue;\n if (isOpenAiContentBlock(item)) {\n const text = asNonEmptyString(item.text ?? item.content);\n if (text) parts.push(makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }));\n continue;\n }\n if (type === \"message\") {\n for (const block of gatherContentBlocks(item.content)) {\n const text = asNonEmptyString(block.text ?? block.content);\n if (text) parts.push(makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }));\n }\n continue;\n }\n if (type === \"function_call\") {\n const toolName = asNonEmptyString(item.name ?? item.tool_name);\n const callId = asNonEmptyString(item.call_id ?? item.callId);\n const itemId = asNonEmptyString(item.id);\n const payload = {\n id: callId ?? itemId,\n ...(callId ? { call_id: callId } : {}),\n ...(itemId && itemId !== callId ? { response_item_id: itemId } : {}),\n name: toolName,\n arguments: parseMaybeJson(item.arguments),\n };\n parts.push(classifyToolPart(toolName, payload));\n continue;\n }\n if (type === \"function_call_output\") {\n const output = asNonEmptyString(item.output) ?? JSON.stringify(sanitizePayload(item.output ?? item));\n const callId = asNonEmptyString(item.call_id ?? item.callId);\n const itemId = asNonEmptyString(item.id);\n parts.push(makePart(\"tool_result\", {\n id: callId ?? itemId,\n ...(callId ? { call_id: callId } : {}),\n ...(itemId && itemId !== callId ? { response_item_id: itemId } : {}),\n output,\n }, {\n filePath: firstFilePath(output),\n }));\n continue;\n }\n if (type === \"reasoning\") {\n parts.push(makePart(\"step_start\", { type, summary: sanitizePayload(item.summary ?? item) }));\n continue;\n }\n if (type === \"retry\") {\n parts.push(makePart(\"retry\", { type, item: sanitizePayload(item) }));\n }\n }\n return withOrdinals(parts);\n}\n\nexport function parseAnthropicMessageParts(\n input: unknown,\n _options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const blocks = gatherContentBlocks(\n Array.isArray(input) ? input : input && typeof input === \"object\" ? (input as Record<string, unknown>).content : input,\n );\n const parts: LcmMessagePartInput[] = [];\n for (const block of blocks) {\n const type = asNonEmptyString(block.type ?? block.kind);\n if (type === \"text\") {\n const text = asNonEmptyString(block.text);\n if (text) parts.push(makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }));\n continue;\n }\n if (type === \"tool_use\") {\n const toolName = asNonEmptyString(block.name);\n parts.push(classifyToolPart(toolName, {\n id: block.id,\n name: toolName,\n input: sanitizePayload(block.input),\n }));\n continue;\n }\n if (type === \"tool_result\") {\n const content = block.content;\n const rendered = renderUnknownContent(content);\n parts.push(makePart(\"tool_result\", {\n id: block.tool_use_id,\n content: sanitizePayload(content),\n ...(typeof block.is_error === \"boolean\" ? { is_error: block.is_error } : {}),\n ...(typeof block.isError === \"boolean\" ? { isError: block.isError } : {}),\n }, {\n filePath: firstFilePath(rendered),\n }));\n continue;\n }\n if (type === \"thinking\") {\n parts.push(makePart(\"step_start\", {\n type,\n thinking: truncateString(asNonEmptyString(block.thinking) ?? \"\"),\n signature: asNonEmptyString(block.signature),\n }));\n continue;\n }\n if (type === \"redacted_thinking\") {\n parts.push(makePart(\"step_finish\", { type }));\n }\n }\n return withOrdinals(parts);\n}\n\nexport function parseOpenClawMessageParts(\n input: unknown,\n options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const explicit = normalizeExplicitParts(input);\n if (explicit.length > 0) return explicit;\n if (!input || typeof input !== \"object\") return [];\n const obj = input as Record<string, unknown>;\n\n const content = obj.content;\n if (Array.isArray(content)) {\n const mixedParts = parseOpenClawContentArray(content, options);\n if (mixedParts.length > 0) return mixedParts;\n const hasAnthropicBlocks = content.some(isAnthropicContentBlock);\n if (hasAnthropicBlocks) return parseAnthropicMessageParts({ content }, options);\n const piParts = parsePiMessageParts(input, { ...options, allowRenderedFallback: false });\n if (piParts.length > 0) return piParts;\n }\n\n const toolName = asNonEmptyString(obj.toolName ?? obj.tool_name ?? obj.name);\n if (toolName) {\n return withOrdinals([\n classifyToolPart(toolName, {\n name: toolName,\n input: sanitizePayload(obj.input ?? obj.arguments ?? obj.params),\n output: sanitizePayload(obj.output ?? obj.result),\n }),\n ]);\n }\n\n const rendered = options.allowRenderedFallback === false\n ? null\n : options.renderedContent ?? asNonEmptyString(obj.content);\n return rendered ? withOrdinals(partsFromRenderedText(rendered)) : [];\n}\n\nexport function parsePiMessageParts(\n input: unknown,\n options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const explicit = normalizeExplicitParts(input);\n if (explicit.length > 0) return explicit;\n if (!isRecord(input)) return renderedFallbackParts(options);\n\n if (input.role === \"bashExecution\") {\n const command = asNonEmptyString(input.command);\n const output = asNonEmptyString(input.output);\n const rendered = [command ? `Ran ${command}` : null, output].filter(Boolean).join(\"\\n\");\n return withOrdinals([\n makePart(\"tool_result\", {\n role: \"bashExecution\",\n command,\n output,\n exitCode: input.exitCode ?? input.exit_code,\n }, {\n toolName: \"bashExecution\",\n filePath: firstFilePathFromObject(input) ?? firstFilePath(rendered),\n }),\n ]);\n }\n\n const topLevelType = asNonEmptyString(input.type ?? input.kind ?? input.role);\n if (topLevelType === \"toolResult\" || topLevelType === \"tool_result\") {\n const toolName = asNonEmptyString(input.name ?? input.toolName ?? input.tool_name);\n const output = input.output ?? input.result ?? input.content;\n const rendered = renderUnknownContent(output ?? input);\n return withOrdinals([\n makePart(\"tool_result\", {\n id: input.id ?? input.toolCallId ?? input.tool_call_id,\n name: toolName,\n output: sanitizePayload(output),\n ...(typeof input.isError === \"boolean\" ? { isError: input.isError } : {}),\n ...(typeof input.is_error === \"boolean\" ? { is_error: input.is_error } : {}),\n }, {\n toolName,\n filePath: firstFilePathFromObject(input) ?? firstFilePath(rendered),\n }),\n ]);\n }\n\n const content = input.content;\n const blocks = Array.isArray(content) ? content.filter(isRecord) : [];\n const parts: LcmMessagePartInput[] = [];\n\n if (typeof content === \"string\") {\n parts.push(makePart(\"text\", { text: content }, { filePath: firstFilePath(content) }));\n }\n\n blocks.forEach((block, ordinal) => {\n const type = asNonEmptyString(block.type ?? block.kind);\n if (type === \"text\") {\n const text = asNonEmptyString(block.text ?? block.content);\n if (text) parts.push({ ...makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }), ordinal });\n return;\n }\n if (type === \"toolCall\" || type === \"tool_call\") {\n const toolName = asNonEmptyString(block.name ?? block.toolName ?? block.tool_name);\n const payload = {\n id: block.id,\n name: toolName,\n arguments: sanitizePayload(block.arguments ?? block.args ?? block.input ?? block.params),\n };\n parts.push({ ...classifyToolPart(toolName, payload), ordinal });\n return;\n }\n if (type === \"toolResult\" || type === \"tool_result\") {\n const rendered = renderUnknownContent(block.output ?? block.result ?? block.content ?? block);\n parts.push({\n ...makePart(\"tool_result\", {\n id: block.id ?? block.toolCallId ?? block.tool_call_id,\n name: asNonEmptyString(block.name ?? block.toolName ?? block.tool_name),\n output: sanitizePayload(block.output ?? block.result ?? block.content),\n ...(typeof block.isError === \"boolean\" ? { isError: block.isError } : {}),\n ...(typeof block.is_error === \"boolean\" ? { is_error: block.is_error } : {}),\n }, {\n toolName: asNonEmptyString(block.name ?? block.toolName ?? block.tool_name),\n filePath: firstFilePathFromObject(block) ?? firstFilePath(rendered),\n }),\n ordinal,\n });\n }\n });\n\n const toolName = asNonEmptyString(input.toolName ?? input.tool_name ?? input.name);\n if (parts.length === 0 && toolName) {\n parts.push(classifyToolPart(toolName, {\n name: toolName,\n arguments: sanitizePayload(input.arguments ?? input.args ?? input.input ?? input.params),\n output: sanitizePayload(input.output ?? input.result),\n }));\n }\n\n return withRenderedFallback(withOrdinals(parts), options);\n}\n\nexport function partsFromRenderedText(text: string): LcmMessagePartInput[] {\n if (text.includes(\"*** Begin Patch\")) {\n const paths = extractFilePaths(text);\n const patchPaths = extractPatchPaths(text);\n return withOrdinals((patchPaths.length > 0 ? patchPaths : paths).map((filePath) =>\n makePart(\"patch\", { text: truncateString(text) }, { filePath })\n ));\n }\n const paths = extractFilePaths(text);\n if (paths.length === 0) return [];\n return withOrdinals(paths.map((filePath) =>\n makePart(\"file_read\", { text: truncateString(text) }, { filePath })\n ));\n}\n\nfunction inferSourceFormat(input: unknown): MessagePartSourceFormat | undefined {\n if (input && typeof input === \"object\") {\n const obj = input as Record<string, unknown>;\n const explicit = asNonEmptyString(obj.sourceFormat ?? obj.source_format);\n if (explicit === \"openai\" || explicit === \"anthropic\" || explicit === \"openclaw\" || explicit === \"pi\" || explicit === \"lossless-claw\" || explicit === \"remnic\") {\n return explicit;\n }\n if (Array.isArray(obj.output)) return \"openai\";\n if (isOpenAiResponseItem(obj)) return \"openai\";\n if (\n Array.isArray(obj.content) &&\n obj.content.some(isOpenAiContentBlock) &&\n obj.content.some(isPiToolContentBlock)\n ) {\n return \"openclaw\";\n }\n if (Array.isArray(obj.content) && obj.content.some(isOpenAiContentBlock)) return \"openai\";\n if (isAnthropicMessageObject(obj)) return \"anthropic\";\n if (isPiMessageObject(obj)) return \"pi\";\n if (Array.isArray(obj.content)) return \"anthropic\";\n }\n if (Array.isArray(input)) {\n return input.some((item) =>\n isRecord(item) && (isOpenAiResponseItem(item) || isOpenAiContentBlock(item))\n )\n ? \"openai\"\n : \"anthropic\";\n }\n return undefined;\n}\n\nfunction isPiMessageObject(obj: Record<string, unknown>): boolean {\n if (obj.role === \"bashExecution\") return true;\n if (obj.role === \"toolResult\" || obj.role === \"tool_result\") return true;\n const type = asNonEmptyString(obj.type ?? obj.kind);\n if (type === \"toolCall\" || type === \"tool_call\" || type === \"toolResult\" || type === \"tool_result\") return true;\n if (!Array.isArray(obj.content)) return false;\n return obj.content.some(isPiToolContentBlock);\n}\n\nfunction parseOpenClawContentArray(\n content: unknown[],\n options: ParseMessagePartsOptions,\n): LcmMessagePartInput[] {\n const parts: LcmMessagePartInput[] = [];\n for (const block of content) {\n if (!isRecord(block)) continue;\n const blockParts = isOpenAiContentBlock(block) || isOpenAiResponseItem(block)\n ? parseOpenAiMessageParts([block], options)\n : isAnthropicContentBlock(block)\n ? parseAnthropicMessageParts({ content: [block] }, options)\n : isPiOpenClawContentBlock(block)\n ? parsePiMessageParts({ content: [block] }, { ...options, allowRenderedFallback: false })\n : [];\n parts.push(...blockParts.map(({ ordinal: _ordinal, ...part }) => part));\n }\n return withRenderedFallback(withOrdinals(parts), { ...options, allowRenderedFallback: false });\n}\n\nfunction isPiOpenClawContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const blockType = asNonEmptyString(value.type ?? value.kind);\n return blockType === \"text\" || isPiToolBlockType(blockType);\n}\n\nfunction isPiToolContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const blockType = asNonEmptyString(value.type ?? value.kind);\n return isPiToolBlockType(blockType);\n}\n\nfunction isPiToolBlockType(blockType: string | null): boolean {\n return blockType === \"toolCall\" || blockType === \"tool_call\" || blockType === \"toolResult\" || blockType === \"tool_result\";\n}\n\nfunction isAnthropicMessageObject(obj: Record<string, unknown>): boolean {\n if (isAnthropicContentBlock(obj)) return true;\n if (!Array.isArray(obj.content)) return false;\n return obj.content.some(isAnthropicContentBlock);\n}\n\nfunction isAnthropicContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const type = asNonEmptyString(value.type ?? value.kind);\n if (type === \"tool_use\" || type === \"thinking\" || type === \"redacted_thinking\") return true;\n return type === \"tool_result\" && value.tool_use_id !== undefined;\n}\n\nfunction isOpenAiResponseItem(obj: Record<string, unknown>): boolean {\n const type = asNonEmptyString(obj.type ?? obj.kind);\n return (\n type === \"message\" ||\n type === \"function_call\" ||\n type === \"function_call_output\" ||\n type === \"reasoning\" ||\n type === \"retry\"\n );\n}\n\nfunction isOpenAiContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const type = asNonEmptyString(value.type);\n return (\n type === \"input_text\" ||\n type === \"output_text\" ||\n type === \"input_image\" ||\n type === \"input_file\" ||\n type === \"refusal\"\n );\n}\n\nfunction gatherOpenAiItems(input: unknown): Record<string, unknown>[] {\n if (Array.isArray(input)) return input.filter(isRecord);\n if (!isRecord(input)) return [];\n if (Array.isArray(input.output)) return input.output.filter(isRecord);\n if (Array.isArray(input.items)) return input.items.filter(isRecord);\n if (!isOpenAiResponseItem(input) && Array.isArray(input.content) && input.content.some(isOpenAiContentBlock)) {\n return input.content.filter(isRecord);\n }\n return [input];\n}\n\nfunction gatherContentBlocks(input: unknown): Record<string, unknown>[] {\n if (Array.isArray(input)) return input.filter(isRecord);\n if (typeof input === \"string\") return [{ type: \"text\", text: input }];\n if (isRecord(input)) return [input];\n return [];\n}\n\nfunction classifyToolPart(\n toolName: string | null | undefined,\n payload: Record<string, unknown>,\n): LcmMessagePartInput {\n const normalized = (toolName ?? \"\").toLowerCase();\n const rendered = renderUnknownContent(payload);\n const filePath =\n firstFilePathFromObject(payload) ?? firstFilePath(rendered) ?? null;\n\n if (normalized.includes(\"apply_patch\") || rendered.includes(\"*** Begin Patch\")) {\n return makePart(\"patch\", payload, { toolName, filePath: filePath ?? extractPatchPaths(rendered)[0] ?? null });\n }\n if (/(write|edit|multiedit|create|save)/i.test(normalized)) {\n return makePart(\"file_write\", payload, { toolName, filePath });\n }\n if (/(read|grep|glob|search|list|ls)/i.test(normalized)) {\n return makePart(\"file_read\", payload, { toolName, filePath });\n }\n return makePart(\"tool_call\", payload, { toolName, filePath });\n}\n\nfunction makePart(\n kind: LcmMessagePartKind,\n payload: Record<string, unknown>,\n options: { toolName?: string | null; filePath?: string | null } = {},\n): LcmMessagePartInput {\n return {\n kind,\n payload: sanitizePayload(payload) as Record<string, unknown>,\n toolName: options.toolName ?? null,\n filePath: options.filePath ?? null,\n };\n}\n\nfunction withOrdinals(parts: LcmMessagePartInput[]): LcmMessagePartInput[] {\n return parts.map((part, ordinal) => ({ ...part, ordinal: part.ordinal ?? ordinal }));\n}\n\nfunction withRenderedFallback(\n parts: LcmMessagePartInput[],\n options: ParseMessagePartsOptions,\n): LcmMessagePartInput[] {\n return parts.length > 0 ? parts : renderedFallbackParts(options);\n}\n\nfunction renderedFallbackParts(options: ParseMessagePartsOptions): LcmMessagePartInput[] {\n if (options.allowRenderedFallback === false) {\n return [];\n }\n const rendered = asNonEmptyString(options.renderedContent);\n return rendered ? partsFromRenderedText(rendered) : [];\n}\n\nfunction normalizeKind(value: unknown): LcmMessagePartKind | null {\n if (isLcmMessagePartKind(value)) return value;\n if (value === \"tool_use\" || value === \"function_call\") return \"tool_call\";\n if (value === \"function_call_output\") return \"tool_result\";\n if (value === \"thinking\" || value === \"reasoning\") return \"step_start\";\n return null;\n}\n\nfunction pickArray(input: unknown, key: string): unknown[] | null {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return null;\n const value = (input as Record<string, unknown>)[key];\n return Array.isArray(value) ? value : null;\n}\n\nfunction asNonEmptyString(value: unknown): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseMaybeJson(value: unknown): unknown {\n if (typeof value !== \"string\") return sanitizePayload(value);\n try {\n return sanitizePayload(JSON.parse(value));\n } catch {\n return truncateString(value);\n }\n}\n\nfunction sanitizePayload(value: unknown, depth = 0): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"string\") return truncateString(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (Array.isArray(value)) {\n if (depth >= 4) return \"[truncated]\";\n return value.slice(0, 100).map((item) => sanitizePayload(item, depth + 1));\n }\n if (typeof value === \"object\") {\n if (depth >= 4) return \"[truncated]\";\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n out[key] = SECRET_KEY_RE.test(key) ? \"[redacted]\" : sanitizePayload(child, depth + 1);\n }\n return out;\n }\n return String(value);\n}\n\nfunction truncateString(value: string): string {\n return value.length > MAX_PAYLOAD_STRING\n ? `${value.slice(0, MAX_PAYLOAD_STRING)}...[truncated]`\n : value;\n}\n\nfunction renderUnknownContent(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n}\n\nfunction firstFilePathFromObject(value: unknown): string | null {\n if (!isRecord(value)) return null;\n const keys = [\"file_path\", \"filePath\", \"path\", \"filename\", \"cwd\"];\n for (const key of keys) {\n const candidate = asNonEmptyString(value[key]);\n if (candidate) return candidate;\n }\n for (const child of Object.values(value)) {\n if (typeof child === \"string\") {\n const fromText = extractPatchPaths(child)[0] ?? firstFilePath(child);\n if (fromText) return fromText;\n }\n if (isRecord(child)) {\n const nested = firstFilePathFromObject(child);\n if (nested) return nested;\n }\n }\n return null;\n}\n\nfunction firstFilePath(text: string): string | null {\n return extractFilePaths(text)[0] ?? null;\n}\n\nfunction extractFilePaths(text: string): string[] {\n const out = new Set<string>();\n let token = \"\";\n const scanLength = Math.min(text.length, MAX_FILE_SCAN_CHARS);\n for (let index = 0; index <= scanLength; index += 1) {\n const char = index < scanLength ? text[index]! : \" \";\n if (isFilePathTokenSeparator(char)) {\n addFilePathCandidate(out, token);\n token = \"\";\n continue;\n }\n token += char;\n if (token.length > 512) {\n addFilePathCandidate(out, token);\n token = \"\";\n }\n }\n return [...out].slice(0, 20);\n}\n\nfunction isFilePathTokenSeparator(char: string): boolean {\n return (\n char === \" \" ||\n char === \"\\n\" ||\n char === \"\\r\" ||\n char === \"\\t\" ||\n char === \"\\\"\" ||\n char === \"'\" ||\n char === \"`\" ||\n char === \"(\" ||\n char === \")\" ||\n char === \"[\" ||\n char === \"]\" ||\n char === \"{\" ||\n char === \"}\" ||\n char === \"<\" ||\n char === \">\" ||\n char === \",\"\n );\n}\n\nfunction addFilePathCandidate(out: Set<string>, raw: string): void {\n const candidate = trimFilePathPunctuation(raw);\n if (candidate.length === 0 || candidate.includes(\"://\")) return;\n if (isLikelyFilePath(candidate)) out.add(candidate);\n}\n\nfunction trimFilePathPunctuation(raw: string): string {\n let start = 0;\n let end = raw.length;\n while (start < end && isLeadingFilePathPunctuation(raw[start]!)) start += 1;\n while (end > start && isTrailingFilePathPunctuation(raw[end - 1]!)) end -= 1;\n return raw.slice(start, end);\n}\n\nfunction isLeadingFilePathPunctuation(char: string): boolean {\n return (\n char === \":\" ||\n char === \";\" ||\n char === \"!\" ||\n char === \"?\" ||\n char === \"|\" ||\n char === \"*\" ||\n char === \"=\"\n );\n}\n\nfunction isTrailingFilePathPunctuation(char: string): boolean {\n return (\n char === \".\" ||\n char === \":\" ||\n char === \";\" ||\n char === \"!\" ||\n char === \"?\" ||\n char === \"|\" ||\n char === \"*\" ||\n char === \"=\"\n );\n}\n\nfunction isLikelyFilePath(value: string): boolean {\n if (value.startsWith(\"/\") || value.startsWith(\"./\") || value.startsWith(\"../\") || value.startsWith(\"~/\")) {\n return hasValidFileExtension(value);\n }\n if (value.includes(\"/\")) return hasValidFileExtension(value);\n return hasValidFileExtension(value);\n}\n\nfunction hasValidFileExtension(value: string): boolean {\n const lastSlash = value.lastIndexOf(\"/\");\n const basename = value.slice(lastSlash + 1);\n if (isKnownExtensionlessRepositoryFile(basename)) return true;\n if (isKnownBareDotfile(basename)) return true;\n if (isBasenameDotfile(basename)) return isPathLikeFilePath(value);\n const dot = basename.lastIndexOf(\".\");\n if (dot <= 0 || dot === basename.length - 1) return false;\n const ext = basename.slice(dot + 1);\n if (ext.length < 1 || ext.length > 12) return false;\n for (const char of ext) {\n if (!isFileExtensionChar(char)) return false;\n }\n return true;\n}\n\nfunction isKnownExtensionlessRepositoryFile(basename: string): boolean {\n return /^(Dockerfile|Containerfile|Makefile|GNUmakefile|LICENSE|NOTICE|README|CHANGELOG|Procfile)$/.test(basename);\n}\n\nfunction isKnownBareDotfile(basename: string): boolean {\n return /^(\\.env|\\.gitignore|\\.gitattributes|\\.npmrc|\\.yarnrc|\\.editorconfig|\\.prettierrc|\\.eslintrc)$/.test(basename);\n}\n\nfunction isPathLikeFilePath(value: string): boolean {\n return value.startsWith(\"/\") || value.startsWith(\"./\") || value.startsWith(\"../\") || value.startsWith(\"~/\") || value.includes(\"/\");\n}\n\nfunction isBasenameDotfile(basename: string): boolean {\n return /^\\.[A-Za-z0-9][A-Za-z0-9._+-]*$/.test(basename);\n}\n\nfunction isFileExtensionChar(char: string): boolean {\n const code = char.charCodeAt(0);\n return (\n (code >= 48 && code <= 57) ||\n (code >= 65 && code <= 90) ||\n (code >= 97 && code <= 122) ||\n char === \"_\" ||\n char === \"+\" ||\n char === \"-\"\n );\n}\n\nfunction extractPatchPaths(text: string): string[] {\n const out = new Set<string>();\n for (const line of text.split(/\\r?\\n/)) {\n const match = line.match(/^\\*\\*\\* (?:Add|Update|Delete) File: (.+)$/);\n if (match?.[1]) out.add(match[1].trim());\n const move = line.match(/^\\*\\*\\* Move to: (.+)$/);\n if (move?.[1]) out.add(move[1].trim());\n }\n return [...out].slice(0, 20);\n}\n"],"mappings":"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","names":["toolName","paths"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/memory-projection-store.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport type {\n MemoryGovernanceAppliedAction,\n MemoryGovernanceMetrics,\n MemoryGovernanceReviewQueueEntry,\n MemoryGovernanceSummary,\n} from \"./maintenance/memory-governance.js\";\nimport type {\n MemoryCategory,\n MemoryLifecycleEvent,\n MemoryProjectionCurrentState,\n MemoryStatus,\n} from \"./types.js\";\nimport {\n openBetterSqlite3,\n type BetterSqlite3Database,\n} from \"./runtime/better-sqlite.js\";\n\nexport const MEMORY_PROJECTION_SCHEMA_VERSION = 2;\n\nexport interface ProjectedMemoryBrowseOptions {\n query?: string;\n status?: string;\n category?: string;\n sort?: \"updated_desc\" | \"updated_asc\" | \"created_desc\" | \"created_asc\";\n limit: number;\n offset: number;\n}\n\nexport interface ProjectedMemoryBrowseRow {\n id: string;\n path: string;\n category: MemoryCategory;\n status: MemoryStatus;\n created?: string;\n updated?: string;\n tags: string[];\n entityRef?: string;\n preview: string;\n}\n\nexport interface ProjectedMemoryBrowsePage {\n total: number;\n memories: ProjectedMemoryBrowseRow[];\n}\n\nexport interface ProjectedEntityMentionRow {\n memoryId: string;\n entityRef: string;\n mentionSource: string;\n created: string;\n updated: string;\n}\n\nexport interface ProjectedNativeKnowledgeChunkRow {\n chunkId: string;\n sourcePath: string;\n title: string;\n sourceKind: string;\n startLine: number;\n endLine: number;\n derivedDate?: string;\n sessionKey?: string;\n workflowKey?: string;\n author?: string;\n agent?: string;\n namespace?: string;\n privacyClass?: string;\n sourceHash?: string;\n preview: string;\n}\n\nexport interface MemoryProjectionGovernanceReviewQueueRow {\n runId: string;\n entryId: string;\n memoryId: string;\n path: string;\n reasonCode: MemoryGovernanceReviewQueueEntry[\"reasonCode\"];\n severity: MemoryGovernanceReviewQueueEntry[\"severity\"];\n suggestedAction: MemoryGovernanceReviewQueueEntry[\"suggestedAction\"];\n suggestedStatus?: MemoryGovernanceReviewQueueEntry[\"suggestedStatus\"];\n relatedMemoryIds: string[];\n}\n\nexport interface MemoryProjectionGovernanceAppliedActionRow {\n runId: string;\n rowKey: string;\n action: MemoryGovernanceAppliedAction[\"action\"];\n memoryId: string;\n reasonCode: MemoryGovernanceAppliedAction[\"reasonCode\"];\n beforeStatus: MemoryGovernanceAppliedAction[\"beforeStatus\"];\n afterStatus?: MemoryGovernanceAppliedAction[\"afterStatus\"];\n originalPath: string;\n currentPath: string;\n}\n\nexport interface ProjectedReviewQueueSnapshot {\n found: boolean;\n runId?: string;\n summary?: MemoryGovernanceSummary;\n metrics?: MemoryGovernanceMetrics;\n reviewQueue?: MemoryGovernanceReviewQueueEntry[];\n appliedActions?: MemoryGovernanceAppliedAction[];\n report?: string;\n}\n\nexport function getMemoryProjectionPath(memoryDir: string): string {\n return path.join(memoryDir, \"state\", \"memory-projection.sqlite\");\n}\n\nfunction listTableColumns(db: BetterSqlite3Database, tableName: string): Set<string> {\n try {\n const rows = db.prepare(`PRAGMA table_info(${tableName})`).all() as Array<{ name?: unknown }>;\n return new Set(rows.map((row) => row.name).filter((name): name is string => typeof name === \"string\"));\n } catch {\n return new Set<string>();\n }\n}\n\nfunction migrateMemoryCurrentTable(db: BetterSqlite3Database): void {\n const columns = listTableColumns(db, \"memory_current\");\n if (columns.size === 0) return;\n\n if (!columns.has(\"tags_json\")) {\n db.exec(`ALTER TABLE memory_current ADD COLUMN tags_json TEXT NOT NULL DEFAULT '[]'`);\n }\n if (!columns.has(\"preview_text\")) {\n db.exec(`ALTER TABLE memory_current ADD COLUMN preview_text TEXT NOT NULL DEFAULT ''`);\n }\n}\n\nfunction memoryCurrentRequiresMigration(db: BetterSqlite3Database): boolean {\n const columns = listTableColumns(db, \"memory_current\");\n return columns.size > 0 && (!columns.has(\"tags_json\") || !columns.has(\"preview_text\"));\n}\n\nfunction migrateProjectionSchemaIfNeeded(memoryDir: string): void {\n const dbPath = getMemoryProjectionPath(memoryDir);\n try {\n const db = openBetterSqlite3(dbPath, { fileMustExist: true });\n try {\n if (!memoryCurrentRequiresMigration(db)) return;\n initializeMemoryProjectionDb(db);\n } finally {\n db.close();\n }\n } catch {\n // Fail open on migration attempts so readonly consumers can still use legacy rows.\n }\n}\n\nexport function memoryCurrentSelectExpressions(db: BetterSqlite3Database): {\n tagsJson: string;\n previewText: string;\n} {\n const columns = listTableColumns(db, \"memory_current\");\n return {\n tagsJson: columns.has(\"tags_json\") ? \"tags_json\" : `'[]' AS tags_json`,\n previewText: columns.has(\"preview_text\") ? \"preview_text\" : `'' AS preview_text`,\n };\n}\n\nexport function initializeMemoryProjectionDb(db: BetterSqlite3Database): void {\n db.exec(`\n CREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n\n CREATE TABLE IF NOT EXISTS memory_current (\n memory_id TEXT PRIMARY KEY,\n category TEXT NOT NULL,\n status TEXT NOT NULL,\n lifecycle_state TEXT,\n path_rel TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n archived_at TEXT,\n superseded_at TEXT,\n entity_ref TEXT,\n source TEXT NOT NULL,\n confidence REAL NOT NULL,\n confidence_tier TEXT NOT NULL,\n memory_kind TEXT,\n access_count INTEGER,\n last_accessed TEXT,\n tags_json TEXT NOT NULL DEFAULT '[]',\n preview_text TEXT NOT NULL DEFAULT ''\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_current_status\n ON memory_current(status);\n\n CREATE INDEX IF NOT EXISTS idx_memory_current_category\n ON memory_current(category);\n\n CREATE INDEX IF NOT EXISTS idx_memory_current_updated\n ON memory_current(updated_at DESC);\n\n CREATE TABLE IF NOT EXISTS memory_timeline (\n event_id TEXT PRIMARY KEY,\n memory_id TEXT NOT NULL,\n event_type TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n event_order INTEGER NOT NULL,\n actor TEXT NOT NULL,\n reason_code TEXT,\n rule_version TEXT NOT NULL,\n related_memory_ids_json TEXT,\n before_json TEXT,\n after_json TEXT,\n correlation_id TEXT\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_timeline_memory_ts\n ON memory_timeline(memory_id, timestamp, event_order);\n\n CREATE TABLE IF NOT EXISTS memory_entity_mentions (\n memory_id TEXT NOT NULL,\n entity_ref TEXT NOT NULL,\n mention_source TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (memory_id, entity_ref, mention_source)\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_entity_mentions_entity\n ON memory_entity_mentions(entity_ref, updated_at DESC);\n\n CREATE TABLE IF NOT EXISTS native_knowledge_chunks (\n chunk_id TEXT PRIMARY KEY,\n source_path TEXT NOT NULL,\n title TEXT NOT NULL,\n source_kind TEXT NOT NULL,\n start_line INTEGER NOT NULL,\n end_line INTEGER NOT NULL,\n derived_date TEXT,\n session_key TEXT,\n workflow_key TEXT,\n author TEXT,\n agent TEXT,\n namespace TEXT,\n privacy_class TEXT,\n source_hash TEXT,\n preview_text TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_native_knowledge_source_kind\n ON native_knowledge_chunks(source_kind);\n\n CREATE INDEX IF NOT EXISTS idx_native_knowledge_namespace\n ON native_knowledge_chunks(namespace);\n\n CREATE TABLE IF NOT EXISTS memory_review_runs (\n run_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n mode TEXT NOT NULL,\n summary_json TEXT NOT NULL,\n metrics_json TEXT NOT NULL,\n applied_actions_json TEXT NOT NULL,\n report_markdown TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_review_runs_created\n ON memory_review_runs(created_at DESC);\n\n CREATE TABLE IF NOT EXISTS memory_review_queue (\n entry_id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n memory_id TEXT NOT NULL,\n path TEXT NOT NULL,\n reason_code TEXT NOT NULL,\n severity TEXT NOT NULL,\n suggested_action TEXT NOT NULL,\n suggested_status TEXT,\n related_memory_ids_json TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_review_queue_run\n ON memory_review_queue(run_id, reason_code, memory_id);\n\n CREATE TABLE IF NOT EXISTS memory_review_actions (\n row_key TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n action TEXT NOT NULL,\n memory_id TEXT NOT NULL,\n reason_code TEXT NOT NULL,\n before_status TEXT NOT NULL,\n after_status TEXT,\n original_path TEXT NOT NULL,\n current_path TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_review_actions_run\n ON memory_review_actions(run_id, memory_id);\n `);\n\n migrateMemoryCurrentTable(db);\n db.prepare(\"INSERT OR REPLACE INTO meta(key, value) VALUES (?, ?)\")\n .run(\"schemaVersion\", String(MEMORY_PROJECTION_SCHEMA_VERSION));\n}\n\nfunction openProjectionReadonly(memoryDir: string): BetterSqlite3Database | null {\n const dbPath = getMemoryProjectionPath(memoryDir);\n try {\n return openBetterSqlite3(dbPath, { readonly: true, fileMustExist: true });\n } catch {\n return null;\n }\n}\n\nfunction withProjectionReadonly<T>(\n memoryDir: string,\n reader: (db: BetterSqlite3Database) => T,\n): T | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n let needsMigration = false;\n try {\n needsMigration = memoryCurrentRequiresMigration(db);\n return reader(db);\n } catch {\n return null;\n } finally {\n db.close();\n if (needsMigration) {\n migrateProjectionSchemaIfNeeded(memoryDir);\n }\n }\n}\n\nfunction parseStringArray(value: unknown): string[] {\n if (typeof value !== \"string\" || value.length === 0) return [];\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter((entry): entry is string => typeof entry === \"string\") : [];\n } catch {\n return [];\n }\n}\n\nfunction parseJsonObject<T>(value: unknown): T | undefined {\n if (typeof value !== \"string\" || value.length === 0) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n}\n\nexport function parseCurrentRow(\n memoryDir: string,\n row: Record<string, unknown> | undefined,\n): MemoryProjectionCurrentState | null {\n if (!row) return null;\n if (\n typeof row.memory_id !== \"string\" ||\n typeof row.category !== \"string\" ||\n typeof row.status !== \"string\" ||\n typeof row.path_rel !== \"string\" ||\n typeof row.created_at !== \"string\" ||\n typeof row.updated_at !== \"string\" ||\n typeof row.source !== \"string\" ||\n typeof row.confidence !== \"number\" ||\n typeof row.confidence_tier !== \"string\"\n ) {\n return null;\n }\n\n return {\n memoryId: row.memory_id,\n category: row.category as MemoryProjectionCurrentState[\"category\"],\n status: row.status as MemoryStatus,\n lifecycleState:\n typeof row.lifecycle_state === \"string\"\n ? (row.lifecycle_state as MemoryProjectionCurrentState[\"lifecycleState\"])\n : undefined,\n path: path.join(memoryDir, row.path_rel),\n pathRel: row.path_rel,\n created: row.created_at,\n updated: row.updated_at,\n archivedAt: typeof row.archived_at === \"string\" ? row.archived_at : undefined,\n supersededAt: typeof row.superseded_at === \"string\" ? row.superseded_at : undefined,\n entityRef: typeof row.entity_ref === \"string\" ? row.entity_ref : undefined,\n source: row.source,\n confidence: row.confidence,\n confidenceTier: row.confidence_tier as MemoryProjectionCurrentState[\"confidenceTier\"],\n memoryKind:\n typeof row.memory_kind === \"string\"\n ? (row.memory_kind as MemoryProjectionCurrentState[\"memoryKind\"])\n : undefined,\n accessCount: typeof row.access_count === \"number\" ? row.access_count : undefined,\n lastAccessed: typeof row.last_accessed === \"string\" ? row.last_accessed : undefined,\n tags: parseStringArray(row.tags_json),\n preview: typeof row.preview_text === \"string\" ? row.preview_text : \"\",\n };\n}\n\nexport function parseTimelineRows(rows: Array<Record<string, unknown>>): MemoryLifecycleEvent[] {\n const out: MemoryLifecycleEvent[] = [];\n for (const row of rows) {\n if (\n typeof row.event_id !== \"string\" ||\n typeof row.memory_id !== \"string\" ||\n typeof row.event_type !== \"string\" ||\n typeof row.timestamp !== \"string\" ||\n typeof row.actor !== \"string\" ||\n typeof row.rule_version !== \"string\"\n ) {\n continue;\n }\n\n out.push({\n eventId: row.event_id,\n memoryId: row.memory_id,\n eventType: row.event_type as MemoryLifecycleEvent[\"eventType\"],\n timestamp: row.timestamp,\n actor: row.actor,\n reasonCode: typeof row.reason_code === \"string\" ? row.reason_code : undefined,\n ruleVersion: row.rule_version,\n relatedMemoryIds: parseStringArray(row.related_memory_ids_json),\n before: parseJsonObject<MemoryLifecycleEvent[\"before\"]>(row.before_json),\n after: parseJsonObject<MemoryLifecycleEvent[\"after\"]>(row.after_json),\n correlationId: typeof row.correlation_id === \"string\" ? row.correlation_id : undefined,\n });\n }\n\n return out;\n}\n\nexport function readProjectedMemoryState(\n memoryDir: string,\n memoryId: string,\n): MemoryProjectionCurrentState | null {\n return withProjectionReadonly(memoryDir, (db) => {\n const currentSelect = memoryCurrentSelectExpressions(db);\n const row = db\n .prepare(\n `\n SELECT\n memory_id,\n category,\n status,\n lifecycle_state,\n path_rel,\n created_at,\n updated_at,\n archived_at,\n superseded_at,\n entity_ref,\n source,\n confidence,\n confidence_tier,\n memory_kind,\n access_count,\n last_accessed,\n ${currentSelect.tagsJson},\n ${currentSelect.previewText}\n FROM memory_current\n WHERE memory_id = ?\n `,\n )\n .get(memoryId) as Record<string, unknown> | undefined;\n return parseCurrentRow(memoryDir, row);\n });\n}\n\nexport function readProjectedMemoryTimeline(\n memoryDir: string,\n memoryId: string,\n limit: number,\n): MemoryLifecycleEvent[] | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const rows = db\n .prepare(\n `\n SELECT * FROM (\n SELECT\n event_id,\n memory_id,\n event_type,\n timestamp,\n event_order,\n actor,\n reason_code,\n rule_version,\n related_memory_ids_json,\n before_json,\n after_json,\n correlation_id\n FROM memory_timeline\n WHERE memory_id = ?\n ORDER BY timestamp DESC, event_order DESC\n LIMIT ?\n )\n ORDER BY timestamp ASC, event_order ASC\n `,\n )\n .all(memoryId, limit) as Array<Record<string, unknown>>;\n if (rows.length === 0) return null;\n return parseTimelineRows(rows);\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedMemoryBrowse(\n memoryDir: string,\n options: ProjectedMemoryBrowseOptions,\n): ProjectedMemoryBrowsePage | null {\n return withProjectionReadonly(memoryDir, (db) => {\n const normalizedQuery = options.query?.trim().toLowerCase() ?? \"\";\n\n const currentSelect = memoryCurrentSelectExpressions(db);\n const whereClauses: string[] = [];\n const params: unknown[] = [];\n\n if (options.status) {\n whereClauses.push(\"status = ?\");\n params.push(options.status);\n }\n if (options.category) {\n whereClauses.push(\"category = ?\");\n params.push(options.category);\n }\n const sort = options.sort ?? \"updated_desc\";\n const orderBySql = (() => {\n switch (sort) {\n case \"updated_asc\":\n return \"updated_at ASC, created_at ASC, memory_id ASC\";\n case \"created_desc\":\n return \"created_at DESC, updated_at DESC, memory_id ASC\";\n case \"created_asc\":\n return \"created_at ASC, updated_at ASC, memory_id ASC\";\n case \"updated_desc\":\n default:\n return \"updated_at DESC, created_at DESC, memory_id ASC\";\n }\n })();\n const whereSql = whereClauses.length > 0 ? `WHERE ${whereClauses.join(\" AND \")}` : \"\";\n\n if (normalizedQuery) {\n // Query-based browse: fetch all matching rows, filter by full file content, then paginate in JS\n const allRows = db\n .prepare(`\n SELECT\n memory_id,\n path_rel,\n category,\n status,\n created_at,\n updated_at,\n entity_ref,\n ${currentSelect.tagsJson},\n ${currentSelect.previewText}\n FROM memory_current\n ${whereSql}\n ORDER BY ${orderBySql}\n `)\n .all(...params) as Array<Record<string, unknown>>;\n\n const filtered = allRows.filter((row) => {\n if (typeof row.memory_id !== \"string\" || typeof row.path_rel !== \"string\") return false;\n // Check preview, category, entity_ref, tags first (fast)\n const preview = typeof row.preview_text === \"string\" ? row.preview_text.toLowerCase() : \"\";\n const category = typeof row.category === \"string\" ? row.category.toLowerCase() : \"\";\n const entityRef = typeof row.entity_ref === \"string\" ? row.entity_ref.toLowerCase() : \"\";\n const tags = typeof row.tags_json === \"string\" ? row.tags_json.toLowerCase() : \"\";\n if (preview.includes(normalizedQuery) || category.includes(normalizedQuery) ||\n entityRef.includes(normalizedQuery) || tags.includes(normalizedQuery)) {\n return true;\n }\n // Fall back to reading full file content from disk\n try {\n const filePath = path.join(memoryDir, row.path_rel as string);\n const content = fs.readFileSync(filePath, \"utf-8\").toLowerCase();\n return content.includes(normalizedQuery);\n } catch {\n return false;\n }\n });\n\n const pageRows = filtered.slice(options.offset, options.offset + options.limit);\n return {\n total: filtered.length,\n memories: pageRows\n .filter(\n (row) =>\n typeof row.memory_id === \"string\" &&\n typeof row.path_rel === \"string\" &&\n typeof row.category === \"string\" &&\n typeof row.status === \"string\",\n )\n .map((row) => ({\n id: row.memory_id as string,\n path: path.join(memoryDir, row.path_rel as string),\n category: row.category as MemoryCategory,\n status: row.status as MemoryStatus,\n created: typeof row.created_at === \"string\" ? row.created_at : undefined,\n updated: typeof row.updated_at === \"string\" ? row.updated_at : undefined,\n tags: parseStringArray(row.tags_json),\n entityRef: typeof row.entity_ref === \"string\" ? row.entity_ref : undefined,\n preview: typeof row.preview_text === \"string\" ? row.preview_text : \"\",\n })),\n };\n }\n\n // No query: use SQL pagination directly\n const totalRow = db\n .prepare(`SELECT COUNT(*) AS total FROM memory_current ${whereSql}`)\n .get(...params) as { total?: number } | undefined;\n const rows = db\n .prepare(`\n SELECT\n memory_id,\n path_rel,\n category,\n status,\n created_at,\n updated_at,\n entity_ref,\n ${currentSelect.tagsJson},\n ${currentSelect.previewText}\n FROM memory_current\n ${whereSql}\n ORDER BY ${orderBySql}\n LIMIT ? OFFSET ?\n `)\n .all(...params, options.limit, options.offset) as Array<Record<string, unknown>>;\n\n return {\n total: typeof totalRow?.total === \"number\" ? totalRow.total : 0,\n memories: rows\n .filter(\n (row) =>\n typeof row.memory_id === \"string\" &&\n typeof row.path_rel === \"string\" &&\n typeof row.category === \"string\" &&\n typeof row.status === \"string\",\n )\n .map((row) => ({\n id: row.memory_id as string,\n path: path.join(memoryDir, row.path_rel as string),\n category: row.category as MemoryCategory,\n status: row.status as MemoryStatus,\n created: typeof row.created_at === \"string\" ? row.created_at : undefined,\n updated: typeof row.updated_at === \"string\" ? row.updated_at : undefined,\n tags: parseStringArray(row.tags_json),\n entityRef: typeof row.entity_ref === \"string\" ? row.entity_ref : undefined,\n preview: typeof row.preview_text === \"string\" ? row.preview_text : \"\",\n })),\n };\n });\n}\n\nexport function readProjectedEntityMentions(\n memoryDir: string,\n memoryIds?: Set<string>,\n): ProjectedEntityMentionRow[] | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const rows = db\n .prepare(`\n SELECT\n memory_id,\n entity_ref,\n mention_source,\n created_at,\n updated_at\n FROM memory_entity_mentions\n ORDER BY entity_ref ASC, updated_at DESC, memory_id ASC\n `)\n .all() as Array<Record<string, unknown>>;\n\n return rows\n .filter(\n (row) =>\n typeof row.memory_id === \"string\" &&\n typeof row.entity_ref === \"string\" &&\n typeof row.mention_source === \"string\" &&\n typeof row.created_at === \"string\" &&\n typeof row.updated_at === \"string\" &&\n (!memoryIds || memoryIds.has(row.memory_id)),\n )\n .map((row) => ({\n memoryId: row.memory_id as string,\n entityRef: row.entity_ref as string,\n mentionSource: row.mention_source as string,\n created: row.created_at as string,\n updated: row.updated_at as string,\n }));\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedNativeKnowledgeChunks(\n memoryDir: string,\n): ProjectedNativeKnowledgeChunkRow[] | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const rows = db\n .prepare(`\n SELECT\n chunk_id,\n source_path,\n title,\n source_kind,\n start_line,\n end_line,\n derived_date,\n session_key,\n workflow_key,\n author,\n agent,\n namespace,\n privacy_class,\n source_hash,\n preview_text\n FROM native_knowledge_chunks\n ORDER BY source_kind ASC, source_path ASC, start_line ASC\n `)\n .all() as Array<Record<string, unknown>>;\n\n return rows\n .filter(\n (row) =>\n typeof row.chunk_id === \"string\" &&\n typeof row.source_path === \"string\" &&\n typeof row.title === \"string\" &&\n typeof row.source_kind === \"string\" &&\n typeof row.start_line === \"number\" &&\n typeof row.end_line === \"number\" &&\n typeof row.preview_text === \"string\",\n )\n .map((row) => ({\n chunkId: row.chunk_id as string,\n sourcePath: row.source_path as string,\n title: row.title as string,\n sourceKind: row.source_kind as string,\n startLine: row.start_line as number,\n endLine: row.end_line as number,\n derivedDate: typeof row.derived_date === \"string\" ? row.derived_date : undefined,\n sessionKey: typeof row.session_key === \"string\" ? row.session_key : undefined,\n workflowKey: typeof row.workflow_key === \"string\" ? row.workflow_key : undefined,\n author: typeof row.author === \"string\" ? row.author : undefined,\n agent: typeof row.agent === \"string\" ? row.agent : undefined,\n namespace: typeof row.namespace === \"string\" ? row.namespace : undefined,\n privacyClass: typeof row.privacy_class === \"string\" ? row.privacy_class : undefined,\n sourceHash: typeof row.source_hash === \"string\" ? row.source_hash : undefined,\n preview: row.preview_text as string,\n }));\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedLatestReviewQueue(\n memoryDir: string,\n): ProjectedReviewQueueSnapshot | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const latestRunId =\n (db.prepare(`SELECT value FROM meta WHERE key = 'latestGovernanceRunId'`).get() as { value?: string } | undefined)\n ?.value\n ?? (db.prepare(`SELECT run_id AS value FROM memory_review_runs ORDER BY created_at DESC LIMIT 1`).get() as {\n value?: string;\n } | undefined)?.value;\n if (!latestRunId) {\n return { found: false };\n }\n\n const runRow = db\n .prepare(`\n SELECT\n run_id,\n summary_json,\n metrics_json,\n applied_actions_json,\n report_markdown\n FROM memory_review_runs\n WHERE run_id = ?\n `)\n .get(latestRunId) as Record<string, unknown> | undefined;\n if (!runRow || typeof runRow.run_id !== \"string\") {\n return { found: false };\n }\n\n const queueRows = db\n .prepare(`\n SELECT\n entry_id,\n memory_id,\n path,\n reason_code,\n severity,\n suggested_action,\n suggested_status,\n related_memory_ids_json\n FROM memory_review_queue\n WHERE run_id = ?\n ORDER BY reason_code ASC, memory_id ASC\n `)\n .all(latestRunId) as Array<Record<string, unknown>>;\n\n const actionRows = db\n .prepare(`\n SELECT\n row_key,\n action,\n memory_id,\n reason_code,\n before_status,\n after_status,\n original_path,\n current_path\n FROM memory_review_actions\n WHERE run_id = ?\n ORDER BY memory_id ASC, action ASC\n `)\n .all(latestRunId) as Array<Record<string, unknown>>;\n\n const reviewQueue: MemoryGovernanceReviewQueueEntry[] = queueRows\n .filter(\n (row) =>\n typeof row.entry_id === \"string\" &&\n typeof row.memory_id === \"string\" &&\n typeof row.path === \"string\" &&\n typeof row.reason_code === \"string\" &&\n typeof row.severity === \"string\" &&\n typeof row.suggested_action === \"string\",\n )\n .map((row) => ({\n entryId: row.entry_id as string,\n memoryId: row.memory_id as string,\n path: row.path as string,\n reasonCode: row.reason_code as MemoryGovernanceReviewQueueEntry[\"reasonCode\"],\n severity: row.severity as MemoryGovernanceReviewQueueEntry[\"severity\"],\n suggestedAction: row.suggested_action as MemoryGovernanceReviewQueueEntry[\"suggestedAction\"],\n suggestedStatus:\n typeof row.suggested_status === \"string\"\n ? (row.suggested_status as MemoryGovernanceReviewQueueEntry[\"suggestedStatus\"])\n : undefined,\n relatedMemoryIds: parseStringArray(row.related_memory_ids_json),\n }));\n\n return {\n found: true,\n runId: latestRunId,\n summary: parseJsonObject<MemoryGovernanceSummary>(runRow.summary_json),\n metrics: parseJsonObject<MemoryGovernanceMetrics>(runRow.metrics_json),\n reviewQueue,\n appliedActions:\n actionRows.length > 0\n ? actionRows\n .filter(\n (row) =>\n typeof row.action === \"string\" &&\n typeof row.memory_id === \"string\" &&\n typeof row.reason_code === \"string\" &&\n typeof row.before_status === \"string\" &&\n typeof row.original_path === \"string\" &&\n typeof row.current_path === \"string\",\n )\n .map((row) => ({\n action: row.action as MemoryGovernanceAppliedAction[\"action\"],\n memoryId: row.memory_id as string,\n reasonCode: row.reason_code as MemoryGovernanceAppliedAction[\"reasonCode\"],\n beforeStatus: row.before_status as MemoryGovernanceAppliedAction[\"beforeStatus\"],\n afterStatus:\n typeof row.after_status === \"string\"\n ? (row.after_status as MemoryGovernanceAppliedAction[\"afterStatus\"])\n : undefined,\n originalPath: row.original_path as string,\n currentPath: row.current_path as string,\n }))\n : (parseJsonObject<MemoryGovernanceAppliedAction[]>(runRow.applied_actions_json) ?? []),\n report: typeof runRow.report_markdown === \"string\" ? runRow.report_markdown : undefined,\n };\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedGovernanceRecord(\n memoryDir: string,\n): {\n runId: string;\n summary: unknown;\n metrics: unknown;\n reviewQueueRows: MemoryProjectionGovernanceReviewQueueRow[];\n appliedActionRows: MemoryProjectionGovernanceAppliedActionRow[];\n report: string;\n} | null {\n const snapshot = readProjectedLatestReviewQueue(memoryDir);\n if (!snapshot?.found || !snapshot.runId) return null;\n\n return {\n runId: snapshot.runId,\n summary: snapshot.summary ?? {},\n metrics: snapshot.metrics ?? {},\n reviewQueueRows: (snapshot.reviewQueue ?? []).map((entry) => ({\n runId: snapshot.runId as string,\n entryId: entry.entryId,\n memoryId: entry.memoryId,\n path: entry.path,\n reasonCode: entry.reasonCode,\n severity: entry.severity,\n suggestedAction: entry.suggestedAction,\n suggestedStatus: entry.suggestedStatus,\n relatedMemoryIds: [...entry.relatedMemoryIds],\n })),\n appliedActionRows: (snapshot.appliedActions ?? []).map((action) => ({\n runId: snapshot.runId as string,\n rowKey: [\n action.action,\n action.memoryId,\n action.reasonCode,\n action.originalPath,\n action.currentPath,\n ].join(\"::\"),\n action: action.action,\n memoryId: action.memoryId,\n reasonCode: action.reasonCode,\n beforeStatus: action.beforeStatus,\n afterStatus: action.afterStatus,\n originalPath: action.originalPath,\n currentPath: action.currentPath,\n })),\n report: snapshot.report ?? \"\",\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utility-telemetry.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport {\n assertIsoRecordedAt,\n assertSafePathSegment,\n assertString,\n isRecord,\n optionalStringArray,\n recordStoreDay,\n validateStringRecord,\n} from \"./store-contract.js\";\n\nexport type UtilityTelemetrySource = \"cli\" | \"system\" | \"benchmark\" | \"tool_result\";\nexport type UtilityTelemetryTarget = \"promotion\" | \"ranking\";\nexport type UtilityTelemetryDecision = \"promote\" | \"demote\" | \"hold\" | \"boost\" | \"suppress\";\nexport type UtilityTelemetryOutcome = \"helpful\" | \"neutral\" | \"harmful\";\n\nexport interface UtilityTelemetryEvent {\n schemaVersion: 1;\n eventId: string;\n recordedAt: string;\n sessionKey: string;\n source: UtilityTelemetrySource;\n target: UtilityTelemetryTarget;\n decision: UtilityTelemetryDecision;\n outcome: UtilityTelemetryOutcome;\n utilityScore: number;\n summary: string;\n memoryIds?: string[];\n entityRefs?: string[];\n tags?: string[];\n metadata?: Record<string, string>;\n}\n\nexport interface UtilityTelemetryStatus {\n enabled: boolean;\n promotionByOutcomeEnabled: boolean;\n rootDir: string;\n eventsDir: string;\n events: {\n total: number;\n valid: number;\n invalid: number;\n byTarget: Partial<Record<UtilityTelemetryTarget, number>>;\n byDecision: Partial<Record<UtilityTelemetryDecision, number>>;\n byOutcome: Partial<Record<UtilityTelemetryOutcome, number>>;\n latestEventId?: string;\n latestRecordedAt?: string;\n latestSessionKey?: string;\n };\n latestEvent?: UtilityTelemetryEvent;\n invalidEvents: Array<{\n path: string;\n error: string;\n }>;\n}\n\nexport function resolveUtilityTelemetryDir(memoryDir: string, overrideDir?: string): string {\n if (typeof overrideDir === \"string\" && overrideDir.trim().length > 0) {\n return overrideDir.trim();\n }\n return path.join(memoryDir, \"state\", \"utility-telemetry\");\n}\n\nfunction assertUtilityScore(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new Error(\"utilityScore must be a finite number\");\n }\n if (value < -1 || value > 1) {\n throw new Error(\"utilityScore must be between -1 and 1\");\n }\n return value;\n}\n\nexport function validateUtilityTelemetryEvent(raw: unknown): UtilityTelemetryEvent {\n if (!isRecord(raw)) throw new Error(\"utility telemetry event must be an object\");\n if (raw.schemaVersion !== 1) throw new Error(\"schemaVersion must be 1\");\n\n const source = assertString(raw.source, \"source\");\n if (![\"cli\", \"system\", \"benchmark\", \"tool_result\"].includes(source)) {\n throw new Error(\"source must be one of cli|system|benchmark|tool_result\");\n }\n\n const target = assertString(raw.target, \"target\");\n if (![\"promotion\", \"ranking\"].includes(target)) {\n throw new Error(\"target must be one of promotion|ranking\");\n }\n\n const decision = assertString(raw.decision, \"decision\");\n if (![\"promote\", \"demote\", \"hold\", \"boost\", \"suppress\"].includes(decision)) {\n throw new Error(\"decision must be one of promote|demote|hold|boost|suppress\");\n }\n\n const outcome = assertString(raw.outcome, \"outcome\");\n if (![\"helpful\", \"neutral\", \"harmful\"].includes(outcome)) {\n throw new Error(\"outcome must be one of helpful|neutral|harmful\");\n }\n\n return {\n schemaVersion: 1,\n eventId: assertSafePathSegment(assertString(raw.eventId, \"eventId\"), \"eventId\"),\n recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, \"recordedAt\")),\n sessionKey: assertString(raw.sessionKey, \"sessionKey\"),\n source: source as UtilityTelemetrySource,\n target: target as UtilityTelemetryTarget,\n decision: decision as UtilityTelemetryDecision,\n outcome: outcome as UtilityTelemetryOutcome,\n utilityScore: assertUtilityScore(raw.utilityScore),\n summary: assertString(raw.summary, \"summary\"),\n memoryIds: optionalStringArray(raw.memoryIds, \"memoryIds\"),\n entityRefs: optionalStringArray(raw.entityRefs, \"entityRefs\"),\n tags: optionalStringArray(raw.tags, \"tags\"),\n metadata: validateStringRecord(raw.metadata, \"metadata\"),\n };\n}\n\nexport async function recordUtilityTelemetryEvent(options: {\n memoryDir: string;\n utilityTelemetryDir?: string;\n event: UtilityTelemetryEvent;\n}): Promise<string> {\n const rootDir = resolveUtilityTelemetryDir(options.memoryDir, options.utilityTelemetryDir);\n const validated = validateUtilityTelemetryEvent(options.event);\n const day = recordStoreDay(validated.recordedAt);\n const eventsDir = path.join(rootDir, \"events\", day);\n const filePath = path.join(eventsDir, `${validated.eventId}.json`);\n await mkdir(eventsDir, { recursive: true });\n await writeFile(filePath, JSON.stringify(validated, null, 2), \"utf8\");\n return filePath;\n}\n\nexport async function readUtilityTelemetryEvents(options: {\n memoryDir: string;\n utilityTelemetryDir?: string;\n}): Promise<{\n files: string[];\n events: UtilityTelemetryEvent[];\n invalidEvents: Array<{ path: string; error: string }>;\n}> {\n const rootDir = resolveUtilityTelemetryDir(options.memoryDir, options.utilityTelemetryDir);\n const files = await listJsonFiles(path.join(rootDir, \"events\"));\n const events: UtilityTelemetryEvent[] = [];\n const invalidEvents: Array<{ path: string; error: string }> = [];\n for (const filePath of files) {\n try {\n events.push(validateUtilityTelemetryEvent(await readJsonFile(filePath)));\n } catch (error) {\n invalidEvents.push({\n path: filePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { files, events, invalidEvents };\n}\n\nexport async function getUtilityTelemetryStatus(options: {\n memoryDir: string;\n utilityTelemetryDir?: string;\n enabled: boolean;\n promotionByOutcomeEnabled?: boolean;\n}): Promise<UtilityTelemetryStatus> {\n const rootDir = resolveUtilityTelemetryDir(options.memoryDir, options.utilityTelemetryDir);\n const eventsDir = path.join(rootDir, \"events\");\n if (!options.enabled) {\n return {\n enabled: false,\n promotionByOutcomeEnabled: options.promotionByOutcomeEnabled === true,\n rootDir,\n eventsDir,\n events: {\n total: 0,\n valid: 0,\n invalid: 0,\n byTarget: {},\n byDecision: {},\n byOutcome: {},\n },\n invalidEvents: [],\n };\n }\n\n const { files, events, invalidEvents } = await readUtilityTelemetryEvents(options);\n events.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));\n\n const byTarget: Partial<Record<UtilityTelemetryTarget, number>> = {};\n const byDecision: Partial<Record<UtilityTelemetryDecision, number>> = {};\n const byOutcome: Partial<Record<UtilityTelemetryOutcome, number>> = {};\n for (const event of events) {\n byTarget[event.target] = (byTarget[event.target] ?? 0) + 1;\n byDecision[event.decision] = (byDecision[event.decision] ?? 0) + 1;\n byOutcome[event.outcome] = (byOutcome[event.outcome] ?? 0) + 1;\n }\n\n return {\n enabled: true,\n promotionByOutcomeEnabled: options.promotionByOutcomeEnabled === true,\n rootDir,\n eventsDir,\n events: {\n total: files.length,\n valid: events.length,\n invalid: invalidEvents.length,\n byTarget,\n byDecision,\n byOutcome,\n latestEventId: events[0]?.eventId,\n latestRecordedAt: events[0]?.recordedAt,\n latestSessionKey: events[0]?.sessionKey,\n },\n latestEvent: events[0],\n invalidEvents,\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/graph-dashboard-diff.ts"],"sourcesContent":["import type { GraphEdge } from \"./graph.js\";\nimport { graphEdgeKey } from \"./graph-dashboard-key.js\";\nimport type { GraphSnapshot } from \"./graph-dashboard-parser.js\";\n\nexport interface GraphPatch {\n addedNodes: string[];\n removedNodes: string[];\n addedEdges: GraphEdge[];\n removedEdges: GraphEdge[];\n}\n\nexport function diffGraphSnapshots(previous: GraphSnapshot, next: GraphSnapshot): GraphPatch {\n const prevNodeSet = new Set(previous.nodes.map((node) => node.id));\n const nextNodeSet = new Set(next.nodes.map((node) => node.id));\n const prevEdges = new Map(previous.edges.map((edge) => [graphEdgeKey(edge), edge]));\n const nextEdges = new Map(next.edges.map((edge) => [graphEdgeKey(edge), edge]));\n\n const addedNodes = [...nextNodeSet].filter((id) => !prevNodeSet.has(id)).sort((a, b) => a.localeCompare(b));\n const removedNodes = [...prevNodeSet].filter((id) => !nextNodeSet.has(id)).sort((a, b) => a.localeCompare(b));\n const addedEdges = [...nextEdges.entries()]\n .filter(([key]) => !prevEdges.has(key))\n .map(([, edge]) => edge)\n .sort((a, b) => a.type.localeCompare(b.type) || a.from.localeCompare(b.from) || a.to.localeCompare(b.to));\n const removedEdges = [...prevEdges.entries()]\n .filter(([key]) => !nextEdges.has(key))\n .map(([, edge]) => edge)\n .sort((a, b) => a.type.localeCompare(b.type) || a.from.localeCompare(b.from) || a.to.localeCompare(b.to));\n\n return {\n addedNodes,\n removedNodes,\n addedEdges,\n removedEdges,\n };\n}\n"],"mappings":";;;;;AAWO,SAAS,mBAAmB,UAAyB,MAAiC;AAC3F,QAAM,cAAc,IAAI,IAAI,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AACjE,QAAM,cAAc,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AAC7D,QAAM,YAAY,IAAI,IAAI,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,GAAG,IAAI,CAAC,CAAC;AAClF,QAAM,YAAY,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,GAAG,IAAI,CAAC,CAAC;AAE9E,QAAM,aAAa,CAAC,GAAG,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC1G,QAAM,eAAe,CAAC,GAAG,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5G,QAAM,aAAa,CAAC,GAAG,UAAU,QAAQ,CAAC,EACvC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,EACrC,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,IAAI,EACtB,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,KAAK,EAAE,KAAK,cAAc,EAAE,IAAI,KAAK,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;AAC1G,QAAM,eAAe,CAAC,GAAG,UAAU,QAAQ,CAAC,EACzC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,EACrC,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,IAAI,EACtB,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,KAAK,EAAE,KAAK,cAAc,EAAE,IAAI,KAAK,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;AAE1G,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/search/lancedb-backend.ts"],"sourcesContent":["import { log } from \"../logger.js\";\nimport type { SearchBackend, SearchExecutionOptions, SearchQueryOptions, SearchResult } from \"./port.js\";\nimport type { EmbedHelper } from \"./embed-helper.js\";\nimport { scanMemoryDir } from \"./document-scanner.js\";\n\nexport interface LanceDbBackendOptions {\n dbPath: string;\n collection: string;\n embedHelper: EmbedHelper;\n memoryDir: string;\n embeddingDimension: number;\n}\n\n/**\n * LanceDB search backend — embedded hybrid FTS+vector with RRF reranking.\n *\n * Uses @lancedb/lancedb for native Arrow-backed storage.\n * One table per collection. Supports full-text, vector, and hybrid search.\n */\nexport class LanceDbBackend implements SearchBackend {\n private readonly dbPath: string;\n private readonly collection: string;\n private readonly embedHelper: EmbedHelper;\n private readonly memoryDir: string;\n private readonly embeddingDimension: number;\n private available = false;\n private db: any = null;\n private lanceModule: any = null;\n\n constructor(opts: LanceDbBackendOptions) {\n this.dbPath = opts.dbPath;\n this.collection = opts.collection;\n this.embedHelper = opts.embedHelper;\n this.memoryDir = opts.memoryDir;\n this.embeddingDimension = opts.embeddingDimension;\n }\n\n async probe(): Promise<boolean> {\n try {\n await this.ensureDb();\n this.available = true;\n return true;\n } catch (err) {\n log.debug(`LanceDbBackend probe failed: ${err}`);\n this.available = false;\n return false;\n }\n }\n\n isAvailable(): boolean {\n return this.available;\n }\n\n debugStatus(): string {\n return `backend=lancedb available=${this.available} dbPath=${this.dbPath}`;\n }\n\n async search(\n query: string,\n _collection?: string,\n maxResults?: number,\n _options?: SearchQueryOptions,\n _execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]> {\n return this.hybridSearch(query, _collection, maxResults);\n }\n\n async searchGlobal(query: string, maxResults?: number, _execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n const limit = maxResults ?? 10;\n if (!this.available) return [];\n\n try {\n const db = await this.ensureDb();\n const tableNames = await db.tableNames();\n const allResults: SearchResult[] = [];\n\n for (const name of tableNames) {\n try {\n const table = await db.openTable(name);\n const results = await this.searchTable(table, query, \"hybrid\", limit);\n allResults.push(...results);\n } catch {\n // Skip tables that fail\n }\n }\n\n allResults.sort((a, b) => b.score - a.score);\n return allResults.slice(0, limit);\n } catch (err) {\n log.debug(`LanceDbBackend searchGlobal failed: ${err}`);\n return [];\n }\n }\n\n async bm25Search(query: string, collection?: string, maxResults?: number, _execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n const table = await this.ensureTableForCollection(collection ?? this.collection);\n if (!table) return [];\n return this.searchTable(table, query, \"fts\", maxResults ?? 10);\n }\n\n async vectorSearch(query: string, collection?: string, maxResults?: number, _execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n const table = await this.ensureTableForCollection(collection ?? this.collection);\n if (!table) return [];\n return this.searchTable(table, query, \"vector\", maxResults ?? 10);\n }\n\n async hybridSearch(query: string, collection?: string, maxResults?: number, _execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n const table = await this.ensureTableForCollection(collection ?? this.collection);\n if (!table) return [];\n return this.searchTable(table, query, \"hybrid\", maxResults ?? 10);\n }\n\n async update(execution?: SearchExecutionOptions): Promise<void> {\n await this.updateCollection(this.collection, execution);\n }\n\n async updateCollection(collection: string, _execution?: SearchExecutionOptions): Promise<void> {\n const table = await this.ensureTableForCollection(collection);\n if (!table) return;\n\n const docs = await scanMemoryDir(this.memoryDir);\n if (docs.length === 0) {\n // Clear stale data when no docs remain\n try {\n const db = await this.ensureDb();\n await db.dropTable(collection).catch(() => {});\n if (collection === this.collection) this.table = null;\n } catch {\n // Best-effort cleanup\n }\n return;\n }\n\n const rows = docs.map((d) => ({\n docid: d.docid,\n path: d.path,\n content: d.content,\n snippet: d.snippet,\n vector: new Array(this.embeddingDimension).fill(0),\n }));\n\n try {\n // Overwrite with fresh data\n const db = await this.ensureDb();\n await db.dropTable(collection).catch(() => {});\n if (collection === this.collection) this.table = null;\n const newTable = await db.createTable(collection, rows);\n // Create FTS index on content column\n try {\n await newTable.createIndex(\"content\", { config: this.lanceIndex.fts() });\n } catch {\n // FTS index creation may fail on some platforms — degrade gracefully\n }\n if (collection === this.collection) this.table = newTable;\n } catch (err) {\n log.debug(`LanceDbBackend update failed: ${err}`);\n }\n }\n\n async embed(): Promise<void> {\n await this.embedCollection(this.collection);\n }\n\n async embedCollection(collection: string): Promise<void> {\n if (!this.embedHelper.isAvailable()) return;\n\n const table = await this.ensureTableForCollection(collection);\n if (!table) return;\n\n try {\n const allRows = await table.query().select([\"docid\", \"content\", \"vector\"]).toArray();\n const needsEmbed = allRows.filter((row: any) => {\n const vec = row.vector;\n if (!vec || (typeof vec !== \"object\")) return true;\n // Support both Array and typed arrays (e.g. Float32Array from Arrow)\n const arr = Array.from(vec as ArrayLike<number>);\n return arr.length === 0 || arr.every((v: number) => v === 0);\n });\n\n if (needsEmbed.length === 0) return;\n\n const texts = needsEmbed.map((row: any) => row.content as string);\n const vectors = await this.embedHelper.embedBatch(texts);\n\n for (let i = 0; i < needsEmbed.length; i++) {\n const vec = vectors[i];\n if (!vec) continue;\n const docid = needsEmbed[i].docid;\n await table.update({ where: `docid = '${docid.replace(/'/g, \"''\")}'`, values: { vector: vec } });\n }\n } catch (err) {\n log.debug(`LanceDbBackend embed failed: ${err}`);\n }\n }\n\n async ensureCollection(_memoryDir: string): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\"> {\n try {\n await this.ensureTable();\n return \"present\";\n } catch {\n return \"missing\";\n }\n }\n\n private table: any = null;\n\n private get lanceIndex(): any {\n return this.lanceModule.Index ?? this.lanceModule.default?.Index;\n }\n\n private async ensureDb(): Promise<any> {\n if (this.db) return this.db;\n if (!this.lanceModule) {\n this.lanceModule = await import(\"@lancedb/lancedb\");\n }\n const connect = this.lanceModule.connect ?? this.lanceModule.default?.connect;\n this.db = await connect(this.dbPath);\n return this.db;\n }\n\n private async ensureTableForCollection(collection: string): Promise<any> {\n // For the default collection, use the cached instance\n if (collection === this.collection) return this.ensureTable();\n\n const db = await this.ensureDb();\n const tables = await db.tableNames();\n\n if (tables.includes(collection)) {\n return await db.openTable(collection);\n }\n\n // Create empty table with schema\n const emptyRow = {\n docid: \"__placeholder__\",\n path: \"\",\n content: \"\",\n snippet: \"\",\n vector: new Array(this.embeddingDimension).fill(0),\n };\n const newTable = await db.createTable(collection, [emptyRow]);\n try {\n await newTable.createIndex(\"content\", { config: this.lanceIndex.fts() });\n } catch {\n // FTS index creation may fail — degrade gracefully\n }\n try {\n await newTable.delete(\"docid = '__placeholder__'\");\n } catch {\n // May fail if delete isn't supported on empty-ish tables\n }\n return newTable;\n }\n\n private async ensureTable(): Promise<any> {\n if (this.table) return this.table;\n\n const db = await this.ensureDb();\n const tables = await db.tableNames();\n\n if (tables.includes(this.collection)) {\n this.table = await db.openTable(this.collection);\n return this.table;\n }\n\n // Create empty table with schema\n const emptyRow = {\n docid: \"__placeholder__\",\n path: \"\",\n content: \"\",\n snippet: \"\",\n vector: new Array(this.embeddingDimension).fill(0),\n };\n this.table = await db.createTable(this.collection, [emptyRow]);\n // Create FTS index on content column\n try {\n await this.table.createIndex(\"content\", { config: this.lanceIndex.fts() });\n } catch {\n // FTS index creation may fail — degrade gracefully\n }\n // Remove placeholder row\n try {\n await this.table.delete(\"docid = '__placeholder__'\");\n } catch {\n // May fail if delete isn't supported on empty-ish tables\n }\n return this.table;\n }\n\n private async searchTable(table: any, query: string, mode: \"fts\" | \"vector\" | \"hybrid\", limit: number): Promise<SearchResult[]> {\n try {\n if (mode === \"fts\") {\n const results = await table.search(query, \"fts\").limit(limit).toArray();\n return this.mapRows(results);\n }\n\n if (mode === \"vector\") {\n const vec = await this.embedHelper.embed(query);\n if (!vec) {\n // Fall back to FTS\n const results = await table.search(query, \"fts\").limit(limit).toArray();\n return this.mapRows(results);\n }\n const results = await table.search(vec).limit(limit).toArray();\n return this.mapRows(results);\n }\n\n // hybrid — try FTS+vector with RRF reranking\n const vec = await this.embedHelper.embed(query);\n if (!vec) {\n const results = await table.search(query, \"fts\").limit(limit).toArray();\n return this.mapRows(results);\n }\n\n try {\n const results = await table\n .search(query, \"hybrid\")\n .vector(vec)\n .limit(limit)\n .toArray();\n return this.mapRows(results);\n } catch {\n // Hybrid may not be supported in all LanceDB versions — fall back to vector\n const results = await table.search(vec).limit(limit).toArray();\n return this.mapRows(results);\n }\n } catch (err) {\n log.debug(`LanceDbBackend search (${mode}) failed: ${err}`);\n return [];\n }\n }\n\n private mapRows(rows: any[]): SearchResult[] {\n return (rows ?? [])\n .filter((row) => row.docid && row.docid !== \"__placeholder__\")\n .map((row) => ({\n docid: row.docid ?? \"\",\n path: row.path ?? \"\",\n snippet: row.snippet ?? row.content?.slice(0, 200) ?? \"\",\n score: row._relevance_score ?? (row._distance != null ? 1 / (1 + (row._distance ?? 0)) : 0.5),\n }));\n }\n}\n"],"mappings":"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","names":["vec","results"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/adapters/replit.ts"],"sourcesContent":["import { headerValue, type AdapterContext, type EngramAdapter, type ResolvedIdentity } from \"./types.js\";\n\n/**\n * Replit Agent adapter.\n *\n * Detection: Replit Agent supports MCP natively (HTTP-only, configured\n * via the Integrations pane). It does NOT send identifying headers\n * automatically — detection relies on user-configured custom headers\n * in Replit's MCP Integrations UI.\n *\n * Replit provides env vars to running code (REPL_ID, REPL_OWNER,\n * REPL_SLUG) but these are NOT sent as HTTP headers to MCP servers.\n *\n * To identify Replit connections, users should configure a custom header\n * in the Replit Integrations pane when adding the Engram MCP server:\n * Header Name: X-Engram-Client-Id\n * Header Value: replit\n *\n * Optionally also set X-Engram-Namespace and X-Engram-Principal for\n * project/user scoping.\n */\nexport class ReplitAdapter implements EngramAdapter {\n readonly id = \"replit\";\n\n matches(context: AdapterContext): boolean {\n // Primary: user-configured client identifier header\n const clientId = headerValue(context.headers, \"x-engram-client-id\");\n if (clientId?.toLowerCase() === \"replit\") return true;\n\n // MCP clientInfo (Replit's MCP client name is not publicly documented,\n // but check for it in case it becomes available)\n const clientName = context.clientInfo?.name?.toLowerCase() ?? \"\";\n if (clientName.includes(\"replit\")) return true;\n\n return false;\n }\n\n resolveIdentity(context: AdapterContext): ResolvedIdentity {\n const mcpSessionId = headerValue(context.headers, \"mcp-session-id\");\n\n const principal = headerValue(context.headers, \"x-engram-principal\")\n || \"replit-agent\";\n\n const namespace = headerValue(context.headers, \"x-engram-namespace\")\n || \"replit\";\n\n return {\n namespace,\n principal,\n sessionKey: mcpSessionId ?? context.sessionKey,\n adapterId: this.id,\n };\n }\n}\n\n"],"mappings":";;;;;AAqBO,IAAM,gBAAN,MAA6C;AAAA,EACzC,KAAK;AAAA,EAEd,QAAQ,SAAkC;AAExC,UAAM,WAAW,YAAY,QAAQ,SAAS,oBAAoB;AAClE,QAAI,UAAU,YAAY,MAAM,SAAU,QAAO;AAIjD,UAAM,aAAa,QAAQ,YAAY,MAAM,YAAY,KAAK;AAC9D,QAAI,WAAW,SAAS,QAAQ,EAAG,QAAO;AAE1C,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,SAA2C;AACzD,UAAM,eAAe,YAAY,QAAQ,SAAS,gBAAgB;AAElE,UAAM,YAAY,YAAY,QAAQ,SAAS,oBAAoB,KAC9D;AAEL,UAAM,YAAY,YAAY,QAAQ,SAAS,oBAAoB,KAC9D;AAEL,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,gBAAgB,QAAQ;AAAA,MACpC,WAAW,KAAK;AAAA,IAClB;AAAA,EACF;AACF;","names":[]}