@remnic/core 1.1.31 → 9.3.516
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstraction-nodes.js +2 -2
- package/dist/access-cli.d.ts +1 -1
- package/dist/access-cli.js +158 -121
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +9 -5
- package/dist/access-http.js +51 -51
- package/dist/access-idempotency.d.ts +2 -0
- package/dist/access-idempotency.js +1 -1
- package/dist/access-mcp.d.ts +16 -9
- package/dist/access-mcp.js +44 -44
- package/dist/access-schema.d.ts +45 -13
- package/dist/access-schema.js +8 -8
- package/dist/{access-service-CkZyb35d.d.ts → access-service-CZfksQuS.d.ts} +11 -130
- package/dist/access-service.d.ts +7 -4
- package/dist/access-service.js +40 -40
- package/dist/action-confidence.d.ts +1 -0
- package/dist/active-memory-bridge.d.ts +1 -0
- package/dist/active-memory-bridge.js +3 -2
- package/dist/active-recall.d.ts +1 -0
- package/dist/active-recall.js +14 -9
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +6 -2
- package/dist/adapters/claude-code.js +2 -2
- package/dist/adapters/codex.d.ts +5 -1
- package/dist/adapters/codex.js +2 -2
- package/dist/adapters/hermes.js +2 -2
- package/dist/adapters/index.js +6 -6
- package/dist/adapters/registry.js +6 -6
- package/dist/adapters/replit.d.ts +4 -2
- package/dist/adapters/replit.js +2 -2
- package/dist/adapters/types.d.ts +4 -0
- package/dist/adapters/types.js +1 -1
- package/dist/behavior-learner.d.ts +1 -0
- package/dist/behavior-signals.d.ts +1 -0
- package/dist/behavior-signals.js +1 -1
- package/dist/bootstrap.d.ts +5 -3
- package/dist/bootstrap.js +2 -2
- package/dist/boxes.d.ts +1 -0
- package/dist/boxes.js +1 -1
- package/dist/briefing.d.ts +1 -0
- package/dist/briefing.js +9 -9
- package/dist/buffer-surprise-report.d.ts +1 -0
- package/dist/buffer.d.ts +1 -0
- package/dist/buffer.js +2 -2
- package/dist/bulk-import/index.d.ts +28 -0
- package/dist/bulk-import/index.js +31 -0
- package/dist/calibration.d.ts +2 -0
- package/dist/calibration.js +50 -17
- package/dist/calibration.js.map +1 -1
- package/dist/{capsule-crypto-5CYAGVC5.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{capsule-merge-4MGKE7C5.js → capsule-merge-T2JRE46P.js} +3 -3
- package/dist/causal-behavior.d.ts +1 -0
- package/dist/causal-behavior.js +4 -4
- package/dist/causal-chain.js +4 -4
- package/dist/causal-consolidation.d.ts +16 -1
- package/dist/causal-consolidation.js +115 -32
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +14 -6
- package/dist/causal-retrieval.js.map +1 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +2 -2
- package/dist/{chunk-SAZS2QZB.js → chunk-23UORJ4S.js} +3 -3
- package/dist/{chunk-76FLAAUC.js → chunk-2AN2L4NL.js} +17 -6
- package/dist/chunk-2AN2L4NL.js.map +1 -0
- package/dist/{chunk-W4L6CZKA.js → chunk-2DL3OFLD.js} +15 -10
- package/dist/chunk-2DL3OFLD.js.map +1 -0
- package/dist/{chunk-NJ3MJQZX.js → chunk-2I5JGH3M.js} +2 -2
- package/dist/{chunk-NJ3MJQZX.js.map → chunk-2I5JGH3M.js.map} +1 -1
- package/dist/{chunk-7OZ53EXP.js → chunk-2NLLXCJG.js} +21 -10
- package/dist/chunk-2NLLXCJG.js.map +1 -0
- package/dist/{chunk-PK7H5L6Y.js → chunk-2NM43EWN.js} +2 -2
- package/dist/{chunk-PYXS46O7.js → chunk-3BP57I6J.js} +2 -2
- package/dist/{chunk-FBYESMQ2.js → chunk-3C5RPJAX.js} +2 -2
- package/dist/{chunk-FKFMOY3N.js → chunk-42NQ7AVG.js} +3 -4
- package/dist/{chunk-FKFMOY3N.js.map → chunk-42NQ7AVG.js.map} +1 -1
- package/dist/chunk-4426WSWL.js +73 -0
- package/dist/chunk-4426WSWL.js.map +1 -0
- package/dist/{chunk-LIRZNNUP.js → chunk-44442YCH.js} +5 -2
- package/dist/chunk-44442YCH.js.map +1 -0
- package/dist/{chunk-H3ME6L6D.js → chunk-46GJIW5M.js} +23 -20
- package/dist/chunk-46GJIW5M.js.map +1 -0
- package/dist/{chunk-QDZ2RLEC.js → chunk-472U7RDF.js} +3 -3
- package/dist/chunk-472U7RDF.js.map +1 -0
- package/dist/{chunk-NN2DKE4T.js → chunk-4H5ZJHEN.js} +16 -3
- package/dist/{chunk-NN2DKE4T.js.map → chunk-4H5ZJHEN.js.map} +1 -1
- package/dist/{chunk-56K5QLHX.js → chunk-4HP7HIE3.js} +56 -13
- package/dist/chunk-4HP7HIE3.js.map +1 -0
- package/dist/{chunk-RK2Y4XOM.js → chunk-4JRRISLU.js} +9 -6
- package/dist/chunk-4JRRISLU.js.map +1 -0
- package/dist/{chunk-XKLD5OK4.js → chunk-4RR6ROTB.js} +10 -11
- package/dist/chunk-4RR6ROTB.js.map +1 -0
- package/dist/{chunk-YROHKYBY.js → chunk-5UHVGNZD.js} +22 -6
- package/dist/chunk-5UHVGNZD.js.map +1 -0
- package/dist/{chunk-ZAVUCJ4H.js → chunk-5V456VRV.js} +154 -69
- package/dist/chunk-5V456VRV.js.map +1 -0
- package/dist/{chunk-77H5NU3M.js → chunk-6BR7L222.js} +82 -18
- package/dist/chunk-6BR7L222.js.map +1 -0
- package/dist/{chunk-4KGVTPGD.js → chunk-6F6BXB7A.js} +9 -8
- package/dist/chunk-6F6BXB7A.js.map +1 -0
- package/dist/{chunk-NMZY542O.js → chunk-6URPAY2D.js} +41 -17
- package/dist/chunk-6URPAY2D.js.map +1 -0
- package/dist/{chunk-N53K2EXC.js → chunk-6VF75M3X.js} +2 -2
- package/dist/{chunk-XSZEP4SF.js → chunk-6XSPNR6L.js} +6 -5
- package/dist/chunk-6XSPNR6L.js.map +1 -0
- package/dist/{chunk-6H2TESSP.js → chunk-765K3SAT.js} +3 -3
- package/dist/{chunk-EDTHC6UD.js → chunk-77NAFXUD.js} +2 -2
- package/dist/{chunk-S7KDBTWT.js → chunk-7F7Z6MOS.js} +29 -14
- package/dist/chunk-7F7Z6MOS.js.map +1 -0
- package/dist/{chunk-MZH6EHNR.js → chunk-7H6CFEBJ.js} +41 -14
- package/dist/chunk-7H6CFEBJ.js.map +1 -0
- package/dist/{chunk-MGKYQQYF.js → chunk-7Q3RCKAQ.js} +2 -2
- package/dist/chunk-7RXCMVFQ.js +27 -0
- package/dist/chunk-7RXCMVFQ.js.map +1 -0
- package/dist/{chunk-DGXUHMOV.js → chunk-A2IYSXDQ.js} +25 -6
- package/dist/chunk-A2IYSXDQ.js.map +1 -0
- package/dist/{chunk-EABGC2TL.js → chunk-A2Z6UCWT.js} +26 -4
- package/dist/chunk-A2Z6UCWT.js.map +1 -0
- package/dist/{chunk-5375UYTQ.js → chunk-A6D7A2FW.js} +4 -4
- package/dist/chunk-A6D7A2FW.js.map +1 -0
- package/dist/{chunk-FAAFWE4G.js → chunk-ALEPI75L.js} +24 -6
- package/dist/chunk-ALEPI75L.js.map +1 -0
- package/dist/{chunk-3SLRNYNG.js → chunk-AUDJPF4N.js} +15 -4
- package/dist/chunk-AUDJPF4N.js.map +1 -0
- package/dist/chunk-B5XMS73R.js +145 -0
- package/dist/chunk-B5XMS73R.js.map +1 -0
- package/dist/{chunk-HXXBL2KD.js → chunk-BECQDWBA.js} +44 -4
- package/dist/chunk-BECQDWBA.js.map +1 -0
- package/dist/{chunk-7SEAZFFB.js → chunk-BEUDU7Y4.js} +24 -4
- package/dist/chunk-BEUDU7Y4.js.map +1 -0
- package/dist/chunk-CHBI22MI.js +159 -0
- package/dist/chunk-CHBI22MI.js.map +1 -0
- package/dist/{chunk-GDFS42HT.js → chunk-CHCA44C3.js} +15 -8
- package/dist/chunk-CHCA44C3.js.map +1 -0
- package/dist/chunk-CINZGPSJ.js +22 -0
- package/dist/chunk-CINZGPSJ.js.map +1 -0
- package/dist/chunk-CMTINOFS.js +36 -0
- package/dist/chunk-CMTINOFS.js.map +1 -0
- package/dist/{chunk-34DQE4KF.js → chunk-CO7ZO4TU.js} +2 -2
- package/dist/{chunk-PFV5C235.js → chunk-CPPS65WS.js} +2 -1
- package/dist/{chunk-PFV5C235.js.map → chunk-CPPS65WS.js.map} +1 -1
- package/dist/{chunk-DINWEURR.js → chunk-CSKLPDN6.js} +20 -6
- package/dist/chunk-CSKLPDN6.js.map +1 -0
- package/dist/chunk-CWWMTTQE.js +566 -0
- package/dist/chunk-CWWMTTQE.js.map +1 -0
- package/dist/{chunk-IQT3XTKW.js → chunk-D24OXEPB.js} +13 -7
- package/dist/chunk-D24OXEPB.js.map +1 -0
- package/dist/{chunk-WIICJPET.js → chunk-DEUNUKTD.js} +6 -4
- package/dist/{chunk-WIICJPET.js.map → chunk-DEUNUKTD.js.map} +1 -1
- package/dist/{chunk-ZYVPLJ4T.js → chunk-DHGSZ3UD.js} +9 -7
- package/dist/chunk-DHGSZ3UD.js.map +1 -0
- package/dist/{chunk-JR4ZC3G4.js → chunk-DLJ4IR6M.js} +91 -41
- package/dist/chunk-DLJ4IR6M.js.map +1 -0
- package/dist/{chunk-U4SCL7B7.js → chunk-DRD2Q7HQ.js} +82 -18
- package/dist/chunk-DRD2Q7HQ.js.map +1 -0
- package/dist/{chunk-2IWUMAES.js → chunk-E62SBGQ3.js} +28 -13
- package/dist/chunk-E62SBGQ3.js.map +1 -0
- package/dist/{chunk-C5BCH4ZS.js → chunk-EAZGEEG2.js} +21 -3
- package/dist/chunk-EAZGEEG2.js.map +1 -0
- package/dist/{chunk-TPB3I2AC.js → chunk-ECZU5BJH.js} +31 -10
- package/dist/chunk-ECZU5BJH.js.map +1 -0
- package/dist/chunk-EDQVAMQI.js +308 -0
- package/dist/chunk-EDQVAMQI.js.map +1 -0
- package/dist/{chunk-RRF5UOBJ.js → chunk-EI6V5UXY.js} +22 -15
- package/dist/chunk-EI6V5UXY.js.map +1 -0
- package/dist/{chunk-ZKSK55RC.js → chunk-ETUPBUHB.js} +2 -2
- package/dist/{chunk-25MQ7IHJ.js → chunk-EUML3N6B.js} +17 -6
- package/dist/chunk-EUML3N6B.js.map +1 -0
- package/dist/{chunk-5RGLBDQF.js → chunk-EVZFIAPG.js} +12 -12
- package/dist/chunk-EVZFIAPG.js.map +1 -0
- package/dist/{chunk-QRNI5JBH.js → chunk-EYIEWJNI.js} +2 -2
- package/dist/{chunk-TPU5L5EY.js → chunk-FCOQXV3T.js} +272 -411
- package/dist/chunk-FCOQXV3T.js.map +1 -0
- package/dist/{chunk-TMQLARTH.js → chunk-FK556DDH.js} +34 -15
- package/dist/chunk-FK556DDH.js.map +1 -0
- package/dist/{chunk-43PJZYGL.js → chunk-FPGE5NVO.js} +45 -10
- package/dist/chunk-FPGE5NVO.js.map +1 -0
- package/dist/{chunk-3VAL7ZL2.js → chunk-FUC4LZMD.js} +60 -25
- package/dist/chunk-FUC4LZMD.js.map +1 -0
- package/dist/{chunk-C6QPK5GG.js → chunk-FZZ2QTJI.js} +2 -2
- package/dist/{chunk-D46YSIYX.js → chunk-G3Z3QEF5.js} +19 -11
- package/dist/{chunk-D46YSIYX.js.map → chunk-G3Z3QEF5.js.map} +1 -1
- package/dist/{chunk-3JXBXXM2.js → chunk-G4IAEX6D.js} +2 -2
- package/dist/{chunk-MSWG7JI6.js → chunk-G56P5RLD.js} +8 -2
- package/dist/chunk-G56P5RLD.js.map +1 -0
- package/dist/{chunk-AGZQD76C.js → chunk-GCGJW34D.js} +48 -2
- package/dist/chunk-GCGJW34D.js.map +1 -0
- package/dist/chunk-H2NCNXMS.js +159 -0
- package/dist/chunk-H2NCNXMS.js.map +1 -0
- package/dist/{chunk-XYIK4LF6.js → chunk-H3FZVNRN.js} +8 -2
- package/dist/chunk-H3FZVNRN.js.map +1 -0
- package/dist/{chunk-YU5KIWYQ.js → chunk-HC6EKOID.js} +94 -43
- package/dist/chunk-HC6EKOID.js.map +1 -0
- package/dist/{chunk-TK4UEOSK.js → chunk-HDDRVXX4.js} +8 -8
- package/dist/chunk-HDDRVXX4.js.map +1 -0
- package/dist/{chunk-LLQ2LLWF.js → chunk-HENLZHIT.js} +15 -5
- package/dist/chunk-HENLZHIT.js.map +1 -0
- package/dist/{chunk-N2D6GXBM.js → chunk-HINSGUA7.js} +28 -20
- package/dist/chunk-HINSGUA7.js.map +1 -0
- package/dist/{chunk-APO3DCMU.js → chunk-HLAVGJ62.js} +30 -8
- package/dist/chunk-HLAVGJ62.js.map +1 -0
- package/dist/{chunk-TPMQ3G6Z.js → chunk-HOJZMQ4J.js} +2 -2
- package/dist/chunk-HOJZMQ4J.js.map +1 -0
- package/dist/{chunk-LUDTDZLK.js → chunk-HPWVAEET.js} +33 -7
- package/dist/chunk-HPWVAEET.js.map +1 -0
- package/dist/{chunk-NZL6GGQE.js → chunk-HQ6NIBL6.js} +92 -30
- package/dist/chunk-HQ6NIBL6.js.map +1 -0
- package/dist/{chunk-UWVJF25J.js → chunk-HWVTS5NO.js} +20 -6
- package/dist/chunk-HWVTS5NO.js.map +1 -0
- package/dist/{chunk-2WWLHTZY.js → chunk-IC4GELZE.js} +2 -2
- package/dist/{chunk-QA2ZAPBU.js → chunk-IPLYGWQF.js} +28 -20
- package/dist/chunk-IPLYGWQF.js.map +1 -0
- package/dist/{chunk-A6KTB5R6.js → chunk-IQ3OI2RR.js} +3 -3
- package/dist/chunk-IQ3OI2RR.js.map +1 -0
- package/dist/{chunk-6LVVDPJ4.js → chunk-J64TK33U.js} +3 -4
- package/dist/chunk-J64TK33U.js.map +1 -0
- package/dist/{chunk-6FC5EGNV.js → chunk-JBPKEARU.js} +15 -5
- package/dist/{chunk-6FC5EGNV.js.map → chunk-JBPKEARU.js.map} +1 -1
- package/dist/{chunk-RHY3HH7P.js → chunk-JFEKNTX7.js} +125 -33
- package/dist/chunk-JFEKNTX7.js.map +1 -0
- package/dist/{chunk-TZOLIGIG.js → chunk-JJEJJ7RK.js} +4 -2
- package/dist/chunk-JJEJJ7RK.js.map +1 -0
- package/dist/{chunk-PCUKNJAZ.js → chunk-JKV57BTN.js} +2 -2
- package/dist/{chunk-EJI5XIBB.js → chunk-JLNBQWZ2.js} +55 -7
- package/dist/chunk-JLNBQWZ2.js.map +1 -0
- package/dist/{chunk-PIRJPV5T.js → chunk-JNANKJLN.js} +2 -2
- package/dist/chunk-JNANKJLN.js.map +1 -0
- package/dist/{chunk-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
- package/dist/chunk-JUC24CTX.js.map +1 -0
- package/dist/{chunk-OIGNEXKZ.js → chunk-K5O2QY6T.js} +5 -1
- package/dist/{chunk-OIGNEXKZ.js.map → chunk-K5O2QY6T.js.map} +1 -1
- package/dist/{chunk-ZTFCYYEZ.js → chunk-KCYE2MZM.js} +3 -3
- package/dist/chunk-KCYE2MZM.js.map +1 -0
- package/dist/{chunk-JWPLJLDU.js → chunk-KD3QD3A5.js} +2 -2
- package/dist/{chunk-JWPLJLDU.js.map → chunk-KD3QD3A5.js.map} +1 -1
- package/dist/{chunk-YRMVARQP.js → chunk-KFY3SGN7.js} +49 -2
- package/dist/chunk-KFY3SGN7.js.map +1 -0
- package/dist/{chunk-CYFQJMUV.js → chunk-KIB7SDIJ.js} +15 -10
- package/dist/chunk-KIB7SDIJ.js.map +1 -0
- package/dist/{chunk-3KW65B36.js → chunk-KILOTVIF.js} +95 -48
- package/dist/chunk-KILOTVIF.js.map +1 -0
- package/dist/{chunk-MXFBBHJU.js → chunk-KJMYHC7K.js} +10 -5
- package/dist/chunk-KJMYHC7K.js.map +1 -0
- package/dist/{chunk-W3LR522O.js → chunk-KM2A35EO.js} +36 -34
- package/dist/chunk-KM2A35EO.js.map +1 -0
- package/dist/{chunk-575RMLWN.js → chunk-KXULCVOC.js} +30 -24
- package/dist/chunk-KXULCVOC.js.map +1 -0
- package/dist/{chunk-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
- package/dist/chunk-L227SKTB.js.map +1 -0
- package/dist/{chunk-BVF3AGJP.js → chunk-LJBOVCQG.js} +26 -11
- package/dist/chunk-LJBOVCQG.js.map +1 -0
- package/dist/{chunk-2KI4QFHU.js → chunk-LMDRGRJ2.js} +2 -2
- package/dist/{chunk-MY6TPVXW.js → chunk-LMPHTYJC.js} +2 -2
- package/dist/{chunk-EHRTFRWW.js → chunk-LQHDIS7L.js} +10 -5
- package/dist/chunk-LQHDIS7L.js.map +1 -0
- package/dist/chunk-LUDUFZTV.js +170 -0
- package/dist/chunk-LUDUFZTV.js.map +1 -0
- package/dist/{chunk-5HRY2WRF.js → chunk-LZ3VEOU5.js} +2 -2
- package/dist/{chunk-Q7P4WJDP.js → chunk-M5T4Q2ZU.js} +1 -1
- package/dist/chunk-M5T4Q2ZU.js.map +1 -0
- package/dist/{chunk-ICRIXAP2.js → chunk-MC4FJXPA.js} +16 -6
- package/dist/chunk-MC4FJXPA.js.map +1 -0
- package/dist/{chunk-WPGJYVUH.js → chunk-MGVIEM2O.js} +23 -6
- package/dist/chunk-MGVIEM2O.js.map +1 -0
- package/dist/{chunk-NGAVDO7E.js → chunk-OADWQ5CR.js} +2 -2
- package/dist/{chunk-2NMMFZ5T.js → chunk-OD4FM2U7.js} +6 -3
- package/dist/chunk-OD4FM2U7.js.map +1 -0
- package/dist/{chunk-OZHRDTDX.js → chunk-OKTXM5H4.js} +11 -1
- package/dist/chunk-OKTXM5H4.js.map +1 -0
- package/dist/{chunk-RXDLTSWT.js → chunk-ONPLNAPX.js} +16 -7
- package/dist/chunk-ONPLNAPX.js.map +1 -0
- package/dist/{chunk-FJ43PRLT.js → chunk-ORFGK3XI.js} +20 -14
- package/dist/chunk-ORFGK3XI.js.map +1 -0
- package/dist/{chunk-DOM4GKSW.js → chunk-OZKVVUJB.js} +3 -3
- package/dist/{chunk-3TNBOMQT.js → chunk-PCI747N2.js} +13 -13
- package/dist/{chunk-3TNBOMQT.js.map → chunk-PCI747N2.js.map} +1 -1
- package/dist/{chunk-MT4HVDUZ.js → chunk-PM3QHTFT.js} +3 -3
- package/dist/{chunk-4DWOBS2A.js → chunk-PRQJ5ESM.js} +27 -2
- package/dist/{chunk-4DWOBS2A.js.map → chunk-PRQJ5ESM.js.map} +1 -1
- package/dist/chunk-PU44GBL4.js +52 -0
- package/dist/chunk-PU44GBL4.js.map +1 -0
- package/dist/{chunk-MJFNCJXV.js → chunk-Q4CAQGKQ.js} +47 -9
- package/dist/chunk-Q4CAQGKQ.js.map +1 -0
- package/dist/{chunk-U3WSW6PZ.js → chunk-QMYXNM4P.js} +90 -35
- package/dist/chunk-QMYXNM4P.js.map +1 -0
- package/dist/{chunk-XVVIG67A.js → chunk-QVJ4NWL2.js} +62 -18
- package/dist/chunk-QVJ4NWL2.js.map +1 -0
- package/dist/{chunk-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
- package/dist/chunk-QY7YA7OL.js.map +1 -0
- package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
- package/dist/{chunk-2PRLKQAH.js → chunk-RLV3PQGH.js} +35 -19
- package/dist/chunk-RLV3PQGH.js.map +1 -0
- package/dist/{chunk-WW3QQF4H.js → chunk-ROZJACKP.js} +16 -1
- package/dist/chunk-ROZJACKP.js.map +1 -0
- package/dist/{chunk-7MNMYOFP.js → chunk-RSUYKGGZ.js} +3 -4
- package/dist/chunk-RSUYKGGZ.js.map +1 -0
- package/dist/{chunk-LT3NLYSI.js → chunk-RUZOJKNF.js} +10 -7
- package/dist/chunk-RUZOJKNF.js.map +1 -0
- package/dist/{chunk-326G7DJK.js → chunk-RW5DGAGO.js} +67 -13
- package/dist/chunk-RW5DGAGO.js.map +1 -0
- package/dist/{chunk-KOSORCJG.js → chunk-S53PKKWK.js} +63 -24
- package/dist/chunk-S53PKKWK.js.map +1 -0
- package/dist/{chunk-65PG43EQ.js → chunk-S7WU3Y3D.js} +21 -4
- package/dist/chunk-S7WU3Y3D.js.map +1 -0
- package/dist/{chunk-SKE7JYKA.js → chunk-SFXKHM7P.js} +2 -2
- package/dist/{chunk-HMDCOMYU.js → chunk-SKGV326D.js} +3 -3
- package/dist/{chunk-I5GLV3VE.js → chunk-SML26KED.js} +33 -26
- package/dist/{chunk-I5GLV3VE.js.map → chunk-SML26KED.js.map} +1 -1
- package/dist/chunk-T2PO5MUF.js +62 -0
- package/dist/chunk-T2PO5MUF.js.map +1 -0
- package/dist/{chunk-C7VW7C3F.js → chunk-TDKQGLJW.js} +3 -3
- package/dist/chunk-TDKQGLJW.js.map +1 -0
- package/dist/{chunk-3QKK7QOS.js → chunk-TERNBNJB.js} +3 -3
- package/dist/chunk-TERNBNJB.js.map +1 -0
- package/dist/{chunk-MXC3AP5I.js → chunk-TGQ2NTWH.js} +12 -7
- package/dist/chunk-TGQ2NTWH.js.map +1 -0
- package/dist/{chunk-3Y4P7RXM.js → chunk-TMSXWOBZ.js} +3 -4
- package/dist/chunk-TMSXWOBZ.js.map +1 -0
- package/dist/{chunk-3ZLVGM76.js → chunk-TTGZV5R3.js} +106 -44
- package/dist/chunk-TTGZV5R3.js.map +1 -0
- package/dist/{chunk-5UM2VJ6D.js → chunk-UEY3VB6W.js} +2 -2
- package/dist/{chunk-I6K5FBRQ.js → chunk-UI3NYK34.js} +4 -1
- package/dist/{chunk-I6K5FBRQ.js.map → chunk-UI3NYK34.js.map} +1 -1
- package/dist/{chunk-VBJ7V5SK.js → chunk-UIPDNLXA.js} +21 -8
- package/dist/chunk-UIPDNLXA.js.map +1 -0
- package/dist/{chunk-GIF42EW3.js → chunk-UP6MOYCB.js} +3 -3
- package/dist/{chunk-K4FLSOR5.js → chunk-USYGGIJZ.js} +44 -15
- package/dist/chunk-USYGGIJZ.js.map +1 -0
- package/dist/{chunk-FIT6DMX6.js → chunk-UWY7GIVS.js} +152 -54
- package/dist/chunk-UWY7GIVS.js.map +1 -0
- package/dist/{chunk-MRILGULB.js → chunk-V2RCP53Q.js} +2 -2
- package/dist/{chunk-XKECPATV.js → chunk-VFUEZZBS.js} +113 -4
- package/dist/chunk-VFUEZZBS.js.map +1 -0
- package/dist/{chunk-FSFEQI74.js → chunk-W7L6HXUC.js} +2 -2
- package/dist/{chunk-3IQ2TR4N.js → chunk-WLEB7WCG.js} +2 -2
- package/dist/{chunk-GL6I6MEQ.js → chunk-WSGF57U2.js} +3 -3
- package/dist/{chunk-KNKUID7G.js → chunk-X7Y7WX73.js} +72 -6
- package/dist/chunk-X7Y7WX73.js.map +1 -0
- package/dist/{chunk-5NPGSAVB.js → chunk-XEKAG3FM.js} +23 -5
- package/dist/chunk-XEKAG3FM.js.map +1 -0
- package/dist/{chunk-3APJ5EVB.js → chunk-XKIQZXUB.js} +41 -26
- package/dist/chunk-XKIQZXUB.js.map +1 -0
- package/dist/chunk-XKXKSQU7.js +92 -0
- package/dist/chunk-XKXKSQU7.js.map +1 -0
- package/dist/{chunk-JA3AK3PT.js → chunk-XNLXAWHX.js} +4 -4
- package/dist/{chunk-CULXMQJH.js → chunk-XPXEJRUB.js} +3 -3
- package/dist/chunk-XPXEJRUB.js.map +1 -0
- package/dist/{chunk-PZIAX57I.js → chunk-XR6DNK4U.js} +7 -4
- package/dist/chunk-XR6DNK4U.js.map +1 -0
- package/dist/{chunk-47VWKCAF.js → chunk-XSQ4SGM5.js} +33 -4
- package/dist/chunk-XSQ4SGM5.js.map +1 -0
- package/dist/{chunk-66DHUKLO.js → chunk-XSWKORGM.js} +16 -14
- package/dist/chunk-XSWKORGM.js.map +1 -0
- package/dist/{chunk-QR3C7BKQ.js → chunk-XZ4WBBB5.js} +7 -8
- package/dist/chunk-XZ4WBBB5.js.map +1 -0
- package/dist/{chunk-WNARATI3.js → chunk-Y2SXZ5KZ.js} +59 -11
- package/dist/chunk-Y2SXZ5KZ.js.map +1 -0
- package/dist/{chunk-QLLBRHAT.js → chunk-YDMVYYD2.js} +229 -264
- package/dist/chunk-YDMVYYD2.js.map +1 -0
- package/dist/{chunk-SIC6U3GZ.js → chunk-YHV3KRKS.js} +3 -3
- package/dist/{chunk-ZPKBYX2F.js → chunk-YNDLCWXS.js} +85 -9
- package/dist/chunk-YNDLCWXS.js.map +1 -0
- package/dist/{chunk-W6AQJ2PY.js → chunk-YNXOKMJP.js} +35 -16
- package/dist/chunk-YNXOKMJP.js.map +1 -0
- package/dist/{chunk-VLXA6PI2.js → chunk-YQMZ7IH2.js} +4 -4
- package/dist/{chunk-TMM4S4IJ.js → chunk-YR6GIWWY.js} +58 -8
- package/dist/chunk-YR6GIWWY.js.map +1 -0
- package/dist/{chunk-DK5LDEQM.js → chunk-YR7XMOWK.js} +39 -23
- package/dist/chunk-YR7XMOWK.js.map +1 -0
- package/dist/{chunk-U7EJOMFC.js → chunk-ZEY4KYRQ.js} +41 -14
- package/dist/chunk-ZEY4KYRQ.js.map +1 -0
- package/dist/chunk-ZFXCQPNO.js +27 -0
- package/dist/chunk-ZFXCQPNO.js.map +1 -0
- package/dist/citations.js +1 -1
- package/dist/{cli-kuh9PwZ5.d.ts → cli-CPe_2KB1.d.ts} +8 -31
- package/dist/cli.d.ts +10 -6
- package/dist/cli.js +124 -119
- package/dist/commitment-ledger.js +2 -2
- package/dist/compat/checks.js +1 -2
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +11 -11
- package/dist/compounding/preference-consolidator.d.ts +1 -0
- package/dist/compounding/preference-consolidator.js +8 -8
- package/dist/compounding/preference-consolidator.js.map +1 -1
- package/dist/compression-optimizer.d.ts +1 -0
- package/dist/compression-optimizer.js +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -0
- package/dist/connectors/codex-materialize-runner.js +12 -11
- package/dist/connectors/codex-materialize.d.ts +1 -0
- package/dist/connectors/codex-materialize.js +3 -2
- package/dist/connectors/index.d.ts +1 -0
- package/dist/connectors/index.js +14 -14
- package/dist/{connectors-cli-CwbyjGR7.d.ts → connectors-cli-DbTPNj2H.d.ts} +7 -1
- package/dist/connectors-cli.d.ts +1 -1
- package/dist/connectors-cli.js +3 -1
- package/dist/consolidation-provenance-check.d.ts +1 -0
- package/dist/consolidation-provenance-check.js +2 -2
- package/dist/consolidation-undo.d.ts +1 -0
- package/dist/consolidation-undo.js +1 -1
- package/dist/contradiction/index.d.ts +3 -1
- package/dist/contradiction/index.js +3 -3
- package/dist/{contradiction-review-ATP4S6IC.js → contradiction-review-6V2LXXK6.js} +2 -2
- package/dist/{contradiction-scan-5A4IDZV5.js → contradiction-scan-GIRVC4C7.js} +3 -3
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +1 -0
- package/dist/conversation-index/cleanup.js +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.js +1 -1
- package/dist/conversation-index/indexer.d.ts +5 -2
- package/dist/conversation-index/indexer.js +1 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/cross-namespace-budget.js +1 -1
- package/dist/cue-anchors.js +2 -2
- package/dist/dashboard-runtime.d.ts +6 -0
- package/dist/dashboard-runtime.js +3 -3
- package/dist/day-summary.d.ts +1 -0
- package/dist/day-summary.js +2 -2
- package/dist/delinearize.d.ts +1 -0
- package/dist/direct-answer-wiring.d.ts +1 -0
- package/dist/direct-answer.d.ts +1 -0
- package/dist/{dreams-ledger-LR2NBAZE.js → dreams-ledger-3WSCI5V4.js} +5 -4
- package/dist/{dreams-ledger-LR2NBAZE.js.map → dreams-ledger-3WSCI5V4.js.map} +1 -1
- package/dist/embedding-fallback.d.ts +3 -0
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +1 -0
- package/dist/enrichment/index.js +1 -1
- package/dist/entity-retrieval.d.ts +2 -0
- package/dist/entity-retrieval.js +9 -9
- package/dist/entity-schema.d.ts +1 -0
- package/dist/evals.js +1 -1
- package/dist/explicit-capture.d.ts +5 -3
- package/dist/explicit-capture.js +2 -2
- package/dist/extraction-judge-telemetry.d.ts +2 -0
- package/dist/extraction-judge-training.d.ts +2 -0
- package/dist/extraction-judge.d.ts +2 -0
- package/dist/extraction.d.ts +2 -0
- package/dist/extraction.js +12 -12
- package/dist/{faiss-adapter-CzPghc4C.d.ts → faiss-adapter-BHecI1fF.d.ts} +4 -1
- package/dist/fallback-llm.d.ts +11 -1
- package/dist/fallback-llm.js +8 -6
- package/dist/{first-start-migration-4MHQEOSD.js → first-start-migration-CKTCTCQI.js} +5 -5
- package/dist/graph-dashboard-diff.d.ts +4 -0
- package/dist/graph-dashboard-diff.js +1 -1
- package/dist/graph-dashboard-parser.js +1 -1
- package/dist/{graph-edge-decay-5DI5GUNL.js → graph-edge-decay-MUP5J7CC.js} +6 -6
- package/dist/graph-events.js +1 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.js +2 -2
- package/dist/harmonic-retrieval.js +4 -4
- package/dist/identity-continuity.d.ts +1 -0
- package/dist/importance.d.ts +1 -0
- package/dist/importers/index.d.ts +244 -0
- package/dist/importers/index.js +20 -0
- package/dist/index.d.ts +20 -350
- package/dist/index.js +885 -562
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -0
- package/dist/lcm/archive.d.ts +2 -2
- package/dist/lcm/archive.js +2 -2
- package/dist/lcm/engine.d.ts +3 -2
- package/dist/lcm/engine.js +6 -6
- package/dist/lcm/index.d.ts +1 -0
- package/dist/lcm/index.js +8 -8
- package/dist/lcm/recall.js +1 -1
- package/dist/lcm/summarizer.js +3 -3
- package/dist/lcm/tools.d.ts +1 -0
- package/dist/lifecycle.d.ts +1 -0
- package/dist/live-connectors-runner.d.ts +1 -0
- package/dist/live-connectors-runner.js +6 -6
- package/dist/local-llm.d.ts +1 -0
- package/dist/local-llm.js +2 -2
- package/dist/maintenance/archive-observations.js +1 -1
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +10 -8
- package/dist/maintenance/migrate-observations.js +3 -2
- package/dist/maintenance/observation-ledger-utils.d.ts +3 -0
- package/dist/maintenance/observation-ledger-utils.js +2 -1
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -1
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -8
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -1
- package/dist/maintenance/rebuild-memory-projection.js +13 -10
- package/dist/maintenance/rebuild-observations.d.ts +1 -0
- package/dist/maintenance/rebuild-observations.js +3 -2
- package/dist/mcp-memory-inspector-app.d.ts +7 -4
- package/dist/mcp-memory-inspector-app.js +1 -1
- package/dist/memory-action-policy.d.ts +1 -0
- package/dist/memory-cache.d.ts +1 -0
- package/dist/memory-cache.js +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -0
- package/dist/memory-projection-store.d.ts +1 -0
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-provenance.d.ts +1 -0
- package/dist/memory-worth-outcomes.d.ts +1 -0
- package/dist/migrate/from-engram.js +2 -2
- package/dist/{migrate-from-identity-anchor-G27MCD6A.js → migrate-from-identity-anchor-EB4XI4Q2.js} +2 -2
- package/dist/model-registry.js +1 -1
- package/dist/models-json.d.ts +1 -0
- package/dist/namespaces/migrate.d.ts +3 -0
- package/dist/namespaces/migrate.js +26 -24
- package/dist/namespaces/principal.d.ts +1 -0
- package/dist/namespaces/principal.js +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +17 -15
- package/dist/namespaces/storage.d.ts +4 -2
- package/dist/namespaces/storage.js +10 -9
- package/dist/native-knowledge.d.ts +1 -0
- package/dist/native-knowledge.js +1 -1
- package/dist/negative.js +1 -1
- package/dist/network/webdav.d.ts +16 -1
- package/dist/network/webdav.js +5 -3
- package/dist/objective-state-writers.js +4 -4
- package/dist/objective-state.js +2 -2
- package/dist/offline-sync.d.ts +4 -0
- package/dist/offline-sync.js +4 -4
- package/dist/operator-toolkit.d.ts +4 -1
- package/dist/operator-toolkit.js +37 -34
- package/dist/opik-exporter.js +1 -1
- package/dist/{orchestrator-DuWl9Hwx.d.ts → orchestrator-Co9nxRLF.d.ts} +4 -74
- package/dist/orchestrator.d.ts +5 -3
- package/dist/orchestrator.js +101 -98
- package/dist/page-versioning.js +1 -1
- package/dist/path-X2K5XCHL.js +9 -0
- package/dist/patterns-cli.d.ts +1 -0
- package/dist/peers/index.d.ts +328 -0
- package/dist/{peers-HCVGHMAE.js → peers/index.js} +4 -4
- package/dist/pipeline-D18UAKlN.d.ts +32 -0
- package/dist/plugin-entry-resolver.d.ts +9 -0
- package/dist/plugin-entry-resolver.js +8 -0
- package/dist/plugin-entry-resolver.js.map +1 -0
- package/dist/plugin-id.d.ts +2 -21
- package/dist/plugin-id.js +33 -4
- package/dist/plugin-id.js.map +1 -1
- package/dist/policy-runtime.d.ts +4 -0
- package/dist/policy-runtime.js +1 -1
- package/dist/profiling.js +1 -1
- package/dist/qmd-recall-cache.d.ts +1 -0
- package/dist/qmd.d.ts +2 -1
- package/dist/qmd.js +3 -3
- package/dist/recall-disclosure-escalation.d.ts +1 -0
- package/dist/recall-explain-renderer.d.ts +1 -0
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-state.d.ts +8 -1
- package/dist/recall-state.js +2 -1
- package/dist/recall-tag-filter.d.ts +1 -0
- package/dist/recall-xray-cli.d.ts +1 -0
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -0
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -0
- package/dist/recall-xray.js +2 -2
- package/dist/relevance.d.ts +7 -1
- package/dist/relevance.js +2 -1
- package/dist/replay/normalizers/chatgpt.js +2 -2
- package/dist/replay/normalizers/claude.js +2 -2
- package/dist/replay/normalizers/openclaw.js +2 -2
- package/dist/replay/normalizers/shared.js +1 -1
- package/dist/replay/runner.js +1 -1
- package/dist/rerank.js +1 -1
- package/dist/{resolution-B7FNQSSP.js → resolution-ZY7VM6WS.js} +3 -3
- package/dist/resolution-ZY7VM6WS.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -0
- package/dist/resolve-auth-token.js +1 -1
- package/dist/resolve-provider-secret.d.ts +19 -29
- package/dist/resolve-provider-secret.js +2 -6
- package/dist/resume-bundles.js +10 -9
- package/dist/retrieval-agents.d.ts +2 -1
- package/dist/retrieval-agents.js +2 -1
- package/dist/retrieval-tiers.d.ts +1 -0
- package/dist/routing/engine.d.ts +1 -0
- package/dist/routing/store.d.ts +3 -0
- package/dist/routing/store.js +1 -1
- package/dist/runtime/env.js +1 -1
- package/dist/schemas.d.ts +191 -17
- package/dist/schemas.js +1 -1
- package/dist/sdk-compat.js +1 -1
- package/dist/search/document-scanner.js +1 -1
- package/dist/search/embed-helper.d.ts +7 -2
- package/dist/search/embed-helper.js +3 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +15 -14
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +21 -20
- package/dist/search/lancedb-backend.d.ts +8 -7
- package/dist/search/lancedb-backend.js +4 -2
- package/dist/search/meilisearch-backend.d.ts +8 -7
- package/dist/search/meilisearch-backend.js +4 -2
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/noop-backend.js +1 -1
- package/dist/search/orama-backend.d.ts +10 -8
- package/dist/search/orama-backend.js +8 -4
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/search/remote-backend.js +1 -1
- package/dist/secure-store/index.d.ts +16 -3
- package/dist/secure-store/index.js +2 -2
- package/dist/{semantic-VwGI14Ok.d.ts → semantic-SLAa_prH.d.ts} +5 -3
- package/dist/semantic-consolidation.d.ts +1 -0
- package/dist/semantic-consolidation.js +14 -13
- package/dist/semantic-rule-promotion.js +8 -8
- package/dist/semantic-rule-verifier.d.ts +1 -0
- package/dist/semantic-rule-verifier.js +8 -8
- package/dist/session-integrity.d.ts +1 -0
- package/dist/session-integrity.js +1 -1
- package/dist/session-observer-bands.d.ts +1 -0
- package/dist/session-observer-state.d.ts +6 -1
- package/dist/session-observer-state.js +1 -1
- package/dist/shared-context/manager.d.ts +5 -0
- package/dist/shared-context/manager.js +3 -3
- package/dist/signal.d.ts +1 -0
- package/dist/signal.js +1 -1
- package/dist/source-attribution.js +1 -1
- package/dist/state-store-4QZISH3J.js +30 -0
- package/dist/state-store-4QZISH3J.js.map +1 -0
- package/dist/storage-C4DX8CuG.d.ts +157 -0
- package/dist/storage.d.ts +2 -0
- package/dist/storage.js +7 -7
- package/dist/store-contract.js +1 -1
- package/dist/summarizer.d.ts +1 -0
- package/dist/summarizer.js +7 -7
- package/dist/summary-snapshot.d.ts +1 -0
- package/dist/surfaces/dreams.js +48 -17
- package/dist/surfaces/dreams.js.map +1 -1
- package/dist/temporal-supersession.d.ts +1 -0
- package/dist/temporal-supersession.js +1 -1
- package/dist/temporal-validity.d.ts +1 -0
- package/dist/threading.d.ts +1 -0
- package/dist/tier-migration.d.ts +1 -0
- package/dist/tier-routing.d.ts +1 -0
- package/dist/{tier-stats-62ZVDFKS.js → tier-stats-SKML2OSF.js} +5 -5
- package/dist/tmt.js +1 -1
- package/dist/tokens.js +2 -2
- package/dist/topics.d.ts +1 -0
- package/dist/{trace-C5ETWBEF.js → trace-WM7V4CKI.js} +31 -1
- package/dist/trace-WM7V4CKI.js.map +1 -0
- package/dist/transcript.d.ts +1 -0
- package/dist/transcript.js +2 -2
- package/dist/transfer/autodetect.js +7 -7
- package/dist/transfer/backup.js +5 -5
- package/dist/transfer/capsule-export.js +5 -5
- package/dist/transfer/capsule-import.d.ts +6 -0
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/export-json.js +3 -3
- package/dist/transfer/export-md.js +3 -3
- package/dist/transfer/export-sqlite.js +3 -3
- package/dist/transfer/fs-utils.d.ts +2 -1
- package/dist/transfer/fs-utils.js +5 -3
- package/dist/transfer/import-json.js +3 -3
- package/dist/transfer/import-md.js +3 -3
- package/dist/transfer/import-sqlite.js +3 -3
- package/dist/trust-zones.js +2 -2
- package/dist/types-B1VHaf2w.d.ts +126 -0
- package/dist/types-BliCnURB.d.ts +83 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.js +1 -1
- package/dist/utility-learner.js +3 -3
- package/dist/utility-runtime.d.ts +1 -0
- package/dist/utility-runtime.js +4 -4
- package/dist/utility-telemetry.js +2 -2
- package/dist/verified-recall.js +9 -9
- package/dist/work/board.js +2 -2
- package/dist/work/boundary.js +1 -1
- package/dist/work/storage.d.ts +5 -0
- package/dist/work/storage.js +1 -1
- package/dist/work-product-ledger.js +2 -2
- package/package.json +74 -3
- package/scripts/ensure-better-sqlite3.mjs +8 -7
- package/scripts/faiss_index.py +141 -29
- package/src/access-cli.test.ts +87 -2
- package/src/access-cli.ts +59 -5
- package/src/access-http.test.ts +150 -0
- package/src/access-http.ts +103 -34
- package/src/access-idempotency.ts +136 -3
- package/src/access-mcp.test.ts +155 -0
- package/src/access-mcp.ts +116 -30
- package/src/access-schema.ts +22 -4
- package/src/access-service-namespace.test.ts +9 -9
- package/src/access-service-project-tag.test.ts +37 -0
- package/src/access-service.ts +15 -14
- package/src/active-recall.test.ts +29 -1
- package/src/active-recall.ts +11 -7
- package/src/adapters/claude-code.ts +7 -8
- package/src/adapters/codex.ts +6 -7
- package/src/adapters/hermes.ts +1 -5
- package/src/adapters/registry.test.ts +63 -0
- package/src/adapters/registry.ts +10 -0
- package/src/adapters/replit.ts +5 -7
- package/src/adapters/types.ts +24 -1
- package/src/behavior-signals.ts +1 -1
- package/src/binary-lifecycle/backend.ts +16 -4
- package/src/binary-lifecycle/pipeline.test.ts +149 -0
- package/src/binary-lifecycle/pipeline.ts +49 -7
- package/src/binary-lifecycle/scanner.ts +19 -4
- package/src/boxes.ts +119 -32
- package/src/buffer-session.test.ts +28 -0
- package/src/buffer.ts +10 -14
- package/src/bulk-import/types.ts +10 -0
- package/src/calibration.test.ts +99 -0
- package/src/calibration.ts +57 -13
- package/src/causal-consolidation.test.ts +214 -0
- package/src/causal-consolidation.ts +131 -14
- package/src/causal-retrieval.ts +16 -3
- package/src/citations.test.ts +75 -0
- package/src/citations.ts +19 -6
- package/src/cli.ts +134 -109
- package/src/coding/coding-namespace.test.ts +7 -0
- package/src/coding/coding-namespace.ts +8 -0
- package/src/coding/review-context.test.ts +30 -0
- package/src/coding/review-context.ts +79 -9
- package/src/coding/wire-coding-context.test.ts +16 -0
- package/src/compat/checks.test.ts +33 -0
- package/src/compat/checks.ts +64 -4
- package/src/compounding/engine.ts +2 -2
- package/src/compounding/preference-consolidator.test.ts +47 -0
- package/src/compounding/preference-consolidator.ts +8 -8
- package/src/compression-optimizer.ts +5 -2
- package/src/config.test.ts +34 -2
- package/src/config.ts +62 -18
- package/src/connectors/codex-materialize-runner.ts +4 -3
- package/src/connectors/codex-materialize.ts +149 -34
- package/src/connectors/index.test.ts +144 -7
- package/src/connectors/index.ts +86 -15
- package/src/connectors/live/github.test.ts +47 -0
- package/src/connectors/live/github.ts +29 -1
- package/src/connectors/live/index.ts +2 -0
- package/src/connectors/live/live-connectors.test.ts +359 -73
- package/src/connectors/live/notion.test.ts +84 -0
- package/src/connectors/live/notion.ts +18 -1
- package/src/connectors/live/state-store.ts +419 -38
- package/src/connectors/weclone-installer.test.ts +16 -18
- package/src/connectors-cli.ts +19 -0
- package/src/console/trace.test.ts +28 -0
- package/src/console/trace.ts +42 -5
- package/src/contradiction/contradiction-judge.test.ts +49 -0
- package/src/contradiction/contradiction-judge.ts +15 -5
- package/src/contradiction/contradiction-review.ts +31 -7
- package/src/contradiction/contradiction-scan.ts +28 -18
- package/src/contradiction/contradiction.test.ts +237 -1
- package/src/contradiction/resolution.ts +43 -4
- package/src/conversation-index/backend.ts +13 -5
- package/src/conversation-index/cleanup.ts +25 -4
- package/src/conversation-index/faiss-adapter.ts +24 -15
- package/src/conversation-index/indexer.test.ts +71 -10
- package/src/conversation-index/indexer.ts +22 -3
- package/src/cross-namespace-budget.test.ts +59 -0
- package/src/cross-namespace-budget.ts +15 -7
- package/src/curation/index.ts +18 -17
- package/src/dashboard-runtime.test.ts +98 -0
- package/src/dashboard-runtime.ts +96 -6
- package/src/dedup/index.test.ts +133 -0
- package/src/dedup/index.ts +73 -10
- package/src/dedup/semantic.test.ts +77 -2
- package/src/dedup/semantic.ts +26 -6
- package/src/embedding-fallback.ts +47 -15
- package/src/enrichment/audit.ts +8 -1
- package/src/enrichment/pipeline.ts +21 -13
- package/src/enrichment/web-search-provider.ts +1 -6
- package/src/entity-retrieval.ts +57 -6
- package/src/evals.ts +22 -13
- package/src/explicit-capture.test.ts +40 -0
- package/src/explicit-capture.ts +14 -2
- package/src/extraction.ts +42 -30
- package/src/fallback-llm.ts +35 -2
- package/src/graph-dashboard-diff.test.ts +57 -0
- package/src/graph-dashboard-diff.ts +24 -2
- package/src/graph-dashboard-parser.test.ts +31 -0
- package/src/graph-dashboard-parser.ts +4 -1
- package/src/graph-events.ts +6 -4
- package/src/graph.test.ts +69 -0
- package/src/graph.ts +7 -4
- package/src/importers/base.test.ts +70 -0
- package/src/importers/base.ts +56 -7
- package/src/index.ts +5 -2
- package/src/lcm/archive.ts +65 -16
- package/src/lcm/engine.ts +27 -8
- package/src/lcm/recall.ts +5 -5
- package/src/lcm-engine.test.ts +87 -1
- package/src/lcm-recall.test.ts +71 -0
- package/src/live-connectors-runner.ts +100 -36
- package/src/maintenance/archive-observations.ts +24 -3
- package/src/maintenance/atomic-file.ts +85 -0
- package/src/maintenance/dreams-ledger.ts +15 -8
- package/src/maintenance/memory-governance.test.ts +53 -0
- package/src/maintenance/memory-governance.ts +15 -5
- package/src/maintenance/observation-ledger-utils.ts +6 -5
- package/src/maintenance/purge.test.ts +64 -0
- package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +22 -9
- package/src/maintenance/rebuild-memory-projection.ts +22 -9
- package/src/maintenance/rebuild-observations.ts +7 -3
- package/src/mcp-memory-inspector-app.ts +26 -3
- package/src/memory-cache.test.ts +19 -0
- package/src/memory-cache.ts +1 -0
- package/src/memory-extension/codex-publisher.ts +25 -4
- package/src/memory-extension-host/host-discovery.test.ts +69 -0
- package/src/memory-extension-host/host-discovery.ts +63 -6
- package/src/memory-projection-store.ts +114 -62
- package/src/message-parts/index.ts +46 -31
- package/src/message-parts/message-parts.test.ts +77 -0
- package/src/migrate/from-engram.ts +68 -14
- package/src/model-registry.test.ts +38 -0
- package/src/model-registry.ts +12 -7
- package/src/namespaces/identity.test.ts +66 -0
- package/src/namespaces/identity.ts +23 -0
- package/src/namespaces/migrate.test.ts +62 -0
- package/src/namespaces/migrate.ts +82 -14
- package/src/namespaces/principal.test.ts +37 -1
- package/src/namespaces/principal.ts +18 -7
- package/src/namespaces/search.test.ts +96 -7
- package/src/namespaces/search.ts +32 -25
- package/src/namespaces/storage.ts +93 -11
- package/src/native-knowledge.ts +23 -3
- package/src/negative.ts +50 -5
- package/src/network/webdav.ts +177 -58
- package/src/offline-sync.test.ts +128 -18
- package/src/offline-sync.ts +41 -7
- package/src/onboarding/index.test.ts +105 -0
- package/src/onboarding/index.ts +17 -5
- package/src/operator-toolkit.ts +43 -5
- package/src/orchestrator.ts +120 -27
- package/src/page-versioning.ts +31 -5
- package/src/peers/peers.test.ts +70 -0
- package/src/peers/storage.ts +32 -3
- package/src/plugin-entry-resolver.test.ts +60 -0
- package/src/plugin-entry-resolver.ts +48 -0
- package/src/plugin-id.test.ts +38 -0
- package/src/plugin-id.ts +31 -64
- package/src/policy-runtime.test.ts +75 -0
- package/src/policy-runtime.ts +32 -3
- package/src/procedural/procedure-miner.test.ts +152 -0
- package/src/procedural/procedure-miner.ts +124 -19
- package/src/profiling.test.ts +23 -0
- package/src/profiling.ts +10 -1
- package/src/projection/index.test.ts +253 -0
- package/src/projection/index.ts +159 -18
- package/src/qmd-client.test.ts +45 -0
- package/src/qmd.ts +13 -10
- package/src/recall-disclosure.test.ts +15 -1
- package/src/recall-state.ts +24 -5
- package/src/relevance.ts +24 -5
- package/src/replay/normalizers/chatgpt.ts +14 -4
- package/src/replay/normalizers/claude.ts +8 -3
- package/src/replay/normalizers/openclaw.ts +35 -12
- package/src/replay/normalizers/replay-normalizers.test.ts +65 -0
- package/src/replay/normalizers/shared.ts +4 -1
- package/src/replay/runner.ts +1 -1
- package/src/rerank.test.ts +41 -1
- package/src/rerank.ts +2 -2
- package/src/resolve-auth-token.test.ts +29 -0
- package/src/resolve-auth-token.ts +12 -7
- package/src/resolve-provider-secret.test.ts +78 -22
- package/src/resolve-provider-secret.ts +55 -223
- package/src/retrieval-agents.ts +51 -14
- package/src/review/index.test.ts +75 -1
- package/src/review/index.ts +88 -30
- package/src/routing/store.ts +36 -6
- package/src/runtime/env.test.ts +73 -0
- package/src/runtime/env.ts +7 -11
- package/src/schemas.ts +16 -1
- package/src/search/abort.ts +18 -0
- package/src/search/document-scanner.test.ts +80 -0
- package/src/search/document-scanner.ts +51 -9
- package/src/search/embed-helper.ts +19 -6
- package/src/search/factory.ts +9 -5
- package/src/search/lancedb-backend.ts +66 -23
- package/src/search/meilisearch-backend.ts +39 -13
- package/src/search/noop-backend.ts +1 -1
- package/src/search/orama-backend.test.ts +27 -0
- package/src/search/orama-backend.ts +69 -16
- package/src/search/port.ts +4 -1
- package/src/search/remote-backend.ts +1 -1
- package/src/secure-store/cli-handlers.ts +70 -6
- package/src/secure-store/cli-renderer.ts +13 -7
- package/src/secure-store/secure-fs.ts +11 -5
- package/src/secure-store/secure-store.test.ts +70 -0
- package/src/semantic-consolidation.test.ts +45 -0
- package/src/semantic-consolidation.ts +3 -3
- package/src/session-integrity.test.ts +98 -0
- package/src/session-integrity.ts +51 -1
- package/src/session-observer-state.ts +108 -41
- package/src/shared-context/manager.ts +93 -15
- package/src/signal.test.ts +14 -0
- package/src/signal.ts +8 -1
- package/src/source-attribution.test.ts +8 -0
- package/src/source-attribution.ts +24 -2
- package/src/spaces/index.test.ts +93 -0
- package/src/spaces/index.ts +75 -9
- package/src/storage.ts +14 -1
- package/src/store-contract.test.ts +35 -0
- package/src/store-contract.ts +39 -5
- package/src/summarizer.ts +24 -18
- package/src/summary-snapshot.test.ts +77 -0
- package/src/surfaces/dreams.test.ts +73 -0
- package/src/surfaces/dreams.ts +53 -19
- package/src/sync/index.ts +42 -17
- package/src/taxonomy/taxonomy-loader.ts +43 -4
- package/src/temporal-supersession.test.ts +67 -0
- package/src/temporal-supersession.ts +8 -0
- package/src/tmt.test.ts +50 -0
- package/src/tmt.ts +35 -11
- package/src/tokens.test.ts +18 -0
- package/src/tokens.ts +7 -0
- package/src/training-export/converter.test.ts +55 -2
- package/src/training-export/converter.ts +36 -10
- package/src/training-export/registry.test.ts +17 -0
- package/src/training-export/registry.ts +19 -1
- package/src/transcript.ts +2 -2
- package/src/transfer/backup.ts +18 -7
- package/src/transfer/capsule-crypto.ts +105 -21
- package/src/transfer/capsule-encrypt.test.ts +106 -7
- package/src/transfer/capsule-export.ts +23 -14
- package/src/transfer/capsule-import.ts +11 -2
- package/src/transfer/exclusions.ts +7 -0
- package/src/transfer/export-sqlite.ts +14 -13
- package/src/transfer/fs-utils.ts +52 -1
- package/src/transfer/import-json.ts +12 -7
- package/src/transfer/import-md.ts +5 -5
- package/src/transfer/import-sqlite.ts +4 -5
- package/src/trust-zones.ts +1 -1
- package/src/types.ts +25 -0
- package/src/utility-telemetry.ts +1 -1
- package/src/utils/category-dir.test.ts +15 -0
- package/src/utils/category-dir.ts +3 -1
- package/src/work/boundary.ts +30 -18
- package/src/work/storage.ts +116 -38
- package/src/work-product-ledger.ts +1 -1
- package/dist/chunk-25MQ7IHJ.js.map +0 -1
- package/dist/chunk-2IWUMAES.js.map +0 -1
- package/dist/chunk-2NMMFZ5T.js.map +0 -1
- package/dist/chunk-2PRLKQAH.js.map +0 -1
- package/dist/chunk-326G7DJK.js.map +0 -1
- package/dist/chunk-3APJ5EVB.js.map +0 -1
- package/dist/chunk-3KW65B36.js.map +0 -1
- package/dist/chunk-3QKK7QOS.js.map +0 -1
- package/dist/chunk-3SLRNYNG.js.map +0 -1
- package/dist/chunk-3VAL7ZL2.js.map +0 -1
- package/dist/chunk-3Y4P7RXM.js.map +0 -1
- package/dist/chunk-3ZLVGM76.js.map +0 -1
- package/dist/chunk-43PJZYGL.js.map +0 -1
- package/dist/chunk-47VWKCAF.js.map +0 -1
- package/dist/chunk-4KGVTPGD.js.map +0 -1
- package/dist/chunk-5375UYTQ.js.map +0 -1
- package/dist/chunk-56K5QLHX.js.map +0 -1
- package/dist/chunk-575RMLWN.js.map +0 -1
- package/dist/chunk-5NPGSAVB.js.map +0 -1
- package/dist/chunk-5RGLBDQF.js.map +0 -1
- package/dist/chunk-65PG43EQ.js.map +0 -1
- package/dist/chunk-66DHUKLO.js.map +0 -1
- package/dist/chunk-6LVVDPJ4.js.map +0 -1
- package/dist/chunk-76FLAAUC.js.map +0 -1
- package/dist/chunk-77H5NU3M.js.map +0 -1
- package/dist/chunk-7MNMYOFP.js.map +0 -1
- package/dist/chunk-7OZ53EXP.js.map +0 -1
- package/dist/chunk-7SEAZFFB.js.map +0 -1
- package/dist/chunk-A6KTB5R6.js.map +0 -1
- package/dist/chunk-AGZQD76C.js.map +0 -1
- package/dist/chunk-APO3DCMU.js.map +0 -1
- package/dist/chunk-BVF3AGJP.js.map +0 -1
- package/dist/chunk-C5BCH4ZS.js.map +0 -1
- package/dist/chunk-C7VW7C3F.js.map +0 -1
- package/dist/chunk-CULXMQJH.js.map +0 -1
- package/dist/chunk-CYFQJMUV.js.map +0 -1
- package/dist/chunk-D654IBA6.js +0 -61
- package/dist/chunk-D654IBA6.js.map +0 -1
- package/dist/chunk-DGXUHMOV.js.map +0 -1
- package/dist/chunk-DINWEURR.js.map +0 -1
- package/dist/chunk-DK5LDEQM.js.map +0 -1
- package/dist/chunk-EABGC2TL.js.map +0 -1
- package/dist/chunk-EHRTFRWW.js.map +0 -1
- package/dist/chunk-EJI5XIBB.js.map +0 -1
- package/dist/chunk-FAAFWE4G.js.map +0 -1
- package/dist/chunk-FAJ7FZYM.js +0 -11
- package/dist/chunk-FAJ7FZYM.js.map +0 -1
- package/dist/chunk-FDU6HUUL.js +0 -147
- package/dist/chunk-FDU6HUUL.js.map +0 -1
- package/dist/chunk-FIT6DMX6.js.map +0 -1
- package/dist/chunk-FJ43PRLT.js.map +0 -1
- package/dist/chunk-FLTNHQK6.js +0 -262
- package/dist/chunk-FLTNHQK6.js.map +0 -1
- package/dist/chunk-GDFS42HT.js.map +0 -1
- package/dist/chunk-H3ME6L6D.js.map +0 -1
- package/dist/chunk-HXXBL2KD.js.map +0 -1
- package/dist/chunk-ICRIXAP2.js.map +0 -1
- package/dist/chunk-IQT3XTKW.js.map +0 -1
- package/dist/chunk-JR4ZC3G4.js.map +0 -1
- package/dist/chunk-K4FLSOR5.js.map +0 -1
- package/dist/chunk-KNKUID7G.js.map +0 -1
- package/dist/chunk-KOSORCJG.js.map +0 -1
- package/dist/chunk-LIRZNNUP.js.map +0 -1
- package/dist/chunk-LLQ2LLWF.js.map +0 -1
- package/dist/chunk-LPMVBPA3.js +0 -236
- package/dist/chunk-LPMVBPA3.js.map +0 -1
- package/dist/chunk-LT3NLYSI.js.map +0 -1
- package/dist/chunk-LUDTDZLK.js.map +0 -1
- package/dist/chunk-MJFNCJXV.js.map +0 -1
- package/dist/chunk-MSWG7JI6.js.map +0 -1
- package/dist/chunk-MXC3AP5I.js.map +0 -1
- package/dist/chunk-MXFBBHJU.js.map +0 -1
- package/dist/chunk-MZH6EHNR.js.map +0 -1
- package/dist/chunk-N2D6GXBM.js.map +0 -1
- package/dist/chunk-NBNN5GOB.js.map +0 -1
- package/dist/chunk-NMZY542O.js.map +0 -1
- package/dist/chunk-NZL6GGQE.js.map +0 -1
- package/dist/chunk-OZHRDTDX.js.map +0 -1
- package/dist/chunk-PIRJPV5T.js.map +0 -1
- package/dist/chunk-PZIAX57I.js.map +0 -1
- package/dist/chunk-Q7P4WJDP.js.map +0 -1
- package/dist/chunk-QA2ZAPBU.js.map +0 -1
- package/dist/chunk-QDZ2RLEC.js.map +0 -1
- package/dist/chunk-QLLBRHAT.js.map +0 -1
- package/dist/chunk-QR3C7BKQ.js.map +0 -1
- package/dist/chunk-RHY3HH7P.js.map +0 -1
- package/dist/chunk-RK2Y4XOM.js.map +0 -1
- package/dist/chunk-RR2PKP3I.js +0 -63
- package/dist/chunk-RR2PKP3I.js.map +0 -1
- package/dist/chunk-RRF5UOBJ.js.map +0 -1
- package/dist/chunk-RXDLTSWT.js.map +0 -1
- package/dist/chunk-RYED3SPJ.js +0 -42
- package/dist/chunk-RYED3SPJ.js.map +0 -1
- package/dist/chunk-S7KDBTWT.js.map +0 -1
- package/dist/chunk-TK4UEOSK.js.map +0 -1
- package/dist/chunk-TMM4S4IJ.js.map +0 -1
- package/dist/chunk-TMQLARTH.js.map +0 -1
- package/dist/chunk-TPB3I2AC.js.map +0 -1
- package/dist/chunk-TPMQ3G6Z.js.map +0 -1
- package/dist/chunk-TPU5L5EY.js.map +0 -1
- package/dist/chunk-TZOLIGIG.js.map +0 -1
- package/dist/chunk-U3WSW6PZ.js.map +0 -1
- package/dist/chunk-U4SCL7B7.js.map +0 -1
- package/dist/chunk-U66YHYC7.js +0 -31
- package/dist/chunk-U66YHYC7.js.map +0 -1
- package/dist/chunk-U7EJOMFC.js.map +0 -1
- package/dist/chunk-UWVJF25J.js.map +0 -1
- package/dist/chunk-VBJ7V5SK.js.map +0 -1
- package/dist/chunk-W3LR522O.js.map +0 -1
- package/dist/chunk-W4L6CZKA.js.map +0 -1
- package/dist/chunk-W6AQJ2PY.js.map +0 -1
- package/dist/chunk-WELDCG6C.js.map +0 -1
- package/dist/chunk-WNARATI3.js.map +0 -1
- package/dist/chunk-WPGJYVUH.js.map +0 -1
- package/dist/chunk-WW3QQF4H.js.map +0 -1
- package/dist/chunk-XIG5PDM7.js.map +0 -1
- package/dist/chunk-XKECPATV.js.map +0 -1
- package/dist/chunk-XKLD5OK4.js.map +0 -1
- package/dist/chunk-XSZEP4SF.js.map +0 -1
- package/dist/chunk-XVVIG67A.js.map +0 -1
- package/dist/chunk-XYIK4LF6.js.map +0 -1
- package/dist/chunk-YRMVARQP.js.map +0 -1
- package/dist/chunk-YROHKYBY.js.map +0 -1
- package/dist/chunk-YU5KIWYQ.js.map +0 -1
- package/dist/chunk-ZAVUCJ4H.js.map +0 -1
- package/dist/chunk-ZPKBYX2F.js.map +0 -1
- package/dist/chunk-ZTFCYYEZ.js.map +0 -1
- package/dist/chunk-ZYVPLJ4T.js.map +0 -1
- package/dist/path-MR5JPYOP.js +0 -9
- package/dist/state-store-VZU2IA53.js +0 -16
- package/dist/trace-C5ETWBEF.js.map +0 -1
- /package/dist/{capsule-crypto-5CYAGVC5.js.map → bulk-import/index.js.map} +0 -0
- /package/dist/{contradiction-review-ATP4S6IC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{capsule-merge-4MGKE7C5.js.map → capsule-merge-T2JRE46P.js.map} +0 -0
- /package/dist/{chunk-SAZS2QZB.js.map → chunk-23UORJ4S.js.map} +0 -0
- /package/dist/{chunk-PK7H5L6Y.js.map → chunk-2NM43EWN.js.map} +0 -0
- /package/dist/{chunk-PYXS46O7.js.map → chunk-3BP57I6J.js.map} +0 -0
- /package/dist/{chunk-FBYESMQ2.js.map → chunk-3C5RPJAX.js.map} +0 -0
- /package/dist/{chunk-N53K2EXC.js.map → chunk-6VF75M3X.js.map} +0 -0
- /package/dist/{chunk-6H2TESSP.js.map → chunk-765K3SAT.js.map} +0 -0
- /package/dist/{chunk-EDTHC6UD.js.map → chunk-77NAFXUD.js.map} +0 -0
- /package/dist/{chunk-MGKYQQYF.js.map → chunk-7Q3RCKAQ.js.map} +0 -0
- /package/dist/{chunk-34DQE4KF.js.map → chunk-CO7ZO4TU.js.map} +0 -0
- /package/dist/{chunk-ZKSK55RC.js.map → chunk-ETUPBUHB.js.map} +0 -0
- /package/dist/{chunk-QRNI5JBH.js.map → chunk-EYIEWJNI.js.map} +0 -0
- /package/dist/{chunk-C6QPK5GG.js.map → chunk-FZZ2QTJI.js.map} +0 -0
- /package/dist/{chunk-3JXBXXM2.js.map → chunk-G4IAEX6D.js.map} +0 -0
- /package/dist/{chunk-2WWLHTZY.js.map → chunk-IC4GELZE.js.map} +0 -0
- /package/dist/{chunk-PCUKNJAZ.js.map → chunk-JKV57BTN.js.map} +0 -0
- /package/dist/{chunk-2KI4QFHU.js.map → chunk-LMDRGRJ2.js.map} +0 -0
- /package/dist/{chunk-MY6TPVXW.js.map → chunk-LMPHTYJC.js.map} +0 -0
- /package/dist/{chunk-5HRY2WRF.js.map → chunk-LZ3VEOU5.js.map} +0 -0
- /package/dist/{chunk-NGAVDO7E.js.map → chunk-OADWQ5CR.js.map} +0 -0
- /package/dist/{chunk-DOM4GKSW.js.map → chunk-OZKVVUJB.js.map} +0 -0
- /package/dist/{chunk-MT4HVDUZ.js.map → chunk-PM3QHTFT.js.map} +0 -0
- /package/dist/{chunk-ZK7I7JYV.js.map → chunk-R3PS27B4.js.map} +0 -0
- /package/dist/{chunk-SKE7JYKA.js.map → chunk-SFXKHM7P.js.map} +0 -0
- /package/dist/{chunk-HMDCOMYU.js.map → chunk-SKGV326D.js.map} +0 -0
- /package/dist/{chunk-5UM2VJ6D.js.map → chunk-UEY3VB6W.js.map} +0 -0
- /package/dist/{chunk-GIF42EW3.js.map → chunk-UP6MOYCB.js.map} +0 -0
- /package/dist/{chunk-MRILGULB.js.map → chunk-V2RCP53Q.js.map} +0 -0
- /package/dist/{chunk-FSFEQI74.js.map → chunk-W7L6HXUC.js.map} +0 -0
- /package/dist/{chunk-3IQ2TR4N.js.map → chunk-WLEB7WCG.js.map} +0 -0
- /package/dist/{chunk-GL6I6MEQ.js.map → chunk-WSGF57U2.js.map} +0 -0
- /package/dist/{chunk-JA3AK3PT.js.map → chunk-XNLXAWHX.js.map} +0 -0
- /package/dist/{chunk-SIC6U3GZ.js.map → chunk-YHV3KRKS.js.map} +0 -0
- /package/dist/{chunk-VLXA6PI2.js.map → chunk-YQMZ7IH2.js.map} +0 -0
- /package/dist/{contradiction-scan-5A4IDZV5.js.map → contradiction-review-6V2LXXK6.js.map} +0 -0
- /package/dist/{migrate-from-identity-anchor-G27MCD6A.js.map → contradiction-scan-GIRVC4C7.js.map} +0 -0
- /package/dist/{first-start-migration-4MHQEOSD.js.map → first-start-migration-CKTCTCQI.js.map} +0 -0
- /package/dist/{graph-edge-decay-5DI5GUNL.js.map → graph-edge-decay-MUP5J7CC.js.map} +0 -0
- /package/dist/{path-MR5JPYOP.js.map → importers/index.js.map} +0 -0
- /package/dist/{peers-HCVGHMAE.js.map → migrate-from-identity-anchor-EB4XI4Q2.js.map} +0 -0
- /package/dist/{resolution-B7FNQSSP.js.map → path-X2K5XCHL.js.map} +0 -0
- /package/dist/{state-store-VZU2IA53.js.map → peers/index.js.map} +0 -0
- /package/dist/{tier-stats-62ZVDFKS.js.map → tier-stats-SKML2OSF.js.map} +0 -0
|
@@ -4,6 +4,7 @@ import { log } from "../logger.js";
|
|
|
4
4
|
import type { SearchBackend, SearchExecutionOptions, SearchQueryOptions, SearchResult } from "./port.js";
|
|
5
5
|
import type { EmbedHelper } from "./embed-helper.js";
|
|
6
6
|
import { scanMemoryDir } from "./document-scanner.js";
|
|
7
|
+
import { isSearchAborted, throwIfSearchAborted } from "./abort.js";
|
|
7
8
|
|
|
8
9
|
export interface OramaBackendOptions {
|
|
9
10
|
dbPath: string;
|
|
@@ -13,6 +14,30 @@ export interface OramaBackendOptions {
|
|
|
13
14
|
embeddingDimension: number;
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
const ORAMA_COLLECTION_FILENAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
18
|
+
|
|
19
|
+
function pathIsInside(parent: string, child: string): boolean {
|
|
20
|
+
const relative = path.relative(parent, child);
|
|
21
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function resolveOramaCollectionDbFilePath(dbPath: string, collection: string): string {
|
|
25
|
+
if (!ORAMA_COLLECTION_FILENAME_PATTERN.test(collection)) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Invalid Orama collection name ${JSON.stringify(collection)}. ` +
|
|
28
|
+
"Collection names must match [A-Za-z0-9][A-Za-z0-9._-]*.",
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
const resolvedDbPath = path.resolve(dbPath);
|
|
32
|
+
const filePath = path.resolve(resolvedDbPath, `${collection}.msp`);
|
|
33
|
+
if (!pathIsInside(resolvedDbPath, filePath)) {
|
|
34
|
+
throw new Error(
|
|
35
|
+
`Invalid Orama collection path for ${JSON.stringify(collection)}: resolved outside dbPath.`,
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return filePath;
|
|
39
|
+
}
|
|
40
|
+
|
|
16
41
|
/**
|
|
17
42
|
* Orama search backend — embedded hybrid FTS+vector, pure JS.
|
|
18
43
|
*
|
|
@@ -64,21 +89,23 @@ export class OramaBackend implements SearchBackend {
|
|
|
64
89
|
_collection?: string,
|
|
65
90
|
maxResults?: number,
|
|
66
91
|
_options?: SearchQueryOptions,
|
|
67
|
-
|
|
92
|
+
execution?: SearchExecutionOptions,
|
|
68
93
|
): Promise<SearchResult[]> {
|
|
69
|
-
return this.hybridSearch(query, _collection, maxResults);
|
|
94
|
+
return this.hybridSearch(query, _collection, maxResults, execution);
|
|
70
95
|
}
|
|
71
96
|
|
|
72
|
-
async searchGlobal(query: string, maxResults?: number,
|
|
97
|
+
async searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
73
98
|
const limit = maxResults ?? 10;
|
|
74
99
|
if (!this.available) return [];
|
|
75
100
|
try {
|
|
101
|
+
throwIfSearchAborted(execution, "OramaBackend global search aborted");
|
|
76
102
|
const files = await this.listDbFiles();
|
|
77
103
|
const allResults: SearchResult[] = [];
|
|
78
104
|
for (const file of files) {
|
|
105
|
+
throwIfSearchAborted(execution, "OramaBackend global search aborted");
|
|
79
106
|
const db = await this.loadDbFromFile(file);
|
|
80
107
|
if (!db) continue;
|
|
81
|
-
const results = await this.searchDb(db, query, "hybrid", limit);
|
|
108
|
+
const results = await this.searchDb(db, query, "hybrid", limit, execution);
|
|
82
109
|
allResults.push(...results);
|
|
83
110
|
}
|
|
84
111
|
allResults.sort((a, b) => b.score - a.score);
|
|
@@ -89,34 +116,43 @@ export class OramaBackend implements SearchBackend {
|
|
|
89
116
|
}
|
|
90
117
|
}
|
|
91
118
|
|
|
92
|
-
async bm25Search(query: string, collection?: string, maxResults?: number,
|
|
119
|
+
async bm25Search(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
120
|
+
if (isSearchAborted(execution)) return [];
|
|
93
121
|
const db = await this.ensureDbForCollection(collection ?? this.collection);
|
|
122
|
+
if (isSearchAborted(execution)) return [];
|
|
94
123
|
if (!db) return [];
|
|
95
|
-
return this.searchDb(db, query, "fulltext", maxResults ?? 10);
|
|
124
|
+
return this.searchDb(db, query, "fulltext", maxResults ?? 10, execution);
|
|
96
125
|
}
|
|
97
126
|
|
|
98
|
-
async vectorSearch(query: string, collection?: string, maxResults?: number,
|
|
127
|
+
async vectorSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
128
|
+
if (isSearchAborted(execution)) return [];
|
|
99
129
|
const db = await this.ensureDbForCollection(collection ?? this.collection);
|
|
130
|
+
if (isSearchAborted(execution)) return [];
|
|
100
131
|
if (!db) return [];
|
|
101
|
-
return this.searchDb(db, query, "vector", maxResults ?? 10);
|
|
132
|
+
return this.searchDb(db, query, "vector", maxResults ?? 10, execution);
|
|
102
133
|
}
|
|
103
134
|
|
|
104
|
-
async hybridSearch(query: string, collection?: string, maxResults?: number,
|
|
135
|
+
async hybridSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
136
|
+
if (isSearchAborted(execution)) return [];
|
|
105
137
|
const db = await this.ensureDbForCollection(collection ?? this.collection);
|
|
138
|
+
if (isSearchAborted(execution)) return [];
|
|
106
139
|
if (!db) return [];
|
|
107
|
-
return this.searchDb(db, query, "hybrid", maxResults ?? 10);
|
|
140
|
+
return this.searchDb(db, query, "hybrid", maxResults ?? 10, execution);
|
|
108
141
|
}
|
|
109
142
|
|
|
110
143
|
async update(execution?: SearchExecutionOptions): Promise<void> {
|
|
111
144
|
await this.updateCollection(this.collection, execution);
|
|
112
145
|
}
|
|
113
146
|
|
|
114
|
-
async updateCollection(collection: string,
|
|
147
|
+
async updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void> {
|
|
148
|
+
if (isSearchAborted(execution)) return;
|
|
115
149
|
const db = await this.ensureDbForCollection(collection);
|
|
150
|
+
if (isSearchAborted(execution)) return;
|
|
116
151
|
if (!db) return;
|
|
117
152
|
const { search: oramaSearch, insert, remove, count } = this.oramaModule;
|
|
118
153
|
|
|
119
154
|
const docs = await scanMemoryDir(this.memoryDir);
|
|
155
|
+
if (isSearchAborted(execution)) return;
|
|
120
156
|
const docMap = new Map(docs.map((d) => [d.docid, d]));
|
|
121
157
|
const { update: oramaUpdate } = this.oramaModule;
|
|
122
158
|
|
|
@@ -126,6 +162,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
126
162
|
if (existingCount > 0) {
|
|
127
163
|
const allHits = await oramaSearch(db, { term: "", limit: existingCount + 100 });
|
|
128
164
|
for (const hit of allHits.hits) {
|
|
165
|
+
if (isSearchAborted(execution)) return;
|
|
129
166
|
if (!docMap.has(hit.document.id)) {
|
|
130
167
|
await remove(db, hit.id);
|
|
131
168
|
} else {
|
|
@@ -139,6 +176,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
139
176
|
|
|
140
177
|
// Insert new docs, update existing ones (preserving vectors since update is remove+insert)
|
|
141
178
|
for (const doc of docs) {
|
|
179
|
+
if (isSearchAborted(execution)) return;
|
|
142
180
|
const existing = existingDocs.get(doc.docid);
|
|
143
181
|
if (existing) {
|
|
144
182
|
const payload: Record<string, unknown> = {
|
|
@@ -169,6 +207,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
169
207
|
}
|
|
170
208
|
}
|
|
171
209
|
|
|
210
|
+
if (isSearchAborted(execution)) return;
|
|
172
211
|
await this.persistDbForCollection(db, collection);
|
|
173
212
|
}
|
|
174
213
|
|
|
@@ -212,7 +251,10 @@ export class OramaBackend implements SearchBackend {
|
|
|
212
251
|
await this.persistDbForCollection(db, collection);
|
|
213
252
|
}
|
|
214
253
|
|
|
215
|
-
async ensureCollection(
|
|
254
|
+
async ensureCollection(
|
|
255
|
+
_memoryDir: string,
|
|
256
|
+
_execution?: SearchExecutionOptions,
|
|
257
|
+
): Promise<"present" | "missing" | "unknown" | "skipped"> {
|
|
216
258
|
try {
|
|
217
259
|
await this.ensureModules();
|
|
218
260
|
await this.ensureDb();
|
|
@@ -293,7 +335,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
293
335
|
}
|
|
294
336
|
|
|
295
337
|
private dbFilePath(collection: string): string {
|
|
296
|
-
return
|
|
338
|
+
return resolveOramaCollectionDbFilePath(this.dbPath, collection);
|
|
297
339
|
}
|
|
298
340
|
|
|
299
341
|
private async listDbFiles(): Promise<string[]> {
|
|
@@ -317,16 +359,24 @@ export class OramaBackend implements SearchBackend {
|
|
|
317
359
|
}
|
|
318
360
|
}
|
|
319
361
|
|
|
320
|
-
private async searchDb(
|
|
362
|
+
private async searchDb(
|
|
363
|
+
db: any,
|
|
364
|
+
query: string,
|
|
365
|
+
mode: "fulltext" | "vector" | "hybrid",
|
|
366
|
+
limit: number,
|
|
367
|
+
execution?: SearchExecutionOptions,
|
|
368
|
+
): Promise<SearchResult[]> {
|
|
321
369
|
const { search: oramaSearch } = this.oramaModule;
|
|
322
370
|
|
|
323
371
|
try {
|
|
372
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
324
373
|
let searchParams: any;
|
|
325
374
|
|
|
326
375
|
if (mode === "fulltext") {
|
|
327
376
|
searchParams = { term: query, limit };
|
|
328
377
|
} else if (mode === "vector") {
|
|
329
|
-
const vec = await this.embedHelper.embed(query);
|
|
378
|
+
const vec = await this.embedHelper.embed(query, { signal: execution?.signal });
|
|
379
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
330
380
|
if (!vec) {
|
|
331
381
|
// Fall back to fulltext if no embeddings available
|
|
332
382
|
searchParams = { term: query, limit };
|
|
@@ -335,7 +385,8 @@ export class OramaBackend implements SearchBackend {
|
|
|
335
385
|
}
|
|
336
386
|
} else {
|
|
337
387
|
// hybrid
|
|
338
|
-
const vec = await this.embedHelper.embed(query);
|
|
388
|
+
const vec = await this.embedHelper.embed(query, { signal: execution?.signal });
|
|
389
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
339
390
|
if (!vec) {
|
|
340
391
|
searchParams = { term: query, limit };
|
|
341
392
|
} else {
|
|
@@ -343,7 +394,9 @@ export class OramaBackend implements SearchBackend {
|
|
|
343
394
|
}
|
|
344
395
|
}
|
|
345
396
|
|
|
397
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
346
398
|
const result = await oramaSearch(db, searchParams);
|
|
399
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
347
400
|
return (result.hits ?? []).map((hit: any) => ({
|
|
348
401
|
docid: hit.document?.id ?? "",
|
|
349
402
|
path: hit.document?.path ?? "",
|
package/src/search/port.ts
CHANGED
|
@@ -82,5 +82,8 @@ export interface SearchBackend {
|
|
|
82
82
|
embedCollection(collection: string): Promise<void>;
|
|
83
83
|
|
|
84
84
|
// ── Collection management ──
|
|
85
|
-
ensureCollection(
|
|
85
|
+
ensureCollection(
|
|
86
|
+
memoryDir: string,
|
|
87
|
+
execution?: SearchExecutionOptions,
|
|
88
|
+
): Promise<"present" | "missing" | "unknown" | "skipped">;
|
|
86
89
|
}
|
|
@@ -82,7 +82,7 @@ export class RemoteSearchBackend implements SearchBackend {
|
|
|
82
82
|
async embed(): Promise<void> {}
|
|
83
83
|
async embedCollection(_collection: string): Promise<void> {}
|
|
84
84
|
|
|
85
|
-
async ensureCollection(_memoryDir: string): Promise<"skipped"> {
|
|
85
|
+
async ensureCollection(_memoryDir: string, _execution?: SearchExecutionOptions): Promise<"skipped"> {
|
|
86
86
|
return "skipped";
|
|
87
87
|
}
|
|
88
88
|
|
|
@@ -193,13 +193,21 @@ export function runSecureStoreLock(options: SecureStoreLockOptions): SecureStore
|
|
|
193
193
|
|
|
194
194
|
// ─── migrate ─────────────────────────────────────────────────────────
|
|
195
195
|
|
|
196
|
-
export interface SecureStoreMigrateOptions extends SecureStoreHandlerCommon {
|
|
196
|
+
export interface SecureStoreMigrateOptions extends SecureStoreHandlerCommon {
|
|
197
|
+
/**
|
|
198
|
+
* Optional passphrase reader for standalone CLI migration. A prior
|
|
199
|
+
* `secure-store unlock` command only unlocks that process-local keyring, so
|
|
200
|
+
* standalone migrate can prompt and install the key in this process instead
|
|
201
|
+
* of pretending another process still has it.
|
|
202
|
+
*/
|
|
203
|
+
readPassphrase?: PassphraseReader;
|
|
204
|
+
}
|
|
197
205
|
|
|
198
206
|
export type SecureStoreMigrateReport =
|
|
199
207
|
| ({ ok: true } & MigrateResult)
|
|
200
208
|
| ({
|
|
201
209
|
ok: false;
|
|
202
|
-
reason: "not-initialized" | "locked" | "file-errors";
|
|
210
|
+
reason: "not-initialized" | "locked" | "wrong-passphrase" | "file-errors";
|
|
203
211
|
} & MigrateResult);
|
|
204
212
|
|
|
205
213
|
export async function runSecureStoreMigrate(
|
|
@@ -218,7 +226,13 @@ export async function runSecureStoreMigrate(
|
|
|
218
226
|
}
|
|
219
227
|
|
|
220
228
|
const id = options.keyringId ?? secureStoreDir(memoryDir);
|
|
221
|
-
const key = keyring.getKey(id)
|
|
229
|
+
const key = keyring.getKey(id) ?? await unlockForThisProcess({
|
|
230
|
+
memoryDir,
|
|
231
|
+
header,
|
|
232
|
+
keyringId: id,
|
|
233
|
+
readPassphrase: options.readPassphrase,
|
|
234
|
+
now: options.now,
|
|
235
|
+
});
|
|
222
236
|
if (key === null) {
|
|
223
237
|
return {
|
|
224
238
|
ok: false,
|
|
@@ -228,6 +242,15 @@ export async function runSecureStoreMigrate(
|
|
|
228
242
|
errors: [],
|
|
229
243
|
};
|
|
230
244
|
}
|
|
245
|
+
if (key === "wrong-passphrase") {
|
|
246
|
+
return {
|
|
247
|
+
ok: false,
|
|
248
|
+
reason: "wrong-passphrase",
|
|
249
|
+
encrypted: 0,
|
|
250
|
+
skipped: 0,
|
|
251
|
+
errors: [],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
231
254
|
|
|
232
255
|
const result = await migrateMemoryDirToEncrypted(memoryDir, key);
|
|
233
256
|
if (result.errors.length > 0) {
|
|
@@ -238,13 +261,20 @@ export async function runSecureStoreMigrate(
|
|
|
238
261
|
|
|
239
262
|
// ─── disable/decrypt ─────────────────────────────────────────────────
|
|
240
263
|
|
|
241
|
-
export interface SecureStoreDisableOptions extends SecureStoreHandlerCommon {
|
|
264
|
+
export interface SecureStoreDisableOptions extends SecureStoreHandlerCommon {
|
|
265
|
+
/**
|
|
266
|
+
* Optional passphrase reader for standalone CLI decrypt/disable. See
|
|
267
|
+
* SecureStoreMigrateOptions.readPassphrase for the process-local keyring
|
|
268
|
+
* contract.
|
|
269
|
+
*/
|
|
270
|
+
readPassphrase?: PassphraseReader;
|
|
271
|
+
}
|
|
242
272
|
|
|
243
273
|
export type SecureStoreDisableReport =
|
|
244
274
|
| ({ ok: true } & DecryptResult)
|
|
245
275
|
| ({
|
|
246
276
|
ok: false;
|
|
247
|
-
reason: "not-initialized" | "locked" | "file-errors";
|
|
277
|
+
reason: "not-initialized" | "locked" | "wrong-passphrase" | "file-errors";
|
|
248
278
|
} & DecryptResult);
|
|
249
279
|
|
|
250
280
|
export async function runSecureStoreDisable(
|
|
@@ -263,7 +293,13 @@ export async function runSecureStoreDisable(
|
|
|
263
293
|
}
|
|
264
294
|
|
|
265
295
|
const id = options.keyringId ?? secureStoreDir(memoryDir);
|
|
266
|
-
const key = keyring.getKey(id)
|
|
296
|
+
const key = keyring.getKey(id) ?? await unlockForThisProcess({
|
|
297
|
+
memoryDir,
|
|
298
|
+
header,
|
|
299
|
+
keyringId: id,
|
|
300
|
+
readPassphrase: options.readPassphrase,
|
|
301
|
+
now: options.now,
|
|
302
|
+
});
|
|
267
303
|
if (key === null) {
|
|
268
304
|
return {
|
|
269
305
|
ok: false,
|
|
@@ -273,6 +309,15 @@ export async function runSecureStoreDisable(
|
|
|
273
309
|
errors: [],
|
|
274
310
|
};
|
|
275
311
|
}
|
|
312
|
+
if (key === "wrong-passphrase") {
|
|
313
|
+
return {
|
|
314
|
+
ok: false,
|
|
315
|
+
reason: "wrong-passphrase",
|
|
316
|
+
decrypted: 0,
|
|
317
|
+
skipped: 0,
|
|
318
|
+
errors: [],
|
|
319
|
+
};
|
|
320
|
+
}
|
|
276
321
|
|
|
277
322
|
const result = await decryptMemoryDirToPlaintext(memoryDir, key);
|
|
278
323
|
if (result.errors.length > 0) {
|
|
@@ -353,3 +398,22 @@ function resolveParams(
|
|
|
353
398
|
if (algorithm === "scrypt") return { ...DEFAULT_SCRYPT_PARAMS };
|
|
354
399
|
return { ...DEFAULT_ARGON2ID_PARAMS };
|
|
355
400
|
}
|
|
401
|
+
|
|
402
|
+
async function unlockForThisProcess(options: {
|
|
403
|
+
memoryDir: string;
|
|
404
|
+
header: SecureStoreHeader;
|
|
405
|
+
keyringId: string;
|
|
406
|
+
readPassphrase?: PassphraseReader;
|
|
407
|
+
now?: () => Date;
|
|
408
|
+
}): Promise<Buffer | null | "wrong-passphrase"> {
|
|
409
|
+
if (!options.readPassphrase) return null;
|
|
410
|
+
const passphrase = await options.readPassphrase("Enter passphrase: ");
|
|
411
|
+
validatePassphrase(passphrase);
|
|
412
|
+
const candidateKey = deriveKeyFromHeader(options.header, passphrase);
|
|
413
|
+
if (!verifyKey(options.header, candidateKey)) {
|
|
414
|
+
candidateKey.fill(0);
|
|
415
|
+
return "wrong-passphrase";
|
|
416
|
+
}
|
|
417
|
+
keyring.unlock(options.keyringId, candidateKey, options.now ?? (() => new Date()));
|
|
418
|
+
return candidateKey;
|
|
419
|
+
}
|
|
@@ -27,13 +27,13 @@ export function renderInitReport(report: SecureStoreInitReport): string {
|
|
|
27
27
|
lines.push("");
|
|
28
28
|
lines.push("Note: init does NOT auto-unlock the store. Run");
|
|
29
29
|
lines.push(" remnic engram secure-store unlock");
|
|
30
|
-
lines.push("to register the master key
|
|
30
|
+
lines.push("to register the master key in the current Remnic process.");
|
|
31
31
|
return lines.join("\n");
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export function renderUnlockReport(report: SecureStoreUnlockReport): string {
|
|
35
35
|
if (report.ok) {
|
|
36
|
-
return `OK — secure-store unlocked at ${report.unlockedAt} (algorithm=${report.algorithm}).`;
|
|
36
|
+
return `OK — secure-store unlocked in this process at ${report.unlockedAt} (algorithm=${report.algorithm}).`;
|
|
37
37
|
}
|
|
38
38
|
if (report.reason === "not-initialized") {
|
|
39
39
|
return "ERR — secure-store is not initialized. Run 'remnic engram secure-store init' first.";
|
|
@@ -43,9 +43,9 @@ export function renderUnlockReport(report: SecureStoreUnlockReport): string {
|
|
|
43
43
|
|
|
44
44
|
export function renderLockReport(report: SecureStoreLockReport): string {
|
|
45
45
|
if (report.cleared) {
|
|
46
|
-
return "OK — secure-store key cleared from in-memory keyring.";
|
|
46
|
+
return "OK — secure-store key cleared from this process's in-memory keyring.";
|
|
47
47
|
}
|
|
48
|
-
return "OK — secure-store was already locked (no in-memory key to clear).";
|
|
48
|
+
return "OK — secure-store was already locked in this process (no in-memory key to clear).";
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export function renderMigrateReport(report: SecureStoreMigrateReport): string {
|
|
@@ -53,7 +53,10 @@ export function renderMigrateReport(report: SecureStoreMigrateReport): string {
|
|
|
53
53
|
return "ERR — secure-store is not initialized. Run 'remnic engram secure-store init' first.";
|
|
54
54
|
}
|
|
55
55
|
if (!report.ok && report.reason === "locked") {
|
|
56
|
-
return "ERR — secure-store is locked. Run
|
|
56
|
+
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.";
|
|
57
|
+
}
|
|
58
|
+
if (!report.ok && report.reason === "wrong-passphrase") {
|
|
59
|
+
return "ERR — wrong passphrase.";
|
|
57
60
|
}
|
|
58
61
|
|
|
59
62
|
const lines: string[] = [];
|
|
@@ -75,7 +78,10 @@ export function renderDisableReport(report: SecureStoreDisableReport): string {
|
|
|
75
78
|
return "ERR — secure-store is not initialized. Run 'remnic engram secure-store init' first.";
|
|
76
79
|
}
|
|
77
80
|
if (!report.ok && report.reason === "locked") {
|
|
78
|
-
return "ERR — secure-store is locked. Run
|
|
81
|
+
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.";
|
|
82
|
+
}
|
|
83
|
+
if (!report.ok && report.reason === "wrong-passphrase") {
|
|
84
|
+
return "ERR — wrong passphrase.";
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
const lines: string[] = [];
|
|
@@ -105,7 +111,7 @@ export function renderStatusReport(report: SecureStoreStatusReport): string {
|
|
|
105
111
|
return lines.join("\n");
|
|
106
112
|
}
|
|
107
113
|
lines.push(`createdAt: ${report.createdAt ?? "n/a"}`);
|
|
108
|
-
lines.push(`
|
|
114
|
+
lines.push(`lockedInThisProcess: ${report.locked ? "yes" : "no"}`);
|
|
109
115
|
if (!report.locked) {
|
|
110
116
|
lines.push(`lastUnlockAt: ${report.unlockedAt ?? "n/a"}`);
|
|
111
117
|
}
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* Naming: `secure-fs.ts` (not `vault-fs.ts`) — see `kdf.ts` naming note.
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
-
import { createCipheriv, randomBytes } from "node:crypto";
|
|
46
|
+
import { createCipheriv, randomBytes, randomUUID } from "node:crypto";
|
|
47
47
|
import { lstat, mkdir, open as openFile, readFile, readdir, rename, unlink, writeFile } from "node:fs/promises";
|
|
48
48
|
import path from "node:path";
|
|
49
49
|
|
|
@@ -56,6 +56,7 @@ import {
|
|
|
56
56
|
IV_LENGTH,
|
|
57
57
|
generateSalt,
|
|
58
58
|
open as openEnvelope,
|
|
59
|
+
parseEnvelope,
|
|
59
60
|
seal,
|
|
60
61
|
} from "./cipher.js";
|
|
61
62
|
|
|
@@ -167,6 +168,7 @@ export function decryptFileBody(buf: Buffer, key: Buffer, aad?: Buffer): Buffer
|
|
|
167
168
|
throw new Error(`decryptFileBody: unknown flags byte 0x${flags.toString(16).padStart(2, "0")}`);
|
|
168
169
|
}
|
|
169
170
|
const envelope = buf.subarray(MAGIC_HEADER_SIZE);
|
|
171
|
+
parseEnvelope(envelope);
|
|
170
172
|
try {
|
|
171
173
|
return openEnvelope(key, envelope, aad ? { aad } : {});
|
|
172
174
|
} catch (err) {
|
|
@@ -270,7 +272,7 @@ export interface WriteMaybeEncryptedFileOptions {
|
|
|
270
272
|
* - If `key` is provided and non-null, encrypt the content first.
|
|
271
273
|
* - If `key` is null, write the content as plain UTF-8 (unencrypted store).
|
|
272
274
|
*
|
|
273
|
-
* Writes atomically: content is written to a
|
|
275
|
+
* Writes atomically: content is written to a unique temp file
|
|
274
276
|
* first, then renamed into place (CLAUDE.md gotcha #54 — never delete
|
|
275
277
|
* before write).
|
|
276
278
|
*/
|
|
@@ -293,7 +295,7 @@ export async function writeMaybeEncryptedFile(
|
|
|
293
295
|
}
|
|
294
296
|
|
|
295
297
|
if (atomic) {
|
|
296
|
-
const tempPath =
|
|
298
|
+
const tempPath = uniqueAtomicTempPath(filePath, "tmp");
|
|
297
299
|
try {
|
|
298
300
|
await writeFile(tempPath, data, { mode });
|
|
299
301
|
await rename(tempPath, filePath);
|
|
@@ -445,7 +447,7 @@ export async function migrateMemoryDirToEncrypted(
|
|
|
445
447
|
const encrypted = encryptFileBody(content, key, aad);
|
|
446
448
|
|
|
447
449
|
// Atomic write: temp → rename (gotcha #54).
|
|
448
|
-
const tempPath =
|
|
450
|
+
const tempPath = uniqueAtomicTempPath(filePath, "enc-tmp");
|
|
449
451
|
try {
|
|
450
452
|
await writeFile(tempPath, encrypted, { mode: 0o600 });
|
|
451
453
|
await rename(tempPath, filePath);
|
|
@@ -498,7 +500,7 @@ export async function decryptMemoryDirToPlaintext(
|
|
|
498
500
|
|
|
499
501
|
const aad = filePathAad(filePath, storageAadRootForFile(filePath, dir));
|
|
500
502
|
const plaintext = decryptFileBody(buf, key, aad);
|
|
501
|
-
const tempPath =
|
|
503
|
+
const tempPath = uniqueAtomicTempPath(filePath, "dec-tmp");
|
|
502
504
|
try {
|
|
503
505
|
await writeFile(tempPath, plaintext, { mode: 0o600 });
|
|
504
506
|
await rename(tempPath, filePath);
|
|
@@ -526,6 +528,10 @@ export async function decryptMemoryDirToPlaintext(
|
|
|
526
528
|
// Internal helpers
|
|
527
529
|
// ---------------------------------------------------------------------------
|
|
528
530
|
|
|
531
|
+
function uniqueAtomicTempPath(filePath: string, label: string): string {
|
|
532
|
+
return `${filePath}.${label}-${process.pid}-${Date.now()}-${randomUUID()}`;
|
|
533
|
+
}
|
|
534
|
+
|
|
529
535
|
/**
|
|
530
536
|
* Recursively collect files under `dir` that are read through the
|
|
531
537
|
* storage-layer secure-store helpers, excluding symlinked entries and
|
|
@@ -36,6 +36,13 @@ import {
|
|
|
36
36
|
parseHeader,
|
|
37
37
|
validateHeader,
|
|
38
38
|
} from "./header.js";
|
|
39
|
+
import {
|
|
40
|
+
FILE_FORMAT_FLAGS,
|
|
41
|
+
FILE_FORMAT_VERSION,
|
|
42
|
+
MAGIC_BYTES,
|
|
43
|
+
SecureStoreDecryptError,
|
|
44
|
+
decryptFileBody,
|
|
45
|
+
} from "./secure-fs.js";
|
|
39
46
|
import {
|
|
40
47
|
DEFAULT_ARGON2ID_PARAMS,
|
|
41
48
|
DEFAULT_SCRYPT_PARAMS,
|
|
@@ -60,6 +67,12 @@ import {
|
|
|
60
67
|
validateMetadata,
|
|
61
68
|
} from "./metadata.js";
|
|
62
69
|
import { createPassphraseReader } from "./passphrase-reader.js";
|
|
70
|
+
import {
|
|
71
|
+
renderInitReport,
|
|
72
|
+
renderLockReport,
|
|
73
|
+
renderStatusReport,
|
|
74
|
+
renderUnlockReport,
|
|
75
|
+
} from "./cli-renderer.js";
|
|
63
76
|
|
|
64
77
|
/** Cheap scrypt params for tests — still hex-correct but ~milliseconds. */
|
|
65
78
|
const FAST_SCRYPT: ScryptParams = {
|
|
@@ -112,6 +125,46 @@ test("deriveKeyScrypt with default OWASP-acceptable params produces a 32-byte ke
|
|
|
112
125
|
assert.equal(DEFAULT_SCRYPT_PARAMS.N, 1 << 17);
|
|
113
126
|
});
|
|
114
127
|
|
|
128
|
+
test("secure-store CLI renderers describe process-local unlock scope, not daemon state", () => {
|
|
129
|
+
const init = renderInitReport({
|
|
130
|
+
ok: true,
|
|
131
|
+
headerPath: "/tmp/memory/.secure-store/header.json",
|
|
132
|
+
createdAt: "2026-05-21T00:00:00.000Z",
|
|
133
|
+
kdf: {
|
|
134
|
+
algorithm: "scrypt",
|
|
135
|
+
params: FAST_SCRYPT,
|
|
136
|
+
salt: Buffer.alloc(KDF_SALT_LENGTH, 0x11).toString("hex"),
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
assert.match(init, /current Remnic process/);
|
|
140
|
+
assert.doesNotMatch(init, /running daemon/);
|
|
141
|
+
|
|
142
|
+
assert.match(
|
|
143
|
+
renderUnlockReport({
|
|
144
|
+
ok: true,
|
|
145
|
+
unlockedAt: "2026-05-21T00:00:01.000Z",
|
|
146
|
+
algorithm: "scrypt",
|
|
147
|
+
}),
|
|
148
|
+
/unlocked in this process/,
|
|
149
|
+
);
|
|
150
|
+
assert.match(renderLockReport({ ok: true, cleared: true }), /this process's in-memory keyring/);
|
|
151
|
+
assert.match(
|
|
152
|
+
renderStatusReport({
|
|
153
|
+
initialized: true,
|
|
154
|
+
headerPath: "/tmp/memory/.secure-store/header.json",
|
|
155
|
+
locked: false,
|
|
156
|
+
unlockedAt: "2026-05-21T00:00:01.000Z",
|
|
157
|
+
createdAt: "2026-05-21T00:00:00.000Z",
|
|
158
|
+
kdf: {
|
|
159
|
+
algorithm: "scrypt",
|
|
160
|
+
params: FAST_SCRYPT,
|
|
161
|
+
salt: Buffer.alloc(KDF_SALT_LENGTH, 0x22).toString("hex"),
|
|
162
|
+
},
|
|
163
|
+
}),
|
|
164
|
+
/lockedInThisProcess: no/,
|
|
165
|
+
);
|
|
166
|
+
});
|
|
167
|
+
|
|
115
168
|
test("deriveKeyScrypt rejects empty passphrase", () => {
|
|
116
169
|
const salt = Buffer.alloc(KDF_SALT_LENGTH, 0);
|
|
117
170
|
assert.throws(() => deriveKeyScrypt("", salt, FAST_SCRYPT), /passphrase/);
|
|
@@ -238,6 +291,23 @@ test("seal/open round-trip on an empty payload", () => {
|
|
|
238
291
|
assert.equal(opened.length, 0);
|
|
239
292
|
});
|
|
240
293
|
|
|
294
|
+
test("decryptFileBody reports truncated envelopes as structural errors", () => {
|
|
295
|
+
const truncated = Buffer.concat([
|
|
296
|
+
MAGIC_BYTES,
|
|
297
|
+
Buffer.from([FILE_FORMAT_VERSION, FILE_FORMAT_FLAGS]),
|
|
298
|
+
Buffer.alloc(ENVELOPE_HEADER_SIZE - 1),
|
|
299
|
+
]);
|
|
300
|
+
assert.throws(
|
|
301
|
+
() => decryptFileBody(truncated, Buffer.alloc(KDF_KEY_LENGTH, 0x11)),
|
|
302
|
+
(error) => {
|
|
303
|
+
assert.ok(error instanceof Error);
|
|
304
|
+
assert.equal(error instanceof SecureStoreDecryptError, false);
|
|
305
|
+
assert.match(error.message, /envelope too short/);
|
|
306
|
+
return true;
|
|
307
|
+
},
|
|
308
|
+
);
|
|
309
|
+
});
|
|
310
|
+
|
|
241
311
|
test("seal produces a different ciphertext for the same plaintext (random IV)", () => {
|
|
242
312
|
const salt = generateSalt();
|
|
243
313
|
const key = deriveKeyScrypt("pw", salt, FAST_SCRYPT);
|
|
@@ -8,12 +8,14 @@ import assert from "node:assert/strict";
|
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
10
|
CONSOLIDATION_OPERATORS,
|
|
11
|
+
findSimilarClusters,
|
|
11
12
|
isConsolidationOperator,
|
|
12
13
|
isSemanticConsolidationLlmOperator,
|
|
13
14
|
isValidDerivedFromEntry,
|
|
14
15
|
type ConsolidationOperator,
|
|
15
16
|
type SemanticConsolidationLlmOperator,
|
|
16
17
|
} from "./semantic-consolidation.js";
|
|
18
|
+
import type { MemoryCategory, MemoryFile } from "./types.js";
|
|
17
19
|
// The standalone module is the source of truth; semantic-consolidation.ts
|
|
18
20
|
// re-exports it. This test import proves both surfaces work.
|
|
19
21
|
import {
|
|
@@ -180,3 +182,46 @@ test("SemanticConsolidationLlmOperator type literally excludes pattern-reinforce
|
|
|
180
182
|
const update: SemanticConsolidationLlmOperator = "update";
|
|
181
183
|
assert.equal([split, merge, update].length, 3);
|
|
182
184
|
});
|
|
185
|
+
|
|
186
|
+
test("findSimilarClusters never exceeds maxPerRun after prior clusters consume budget", () => {
|
|
187
|
+
const memories = [
|
|
188
|
+
consolidationMemory("a-1", "fact", "atlas cache latency shared alpha"),
|
|
189
|
+
consolidationMemory("a-2", "fact", "atlas cache latency shared beta"),
|
|
190
|
+
consolidationMemory("a-3", "fact", "atlas cache latency shared gamma"),
|
|
191
|
+
consolidationMemory("a-4", "fact", "atlas cache latency shared delta"),
|
|
192
|
+
consolidationMemory("b-1", "preference", "aurora rollout dependency shared alpha"),
|
|
193
|
+
consolidationMemory("b-2", "preference", "aurora rollout dependency shared beta"),
|
|
194
|
+
];
|
|
195
|
+
|
|
196
|
+
const clusters = findSimilarClusters(memories, {
|
|
197
|
+
threshold: 0.1,
|
|
198
|
+
minClusterSize: 2,
|
|
199
|
+
excludeCategories: [],
|
|
200
|
+
maxPerRun: 5,
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
const totalMemories = clusters.reduce((sum, cluster) => sum + cluster.memories.length, 0);
|
|
204
|
+
assert.equal(totalMemories, 4);
|
|
205
|
+
assert.deepEqual(
|
|
206
|
+
clusters.map((cluster) => cluster.memories.map((memory) => memory.frontmatter.id)),
|
|
207
|
+
[["a-1", "a-2", "a-3", "a-4"]],
|
|
208
|
+
);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
function consolidationMemory(id: string, category: MemoryCategory, content: string): MemoryFile {
|
|
212
|
+
return {
|
|
213
|
+
path: `${category}/${id}.md`,
|
|
214
|
+
content,
|
|
215
|
+
frontmatter: {
|
|
216
|
+
id,
|
|
217
|
+
category,
|
|
218
|
+
created: "2026-05-21T00:00:00.000Z",
|
|
219
|
+
updated: "2026-05-21T00:00:00.000Z",
|
|
220
|
+
source: "test",
|
|
221
|
+
confidence: 1,
|
|
222
|
+
confidenceTier: "explicit",
|
|
223
|
+
tags: [],
|
|
224
|
+
status: "active",
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
@@ -95,13 +95,15 @@ export function findSimilarClusters(
|
|
|
95
95
|
const clustered = new Set<string>();
|
|
96
96
|
|
|
97
97
|
for (let i = 0; i < tokenized.length && totalCandidates < config.maxPerRun; i++) {
|
|
98
|
+
const remainingBudget = config.maxPerRun - totalCandidates;
|
|
99
|
+
if (remainingBudget < config.minClusterSize) break;
|
|
98
100
|
if (clustered.has(tokenized[i].memory.frontmatter.id)) continue;
|
|
99
101
|
|
|
100
102
|
const cluster: MemoryFile[] = [tokenized[i].memory];
|
|
101
103
|
let totalOverlap = 0;
|
|
102
104
|
let comparisons = 0;
|
|
103
105
|
|
|
104
|
-
for (let j = i + 1; j < tokenized.length; j++) {
|
|
106
|
+
for (let j = i + 1; j < tokenized.length && cluster.length < remainingBudget; j++) {
|
|
105
107
|
if (clustered.has(tokenized[j].memory.frontmatter.id)) continue;
|
|
106
108
|
|
|
107
109
|
const aTokens = tokenized[i].tokens;
|
|
@@ -117,8 +119,6 @@ export function findSimilarClusters(
|
|
|
117
119
|
cluster.push(tokenized[j].memory);
|
|
118
120
|
totalOverlap += score;
|
|
119
121
|
comparisons++;
|
|
120
|
-
// Enforce maxPerRun within a single cluster
|
|
121
|
-
if (totalCandidates + cluster.length >= config.maxPerRun) break;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|