@remnic/core 1.1.30 → 9.3.515
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstraction-nodes.js +2 -2
- package/dist/access-cli.d.ts +1 -1
- package/dist/access-cli.js +156 -119
- 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 +47 -15
- package/dist/access-schema.js +8 -8
- package/dist/{access-service-B5hgZPCN.d.ts → access-service-qrrIrC-0.d.ts} +11 -129
- 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-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-QKZGQIPJ.js → chunk-3Q4H3OBR.js} +171 -64
- package/dist/chunk-3Q4H3OBR.js.map +1 -0
- 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-MG7NA5H3.js → chunk-4Q73JBSM.js} +17 -12
- package/dist/chunk-4Q73JBSM.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-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-575RMLWN.js → chunk-7MV5CWTE.js} +26 -20
- package/dist/chunk-7MV5CWTE.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-3VAL7ZL2.js → chunk-A52AKD7C.js} +59 -24
- package/dist/chunk-A52AKD7C.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-XVVIG67A.js → chunk-BLZAVUD2.js} +61 -17
- package/dist/chunk-BLZAVUD2.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-KRBK4BQH.js → chunk-D6WE5MTW.js} +272 -411
- package/dist/chunk-D6WE5MTW.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-77H5NU3M.js → chunk-EDBEWFJO.js} +82 -18
- package/dist/chunk-EDBEWFJO.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-I5GLV3VE.js → chunk-EIPUHVKE.js} +31 -24
- package/dist/{chunk-I5GLV3VE.js.map → chunk-EIPUHVKE.js.map} +1 -1
- 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-3OWUCDKH.js → chunk-FER4WARO.js} +176 -42
- package/dist/chunk-FER4WARO.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-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-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-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
- package/dist/chunk-JUC24CTX.js.map +1 -0
- package/dist/{chunk-UL2NNBUL.js → chunk-JYIKKAK3.js} +106 -44
- package/dist/chunk-JYIKKAK3.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-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
- package/dist/chunk-L227SKTB.js.map +1 -0
- package/dist/{chunk-W6AQJ2PY.js → chunk-L7S47WZT.js} +35 -16
- package/dist/chunk-L7S47WZT.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-OC7KHOOX.js → chunk-O27WNHTT.js} +22 -6
- package/dist/chunk-O27WNHTT.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-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-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
- package/dist/chunk-QY7YA7OL.js.map +1 -0
- package/dist/{chunk-QLLBRHAT.js → chunk-R26QUUQN.js} +181 -257
- package/dist/chunk-R26QUUQN.js.map +1 -0
- package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
- package/dist/{chunk-TMQLARTH.js → chunk-RCTS5CKK.js} +33 -14
- package/dist/chunk-RCTS5CKK.js.map +1 -0
- 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-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-3TNBOMQT.js → chunk-TVRN5QKH.js} +11 -11
- package/dist/{chunk-3TNBOMQT.js.map → chunk-TVRN5QKH.js.map} +1 -1
- 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-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-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-ZFXCQPNO.js +27 -0
- package/dist/chunk-ZFXCQPNO.js.map +1 -0
- package/dist/citations.js +1 -1
- package/dist/{cli-CJKI2JIe.d.ts → cli-X4NJoqSe.d.ts} +8 -31
- package/dist/cli.d.ts +10 -6
- package/dist/cli.js +122 -117
- 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 +21 -351
- package/dist/index.js +886 -561
- 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 +24 -22
- package/dist/namespaces/principal.d.ts +1 -0
- package/dist/namespaces/principal.js +2 -1
- package/dist/namespaces/search.d.ts +1 -0
- package/dist/namespaces/search.js +15 -13
- 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 +8 -1
- package/dist/offline-sync.js +6 -4
- package/dist/operator-toolkit.d.ts +1 -0
- package/dist/operator-toolkit.js +35 -32
- 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 +99 -96
- 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 +1 -0
- 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 +213 -39
- 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 +13 -12
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +19 -18
- package/dist/search/lancedb-backend.d.ts +7 -6
- package/dist/search/lancedb-backend.js +4 -2
- package/dist/search/meilisearch-backend.d.ts +7 -6
- package/dist/search/meilisearch-backend.js +4 -2
- package/dist/search/noop-backend.d.ts +1 -0
- package/dist/search/orama-backend.d.ts +9 -7
- package/dist/search/orama-backend.js +8 -4
- package/dist/search/port.d.ts +1 -0
- package/dist/search/remote-backend.d.ts +1 -0
- 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/transfer/types.d.ts +12 -12
- 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 +321 -0
- package/src/access-http.ts +201 -35
- 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-project-tag.test.ts +37 -0
- package/src/access-service.ts +42 -10
- 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 +6 -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 +76 -6
- package/src/namespaces/search.ts +22 -21
- 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.ts +22 -11
- package/src/onboarding/index.test.ts +105 -0
- package/src/onboarding/index.ts +17 -5
- package/src/operator-toolkit.ts +39 -4
- package/src/orchestrator.ts +52 -17
- 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 +8 -8
- 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 +62 -22
- package/src/search/meilisearch-backend.ts +35 -12
- package/src/search/orama-backend.test.ts +27 -0
- package/src/search/orama-backend.ts +65 -15
- 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-3OWUCDKH.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-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-KRBK4BQH.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-MG7NA5H3.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-OC7KHOOX.js.map +0 -1
- package/dist/chunk-OZHRDTDX.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-QKZGQIPJ.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-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-UL2NNBUL.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-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
package/src/sync/index.ts
CHANGED
|
@@ -22,6 +22,8 @@ export interface SyncOptions {
|
|
|
22
22
|
extensions?: string[];
|
|
23
23
|
/** Directories to exclude */
|
|
24
24
|
excludeDirs?: string[];
|
|
25
|
+
/** Poll interval for watchForChanges. Default: 5000ms */
|
|
26
|
+
pollIntervalMs?: number;
|
|
25
27
|
/** Whether to actually write changes (default: true) */
|
|
26
28
|
dryRun?: boolean;
|
|
27
29
|
}
|
|
@@ -146,35 +148,53 @@ export function syncChanges(options: SyncOptions): SyncResult {
|
|
|
146
148
|
*/
|
|
147
149
|
export function watchForChanges(
|
|
148
150
|
options: SyncOptions,
|
|
149
|
-
onChange: (changes: FileChange[]) => void
|
|
151
|
+
onChange: (changes: FileChange[]) => void | Promise<void>,
|
|
150
152
|
): { stop: () => void } {
|
|
151
153
|
const { sourceDir, extensions, excludeDirs } = options;
|
|
152
154
|
const extSet = new Set(extensions ?? DEFAULT_EXTENSIONS);
|
|
153
155
|
const excludeSet = new Set([...DEFAULT_EXCLUDE, ...(excludeDirs ?? [])]);
|
|
156
|
+
const pollIntervalMs =
|
|
157
|
+
typeof options.pollIntervalMs === "number" &&
|
|
158
|
+
Number.isFinite(options.pollIntervalMs) &&
|
|
159
|
+
options.pollIntervalMs > 0
|
|
160
|
+
? options.pollIntervalMs
|
|
161
|
+
: 5000;
|
|
154
162
|
|
|
155
163
|
let lastHashes: Record<string, string> = {};
|
|
164
|
+
let pollInFlight = false;
|
|
156
165
|
|
|
157
166
|
// Initial scan
|
|
158
167
|
const currentFiles = scanFiles(sourceDir, extSet, excludeSet);
|
|
159
168
|
lastHashes = { ...currentFiles };
|
|
160
169
|
|
|
161
170
|
// Poll interval (FSWatcher doesn't reliably work for all platforms)
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
const poll = async (): Promise<void> => {
|
|
172
|
+
if (pollInFlight) return;
|
|
173
|
+
pollInFlight = true;
|
|
174
|
+
try {
|
|
175
|
+
const nowFiles = scanFiles(sourceDir, extSet, excludeSet);
|
|
176
|
+
const changes = computeDiff(nowFiles, lastHashes, sourceDir);
|
|
177
|
+
|
|
178
|
+
if (changes.length > 0) {
|
|
179
|
+
await onChange(changes);
|
|
180
|
+
// Update hashes
|
|
181
|
+
for (const change of changes) {
|
|
182
|
+
if (change.type === "deleted") {
|
|
183
|
+
delete lastHashes[change.relativePath];
|
|
184
|
+
} else {
|
|
185
|
+
lastHashes[change.relativePath] = change.currentHash;
|
|
186
|
+
}
|
|
173
187
|
}
|
|
174
188
|
}
|
|
175
|
-
|
|
189
|
+
} catch {
|
|
190
|
+
// Leave lastHashes unchanged so the next poll retries the same diff.
|
|
191
|
+
} finally {
|
|
192
|
+
pollInFlight = false;
|
|
176
193
|
}
|
|
177
|
-
}
|
|
194
|
+
};
|
|
195
|
+
const interval = setInterval(() => {
|
|
196
|
+
void poll();
|
|
197
|
+
}, pollIntervalMs);
|
|
178
198
|
|
|
179
199
|
return {
|
|
180
200
|
stop: () => clearInterval(interval),
|
|
@@ -190,11 +210,16 @@ function scanFiles(
|
|
|
190
210
|
): Record<string, string> {
|
|
191
211
|
const result: Record<string, string> = {};
|
|
192
212
|
|
|
193
|
-
function walk(dir: string): void {
|
|
213
|
+
function walk(dir: string, isRoot = false): void {
|
|
194
214
|
let entries: fs.Dirent[];
|
|
195
215
|
try {
|
|
196
216
|
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
197
|
-
} catch {
|
|
217
|
+
} catch (err) {
|
|
218
|
+
if (isRoot) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
`sync scan failed for ${dir}: ${err instanceof Error ? err.message : String(err)}`,
|
|
221
|
+
);
|
|
222
|
+
}
|
|
198
223
|
return;
|
|
199
224
|
}
|
|
200
225
|
|
|
@@ -219,7 +244,7 @@ function scanFiles(
|
|
|
219
244
|
}
|
|
220
245
|
}
|
|
221
246
|
|
|
222
|
-
walk(root);
|
|
247
|
+
walk(root, true);
|
|
223
248
|
return result;
|
|
224
249
|
}
|
|
225
250
|
|
|
@@ -18,6 +18,21 @@ const MAX_SLUG_LENGTH = 32;
|
|
|
18
18
|
|
|
19
19
|
/** Regex for valid slug: lowercase letters, digits, hyphens */
|
|
20
20
|
const SLUG_RE = /^[a-z][a-z0-9-]*$/;
|
|
21
|
+
const VALID_MEMORY_CATEGORIES = new Set([
|
|
22
|
+
"fact",
|
|
23
|
+
"preference",
|
|
24
|
+
"correction",
|
|
25
|
+
"entity",
|
|
26
|
+
"decision",
|
|
27
|
+
"relationship",
|
|
28
|
+
"principle",
|
|
29
|
+
"commitment",
|
|
30
|
+
"moment",
|
|
31
|
+
"skill",
|
|
32
|
+
"rule",
|
|
33
|
+
"procedure",
|
|
34
|
+
"reasoning_trace",
|
|
35
|
+
]);
|
|
21
36
|
|
|
22
37
|
/**
|
|
23
38
|
* Validate a taxonomy category slug.
|
|
@@ -68,12 +83,31 @@ export function validateTaxonomy(taxonomy: Taxonomy): void {
|
|
|
68
83
|
if (!Array.isArray(cat.filingRules)) {
|
|
69
84
|
throw new Error(`Taxonomy category "${cat.id}" filingRules must be an array`);
|
|
70
85
|
}
|
|
86
|
+
for (const [index, rule] of cat.filingRules.entries()) {
|
|
87
|
+
if (typeof rule !== "string" || rule.trim().length === 0) {
|
|
88
|
+
throw new Error(
|
|
89
|
+
`Taxonomy category "${cat.id}" filingRules[${index}] must be a non-empty string`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
71
93
|
if (typeof cat.priority !== "number" || !Number.isFinite(cat.priority)) {
|
|
72
94
|
throw new Error(`Taxonomy category "${cat.id}" must have a finite numeric priority`);
|
|
73
95
|
}
|
|
74
96
|
if (!Array.isArray(cat.memoryCategories)) {
|
|
75
97
|
throw new Error(`Taxonomy category "${cat.id}" memoryCategories must be an array`);
|
|
76
98
|
}
|
|
99
|
+
for (const [index, memoryCategory] of cat.memoryCategories.entries()) {
|
|
100
|
+
if (typeof memoryCategory !== "string" || memoryCategory.trim().length === 0) {
|
|
101
|
+
throw new Error(
|
|
102
|
+
`Taxonomy category "${cat.id}" memoryCategories[${index}] must be a non-empty string`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
if (!VALID_MEMORY_CATEGORIES.has(memoryCategory)) {
|
|
106
|
+
throw new Error(
|
|
107
|
+
`Taxonomy category "${cat.id}" memoryCategories[${index}] is unknown: "${memoryCategory}"`,
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
77
111
|
if (cat.parentId !== undefined) {
|
|
78
112
|
if (typeof cat.parentId !== "string") {
|
|
79
113
|
throw new Error(`Taxonomy category "${cat.id}" parentId must be a string if set`);
|
|
@@ -117,10 +151,15 @@ export async function loadTaxonomy(memoryDir: string): Promise<Taxonomy> {
|
|
|
117
151
|
}
|
|
118
152
|
|
|
119
153
|
const obj = parsed as Record<string, unknown>;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
154
|
+
if (typeof obj.version !== "number") {
|
|
155
|
+
throw new Error("taxonomy.json version must be a number");
|
|
156
|
+
}
|
|
157
|
+
if (!Array.isArray(obj.categories)) {
|
|
158
|
+
throw new Error("taxonomy.json categories must be an array");
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const userVersion = obj.version;
|
|
162
|
+
const userCategories = obj.categories as TaxonomyCategory[];
|
|
124
163
|
|
|
125
164
|
// Validate: reject duplicate IDs in user categories before merging.
|
|
126
165
|
// Without this check, duplicates are silently collapsed with last-write-wins
|
|
@@ -1010,6 +1010,73 @@ test("applyTemporalSupersession: hot→cold migration race — cold copy is proc
|
|
|
1010
1010
|
}
|
|
1011
1011
|
});
|
|
1012
1012
|
|
|
1013
|
+
test("applyTemporalSupersession: stale superseded hot copy does not block active cold copy", async () => {
|
|
1014
|
+
const { storage, cleanup } = await makeStorage("engram-temporal-stale-hot-cold-");
|
|
1015
|
+
try {
|
|
1016
|
+
const oldId = await writeFact(
|
|
1017
|
+
storage,
|
|
1018
|
+
"entity lives in Austin — cold copy",
|
|
1019
|
+
TEST_ENTITY,
|
|
1020
|
+
{ city: "Austin" },
|
|
1021
|
+
);
|
|
1022
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
1023
|
+
const coldPath = await migrateFactToCold(storage, oldId);
|
|
1024
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
1025
|
+
const newId = await writeFact(
|
|
1026
|
+
storage,
|
|
1027
|
+
"entity moved to NYC",
|
|
1028
|
+
TEST_ENTITY,
|
|
1029
|
+
{ city: "NYC" },
|
|
1030
|
+
);
|
|
1031
|
+
|
|
1032
|
+
storage.invalidateAllMemoriesCacheForDir();
|
|
1033
|
+
const hotMemories = await storage.readAllMemories();
|
|
1034
|
+
const coldMemories = await storage.readAllColdMemories();
|
|
1035
|
+
const newEntry = hotMemories.find((m) => m.frontmatter.id === newId);
|
|
1036
|
+
const coldEntry = coldMemories.find((m) => m.frontmatter.id === oldId);
|
|
1037
|
+
assert.ok(newEntry, "new entry must exist in hot tier");
|
|
1038
|
+
assert.ok(coldEntry, "cold entry must exist in cold tier");
|
|
1039
|
+
assert.equal(coldEntry.frontmatter.status ?? "active", "active");
|
|
1040
|
+
|
|
1041
|
+
const staleHotEntry = {
|
|
1042
|
+
path: coldPath.replace(/\.md$/, "-stale-hot.md"),
|
|
1043
|
+
frontmatter: {
|
|
1044
|
+
...coldEntry.frontmatter,
|
|
1045
|
+
status: "superseded",
|
|
1046
|
+
supersededBy: "previous-newer-fact",
|
|
1047
|
+
},
|
|
1048
|
+
content: coldEntry.content,
|
|
1049
|
+
};
|
|
1050
|
+
|
|
1051
|
+
const originalReadAll = storage.readAllMemories.bind(storage);
|
|
1052
|
+
(storage as unknown as { readAllMemories: () => Promise<unknown> }).readAllMemories =
|
|
1053
|
+
async () => [staleHotEntry, newEntry];
|
|
1054
|
+
|
|
1055
|
+
try {
|
|
1056
|
+
const result = await applyTemporalSupersession({
|
|
1057
|
+
storage,
|
|
1058
|
+
newMemoryId: newId,
|
|
1059
|
+
entityRef: TEST_ENTITY,
|
|
1060
|
+
structuredAttributes: { city: "NYC" },
|
|
1061
|
+
createdAt: new Date().toISOString(),
|
|
1062
|
+
enabled: true,
|
|
1063
|
+
});
|
|
1064
|
+
|
|
1065
|
+
assert.deepEqual(result.supersededIds, [oldId]);
|
|
1066
|
+
} finally {
|
|
1067
|
+
(storage as unknown as { readAllMemories: typeof originalReadAll }).readAllMemories =
|
|
1068
|
+
originalReadAll;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
const coldMem = await storage.readMemoryByPath(coldPath);
|
|
1072
|
+
assert.ok(coldMem, "cold memory file must still exist");
|
|
1073
|
+
assert.equal(coldMem!.frontmatter.status, "superseded");
|
|
1074
|
+
assert.equal(coldMem!.frontmatter.supersededBy, newId);
|
|
1075
|
+
} finally {
|
|
1076
|
+
await cleanup();
|
|
1077
|
+
}
|
|
1078
|
+
});
|
|
1079
|
+
|
|
1013
1080
|
// ─── Regression: round-6 Findings 2+3 — kill switch in recent-scan prefilter ─
|
|
1014
1081
|
|
|
1015
1082
|
test("shouldFilterSupersededFromRecall: kill switch off (enabled=false) never filters superseded", () => {
|
|
@@ -331,6 +331,14 @@ export async function applyTemporalSupersession(args: {
|
|
|
331
331
|
if (memory.frontmatter.id === args.newMemoryId) continue;
|
|
332
332
|
const dedupeKey = memory.frontmatter.id ?? memory.path;
|
|
333
333
|
if (processedIds.has(dedupeKey)) continue;
|
|
334
|
+
const snapshotStatus = memory.frontmatter.status ?? "active";
|
|
335
|
+
if (snapshotStatus !== "active") {
|
|
336
|
+
// A stale non-active snapshot entry must not suppress an active copy of
|
|
337
|
+
// the same logical memory that appears later in another tier. This can
|
|
338
|
+
// happen during hot/cold migration races where the hot snapshot is already
|
|
339
|
+
// superseded but the cold copy is still active and should be evaluated.
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
334
342
|
// NOTE: do NOT call processedIds.add(dedupeKey) here. We defer marking
|
|
335
343
|
// the id as processed until AFTER the CAS re-read succeeds. If we mark
|
|
336
344
|
// it here and the re-read fails (e.g. the hot entry has already been
|
package/src/tmt.test.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtemp, readFile, 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 { TmtBuilder, hourNodePath, parseIsoDate, parseIsoHour } from "./tmt.js";
|
|
8
|
+
|
|
9
|
+
test("TMT timestamp helpers derive UTC path tokens only from strict ISO instants", () => {
|
|
10
|
+
assert.equal(parseIsoDate("2026-05-22T01:30:00-05:00"), "2026-05-22");
|
|
11
|
+
assert.equal(parseIsoHour("2026-05-22T01:30:00-05:00"), "06");
|
|
12
|
+
assert.equal(parseIsoDate("../../evil"), "");
|
|
13
|
+
assert.equal(parseIsoHour("2026-05-22"), "");
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test("TMT skips malformed timestamps instead of using raw slices as paths", async () => {
|
|
17
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-tmt-"));
|
|
18
|
+
try {
|
|
19
|
+
const builder = new TmtBuilder(dir, {
|
|
20
|
+
temporalMemoryTreeEnabled: true,
|
|
21
|
+
tmtHourlyMinMemories: 1,
|
|
22
|
+
tmtSummaryMaxTokens: 100,
|
|
23
|
+
});
|
|
24
|
+
await builder.maybeRebuildNodes(
|
|
25
|
+
[
|
|
26
|
+
{
|
|
27
|
+
path: "bad.md",
|
|
28
|
+
id: "bad",
|
|
29
|
+
created: "../../evilT99:99:99Z",
|
|
30
|
+
content: "bad",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
path: "good.md",
|
|
34
|
+
id: "good",
|
|
35
|
+
created: "2026-05-22T01:30:00-05:00",
|
|
36
|
+
content: "good",
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
async (items) => items.join("\n"),
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
assert.equal(
|
|
43
|
+
await readFile(hourNodePath(dir, "2026-05-22", "06"), "utf8").then((value) => value.includes("good")),
|
|
44
|
+
true,
|
|
45
|
+
);
|
|
46
|
+
await assert.rejects(() => readFile(path.join(dir, "tmt", "..", "..", "evil", "hour-99.md"), "utf8"));
|
|
47
|
+
} finally {
|
|
48
|
+
await rm(dir, { recursive: true, force: true });
|
|
49
|
+
}
|
|
50
|
+
});
|
package/src/tmt.ts
CHANGED
|
@@ -109,11 +109,29 @@ export function serialiseTmtNode(fm: TmtNodeFrontmatter, summary: string): strin
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
export function parseIsoDate(iso: string): string {
|
|
112
|
-
return iso
|
|
112
|
+
return parseTmtInstant(iso)?.date ?? "";
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
export function parseIsoHour(iso: string): string {
|
|
116
|
-
return iso
|
|
116
|
+
return parseTmtInstant(iso)?.hour ?? "";
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function parseTmtInstant(iso: string): { date: string; hour: string; dateValue: Date } | null {
|
|
120
|
+
if (typeof iso !== "string") return null;
|
|
121
|
+
const value = iso.trim();
|
|
122
|
+
if (
|
|
123
|
+
!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/.test(value)
|
|
124
|
+
) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const dateValue = new Date(value);
|
|
128
|
+
if (!Number.isFinite(dateValue.getTime())) return null;
|
|
129
|
+
const utc = dateValue.toISOString();
|
|
130
|
+
return {
|
|
131
|
+
date: utc.slice(0, 10),
|
|
132
|
+
hour: utc.slice(11, 13),
|
|
133
|
+
dateValue,
|
|
134
|
+
};
|
|
117
135
|
}
|
|
118
136
|
|
|
119
137
|
// Returns ISO week key: YYYY-WW
|
|
@@ -162,8 +180,9 @@ export class TmtBuilder {
|
|
|
162
180
|
// Group by date+hour
|
|
163
181
|
const byHour = new Map<string, MemoryEntry[]>();
|
|
164
182
|
for (const m of memories) {
|
|
165
|
-
const
|
|
166
|
-
|
|
183
|
+
const instant = parseTmtInstant(m.created);
|
|
184
|
+
if (!instant) continue;
|
|
185
|
+
const { date, hour } = instant;
|
|
167
186
|
const key = `${date}::${hour}`;
|
|
168
187
|
if (!byHour.has(key)) byHour.set(key, []);
|
|
169
188
|
byHour.get(key)!.push(m);
|
|
@@ -180,8 +199,8 @@ export class TmtBuilder {
|
|
|
180
199
|
try {
|
|
181
200
|
const existing = await readFile(nodePath, "utf8");
|
|
182
201
|
const countMatch = existing.match(/memoryCount: (\d+)/);
|
|
183
|
-
if (!countMatch || parseInt(countMatch[1], 10)
|
|
184
|
-
shouldBuild = true; //
|
|
202
|
+
if (!countMatch || parseInt(countMatch[1], 10) !== entries.length) {
|
|
203
|
+
shouldBuild = true; // active memory set changed — rebuild
|
|
185
204
|
}
|
|
186
205
|
} catch { shouldBuild = true; }
|
|
187
206
|
}
|
|
@@ -212,7 +231,9 @@ export class TmtBuilder {
|
|
|
212
231
|
// Group by date
|
|
213
232
|
const byDate = new Map<string, MemoryEntry[]>();
|
|
214
233
|
for (const m of memories) {
|
|
215
|
-
const
|
|
234
|
+
const instant = parseTmtInstant(m.created);
|
|
235
|
+
if (!instant) continue;
|
|
236
|
+
const { date } = instant;
|
|
216
237
|
if (!byDate.has(date)) byDate.set(date, []);
|
|
217
238
|
byDate.get(date)!.push(m);
|
|
218
239
|
}
|
|
@@ -225,8 +246,8 @@ export class TmtBuilder {
|
|
|
225
246
|
try {
|
|
226
247
|
const existing = await readFile(nodePath, "utf8");
|
|
227
248
|
const countMatch = existing.match(/memoryCount: (\d+)/);
|
|
228
|
-
if (!countMatch || parseInt(countMatch[1], 10)
|
|
229
|
-
shouldBuild = true; //
|
|
249
|
+
if (!countMatch || parseInt(countMatch[1], 10) !== entries.length) {
|
|
250
|
+
shouldBuild = true; // active memory set changed — rebuild
|
|
230
251
|
}
|
|
231
252
|
} catch { shouldBuild = true; }
|
|
232
253
|
}
|
|
@@ -237,6 +258,7 @@ export class TmtBuilder {
|
|
|
237
258
|
const hourToEntries = new Map<string, MemoryEntry[]>();
|
|
238
259
|
for (const e of entries) {
|
|
239
260
|
const h = parseIsoHour(e.created);
|
|
261
|
+
if (!h) continue;
|
|
240
262
|
if (!hourToEntries.has(h)) hourToEntries.set(h, []);
|
|
241
263
|
hourToEntries.get(h)!.push(e);
|
|
242
264
|
}
|
|
@@ -284,7 +306,9 @@ export class TmtBuilder {
|
|
|
284
306
|
// Determine which ISO weeks appear in this memory batch
|
|
285
307
|
const weekToEntries = new Map<string, MemoryEntry[]>();
|
|
286
308
|
for (const m of memories) {
|
|
287
|
-
const
|
|
309
|
+
const instant = parseTmtInstant(m.created);
|
|
310
|
+
if (!instant) continue;
|
|
311
|
+
const week = isoWeekKey(instant.dateValue);
|
|
288
312
|
if (!weekToEntries.has(week)) weekToEntries.set(week, []);
|
|
289
313
|
weekToEntries.get(week)!.push(m);
|
|
290
314
|
}
|
|
@@ -298,7 +322,7 @@ export class TmtBuilder {
|
|
|
298
322
|
try {
|
|
299
323
|
const existing = await readFile(nodePath, "utf8");
|
|
300
324
|
const countMatch = existing.match(/memoryCount: (\d+)/);
|
|
301
|
-
if (!countMatch || parseInt(countMatch[1], 10)
|
|
325
|
+
if (!countMatch || parseInt(countMatch[1], 10) !== entries.length) {
|
|
302
326
|
shouldBuild = true;
|
|
303
327
|
}
|
|
304
328
|
} catch { shouldBuild = true; }
|
package/src/tokens.test.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
buildTokenEntry,
|
|
9
9
|
commitTokenEntry,
|
|
10
10
|
generateToken,
|
|
11
|
+
getAllValidTokensCached,
|
|
11
12
|
loadTokenStore,
|
|
12
13
|
revokeToken,
|
|
13
14
|
saveTokenStore,
|
|
@@ -176,3 +177,20 @@ test("legacy flat token stores reject empty connector keys before returning toke
|
|
|
176
177
|
await rm(dir, { recursive: true, force: true });
|
|
177
178
|
}
|
|
178
179
|
});
|
|
180
|
+
|
|
181
|
+
test("token writes invalidate the cached valid-token list", async () => {
|
|
182
|
+
const { dir, tokensPath } = await makeTempTokenPath();
|
|
183
|
+
try {
|
|
184
|
+
const entry = generateToken("codex", tokensPath);
|
|
185
|
+
assert.deepEqual(getAllValidTokensCached(tokensPath), [entry.token]);
|
|
186
|
+
|
|
187
|
+
assert.equal(revokeToken("codex", tokensPath), true);
|
|
188
|
+
assert.deepEqual(getAllValidTokensCached(tokensPath), []);
|
|
189
|
+
|
|
190
|
+
const replacement = buildTokenEntry("codex");
|
|
191
|
+
commitTokenEntry(replacement, tokensPath);
|
|
192
|
+
assert.deepEqual(getAllValidTokensCached(tokensPath), [replacement.token]);
|
|
193
|
+
} finally {
|
|
194
|
+
await rm(dir, { recursive: true, force: true });
|
|
195
|
+
}
|
|
196
|
+
});
|
package/src/tokens.ts
CHANGED
|
@@ -183,6 +183,7 @@ export function saveTokenStore(store: TokenStore, tokensPath?: string): void {
|
|
|
183
183
|
// Tighten permissions on pre-existing files after atomic replacement.
|
|
184
184
|
try { fs.chmodSync(p, 0o600); } catch { /* ignore on platforms without chmod */ }
|
|
185
185
|
fsyncDirectoryBestEffort(dir);
|
|
186
|
+
invalidateTokenCache();
|
|
186
187
|
} catch (error) {
|
|
187
188
|
if (fd !== null) {
|
|
188
189
|
try { fs.closeSync(fd); } catch { /* ignore */ }
|
|
@@ -265,6 +266,12 @@ let _cachedTokens: string[] = [];
|
|
|
265
266
|
let _cachedAt = 0;
|
|
266
267
|
let _cachedPath: string | undefined;
|
|
267
268
|
|
|
269
|
+
function invalidateTokenCache(): void {
|
|
270
|
+
_cachedTokens = [];
|
|
271
|
+
_cachedAt = 0;
|
|
272
|
+
_cachedPath = undefined;
|
|
273
|
+
}
|
|
274
|
+
|
|
268
275
|
export function getAllValidTokensCached(tokensPath?: string): string[] {
|
|
269
276
|
const now = Date.now();
|
|
270
277
|
if (now - _cachedAt < TOKEN_CACHE_TTL_MS && tokensPath === _cachedPath) return _cachedTokens;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
|
-
import { link, mkdtemp, mkdir, symlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import { link, mkdtemp, mkdir, realpath, rm, symlink, writeFile } from "node:fs/promises";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
|
|
7
|
-
import { convertMemoriesToRecords } from "./converter.js";
|
|
7
|
+
import { convertMemoriesToRecords, readContainedMarkdownFile } from "./converter.js";
|
|
8
8
|
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
10
10
|
// Helper: create a synthetic memory file
|
|
@@ -206,6 +206,22 @@ describe("convertMemoriesToRecords", () => {
|
|
|
206
206
|
assert.equal(noFilter.length, 2);
|
|
207
207
|
});
|
|
208
208
|
|
|
209
|
+
it("excludes memories with overflowed calendar dates when date filters are active", async () => {
|
|
210
|
+
const dir = await makeTmpDir();
|
|
211
|
+
await writeSyntheticMemory(dir, "facts", "overflow.md", {
|
|
212
|
+
id: "overflow",
|
|
213
|
+
created: "2026-02-31T00:00:00Z",
|
|
214
|
+
content: "Memory with an overflowed date.",
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
const records = await convertMemoriesToRecords({
|
|
218
|
+
memoryDir: dir,
|
|
219
|
+
since: new Date("2026-03-01T00:00:00.000Z"),
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
assert.deepEqual(records, []);
|
|
223
|
+
});
|
|
224
|
+
|
|
209
225
|
it("handles empty memory directory", async () => {
|
|
210
226
|
const dir = await makeTmpDir();
|
|
211
227
|
// Don't create any subdirectories
|
|
@@ -327,6 +343,43 @@ describe("convertMemoriesToRecords", () => {
|
|
|
327
343
|
}
|
|
328
344
|
});
|
|
329
345
|
|
|
346
|
+
it("refuses to open a symlink swapped into a previously validated markdown path", async () => {
|
|
347
|
+
const dir = await makeTmpDir();
|
|
348
|
+
await writeSyntheticMemory(dir, "facts", "race.md", {
|
|
349
|
+
id: "race",
|
|
350
|
+
content: "Original memory.",
|
|
351
|
+
});
|
|
352
|
+
const filePath = path.join(dir, "facts", "race.md");
|
|
353
|
+
const containmentRoot = await realpath(dir);
|
|
354
|
+
|
|
355
|
+
const outsideDir = await makeTmpDir();
|
|
356
|
+
const secretPath = path.join(outsideDir, "secret.md");
|
|
357
|
+
await writeFile(
|
|
358
|
+
secretPath,
|
|
359
|
+
[
|
|
360
|
+
"---",
|
|
361
|
+
"id: secret",
|
|
362
|
+
"category: fact",
|
|
363
|
+
"confidence: 0.99",
|
|
364
|
+
"tags: []",
|
|
365
|
+
"---",
|
|
366
|
+
"",
|
|
367
|
+
"EXFILTRATED SECRET CONTENT",
|
|
368
|
+
].join("\n"),
|
|
369
|
+
"utf-8",
|
|
370
|
+
);
|
|
371
|
+
|
|
372
|
+
try {
|
|
373
|
+
await rm(filePath);
|
|
374
|
+
await symlink(secretPath, filePath);
|
|
375
|
+
} catch {
|
|
376
|
+
return; // symlinks unavailable
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const raw = await readContainedMarkdownFile(filePath, containmentRoot);
|
|
380
|
+
assert.equal(raw, null);
|
|
381
|
+
});
|
|
382
|
+
|
|
330
383
|
it("refuses to descend into directory symlinks that escape memoryDir", async () => {
|
|
331
384
|
const dir = await makeTmpDir();
|
|
332
385
|
const outsideDir = await makeTmpDir();
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
* The `input` field is empty string (synthesis is left to adapters).
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { constants } from "node:fs";
|
|
13
|
+
import { lstat, open, readdir, realpath } from "node:fs/promises";
|
|
13
14
|
import path from "node:path";
|
|
14
15
|
|
|
16
|
+
import { parseStrictCliDate } from "./date-parse.js";
|
|
15
17
|
import type { TrainingExportOptions, TrainingExportRecord } from "./types.js";
|
|
16
18
|
|
|
17
19
|
// ---------------------------------------------------------------------------
|
|
@@ -85,6 +87,10 @@ async function safeRealpath(p: string): Promise<string | null> {
|
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
|
|
90
|
+
function isContainedPath(real: string, containmentRoot: string): boolean {
|
|
91
|
+
return real === containmentRoot || real.startsWith(containmentRoot + path.sep);
|
|
92
|
+
}
|
|
93
|
+
|
|
88
94
|
/**
|
|
89
95
|
* Recursively collect `.md` files under `dir`, returning deterministic,
|
|
90
96
|
* lexicographically-sorted absolute paths.
|
|
@@ -157,7 +163,7 @@ async function collectMarkdownFiles(
|
|
|
157
163
|
|
|
158
164
|
const real = await safeRealpath(full);
|
|
159
165
|
if (!real) continue;
|
|
160
|
-
if (real
|
|
166
|
+
if (!isContainedPath(real, containmentRoot)) {
|
|
161
167
|
continue;
|
|
162
168
|
}
|
|
163
169
|
files.push(full);
|
|
@@ -172,6 +178,27 @@ async function collectMarkdownFiles(
|
|
|
172
178
|
return files.sort((a, b) => a.localeCompare(b));
|
|
173
179
|
}
|
|
174
180
|
|
|
181
|
+
export async function readContainedMarkdownFile(
|
|
182
|
+
filePath: string,
|
|
183
|
+
containmentRoot: string,
|
|
184
|
+
): Promise<string | null> {
|
|
185
|
+
let handle: Awaited<ReturnType<typeof open>> | null = null;
|
|
186
|
+
try {
|
|
187
|
+
handle = await open(filePath, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
188
|
+
const st = await handle.stat();
|
|
189
|
+
if (!st.isFile() || st.nlink > 1) return null;
|
|
190
|
+
|
|
191
|
+
const real = await safeRealpath(filePath);
|
|
192
|
+
if (!real || !isContainedPath(real, containmentRoot)) return null;
|
|
193
|
+
|
|
194
|
+
return await handle.readFile("utf-8");
|
|
195
|
+
} catch {
|
|
196
|
+
return null;
|
|
197
|
+
} finally {
|
|
198
|
+
await handle?.close().catch(() => undefined);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
175
202
|
// ---------------------------------------------------------------------------
|
|
176
203
|
// Build instruction from category + tags
|
|
177
204
|
// ---------------------------------------------------------------------------
|
|
@@ -214,8 +241,11 @@ function buildInstruction(category: string, tags: string[]): string {
|
|
|
214
241
|
|
|
215
242
|
function parseIsoDate(isoStr: string): Date | null {
|
|
216
243
|
if (!isoStr) return null;
|
|
217
|
-
|
|
218
|
-
|
|
244
|
+
try {
|
|
245
|
+
return parseStrictCliDate(isoStr, "memory created timestamp");
|
|
246
|
+
} catch {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
219
249
|
}
|
|
220
250
|
|
|
221
251
|
// ---------------------------------------------------------------------------
|
|
@@ -254,12 +284,8 @@ export async function convertMemoriesToRecords(
|
|
|
254
284
|
const records: TrainingExportRecord[] = [];
|
|
255
285
|
|
|
256
286
|
for (const filePath of allFiles) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
raw = await readFile(filePath, "utf-8");
|
|
260
|
-
} catch {
|
|
261
|
-
continue; // skip unreadable files
|
|
262
|
-
}
|
|
287
|
+
const raw = await readContainedMarkdownFile(filePath, containmentRoot);
|
|
288
|
+
if (raw === null) continue; // skip unreadable files
|
|
263
289
|
|
|
264
290
|
const parsed = parseFrontmatter(raw);
|
|
265
291
|
if (!parsed) continue; // skip malformed files
|
|
@@ -71,6 +71,23 @@ describe("TrainingExportAdapter registry", () => {
|
|
|
71
71
|
);
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
+
it("rejects malformed adapters without mutating the registry", () => {
|
|
75
|
+
assert.throws(
|
|
76
|
+
() => registerTrainingExportAdapter({ name: "no-format" } as unknown as TrainingExportAdapter),
|
|
77
|
+
/formatRecords must be a function/,
|
|
78
|
+
);
|
|
79
|
+
assert.throws(
|
|
80
|
+
() => registerTrainingExportAdapter({
|
|
81
|
+
name: "bad-ext",
|
|
82
|
+
formatRecords: () => "",
|
|
83
|
+
fileExtension: "",
|
|
84
|
+
} as unknown as TrainingExportAdapter),
|
|
85
|
+
/fileExtension must be a non-empty extension/,
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
assert.deepEqual(listTrainingExportAdapters(), []);
|
|
89
|
+
});
|
|
90
|
+
|
|
74
91
|
it("trims adapter name on lookup", () => {
|
|
75
92
|
registerTrainingExportAdapter(makeAdapter("axolotl"));
|
|
76
93
|
assert.ok(getTrainingExportAdapter(" axolotl "));
|