@remnic/core 1.1.31 → 9.3.516

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1102) hide show
  1. package/dist/abstraction-nodes.js +2 -2
  2. package/dist/access-cli.d.ts +1 -1
  3. package/dist/access-cli.js +158 -121
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +9 -5
  6. package/dist/access-http.js +51 -51
  7. package/dist/access-idempotency.d.ts +2 -0
  8. package/dist/access-idempotency.js +1 -1
  9. package/dist/access-mcp.d.ts +16 -9
  10. package/dist/access-mcp.js +44 -44
  11. package/dist/access-schema.d.ts +45 -13
  12. package/dist/access-schema.js +8 -8
  13. package/dist/{access-service-CkZyb35d.d.ts → access-service-CZfksQuS.d.ts} +11 -130
  14. package/dist/access-service.d.ts +7 -4
  15. package/dist/access-service.js +40 -40
  16. package/dist/action-confidence.d.ts +1 -0
  17. package/dist/active-memory-bridge.d.ts +1 -0
  18. package/dist/active-memory-bridge.js +3 -2
  19. package/dist/active-recall.d.ts +1 -0
  20. package/dist/active-recall.js +14 -9
  21. package/dist/active-recall.js.map +1 -1
  22. package/dist/adapters/claude-code.d.ts +6 -2
  23. package/dist/adapters/claude-code.js +2 -2
  24. package/dist/adapters/codex.d.ts +5 -1
  25. package/dist/adapters/codex.js +2 -2
  26. package/dist/adapters/hermes.js +2 -2
  27. package/dist/adapters/index.js +6 -6
  28. package/dist/adapters/registry.js +6 -6
  29. package/dist/adapters/replit.d.ts +4 -2
  30. package/dist/adapters/replit.js +2 -2
  31. package/dist/adapters/types.d.ts +4 -0
  32. package/dist/adapters/types.js +1 -1
  33. package/dist/behavior-learner.d.ts +1 -0
  34. package/dist/behavior-signals.d.ts +1 -0
  35. package/dist/behavior-signals.js +1 -1
  36. package/dist/bootstrap.d.ts +5 -3
  37. package/dist/bootstrap.js +2 -2
  38. package/dist/boxes.d.ts +1 -0
  39. package/dist/boxes.js +1 -1
  40. package/dist/briefing.d.ts +1 -0
  41. package/dist/briefing.js +9 -9
  42. package/dist/buffer-surprise-report.d.ts +1 -0
  43. package/dist/buffer.d.ts +1 -0
  44. package/dist/buffer.js +2 -2
  45. package/dist/bulk-import/index.d.ts +28 -0
  46. package/dist/bulk-import/index.js +31 -0
  47. package/dist/calibration.d.ts +2 -0
  48. package/dist/calibration.js +50 -17
  49. package/dist/calibration.js.map +1 -1
  50. package/dist/{capsule-crypto-5CYAGVC5.js → capsule-crypto-7FJQINUR.js} +2 -2
  51. package/dist/{capsule-merge-4MGKE7C5.js → capsule-merge-T2JRE46P.js} +3 -3
  52. package/dist/causal-behavior.d.ts +1 -0
  53. package/dist/causal-behavior.js +4 -4
  54. package/dist/causal-chain.js +4 -4
  55. package/dist/causal-consolidation.d.ts +16 -1
  56. package/dist/causal-consolidation.js +115 -32
  57. package/dist/causal-consolidation.js.map +1 -1
  58. package/dist/causal-retrieval.js +14 -6
  59. package/dist/causal-retrieval.js.map +1 -1
  60. package/dist/causal-trajectory-graph.js +2 -2
  61. package/dist/causal-trajectory.js +2 -2
  62. package/dist/{chunk-SAZS2QZB.js → chunk-23UORJ4S.js} +3 -3
  63. package/dist/{chunk-76FLAAUC.js → chunk-2AN2L4NL.js} +17 -6
  64. package/dist/chunk-2AN2L4NL.js.map +1 -0
  65. package/dist/{chunk-W4L6CZKA.js → chunk-2DL3OFLD.js} +15 -10
  66. package/dist/chunk-2DL3OFLD.js.map +1 -0
  67. package/dist/{chunk-NJ3MJQZX.js → chunk-2I5JGH3M.js} +2 -2
  68. package/dist/{chunk-NJ3MJQZX.js.map → chunk-2I5JGH3M.js.map} +1 -1
  69. package/dist/{chunk-7OZ53EXP.js → chunk-2NLLXCJG.js} +21 -10
  70. package/dist/chunk-2NLLXCJG.js.map +1 -0
  71. package/dist/{chunk-PK7H5L6Y.js → chunk-2NM43EWN.js} +2 -2
  72. package/dist/{chunk-PYXS46O7.js → chunk-3BP57I6J.js} +2 -2
  73. package/dist/{chunk-FBYESMQ2.js → chunk-3C5RPJAX.js} +2 -2
  74. package/dist/{chunk-FKFMOY3N.js → chunk-42NQ7AVG.js} +3 -4
  75. package/dist/{chunk-FKFMOY3N.js.map → chunk-42NQ7AVG.js.map} +1 -1
  76. package/dist/chunk-4426WSWL.js +73 -0
  77. package/dist/chunk-4426WSWL.js.map +1 -0
  78. package/dist/{chunk-LIRZNNUP.js → chunk-44442YCH.js} +5 -2
  79. package/dist/chunk-44442YCH.js.map +1 -0
  80. package/dist/{chunk-H3ME6L6D.js → chunk-46GJIW5M.js} +23 -20
  81. package/dist/chunk-46GJIW5M.js.map +1 -0
  82. package/dist/{chunk-QDZ2RLEC.js → chunk-472U7RDF.js} +3 -3
  83. package/dist/chunk-472U7RDF.js.map +1 -0
  84. package/dist/{chunk-NN2DKE4T.js → chunk-4H5ZJHEN.js} +16 -3
  85. package/dist/{chunk-NN2DKE4T.js.map → chunk-4H5ZJHEN.js.map} +1 -1
  86. package/dist/{chunk-56K5QLHX.js → chunk-4HP7HIE3.js} +56 -13
  87. package/dist/chunk-4HP7HIE3.js.map +1 -0
  88. package/dist/{chunk-RK2Y4XOM.js → chunk-4JRRISLU.js} +9 -6
  89. package/dist/chunk-4JRRISLU.js.map +1 -0
  90. package/dist/{chunk-XKLD5OK4.js → chunk-4RR6ROTB.js} +10 -11
  91. package/dist/chunk-4RR6ROTB.js.map +1 -0
  92. package/dist/{chunk-YROHKYBY.js → chunk-5UHVGNZD.js} +22 -6
  93. package/dist/chunk-5UHVGNZD.js.map +1 -0
  94. package/dist/{chunk-ZAVUCJ4H.js → chunk-5V456VRV.js} +154 -69
  95. package/dist/chunk-5V456VRV.js.map +1 -0
  96. package/dist/{chunk-77H5NU3M.js → chunk-6BR7L222.js} +82 -18
  97. package/dist/chunk-6BR7L222.js.map +1 -0
  98. package/dist/{chunk-4KGVTPGD.js → chunk-6F6BXB7A.js} +9 -8
  99. package/dist/chunk-6F6BXB7A.js.map +1 -0
  100. package/dist/{chunk-NMZY542O.js → chunk-6URPAY2D.js} +41 -17
  101. package/dist/chunk-6URPAY2D.js.map +1 -0
  102. package/dist/{chunk-N53K2EXC.js → chunk-6VF75M3X.js} +2 -2
  103. package/dist/{chunk-XSZEP4SF.js → chunk-6XSPNR6L.js} +6 -5
  104. package/dist/chunk-6XSPNR6L.js.map +1 -0
  105. package/dist/{chunk-6H2TESSP.js → chunk-765K3SAT.js} +3 -3
  106. package/dist/{chunk-EDTHC6UD.js → chunk-77NAFXUD.js} +2 -2
  107. package/dist/{chunk-S7KDBTWT.js → chunk-7F7Z6MOS.js} +29 -14
  108. package/dist/chunk-7F7Z6MOS.js.map +1 -0
  109. package/dist/{chunk-MZH6EHNR.js → chunk-7H6CFEBJ.js} +41 -14
  110. package/dist/chunk-7H6CFEBJ.js.map +1 -0
  111. package/dist/{chunk-MGKYQQYF.js → chunk-7Q3RCKAQ.js} +2 -2
  112. package/dist/chunk-7RXCMVFQ.js +27 -0
  113. package/dist/chunk-7RXCMVFQ.js.map +1 -0
  114. package/dist/{chunk-DGXUHMOV.js → chunk-A2IYSXDQ.js} +25 -6
  115. package/dist/chunk-A2IYSXDQ.js.map +1 -0
  116. package/dist/{chunk-EABGC2TL.js → chunk-A2Z6UCWT.js} +26 -4
  117. package/dist/chunk-A2Z6UCWT.js.map +1 -0
  118. package/dist/{chunk-5375UYTQ.js → chunk-A6D7A2FW.js} +4 -4
  119. package/dist/chunk-A6D7A2FW.js.map +1 -0
  120. package/dist/{chunk-FAAFWE4G.js → chunk-ALEPI75L.js} +24 -6
  121. package/dist/chunk-ALEPI75L.js.map +1 -0
  122. package/dist/{chunk-3SLRNYNG.js → chunk-AUDJPF4N.js} +15 -4
  123. package/dist/chunk-AUDJPF4N.js.map +1 -0
  124. package/dist/chunk-B5XMS73R.js +145 -0
  125. package/dist/chunk-B5XMS73R.js.map +1 -0
  126. package/dist/{chunk-HXXBL2KD.js → chunk-BECQDWBA.js} +44 -4
  127. package/dist/chunk-BECQDWBA.js.map +1 -0
  128. package/dist/{chunk-7SEAZFFB.js → chunk-BEUDU7Y4.js} +24 -4
  129. package/dist/chunk-BEUDU7Y4.js.map +1 -0
  130. package/dist/chunk-CHBI22MI.js +159 -0
  131. package/dist/chunk-CHBI22MI.js.map +1 -0
  132. package/dist/{chunk-GDFS42HT.js → chunk-CHCA44C3.js} +15 -8
  133. package/dist/chunk-CHCA44C3.js.map +1 -0
  134. package/dist/chunk-CINZGPSJ.js +22 -0
  135. package/dist/chunk-CINZGPSJ.js.map +1 -0
  136. package/dist/chunk-CMTINOFS.js +36 -0
  137. package/dist/chunk-CMTINOFS.js.map +1 -0
  138. package/dist/{chunk-34DQE4KF.js → chunk-CO7ZO4TU.js} +2 -2
  139. package/dist/{chunk-PFV5C235.js → chunk-CPPS65WS.js} +2 -1
  140. package/dist/{chunk-PFV5C235.js.map → chunk-CPPS65WS.js.map} +1 -1
  141. package/dist/{chunk-DINWEURR.js → chunk-CSKLPDN6.js} +20 -6
  142. package/dist/chunk-CSKLPDN6.js.map +1 -0
  143. package/dist/chunk-CWWMTTQE.js +566 -0
  144. package/dist/chunk-CWWMTTQE.js.map +1 -0
  145. package/dist/{chunk-IQT3XTKW.js → chunk-D24OXEPB.js} +13 -7
  146. package/dist/chunk-D24OXEPB.js.map +1 -0
  147. package/dist/{chunk-WIICJPET.js → chunk-DEUNUKTD.js} +6 -4
  148. package/dist/{chunk-WIICJPET.js.map → chunk-DEUNUKTD.js.map} +1 -1
  149. package/dist/{chunk-ZYVPLJ4T.js → chunk-DHGSZ3UD.js} +9 -7
  150. package/dist/chunk-DHGSZ3UD.js.map +1 -0
  151. package/dist/{chunk-JR4ZC3G4.js → chunk-DLJ4IR6M.js} +91 -41
  152. package/dist/chunk-DLJ4IR6M.js.map +1 -0
  153. package/dist/{chunk-U4SCL7B7.js → chunk-DRD2Q7HQ.js} +82 -18
  154. package/dist/chunk-DRD2Q7HQ.js.map +1 -0
  155. package/dist/{chunk-2IWUMAES.js → chunk-E62SBGQ3.js} +28 -13
  156. package/dist/chunk-E62SBGQ3.js.map +1 -0
  157. package/dist/{chunk-C5BCH4ZS.js → chunk-EAZGEEG2.js} +21 -3
  158. package/dist/chunk-EAZGEEG2.js.map +1 -0
  159. package/dist/{chunk-TPB3I2AC.js → chunk-ECZU5BJH.js} +31 -10
  160. package/dist/chunk-ECZU5BJH.js.map +1 -0
  161. package/dist/chunk-EDQVAMQI.js +308 -0
  162. package/dist/chunk-EDQVAMQI.js.map +1 -0
  163. package/dist/{chunk-RRF5UOBJ.js → chunk-EI6V5UXY.js} +22 -15
  164. package/dist/chunk-EI6V5UXY.js.map +1 -0
  165. package/dist/{chunk-ZKSK55RC.js → chunk-ETUPBUHB.js} +2 -2
  166. package/dist/{chunk-25MQ7IHJ.js → chunk-EUML3N6B.js} +17 -6
  167. package/dist/chunk-EUML3N6B.js.map +1 -0
  168. package/dist/{chunk-5RGLBDQF.js → chunk-EVZFIAPG.js} +12 -12
  169. package/dist/chunk-EVZFIAPG.js.map +1 -0
  170. package/dist/{chunk-QRNI5JBH.js → chunk-EYIEWJNI.js} +2 -2
  171. package/dist/{chunk-TPU5L5EY.js → chunk-FCOQXV3T.js} +272 -411
  172. package/dist/chunk-FCOQXV3T.js.map +1 -0
  173. package/dist/{chunk-TMQLARTH.js → chunk-FK556DDH.js} +34 -15
  174. package/dist/chunk-FK556DDH.js.map +1 -0
  175. package/dist/{chunk-43PJZYGL.js → chunk-FPGE5NVO.js} +45 -10
  176. package/dist/chunk-FPGE5NVO.js.map +1 -0
  177. package/dist/{chunk-3VAL7ZL2.js → chunk-FUC4LZMD.js} +60 -25
  178. package/dist/chunk-FUC4LZMD.js.map +1 -0
  179. package/dist/{chunk-C6QPK5GG.js → chunk-FZZ2QTJI.js} +2 -2
  180. package/dist/{chunk-D46YSIYX.js → chunk-G3Z3QEF5.js} +19 -11
  181. package/dist/{chunk-D46YSIYX.js.map → chunk-G3Z3QEF5.js.map} +1 -1
  182. package/dist/{chunk-3JXBXXM2.js → chunk-G4IAEX6D.js} +2 -2
  183. package/dist/{chunk-MSWG7JI6.js → chunk-G56P5RLD.js} +8 -2
  184. package/dist/chunk-G56P5RLD.js.map +1 -0
  185. package/dist/{chunk-AGZQD76C.js → chunk-GCGJW34D.js} +48 -2
  186. package/dist/chunk-GCGJW34D.js.map +1 -0
  187. package/dist/chunk-H2NCNXMS.js +159 -0
  188. package/dist/chunk-H2NCNXMS.js.map +1 -0
  189. package/dist/{chunk-XYIK4LF6.js → chunk-H3FZVNRN.js} +8 -2
  190. package/dist/chunk-H3FZVNRN.js.map +1 -0
  191. package/dist/{chunk-YU5KIWYQ.js → chunk-HC6EKOID.js} +94 -43
  192. package/dist/chunk-HC6EKOID.js.map +1 -0
  193. package/dist/{chunk-TK4UEOSK.js → chunk-HDDRVXX4.js} +8 -8
  194. package/dist/chunk-HDDRVXX4.js.map +1 -0
  195. package/dist/{chunk-LLQ2LLWF.js → chunk-HENLZHIT.js} +15 -5
  196. package/dist/chunk-HENLZHIT.js.map +1 -0
  197. package/dist/{chunk-N2D6GXBM.js → chunk-HINSGUA7.js} +28 -20
  198. package/dist/chunk-HINSGUA7.js.map +1 -0
  199. package/dist/{chunk-APO3DCMU.js → chunk-HLAVGJ62.js} +30 -8
  200. package/dist/chunk-HLAVGJ62.js.map +1 -0
  201. package/dist/{chunk-TPMQ3G6Z.js → chunk-HOJZMQ4J.js} +2 -2
  202. package/dist/chunk-HOJZMQ4J.js.map +1 -0
  203. package/dist/{chunk-LUDTDZLK.js → chunk-HPWVAEET.js} +33 -7
  204. package/dist/chunk-HPWVAEET.js.map +1 -0
  205. package/dist/{chunk-NZL6GGQE.js → chunk-HQ6NIBL6.js} +92 -30
  206. package/dist/chunk-HQ6NIBL6.js.map +1 -0
  207. package/dist/{chunk-UWVJF25J.js → chunk-HWVTS5NO.js} +20 -6
  208. package/dist/chunk-HWVTS5NO.js.map +1 -0
  209. package/dist/{chunk-2WWLHTZY.js → chunk-IC4GELZE.js} +2 -2
  210. package/dist/{chunk-QA2ZAPBU.js → chunk-IPLYGWQF.js} +28 -20
  211. package/dist/chunk-IPLYGWQF.js.map +1 -0
  212. package/dist/{chunk-A6KTB5R6.js → chunk-IQ3OI2RR.js} +3 -3
  213. package/dist/chunk-IQ3OI2RR.js.map +1 -0
  214. package/dist/{chunk-6LVVDPJ4.js → chunk-J64TK33U.js} +3 -4
  215. package/dist/chunk-J64TK33U.js.map +1 -0
  216. package/dist/{chunk-6FC5EGNV.js → chunk-JBPKEARU.js} +15 -5
  217. package/dist/{chunk-6FC5EGNV.js.map → chunk-JBPKEARU.js.map} +1 -1
  218. package/dist/{chunk-RHY3HH7P.js → chunk-JFEKNTX7.js} +125 -33
  219. package/dist/chunk-JFEKNTX7.js.map +1 -0
  220. package/dist/{chunk-TZOLIGIG.js → chunk-JJEJJ7RK.js} +4 -2
  221. package/dist/chunk-JJEJJ7RK.js.map +1 -0
  222. package/dist/{chunk-PCUKNJAZ.js → chunk-JKV57BTN.js} +2 -2
  223. package/dist/{chunk-EJI5XIBB.js → chunk-JLNBQWZ2.js} +55 -7
  224. package/dist/chunk-JLNBQWZ2.js.map +1 -0
  225. package/dist/{chunk-PIRJPV5T.js → chunk-JNANKJLN.js} +2 -2
  226. package/dist/chunk-JNANKJLN.js.map +1 -0
  227. package/dist/{chunk-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
  228. package/dist/chunk-JUC24CTX.js.map +1 -0
  229. package/dist/{chunk-OIGNEXKZ.js → chunk-K5O2QY6T.js} +5 -1
  230. package/dist/{chunk-OIGNEXKZ.js.map → chunk-K5O2QY6T.js.map} +1 -1
  231. package/dist/{chunk-ZTFCYYEZ.js → chunk-KCYE2MZM.js} +3 -3
  232. package/dist/chunk-KCYE2MZM.js.map +1 -0
  233. package/dist/{chunk-JWPLJLDU.js → chunk-KD3QD3A5.js} +2 -2
  234. package/dist/{chunk-JWPLJLDU.js.map → chunk-KD3QD3A5.js.map} +1 -1
  235. package/dist/{chunk-YRMVARQP.js → chunk-KFY3SGN7.js} +49 -2
  236. package/dist/chunk-KFY3SGN7.js.map +1 -0
  237. package/dist/{chunk-CYFQJMUV.js → chunk-KIB7SDIJ.js} +15 -10
  238. package/dist/chunk-KIB7SDIJ.js.map +1 -0
  239. package/dist/{chunk-3KW65B36.js → chunk-KILOTVIF.js} +95 -48
  240. package/dist/chunk-KILOTVIF.js.map +1 -0
  241. package/dist/{chunk-MXFBBHJU.js → chunk-KJMYHC7K.js} +10 -5
  242. package/dist/chunk-KJMYHC7K.js.map +1 -0
  243. package/dist/{chunk-W3LR522O.js → chunk-KM2A35EO.js} +36 -34
  244. package/dist/chunk-KM2A35EO.js.map +1 -0
  245. package/dist/{chunk-575RMLWN.js → chunk-KXULCVOC.js} +30 -24
  246. package/dist/chunk-KXULCVOC.js.map +1 -0
  247. package/dist/{chunk-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
  248. package/dist/chunk-L227SKTB.js.map +1 -0
  249. package/dist/{chunk-BVF3AGJP.js → chunk-LJBOVCQG.js} +26 -11
  250. package/dist/chunk-LJBOVCQG.js.map +1 -0
  251. package/dist/{chunk-2KI4QFHU.js → chunk-LMDRGRJ2.js} +2 -2
  252. package/dist/{chunk-MY6TPVXW.js → chunk-LMPHTYJC.js} +2 -2
  253. package/dist/{chunk-EHRTFRWW.js → chunk-LQHDIS7L.js} +10 -5
  254. package/dist/chunk-LQHDIS7L.js.map +1 -0
  255. package/dist/chunk-LUDUFZTV.js +170 -0
  256. package/dist/chunk-LUDUFZTV.js.map +1 -0
  257. package/dist/{chunk-5HRY2WRF.js → chunk-LZ3VEOU5.js} +2 -2
  258. package/dist/{chunk-Q7P4WJDP.js → chunk-M5T4Q2ZU.js} +1 -1
  259. package/dist/chunk-M5T4Q2ZU.js.map +1 -0
  260. package/dist/{chunk-ICRIXAP2.js → chunk-MC4FJXPA.js} +16 -6
  261. package/dist/chunk-MC4FJXPA.js.map +1 -0
  262. package/dist/{chunk-WPGJYVUH.js → chunk-MGVIEM2O.js} +23 -6
  263. package/dist/chunk-MGVIEM2O.js.map +1 -0
  264. package/dist/{chunk-NGAVDO7E.js → chunk-OADWQ5CR.js} +2 -2
  265. package/dist/{chunk-2NMMFZ5T.js → chunk-OD4FM2U7.js} +6 -3
  266. package/dist/chunk-OD4FM2U7.js.map +1 -0
  267. package/dist/{chunk-OZHRDTDX.js → chunk-OKTXM5H4.js} +11 -1
  268. package/dist/chunk-OKTXM5H4.js.map +1 -0
  269. package/dist/{chunk-RXDLTSWT.js → chunk-ONPLNAPX.js} +16 -7
  270. package/dist/chunk-ONPLNAPX.js.map +1 -0
  271. package/dist/{chunk-FJ43PRLT.js → chunk-ORFGK3XI.js} +20 -14
  272. package/dist/chunk-ORFGK3XI.js.map +1 -0
  273. package/dist/{chunk-DOM4GKSW.js → chunk-OZKVVUJB.js} +3 -3
  274. package/dist/{chunk-3TNBOMQT.js → chunk-PCI747N2.js} +13 -13
  275. package/dist/{chunk-3TNBOMQT.js.map → chunk-PCI747N2.js.map} +1 -1
  276. package/dist/{chunk-MT4HVDUZ.js → chunk-PM3QHTFT.js} +3 -3
  277. package/dist/{chunk-4DWOBS2A.js → chunk-PRQJ5ESM.js} +27 -2
  278. package/dist/{chunk-4DWOBS2A.js.map → chunk-PRQJ5ESM.js.map} +1 -1
  279. package/dist/chunk-PU44GBL4.js +52 -0
  280. package/dist/chunk-PU44GBL4.js.map +1 -0
  281. package/dist/{chunk-MJFNCJXV.js → chunk-Q4CAQGKQ.js} +47 -9
  282. package/dist/chunk-Q4CAQGKQ.js.map +1 -0
  283. package/dist/{chunk-U3WSW6PZ.js → chunk-QMYXNM4P.js} +90 -35
  284. package/dist/chunk-QMYXNM4P.js.map +1 -0
  285. package/dist/{chunk-XVVIG67A.js → chunk-QVJ4NWL2.js} +62 -18
  286. package/dist/chunk-QVJ4NWL2.js.map +1 -0
  287. package/dist/{chunk-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
  288. package/dist/chunk-QY7YA7OL.js.map +1 -0
  289. package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
  290. package/dist/{chunk-2PRLKQAH.js → chunk-RLV3PQGH.js} +35 -19
  291. package/dist/chunk-RLV3PQGH.js.map +1 -0
  292. package/dist/{chunk-WW3QQF4H.js → chunk-ROZJACKP.js} +16 -1
  293. package/dist/chunk-ROZJACKP.js.map +1 -0
  294. package/dist/{chunk-7MNMYOFP.js → chunk-RSUYKGGZ.js} +3 -4
  295. package/dist/chunk-RSUYKGGZ.js.map +1 -0
  296. package/dist/{chunk-LT3NLYSI.js → chunk-RUZOJKNF.js} +10 -7
  297. package/dist/chunk-RUZOJKNF.js.map +1 -0
  298. package/dist/{chunk-326G7DJK.js → chunk-RW5DGAGO.js} +67 -13
  299. package/dist/chunk-RW5DGAGO.js.map +1 -0
  300. package/dist/{chunk-KOSORCJG.js → chunk-S53PKKWK.js} +63 -24
  301. package/dist/chunk-S53PKKWK.js.map +1 -0
  302. package/dist/{chunk-65PG43EQ.js → chunk-S7WU3Y3D.js} +21 -4
  303. package/dist/chunk-S7WU3Y3D.js.map +1 -0
  304. package/dist/{chunk-SKE7JYKA.js → chunk-SFXKHM7P.js} +2 -2
  305. package/dist/{chunk-HMDCOMYU.js → chunk-SKGV326D.js} +3 -3
  306. package/dist/{chunk-I5GLV3VE.js → chunk-SML26KED.js} +33 -26
  307. package/dist/{chunk-I5GLV3VE.js.map → chunk-SML26KED.js.map} +1 -1
  308. package/dist/chunk-T2PO5MUF.js +62 -0
  309. package/dist/chunk-T2PO5MUF.js.map +1 -0
  310. package/dist/{chunk-C7VW7C3F.js → chunk-TDKQGLJW.js} +3 -3
  311. package/dist/chunk-TDKQGLJW.js.map +1 -0
  312. package/dist/{chunk-3QKK7QOS.js → chunk-TERNBNJB.js} +3 -3
  313. package/dist/chunk-TERNBNJB.js.map +1 -0
  314. package/dist/{chunk-MXC3AP5I.js → chunk-TGQ2NTWH.js} +12 -7
  315. package/dist/chunk-TGQ2NTWH.js.map +1 -0
  316. package/dist/{chunk-3Y4P7RXM.js → chunk-TMSXWOBZ.js} +3 -4
  317. package/dist/chunk-TMSXWOBZ.js.map +1 -0
  318. package/dist/{chunk-3ZLVGM76.js → chunk-TTGZV5R3.js} +106 -44
  319. package/dist/chunk-TTGZV5R3.js.map +1 -0
  320. package/dist/{chunk-5UM2VJ6D.js → chunk-UEY3VB6W.js} +2 -2
  321. package/dist/{chunk-I6K5FBRQ.js → chunk-UI3NYK34.js} +4 -1
  322. package/dist/{chunk-I6K5FBRQ.js.map → chunk-UI3NYK34.js.map} +1 -1
  323. package/dist/{chunk-VBJ7V5SK.js → chunk-UIPDNLXA.js} +21 -8
  324. package/dist/chunk-UIPDNLXA.js.map +1 -0
  325. package/dist/{chunk-GIF42EW3.js → chunk-UP6MOYCB.js} +3 -3
  326. package/dist/{chunk-K4FLSOR5.js → chunk-USYGGIJZ.js} +44 -15
  327. package/dist/chunk-USYGGIJZ.js.map +1 -0
  328. package/dist/{chunk-FIT6DMX6.js → chunk-UWY7GIVS.js} +152 -54
  329. package/dist/chunk-UWY7GIVS.js.map +1 -0
  330. package/dist/{chunk-MRILGULB.js → chunk-V2RCP53Q.js} +2 -2
  331. package/dist/{chunk-XKECPATV.js → chunk-VFUEZZBS.js} +113 -4
  332. package/dist/chunk-VFUEZZBS.js.map +1 -0
  333. package/dist/{chunk-FSFEQI74.js → chunk-W7L6HXUC.js} +2 -2
  334. package/dist/{chunk-3IQ2TR4N.js → chunk-WLEB7WCG.js} +2 -2
  335. package/dist/{chunk-GL6I6MEQ.js → chunk-WSGF57U2.js} +3 -3
  336. package/dist/{chunk-KNKUID7G.js → chunk-X7Y7WX73.js} +72 -6
  337. package/dist/chunk-X7Y7WX73.js.map +1 -0
  338. package/dist/{chunk-5NPGSAVB.js → chunk-XEKAG3FM.js} +23 -5
  339. package/dist/chunk-XEKAG3FM.js.map +1 -0
  340. package/dist/{chunk-3APJ5EVB.js → chunk-XKIQZXUB.js} +41 -26
  341. package/dist/chunk-XKIQZXUB.js.map +1 -0
  342. package/dist/chunk-XKXKSQU7.js +92 -0
  343. package/dist/chunk-XKXKSQU7.js.map +1 -0
  344. package/dist/{chunk-JA3AK3PT.js → chunk-XNLXAWHX.js} +4 -4
  345. package/dist/{chunk-CULXMQJH.js → chunk-XPXEJRUB.js} +3 -3
  346. package/dist/chunk-XPXEJRUB.js.map +1 -0
  347. package/dist/{chunk-PZIAX57I.js → chunk-XR6DNK4U.js} +7 -4
  348. package/dist/chunk-XR6DNK4U.js.map +1 -0
  349. package/dist/{chunk-47VWKCAF.js → chunk-XSQ4SGM5.js} +33 -4
  350. package/dist/chunk-XSQ4SGM5.js.map +1 -0
  351. package/dist/{chunk-66DHUKLO.js → chunk-XSWKORGM.js} +16 -14
  352. package/dist/chunk-XSWKORGM.js.map +1 -0
  353. package/dist/{chunk-QR3C7BKQ.js → chunk-XZ4WBBB5.js} +7 -8
  354. package/dist/chunk-XZ4WBBB5.js.map +1 -0
  355. package/dist/{chunk-WNARATI3.js → chunk-Y2SXZ5KZ.js} +59 -11
  356. package/dist/chunk-Y2SXZ5KZ.js.map +1 -0
  357. package/dist/{chunk-QLLBRHAT.js → chunk-YDMVYYD2.js} +229 -264
  358. package/dist/chunk-YDMVYYD2.js.map +1 -0
  359. package/dist/{chunk-SIC6U3GZ.js → chunk-YHV3KRKS.js} +3 -3
  360. package/dist/{chunk-ZPKBYX2F.js → chunk-YNDLCWXS.js} +85 -9
  361. package/dist/chunk-YNDLCWXS.js.map +1 -0
  362. package/dist/{chunk-W6AQJ2PY.js → chunk-YNXOKMJP.js} +35 -16
  363. package/dist/chunk-YNXOKMJP.js.map +1 -0
  364. package/dist/{chunk-VLXA6PI2.js → chunk-YQMZ7IH2.js} +4 -4
  365. package/dist/{chunk-TMM4S4IJ.js → chunk-YR6GIWWY.js} +58 -8
  366. package/dist/chunk-YR6GIWWY.js.map +1 -0
  367. package/dist/{chunk-DK5LDEQM.js → chunk-YR7XMOWK.js} +39 -23
  368. package/dist/chunk-YR7XMOWK.js.map +1 -0
  369. package/dist/{chunk-U7EJOMFC.js → chunk-ZEY4KYRQ.js} +41 -14
  370. package/dist/chunk-ZEY4KYRQ.js.map +1 -0
  371. package/dist/chunk-ZFXCQPNO.js +27 -0
  372. package/dist/chunk-ZFXCQPNO.js.map +1 -0
  373. package/dist/citations.js +1 -1
  374. package/dist/{cli-kuh9PwZ5.d.ts → cli-CPe_2KB1.d.ts} +8 -31
  375. package/dist/cli.d.ts +10 -6
  376. package/dist/cli.js +124 -119
  377. package/dist/commitment-ledger.js +2 -2
  378. package/dist/compat/checks.js +1 -2
  379. package/dist/compounding/engine.d.ts +3 -2
  380. package/dist/compounding/engine.js +11 -11
  381. package/dist/compounding/preference-consolidator.d.ts +1 -0
  382. package/dist/compounding/preference-consolidator.js +8 -8
  383. package/dist/compounding/preference-consolidator.js.map +1 -1
  384. package/dist/compression-optimizer.d.ts +1 -0
  385. package/dist/compression-optimizer.js +1 -1
  386. package/dist/config.d.ts +1 -0
  387. package/dist/config.js +3 -2
  388. package/dist/connectors/codex-materialize-runner.d.ts +1 -0
  389. package/dist/connectors/codex-materialize-runner.js +12 -11
  390. package/dist/connectors/codex-materialize.d.ts +1 -0
  391. package/dist/connectors/codex-materialize.js +3 -2
  392. package/dist/connectors/index.d.ts +1 -0
  393. package/dist/connectors/index.js +14 -14
  394. package/dist/{connectors-cli-CwbyjGR7.d.ts → connectors-cli-DbTPNj2H.d.ts} +7 -1
  395. package/dist/connectors-cli.d.ts +1 -1
  396. package/dist/connectors-cli.js +3 -1
  397. package/dist/consolidation-provenance-check.d.ts +1 -0
  398. package/dist/consolidation-provenance-check.js +2 -2
  399. package/dist/consolidation-undo.d.ts +1 -0
  400. package/dist/consolidation-undo.js +1 -1
  401. package/dist/contradiction/index.d.ts +3 -1
  402. package/dist/contradiction/index.js +3 -3
  403. package/dist/{contradiction-review-ATP4S6IC.js → contradiction-review-6V2LXXK6.js} +2 -2
  404. package/dist/{contradiction-scan-5A4IDZV5.js → contradiction-scan-GIRVC4C7.js} +3 -3
  405. package/dist/conversation-index/backend.d.ts +3 -1
  406. package/dist/conversation-index/backend.js +3 -3
  407. package/dist/conversation-index/chunker.d.ts +1 -0
  408. package/dist/conversation-index/cleanup.js +1 -1
  409. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  410. package/dist/conversation-index/faiss-adapter.js +1 -1
  411. package/dist/conversation-index/indexer.d.ts +5 -2
  412. package/dist/conversation-index/indexer.js +1 -1
  413. package/dist/conversation-index/search.d.ts +2 -1
  414. package/dist/cross-namespace-budget.js +1 -1
  415. package/dist/cue-anchors.js +2 -2
  416. package/dist/dashboard-runtime.d.ts +6 -0
  417. package/dist/dashboard-runtime.js +3 -3
  418. package/dist/day-summary.d.ts +1 -0
  419. package/dist/day-summary.js +2 -2
  420. package/dist/delinearize.d.ts +1 -0
  421. package/dist/direct-answer-wiring.d.ts +1 -0
  422. package/dist/direct-answer.d.ts +1 -0
  423. package/dist/{dreams-ledger-LR2NBAZE.js → dreams-ledger-3WSCI5V4.js} +5 -4
  424. package/dist/{dreams-ledger-LR2NBAZE.js.map → dreams-ledger-3WSCI5V4.js.map} +1 -1
  425. package/dist/embedding-fallback.d.ts +3 -0
  426. package/dist/embedding-fallback.js +2 -2
  427. package/dist/enrichment/index.d.ts +1 -0
  428. package/dist/enrichment/index.js +1 -1
  429. package/dist/entity-retrieval.d.ts +2 -0
  430. package/dist/entity-retrieval.js +9 -9
  431. package/dist/entity-schema.d.ts +1 -0
  432. package/dist/evals.js +1 -1
  433. package/dist/explicit-capture.d.ts +5 -3
  434. package/dist/explicit-capture.js +2 -2
  435. package/dist/extraction-judge-telemetry.d.ts +2 -0
  436. package/dist/extraction-judge-training.d.ts +2 -0
  437. package/dist/extraction-judge.d.ts +2 -0
  438. package/dist/extraction.d.ts +2 -0
  439. package/dist/extraction.js +12 -12
  440. package/dist/{faiss-adapter-CzPghc4C.d.ts → faiss-adapter-BHecI1fF.d.ts} +4 -1
  441. package/dist/fallback-llm.d.ts +11 -1
  442. package/dist/fallback-llm.js +8 -6
  443. package/dist/{first-start-migration-4MHQEOSD.js → first-start-migration-CKTCTCQI.js} +5 -5
  444. package/dist/graph-dashboard-diff.d.ts +4 -0
  445. package/dist/graph-dashboard-diff.js +1 -1
  446. package/dist/graph-dashboard-parser.js +1 -1
  447. package/dist/{graph-edge-decay-5DI5GUNL.js → graph-edge-decay-MUP5J7CC.js} +6 -6
  448. package/dist/graph-events.js +1 -1
  449. package/dist/graph-snapshot.js +3 -3
  450. package/dist/graph.js +2 -2
  451. package/dist/harmonic-retrieval.js +4 -4
  452. package/dist/identity-continuity.d.ts +1 -0
  453. package/dist/importance.d.ts +1 -0
  454. package/dist/importers/index.d.ts +244 -0
  455. package/dist/importers/index.js +20 -0
  456. package/dist/index.d.ts +20 -350
  457. package/dist/index.js +885 -562
  458. package/dist/index.js.map +1 -1
  459. package/dist/intent.d.ts +1 -0
  460. package/dist/lcm/archive.d.ts +2 -2
  461. package/dist/lcm/archive.js +2 -2
  462. package/dist/lcm/engine.d.ts +3 -2
  463. package/dist/lcm/engine.js +6 -6
  464. package/dist/lcm/index.d.ts +1 -0
  465. package/dist/lcm/index.js +8 -8
  466. package/dist/lcm/recall.js +1 -1
  467. package/dist/lcm/summarizer.js +3 -3
  468. package/dist/lcm/tools.d.ts +1 -0
  469. package/dist/lifecycle.d.ts +1 -0
  470. package/dist/live-connectors-runner.d.ts +1 -0
  471. package/dist/live-connectors-runner.js +6 -6
  472. package/dist/local-llm.d.ts +1 -0
  473. package/dist/local-llm.js +2 -2
  474. package/dist/maintenance/archive-observations.js +1 -1
  475. package/dist/maintenance/memory-governance.d.ts +3 -1
  476. package/dist/maintenance/memory-governance.js +10 -8
  477. package/dist/maintenance/migrate-observations.js +3 -2
  478. package/dist/maintenance/observation-ledger-utils.d.ts +3 -0
  479. package/dist/maintenance/observation-ledger-utils.js +2 -1
  480. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -1
  481. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -8
  482. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -1
  483. package/dist/maintenance/rebuild-memory-projection.js +13 -10
  484. package/dist/maintenance/rebuild-observations.d.ts +1 -0
  485. package/dist/maintenance/rebuild-observations.js +3 -2
  486. package/dist/mcp-memory-inspector-app.d.ts +7 -4
  487. package/dist/mcp-memory-inspector-app.js +1 -1
  488. package/dist/memory-action-policy.d.ts +1 -0
  489. package/dist/memory-cache.d.ts +1 -0
  490. package/dist/memory-cache.js +1 -1
  491. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -0
  492. package/dist/memory-projection-store.d.ts +1 -0
  493. package/dist/memory-projection-store.js +1 -1
  494. package/dist/memory-provenance.d.ts +1 -0
  495. package/dist/memory-worth-outcomes.d.ts +1 -0
  496. package/dist/migrate/from-engram.js +2 -2
  497. package/dist/{migrate-from-identity-anchor-G27MCD6A.js → migrate-from-identity-anchor-EB4XI4Q2.js} +2 -2
  498. package/dist/model-registry.js +1 -1
  499. package/dist/models-json.d.ts +1 -0
  500. package/dist/namespaces/migrate.d.ts +3 -0
  501. package/dist/namespaces/migrate.js +26 -24
  502. package/dist/namespaces/principal.d.ts +1 -0
  503. package/dist/namespaces/principal.js +2 -1
  504. package/dist/namespaces/search.d.ts +2 -1
  505. package/dist/namespaces/search.js +17 -15
  506. package/dist/namespaces/storage.d.ts +4 -2
  507. package/dist/namespaces/storage.js +10 -9
  508. package/dist/native-knowledge.d.ts +1 -0
  509. package/dist/native-knowledge.js +1 -1
  510. package/dist/negative.js +1 -1
  511. package/dist/network/webdav.d.ts +16 -1
  512. package/dist/network/webdav.js +5 -3
  513. package/dist/objective-state-writers.js +4 -4
  514. package/dist/objective-state.js +2 -2
  515. package/dist/offline-sync.d.ts +4 -0
  516. package/dist/offline-sync.js +4 -4
  517. package/dist/operator-toolkit.d.ts +4 -1
  518. package/dist/operator-toolkit.js +37 -34
  519. package/dist/opik-exporter.js +1 -1
  520. package/dist/{orchestrator-DuWl9Hwx.d.ts → orchestrator-Co9nxRLF.d.ts} +4 -74
  521. package/dist/orchestrator.d.ts +5 -3
  522. package/dist/orchestrator.js +101 -98
  523. package/dist/page-versioning.js +1 -1
  524. package/dist/path-X2K5XCHL.js +9 -0
  525. package/dist/patterns-cli.d.ts +1 -0
  526. package/dist/peers/index.d.ts +328 -0
  527. package/dist/{peers-HCVGHMAE.js → peers/index.js} +4 -4
  528. package/dist/pipeline-D18UAKlN.d.ts +32 -0
  529. package/dist/plugin-entry-resolver.d.ts +9 -0
  530. package/dist/plugin-entry-resolver.js +8 -0
  531. package/dist/plugin-entry-resolver.js.map +1 -0
  532. package/dist/plugin-id.d.ts +2 -21
  533. package/dist/plugin-id.js +33 -4
  534. package/dist/plugin-id.js.map +1 -1
  535. package/dist/policy-runtime.d.ts +4 -0
  536. package/dist/policy-runtime.js +1 -1
  537. package/dist/profiling.js +1 -1
  538. package/dist/qmd-recall-cache.d.ts +1 -0
  539. package/dist/qmd.d.ts +2 -1
  540. package/dist/qmd.js +3 -3
  541. package/dist/recall-disclosure-escalation.d.ts +1 -0
  542. package/dist/recall-explain-renderer.d.ts +1 -0
  543. package/dist/recall-explain-renderer.js +3 -3
  544. package/dist/recall-state.d.ts +8 -1
  545. package/dist/recall-state.js +2 -1
  546. package/dist/recall-tag-filter.d.ts +1 -0
  547. package/dist/recall-xray-cli.d.ts +1 -0
  548. package/dist/recall-xray-cli.js +4 -4
  549. package/dist/recall-xray-renderer.d.ts +1 -0
  550. package/dist/recall-xray-renderer.js +3 -3
  551. package/dist/recall-xray.d.ts +1 -0
  552. package/dist/recall-xray.js +2 -2
  553. package/dist/relevance.d.ts +7 -1
  554. package/dist/relevance.js +2 -1
  555. package/dist/replay/normalizers/chatgpt.js +2 -2
  556. package/dist/replay/normalizers/claude.js +2 -2
  557. package/dist/replay/normalizers/openclaw.js +2 -2
  558. package/dist/replay/normalizers/shared.js +1 -1
  559. package/dist/replay/runner.js +1 -1
  560. package/dist/rerank.js +1 -1
  561. package/dist/{resolution-B7FNQSSP.js → resolution-ZY7VM6WS.js} +3 -3
  562. package/dist/resolution-ZY7VM6WS.js.map +1 -0
  563. package/dist/resolve-auth-token.d.ts +1 -0
  564. package/dist/resolve-auth-token.js +1 -1
  565. package/dist/resolve-provider-secret.d.ts +19 -29
  566. package/dist/resolve-provider-secret.js +2 -6
  567. package/dist/resume-bundles.js +10 -9
  568. package/dist/retrieval-agents.d.ts +2 -1
  569. package/dist/retrieval-agents.js +2 -1
  570. package/dist/retrieval-tiers.d.ts +1 -0
  571. package/dist/routing/engine.d.ts +1 -0
  572. package/dist/routing/store.d.ts +3 -0
  573. package/dist/routing/store.js +1 -1
  574. package/dist/runtime/env.js +1 -1
  575. package/dist/schemas.d.ts +191 -17
  576. package/dist/schemas.js +1 -1
  577. package/dist/sdk-compat.js +1 -1
  578. package/dist/search/document-scanner.js +1 -1
  579. package/dist/search/embed-helper.d.ts +7 -2
  580. package/dist/search/embed-helper.js +3 -1
  581. package/dist/search/factory.d.ts +2 -1
  582. package/dist/search/factory.js +15 -14
  583. package/dist/search/index.d.ts +2 -1
  584. package/dist/search/index.js +21 -20
  585. package/dist/search/lancedb-backend.d.ts +8 -7
  586. package/dist/search/lancedb-backend.js +4 -2
  587. package/dist/search/meilisearch-backend.d.ts +8 -7
  588. package/dist/search/meilisearch-backend.js +4 -2
  589. package/dist/search/noop-backend.d.ts +2 -1
  590. package/dist/search/noop-backend.js +1 -1
  591. package/dist/search/orama-backend.d.ts +10 -8
  592. package/dist/search/orama-backend.js +8 -4
  593. package/dist/search/port.d.ts +2 -1
  594. package/dist/search/remote-backend.d.ts +2 -1
  595. package/dist/search/remote-backend.js +1 -1
  596. package/dist/secure-store/index.d.ts +16 -3
  597. package/dist/secure-store/index.js +2 -2
  598. package/dist/{semantic-VwGI14Ok.d.ts → semantic-SLAa_prH.d.ts} +5 -3
  599. package/dist/semantic-consolidation.d.ts +1 -0
  600. package/dist/semantic-consolidation.js +14 -13
  601. package/dist/semantic-rule-promotion.js +8 -8
  602. package/dist/semantic-rule-verifier.d.ts +1 -0
  603. package/dist/semantic-rule-verifier.js +8 -8
  604. package/dist/session-integrity.d.ts +1 -0
  605. package/dist/session-integrity.js +1 -1
  606. package/dist/session-observer-bands.d.ts +1 -0
  607. package/dist/session-observer-state.d.ts +6 -1
  608. package/dist/session-observer-state.js +1 -1
  609. package/dist/shared-context/manager.d.ts +5 -0
  610. package/dist/shared-context/manager.js +3 -3
  611. package/dist/signal.d.ts +1 -0
  612. package/dist/signal.js +1 -1
  613. package/dist/source-attribution.js +1 -1
  614. package/dist/state-store-4QZISH3J.js +30 -0
  615. package/dist/state-store-4QZISH3J.js.map +1 -0
  616. package/dist/storage-C4DX8CuG.d.ts +157 -0
  617. package/dist/storage.d.ts +2 -0
  618. package/dist/storage.js +7 -7
  619. package/dist/store-contract.js +1 -1
  620. package/dist/summarizer.d.ts +1 -0
  621. package/dist/summarizer.js +7 -7
  622. package/dist/summary-snapshot.d.ts +1 -0
  623. package/dist/surfaces/dreams.js +48 -17
  624. package/dist/surfaces/dreams.js.map +1 -1
  625. package/dist/temporal-supersession.d.ts +1 -0
  626. package/dist/temporal-supersession.js +1 -1
  627. package/dist/temporal-validity.d.ts +1 -0
  628. package/dist/threading.d.ts +1 -0
  629. package/dist/tier-migration.d.ts +1 -0
  630. package/dist/tier-routing.d.ts +1 -0
  631. package/dist/{tier-stats-62ZVDFKS.js → tier-stats-SKML2OSF.js} +5 -5
  632. package/dist/tmt.js +1 -1
  633. package/dist/tokens.js +2 -2
  634. package/dist/topics.d.ts +1 -0
  635. package/dist/{trace-C5ETWBEF.js → trace-WM7V4CKI.js} +31 -1
  636. package/dist/trace-WM7V4CKI.js.map +1 -0
  637. package/dist/transcript.d.ts +1 -0
  638. package/dist/transcript.js +2 -2
  639. package/dist/transfer/autodetect.js +7 -7
  640. package/dist/transfer/backup.js +5 -5
  641. package/dist/transfer/capsule-export.js +5 -5
  642. package/dist/transfer/capsule-import.d.ts +6 -0
  643. package/dist/transfer/capsule-import.js +4 -4
  644. package/dist/transfer/export-json.js +3 -3
  645. package/dist/transfer/export-md.js +3 -3
  646. package/dist/transfer/export-sqlite.js +3 -3
  647. package/dist/transfer/fs-utils.d.ts +2 -1
  648. package/dist/transfer/fs-utils.js +5 -3
  649. package/dist/transfer/import-json.js +3 -3
  650. package/dist/transfer/import-md.js +3 -3
  651. package/dist/transfer/import-sqlite.js +3 -3
  652. package/dist/trust-zones.js +2 -2
  653. package/dist/types-B1VHaf2w.d.ts +126 -0
  654. package/dist/types-BliCnURB.d.ts +83 -0
  655. package/dist/types.d.ts +35 -0
  656. package/dist/types.js +1 -1
  657. package/dist/utility-learner.js +3 -3
  658. package/dist/utility-runtime.d.ts +1 -0
  659. package/dist/utility-runtime.js +4 -4
  660. package/dist/utility-telemetry.js +2 -2
  661. package/dist/verified-recall.js +9 -9
  662. package/dist/work/board.js +2 -2
  663. package/dist/work/boundary.js +1 -1
  664. package/dist/work/storage.d.ts +5 -0
  665. package/dist/work/storage.js +1 -1
  666. package/dist/work-product-ledger.js +2 -2
  667. package/package.json +74 -3
  668. package/scripts/ensure-better-sqlite3.mjs +8 -7
  669. package/scripts/faiss_index.py +141 -29
  670. package/src/access-cli.test.ts +87 -2
  671. package/src/access-cli.ts +59 -5
  672. package/src/access-http.test.ts +150 -0
  673. package/src/access-http.ts +103 -34
  674. package/src/access-idempotency.ts +136 -3
  675. package/src/access-mcp.test.ts +155 -0
  676. package/src/access-mcp.ts +116 -30
  677. package/src/access-schema.ts +22 -4
  678. package/src/access-service-namespace.test.ts +9 -9
  679. package/src/access-service-project-tag.test.ts +37 -0
  680. package/src/access-service.ts +15 -14
  681. package/src/active-recall.test.ts +29 -1
  682. package/src/active-recall.ts +11 -7
  683. package/src/adapters/claude-code.ts +7 -8
  684. package/src/adapters/codex.ts +6 -7
  685. package/src/adapters/hermes.ts +1 -5
  686. package/src/adapters/registry.test.ts +63 -0
  687. package/src/adapters/registry.ts +10 -0
  688. package/src/adapters/replit.ts +5 -7
  689. package/src/adapters/types.ts +24 -1
  690. package/src/behavior-signals.ts +1 -1
  691. package/src/binary-lifecycle/backend.ts +16 -4
  692. package/src/binary-lifecycle/pipeline.test.ts +149 -0
  693. package/src/binary-lifecycle/pipeline.ts +49 -7
  694. package/src/binary-lifecycle/scanner.ts +19 -4
  695. package/src/boxes.ts +119 -32
  696. package/src/buffer-session.test.ts +28 -0
  697. package/src/buffer.ts +10 -14
  698. package/src/bulk-import/types.ts +10 -0
  699. package/src/calibration.test.ts +99 -0
  700. package/src/calibration.ts +57 -13
  701. package/src/causal-consolidation.test.ts +214 -0
  702. package/src/causal-consolidation.ts +131 -14
  703. package/src/causal-retrieval.ts +16 -3
  704. package/src/citations.test.ts +75 -0
  705. package/src/citations.ts +19 -6
  706. package/src/cli.ts +134 -109
  707. package/src/coding/coding-namespace.test.ts +7 -0
  708. package/src/coding/coding-namespace.ts +8 -0
  709. package/src/coding/review-context.test.ts +30 -0
  710. package/src/coding/review-context.ts +79 -9
  711. package/src/coding/wire-coding-context.test.ts +16 -0
  712. package/src/compat/checks.test.ts +33 -0
  713. package/src/compat/checks.ts +64 -4
  714. package/src/compounding/engine.ts +2 -2
  715. package/src/compounding/preference-consolidator.test.ts +47 -0
  716. package/src/compounding/preference-consolidator.ts +8 -8
  717. package/src/compression-optimizer.ts +5 -2
  718. package/src/config.test.ts +34 -2
  719. package/src/config.ts +62 -18
  720. package/src/connectors/codex-materialize-runner.ts +4 -3
  721. package/src/connectors/codex-materialize.ts +149 -34
  722. package/src/connectors/index.test.ts +144 -7
  723. package/src/connectors/index.ts +86 -15
  724. package/src/connectors/live/github.test.ts +47 -0
  725. package/src/connectors/live/github.ts +29 -1
  726. package/src/connectors/live/index.ts +2 -0
  727. package/src/connectors/live/live-connectors.test.ts +359 -73
  728. package/src/connectors/live/notion.test.ts +84 -0
  729. package/src/connectors/live/notion.ts +18 -1
  730. package/src/connectors/live/state-store.ts +419 -38
  731. package/src/connectors/weclone-installer.test.ts +16 -18
  732. package/src/connectors-cli.ts +19 -0
  733. package/src/console/trace.test.ts +28 -0
  734. package/src/console/trace.ts +42 -5
  735. package/src/contradiction/contradiction-judge.test.ts +49 -0
  736. package/src/contradiction/contradiction-judge.ts +15 -5
  737. package/src/contradiction/contradiction-review.ts +31 -7
  738. package/src/contradiction/contradiction-scan.ts +28 -18
  739. package/src/contradiction/contradiction.test.ts +237 -1
  740. package/src/contradiction/resolution.ts +43 -4
  741. package/src/conversation-index/backend.ts +13 -5
  742. package/src/conversation-index/cleanup.ts +25 -4
  743. package/src/conversation-index/faiss-adapter.ts +24 -15
  744. package/src/conversation-index/indexer.test.ts +71 -10
  745. package/src/conversation-index/indexer.ts +22 -3
  746. package/src/cross-namespace-budget.test.ts +59 -0
  747. package/src/cross-namespace-budget.ts +15 -7
  748. package/src/curation/index.ts +18 -17
  749. package/src/dashboard-runtime.test.ts +98 -0
  750. package/src/dashboard-runtime.ts +96 -6
  751. package/src/dedup/index.test.ts +133 -0
  752. package/src/dedup/index.ts +73 -10
  753. package/src/dedup/semantic.test.ts +77 -2
  754. package/src/dedup/semantic.ts +26 -6
  755. package/src/embedding-fallback.ts +47 -15
  756. package/src/enrichment/audit.ts +8 -1
  757. package/src/enrichment/pipeline.ts +21 -13
  758. package/src/enrichment/web-search-provider.ts +1 -6
  759. package/src/entity-retrieval.ts +57 -6
  760. package/src/evals.ts +22 -13
  761. package/src/explicit-capture.test.ts +40 -0
  762. package/src/explicit-capture.ts +14 -2
  763. package/src/extraction.ts +42 -30
  764. package/src/fallback-llm.ts +35 -2
  765. package/src/graph-dashboard-diff.test.ts +57 -0
  766. package/src/graph-dashboard-diff.ts +24 -2
  767. package/src/graph-dashboard-parser.test.ts +31 -0
  768. package/src/graph-dashboard-parser.ts +4 -1
  769. package/src/graph-events.ts +6 -4
  770. package/src/graph.test.ts +69 -0
  771. package/src/graph.ts +7 -4
  772. package/src/importers/base.test.ts +70 -0
  773. package/src/importers/base.ts +56 -7
  774. package/src/index.ts +5 -2
  775. package/src/lcm/archive.ts +65 -16
  776. package/src/lcm/engine.ts +27 -8
  777. package/src/lcm/recall.ts +5 -5
  778. package/src/lcm-engine.test.ts +87 -1
  779. package/src/lcm-recall.test.ts +71 -0
  780. package/src/live-connectors-runner.ts +100 -36
  781. package/src/maintenance/archive-observations.ts +24 -3
  782. package/src/maintenance/atomic-file.ts +85 -0
  783. package/src/maintenance/dreams-ledger.ts +15 -8
  784. package/src/maintenance/memory-governance.test.ts +53 -0
  785. package/src/maintenance/memory-governance.ts +15 -5
  786. package/src/maintenance/observation-ledger-utils.ts +6 -5
  787. package/src/maintenance/purge.test.ts +64 -0
  788. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +22 -9
  789. package/src/maintenance/rebuild-memory-projection.ts +22 -9
  790. package/src/maintenance/rebuild-observations.ts +7 -3
  791. package/src/mcp-memory-inspector-app.ts +26 -3
  792. package/src/memory-cache.test.ts +19 -0
  793. package/src/memory-cache.ts +1 -0
  794. package/src/memory-extension/codex-publisher.ts +25 -4
  795. package/src/memory-extension-host/host-discovery.test.ts +69 -0
  796. package/src/memory-extension-host/host-discovery.ts +63 -6
  797. package/src/memory-projection-store.ts +114 -62
  798. package/src/message-parts/index.ts +46 -31
  799. package/src/message-parts/message-parts.test.ts +77 -0
  800. package/src/migrate/from-engram.ts +68 -14
  801. package/src/model-registry.test.ts +38 -0
  802. package/src/model-registry.ts +12 -7
  803. package/src/namespaces/identity.test.ts +66 -0
  804. package/src/namespaces/identity.ts +23 -0
  805. package/src/namespaces/migrate.test.ts +62 -0
  806. package/src/namespaces/migrate.ts +82 -14
  807. package/src/namespaces/principal.test.ts +37 -1
  808. package/src/namespaces/principal.ts +18 -7
  809. package/src/namespaces/search.test.ts +96 -7
  810. package/src/namespaces/search.ts +32 -25
  811. package/src/namespaces/storage.ts +93 -11
  812. package/src/native-knowledge.ts +23 -3
  813. package/src/negative.ts +50 -5
  814. package/src/network/webdav.ts +177 -58
  815. package/src/offline-sync.test.ts +128 -18
  816. package/src/offline-sync.ts +41 -7
  817. package/src/onboarding/index.test.ts +105 -0
  818. package/src/onboarding/index.ts +17 -5
  819. package/src/operator-toolkit.ts +43 -5
  820. package/src/orchestrator.ts +120 -27
  821. package/src/page-versioning.ts +31 -5
  822. package/src/peers/peers.test.ts +70 -0
  823. package/src/peers/storage.ts +32 -3
  824. package/src/plugin-entry-resolver.test.ts +60 -0
  825. package/src/plugin-entry-resolver.ts +48 -0
  826. package/src/plugin-id.test.ts +38 -0
  827. package/src/plugin-id.ts +31 -64
  828. package/src/policy-runtime.test.ts +75 -0
  829. package/src/policy-runtime.ts +32 -3
  830. package/src/procedural/procedure-miner.test.ts +152 -0
  831. package/src/procedural/procedure-miner.ts +124 -19
  832. package/src/profiling.test.ts +23 -0
  833. package/src/profiling.ts +10 -1
  834. package/src/projection/index.test.ts +253 -0
  835. package/src/projection/index.ts +159 -18
  836. package/src/qmd-client.test.ts +45 -0
  837. package/src/qmd.ts +13 -10
  838. package/src/recall-disclosure.test.ts +15 -1
  839. package/src/recall-state.ts +24 -5
  840. package/src/relevance.ts +24 -5
  841. package/src/replay/normalizers/chatgpt.ts +14 -4
  842. package/src/replay/normalizers/claude.ts +8 -3
  843. package/src/replay/normalizers/openclaw.ts +35 -12
  844. package/src/replay/normalizers/replay-normalizers.test.ts +65 -0
  845. package/src/replay/normalizers/shared.ts +4 -1
  846. package/src/replay/runner.ts +1 -1
  847. package/src/rerank.test.ts +41 -1
  848. package/src/rerank.ts +2 -2
  849. package/src/resolve-auth-token.test.ts +29 -0
  850. package/src/resolve-auth-token.ts +12 -7
  851. package/src/resolve-provider-secret.test.ts +78 -22
  852. package/src/resolve-provider-secret.ts +55 -223
  853. package/src/retrieval-agents.ts +51 -14
  854. package/src/review/index.test.ts +75 -1
  855. package/src/review/index.ts +88 -30
  856. package/src/routing/store.ts +36 -6
  857. package/src/runtime/env.test.ts +73 -0
  858. package/src/runtime/env.ts +7 -11
  859. package/src/schemas.ts +16 -1
  860. package/src/search/abort.ts +18 -0
  861. package/src/search/document-scanner.test.ts +80 -0
  862. package/src/search/document-scanner.ts +51 -9
  863. package/src/search/embed-helper.ts +19 -6
  864. package/src/search/factory.ts +9 -5
  865. package/src/search/lancedb-backend.ts +66 -23
  866. package/src/search/meilisearch-backend.ts +39 -13
  867. package/src/search/noop-backend.ts +1 -1
  868. package/src/search/orama-backend.test.ts +27 -0
  869. package/src/search/orama-backend.ts +69 -16
  870. package/src/search/port.ts +4 -1
  871. package/src/search/remote-backend.ts +1 -1
  872. package/src/secure-store/cli-handlers.ts +70 -6
  873. package/src/secure-store/cli-renderer.ts +13 -7
  874. package/src/secure-store/secure-fs.ts +11 -5
  875. package/src/secure-store/secure-store.test.ts +70 -0
  876. package/src/semantic-consolidation.test.ts +45 -0
  877. package/src/semantic-consolidation.ts +3 -3
  878. package/src/session-integrity.test.ts +98 -0
  879. package/src/session-integrity.ts +51 -1
  880. package/src/session-observer-state.ts +108 -41
  881. package/src/shared-context/manager.ts +93 -15
  882. package/src/signal.test.ts +14 -0
  883. package/src/signal.ts +8 -1
  884. package/src/source-attribution.test.ts +8 -0
  885. package/src/source-attribution.ts +24 -2
  886. package/src/spaces/index.test.ts +93 -0
  887. package/src/spaces/index.ts +75 -9
  888. package/src/storage.ts +14 -1
  889. package/src/store-contract.test.ts +35 -0
  890. package/src/store-contract.ts +39 -5
  891. package/src/summarizer.ts +24 -18
  892. package/src/summary-snapshot.test.ts +77 -0
  893. package/src/surfaces/dreams.test.ts +73 -0
  894. package/src/surfaces/dreams.ts +53 -19
  895. package/src/sync/index.ts +42 -17
  896. package/src/taxonomy/taxonomy-loader.ts +43 -4
  897. package/src/temporal-supersession.test.ts +67 -0
  898. package/src/temporal-supersession.ts +8 -0
  899. package/src/tmt.test.ts +50 -0
  900. package/src/tmt.ts +35 -11
  901. package/src/tokens.test.ts +18 -0
  902. package/src/tokens.ts +7 -0
  903. package/src/training-export/converter.test.ts +55 -2
  904. package/src/training-export/converter.ts +36 -10
  905. package/src/training-export/registry.test.ts +17 -0
  906. package/src/training-export/registry.ts +19 -1
  907. package/src/transcript.ts +2 -2
  908. package/src/transfer/backup.ts +18 -7
  909. package/src/transfer/capsule-crypto.ts +105 -21
  910. package/src/transfer/capsule-encrypt.test.ts +106 -7
  911. package/src/transfer/capsule-export.ts +23 -14
  912. package/src/transfer/capsule-import.ts +11 -2
  913. package/src/transfer/exclusions.ts +7 -0
  914. package/src/transfer/export-sqlite.ts +14 -13
  915. package/src/transfer/fs-utils.ts +52 -1
  916. package/src/transfer/import-json.ts +12 -7
  917. package/src/transfer/import-md.ts +5 -5
  918. package/src/transfer/import-sqlite.ts +4 -5
  919. package/src/trust-zones.ts +1 -1
  920. package/src/types.ts +25 -0
  921. package/src/utility-telemetry.ts +1 -1
  922. package/src/utils/category-dir.test.ts +15 -0
  923. package/src/utils/category-dir.ts +3 -1
  924. package/src/work/boundary.ts +30 -18
  925. package/src/work/storage.ts +116 -38
  926. package/src/work-product-ledger.ts +1 -1
  927. package/dist/chunk-25MQ7IHJ.js.map +0 -1
  928. package/dist/chunk-2IWUMAES.js.map +0 -1
  929. package/dist/chunk-2NMMFZ5T.js.map +0 -1
  930. package/dist/chunk-2PRLKQAH.js.map +0 -1
  931. package/dist/chunk-326G7DJK.js.map +0 -1
  932. package/dist/chunk-3APJ5EVB.js.map +0 -1
  933. package/dist/chunk-3KW65B36.js.map +0 -1
  934. package/dist/chunk-3QKK7QOS.js.map +0 -1
  935. package/dist/chunk-3SLRNYNG.js.map +0 -1
  936. package/dist/chunk-3VAL7ZL2.js.map +0 -1
  937. package/dist/chunk-3Y4P7RXM.js.map +0 -1
  938. package/dist/chunk-3ZLVGM76.js.map +0 -1
  939. package/dist/chunk-43PJZYGL.js.map +0 -1
  940. package/dist/chunk-47VWKCAF.js.map +0 -1
  941. package/dist/chunk-4KGVTPGD.js.map +0 -1
  942. package/dist/chunk-5375UYTQ.js.map +0 -1
  943. package/dist/chunk-56K5QLHX.js.map +0 -1
  944. package/dist/chunk-575RMLWN.js.map +0 -1
  945. package/dist/chunk-5NPGSAVB.js.map +0 -1
  946. package/dist/chunk-5RGLBDQF.js.map +0 -1
  947. package/dist/chunk-65PG43EQ.js.map +0 -1
  948. package/dist/chunk-66DHUKLO.js.map +0 -1
  949. package/dist/chunk-6LVVDPJ4.js.map +0 -1
  950. package/dist/chunk-76FLAAUC.js.map +0 -1
  951. package/dist/chunk-77H5NU3M.js.map +0 -1
  952. package/dist/chunk-7MNMYOFP.js.map +0 -1
  953. package/dist/chunk-7OZ53EXP.js.map +0 -1
  954. package/dist/chunk-7SEAZFFB.js.map +0 -1
  955. package/dist/chunk-A6KTB5R6.js.map +0 -1
  956. package/dist/chunk-AGZQD76C.js.map +0 -1
  957. package/dist/chunk-APO3DCMU.js.map +0 -1
  958. package/dist/chunk-BVF3AGJP.js.map +0 -1
  959. package/dist/chunk-C5BCH4ZS.js.map +0 -1
  960. package/dist/chunk-C7VW7C3F.js.map +0 -1
  961. package/dist/chunk-CULXMQJH.js.map +0 -1
  962. package/dist/chunk-CYFQJMUV.js.map +0 -1
  963. package/dist/chunk-D654IBA6.js +0 -61
  964. package/dist/chunk-D654IBA6.js.map +0 -1
  965. package/dist/chunk-DGXUHMOV.js.map +0 -1
  966. package/dist/chunk-DINWEURR.js.map +0 -1
  967. package/dist/chunk-DK5LDEQM.js.map +0 -1
  968. package/dist/chunk-EABGC2TL.js.map +0 -1
  969. package/dist/chunk-EHRTFRWW.js.map +0 -1
  970. package/dist/chunk-EJI5XIBB.js.map +0 -1
  971. package/dist/chunk-FAAFWE4G.js.map +0 -1
  972. package/dist/chunk-FAJ7FZYM.js +0 -11
  973. package/dist/chunk-FAJ7FZYM.js.map +0 -1
  974. package/dist/chunk-FDU6HUUL.js +0 -147
  975. package/dist/chunk-FDU6HUUL.js.map +0 -1
  976. package/dist/chunk-FIT6DMX6.js.map +0 -1
  977. package/dist/chunk-FJ43PRLT.js.map +0 -1
  978. package/dist/chunk-FLTNHQK6.js +0 -262
  979. package/dist/chunk-FLTNHQK6.js.map +0 -1
  980. package/dist/chunk-GDFS42HT.js.map +0 -1
  981. package/dist/chunk-H3ME6L6D.js.map +0 -1
  982. package/dist/chunk-HXXBL2KD.js.map +0 -1
  983. package/dist/chunk-ICRIXAP2.js.map +0 -1
  984. package/dist/chunk-IQT3XTKW.js.map +0 -1
  985. package/dist/chunk-JR4ZC3G4.js.map +0 -1
  986. package/dist/chunk-K4FLSOR5.js.map +0 -1
  987. package/dist/chunk-KNKUID7G.js.map +0 -1
  988. package/dist/chunk-KOSORCJG.js.map +0 -1
  989. package/dist/chunk-LIRZNNUP.js.map +0 -1
  990. package/dist/chunk-LLQ2LLWF.js.map +0 -1
  991. package/dist/chunk-LPMVBPA3.js +0 -236
  992. package/dist/chunk-LPMVBPA3.js.map +0 -1
  993. package/dist/chunk-LT3NLYSI.js.map +0 -1
  994. package/dist/chunk-LUDTDZLK.js.map +0 -1
  995. package/dist/chunk-MJFNCJXV.js.map +0 -1
  996. package/dist/chunk-MSWG7JI6.js.map +0 -1
  997. package/dist/chunk-MXC3AP5I.js.map +0 -1
  998. package/dist/chunk-MXFBBHJU.js.map +0 -1
  999. package/dist/chunk-MZH6EHNR.js.map +0 -1
  1000. package/dist/chunk-N2D6GXBM.js.map +0 -1
  1001. package/dist/chunk-NBNN5GOB.js.map +0 -1
  1002. package/dist/chunk-NMZY542O.js.map +0 -1
  1003. package/dist/chunk-NZL6GGQE.js.map +0 -1
  1004. package/dist/chunk-OZHRDTDX.js.map +0 -1
  1005. package/dist/chunk-PIRJPV5T.js.map +0 -1
  1006. package/dist/chunk-PZIAX57I.js.map +0 -1
  1007. package/dist/chunk-Q7P4WJDP.js.map +0 -1
  1008. package/dist/chunk-QA2ZAPBU.js.map +0 -1
  1009. package/dist/chunk-QDZ2RLEC.js.map +0 -1
  1010. package/dist/chunk-QLLBRHAT.js.map +0 -1
  1011. package/dist/chunk-QR3C7BKQ.js.map +0 -1
  1012. package/dist/chunk-RHY3HH7P.js.map +0 -1
  1013. package/dist/chunk-RK2Y4XOM.js.map +0 -1
  1014. package/dist/chunk-RR2PKP3I.js +0 -63
  1015. package/dist/chunk-RR2PKP3I.js.map +0 -1
  1016. package/dist/chunk-RRF5UOBJ.js.map +0 -1
  1017. package/dist/chunk-RXDLTSWT.js.map +0 -1
  1018. package/dist/chunk-RYED3SPJ.js +0 -42
  1019. package/dist/chunk-RYED3SPJ.js.map +0 -1
  1020. package/dist/chunk-S7KDBTWT.js.map +0 -1
  1021. package/dist/chunk-TK4UEOSK.js.map +0 -1
  1022. package/dist/chunk-TMM4S4IJ.js.map +0 -1
  1023. package/dist/chunk-TMQLARTH.js.map +0 -1
  1024. package/dist/chunk-TPB3I2AC.js.map +0 -1
  1025. package/dist/chunk-TPMQ3G6Z.js.map +0 -1
  1026. package/dist/chunk-TPU5L5EY.js.map +0 -1
  1027. package/dist/chunk-TZOLIGIG.js.map +0 -1
  1028. package/dist/chunk-U3WSW6PZ.js.map +0 -1
  1029. package/dist/chunk-U4SCL7B7.js.map +0 -1
  1030. package/dist/chunk-U66YHYC7.js +0 -31
  1031. package/dist/chunk-U66YHYC7.js.map +0 -1
  1032. package/dist/chunk-U7EJOMFC.js.map +0 -1
  1033. package/dist/chunk-UWVJF25J.js.map +0 -1
  1034. package/dist/chunk-VBJ7V5SK.js.map +0 -1
  1035. package/dist/chunk-W3LR522O.js.map +0 -1
  1036. package/dist/chunk-W4L6CZKA.js.map +0 -1
  1037. package/dist/chunk-W6AQJ2PY.js.map +0 -1
  1038. package/dist/chunk-WELDCG6C.js.map +0 -1
  1039. package/dist/chunk-WNARATI3.js.map +0 -1
  1040. package/dist/chunk-WPGJYVUH.js.map +0 -1
  1041. package/dist/chunk-WW3QQF4H.js.map +0 -1
  1042. package/dist/chunk-XIG5PDM7.js.map +0 -1
  1043. package/dist/chunk-XKECPATV.js.map +0 -1
  1044. package/dist/chunk-XKLD5OK4.js.map +0 -1
  1045. package/dist/chunk-XSZEP4SF.js.map +0 -1
  1046. package/dist/chunk-XVVIG67A.js.map +0 -1
  1047. package/dist/chunk-XYIK4LF6.js.map +0 -1
  1048. package/dist/chunk-YRMVARQP.js.map +0 -1
  1049. package/dist/chunk-YROHKYBY.js.map +0 -1
  1050. package/dist/chunk-YU5KIWYQ.js.map +0 -1
  1051. package/dist/chunk-ZAVUCJ4H.js.map +0 -1
  1052. package/dist/chunk-ZPKBYX2F.js.map +0 -1
  1053. package/dist/chunk-ZTFCYYEZ.js.map +0 -1
  1054. package/dist/chunk-ZYVPLJ4T.js.map +0 -1
  1055. package/dist/path-MR5JPYOP.js +0 -9
  1056. package/dist/state-store-VZU2IA53.js +0 -16
  1057. package/dist/trace-C5ETWBEF.js.map +0 -1
  1058. /package/dist/{capsule-crypto-5CYAGVC5.js.map → bulk-import/index.js.map} +0 -0
  1059. /package/dist/{contradiction-review-ATP4S6IC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  1060. /package/dist/{capsule-merge-4MGKE7C5.js.map → capsule-merge-T2JRE46P.js.map} +0 -0
  1061. /package/dist/{chunk-SAZS2QZB.js.map → chunk-23UORJ4S.js.map} +0 -0
  1062. /package/dist/{chunk-PK7H5L6Y.js.map → chunk-2NM43EWN.js.map} +0 -0
  1063. /package/dist/{chunk-PYXS46O7.js.map → chunk-3BP57I6J.js.map} +0 -0
  1064. /package/dist/{chunk-FBYESMQ2.js.map → chunk-3C5RPJAX.js.map} +0 -0
  1065. /package/dist/{chunk-N53K2EXC.js.map → chunk-6VF75M3X.js.map} +0 -0
  1066. /package/dist/{chunk-6H2TESSP.js.map → chunk-765K3SAT.js.map} +0 -0
  1067. /package/dist/{chunk-EDTHC6UD.js.map → chunk-77NAFXUD.js.map} +0 -0
  1068. /package/dist/{chunk-MGKYQQYF.js.map → chunk-7Q3RCKAQ.js.map} +0 -0
  1069. /package/dist/{chunk-34DQE4KF.js.map → chunk-CO7ZO4TU.js.map} +0 -0
  1070. /package/dist/{chunk-ZKSK55RC.js.map → chunk-ETUPBUHB.js.map} +0 -0
  1071. /package/dist/{chunk-QRNI5JBH.js.map → chunk-EYIEWJNI.js.map} +0 -0
  1072. /package/dist/{chunk-C6QPK5GG.js.map → chunk-FZZ2QTJI.js.map} +0 -0
  1073. /package/dist/{chunk-3JXBXXM2.js.map → chunk-G4IAEX6D.js.map} +0 -0
  1074. /package/dist/{chunk-2WWLHTZY.js.map → chunk-IC4GELZE.js.map} +0 -0
  1075. /package/dist/{chunk-PCUKNJAZ.js.map → chunk-JKV57BTN.js.map} +0 -0
  1076. /package/dist/{chunk-2KI4QFHU.js.map → chunk-LMDRGRJ2.js.map} +0 -0
  1077. /package/dist/{chunk-MY6TPVXW.js.map → chunk-LMPHTYJC.js.map} +0 -0
  1078. /package/dist/{chunk-5HRY2WRF.js.map → chunk-LZ3VEOU5.js.map} +0 -0
  1079. /package/dist/{chunk-NGAVDO7E.js.map → chunk-OADWQ5CR.js.map} +0 -0
  1080. /package/dist/{chunk-DOM4GKSW.js.map → chunk-OZKVVUJB.js.map} +0 -0
  1081. /package/dist/{chunk-MT4HVDUZ.js.map → chunk-PM3QHTFT.js.map} +0 -0
  1082. /package/dist/{chunk-ZK7I7JYV.js.map → chunk-R3PS27B4.js.map} +0 -0
  1083. /package/dist/{chunk-SKE7JYKA.js.map → chunk-SFXKHM7P.js.map} +0 -0
  1084. /package/dist/{chunk-HMDCOMYU.js.map → chunk-SKGV326D.js.map} +0 -0
  1085. /package/dist/{chunk-5UM2VJ6D.js.map → chunk-UEY3VB6W.js.map} +0 -0
  1086. /package/dist/{chunk-GIF42EW3.js.map → chunk-UP6MOYCB.js.map} +0 -0
  1087. /package/dist/{chunk-MRILGULB.js.map → chunk-V2RCP53Q.js.map} +0 -0
  1088. /package/dist/{chunk-FSFEQI74.js.map → chunk-W7L6HXUC.js.map} +0 -0
  1089. /package/dist/{chunk-3IQ2TR4N.js.map → chunk-WLEB7WCG.js.map} +0 -0
  1090. /package/dist/{chunk-GL6I6MEQ.js.map → chunk-WSGF57U2.js.map} +0 -0
  1091. /package/dist/{chunk-JA3AK3PT.js.map → chunk-XNLXAWHX.js.map} +0 -0
  1092. /package/dist/{chunk-SIC6U3GZ.js.map → chunk-YHV3KRKS.js.map} +0 -0
  1093. /package/dist/{chunk-VLXA6PI2.js.map → chunk-YQMZ7IH2.js.map} +0 -0
  1094. /package/dist/{contradiction-scan-5A4IDZV5.js.map → contradiction-review-6V2LXXK6.js.map} +0 -0
  1095. /package/dist/{migrate-from-identity-anchor-G27MCD6A.js.map → contradiction-scan-GIRVC4C7.js.map} +0 -0
  1096. /package/dist/{first-start-migration-4MHQEOSD.js.map → first-start-migration-CKTCTCQI.js.map} +0 -0
  1097. /package/dist/{graph-edge-decay-5DI5GUNL.js.map → graph-edge-decay-MUP5J7CC.js.map} +0 -0
  1098. /package/dist/{path-MR5JPYOP.js.map → importers/index.js.map} +0 -0
  1099. /package/dist/{peers-HCVGHMAE.js.map → migrate-from-identity-anchor-EB4XI4Q2.js.map} +0 -0
  1100. /package/dist/{resolution-B7FNQSSP.js.map → path-X2K5XCHL.js.map} +0 -0
  1101. /package/dist/{state-store-VZU2IA53.js.map → peers/index.js.map} +0 -0
  1102. /package/dist/{tier-stats-62ZVDFKS.js.map → tier-stats-SKML2OSF.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/native-knowledge.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport { mkdir, readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport { log } from \"./logger.js\";\nimport type {\n NativeKnowledgeConfig,\n NativeKnowledgeObsidianVaultConfig,\n} from \"./types.js\";\n\nexport type NativeKnowledgeChunk = {\n chunkId: string;\n sourcePath: string;\n title: string;\n sourceKind:\n | \"identity\"\n | \"memory\"\n | \"workspace_doc\"\n | \"obsidian_note\"\n | \"bootstrap_doc\"\n | \"handoff\"\n | \"daily_summary\"\n | \"automation_note\";\n startLine: number;\n endLine: number;\n content: string;\n vaultId?: string;\n notePath?: string;\n noteKey?: string;\n derivedDate?: string;\n tags?: string[];\n aliases?: string[];\n wikilinks?: string[];\n backlinks?: string[];\n namespace?: string;\n privacyClass?: string;\n sourceHash?: string;\n mtimeMs?: number;\n sessionKey?: string;\n workflowKey?: string;\n author?: string;\n agent?: string;\n};\n\nexport type NativeKnowledgeSearchResult = NativeKnowledgeChunk & {\n score: number;\n};\n\ninterface ParsedFrontmatter {\n body: string;\n bodyStartLine: number;\n data: Record<string, string | string[]>;\n}\n\ninterface ObsidianNoteState {\n noteKey: string;\n notePath: string;\n title: string;\n derivedDate?: string;\n tags: string[];\n aliases: string[];\n wikilinks: string[];\n backlinks: string[];\n namespace?: string;\n privacyClass?: string;\n sourceHash: string;\n mtimeMs: number;\n deleted: boolean;\n deletedAt?: string;\n chunks: NativeKnowledgeChunk[];\n}\n\ninterface ObsidianVaultState {\n vaultId: string;\n rootDir: string;\n syncedAt: string;\n notes: Record<string, ObsidianNoteState>;\n}\n\ninterface ObsidianSyncState {\n version: 1;\n updatedAt: string;\n vaults: Record<string, ObsidianVaultState>;\n}\n\ninterface OpenClawWorkspaceFileState {\n sourcePath: string;\n sourceKind: Exclude<NativeKnowledgeChunk[\"sourceKind\"], \"obsidian_note\">;\n title: string;\n namespace?: string;\n privacyClass?: string;\n derivedDate?: string;\n sessionKey?: string;\n workflowKey?: string;\n author?: string;\n agent?: string;\n sourceHash: string;\n syncConfigHash: string;\n mtimeMs: number;\n deleted: boolean;\n deletedAt?: string;\n chunks: NativeKnowledgeChunk[];\n}\n\ninterface OpenClawWorkspaceSyncState {\n version: 1;\n updatedAt: string;\n files: Record<string, OpenClawWorkspaceFileState>;\n}\n\ninterface CuratedIncludeFileState {\n sourcePath: string;\n sourceKind: Extract<NativeKnowledgeChunk[\"sourceKind\"], \"identity\" | \"memory\" | \"workspace_doc\">;\n title: string;\n namespace?: string;\n privacyClass?: string;\n derivedDate?: string;\n sourceHash: string;\n syncConfigHash: string;\n mtimeMs: number;\n deleted: boolean;\n deletedAt?: string;\n chunks: NativeKnowledgeChunk[];\n}\n\ninterface CuratedIncludeFilesSyncState {\n version: 1;\n updatedAt: string;\n files: Record<string, CuratedIncludeFileState>;\n}\n\nexport interface NativeKnowledgeSyncResult {\n statePath: string;\n vaultCount: number;\n touchedNotes: number;\n deletedNotes: number;\n chunkCount: number;\n activeChunks: NativeKnowledgeChunk[];\n}\n\nconst PERSISTED_NATIVE_KNOWLEDGE_STATE_FILES = new Set([\n \"obsidian-sync.json\",\n \"curated-include-sync.json\",\n \"openclaw-workspace-sync.json\",\n]);\n\nfunction normalizeText(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]+/g, \" \").trim();\n}\n\nfunction tokenize(value: string): string[] {\n return normalizeText(value).split(/\\s+/).filter((token) => token.length >= 2);\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n return [...new Set(values.filter((value) => value.trim().length > 0).map((value) => value.trim()))].sort();\n}\n\nfunction detectSourceKind(filePath: string): CuratedIncludeFileState[\"sourceKind\"] {\n const base = path.basename(filePath).toLowerCase();\n if (base.startsWith(\"identity\")) return \"identity\";\n if (base === \"memory.md\") return \"memory\";\n return \"workspace_doc\";\n}\n\nfunction parseInlineArray(raw: string): string[] {\n const trimmed = raw.trim();\n if (!trimmed.startsWith(\"[\") || !trimmed.endsWith(\"]\")) return [];\n return trimmed\n .slice(1, -1)\n .split(\",\")\n .map((value) => value.trim().replace(/^['\"]|['\"]$/g, \"\"))\n .filter(Boolean);\n}\n\nfunction parseFrontmatter(content: string): ParsedFrontmatter {\n const normalized = content.replace(/\\r\\n/g, \"\\n\");\n if (!normalized.startsWith(\"---\\n\")) return { body: normalized, bodyStartLine: 1, data: {} };\n const closing = normalized.indexOf(\"\\n---\\n\", 4);\n if (closing === -1) return { body: normalized, bodyStartLine: 1, data: {} };\n\n const data: Record<string, string | string[]> = {};\n const lines = normalized.slice(4, closing).split(\"\\n\");\n let index = 0;\n while (index < lines.length) {\n const line = lines[index] ?? \"\";\n const match = /^([A-Za-z0-9_-]+):\\s*(.*)$/.exec(line);\n if (!match) {\n index += 1;\n continue;\n }\n const [, key, rawValue] = match;\n if (rawValue.trim().length > 0) {\n const inlineArray = parseInlineArray(rawValue);\n data[key] = inlineArray.length > 0 ? inlineArray : rawValue.trim().replace(/^['\"]|['\"]$/g, \"\");\n index += 1;\n continue;\n }\n\n const items: string[] = [];\n let cursor = index + 1;\n while (cursor < lines.length) {\n const next = lines[cursor] ?? \"\";\n const itemMatch = /^\\s*-\\s*(.+)$/.exec(next);\n if (!itemMatch) break;\n items.push(itemMatch[1]!.trim().replace(/^['\"]|['\"]$/g, \"\"));\n cursor += 1;\n }\n data[key] = items;\n index = cursor;\n }\n\n return {\n body: normalized.slice(closing + 5),\n bodyStartLine: normalized.slice(0, closing + 5).split(\"\\n\").length,\n data,\n };\n}\n\nfunction firstStringValue(\n data: Record<string, string | string[]>,\n keys: string[],\n): string | undefined {\n for (const key of keys) {\n const value = data[key];\n if (typeof value === \"string\" && value.trim().length > 0) return value.trim();\n }\n return undefined;\n}\n\nfunction normalizeIsoDate(value: string | undefined): string | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n const isoDateMatch = /^(\\d{4}-\\d{2}-\\d{2})/.exec(trimmed);\n if (isoDateMatch) return isoDateMatch[1];\n const slashDateMatch = /^(\\d{4})[\\/_](\\d{2})[\\/_](\\d{2})$/.exec(trimmed);\n if (slashDateMatch) return `${slashDateMatch[1]}-${slashDateMatch[2]}-${slashDateMatch[3]}`;\n return undefined;\n}\n\nfunction deriveDateFromPath(filePath: string): string | undefined {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const hyphenated = /(\\d{4}-\\d{2}-\\d{2})/.exec(normalized);\n if (hyphenated) return hyphenated[1];\n const split = /(^|\\/)(\\d{4})\\/(\\d{2})\\/(\\d{2})(?=\\/|[^/\\n]*\\.md$)/.exec(normalized);\n if (split) return `${split[2]}-${split[3]}-${split[4]}`;\n return undefined;\n}\n\nfunction deriveArtifactDate(filePath: string, parsed: ParsedFrontmatter): string | undefined {\n return (\n normalizeIsoDate(firstStringValue(parsed.data, [\"date\", \"recordedAt\", \"generatedAt\", \"summaryDate\", \"day\"]))\n ?? deriveDateFromPath(filePath)\n );\n}\n\nfunction deriveNamespaceFromIncludePath(sourcePath: string): string | undefined {\n const basename = path.basename(sourcePath);\n const match = /^identity\\.([^.\\/]+)\\.md$/i.exec(basename);\n return match?.[1];\n}\n\nfunction compileDailyNotePattern(pattern: string): RegExp {\n const escaped = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regex = escaped\n .replace(/YYYY/g, \"(?<year>\\\\d{4})\")\n .replace(/MM/g, \"(?<month>\\\\d{2})\")\n .replace(/DD/g, \"(?<day>\\\\d{2})\");\n return new RegExp(`^${regex}$`);\n}\n\nfunction deriveDailyNoteDate(notePath: string, patterns: string[]): string | undefined {\n const withoutExt = notePath.replace(/\\.md$/i, \"\");\n for (const pattern of patterns) {\n const match = compileDailyNotePattern(pattern).exec(withoutExt);\n if (!match?.groups) continue;\n const { year, month, day } = match.groups;\n if (!year || !month || !day) continue;\n return `${year}-${month}-${day}`;\n }\n return undefined;\n}\n\nfunction extractInlineTags(content: string): string[] {\n const matches = [...content.matchAll(/(^|\\s)#([a-z0-9/_-]+)/gi)];\n return uniqueSorted(matches.map((match) => match[2] ?? \"\"));\n}\n\nfunction extractWikilinks(content: string): { targets: string[]; aliases: string[] } {\n const targets: string[] = [];\n const aliases: string[] = [];\n const regex = /\\[\\[([^\\]|#]+)(?:#[^\\]|]+)?(?:\\|([^\\]]+))?\\]\\]/g;\n for (const match of content.matchAll(regex)) {\n const target = (match[1] ?? \"\").trim();\n const alias = (match[2] ?? \"\").trim();\n if (target) targets.push(target);\n if (alias) aliases.push(alias);\n }\n return {\n targets: uniqueSorted(targets),\n aliases: uniqueSorted(aliases),\n };\n}\n\nfunction normalizePathPrefix(prefix: string): string {\n const fwd = prefix.replace(/\\\\/g, \"/\");\n let start = 0;\n while (start < fwd.length && fwd[start] === \"/\") start++;\n let end = fwd.length;\n while (end > start && fwd[end - 1] === \"/\") end--;\n return fwd.substring(start, end);\n}\n\nfunction classifyObsidianNote(\n notePath: string,\n vault: NativeKnowledgeObsidianVaultConfig,\n): { namespace?: string; privacyClass?: string } {\n let namespace = vault.namespace;\n let privacyClass = vault.privacyClass;\n const normalizedPath = notePath.replace(/\\\\/g, \"/\");\n const rules = [...vault.folderRules].sort(\n (a, b) => normalizePathPrefix(b.pathPrefix).length - normalizePathPrefix(a.pathPrefix).length,\n );\n\n for (const rule of rules) {\n const prefix = normalizePathPrefix(rule.pathPrefix);\n if (!prefix) continue;\n if (normalizedPath === prefix || normalizedPath.startsWith(`${prefix}/`)) {\n namespace = rule.namespace ?? namespace;\n privacyClass = rule.privacyClass ?? privacyClass;\n break;\n }\n }\n\n return { namespace, privacyClass };\n}\n\nfunction chunkHeadingAware(options: {\n sourcePath: string;\n content: string;\n maxChunkChars: number;\n startLineOffset?: number;\n createChunk: (args: {\n title: string;\n startLine: number;\n endLine: number;\n content: string;\n }) => NativeKnowledgeChunk;\n}): NativeKnowledgeChunk[] {\n const lines = options.content.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const chunks: NativeKnowledgeChunk[] = [];\n let currentTitle = path.basename(options.sourcePath);\n let currentLines: string[] = [];\n let startLine = 1 + (options.startLineOffset ?? 0);\n\n const flush = () => {\n const paragraphs: Array<{\n content: string;\n startLine: number;\n endLine: number;\n }> = [];\n let paragraphLines: string[] = [];\n let paragraphStartOffset: number | null = null;\n\n const pushParagraph = (lineOffsetExclusive: number) => {\n if (paragraphLines.length === 0 || paragraphStartOffset === null) return;\n paragraphs.push({\n content: paragraphLines.join(\"\\n\").trim(),\n startLine: startLine + paragraphStartOffset,\n endLine: startLine + lineOffsetExclusive - 1,\n });\n paragraphLines = [];\n paragraphStartOffset = null;\n };\n\n for (let index = 0; index < currentLines.length; index += 1) {\n const line = currentLines[index] ?? \"\";\n const isListLine = /^\\s*(?:[-*+]|\\d+\\.)\\s+/.test(line);\n const previousLine = index > 0 ? (currentLines[index - 1] ?? \"\") : \"\";\n const previousWasList = /^\\s*(?:[-*+]|\\d+\\.)\\s+/.test(previousLine);\n if (line.trim().length === 0) {\n pushParagraph(index);\n continue;\n }\n if (isListLine && paragraphLines.length > 0 && !previousWasList) {\n pushParagraph(index);\n }\n if (paragraphStartOffset === null) paragraphStartOffset = index;\n paragraphLines.push(line);\n }\n pushParagraph(currentLines.length);\n\n if (paragraphs.length === 0) return;\n\n const body = paragraphs.map((paragraph) => paragraph.content).join(\"\\n\\n\");\n if (body.length <= options.maxChunkChars) {\n chunks.push(options.createChunk({\n title: currentTitle,\n startLine: paragraphs[0]!.startLine,\n endLine: paragraphs[paragraphs.length - 1]!.endLine,\n content: body,\n }));\n return;\n }\n\n let buffer = \"\";\n let bufferStartLine = paragraphs[0]!.startLine;\n let bufferEndLine = paragraphs[0]!.endLine;\n\n for (const paragraph of paragraphs) {\n const next = buffer.length > 0 ? `${buffer}\\n\\n${paragraph.content}` : paragraph.content;\n if (next.length > options.maxChunkChars && buffer.length > 0) {\n chunks.push(options.createChunk({\n title: currentTitle,\n startLine: bufferStartLine,\n endLine: bufferEndLine,\n content: buffer,\n }));\n buffer = paragraph.content;\n bufferStartLine = paragraph.startLine;\n bufferEndLine = paragraph.endLine;\n } else {\n buffer = next;\n bufferEndLine = paragraph.endLine;\n }\n }\n\n if (buffer.length > 0) {\n chunks.push(options.createChunk({\n title: currentTitle,\n startLine: bufferStartLine,\n endLine: bufferEndLine,\n content: buffer,\n }));\n }\n };\n\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index] ?? \"\";\n if (/^#{1,6}\\s+/.test(line) && currentLines.length > 0) {\n flush();\n currentLines = [];\n currentTitle = line.replace(/^#{1,6}\\s+/, \"\").trim() || currentTitle;\n startLine = index + 2 + (options.startLineOffset ?? 0);\n continue;\n }\n if (/^#{1,6}\\s+/.test(line)) {\n currentTitle = line.replace(/^#{1,6}\\s+/, \"\").trim() || currentTitle;\n startLine = index + 2 + (options.startLineOffset ?? 0);\n continue;\n }\n currentLines.push(line);\n }\n\n flush();\n return chunks;\n}\n\nasync function readableFile(filePath: string): Promise<boolean> {\n try {\n const info = await stat(filePath);\n return info.isFile();\n } catch {\n return false;\n }\n}\n\nasync function resolveCandidatePaths(options: {\n workspaceDir: string;\n includeFiles: string[];\n recallNamespaces?: string[];\n defaultNamespace: string;\n identityVariantMode: \"recall\" | \"disk\";\n}): Promise<string[]> {\n const out = new Set<string>();\n const workspaceRoot = path.resolve(options.workspaceDir);\n const resolveWorkspaceFile = (relativePath: string): string | null => {\n if (path.isAbsolute(relativePath)) return null;\n const resolved = path.resolve(workspaceRoot, relativePath);\n const relative = path.relative(workspaceRoot, resolved);\n if (relative === \"..\" || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {\n return null;\n }\n return resolved;\n };\n const safeIdentityNamespace = (namespace: string): string | null => {\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(namespace)) return null;\n if (namespace.includes(\"..\")) return null;\n return namespace;\n };\n for (const rel of options.includeFiles) {\n const trimmed = rel.trim();\n if (!trimmed) continue;\n const candidatePath = resolveWorkspaceFile(trimmed);\n if (candidatePath === null) continue;\n out.add(candidatePath);\n if (path.basename(trimmed).toLowerCase() !== \"identity.md\") continue;\n\n const relativeDir = path.dirname(trimmed);\n if (options.identityVariantMode === \"recall\") {\n if (!Array.isArray(options.recallNamespaces)) continue;\n for (const namespace of options.recallNamespaces) {\n if (!namespace || namespace === options.defaultNamespace) continue;\n const safeNamespace = safeIdentityNamespace(namespace);\n if (safeNamespace === null) continue;\n const variantPath = resolveWorkspaceFile(path.join(relativeDir, `IDENTITY.${safeNamespace}.md`));\n if (variantPath !== null) out.add(variantPath);\n }\n continue;\n }\n\n const absoluteDir = path.dirname(candidatePath);\n let entries: string[] = [];\n try {\n entries = await readdir(absoluteDir);\n } catch {\n continue;\n }\n for (const entry of entries) {\n if (!/^identity\\.[^.\\/]+\\.md$/i.test(entry)) continue;\n const variantPath = resolveWorkspaceFile(path.join(relativeDir, entry));\n if (variantPath !== null) out.add(variantPath);\n }\n }\n return Array.from(out);\n}\n\nfunction resolveNoteTitle(notePath: string, parsed: ParsedFrontmatter): string {\n const rawTitle = parsed.data.title;\n if (typeof rawTitle === \"string\" && rawTitle.trim().length > 0) return rawTitle.trim();\n const heading = parsed.body.match(/^#{1,6}\\s+(.+)$/m)?.[1]?.trim();\n if (heading) return heading;\n return path.basename(notePath, path.extname(notePath));\n}\n\nfunction parseFrontmatterList(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return uniqueSorted(value);\n if (typeof value === \"string\" && value.trim().length > 0) return [value.trim()];\n return [];\n}\n\nfunction toPosixRelative(rootDir: string, filePath: string): string {\n return path.relative(rootDir, filePath).split(path.sep).join(\"/\");\n}\n\nfunction globToRegExp(glob: string): RegExp {\n let regex = \"^\";\n for (let index = 0; index < glob.length; index += 1) {\n const char = glob[index]!;\n const next = glob[index + 1];\n if (char === \"*\") {\n if (next === \"*\") {\n if (glob[index + 2] === \"/\") {\n regex += \"(?:.*/)?\";\n index += 2;\n } else {\n regex += \".*\";\n index += 1;\n }\n } else {\n regex += \"[^/]*\";\n }\n continue;\n }\n if (char === \"?\") {\n regex += \".\";\n continue;\n }\n if (char === \"/\") {\n regex += \"/\";\n continue;\n }\n regex += char.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n }\n regex += \"$\";\n return new RegExp(regex);\n}\n\nfunction compileGlobs(patterns: string[]): RegExp[] {\n return patterns.map((pattern) => globToRegExp(pattern));\n}\n\nfunction matchesCompiledGlobs(notePath: string, patterns: RegExp[]): boolean {\n if (patterns.length === 0) return false;\n return patterns.some((pattern) => pattern.test(notePath));\n}\n\nasync function listMarkdownFiles(rootDir: string): Promise<string[] | null> {\n const results: string[] = [];\n async function walk(currentDir: string): Promise<void> {\n const entries = await readdir(currentDir, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n await walk(fullPath);\n continue;\n }\n if (!entry.isFile() || !entry.name.toLowerCase().endsWith(\".md\")) continue;\n results.push(toPosixRelative(rootDir, fullPath));\n }\n }\n const rootInfo = await stat(rootDir).catch(() => null);\n if (!rootInfo?.isDirectory()) return null;\n await walk(rootDir);\n return results.sort();\n}\n\nfunction resolveFileCandidates(options: {\n listedFiles: string[];\n bootstrapFiles: string[];\n handoffGlobs: string[];\n dailySummaryGlobs: string[];\n automationNoteGlobs: string[];\n workspaceDocGlobs: string[];\n excludeGlobs: string[];\n}): Array<{\n sourcePath: string;\n sourceKind: \"bootstrap_doc\" | \"handoff\" | \"daily_summary\" | \"automation_note\" | \"workspace_doc\";\n}> {\n const out = new Map<string, \"bootstrap_doc\" | \"handoff\" | \"daily_summary\" | \"automation_note\" | \"workspace_doc\">();\n const excludes = compileGlobs(options.excludeGlobs);\n const handoff = compileGlobs(options.handoffGlobs);\n const dailySummary = compileGlobs(options.dailySummaryGlobs);\n const automation = compileGlobs(options.automationNoteGlobs);\n const workspaceDocs = compileGlobs(options.workspaceDocGlobs);\n const listedFiles = new Set(options.listedFiles.map((value) => value.replace(/\\\\/g, \"/\")));\n\n for (const file of options.bootstrapFiles.map((value) => value.replace(/\\\\/g, \"/\"))) {\n if (listedFiles.has(file) && !matchesCompiledGlobs(file, excludes)) out.set(file, \"bootstrap_doc\");\n }\n\n for (const sourcePath of listedFiles) {\n if (matchesCompiledGlobs(sourcePath, excludes)) continue;\n if (out.has(sourcePath)) continue;\n if (matchesCompiledGlobs(sourcePath, handoff)) {\n out.set(sourcePath, \"handoff\");\n continue;\n }\n if (matchesCompiledGlobs(sourcePath, dailySummary)) {\n out.set(sourcePath, \"daily_summary\");\n continue;\n }\n if (matchesCompiledGlobs(sourcePath, automation)) {\n out.set(sourcePath, \"automation_note\");\n continue;\n }\n if (matchesCompiledGlobs(sourcePath, workspaceDocs)) {\n out.set(sourcePath, \"workspace_doc\");\n }\n }\n\n return [...out.entries()]\n .map(([sourcePath, sourceKind]) => ({ sourcePath, sourceKind }))\n .sort((left, right) => left.sourcePath.localeCompare(right.sourcePath));\n}\n\nexport function resolveNativeKnowledgeStatePath(memoryDir: string, config: NativeKnowledgeConfig): string {\n return path.join(memoryDir, config.stateDir, \"obsidian-sync.json\");\n}\n\nexport function resolveCuratedIncludeFilesStatePath(memoryDir: string, config: NativeKnowledgeConfig): string {\n return path.join(memoryDir, config.stateDir, \"curated-include-sync.json\");\n}\n\nexport function resolveOpenClawWorkspaceStatePath(memoryDir: string, config: NativeKnowledgeConfig): string {\n return path.join(memoryDir, config.stateDir, \"openclaw-workspace-sync.json\");\n}\n\nasync function loadSyncState(memoryDir: string, config: NativeKnowledgeConfig): Promise<ObsidianSyncState> {\n const statePath = resolveNativeKnowledgeStatePath(memoryDir, config);\n try {\n const raw = JSON.parse(await readFile(statePath, \"utf-8\")) as Partial<ObsidianSyncState>;\n if (raw.version !== 1 || typeof raw.vaults !== \"object\" || !raw.vaults) {\n throw new Error(\"invalid obsidian native knowledge state\");\n }\n return {\n version: 1,\n updatedAt: typeof raw.updatedAt === \"string\" ? raw.updatedAt : new Date(0).toISOString(),\n vaults: raw.vaults as Record<string, ObsidianVaultState>,\n };\n } catch {\n return {\n version: 1,\n updatedAt: new Date(0).toISOString(),\n vaults: {},\n };\n }\n}\n\nasync function loadOpenClawWorkspaceState(\n memoryDir: string,\n config: NativeKnowledgeConfig,\n): Promise<OpenClawWorkspaceSyncState> {\n const statePath = resolveOpenClawWorkspaceStatePath(memoryDir, config);\n try {\n const raw = JSON.parse(await readFile(statePath, \"utf-8\")) as Partial<OpenClawWorkspaceSyncState>;\n if (raw.version !== 1 || typeof raw.files !== \"object\" || !raw.files) {\n throw new Error(\"invalid openclaw workspace native knowledge state\");\n }\n return {\n version: 1,\n updatedAt: typeof raw.updatedAt === \"string\" ? raw.updatedAt : new Date(0).toISOString(),\n files: raw.files as Record<string, OpenClawWorkspaceFileState>,\n };\n } catch {\n return {\n version: 1,\n updatedAt: new Date(0).toISOString(),\n files: {},\n };\n }\n}\n\nasync function loadCuratedIncludeFilesState(\n memoryDir: string,\n config: NativeKnowledgeConfig,\n): Promise<CuratedIncludeFilesSyncState> {\n const statePath = resolveCuratedIncludeFilesStatePath(memoryDir, config);\n try {\n const raw = JSON.parse(await readFile(statePath, \"utf-8\")) as Partial<CuratedIncludeFilesSyncState>;\n if (raw.version !== 1 || typeof raw.files !== \"object\" || !raw.files) {\n throw new Error(\"invalid curated include native knowledge state\");\n }\n return {\n version: 1,\n updatedAt: typeof raw.updatedAt === \"string\" ? raw.updatedAt : new Date(0).toISOString(),\n files: raw.files as Record<string, CuratedIncludeFileState>,\n };\n } catch {\n return {\n version: 1,\n updatedAt: new Date(0).toISOString(),\n files: {},\n };\n }\n}\n\nfunction deriveOpenClawArtifactMetadata(options: {\n sourcePath: string;\n parsed: ParsedFrontmatter;\n sharedSafeGlobs: string[];\n}): Pick<NativeKnowledgeChunk, \"derivedDate\" | \"sessionKey\" | \"workflowKey\" | \"author\" | \"agent\" | \"namespace\" | \"privacyClass\"> {\n const sharedSafe = compileGlobs(options.sharedSafeGlobs);\n return {\n derivedDate: deriveArtifactDate(options.sourcePath, options.parsed),\n sessionKey: firstStringValue(options.parsed.data, [\"sessionKey\", \"session\"]),\n workflowKey: firstStringValue(options.parsed.data, [\"workflowKey\", \"workflow\"]),\n author: firstStringValue(options.parsed.data, [\"author\"]),\n agent: firstStringValue(options.parsed.data, [\"agent\"]),\n namespace: firstStringValue(options.parsed.data, [\"namespace\"]),\n privacyClass:\n firstStringValue(options.parsed.data, [\"privacyClass\", \"privacy\"])\n ?? (matchesCompiledGlobs(options.sourcePath, sharedSafe) ? \"shared_safe\" : undefined),\n };\n}\n\nfunction buildOpenClawWorkspaceChunks(options: {\n sourcePath: string;\n sourceKind: \"bootstrap_doc\" | \"handoff\" | \"daily_summary\" | \"automation_note\" | \"workspace_doc\";\n body: string;\n bodyStartLine: number;\n maxChunkChars: number;\n sourceHash: string;\n mtimeMs: number;\n metadata: Pick<NativeKnowledgeChunk, \"derivedDate\" | \"sessionKey\" | \"workflowKey\" | \"author\" | \"agent\" | \"namespace\" | \"privacyClass\">;\n}): NativeKnowledgeChunk[] {\n return chunkHeadingAware({\n sourcePath: options.sourcePath,\n content: options.body,\n maxChunkChars: options.maxChunkChars,\n startLineOffset: options.bodyStartLine - 1,\n createChunk: ({ title, startLine, endLine, content }) => ({\n chunkId: `${options.sourceKind}:${options.sourcePath}:${startLine}-${endLine}`,\n sourcePath: options.sourcePath,\n title,\n sourceKind: options.sourceKind,\n startLine,\n endLine,\n content,\n derivedDate: options.metadata.derivedDate,\n sessionKey: options.metadata.sessionKey,\n workflowKey: options.metadata.workflowKey,\n author: options.metadata.author,\n agent: options.metadata.agent,\n namespace: options.metadata.namespace,\n privacyClass: options.metadata.privacyClass,\n sourceHash: options.sourceHash,\n mtimeMs: options.mtimeMs,\n }),\n });\n}\n\nfunction buildObsidianChunks(options: {\n vault: NativeKnowledgeObsidianVaultConfig;\n notePath: string;\n title: string;\n content: string;\n startLineOffset: number;\n derivedDate?: string;\n tags: string[];\n aliases: string[];\n wikilinks: string[];\n backlinks?: string[];\n namespace?: string;\n privacyClass?: string;\n sourceHash: string;\n mtimeMs: number;\n maxChunkChars: number;\n}): NativeKnowledgeChunk[] {\n const noteKey = `${options.vault.id}:${options.notePath}`;\n return chunkHeadingAware({\n sourcePath: options.notePath,\n content: options.content,\n maxChunkChars: options.maxChunkChars,\n startLineOffset: options.startLineOffset,\n createChunk: ({ title, startLine, endLine, content }) => ({\n chunkId: `${noteKey}:${startLine}-${endLine}`,\n sourcePath: `${options.vault.id}/${options.notePath}`,\n title,\n sourceKind: \"obsidian_note\",\n startLine,\n endLine,\n content,\n vaultId: options.vault.id,\n notePath: options.notePath,\n noteKey,\n derivedDate: options.derivedDate,\n tags: options.tags,\n aliases: options.aliases,\n wikilinks: options.wikilinks,\n backlinks: options.backlinks ?? [],\n namespace: options.namespace,\n privacyClass: options.privacyClass,\n sourceHash: options.sourceHash,\n mtimeMs: options.mtimeMs,\n }),\n });\n}\n\nfunction buildAliasIndex(notes: Record<string, ObsidianNoteState>): Map<string, string[]> {\n const index = new Map<string, string[]>();\n for (const note of Object.values(notes)) {\n if (note.deleted) continue;\n const candidates = [\n note.title,\n path.basename(note.notePath, path.extname(note.notePath)),\n note.notePath.replace(/\\.md$/i, \"\"),\n ...note.aliases,\n ];\n for (const candidate of candidates) {\n const key = normalizeText(candidate);\n if (!key) continue;\n const existing = index.get(key) ?? [];\n existing.push(note.noteKey);\n index.set(key, uniqueSorted(existing));\n }\n }\n return index;\n}\n\nfunction materializeBacklinks(notes: Record<string, ObsidianNoteState>): Record<string, string[]> {\n const backlinks = new Map<string, Set<string>>();\n const aliasIndex = buildAliasIndex(notes);\n for (const note of Object.values(notes)) {\n if (note.deleted) continue;\n for (const target of note.wikilinks) {\n const matches = aliasIndex.get(normalizeText(target)) ?? [];\n for (const match of matches) {\n if (match === note.noteKey) continue;\n const bucket = backlinks.get(match) ?? new Set<string>();\n bucket.add(note.notePath);\n backlinks.set(match, bucket);\n }\n }\n }\n return Object.fromEntries(\n [...backlinks.entries()].map(([noteKey, refs]) => [noteKey, [...refs].sort()]),\n );\n}\n\nexport async function syncObsidianVaults(options: {\n memoryDir: string;\n config: NativeKnowledgeConfig;\n}): Promise<NativeKnowledgeSyncResult> {\n if (options.config.obsidianVaults.length === 0) {\n return {\n statePath: resolveNativeKnowledgeStatePath(options.memoryDir, options.config),\n vaultCount: 0,\n touchedNotes: 0,\n deletedNotes: 0,\n chunkCount: 0,\n activeChunks: [],\n };\n }\n\n const state = await loadSyncState(options.memoryDir, options.config);\n const nextVaults: Record<string, ObsidianVaultState> = {};\n let touchedNotes = 0;\n let deletedNotes = 0;\n let chunkCount = 0;\n\n for (const vault of options.config.obsidianVaults) {\n const previousVault = state.vaults[vault.id];\n const previousNotes = previousVault?.notes ?? {};\n const notePaths = await listMarkdownFiles(vault.rootDir);\n if (notePaths === null) {\n nextVaults[vault.id] = previousVault ?? {\n vaultId: vault.id,\n rootDir: vault.rootDir,\n syncedAt: new Date().toISOString(),\n notes: previousNotes,\n };\n chunkCount += Object.values(previousNotes)\n .filter((note) => !note.deleted)\n .reduce((total, note) => total + note.chunks.length, 0);\n continue;\n }\n\n const includePatterns = compileGlobs(vault.includeGlobs);\n const excludePatterns = compileGlobs(vault.excludeGlobs);\n const includedNotePaths = notePaths.filter((notePath) => {\n if (!matchesCompiledGlobs(notePath, includePatterns)) return false;\n if (matchesCompiledGlobs(notePath, excludePatterns)) return false;\n return true;\n });\n\n const nextNotes: Record<string, ObsidianNoteState> = {};\n const seenNoteKeys = new Set<string>();\n\n for (const notePath of includedNotePaths) {\n const absPath = path.join(vault.rootDir, notePath);\n const content = await readFile(absPath, \"utf-8\").catch(() => null);\n if (content === null) continue;\n const info = await stat(absPath).catch(() => null);\n if (!info?.isFile()) continue;\n\n const sourceHash = createHash(\"sha256\").update(content).digest(\"hex\");\n const noteKey = `${vault.id}:${notePath}`;\n seenNoteKeys.add(noteKey);\n const previous = previousNotes[noteKey];\n if (previous && previous.deleted !== true && previous.sourceHash === sourceHash && previous.mtimeMs === info.mtimeMs) {\n nextNotes[noteKey] = {\n ...previous,\n deleted: false,\n deletedAt: undefined,\n };\n chunkCount += previous.chunks.length;\n continue;\n }\n\n const parsed = parseFrontmatter(content);\n const { targets } = extractWikilinks(parsed.body);\n const tags = uniqueSorted([\n ...parseFrontmatterList(parsed.data.tags),\n ...extractInlineTags(parsed.body),\n ]);\n const aliases = parseFrontmatterList(parsed.data.aliases);\n const { namespace, privacyClass } = classifyObsidianNote(notePath, vault);\n const title = resolveNoteTitle(notePath, parsed);\n const derivedDate = deriveDailyNoteDate(notePath, vault.dailyNotePatterns);\n const chunks = buildObsidianChunks({\n vault,\n notePath,\n title,\n content: parsed.body,\n startLineOffset: parsed.bodyStartLine - 1,\n derivedDate,\n tags,\n aliases,\n wikilinks: targets,\n namespace,\n privacyClass,\n sourceHash,\n mtimeMs: info.mtimeMs,\n maxChunkChars: options.config.maxChunkChars,\n });\n\n nextNotes[noteKey] = {\n noteKey,\n notePath,\n title,\n derivedDate,\n tags,\n aliases,\n wikilinks: targets,\n backlinks: [],\n namespace,\n privacyClass,\n sourceHash,\n mtimeMs: info.mtimeMs,\n deleted: false,\n chunks,\n };\n touchedNotes += 1;\n chunkCount += chunks.length;\n }\n\n for (const [noteKey, previous] of Object.entries(previousNotes)) {\n if (seenNoteKeys.has(noteKey)) continue;\n nextNotes[noteKey] = {\n ...previous,\n deleted: true,\n deletedAt: new Date().toISOString(),\n chunks: [],\n };\n deletedNotes += 1;\n }\n\n if (vault.materializeBacklinks) {\n const backlinks = materializeBacklinks(nextNotes);\n for (const note of Object.values(nextNotes)) {\n if (note.deleted) continue;\n note.backlinks = backlinks[note.noteKey] ?? [];\n note.chunks = note.chunks.map((chunk) => ({\n ...chunk,\n backlinks: note.backlinks,\n }));\n }\n }\n\n nextVaults[vault.id] = {\n vaultId: vault.id,\n rootDir: vault.rootDir,\n syncedAt: new Date().toISOString(),\n notes: nextNotes,\n };\n }\n\n const nextState: ObsidianSyncState = {\n version: 1,\n updatedAt: new Date().toISOString(),\n vaults: nextVaults,\n };\n const activeChunks = loadActiveObsidianChunks({\n state: nextState,\n defaultNamespace: \"default\",\n });\n const statePath = resolveNativeKnowledgeStatePath(options.memoryDir, options.config);\n try {\n await mkdir(path.dirname(statePath), { recursive: true });\n await writeFile(statePath, `${JSON.stringify(nextState, null, 2)}\\n`, \"utf-8\");\n } catch (error) {\n log.warn(`native knowledge: failed to persist obsidian sync state (fail-open): ${String(error)}`);\n }\n\n return {\n statePath,\n vaultCount: options.config.obsidianVaults.length,\n touchedNotes,\n deletedNotes,\n chunkCount,\n activeChunks,\n };\n}\n\nfunction loadActiveObsidianChunks(options: {\n state: ObsidianSyncState;\n recallNamespaces?: string[];\n defaultNamespace: string;\n}): NativeKnowledgeChunk[] {\n const out: NativeKnowledgeChunk[] = [];\n for (const vault of Object.values(options.state.vaults)) {\n for (const note of Object.values(vault.notes)) {\n if (note.deleted) continue;\n if (!isChunkAllowedForRecall(note, options.recallNamespaces, options.defaultNamespace)) continue;\n out.push(...note.chunks);\n }\n }\n return out;\n}\n\nfunction isChunkAllowedForRecall(\n chunk: Pick<NativeKnowledgeChunk, \"namespace\" | \"privacyClass\">,\n recallNamespaces: string[] | undefined,\n defaultNamespace: string,\n): boolean {\n const namespace = chunk.namespace?.trim() || defaultNamespace;\n if (\n Array.isArray(recallNamespaces) &&\n namespace !== defaultNamespace &&\n !recallNamespaces.includes(namespace)\n ) {\n return false;\n }\n const privacyClass = chunk.privacyClass?.trim().toLowerCase();\n if (\n privacyClass === \"private\" &&\n Array.isArray(recallNamespaces) &&\n (namespace !== defaultNamespace || !recallNamespaces.includes(defaultNamespace))\n ) {\n return false;\n }\n return true;\n}\n\nfunction loadActiveOpenClawWorkspaceChunks(options: {\n state: OpenClawWorkspaceSyncState;\n recallNamespaces?: string[];\n defaultNamespace: string;\n}): NativeKnowledgeChunk[] {\n const out: NativeKnowledgeChunk[] = [];\n for (const file of Object.values(options.state.files)) {\n if (file.deleted) continue;\n if (!isChunkAllowedForRecall(file, options.recallNamespaces, options.defaultNamespace)) continue;\n out.push(...file.chunks);\n }\n return out;\n}\n\nfunction deriveCuratedFileMetadata(options: {\n sourcePath: string;\n parsed: ParsedFrontmatter;\n}): Pick<NativeKnowledgeChunk, \"derivedDate\" | \"namespace\" | \"privacyClass\"> {\n return {\n derivedDate: deriveArtifactDate(options.sourcePath, options.parsed),\n namespace: firstStringValue(options.parsed.data, [\"namespace\"]) ?? deriveNamespaceFromIncludePath(options.sourcePath),\n privacyClass: firstStringValue(options.parsed.data, [\"privacyClass\", \"privacy\"]),\n };\n}\n\nfunction buildCuratedIncludeChunks(options: {\n sourcePath: string;\n body: string;\n bodyStartLine: number;\n maxChunkChars: number;\n sourceHash: string;\n mtimeMs: number;\n metadata: Pick<NativeKnowledgeChunk, \"derivedDate\" | \"namespace\" | \"privacyClass\">;\n}): NativeKnowledgeChunk[] {\n return chunkHeadingAware({\n sourcePath: options.sourcePath,\n content: options.body,\n maxChunkChars: options.maxChunkChars,\n startLineOffset: options.bodyStartLine - 1,\n createChunk: ({ title, startLine, endLine, content }) => ({\n chunkId: `${options.sourcePath}:${startLine}-${endLine}`,\n sourcePath: options.sourcePath,\n title,\n sourceKind: detectSourceKind(options.sourcePath),\n startLine,\n endLine,\n content,\n derivedDate: options.metadata.derivedDate,\n namespace: options.metadata.namespace,\n privacyClass: options.metadata.privacyClass,\n sourceHash: options.sourceHash,\n mtimeMs: options.mtimeMs,\n }),\n });\n}\n\nfunction loadActiveCuratedIncludeChunks(options: {\n state: CuratedIncludeFilesSyncState;\n recallNamespaces?: string[];\n defaultNamespace: string;\n}): NativeKnowledgeChunk[] {\n const out: NativeKnowledgeChunk[] = [];\n for (const file of Object.values(options.state.files)) {\n if (file.deleted) continue;\n if (!isChunkAllowedForRecall(file, options.recallNamespaces, options.defaultNamespace)) continue;\n out.push(...file.chunks);\n }\n return out;\n}\n\nfunction dedupeNativeKnowledgeChunks(chunks: NativeKnowledgeChunk[]): NativeKnowledgeChunk[] {\n const seen = new Set<string>();\n const priority = new Map<NativeKnowledgeChunk[\"sourceKind\"], number>([\n [\"handoff\", 1],\n [\"daily_summary\", 2],\n [\"bootstrap_doc\", 3],\n [\"automation_note\", 4],\n [\"workspace_doc\", 5],\n [\"identity\", 6],\n [\"memory\", 7],\n [\"obsidian_note\", 8],\n ]);\n return [...chunks]\n .sort((left, right) => {\n const leftPriority = priority.get(left.sourceKind) ?? 99;\n const rightPriority = priority.get(right.sourceKind) ?? 99;\n return (\n leftPriority - rightPriority\n || left.sourcePath.localeCompare(right.sourcePath)\n || left.startLine - right.startLine\n );\n })\n .filter((chunk) => {\n const key = [\n chunk.sourcePath,\n chunk.startLine,\n chunk.endLine,\n chunk.content,\n ].join(\"::\");\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nasync function findPersistedNativeKnowledgeStateFiles(\n rootDir: string,\n maxDepth: number,\n currentDepth: number = 0,\n): Promise<string[]> {\n if (currentDepth > maxDepth) return [];\n const entries = await readdir(rootDir, { withFileTypes: true }).catch(() => []);\n const out: string[] = [];\n for (const entry of entries) {\n const fullPath = path.join(rootDir, entry.name);\n if (entry.isFile() && PERSISTED_NATIVE_KNOWLEDGE_STATE_FILES.has(entry.name)) {\n out.push(fullPath);\n continue;\n }\n if (!entry.isDirectory()) continue;\n out.push(...await findPersistedNativeKnowledgeStateFiles(fullPath, maxDepth, currentDepth + 1));\n }\n return out;\n}\n\nexport async function loadPersistedNativeKnowledgeChunks(options: {\n memoryDir: string;\n recallNamespaces?: string[];\n defaultNamespace: string;\n}): Promise<NativeKnowledgeChunk[]> {\n const stateFiles = await findPersistedNativeKnowledgeStateFiles(options.memoryDir, 4);\n if (stateFiles.length === 0) return [];\n\n const chunks: NativeKnowledgeChunk[] = [];\n for (const statePath of stateFiles.sort()) {\n const raw = await readFile(statePath, \"utf-8\").catch(() => \"\");\n if (!raw) continue;\n try {\n const parsed = JSON.parse(raw) as { vaults?: unknown; files?: unknown };\n if (typeof parsed.vaults === \"object\" && parsed.vaults) {\n const state: ObsidianSyncState = {\n version: 1,\n updatedAt: new Date(0).toISOString(),\n vaults: parsed.vaults as Record<string, ObsidianVaultState>,\n };\n chunks.push(...loadActiveObsidianChunks({\n state,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n }).map((chunk) => {\n const note = Object.values(state.vaults)\n .flatMap((vault) => Object.values(vault.notes))\n .find((entry) => entry.chunks.some((candidate) => candidate.chunkId === chunk.chunkId));\n if (!note) return chunk;\n return {\n ...chunk,\n derivedDate: chunk.derivedDate ?? note.derivedDate,\n namespace: chunk.namespace ?? note.namespace,\n privacyClass: chunk.privacyClass ?? note.privacyClass,\n aliases: chunk.aliases ?? note.aliases,\n tags: chunk.tags ?? note.tags,\n wikilinks: chunk.wikilinks ?? note.wikilinks,\n backlinks: chunk.backlinks ?? note.backlinks,\n };\n }));\n continue;\n }\n if (typeof parsed.files === \"object\" && parsed.files) {\n if (path.basename(statePath) === \"openclaw-workspace-sync.json\") {\n const state: OpenClawWorkspaceSyncState = {\n version: 1,\n updatedAt: new Date(0).toISOString(),\n files: parsed.files as Record<string, OpenClawWorkspaceFileState>,\n };\n chunks.push(...loadActiveOpenClawWorkspaceChunks({\n state,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n }).map((chunk) => {\n const file = state.files[chunk.sourcePath];\n if (!file) return chunk;\n return {\n ...chunk,\n derivedDate: chunk.derivedDate ?? file.derivedDate,\n namespace: chunk.namespace ?? file.namespace,\n privacyClass: chunk.privacyClass ?? file.privacyClass,\n sessionKey: chunk.sessionKey ?? file.sessionKey,\n workflowKey: chunk.workflowKey ?? file.workflowKey,\n author: chunk.author ?? file.author,\n agent: chunk.agent ?? file.agent,\n };\n }));\n continue;\n }\n const state: CuratedIncludeFilesSyncState = {\n version: 1,\n updatedAt: new Date(0).toISOString(),\n files: parsed.files as Record<string, CuratedIncludeFileState>,\n };\n chunks.push(...loadActiveCuratedIncludeChunks({\n state,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n }).map((chunk) => {\n const file = state.files[chunk.sourcePath];\n if (!file) return chunk;\n return {\n ...chunk,\n derivedDate: chunk.derivedDate ?? file.derivedDate,\n namespace: chunk.namespace ?? file.namespace,\n privacyClass: chunk.privacyClass ?? file.privacyClass,\n };\n }));\n }\n } catch {\n continue;\n }\n }\n\n return dedupeNativeKnowledgeChunks(chunks);\n}\n\nexport async function syncOpenClawWorkspaceArtifacts(options: {\n workspaceDir: string;\n memoryDir: string;\n config: NativeKnowledgeConfig;\n}): Promise<{\n statePath: string;\n touchedFiles: number;\n deletedFiles: number;\n chunkCount: number;\n activeChunks: NativeKnowledgeChunk[];\n}> {\n const adapter = options.config.openclawWorkspace;\n const statePath = resolveOpenClawWorkspaceStatePath(options.memoryDir, options.config);\n if (!adapter?.enabled) {\n return { statePath, touchedFiles: 0, deletedFiles: 0, chunkCount: 0, activeChunks: [] };\n }\n\n const previousState = await loadOpenClawWorkspaceState(options.memoryDir, options.config);\n const listedFiles = await listMarkdownFiles(options.workspaceDir);\n if (listedFiles === null) {\n return {\n statePath,\n touchedFiles: 0,\n deletedFiles: 0,\n chunkCount: Object.values(previousState.files)\n .filter((file) => !file.deleted)\n .reduce((total, file) => total + file.chunks.length, 0),\n activeChunks: loadActiveOpenClawWorkspaceChunks({\n state: previousState,\n defaultNamespace: \"default\",\n }),\n };\n }\n\n const candidates = resolveFileCandidates({\n listedFiles,\n bootstrapFiles: adapter.bootstrapFiles,\n handoffGlobs: adapter.handoffGlobs,\n dailySummaryGlobs: adapter.dailySummaryGlobs,\n automationNoteGlobs: adapter.automationNoteGlobs,\n workspaceDocGlobs: adapter.workspaceDocGlobs,\n excludeGlobs: adapter.excludeGlobs,\n });\n const nextFiles: Record<string, OpenClawWorkspaceFileState> = {};\n const seen = new Set<string>();\n let touchedFiles = 0;\n let deletedFiles = 0;\n\n for (const candidate of candidates) {\n const absPath = path.join(options.workspaceDir, candidate.sourcePath);\n const content = await readFile(absPath, \"utf-8\").catch(() => null);\n if (content === null) continue;\n const info = await stat(absPath).catch(() => null);\n if (!info?.isFile()) continue;\n\n const sourceHash = createHash(\"sha256\").update(content).digest(\"hex\");\n const parsed = parseFrontmatter(content);\n const metadata = deriveOpenClawArtifactMetadata({\n sourcePath: candidate.sourcePath,\n parsed,\n sharedSafeGlobs: adapter.sharedSafeGlobs,\n });\n const title = resolveNoteTitle(candidate.sourcePath, parsed);\n const syncConfigHash = createHash(\"sha256\")\n .update(JSON.stringify({\n sourceKind: candidate.sourceKind,\n maxChunkChars: options.config.maxChunkChars,\n metadata,\n }))\n .digest(\"hex\");\n const previous = previousState.files[candidate.sourcePath];\n if (\n previous &&\n previous.deleted !== true &&\n previous.sourceHash === sourceHash &&\n previous.mtimeMs === info.mtimeMs &&\n previous.syncConfigHash === syncConfigHash\n ) {\n nextFiles[candidate.sourcePath] = {\n ...previous,\n deleted: false,\n deletedAt: undefined,\n };\n seen.add(candidate.sourcePath);\n continue;\n }\n\n const chunks = buildOpenClawWorkspaceChunks({\n sourcePath: candidate.sourcePath,\n sourceKind: candidate.sourceKind,\n body: parsed.body,\n bodyStartLine: parsed.bodyStartLine,\n maxChunkChars: options.config.maxChunkChars,\n sourceHash,\n mtimeMs: info.mtimeMs,\n metadata,\n });\n\n nextFiles[candidate.sourcePath] = {\n sourcePath: candidate.sourcePath,\n sourceKind: candidate.sourceKind,\n title,\n namespace: metadata.namespace,\n privacyClass: metadata.privacyClass,\n derivedDate: metadata.derivedDate,\n sessionKey: metadata.sessionKey,\n workflowKey: metadata.workflowKey,\n author: metadata.author,\n agent: metadata.agent,\n sourceHash,\n syncConfigHash,\n mtimeMs: info.mtimeMs,\n deleted: false,\n chunks,\n };\n touchedFiles += 1;\n seen.add(candidate.sourcePath);\n }\n\n for (const [sourcePath, previous] of Object.entries(previousState.files)) {\n if (seen.has(sourcePath)) continue;\n nextFiles[sourcePath] = {\n ...previous,\n deleted: true,\n deletedAt: new Date().toISOString(),\n chunks: [],\n };\n deletedFiles += 1;\n }\n\n const nextState: OpenClawWorkspaceSyncState = {\n version: 1,\n updatedAt: new Date().toISOString(),\n files: nextFiles,\n };\n const activeChunks = loadActiveOpenClawWorkspaceChunks({\n state: nextState,\n defaultNamespace: \"default\",\n });\n const chunkCount = activeChunks.length;\n try {\n await mkdir(path.dirname(statePath), { recursive: true });\n await writeFile(statePath, `${JSON.stringify(nextState, null, 2)}\\n`, \"utf-8\");\n } catch (error) {\n log.warn(`native knowledge: failed to persist openclaw workspace sync state (fail-open): ${String(error)}`);\n }\n\n return {\n statePath,\n touchedFiles,\n deletedFiles,\n chunkCount,\n activeChunks,\n };\n}\n\nexport async function syncCuratedIncludeFiles(options: {\n workspaceDir: string;\n memoryDir: string;\n config: NativeKnowledgeConfig;\n recallNamespaces?: string[];\n defaultNamespace: string;\n skipSourcePaths?: string[];\n}): Promise<{\n statePath: string;\n touchedFiles: number;\n deletedFiles: number;\n chunkCount: number;\n activeChunks: NativeKnowledgeChunk[];\n}> {\n const statePath = resolveCuratedIncludeFilesStatePath(options.memoryDir, options.config);\n const previousState = await loadCuratedIncludeFilesState(options.memoryDir, options.config);\n const workspaceInfo = await stat(options.workspaceDir).catch(() => null);\n if (!workspaceInfo?.isDirectory()) {\n return {\n statePath,\n touchedFiles: 0,\n deletedFiles: 0,\n chunkCount: Object.values(previousState.files)\n .filter((file) => !file.deleted)\n .reduce((total, file) => total + file.chunks.length, 0),\n activeChunks: loadActiveCuratedIncludeChunks({\n state: previousState,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n }),\n };\n }\n\n const skipped = new Set((options.skipSourcePaths ?? []).map((value) => value.replace(/\\\\/g, \"/\")));\n const candidatePaths = await resolveCandidatePaths({\n workspaceDir: options.workspaceDir,\n includeFiles: options.config.includeFiles,\n defaultNamespace: options.defaultNamespace,\n identityVariantMode: \"disk\",\n });\n const nextFiles: Record<string, CuratedIncludeFileState> = {};\n const seen = new Set<string>();\n let touchedFiles = 0;\n let deletedFiles = 0;\n\n for (const filePath of candidatePaths) {\n if (!(await readableFile(filePath))) continue;\n const content = await readFile(filePath, \"utf-8\").catch(() => null);\n if (content === null) continue;\n const info = await stat(filePath).catch(() => null);\n if (!info?.isFile()) continue;\n\n const sourcePath = path.relative(options.workspaceDir, filePath).replace(/\\\\/g, \"/\");\n if (skipped.has(sourcePath)) continue;\n\n const parsed = parseFrontmatter(content);\n const metadata = deriveCuratedFileMetadata({\n sourcePath,\n parsed,\n });\n const sourceKind = detectSourceKind(sourcePath);\n const sourceHash = createHash(\"sha256\").update(content).digest(\"hex\");\n const title = resolveNoteTitle(sourcePath, parsed);\n const syncConfigHash = createHash(\"sha256\")\n .update(JSON.stringify({\n sourceKind,\n maxChunkChars: options.config.maxChunkChars,\n metadata,\n }))\n .digest(\"hex\");\n const previous = previousState.files[sourcePath];\n if (\n previous &&\n previous.deleted !== true &&\n previous.sourceHash === sourceHash &&\n previous.mtimeMs === info.mtimeMs &&\n previous.syncConfigHash === syncConfigHash\n ) {\n nextFiles[sourcePath] = {\n ...previous,\n deleted: false,\n deletedAt: undefined,\n };\n seen.add(sourcePath);\n continue;\n }\n\n const chunks = buildCuratedIncludeChunks({\n sourcePath,\n body: parsed.body,\n bodyStartLine: parsed.bodyStartLine,\n maxChunkChars: options.config.maxChunkChars,\n sourceHash,\n mtimeMs: info.mtimeMs,\n metadata,\n });\n nextFiles[sourcePath] = {\n sourcePath,\n sourceKind,\n title,\n namespace: metadata.namespace,\n privacyClass: metadata.privacyClass,\n derivedDate: metadata.derivedDate,\n sourceHash,\n syncConfigHash,\n mtimeMs: info.mtimeMs,\n deleted: false,\n chunks,\n };\n touchedFiles += 1;\n seen.add(sourcePath);\n }\n\n for (const [sourcePath, previous] of Object.entries(previousState.files)) {\n if (seen.has(sourcePath) || skipped.has(sourcePath)) continue;\n if (previous.deleted) {\n nextFiles[sourcePath] = previous;\n continue;\n }\n nextFiles[sourcePath] = {\n ...previous,\n deleted: true,\n deletedAt: new Date().toISOString(),\n chunks: [],\n };\n deletedFiles += 1;\n }\n\n const nextState: CuratedIncludeFilesSyncState = {\n version: 1,\n updatedAt: new Date().toISOString(),\n files: nextFiles,\n };\n const activeChunks = loadActiveCuratedIncludeChunks({\n state: nextState,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n });\n const chunkCount = Object.values(nextFiles)\n .filter((file) => !file.deleted)\n .reduce((total, file) => total + file.chunks.length, 0);\n try {\n await mkdir(path.dirname(statePath), { recursive: true });\n await writeFile(statePath, `${JSON.stringify(nextState, null, 2)}\\n`, \"utf-8\");\n } catch (error) {\n log.warn(`native knowledge: failed to persist curated include sync state (fail-open): ${String(error)}`);\n }\n\n return {\n statePath,\n touchedFiles,\n deletedFiles,\n chunkCount,\n activeChunks,\n };\n}\n\nexport async function collectNativeKnowledgeChunks(options: {\n workspaceDir: string;\n memoryDir?: string;\n config: NativeKnowledgeConfig;\n recallNamespaces?: string[];\n defaultNamespace: string;\n abortSignal?: AbortSignal;\n}): Promise<NativeKnowledgeChunk[]> {\n throwIfNativeKnowledgeAborted(options.abortSignal);\n if (!options.config.enabled) return [];\n\n const chunks: NativeKnowledgeChunk[] = [];\n const openclawBootstrapFiles = new Set(\n (options.memoryDir && options.config.openclawWorkspace?.enabled\n ? options.config.openclawWorkspace.bootstrapFiles\n : []\n )\n .map((value) => value.replace(/\\\\/g, \"/\")),\n );\n if (options.memoryDir) {\n throwIfNativeKnowledgeAborted(options.abortSignal);\n const syncResult = await syncCuratedIncludeFiles({\n workspaceDir: options.workspaceDir,\n memoryDir: options.memoryDir,\n config: options.config,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n skipSourcePaths: [...openclawBootstrapFiles],\n });\n chunks.push(...syncResult.activeChunks);\n } else {\n throwIfNativeKnowledgeAborted(options.abortSignal);\n const candidatePaths = await resolveCandidatePaths({\n workspaceDir: options.workspaceDir,\n includeFiles: options.config.includeFiles,\n recallNamespaces: options.recallNamespaces,\n defaultNamespace: options.defaultNamespace,\n identityVariantMode: \"recall\",\n });\n for (const filePath of candidatePaths) {\n throwIfNativeKnowledgeAborted(options.abortSignal);\n if (!(await readableFile(filePath))) continue;\n const content = await readFile(filePath, \"utf-8\").catch(() => null);\n if (!content) continue;\n const sourcePath = path.relative(options.workspaceDir, filePath).replace(/\\\\/g, \"/\");\n if (openclawBootstrapFiles.has(sourcePath)) continue;\n const parsed = parseFrontmatter(content);\n const metadata = deriveCuratedFileMetadata({\n sourcePath,\n parsed,\n });\n const directChunks = buildCuratedIncludeChunks({\n sourcePath,\n body: parsed.body,\n bodyStartLine: parsed.bodyStartLine,\n maxChunkChars: options.config.maxChunkChars,\n sourceHash: createHash(\"sha256\").update(content).digest(\"hex\"),\n mtimeMs: 0,\n metadata,\n }).filter((chunk) => isChunkAllowedForRecall(chunk, options.recallNamespaces, options.defaultNamespace));\n chunks.push(...directChunks);\n }\n }\n\n if (options.memoryDir && options.config.openclawWorkspace?.enabled) {\n throwIfNativeKnowledgeAborted(options.abortSignal);\n const syncResult = await syncOpenClawWorkspaceArtifacts({\n workspaceDir: options.workspaceDir,\n memoryDir: options.memoryDir,\n config: options.config,\n });\n chunks.push(\n ...syncResult.activeChunks.filter((chunk) =>\n isChunkAllowedForRecall(chunk, options.recallNamespaces, options.defaultNamespace),\n ),\n );\n }\n\n if (options.memoryDir && options.config.obsidianVaults.length > 0) {\n throwIfNativeKnowledgeAborted(options.abortSignal);\n const syncResult = await syncObsidianVaults({\n memoryDir: options.memoryDir,\n config: options.config,\n });\n chunks.push(\n ...syncResult.activeChunks.filter((chunk) =>\n isChunkAllowedForRecall(chunk, options.recallNamespaces, options.defaultNamespace),\n ),\n );\n }\n\n return dedupeNativeKnowledgeChunks(chunks);\n}\n\nfunction throwIfNativeKnowledgeAborted(signal?: AbortSignal): void {\n if (!signal?.aborted) return;\n const err = new Error(\"native knowledge collection aborted\");\n Object.defineProperty(err, \"name\", { value: \"AbortError\" });\n throw err;\n}\n\nexport function searchNativeKnowledge(options: {\n query: string;\n chunks: NativeKnowledgeChunk[];\n maxResults: number;\n}): NativeKnowledgeSearchResult[] {\n const normalizedQuery = normalizeText(options.query);\n const queryTokens = new Set(tokenize(options.query));\n if (!normalizedQuery || queryTokens.size === 0 || options.maxResults <= 0) return [];\n const temporalQuery = /\\b(today|yesterday|recent|latest|current|next|handoff|summary)\\b/i.test(options.query);\n const now = Date.now();\n\n return options.chunks\n .map((chunk) => {\n const metadataText = [\n chunk.title,\n chunk.content,\n chunk.sourcePath,\n chunk.notePath,\n chunk.derivedDate,\n chunk.sessionKey,\n chunk.workflowKey,\n chunk.author,\n chunk.agent,\n ...(chunk.tags ?? []),\n ...(chunk.aliases ?? []),\n ...(chunk.wikilinks ?? []),\n ...(chunk.backlinks ?? []),\n ]\n .filter((value): value is string => typeof value === \"string\" && value.length > 0)\n .join(\"\\n\");\n const normalizedContent = normalizeText(metadataText);\n const contentTokens = new Set(tokenize(normalizedContent));\n let overlap = 0;\n for (const token of queryTokens) {\n if (contentTokens.has(token)) overlap += 1;\n }\n if (overlap === 0 && !normalizedContent.includes(normalizedQuery)) return null;\n const kindBoost =\n chunk.sourceKind === \"handoff\"\n ? 0.2\n : chunk.sourceKind === \"daily_summary\"\n ? 0.16\n : chunk.sourceKind === \"bootstrap_doc\" || chunk.sourceKind === \"identity\"\n ? 0.15\n : chunk.sourceKind === \"memory\"\n ? 0.1\n : chunk.sourceKind === \"obsidian_note\"\n ? 0.08\n : chunk.sourceKind === \"automation_note\"\n ? 0.06\n : 0.05;\n const phraseBoost = normalizedContent.includes(normalizedQuery) ? 0.35 : 0;\n const metadataBoost =\n (chunk.aliases?.some((alias) => normalizeText(alias).includes(normalizedQuery)) ? 0.12 : 0) +\n (chunk.tags?.some((tag) => normalizeText(tag).includes(normalizedQuery)) ? 0.08 : 0) +\n (chunk.derivedDate && normalizeText(chunk.derivedDate).includes(normalizedQuery) ? 0.08 : 0) +\n (chunk.sessionKey && normalizeText(chunk.sessionKey).includes(normalizedQuery) ? 0.1 : 0) +\n (chunk.workflowKey && normalizeText(chunk.workflowKey).includes(normalizedQuery) ? 0.08 : 0) +\n (chunk.agent && normalizeText(chunk.agent).includes(normalizedQuery) ? 0.06 : 0) +\n (chunk.author && normalizeText(chunk.author).includes(normalizedQuery) ? 0.05 : 0);\n let temporalBoost = 0;\n if (chunk.derivedDate) {\n const parsed = Date.parse(`${chunk.derivedDate}T00:00:00Z`);\n if (Number.isFinite(parsed)) {\n const ageDays = Math.max(0, Math.floor((now - parsed) / (24 * 60 * 60 * 1000)));\n if (ageDays <= 1) temporalBoost += temporalQuery ? 0.12 : 0.04;\n else if (ageDays <= 7) temporalBoost += temporalQuery ? 0.08 : 0.02;\n else if (temporalQuery && ageDays >= 90) temporalBoost -= 0.08;\n }\n }\n return {\n ...chunk,\n score: overlap / Math.max(queryTokens.size, 1) + kindBoost + phraseBoost + metadataBoost + temporalBoost,\n };\n })\n .filter((chunk): chunk is NativeKnowledgeSearchResult => chunk !== null)\n .sort((a, b) => b.score - a.score || a.sourcePath.localeCompare(b.sourcePath) || a.startLine - b.startLine)\n .slice(0, options.maxResults);\n}\n\nexport function formatNativeKnowledgeSection(options: {\n results: NativeKnowledgeSearchResult[];\n maxChars: number;\n}): string | null {\n if (options.results.length === 0 || options.maxChars <= 0) return null;\n const lines = [\"## Curated Workspace Knowledge\", \"\"];\n let used = lines.join(\"\\n\").length;\n\n for (const result of options.results) {\n const snippet = result.content.length > 500 ? `${result.content.slice(0, 497)}...` : result.content;\n const meta = [\n `kind=${result.sourceKind}`,\n result.derivedDate ? `date=${result.derivedDate}` : null,\n result.sessionKey ? `session=${result.sessionKey}` : null,\n result.workflowKey ? `workflow=${result.workflowKey}` : null,\n result.agent ? `agent=${result.agent}` : null,\n result.author ? `author=${result.author}` : null,\n result.tags && result.tags.length > 0 ? `tags=${result.tags.join(\",\")}` : null,\n result.vaultId ? `vault=${result.vaultId}` : null,\n ]\n .filter((value): value is string => value !== null)\n .join(\" \");\n const block =\n `- ${result.sourcePath}:${result.startLine}-${result.endLine} [${result.title}] ` +\n `(score: ${result.score.toFixed(3)}${meta ? `; ${meta}` : \"\"})\\n ${snippet.replace(/\\n/g, \"\\n \")}`;\n if (used + block.length > options.maxChars && lines.length > 2) break;\n if (used + block.length > options.maxChars) return null;\n lines.push(block);\n used += block.length + 1;\n }\n\n return lines.length > 2 ? lines.join(\"\\n\") : null;\n}\n"],"mappings":"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","names":["state"]}
@@ -0,0 +1,159 @@
1
+ import {
2
+ namespaceIdentityToken,
3
+ normalizeNamespaceIdentity
4
+ } from "./chunk-ZFXCQPNO.js";
5
+ import {
6
+ StorageManager
7
+ } from "./chunk-UIPDNLXA.js";
8
+ import {
9
+ isSafeRouteNamespace
10
+ } from "./chunk-U3PN77QT.js";
11
+
12
+ // src/namespaces/storage.ts
13
+ import path2 from "path";
14
+ import { access, lstat, readdir } from "fs/promises";
15
+
16
+ // src/utils/category-dir.ts
17
+ import path from "path";
18
+ var CATEGORY_DIR_MAP = {
19
+ correction: "corrections",
20
+ question: "questions",
21
+ preference: "preferences",
22
+ decision: "decisions",
23
+ moment: "moments",
24
+ commitment: "commitments",
25
+ principle: "principles",
26
+ rule: "rules",
27
+ skill: "skills",
28
+ relationship: "relationships",
29
+ procedure: "procedures",
30
+ reasoning_trace: "reasoning-traces"
31
+ };
32
+ var ALL_CATEGORY_DIRS = [
33
+ "facts",
34
+ ...Object.values(CATEGORY_DIR_MAP)
35
+ ];
36
+ var ALL_CATEGORY_KEYS = [
37
+ "fact",
38
+ ...Object.keys(CATEGORY_DIR_MAP)
39
+ ];
40
+ function getCategoryDir(memoryDir, category) {
41
+ const dir = Object.hasOwn(CATEGORY_DIR_MAP, category) ? CATEGORY_DIR_MAP[category] : void 0;
42
+ return dir ? path.join(memoryDir, dir) : path.join(memoryDir, "facts");
43
+ }
44
+
45
+ // src/namespaces/storage.ts
46
+ async function exists(p) {
47
+ try {
48
+ await access(p);
49
+ return true;
50
+ } catch {
51
+ return false;
52
+ }
53
+ }
54
+ async function hasStoredEntries(p) {
55
+ try {
56
+ const entry = await lstat(p);
57
+ if (entry.isSymbolicLink()) return true;
58
+ if (!entry.isDirectory()) return true;
59
+ const children = await readdir(p, { withFileTypes: true });
60
+ for (const child of children) {
61
+ const childPath = path2.join(p, child.name);
62
+ if (child.isSymbolicLink() || child.isFile()) return true;
63
+ if (child.isDirectory() && await hasStoredEntries(childPath)) return true;
64
+ }
65
+ return false;
66
+ } catch {
67
+ return false;
68
+ }
69
+ }
70
+ var LEGACY_NAMESPACE_CONTENT_CHILDREN = [
71
+ ...ALL_CATEGORY_DIRS,
72
+ "entities",
73
+ "artifacts",
74
+ "identity",
75
+ "config",
76
+ "summaries",
77
+ "profile.md"
78
+ ];
79
+ var LEGACY_NAMESPACE_RUNTIME_CHILDREN = ["state"];
80
+ async function hasAnyLegacyData(rootDir, options = {}) {
81
+ const children = options.includeRuntimeState === true ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN] : LEGACY_NAMESPACE_CONTENT_CHILDREN;
82
+ for (const child of children) {
83
+ if (await hasStoredEntries(path2.join(rootDir, child))) return true;
84
+ }
85
+ return false;
86
+ }
87
+ async function hasAnyNamespaceStorageMarker(rootDir, options = {}) {
88
+ const children = options.includeRuntimeState === true ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN] : LEGACY_NAMESPACE_CONTENT_CHILDREN;
89
+ for (const child of children) {
90
+ if (await exists(path2.join(rootDir, child))) return true;
91
+ }
92
+ return false;
93
+ }
94
+ var NamespaceStorageRouter = class {
95
+ constructor(config) {
96
+ this.config = config;
97
+ }
98
+ config;
99
+ cache = /* @__PURE__ */ new Map();
100
+ defaultNsRootResolved = null;
101
+ async defaultNamespaceRoot() {
102
+ if (!this.config.namespacesEnabled) {
103
+ this.defaultNsRootResolved = this.config.memoryDir;
104
+ return this.defaultNsRootResolved;
105
+ }
106
+ const legacyNsDir = path2.join(this.config.memoryDir, "namespaces", this.config.defaultNamespace);
107
+ const tokenizedNsDir = path2.join(
108
+ this.config.memoryDir,
109
+ "namespaces",
110
+ namespaceIdentityToken(this.config.defaultNamespace)
111
+ );
112
+ const tokenizedHasData = await exists(tokenizedNsDir) && await hasAnyNamespaceStorageMarker(tokenizedNsDir, { includeRuntimeState: true });
113
+ const nsDir = tokenizedHasData ? tokenizedNsDir : await exists(legacyNsDir) ? legacyNsDir : tokenizedNsDir;
114
+ this.defaultNsRootResolved = await exists(nsDir) && !await hasAnyLegacyData(this.config.memoryDir) ? nsDir : this.config.memoryDir;
115
+ return this.defaultNsRootResolved;
116
+ }
117
+ async namespaceRoot(namespace) {
118
+ if (!this.config.namespacesEnabled) return this.config.memoryDir;
119
+ if (namespace === this.config.defaultNamespace) {
120
+ return this.defaultNsRootResolved ?? this.config.memoryDir;
121
+ }
122
+ const legacyRoot = path2.join(this.config.memoryDir, "namespaces", namespace);
123
+ const tokenizedRoot = path2.join(this.config.memoryDir, "namespaces", namespaceIdentityToken(namespace));
124
+ if (await exists(tokenizedRoot) && await hasAnyNamespaceStorageMarker(tokenizedRoot, { includeRuntimeState: true })) {
125
+ return tokenizedRoot;
126
+ }
127
+ return await exists(legacyRoot) ? legacyRoot : tokenizedRoot;
128
+ }
129
+ async storageFor(namespace) {
130
+ const ns = normalizeNamespaceIdentity(namespace || this.config.defaultNamespace);
131
+ if (ns !== this.config.defaultNamespace && !isSafeRouteNamespace(ns)) {
132
+ throw new Error(`unsafe namespace: ${ns}`);
133
+ }
134
+ let root;
135
+ if (ns === this.config.defaultNamespace) {
136
+ root = await this.defaultNamespaceRoot();
137
+ const cached = this.cache.get(ns);
138
+ if (cached && cached.dir === root) {
139
+ return cached;
140
+ }
141
+ } else {
142
+ const cached = this.cache.get(ns);
143
+ root = await this.namespaceRoot(ns);
144
+ if (cached && cached.dir === root) return cached;
145
+ }
146
+ const sm = new StorageManager(root, this.config.entitySchemas);
147
+ sm.citationTemplate = this.config.inlineSourceAttributionFormat;
148
+ this.cache.set(ns, sm);
149
+ return sm;
150
+ }
151
+ };
152
+
153
+ export {
154
+ ALL_CATEGORY_DIRS,
155
+ ALL_CATEGORY_KEYS,
156
+ getCategoryDir,
157
+ NamespaceStorageRouter
158
+ };
159
+ //# sourceMappingURL=chunk-CHBI22MI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/namespaces/storage.ts","../src/utils/category-dir.ts"],"sourcesContent":["import path from \"node:path\";\nimport { access, lstat, readdir } from \"node:fs/promises\";\nimport { isSafeRouteNamespace } from \"../routing/engine.js\";\nimport { StorageManager } from \"../storage.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { ALL_CATEGORY_DIRS } from \"../utils/category-dir.js\";\nimport { namespaceIdentityToken, normalizeNamespaceIdentity } from \"./identity.js\";\n\nasync function exists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function hasStoredEntries(p: string): Promise<boolean> {\n try {\n const entry = await lstat(p);\n if (entry.isSymbolicLink()) return true;\n if (!entry.isDirectory()) return true;\n const children = await readdir(p, { withFileTypes: true });\n for (const child of children) {\n const childPath = path.join(p, child.name);\n if (child.isSymbolicLink() || child.isFile()) return true;\n if (child.isDirectory() && (await hasStoredEntries(childPath))) return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n\nconst LEGACY_NAMESPACE_CONTENT_CHILDREN = [\n ...ALL_CATEGORY_DIRS,\n \"entities\",\n \"artifacts\",\n \"identity\",\n \"config\",\n \"summaries\",\n \"profile.md\",\n] as const;\n\nconst LEGACY_NAMESPACE_RUNTIME_CHILDREN = [\"state\"] as const;\n\nasync function hasAnyLegacyData(\n rootDir: string,\n options: { includeRuntimeState?: boolean } = {},\n): Promise<boolean> {\n const children = options.includeRuntimeState === true\n ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN]\n : LEGACY_NAMESPACE_CONTENT_CHILDREN;\n for (const child of children) {\n if (await hasStoredEntries(path.join(rootDir, child))) return true;\n }\n return false;\n}\n\nasync function hasAnyNamespaceStorageMarker(\n rootDir: string,\n options: { includeRuntimeState?: boolean } = {},\n): Promise<boolean> {\n const children = options.includeRuntimeState === true\n ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN]\n : LEGACY_NAMESPACE_CONTENT_CHILDREN;\n for (const child of children) {\n if (await exists(path.join(rootDir, child))) return true;\n }\n return false;\n}\n\n/**\n * Storage routing for namespaces.\n *\n * Compatibility note:\n * - When namespaces are enabled, existing raw namespace roots are preserved.\n * New namespace roots use tokenized names under `memoryDir/namespaces/<token>`.\n * - The default namespace continues to use the legacy `memoryDir` root unless the caller\n * has created `memoryDir/namespaces/<defaultNamespace>` (in which case we use that).\n *\n * This avoids surprising \"lost memories\" when an install flips namespaces on without\n * migrating existing data.\n */\nexport class NamespaceStorageRouter {\n private readonly cache = new Map<string, StorageManager>();\n private defaultNsRootResolved: string | null = null;\n\n constructor(private readonly config: PluginConfig) {}\n\n private async defaultNamespaceRoot(): Promise<string> {\n if (!this.config.namespacesEnabled) {\n this.defaultNsRootResolved = this.config.memoryDir;\n return this.defaultNsRootResolved;\n }\n\n const legacyNsDir = path.join(this.config.memoryDir, \"namespaces\", this.config.defaultNamespace);\n const tokenizedNsDir = path.join(\n this.config.memoryDir,\n \"namespaces\",\n namespaceIdentityToken(this.config.defaultNamespace),\n );\n const tokenizedHasData =\n (await exists(tokenizedNsDir)) && (await hasAnyNamespaceStorageMarker(tokenizedNsDir, { includeRuntimeState: true }));\n const nsDir = tokenizedHasData\n ? tokenizedNsDir\n : (await exists(legacyNsDir)) ? legacyNsDir : tokenizedNsDir;\n this.defaultNsRootResolved =\n (await exists(nsDir)) && !(await hasAnyLegacyData(this.config.memoryDir))\n ? nsDir\n : this.config.memoryDir;\n return this.defaultNsRootResolved;\n }\n\n private async namespaceRoot(namespace: string): Promise<string> {\n // NOTE: only used after defaultNamespaceRoot() resolution.\n if (!this.config.namespacesEnabled) return this.config.memoryDir;\n if (namespace === this.config.defaultNamespace) {\n return this.defaultNsRootResolved ?? this.config.memoryDir;\n }\n const legacyRoot = path.join(this.config.memoryDir, \"namespaces\", namespace);\n const tokenizedRoot = path.join(this.config.memoryDir, \"namespaces\", namespaceIdentityToken(namespace));\n if ((await exists(tokenizedRoot)) && (await hasAnyNamespaceStorageMarker(tokenizedRoot, { includeRuntimeState: true }))) {\n return tokenizedRoot;\n }\n return (await exists(legacyRoot)) ? legacyRoot : tokenizedRoot;\n }\n\n async storageFor(namespace: string): Promise<StorageManager> {\n const ns = normalizeNamespaceIdentity(namespace || this.config.defaultNamespace);\n if (ns !== this.config.defaultNamespace && !isSafeRouteNamespace(ns)) {\n throw new Error(`unsafe namespace: ${ns}`);\n }\n\n let root: string;\n if (ns === this.config.defaultNamespace) {\n root = await this.defaultNamespaceRoot();\n const cached = this.cache.get(ns);\n if (cached && cached.dir === root) {\n return cached;\n }\n } else {\n const cached = this.cache.get(ns);\n root = await this.namespaceRoot(ns);\n if (cached && cached.dir === root) return cached;\n }\n\n const sm = new StorageManager(root, this.config.entitySchemas);\n // Propagate the inline-attribution template so that router-created storages\n // (used by extraction and shared-promotion paths) strip citations consistently,\n // matching the behaviour of the primary this.storage instance in the orchestrator.\n sm.citationTemplate = this.config.inlineSourceAttributionFormat;\n this.cache.set(ns, sm);\n return sm;\n }\n}\n","/**\n * @remnic/core — Category Directory Map\n *\n * Shared mapping of memory category names to directory names.\n * Single source of truth — import from here instead of copy-pasting.\n */\n\nimport path from \"node:path\";\n\nexport const CATEGORY_DIR_MAP: Record<string, string> = {\n correction: \"corrections\",\n question: \"questions\",\n preference: \"preferences\",\n decision: \"decisions\",\n moment: \"moments\",\n commitment: \"commitments\",\n principle: \"principles\",\n rule: \"rules\",\n skill: \"skills\",\n relationship: \"relationships\",\n procedure: \"procedures\",\n reasoning_trace: \"reasoning-traces\",\n};\n\n/** All directory names derived from CATEGORY_DIR_MAP, plus \"facts\" (the default). */\nexport const ALL_CATEGORY_DIRS: string[] = [\n \"facts\",\n ...Object.values(CATEGORY_DIR_MAP),\n];\n\n/** All category keys (singular form) — used when iterating categories and calling getCategoryDir. */\nexport const ALL_CATEGORY_KEYS: string[] = [\n \"fact\",\n ...Object.keys(CATEGORY_DIR_MAP),\n];\n\n/**\n * Resolve a category name to its directory path under memoryDir.\n * Falls back to `facts/` for unknown categories.\n */\nexport function getCategoryDir(memoryDir: string, category: string): string {\n const dir = Object.hasOwn(CATEGORY_DIR_MAP, category)\n ? CATEGORY_DIR_MAP[category]\n : undefined;\n return dir ? path.join(memoryDir, dir) : path.join(memoryDir, \"facts\");\n}\n"],"mappings":"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","names":["path","path"]}
@@ -25,6 +25,11 @@ function effectiveConfig(raw) {
25
25
  }
26
26
  return out;
27
27
  }
28
+ function normalizeClock(now) {
29
+ if (now === void 0) return Date.now();
30
+ if (Number.isFinite(now)) return Math.floor(now);
31
+ return 0;
32
+ }
28
33
  var CrossNamespaceBudget = class {
29
34
  config;
30
35
  buckets = /* @__PURE__ */ new Map();
@@ -46,7 +51,8 @@ var CrossNamespaceBudget = class {
46
51
  * @param now Epoch-ms clock read. Defaults to `Date.now()`; tests pass a
47
52
  * fixed value to step time deterministically.
48
53
  */
49
- record(principal, now = Date.now()) {
54
+ record(principal, now) {
55
+ const normalizedNow = normalizeClock(now);
50
56
  const { enabled, windowMs, softLimit, hardLimit } = this.config;
51
57
  const limit = { softLimit, hardLimit, windowMs };
52
58
  if (!enabled) {
@@ -61,11 +67,11 @@ var CrossNamespaceBudget = class {
61
67
  principal = "__anonymous__";
62
68
  }
63
69
  const bucket = this.buckets.get(principal) ?? { timestamps: [] };
64
- const cutoff = now - windowMs;
70
+ const cutoff = normalizedNow - windowMs;
65
71
  while (bucket.timestamps.length > 0 && bucket.timestamps[0] < cutoff) {
66
72
  bucket.timestamps.shift();
67
73
  }
68
- bucket.timestamps.push(now);
74
+ bucket.timestamps.push(normalizedNow);
69
75
  this.buckets.set(principal, bucket);
70
76
  const count = bucket.timestamps.length;
71
77
  if (count > hardLimit) {
@@ -126,7 +132,7 @@ var CrossNamespaceBudget = class {
126
132
  if (typeof principal !== "string" || principal.length === 0) {
127
133
  principal = "__anonymous__";
128
134
  }
129
- const now = args.now ?? Date.now();
135
+ const now = normalizeClock(args.now);
130
136
  const bucket = this.buckets.get(principal) ?? { timestamps: [] };
131
137
  const cutoff = now - windowMs;
132
138
  let liveCount = 0;
@@ -163,7 +169,7 @@ var CrossNamespaceBudget = class {
163
169
  }
164
170
  };
165
171
  }
166
- return this.record(args.principal, args.now ?? Date.now());
172
+ return this.record(args.principal, args.now);
167
173
  }
168
174
  /**
169
175
  * Clear all state. Intended for tests and for the orchestrator's
@@ -179,8 +185,9 @@ var CrossNamespaceBudget = class {
179
185
  * many transient principals. Safe to call at any time; returns the
180
186
  * number of buckets evicted.
181
187
  */
182
- gc(now = Date.now()) {
183
- const cutoff = now - this.config.windowMs;
188
+ gc(now) {
189
+ const normalizedNow = normalizeClock(now);
190
+ const cutoff = normalizedNow - this.config.windowMs;
184
191
  let evicted = 0;
185
192
  for (const [principal, bucket] of this.buckets.entries()) {
186
193
  while (bucket.timestamps.length > 0 && bucket.timestamps[0] < cutoff) {
@@ -203,4 +210,4 @@ export {
203
210
  DEFAULT_CROSS_NAMESPACE_BUDGET,
204
211
  CrossNamespaceBudget
205
212
  };
206
- //# sourceMappingURL=chunk-GDFS42HT.js.map
213
+ //# sourceMappingURL=chunk-CHCA44C3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cross-namespace-budget.ts"],"sourcesContent":["/**\n * Per-principal cross-namespace query-budget limiter (issue #565 PR 4/5).\n *\n * Detects and throttles bursts of recall-type operations that a principal\n * issues against namespaces *other than their own*. Thresholds come from the\n * memory-extraction threat model (`docs/security/memory-extraction-threat-model.md`\n * §6.2) and the ADAM baseline report (`docs/security/adam-baseline-2026-04.md`):\n * a T2-class same-namespace attacker plateaus at 61 queries in the published\n * baseline, so the default window is set well below that to force any\n * adaptive loop to noticeably slow down.\n *\n * Shape:\n * - Pure, in-process, per-principal sliding window. No persistence.\n * - Only cross-namespace reads count: a principal hitting only their own\n * namespace is never throttled.\n * - The limiter is behind the `recallCrossNamespaceBudgetEnabled` feature\n * flag (defaults to `false`) and is a no-op when disabled. This mirrors\n * the canonical \"new filter/transform needs an enabled check\" pattern\n * (see CLAUDE.md gotcha #30).\n *\n * The module has no side effects beyond incrementing its own counters, and\n * it does NOT take a clock dependency — callers pass the current epoch ms\n * (or let the default `Date.now()` do it) so tests can step time\n * deterministically.\n */\n\nexport interface CrossNamespaceBudgetConfig {\n /** Feature flag. Defaults to false — a disabled limiter is always allow. */\n enabled?: boolean;\n /**\n * Rolling window size in milliseconds. Counts decay out of the window\n * as the clock advances. Default: 60_000 (1 minute).\n */\n windowMs?: number;\n /**\n * Soft cap. Once a principal has `softLimit` cross-namespace reads in the\n * window, the limiter *records* a warning on the decision but still\n * allows the call. Used by PR 5's anomaly detector to surface flags\n * without blocking. Default: 10.\n */\n softLimit?: number;\n /**\n * Hard cap. Once `hardLimit` is reached, the limiter denies the call.\n * Default: 30 — picked to be well below the T2 baseline of ~60 queries\n * at half-plateau, so an ADAM-style adaptive loop is throttled before it\n * meaningfully leaks.\n */\n hardLimit?: number;\n}\n\nexport const DEFAULT_CROSS_NAMESPACE_BUDGET: Required<CrossNamespaceBudgetConfig> =\n Object.freeze({\n enabled: false,\n windowMs: 60_000,\n softLimit: 10,\n hardLimit: 30,\n });\n\n/**\n * Why a call was denied / warned. Stable strings so callers can key log\n * lines and metrics on them.\n */\nexport type BudgetDecisionReason =\n | \"allowed-same-namespace\"\n | \"allowed-no-limit\"\n | \"allowed-under-soft\"\n | \"warn-over-soft\"\n | \"deny-over-hard\";\n\nexport interface BudgetDecision {\n allowed: boolean;\n reason: BudgetDecisionReason;\n /** Cross-namespace reads by this principal currently in the window. */\n count: number;\n /** Active config snapshot at decision time. */\n limit: {\n softLimit: number;\n hardLimit: number;\n windowMs: number;\n };\n}\n\ninterface PrincipalBucket {\n /** Epoch-ms timestamps of cross-namespace reads in the active window. */\n timestamps: number[];\n}\n\n/**\n * Normalize the provided config against the defaults and reject clearly\n * invalid shapes (non-positive windows, inverted limits). Never throws —\n * returns a safe effective config the limiter can use.\n */\nfunction effectiveConfig(\n raw: CrossNamespaceBudgetConfig | undefined,\n): Required<CrossNamespaceBudgetConfig> {\n const base = { ...DEFAULT_CROSS_NAMESPACE_BUDGET };\n if (!raw) return base;\n const out = { ...base };\n if (typeof raw.enabled === \"boolean\") out.enabled = raw.enabled;\n if (\n typeof raw.windowMs === \"number\" &&\n Number.isFinite(raw.windowMs) &&\n raw.windowMs > 0\n ) {\n out.windowMs = raw.windowMs;\n }\n if (\n typeof raw.softLimit === \"number\" &&\n Number.isFinite(raw.softLimit) &&\n raw.softLimit >= 0\n ) {\n out.softLimit = Math.floor(raw.softLimit);\n }\n if (\n typeof raw.hardLimit === \"number\" &&\n Number.isFinite(raw.hardLimit) &&\n raw.hardLimit >= 1\n ) {\n // Floor the value, then defensively require the floored result is\n // still >= 1. `raw.hardLimit = 0.5` previously passed the `> 0`\n // gate and floored to 0, turning a minor misconfiguration into a\n // full denial of cross-namespace reads. Now we fall back to the\n // default instead.\n const floored = Math.floor(raw.hardLimit);\n if (floored >= 1) out.hardLimit = floored;\n }\n if (out.softLimit > out.hardLimit) {\n // Inverted limits -> treat soft = hard so we never warn past the deny\n // threshold. Defensive, should never happen with well-formed config.\n out.softLimit = out.hardLimit;\n }\n return out;\n}\n\nfunction normalizeClock(now: number | undefined): number {\n if (now === undefined) return Date.now();\n if (Number.isFinite(now)) return Math.floor(now);\n return 0;\n}\n\n/**\n * In-process cross-namespace budget limiter. Instantiate once per\n * orchestrator / access-service.\n *\n * Threadsafe-by-construction: Node.js is single-threaded per process for\n * application code, and the limiter never awaits between read-modify-write\n * operations on its internal state.\n */\nexport class CrossNamespaceBudget {\n private readonly config: Required<CrossNamespaceBudgetConfig>;\n private readonly buckets = new Map<string, PrincipalBucket>();\n\n constructor(config?: CrossNamespaceBudgetConfig) {\n this.config = effectiveConfig(config);\n }\n\n /** Exposed for tests / audit surfaces. Never mutate the returned value. */\n getConfig(): Required<CrossNamespaceBudgetConfig> {\n return this.config;\n }\n\n /**\n * Check whether `principal` is allowed to issue another cross-namespace\n * read. Call site is expected to compare `principalNamespace` against\n * `queryNamespace` and only pass through reads where they differ — the\n * limiter treats every call as a cross-namespace event.\n *\n * @param principal Stable identifier for the calling principal (token\n * subject, session principal, etc.). Must be non-empty.\n * @param now Epoch-ms clock read. Defaults to `Date.now()`; tests pass a\n * fixed value to step time deterministically.\n */\n record(principal: string, now?: number): BudgetDecision {\n const normalizedNow = normalizeClock(now);\n const { enabled, windowMs, softLimit, hardLimit } = this.config;\n const limit = { softLimit, hardLimit, windowMs };\n\n if (!enabled) {\n return {\n allowed: true,\n reason: \"allowed-no-limit\",\n count: 0,\n limit,\n };\n }\n\n if (typeof principal !== \"string\" || principal.length === 0) {\n // A missing principal means \"we can't attribute this call\". Rather\n // than fail open, treat it as a cross-namespace event against a\n // shared bucket — denial-of-service risk is bounded because the\n // bucket is scoped per-process.\n principal = \"__anonymous__\";\n }\n\n const bucket = this.buckets.get(principal) ?? { timestamps: [] };\n const cutoff = normalizedNow - windowMs;\n // Drop timestamps that slid out of the window.\n while (bucket.timestamps.length > 0 && bucket.timestamps[0]! < cutoff) {\n bucket.timestamps.shift();\n }\n\n // Count the current call against the window BEFORE deciding — a call\n // that crosses the deny threshold should itself be denied, not the\n // next one. This is what the threat model calls \"fail at the Nth,\n // not the (N+1)th\".\n bucket.timestamps.push(normalizedNow);\n this.buckets.set(principal, bucket);\n const count = bucket.timestamps.length;\n\n if (count > hardLimit) {\n // Denied: roll back the timestamp we just added so a repeated denied\n // call does not push the bucket further into the future. This keeps\n // the limiter stateless with respect to denied attempts.\n bucket.timestamps.pop();\n // Evict empty buckets (e.g. the first record after a long idle\n // rolled the only timestamp out, then got denied and rolled back).\n // Prevents unbounded map growth across many transient principals.\n if (bucket.timestamps.length === 0) {\n this.buckets.delete(principal);\n }\n return {\n allowed: false,\n reason: \"deny-over-hard\",\n count: bucket.timestamps.length,\n limit,\n };\n }\n\n if (count > softLimit) {\n return {\n allowed: true,\n reason: \"warn-over-soft\",\n count,\n limit,\n };\n }\n\n return {\n allowed: true,\n reason: \"allowed-under-soft\",\n count,\n limit,\n };\n }\n\n /**\n * Read-only peek at whether a call would be allowed, WITHOUT recording a\n * timestamp. Useful when the caller must inspect multiple namespaces before\n * deciding to record a single event. The returned `count` reflects the\n * current window state at call time.\n */\n peek(args: {\n principal: string;\n principalNamespace: string;\n queryNamespace: string;\n now?: number;\n }): BudgetDecision {\n const pn = args.principalNamespace;\n const qn = args.queryNamespace;\n const bothPresent =\n typeof pn === \"string\" && pn.length > 0 &&\n typeof qn === \"string\" && qn.length > 0;\n if (bothPresent && pn === qn) {\n return {\n allowed: true,\n reason: \"allowed-same-namespace\",\n count: 0,\n limit: {\n softLimit: this.config.softLimit,\n hardLimit: this.config.hardLimit,\n windowMs: this.config.windowMs,\n },\n };\n }\n // Cross-namespace: simulate what record() would do without the push.\n const { enabled, windowMs, softLimit, hardLimit } = this.config;\n const limit = { softLimit, hardLimit, windowMs };\n if (!enabled) {\n return { allowed: true, reason: \"allowed-no-limit\", count: 0, limit };\n }\n let principal = args.principal;\n if (typeof principal !== \"string\" || principal.length === 0) {\n principal = \"__anonymous__\";\n }\n const now = normalizeClock(args.now);\n const bucket = this.buckets.get(principal) ?? { timestamps: [] };\n const cutoff = now - windowMs;\n let liveCount = 0;\n for (const ts of bucket.timestamps) {\n if (ts >= cutoff) liveCount++;\n }\n const projected = liveCount + 1; // +1 for the current call\n if (projected > hardLimit) {\n return { allowed: false, reason: \"deny-over-hard\", count: liveCount, limit };\n }\n if (projected > softLimit) {\n return { allowed: true, reason: \"warn-over-soft\", count: projected, limit };\n }\n return { allowed: true, reason: \"allowed-under-soft\", count: projected, limit };\n }\n\n /**\n * Convenience guard that also skips the limiter when `principalNamespace`\n * equals `queryNamespace` (same-namespace is never cross-namespace).\n * Returns an `allowed-same-namespace` decision in that case.\n */\n check(args: {\n principal: string;\n principalNamespace: string;\n queryNamespace: string;\n now?: number;\n }): BudgetDecision {\n // Same-namespace short-circuit requires BOTH namespaces to be\n // non-empty strings. Two empty/undefined namespaces at runtime\n // would otherwise compare equal and fail-open — a critical bypass\n // in a security-critical module. Force the limiter to engage when\n // either side is missing so we never silently skip enforcement.\n const pn = args.principalNamespace;\n const qn = args.queryNamespace;\n const bothPresent =\n typeof pn === \"string\" && pn.length > 0 &&\n typeof qn === \"string\" && qn.length > 0;\n if (bothPresent && pn === qn) {\n return {\n allowed: true,\n reason: \"allowed-same-namespace\",\n count: 0,\n limit: {\n softLimit: this.config.softLimit,\n hardLimit: this.config.hardLimit,\n windowMs: this.config.windowMs,\n },\n };\n }\n return this.record(args.principal, args.now);\n }\n\n /**\n * Clear all state. Intended for tests and for the orchestrator's\n * lifecycle `before_reset` hook.\n */\n reset(): void {\n this.buckets.clear();\n }\n\n /**\n * Evict buckets whose entire timestamp list has slid out of the\n * active window by `now`. Intended to be called periodically by a\n * long-lived host process (e.g. from a maintenance cron) that sees\n * many transient principals. Safe to call at any time; returns the\n * number of buckets evicted.\n */\n gc(now?: number): number {\n const normalizedNow = normalizeClock(now);\n const cutoff = normalizedNow - this.config.windowMs;\n let evicted = 0;\n for (const [principal, bucket] of this.buckets.entries()) {\n while (bucket.timestamps.length > 0 && bucket.timestamps[0]! < cutoff) {\n bucket.timestamps.shift();\n }\n if (bucket.timestamps.length === 0) {\n this.buckets.delete(principal);\n evicted++;\n }\n }\n return evicted;\n }\n\n /** For tests: current number of live buckets. */\n bucketCount(): number {\n return this.buckets.size;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,22 @@
1
+ import {
2
+ throwIfAborted
3
+ } from "./chunk-PVGDJXVK.js";
4
+
5
+ // src/search/abort.ts
6
+ function isSearchAborted(execution) {
7
+ return execution?.signal?.aborted === true;
8
+ }
9
+ function throwIfSearchAborted(execution, message = "search operation aborted") {
10
+ throwIfAborted(execution?.signal, message);
11
+ }
12
+ function withTimeoutSignal(signal, timeoutMs) {
13
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
14
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
15
+ }
16
+
17
+ export {
18
+ isSearchAborted,
19
+ throwIfSearchAborted,
20
+ withTimeoutSignal
21
+ };
22
+ //# sourceMappingURL=chunk-CINZGPSJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/search/abort.ts"],"sourcesContent":["import { throwIfAborted } from \"../abort-error.js\";\nimport type { SearchExecutionOptions } from \"./port.js\";\n\nexport function isSearchAborted(execution?: SearchExecutionOptions): boolean {\n return execution?.signal?.aborted === true;\n}\n\nexport function throwIfSearchAborted(\n execution?: SearchExecutionOptions,\n message = \"search operation aborted\",\n): void {\n throwIfAborted(execution?.signal, message);\n}\n\nexport function withTimeoutSignal(signal: AbortSignal | undefined, timeoutMs: number): AbortSignal {\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n}\n"],"mappings":";;;;;AAGO,SAAS,gBAAgB,WAA6C;AAC3E,SAAO,WAAW,QAAQ,YAAY;AACxC;AAEO,SAAS,qBACd,WACA,UAAU,4BACJ;AACN,iBAAe,WAAW,QAAQ,OAAO;AAC3C;AAEO,SAAS,kBAAkB,QAAiC,WAAgC;AACjG,QAAM,gBAAgB,YAAY,QAAQ,SAAS;AACnD,SAAO,SAAS,YAAY,IAAI,CAAC,QAAQ,aAAa,CAAC,IAAI;AAC7D;","names":[]}
@@ -0,0 +1,36 @@
1
+ // src/plugin-entry-resolver.ts
2
+ function uniqueDefined(values) {
3
+ const seen = /* @__PURE__ */ new Set();
4
+ const out = [];
5
+ for (const value of values) {
6
+ if (value === void 0 || seen.has(value)) continue;
7
+ seen.add(value);
8
+ out.push(value);
9
+ }
10
+ return out;
11
+ }
12
+ function resolvePluginEntry(raw, options) {
13
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return void 0;
14
+ const root = raw;
15
+ const entries = options.getEntries(root);
16
+ if (!entries) return void 0;
17
+ const allowedIds = new Set(options.candidateIds);
18
+ const slotId = options.getSlotId?.(root);
19
+ if (typeof slotId === "string" && !allowedIds.has(slotId)) {
20
+ return void 0;
21
+ }
22
+ const activeId = typeof slotId === "string" ? slotId : void 0;
23
+ const ownId = !activeId && typeof options.preferredId === "string" && allowedIds.has(options.preferredId) ? options.preferredId : void 0;
24
+ for (const id of uniqueDefined([activeId, ownId, ...options.candidateIds])) {
25
+ const entry = entries[id];
26
+ if (entry && typeof entry === "object" && !Array.isArray(entry)) {
27
+ return entry;
28
+ }
29
+ }
30
+ return void 0;
31
+ }
32
+
33
+ export {
34
+ resolvePluginEntry
35
+ };
36
+ //# sourceMappingURL=chunk-CMTINOFS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin-entry-resolver.ts"],"sourcesContent":["export interface PluginEntryResolverOptions {\n candidateIds: readonly string[];\n preferredId?: string;\n getEntries(raw: Record<string, unknown>): Record<string, unknown> | undefined;\n getSlotId?: (raw: Record<string, unknown>) => string | undefined;\n}\n\nfunction uniqueDefined(values: Array<string | undefined>): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (value === undefined || seen.has(value)) continue;\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n\nexport function resolvePluginEntry(\n raw: unknown,\n options: PluginEntryResolverOptions,\n): Record<string, unknown> | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const root = raw as Record<string, unknown>;\n const entries = options.getEntries(root);\n if (!entries) return undefined;\n\n const allowedIds = new Set(options.candidateIds);\n const slotId = options.getSlotId?.(root);\n if (typeof slotId === \"string\" && !allowedIds.has(slotId)) {\n return undefined;\n }\n const activeId = typeof slotId === \"string\" ? slotId : undefined;\n const ownId =\n !activeId &&\n typeof options.preferredId === \"string\" &&\n allowedIds.has(options.preferredId)\n ? options.preferredId\n : undefined;\n\n for (const id of uniqueDefined([activeId, ownId, ...options.candidateIds])) {\n const entry = entries[id];\n if (entry && typeof entry === \"object\" && !Array.isArray(entry)) {\n return entry as Record<string, unknown>;\n }\n }\n return undefined;\n}\n"],"mappings":";AAOA,SAAS,cAAc,QAA6C;AAClE,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,QAAQ;AAC1B,QAAI,UAAU,UAAa,KAAK,IAAI,KAAK,EAAG;AAC5C,SAAK,IAAI,KAAK;AACd,QAAI,KAAK,KAAK;AAAA,EAChB;AACA,SAAO;AACT;AAEO,SAAS,mBACd,KACA,SACqC;AACrC,MAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,MAAM,QAAQ,GAAG,EAAG,QAAO;AAClE,QAAM,OAAO;AACb,QAAM,UAAU,QAAQ,WAAW,IAAI;AACvC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,aAAa,IAAI,IAAI,QAAQ,YAAY;AAC/C,QAAM,SAAS,QAAQ,YAAY,IAAI;AACvC,MAAI,OAAO,WAAW,YAAY,CAAC,WAAW,IAAI,MAAM,GAAG;AACzD,WAAO;AAAA,EACT;AACA,QAAM,WAAW,OAAO,WAAW,WAAW,SAAS;AACvD,QAAM,QACJ,CAAC,YACD,OAAO,QAAQ,gBAAgB,YAC/B,WAAW,IAAI,QAAQ,WAAW,IAC9B,QAAQ,cACR;AAEN,aAAW,MAAM,cAAc,CAAC,UAAU,OAAO,GAAG,QAAQ,YAAY,CAAC,GAAG;AAC1E,UAAM,QAAQ,QAAQ,EAAE;AACxB,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  estimateTokens
3
- } from "./chunk-56K5QLHX.js";
3
+ } from "./chunk-4HP7HIE3.js";
4
4
  import {
5
5
  looksLikeMechanicalTelemetryTranscript
6
6
  } from "./chunk-4RA3C3EV.js";
@@ -171,4 +171,4 @@ function chunkArray(arr, size) {
171
171
  export {
172
172
  LcmSummarizer
173
173
  };
174
- //# sourceMappingURL=chunk-34DQE4KF.js.map
174
+ //# sourceMappingURL=chunk-CO7ZO4TU.js.map