@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
|
@@ -58,6 +58,8 @@ interface TokenEntry {
|
|
|
58
58
|
token: string;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
type PersistRollbackManifest = () => Promise<void>;
|
|
62
|
+
|
|
61
63
|
const MARKER_FILE = ".migrated-from-engram";
|
|
62
64
|
const LOCK_FILE = ".migration.lock";
|
|
63
65
|
const ROLLBACK_MANIFEST = ".rollback.json";
|
|
@@ -163,11 +165,32 @@ async function pathExistsNoFollow(filePath: string): Promise<boolean> {
|
|
|
163
165
|
}
|
|
164
166
|
}
|
|
165
167
|
|
|
168
|
+
async function assertExistingRegularFileNoFollow(filePath: string, label: string): Promise<void> {
|
|
169
|
+
const fileStat = await lstat(filePath);
|
|
170
|
+
if (fileStat.isSymbolicLink()) {
|
|
171
|
+
throw new Error(`${label} must not be a symlink: ${filePath}`);
|
|
172
|
+
}
|
|
173
|
+
if (!fileStat.isFile()) {
|
|
174
|
+
throw new Error(`${label} must be a regular file: ${filePath}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
async function isExistingRegularFileNoFollow(filePath: string): Promise<boolean> {
|
|
179
|
+
try {
|
|
180
|
+
const fileStat = await lstat(filePath);
|
|
181
|
+
return fileStat.isFile() && !fileStat.isSymbolicLink();
|
|
182
|
+
} catch (error) {
|
|
183
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") return false;
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
166
188
|
async function copyTreeMissing(
|
|
167
189
|
source: string,
|
|
168
190
|
destination: string,
|
|
169
191
|
copied: string[],
|
|
170
192
|
manifest: RollbackManifest,
|
|
193
|
+
persistManifest?: PersistRollbackManifest,
|
|
171
194
|
isRoot = true,
|
|
172
195
|
): Promise<void> {
|
|
173
196
|
if (!existsSync(source)) return;
|
|
@@ -190,6 +213,7 @@ async function copyTreeMissing(
|
|
|
190
213
|
path.join(destination, entry.name),
|
|
191
214
|
copied,
|
|
192
215
|
manifest,
|
|
216
|
+
persistManifest,
|
|
193
217
|
false,
|
|
194
218
|
);
|
|
195
219
|
}
|
|
@@ -199,7 +223,7 @@ async function copyTreeMissing(
|
|
|
199
223
|
if (await pathExistsNoFollow(destination)) return;
|
|
200
224
|
await ensureParent(destination);
|
|
201
225
|
await copyFile(source, destination);
|
|
202
|
-
await recordCreatedPath(destination, manifest);
|
|
226
|
+
await recordCreatedPath(destination, manifest, persistManifest);
|
|
203
227
|
copied.push(destination);
|
|
204
228
|
}
|
|
205
229
|
|
|
@@ -251,6 +275,7 @@ function isPlainJsonObject(value: unknown): value is Record<string, unknown> {
|
|
|
251
275
|
|
|
252
276
|
async function rewriteTokensIfPresent(filePath: string): Promise<number> {
|
|
253
277
|
if (!existsSync(filePath)) return 0;
|
|
278
|
+
await assertExistingRegularFileNoFollow(filePath, "Remnic token store");
|
|
254
279
|
await secureTokenFilePermissions(filePath);
|
|
255
280
|
let raw: Record<string, unknown>;
|
|
256
281
|
try {
|
|
@@ -294,8 +319,13 @@ async function mergeLegacyTokens(
|
|
|
294
319
|
homeDir: string,
|
|
295
320
|
manifest: RollbackManifest,
|
|
296
321
|
backupExisting: boolean,
|
|
322
|
+
persistManifest?: PersistRollbackManifest,
|
|
297
323
|
): Promise<number> {
|
|
324
|
+
if (existsSync(legacyTokensPath)) {
|
|
325
|
+
await assertExistingRegularFileNoFollow(legacyTokensPath, "legacy Engram token store");
|
|
326
|
+
}
|
|
298
327
|
if (!existsSync(remnicTokensPath)) return 0;
|
|
328
|
+
await assertExistingRegularFileNoFollow(remnicTokensPath, "Remnic token store");
|
|
299
329
|
await secureTokenFilePermissions(remnicTokensPath);
|
|
300
330
|
if (!existsSync(legacyTokensPath)) return rewriteTokensIfPresent(remnicTokensPath);
|
|
301
331
|
|
|
@@ -325,7 +355,7 @@ async function mergeLegacyTokens(
|
|
|
325
355
|
});
|
|
326
356
|
|
|
327
357
|
if (backupExisting) {
|
|
328
|
-
await backupFile(remnicTokensPath, originalRemnic, homeDir, manifest);
|
|
358
|
+
await backupFile(remnicTokensPath, originalRemnic, homeDir, manifest, persistManifest);
|
|
329
359
|
}
|
|
330
360
|
|
|
331
361
|
await writeTokenStoreFile(
|
|
@@ -364,7 +394,7 @@ async function mergeLegacyTokens(
|
|
|
364
394
|
if (!changed) return rewritten;
|
|
365
395
|
|
|
366
396
|
if (backupExisting) {
|
|
367
|
-
await backupFile(remnicTokensPath, originalRemnic, homeDir, manifest);
|
|
397
|
+
await backupFile(remnicTokensPath, originalRemnic, homeDir, manifest, persistManifest);
|
|
368
398
|
}
|
|
369
399
|
|
|
370
400
|
await writeTokenStoreFile(
|
|
@@ -378,8 +408,16 @@ async function rewriteJsonFile(
|
|
|
378
408
|
targetPath: string,
|
|
379
409
|
homeDir: string,
|
|
380
410
|
manifest: RollbackManifest,
|
|
411
|
+
persistManifest?: PersistRollbackManifest,
|
|
381
412
|
): Promise<boolean> {
|
|
382
413
|
if (!existsSync(targetPath)) return false;
|
|
414
|
+
const targetStat = await lstat(targetPath);
|
|
415
|
+
if (targetStat.isSymbolicLink()) return false;
|
|
416
|
+
if (!targetStat.isFile()) {
|
|
417
|
+
const error = new Error(`connector config must be a regular file: ${targetPath}`) as NodeJS.ErrnoException;
|
|
418
|
+
error.code = targetStat.isDirectory() ? "EISDIR" : "EINVAL";
|
|
419
|
+
throw error;
|
|
420
|
+
}
|
|
383
421
|
|
|
384
422
|
const original = await readFile(targetPath, "utf8");
|
|
385
423
|
let parsed: unknown;
|
|
@@ -408,7 +446,7 @@ async function rewriteJsonFile(
|
|
|
408
446
|
const next = `${rewritten}\n`;
|
|
409
447
|
if (!changed && next === original) return false;
|
|
410
448
|
|
|
411
|
-
await backupFile(targetPath, original, homeDir, manifest);
|
|
449
|
+
await backupFile(targetPath, original, homeDir, manifest, persistManifest);
|
|
412
450
|
await writeFile(targetPath, next, "utf8");
|
|
413
451
|
return true;
|
|
414
452
|
}
|
|
@@ -418,6 +456,7 @@ async function backupFile(
|
|
|
418
456
|
originalContent: string,
|
|
419
457
|
homeDir: string,
|
|
420
458
|
manifest: RollbackManifest,
|
|
459
|
+
persistManifest?: PersistRollbackManifest,
|
|
421
460
|
): Promise<void> {
|
|
422
461
|
if (manifest.entries.some((entry) => entry.targetPath === targetPath && entry.backupPath)) {
|
|
423
462
|
return;
|
|
@@ -433,11 +472,17 @@ async function backupFile(
|
|
|
433
472
|
await chmod(backupPath, originalMode);
|
|
434
473
|
}
|
|
435
474
|
manifest.entries.push({ targetPath, backupPath });
|
|
475
|
+
await persistManifest?.();
|
|
436
476
|
}
|
|
437
477
|
|
|
438
|
-
async function recordCreatedPath(
|
|
478
|
+
async function recordCreatedPath(
|
|
479
|
+
filePath: string,
|
|
480
|
+
manifest: RollbackManifest,
|
|
481
|
+
persistManifest?: PersistRollbackManifest,
|
|
482
|
+
): Promise<void> {
|
|
439
483
|
if (manifest.entries.some((entry) => entry.targetPath === filePath)) return;
|
|
440
484
|
manifest.entries.push({ targetPath: filePath, createdByMigration: true });
|
|
485
|
+
await persistManifest?.();
|
|
441
486
|
}
|
|
442
487
|
|
|
443
488
|
function defaultConnectorConfigPaths(homeDir: string, cwd: string): string[] {
|
|
@@ -454,11 +499,12 @@ async function updateConnectorConfigs(
|
|
|
454
499
|
cwd: string,
|
|
455
500
|
options: MigrationOptions | undefined,
|
|
456
501
|
manifest: RollbackManifest,
|
|
502
|
+
persistManifest?: PersistRollbackManifest,
|
|
457
503
|
): Promise<string[]> {
|
|
458
504
|
const updated: string[] = [];
|
|
459
505
|
const candidates = options?.connectorConfigPaths ?? defaultConnectorConfigPaths(homeDir, cwd);
|
|
460
506
|
for (const targetPath of candidates) {
|
|
461
|
-
if (await rewriteJsonFile(targetPath, homeDir, manifest)) {
|
|
507
|
+
if (await rewriteJsonFile(targetPath, homeDir, manifest, persistManifest)) {
|
|
462
508
|
updated.push(targetPath);
|
|
463
509
|
}
|
|
464
510
|
}
|
|
@@ -469,10 +515,12 @@ async function copyLegacyConfig(
|
|
|
469
515
|
homeDir: string,
|
|
470
516
|
copied: string[],
|
|
471
517
|
manifest: RollbackManifest,
|
|
518
|
+
persistManifest?: PersistRollbackManifest,
|
|
472
519
|
): Promise<void> {
|
|
473
520
|
const source = legacyConfigPath(homeDir);
|
|
474
521
|
const destination = remnicConfigPath(homeDir);
|
|
475
522
|
if (!existsSync(source) || existsSync(destination)) return;
|
|
523
|
+
if (!(await isExistingRegularFileNoFollow(source))) return;
|
|
476
524
|
await ensureParent(destination);
|
|
477
525
|
const original = await readFile(source, "utf8");
|
|
478
526
|
let next = rewriteRemnicText(original);
|
|
@@ -487,7 +535,7 @@ async function copyLegacyConfig(
|
|
|
487
535
|
// Keep rewritten text when config is not JSON.
|
|
488
536
|
}
|
|
489
537
|
await writeFile(destination, `${next.trimEnd()}\n`, "utf8");
|
|
490
|
-
await recordCreatedPath(destination, manifest);
|
|
538
|
+
await recordCreatedPath(destination, manifest, persistManifest);
|
|
491
539
|
copied.push(destination);
|
|
492
540
|
}
|
|
493
541
|
|
|
@@ -499,6 +547,7 @@ async function migrateServices(
|
|
|
499
547
|
homeDir: string,
|
|
500
548
|
options: MigrationOptions | undefined,
|
|
501
549
|
manifest: RollbackManifest,
|
|
550
|
+
persistManifest?: PersistRollbackManifest,
|
|
502
551
|
): Promise<string[]> {
|
|
503
552
|
const logger = resolveLogger(options);
|
|
504
553
|
const exec = resolveExec(options);
|
|
@@ -509,10 +558,11 @@ async function migrateServices(
|
|
|
509
558
|
const legacyPlist = path.join(homeDir, "Library", "LaunchAgents", "ai.engram.daemon.plist");
|
|
510
559
|
const remnicPlist = path.join(homeDir, "Library", "LaunchAgents", "ai.remnic.daemon.plist");
|
|
511
560
|
if (existsSync(legacyPlist) && !existsSync(remnicPlist)) {
|
|
561
|
+
if (!(await isExistingRegularFileNoFollow(legacyPlist))) return servicesReinstalled;
|
|
512
562
|
const next = rewriteServiceText(await readFile(legacyPlist, "utf8"));
|
|
513
563
|
await ensureParent(remnicPlist);
|
|
514
564
|
await writeFile(remnicPlist, next, "utf8");
|
|
515
|
-
await recordCreatedPath(remnicPlist, manifest);
|
|
565
|
+
await recordCreatedPath(remnicPlist, manifest, persistManifest);
|
|
516
566
|
try {
|
|
517
567
|
exec("launchctl", ["unload", legacyPlist]);
|
|
518
568
|
} catch {
|
|
@@ -533,10 +583,11 @@ async function migrateServices(
|
|
|
533
583
|
const legacyUnit = path.join(homeDir, ".config", "systemd", "user", "engram.service");
|
|
534
584
|
const remnicUnit = path.join(homeDir, ".config", "systemd", "user", "remnic.service");
|
|
535
585
|
if (existsSync(legacyUnit) && !existsSync(remnicUnit)) {
|
|
586
|
+
if (!(await isExistingRegularFileNoFollow(legacyUnit))) return servicesReinstalled;
|
|
536
587
|
const next = rewriteServiceText(await readFile(legacyUnit, "utf8"));
|
|
537
588
|
await ensureParent(remnicUnit);
|
|
538
589
|
await writeFile(remnicUnit, next, "utf8");
|
|
539
|
-
await recordCreatedPath(remnicUnit, manifest);
|
|
590
|
+
await recordCreatedPath(remnicUnit, manifest, persistManifest);
|
|
540
591
|
try {
|
|
541
592
|
exec("systemctl", ["--user", "stop", "engram.service"]);
|
|
542
593
|
exec("systemctl", ["--user", "disable", "engram.service"]);
|
|
@@ -738,16 +789,18 @@ export async function migrateFromEngram(options?: MigrationOptions): Promise<Mig
|
|
|
738
789
|
};
|
|
739
790
|
}
|
|
740
791
|
|
|
741
|
-
const manifest: RollbackManifest = {
|
|
792
|
+
const manifest: RollbackManifest = await readRollbackManifest(homeDir) ?? {
|
|
742
793
|
version: 1,
|
|
743
794
|
createdAt: new Date().toISOString(),
|
|
744
795
|
entries: [],
|
|
745
796
|
};
|
|
797
|
+
const persistManifest = () => writeRollbackManifest(homeDir, manifest);
|
|
746
798
|
|
|
747
799
|
logger("First run after Engram -> Remnic rename. Migrating...");
|
|
748
800
|
await mkdir(remnicRoot(homeDir), { recursive: true });
|
|
749
|
-
await
|
|
750
|
-
await
|
|
801
|
+
await persistManifest();
|
|
802
|
+
await copyTreeMissing(legacyRoot(homeDir), remnicRoot(homeDir), copied, manifest, persistManifest);
|
|
803
|
+
await copyLegacyConfig(homeDir, copied, manifest, persistManifest);
|
|
751
804
|
|
|
752
805
|
const legacyTokens = path.join(legacyRoot(homeDir), "tokens.json");
|
|
753
806
|
const remnicTokens = path.join(remnicRoot(homeDir), "tokens.json");
|
|
@@ -760,18 +813,19 @@ export async function migrateFromEngram(options?: MigrationOptions): Promise<Mig
|
|
|
760
813
|
homeDir,
|
|
761
814
|
manifest,
|
|
762
815
|
true,
|
|
816
|
+
persistManifest,
|
|
763
817
|
);
|
|
764
818
|
}
|
|
765
819
|
if (existsSync(remnicTokens)) {
|
|
766
820
|
logger("tokens copied to ~/.remnic/tokens.json (legacy prefixes rewritten)");
|
|
767
821
|
}
|
|
768
822
|
|
|
769
|
-
const updatedConfigs = await updateConnectorConfigs(homeDir, cwd, options, manifest);
|
|
823
|
+
const updatedConfigs = await updateConnectorConfigs(homeDir, cwd, options, manifest, persistManifest);
|
|
770
824
|
for (const updated of updatedConfigs) {
|
|
771
825
|
logger(`Updated connector config: ${updated}`);
|
|
772
826
|
}
|
|
773
827
|
|
|
774
|
-
servicesReinstalled = await migrateServices(homeDir, options, manifest);
|
|
828
|
+
servicesReinstalled = await migrateServices(homeDir, options, manifest, persistManifest);
|
|
775
829
|
await writeRollbackManifest(homeDir, manifest);
|
|
776
830
|
await writeFile(markerPath(homeDir), `${new Date().toISOString()}\n`, "utf8");
|
|
777
831
|
logger("Migration complete. Welcome to Remnic.");
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
|
|
7
|
+
import { ModelRegistry } from "./model-registry.js";
|
|
8
|
+
|
|
9
|
+
test("calculateContextSizes keeps output budget inside a small valid override", () => {
|
|
10
|
+
const dir = mkdtempSync(join(tmpdir(), "remnic-model-registry-"));
|
|
11
|
+
try {
|
|
12
|
+
const registry = new ModelRegistry(dir);
|
|
13
|
+
const sizes = registry.calculateContextSizes("local-model", 1024);
|
|
14
|
+
|
|
15
|
+
assert.equal(sizes.maxOutputTokens, 256);
|
|
16
|
+
assert.match(sizes.description, /1,024 context \(user override\)/);
|
|
17
|
+
assert.ok(sizes.maxInputChars > 0);
|
|
18
|
+
assert.ok(sizes.maxOutputTokens < 1024);
|
|
19
|
+
} finally {
|
|
20
|
+
rmSync(dir, { recursive: true, force: true });
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test("calculateContextSizes ignores invalid or tiny override values before budgeting", () => {
|
|
25
|
+
const dir = mkdtempSync(join(tmpdir(), "remnic-model-registry-"));
|
|
26
|
+
try {
|
|
27
|
+
const registry = new ModelRegistry(dir);
|
|
28
|
+
for (const override of [0, 128, 256, Number.NaN, Number.POSITIVE_INFINITY]) {
|
|
29
|
+
const sizes = registry.calculateContextSizes("local-model", override);
|
|
30
|
+
|
|
31
|
+
assert.match(sizes.description, /32,768 context \(default\)/);
|
|
32
|
+
assert.ok(sizes.maxInputChars > 0);
|
|
33
|
+
assert.ok(sizes.maxOutputTokens < 32768);
|
|
34
|
+
}
|
|
35
|
+
} finally {
|
|
36
|
+
rmSync(dir, { recursive: true, force: true });
|
|
37
|
+
}
|
|
38
|
+
});
|
package/src/model-registry.ts
CHANGED
|
@@ -235,13 +235,20 @@ export class ModelRegistry {
|
|
|
235
235
|
const caps = this.getCapabilities(modelId);
|
|
236
236
|
|
|
237
237
|
// Use override if provided (e.g., user knows their LLM server limits), otherwise use detected caps
|
|
238
|
-
const
|
|
238
|
+
const sanitizedOverride =
|
|
239
|
+
typeof maxContextOverride === "number" &&
|
|
240
|
+
Number.isFinite(maxContextOverride) &&
|
|
241
|
+
Number.isInteger(maxContextOverride) &&
|
|
242
|
+
maxContextOverride >= 1024
|
|
243
|
+
? maxContextOverride
|
|
244
|
+
: undefined;
|
|
245
|
+
const effectiveContextWindow = sanitizedOverride ?? Math.max(1024, Math.floor(caps.contextWindow));
|
|
239
246
|
|
|
240
247
|
// Guardrails: never allow output budget to exceed the model/server context window.
|
|
241
248
|
// If we do, input budget goes negative and we end up generating huge, invalid prompts.
|
|
242
249
|
const overheadTokens = Math.min(1000, Math.floor(effectiveContextWindow / 10)); // <=10% overhead, max 1k
|
|
243
250
|
const minInputTokens = Math.min(512, Math.floor(effectiveContextWindow / 4)); // keep some room even on small contexts
|
|
244
|
-
const minOutputTokens = 256;
|
|
251
|
+
const minOutputTokens = Math.min(256, Math.max(1, effectiveContextWindow - overheadTokens - minInputTokens));
|
|
245
252
|
|
|
246
253
|
// Base output budget: typical output, but scaled down for small contexts.
|
|
247
254
|
let outputTokens = caps.typicalOutputTokens;
|
|
@@ -255,10 +262,8 @@ export class ModelRegistry {
|
|
|
255
262
|
outputTokens = Math.min(outputTokens, Math.floor(effectiveContextWindow / 4));
|
|
256
263
|
|
|
257
264
|
// Clamp output so we always have positive input headroom.
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
Math.min(outputTokens, effectiveContextWindow - overheadTokens - minInputTokens),
|
|
261
|
-
);
|
|
265
|
+
const maxOutputTokens = Math.max(1, effectiveContextWindow - overheadTokens - minInputTokens);
|
|
266
|
+
outputTokens = Math.min(maxOutputTokens, Math.max(minOutputTokens, outputTokens));
|
|
262
267
|
|
|
263
268
|
const availableForInput = Math.max(
|
|
264
269
|
0,
|
|
@@ -268,7 +273,7 @@ export class ModelRegistry {
|
|
|
268
273
|
// Convert to characters (rough estimate: 1 token ≈ 4 chars)
|
|
269
274
|
const maxInputChars = Math.max(0, Math.floor(availableForInput * 3.5)); // Conservative: 3.5 chars/token
|
|
270
275
|
|
|
271
|
-
const source =
|
|
276
|
+
const source = sanitizedOverride ? "user override" : caps.source;
|
|
272
277
|
return {
|
|
273
278
|
maxInputChars,
|
|
274
279
|
maxOutputTokens: outputTokens,
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdir, mkdtemp, rm } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
|
|
7
|
+
import { namespaceCollectionName } from "./search.js";
|
|
8
|
+
import { NamespaceStorageRouter } from "./storage.js";
|
|
9
|
+
import type { PluginConfig } from "../types.js";
|
|
10
|
+
|
|
11
|
+
test("namespace collection names preserve case-variant namespace identity", () => {
|
|
12
|
+
const upper = namespaceCollectionName("remnic", "ProjectA");
|
|
13
|
+
const lower = namespaceCollectionName("remnic", "projecta");
|
|
14
|
+
|
|
15
|
+
assert.notEqual(upper, lower);
|
|
16
|
+
assert.match(upper, /^remnic--ns-[0-9a-f]+$/);
|
|
17
|
+
assert.match(lower, /^remnic--ns-[0-9a-f]+$/);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("namespace storage paths preserve case-variant namespace identity", async () => {
|
|
21
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-ns-"));
|
|
22
|
+
try {
|
|
23
|
+
const config = {
|
|
24
|
+
memoryDir,
|
|
25
|
+
namespacesEnabled: true,
|
|
26
|
+
defaultNamespace: "default",
|
|
27
|
+
entitySchemas: {},
|
|
28
|
+
inlineSourceAttributionFormat: undefined,
|
|
29
|
+
} as unknown as PluginConfig;
|
|
30
|
+
const router = new NamespaceStorageRouter(config);
|
|
31
|
+
|
|
32
|
+
const upper = await router.storageFor("ProjectA");
|
|
33
|
+
const lower = await router.storageFor("projecta");
|
|
34
|
+
|
|
35
|
+
assert.notEqual(upper.dir, lower.dir);
|
|
36
|
+
assert.ok(upper.dir.startsWith(path.join(memoryDir, "namespaces")));
|
|
37
|
+
assert.ok(lower.dir.startsWith(path.join(memoryDir, "namespaces")));
|
|
38
|
+
} finally {
|
|
39
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("namespace storage prefers tokenized roots that contain migrated data", async () => {
|
|
44
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-ns-"));
|
|
45
|
+
try {
|
|
46
|
+
const config = {
|
|
47
|
+
memoryDir,
|
|
48
|
+
namespacesEnabled: true,
|
|
49
|
+
defaultNamespace: "default",
|
|
50
|
+
entitySchemas: {},
|
|
51
|
+
inlineSourceAttributionFormat: undefined,
|
|
52
|
+
} as unknown as PluginConfig;
|
|
53
|
+
await mkdir(path.join(memoryDir, "namespaces", "team-beta"), { recursive: true });
|
|
54
|
+
const router = new NamespaceStorageRouter(config);
|
|
55
|
+
const beforeMigration = await router.storageFor("team-beta");
|
|
56
|
+
assert.equal(beforeMigration.dir, path.join(memoryDir, "namespaces", "team-beta"));
|
|
57
|
+
|
|
58
|
+
await mkdir(path.join(memoryDir, "namespaces", "ns-7465616d2d62657461", "preferences"), {
|
|
59
|
+
recursive: true,
|
|
60
|
+
});
|
|
61
|
+
const afterMigration = await router.storageFor("team-beta");
|
|
62
|
+
assert.equal(afterMigration.dir, path.join(memoryDir, "namespaces", "ns-7465616d2d62657461"));
|
|
63
|
+
} finally {
|
|
64
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
65
|
+
}
|
|
66
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function normalizeNamespaceIdentity(namespace: string): string {
|
|
2
|
+
return namespace.trim();
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function namespaceIdentityToken(namespace: string): string {
|
|
6
|
+
const normalized = normalizeNamespaceIdentity(namespace);
|
|
7
|
+
const bytes = new TextEncoder().encode(normalized);
|
|
8
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
9
|
+
return `ns-${hex || "default"}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function namespaceIdentityFromToken(token: string): string | null {
|
|
13
|
+
if (!token.startsWith("ns-")) return null;
|
|
14
|
+
const hex = token.slice(3);
|
|
15
|
+
if (hex === "default") return "";
|
|
16
|
+
if (hex.length === 0 || hex.length % 2 !== 0 || !/^[0-9a-f]+$/i.test(hex)) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const decoded = Buffer.from(hex, "hex").toString("utf8");
|
|
20
|
+
return namespaceIdentityToken(decoded).toLowerCase() === token.toLowerCase()
|
|
21
|
+
? decoded
|
|
22
|
+
: null;
|
|
23
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdir, mkdtemp, rm } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
import type { PluginConfig } from "../types.js";
|
|
7
|
+
import { namespaceIdentityToken } from "./identity.js";
|
|
8
|
+
import { listNamespaces } from "./migrate.js";
|
|
9
|
+
|
|
10
|
+
test("listNamespaces decodes tokenized namespace directories", async () => {
|
|
11
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-ns-migrate-"));
|
|
12
|
+
try {
|
|
13
|
+
const namespace = "team-beta";
|
|
14
|
+
await mkdir(path.join(memoryDir, "namespaces", namespaceIdentityToken(namespace), "facts"), {
|
|
15
|
+
recursive: true,
|
|
16
|
+
});
|
|
17
|
+
const namespaces = await listNamespaces({
|
|
18
|
+
config: {
|
|
19
|
+
memoryDir,
|
|
20
|
+
namespacesEnabled: true,
|
|
21
|
+
defaultNamespace: "default",
|
|
22
|
+
sharedNamespace: "shared",
|
|
23
|
+
namespacePolicies: [],
|
|
24
|
+
qmdCollection: "remnic",
|
|
25
|
+
entitySchemas: {},
|
|
26
|
+
inlineSourceAttributionFormat: undefined,
|
|
27
|
+
} as unknown as PluginConfig,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
assert.ok(namespaces.some((entry) => entry.namespace === namespace && entry.hasMemoryData));
|
|
31
|
+
assert.ok(!namespaces.some((entry) => entry.namespace === namespaceIdentityToken(namespace)));
|
|
32
|
+
} finally {
|
|
33
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("listNamespaces preserves configured raw namespace names that look tokenized", async () => {
|
|
38
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-ns-migrate-"));
|
|
39
|
+
try {
|
|
40
|
+
const namespace = namespaceIdentityToken("team-beta");
|
|
41
|
+
await mkdir(path.join(memoryDir, "namespaces", namespace, "facts"), {
|
|
42
|
+
recursive: true,
|
|
43
|
+
});
|
|
44
|
+
const namespaces = await listNamespaces({
|
|
45
|
+
config: {
|
|
46
|
+
memoryDir,
|
|
47
|
+
namespacesEnabled: true,
|
|
48
|
+
defaultNamespace: "default",
|
|
49
|
+
sharedNamespace: "shared",
|
|
50
|
+
namespacePolicies: [{ name: namespace, readPrincipals: ["*"], writePrincipals: ["*"] }],
|
|
51
|
+
qmdCollection: "remnic",
|
|
52
|
+
entitySchemas: {},
|
|
53
|
+
inlineSourceAttributionFormat: undefined,
|
|
54
|
+
} as unknown as PluginConfig,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
assert.ok(namespaces.some((entry) => entry.namespace === namespace && entry.hasMemoryData));
|
|
58
|
+
assert.ok(!namespaces.some((entry) => entry.namespace === "team-beta"));
|
|
59
|
+
} finally {
|
|
60
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { access, mkdir, readdir, rename } from "node:fs/promises";
|
|
2
|
+
import { access, lstat, mkdir, readdir, realpath, rename, rmdir } from "node:fs/promises";
|
|
3
3
|
import type { PluginConfig } from "../types.js";
|
|
4
4
|
import { NamespaceStorageRouter } from "./storage.js";
|
|
5
5
|
import { namespaceCollectionName } from "./search.js";
|
|
6
6
|
import { isSafeRouteNamespace } from "../routing/engine.js";
|
|
7
|
+
import { namespaceIdentityFromToken, namespaceIdentityToken } from "./identity.js";
|
|
8
|
+
import { ALL_CATEGORY_DIRS } from "../utils/category-dir.js";
|
|
7
9
|
|
|
8
10
|
const LEGACY_NAMESPACE_CHILDREN = [
|
|
9
|
-
|
|
10
|
-
"corrections",
|
|
11
|
+
...ALL_CATEGORY_DIRS,
|
|
11
12
|
"entities",
|
|
12
|
-
"questions",
|
|
13
13
|
"artifacts",
|
|
14
14
|
"identity",
|
|
15
15
|
"state",
|
|
16
16
|
"config",
|
|
17
17
|
"summaries",
|
|
18
|
-
"procedures",
|
|
19
|
-
// Issue #564 PR 3: reasoning_trace memories live in their own subtree.
|
|
20
|
-
// Must be included here so namespace migration moves existing traces
|
|
21
|
-
// into the target namespace root alongside other memory data.
|
|
22
|
-
"reasoning-traces",
|
|
23
18
|
"profile.md",
|
|
24
19
|
] as const;
|
|
25
20
|
|
|
@@ -75,13 +70,18 @@ async function discoverConfiguredNamespaces(
|
|
|
75
70
|
config.sharedNamespace,
|
|
76
71
|
...config.namespacePolicies.map((policy) => policy.name),
|
|
77
72
|
]);
|
|
73
|
+
const configuredNamespaces = new Set(discovered);
|
|
78
74
|
|
|
79
75
|
const namespacesDir = path.join(config.memoryDir, "namespaces");
|
|
80
76
|
try {
|
|
81
77
|
const entries = await readdir(namespacesDir, { withFileTypes: true });
|
|
82
78
|
for (const entry of entries) {
|
|
83
|
-
if (entry.isDirectory()
|
|
84
|
-
|
|
79
|
+
if (!entry.isDirectory()) continue;
|
|
80
|
+
const namespace = configuredNamespaces.has(entry.name)
|
|
81
|
+
? entry.name
|
|
82
|
+
: namespaceIdentityFromToken(entry.name) ?? entry.name;
|
|
83
|
+
if (isSafeRouteNamespace(namespace)) {
|
|
84
|
+
discovered.add(namespace);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
} catch {
|
|
@@ -144,6 +144,7 @@ export async function runNamespaceMigration(options: {
|
|
|
144
144
|
config: PluginConfig;
|
|
145
145
|
to: string;
|
|
146
146
|
dryRun?: boolean;
|
|
147
|
+
renameFn?: typeof rename;
|
|
147
148
|
}): Promise<NamespaceMigrationReport> {
|
|
148
149
|
if (!options.config.namespacesEnabled) {
|
|
149
150
|
throw new Error("Namespaces are disabled.");
|
|
@@ -154,8 +155,13 @@ export async function runNamespaceMigration(options: {
|
|
|
154
155
|
throw new Error(`Invalid namespace: ${options.to}`);
|
|
155
156
|
}
|
|
156
157
|
|
|
157
|
-
const targetRoot = path.join(
|
|
158
|
+
const targetRoot = path.join(
|
|
159
|
+
options.config.memoryDir,
|
|
160
|
+
"namespaces",
|
|
161
|
+
namespaceIdentityToken(targetNamespace),
|
|
162
|
+
);
|
|
158
163
|
const moved: NamespaceMigrationMove[] = [];
|
|
164
|
+
const renamePath = options.renameFn ?? rename;
|
|
159
165
|
|
|
160
166
|
for (const child of LEGACY_NAMESPACE_CHILDREN) {
|
|
161
167
|
const from = path.join(options.config.memoryDir, child);
|
|
@@ -164,13 +170,45 @@ export async function runNamespaceMigration(options: {
|
|
|
164
170
|
if (await exists(to)) {
|
|
165
171
|
throw new Error(`Target already contains ${child}: ${to}`);
|
|
166
172
|
}
|
|
173
|
+
const sourceStat = await lstat(from);
|
|
174
|
+
if (sourceStat.isSymbolicLink()) {
|
|
175
|
+
throw new Error(`Refusing to migrate symlinked legacy path: ${from}`);
|
|
176
|
+
}
|
|
167
177
|
moved.push({ from, to });
|
|
168
178
|
}
|
|
169
179
|
|
|
170
180
|
if (!options.dryRun && moved.length > 0) {
|
|
181
|
+
await assertSafeNamespaceTarget(options.config.memoryDir, targetRoot);
|
|
171
182
|
await mkdir(targetRoot, { recursive: true });
|
|
172
|
-
|
|
173
|
-
|
|
183
|
+
await assertSafeNamespaceTarget(options.config.memoryDir, targetRoot);
|
|
184
|
+
const completed: NamespaceMigrationMove[] = [];
|
|
185
|
+
try {
|
|
186
|
+
for (const move of moved) {
|
|
187
|
+
await renamePath(move.from, move.to);
|
|
188
|
+
completed.push(move);
|
|
189
|
+
}
|
|
190
|
+
} catch (cause) {
|
|
191
|
+
const rollbackErrors: string[] = [];
|
|
192
|
+
for (const move of completed.reverse()) {
|
|
193
|
+
try {
|
|
194
|
+
if (!(await exists(move.from)) && (await exists(move.to))) {
|
|
195
|
+
await rename(move.to, move.from);
|
|
196
|
+
}
|
|
197
|
+
} catch (rollbackCause) {
|
|
198
|
+
rollbackErrors.push(rollbackCause instanceof Error ? rollbackCause.message : String(rollbackCause));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await rmdir(targetRoot);
|
|
203
|
+
} catch {
|
|
204
|
+
// Target may predate migration or still contain unrelated files.
|
|
205
|
+
}
|
|
206
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
207
|
+
throw new Error(
|
|
208
|
+
`Namespace migration failed and was rolled back: ${message}` +
|
|
209
|
+
(rollbackErrors.length > 0 ? `; rollback errors: ${rollbackErrors.join("; ")}` : ""),
|
|
210
|
+
{ cause },
|
|
211
|
+
);
|
|
174
212
|
}
|
|
175
213
|
}
|
|
176
214
|
|
|
@@ -185,3 +223,33 @@ export async function runNamespaceMigration(options: {
|
|
|
185
223
|
}),
|
|
186
224
|
};
|
|
187
225
|
}
|
|
226
|
+
|
|
227
|
+
async function assertSafeNamespaceTarget(memoryDir: string, targetRoot: string): Promise<void> {
|
|
228
|
+
const memoryReal = await realpath(memoryDir);
|
|
229
|
+
const namespacesDir = path.join(memoryDir, "namespaces");
|
|
230
|
+
if (await exists(namespacesDir)) {
|
|
231
|
+
const namespacesStat = await lstat(namespacesDir);
|
|
232
|
+
if (namespacesStat.isSymbolicLink()) {
|
|
233
|
+
throw new Error(`Refusing to migrate through symlinked namespaces directory: ${namespacesDir}`);
|
|
234
|
+
}
|
|
235
|
+
const namespacesReal = await realpath(namespacesDir);
|
|
236
|
+
if (!isPathInside(memoryReal, namespacesReal)) {
|
|
237
|
+
throw new Error(`Refusing to migrate through namespaces directory outside memoryDir: ${namespacesDir}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (await exists(targetRoot)) {
|
|
241
|
+
const targetStat = await lstat(targetRoot);
|
|
242
|
+
if (targetStat.isSymbolicLink()) {
|
|
243
|
+
throw new Error(`Refusing to migrate into symlinked namespace root: ${targetRoot}`);
|
|
244
|
+
}
|
|
245
|
+
const targetReal = await realpath(targetRoot);
|
|
246
|
+
if (!isPathInside(memoryReal, targetReal)) {
|
|
247
|
+
throw new Error(`Refusing to migrate into namespace root outside memoryDir: ${targetRoot}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function isPathInside(root: string, child: string): boolean {
|
|
253
|
+
const relative = path.relative(root, child);
|
|
254
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
255
|
+
}
|