@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contradiction/resolution.ts"],"sourcesContent":["/**\n * Resolution Verbs — executes user-chosen resolution actions on contradiction pairs (issue #520).\n *\n * All resolution paths delegate to StorageManager.supersedeMemory. Do not\n * reimplement supersession logic here (rule 22: deduplicate resolution).\n */\n\nimport type { StorageManager } from \"../storage.js\";\nimport type { MemoryCategory, MemoryFile } from \"../types.js\";\nimport type { ResolutionVerb } from \"./contradiction-review.js\";\nimport { resolvePair, readPair } from \"./contradiction-review.js\";\nimport { log } from \"../logger.js\";\n\nexport interface ResolutionResult {\n pairId: string;\n verb: ResolutionVerb;\n /** Memory IDs affected by the resolution. */\n affectedIds: string[];\n /** Human-readable status. */\n message: string;\n}\n\nexport interface ExecuteResolutionOptions {\n /** Existing merged memory to supersede both source memories to. */\n mergedMemoryId?: string;\n /** Content for a new merged memory. Required for merge when mergedMemoryId is omitted. */\n mergedContent?: string;\n /** Category for a newly created merged memory. Defaults to the shared source category, or fact. */\n mergedCategory?: MemoryCategory;\n /** Resolve storage for the pair namespace, or the default namespace for legacy unscoped pairs. */\n storageForNamespace?: (namespace: string | undefined) => StorageManager | Promise<StorageManager>;\n}\n\nconst VALID_VERBS: ResolutionVerb[] = [\"keep-a\", \"keep-b\", \"merge\", \"both-valid\", \"needs-more-context\"];\n\nexport function isValidResolutionVerb(value: string): value is ResolutionVerb {\n return VALID_VERBS.includes(value as ResolutionVerb);\n}\n\n/**\n * Execute a resolution verb on a contradiction pair.\n *\n * - `keep-a`: Supersede B, keep A active.\n * - `keep-b`: Supersede A, keep B active.\n * - `merge`: Create or verify a real merged memory, then supersede both inputs.\n * - `both-valid`: Mark pair as reviewed; no memories are superseded.\n * - `needs-more-context`: Defer; no action, short cooldown.\n */\nexport async function executeResolution(\n memoryDir: string,\n storage: StorageManager,\n pairId: string,\n verb: ResolutionVerb,\n options: ExecuteResolutionOptions = {},\n): Promise<ResolutionResult> {\n if (typeof verb !== \"string\" || !isValidResolutionVerb(verb)) {\n throw new Error(`Invalid contradiction resolution verb: ${String(verb)}`);\n }\n\n const pair = readPair(memoryDir, pairId);\n if (!pair) {\n return { pairId, verb, affectedIds: [], message: `Pair ${pairId} not found` };\n }\n\n if (pair.namespace && !options.storageForNamespace) {\n throw new Error(\n \"contradiction resolution requires storageForNamespace for namespaced pairs so callers resolve the correct namespace storage\",\n );\n }\n\n const resolutionStorage = options.storageForNamespace\n ? await options.storageForNamespace(pair.namespace)\n : storage;\n\n if (pair.resolution && pair.resolution !== \"needs-more-context\") {\n return { pairId, verb, affectedIds: [], message: `Pair already resolved with verb \"${pair.resolution}\"` };\n }\n\n const [idA, idB] = pair.memoryIds;\n const affectedIds: string[] = [];\n let message = \"\";\n let supersedeFailed = false;\n let rollbackAfterResolveFailure: (() => Promise<boolean>) | null = null;\n\n switch (verb) {\n case \"keep-a\": {\n const keepTarget = await validateKeepTarget(resolutionStorage, pairId, idA);\n if (!keepTarget.ok) {\n supersedeFailed = true;\n message = keepTarget.message;\n break;\n }\n const sourceB = await loadSourceSnapshot(resolutionStorage, idB);\n const ok = sourceB\n ? await supersedeSafe(resolutionStorage, idB, idA, \"contradiction-resolution:keep-a\")\n : false;\n if (ok) {\n affectedIds.push(idB);\n rollbackAfterResolveFailure = async () =>\n restoreMemorySnapshot(resolutionStorage, sourceB!, \"contradiction-resolution:keep-a-rollback\");\n message = `Kept ${idA}, superseded ${idB}`;\n }\n else {\n supersedeFailed = true;\n const rolledBack = sourceB\n ? await restoreMemorySnapshot(resolutionStorage, sourceB, \"contradiction-resolution:keep-a-rollback\")\n : false;\n message = rolledBack\n ? `Supersede failed for ${idB}; restored ${idB} and did not resolve`\n : `Supersede failed for ${idB}; rollback incomplete for ${idB} and pair is not resolved`;\n }\n break;\n }\n case \"keep-b\": {\n const keepTarget = await validateKeepTarget(resolutionStorage, pairId, idB);\n if (!keepTarget.ok) {\n supersedeFailed = true;\n message = keepTarget.message;\n break;\n }\n const sourceA = await loadSourceSnapshot(resolutionStorage, idA);\n const ok = sourceA\n ? await supersedeSafe(resolutionStorage, idA, idB, \"contradiction-resolution:keep-b\")\n : false;\n if (ok) {\n affectedIds.push(idA);\n rollbackAfterResolveFailure = async () =>\n restoreMemorySnapshot(resolutionStorage, sourceA!, \"contradiction-resolution:keep-b-rollback\");\n message = `Kept ${idB}, superseded ${idA}`;\n }\n else {\n supersedeFailed = true;\n const rolledBack = sourceA\n ? await restoreMemorySnapshot(resolutionStorage, sourceA, \"contradiction-resolution:keep-b-rollback\")\n : false;\n message = rolledBack\n ? `Supersede failed for ${idA}; restored ${idA} and did not resolve`\n : `Supersede failed for ${idA}; rollback incomplete for ${idA} and pair is not resolved`;\n }\n break;\n }\n case \"merge\": {\n const replacement = await prepareMergeReplacement(resolutionStorage, pairId, idA, idB, options);\n if (!replacement.ok) {\n supersedeFailed = true;\n message = replacement.message;\n break;\n }\n\n const okA = await supersedeSafe(resolutionStorage, idA, replacement.mergedId, \"contradiction-resolution:merge\");\n if (!okA) {\n supersedeFailed = true;\n const rolledBackA = await restoreMemorySnapshot(resolutionStorage, replacement.sourceA);\n message = rolledBackA\n ? `Merge failed for ${idA}; restored ${idA} and did not resolve`\n : `Merge failed for ${idA}; rollback incomplete for ${idA} and pair is not resolved`;\n if (rolledBackA) {\n await cleanupCreatedReplacement(resolutionStorage, replacement);\n }\n break;\n }\n\n const okB = await supersedeSafe(resolutionStorage, idB, replacement.mergedId, \"contradiction-resolution:merge\");\n if (!okB) {\n supersedeFailed = true;\n const rolledBackA = await restoreMemorySnapshot(resolutionStorage, replacement.sourceA);\n const rolledBackB = await restoreMemorySnapshot(resolutionStorage, replacement.sourceB);\n message = rolledBackA && rolledBackB\n ? `Merge failed for ${idB}; restored ${idA} and ${idB} and did not resolve`\n : `Merge failed for ${idB}; rollback incomplete for ${[\n rolledBackA ? undefined : idA,\n rolledBackB ? undefined : idB,\n ].filter(Boolean).join(\", \")} and pair is not resolved`;\n if (rolledBackA && rolledBackB) {\n await cleanupCreatedReplacement(resolutionStorage, replacement);\n }\n break;\n }\n\n affectedIds.push(idA, idB);\n rollbackAfterResolveFailure = async () => {\n const rolledBackA = await restoreMemorySnapshot(resolutionStorage, replacement.sourceA);\n const rolledBackB = await restoreMemorySnapshot(resolutionStorage, replacement.sourceB);\n if (rolledBackA && rolledBackB) {\n await cleanupCreatedReplacement(resolutionStorage, replacement);\n }\n return rolledBackA && rolledBackB;\n };\n message = `Both memories superseded by merged ${replacement.mergedId}`;\n break;\n }\n case \"both-valid\": {\n message = \"Pair marked as both-valid; cooldown applied\";\n break;\n }\n case \"needs-more-context\": {\n message = \"Deferred; no action taken, short cooldown applied\";\n break;\n }\n }\n\n if (!supersedeFailed) {\n let resolved = false;\n try {\n resolved = resolvePair(memoryDir, pairId, verb) !== null;\n } catch (err) {\n log.warn(\n \"[contradiction-resolution] failed to persist pair=%s verb=%s: %s\",\n pairId,\n verb,\n err instanceof Error ? err.message : err,\n );\n }\n if (!resolved) {\n if (rollbackAfterResolveFailure) {\n const rolledBack = await rollbackAfterResolveFailure();\n affectedIds.length = 0;\n message = rolledBack\n ? `Resolution persistence failed; rolled back memory changes and did not resolve ${pairId}`\n : `Resolution persistence failed; rollback incomplete and pair is not resolved`;\n } else {\n message = `Resolution persistence failed; pair is not resolved`;\n }\n }\n }\n log.info(\"[contradiction-resolution] pair=%s verb=%s affected=%d\", pairId, verb, affectedIds.length);\n return { pairId, verb, affectedIds, message };\n}\n\ntype MergeReplacement =\n | {\n ok: true;\n mergedId: string;\n sourceA: MemoryFile;\n sourceB: MemoryFile;\n created: boolean;\n }\n | {\n ok: false;\n message: string;\n };\n\nasync function prepareMergeReplacement(\n storage: StorageManager,\n pairId: string,\n idA: string,\n idB: string,\n options: ExecuteResolutionOptions,\n): Promise<MergeReplacement> {\n const sourceA = await storage.getMemoryById(idA);\n const sourceB = await storage.getMemoryById(idB);\n if (!sourceA || !sourceB) {\n return { ok: false, message: `Merge requires both source memories to exist; not resolving ${pairId}` };\n }\n\n const requestedMergedId = options.mergedMemoryId?.trim();\n if (requestedMergedId) {\n if (requestedMergedId === idA || requestedMergedId === idB) {\n return { ok: false, message: \"Merge replacement must be distinct from both source memories; not resolving\" };\n }\n const replacement = await storage.getMemoryById(requestedMergedId);\n if (!replacement) {\n return { ok: false, message: `Merged memory ${requestedMergedId} not found; not resolving` };\n }\n const replacementStatus = replacement.frontmatter.status ?? \"active\";\n if (replacementStatus !== \"active\") {\n return {\n ok: false,\n message: `Merged memory ${requestedMergedId} is ${replacementStatus}; not resolving`,\n };\n }\n return { ok: true, mergedId: requestedMergedId, sourceA, sourceB, created: false };\n }\n\n const mergedContent = options.mergedContent;\n if (typeof mergedContent !== \"string\" || mergedContent.trim().length === 0) {\n return {\n ok: false,\n message: \"Merge requires mergedMemoryId or mergedContent; no memories changed\",\n };\n }\n\n const category = options.mergedCategory ?? mergedMemoryCategory(sourceA, sourceB);\n let mergedId: string;\n try {\n mergedId = await storage.writeMemory(category, mergedContent, {\n actor: \"contradiction-resolution\",\n confidence: Math.min(sourceA.frontmatter.confidence ?? 0.8, sourceB.frontmatter.confidence ?? 0.8),\n tags: [\"contradiction-resolution\", \"merge\"],\n source: \"contradiction-resolution\",\n lineage: [idA, idB],\n derivedVia: \"merge\",\n });\n } catch (err) {\n log.warn(\n \"[contradiction-resolution] merged memory creation failed for %s: %s\",\n pairId,\n err instanceof Error ? err.message : err,\n );\n return { ok: false, message: `Merged memory could not be created; not resolving ${pairId}` };\n }\n const replacement = await storage.getMemoryById(mergedId);\n if (!replacement) {\n await cleanupMemoryId(storage, mergedId);\n return { ok: false, message: `Merged memory ${mergedId} could not be verified; not resolving` };\n }\n return { ok: true, mergedId, sourceA, sourceB, created: true };\n}\n\nfunction mergedMemoryCategory(sourceA: MemoryFile, sourceB: MemoryFile): MemoryCategory {\n return sourceA.frontmatter.category === sourceB.frontmatter.category\n ? sourceA.frontmatter.category\n : \"fact\";\n}\n\ntype KeepTargetValidation =\n | { ok: true }\n | { ok: false; message: string };\n\nasync function validateKeepTarget(\n storage: StorageManager,\n pairId: string,\n keepId: string,\n): Promise<KeepTargetValidation> {\n const target = await loadSourceSnapshot(storage, keepId);\n if (!target) {\n return { ok: false, message: `Kept memory ${keepId} not found; not resolving ${pairId}` };\n }\n\n const status = target.frontmatter.status ?? \"active\";\n if (status !== \"active\") {\n return { ok: false, message: `Kept memory ${keepId} is ${status}; not resolving ${pairId}` };\n }\n\n return { ok: true };\n}\n\nasync function loadSourceSnapshot(storage: StorageManager, memoryId: string): Promise<MemoryFile | null> {\n try {\n return await storage.getMemoryById(memoryId);\n } catch (err) {\n log.warn(\n \"[contradiction-resolution] source snapshot failed for %s: %s\",\n memoryId,\n err instanceof Error ? err.message : err,\n );\n return null;\n }\n}\n\nasync function restoreMemorySnapshot(\n storage: StorageManager,\n memory: MemoryFile,\n reasonCode = \"contradiction-resolution:merge-rollback\",\n): Promise<boolean> {\n try {\n const current = await storage.getMemoryById(memory.frontmatter.id);\n if (!current) return false;\n const restoredFrontmatter: Partial<MemoryFile[\"frontmatter\"]> = {\n ...memory.frontmatter,\n status: memory.frontmatter.status,\n supersededBy: memory.frontmatter.supersededBy,\n supersededAt: memory.frontmatter.supersededAt,\n };\n return await storage.writeMemoryFrontmatter(current, restoredFrontmatter, {\n actor: \"contradiction-resolution\",\n reasonCode,\n });\n } catch (err) {\n log.warn(\n \"[contradiction-resolution] rollback failed for %s: %s\",\n memory.frontmatter.id,\n err instanceof Error ? err.message : err,\n );\n return false;\n }\n}\n\nasync function cleanupCreatedReplacement(storage: StorageManager, replacement: Extract<MergeReplacement, { ok: true }>): Promise<void> {\n if (!replacement.created) return;\n await cleanupMemoryId(storage, replacement.mergedId);\n}\n\nasync function cleanupMemoryId(storage: StorageManager, memoryId: string): Promise<void> {\n try {\n const memory = await storage.getMemoryById(memoryId);\n const invalidated = await storage.invalidateMemory(memoryId);\n if (invalidated && memory?.frontmatter.category === \"fact\") {\n await storage.removeFactContentHashesForMemories([memory]);\n }\n } catch (err) {\n log.warn(\n \"[contradiction-resolution] cleanup failed for merged memory %s: %s\",\n memoryId,\n err instanceof Error ? err.message : err,\n );\n }\n}\n\nasync function supersedeSafe(\n storage: StorageManager,\n oldId: string,\n newId: string,\n reason: string,\n): Promise<boolean> {\n try {\n const result = await storage.supersedeMemory(oldId, newId, reason);\n if (result === false) {\n log.warn(\"[contradiction-resolution] supersede returned false for %s → %s\", oldId, newId);\n return false;\n }\n return true;\n } catch (err) {\n log.warn(\n \"[contradiction-resolution] supersede failed %s → %s: %s\",\n oldId,\n newId,\n err instanceof Error ? err.message : err,\n );\n return false;\n }\n}\n"],"mappings":"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","names":["replacement"]}
@@ -8,12 +8,12 @@ import {
8
8
  import {
9
9
  computeTransferOutputRel,
10
10
  isTransferPathExcluded
11
- } from "./chunk-I6K5FBRQ.js";
11
+ } from "./chunk-UI3NYK34.js";
12
12
  import {
13
13
  listFilesRecursive,
14
14
  readUtf8FileStrict,
15
15
  toPosixRelPath
16
- } from "./chunk-AGZQD76C.js";
16
+ } from "./chunk-GCGJW34D.js";
17
17
 
18
18
  // src/transfer/export-sqlite.ts
19
19
  import path from "path";
@@ -23,28 +23,30 @@ async function exportSqlite(opts) {
23
23
  const outAbs = path.resolve(opts.outFile);
24
24
  const outputRelPosix = computeTransferOutputRel(memDirAbs, outAbs);
25
25
  const filesAbs = await listFilesRecursive(memDirAbs);
26
+ const rows = [];
27
+ for (const abs of filesAbs) {
28
+ const relPosix = toPosixRelPath(abs, memDirAbs);
29
+ if (isTransferPathExcluded(relPosix, { includeTranscripts, outputRelPosix })) continue;
30
+ const { content, sha256, bytes } = await readUtf8FileStrict(abs);
31
+ rows.push({ rel: relPosix, bytes, sha256, content });
32
+ }
26
33
  const db = openBetterSqlite3(outAbs);
27
34
  try {
28
35
  db.exec("PRAGMA journal_mode=WAL;");
29
36
  db.exec(SQLITE_TABLES_SQL);
30
37
  const insertMeta = db.prepare("INSERT OR REPLACE INTO meta(key,value) VALUES (?,?)");
31
- insertMeta.run("schemaVersion", String(SQLITE_SCHEMA_VERSION));
32
- insertMeta.run("createdAt", (/* @__PURE__ */ new Date()).toISOString());
33
- insertMeta.run("pluginVersion", opts.pluginVersion);
34
- insertMeta.run("includesTranscripts", includeTranscripts ? "true" : "false");
35
38
  const insertFile = db.prepare(
36
39
  "INSERT OR REPLACE INTO files(path_rel, bytes, sha256, content) VALUES (?,?,?,?)"
37
40
  );
38
41
  const tx = db.transaction((rows2) => {
42
+ db.prepare("DELETE FROM meta").run();
43
+ db.prepare("DELETE FROM files").run();
44
+ insertMeta.run("schemaVersion", String(SQLITE_SCHEMA_VERSION));
45
+ insertMeta.run("createdAt", (/* @__PURE__ */ new Date()).toISOString());
46
+ insertMeta.run("pluginVersion", opts.pluginVersion);
47
+ insertMeta.run("includesTranscripts", includeTranscripts ? "true" : "false");
39
48
  for (const r of rows2) insertFile.run(r.rel, r.bytes, r.sha256, r.content);
40
49
  });
41
- const rows = [];
42
- for (const abs of filesAbs) {
43
- const relPosix = toPosixRelPath(abs, memDirAbs);
44
- if (isTransferPathExcluded(relPosix, { includeTranscripts, outputRelPosix })) continue;
45
- const { content, sha256, bytes } = await readUtf8FileStrict(abs);
46
- rows.push({ rel: relPosix, bytes, sha256, content });
47
- }
48
50
  tx(rows);
49
51
  } finally {
50
52
  db.close();
@@ -54,4 +56,4 @@ async function exportSqlite(opts) {
54
56
  export {
55
57
  exportSqlite
56
58
  };
57
- //# sourceMappingURL=chunk-66DHUKLO.js.map
59
+ //# sourceMappingURL=chunk-XSWKORGM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transfer/export-sqlite.ts"],"sourcesContent":["import path from \"node:path\";\nimport { SQLITE_SCHEMA_VERSION, SQLITE_TABLES_SQL } from \"./sqlite-schema.js\";\nimport { listFilesRecursive, readUtf8FileStrict, toPosixRelPath } from \"./fs-utils.js\";\nimport { openBetterSqlite3 } from \"../runtime/better-sqlite.js\";\nimport { computeTransferOutputRel, isTransferPathExcluded } from \"./exclusions.js\";\n\nexport interface ExportSqliteOptions {\n memoryDir: string;\n outFile: string;\n includeTranscripts?: boolean;\n pluginVersion: string;\n}\n\nexport async function exportSqlite(opts: ExportSqliteOptions): Promise<void> {\n const includeTranscripts = opts.includeTranscripts === true;\n const memDirAbs = path.resolve(opts.memoryDir);\n const outAbs = path.resolve(opts.outFile);\n const outputRelPosix = computeTransferOutputRel(memDirAbs, outAbs);\n\n const filesAbs = await listFilesRecursive(memDirAbs);\n const rows: Array<{ rel: string; bytes: number; sha256: string; content: string }> = [];\n for (const abs of filesAbs) {\n const relPosix = toPosixRelPath(abs, memDirAbs);\n if (isTransferPathExcluded(relPosix, { includeTranscripts, outputRelPosix })) continue;\n const { content, sha256, bytes } = await readUtf8FileStrict(abs);\n rows.push({ rel: relPosix, bytes, sha256, content });\n }\n\n const db = openBetterSqlite3(outAbs);\n try {\n db.exec(\"PRAGMA journal_mode=WAL;\");\n db.exec(SQLITE_TABLES_SQL);\n\n const insertMeta = db.prepare(\"INSERT OR REPLACE INTO meta(key,value) VALUES (?,?)\");\n const insertFile = db.prepare(\n \"INSERT OR REPLACE INTO files(path_rel, bytes, sha256, content) VALUES (?,?,?,?)\",\n );\n\n const tx = db.transaction((rows: Array<{ rel: string; bytes: number; sha256: string; content: string }>) => {\n db.prepare(\"DELETE FROM meta\").run();\n db.prepare(\"DELETE FROM files\").run();\n insertMeta.run(\"schemaVersion\", String(SQLITE_SCHEMA_VERSION));\n insertMeta.run(\"createdAt\", new Date().toISOString());\n insertMeta.run(\"pluginVersion\", opts.pluginVersion);\n insertMeta.run(\"includesTranscripts\", includeTranscripts ? \"true\" : \"false\");\n for (const r of rows) insertFile.run(r.rel, r.bytes, r.sha256, r.content);\n });\n\n tx(rows);\n } finally {\n db.close();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AAajB,eAAsB,aAAa,MAA0C;AAC3E,QAAM,qBAAqB,KAAK,uBAAuB;AACvD,QAAM,YAAY,KAAK,QAAQ,KAAK,SAAS;AAC7C,QAAM,SAAS,KAAK,QAAQ,KAAK,OAAO;AACxC,QAAM,iBAAiB,yBAAyB,WAAW,MAAM;AAEjE,QAAM,WAAW,MAAM,mBAAmB,SAAS;AACnD,QAAM,OAA+E,CAAC;AACtF,aAAW,OAAO,UAAU;AAC1B,UAAM,WAAW,eAAe,KAAK,SAAS;AAC9C,QAAI,uBAAuB,UAAU,EAAE,oBAAoB,eAAe,CAAC,EAAG;AAC9E,UAAM,EAAE,SAAS,QAAQ,MAAM,IAAI,MAAM,mBAAmB,GAAG;AAC/D,SAAK,KAAK,EAAE,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAAC;AAAA,EACrD;AAEA,QAAM,KAAK,kBAAkB,MAAM;AACnC,MAAI;AACF,OAAG,KAAK,0BAA0B;AAClC,OAAG,KAAK,iBAAiB;AAEzB,UAAM,aAAa,GAAG,QAAQ,qDAAqD;AACnF,UAAM,aAAa,GAAG;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,KAAK,GAAG,YAAY,CAACA,UAAiF;AAC1G,SAAG,QAAQ,kBAAkB,EAAE,IAAI;AACnC,SAAG,QAAQ,mBAAmB,EAAE,IAAI;AACpC,iBAAW,IAAI,iBAAiB,OAAO,qBAAqB,CAAC;AAC7D,iBAAW,IAAI,cAAa,oBAAI,KAAK,GAAE,YAAY,CAAC;AACpD,iBAAW,IAAI,iBAAiB,KAAK,aAAa;AAClD,iBAAW,IAAI,uBAAuB,qBAAqB,SAAS,OAAO;AAC3E,iBAAW,KAAKA,MAAM,YAAW,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;AAAA,IAC1E,CAAC;AAED,OAAG,IAAI;AAAA,EACT,UAAE;AACA,OAAG,MAAM;AAAA,EACX;AACF;","names":["rows"]}
@@ -177,25 +177,24 @@ var ModelRegistry = class {
177
177
  */
178
178
  calculateContextSizes(modelId, maxContextOverride) {
179
179
  const caps = this.getCapabilities(modelId);
180
- const effectiveContextWindow = maxContextOverride ?? caps.contextWindow;
180
+ const sanitizedOverride = typeof maxContextOverride === "number" && Number.isFinite(maxContextOverride) && Number.isInteger(maxContextOverride) && maxContextOverride >= 1024 ? maxContextOverride : void 0;
181
+ const effectiveContextWindow = sanitizedOverride ?? Math.max(1024, Math.floor(caps.contextWindow));
181
182
  const overheadTokens = Math.min(1e3, Math.floor(effectiveContextWindow / 10));
182
183
  const minInputTokens = Math.min(512, Math.floor(effectiveContextWindow / 4));
183
- const minOutputTokens = 256;
184
+ const minOutputTokens = Math.min(256, Math.max(1, effectiveContextWindow - overheadTokens - minInputTokens));
184
185
  let outputTokens = caps.typicalOutputTokens;
185
186
  if (effectiveContextWindow > 65536) {
186
187
  outputTokens = Math.min(Math.floor(effectiveContextWindow / 8), 16384);
187
188
  }
188
189
  outputTokens = Math.min(outputTokens, Math.floor(effectiveContextWindow / 4));
189
- outputTokens = Math.max(
190
- minOutputTokens,
191
- Math.min(outputTokens, effectiveContextWindow - overheadTokens - minInputTokens)
192
- );
190
+ const maxOutputTokens = Math.max(1, effectiveContextWindow - overheadTokens - minInputTokens);
191
+ outputTokens = Math.min(maxOutputTokens, Math.max(minOutputTokens, outputTokens));
193
192
  const availableForInput = Math.max(
194
193
  0,
195
194
  effectiveContextWindow - outputTokens - overheadTokens
196
195
  );
197
196
  const maxInputChars = Math.max(0, Math.floor(availableForInput * 3.5));
198
- const source = maxContextOverride ? "user override" : caps.source;
197
+ const source = sanitizedOverride ? "user override" : caps.source;
199
198
  return {
200
199
  maxInputChars,
201
200
  maxOutputTokens: outputTokens,
@@ -237,4 +236,4 @@ var ModelRegistry = class {
237
236
  export {
238
237
  ModelRegistry
239
238
  };
240
- //# sourceMappingURL=chunk-QR3C7BKQ.js.map
239
+ //# sourceMappingURL=chunk-XZ4WBBB5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model-registry.ts"],"sourcesContent":["/**\n * Model Registry - Stores and retrieves model capabilities\n * Avoids repeated external lookups by caching model info locally\n */\n\nimport { log } from \"./logger.js\";\nimport fs from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface ModelCapabilities {\n modelId: string;\n maxPositionEmbeddings: number;\n contextWindow: number;\n supportsExtendedContext: boolean;\n ropeScaling?: {\n type: string;\n factor: number;\n originalMaxPositionEmbeddings: number;\n };\n typicalOutputTokens: number;\n source: \"huggingface\" | \"lmstudio\" | \"manual\" | \"default\";\n fetchedAt: string;\n}\n\ninterface ModelRegistryData {\n models: Record<string, ModelCapabilities>;\n version: number;\n}\n\nconst DEFAULT_CAPABILITIES: ModelCapabilities = {\n modelId: \"default\",\n maxPositionEmbeddings: 32768,\n contextWindow: 32768,\n supportsExtendedContext: false,\n typicalOutputTokens: 8192,\n source: \"default\",\n fetchedAt: new Date().toISOString(),\n};\n\n// Known model capabilities (fallback when offline)\n// NOTE: Context windows here are the MODEL's theoretical maximum. Local LLM servers\n// (LM Studio, Ollama, etc.) often load models with smaller default context windows.\n// If you get \"context length exceeded\" errors, either:\n// 1. Increase the context window in your LLM server UI (recommended)\n// 2. Set localLlmMaxContext in openclaw.json to limit prompts (fallback)\nconst KNOWN_MODELS: Record<string, Partial<ModelCapabilities>> = {\n \"qwen3-30b-a3b-instruct\": {\n maxPositionEmbeddings: 40960,\n contextWindow: 131072, // 128K with YaRN - but LM Studio defaults to ~32K\n supportsExtendedContext: true,\n ropeScaling: {\n type: \"yarn\",\n factor: 4.0,\n originalMaxPositionEmbeddings: 32768,\n },\n typicalOutputTokens: 8192,\n },\n \"qwen3-coder-30b-a3b-instruct\": {\n maxPositionEmbeddings: 40960,\n contextWindow: 131072, // 128K with YaRN - but LM Studio defaults to ~32K\n supportsExtendedContext: true,\n ropeScaling: {\n type: \"yarn\",\n factor: 4.0,\n originalMaxPositionEmbeddings: 32768,\n },\n typicalOutputTokens: 8192,\n },\n \"qwen3-8b\": {\n maxPositionEmbeddings: 40960,\n contextWindow: 131072,\n supportsExtendedContext: true,\n typicalOutputTokens: 4096,\n },\n \"qwen3-14b\": {\n maxPositionEmbeddings: 40960,\n contextWindow: 131072,\n supportsExtendedContext: true,\n typicalOutputTokens: 4096,\n },\n \"qwen3-32b\": {\n maxPositionEmbeddings: 40960,\n contextWindow: 131072,\n supportsExtendedContext: true,\n typicalOutputTokens: 4096,\n },\n \"llama-3.1\": {\n maxPositionEmbeddings: 131072,\n contextWindow: 131072,\n supportsExtendedContext: false,\n typicalOutputTokens: 8192,\n },\n \"llama-3.2\": {\n maxPositionEmbeddings: 131072,\n contextWindow: 131072,\n supportsExtendedContext: false,\n typicalOutputTokens: 8192,\n },\n \"mistral-nemo\": {\n maxPositionEmbeddings: 131072,\n contextWindow: 131072,\n supportsExtendedContext: false,\n typicalOutputTokens: 8192,\n },\n \"gemma-2\": {\n maxPositionEmbeddings: 8192,\n contextWindow: 8192,\n supportsExtendedContext: false,\n typicalOutputTokens: 4096,\n },\n};\n\nexport class ModelRegistry {\n private registryPath: string;\n private data: ModelRegistryData;\n private readonly CACHE_TTL_DAYS = 7;\n\n constructor(memoryDir: string) {\n const registryDir = join(memoryDir, \".registry\");\n if (!fs.existsSync(registryDir)) {\n fs.mkdirSync(registryDir, { recursive: true });\n }\n this.registryPath = join(registryDir, \"model-capabilities.json\");\n this.data = this.loadRegistry();\n }\n\n private loadRegistry(): ModelRegistryData {\n try {\n if (fs.existsSync(this.registryPath)) {\n const content = fs.readFileSync(this.registryPath, \"utf-8\");\n const data = JSON.parse(content) as ModelRegistryData;\n log.info(`ModelRegistry: loaded ${Object.keys(data.models).length} cached models`);\n return data;\n }\n } catch (err) {\n log.warn(`ModelRegistry: failed to load registry: ${err}`);\n }\n return { models: {}, version: 1 };\n }\n\n private saveRegistry(): void {\n try {\n fs.writeFileSync(this.registryPath, JSON.stringify(this.data, null, 2));\n } catch (err) {\n log.warn(`ModelRegistry: failed to save registry: ${err}`);\n }\n }\n\n private isCacheExpired(model: ModelCapabilities): boolean {\n const fetched = new Date(model.fetchedAt);\n const now = new Date();\n const daysDiff = (now.getTime() - fetched.getTime()) / (1000 * 60 * 60 * 24);\n return daysDiff > this.CACHE_TTL_DAYS;\n }\n\n private normalizeModelId(modelId: string): string {\n // Remove common suffixes and prefixes for matching\n return modelId\n .toLowerCase()\n .replace(/@\\d+bit$/, \"\") // Remove @4bit, @8bit\n .replace(/-mlx$/, \"\")\n .replace(/-awq$/, \"\")\n .replace(/-gptq$/, \"\")\n .replace(/-gguf$/, \"\")\n .replace(/^mlx-community\\//, \"\")\n .replace(/^models\\//, \"\")\n .trim();\n }\n\n /**\n * Get capabilities for a model, using cache if available\n */\n getCapabilities(modelId: string): ModelCapabilities {\n const normalizedId = this.normalizeModelId(modelId);\n\n // Check cache first\n if (this.data.models[normalizedId]) {\n const cached = this.data.models[normalizedId];\n if (!this.isCacheExpired(cached)) {\n log.info(`ModelRegistry: using cached capabilities for ${modelId}`);\n return cached;\n }\n log.info(`ModelRegistry: cache expired for ${modelId}, will refresh`);\n }\n\n // Check known models\n for (const [knownId, capabilities] of Object.entries(KNOWN_MODELS)) {\n if (normalizedId.includes(knownId)) {\n log.info(`ModelRegistry: using known capabilities for ${modelId}`);\n const caps: ModelCapabilities = {\n ...DEFAULT_CAPABILITIES,\n ...capabilities,\n modelId: normalizedId,\n source: \"default\",\n fetchedAt: new Date().toISOString(),\n };\n this.data.models[normalizedId] = caps;\n this.saveRegistry();\n return caps;\n }\n }\n\n // Return defaults\n log.info(`ModelRegistry: using default capabilities for ${modelId}`);\n return {\n ...DEFAULT_CAPABILITIES,\n modelId: normalizedId,\n };\n }\n\n /**\n * Store capabilities for a model\n */\n setCapabilities(modelId: string, capabilities: Omit<ModelCapabilities, \"modelId\" | \"fetchedAt\">): void {\n const normalizedId = this.normalizeModelId(modelId);\n const caps: ModelCapabilities = {\n ...capabilities,\n modelId: normalizedId,\n fetchedAt: new Date().toISOString(),\n };\n this.data.models[normalizedId] = caps;\n this.saveRegistry();\n log.info(`ModelRegistry: stored capabilities for ${modelId}`);\n }\n\n /**\n * Calculate optimal input/output sizes for a model\n * @param maxContextOverride - Optional override for max context (e.g., if LLM server defaults to smaller window)\n */\n calculateContextSizes(modelId: string, maxContextOverride?: number): {\n maxInputChars: number;\n maxOutputTokens: number;\n description: string;\n } {\n const caps = this.getCapabilities(modelId);\n\n // Use override if provided (e.g., user knows their LLM server limits), otherwise use detected caps\n const sanitizedOverride =\n typeof maxContextOverride === \"number\" &&\n Number.isFinite(maxContextOverride) &&\n Number.isInteger(maxContextOverride) &&\n maxContextOverride >= 1024\n ? maxContextOverride\n : undefined;\n const effectiveContextWindow = sanitizedOverride ?? Math.max(1024, Math.floor(caps.contextWindow));\n\n // Guardrails: never allow output budget to exceed the model/server context window.\n // If we do, input budget goes negative and we end up generating huge, invalid prompts.\n const overheadTokens = Math.min(1000, Math.floor(effectiveContextWindow / 10)); // <=10% overhead, max 1k\n const minInputTokens = Math.min(512, Math.floor(effectiveContextWindow / 4)); // keep some room even on small contexts\n const minOutputTokens = Math.min(256, Math.max(1, effectiveContextWindow - overheadTokens - minInputTokens));\n\n // Base output budget: typical output, but scaled down for small contexts.\n let outputTokens = caps.typicalOutputTokens;\n\n // For very large contexts, default to ~12.5% output (capped), which tends to be plenty for JSON extraction.\n if (effectiveContextWindow > 65536) {\n outputTokens = Math.min(Math.floor(effectiveContextWindow / 8), 16384);\n }\n\n // Never let output exceed 25% of context.\n outputTokens = Math.min(outputTokens, Math.floor(effectiveContextWindow / 4));\n\n // Clamp output so we always have positive input headroom.\n const maxOutputTokens = Math.max(1, effectiveContextWindow - overheadTokens - minInputTokens);\n outputTokens = Math.min(maxOutputTokens, Math.max(minOutputTokens, outputTokens));\n\n const availableForInput = Math.max(\n 0,\n effectiveContextWindow - outputTokens - overheadTokens,\n );\n\n // Convert to characters (rough estimate: 1 token ≈ 4 chars)\n const maxInputChars = Math.max(0, Math.floor(availableForInput * 3.5)); // Conservative: 3.5 chars/token\n\n const source = sanitizedOverride ? \"user override\" : caps.source;\n return {\n maxInputChars,\n maxOutputTokens: outputTokens,\n description: `${caps.modelId}: ${effectiveContextWindow.toLocaleString()} context (${source}), using ${maxInputChars.toLocaleString()} chars input / ${outputTokens} tokens output`,\n };\n }\n\n /**\n * Fetch capabilities from Hugging Face (if available)\n * Returns true if successful\n */\n async fetchFromHuggingFace(modelId: string): Promise<boolean> {\n // This would be implemented to fetch from HF Hub API\n // For now, we rely on the known models and manual updates\n log.info(`ModelRegistry: fetchFromHuggingFace not yet implemented for ${modelId}`);\n return false;\n }\n\n /**\n * List all cached models\n */\n listCached(): string[] {\n return Object.keys(this.data.models);\n }\n\n /**\n * Clear expired cache entries\n */\n cleanExpired(): number {\n const before = Object.keys(this.data.models).length;\n this.data.models = Object.fromEntries(\n Object.entries(this.data.models).filter(([_, caps]) => !this.isCacheExpired(caps))\n );\n const after = Object.keys(this.data.models).length;\n const removed = before - after;\n if (removed > 0) {\n this.saveRegistry();\n log.info(`ModelRegistry: cleaned ${removed} expired entries`);\n }\n return removed;\n }\n}\n"],"mappings":"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","names":[]}
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  decryptMemoryDirToPlaintext,
21
21
  migrateMemoryDirToEncrypted
22
- } from "./chunk-MXFBBHJU.js";
22
+ } from "./chunk-KJMYHC7K.js";
23
23
  import {
24
24
  generateSalt
25
25
  } from "./chunk-A6XUJE5D.js";
@@ -102,7 +102,13 @@ async function runSecureStoreMigrate(options) {
102
102
  };
103
103
  }
104
104
  const id = options.keyringId ?? secureStoreDir(memoryDir);
105
- const key = getKey(id);
105
+ const key = getKey(id) ?? await unlockForThisProcess({
106
+ memoryDir,
107
+ header,
108
+ keyringId: id,
109
+ readPassphrase: options.readPassphrase,
110
+ now: options.now
111
+ });
106
112
  if (key === null) {
107
113
  return {
108
114
  ok: false,
@@ -112,6 +118,15 @@ async function runSecureStoreMigrate(options) {
112
118
  errors: []
113
119
  };
114
120
  }
121
+ if (key === "wrong-passphrase") {
122
+ return {
123
+ ok: false,
124
+ reason: "wrong-passphrase",
125
+ encrypted: 0,
126
+ skipped: 0,
127
+ errors: []
128
+ };
129
+ }
115
130
  const result = await migrateMemoryDirToEncrypted(memoryDir, key);
116
131
  if (result.errors.length > 0) {
117
132
  return { ok: false, reason: "file-errors", ...result };
@@ -131,7 +146,13 @@ async function runSecureStoreDisable(options) {
131
146
  };
132
147
  }
133
148
  const id = options.keyringId ?? secureStoreDir(memoryDir);
134
- const key = getKey(id);
149
+ const key = getKey(id) ?? await unlockForThisProcess({
150
+ memoryDir,
151
+ header,
152
+ keyringId: id,
153
+ readPassphrase: options.readPassphrase,
154
+ now: options.now
155
+ });
135
156
  if (key === null) {
136
157
  return {
137
158
  ok: false,
@@ -141,6 +162,15 @@ async function runSecureStoreDisable(options) {
141
162
  errors: []
142
163
  };
143
164
  }
165
+ if (key === "wrong-passphrase") {
166
+ return {
167
+ ok: false,
168
+ reason: "wrong-passphrase",
169
+ decrypted: 0,
170
+ skipped: 0,
171
+ errors: []
172
+ };
173
+ }
144
174
  const result = await decryptMemoryDirToPlaintext(memoryDir, key);
145
175
  if (result.errors.length > 0) {
146
176
  return { ok: false, reason: "file-errors", ...result };
@@ -189,6 +219,18 @@ function resolveParams(algorithm, override) {
189
219
  if (algorithm === "scrypt") return { ...DEFAULT_SCRYPT_PARAMS };
190
220
  return { ...DEFAULT_ARGON2ID_PARAMS };
191
221
  }
222
+ async function unlockForThisProcess(options) {
223
+ if (!options.readPassphrase) return null;
224
+ const passphrase = await options.readPassphrase("Enter passphrase: ");
225
+ validatePassphrase(passphrase);
226
+ const candidateKey = deriveKeyFromHeader(options.header, passphrase);
227
+ if (!verifyKey(options.header, candidateKey)) {
228
+ candidateKey.fill(0);
229
+ return "wrong-passphrase";
230
+ }
231
+ unlock(options.keyringId, candidateKey, options.now ?? (() => /* @__PURE__ */ new Date()));
232
+ return candidateKey;
233
+ }
192
234
 
193
235
  // src/secure-store/cli-renderer.ts
194
236
  function renderInitReport(report) {
@@ -201,12 +243,12 @@ function renderInitReport(report) {
201
243
  lines.push("");
202
244
  lines.push("Note: init does NOT auto-unlock the store. Run");
203
245
  lines.push(" remnic engram secure-store unlock");
204
- lines.push("to register the master key with the running daemon.");
246
+ lines.push("to register the master key in the current Remnic process.");
205
247
  return lines.join("\n");
206
248
  }
207
249
  function renderUnlockReport(report) {
208
250
  if (report.ok) {
209
- return `OK \u2014 secure-store unlocked at ${report.unlockedAt} (algorithm=${report.algorithm}).`;
251
+ return `OK \u2014 secure-store unlocked in this process at ${report.unlockedAt} (algorithm=${report.algorithm}).`;
210
252
  }
211
253
  if (report.reason === "not-initialized") {
212
254
  return "ERR \u2014 secure-store is not initialized. Run 'remnic engram secure-store init' first.";
@@ -215,16 +257,19 @@ function renderUnlockReport(report) {
215
257
  }
216
258
  function renderLockReport(report) {
217
259
  if (report.cleared) {
218
- return "OK \u2014 secure-store key cleared from in-memory keyring.";
260
+ return "OK \u2014 secure-store key cleared from this process's in-memory keyring.";
219
261
  }
220
- return "OK \u2014 secure-store was already locked (no in-memory key to clear).";
262
+ return "OK \u2014 secure-store was already locked in this process (no in-memory key to clear).";
221
263
  }
222
264
  function renderMigrateReport(report) {
223
265
  if (!report.ok && report.reason === "not-initialized") {
224
266
  return "ERR \u2014 secure-store is not initialized. Run 'remnic engram secure-store init' first.";
225
267
  }
226
268
  if (!report.ok && report.reason === "locked") {
227
- return "ERR \u2014 secure-store is locked. Run 'remnic engram secure-store unlock' before migrate.";
269
+ return "ERR \u2014 secure-store is locked in this process. Run migrate from an interactive CLI so it can prompt for the passphrase, or unlock inside the daemon process that will perform the migration.";
270
+ }
271
+ if (!report.ok && report.reason === "wrong-passphrase") {
272
+ return "ERR \u2014 wrong passphrase.";
228
273
  }
229
274
  const lines = [];
230
275
  lines.push(report.ok ? "OK \u2014 secure-store migration complete." : "ERR \u2014 secure-store migration completed with file errors.");
@@ -244,7 +289,10 @@ function renderDisableReport(report) {
244
289
  return "ERR \u2014 secure-store is not initialized. Run 'remnic engram secure-store init' first.";
245
290
  }
246
291
  if (!report.ok && report.reason === "locked") {
247
- return "ERR \u2014 secure-store is locked. Run 'remnic engram secure-store unlock' before disable.";
292
+ return "ERR \u2014 secure-store is locked in this process. Run disable from an interactive CLI so it can prompt for the passphrase, or unlock inside the daemon process that will decrypt files.";
293
+ }
294
+ if (!report.ok && report.reason === "wrong-passphrase") {
295
+ return "ERR \u2014 wrong passphrase.";
248
296
  }
249
297
  const lines = [];
250
298
  lines.push(report.ok ? "OK \u2014 secure-store disable complete." : "ERR \u2014 secure-store disable completed with file errors.");
@@ -272,7 +320,7 @@ function renderStatusReport(report) {
272
320
  return lines.join("\n");
273
321
  }
274
322
  lines.push(`createdAt: ${report.createdAt ?? "n/a"}`);
275
- lines.push(`locked: ${report.locked ? "yes" : "no"}`);
323
+ lines.push(`lockedInThisProcess: ${report.locked ? "yes" : "no"}`);
276
324
  if (!report.locked) {
277
325
  lines.push(`lastUnlockAt: ${report.unlockedAt ?? "n/a"}`);
278
326
  }
@@ -451,4 +499,4 @@ export {
451
499
  renderStatusReport,
452
500
  createPassphraseReader
453
501
  };
454
- //# sourceMappingURL=chunk-WNARATI3.js.map
502
+ //# sourceMappingURL=chunk-Y2SXZ5KZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/secure-store/cli-handlers.ts","../src/secure-store/cli-renderer.ts","../src/secure-store/passphrase-reader.ts"],"sourcesContent":["/**\n * Pure handlers behind the `remnic secure-store {init,unlock,lock,\n * status,migrate,disable}` CLI surface (issue #690 PR 2/4 + #779/#780).\n *\n * Each handler:\n * - takes an explicit `memoryDir` (already `~`-expanded by the CLI),\n * - takes an injectable passphrase reader (so tests don't need a\n * real TTY and never touch real readline state),\n * - returns a structured report (no `console.log` inside),\n * - never logs the passphrase or any secret material.\n *\n * The actual `console.log` formatting lives in `cli-renderer.ts` so\n * tests can assert on the report shape without parsing text.\n */\n\nimport { generateSalt as generateEnvelopeSalt } from \"./cipher.js\";\nimport {\n buildHeaderFromPassphrase,\n deriveKeyFromHeader,\n headerPath,\n readHeader,\n secureStoreDir,\n verifyKey,\n writeHeader,\n type SecureStoreHeader,\n} from \"./header.js\";\nimport * as keyring from \"./keyring.js\";\nimport {\n DEFAULT_ARGON2ID_PARAMS,\n DEFAULT_SCRYPT_PARAMS,\n KDF_SALT_LENGTH,\n type Argon2idParams,\n type KdfAlgorithm,\n type ScryptParams,\n} from \"./kdf.js\";\nimport {\n decryptMemoryDirToPlaintext,\n migrateMemoryDirToEncrypted,\n type DecryptResult,\n type MigrateResult,\n} from \"./secure-fs.js\";\n\n/** Passphrase source — async so callers can read from a TTY without echo. */\nexport type PassphraseReader = (\n prompt: string,\n options?: { confirm?: boolean },\n) => Promise<string>;\n\n/** Common options accepted by every handler. */\nexport interface SecureStoreHandlerCommon {\n memoryDir: string;\n /**\n * Stable identifier for the in-memory keyring entry. Defaults to\n * the secure-store directory under `memoryDir`. Tests override\n * this to keep entries from leaking across cases.\n */\n keyringId?: string;\n /** Optional clock injection for deterministic tests. */\n now?: () => Date;\n}\n\n// ─── init ─────────────────────────────────────────────────────────────\n\nexport interface SecureStoreInitOptions extends SecureStoreHandlerCommon {\n /** Passphrase reader — called twice (entry + confirmation). */\n readPassphrase: PassphraseReader;\n /**\n * KDF algorithm. Defaults to `\"argon2id\"` for new stores.\n * `\"scrypt\"` remains supported for explicit compatibility cases.\n */\n algorithm?: KdfAlgorithm;\n /** KDF parameter override; defaults to OWASP-acceptable params for the selected KDF. */\n params?: ScryptParams | Argon2idParams;\n /** Pre-generated salt for tests; production callers should omit. */\n salt?: Buffer;\n /** Optional human-readable note recorded in metadata. Never persist secrets. */\n note?: string;\n}\n\nexport interface SecureStoreInitReport {\n ok: true;\n /** Absolute path of the header file that was written. */\n headerPath: string;\n /** Algorithm + params used for the master key derivation. */\n kdf: SecureStoreHeader[\"metadata\"][\"kdf\"];\n /** ISO-8601 timestamp recorded in the header. */\n createdAt: string;\n}\n\n/**\n * Initialize a new secure-store header. Refuses to overwrite an\n * existing header (use `header.ts:writeHeader` directly with explicit\n * intent if you need to reinitialize a destroyed store).\n */\nexport async function runSecureStoreInit(\n options: SecureStoreInitOptions,\n): Promise<SecureStoreInitReport> {\n const { memoryDir, readPassphrase } = options;\n if (typeof memoryDir !== \"string\" || memoryDir.length === 0) {\n throw new Error(\"secure-store init: memoryDir is required\");\n }\n // Fail fast if a header already exists, before we waste KDF time.\n const existing = await readHeader(memoryDir);\n if (existing !== null) {\n throw new Error(\n `secure-store header already exists at ${headerPath(memoryDir)}. Run 'remnic secure-store status' to inspect, or remove the .secure-store directory explicitly to reinitialize.`,\n );\n }\n const passphrase = await readPassphrase(\"Enter new passphrase: \", { confirm: true });\n validatePassphrase(passphrase);\n\n const algorithm: KdfAlgorithm = options.algorithm ?? \"argon2id\";\n const params = resolveParams(algorithm, options.params);\n const salt = options.salt ?? generateEnvelopeSalt();\n if (salt.length !== KDF_SALT_LENGTH) {\n throw new Error(`salt must be ${KDF_SALT_LENGTH} bytes, got ${salt.length}`);\n }\n\n const built = buildHeaderFromPassphrase({\n passphrase,\n salt,\n algorithm,\n params,\n ...(options.note !== undefined ? { note: options.note } : {}),\n ...(options.now ? { createdAt: options.now().toISOString() } : {}),\n });\n // Zero the derived key — init does NOT auto-unlock; the operator\n // must run `unlock` separately. This mirrors GnuPG-style hygiene\n // and keeps `init` safe to run from automation that should never\n // hold the master key in memory.\n built.derivedKey.fill(0);\n\n const writtenPath = await writeHeader(memoryDir, built.header);\n return {\n ok: true,\n headerPath: writtenPath,\n kdf: built.header.metadata.kdf,\n createdAt: built.header.createdAt,\n };\n}\n\n// ─── unlock ───────────────────────────────────────────────────────────\n\nexport interface SecureStoreUnlockOptions extends SecureStoreHandlerCommon {\n readPassphrase: PassphraseReader;\n}\n\nexport type SecureStoreUnlockReport =\n | { ok: true; unlockedAt: string; algorithm: KdfAlgorithm }\n | { ok: false; reason: \"not-initialized\" | \"wrong-passphrase\" };\n\nexport async function runSecureStoreUnlock(\n options: SecureStoreUnlockOptions,\n): Promise<SecureStoreUnlockReport> {\n const { memoryDir, readPassphrase } = options;\n const header = await readHeader(memoryDir);\n if (!header) {\n return { ok: false, reason: \"not-initialized\" };\n }\n const passphrase = await readPassphrase(\"Enter passphrase: \");\n validatePassphrase(passphrase);\n const candidateKey = deriveKeyFromHeader(header, passphrase);\n if (!verifyKey(header, candidateKey)) {\n candidateKey.fill(0);\n return { ok: false, reason: \"wrong-passphrase\" };\n }\n const id = options.keyringId ?? secureStoreDir(memoryDir);\n const now = options.now ?? (() => new Date());\n keyring.unlock(id, candidateKey, now);\n const status = keyring.status(id);\n return {\n ok: true,\n unlockedAt: status.unlockedAt ?? now().toISOString(),\n algorithm: header.metadata.kdf.algorithm,\n };\n}\n\n// ─── lock ─────────────────────────────────────────────────────────────\n\nexport interface SecureStoreLockOptions extends SecureStoreHandlerCommon {}\n\nexport interface SecureStoreLockReport {\n ok: true;\n /** True if a key was registered and is now cleared; false if it was already locked. */\n cleared: boolean;\n}\n\nexport function runSecureStoreLock(options: SecureStoreLockOptions): SecureStoreLockReport {\n const id = options.keyringId ?? secureStoreDir(options.memoryDir);\n const cleared = keyring.lock(id);\n return { ok: true, cleared };\n}\n\n// ─── migrate ─────────────────────────────────────────────────────────\n\nexport interface SecureStoreMigrateOptions extends SecureStoreHandlerCommon {\n /**\n * Optional passphrase reader for standalone CLI migration. A prior\n * `secure-store unlock` command only unlocks that process-local keyring, so\n * standalone migrate can prompt and install the key in this process instead\n * of pretending another process still has it.\n */\n readPassphrase?: PassphraseReader;\n}\n\nexport type SecureStoreMigrateReport =\n | ({ ok: true } & MigrateResult)\n | ({\n ok: false;\n reason: \"not-initialized\" | \"locked\" | \"wrong-passphrase\" | \"file-errors\";\n } & MigrateResult);\n\nexport async function runSecureStoreMigrate(\n options: SecureStoreMigrateOptions,\n): Promise<SecureStoreMigrateReport> {\n const { memoryDir } = options;\n const header = await readHeader(memoryDir);\n if (!header) {\n return {\n ok: false,\n reason: \"not-initialized\",\n encrypted: 0,\n skipped: 0,\n errors: [],\n };\n }\n\n const id = options.keyringId ?? secureStoreDir(memoryDir);\n const key = keyring.getKey(id) ?? await unlockForThisProcess({\n memoryDir,\n header,\n keyringId: id,\n readPassphrase: options.readPassphrase,\n now: options.now,\n });\n if (key === null) {\n return {\n ok: false,\n reason: \"locked\",\n encrypted: 0,\n skipped: 0,\n errors: [],\n };\n }\n if (key === \"wrong-passphrase\") {\n return {\n ok: false,\n reason: \"wrong-passphrase\",\n encrypted: 0,\n skipped: 0,\n errors: [],\n };\n }\n\n const result = await migrateMemoryDirToEncrypted(memoryDir, key);\n if (result.errors.length > 0) {\n return { ok: false, reason: \"file-errors\", ...result };\n }\n return { ok: true, ...result };\n}\n\n// ─── disable/decrypt ─────────────────────────────────────────────────\n\nexport interface SecureStoreDisableOptions extends SecureStoreHandlerCommon {\n /**\n * Optional passphrase reader for standalone CLI decrypt/disable. See\n * SecureStoreMigrateOptions.readPassphrase for the process-local keyring\n * contract.\n */\n readPassphrase?: PassphraseReader;\n}\n\nexport type SecureStoreDisableReport =\n | ({ ok: true } & DecryptResult)\n | ({\n ok: false;\n reason: \"not-initialized\" | \"locked\" | \"wrong-passphrase\" | \"file-errors\";\n } & DecryptResult);\n\nexport async function runSecureStoreDisable(\n options: SecureStoreDisableOptions,\n): Promise<SecureStoreDisableReport> {\n const { memoryDir } = options;\n const header = await readHeader(memoryDir);\n if (!header) {\n return {\n ok: false,\n reason: \"not-initialized\",\n decrypted: 0,\n skipped: 0,\n errors: [],\n };\n }\n\n const id = options.keyringId ?? secureStoreDir(memoryDir);\n const key = keyring.getKey(id) ?? await unlockForThisProcess({\n memoryDir,\n header,\n keyringId: id,\n readPassphrase: options.readPassphrase,\n now: options.now,\n });\n if (key === null) {\n return {\n ok: false,\n reason: \"locked\",\n decrypted: 0,\n skipped: 0,\n errors: [],\n };\n }\n if (key === \"wrong-passphrase\") {\n return {\n ok: false,\n reason: \"wrong-passphrase\",\n decrypted: 0,\n skipped: 0,\n errors: [],\n };\n }\n\n const result = await decryptMemoryDirToPlaintext(memoryDir, key);\n if (result.errors.length > 0) {\n return { ok: false, reason: \"file-errors\", ...result };\n }\n return { ok: true, ...result };\n}\n\n// ─── status ───────────────────────────────────────────────────────────\n\nexport interface SecureStoreStatusOptions extends SecureStoreHandlerCommon {}\n\nexport interface SecureStoreStatusReport {\n /** True iff a header file exists in `<memoryDir>/.secure-store/`. */\n initialized: boolean;\n /** Path the status check probed. Useful for operators. */\n headerPath: string;\n /** Locked/unlocked state of the in-memory keyring entry. */\n locked: boolean;\n /** ISO-8601 timestamp of the most recent unlock, or null when locked. */\n unlockedAt: string | null;\n /** Header metadata (algorithm + params + salt hex), or null when uninitialized. */\n kdf: SecureStoreHeader[\"metadata\"][\"kdf\"] | null;\n /** Header `createdAt`, or null when uninitialized. */\n createdAt: string | null;\n}\n\nexport async function runSecureStoreStatus(\n options: SecureStoreStatusOptions,\n): Promise<SecureStoreStatusReport> {\n const { memoryDir } = options;\n const id = options.keyringId ?? secureStoreDir(memoryDir);\n const header = await readHeader(memoryDir);\n const ks = keyring.status(id);\n const target = headerPath(memoryDir);\n if (!header) {\n return {\n initialized: false,\n headerPath: target,\n locked: !ks.unlocked,\n unlockedAt: ks.unlockedAt,\n kdf: null,\n createdAt: null,\n };\n }\n return {\n initialized: true,\n headerPath: target,\n locked: !ks.unlocked,\n unlockedAt: ks.unlockedAt,\n kdf: header.metadata.kdf,\n createdAt: header.createdAt,\n };\n}\n\n// ─── helpers ──────────────────────────────────────────────────────────\n\n/** Minimum passphrase length. 8 chars is intentionally permissive — operators may use phrase managers. */\nexport const MIN_PASSPHRASE_LENGTH = 8;\n\nfunction validatePassphrase(passphrase: string): void {\n if (typeof passphrase !== \"string\") {\n throw new Error(\"passphrase must be a string\");\n }\n if (passphrase.length === 0) {\n throw new Error(\"passphrase must not be empty\");\n }\n if (passphrase.length < MIN_PASSPHRASE_LENGTH) {\n throw new Error(`passphrase must be at least ${MIN_PASSPHRASE_LENGTH} characters`);\n }\n}\n\nfunction resolveParams(\n algorithm: KdfAlgorithm,\n override: ScryptParams | Argon2idParams | undefined,\n): ScryptParams | Argon2idParams {\n if (override !== undefined) return override;\n if (algorithm === \"scrypt\") return { ...DEFAULT_SCRYPT_PARAMS };\n return { ...DEFAULT_ARGON2ID_PARAMS };\n}\n\nasync function unlockForThisProcess(options: {\n memoryDir: string;\n header: SecureStoreHeader;\n keyringId: string;\n readPassphrase?: PassphraseReader;\n now?: () => Date;\n}): Promise<Buffer | null | \"wrong-passphrase\"> {\n if (!options.readPassphrase) return null;\n const passphrase = await options.readPassphrase(\"Enter passphrase: \");\n validatePassphrase(passphrase);\n const candidateKey = deriveKeyFromHeader(options.header, passphrase);\n if (!verifyKey(options.header, candidateKey)) {\n candidateKey.fill(0);\n return \"wrong-passphrase\";\n }\n keyring.unlock(options.keyringId, candidateKey, options.now ?? (() => new Date()));\n return candidateKey;\n}\n","/**\n * Console-text renderers for the `remnic engram secure-store {init,unlock,\n * lock,status,migrate,disable}` CLI surface (issue #690 PR 2/4 + #779/#780).\n *\n * Pure: each `render*` function takes a typed report and returns a\n * string. CLI handlers do the `console.log`. Tests assert on the\n * returned text directly so behavior stays decoupled from stdout.\n */\n\nimport type {\n SecureStoreInitReport,\n SecureStoreLockReport,\n SecureStoreDisableReport,\n SecureStoreMigrateReport,\n SecureStoreStatusReport,\n SecureStoreUnlockReport,\n} from \"./cli-handlers.js\";\nimport type { SecureStoreHeader } from \"./header.js\";\n\nexport function renderInitReport(report: SecureStoreInitReport): string {\n const lines: string[] = [];\n lines.push(\"=== Remnic secure-store initialized ===\");\n lines.push(\"\");\n lines.push(`header: ${report.headerPath}`);\n lines.push(`createdAt: ${report.createdAt}`);\n lines.push(...renderKdfLines(report.kdf));\n lines.push(\"\");\n lines.push(\"Note: init does NOT auto-unlock the store. Run\");\n lines.push(\" remnic engram secure-store unlock\");\n lines.push(\"to register the master key in the current Remnic process.\");\n return lines.join(\"\\n\");\n}\n\nexport function renderUnlockReport(report: SecureStoreUnlockReport): string {\n if (report.ok) {\n return `OK — secure-store unlocked in this process at ${report.unlockedAt} (algorithm=${report.algorithm}).`;\n }\n if (report.reason === \"not-initialized\") {\n return \"ERR — secure-store is not initialized. Run 'remnic engram secure-store init' first.\";\n }\n return \"ERR — wrong passphrase.\";\n}\n\nexport function renderLockReport(report: SecureStoreLockReport): string {\n if (report.cleared) {\n return \"OK — secure-store key cleared from this process's in-memory keyring.\";\n }\n return \"OK — secure-store was already locked in this process (no in-memory key to clear).\";\n}\n\nexport function renderMigrateReport(report: SecureStoreMigrateReport): string {\n if (!report.ok && report.reason === \"not-initialized\") {\n return \"ERR — secure-store is not initialized. Run 'remnic engram secure-store init' first.\";\n }\n if (!report.ok && report.reason === \"locked\") {\n return \"ERR — secure-store is locked in this process. Run migrate from an interactive CLI so it can prompt for the passphrase, or unlock inside the daemon process that will perform the migration.\";\n }\n if (!report.ok && report.reason === \"wrong-passphrase\") {\n return \"ERR — wrong passphrase.\";\n }\n\n const lines: string[] = [];\n lines.push(report.ok ? \"OK — secure-store migration complete.\" : \"ERR — secure-store migration completed with file errors.\");\n lines.push(`encrypted: ${report.encrypted}`);\n lines.push(`skipped: ${report.skipped}`);\n lines.push(`errors: ${report.errors.length}`);\n for (const entry of report.errors.slice(0, 10)) {\n lines.push(`- ${entry.filePath}: ${entry.error}`);\n }\n if (report.errors.length > 10) {\n lines.push(`- ... ${report.errors.length - 10} more error(s)`);\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderDisableReport(report: SecureStoreDisableReport): string {\n if (!report.ok && report.reason === \"not-initialized\") {\n return \"ERR — secure-store is not initialized. Run 'remnic engram secure-store init' first.\";\n }\n if (!report.ok && report.reason === \"locked\") {\n return \"ERR — secure-store is locked in this process. Run disable from an interactive CLI so it can prompt for the passphrase, or unlock inside the daemon process that will decrypt files.\";\n }\n if (!report.ok && report.reason === \"wrong-passphrase\") {\n return \"ERR — wrong passphrase.\";\n }\n\n const lines: string[] = [];\n lines.push(report.ok ? \"OK — secure-store disable complete.\" : \"ERR — secure-store disable completed with file errors.\");\n lines.push(`decrypted: ${report.decrypted}`);\n lines.push(`skipped: ${report.skipped}`);\n lines.push(`errors: ${report.errors.length}`);\n for (const entry of report.errors.slice(0, 10)) {\n lines.push(`- ${entry.filePath}: ${entry.error}`);\n }\n if (report.errors.length > 10) {\n lines.push(`- ... ${report.errors.length - 10} more error(s)`);\n }\n lines.push(\"header: kept\");\n return lines.join(\"\\n\");\n}\n\nexport function renderStatusReport(report: SecureStoreStatusReport): string {\n const lines: string[] = [];\n lines.push(\"=== Remnic secure-store status ===\");\n lines.push(\"\");\n lines.push(`header: ${report.headerPath}`);\n lines.push(`initialized: ${report.initialized ? \"yes\" : \"no\"}`);\n if (!report.initialized) {\n lines.push(\"\");\n lines.push(\"Run 'remnic engram secure-store init' to initialize a new store.\");\n return lines.join(\"\\n\");\n }\n lines.push(`createdAt: ${report.createdAt ?? \"n/a\"}`);\n lines.push(`lockedInThisProcess: ${report.locked ? \"yes\" : \"no\"}`);\n if (!report.locked) {\n lines.push(`lastUnlockAt: ${report.unlockedAt ?? \"n/a\"}`);\n }\n if (report.kdf) {\n lines.push(...renderKdfLines(report.kdf));\n }\n return lines.join(\"\\n\");\n}\n\nfunction renderKdfLines(kdf: SecureStoreHeader[\"metadata\"][\"kdf\"]): string[] {\n const lines: string[] = [];\n lines.push(`kdf.algorithm: ${kdf.algorithm}`);\n if (kdf.algorithm === \"scrypt\") {\n const { N, r, p, keyLength, maxmem } = kdf.params;\n lines.push(`kdf.params: N=${N} r=${r} p=${p} keyLength=${keyLength} maxmem=${maxmem}`);\n } else {\n const { memoryKiB, iterations, parallelism, keyLength } = kdf.params;\n lines.push(\n `kdf.params: memoryKiB=${memoryKiB} iterations=${iterations} parallelism=${parallelism} keyLength=${keyLength}`,\n );\n }\n return lines;\n}\n","/**\n * TTY passphrase reader (issue #690 PR 2/4).\n *\n * Reads a line from stdin without echoing it back to the terminal.\n * Disables echo by setting raw mode + manually buffering input until\n * Enter / EOT.\n *\n * Why not `readline.question`?\n * ----------------------------\n * `readline` echoes by default and has no clean \"no-echo\" toggle that\n * survives across Node versions. The raw-mode loop is the canonical\n * idiom for reading passwords on Node and matches what `npm` uses\n * internally.\n *\n * Security\n * --------\n * - Never log the passphrase (no `console.log`, no debug output).\n * - Never include it in a thrown error message.\n * - On Ctrl+C / Ctrl+D, abort with a clear error rather than\n * silently treating EOF as an empty submission.\n * - On non-TTY stdin (pipe, redirect), read a line via line-buffered\n * readline so automation (`echo \"passphrase\" | remnic ...`) works.\n * Operators are responsible for not piping plaintext passphrases\n * in shell history; we surface a stderr warning.\n */\n\nimport { createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { StringDecoder } from \"node:string_decoder\";\n\nimport type { PassphraseReader } from \"./cli-handlers.js\";\n\nexport interface CreatePassphraseReaderOptions {\n input?: Readable;\n output?: Writable;\n /** Override stderr for warning surface; defaults to `process.stderr`. */\n errorStream?: Writable;\n}\n\n/**\n * Build a `PassphraseReader` bound to the given streams. Exported so\n * tests can construct one against in-memory streams without touching\n * the real TTY.\n */\nexport function createPassphraseReader(\n options: CreatePassphraseReaderOptions = {},\n): PassphraseReader {\n const input = options.input ?? process.stdin;\n const output = options.output ?? process.stdout;\n const errorStream = options.errorStream ?? process.stderr;\n // Codex/Cursor on PR #737: a fresh readline interface per call\n // breaks confirm-mode on piped non-TTY input — the first\n // `createInterface` consumes the entire prebuffered stream\n // (including the second line), so the second `createInterface`\n // sees an already-ended stream and resolves to \"\". Fix: maintain\n // ONE non-TTY line reader across both reads of a confirm-mode\n // session and pull lines on demand from a buffered queue.\n let nonTtyReader: NonTtyLineReader | null = null;\n let nonTtyWarned = false;\n return async function readPassphrase(\n prompt: string,\n readerOptions?: { confirm?: boolean },\n ): Promise<string> {\n const first = await readSinglePassphrase(prompt);\n if (readerOptions?.confirm) {\n const second = await readSinglePassphrase(\"Confirm passphrase: \");\n if (first !== second) {\n throw new Error(\"passphrases did not match\");\n }\n }\n return first;\n };\n\n async function readSinglePassphrase(prompt: string): Promise<string> {\n const inputAsAny = input as Readable & {\n isTTY?: boolean;\n setRawMode?: (raw: boolean) => Readable;\n };\n if (inputAsAny.isTTY && typeof inputAsAny.setRawMode === \"function\") {\n return readNoEcho(prompt, inputAsAny, output);\n }\n // Non-TTY: line-buffered fallback. Warn once per reader so\n // operators piping plaintext passphrases in shell pipelines are\n // aware their history may contain the secret.\n if (!nonTtyWarned) {\n errorStream.write(\n \"[remnic secure-store] warning: stdin is not a TTY; reading passphrase as a plain line. \" +\n \"Take care that the passphrase is not exposed in shell history.\\n\",\n );\n nonTtyWarned = true;\n }\n // Codex P1 on PR #737: write the prompt to stderr, not stdout.\n // When the surrounding command outputs JSON to stdout (e.g.\n // `remnic secure-store status --json`), injecting prompt text on\n // stdout corrupts the JSON output and breaks machine consumers.\n // The prompt is UI noise — it belongs on the error/diagnostics\n // stream regardless of whether we're in a TTY.\n errorStream.write(prompt);\n if (!nonTtyReader) nonTtyReader = createNonTtyLineReader(input);\n return nonTtyReader.next();\n }\n}\n\nfunction readNoEcho(\n prompt: string,\n input: Readable & { setRawMode?: (raw: boolean) => Readable },\n output: Writable,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n output.write(prompt);\n let buffer = \"\";\n let settled = false;\n const wasRaw = (input as Readable & { isRaw?: boolean }).isRaw === true;\n // Codex P2 on PR #737: per-chunk `chunk.toString(\"utf8\")` corrupts\n // multibyte characters that straddle a chunk boundary (Node inserts\n // U+FFFD replacement characters for incomplete sequences). Use a\n // StringDecoder, which buffers partial sequences across chunks so\n // non-ASCII passphrases survive intact.\n const decoder = new StringDecoder(\"utf8\");\n if (input.setRawMode) input.setRawMode(true);\n input.resume();\n const cleanup = (): void => {\n input.pause();\n input.removeListener(\"data\", onData);\n // Flush any remaining bytes the decoder is holding so trailing\n // partial sequences are surfaced rather than silently swallowed.\n decoder.end();\n // Restore the prior raw-mode state so we don't strand the parent shell\n // in an unexpected configuration.\n if (input.setRawMode) input.setRawMode(wasRaw);\n output.write(\"\\n\");\n };\n const onData = (chunk: Buffer): void => {\n const str = decoder.write(chunk);\n for (const ch of str) {\n if (settled) return;\n const code = ch.charCodeAt(0);\n // Enter / newline: submit.\n if (ch === \"\\n\" || ch === \"\\r\") {\n settled = true;\n cleanup();\n resolve(buffer);\n return;\n }\n // Ctrl+C: abort.\n if (code === 0x03) {\n settled = true;\n cleanup();\n reject(new Error(\"passphrase entry aborted (Ctrl+C)\"));\n return;\n }\n // Ctrl+D / EOT: treat as abort if buffer is empty, else submit.\n if (code === 0x04) {\n settled = true;\n cleanup();\n if (buffer.length === 0) {\n reject(new Error(\"passphrase entry aborted (EOF)\"));\n } else {\n resolve(buffer);\n }\n return;\n }\n // Backspace / DEL.\n // Cursor on PR #737: `buffer.slice(0, -1)` deletes one UTF-16\n // code unit, which splits a surrogate pair when the last\n // character is a non-BMP code point (emoji, etc.). Fix: count\n // code points with `Array.from` and remove the last one. This\n // correctly handles both BMP (single code unit) and non-BMP\n // (surrogate pair) characters atomically.\n if (code === 0x08 || code === 0x7f) {\n if (buffer.length > 0) {\n const codePoints = Array.from(buffer);\n buffer = codePoints.slice(0, -1).join(\"\");\n }\n continue;\n }\n // Ignore other control bytes (escape sequences, etc.).\n if (code < 0x20) {\n continue;\n }\n buffer += ch;\n }\n };\n input.on(\"data\", onData);\n });\n}\n\n/**\n * One-shot line reader bound to a non-TTY input stream.\n *\n * Cursor medium on PR #737: a previous version constructed a fresh\n * `readline.createInterface` per `next()` call. On piped non-TTY\n * input, the first interface consumed the entire prebuffered stream\n * (including any subsequent lines) into its internal buffer. The\n * second interface saw an already-`end()`'d input and resolved to \"\".\n * Fix: construct ONE readline interface, queue every emitted `line`,\n * and let `next()` either return a queued line or wait for the next\n * one. Pending waiters at `close` time are resolved with \"\" (so an\n * abandoned-stream caller still sees a clean empty response).\n */\ninterface NonTtyLineReader {\n next(): Promise<string>;\n}\n\nfunction createNonTtyLineReader(input: Readable): NonTtyLineReader {\n const rl = createInterface({ input, terminal: false });\n const lineQueue: string[] = [];\n const waiterQueue: Array<(value: string) => void> = [];\n const errorQueue: Array<(err: Error) => void> = [];\n let closed = false;\n let error: Error | null = null;\n\n rl.on(\"line\", (line: string) => {\n const waiter = waiterQueue.shift();\n if (waiter) {\n waiter(line);\n } else {\n lineQueue.push(line);\n }\n });\n rl.on(\"close\", () => {\n closed = true;\n while (waiterQueue.length > 0) {\n const w = waiterQueue.shift()!;\n // Drop the matching error slot since we're settling cleanly.\n errorQueue.shift();\n w(\"\");\n }\n });\n rl.on(\"error\", (err: Error) => {\n error = err;\n while (errorQueue.length > 0) {\n const r = errorQueue.shift()!;\n // Drop the matching value slot.\n waiterQueue.shift();\n r(err);\n }\n });\n\n return {\n next(): Promise<string> {\n if (error) return Promise.reject(error);\n const queued = lineQueue.shift();\n if (queued !== undefined) return Promise.resolve(queued);\n if (closed) return Promise.resolve(\"\");\n return new Promise<string>((resolve, reject) => {\n waiterQueue.push(resolve);\n errorQueue.push(reject);\n });\n },\n };\n}\n"],"mappings":"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","names":["status"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  StorageManager,
3
3
  normalizeEntityName
4
- } from "./chunk-VBJ7V5SK.js";
4
+ } from "./chunk-UIPDNLXA.js";
5
5
  import {
6
6
  readEnvVar,
7
7
  resolveHomeDir
8
- } from "./chunk-XIG5PDM7.js";
8
+ } from "./chunk-JUC24CTX.js";
9
9
  import {
10
10
  log
11
11
  } from "./chunk-2ODBA7MQ.js";
@@ -824,4 +824,4 @@ export {
824
824
  resolveBriefingSaveDir,
825
825
  briefingFilename
826
826
  };
827
- //# sourceMappingURL=chunk-SIC6U3GZ.js.map
827
+ //# sourceMappingURL=chunk-YHV3KRKS.js.map