@remnic/core 1.1.31 → 9.3.515

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1087) hide show
  1. package/dist/abstraction-nodes.js +2 -2
  2. package/dist/access-cli.d.ts +1 -1
  3. package/dist/access-cli.js +156 -119
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +8 -5
  6. package/dist/access-http.js +51 -51
  7. package/dist/access-idempotency.d.ts +2 -0
  8. package/dist/access-idempotency.js +1 -1
  9. package/dist/access-mcp.d.ts +16 -9
  10. package/dist/access-mcp.js +44 -44
  11. package/dist/access-schema.d.ts +45 -13
  12. package/dist/access-schema.js +8 -8
  13. package/dist/{access-service-CkZyb35d.d.ts → access-service-qrrIrC-0.d.ts} +5 -128
  14. package/dist/access-service.d.ts +7 -4
  15. package/dist/access-service.js +40 -40
  16. package/dist/action-confidence.d.ts +1 -0
  17. package/dist/active-memory-bridge.d.ts +1 -0
  18. package/dist/active-memory-bridge.js +3 -2
  19. package/dist/active-recall.d.ts +1 -0
  20. package/dist/active-recall.js +14 -9
  21. package/dist/active-recall.js.map +1 -1
  22. package/dist/adapters/claude-code.d.ts +6 -2
  23. package/dist/adapters/claude-code.js +2 -2
  24. package/dist/adapters/codex.d.ts +5 -1
  25. package/dist/adapters/codex.js +2 -2
  26. package/dist/adapters/hermes.js +2 -2
  27. package/dist/adapters/index.js +6 -6
  28. package/dist/adapters/registry.js +6 -6
  29. package/dist/adapters/replit.d.ts +4 -2
  30. package/dist/adapters/replit.js +2 -2
  31. package/dist/adapters/types.d.ts +4 -0
  32. package/dist/adapters/types.js +1 -1
  33. package/dist/behavior-learner.d.ts +1 -0
  34. package/dist/behavior-signals.d.ts +1 -0
  35. package/dist/behavior-signals.js +1 -1
  36. package/dist/bootstrap.d.ts +5 -3
  37. package/dist/bootstrap.js +2 -2
  38. package/dist/boxes.d.ts +1 -0
  39. package/dist/boxes.js +1 -1
  40. package/dist/briefing.d.ts +1 -0
  41. package/dist/briefing.js +9 -9
  42. package/dist/buffer-surprise-report.d.ts +1 -0
  43. package/dist/buffer.d.ts +1 -0
  44. package/dist/buffer.js +2 -2
  45. package/dist/bulk-import/index.d.ts +28 -0
  46. package/dist/bulk-import/index.js +31 -0
  47. package/dist/calibration.d.ts +2 -0
  48. package/dist/calibration.js +50 -17
  49. package/dist/calibration.js.map +1 -1
  50. package/dist/{capsule-crypto-5CYAGVC5.js → capsule-crypto-7FJQINUR.js} +2 -2
  51. package/dist/{capsule-merge-4MGKE7C5.js → capsule-merge-T2JRE46P.js} +3 -3
  52. package/dist/causal-behavior.d.ts +1 -0
  53. package/dist/causal-behavior.js +4 -4
  54. package/dist/causal-chain.js +4 -4
  55. package/dist/causal-consolidation.d.ts +16 -1
  56. package/dist/causal-consolidation.js +115 -32
  57. package/dist/causal-consolidation.js.map +1 -1
  58. package/dist/causal-retrieval.js +14 -6
  59. package/dist/causal-retrieval.js.map +1 -1
  60. package/dist/causal-trajectory-graph.js +2 -2
  61. package/dist/causal-trajectory.js +2 -2
  62. package/dist/{chunk-SAZS2QZB.js → chunk-23UORJ4S.js} +3 -3
  63. package/dist/{chunk-76FLAAUC.js → chunk-2AN2L4NL.js} +17 -6
  64. package/dist/chunk-2AN2L4NL.js.map +1 -0
  65. package/dist/{chunk-W4L6CZKA.js → chunk-2DL3OFLD.js} +15 -10
  66. package/dist/chunk-2DL3OFLD.js.map +1 -0
  67. package/dist/{chunk-7OZ53EXP.js → chunk-2NLLXCJG.js} +21 -10
  68. package/dist/chunk-2NLLXCJG.js.map +1 -0
  69. package/dist/{chunk-PK7H5L6Y.js → chunk-2NM43EWN.js} +2 -2
  70. package/dist/{chunk-PYXS46O7.js → chunk-3BP57I6J.js} +2 -2
  71. package/dist/{chunk-FBYESMQ2.js → chunk-3C5RPJAX.js} +2 -2
  72. package/dist/{chunk-ZAVUCJ4H.js → chunk-3Q4H3OBR.js} +150 -65
  73. package/dist/chunk-3Q4H3OBR.js.map +1 -0
  74. package/dist/{chunk-FKFMOY3N.js → chunk-42NQ7AVG.js} +3 -4
  75. package/dist/{chunk-FKFMOY3N.js.map → chunk-42NQ7AVG.js.map} +1 -1
  76. package/dist/chunk-4426WSWL.js +73 -0
  77. package/dist/chunk-4426WSWL.js.map +1 -0
  78. package/dist/{chunk-LIRZNNUP.js → chunk-44442YCH.js} +5 -2
  79. package/dist/chunk-44442YCH.js.map +1 -0
  80. package/dist/{chunk-H3ME6L6D.js → chunk-46GJIW5M.js} +23 -20
  81. package/dist/chunk-46GJIW5M.js.map +1 -0
  82. package/dist/{chunk-QDZ2RLEC.js → chunk-472U7RDF.js} +3 -3
  83. package/dist/chunk-472U7RDF.js.map +1 -0
  84. package/dist/{chunk-NN2DKE4T.js → chunk-4H5ZJHEN.js} +16 -3
  85. package/dist/{chunk-NN2DKE4T.js.map → chunk-4H5ZJHEN.js.map} +1 -1
  86. package/dist/{chunk-56K5QLHX.js → chunk-4HP7HIE3.js} +56 -13
  87. package/dist/chunk-4HP7HIE3.js.map +1 -0
  88. package/dist/{chunk-RK2Y4XOM.js → chunk-4JRRISLU.js} +9 -6
  89. package/dist/chunk-4JRRISLU.js.map +1 -0
  90. package/dist/{chunk-U7EJOMFC.js → chunk-4Q73JBSM.js} +4 -4
  91. package/dist/{chunk-XKLD5OK4.js → chunk-4RR6ROTB.js} +10 -11
  92. package/dist/chunk-4RR6ROTB.js.map +1 -0
  93. package/dist/{chunk-4KGVTPGD.js → chunk-6F6BXB7A.js} +9 -8
  94. package/dist/chunk-6F6BXB7A.js.map +1 -0
  95. package/dist/{chunk-NMZY542O.js → chunk-6URPAY2D.js} +41 -17
  96. package/dist/chunk-6URPAY2D.js.map +1 -0
  97. package/dist/{chunk-N53K2EXC.js → chunk-6VF75M3X.js} +2 -2
  98. package/dist/{chunk-XSZEP4SF.js → chunk-6XSPNR6L.js} +6 -5
  99. package/dist/chunk-6XSPNR6L.js.map +1 -0
  100. package/dist/{chunk-6H2TESSP.js → chunk-765K3SAT.js} +3 -3
  101. package/dist/{chunk-EDTHC6UD.js → chunk-77NAFXUD.js} +2 -2
  102. package/dist/{chunk-S7KDBTWT.js → chunk-7F7Z6MOS.js} +29 -14
  103. package/dist/chunk-7F7Z6MOS.js.map +1 -0
  104. package/dist/{chunk-MZH6EHNR.js → chunk-7H6CFEBJ.js} +41 -14
  105. package/dist/chunk-7H6CFEBJ.js.map +1 -0
  106. package/dist/{chunk-575RMLWN.js → chunk-7MV5CWTE.js} +26 -20
  107. package/dist/chunk-7MV5CWTE.js.map +1 -0
  108. package/dist/{chunk-MGKYQQYF.js → chunk-7Q3RCKAQ.js} +2 -2
  109. package/dist/chunk-7RXCMVFQ.js +27 -0
  110. package/dist/chunk-7RXCMVFQ.js.map +1 -0
  111. package/dist/{chunk-DGXUHMOV.js → chunk-A2IYSXDQ.js} +25 -6
  112. package/dist/chunk-A2IYSXDQ.js.map +1 -0
  113. package/dist/{chunk-EABGC2TL.js → chunk-A2Z6UCWT.js} +26 -4
  114. package/dist/chunk-A2Z6UCWT.js.map +1 -0
  115. package/dist/{chunk-3VAL7ZL2.js → chunk-A52AKD7C.js} +59 -24
  116. package/dist/chunk-A52AKD7C.js.map +1 -0
  117. package/dist/{chunk-5375UYTQ.js → chunk-A6D7A2FW.js} +4 -4
  118. package/dist/chunk-A6D7A2FW.js.map +1 -0
  119. package/dist/{chunk-FAAFWE4G.js → chunk-ALEPI75L.js} +24 -6
  120. package/dist/chunk-ALEPI75L.js.map +1 -0
  121. package/dist/{chunk-3SLRNYNG.js → chunk-AUDJPF4N.js} +15 -4
  122. package/dist/chunk-AUDJPF4N.js.map +1 -0
  123. package/dist/chunk-B5XMS73R.js +145 -0
  124. package/dist/chunk-B5XMS73R.js.map +1 -0
  125. package/dist/{chunk-HXXBL2KD.js → chunk-BECQDWBA.js} +44 -4
  126. package/dist/chunk-BECQDWBA.js.map +1 -0
  127. package/dist/{chunk-7SEAZFFB.js → chunk-BEUDU7Y4.js} +24 -4
  128. package/dist/chunk-BEUDU7Y4.js.map +1 -0
  129. package/dist/{chunk-XVVIG67A.js → chunk-BLZAVUD2.js} +61 -17
  130. package/dist/chunk-BLZAVUD2.js.map +1 -0
  131. package/dist/chunk-CHBI22MI.js +159 -0
  132. package/dist/chunk-CHBI22MI.js.map +1 -0
  133. package/dist/{chunk-GDFS42HT.js → chunk-CHCA44C3.js} +15 -8
  134. package/dist/chunk-CHCA44C3.js.map +1 -0
  135. package/dist/chunk-CINZGPSJ.js +22 -0
  136. package/dist/chunk-CINZGPSJ.js.map +1 -0
  137. package/dist/chunk-CMTINOFS.js +36 -0
  138. package/dist/chunk-CMTINOFS.js.map +1 -0
  139. package/dist/{chunk-34DQE4KF.js → chunk-CO7ZO4TU.js} +2 -2
  140. package/dist/{chunk-PFV5C235.js → chunk-CPPS65WS.js} +2 -1
  141. package/dist/{chunk-PFV5C235.js.map → chunk-CPPS65WS.js.map} +1 -1
  142. package/dist/{chunk-DINWEURR.js → chunk-CSKLPDN6.js} +20 -6
  143. package/dist/chunk-CSKLPDN6.js.map +1 -0
  144. package/dist/chunk-CWWMTTQE.js +566 -0
  145. package/dist/chunk-CWWMTTQE.js.map +1 -0
  146. package/dist/{chunk-IQT3XTKW.js → chunk-D24OXEPB.js} +13 -7
  147. package/dist/chunk-D24OXEPB.js.map +1 -0
  148. package/dist/{chunk-TPU5L5EY.js → chunk-D6WE5MTW.js} +272 -411
  149. package/dist/chunk-D6WE5MTW.js.map +1 -0
  150. package/dist/{chunk-WIICJPET.js → chunk-DEUNUKTD.js} +6 -4
  151. package/dist/{chunk-WIICJPET.js.map → chunk-DEUNUKTD.js.map} +1 -1
  152. package/dist/{chunk-ZYVPLJ4T.js → chunk-DHGSZ3UD.js} +9 -7
  153. package/dist/chunk-DHGSZ3UD.js.map +1 -0
  154. package/dist/{chunk-JR4ZC3G4.js → chunk-DLJ4IR6M.js} +91 -41
  155. package/dist/chunk-DLJ4IR6M.js.map +1 -0
  156. package/dist/{chunk-U4SCL7B7.js → chunk-DRD2Q7HQ.js} +82 -18
  157. package/dist/chunk-DRD2Q7HQ.js.map +1 -0
  158. package/dist/{chunk-2IWUMAES.js → chunk-E62SBGQ3.js} +28 -13
  159. package/dist/chunk-E62SBGQ3.js.map +1 -0
  160. package/dist/{chunk-C5BCH4ZS.js → chunk-EAZGEEG2.js} +21 -3
  161. package/dist/chunk-EAZGEEG2.js.map +1 -0
  162. package/dist/{chunk-TPB3I2AC.js → chunk-ECZU5BJH.js} +31 -10
  163. package/dist/chunk-ECZU5BJH.js.map +1 -0
  164. package/dist/{chunk-77H5NU3M.js → chunk-EDBEWFJO.js} +82 -18
  165. package/dist/chunk-EDBEWFJO.js.map +1 -0
  166. package/dist/chunk-EDQVAMQI.js +308 -0
  167. package/dist/chunk-EDQVAMQI.js.map +1 -0
  168. package/dist/{chunk-RRF5UOBJ.js → chunk-EI6V5UXY.js} +22 -15
  169. package/dist/chunk-EI6V5UXY.js.map +1 -0
  170. package/dist/{chunk-I5GLV3VE.js → chunk-EIPUHVKE.js} +31 -24
  171. package/dist/{chunk-I5GLV3VE.js.map → chunk-EIPUHVKE.js.map} +1 -1
  172. package/dist/{chunk-ZKSK55RC.js → chunk-ETUPBUHB.js} +2 -2
  173. package/dist/{chunk-25MQ7IHJ.js → chunk-EUML3N6B.js} +17 -6
  174. package/dist/chunk-EUML3N6B.js.map +1 -0
  175. package/dist/{chunk-5RGLBDQF.js → chunk-EVZFIAPG.js} +12 -12
  176. package/dist/chunk-EVZFIAPG.js.map +1 -0
  177. package/dist/{chunk-QRNI5JBH.js → chunk-EYIEWJNI.js} +2 -2
  178. package/dist/{chunk-YU5KIWYQ.js → chunk-FER4WARO.js} +79 -41
  179. package/dist/chunk-FER4WARO.js.map +1 -0
  180. package/dist/{chunk-43PJZYGL.js → chunk-FPGE5NVO.js} +45 -10
  181. package/dist/chunk-FPGE5NVO.js.map +1 -0
  182. package/dist/{chunk-C6QPK5GG.js → chunk-FZZ2QTJI.js} +2 -2
  183. package/dist/{chunk-D46YSIYX.js → chunk-G3Z3QEF5.js} +19 -11
  184. package/dist/{chunk-D46YSIYX.js.map → chunk-G3Z3QEF5.js.map} +1 -1
  185. package/dist/{chunk-3JXBXXM2.js → chunk-G4IAEX6D.js} +2 -2
  186. package/dist/{chunk-MSWG7JI6.js → chunk-G56P5RLD.js} +8 -2
  187. package/dist/chunk-G56P5RLD.js.map +1 -0
  188. package/dist/{chunk-AGZQD76C.js → chunk-GCGJW34D.js} +48 -2
  189. package/dist/chunk-GCGJW34D.js.map +1 -0
  190. package/dist/chunk-H2NCNXMS.js +159 -0
  191. package/dist/chunk-H2NCNXMS.js.map +1 -0
  192. package/dist/{chunk-XYIK4LF6.js → chunk-H3FZVNRN.js} +8 -2
  193. package/dist/chunk-H3FZVNRN.js.map +1 -0
  194. package/dist/{chunk-TK4UEOSK.js → chunk-HDDRVXX4.js} +8 -8
  195. package/dist/chunk-HDDRVXX4.js.map +1 -0
  196. package/dist/{chunk-LLQ2LLWF.js → chunk-HENLZHIT.js} +15 -5
  197. package/dist/chunk-HENLZHIT.js.map +1 -0
  198. package/dist/{chunk-N2D6GXBM.js → chunk-HINSGUA7.js} +28 -20
  199. package/dist/chunk-HINSGUA7.js.map +1 -0
  200. package/dist/{chunk-APO3DCMU.js → chunk-HLAVGJ62.js} +30 -8
  201. package/dist/chunk-HLAVGJ62.js.map +1 -0
  202. package/dist/{chunk-TPMQ3G6Z.js → chunk-HOJZMQ4J.js} +2 -2
  203. package/dist/chunk-HOJZMQ4J.js.map +1 -0
  204. package/dist/{chunk-LUDTDZLK.js → chunk-HPWVAEET.js} +33 -7
  205. package/dist/chunk-HPWVAEET.js.map +1 -0
  206. package/dist/{chunk-NZL6GGQE.js → chunk-HQ6NIBL6.js} +92 -30
  207. package/dist/chunk-HQ6NIBL6.js.map +1 -0
  208. package/dist/{chunk-UWVJF25J.js → chunk-HWVTS5NO.js} +20 -6
  209. package/dist/chunk-HWVTS5NO.js.map +1 -0
  210. package/dist/{chunk-2WWLHTZY.js → chunk-IC4GELZE.js} +2 -2
  211. package/dist/{chunk-QA2ZAPBU.js → chunk-IPLYGWQF.js} +28 -20
  212. package/dist/chunk-IPLYGWQF.js.map +1 -0
  213. package/dist/{chunk-A6KTB5R6.js → chunk-IQ3OI2RR.js} +3 -3
  214. package/dist/chunk-IQ3OI2RR.js.map +1 -0
  215. package/dist/{chunk-6LVVDPJ4.js → chunk-J64TK33U.js} +3 -4
  216. package/dist/chunk-J64TK33U.js.map +1 -0
  217. package/dist/{chunk-6FC5EGNV.js → chunk-JBPKEARU.js} +15 -5
  218. package/dist/{chunk-6FC5EGNV.js.map → chunk-JBPKEARU.js.map} +1 -1
  219. package/dist/{chunk-RHY3HH7P.js → chunk-JFEKNTX7.js} +125 -33
  220. package/dist/chunk-JFEKNTX7.js.map +1 -0
  221. package/dist/{chunk-TZOLIGIG.js → chunk-JJEJJ7RK.js} +4 -2
  222. package/dist/chunk-JJEJJ7RK.js.map +1 -0
  223. package/dist/{chunk-PCUKNJAZ.js → chunk-JKV57BTN.js} +2 -2
  224. package/dist/{chunk-EJI5XIBB.js → chunk-JLNBQWZ2.js} +55 -7
  225. package/dist/chunk-JLNBQWZ2.js.map +1 -0
  226. package/dist/{chunk-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
  227. package/dist/chunk-JUC24CTX.js.map +1 -0
  228. package/dist/{chunk-3ZLVGM76.js → chunk-JYIKKAK3.js} +106 -44
  229. package/dist/chunk-JYIKKAK3.js.map +1 -0
  230. package/dist/{chunk-OIGNEXKZ.js → chunk-K5O2QY6T.js} +5 -1
  231. package/dist/{chunk-OIGNEXKZ.js.map → chunk-K5O2QY6T.js.map} +1 -1
  232. package/dist/{chunk-ZTFCYYEZ.js → chunk-KCYE2MZM.js} +3 -3
  233. package/dist/chunk-KCYE2MZM.js.map +1 -0
  234. package/dist/{chunk-JWPLJLDU.js → chunk-KD3QD3A5.js} +2 -2
  235. package/dist/{chunk-JWPLJLDU.js.map → chunk-KD3QD3A5.js.map} +1 -1
  236. package/dist/{chunk-YRMVARQP.js → chunk-KFY3SGN7.js} +49 -2
  237. package/dist/chunk-KFY3SGN7.js.map +1 -0
  238. package/dist/{chunk-CYFQJMUV.js → chunk-KIB7SDIJ.js} +15 -10
  239. package/dist/chunk-KIB7SDIJ.js.map +1 -0
  240. package/dist/{chunk-3KW65B36.js → chunk-KILOTVIF.js} +95 -48
  241. package/dist/chunk-KILOTVIF.js.map +1 -0
  242. package/dist/{chunk-MXFBBHJU.js → chunk-KJMYHC7K.js} +10 -5
  243. package/dist/chunk-KJMYHC7K.js.map +1 -0
  244. package/dist/{chunk-W3LR522O.js → chunk-KM2A35EO.js} +36 -34
  245. package/dist/chunk-KM2A35EO.js.map +1 -0
  246. package/dist/{chunk-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
  247. package/dist/chunk-L227SKTB.js.map +1 -0
  248. package/dist/{chunk-W6AQJ2PY.js → chunk-L7S47WZT.js} +35 -16
  249. package/dist/chunk-L7S47WZT.js.map +1 -0
  250. package/dist/{chunk-BVF3AGJP.js → chunk-LJBOVCQG.js} +26 -11
  251. package/dist/chunk-LJBOVCQG.js.map +1 -0
  252. package/dist/{chunk-2KI4QFHU.js → chunk-LMDRGRJ2.js} +2 -2
  253. package/dist/{chunk-MY6TPVXW.js → chunk-LMPHTYJC.js} +2 -2
  254. package/dist/{chunk-EHRTFRWW.js → chunk-LQHDIS7L.js} +10 -5
  255. package/dist/chunk-LQHDIS7L.js.map +1 -0
  256. package/dist/chunk-LUDUFZTV.js +170 -0
  257. package/dist/chunk-LUDUFZTV.js.map +1 -0
  258. package/dist/{chunk-5HRY2WRF.js → chunk-LZ3VEOU5.js} +2 -2
  259. package/dist/{chunk-Q7P4WJDP.js → chunk-M5T4Q2ZU.js} +1 -1
  260. package/dist/chunk-M5T4Q2ZU.js.map +1 -0
  261. package/dist/{chunk-ICRIXAP2.js → chunk-MC4FJXPA.js} +16 -6
  262. package/dist/chunk-MC4FJXPA.js.map +1 -0
  263. package/dist/{chunk-WPGJYVUH.js → chunk-MGVIEM2O.js} +23 -6
  264. package/dist/chunk-MGVIEM2O.js.map +1 -0
  265. package/dist/{chunk-YROHKYBY.js → chunk-O27WNHTT.js} +22 -6
  266. package/dist/chunk-O27WNHTT.js.map +1 -0
  267. package/dist/{chunk-NGAVDO7E.js → chunk-OADWQ5CR.js} +2 -2
  268. package/dist/{chunk-2NMMFZ5T.js → chunk-OD4FM2U7.js} +6 -3
  269. package/dist/chunk-OD4FM2U7.js.map +1 -0
  270. package/dist/{chunk-OZHRDTDX.js → chunk-OKTXM5H4.js} +11 -1
  271. package/dist/chunk-OKTXM5H4.js.map +1 -0
  272. package/dist/{chunk-RXDLTSWT.js → chunk-ONPLNAPX.js} +16 -7
  273. package/dist/chunk-ONPLNAPX.js.map +1 -0
  274. package/dist/{chunk-FJ43PRLT.js → chunk-ORFGK3XI.js} +20 -14
  275. package/dist/chunk-ORFGK3XI.js.map +1 -0
  276. package/dist/{chunk-DOM4GKSW.js → chunk-OZKVVUJB.js} +3 -3
  277. package/dist/{chunk-MT4HVDUZ.js → chunk-PM3QHTFT.js} +3 -3
  278. package/dist/{chunk-4DWOBS2A.js → chunk-PRQJ5ESM.js} +27 -2
  279. package/dist/{chunk-4DWOBS2A.js.map → chunk-PRQJ5ESM.js.map} +1 -1
  280. package/dist/chunk-PU44GBL4.js +52 -0
  281. package/dist/chunk-PU44GBL4.js.map +1 -0
  282. package/dist/{chunk-MJFNCJXV.js → chunk-Q4CAQGKQ.js} +47 -9
  283. package/dist/chunk-Q4CAQGKQ.js.map +1 -0
  284. package/dist/{chunk-U3WSW6PZ.js → chunk-QMYXNM4P.js} +90 -35
  285. package/dist/chunk-QMYXNM4P.js.map +1 -0
  286. package/dist/{chunk-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
  287. package/dist/chunk-QY7YA7OL.js.map +1 -0
  288. package/dist/{chunk-QLLBRHAT.js → chunk-R26QUUQN.js} +181 -257
  289. package/dist/chunk-R26QUUQN.js.map +1 -0
  290. package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
  291. package/dist/{chunk-TMQLARTH.js → chunk-RCTS5CKK.js} +33 -14
  292. package/dist/chunk-RCTS5CKK.js.map +1 -0
  293. package/dist/{chunk-2PRLKQAH.js → chunk-RLV3PQGH.js} +35 -19
  294. package/dist/chunk-RLV3PQGH.js.map +1 -0
  295. package/dist/{chunk-WW3QQF4H.js → chunk-ROZJACKP.js} +16 -1
  296. package/dist/chunk-ROZJACKP.js.map +1 -0
  297. package/dist/{chunk-7MNMYOFP.js → chunk-RSUYKGGZ.js} +3 -4
  298. package/dist/chunk-RSUYKGGZ.js.map +1 -0
  299. package/dist/{chunk-LT3NLYSI.js → chunk-RUZOJKNF.js} +10 -7
  300. package/dist/chunk-RUZOJKNF.js.map +1 -0
  301. package/dist/{chunk-326G7DJK.js → chunk-RW5DGAGO.js} +67 -13
  302. package/dist/chunk-RW5DGAGO.js.map +1 -0
  303. package/dist/{chunk-KOSORCJG.js → chunk-S53PKKWK.js} +63 -24
  304. package/dist/chunk-S53PKKWK.js.map +1 -0
  305. package/dist/{chunk-65PG43EQ.js → chunk-S7WU3Y3D.js} +21 -4
  306. package/dist/chunk-S7WU3Y3D.js.map +1 -0
  307. package/dist/{chunk-SKE7JYKA.js → chunk-SFXKHM7P.js} +2 -2
  308. package/dist/{chunk-HMDCOMYU.js → chunk-SKGV326D.js} +3 -3
  309. package/dist/chunk-T2PO5MUF.js +62 -0
  310. package/dist/chunk-T2PO5MUF.js.map +1 -0
  311. package/dist/{chunk-C7VW7C3F.js → chunk-TDKQGLJW.js} +3 -3
  312. package/dist/chunk-TDKQGLJW.js.map +1 -0
  313. package/dist/{chunk-3QKK7QOS.js → chunk-TERNBNJB.js} +3 -3
  314. package/dist/chunk-TERNBNJB.js.map +1 -0
  315. package/dist/{chunk-MXC3AP5I.js → chunk-TGQ2NTWH.js} +12 -7
  316. package/dist/chunk-TGQ2NTWH.js.map +1 -0
  317. package/dist/{chunk-3Y4P7RXM.js → chunk-TMSXWOBZ.js} +3 -4
  318. package/dist/chunk-TMSXWOBZ.js.map +1 -0
  319. package/dist/{chunk-3TNBOMQT.js → chunk-TVRN5QKH.js} +11 -11
  320. package/dist/{chunk-3TNBOMQT.js.map → chunk-TVRN5QKH.js.map} +1 -1
  321. package/dist/{chunk-5UM2VJ6D.js → chunk-UEY3VB6W.js} +2 -2
  322. package/dist/{chunk-I6K5FBRQ.js → chunk-UI3NYK34.js} +4 -1
  323. package/dist/{chunk-I6K5FBRQ.js.map → chunk-UI3NYK34.js.map} +1 -1
  324. package/dist/{chunk-VBJ7V5SK.js → chunk-UIPDNLXA.js} +21 -8
  325. package/dist/chunk-UIPDNLXA.js.map +1 -0
  326. package/dist/{chunk-GIF42EW3.js → chunk-UP6MOYCB.js} +3 -3
  327. package/dist/{chunk-K4FLSOR5.js → chunk-USYGGIJZ.js} +44 -15
  328. package/dist/chunk-USYGGIJZ.js.map +1 -0
  329. package/dist/{chunk-FIT6DMX6.js → chunk-UWY7GIVS.js} +152 -54
  330. package/dist/chunk-UWY7GIVS.js.map +1 -0
  331. package/dist/{chunk-MRILGULB.js → chunk-V2RCP53Q.js} +2 -2
  332. package/dist/{chunk-XKECPATV.js → chunk-VFUEZZBS.js} +113 -4
  333. package/dist/chunk-VFUEZZBS.js.map +1 -0
  334. package/dist/{chunk-FSFEQI74.js → chunk-W7L6HXUC.js} +2 -2
  335. package/dist/{chunk-3IQ2TR4N.js → chunk-WLEB7WCG.js} +2 -2
  336. package/dist/{chunk-GL6I6MEQ.js → chunk-WSGF57U2.js} +3 -3
  337. package/dist/{chunk-KNKUID7G.js → chunk-X7Y7WX73.js} +72 -6
  338. package/dist/chunk-X7Y7WX73.js.map +1 -0
  339. package/dist/{chunk-5NPGSAVB.js → chunk-XEKAG3FM.js} +23 -5
  340. package/dist/chunk-XEKAG3FM.js.map +1 -0
  341. package/dist/{chunk-3APJ5EVB.js → chunk-XKIQZXUB.js} +41 -26
  342. package/dist/chunk-XKIQZXUB.js.map +1 -0
  343. package/dist/chunk-XKXKSQU7.js +92 -0
  344. package/dist/chunk-XKXKSQU7.js.map +1 -0
  345. package/dist/{chunk-JA3AK3PT.js → chunk-XNLXAWHX.js} +4 -4
  346. package/dist/{chunk-CULXMQJH.js → chunk-XPXEJRUB.js} +3 -3
  347. package/dist/chunk-XPXEJRUB.js.map +1 -0
  348. package/dist/{chunk-PZIAX57I.js → chunk-XR6DNK4U.js} +7 -4
  349. package/dist/chunk-XR6DNK4U.js.map +1 -0
  350. package/dist/{chunk-47VWKCAF.js → chunk-XSQ4SGM5.js} +33 -4
  351. package/dist/chunk-XSQ4SGM5.js.map +1 -0
  352. package/dist/{chunk-66DHUKLO.js → chunk-XSWKORGM.js} +16 -14
  353. package/dist/chunk-XSWKORGM.js.map +1 -0
  354. package/dist/{chunk-QR3C7BKQ.js → chunk-XZ4WBBB5.js} +7 -8
  355. package/dist/chunk-XZ4WBBB5.js.map +1 -0
  356. package/dist/{chunk-WNARATI3.js → chunk-Y2SXZ5KZ.js} +59 -11
  357. package/dist/chunk-Y2SXZ5KZ.js.map +1 -0
  358. package/dist/{chunk-SIC6U3GZ.js → chunk-YHV3KRKS.js} +3 -3
  359. package/dist/{chunk-ZPKBYX2F.js → chunk-YNDLCWXS.js} +85 -9
  360. package/dist/chunk-YNDLCWXS.js.map +1 -0
  361. package/dist/{chunk-VLXA6PI2.js → chunk-YQMZ7IH2.js} +4 -4
  362. package/dist/{chunk-TMM4S4IJ.js → chunk-YR6GIWWY.js} +58 -8
  363. package/dist/chunk-YR6GIWWY.js.map +1 -0
  364. package/dist/{chunk-DK5LDEQM.js → chunk-YR7XMOWK.js} +39 -23
  365. package/dist/chunk-YR7XMOWK.js.map +1 -0
  366. package/dist/chunk-ZFXCQPNO.js +27 -0
  367. package/dist/chunk-ZFXCQPNO.js.map +1 -0
  368. package/dist/citations.js +1 -1
  369. package/dist/{cli-kuh9PwZ5.d.ts → cli-X4NJoqSe.d.ts} +8 -31
  370. package/dist/cli.d.ts +10 -6
  371. package/dist/cli.js +122 -117
  372. package/dist/commitment-ledger.js +2 -2
  373. package/dist/compat/checks.js +1 -2
  374. package/dist/compounding/engine.d.ts +3 -2
  375. package/dist/compounding/engine.js +11 -11
  376. package/dist/compounding/preference-consolidator.d.ts +1 -0
  377. package/dist/compounding/preference-consolidator.js +8 -8
  378. package/dist/compounding/preference-consolidator.js.map +1 -1
  379. package/dist/compression-optimizer.d.ts +1 -0
  380. package/dist/compression-optimizer.js +1 -1
  381. package/dist/config.d.ts +1 -0
  382. package/dist/config.js +3 -2
  383. package/dist/connectors/codex-materialize-runner.d.ts +1 -0
  384. package/dist/connectors/codex-materialize-runner.js +12 -11
  385. package/dist/connectors/codex-materialize.d.ts +1 -0
  386. package/dist/connectors/codex-materialize.js +3 -2
  387. package/dist/connectors/index.d.ts +1 -0
  388. package/dist/connectors/index.js +14 -14
  389. package/dist/{connectors-cli-CwbyjGR7.d.ts → connectors-cli-DbTPNj2H.d.ts} +7 -1
  390. package/dist/connectors-cli.d.ts +1 -1
  391. package/dist/connectors-cli.js +3 -1
  392. package/dist/consolidation-provenance-check.d.ts +1 -0
  393. package/dist/consolidation-provenance-check.js +2 -2
  394. package/dist/consolidation-undo.d.ts +1 -0
  395. package/dist/consolidation-undo.js +1 -1
  396. package/dist/contradiction/index.d.ts +3 -1
  397. package/dist/contradiction/index.js +3 -3
  398. package/dist/{contradiction-review-ATP4S6IC.js → contradiction-review-6V2LXXK6.js} +2 -2
  399. package/dist/{contradiction-scan-5A4IDZV5.js → contradiction-scan-GIRVC4C7.js} +3 -3
  400. package/dist/conversation-index/backend.d.ts +3 -1
  401. package/dist/conversation-index/backend.js +3 -3
  402. package/dist/conversation-index/chunker.d.ts +1 -0
  403. package/dist/conversation-index/cleanup.js +1 -1
  404. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  405. package/dist/conversation-index/faiss-adapter.js +1 -1
  406. package/dist/conversation-index/indexer.d.ts +5 -2
  407. package/dist/conversation-index/indexer.js +1 -1
  408. package/dist/conversation-index/search.d.ts +2 -1
  409. package/dist/cross-namespace-budget.js +1 -1
  410. package/dist/cue-anchors.js +2 -2
  411. package/dist/dashboard-runtime.d.ts +6 -0
  412. package/dist/dashboard-runtime.js +3 -3
  413. package/dist/day-summary.d.ts +1 -0
  414. package/dist/day-summary.js +2 -2
  415. package/dist/delinearize.d.ts +1 -0
  416. package/dist/direct-answer-wiring.d.ts +1 -0
  417. package/dist/direct-answer.d.ts +1 -0
  418. package/dist/{dreams-ledger-LR2NBAZE.js → dreams-ledger-3WSCI5V4.js} +5 -4
  419. package/dist/{dreams-ledger-LR2NBAZE.js.map → dreams-ledger-3WSCI5V4.js.map} +1 -1
  420. package/dist/embedding-fallback.d.ts +3 -0
  421. package/dist/embedding-fallback.js +2 -2
  422. package/dist/enrichment/index.d.ts +1 -0
  423. package/dist/enrichment/index.js +1 -1
  424. package/dist/entity-retrieval.d.ts +2 -0
  425. package/dist/entity-retrieval.js +9 -9
  426. package/dist/entity-schema.d.ts +1 -0
  427. package/dist/evals.js +1 -1
  428. package/dist/explicit-capture.d.ts +5 -3
  429. package/dist/explicit-capture.js +2 -2
  430. package/dist/extraction-judge-telemetry.d.ts +2 -0
  431. package/dist/extraction-judge-training.d.ts +2 -0
  432. package/dist/extraction-judge.d.ts +2 -0
  433. package/dist/extraction.d.ts +2 -0
  434. package/dist/extraction.js +12 -12
  435. package/dist/{faiss-adapter-CzPghc4C.d.ts → faiss-adapter-BHecI1fF.d.ts} +4 -1
  436. package/dist/fallback-llm.d.ts +11 -1
  437. package/dist/fallback-llm.js +8 -6
  438. package/dist/{first-start-migration-4MHQEOSD.js → first-start-migration-CKTCTCQI.js} +5 -5
  439. package/dist/graph-dashboard-diff.d.ts +4 -0
  440. package/dist/graph-dashboard-diff.js +1 -1
  441. package/dist/graph-dashboard-parser.js +1 -1
  442. package/dist/{graph-edge-decay-5DI5GUNL.js → graph-edge-decay-MUP5J7CC.js} +6 -6
  443. package/dist/graph-events.js +1 -1
  444. package/dist/graph-snapshot.js +3 -3
  445. package/dist/graph.js +2 -2
  446. package/dist/harmonic-retrieval.js +4 -4
  447. package/dist/identity-continuity.d.ts +1 -0
  448. package/dist/importance.d.ts +1 -0
  449. package/dist/importers/index.d.ts +244 -0
  450. package/dist/importers/index.js +20 -0
  451. package/dist/index.d.ts +20 -350
  452. package/dist/index.js +884 -561
  453. package/dist/index.js.map +1 -1
  454. package/dist/intent.d.ts +1 -0
  455. package/dist/lcm/archive.d.ts +2 -2
  456. package/dist/lcm/archive.js +2 -2
  457. package/dist/lcm/engine.d.ts +3 -2
  458. package/dist/lcm/engine.js +6 -6
  459. package/dist/lcm/index.d.ts +1 -0
  460. package/dist/lcm/index.js +8 -8
  461. package/dist/lcm/recall.js +1 -1
  462. package/dist/lcm/summarizer.js +3 -3
  463. package/dist/lcm/tools.d.ts +1 -0
  464. package/dist/lifecycle.d.ts +1 -0
  465. package/dist/live-connectors-runner.d.ts +1 -0
  466. package/dist/live-connectors-runner.js +6 -6
  467. package/dist/local-llm.d.ts +1 -0
  468. package/dist/local-llm.js +2 -2
  469. package/dist/maintenance/archive-observations.js +1 -1
  470. package/dist/maintenance/memory-governance.d.ts +3 -1
  471. package/dist/maintenance/memory-governance.js +10 -8
  472. package/dist/maintenance/migrate-observations.js +3 -2
  473. package/dist/maintenance/observation-ledger-utils.d.ts +3 -0
  474. package/dist/maintenance/observation-ledger-utils.js +2 -1
  475. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -1
  476. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -8
  477. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -1
  478. package/dist/maintenance/rebuild-memory-projection.js +13 -10
  479. package/dist/maintenance/rebuild-observations.d.ts +1 -0
  480. package/dist/maintenance/rebuild-observations.js +3 -2
  481. package/dist/mcp-memory-inspector-app.d.ts +7 -4
  482. package/dist/mcp-memory-inspector-app.js +1 -1
  483. package/dist/memory-action-policy.d.ts +1 -0
  484. package/dist/memory-cache.d.ts +1 -0
  485. package/dist/memory-cache.js +1 -1
  486. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -0
  487. package/dist/memory-projection-store.d.ts +1 -0
  488. package/dist/memory-projection-store.js +1 -1
  489. package/dist/memory-provenance.d.ts +1 -0
  490. package/dist/memory-worth-outcomes.d.ts +1 -0
  491. package/dist/migrate/from-engram.js +2 -2
  492. package/dist/{migrate-from-identity-anchor-G27MCD6A.js → migrate-from-identity-anchor-EB4XI4Q2.js} +2 -2
  493. package/dist/model-registry.js +1 -1
  494. package/dist/models-json.d.ts +1 -0
  495. package/dist/namespaces/migrate.d.ts +3 -0
  496. package/dist/namespaces/migrate.js +24 -22
  497. package/dist/namespaces/principal.d.ts +1 -0
  498. package/dist/namespaces/principal.js +2 -1
  499. package/dist/namespaces/search.d.ts +1 -0
  500. package/dist/namespaces/search.js +15 -13
  501. package/dist/namespaces/storage.d.ts +4 -2
  502. package/dist/namespaces/storage.js +10 -9
  503. package/dist/native-knowledge.d.ts +1 -0
  504. package/dist/native-knowledge.js +1 -1
  505. package/dist/negative.js +1 -1
  506. package/dist/network/webdav.d.ts +16 -1
  507. package/dist/network/webdav.js +5 -3
  508. package/dist/objective-state-writers.js +4 -4
  509. package/dist/objective-state.js +2 -2
  510. package/dist/offline-sync.js +4 -4
  511. package/dist/operator-toolkit.d.ts +1 -0
  512. package/dist/operator-toolkit.js +35 -32
  513. package/dist/opik-exporter.js +1 -1
  514. package/dist/{orchestrator-DuWl9Hwx.d.ts → orchestrator-Co9nxRLF.d.ts} +4 -74
  515. package/dist/orchestrator.d.ts +5 -3
  516. package/dist/orchestrator.js +99 -96
  517. package/dist/page-versioning.js +1 -1
  518. package/dist/path-X2K5XCHL.js +9 -0
  519. package/dist/patterns-cli.d.ts +1 -0
  520. package/dist/peers/index.d.ts +328 -0
  521. package/dist/{peers-HCVGHMAE.js → peers/index.js} +4 -4
  522. package/dist/pipeline-D18UAKlN.d.ts +32 -0
  523. package/dist/plugin-entry-resolver.d.ts +9 -0
  524. package/dist/plugin-entry-resolver.js +8 -0
  525. package/dist/plugin-entry-resolver.js.map +1 -0
  526. package/dist/plugin-id.d.ts +2 -21
  527. package/dist/plugin-id.js +33 -4
  528. package/dist/plugin-id.js.map +1 -1
  529. package/dist/policy-runtime.d.ts +4 -0
  530. package/dist/policy-runtime.js +1 -1
  531. package/dist/profiling.js +1 -1
  532. package/dist/qmd-recall-cache.d.ts +1 -0
  533. package/dist/qmd.d.ts +1 -0
  534. package/dist/qmd.js +3 -3
  535. package/dist/recall-disclosure-escalation.d.ts +1 -0
  536. package/dist/recall-explain-renderer.d.ts +1 -0
  537. package/dist/recall-explain-renderer.js +3 -3
  538. package/dist/recall-state.d.ts +8 -1
  539. package/dist/recall-state.js +2 -1
  540. package/dist/recall-tag-filter.d.ts +1 -0
  541. package/dist/recall-xray-cli.d.ts +1 -0
  542. package/dist/recall-xray-cli.js +4 -4
  543. package/dist/recall-xray-renderer.d.ts +1 -0
  544. package/dist/recall-xray-renderer.js +3 -3
  545. package/dist/recall-xray.d.ts +1 -0
  546. package/dist/recall-xray.js +2 -2
  547. package/dist/relevance.d.ts +7 -1
  548. package/dist/relevance.js +2 -1
  549. package/dist/replay/normalizers/chatgpt.js +2 -2
  550. package/dist/replay/normalizers/claude.js +2 -2
  551. package/dist/replay/normalizers/openclaw.js +2 -2
  552. package/dist/replay/normalizers/shared.js +1 -1
  553. package/dist/replay/runner.js +1 -1
  554. package/dist/rerank.js +1 -1
  555. package/dist/{resolution-B7FNQSSP.js → resolution-ZY7VM6WS.js} +3 -3
  556. package/dist/resolution-ZY7VM6WS.js.map +1 -0
  557. package/dist/resolve-auth-token.d.ts +1 -0
  558. package/dist/resolve-auth-token.js +1 -1
  559. package/dist/resolve-provider-secret.d.ts +19 -29
  560. package/dist/resolve-provider-secret.js +2 -6
  561. package/dist/resume-bundles.js +10 -9
  562. package/dist/retrieval-agents.d.ts +2 -1
  563. package/dist/retrieval-agents.js +2 -1
  564. package/dist/retrieval-tiers.d.ts +1 -0
  565. package/dist/routing/engine.d.ts +1 -0
  566. package/dist/routing/store.d.ts +3 -0
  567. package/dist/routing/store.js +1 -1
  568. package/dist/runtime/env.js +1 -1
  569. package/dist/schemas.d.ts +191 -17
  570. package/dist/schemas.js +1 -1
  571. package/dist/sdk-compat.js +1 -1
  572. package/dist/search/document-scanner.js +1 -1
  573. package/dist/search/embed-helper.d.ts +7 -2
  574. package/dist/search/embed-helper.js +3 -1
  575. package/dist/search/factory.d.ts +2 -1
  576. package/dist/search/factory.js +13 -12
  577. package/dist/search/index.d.ts +2 -1
  578. package/dist/search/index.js +19 -18
  579. package/dist/search/lancedb-backend.d.ts +7 -6
  580. package/dist/search/lancedb-backend.js +4 -2
  581. package/dist/search/meilisearch-backend.d.ts +7 -6
  582. package/dist/search/meilisearch-backend.js +4 -2
  583. package/dist/search/noop-backend.d.ts +1 -0
  584. package/dist/search/orama-backend.d.ts +9 -7
  585. package/dist/search/orama-backend.js +8 -4
  586. package/dist/search/port.d.ts +1 -0
  587. package/dist/search/remote-backend.d.ts +1 -0
  588. package/dist/secure-store/index.d.ts +16 -3
  589. package/dist/secure-store/index.js +2 -2
  590. package/dist/{semantic-VwGI14Ok.d.ts → semantic-SLAa_prH.d.ts} +5 -3
  591. package/dist/semantic-consolidation.d.ts +1 -0
  592. package/dist/semantic-consolidation.js +14 -13
  593. package/dist/semantic-rule-promotion.js +8 -8
  594. package/dist/semantic-rule-verifier.d.ts +1 -0
  595. package/dist/semantic-rule-verifier.js +8 -8
  596. package/dist/session-integrity.d.ts +1 -0
  597. package/dist/session-integrity.js +1 -1
  598. package/dist/session-observer-bands.d.ts +1 -0
  599. package/dist/session-observer-state.d.ts +6 -1
  600. package/dist/session-observer-state.js +1 -1
  601. package/dist/shared-context/manager.d.ts +5 -0
  602. package/dist/shared-context/manager.js +3 -3
  603. package/dist/signal.d.ts +1 -0
  604. package/dist/signal.js +1 -1
  605. package/dist/source-attribution.js +1 -1
  606. package/dist/state-store-4QZISH3J.js +30 -0
  607. package/dist/state-store-4QZISH3J.js.map +1 -0
  608. package/dist/storage-C4DX8CuG.d.ts +157 -0
  609. package/dist/storage.d.ts +2 -0
  610. package/dist/storage.js +7 -7
  611. package/dist/store-contract.js +1 -1
  612. package/dist/summarizer.d.ts +1 -0
  613. package/dist/summarizer.js +7 -7
  614. package/dist/summary-snapshot.d.ts +1 -0
  615. package/dist/surfaces/dreams.js +48 -17
  616. package/dist/surfaces/dreams.js.map +1 -1
  617. package/dist/temporal-supersession.d.ts +1 -0
  618. package/dist/temporal-supersession.js +1 -1
  619. package/dist/temporal-validity.d.ts +1 -0
  620. package/dist/threading.d.ts +1 -0
  621. package/dist/tier-migration.d.ts +1 -0
  622. package/dist/tier-routing.d.ts +1 -0
  623. package/dist/{tier-stats-62ZVDFKS.js → tier-stats-SKML2OSF.js} +5 -5
  624. package/dist/tmt.js +1 -1
  625. package/dist/tokens.js +2 -2
  626. package/dist/topics.d.ts +1 -0
  627. package/dist/{trace-C5ETWBEF.js → trace-WM7V4CKI.js} +31 -1
  628. package/dist/trace-WM7V4CKI.js.map +1 -0
  629. package/dist/transcript.d.ts +1 -0
  630. package/dist/transcript.js +2 -2
  631. package/dist/transfer/autodetect.js +7 -7
  632. package/dist/transfer/backup.js +5 -5
  633. package/dist/transfer/capsule-export.js +5 -5
  634. package/dist/transfer/capsule-import.d.ts +6 -0
  635. package/dist/transfer/capsule-import.js +4 -4
  636. package/dist/transfer/export-json.js +3 -3
  637. package/dist/transfer/export-md.js +3 -3
  638. package/dist/transfer/export-sqlite.js +3 -3
  639. package/dist/transfer/fs-utils.d.ts +2 -1
  640. package/dist/transfer/fs-utils.js +5 -3
  641. package/dist/transfer/import-json.js +3 -3
  642. package/dist/transfer/import-md.js +3 -3
  643. package/dist/transfer/import-sqlite.js +3 -3
  644. package/dist/trust-zones.js +2 -2
  645. package/dist/types-B1VHaf2w.d.ts +126 -0
  646. package/dist/types-BliCnURB.d.ts +83 -0
  647. package/dist/types.d.ts +35 -0
  648. package/dist/types.js +1 -1
  649. package/dist/utility-learner.js +3 -3
  650. package/dist/utility-runtime.d.ts +1 -0
  651. package/dist/utility-runtime.js +4 -4
  652. package/dist/utility-telemetry.js +2 -2
  653. package/dist/verified-recall.js +9 -9
  654. package/dist/work/board.js +2 -2
  655. package/dist/work/boundary.js +1 -1
  656. package/dist/work/storage.d.ts +5 -0
  657. package/dist/work/storage.js +1 -1
  658. package/dist/work-product-ledger.js +2 -2
  659. package/package.json +74 -3
  660. package/scripts/ensure-better-sqlite3.mjs +8 -7
  661. package/scripts/faiss_index.py +141 -29
  662. package/src/access-cli.test.ts +87 -2
  663. package/src/access-cli.ts +59 -5
  664. package/src/access-http.test.ts +150 -0
  665. package/src/access-http.ts +89 -34
  666. package/src/access-idempotency.ts +136 -3
  667. package/src/access-mcp.test.ts +155 -0
  668. package/src/access-mcp.ts +116 -30
  669. package/src/access-schema.ts +22 -4
  670. package/src/access-service-project-tag.test.ts +37 -0
  671. package/src/access-service.ts +11 -10
  672. package/src/active-recall.test.ts +29 -1
  673. package/src/active-recall.ts +11 -7
  674. package/src/adapters/claude-code.ts +7 -8
  675. package/src/adapters/codex.ts +6 -7
  676. package/src/adapters/hermes.ts +1 -5
  677. package/src/adapters/registry.test.ts +63 -0
  678. package/src/adapters/registry.ts +10 -0
  679. package/src/adapters/replit.ts +5 -7
  680. package/src/adapters/types.ts +24 -1
  681. package/src/behavior-signals.ts +1 -1
  682. package/src/binary-lifecycle/backend.ts +16 -4
  683. package/src/binary-lifecycle/pipeline.test.ts +149 -0
  684. package/src/binary-lifecycle/pipeline.ts +49 -7
  685. package/src/binary-lifecycle/scanner.ts +19 -4
  686. package/src/boxes.ts +119 -32
  687. package/src/buffer-session.test.ts +28 -0
  688. package/src/buffer.ts +10 -14
  689. package/src/bulk-import/types.ts +10 -0
  690. package/src/calibration.test.ts +99 -0
  691. package/src/calibration.ts +57 -13
  692. package/src/causal-consolidation.test.ts +214 -0
  693. package/src/causal-consolidation.ts +131 -14
  694. package/src/causal-retrieval.ts +16 -3
  695. package/src/citations.test.ts +75 -0
  696. package/src/citations.ts +19 -6
  697. package/src/cli.ts +134 -109
  698. package/src/coding/coding-namespace.test.ts +7 -0
  699. package/src/coding/coding-namespace.ts +8 -0
  700. package/src/coding/review-context.test.ts +30 -0
  701. package/src/coding/review-context.ts +79 -9
  702. package/src/coding/wire-coding-context.test.ts +16 -0
  703. package/src/compat/checks.test.ts +33 -0
  704. package/src/compat/checks.ts +64 -4
  705. package/src/compounding/engine.ts +2 -2
  706. package/src/compounding/preference-consolidator.test.ts +47 -0
  707. package/src/compounding/preference-consolidator.ts +8 -8
  708. package/src/compression-optimizer.ts +5 -2
  709. package/src/config.test.ts +34 -2
  710. package/src/config.ts +62 -18
  711. package/src/connectors/codex-materialize-runner.ts +4 -3
  712. package/src/connectors/codex-materialize.ts +149 -34
  713. package/src/connectors/index.test.ts +144 -7
  714. package/src/connectors/index.ts +86 -15
  715. package/src/connectors/live/github.test.ts +47 -0
  716. package/src/connectors/live/github.ts +29 -1
  717. package/src/connectors/live/index.ts +2 -0
  718. package/src/connectors/live/live-connectors.test.ts +359 -73
  719. package/src/connectors/live/notion.test.ts +84 -0
  720. package/src/connectors/live/notion.ts +18 -1
  721. package/src/connectors/live/state-store.ts +419 -38
  722. package/src/connectors/weclone-installer.test.ts +16 -18
  723. package/src/connectors-cli.ts +19 -0
  724. package/src/console/trace.test.ts +28 -0
  725. package/src/console/trace.ts +42 -5
  726. package/src/contradiction/contradiction-judge.test.ts +49 -0
  727. package/src/contradiction/contradiction-judge.ts +15 -5
  728. package/src/contradiction/contradiction-review.ts +31 -7
  729. package/src/contradiction/contradiction-scan.ts +28 -18
  730. package/src/contradiction/contradiction.test.ts +237 -1
  731. package/src/contradiction/resolution.ts +43 -4
  732. package/src/conversation-index/backend.ts +13 -5
  733. package/src/conversation-index/cleanup.ts +25 -4
  734. package/src/conversation-index/faiss-adapter.ts +24 -15
  735. package/src/conversation-index/indexer.test.ts +71 -10
  736. package/src/conversation-index/indexer.ts +22 -3
  737. package/src/cross-namespace-budget.test.ts +59 -0
  738. package/src/cross-namespace-budget.ts +15 -7
  739. package/src/curation/index.ts +18 -17
  740. package/src/dashboard-runtime.test.ts +98 -0
  741. package/src/dashboard-runtime.ts +96 -6
  742. package/src/dedup/index.test.ts +133 -0
  743. package/src/dedup/index.ts +73 -10
  744. package/src/dedup/semantic.test.ts +77 -2
  745. package/src/dedup/semantic.ts +26 -6
  746. package/src/embedding-fallback.ts +47 -15
  747. package/src/enrichment/audit.ts +8 -1
  748. package/src/enrichment/pipeline.ts +21 -13
  749. package/src/enrichment/web-search-provider.ts +1 -6
  750. package/src/entity-retrieval.ts +57 -6
  751. package/src/evals.ts +22 -13
  752. package/src/explicit-capture.test.ts +40 -0
  753. package/src/explicit-capture.ts +14 -2
  754. package/src/extraction.ts +42 -30
  755. package/src/fallback-llm.ts +35 -2
  756. package/src/graph-dashboard-diff.test.ts +57 -0
  757. package/src/graph-dashboard-diff.ts +24 -2
  758. package/src/graph-dashboard-parser.test.ts +31 -0
  759. package/src/graph-dashboard-parser.ts +4 -1
  760. package/src/graph-events.ts +6 -4
  761. package/src/graph.test.ts +69 -0
  762. package/src/graph.ts +7 -4
  763. package/src/importers/base.test.ts +70 -0
  764. package/src/importers/base.ts +56 -7
  765. package/src/index.ts +5 -2
  766. package/src/lcm/archive.ts +65 -16
  767. package/src/lcm/engine.ts +27 -8
  768. package/src/lcm/recall.ts +5 -5
  769. package/src/lcm-engine.test.ts +87 -1
  770. package/src/lcm-recall.test.ts +71 -0
  771. package/src/live-connectors-runner.ts +100 -36
  772. package/src/maintenance/archive-observations.ts +24 -3
  773. package/src/maintenance/atomic-file.ts +85 -0
  774. package/src/maintenance/dreams-ledger.ts +15 -8
  775. package/src/maintenance/memory-governance.test.ts +53 -0
  776. package/src/maintenance/memory-governance.ts +15 -5
  777. package/src/maintenance/observation-ledger-utils.ts +6 -5
  778. package/src/maintenance/purge.test.ts +64 -0
  779. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +22 -9
  780. package/src/maintenance/rebuild-memory-projection.ts +22 -9
  781. package/src/maintenance/rebuild-observations.ts +7 -3
  782. package/src/mcp-memory-inspector-app.ts +26 -3
  783. package/src/memory-cache.test.ts +19 -0
  784. package/src/memory-cache.ts +1 -0
  785. package/src/memory-extension/codex-publisher.ts +25 -4
  786. package/src/memory-extension-host/host-discovery.test.ts +69 -0
  787. package/src/memory-extension-host/host-discovery.ts +63 -6
  788. package/src/memory-projection-store.ts +114 -62
  789. package/src/message-parts/index.ts +46 -31
  790. package/src/message-parts/message-parts.test.ts +77 -0
  791. package/src/migrate/from-engram.ts +68 -14
  792. package/src/model-registry.test.ts +38 -0
  793. package/src/model-registry.ts +12 -7
  794. package/src/namespaces/identity.test.ts +66 -0
  795. package/src/namespaces/identity.ts +23 -0
  796. package/src/namespaces/migrate.test.ts +62 -0
  797. package/src/namespaces/migrate.ts +82 -14
  798. package/src/namespaces/principal.test.ts +37 -1
  799. package/src/namespaces/principal.ts +18 -7
  800. package/src/namespaces/search.test.ts +76 -6
  801. package/src/namespaces/search.ts +22 -21
  802. package/src/namespaces/storage.ts +93 -11
  803. package/src/native-knowledge.ts +23 -3
  804. package/src/negative.ts +50 -5
  805. package/src/network/webdav.ts +177 -58
  806. package/src/onboarding/index.test.ts +105 -0
  807. package/src/onboarding/index.ts +17 -5
  808. package/src/operator-toolkit.ts +39 -4
  809. package/src/orchestrator.ts +52 -17
  810. package/src/page-versioning.ts +31 -5
  811. package/src/peers/peers.test.ts +70 -0
  812. package/src/peers/storage.ts +32 -3
  813. package/src/plugin-entry-resolver.test.ts +60 -0
  814. package/src/plugin-entry-resolver.ts +48 -0
  815. package/src/plugin-id.test.ts +38 -0
  816. package/src/plugin-id.ts +31 -64
  817. package/src/policy-runtime.test.ts +75 -0
  818. package/src/policy-runtime.ts +32 -3
  819. package/src/procedural/procedure-miner.test.ts +152 -0
  820. package/src/procedural/procedure-miner.ts +124 -19
  821. package/src/profiling.test.ts +23 -0
  822. package/src/profiling.ts +10 -1
  823. package/src/projection/index.test.ts +253 -0
  824. package/src/projection/index.ts +159 -18
  825. package/src/qmd-client.test.ts +45 -0
  826. package/src/qmd.ts +8 -8
  827. package/src/recall-disclosure.test.ts +15 -1
  828. package/src/recall-state.ts +24 -5
  829. package/src/relevance.ts +24 -5
  830. package/src/replay/normalizers/chatgpt.ts +14 -4
  831. package/src/replay/normalizers/claude.ts +8 -3
  832. package/src/replay/normalizers/openclaw.ts +35 -12
  833. package/src/replay/normalizers/replay-normalizers.test.ts +65 -0
  834. package/src/replay/normalizers/shared.ts +4 -1
  835. package/src/replay/runner.ts +1 -1
  836. package/src/rerank.test.ts +41 -1
  837. package/src/rerank.ts +2 -2
  838. package/src/resolve-auth-token.test.ts +29 -0
  839. package/src/resolve-auth-token.ts +12 -7
  840. package/src/resolve-provider-secret.test.ts +78 -22
  841. package/src/resolve-provider-secret.ts +55 -223
  842. package/src/retrieval-agents.ts +51 -14
  843. package/src/review/index.test.ts +75 -1
  844. package/src/review/index.ts +88 -30
  845. package/src/routing/store.ts +36 -6
  846. package/src/runtime/env.test.ts +73 -0
  847. package/src/runtime/env.ts +7 -11
  848. package/src/schemas.ts +16 -1
  849. package/src/search/abort.ts +18 -0
  850. package/src/search/document-scanner.test.ts +80 -0
  851. package/src/search/document-scanner.ts +51 -9
  852. package/src/search/embed-helper.ts +19 -6
  853. package/src/search/factory.ts +9 -5
  854. package/src/search/lancedb-backend.ts +62 -22
  855. package/src/search/meilisearch-backend.ts +35 -12
  856. package/src/search/orama-backend.test.ts +27 -0
  857. package/src/search/orama-backend.ts +65 -15
  858. package/src/secure-store/cli-handlers.ts +70 -6
  859. package/src/secure-store/cli-renderer.ts +13 -7
  860. package/src/secure-store/secure-fs.ts +11 -5
  861. package/src/secure-store/secure-store.test.ts +70 -0
  862. package/src/semantic-consolidation.test.ts +45 -0
  863. package/src/semantic-consolidation.ts +3 -3
  864. package/src/session-integrity.test.ts +98 -0
  865. package/src/session-integrity.ts +51 -1
  866. package/src/session-observer-state.ts +108 -41
  867. package/src/shared-context/manager.ts +93 -15
  868. package/src/signal.test.ts +14 -0
  869. package/src/signal.ts +8 -1
  870. package/src/source-attribution.test.ts +8 -0
  871. package/src/source-attribution.ts +24 -2
  872. package/src/spaces/index.test.ts +93 -0
  873. package/src/spaces/index.ts +75 -9
  874. package/src/storage.ts +14 -1
  875. package/src/store-contract.test.ts +35 -0
  876. package/src/store-contract.ts +39 -5
  877. package/src/summarizer.ts +24 -18
  878. package/src/summary-snapshot.test.ts +77 -0
  879. package/src/surfaces/dreams.test.ts +73 -0
  880. package/src/surfaces/dreams.ts +53 -19
  881. package/src/sync/index.ts +42 -17
  882. package/src/taxonomy/taxonomy-loader.ts +43 -4
  883. package/src/temporal-supersession.test.ts +67 -0
  884. package/src/temporal-supersession.ts +8 -0
  885. package/src/tmt.test.ts +50 -0
  886. package/src/tmt.ts +35 -11
  887. package/src/tokens.test.ts +18 -0
  888. package/src/tokens.ts +7 -0
  889. package/src/training-export/converter.test.ts +55 -2
  890. package/src/training-export/converter.ts +36 -10
  891. package/src/training-export/registry.test.ts +17 -0
  892. package/src/training-export/registry.ts +19 -1
  893. package/src/transcript.ts +2 -2
  894. package/src/transfer/backup.ts +18 -7
  895. package/src/transfer/capsule-crypto.ts +105 -21
  896. package/src/transfer/capsule-encrypt.test.ts +106 -7
  897. package/src/transfer/capsule-export.ts +23 -14
  898. package/src/transfer/capsule-import.ts +11 -2
  899. package/src/transfer/exclusions.ts +7 -0
  900. package/src/transfer/export-sqlite.ts +14 -13
  901. package/src/transfer/fs-utils.ts +52 -1
  902. package/src/transfer/import-json.ts +12 -7
  903. package/src/transfer/import-md.ts +5 -5
  904. package/src/transfer/import-sqlite.ts +4 -5
  905. package/src/trust-zones.ts +1 -1
  906. package/src/types.ts +25 -0
  907. package/src/utility-telemetry.ts +1 -1
  908. package/src/utils/category-dir.test.ts +15 -0
  909. package/src/utils/category-dir.ts +3 -1
  910. package/src/work/boundary.ts +30 -18
  911. package/src/work/storage.ts +116 -38
  912. package/src/work-product-ledger.ts +1 -1
  913. package/dist/chunk-25MQ7IHJ.js.map +0 -1
  914. package/dist/chunk-2IWUMAES.js.map +0 -1
  915. package/dist/chunk-2NMMFZ5T.js.map +0 -1
  916. package/dist/chunk-2PRLKQAH.js.map +0 -1
  917. package/dist/chunk-326G7DJK.js.map +0 -1
  918. package/dist/chunk-3APJ5EVB.js.map +0 -1
  919. package/dist/chunk-3KW65B36.js.map +0 -1
  920. package/dist/chunk-3QKK7QOS.js.map +0 -1
  921. package/dist/chunk-3SLRNYNG.js.map +0 -1
  922. package/dist/chunk-3VAL7ZL2.js.map +0 -1
  923. package/dist/chunk-3Y4P7RXM.js.map +0 -1
  924. package/dist/chunk-3ZLVGM76.js.map +0 -1
  925. package/dist/chunk-43PJZYGL.js.map +0 -1
  926. package/dist/chunk-47VWKCAF.js.map +0 -1
  927. package/dist/chunk-4KGVTPGD.js.map +0 -1
  928. package/dist/chunk-5375UYTQ.js.map +0 -1
  929. package/dist/chunk-56K5QLHX.js.map +0 -1
  930. package/dist/chunk-575RMLWN.js.map +0 -1
  931. package/dist/chunk-5NPGSAVB.js.map +0 -1
  932. package/dist/chunk-5RGLBDQF.js.map +0 -1
  933. package/dist/chunk-65PG43EQ.js.map +0 -1
  934. package/dist/chunk-66DHUKLO.js.map +0 -1
  935. package/dist/chunk-6LVVDPJ4.js.map +0 -1
  936. package/dist/chunk-76FLAAUC.js.map +0 -1
  937. package/dist/chunk-77H5NU3M.js.map +0 -1
  938. package/dist/chunk-7MNMYOFP.js.map +0 -1
  939. package/dist/chunk-7OZ53EXP.js.map +0 -1
  940. package/dist/chunk-7SEAZFFB.js.map +0 -1
  941. package/dist/chunk-A6KTB5R6.js.map +0 -1
  942. package/dist/chunk-AGZQD76C.js.map +0 -1
  943. package/dist/chunk-APO3DCMU.js.map +0 -1
  944. package/dist/chunk-BVF3AGJP.js.map +0 -1
  945. package/dist/chunk-C5BCH4ZS.js.map +0 -1
  946. package/dist/chunk-C7VW7C3F.js.map +0 -1
  947. package/dist/chunk-CULXMQJH.js.map +0 -1
  948. package/dist/chunk-CYFQJMUV.js.map +0 -1
  949. package/dist/chunk-D654IBA6.js +0 -61
  950. package/dist/chunk-D654IBA6.js.map +0 -1
  951. package/dist/chunk-DGXUHMOV.js.map +0 -1
  952. package/dist/chunk-DINWEURR.js.map +0 -1
  953. package/dist/chunk-DK5LDEQM.js.map +0 -1
  954. package/dist/chunk-EABGC2TL.js.map +0 -1
  955. package/dist/chunk-EHRTFRWW.js.map +0 -1
  956. package/dist/chunk-EJI5XIBB.js.map +0 -1
  957. package/dist/chunk-FAAFWE4G.js.map +0 -1
  958. package/dist/chunk-FAJ7FZYM.js +0 -11
  959. package/dist/chunk-FAJ7FZYM.js.map +0 -1
  960. package/dist/chunk-FDU6HUUL.js +0 -147
  961. package/dist/chunk-FDU6HUUL.js.map +0 -1
  962. package/dist/chunk-FIT6DMX6.js.map +0 -1
  963. package/dist/chunk-FJ43PRLT.js.map +0 -1
  964. package/dist/chunk-FLTNHQK6.js +0 -262
  965. package/dist/chunk-FLTNHQK6.js.map +0 -1
  966. package/dist/chunk-GDFS42HT.js.map +0 -1
  967. package/dist/chunk-H3ME6L6D.js.map +0 -1
  968. package/dist/chunk-HXXBL2KD.js.map +0 -1
  969. package/dist/chunk-ICRIXAP2.js.map +0 -1
  970. package/dist/chunk-IQT3XTKW.js.map +0 -1
  971. package/dist/chunk-JR4ZC3G4.js.map +0 -1
  972. package/dist/chunk-K4FLSOR5.js.map +0 -1
  973. package/dist/chunk-KNKUID7G.js.map +0 -1
  974. package/dist/chunk-KOSORCJG.js.map +0 -1
  975. package/dist/chunk-LIRZNNUP.js.map +0 -1
  976. package/dist/chunk-LLQ2LLWF.js.map +0 -1
  977. package/dist/chunk-LPMVBPA3.js +0 -236
  978. package/dist/chunk-LPMVBPA3.js.map +0 -1
  979. package/dist/chunk-LT3NLYSI.js.map +0 -1
  980. package/dist/chunk-LUDTDZLK.js.map +0 -1
  981. package/dist/chunk-MJFNCJXV.js.map +0 -1
  982. package/dist/chunk-MSWG7JI6.js.map +0 -1
  983. package/dist/chunk-MXC3AP5I.js.map +0 -1
  984. package/dist/chunk-MXFBBHJU.js.map +0 -1
  985. package/dist/chunk-MZH6EHNR.js.map +0 -1
  986. package/dist/chunk-N2D6GXBM.js.map +0 -1
  987. package/dist/chunk-NBNN5GOB.js.map +0 -1
  988. package/dist/chunk-NMZY542O.js.map +0 -1
  989. package/dist/chunk-NZL6GGQE.js.map +0 -1
  990. package/dist/chunk-OZHRDTDX.js.map +0 -1
  991. package/dist/chunk-PZIAX57I.js.map +0 -1
  992. package/dist/chunk-Q7P4WJDP.js.map +0 -1
  993. package/dist/chunk-QA2ZAPBU.js.map +0 -1
  994. package/dist/chunk-QDZ2RLEC.js.map +0 -1
  995. package/dist/chunk-QLLBRHAT.js.map +0 -1
  996. package/dist/chunk-QR3C7BKQ.js.map +0 -1
  997. package/dist/chunk-RHY3HH7P.js.map +0 -1
  998. package/dist/chunk-RK2Y4XOM.js.map +0 -1
  999. package/dist/chunk-RR2PKP3I.js +0 -63
  1000. package/dist/chunk-RR2PKP3I.js.map +0 -1
  1001. package/dist/chunk-RRF5UOBJ.js.map +0 -1
  1002. package/dist/chunk-RXDLTSWT.js.map +0 -1
  1003. package/dist/chunk-RYED3SPJ.js +0 -42
  1004. package/dist/chunk-RYED3SPJ.js.map +0 -1
  1005. package/dist/chunk-S7KDBTWT.js.map +0 -1
  1006. package/dist/chunk-TK4UEOSK.js.map +0 -1
  1007. package/dist/chunk-TMM4S4IJ.js.map +0 -1
  1008. package/dist/chunk-TMQLARTH.js.map +0 -1
  1009. package/dist/chunk-TPB3I2AC.js.map +0 -1
  1010. package/dist/chunk-TPMQ3G6Z.js.map +0 -1
  1011. package/dist/chunk-TPU5L5EY.js.map +0 -1
  1012. package/dist/chunk-TZOLIGIG.js.map +0 -1
  1013. package/dist/chunk-U3WSW6PZ.js.map +0 -1
  1014. package/dist/chunk-U4SCL7B7.js.map +0 -1
  1015. package/dist/chunk-U66YHYC7.js +0 -31
  1016. package/dist/chunk-U66YHYC7.js.map +0 -1
  1017. package/dist/chunk-UWVJF25J.js.map +0 -1
  1018. package/dist/chunk-VBJ7V5SK.js.map +0 -1
  1019. package/dist/chunk-W3LR522O.js.map +0 -1
  1020. package/dist/chunk-W4L6CZKA.js.map +0 -1
  1021. package/dist/chunk-W6AQJ2PY.js.map +0 -1
  1022. package/dist/chunk-WELDCG6C.js.map +0 -1
  1023. package/dist/chunk-WNARATI3.js.map +0 -1
  1024. package/dist/chunk-WPGJYVUH.js.map +0 -1
  1025. package/dist/chunk-WW3QQF4H.js.map +0 -1
  1026. package/dist/chunk-XIG5PDM7.js.map +0 -1
  1027. package/dist/chunk-XKECPATV.js.map +0 -1
  1028. package/dist/chunk-XKLD5OK4.js.map +0 -1
  1029. package/dist/chunk-XSZEP4SF.js.map +0 -1
  1030. package/dist/chunk-XVVIG67A.js.map +0 -1
  1031. package/dist/chunk-XYIK4LF6.js.map +0 -1
  1032. package/dist/chunk-YRMVARQP.js.map +0 -1
  1033. package/dist/chunk-YROHKYBY.js.map +0 -1
  1034. package/dist/chunk-YU5KIWYQ.js.map +0 -1
  1035. package/dist/chunk-ZAVUCJ4H.js.map +0 -1
  1036. package/dist/chunk-ZPKBYX2F.js.map +0 -1
  1037. package/dist/chunk-ZTFCYYEZ.js.map +0 -1
  1038. package/dist/chunk-ZYVPLJ4T.js.map +0 -1
  1039. package/dist/path-MR5JPYOP.js +0 -9
  1040. package/dist/state-store-VZU2IA53.js +0 -16
  1041. package/dist/trace-C5ETWBEF.js.map +0 -1
  1042. /package/dist/{capsule-crypto-5CYAGVC5.js.map → bulk-import/index.js.map} +0 -0
  1043. /package/dist/{contradiction-review-ATP4S6IC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  1044. /package/dist/{capsule-merge-4MGKE7C5.js.map → capsule-merge-T2JRE46P.js.map} +0 -0
  1045. /package/dist/{chunk-SAZS2QZB.js.map → chunk-23UORJ4S.js.map} +0 -0
  1046. /package/dist/{chunk-PK7H5L6Y.js.map → chunk-2NM43EWN.js.map} +0 -0
  1047. /package/dist/{chunk-PYXS46O7.js.map → chunk-3BP57I6J.js.map} +0 -0
  1048. /package/dist/{chunk-FBYESMQ2.js.map → chunk-3C5RPJAX.js.map} +0 -0
  1049. /package/dist/{chunk-U7EJOMFC.js.map → chunk-4Q73JBSM.js.map} +0 -0
  1050. /package/dist/{chunk-N53K2EXC.js.map → chunk-6VF75M3X.js.map} +0 -0
  1051. /package/dist/{chunk-6H2TESSP.js.map → chunk-765K3SAT.js.map} +0 -0
  1052. /package/dist/{chunk-EDTHC6UD.js.map → chunk-77NAFXUD.js.map} +0 -0
  1053. /package/dist/{chunk-MGKYQQYF.js.map → chunk-7Q3RCKAQ.js.map} +0 -0
  1054. /package/dist/{chunk-34DQE4KF.js.map → chunk-CO7ZO4TU.js.map} +0 -0
  1055. /package/dist/{chunk-ZKSK55RC.js.map → chunk-ETUPBUHB.js.map} +0 -0
  1056. /package/dist/{chunk-QRNI5JBH.js.map → chunk-EYIEWJNI.js.map} +0 -0
  1057. /package/dist/{chunk-C6QPK5GG.js.map → chunk-FZZ2QTJI.js.map} +0 -0
  1058. /package/dist/{chunk-3JXBXXM2.js.map → chunk-G4IAEX6D.js.map} +0 -0
  1059. /package/dist/{chunk-2WWLHTZY.js.map → chunk-IC4GELZE.js.map} +0 -0
  1060. /package/dist/{chunk-PCUKNJAZ.js.map → chunk-JKV57BTN.js.map} +0 -0
  1061. /package/dist/{chunk-2KI4QFHU.js.map → chunk-LMDRGRJ2.js.map} +0 -0
  1062. /package/dist/{chunk-MY6TPVXW.js.map → chunk-LMPHTYJC.js.map} +0 -0
  1063. /package/dist/{chunk-5HRY2WRF.js.map → chunk-LZ3VEOU5.js.map} +0 -0
  1064. /package/dist/{chunk-NGAVDO7E.js.map → chunk-OADWQ5CR.js.map} +0 -0
  1065. /package/dist/{chunk-DOM4GKSW.js.map → chunk-OZKVVUJB.js.map} +0 -0
  1066. /package/dist/{chunk-MT4HVDUZ.js.map → chunk-PM3QHTFT.js.map} +0 -0
  1067. /package/dist/{chunk-ZK7I7JYV.js.map → chunk-R3PS27B4.js.map} +0 -0
  1068. /package/dist/{chunk-SKE7JYKA.js.map → chunk-SFXKHM7P.js.map} +0 -0
  1069. /package/dist/{chunk-HMDCOMYU.js.map → chunk-SKGV326D.js.map} +0 -0
  1070. /package/dist/{chunk-5UM2VJ6D.js.map → chunk-UEY3VB6W.js.map} +0 -0
  1071. /package/dist/{chunk-GIF42EW3.js.map → chunk-UP6MOYCB.js.map} +0 -0
  1072. /package/dist/{chunk-MRILGULB.js.map → chunk-V2RCP53Q.js.map} +0 -0
  1073. /package/dist/{chunk-FSFEQI74.js.map → chunk-W7L6HXUC.js.map} +0 -0
  1074. /package/dist/{chunk-3IQ2TR4N.js.map → chunk-WLEB7WCG.js.map} +0 -0
  1075. /package/dist/{chunk-GL6I6MEQ.js.map → chunk-WSGF57U2.js.map} +0 -0
  1076. /package/dist/{chunk-JA3AK3PT.js.map → chunk-XNLXAWHX.js.map} +0 -0
  1077. /package/dist/{chunk-SIC6U3GZ.js.map → chunk-YHV3KRKS.js.map} +0 -0
  1078. /package/dist/{chunk-VLXA6PI2.js.map → chunk-YQMZ7IH2.js.map} +0 -0
  1079. /package/dist/{contradiction-scan-5A4IDZV5.js.map → contradiction-review-6V2LXXK6.js.map} +0 -0
  1080. /package/dist/{migrate-from-identity-anchor-G27MCD6A.js.map → contradiction-scan-GIRVC4C7.js.map} +0 -0
  1081. /package/dist/{first-start-migration-4MHQEOSD.js.map → first-start-migration-CKTCTCQI.js.map} +0 -0
  1082. /package/dist/{graph-edge-decay-5DI5GUNL.js.map → graph-edge-decay-MUP5J7CC.js.map} +0 -0
  1083. /package/dist/{path-MR5JPYOP.js.map → importers/index.js.map} +0 -0
  1084. /package/dist/{peers-HCVGHMAE.js.map → migrate-from-identity-anchor-EB4XI4Q2.js.map} +0 -0
  1085. /package/dist/{resolution-B7FNQSSP.js.map → path-X2K5XCHL.js.map} +0 -0
  1086. /package/dist/{state-store-VZU2IA53.js.map → peers/index.js.map} +0 -0
  1087. /package/dist/{tier-stats-62ZVDFKS.js.map → tier-stats-SKML2OSF.js.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  isValidCapsuleSince
3
- } from "./chunk-QA2ZAPBU.js";
3
+ } from "./chunk-IPLYGWQF.js";
4
4
  import {
5
5
  CAPSULE_ID_PATTERN
6
6
  } from "./chunk-WEHSQBFR.js";
7
7
  import {
8
8
  OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
9
9
  OFFLINE_SYNC_MAX_MTIME_MS
10
- } from "./chunk-U7EJOMFC.js";
10
+ } from "./chunk-4Q73JBSM.js";
11
11
  import {
12
12
  validateArchiveRelativePath
13
- } from "./chunk-AGZQD76C.js";
13
+ } from "./chunk-GCGJW34D.js";
14
14
  import {
15
15
  ACTION_CONFIDENCE_CONTEXT_READINESS,
16
16
  ACTION_CONFIDENCE_RISK_CATEGORIES,
@@ -89,7 +89,21 @@ var recallExplainRequestSchema = z.object({
89
89
  });
90
90
  var setCodingContextRequestSchema = z.object({
91
91
  sessionKey: z.string().trim().min(1, "sessionKey is required").max(512),
92
- codingContext: codingContextSchema
92
+ codingContext: codingContextSchema.optional(),
93
+ /**
94
+ * Project tag shorthand for non-git-based project scoping. When
95
+ * `codingContext` is omitted, this becomes
96
+ * `{ projectId: "tag:<projectTag>", branch: null, rootPath: "tag:<projectTag>", defaultBranch: null }`.
97
+ */
98
+ projectTag: z.string().trim().min(1, "projectTag must be non-empty when provided").max(256).optional()
99
+ }).superRefine((value, ctx) => {
100
+ if (value.codingContext === void 0 && value.projectTag === void 0) {
101
+ ctx.addIssue({
102
+ code: z.ZodIssueCode.custom,
103
+ message: "codingContext or projectTag is required",
104
+ path: ["codingContext"]
105
+ });
106
+ }
93
107
  });
94
108
  var messageSchema = z.object({
95
109
  role: z.enum(["user", "assistant"]),
@@ -203,6 +217,7 @@ var trustZoneDemoSeedRequestSchema = z.object({
203
217
  var lcmSearchRequestSchema = z.object({
204
218
  query: z.string().min(1, "query is required"),
205
219
  sessionKey: sessionKeySchema,
220
+ sessionPrefix: z.string().trim().min(1).max(512).optional(),
206
221
  namespace: namespaceSchema,
207
222
  limit: z.number().int().min(1).max(100).optional()
208
223
  });
@@ -248,7 +263,8 @@ var capsuleExportRequestSchema = z.object({
248
263
  var capsuleImportRequestSchema = z.object({
249
264
  archivePath: z.string().trim().min(1, "archivePath is required").max(4096),
250
265
  namespace: namespaceSchema,
251
- mode: z.enum(["skip", "overwrite", "fork"]).optional()
266
+ mode: z.enum(["skip", "overwrite", "fork"]).optional(),
267
+ passphrase: z.string().min(1, "passphrase must not be empty").max(4096).optional()
252
268
  });
253
269
  var capsuleListRequestSchema = z.object({
254
270
  namespace: namespaceSchema
@@ -401,4 +417,4 @@ export {
401
417
  actionConfidenceRequestSchema,
402
418
  validateRequest
403
419
  };
404
- //# sourceMappingURL=chunk-YROHKYBY.js.map
420
+ //# sourceMappingURL=chunk-O27WNHTT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/access-schema.ts"],"sourcesContent":["// Request/response schema validation for the Remnic HTTP API.\n// Uses zod for runtime validation — returns structured 400 errors with\n// field-level detail so consumers get clear feedback on malformed requests.\n\nimport { z } from \"zod\";\nimport {\n ACTION_CONFIDENCE_CONTEXT_READINESS,\n ACTION_CONFIDENCE_RISK_CATEGORIES,\n ACTION_CONFIDENCE_RULE_KINDS,\n} from \"./action-confidence.js\";\nimport { isValidCapsuleSince } from \"./transfer/capsule-export.js\";\nimport { validateArchiveRelativePath } from \"./transfer/fs-utils.js\";\nimport { CAPSULE_ID_PATTERN } from \"./transfer/types.js\";\nimport {\n OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,\n OFFLINE_SYNC_MAX_MTIME_MS,\n} from \"./offline-sync.js\";\n\n// ---------------------------------------------------------------------------\n// Error formatting\n// ---------------------------------------------------------------------------\n\nexport interface SchemaValidationError {\n error: string;\n code: \"validation_error\";\n details: Array<{ field: string; message: string }>;\n}\n\nexport function formatZodError(error: z.ZodError): SchemaValidationError {\n return {\n error: \"request validation failed\",\n code: \"validation_error\",\n details: error.issues.map((issue) => ({\n field: issue.path.join(\".\") || \"(root)\",\n message: issue.message,\n })),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Shared fields\n// ---------------------------------------------------------------------------\n\nconst namespaceSchema = z.string().trim().max(256).optional();\nconst sessionKeySchema = z.string().trim().min(1).max(512).optional();\nconst idempotencyKeySchema = z.string().trim().min(1).max(256).optional();\nconst dryRunSchema = z.boolean().optional();\nconst schemaVersionSchema = z.number().int().optional();\n\n// ---------------------------------------------------------------------------\n// Recall\n// ---------------------------------------------------------------------------\n\n/**\n * Coding-agent context (issue #569). Optional payload that connectors may\n * ship with a recall request so the project/branch namespace overlay\n * applies to that recall. All fields are validated per CLAUDE.md #51 —\n * empty-string projectId / rootPath is rejected, not silently accepted.\n */\nexport const codingContextSchema = z\n .object({\n projectId: z.string().trim().min(1, \"codingContext.projectId is required\").max(128),\n branch: z.string().trim().max(256).nullable(),\n rootPath: z.string().trim().min(1, \"codingContext.rootPath is required\").max(1024),\n defaultBranch: z.string().trim().max(256).nullable(),\n })\n .nullable();\n\n/**\n * Recall disclosure depth (issue #677). Mirrors the `RecallDisclosure`\n * type in `types.ts` — keep these in sync. Default-application happens\n * inside `EngramAccessService.recall()`; the schema only accepts/rejects.\n * Invalid values throw a structured 400 instead of silently defaulting,\n * per CLAUDE.md rule 51.\n */\nexport const recallDisclosureSchema = z.enum([\"chunk\", \"section\", \"raw\"]);\n\n/**\n * Tag-match semantics (issue #689). `any` (default when `tags` is provided\n * and `tagMatch` is omitted) admits a result when it carries at least one\n * of the filter tags. `all` requires every filter tag to be present.\n * Schema rejects unknown values up front — never silently defaults\n * (CLAUDE.md rule 51).\n */\nexport const tagMatchSchema = z.enum([\"any\", \"all\"]);\n\nexport const recallRequestSchema = z.object({\n query: z.string().min(1, \"query is required\"),\n sessionKey: sessionKeySchema,\n namespace: namespaceSchema,\n topK: z.number().int().min(0).max(200).optional(),\n mode: z.enum([\"auto\", \"no_recall\", \"minimal\", \"full\", \"graph_mode\"]).optional(),\n includeDebug: z.boolean().optional(),\n idempotencyKey: idempotencyKeySchema,\n disclosure: recallDisclosureSchema.optional(),\n codingContext: codingContextSchema.optional(),\n /** Working directory for auto git-context resolution (issue #569). */\n cwd: z.string().trim().min(1, \"cwd must be non-empty when provided\").max(2048).optional(),\n /**\n * Arbitrary project tag for non-git-based project scoping (issue #569).\n * Creates a coding context with `projectId: \"tag:<projectTag>\"`.\n */\n projectTag: z.string().trim().min(1, \"projectTag must be non-empty when provided\").max(256).optional(),\n /**\n * Historical recall pin (issue #680). ISO 8601 timestamp. The\n * schema only enforces the basic shape; the access service runs\n * `Date.parse` and emits a structured 400 on malformed input\n * (CLAUDE.md rule 51).\n */\n asOf: z.string().trim().min(1, \"asOf must be a non-empty ISO 8601 timestamp\").max(64).optional(),\n /**\n * Free-form recall tag filter (issue #689). When provided, recall results\n * whose frontmatter `tags` do not match the filter are removed before the\n * response is returned. Comparison is case-sensitive exact match.\n */\n tags: z.array(z.string().trim().min(1).max(256)).max(50).optional(),\n /**\n * Match mode for `tags` (issue #689). Defaults to `\"any\"` when `tags` is\n * provided and `tagMatch` is omitted. Ignored when `tags` is absent.\n */\n tagMatch: tagMatchSchema.optional(),\n /**\n * Include graph edges below `graphTraversalConfidenceFloor` for diagnostic\n * recall traversal (issue #681). Defaults to false.\n */\n includeLowConfidence: z.boolean().optional(),\n});\n\nexport const recallExplainRequestSchema = z.object({\n sessionKey: sessionKeySchema,\n namespace: namespaceSchema,\n});\n\n/**\n * Standalone \"set coding context\" request. Used by the HTTP endpoint\n * `POST /engram/v1/coding-context` and the MCP `remnic.set_coding_context`\n * tool (PR 7). `codingContext: null` clears the attached context.\n */\nexport const setCodingContextRequestSchema = z\n .object({\n sessionKey: z.string().trim().min(1, \"sessionKey is required\").max(512),\n codingContext: codingContextSchema.optional(),\n /**\n * Project tag shorthand for non-git-based project scoping. When\n * `codingContext` is omitted, this becomes\n * `{ projectId: \"tag:<projectTag>\", branch: null, rootPath: \"tag:<projectTag>\", defaultBranch: null }`.\n */\n projectTag: z.string().trim().min(1, \"projectTag must be non-empty when provided\").max(256).optional(),\n })\n .superRefine((value, ctx) => {\n if (value.codingContext === undefined && value.projectTag === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"codingContext or projectTag is required\",\n path: [\"codingContext\"],\n });\n }\n });\n\n// ---------------------------------------------------------------------------\n// Observe\n// ---------------------------------------------------------------------------\n\nconst messageSchema = z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string().min(1, \"message content must be non-empty\"),\n sourceFormat: z\n .enum([\"openai\", \"anthropic\", \"openclaw\", \"pi\", \"lossless-claw\", \"remnic\"])\n .nullable()\n .optional(),\n rawContent: z.unknown().nullable().optional(),\n parts: z\n .array(\n z.object({\n ordinal: z.number().int().min(0).nullable().optional(),\n kind: z.enum([\n \"text\",\n \"tool_call\",\n \"tool_result\",\n \"patch\",\n \"file_read\",\n \"file_write\",\n \"step_start\",\n \"step_finish\",\n \"snapshot\",\n \"retry\",\n ]),\n payload: z.record(z.string(), z.unknown()),\n toolName: z.string().nullable().optional(),\n tool_name: z.string().nullable().optional(),\n filePath: z.string().nullable().optional(),\n file_path: z.string().nullable().optional(),\n createdAt: z.string().nullable().optional(),\n created_at: z.string().nullable().optional(),\n }),\n )\n .nullable()\n .optional(),\n});\n\nexport const observeRequestSchema = z.object({\n sessionKey: z.string().trim().min(1, \"sessionKey is required\").max(512),\n messages: z.array(messageSchema).min(1, \"messages must be a non-empty array\"),\n namespace: namespaceSchema,\n skipExtraction: z.boolean().optional(),\n /** Working directory for auto git-context resolution (issue #569). */\n cwd: z.string().trim().min(1, \"cwd must be non-empty when provided\").max(2048).optional(),\n /**\n * Arbitrary project tag for non-git-based project scoping (issue #569).\n * Creates a coding context with `projectId: \"tag:<projectTag>\"`.\n */\n projectTag: z.string().trim().min(1, \"projectTag must be non-empty when provided\").max(256).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Memory store / suggestion submit\n// ---------------------------------------------------------------------------\n\nconst writeContentSchema = z.string().min(1, \"content is required\").max(50000);\nconst categorySchema = z\n .enum([\n \"fact\", \"preference\", \"correction\", \"entity\", \"decision\",\n \"relationship\", \"principle\", \"commitment\", \"moment\", \"skill\", \"rule\", \"procedure\",\n \"reasoning_trace\",\n ])\n .optional();\nconst confidenceSchema = z.number().min(0).max(1).optional();\nconst tagsSchema = z.array(z.string().max(256)).max(50).optional();\nconst entityRefSchema = z.string().trim().max(512).optional();\nconst ttlSchema = z.string().trim().max(128).optional();\nconst sourceReasonSchema = z.string().trim().max(2000).optional();\n\nexport const memoryStoreRequestSchema = z.object({\n schemaVersion: schemaVersionSchema,\n idempotencyKey: idempotencyKeySchema,\n dryRun: dryRunSchema,\n sessionKey: sessionKeySchema,\n content: writeContentSchema,\n category: categorySchema,\n confidence: confidenceSchema,\n namespace: namespaceSchema,\n tags: tagsSchema,\n entityRef: entityRefSchema,\n ttl: ttlSchema,\n sourceReason: sourceReasonSchema,\n});\n\nexport const suggestionSubmitRequestSchema = memoryStoreRequestSchema;\n\n// ---------------------------------------------------------------------------\n// Review disposition\n// ---------------------------------------------------------------------------\n\nexport const reviewDispositionRequestSchema = z.object({\n memoryId: z.string().trim().min(1, \"memoryId is required\"),\n status: z.enum([\n \"active\", \"pending_review\", \"quarantined\", \"rejected\", \"superseded\", \"archived\",\n ]),\n reasonCode: z.string().trim().min(1, \"reasonCode is required\"),\n namespace: namespaceSchema,\n});\n\n// ---------------------------------------------------------------------------\n// Trust-zone promote\n// ---------------------------------------------------------------------------\n\nexport const trustZonePromoteRequestSchema = z.object({\n recordId: z.string().trim().min(1, \"recordId is required\"),\n targetZone: z.enum([\"working\", \"trusted\"], {\n errorMap: () => ({ message: \"targetZone must be 'working' or 'trusted'\" }),\n }),\n promotionReason: z.string().trim().min(1, \"promotionReason is required\"),\n recordedAt: z.string().trim().optional(),\n summary: z.string().trim().max(5000).optional(),\n dryRun: dryRunSchema,\n namespace: namespaceSchema,\n});\n\n// ---------------------------------------------------------------------------\n// Trust-zone demo-seed\n// ---------------------------------------------------------------------------\n\nexport const trustZoneDemoSeedRequestSchema = z.object({\n scenario: z.string().trim().max(256).optional(),\n recordedAt: z.string().trim().optional(),\n dryRun: dryRunSchema,\n namespace: namespaceSchema,\n});\n\n// ---------------------------------------------------------------------------\n// LCM search\n// ---------------------------------------------------------------------------\n\nexport const lcmSearchRequestSchema = z.object({\n query: z.string().min(1, \"query is required\"),\n sessionKey: sessionKeySchema,\n sessionPrefix: z.string().trim().min(1).max(512).optional(),\n namespace: namespaceSchema,\n limit: z.number().int().min(1).max(100).optional(),\n});\n\nexport const lcmCompactionFlushRequestSchema = z.object({\n sessionKey: z.string().trim().min(1, \"sessionKey is required\").max(512),\n namespace: namespaceSchema,\n});\n\nexport const lcmCompactionRecordRequestSchema = z.object({\n sessionKey: z.string().trim().min(1, \"sessionKey is required\").max(512),\n namespace: namespaceSchema,\n tokensBefore: z.number().int().min(0, \"tokensBefore must be a non-negative integer\"),\n tokensAfter: z.number().int().min(0, \"tokensAfter must be a non-negative integer\"),\n});\n\n// ---------------------------------------------------------------------------\n// Day summary\n// ---------------------------------------------------------------------------\n\nexport const daySummaryRequestSchema = z.object({\n memories: z.string().max(100000).optional(),\n sessionKey: sessionKeySchema,\n namespace: namespaceSchema,\n});\n\n// ---------------------------------------------------------------------------\n// Capsule export\n// ---------------------------------------------------------------------------\n\nconst capsuleTopLevelSegmentSchema = z\n .string()\n .trim()\n .min(1)\n .max(128)\n .refine(\n (value) => !value.includes(\"/\") && !value.includes(\"\\\\\"),\n \"must be a top-level directory name without path separators\",\n );\n\nconst capsulePeerIdSchema = z\n .string()\n .trim()\n .min(1)\n .max(256)\n .refine(\n (value) => value !== \".\" && value !== \"..\" && !value.includes(\"/\") && !value.includes(\"\\\\\"),\n \"must be a plain peer id without path separators\",\n );\n\nconst capsuleIsoSinceSchema = z\n .string()\n .trim()\n .min(1, \"since must be a non-empty ISO 8601 timestamp\")\n .max(128)\n .refine(\n isValidCapsuleSince,\n \"since must be a valid ISO 8601 timestamp with no calendar overflow\",\n );\n\nexport const capsuleExportRequestSchema = z\n .object({\n name: z\n .string()\n .trim()\n .min(1, \"name is required\")\n .max(64, \"name must be 64 characters or fewer\")\n .regex(\n CAPSULE_ID_PATTERN,\n \"name must be alphanumeric with single dashes (no spaces, no leading/trailing dashes)\",\n ),\n namespace: namespaceSchema,\n since: capsuleIsoSinceSchema.optional(),\n includeKinds: z.array(capsuleTopLevelSegmentSchema).max(50).optional(),\n peerIds: z.array(capsulePeerIdSchema).max(100).optional(),\n includeTranscripts: z.boolean().optional(),\n encrypt: z.boolean().optional(),\n });\n\nexport const capsuleImportRequestSchema = z\n .object({\n archivePath: z.string().trim().min(1, \"archivePath is required\").max(4096),\n namespace: namespaceSchema,\n mode: z.enum([\"skip\", \"overwrite\", \"fork\"]).optional(),\n passphrase: z.string().min(1, \"passphrase must not be empty\").max(4096).optional(),\n });\n\nexport const capsuleListRequestSchema = z\n .object({\n namespace: namespaceSchema,\n });\n\n// ---------------------------------------------------------------------------\n// Offline sync\n// ---------------------------------------------------------------------------\n\nfunction isValidOfflineSyncPath(value: string): boolean {\n try {\n validateArchiveRelativePath(value, \"path\");\n return true;\n } catch {\n return false;\n }\n}\n\nconst offlineSyncPathSchema = z\n .string()\n .trim()\n .min(1, \"path must be non-empty\")\n .max(4096)\n .refine(\n isValidOfflineSyncPath,\n \"path must be a POSIX relative path without unsafe segments\",\n );\n\nconst offlineSyncFileStateSchema = z.object({\n path: offlineSyncPathSchema,\n sha256: z.string().regex(/^[a-f0-9]{64}$/i, \"sha256 must be a 64-character hex digest\"),\n bytes: z.number().int().min(0),\n mtimeMs: z.number().finite().min(0).max(OFFLINE_SYNC_MAX_MTIME_MS),\n});\n\nconst offlineSyncBaseCapturedAtSchema = z\n .string()\n .trim()\n .min(1, \"baseCapturedAt must be non-empty when provided\")\n .max(64)\n .refine((value) => Number.isFinite(Date.parse(value)), {\n message: \"baseCapturedAt must be a valid ISO 8601 timestamp\",\n });\n\nexport const offlineSyncSnapshotRequestSchema = z.object({\n namespace: namespaceSchema,\n includeTranscripts: z.boolean().optional(),\n includeContent: z.boolean().optional(),\n baseCapturedAt: offlineSyncBaseCapturedAtSchema.optional(),\n baseFiles: z\n .array(offlineSyncFileStateSchema)\n .max(300_000, \"baseFiles must contain 300000 or fewer entries\")\n .optional(),\n});\n\nexport const offlineSyncApplyRequestSchema = z\n .object({\n namespace: namespaceSchema,\n changeset: z.unknown(),\n returnCurrentFiles: z.boolean().optional(),\n })\n .refine((value) => value.changeset !== undefined && value.changeset !== null, {\n message: \"changeset is required\",\n path: [\"changeset\"],\n });\n\nexport const offlineSyncFilesRequestSchema = z.object({\n namespace: namespaceSchema,\n includeTranscripts: z.boolean().optional(),\n paths: z\n .array(offlineSyncPathSchema)\n .max(5000, \"paths must contain 5000 or fewer entries\"),\n});\n\nexport const offlineSyncFileContentRequestSchema = z.object({\n namespace: namespaceSchema,\n includeTranscripts: z.boolean().optional(),\n path: offlineSyncPathSchema,\n offset: z.number().int().min(0).optional(),\n length: z.number().int().min(1).max(OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Action confidence\n// ---------------------------------------------------------------------------\n\nconst nullableOptional = <T extends z.ZodTypeAny>(schema: T) =>\n schema.optional().nullable().transform((value) => value ?? undefined);\n\nconst actionConfidenceRuleSchema = z\n .object({\n kind: z.enum(ACTION_CONFIDENCE_RULE_KINDS),\n description: nullableOptional(z.string().trim().min(1).max(2000)),\n matched: nullableOptional(z.boolean()),\n })\n .strict();\n\nconst actionConfidenceMemorySchema = z\n .object({\n source: nullableOptional(z.string().trim().min(1).max(256)),\n created: nullableOptional(z.string().trim().min(1).max(128)),\n updated: nullableOptional(z.string().trim().min(1).max(128)),\n scope: nullableOptional(z.string().trim().min(1).max(512)),\n userContextScopes: nullableOptional(z.array(z.string().trim().min(1).max(128)).max(50)),\n retrievalReason: nullableOptional(z.string().trim().min(1).max(2000)),\n confidence: nullableOptional(z.number().min(0).max(1)),\n stale: nullableOptional(z.boolean()),\n corrected: nullableOptional(z.boolean()),\n correctionState: nullableOptional(z.enum([\"none\", \"correction\", \"superseded\", \"disputed\", \"forgotten\"])),\n safeToUse: nullableOptional(z.boolean()),\n safety: nullableOptional(z.enum([\"safe\", \"requires-review\", \"blocked\"])),\n safetyReasons: nullableOptional(z.array(z.string().trim().min(1).max(1000)).max(50)),\n })\n .strict();\n\nexport const actionConfidenceRequestSchema = z\n .object({\n intendedAction: nullableOptional(z.string().trim().min(1).max(1000)),\n confidence: nullableOptional(z.number().min(0).max(1)),\n risk: nullableOptional(z.enum(ACTION_CONFIDENCE_RISK_CATEGORIES)),\n contextReadiness: nullableOptional(z.enum(ACTION_CONFIDENCE_CONTEXT_READINESS)),\n currentContextScopes: nullableOptional(z.array(z.string().trim().min(1).max(128)).max(50)),\n userRules: nullableOptional(z.array(actionConfidenceRuleSchema).max(100)),\n retrievedMemories: nullableOptional(z.array(actionConfidenceMemorySchema).max(200)),\n })\n .strict();\n\n// ---------------------------------------------------------------------------\n// Inferred types\n// ---------------------------------------------------------------------------\n\nexport type RecallRequest = z.infer<typeof recallRequestSchema>;\nexport type RecallExplainRequest = z.infer<typeof recallExplainRequestSchema>;\nexport type SetCodingContextRequest = z.infer<typeof setCodingContextRequestSchema>;\nexport type ObserveRequest = z.infer<typeof observeRequestSchema>;\nexport type MemoryStoreRequest = z.infer<typeof memoryStoreRequestSchema>;\nexport type SuggestionSubmitRequest = z.infer<typeof suggestionSubmitRequestSchema>;\nexport type ReviewDispositionRequest = z.infer<typeof reviewDispositionRequestSchema>;\nexport type TrustZonePromoteRequest = z.infer<typeof trustZonePromoteRequestSchema>;\nexport type TrustZoneDemoSeedRequest = z.infer<typeof trustZoneDemoSeedRequestSchema>;\nexport type LcmSearchRequest = z.infer<typeof lcmSearchRequestSchema>;\nexport type LcmCompactionFlushRequest = z.infer<typeof lcmCompactionFlushRequestSchema>;\nexport type LcmCompactionRecordRequest = z.infer<typeof lcmCompactionRecordRequestSchema>;\nexport type DaySummaryRequest = z.infer<typeof daySummaryRequestSchema>;\nexport type CapsuleExportRequest = z.infer<typeof capsuleExportRequestSchema>;\nexport type CapsuleImportRequest = z.infer<typeof capsuleImportRequestSchema>;\nexport type CapsuleListRequest = z.infer<typeof capsuleListRequestSchema>;\nexport type OfflineSyncApplyRequest = z.infer<typeof offlineSyncApplyRequestSchema>;\nexport type OfflineSyncSnapshotRequest = z.infer<typeof offlineSyncSnapshotRequestSchema>;\nexport type OfflineSyncFilesRequest = z.infer<typeof offlineSyncFilesRequestSchema>;\nexport type OfflineSyncFileContentRequest = z.infer<typeof offlineSyncFileContentRequestSchema>;\nexport type ActionConfidenceRequest = z.infer<typeof actionConfidenceRequestSchema>;\n\n// ---------------------------------------------------------------------------\n// Validation helper\n// ---------------------------------------------------------------------------\n\nexport type SchemaName =\n | \"recall\"\n | \"recallExplain\"\n | \"setCodingContext\"\n | \"observe\"\n | \"memoryStore\"\n | \"suggestionSubmit\"\n | \"reviewDisposition\"\n | \"trustZonePromote\"\n | \"trustZoneDemoSeed\"\n | \"lcmSearch\"\n | \"lcmCompactionFlush\"\n | \"lcmCompactionRecord\"\n | \"daySummary\"\n | \"capsuleExport\"\n | \"capsuleImport\"\n | \"capsuleList\"\n | \"offlineSyncSnapshot\"\n | \"offlineSyncFiles\"\n | \"offlineSyncFileContent\"\n | \"offlineSyncApply\"\n | \"actionConfidence\";\n\nexport type SchemaTypeFor<N extends SchemaName> =\n N extends \"recall\" ? RecallRequest\n : N extends \"recallExplain\" ? RecallExplainRequest\n : N extends \"setCodingContext\" ? SetCodingContextRequest\n : N extends \"observe\" ? ObserveRequest\n : N extends \"memoryStore\" ? MemoryStoreRequest\n : N extends \"suggestionSubmit\" ? SuggestionSubmitRequest\n : N extends \"reviewDisposition\" ? ReviewDispositionRequest\n : N extends \"trustZonePromote\" ? TrustZonePromoteRequest\n : N extends \"trustZoneDemoSeed\" ? TrustZoneDemoSeedRequest\n : N extends \"lcmSearch\" ? LcmSearchRequest\n : N extends \"lcmCompactionFlush\" ? LcmCompactionFlushRequest\n : N extends \"lcmCompactionRecord\" ? LcmCompactionRecordRequest\n : N extends \"daySummary\" ? DaySummaryRequest\n : N extends \"capsuleExport\" ? CapsuleExportRequest\n : N extends \"capsuleImport\" ? CapsuleImportRequest\n : N extends \"capsuleList\" ? CapsuleListRequest\n : N extends \"offlineSyncSnapshot\" ? OfflineSyncSnapshotRequest\n : N extends \"offlineSyncFiles\" ? OfflineSyncFilesRequest\n : N extends \"offlineSyncFileContent\" ? OfflineSyncFileContentRequest\n : N extends \"offlineSyncApply\" ? OfflineSyncApplyRequest\n : N extends \"actionConfidence\" ? ActionConfidenceRequest\n : never;\n\nconst schemas: Record<SchemaName, z.ZodTypeAny> = {\n recall: recallRequestSchema,\n recallExplain: recallExplainRequestSchema,\n setCodingContext: setCodingContextRequestSchema,\n observe: observeRequestSchema,\n memoryStore: memoryStoreRequestSchema,\n suggestionSubmit: suggestionSubmitRequestSchema,\n reviewDisposition: reviewDispositionRequestSchema,\n trustZonePromote: trustZonePromoteRequestSchema,\n trustZoneDemoSeed: trustZoneDemoSeedRequestSchema,\n lcmSearch: lcmSearchRequestSchema,\n lcmCompactionFlush: lcmCompactionFlushRequestSchema,\n lcmCompactionRecord: lcmCompactionRecordRequestSchema,\n daySummary: daySummaryRequestSchema,\n capsuleExport: capsuleExportRequestSchema,\n capsuleImport: capsuleImportRequestSchema,\n capsuleList: capsuleListRequestSchema,\n offlineSyncSnapshot: offlineSyncSnapshotRequestSchema,\n offlineSyncFiles: offlineSyncFilesRequestSchema,\n offlineSyncFileContent: offlineSyncFileContentRequestSchema,\n offlineSyncApply: offlineSyncApplyRequestSchema,\n actionConfidence: actionConfidenceRequestSchema,\n};\n\n/**\n * Validate a request body against the named schema.\n * Returns `{ success: true, data }` on pass or\n * `{ success: false, error }` on failure with field-level detail.\n */\nexport function validateRequest<T = unknown>(\n schemaName: SchemaName,\n body: unknown,\n): { success: true; data: T } | { success: false; error: SchemaValidationError } {\n const schema = schemas[schemaName];\n if (!schema) {\n return {\n success: false,\n error: {\n error: `unknown schema: ${schemaName}`,\n code: \"validation_error\",\n details: [],\n },\n };\n }\n const result = schema.safeParse(body);\n if (result.success) {\n return { success: true, data: result.data as T };\n }\n return { success: false, error: formatZodError(result.error) };\n}\n"],"mappings":"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","names":[]}
@@ -6,7 +6,7 @@ import {
6
6
  optionalStringArray,
7
7
  recordStoreDay,
8
8
  validateStringRecord
9
- } from "./chunk-DGXUHMOV.js";
9
+ } from "./chunk-A2IYSXDQ.js";
10
10
  import {
11
11
  listJsonFiles,
12
12
  readJsonFile
@@ -112,4 +112,4 @@ export {
112
112
  recordAbstractionNode,
113
113
  getAbstractionNodeStoreStatus
114
114
  };
115
- //# sourceMappingURL=chunk-NGAVDO7E.js.map
115
+ //# sourceMappingURL=chunk-OADWQ5CR.js.map
@@ -7,10 +7,13 @@ function clamp(value, min, max) {
7
7
  function parseRecallQuality(reason) {
8
8
  if (!reason) return "unknown";
9
9
  const text = reason.toLowerCase();
10
- if (/(recall[_\s-]?good|quality[:=]\s*(good|high)|improv(ed|e)|resolved)/i.test(text)) {
10
+ if (/\bunresolved\b|\b(?:not|never|no|without)\s+(?:yet\s+)?resolved\b/.test(text)) {
11
+ return "poor";
12
+ }
13
+ if (/(recall[_\s-]?good|quality[:=]\s*(good|high)|\bimprov(?:e|ed|ing)\b|\bresolved\b)/.test(text)) {
11
14
  return "good";
12
15
  }
13
- if (/(recall[_\s-]?poor|quality[:=]\s*(poor|low)|degrad(ed|e)|miss(ed|ing)|irrelevant)/i.test(text)) {
16
+ if (/(recall[_\s-]?poor|quality[:=]\s*(poor|low)|\bdegrad(?:e|ed|ing)\b|\bmiss(?:ed|ing)\b|\birrelevant\b)/.test(text)) {
14
17
  return "poor";
15
18
  }
16
19
  return "unknown";
@@ -213,4 +216,4 @@ export {
213
216
  renderCompressionGuidelinesMarkdown,
214
217
  buildCompressionGuidelinesMarkdown
215
218
  };
216
- //# sourceMappingURL=chunk-2NMMFZ5T.js.map
219
+ //# sourceMappingURL=chunk-OD4FM2U7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compression-optimizer.ts"],"sourcesContent":["import type {\n CompressionGuidelineOptimizerActionSummary,\n CompressionGuidelineOptimizerEventCounts,\n CompressionGuidelineOptimizerRuleUpdate,\n CompressionGuidelineOptimizerState,\n MemoryActionEvent,\n MemoryActionOutcome,\n MemoryActionType,\n} from \"./types.js\";\n\nexport interface CompressionGuidelineCandidate {\n generatedAt: string;\n sourceWindow: {\n from: string;\n to: string;\n };\n eventCounts: CompressionGuidelineOptimizerEventCounts;\n actionSummaries: CompressionGuidelineOptimizerActionSummary[];\n ruleUpdates: CompressionGuidelineOptimizerRuleUpdate[];\n guidelineVersion: number;\n optimizerVersion: number;\n}\n\nexport interface CompressionSemanticRuleRefinement {\n action: MemoryActionType;\n delta?: number;\n confidence?: \"low\" | \"medium\" | \"high\";\n note?: string;\n}\n\nexport interface CompressionSemanticRefinementResult {\n updates: CompressionSemanticRuleRefinement[];\n}\n\nexport interface CompressionSemanticRefinementOptions {\n enabled: boolean;\n timeoutMs: number;\n runRefinement?: (\n candidate: CompressionGuidelineCandidate,\n ) => Promise<CompressionSemanticRefinementResult | null>;\n}\n\nconst MAX_DELTA = 0.15;\nconst SPARSE_SAMPLE = 5;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction parseRecallQuality(reason: string | undefined): \"good\" | \"poor\" | \"unknown\" {\n if (!reason) return \"unknown\";\n const text = reason.toLowerCase();\n if (/\\bunresolved\\b|\\b(?:not|never|no|without)\\s+(?:yet\\s+)?resolved\\b/.test(text)) {\n return \"poor\";\n }\n if (/(recall[_\\s-]?good|quality[:=]\\s*(good|high)|\\bimprov(?:e|ed|ing)\\b|\\bresolved\\b)/.test(text)) {\n return \"good\";\n }\n if (/(recall[_\\s-]?poor|quality[:=]\\s*(poor|low)|\\bdegrad(?:e|ed|ing)\\b|\\bmiss(?:ed|ing)\\b|\\birrelevant\\b)/.test(text)) {\n return \"poor\";\n }\n return \"unknown\";\n}\n\nfunction nextGuidelineVersion(previousState: CompressionGuidelineOptimizerState | null): number {\n if (!previousState) return 1;\n return Math.max(1, previousState.guidelineVersion + 1);\n}\n\nfunction nextOptimizerVersion(previousState: CompressionGuidelineOptimizerState | null): number {\n if (!previousState) return 1;\n return Math.max(1, previousState.version + 1);\n}\n\nfunction roundDelta(value: number): number {\n return Math.round(value * 1000) / 1000;\n}\n\nfunction confidenceForDelta(delta: number): \"low\" | \"medium\" | \"high\" {\n const magnitude = Math.abs(delta);\n return magnitude >= 0.09 ? \"high\" : magnitude >= 0.04 ? \"medium\" : \"low\";\n}\n\nfunction directionForDelta(delta: number): \"increase\" | \"decrease\" | \"hold\" {\n return delta > 0 ? \"increase\" : delta < 0 ? \"decrease\" : \"hold\";\n}\n\nexport function computeCompressionGuidelineCandidate(\n events: MemoryActionEvent[],\n options: {\n generatedAtIso?: string;\n previousState?: CompressionGuidelineOptimizerState | null;\n } = {},\n): CompressionGuidelineCandidate {\n const generatedAt = options.generatedAtIso ?? new Date().toISOString();\n const previousState = options.previousState ?? null;\n const effectiveEvents = events.filter((event) => event.dryRun !== true);\n const totalCounts: CompressionGuidelineOptimizerEventCounts = {\n total: effectiveEvents.length,\n applied: 0,\n skipped: 0,\n failed: 0,\n };\n\n const actionMap = new Map<MemoryActionType, CompressionGuidelineOptimizerActionSummary>();\n let windowFrom = effectiveEvents[0]?.timestamp ?? generatedAt;\n let windowTo = effectiveEvents[0]?.timestamp ?? generatedAt;\n\n for (const event of effectiveEvents) {\n if (event.timestamp < windowFrom) windowFrom = event.timestamp;\n if (event.timestamp > windowTo) windowTo = event.timestamp;\n totalCounts[event.outcome] += 1;\n\n let summary = actionMap.get(event.action);\n if (!summary) {\n summary = {\n action: event.action,\n total: 0,\n outcomes: { applied: 0, skipped: 0, failed: 0 },\n quality: { good: 0, poor: 0, unknown: 0 },\n };\n actionMap.set(event.action, summary);\n }\n\n summary.total += 1;\n summary.outcomes[event.outcome] += 1;\n const quality = parseRecallQuality(event.reason);\n summary.quality[quality] += 1;\n }\n\n const actionSummaries = [...actionMap.values()].sort((a, b) => {\n if (b.total !== a.total) return b.total - a.total;\n return a.action.localeCompare(b.action);\n });\n\n const ruleUpdates = actionSummaries.map((summary): CompressionGuidelineOptimizerRuleUpdate => {\n const notes: string[] = [];\n if (summary.total < SPARSE_SAMPLE) {\n notes.push(\"Sparse sample size; holding baseline policy.\");\n return {\n action: summary.action,\n delta: 0,\n direction: \"hold\",\n confidence: \"low\",\n notes,\n };\n }\n\n const successRate = summary.outcomes.applied / summary.total;\n const failureRate = summary.outcomes.failed / summary.total;\n const qualitySeen = summary.quality.good + summary.quality.poor;\n const qualitySignal = qualitySeen > 0\n ? (summary.quality.good - summary.quality.poor) / qualitySeen\n : 0;\n const rawDelta = clamp((successRate - failureRate) * 0.12 + qualitySignal * 0.06, -MAX_DELTA, MAX_DELTA);\n const delta = roundDelta(rawDelta);\n\n const direction = directionForDelta(delta);\n if (direction === \"decrease\" && summary.outcomes.failed > summary.outcomes.applied) {\n notes.push(\"Failures exceed applied outcomes; conservative down-adjustment.\");\n } else if (direction === \"increase\" && summary.quality.good > summary.quality.poor) {\n notes.push(\"Good recall quality markers support this action.\");\n } else if (direction === \"decrease\" && summary.quality.poor > summary.quality.good) {\n notes.push(\"Poor recall quality markers exceed good markers.\");\n } else {\n notes.push(\"Outcomes are stable; keep bounded adjustments.\");\n }\n\n const confidence = confidenceForDelta(delta);\n return {\n action: summary.action,\n delta,\n direction,\n confidence,\n notes,\n };\n });\n\n return {\n generatedAt,\n sourceWindow: {\n from: effectiveEvents.length > 0 ? windowFrom : generatedAt,\n to: effectiveEvents.length > 0 ? windowTo : generatedAt,\n },\n eventCounts: totalCounts,\n actionSummaries,\n ruleUpdates,\n guidelineVersion: nextGuidelineVersion(previousState),\n optimizerVersion: nextOptimizerVersion(previousState),\n };\n}\n\nexport async function refineCompressionGuidelineCandidateSemantically(\n baseline: CompressionGuidelineCandidate,\n options: CompressionSemanticRefinementOptions,\n): Promise<CompressionGuidelineCandidate> {\n if (!options.enabled) return baseline;\n if (typeof options.runRefinement !== \"function\") return baseline;\n\n const timeoutMs = Math.max(1, Math.floor(options.timeoutMs));\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const timeout = new Promise<CompressionSemanticRefinementResult | null>((resolve) => {\n timeoutId = setTimeout(() => resolve(null), timeoutMs);\n });\n\n const refinementPromise = options.runRefinement(baseline).catch(() => null);\n\n let refinement: CompressionSemanticRefinementResult | null = null;\n try {\n refinement = await Promise.race([refinementPromise, timeout]);\n } catch {\n if (timeoutId) clearTimeout(timeoutId);\n return baseline;\n }\n if (timeoutId) clearTimeout(timeoutId);\n if (!refinement || !Array.isArray(refinement.updates) || refinement.updates.length === 0) {\n return baseline;\n }\n\n const updatesByAction = new Map<MemoryActionType, CompressionSemanticRuleRefinement>();\n for (const update of refinement.updates) {\n if (!update || typeof update.action !== \"string\") continue;\n updatesByAction.set(update.action, update);\n }\n\n let changed = false;\n const ruleUpdates = baseline.ruleUpdates.map((rule) => {\n const patch = updatesByAction.get(rule.action);\n if (!patch) return rule;\n\n const nextDelta =\n typeof patch.delta === \"number\" && Number.isFinite(patch.delta)\n ? roundDelta(clamp(patch.delta, -MAX_DELTA, MAX_DELTA))\n : rule.delta;\n const nextConfidence = patch.confidence ?? confidenceForDelta(nextDelta);\n const nextDirection = directionForDelta(nextDelta);\n const nextNotes =\n typeof patch.note === \"string\" && patch.note.trim().length > 0\n ? [patch.note.trim()]\n : rule.notes;\n\n if (\n nextDelta !== rule.delta ||\n nextDirection !== rule.direction ||\n nextConfidence !== rule.confidence ||\n nextNotes.join(\"\\n\") !== rule.notes.join(\"\\n\")\n ) {\n changed = true;\n }\n\n return {\n ...rule,\n delta: nextDelta,\n direction: nextDirection,\n confidence: nextConfidence,\n notes: nextNotes,\n };\n });\n\n if (!changed) return baseline;\n return {\n ...baseline,\n ruleUpdates,\n };\n}\n\nexport function renderCompressionGuidelinesMarkdown(candidate: CompressionGuidelineCandidate): string {\n const actionLines =\n candidate.actionSummaries.length === 0\n ? [\"- (none)\"]\n : candidate.actionSummaries.map((item) => `- ${item.action}: ${item.total}`);\n const outcomeLines: string[] = [\n `- applied: ${candidate.eventCounts.applied}`,\n `- skipped: ${candidate.eventCounts.skipped}`,\n `- failed: ${candidate.eventCounts.failed}`,\n ];\n const updateLines =\n candidate.ruleUpdates.length === 0\n ? [\"- No telemetry events available yet. Keep defaults conservative and gather action data first.\"]\n : candidate.ruleUpdates.map((update) => {\n const sign = update.delta > 0 ? \"+\" : \"\";\n return `- ${update.action}: ${update.direction} (${sign}${update.delta.toFixed(3)}, confidence=${update.confidence}) — ${update.notes.join(\" \")}`;\n });\n\n return [\n \"# Compression Guidelines\",\n \"\",\n `Generated: ${candidate.generatedAt}`,\n `Source events analyzed: ${candidate.eventCounts.total}`,\n `Source window: ${candidate.sourceWindow.from} -> ${candidate.sourceWindow.to}`,\n `Guideline version: ${candidate.guidelineVersion}`,\n \"\",\n \"## Action Distribution\",\n ...actionLines,\n \"\",\n \"## Outcome Distribution\",\n ...outcomeLines,\n \"\",\n \"## Suggested Guidelines\",\n ...updateLines,\n \"\",\n ].join(\"\\n\");\n}\n\nexport function buildCompressionGuidelinesMarkdown(\n events: MemoryActionEvent[],\n generatedAtIso: string = new Date().toISOString(),\n previousState: CompressionGuidelineOptimizerState | null = null,\n): string {\n const candidate = computeCompressionGuidelineCandidate(events, {\n generatedAtIso,\n previousState,\n });\n return renderCompressionGuidelinesMarkdown(candidate);\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,13 @@
1
1
  // src/connectors-cli.ts
2
+ function buildConnectorRowsFromDefinitions(definitions, states) {
3
+ const stateMap = new Map(states.map((state) => [state.id, state]));
4
+ return definitions.map((definition) => ({
5
+ id: definition.id,
6
+ displayName: definition.displayName,
7
+ enabled: definition.enabled,
8
+ state: stateMap.get(definition.id) ?? null
9
+ }));
10
+ }
2
11
  var CONNECTORS_OUTPUT_FORMATS = ["text", "markdown", "json"];
3
12
  function parseConnectorsFormat(value, defaultFormat = "text") {
4
13
  if (value === void 0 || value === null) return defaultFormat;
@@ -228,6 +237,7 @@ function escapePipes(value) {
228
237
  }
229
238
 
230
239
  export {
240
+ buildConnectorRowsFromDefinitions,
231
241
  CONNECTORS_OUTPUT_FORMATS,
232
242
  parseConnectorsFormat,
233
243
  parseConnectorsListOptions,
@@ -237,4 +247,4 @@ export {
237
247
  renderConnectorsRunResult,
238
248
  runConnectorPollOnce
239
249
  };
240
- //# sourceMappingURL=chunk-OZHRDTDX.js.map
250
+ //# sourceMappingURL=chunk-OKTXM5H4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connectors-cli.ts"],"sourcesContent":["/**\n * `remnic connectors` CLI helpers (issue #683 PR 6/N).\n *\n * Three subcommands:\n *\n * remnic connectors list\n * Lists all configured live connectors, their enabled state, last poll\n * time, and last error. Output formats: text (default), markdown, json.\n *\n * remnic connectors status\n * Identical data to `list` but defaults to JSON output so scripts can\n * reliably parse it. Accepts `--format` to override.\n *\n * remnic connectors run <name>\n * Manually triggers a single `syncIncremental()` pass for the named\n * connector. Operator debug surface — useful when you want to test\n * credentials without waiting for the scheduler tick. Prints the\n * number of new documents imported plus any error.\n *\n * Design decisions:\n *\n * - Pure functions for list / status / run option parsing so they can be\n * unit-tested without booting an orchestrator (CLAUDE.md rules 14 + 51).\n * - Rendering lives here (not in cli.ts) so HTTP/MCP surfaces can reuse the\n * same output without forking formatting (CLAUDE.md rule 22).\n * - The `run` command requires the caller to pass a `pollFn` callback\n * (wrapping the actual connector's `syncIncremental`). This keeps the\n * helper module free of direct orchestrator / live-connector imports while\n * still being testable (CLAUDE.md rule 33 — mock signatures must match\n * production).\n * - CLAUDE.md rule 51: invalid `--format` throws with listed options; unknown\n * connector name in `run` throws a descriptive error; `--format` without a\n * value is caught by Commander's built-in argument check.\n * - `runConnectorPollOnce` encapsulates the persist-before-cursor-advance\n * contract (CLAUDE.md gotcha #25, #43) so it can be unit-tested in\n * isolation without an orchestrator.\n */\n\nimport {\n type ConnectorCursor,\n type ConnectorDocument,\n type ConnectorState,\n type ConnectorSyncStatus,\n} from \"./connectors/live/index.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types that cross the module boundary\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A lightweight descriptor for one live connector, assembled from the parsed\n * config and any persisted state. The CLI handler builds this from\n * `orchestrator.config.connectors` + `listConnectorStates(memoryDir)`.\n */\nexport interface ConnectorRow {\n /** Stable connector id (e.g. `\"google-drive\"`, `\"notion\"`). */\n id: string;\n /** Human-readable display name. */\n displayName: string;\n /** Whether the operator has enabled this connector in config. */\n enabled: boolean;\n /** Persisted sync state, or `null` if no sync has ever run. */\n state: ConnectorState | null;\n}\n\nexport interface ConnectorRowDefinition {\n id: string;\n displayName: string;\n enabled: boolean;\n}\n\nexport function buildConnectorRowsFromDefinitions(\n definitions: readonly ConnectorRowDefinition[],\n states: readonly ConnectorState[],\n): ConnectorRow[] {\n const stateMap = new Map(states.map((state) => [state.id, state]));\n return definitions.map((definition) => ({\n id: definition.id,\n displayName: definition.displayName,\n enabled: definition.enabled,\n state: stateMap.get(definition.id) ?? null,\n }));\n}\n\n/**\n * Result returned by the `run` command's poll function.\n */\nexport interface ConnectorRunResult {\n /** Number of new documents imported in this pass. */\n docsImported: number;\n /**\n * Error message if the sync or ingest failed, undefined on full success.\n * When only the cursor write failed after a successful ingest, this field is\n * undefined and `stateWriteError` carries the failure. When persisting error\n * state fails after a sync/ingest error, both fields are set so callers can\n * preserve the primary failure while also reporting stale persisted state.\n */\n error?: string;\n /**\n * Set when cursor/error-state persistence fails. On the success path,\n * `docsImported` reflects the actual count of successfully ingested docs so\n * the operator knows data was persisted even though the cursor did not\n * advance. On the error path, `error` preserves the primary sync/ingest\n * failure and this field reports the secondary persistence failure.\n */\n stateWriteError?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Output formats\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const CONNECTORS_OUTPUT_FORMATS = [\"text\", \"markdown\", \"json\"] as const;\nexport type ConnectorsOutputFormat = (typeof CONNECTORS_OUTPUT_FORMATS)[number];\n\n/**\n * Validate `--format <fmt>`. Throws a listed-options error for any value not\n * in `CONNECTORS_OUTPUT_FORMATS`. Returns the given default when the value is\n * `undefined` (no flag supplied).\n */\nexport function parseConnectorsFormat(\n value: unknown,\n defaultFormat: ConnectorsOutputFormat = \"text\",\n): ConnectorsOutputFormat {\n if (value === undefined || value === null) return defaultFormat;\n if (\n typeof value !== \"string\" ||\n !(CONNECTORS_OUTPUT_FORMATS as readonly string[]).includes(value)\n ) {\n throw new Error(\n `--format expects one of ${CONNECTORS_OUTPUT_FORMATS.join(\", \")}; got ${JSON.stringify(value)}`,\n );\n }\n return value as ConnectorsOutputFormat;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Parsed option types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ParsedConnectorsListOptions {\n format: ConnectorsOutputFormat;\n}\n\nexport interface ParsedConnectorsStatusOptions {\n /** `status` defaults to JSON for scripting; `--format` can override. */\n format: ConnectorsOutputFormat;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Option parsers (pure, unit-testable)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Validate the option bag for `remnic connectors list`.\n */\nexport function parseConnectorsListOptions(\n options: Record<string, unknown>,\n): ParsedConnectorsListOptions {\n return {\n format: parseConnectorsFormat(options.format, \"text\"),\n };\n}\n\n/**\n * Validate the option bag for `remnic connectors status`.\n * Defaults to `json` (machine-readable) unless `--format` overrides.\n */\nexport function parseConnectorsStatusOptions(\n options: Record<string, unknown>,\n): ParsedConnectorsStatusOptions {\n return {\n format: parseConnectorsFormat(options.format, \"json\"),\n };\n}\n\n/**\n * Validate the positional `<name>` argument for `remnic connectors run`.\n */\nexport function parseConnectorsRunName(rawName: unknown): string {\n if (typeof rawName !== \"string\" || rawName.trim().length === 0) {\n throw new Error(\n \"connectors run: <name> is required and must be a non-empty connector id\",\n );\n }\n return rawName.trim();\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatters: shared helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Human-readable summary of `ConnectorSyncStatus`.\n *\n * Does NOT fold in the enabled/disabled state — the text and markdown\n * renderers already display that separately. Mixing them produced\n * \"state: disabled, disabled\" when `enabled=false` and `status=\"never\"`.\n */\nfunction statusLabel(status: ConnectorSyncStatus): string {\n switch (status) {\n case \"never\":\n return \"never synced\";\n case \"success\":\n return \"ok\";\n case \"error\":\n return \"error\";\n default:\n return status;\n }\n}\n\n/**\n * Format a UTC ISO timestamp for display. If the value is `null` / `undefined`\n * returns the given fallback string.\n */\nfunction fmtTimestamp(value: string | null | undefined, fallback = \"—\"): string {\n if (!value) return fallback;\n return value;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Renderers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Render connector rows for `remnic connectors list` / `remnic connectors status`.\n */\nexport function renderConnectorsList(\n rows: readonly ConnectorRow[],\n format: ConnectorsOutputFormat,\n): string {\n if (format === \"json\") {\n const out = rows.map((row) => ({\n id: row.id,\n displayName: row.displayName,\n enabled: row.enabled,\n lastSyncAt: row.state?.lastSyncAt ?? null,\n lastSyncStatus: row.state?.lastSyncStatus ?? \"never\",\n lastSyncError: row.state?.lastSyncError ?? null,\n totalDocsImported: row.state?.totalDocsImported ?? 0,\n updatedAt: row.state?.updatedAt ?? null,\n }));\n return JSON.stringify(out, null, 2);\n }\n\n if (rows.length === 0) {\n if (format === \"markdown\") {\n return \"# Live connectors\\n\\n_No live connectors are configured._\\n\";\n }\n return \"No live connectors configured.\";\n }\n\n if (format === \"markdown\") {\n const lines: string[] = [\"# Live connectors\", \"\"];\n lines.push(\"| ID | Display name | Enabled | Last poll | Docs imported | Status |\");\n lines.push(\"| --- | --- | --- | --- | --- | --- |\");\n for (const row of rows) {\n const lastPoll = fmtTimestamp(row.state?.lastSyncAt);\n const docs = row.state?.totalDocsImported ?? 0;\n const status = statusLabel(row.state?.lastSyncStatus ?? \"never\");\n lines.push(\n `| \\`${row.id}\\` | ${row.displayName} | ${row.enabled ? \"yes\" : \"no\"} | ${lastPoll} | ${docs} | ${status} |`,\n );\n if (row.state?.lastSyncError) {\n lines.push(\n `| | | | | | _Error: ${escapePipes(row.state.lastSyncError)}_ |`,\n );\n }\n }\n return lines.join(\"\\n\") + \"\\n\";\n }\n\n // text\n const lines: string[] = [`Live connectors (${rows.length}):`];\n lines.push(\"\");\n for (const row of rows) {\n const enabledStr = row.enabled ? \"enabled\" : \"disabled\";\n const status = statusLabel(row.state?.lastSyncStatus ?? \"never\");\n const lastPoll = fmtTimestamp(row.state?.lastSyncAt, \"(never polled)\");\n const docs = row.state?.totalDocsImported ?? 0;\n lines.push(` ${row.id} (${row.displayName})`);\n lines.push(` state: ${enabledStr}, ${status}`);\n lines.push(` last_poll: ${lastPoll}`);\n lines.push(` docs_imported: ${docs}`);\n if (row.state?.lastSyncError) {\n lines.push(` last_error: ${row.state.lastSyncError}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Render the result of a manual `remnic connectors run <name>` invocation.\n */\nexport function renderConnectorsRunResult(\n connectorId: string,\n result: ConnectorRunResult,\n format: ConnectorsOutputFormat,\n): string {\n // A run is \"ok\" when neither a sync/ingest error nor a state-write error\n // is present. A partial success (ingest ok, cursor write failed) still\n // surfaces as a non-ok status so the operator knows to investigate.\n const ok = result.error === undefined && result.stateWriteError === undefined;\n\n if (format === \"json\") {\n return JSON.stringify(\n {\n connector: connectorId,\n docsImported: result.docsImported,\n error: result.error ?? null,\n stateWriteError: result.stateWriteError ?? null,\n ok,\n },\n null,\n 2,\n );\n }\n\n if (format === \"markdown\") {\n const lines: string[] = [`# connectors run: \\`${connectorId}\\``, \"\"];\n lines.push(`- **Status:** ${ok ? \"success\" : \"error\"}`);\n lines.push(`- **Docs imported:** ${result.docsImported}`);\n if (result.error !== undefined) {\n lines.push(`- **Error:** ${result.error}`);\n }\n if (result.stateWriteError !== undefined) {\n const label =\n result.error === undefined\n ? \"State-write error (cursor not advanced)\"\n : \"State-write error (error state not persisted)\";\n lines.push(`- **${label}:** ${result.stateWriteError}`);\n }\n return lines.join(\"\\n\") + \"\\n\";\n }\n\n // text\n const lines: string[] = [];\n if (ok) {\n lines.push(`connectors run: ${connectorId} — OK`);\n lines.push(` docs_imported: ${result.docsImported}`);\n } else {\n lines.push(`connectors run: ${connectorId} — FAILED`);\n lines.push(` docs_imported: ${result.docsImported}`);\n if (result.error !== undefined) {\n lines.push(` error: ${result.error}`);\n }\n if (result.stateWriteError !== undefined) {\n lines.push(\n ` state_write_error: ${result.stateWriteError}`,\n );\n if (result.error === undefined) {\n lines.push(\n result.docsImported > 0\n ? ` (docs were ingested; cursor was not advanced — next poll will re-fetch from prior position)`\n : ` (cursor was not advanced — next poll will retry from prior position)`,\n );\n } else {\n lines.push(\n ` (error state was not persisted — next poll will retry from prior position)`,\n );\n }\n }\n }\n return lines.join(\"\\n\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Poll orchestration helper\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Arguments for a single connector poll pass.\n *\n * All I/O is injectable so callers (cli.ts) can supply real implementations\n * and tests can supply lightweight stubs without booting an orchestrator.\n */\nexport interface RunConnectorPollOnceArgs {\n /** Connector identifier (used in error/success state writes). */\n connectorId: string;\n /** Prior persisted state, or `null` on the very first sync. */\n priorState: ConnectorState | null;\n /**\n * Perform a single incremental sync. Returns newly-fetched documents and\n * the cursor that should be persisted on success.\n */\n syncFn: (\n cursor: ConnectorCursor | null,\n ) => Promise<{ newDocs: ConnectorDocument[]; nextCursor: ConnectorCursor }>;\n /**\n * Ingest fetched documents into the memory layer. Called BEFORE the cursor\n * is advanced. If this throws the cursor is NOT advanced (CLAUDE.md gotcha\n * #25 — don't destroy old state before confirming new state succeeds).\n */\n ingestFn: (docs: ConnectorDocument[]) => Promise<void>;\n /**\n * Persist connector state (cursor + metadata). Called after `ingestFn`\n * succeeds (success path) or when `syncFn` / `ingestFn` throws (error path,\n * with old cursor retained).\n */\n writeCursorFn: (state: {\n cursor: ConnectorCursor | null;\n lastSyncStatus: ConnectorSyncStatus;\n lastSyncError?: string;\n totalDocsImported: number;\n }) => Promise<void>;\n}\n\n/**\n * Execute one `syncIncremental` pass for a live connector, enforcing the\n * persist-before-advance-cursor contract.\n *\n * Invariant (CLAUDE.md gotcha #25 + #43):\n * 1. `syncFn` fetches new docs and a next cursor.\n * 2. `ingestFn` persists the docs into the memory layer.\n * 3. Only if (2) succeeds does `writeCursorFn` advance the cursor.\n * 4. If (1) or (2) throws, `writeCursorFn` is still called but retains the\n * **prior** cursor so the next poll re-fetches the same window.\n *\n * Returns the `ConnectorRunResult` that `cli.ts` uses for output rendering.\n */\nexport async function runConnectorPollOnce(\n args: RunConnectorPollOnceArgs,\n): Promise<ConnectorRunResult> {\n const { connectorId, priorState, syncFn, ingestFn, writeCursorFn } = args;\n\n let syncResult: Awaited<ReturnType<typeof syncFn>> | undefined;\n let ingestError: string | undefined;\n\n // ── Phase 1: fetch ──────────────────────────────────────────────────────────\n try {\n syncResult = await syncFn(priorState?.cursor ?? null);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // syncFn failed — persist error state with the OLD cursor.\n let stateWriteError: string | undefined;\n try {\n await writeCursorFn({\n cursor: priorState?.cursor ?? null,\n lastSyncStatus: \"error\",\n lastSyncError: msg,\n totalDocsImported: priorState?.totalDocsImported ?? 0,\n });\n } catch (writeErr) {\n stateWriteError = writeErr instanceof Error ? writeErr.message : String(writeErr);\n console.error(\n `[remnic] connectors/${connectorId}: failed to persist error state after syncFn failure (${stateWriteError}); original error: ${msg}`,\n );\n }\n return {\n docsImported: 0,\n error: msg,\n ...(stateWriteError !== undefined ? { stateWriteError } : {}),\n };\n }\n\n // ── Phase 2: ingest ─────────────────────────────────────────────────────────\n // CRITICAL: ingest docs BEFORE advancing the cursor (CLAUDE.md gotcha #25).\n // If ingestFn throws, write the error state with the OLD cursor so the\n // next poll re-fetches the same document window.\n if (syncResult.newDocs.length > 0) {\n try {\n await ingestFn(syncResult.newDocs);\n } catch (err) {\n ingestError = err instanceof Error ? err.message : String(err);\n }\n }\n\n if (ingestError !== undefined) {\n // ingestFn failed — persist error state with the OLD cursor.\n let stateWriteError: string | undefined;\n try {\n await writeCursorFn({\n cursor: priorState?.cursor ?? null,\n lastSyncStatus: \"error\",\n lastSyncError: ingestError,\n totalDocsImported: priorState?.totalDocsImported ?? 0,\n });\n } catch (writeErr) {\n stateWriteError = writeErr instanceof Error ? writeErr.message : String(writeErr);\n // Intentionally not re-throwing: the original ingest error is the\n // actionable failure for the operator. The state-write failure is\n // secondary and should not replace it in the rendered output.\n // (CLAUDE.md gotcha #13; Codex P2 thread PRRT_kwDORJXyws59sk8K,\n // Cursor thread PRRT_kwDORJXyws59slAG)\n console.error(\n `[remnic] connectors/${connectorId}: failed to persist error state after ingestFn failure (${stateWriteError}); original error: ${ingestError}`,\n );\n }\n return {\n docsImported: 0,\n error: ingestError,\n ...(stateWriteError !== undefined ? { stateWriteError } : {}),\n };\n }\n\n // ── Phase 3: advance cursor ─────────────────────────────────────────────────\n // Ingest succeeded — advance the cursor. If the cursor write fails, the\n // docs ARE already in the memory layer so we must report the actual\n // docsImported count. Surface the state-write failure as a separate\n // `stateWriteError` field so the operator can diagnose it without\n // confusing it with a sync/ingest failure (Codex P1 thread\n // PRRT_kwDORJXyws59sm76, Cursor thread PRRT_kwDORJXyws59sm_N).\n const docsImported = syncResult.newDocs.length;\n try {\n await writeCursorFn({\n cursor: syncResult.nextCursor,\n lastSyncStatus: \"success\",\n totalDocsImported: (priorState?.totalDocsImported ?? 0) + docsImported,\n });\n } catch (writeErr) {\n const writeMsg = writeErr instanceof Error ? writeErr.message : String(writeErr);\n // Docs are already ingested — preserve the count so the operator knows\n // data was persisted. The next poll will re-fetch from the prior cursor\n // position but that only causes duplicate-ingest, not data loss.\n return { docsImported, stateWriteError: writeMsg };\n }\n\n return { docsImported };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Escape characters that would break a Markdown table cell (backslash first,\n * then pipe). Same pattern as in `patterns-cli.ts`.\n */\nfunction escapePipes(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\|/g, \"\\\\|\");\n}\n"],"mappings":"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","names":["lines"]}
@@ -1,3 +1,9 @@
1
+ import {
2
+ withTimeoutSignal
3
+ } from "./chunk-CINZGPSJ.js";
4
+ import {
5
+ isAbortError
6
+ } from "./chunk-PVGDJXVK.js";
1
7
  import {
2
8
  log
3
9
  } from "./chunk-2ODBA7MQ.js";
@@ -24,21 +30,23 @@ var EmbedHelper = class {
24
30
  /**
25
31
  * Embed a single text string. Returns null if no provider is available.
26
32
  */
27
- async embed(text) {
33
+ async embed(text, options = {}) {
28
34
  const provider = this.getProvider();
29
35
  if (!provider) return null;
30
- return this.callEmbed(text, provider);
36
+ return this.callEmbed(text, provider, options.signal);
31
37
  }
32
38
  /**
33
39
  * Embed a batch of texts. Returns an array parallel to input; entries are null on failure.
34
40
  */
35
- async embedBatch(texts, batchSize = 32) {
41
+ async embedBatch(texts, batchSize = 32, options = {}) {
36
42
  const provider = this.getProvider();
37
43
  if (!provider) return texts.map(() => null);
38
44
  const results = new Array(texts.length).fill(null);
39
45
  for (let i = 0; i < texts.length; i += batchSize) {
40
46
  const batch = texts.slice(i, i + batchSize);
41
- const batchResults = await Promise.all(batch.map((t) => this.callEmbed(t, provider)));
47
+ const batchResults = await Promise.all(
48
+ batch.map((t) => this.callEmbed(t, provider, options.signal))
49
+ );
42
50
  for (let j = 0; j < batchResults.length; j++) {
43
51
  results[i + j] = batchResults[j];
44
52
  }
@@ -88,7 +96,7 @@ var EmbedHelper = class {
88
96
  }
89
97
  return null;
90
98
  }
91
- async callEmbed(input, provider) {
99
+ async callEmbed(input, provider, signal) {
92
100
  try {
93
101
  const res = await fetch(provider.endpoint, {
94
102
  method: "POST",
@@ -98,7 +106,7 @@ var EmbedHelper = class {
98
106
  input: input.slice(0, 8e3),
99
107
  encoding_format: "float"
100
108
  }),
101
- signal: AbortSignal.timeout(3e4)
109
+ signal: withTimeoutSignal(signal, 3e4)
102
110
  });
103
111
  if (!res.ok) {
104
112
  log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);
@@ -112,6 +120,7 @@ var EmbedHelper = class {
112
120
  return Number.isFinite(v) ? v : 0;
113
121
  });
114
122
  } catch (err) {
123
+ if (isAbortError(err)) throw err;
115
124
  log.debug(`EmbedHelper error: ${err}`);
116
125
  return null;
117
126
  }
@@ -121,4 +130,4 @@ var EmbedHelper = class {
121
130
  export {
122
131
  EmbedHelper
123
132
  };
124
- //# sourceMappingURL=chunk-RXDLTSWT.js.map
133
+ //# sourceMappingURL=chunk-ONPLNAPX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/search/embed-helper.ts"],"sourcesContent":["import { log } from \"../logger.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { isAbortError } from \"../abort-error.js\";\nimport { withTimeoutSignal } from \"./abort.js\";\n\ntype ProviderConfig = {\n type: \"openai\" | \"local\";\n model: string;\n endpoint: string;\n headers: Record<string, string>;\n};\n\nconst DEFAULT_OPENAI_MODEL = \"text-embedding-3-small\";\n\n/**\n * Standalone embedding helper for search backend adapters.\n *\n * NOTE: This intentionally duplicates provider resolution from EmbeddingFallback.\n * EmbeddingFallback is tightly integrated with the plugin lifecycle (telemetry,\n * rate-limit backoff, provider rotation). This class is a lightweight standalone\n * utility used by LanceDB/Orama backends which operate outside plugin context.\n * Merging them would break the port/adapter separation between search and plugin layers.\n */\nexport class EmbedHelper {\n private provider: ProviderConfig | null | undefined; // undefined = not yet resolved\n\n constructor(private readonly config: PluginConfig) {}\n\n /**\n * Whether an embedding provider is available.\n * Resolves the provider on first call.\n */\n isAvailable(): boolean {\n if (this.provider === undefined) {\n this.provider = this.resolveProvider();\n }\n return this.provider !== null;\n }\n\n /**\n * Embed a single text string. Returns null if no provider is available.\n */\n async embed(text: string, options: { signal?: AbortSignal } = {}): Promise<number[] | null> {\n const provider = this.getProvider();\n if (!provider) return null;\n return this.callEmbed(text, provider, options.signal);\n }\n\n /**\n * Embed a batch of texts. Returns an array parallel to input; entries are null on failure.\n */\n async embedBatch(\n texts: string[],\n batchSize = 32,\n options: { signal?: AbortSignal } = {},\n ): Promise<(number[] | null)[]> {\n const provider = this.getProvider();\n if (!provider) return texts.map(() => null);\n\n const results: (number[] | null)[] = new Array(texts.length).fill(null);\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const batchResults = await Promise.all(\n batch.map((t) => this.callEmbed(t, provider, options.signal)),\n );\n for (let j = 0; j < batchResults.length; j++) {\n results[i + j] = batchResults[j];\n }\n }\n return results;\n }\n\n private getProvider(): ProviderConfig | null {\n if (this.provider === undefined) {\n this.provider = this.resolveProvider();\n }\n return this.provider;\n }\n\n private resolveProvider(): ProviderConfig | null {\n if (!this.config.embeddingFallbackEnabled) return null;\n\n const preferred = this.config.embeddingFallbackProvider;\n const providers = preferred === \"auto\" ? [\"openai\", \"local\"] : [preferred];\n\n for (const p of providers) {\n if (p === \"openai\" && this.config.openaiApiKey) {\n const baseUrl = this.config.openaiBaseUrl ?? \"https://api.openai.com/v1\";\n return {\n type: \"openai\",\n model: DEFAULT_OPENAI_MODEL,\n endpoint: `${baseUrl.replace(/\\/$/, \"\")}/embeddings`,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.openaiApiKey}`,\n },\n };\n }\n\n if (p === \"local\" && this.config.localLlmEnabled && this.config.localLlmUrl) {\n const base = this.config.localLlmUrl.replace(/\\/$/, \"\");\n const endpoint = /\\/v1$/i.test(base) ? `${base}/embeddings` : `${base}/v1/embeddings`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(this.config.localLlmHeaders ?? {}),\n };\n if (this.config.localLlmApiKey && this.config.localLlmAuthHeader !== false) {\n headers.Authorization = `Bearer ${this.config.localLlmApiKey}`;\n }\n return {\n type: \"local\",\n model:\n this.config.embeddingFallbackModel ||\n this.config.localLlmModel ||\n DEFAULT_OPENAI_MODEL,\n endpoint,\n headers,\n };\n }\n }\n\n return null;\n }\n\n private async callEmbed(\n input: string,\n provider: ProviderConfig,\n signal?: AbortSignal,\n ): Promise<number[] | null> {\n try {\n const res = await fetch(provider.endpoint, {\n method: \"POST\",\n headers: provider.headers,\n body: JSON.stringify({\n model: provider.model,\n input: input.slice(0, 8000),\n encoding_format: \"float\",\n }),\n signal: withTimeoutSignal(signal, 30_000),\n });\n if (!res.ok) {\n log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);\n return null;\n }\n const payload = (await res.json()) as any;\n const vector = payload?.data?.[0]?.embedding;\n if (!Array.isArray(vector)) return null;\n return vector.map((n: unknown) => { const v = Number(n); return Number.isFinite(v) ? v : 0; });\n } catch (err) {\n if (isAbortError(err)) throw err;\n log.debug(`EmbedHelper error: ${err}`);\n return null;\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -42,21 +42,25 @@ function resolveDefaultFaissScriptPath(fromModuleUrl = import.meta.url) {
42
42
  var FaissConversationIndexAdapter = class {
43
43
  constructor(config) {
44
44
  this.config = config;
45
+ if (!Number.isInteger(config.maxBatchSize) || config.maxBatchSize <= 0) {
46
+ throw new RangeError("FAISS maxBatchSize must be a positive integer");
47
+ }
45
48
  this.pythonBin = config.pythonBin && config.pythonBin.trim().length > 0 ? config.pythonBin.trim() : "python3";
46
49
  this.scriptPath = config.scriptPath && config.scriptPath.trim().length > 0 ? config.scriptPath.trim() : resolveDefaultFaissScriptPath();
47
50
  this.indexPath = path.isAbsolute(config.indexDir) ? config.indexDir : path.join(config.memoryDir, config.indexDir);
51
+ this.maxBatchSize = config.maxBatchSize;
48
52
  this.spawnFn = config.spawnFn ?? launchProcess;
49
53
  }
50
54
  config;
51
55
  pythonBin;
52
56
  scriptPath;
53
57
  indexPath;
58
+ maxBatchSize;
54
59
  spawnFn;
55
- async upsertChunks(chunks) {
56
- if (this.config.maxBatchSize <= 0) return 0;
60
+ async upsertChunks(chunks, options = {}) {
57
61
  let totalUpserted = 0;
58
- for (let offset = 0; offset < chunks.length; offset += this.config.maxBatchSize) {
59
- const batch = chunks.slice(offset, offset + this.config.maxBatchSize);
62
+ for (let offset = 0; offset < chunks.length; offset += this.maxBatchSize) {
63
+ const batch = chunks.slice(offset, offset + this.maxBatchSize);
60
64
  if (batch.length === 0) continue;
61
65
  const payload = {
62
66
  modelId: this.config.modelId,
@@ -67,7 +71,8 @@ var FaissConversationIndexAdapter = class {
67
71
  text: chunk.text,
68
72
  startTs: chunk.startTs,
69
73
  endTs: chunk.endTs
70
- }))
74
+ })),
75
+ ...typeof options.retentionCutoffMs === "number" && Number.isFinite(options.retentionCutoffMs) ? { retentionCutoffMs: options.retentionCutoffMs } : {}
71
76
  };
72
77
  const result = await this.runCommand("upsert", payload, this.config.upsertTimeoutMs);
73
78
  const upserted = result.upserted;
@@ -138,12 +143,10 @@ var FaissConversationIndexAdapter = class {
138
143
  };
139
144
  }
140
145
  async rebuildChunks(chunks) {
141
- if (this.config.maxBatchSize <= 0) return 0;
142
- const firstBatch = chunks.slice(0, this.config.maxBatchSize);
143
146
  const rebuildPayload = {
144
147
  modelId: this.config.modelId,
145
148
  indexPath: this.indexPath,
146
- chunks: firstBatch.map((chunk) => ({
149
+ chunks: chunks.map((chunk) => ({
147
150
  id: chunk.id,
148
151
  sessionKey: chunk.sessionKey,
149
152
  text: chunk.text,
@@ -156,11 +159,14 @@ var FaissConversationIndexAdapter = class {
156
159
  if (typeof rebuilt !== "number" || !Number.isFinite(rebuilt)) {
157
160
  throw new FaissAdapterError("FAISS sidecar produced malformed rebuild response", "malformed_output");
158
161
  }
159
- const rebuildCount = Math.max(0, Math.floor(rebuilt));
160
- const remaining = chunks.slice(firstBatch.length);
161
- if (remaining.length === 0) return rebuildCount;
162
- const upserted = await this.upsertChunks(remaining);
163
- return rebuildCount + upserted;
162
+ const rebuildCount = Math.floor(rebuilt);
163
+ if (rebuildCount !== chunks.length) {
164
+ throw new FaissAdapterError(
165
+ `FAISS sidecar rebuilt ${rebuildCount} chunk(s), expected ${chunks.length}`,
166
+ "malformed_output"
167
+ );
168
+ }
169
+ return rebuildCount;
164
170
  }
165
171
  async runCommand(command, payload, timeoutMs) {
166
172
  const args = [this.scriptPath, command];
@@ -269,4 +275,4 @@ export {
269
275
  FaissConversationIndexAdapter,
270
276
  failOpenFaissHealth
271
277
  };
272
- //# sourceMappingURL=chunk-FJ43PRLT.js.map
278
+ //# sourceMappingURL=chunk-ORFGK3XI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/conversation-index/faiss-adapter.ts"],"sourcesContent":["import { fileURLToPath } from \"node:url\";\nimport path from \"node:path\";\nimport { log } from \"../logger.js\";\nimport type { ConversationChunk } from \"./chunker.js\";\nimport type { ConversationSearchResult } from \"./search.js\";\nimport { launchProcess } from \"../runtime/child-process.js\";\n\nexport interface FaissAdapterConfig {\n memoryDir: string;\n scriptPath?: string;\n pythonBin?: string;\n modelId: string;\n indexDir: string;\n upsertTimeoutMs: number;\n searchTimeoutMs: number;\n healthTimeoutMs: number;\n maxBatchSize: number;\n maxSearchK: number;\n spawnFn?: typeof launchProcess;\n}\n\nexport interface FaissHealthResult {\n ok: boolean;\n status: \"ok\" | \"degraded\" | \"error\";\n indexPath: string;\n message?: string;\n manifest?: {\n version: number;\n modelId: string;\n normalizedModelId: string;\n dimension: number;\n chunkCount: number;\n updatedAt: string;\n lastSuccessfulRebuildAt: string;\n };\n}\n\nexport interface FaissInspectResult extends FaissHealthResult {\n metadata: {\n chunkCount: number;\n hasIndex: boolean;\n hasMetadata: boolean;\n hasManifest: boolean;\n };\n}\n\ntype SidecarCommand = \"upsert\" | \"search\" | \"health\" | \"inspect\" | \"rebuild\";\n\nexport class FaissAdapterError extends Error {\n constructor(message: string, readonly code: \"timeout\" | \"non_zero_exit\" | \"malformed_output\") {\n super(message);\n this.name = \"FaissAdapterError\";\n }\n}\n\ninterface SidecarResult {\n ok?: boolean;\n error?: string;\n upserted?: number;\n rebuilt?: number;\n status?: \"ok\" | \"degraded\" | \"error\";\n manifest?: {\n version?: number;\n modelId?: string;\n normalizedModelId?: string;\n dimension?: number;\n chunkCount?: number;\n updatedAt?: string;\n lastSuccessfulRebuildAt?: string;\n };\n results?: Array<{\n path: string;\n snippet: string;\n score: number;\n }>;\n metadata?: {\n chunkCount?: number;\n hasIndex?: boolean;\n hasMetadata?: boolean;\n hasManifest?: boolean;\n };\n}\n\nfunction parseSidecarManifest(result: SidecarResult): FaissHealthResult[\"manifest\"] | undefined {\n const manifest = result.manifest;\n if (\n !manifest ||\n typeof manifest.version !== \"number\" ||\n typeof manifest.modelId !== \"string\" ||\n typeof manifest.normalizedModelId !== \"string\" ||\n typeof manifest.dimension !== \"number\" ||\n typeof manifest.chunkCount !== \"number\" ||\n typeof manifest.updatedAt !== \"string\" ||\n typeof manifest.lastSuccessfulRebuildAt !== \"string\"\n ) {\n return undefined;\n }\n\n return {\n version: manifest.version,\n modelId: manifest.modelId,\n normalizedModelId: manifest.normalizedModelId,\n dimension: manifest.dimension,\n chunkCount: manifest.chunkCount,\n updatedAt: manifest.updatedAt,\n lastSuccessfulRebuildAt: manifest.lastSuccessfulRebuildAt,\n };\n}\n\nexport function resolveDefaultFaissScriptPath(fromModuleUrl: string = import.meta.url): string {\n const currentFile = fileURLToPath(fromModuleUrl);\n const moduleDir = path.dirname(currentFile);\n\n // Source runtime: src/conversation-index/faiss-adapter.ts\n if (moduleDir.endsWith(`${path.sep}conversation-index`)) {\n return path.resolve(moduleDir, \"..\", \"..\", \"scripts\", \"faiss_index.py\");\n }\n\n // Bundled runtime: dist/index.js (or neighboring dist chunks)\n return path.resolve(moduleDir, \"..\", \"scripts\", \"faiss_index.py\");\n}\n\nexport class FaissConversationIndexAdapter {\n private readonly pythonBin: string;\n private readonly scriptPath: string;\n private readonly indexPath: string;\n private readonly maxBatchSize: number;\n private readonly spawnFn: typeof launchProcess;\n\n constructor(private readonly config: FaissAdapterConfig) {\n if (!Number.isInteger(config.maxBatchSize) || config.maxBatchSize <= 0) {\n throw new RangeError(\"FAISS maxBatchSize must be a positive integer\");\n }\n this.pythonBin = config.pythonBin && config.pythonBin.trim().length > 0 ? config.pythonBin.trim() : \"python3\";\n this.scriptPath = config.scriptPath && config.scriptPath.trim().length > 0\n ? config.scriptPath.trim()\n : resolveDefaultFaissScriptPath();\n this.indexPath = path.isAbsolute(config.indexDir)\n ? config.indexDir\n : path.join(config.memoryDir, config.indexDir);\n this.maxBatchSize = config.maxBatchSize;\n this.spawnFn = config.spawnFn ?? launchProcess;\n }\n\n async upsertChunks(\n chunks: ConversationChunk[],\n options: { retentionCutoffMs?: number } = {},\n ): Promise<number> {\n let totalUpserted = 0;\n for (let offset = 0; offset < chunks.length; offset += this.maxBatchSize) {\n const batch = chunks.slice(offset, offset + this.maxBatchSize);\n if (batch.length === 0) continue;\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n chunks: batch.map((chunk) => ({\n id: chunk.id,\n sessionKey: chunk.sessionKey,\n text: chunk.text,\n startTs: chunk.startTs,\n endTs: chunk.endTs,\n })),\n ...(typeof options.retentionCutoffMs === \"number\" &&\n Number.isFinite(options.retentionCutoffMs)\n ? { retentionCutoffMs: options.retentionCutoffMs }\n : {}),\n };\n const result = await this.runCommand(\"upsert\", payload, this.config.upsertTimeoutMs);\n const upserted = result.upserted;\n if (typeof upserted !== \"number\" || !Number.isFinite(upserted)) {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed upsert response\", \"malformed_output\");\n }\n totalUpserted += Math.max(0, Math.floor(upserted));\n }\n return totalUpserted;\n }\n\n async searchChunks(query: string, topK: number): Promise<ConversationSearchResult[]> {\n const requestedTopK = Number.isFinite(topK) ? Math.floor(topK) : 0;\n const boundedTopK = this.config.maxSearchK > 0\n ? Math.max(0, Math.min(requestedTopK, this.config.maxSearchK))\n : 0;\n if (boundedTopK <= 0 || query.trim().length === 0) return [];\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n query,\n topK: boundedTopK,\n };\n const result = await this.runCommand(\"search\", payload, this.config.searchTimeoutMs);\n if (!Array.isArray(result.results)) {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed search response\", \"malformed_output\");\n }\n const rows = result.results;\n return rows\n .filter((row) =>\n row &&\n typeof row.path === \"string\" &&\n typeof row.snippet === \"string\" &&\n typeof row.score === \"number\"\n )\n .map((row) => ({ path: row.path, snippet: row.snippet, score: row.score }));\n }\n\n async health(): Promise<FaissHealthResult> {\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n };\n const result = await this.runCommand(\"health\", payload, this.config.healthTimeoutMs);\n if (result.status !== \"ok\" && result.status !== \"degraded\" && result.status !== \"error\") {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed health response\", \"malformed_output\");\n }\n return {\n ok: result.ok === true,\n status: result.status,\n indexPath: this.indexPath,\n message: typeof result.error === \"string\" && result.error.length > 0 ? result.error : undefined,\n manifest: parseSidecarManifest(result),\n };\n }\n\n async inspect(): Promise<FaissInspectResult> {\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n };\n const result = await this.runCommand(\"inspect\", payload, this.config.healthTimeoutMs);\n if (result.status !== \"ok\" && result.status !== \"degraded\" && result.status !== \"error\") {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed inspect response\", \"malformed_output\");\n }\n return {\n ok: result.ok === true,\n status: result.status,\n indexPath: this.indexPath,\n message: typeof result.error === \"string\" && result.error.length > 0 ? result.error : undefined,\n manifest: parseSidecarManifest(result),\n metadata: {\n chunkCount:\n result.metadata && typeof result.metadata.chunkCount === \"number\"\n ? result.metadata.chunkCount\n : 0,\n hasIndex: result.metadata?.hasIndex === true,\n hasMetadata: result.metadata?.hasMetadata === true,\n hasManifest: result.metadata?.hasManifest === true,\n },\n };\n }\n\n async rebuildChunks(chunks: ConversationChunk[]): Promise<number> {\n const rebuildPayload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n chunks: chunks.map((chunk) => ({\n id: chunk.id,\n sessionKey: chunk.sessionKey,\n text: chunk.text,\n startTs: chunk.startTs,\n endTs: chunk.endTs,\n })),\n };\n const result = await this.runCommand(\"rebuild\", rebuildPayload, this.config.upsertTimeoutMs);\n const rebuilt = result.rebuilt;\n if (typeof rebuilt !== \"number\" || !Number.isFinite(rebuilt)) {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed rebuild response\", \"malformed_output\");\n }\n const rebuildCount = Math.floor(rebuilt);\n if (rebuildCount !== chunks.length) {\n throw new FaissAdapterError(\n `FAISS sidecar rebuilt ${rebuildCount} chunk(s), expected ${chunks.length}`,\n \"malformed_output\",\n );\n }\n return rebuildCount;\n }\n\n private async runCommand(command: SidecarCommand, payload: object, timeoutMs: number): Promise<SidecarResult> {\n const args = [this.scriptPath, command];\n const child = this.spawnFn(this.pythonBin, args, {\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n if (!child.stdin || !child.stdout || !child.stderr) {\n throw new FaissAdapterError(\n `FAISS sidecar missing stdio pipes (${command})`,\n \"non_zero_exit\",\n );\n }\n const stdinPipe = child.stdin;\n const stdoutPipe = child.stdout;\n const stderrPipe = child.stderr;\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n let timedOut = false;\n\n const timer = timeoutMs > 0\n ? setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGKILL\");\n }, timeoutMs)\n : undefined;\n\n stdoutPipe.on(\"data\", (chunk: Buffer | string) => {\n stdoutChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n stderrPipe.on(\"data\", (chunk: Buffer | string) => {\n stderrChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n\n let code: number | null;\n try {\n stdinPipe.write(JSON.stringify(payload));\n stdinPipe.end();\n\n code = await new Promise<number | null>((resolve, reject) => {\n const rejectAsProcessError = (err: unknown) => {\n const msg = err instanceof Error ? err.message : String(err);\n reject(new FaissAdapterError(`FAISS sidecar stream/process error (${command}): ${msg}`, \"non_zero_exit\"));\n };\n child.once(\"error\", rejectAsProcessError);\n stdinPipe.once(\"error\", rejectAsProcessError);\n child.once(\"close\", (exitCode) => resolve(exitCode));\n });\n } catch (err) {\n if (err instanceof FaissAdapterError) throw err;\n const msg = err instanceof Error ? err.message : String(err);\n throw new FaissAdapterError(`FAISS sidecar stream/process error (${command}): ${msg}`, \"non_zero_exit\");\n } finally {\n if (timer) clearTimeout(timer);\n }\n\n const stdout = Buffer.concat(stdoutChunks).toString(\"utf-8\").trim();\n const stderr = Buffer.concat(stderrChunks).toString(\"utf-8\").trim();\n\n if (timedOut) {\n throw new FaissAdapterError(\n `FAISS sidecar command timed out (${command}, ${timeoutMs}ms)`,\n \"timeout\",\n );\n }\n if (code !== 0) {\n throw new FaissAdapterError(\n `FAISS sidecar exited non-zero (${command}, code=${code ?? \"null\"})${stderr ? `: ${stderr}` : \"\"}`,\n \"non_zero_exit\",\n );\n }\n if (stdout.length === 0) {\n throw new FaissAdapterError(\n `FAISS sidecar produced empty output (${command})`,\n \"malformed_output\",\n );\n }\n\n let parsed: SidecarResult;\n try {\n parsed = JSON.parse(stdout) as SidecarResult;\n } catch {\n throw new FaissAdapterError(\n `FAISS sidecar produced malformed JSON (${command})`,\n \"malformed_output\",\n );\n }\n\n if (parsed.ok === false) {\n const message = typeof parsed.error === \"string\" && parsed.error.length > 0\n ? parsed.error\n : `FAISS sidecar command failed (${command})`;\n throw new FaissAdapterError(message, \"non_zero_exit\");\n }\n if (parsed.ok !== true) {\n throw new FaissAdapterError(\n `FAISS sidecar produced malformed success envelope (${command})`,\n \"malformed_output\",\n );\n }\n\n return parsed;\n }\n}\n\nexport async function failOpenFaissHealth(\n adapter: FaissConversationIndexAdapter | undefined,\n): Promise<FaissHealthResult> {\n if (!adapter) {\n return { ok: false, status: \"error\", indexPath: \"\", message: \"adapter-unavailable\" };\n }\n try {\n return await adapter.health();\n } catch (err) {\n log.debug(`faiss adapter health failed (fail-open): ${err}`);\n return { ok: false, status: \"error\", indexPath: \"\", message: \"adapter-error\" };\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  looksLikeEngramJsonExport
3
- } from "./chunk-W4L6CZKA.js";
3
+ } from "./chunk-2DL3OFLD.js";
4
4
  import {
5
5
  looksLikeEngramMdExport
6
- } from "./chunk-6H2TESSP.js";
6
+ } from "./chunk-765K3SAT.js";
7
7
 
8
8
  // src/transfer/autodetect.ts
9
9
  import path from "path";
@@ -31,4 +31,4 @@ async function detectImportFormat(fromPath) {
31
31
  export {
32
32
  detectImportFormat
33
33
  };
34
- //# sourceMappingURL=chunk-DOM4GKSW.js.map
34
+ //# sourceMappingURL=chunk-OZKVVUJB.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseXrayFormat
3
- } from "./chunk-FBYESMQ2.js";
3
+ } from "./chunk-3C5RPJAX.js";
4
4
  import {
5
5
  RECALL_DISCLOSURE_LEVELS,
6
6
  isRecallDisclosure
7
- } from "./chunk-Q7P4WJDP.js";
7
+ } from "./chunk-M5T4Q2ZU.js";
8
8
 
9
9
  // src/recall-xray-cli.ts
10
10
  function parseXrayDisclosureFlag(value) {
@@ -50,4 +50,4 @@ export {
50
50
  parseXrayBudgetFlag,
51
51
  parseXrayCliOptions
52
52
  };
53
- //# sourceMappingURL=chunk-MT4HVDUZ.js.map
53
+ //# sourceMappingURL=chunk-PM3QHTFT.js.map