@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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { log } from "../logger.js";
|
|
2
2
|
import type { PluginConfig } from "../types.js";
|
|
3
|
+
import { isAbortError } from "../abort-error.js";
|
|
4
|
+
import { withTimeoutSignal } from "./abort.js";
|
|
3
5
|
|
|
4
6
|
type ProviderConfig = {
|
|
5
7
|
type: "openai" | "local";
|
|
@@ -38,23 +40,29 @@ export class EmbedHelper {
|
|
|
38
40
|
/**
|
|
39
41
|
* Embed a single text string. Returns null if no provider is available.
|
|
40
42
|
*/
|
|
41
|
-
async embed(text: string): Promise<number[] | null> {
|
|
43
|
+
async embed(text: string, options: { signal?: AbortSignal } = {}): Promise<number[] | null> {
|
|
42
44
|
const provider = this.getProvider();
|
|
43
45
|
if (!provider) return null;
|
|
44
|
-
return this.callEmbed(text, provider);
|
|
46
|
+
return this.callEmbed(text, provider, options.signal);
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
/**
|
|
48
50
|
* Embed a batch of texts. Returns an array parallel to input; entries are null on failure.
|
|
49
51
|
*/
|
|
50
|
-
async embedBatch(
|
|
52
|
+
async embedBatch(
|
|
53
|
+
texts: string[],
|
|
54
|
+
batchSize = 32,
|
|
55
|
+
options: { signal?: AbortSignal } = {},
|
|
56
|
+
): Promise<(number[] | null)[]> {
|
|
51
57
|
const provider = this.getProvider();
|
|
52
58
|
if (!provider) return texts.map(() => null);
|
|
53
59
|
|
|
54
60
|
const results: (number[] | null)[] = new Array(texts.length).fill(null);
|
|
55
61
|
for (let i = 0; i < texts.length; i += batchSize) {
|
|
56
62
|
const batch = texts.slice(i, i + batchSize);
|
|
57
|
-
const batchResults = await Promise.all(
|
|
63
|
+
const batchResults = await Promise.all(
|
|
64
|
+
batch.map((t) => this.callEmbed(t, provider, options.signal)),
|
|
65
|
+
);
|
|
58
66
|
for (let j = 0; j < batchResults.length; j++) {
|
|
59
67
|
results[i + j] = batchResults[j];
|
|
60
68
|
}
|
|
@@ -114,7 +122,11 @@ export class EmbedHelper {
|
|
|
114
122
|
return null;
|
|
115
123
|
}
|
|
116
124
|
|
|
117
|
-
private async callEmbed(
|
|
125
|
+
private async callEmbed(
|
|
126
|
+
input: string,
|
|
127
|
+
provider: ProviderConfig,
|
|
128
|
+
signal?: AbortSignal,
|
|
129
|
+
): Promise<number[] | null> {
|
|
118
130
|
try {
|
|
119
131
|
const res = await fetch(provider.endpoint, {
|
|
120
132
|
method: "POST",
|
|
@@ -124,7 +136,7 @@ export class EmbedHelper {
|
|
|
124
136
|
input: input.slice(0, 8000),
|
|
125
137
|
encoding_format: "float",
|
|
126
138
|
}),
|
|
127
|
-
signal:
|
|
139
|
+
signal: withTimeoutSignal(signal, 30_000),
|
|
128
140
|
});
|
|
129
141
|
if (!res.ok) {
|
|
130
142
|
log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);
|
|
@@ -135,6 +147,7 @@ export class EmbedHelper {
|
|
|
135
147
|
if (!Array.isArray(vector)) return null;
|
|
136
148
|
return vector.map((n: unknown) => { const v = Number(n); return Number.isFinite(v) ? v : 0; });
|
|
137
149
|
} catch (err) {
|
|
150
|
+
if (isAbortError(err)) throw err;
|
|
138
151
|
log.debug(`EmbedHelper error: ${err}`);
|
|
139
152
|
return null;
|
|
140
153
|
}
|
package/src/search/factory.ts
CHANGED
|
@@ -161,9 +161,10 @@ export function createConversationIndexRuntime(
|
|
|
161
161
|
},
|
|
162
162
|
): ConversationIndexRuntime {
|
|
163
163
|
const qmd = createConversationSearchBackend(config) as ConversationQmdRuntime | undefined;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
let faiss: FaissConversationIndexAdapter | undefined;
|
|
165
|
+
if (config.conversationIndexEnabled && config.conversationIndexBackend === "faiss") {
|
|
166
|
+
try {
|
|
167
|
+
faiss = new FaissConversationIndexAdapter({
|
|
167
168
|
memoryDir: config.memoryDir,
|
|
168
169
|
scriptPath: config.conversationIndexFaissScriptPath,
|
|
169
170
|
pythonBin: config.conversationIndexFaissPythonBin,
|
|
@@ -174,8 +175,11 @@ export function createConversationIndexRuntime(
|
|
|
174
175
|
healthTimeoutMs: config.conversationIndexFaissHealthTimeoutMs,
|
|
175
176
|
maxBatchSize: config.conversationIndexFaissMaxBatchSize,
|
|
176
177
|
maxSearchK: config.conversationIndexFaissMaxSearchK,
|
|
177
|
-
|
|
178
|
-
|
|
178
|
+
});
|
|
179
|
+
} catch (err) {
|
|
180
|
+
log.warn(`Conversation index FAISS adapter disabled: ${err instanceof Error ? err.message : String(err)}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
179
183
|
|
|
180
184
|
const backend = createConversationIndexBackend({
|
|
181
185
|
enabled: config.conversationIndexEnabled,
|
|
@@ -2,6 +2,7 @@ import { log } from "../logger.js";
|
|
|
2
2
|
import type { SearchBackend, SearchExecutionOptions, SearchQueryOptions, SearchResult } from "./port.js";
|
|
3
3
|
import type { EmbedHelper } from "./embed-helper.js";
|
|
4
4
|
import { scanMemoryDir } from "./document-scanner.js";
|
|
5
|
+
import { isSearchAborted, throwIfSearchAborted } from "./abort.js";
|
|
5
6
|
|
|
6
7
|
export interface LanceDbBackendOptions {
|
|
7
8
|
dbPath: string;
|
|
@@ -60,24 +61,26 @@ export class LanceDbBackend implements SearchBackend {
|
|
|
60
61
|
_collection?: string,
|
|
61
62
|
maxResults?: number,
|
|
62
63
|
_options?: SearchQueryOptions,
|
|
63
|
-
|
|
64
|
+
execution?: SearchExecutionOptions,
|
|
64
65
|
): Promise<SearchResult[]> {
|
|
65
|
-
return this.hybridSearch(query, _collection, maxResults);
|
|
66
|
+
return this.hybridSearch(query, _collection, maxResults, execution);
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
async searchGlobal(query: string, maxResults?: number,
|
|
69
|
+
async searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
69
70
|
const limit = maxResults ?? 10;
|
|
70
71
|
if (!this.available) return [];
|
|
71
72
|
|
|
72
73
|
try {
|
|
74
|
+
throwIfSearchAborted(execution, "LanceDbBackend global search aborted");
|
|
73
75
|
const db = await this.ensureDb();
|
|
74
76
|
const tableNames = await db.tableNames();
|
|
75
77
|
const allResults: SearchResult[] = [];
|
|
76
78
|
|
|
77
79
|
for (const name of tableNames) {
|
|
80
|
+
throwIfSearchAborted(execution, "LanceDbBackend global search aborted");
|
|
78
81
|
try {
|
|
79
82
|
const table = await db.openTable(name);
|
|
80
|
-
const results = await this.searchTable(table, query, "hybrid", limit);
|
|
83
|
+
const results = await this.searchTable(table, query, "hybrid", limit, execution);
|
|
81
84
|
allResults.push(...results);
|
|
82
85
|
} catch {
|
|
83
86
|
// Skip tables that fail
|
|
@@ -92,33 +95,42 @@ export class LanceDbBackend implements SearchBackend {
|
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
|
|
95
|
-
async bm25Search(query: string, collection?: string, maxResults?: number,
|
|
98
|
+
async bm25Search(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
99
|
+
if (isSearchAborted(execution)) return [];
|
|
96
100
|
const table = await this.ensureTableForCollection(collection ?? this.collection);
|
|
101
|
+
if (isSearchAborted(execution)) return [];
|
|
97
102
|
if (!table) return [];
|
|
98
|
-
return this.searchTable(table, query, "fts", maxResults ?? 10);
|
|
103
|
+
return this.searchTable(table, query, "fts", maxResults ?? 10, execution);
|
|
99
104
|
}
|
|
100
105
|
|
|
101
|
-
async vectorSearch(query: string, collection?: string, maxResults?: number,
|
|
106
|
+
async vectorSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
107
|
+
if (isSearchAborted(execution)) return [];
|
|
102
108
|
const table = await this.ensureTableForCollection(collection ?? this.collection);
|
|
109
|
+
if (isSearchAborted(execution)) return [];
|
|
103
110
|
if (!table) return [];
|
|
104
|
-
return this.searchTable(table, query, "vector", maxResults ?? 10);
|
|
111
|
+
return this.searchTable(table, query, "vector", maxResults ?? 10, execution);
|
|
105
112
|
}
|
|
106
113
|
|
|
107
|
-
async hybridSearch(query: string, collection?: string, maxResults?: number,
|
|
114
|
+
async hybridSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
115
|
+
if (isSearchAborted(execution)) return [];
|
|
108
116
|
const table = await this.ensureTableForCollection(collection ?? this.collection);
|
|
117
|
+
if (isSearchAborted(execution)) return [];
|
|
109
118
|
if (!table) return [];
|
|
110
|
-
return this.searchTable(table, query, "hybrid", maxResults ?? 10);
|
|
119
|
+
return this.searchTable(table, query, "hybrid", maxResults ?? 10, execution);
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
async update(execution?: SearchExecutionOptions): Promise<void> {
|
|
114
123
|
await this.updateCollection(this.collection, execution);
|
|
115
124
|
}
|
|
116
125
|
|
|
117
|
-
async updateCollection(collection: string,
|
|
126
|
+
async updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void> {
|
|
127
|
+
if (isSearchAborted(execution)) return;
|
|
118
128
|
const table = await this.ensureTableForCollection(collection);
|
|
129
|
+
if (isSearchAborted(execution)) return;
|
|
119
130
|
if (!table) return;
|
|
120
131
|
|
|
121
132
|
const docs = await scanMemoryDir(this.memoryDir);
|
|
133
|
+
if (isSearchAborted(execution)) return;
|
|
122
134
|
if (docs.length === 0) {
|
|
123
135
|
// Clear stale data when no docs remain
|
|
124
136
|
try {
|
|
@@ -131,27 +143,40 @@ export class LanceDbBackend implements SearchBackend {
|
|
|
131
143
|
return;
|
|
132
144
|
}
|
|
133
145
|
|
|
146
|
+
const existingVectors = new Map<string, number[]>();
|
|
147
|
+
try {
|
|
148
|
+
const existingRows = await table.query().select(["docid", "vector"]).toArray();
|
|
149
|
+
for (const row of existingRows ?? []) {
|
|
150
|
+
if (isSearchAborted(execution)) return;
|
|
151
|
+
const docid = row.docid;
|
|
152
|
+
if (typeof docid !== "string") continue;
|
|
153
|
+
const vector = row.vector;
|
|
154
|
+
if (!vector || typeof vector !== "object") continue;
|
|
155
|
+
existingVectors.set(docid, Array.from(vector as ArrayLike<number>));
|
|
156
|
+
}
|
|
157
|
+
} catch {
|
|
158
|
+
// Vector preservation is best-effort; refresh can proceed without it.
|
|
159
|
+
}
|
|
160
|
+
|
|
134
161
|
const rows = docs.map((d) => ({
|
|
135
162
|
docid: d.docid,
|
|
136
163
|
path: d.path,
|
|
137
164
|
content: d.content,
|
|
138
165
|
snippet: d.snippet,
|
|
139
|
-
vector: new Array(this.embeddingDimension).fill(0),
|
|
166
|
+
vector: existingVectors.get(d.docid) ?? new Array(this.embeddingDimension).fill(0),
|
|
140
167
|
}));
|
|
141
168
|
|
|
142
169
|
try {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (collection === this.collection) this.table = null;
|
|
147
|
-
const newTable = await db.createTable(collection, rows);
|
|
170
|
+
if (isSearchAborted(execution)) return;
|
|
171
|
+
await table.add(rows, { mode: "overwrite" });
|
|
172
|
+
if (isSearchAborted(execution)) return;
|
|
148
173
|
// Create FTS index on content column
|
|
149
174
|
try {
|
|
150
|
-
await
|
|
175
|
+
await table.createIndex("content", { config: this.lanceIndex.fts() });
|
|
151
176
|
} catch {
|
|
152
177
|
// FTS index creation may fail on some platforms — degrade gracefully
|
|
153
178
|
}
|
|
154
|
-
if (collection === this.collection) this.table =
|
|
179
|
+
if (collection === this.collection) this.table = table;
|
|
155
180
|
} catch (err) {
|
|
156
181
|
log.debug(`LanceDbBackend update failed: ${err}`);
|
|
157
182
|
}
|
|
@@ -286,28 +311,41 @@ export class LanceDbBackend implements SearchBackend {
|
|
|
286
311
|
return this.table;
|
|
287
312
|
}
|
|
288
313
|
|
|
289
|
-
private async searchTable(
|
|
314
|
+
private async searchTable(
|
|
315
|
+
table: any,
|
|
316
|
+
query: string,
|
|
317
|
+
mode: "fts" | "vector" | "hybrid",
|
|
318
|
+
limit: number,
|
|
319
|
+
execution?: SearchExecutionOptions,
|
|
320
|
+
): Promise<SearchResult[]> {
|
|
290
321
|
try {
|
|
322
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
291
323
|
if (mode === "fts") {
|
|
292
324
|
const results = await table.search(query, "fts").limit(limit).toArray();
|
|
325
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
293
326
|
return this.mapRows(results);
|
|
294
327
|
}
|
|
295
328
|
|
|
296
329
|
if (mode === "vector") {
|
|
297
|
-
const vec = await this.embedHelper.embed(query);
|
|
330
|
+
const vec = await this.embedHelper.embed(query, { signal: execution?.signal });
|
|
331
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
298
332
|
if (!vec) {
|
|
299
333
|
// Fall back to FTS
|
|
300
334
|
const results = await table.search(query, "fts").limit(limit).toArray();
|
|
335
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
301
336
|
return this.mapRows(results);
|
|
302
337
|
}
|
|
303
338
|
const results = await table.search(vec).limit(limit).toArray();
|
|
339
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
304
340
|
return this.mapRows(results);
|
|
305
341
|
}
|
|
306
342
|
|
|
307
343
|
// hybrid — try FTS+vector with RRF reranking
|
|
308
|
-
const vec = await this.embedHelper.embed(query);
|
|
344
|
+
const vec = await this.embedHelper.embed(query, { signal: execution?.signal });
|
|
345
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
309
346
|
if (!vec) {
|
|
310
347
|
const results = await table.search(query, "fts").limit(limit).toArray();
|
|
348
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
311
349
|
return this.mapRows(results);
|
|
312
350
|
}
|
|
313
351
|
|
|
@@ -317,10 +355,12 @@ export class LanceDbBackend implements SearchBackend {
|
|
|
317
355
|
.vector(vec)
|
|
318
356
|
.limit(limit)
|
|
319
357
|
.toArray();
|
|
358
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
320
359
|
return this.mapRows(results);
|
|
321
360
|
} catch {
|
|
322
361
|
// Hybrid may not be supported in all LanceDB versions — fall back to vector
|
|
323
362
|
const results = await table.search(vec).limit(limit).toArray();
|
|
363
|
+
throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);
|
|
324
364
|
return this.mapRows(results);
|
|
325
365
|
}
|
|
326
366
|
} catch (err) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { log } from "../logger.js";
|
|
2
2
|
import type { SearchBackend, SearchExecutionOptions, SearchQueryOptions, SearchResult } from "./port.js";
|
|
3
3
|
import { scanMemoryDir } from "./document-scanner.js";
|
|
4
|
+
import { isSearchAborted, throwIfSearchAborted } from "./abort.js";
|
|
4
5
|
|
|
5
6
|
export interface MeilisearchBackendOptions {
|
|
6
7
|
host: string;
|
|
@@ -63,23 +64,27 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
63
64
|
collection?: string,
|
|
64
65
|
maxResults?: number,
|
|
65
66
|
_options?: SearchQueryOptions,
|
|
66
|
-
|
|
67
|
+
execution?: SearchExecutionOptions,
|
|
67
68
|
): Promise<SearchResult[]> {
|
|
69
|
+
if (isSearchAborted(execution)) return [];
|
|
68
70
|
// Try hybrid first; fall back to plain FTS only if hybrid throws (e.g. no embedder configured)
|
|
69
71
|
try {
|
|
70
|
-
return await this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 0.5, embedder: "default" } }, collection, true);
|
|
72
|
+
return await this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 0.5, embedder: "default" } }, collection, true, execution);
|
|
71
73
|
} catch {
|
|
72
|
-
|
|
74
|
+
if (isSearchAborted(execution)) return [];
|
|
75
|
+
return this.bm25Search(query, collection, maxResults, execution);
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
|
|
76
|
-
async searchGlobal(query: string, maxResults?: number,
|
|
79
|
+
async searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
77
80
|
const limit = maxResults ?? 10;
|
|
78
81
|
if (!this.available) return [];
|
|
79
82
|
|
|
80
83
|
try {
|
|
84
|
+
throwIfSearchAborted(execution, "MeilisearchBackend global search aborted");
|
|
81
85
|
const client = await this.ensureClient();
|
|
82
86
|
const indexes = await client.getIndexes();
|
|
87
|
+
throwIfSearchAborted(execution, "MeilisearchBackend global search aborted");
|
|
83
88
|
const queries = (indexes.results ?? []).map((idx: any) => ({
|
|
84
89
|
indexUid: idx.uid,
|
|
85
90
|
q: query,
|
|
@@ -89,6 +94,7 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
89
94
|
if (queries.length === 0) return [];
|
|
90
95
|
|
|
91
96
|
const multiResult = await client.multiSearch({ queries });
|
|
97
|
+
throwIfSearchAborted(execution, "MeilisearchBackend global search aborted");
|
|
92
98
|
const allResults: SearchResult[] = [];
|
|
93
99
|
for (const result of multiResult.results ?? []) {
|
|
94
100
|
allResults.push(...this.mapHits(result.hits ?? []));
|
|
@@ -101,29 +107,32 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
101
107
|
}
|
|
102
108
|
}
|
|
103
109
|
|
|
104
|
-
async bm25Search(query: string, collection?: string, maxResults?: number,
|
|
105
|
-
return this.doSearch(query, maxResults ?? 10, undefined, collection);
|
|
110
|
+
async bm25Search(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
111
|
+
return this.doSearch(query, maxResults ?? 10, undefined, collection, false, execution);
|
|
106
112
|
}
|
|
107
113
|
|
|
108
|
-
async vectorSearch(query: string, collection?: string, maxResults?: number,
|
|
109
|
-
return this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 1.0, embedder: "default" } }, collection);
|
|
114
|
+
async vectorSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
115
|
+
return this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 1.0, embedder: "default" } }, collection, false, execution);
|
|
110
116
|
}
|
|
111
117
|
|
|
112
|
-
async hybridSearch(query: string, collection?: string, maxResults?: number,
|
|
113
|
-
return this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 0.5, embedder: "default" } }, collection);
|
|
118
|
+
async hybridSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
119
|
+
return this.doSearch(query, maxResults ?? 10, { hybrid: { semanticRatio: 0.5, embedder: "default" } }, collection, false, execution);
|
|
114
120
|
}
|
|
115
121
|
|
|
116
122
|
async update(execution?: SearchExecutionOptions): Promise<void> {
|
|
117
123
|
await this.updateCollection(this.collection, execution);
|
|
118
124
|
}
|
|
119
125
|
|
|
120
|
-
async updateCollection(collection: string,
|
|
126
|
+
async updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void> {
|
|
121
127
|
if (!this.autoIndex || !this.memoryDir) return;
|
|
122
128
|
if (!this.available) return;
|
|
129
|
+
if (isSearchAborted(execution)) return;
|
|
123
130
|
|
|
124
131
|
try {
|
|
125
132
|
const client = await this.ensureClient();
|
|
133
|
+
if (isSearchAborted(execution)) return;
|
|
126
134
|
const docs = await scanMemoryDir(this.memoryDir);
|
|
135
|
+
if (isSearchAborted(execution)) return;
|
|
127
136
|
const index = client.index(collection);
|
|
128
137
|
|
|
129
138
|
const meilDocs = docs.map((d) => ({
|
|
@@ -134,8 +143,10 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
134
143
|
}));
|
|
135
144
|
|
|
136
145
|
// Upsert current docs and wait for the task to complete
|
|
146
|
+
if (isSearchAborted(execution)) return;
|
|
137
147
|
const addTask = await index.addDocuments(meilDocs, { primaryKey: "id" });
|
|
138
148
|
await client.waitForTask(addTask.taskUid, { timeOutMs: this.timeoutMs });
|
|
149
|
+
if (isSearchAborted(execution)) return;
|
|
139
150
|
|
|
140
151
|
// Remove docs that no longer exist on disk (paginated to handle large indexes)
|
|
141
152
|
const currentIds = new Set(docs.map((d) => d.docid));
|
|
@@ -145,6 +156,7 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
145
156
|
let staleIds: string[] = [];
|
|
146
157
|
let hasMore = true;
|
|
147
158
|
while (hasMore) {
|
|
159
|
+
if (isSearchAborted(execution)) return;
|
|
148
160
|
const page = await index.getDocuments({ limit: PAGE_SIZE, offset, fields: ["id"] });
|
|
149
161
|
const results = page.results ?? [];
|
|
150
162
|
for (const doc of results) {
|
|
@@ -155,6 +167,7 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
155
167
|
hasMore = results.length === PAGE_SIZE;
|
|
156
168
|
}
|
|
157
169
|
if (staleIds.length > 0) {
|
|
170
|
+
if (isSearchAborted(execution)) return;
|
|
158
171
|
const delTask = await index.deleteDocuments(staleIds);
|
|
159
172
|
await client.waitForTask(delTask.taskUid, { timeOutMs: this.timeoutMs });
|
|
160
173
|
}
|
|
@@ -207,12 +220,22 @@ export class MeilisearchBackend implements SearchBackend {
|
|
|
207
220
|
return this.client;
|
|
208
221
|
}
|
|
209
222
|
|
|
210
|
-
private async doSearch(
|
|
223
|
+
private async doSearch(
|
|
224
|
+
query: string,
|
|
225
|
+
limit: number,
|
|
226
|
+
extra?: Record<string, unknown>,
|
|
227
|
+
collection?: string,
|
|
228
|
+
rethrow = false,
|
|
229
|
+
execution?: SearchExecutionOptions,
|
|
230
|
+
): Promise<SearchResult[]> {
|
|
211
231
|
if (!this.available) return [];
|
|
232
|
+
if (isSearchAborted(execution)) return [];
|
|
212
233
|
try {
|
|
213
234
|
const client = await this.ensureClient();
|
|
235
|
+
throwIfSearchAborted(execution, "MeilisearchBackend search aborted");
|
|
214
236
|
const index = client.index(collection ?? this.collection);
|
|
215
237
|
const result = await index.search(query, { limit, showRankingScore: true, ...extra });
|
|
238
|
+
throwIfSearchAborted(execution, "MeilisearchBackend search aborted");
|
|
216
239
|
return this.mapHits(result.hits ?? []);
|
|
217
240
|
} catch (err) {
|
|
218
241
|
log.debug(`MeilisearchBackend search failed: ${err}`);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import test from "node:test";
|
|
4
|
+
|
|
5
|
+
import { resolveOramaCollectionDbFilePath } from "./orama-backend.js";
|
|
6
|
+
|
|
7
|
+
test("Orama collection filenames cannot escape dbPath", () => {
|
|
8
|
+
const dbPath = path.join("/tmp", "remnic-orama-db");
|
|
9
|
+
|
|
10
|
+
assert.equal(
|
|
11
|
+
resolveOramaCollectionDbFilePath(dbPath, "openclaw-engram"),
|
|
12
|
+
path.join(dbPath, "openclaw-engram.msp"),
|
|
13
|
+
);
|
|
14
|
+
for (const collection of [
|
|
15
|
+
"../outside",
|
|
16
|
+
"nested/name",
|
|
17
|
+
"",
|
|
18
|
+
".hidden",
|
|
19
|
+
"collection name",
|
|
20
|
+
]) {
|
|
21
|
+
assert.throws(
|
|
22
|
+
() => resolveOramaCollectionDbFilePath(dbPath, collection),
|
|
23
|
+
/Invalid Orama collection/,
|
|
24
|
+
collection,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
@@ -4,6 +4,7 @@ import { log } from "../logger.js";
|
|
|
4
4
|
import type { SearchBackend, SearchExecutionOptions, SearchQueryOptions, SearchResult } from "./port.js";
|
|
5
5
|
import type { EmbedHelper } from "./embed-helper.js";
|
|
6
6
|
import { scanMemoryDir } from "./document-scanner.js";
|
|
7
|
+
import { isSearchAborted, throwIfSearchAborted } from "./abort.js";
|
|
7
8
|
|
|
8
9
|
export interface OramaBackendOptions {
|
|
9
10
|
dbPath: string;
|
|
@@ -13,6 +14,30 @@ export interface OramaBackendOptions {
|
|
|
13
14
|
embeddingDimension: number;
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
const ORAMA_COLLECTION_FILENAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
18
|
+
|
|
19
|
+
function pathIsInside(parent: string, child: string): boolean {
|
|
20
|
+
const relative = path.relative(parent, child);
|
|
21
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function resolveOramaCollectionDbFilePath(dbPath: string, collection: string): string {
|
|
25
|
+
if (!ORAMA_COLLECTION_FILENAME_PATTERN.test(collection)) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Invalid Orama collection name ${JSON.stringify(collection)}. ` +
|
|
28
|
+
"Collection names must match [A-Za-z0-9][A-Za-z0-9._-]*.",
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
const resolvedDbPath = path.resolve(dbPath);
|
|
32
|
+
const filePath = path.resolve(resolvedDbPath, `${collection}.msp`);
|
|
33
|
+
if (!pathIsInside(resolvedDbPath, filePath)) {
|
|
34
|
+
throw new Error(
|
|
35
|
+
`Invalid Orama collection path for ${JSON.stringify(collection)}: resolved outside dbPath.`,
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return filePath;
|
|
39
|
+
}
|
|
40
|
+
|
|
16
41
|
/**
|
|
17
42
|
* Orama search backend — embedded hybrid FTS+vector, pure JS.
|
|
18
43
|
*
|
|
@@ -64,21 +89,23 @@ export class OramaBackend implements SearchBackend {
|
|
|
64
89
|
_collection?: string,
|
|
65
90
|
maxResults?: number,
|
|
66
91
|
_options?: SearchQueryOptions,
|
|
67
|
-
|
|
92
|
+
execution?: SearchExecutionOptions,
|
|
68
93
|
): Promise<SearchResult[]> {
|
|
69
|
-
return this.hybridSearch(query, _collection, maxResults);
|
|
94
|
+
return this.hybridSearch(query, _collection, maxResults, execution);
|
|
70
95
|
}
|
|
71
96
|
|
|
72
|
-
async searchGlobal(query: string, maxResults?: number,
|
|
97
|
+
async searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
73
98
|
const limit = maxResults ?? 10;
|
|
74
99
|
if (!this.available) return [];
|
|
75
100
|
try {
|
|
101
|
+
throwIfSearchAborted(execution, "OramaBackend global search aborted");
|
|
76
102
|
const files = await this.listDbFiles();
|
|
77
103
|
const allResults: SearchResult[] = [];
|
|
78
104
|
for (const file of files) {
|
|
105
|
+
throwIfSearchAborted(execution, "OramaBackend global search aborted");
|
|
79
106
|
const db = await this.loadDbFromFile(file);
|
|
80
107
|
if (!db) continue;
|
|
81
|
-
const results = await this.searchDb(db, query, "hybrid", limit);
|
|
108
|
+
const results = await this.searchDb(db, query, "hybrid", limit, execution);
|
|
82
109
|
allResults.push(...results);
|
|
83
110
|
}
|
|
84
111
|
allResults.sort((a, b) => b.score - a.score);
|
|
@@ -89,34 +116,43 @@ export class OramaBackend implements SearchBackend {
|
|
|
89
116
|
}
|
|
90
117
|
}
|
|
91
118
|
|
|
92
|
-
async bm25Search(query: string, collection?: string, maxResults?: number,
|
|
119
|
+
async bm25Search(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
120
|
+
if (isSearchAborted(execution)) return [];
|
|
93
121
|
const db = await this.ensureDbForCollection(collection ?? this.collection);
|
|
122
|
+
if (isSearchAborted(execution)) return [];
|
|
94
123
|
if (!db) return [];
|
|
95
|
-
return this.searchDb(db, query, "fulltext", maxResults ?? 10);
|
|
124
|
+
return this.searchDb(db, query, "fulltext", maxResults ?? 10, execution);
|
|
96
125
|
}
|
|
97
126
|
|
|
98
|
-
async vectorSearch(query: string, collection?: string, maxResults?: number,
|
|
127
|
+
async vectorSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
128
|
+
if (isSearchAborted(execution)) return [];
|
|
99
129
|
const db = await this.ensureDbForCollection(collection ?? this.collection);
|
|
130
|
+
if (isSearchAborted(execution)) return [];
|
|
100
131
|
if (!db) return [];
|
|
101
|
-
return this.searchDb(db, query, "vector", maxResults ?? 10);
|
|
132
|
+
return this.searchDb(db, query, "vector", maxResults ?? 10, execution);
|
|
102
133
|
}
|
|
103
134
|
|
|
104
|
-
async hybridSearch(query: string, collection?: string, maxResults?: number,
|
|
135
|
+
async hybridSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {
|
|
136
|
+
if (isSearchAborted(execution)) return [];
|
|
105
137
|
const db = await this.ensureDbForCollection(collection ?? this.collection);
|
|
138
|
+
if (isSearchAborted(execution)) return [];
|
|
106
139
|
if (!db) return [];
|
|
107
|
-
return this.searchDb(db, query, "hybrid", maxResults ?? 10);
|
|
140
|
+
return this.searchDb(db, query, "hybrid", maxResults ?? 10, execution);
|
|
108
141
|
}
|
|
109
142
|
|
|
110
143
|
async update(execution?: SearchExecutionOptions): Promise<void> {
|
|
111
144
|
await this.updateCollection(this.collection, execution);
|
|
112
145
|
}
|
|
113
146
|
|
|
114
|
-
async updateCollection(collection: string,
|
|
147
|
+
async updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void> {
|
|
148
|
+
if (isSearchAborted(execution)) return;
|
|
115
149
|
const db = await this.ensureDbForCollection(collection);
|
|
150
|
+
if (isSearchAborted(execution)) return;
|
|
116
151
|
if (!db) return;
|
|
117
152
|
const { search: oramaSearch, insert, remove, count } = this.oramaModule;
|
|
118
153
|
|
|
119
154
|
const docs = await scanMemoryDir(this.memoryDir);
|
|
155
|
+
if (isSearchAborted(execution)) return;
|
|
120
156
|
const docMap = new Map(docs.map((d) => [d.docid, d]));
|
|
121
157
|
const { update: oramaUpdate } = this.oramaModule;
|
|
122
158
|
|
|
@@ -126,6 +162,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
126
162
|
if (existingCount > 0) {
|
|
127
163
|
const allHits = await oramaSearch(db, { term: "", limit: existingCount + 100 });
|
|
128
164
|
for (const hit of allHits.hits) {
|
|
165
|
+
if (isSearchAborted(execution)) return;
|
|
129
166
|
if (!docMap.has(hit.document.id)) {
|
|
130
167
|
await remove(db, hit.id);
|
|
131
168
|
} else {
|
|
@@ -139,6 +176,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
139
176
|
|
|
140
177
|
// Insert new docs, update existing ones (preserving vectors since update is remove+insert)
|
|
141
178
|
for (const doc of docs) {
|
|
179
|
+
if (isSearchAborted(execution)) return;
|
|
142
180
|
const existing = existingDocs.get(doc.docid);
|
|
143
181
|
if (existing) {
|
|
144
182
|
const payload: Record<string, unknown> = {
|
|
@@ -169,6 +207,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
169
207
|
}
|
|
170
208
|
}
|
|
171
209
|
|
|
210
|
+
if (isSearchAborted(execution)) return;
|
|
172
211
|
await this.persistDbForCollection(db, collection);
|
|
173
212
|
}
|
|
174
213
|
|
|
@@ -293,7 +332,7 @@ export class OramaBackend implements SearchBackend {
|
|
|
293
332
|
}
|
|
294
333
|
|
|
295
334
|
private dbFilePath(collection: string): string {
|
|
296
|
-
return
|
|
335
|
+
return resolveOramaCollectionDbFilePath(this.dbPath, collection);
|
|
297
336
|
}
|
|
298
337
|
|
|
299
338
|
private async listDbFiles(): Promise<string[]> {
|
|
@@ -317,16 +356,24 @@ export class OramaBackend implements SearchBackend {
|
|
|
317
356
|
}
|
|
318
357
|
}
|
|
319
358
|
|
|
320
|
-
private async searchDb(
|
|
359
|
+
private async searchDb(
|
|
360
|
+
db: any,
|
|
361
|
+
query: string,
|
|
362
|
+
mode: "fulltext" | "vector" | "hybrid",
|
|
363
|
+
limit: number,
|
|
364
|
+
execution?: SearchExecutionOptions,
|
|
365
|
+
): Promise<SearchResult[]> {
|
|
321
366
|
const { search: oramaSearch } = this.oramaModule;
|
|
322
367
|
|
|
323
368
|
try {
|
|
369
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
324
370
|
let searchParams: any;
|
|
325
371
|
|
|
326
372
|
if (mode === "fulltext") {
|
|
327
373
|
searchParams = { term: query, limit };
|
|
328
374
|
} else if (mode === "vector") {
|
|
329
|
-
const vec = await this.embedHelper.embed(query);
|
|
375
|
+
const vec = await this.embedHelper.embed(query, { signal: execution?.signal });
|
|
376
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
330
377
|
if (!vec) {
|
|
331
378
|
// Fall back to fulltext if no embeddings available
|
|
332
379
|
searchParams = { term: query, limit };
|
|
@@ -335,7 +382,8 @@ export class OramaBackend implements SearchBackend {
|
|
|
335
382
|
}
|
|
336
383
|
} else {
|
|
337
384
|
// hybrid
|
|
338
|
-
const vec = await this.embedHelper.embed(query);
|
|
385
|
+
const vec = await this.embedHelper.embed(query, { signal: execution?.signal });
|
|
386
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
339
387
|
if (!vec) {
|
|
340
388
|
searchParams = { term: query, limit };
|
|
341
389
|
} else {
|
|
@@ -343,7 +391,9 @@ export class OramaBackend implements SearchBackend {
|
|
|
343
391
|
}
|
|
344
392
|
}
|
|
345
393
|
|
|
394
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
346
395
|
const result = await oramaSearch(db, searchParams);
|
|
396
|
+
throwIfSearchAborted(execution, `OramaBackend ${mode} search aborted`);
|
|
347
397
|
return (result.hits ?? []).map((hit: any) => ({
|
|
348
398
|
docid: hit.document?.id ?? "",
|
|
349
399
|
path: hit.document?.path ?? "",
|