@remnic/core 1.1.31 → 9.3.515
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +8 -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-qrrIrC-0.d.ts} +5 -128
- 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-ZAVUCJ4H.js → chunk-3Q4H3OBR.js} +150 -65
- 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-U7EJOMFC.js → chunk-4Q73JBSM.js} +4 -4
- 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-TPU5L5EY.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-YU5KIWYQ.js → chunk-FER4WARO.js} +79 -41
- 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-3ZLVGM76.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-YROHKYBY.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-kuh9PwZ5.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 +20 -350
- package/dist/index.js +884 -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.js +4 -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 +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 +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/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 +89 -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-project-tag.test.ts +37 -0
- package/src/access-service.ts +11 -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 +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 +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/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-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-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-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-U7EJOMFC.js.map → chunk-4Q73JBSM.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
|
@@ -921,7 +921,10 @@ async function fetchAndFilterComments(
|
|
|
921
921
|
if (consumed >= remainingBudget) break;
|
|
922
922
|
throwIfAborted(signal);
|
|
923
923
|
|
|
924
|
-
const comment = item
|
|
924
|
+
const comment = normalizeGitHubComment(item, kind);
|
|
925
|
+
if (!comment) {
|
|
926
|
+
continue;
|
|
927
|
+
}
|
|
925
928
|
|
|
926
929
|
// Skip items strictly before the watermark. Items whose `updated_at`
|
|
927
930
|
// equals the watermark second must pass through so the seenIds check
|
|
@@ -1005,6 +1008,31 @@ async function fetchAndFilterComments(
|
|
|
1005
1008
|
return { docs, skippedOtherAuthor, skippedEmpty, skippedTooLarge, consumed, latestWatermark, newSeenIds };
|
|
1006
1009
|
}
|
|
1007
1010
|
|
|
1011
|
+
function normalizeGitHubComment(
|
|
1012
|
+
item: unknown,
|
|
1013
|
+
kind: string,
|
|
1014
|
+
): GitHubComment | null {
|
|
1015
|
+
if (typeof item !== "object" || item === null) {
|
|
1016
|
+
return null;
|
|
1017
|
+
}
|
|
1018
|
+
if (kind !== "discussion") {
|
|
1019
|
+
return item as GitHubComment;
|
|
1020
|
+
}
|
|
1021
|
+
const discussion = item as GitHubDiscussionComment;
|
|
1022
|
+
const updatedAt = discussion.updatedAt ?? discussion.createdAt;
|
|
1023
|
+
if (typeof discussion.id !== "number" || typeof updatedAt !== "string") {
|
|
1024
|
+
return null;
|
|
1025
|
+
}
|
|
1026
|
+
return {
|
|
1027
|
+
id: discussion.id,
|
|
1028
|
+
body: discussion.body,
|
|
1029
|
+
user: discussion.author,
|
|
1030
|
+
created_at: discussion.createdAt ?? updatedAt,
|
|
1031
|
+
updated_at: updatedAt,
|
|
1032
|
+
html_url: discussion.url,
|
|
1033
|
+
};
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1008
1036
|
/**
|
|
1009
1037
|
* Advance a paginated GitHub URL by incrementing the `page` query parameter.
|
|
1010
1038
|
* GitHub uses 1-based page numbers; if no `page` param is present we assume
|
|
@@ -6,21 +6,29 @@ import test from "node:test";
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
CONNECTOR_ID_PATTERN,
|
|
9
|
-
isValidConnectorId,
|
|
10
|
-
LiveConnectorRegistry,
|
|
11
|
-
LiveConnectorRegistryError,
|
|
12
|
-
listConnectorStates,
|
|
13
|
-
readConnectorState,
|
|
14
|
-
writeConnectorState,
|
|
15
9
|
type ConnectorConfig,
|
|
16
10
|
type ConnectorCursor,
|
|
17
11
|
type ConnectorDocument,
|
|
18
12
|
type ConnectorSyncStatus,
|
|
19
13
|
type LiveConnector,
|
|
14
|
+
LiveConnectorRegistry,
|
|
15
|
+
LiveConnectorRegistryError,
|
|
20
16
|
type SyncIncrementalArgs,
|
|
21
17
|
type SyncIncrementalResult,
|
|
18
|
+
isValidConnectorId,
|
|
19
|
+
listConnectorStates,
|
|
20
|
+
readConnectorState,
|
|
21
|
+
withConnectorStateLock,
|
|
22
|
+
writeConnectorState,
|
|
22
23
|
} from "./index.js";
|
|
23
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
_connectorStatePathForTest,
|
|
26
|
+
_refreshConnectorLockForTest,
|
|
27
|
+
_releaseConnectorLockForTest,
|
|
28
|
+
_tryAcquireConnectorLockForTest,
|
|
29
|
+
_unlinkStaleConnectorLockForTest,
|
|
30
|
+
_withConnectorStateLockForTest,
|
|
31
|
+
} from "./state-store.js";
|
|
24
32
|
|
|
25
33
|
/**
|
|
26
34
|
* Mock `LiveConnector`. Exists primarily as a compile-time assertion that
|
|
@@ -94,12 +102,12 @@ test("isValidConnectorId accepts well-formed ids", () => {
|
|
|
94
102
|
test("isValidConnectorId rejects malformed ids", () => {
|
|
95
103
|
for (const id of [
|
|
96
104
|
"",
|
|
97
|
-
"Drive",
|
|
98
|
-
"-leading-dash",
|
|
105
|
+
"Drive", // uppercase
|
|
106
|
+
"-leading-dash", // must start with alphanumeric
|
|
99
107
|
"trailing-dash-",
|
|
100
108
|
"white space",
|
|
101
109
|
"slash/y",
|
|
102
|
-
"a".repeat(65),
|
|
110
|
+
"a".repeat(65), // > 64
|
|
103
111
|
null,
|
|
104
112
|
undefined,
|
|
105
113
|
42,
|
|
@@ -146,26 +154,14 @@ test("registry: register, get, list, unregister, size", () => {
|
|
|
146
154
|
test("registry: rejects duplicate ids", () => {
|
|
147
155
|
const reg = new LiveConnectorRegistry();
|
|
148
156
|
reg.register(new MockConnector("dup"));
|
|
149
|
-
assert.throws(
|
|
150
|
-
() => reg.register(new MockConnector("dup")),
|
|
151
|
-
LiveConnectorRegistryError,
|
|
152
|
-
);
|
|
157
|
+
assert.throws(() => reg.register(new MockConnector("dup")), LiveConnectorRegistryError);
|
|
153
158
|
});
|
|
154
159
|
|
|
155
160
|
test("registry: rejects invalid ids", () => {
|
|
156
161
|
const reg = new LiveConnectorRegistry();
|
|
157
|
-
assert.throws(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
);
|
|
161
|
-
assert.throws(
|
|
162
|
-
() => reg.register(new MockConnector("-leading-dash")),
|
|
163
|
-
LiveConnectorRegistryError,
|
|
164
|
-
);
|
|
165
|
-
assert.throws(
|
|
166
|
-
() => reg.register(new MockConnector("a".repeat(65))),
|
|
167
|
-
LiveConnectorRegistryError,
|
|
168
|
-
);
|
|
162
|
+
assert.throws(() => reg.register(new MockConnector("Bad-Caps")), LiveConnectorRegistryError);
|
|
163
|
+
assert.throws(() => reg.register(new MockConnector("-leading-dash")), LiveConnectorRegistryError);
|
|
164
|
+
assert.throws(() => reg.register(new MockConnector("a".repeat(65))), LiveConnectorRegistryError);
|
|
169
165
|
});
|
|
170
166
|
|
|
171
167
|
test("registry: rejects connectors missing required fields", () => {
|
|
@@ -182,7 +178,7 @@ test("registry: rejects connectors missing required fields", () => {
|
|
|
182
178
|
nextCursor: { kind: "x", value: "0", updatedAt: new Date().toISOString() },
|
|
183
179
|
}),
|
|
184
180
|
} as unknown as LiveConnector),
|
|
185
|
-
LiveConnectorRegistryError
|
|
181
|
+
LiveConnectorRegistryError
|
|
186
182
|
);
|
|
187
183
|
|
|
188
184
|
assert.throws(
|
|
@@ -193,13 +189,10 @@ test("registry: rejects connectors missing required fields", () => {
|
|
|
193
189
|
validateConfig: () => ({}),
|
|
194
190
|
// missing syncIncremental
|
|
195
191
|
} as unknown as LiveConnector),
|
|
196
|
-
LiveConnectorRegistryError
|
|
192
|
+
LiveConnectorRegistryError
|
|
197
193
|
);
|
|
198
194
|
|
|
199
|
-
assert.throws(
|
|
200
|
-
() => reg.register(null as unknown as LiveConnector),
|
|
201
|
-
LiveConnectorRegistryError,
|
|
202
|
-
);
|
|
195
|
+
assert.throws(() => reg.register(null as unknown as LiveConnector), LiveConnectorRegistryError);
|
|
203
196
|
});
|
|
204
197
|
|
|
205
198
|
// ───────────────────────────────────────────────────────────────────────────
|
|
@@ -294,7 +287,10 @@ test("state store: listConnectorStates enumerates and is sorted", async (t) => {
|
|
|
294
287
|
});
|
|
295
288
|
|
|
296
289
|
const states = await listConnectorStates(memoryDir);
|
|
297
|
-
assert.deepEqual(
|
|
290
|
+
assert.deepEqual(
|
|
291
|
+
states.map((s) => s.id),
|
|
292
|
+
["alpha", "mike", "zeta"]
|
|
293
|
+
);
|
|
298
294
|
});
|
|
299
295
|
|
|
300
296
|
test("state store: listConnectorStates returns [] for missing dir", async (t) => {
|
|
@@ -321,7 +317,10 @@ test("state store: listConnectorStates skips non-matching files", async (t) => {
|
|
|
321
317
|
fs.writeFileSync(path.join(dir, "corrupt.json"), "{ not valid");
|
|
322
318
|
|
|
323
319
|
const states = await listConnectorStates(memoryDir);
|
|
324
|
-
assert.deepEqual(
|
|
320
|
+
assert.deepEqual(
|
|
321
|
+
states.map((s) => s.id),
|
|
322
|
+
["real"]
|
|
323
|
+
);
|
|
325
324
|
});
|
|
326
325
|
|
|
327
326
|
// ───────────────────────────────────────────────────────────────────────────
|
|
@@ -373,7 +372,7 @@ test("state store: previous good state is preserved when a new write fails", asy
|
|
|
373
372
|
lastSyncStatus: "never",
|
|
374
373
|
totalDocsImported: 0,
|
|
375
374
|
}),
|
|
376
|
-
/does not match
|
|
375
|
+
/does not match/
|
|
377
376
|
);
|
|
378
377
|
|
|
379
378
|
// The good file must still be readable and unchanged.
|
|
@@ -385,10 +384,7 @@ test("state store: previous good state is preserved when a new write fails", asy
|
|
|
385
384
|
|
|
386
385
|
test("state store: rejects invalid id at boundary", async (t) => {
|
|
387
386
|
const memoryDir = makeMemoryDir(t);
|
|
388
|
-
await assert.rejects(
|
|
389
|
-
() => readConnectorState(memoryDir, "Bad-Caps"),
|
|
390
|
-
/invalid connector id/,
|
|
391
|
-
);
|
|
387
|
+
await assert.rejects(() => readConnectorState(memoryDir, "Bad-Caps"), /invalid connector id/);
|
|
392
388
|
await assert.rejects(
|
|
393
389
|
() =>
|
|
394
390
|
writeConnectorState(memoryDir, "../escape" as string, {
|
|
@@ -398,7 +394,7 @@ test("state store: rejects invalid id at boundary", async (t) => {
|
|
|
398
394
|
lastSyncStatus: "never",
|
|
399
395
|
totalDocsImported: 0,
|
|
400
396
|
}),
|
|
401
|
-
/invalid connector id
|
|
397
|
+
/invalid connector id/
|
|
402
398
|
);
|
|
403
399
|
});
|
|
404
400
|
|
|
@@ -418,7 +414,7 @@ test("state store: rejects invalid lastSyncStatus at boundary (PR #724 review)",
|
|
|
418
414
|
lastSyncStatus: "BOGUS" as unknown as ConnectorSyncStatus,
|
|
419
415
|
totalDocsImported: 0,
|
|
420
416
|
} as unknown as Parameters<typeof writeConnectorState>[2]),
|
|
421
|
-
/lastSyncStatus must be one of
|
|
417
|
+
/lastSyncStatus must be one of/
|
|
422
418
|
);
|
|
423
419
|
// And the file must NOT have been written.
|
|
424
420
|
const after = await readConnectorState(memoryDir, "drive");
|
|
@@ -437,7 +433,7 @@ test("state store: rejects malformed cursor at boundary (PR #724 review)", async
|
|
|
437
433
|
lastSyncStatus: "success",
|
|
438
434
|
totalDocsImported: 0,
|
|
439
435
|
}),
|
|
440
|
-
/cursor must have string
|
|
436
|
+
/cursor must have string/
|
|
441
437
|
);
|
|
442
438
|
});
|
|
443
439
|
|
|
@@ -458,7 +454,10 @@ test("state store: listConnectorStates skips corrupt files but rethrows EACCES (
|
|
|
458
454
|
fs.writeFileSync(path.join(dir, "corrupt.json"), "{ not valid json");
|
|
459
455
|
// Listing succeeds, returning only the good record.
|
|
460
456
|
const states = await listConnectorStates(memoryDir);
|
|
461
|
-
assert.deepEqual(
|
|
457
|
+
assert.deepEqual(
|
|
458
|
+
states.map((s) => s.id),
|
|
459
|
+
["good"]
|
|
460
|
+
);
|
|
462
461
|
|
|
463
462
|
// Now make one of the files unreadable (EACCES). On platforms that respect
|
|
464
463
|
// chmod for the current user (POSIX, when not running as root), this
|
|
@@ -477,7 +476,7 @@ test("state store: listConnectorStates skips corrupt files but rethrows EACCES (
|
|
|
477
476
|
});
|
|
478
477
|
await assert.rejects(
|
|
479
478
|
() => listConnectorStates(memoryDir),
|
|
480
|
-
(err: NodeJS.ErrnoException) => err.code === "EACCES" || err.code === "EPERM"
|
|
479
|
+
(err: NodeJS.ErrnoException) => err.code === "EACCES" || err.code === "EPERM"
|
|
481
480
|
);
|
|
482
481
|
}
|
|
483
482
|
});
|
|
@@ -493,7 +492,7 @@ test("state store: rejects negative totalDocsImported", async (t) => {
|
|
|
493
492
|
lastSyncStatus: "never",
|
|
494
493
|
totalDocsImported: -1,
|
|
495
494
|
}),
|
|
496
|
-
/non-negative integer
|
|
495
|
+
/non-negative integer/
|
|
497
496
|
);
|
|
498
497
|
});
|
|
499
498
|
|
|
@@ -510,7 +509,7 @@ test("state store: rejects fractional totalDocsImported (PR #724 review)", async
|
|
|
510
509
|
lastSyncStatus: "never",
|
|
511
510
|
totalDocsImported: 3.7,
|
|
512
511
|
}),
|
|
513
|
-
/non-negative integer
|
|
512
|
+
/non-negative integer/
|
|
514
513
|
);
|
|
515
514
|
// And the read-shape check must reject a hand-crafted file with a float.
|
|
516
515
|
const dir = path.join(memoryDir, "state", "connectors");
|
|
@@ -524,12 +523,9 @@ test("state store: rejects fractional totalDocsImported (PR #724 review)", async
|
|
|
524
523
|
lastSyncStatus: "never",
|
|
525
524
|
totalDocsImported: 3.7,
|
|
526
525
|
updatedAt: new Date().toISOString(),
|
|
527
|
-
})
|
|
528
|
-
);
|
|
529
|
-
await assert.rejects(
|
|
530
|
-
() => readConnectorState(memoryDir, "drive"),
|
|
531
|
-
/does not match ConnectorState shape/,
|
|
526
|
+
})
|
|
532
527
|
);
|
|
528
|
+
await assert.rejects(() => readConnectorState(memoryDir, "drive"), /does not match ConnectorState shape/);
|
|
533
529
|
});
|
|
534
530
|
|
|
535
531
|
test("state store: refuses symlinked state file (PR #724 review)", async (t) => {
|
|
@@ -558,7 +554,7 @@ test("state store: refuses symlinked state file (PR #724 review)", async (t) =>
|
|
|
558
554
|
lastSyncStatus: "never",
|
|
559
555
|
totalDocsImported: 999,
|
|
560
556
|
updatedAt: new Date().toISOString(),
|
|
561
|
-
})
|
|
557
|
+
})
|
|
562
558
|
);
|
|
563
559
|
// Plant the symlink where the connector state would live.
|
|
564
560
|
const dir = path.join(memoryDir, "state", "connectors");
|
|
@@ -566,10 +562,7 @@ test("state store: refuses symlinked state file (PR #724 review)", async (t) =>
|
|
|
566
562
|
const linkPath = path.join(dir, "drive.json");
|
|
567
563
|
fs.symlinkSync(outsideFile, linkPath);
|
|
568
564
|
|
|
569
|
-
await assert.rejects(
|
|
570
|
-
() => readConnectorState(memoryDir, "drive"),
|
|
571
|
-
/symlink/,
|
|
572
|
-
);
|
|
565
|
+
await assert.rejects(() => readConnectorState(memoryDir, "drive"), /symlink/);
|
|
573
566
|
await assert.rejects(
|
|
574
567
|
() =>
|
|
575
568
|
writeConnectorState(memoryDir, "drive", {
|
|
@@ -579,7 +572,7 @@ test("state store: refuses symlinked state file (PR #724 review)", async (t) =>
|
|
|
579
572
|
lastSyncStatus: "never",
|
|
580
573
|
totalDocsImported: 0,
|
|
581
574
|
}),
|
|
582
|
-
/symlink
|
|
575
|
+
/symlink/
|
|
583
576
|
);
|
|
584
577
|
});
|
|
585
578
|
|
|
@@ -598,14 +591,8 @@ test("state store: refuses symlinked state directory (PR #724 review)", async (t
|
|
|
598
591
|
fs.mkdirSync(path.join(memoryDir, "state"), { recursive: true });
|
|
599
592
|
fs.symlinkSync(outside, path.join(memoryDir, "state", "connectors"));
|
|
600
593
|
|
|
601
|
-
await assert.rejects(
|
|
602
|
-
|
|
603
|
-
/symlink/,
|
|
604
|
-
);
|
|
605
|
-
await assert.rejects(
|
|
606
|
-
() => readConnectorState(memoryDir, "drive"),
|
|
607
|
-
/symlink/,
|
|
608
|
-
);
|
|
594
|
+
await assert.rejects(() => listConnectorStates(memoryDir), /symlink/);
|
|
595
|
+
await assert.rejects(() => readConnectorState(memoryDir, "drive"), /symlink/);
|
|
609
596
|
});
|
|
610
597
|
|
|
611
598
|
test("state store: truncates oversized lastSyncError", async (t) => {
|
|
@@ -623,15 +610,317 @@ test("state store: truncates oversized lastSyncError", async (t) => {
|
|
|
623
610
|
assert.ok(written.lastSyncError!.length <= 1024);
|
|
624
611
|
});
|
|
625
612
|
|
|
613
|
+
test("state store: serializes connector state locks for one connector", async (t) => {
|
|
614
|
+
const memoryDir = makeMemoryDir(t);
|
|
615
|
+
const events: string[] = [];
|
|
616
|
+
let releaseFirst!: () => void;
|
|
617
|
+
const firstCanFinish = new Promise<void>((resolve) => {
|
|
618
|
+
releaseFirst = resolve;
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
const first = withConnectorStateLock(memoryDir, "drive", async () => {
|
|
622
|
+
events.push("first:start");
|
|
623
|
+
await firstCanFinish;
|
|
624
|
+
events.push("first:end");
|
|
625
|
+
return "first";
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
await waitForTest(() => events.includes("first:start"));
|
|
629
|
+
|
|
630
|
+
const second = withConnectorStateLock(memoryDir, "drive", async () => {
|
|
631
|
+
events.push("second:start");
|
|
632
|
+
return "second";
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
await new Promise<void>((resolve) => setTimeout(resolve, 25));
|
|
636
|
+
assert.deepEqual(events, ["first:start"]);
|
|
637
|
+
releaseFirst();
|
|
638
|
+
|
|
639
|
+
assert.deepEqual(await Promise.all([first, second]), ["first", "second"]);
|
|
640
|
+
assert.deepEqual(events, ["first:start", "first:end", "second:start"]);
|
|
641
|
+
assert.equal(fs.existsSync(path.join(memoryDir, "state", "connector-locks", "drive.lock")), false);
|
|
642
|
+
});
|
|
643
|
+
|
|
644
|
+
test("state store: treats already-removed stale locks as benign", async (t) => {
|
|
645
|
+
const memoryDir = makeMemoryDir(t);
|
|
646
|
+
const lockDir = path.join(memoryDir, "state", "connector-locks");
|
|
647
|
+
const lockPath = path.join(lockDir, "drive.lock");
|
|
648
|
+
fs.mkdirSync(lockDir, { recursive: true });
|
|
649
|
+
|
|
650
|
+
await _unlinkStaleConnectorLockForTest(lockPath);
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
test("state store: does not evict a freshly refreshed lock held by a live process", async (t) => {
|
|
654
|
+
const memoryDir = makeMemoryDir(t);
|
|
655
|
+
const lockDir = path.join(memoryDir, "state", "connector-locks");
|
|
656
|
+
const lockPath = path.join(lockDir, "drive.lock");
|
|
657
|
+
fs.mkdirSync(lockDir, { recursive: true });
|
|
658
|
+
const freshDate = new Date();
|
|
659
|
+
fs.writeFileSync(
|
|
660
|
+
lockPath,
|
|
661
|
+
`${JSON.stringify({
|
|
662
|
+
pid: process.pid,
|
|
663
|
+
token: "live-lock",
|
|
664
|
+
createdAt: freshDate.toISOString(),
|
|
665
|
+
refreshedAt: freshDate.toISOString(),
|
|
666
|
+
})}\n`
|
|
667
|
+
);
|
|
668
|
+
fs.utimesSync(lockPath, freshDate, freshDate);
|
|
669
|
+
|
|
670
|
+
assert.equal(await _tryAcquireConnectorLockForTest(memoryDir, "drive"), null);
|
|
671
|
+
assert.equal(JSON.parse(fs.readFileSync(lockPath, "utf8")).token, "live-lock");
|
|
672
|
+
});
|
|
673
|
+
|
|
674
|
+
test("state store: evicts an unrefreshed stale lock even when the pid is live", async (t) => {
|
|
675
|
+
const memoryDir = makeMemoryDir(t);
|
|
676
|
+
const lockDir = path.join(memoryDir, "state", "connector-locks");
|
|
677
|
+
const lockPath = path.join(lockDir, "drive.lock");
|
|
678
|
+
fs.mkdirSync(lockDir, { recursive: true });
|
|
679
|
+
const staleDate = new Date(Date.now() - 11 * 60 * 1000);
|
|
680
|
+
fs.writeFileSync(
|
|
681
|
+
lockPath,
|
|
682
|
+
`${JSON.stringify({
|
|
683
|
+
pid: process.pid,
|
|
684
|
+
token: "reused-pid-lock",
|
|
685
|
+
createdAt: staleDate.toISOString(),
|
|
686
|
+
refreshedAt: staleDate.toISOString(),
|
|
687
|
+
})}\n`
|
|
688
|
+
);
|
|
689
|
+
fs.utimesSync(lockPath, staleDate, staleDate);
|
|
690
|
+
|
|
691
|
+
assert.equal(await _tryAcquireConnectorLockForTest(memoryDir, "drive"), null);
|
|
692
|
+
assert.equal(fs.existsSync(lockPath), false);
|
|
693
|
+
});
|
|
694
|
+
|
|
695
|
+
test("state store: stale cleanup does not race another reclaim holder", async (t) => {
|
|
696
|
+
const memoryDir = makeMemoryDir(t);
|
|
697
|
+
const lockDir = path.join(memoryDir, "state", "connector-locks");
|
|
698
|
+
const lockPath = path.join(lockDir, "drive.lock");
|
|
699
|
+
const reclaimPath = `${lockPath}.reclaim`;
|
|
700
|
+
fs.mkdirSync(lockDir, { recursive: true });
|
|
701
|
+
const staleDate = new Date(Date.now() - 11 * 60 * 1000);
|
|
702
|
+
fs.writeFileSync(
|
|
703
|
+
lockPath,
|
|
704
|
+
`${JSON.stringify({
|
|
705
|
+
pid: process.pid,
|
|
706
|
+
token: "stale-lock",
|
|
707
|
+
createdAt: staleDate.toISOString(),
|
|
708
|
+
refreshedAt: staleDate.toISOString(),
|
|
709
|
+
})}\n`
|
|
710
|
+
);
|
|
711
|
+
fs.utimesSync(lockPath, staleDate, staleDate);
|
|
712
|
+
fs.writeFileSync(reclaimPath, "other-reclaimer");
|
|
713
|
+
|
|
714
|
+
await _unlinkStaleConnectorLockForTest(lockPath);
|
|
715
|
+
|
|
716
|
+
assert.equal(JSON.parse(fs.readFileSync(lockPath, "utf8")).token, "stale-lock");
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
test("state store: stale cleanup preserves a lock refreshed by its owner", async (t) => {
|
|
720
|
+
const memoryDir = makeMemoryDir(t);
|
|
721
|
+
const lockDir = path.join(memoryDir, "state", "connector-locks");
|
|
722
|
+
const lockPath = path.join(lockDir, "drive.lock");
|
|
723
|
+
fs.mkdirSync(lockDir, { recursive: true });
|
|
724
|
+
const staleDate = new Date(Date.now() - 11 * 60 * 1000);
|
|
725
|
+
const lease = { path: lockPath, token: "owner-lock" };
|
|
726
|
+
fs.writeFileSync(
|
|
727
|
+
lockPath,
|
|
728
|
+
`${JSON.stringify({
|
|
729
|
+
pid: process.pid,
|
|
730
|
+
token: lease.token,
|
|
731
|
+
createdAt: staleDate.toISOString(),
|
|
732
|
+
refreshedAt: staleDate.toISOString(),
|
|
733
|
+
})}\n`
|
|
734
|
+
);
|
|
735
|
+
fs.utimesSync(lockPath, staleDate, staleDate);
|
|
736
|
+
|
|
737
|
+
assert.equal(await _refreshConnectorLockForTest(lease), true);
|
|
738
|
+
await _unlinkStaleConnectorLockForTest(lockPath);
|
|
739
|
+
|
|
740
|
+
assert.equal(JSON.parse(fs.readFileSync(lockPath, "utf8")).token, lease.token);
|
|
741
|
+
});
|
|
742
|
+
|
|
743
|
+
test("state store: release only removes the matching connector lock token", async (t) => {
|
|
744
|
+
const memoryDir = makeMemoryDir(t);
|
|
745
|
+
const lease = await _tryAcquireConnectorLockForTest(memoryDir, "drive");
|
|
746
|
+
assert.ok(lease);
|
|
747
|
+
const replacement = {
|
|
748
|
+
pid: process.pid,
|
|
749
|
+
token: "replacement-lock",
|
|
750
|
+
createdAt: new Date().toISOString(),
|
|
751
|
+
refreshedAt: new Date().toISOString(),
|
|
752
|
+
};
|
|
753
|
+
fs.writeFileSync(lease.path, `${JSON.stringify(replacement)}\n`);
|
|
754
|
+
|
|
755
|
+
await _releaseConnectorLockForTest(lease);
|
|
756
|
+
|
|
757
|
+
assert.equal(JSON.parse(fs.readFileSync(lease.path, "utf8")).token, "replacement-lock");
|
|
758
|
+
});
|
|
759
|
+
|
|
760
|
+
test("state store: aborts scoped work when heartbeat loses the connector lock", async (t) => {
|
|
761
|
+
const memoryDir = makeMemoryDir(t);
|
|
762
|
+
const lockPath = path.join(memoryDir, "state", "connector-locks", "drive.lock");
|
|
763
|
+
let scopedSignal: AbortSignal | undefined;
|
|
764
|
+
let scopedWorkSettled = false;
|
|
765
|
+
let resolveStarted!: () => void;
|
|
766
|
+
const started = new Promise<void>((resolve) => {
|
|
767
|
+
resolveStarted = resolve;
|
|
768
|
+
});
|
|
769
|
+
|
|
770
|
+
const lockedWork = _withConnectorStateLockForTest(
|
|
771
|
+
memoryDir,
|
|
772
|
+
"drive",
|
|
773
|
+
async (abortSignal) => {
|
|
774
|
+
scopedSignal = abortSignal;
|
|
775
|
+
resolveStarted();
|
|
776
|
+
await new Promise<never>((_resolve, reject) => {
|
|
777
|
+
abortSignal.addEventListener(
|
|
778
|
+
"abort",
|
|
779
|
+
() => {
|
|
780
|
+
setTimeout(() => {
|
|
781
|
+
scopedWorkSettled = true;
|
|
782
|
+
reject(abortSignal.reason);
|
|
783
|
+
}, 20);
|
|
784
|
+
},
|
|
785
|
+
{ once: true },
|
|
786
|
+
);
|
|
787
|
+
});
|
|
788
|
+
},
|
|
789
|
+
{ heartbeatMs: 5, unrefHeartbeat: false },
|
|
790
|
+
);
|
|
791
|
+
|
|
792
|
+
await started;
|
|
793
|
+
await waitForTest(() => fs.existsSync(lockPath));
|
|
794
|
+
const replacement = {
|
|
795
|
+
pid: process.pid,
|
|
796
|
+
token: "replacement-lock",
|
|
797
|
+
createdAt: new Date().toISOString(),
|
|
798
|
+
refreshedAt: new Date().toISOString(),
|
|
799
|
+
};
|
|
800
|
+
fs.writeFileSync(lockPath, `${JSON.stringify(replacement)}\n`);
|
|
801
|
+
|
|
802
|
+
await assert.rejects(lockedWork, /lost connector "drive" state lock/);
|
|
803
|
+
assert.equal(scopedWorkSettled, true);
|
|
804
|
+
assert.equal(scopedSignal?.aborted, true);
|
|
805
|
+
assert.equal(JSON.parse(fs.readFileSync(lockPath, "utf8")).token, "replacement-lock");
|
|
806
|
+
});
|
|
807
|
+
|
|
808
|
+
test("state store: refreshing an unlinked stale lease reports a newer lock owner", async (t) => {
|
|
809
|
+
const memoryDir = makeMemoryDir(t);
|
|
810
|
+
const lease = await _tryAcquireConnectorLockForTest(memoryDir, "drive");
|
|
811
|
+
assert.ok(lease);
|
|
812
|
+
const probeHandle = await fs.promises.open(lease.path, "r");
|
|
813
|
+
const fileHandlePrototype = Object.getPrototypeOf(probeHandle) as {
|
|
814
|
+
readFile: (...args: unknown[]) => Promise<unknown>;
|
|
815
|
+
};
|
|
816
|
+
const originalReadFile = fileHandlePrototype.readFile;
|
|
817
|
+
await probeHandle.close();
|
|
818
|
+
const replacement = {
|
|
819
|
+
pid: process.pid,
|
|
820
|
+
token: "replacement-lock",
|
|
821
|
+
createdAt: new Date().toISOString(),
|
|
822
|
+
refreshedAt: new Date().toISOString(),
|
|
823
|
+
};
|
|
824
|
+
let replaced = false;
|
|
825
|
+
|
|
826
|
+
fileHandlePrototype.readFile = async function readFileAndReplace(...args: unknown[]) {
|
|
827
|
+
const result = await originalReadFile.apply(this, args);
|
|
828
|
+
if (!replaced) {
|
|
829
|
+
replaced = true;
|
|
830
|
+
fs.unlinkSync(lease.path);
|
|
831
|
+
fs.writeFileSync(lease.path, `${JSON.stringify(replacement)}\n`);
|
|
832
|
+
}
|
|
833
|
+
return result;
|
|
834
|
+
};
|
|
835
|
+
|
|
836
|
+
try {
|
|
837
|
+
assert.equal(await _refreshConnectorLockForTest(lease), false);
|
|
838
|
+
} finally {
|
|
839
|
+
fileHandlePrototype.readFile = originalReadFile;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
assert.equal(JSON.parse(fs.readFileSync(lease.path, "utf8")).token, "replacement-lock");
|
|
843
|
+
});
|
|
844
|
+
|
|
845
|
+
test("state store: release does not unlink a lock path replaced after ownership read", async (t) => {
|
|
846
|
+
const memoryDir = makeMemoryDir(t);
|
|
847
|
+
const lease = await _tryAcquireConnectorLockForTest(memoryDir, "drive");
|
|
848
|
+
assert.ok(lease);
|
|
849
|
+
const probeHandle = await fs.promises.open(lease.path, "r");
|
|
850
|
+
const fileHandlePrototype = Object.getPrototypeOf(probeHandle) as {
|
|
851
|
+
readFile: (...args: unknown[]) => Promise<unknown>;
|
|
852
|
+
};
|
|
853
|
+
const originalReadFile = fileHandlePrototype.readFile;
|
|
854
|
+
await probeHandle.close();
|
|
855
|
+
const replacement = {
|
|
856
|
+
pid: process.pid,
|
|
857
|
+
token: "replacement-lock",
|
|
858
|
+
createdAt: new Date().toISOString(),
|
|
859
|
+
refreshedAt: new Date().toISOString(),
|
|
860
|
+
};
|
|
861
|
+
let replaced = false;
|
|
862
|
+
|
|
863
|
+
fileHandlePrototype.readFile = async function readFileAndReplace(...args: unknown[]) {
|
|
864
|
+
const result = await originalReadFile.apply(this, args);
|
|
865
|
+
if (!replaced) {
|
|
866
|
+
replaced = true;
|
|
867
|
+
fs.unlinkSync(lease.path);
|
|
868
|
+
fs.writeFileSync(lease.path, `${JSON.stringify(replacement)}\n`);
|
|
869
|
+
}
|
|
870
|
+
return result;
|
|
871
|
+
};
|
|
872
|
+
|
|
873
|
+
try {
|
|
874
|
+
await _releaseConnectorLockForTest(lease);
|
|
875
|
+
} finally {
|
|
876
|
+
fileHandlePrototype.readFile = originalReadFile;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
assert.equal(JSON.parse(fs.readFileSync(lease.path, "utf8")).token, "replacement-lock");
|
|
880
|
+
});
|
|
881
|
+
|
|
882
|
+
test("state store: removes connector lock when lock metadata write fails", async (t) => {
|
|
883
|
+
const memoryDir = makeMemoryDir(t);
|
|
884
|
+
const probePath = path.join(memoryDir, "probe.lock");
|
|
885
|
+
const probeHandle = await fs.promises.open(probePath, "w");
|
|
886
|
+
const fileHandlePrototype = Object.getPrototypeOf(probeHandle) as {
|
|
887
|
+
writeFile: typeof probeHandle.writeFile;
|
|
888
|
+
};
|
|
889
|
+
const originalWriteFile = fileHandlePrototype.writeFile;
|
|
890
|
+
await probeHandle.close();
|
|
891
|
+
|
|
892
|
+
fileHandlePrototype.writeFile = async function writeFileFailure() {
|
|
893
|
+
throw Object.assign(new Error("simulated lock write failure"), { code: "EIO" });
|
|
894
|
+
};
|
|
895
|
+
|
|
896
|
+
try {
|
|
897
|
+
await assert.rejects(
|
|
898
|
+
() => withConnectorStateLock(memoryDir, "drive", async () => "unreachable"),
|
|
899
|
+
/simulated lock write failure/
|
|
900
|
+
);
|
|
901
|
+
} finally {
|
|
902
|
+
fileHandlePrototype.writeFile = originalWriteFile;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
assert.equal(fs.existsSync(path.join(memoryDir, "state", "connector-locks", "drive.lock")), false);
|
|
906
|
+
});
|
|
907
|
+
|
|
908
|
+
async function waitForTest(predicate: () => boolean): Promise<void> {
|
|
909
|
+
const deadline = Date.now() + 1_000;
|
|
910
|
+
while (!predicate()) {
|
|
911
|
+
if (Date.now() >= deadline) {
|
|
912
|
+
throw new Error("timed out waiting for test condition");
|
|
913
|
+
}
|
|
914
|
+
await new Promise<void>((resolve) => setTimeout(resolve, 5));
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
|
|
626
918
|
test("state store: rejects corrupt JSON loudly via readConnectorState", async (t) => {
|
|
627
919
|
const memoryDir = makeMemoryDir(t);
|
|
628
920
|
const dir = path.join(memoryDir, "state", "connectors");
|
|
629
921
|
fs.mkdirSync(dir, { recursive: true });
|
|
630
922
|
fs.writeFileSync(path.join(dir, "drive.json"), "{ not valid json");
|
|
631
|
-
await assert.rejects(
|
|
632
|
-
() => readConnectorState(memoryDir, "drive"),
|
|
633
|
-
/not valid JSON/,
|
|
634
|
-
);
|
|
923
|
+
await assert.rejects(() => readConnectorState(memoryDir, "drive"), /not valid JSON/);
|
|
635
924
|
});
|
|
636
925
|
|
|
637
926
|
test("state store: rejects null parsed result", async (t) => {
|
|
@@ -640,10 +929,7 @@ test("state store: rejects null parsed result", async (t) => {
|
|
|
640
929
|
const dir = path.join(memoryDir, "state", "connectors");
|
|
641
930
|
fs.mkdirSync(dir, { recursive: true });
|
|
642
931
|
fs.writeFileSync(path.join(dir, "drive.json"), "null");
|
|
643
|
-
await assert.rejects(
|
|
644
|
-
() => readConnectorState(memoryDir, "drive"),
|
|
645
|
-
/does not match ConnectorState shape/,
|
|
646
|
-
);
|
|
932
|
+
await assert.rejects(() => readConnectorState(memoryDir, "drive"), /does not match ConnectorState shape/);
|
|
647
933
|
});
|
|
648
934
|
|
|
649
935
|
// ───────────────────────────────────────────────────────────────────────────
|