@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,23 +1,19 @@
|
|
|
1
1
|
import { log } from "./logger.js";
|
|
2
2
|
import { readEnvVar } from "./runtime/env.js";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import os from "node:os";
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
|
-
* Resolve
|
|
6
|
+
* Resolve provider API keys while keeping core host-agnostic.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* Plain-text API keys and provider-derived environment variables are handled
|
|
9
|
+
* directly. Host-specific secret references are resolved only when the caller
|
|
10
|
+
* supplies the host's native resolver. Core must not discover OpenClaw, Hermes,
|
|
11
|
+
* or any other runtime on its own.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
* involving the gateway auth system.
|
|
16
|
-
*
|
|
17
|
-
* Results are cached per provider for the gateway process lifetime.
|
|
13
|
+
* Results are cached per provider and resolver context for the process lifetime.
|
|
18
14
|
*/
|
|
19
15
|
|
|
20
|
-
type ResolveApiKeyFn = (params: {
|
|
16
|
+
export type ResolveApiKeyFn = (params: {
|
|
21
17
|
provider: string;
|
|
22
18
|
cfg?: unknown;
|
|
23
19
|
agentDir?: string;
|
|
@@ -39,11 +35,16 @@ export type GetRuntimeAuthForModelFn = (params: {
|
|
|
39
35
|
profileId?: string;
|
|
40
36
|
} | null>;
|
|
41
37
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
export interface ProviderSecretResolutionOptions {
|
|
39
|
+
resolveApiKeyForProvider?: ResolveApiKeyFn | null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface RuntimeAuthResolutionOptions {
|
|
43
|
+
getRuntimeAuthForModel?: GetRuntimeAuthForModelFn | null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
let _resolveApiKeyForProviderForTest: ResolveApiKeyFn | null = null;
|
|
47
|
+
let _getRuntimeAuthForModelForTest: GetRuntimeAuthForModelFn | null = null;
|
|
47
48
|
const resolvedCache = new Map<string, string | undefined>();
|
|
48
49
|
const cacheObjectIds = new WeakMap<object, number>();
|
|
49
50
|
let nextCacheObjectId = 1;
|
|
@@ -54,180 +55,6 @@ const NON_LITERAL_AUTH_MARKERS = new Set([
|
|
|
54
55
|
const ENV_VAR_MARKER_RE =
|
|
55
56
|
/^[A-Z][A-Z0-9_]*(?:_API_KEY|_ACCESS_TOKEN|_TOKEN|_SECRET|_CREDENTIALS|_CREDENTIALS_JSON)$/;
|
|
56
57
|
|
|
57
|
-
/**
|
|
58
|
-
* Lazily load the gateway's resolveApiKeyForProvider function.
|
|
59
|
-
* Returns null if not available (e.g., running outside the gateway process).
|
|
60
|
-
*/
|
|
61
|
-
async function getGatewayResolver(): Promise<ResolveApiKeyFn | null> {
|
|
62
|
-
if (_resolverLoaded) {
|
|
63
|
-
return _resolveApiKeyForProvider;
|
|
64
|
-
}
|
|
65
|
-
// Backoff: don't re-scan filesystem on every call when module wasn't found.
|
|
66
|
-
// After a failure, wait RESOLVER_RETRY_BACKOFF_MS before trying again.
|
|
67
|
-
if (_resolverNextRetryAt > 0 && Date.now() < _resolverNextRetryAt) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
try {
|
|
72
|
-
// The gateway bundles this in a runtime chunk — import it dynamically.
|
|
73
|
-
// This import path is stable across gateway versions since it's a named runtime export.
|
|
74
|
-
const candidates = [
|
|
75
|
-
// Try glob-matching the runtime module name (hash varies per build)
|
|
76
|
-
...await findRuntimeModules(),
|
|
77
|
-
];
|
|
78
|
-
|
|
79
|
-
const { pathToFileURL } = await import("node:url");
|
|
80
|
-
for (const candidate of candidates) {
|
|
81
|
-
try {
|
|
82
|
-
// Convert native path to file:// URL for cross-platform ESM import compatibility
|
|
83
|
-
const importUrl = pathToFileURL(candidate).href;
|
|
84
|
-
const mod = await import(importUrl);
|
|
85
|
-
if (typeof mod.resolveApiKeyForProvider === "function") {
|
|
86
|
-
_resolveApiKeyForProvider = mod.resolveApiKeyForProvider;
|
|
87
|
-
if (typeof mod.getRuntimeAuthForModel === "function") {
|
|
88
|
-
_getRuntimeAuthForModel = mod.getRuntimeAuthForModel;
|
|
89
|
-
log.debug("loaded gateway getRuntimeAuthForModel from runtime module");
|
|
90
|
-
}
|
|
91
|
-
_resolverLoaded = true;
|
|
92
|
-
log.debug("loaded gateway resolveApiKeyForProvider from runtime module");
|
|
93
|
-
return _resolveApiKeyForProvider;
|
|
94
|
-
}
|
|
95
|
-
} catch {
|
|
96
|
-
// Try next candidate
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
} catch {
|
|
100
|
-
// Silent
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Backoff before retrying — avoid repeated fs scanning.
|
|
104
|
-
// Retries after RESOLVER_RETRY_BACKOFF_MS so the resolver can
|
|
105
|
-
// recover if the gateway restarts or the module becomes available.
|
|
106
|
-
_resolverNextRetryAt = Date.now() + RESOLVER_RETRY_BACKOFF_MS;
|
|
107
|
-
log.debug(`gateway resolveApiKeyForProvider not available — will retry after ${RESOLVER_RETRY_BACKOFF_MS / 1000}s`);
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Find the gateway's model-auth runtime module by scanning the dist directory.
|
|
113
|
-
* Uses require.resolve to find the openclaw package regardless of install method.
|
|
114
|
-
*/
|
|
115
|
-
async function findRuntimeModules(): Promise<string[]> {
|
|
116
|
-
return findGatewayRuntimeModules("runtime-model-auth.runtime-");
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Discover gateway runtime module files matching the given filename prefix.
|
|
121
|
-
*
|
|
122
|
-
* Reused by adjacent SecretRef resolution code (`resolve-auth-token.ts`,
|
|
123
|
-
* issue #757). Walks the same dist-dir candidates as the model-auth path
|
|
124
|
-
* so callers don't reimplement install-method discovery.
|
|
125
|
-
*/
|
|
126
|
-
export async function findGatewayRuntimeModules(filePrefix: string): Promise<string[]> {
|
|
127
|
-
const { accessSync, constants, readdirSync, realpathSync, statSync } = await import("node:fs");
|
|
128
|
-
const { createRequire } = await import("node:module");
|
|
129
|
-
const candidates: string[] = [];
|
|
130
|
-
|
|
131
|
-
const distDirs: string[] = [];
|
|
132
|
-
const pushDistDirs = (entryPath: string): void => {
|
|
133
|
-
const resolvedEntryDir = path.dirname(entryPath);
|
|
134
|
-
const packageRoot = path.basename(resolvedEntryDir) === "dist"
|
|
135
|
-
? path.resolve(resolvedEntryDir, "..")
|
|
136
|
-
: resolvedEntryDir;
|
|
137
|
-
const candidateDistDirs = [
|
|
138
|
-
path.join(packageRoot, "dist"),
|
|
139
|
-
path.join(packageRoot, "..", "dist"),
|
|
140
|
-
];
|
|
141
|
-
for (const candidate of candidateDistDirs) {
|
|
142
|
-
const resolved = path.resolve(candidate);
|
|
143
|
-
if (!distDirs.includes(resolved)) distDirs.push(resolved);
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
try {
|
|
148
|
-
const req = createRequire(import.meta.url);
|
|
149
|
-
const openclawMain = req.resolve("openclaw");
|
|
150
|
-
pushDistDirs(openclawMain);
|
|
151
|
-
} catch {
|
|
152
|
-
// openclaw not resolvable from plugin context — try alternate paths
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
try {
|
|
156
|
-
const mainScript = process.argv[1];
|
|
157
|
-
if (mainScript) {
|
|
158
|
-
const realScript = realpathSync(mainScript);
|
|
159
|
-
if (realScript.includes("openclaw")) {
|
|
160
|
-
pushDistDirs(realScript);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
} catch {
|
|
164
|
-
// Silent
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
try {
|
|
168
|
-
const openclawBin = findExecutableOnPath("openclaw", accessSync, statSync, constants.X_OK);
|
|
169
|
-
if (openclawBin) {
|
|
170
|
-
pushDistDirs(realpathSync(openclawBin));
|
|
171
|
-
}
|
|
172
|
-
} catch {
|
|
173
|
-
// Silent
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
for (const dir of distDirs) {
|
|
177
|
-
try {
|
|
178
|
-
const files = readdirSync(dir);
|
|
179
|
-
for (const f of files) {
|
|
180
|
-
if (f.startsWith(filePrefix) && f.endsWith(".js")) {
|
|
181
|
-
candidates.push(path.join(dir, f));
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
} catch {
|
|
185
|
-
// Directory doesn't exist — skip
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
return candidates;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
function findExecutableOnPath(
|
|
193
|
-
executableName: string,
|
|
194
|
-
access: (path: string, mode?: number) => void,
|
|
195
|
-
stat: (path: string) => { isFile(): boolean },
|
|
196
|
-
executableMode: number,
|
|
197
|
-
): string | undefined {
|
|
198
|
-
const pathEnv = readEnvVar("PATH");
|
|
199
|
-
if (!pathEnv) return undefined;
|
|
200
|
-
|
|
201
|
-
const pathExts = process.platform === "win32"
|
|
202
|
-
? (readEnvVar("PATHEXT") ?? ".EXE;.CMD;.BAT;.COM")
|
|
203
|
-
.split(";")
|
|
204
|
-
.filter((ext) => ext.length > 0)
|
|
205
|
-
: [""];
|
|
206
|
-
const hasExtension = path.extname(executableName).length > 0;
|
|
207
|
-
|
|
208
|
-
for (const dir of pathEnv.split(path.delimiter)) {
|
|
209
|
-
if (!dir) continue;
|
|
210
|
-
const candidateNames = process.platform === "win32" && !hasExtension
|
|
211
|
-
? pathExts.map((ext) => `${executableName}${ext}`)
|
|
212
|
-
: [executableName];
|
|
213
|
-
|
|
214
|
-
for (const candidateName of candidateNames) {
|
|
215
|
-
const candidate = path.join(dir, candidateName);
|
|
216
|
-
try {
|
|
217
|
-
access(candidate, executableMode);
|
|
218
|
-
if (!stat(candidate).isFile()) continue;
|
|
219
|
-
return candidate;
|
|
220
|
-
} catch {
|
|
221
|
-
// Try the next PATH entry.
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return undefined;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export const __findExecutableOnPathForTest = findExecutableOnPath;
|
|
230
|
-
|
|
231
58
|
function isNonLiteralAuthMarker(value: string): boolean {
|
|
232
59
|
return (
|
|
233
60
|
NON_LITERAL_AUTH_MARKERS.has(value) ||
|
|
@@ -251,37 +78,45 @@ function cacheIdentity(value: unknown): string {
|
|
|
251
78
|
if (typeof value === "number") return `number:${String(value)}`;
|
|
252
79
|
if (typeof value === "boolean") return `boolean:${String(value)}`;
|
|
253
80
|
if (typeof value === "bigint") return `bigint:${String(value)}`;
|
|
254
|
-
if (typeof value === "symbol"
|
|
81
|
+
if (typeof value === "symbol") return typeof value;
|
|
82
|
+
if (typeof value === "function") return cacheObjectIdentity(value as object);
|
|
255
83
|
if (typeof value === "object") {
|
|
256
|
-
|
|
257
|
-
if (existingId !== undefined) return `object:${existingId}`;
|
|
258
|
-
const newId = nextCacheObjectId++;
|
|
259
|
-
cacheObjectIds.set(value, newId);
|
|
260
|
-
return `object:${newId}`;
|
|
84
|
+
return cacheObjectIdentity(value);
|
|
261
85
|
}
|
|
262
86
|
return String(value);
|
|
263
87
|
}
|
|
264
88
|
|
|
89
|
+
function cacheObjectIdentity(value: object): string {
|
|
90
|
+
const existingId = cacheObjectIds.get(value);
|
|
91
|
+
if (existingId !== undefined) return `object:${existingId}`;
|
|
92
|
+
const newId = nextCacheObjectId++;
|
|
93
|
+
cacheObjectIds.set(value, newId);
|
|
94
|
+
return `object:${newId}`;
|
|
95
|
+
}
|
|
96
|
+
|
|
265
97
|
function providerSecretCacheKey(
|
|
266
98
|
providerId: string,
|
|
267
99
|
resolvedAgentDir: string,
|
|
268
100
|
apiKeyValue: unknown,
|
|
269
101
|
gatewayConfig: unknown,
|
|
102
|
+
resolverContext: unknown,
|
|
270
103
|
): string {
|
|
271
104
|
return [
|
|
272
105
|
`provider:${providerId}`,
|
|
273
106
|
`agentDir:${resolvedAgentDir}`,
|
|
274
107
|
`apiKey:${cacheIdentity(apiKeyValue)}`,
|
|
275
108
|
`cfg:${cacheIdentity(gatewayConfig)}`,
|
|
109
|
+
`resolver:${cacheIdentity(resolverContext)}`,
|
|
276
110
|
].join(":");
|
|
277
111
|
}
|
|
278
112
|
|
|
279
113
|
/**
|
|
280
|
-
* Resolve a provider API key from
|
|
114
|
+
* Resolve a provider API key from literal values, environment markers, or an
|
|
115
|
+
* injected host resolver.
|
|
281
116
|
*
|
|
282
117
|
* Resolution order:
|
|
283
118
|
* 1. Plain-text string → returned immediately
|
|
284
|
-
* 2.
|
|
119
|
+
* 2. Injected host resolveApiKeyForProvider → handles host secret ref formats
|
|
285
120
|
* 3. Environment variable fallback (PROVIDER_NAME_API_KEY)
|
|
286
121
|
* 4. undefined → provider is skipped in the fallback chain
|
|
287
122
|
*/
|
|
@@ -290,10 +125,9 @@ export async function resolveProviderApiKey(
|
|
|
290
125
|
apiKeyValue: unknown,
|
|
291
126
|
gatewayConfig?: unknown,
|
|
292
127
|
agentDir?: string,
|
|
128
|
+
options: ProviderSecretResolutionOptions = {},
|
|
293
129
|
): Promise<string | undefined> {
|
|
294
|
-
const resolvedAgentDir = path.resolve(
|
|
295
|
-
agentDir ?? path.join(os.homedir(), ".openclaw", "agents", "main", "agent"),
|
|
296
|
-
);
|
|
130
|
+
const resolvedAgentDir = agentDir ? path.resolve(agentDir) : "";
|
|
297
131
|
|
|
298
132
|
let resolved: string | undefined;
|
|
299
133
|
|
|
@@ -313,26 +147,32 @@ export async function resolveProviderApiKey(
|
|
|
313
147
|
}
|
|
314
148
|
}
|
|
315
149
|
|
|
316
|
-
const
|
|
150
|
+
const resolver = options.resolveApiKeyForProvider ?? _resolveApiKeyForProviderForTest;
|
|
151
|
+
const cacheKey = providerSecretCacheKey(
|
|
152
|
+
providerId,
|
|
153
|
+
resolvedAgentDir,
|
|
154
|
+
apiKeyValue,
|
|
155
|
+
gatewayConfig,
|
|
156
|
+
resolver ?? null,
|
|
157
|
+
);
|
|
317
158
|
if (resolvedCache.has(cacheKey)) {
|
|
318
159
|
return resolvedCache.get(cacheKey);
|
|
319
160
|
}
|
|
320
161
|
|
|
321
162
|
// The API key is either a SecretRef object, "secretref-managed", or empty.
|
|
322
|
-
// Try the
|
|
323
|
-
const resolver = await getGatewayResolver();
|
|
163
|
+
// Try the host-supplied auth resolution system first.
|
|
324
164
|
if (resolver) {
|
|
325
165
|
try {
|
|
326
166
|
const auth = await resolver({ provider: providerId, cfg: gatewayConfig, agentDir: resolvedAgentDir });
|
|
327
167
|
if (auth?.apiKey) {
|
|
328
168
|
resolved = auth.apiKey;
|
|
329
|
-
log.debug(`resolved API key for provider "${providerId}" via
|
|
169
|
+
log.debug(`resolved API key for provider "${providerId}" via host auth (source: ${auth.source ?? "unknown"}, mode: ${auth.mode ?? "unknown"})`);
|
|
330
170
|
resolvedCache.set(cacheKey, resolved);
|
|
331
171
|
return resolved;
|
|
332
172
|
}
|
|
333
173
|
} catch (err) {
|
|
334
174
|
log.debug(
|
|
335
|
-
`
|
|
175
|
+
`host auth resolution failed for provider "${providerId}": ${err instanceof Error ? err.message : String(err)}`,
|
|
336
176
|
);
|
|
337
177
|
}
|
|
338
178
|
}
|
|
@@ -372,16 +212,14 @@ function resolveFromEnv(providerId: string): string | undefined {
|
|
|
372
212
|
}
|
|
373
213
|
|
|
374
214
|
/**
|
|
375
|
-
* Get
|
|
215
|
+
* Get a host-supplied getRuntimeAuthForModel function, if available.
|
|
376
216
|
* This resolves request-ready auth including provider-owned transforms
|
|
377
217
|
* (OAuth token exchange, base URL override for codex/copilot/etc.).
|
|
378
|
-
* Must be called after at least one resolveProviderApiKey() call to
|
|
379
|
-
* trigger the lazy module load.
|
|
380
218
|
*/
|
|
381
|
-
export async function getGatewayRuntimeAuthForModel(
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
return
|
|
219
|
+
export async function getGatewayRuntimeAuthForModel(
|
|
220
|
+
options: RuntimeAuthResolutionOptions = {},
|
|
221
|
+
): Promise<GetRuntimeAuthForModelFn | null> {
|
|
222
|
+
return options.getRuntimeAuthForModel ?? _getRuntimeAuthForModelForTest;
|
|
385
223
|
}
|
|
386
224
|
|
|
387
225
|
/**
|
|
@@ -389,22 +227,16 @@ export async function getGatewayRuntimeAuthForModel(): Promise<GetRuntimeAuthFor
|
|
|
389
227
|
*/
|
|
390
228
|
export function clearSecretCache(): void {
|
|
391
229
|
resolvedCache.clear();
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
_resolverLoaded = false;
|
|
395
|
-
_resolverNextRetryAt = 0;
|
|
230
|
+
_resolveApiKeyForProviderForTest = null;
|
|
231
|
+
_getRuntimeAuthForModelForTest = null;
|
|
396
232
|
}
|
|
397
233
|
|
|
398
234
|
export function __setGatewayResolverForTest(resolver: ResolveApiKeyFn | null): void {
|
|
399
|
-
|
|
400
|
-
_resolverLoaded = resolver !== null;
|
|
401
|
-
_resolverNextRetryAt = 0;
|
|
235
|
+
_resolveApiKeyForProviderForTest = resolver;
|
|
402
236
|
}
|
|
403
237
|
|
|
404
238
|
export function __setGatewayRuntimeAuthForModelForTest(
|
|
405
239
|
resolver: GetRuntimeAuthForModelFn | null,
|
|
406
240
|
): void {
|
|
407
|
-
|
|
408
|
-
_resolverLoaded = resolver !== null || _resolveApiKeyForProvider !== null;
|
|
409
|
-
_resolverNextRetryAt = 0;
|
|
241
|
+
_getRuntimeAuthForModelForTest = resolver;
|
|
410
242
|
}
|
package/src/retrieval-agents.ts
CHANGED
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import path from "node:path";
|
|
21
|
-
import { readdir, readFile, stat } from "node:fs/promises";
|
|
21
|
+
import { lstat, readdir, readFile, realpath, stat } from "node:fs/promises";
|
|
22
22
|
import { log } from "./logger.js";
|
|
23
23
|
import type { QmdSearchResult } from "./types.js";
|
|
24
24
|
import type { QmdClient } from "./qmd.js";
|
|
25
25
|
import { isTemporalQuery, recencyWindowBoundsFromPrompt } from "./temporal-index.js";
|
|
26
|
+
import { isAbortError } from "./abort-error.js";
|
|
26
27
|
|
|
27
28
|
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
28
29
|
|
|
@@ -88,6 +89,28 @@ function overlapScore(queryTokens: string[], candidateTokens: string[]): number
|
|
|
88
89
|
return hits / Math.max(queryTokens.length, candidateTokens.length);
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
async function resolveContainedRegularFile(
|
|
93
|
+
memoryDir: string,
|
|
94
|
+
candidatePath: string,
|
|
95
|
+
canonicalRoot?: string,
|
|
96
|
+
): Promise<string | null> {
|
|
97
|
+
try {
|
|
98
|
+
const root = canonicalRoot ?? await realpath(memoryDir);
|
|
99
|
+
const absolute = path.isAbsolute(candidatePath)
|
|
100
|
+
? path.resolve(candidatePath)
|
|
101
|
+
: path.resolve(memoryDir, candidatePath);
|
|
102
|
+
const entryStat = await lstat(absolute);
|
|
103
|
+
if (entryStat.isSymbolicLink()) return null;
|
|
104
|
+
const fileStat = await stat(absolute);
|
|
105
|
+
if (!fileStat.isFile()) return null;
|
|
106
|
+
const canonical = await realpath(absolute);
|
|
107
|
+
if (canonical !== root && !canonical.startsWith(root + path.sep)) return null;
|
|
108
|
+
return absolute;
|
|
109
|
+
} catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
91
114
|
// ─── Agent 1: Direct Facts ───────────────────────────────────────────────────
|
|
92
115
|
|
|
93
116
|
/**
|
|
@@ -106,6 +129,7 @@ export async function runDirectAgent(
|
|
|
106
129
|
maxResults = 10,
|
|
107
130
|
): Promise<ParallelSearchResult[]> {
|
|
108
131
|
try {
|
|
132
|
+
const canonicalRoot = await realpath(memoryDir);
|
|
109
133
|
const entitiesDir = path.join(memoryDir, "entities");
|
|
110
134
|
let entries: string[];
|
|
111
135
|
try {
|
|
@@ -128,9 +152,13 @@ export async function runDirectAgent(
|
|
|
128
152
|
const score = overlapScore(queryTokens, entityTokens);
|
|
129
153
|
if (score <= 0) continue;
|
|
130
154
|
|
|
155
|
+
const fullPath = path.join(entitiesDir, entry);
|
|
156
|
+
const safePath = await resolveContainedRegularFile(memoryDir, fullPath, canonicalRoot);
|
|
157
|
+
if (!safePath) continue;
|
|
158
|
+
|
|
131
159
|
results.push({
|
|
132
160
|
docid: nameWithoutExt,
|
|
133
|
-
path:
|
|
161
|
+
path: safePath,
|
|
134
162
|
snippet: "", // populated by augmentWithDirectAndTemporal after merge
|
|
135
163
|
score,
|
|
136
164
|
transport: "scoped_prefilter",
|
|
@@ -168,6 +196,7 @@ export async function runTemporalAgent(
|
|
|
168
196
|
candidatePaths?: Set<string> | null,
|
|
169
197
|
): Promise<ParallelSearchResult[]> {
|
|
170
198
|
try {
|
|
199
|
+
const canonicalRoot = await realpath(memoryDir);
|
|
171
200
|
// Read index_time.json once — used for both date-range filtering and recency scoring.
|
|
172
201
|
let dateIndex: Record<string, string[]> = {};
|
|
173
202
|
try {
|
|
@@ -244,17 +273,17 @@ export async function runTemporalAgent(
|
|
|
244
273
|
: Promise.resolve(new Map<string, string[]>());
|
|
245
274
|
|
|
246
275
|
// Parallel: existence checks + tag index read.
|
|
247
|
-
const [
|
|
248
|
-
Promise.all(entries.map(([p]) =>
|
|
276
|
+
const [safePathResults, pathToTags] = await Promise.all([
|
|
277
|
+
Promise.all(entries.map(([p]) => resolveContainedRegularFile(memoryDir, p, canonicalRoot))),
|
|
249
278
|
tagIndexPromise,
|
|
250
279
|
]);
|
|
251
280
|
|
|
252
281
|
const results: ParallelSearchResult[] = [];
|
|
253
282
|
|
|
254
283
|
for (let i = 0; i < entries.length; i++) {
|
|
255
|
-
if (!existenceResults[i]) continue; // skip stale index entry
|
|
256
|
-
|
|
257
284
|
const [p, dateStr] = entries[i];
|
|
285
|
+
const safePath = safePathResults[i];
|
|
286
|
+
if (!safePath) continue; // skip stale or out-of-root index entry
|
|
258
287
|
const ageMs = todayMs - new Date(dateStr).getTime();
|
|
259
288
|
const ageDays = ageMs / 86_400_000;
|
|
260
289
|
// Exponential recency decay with half-life of ~30 days.
|
|
@@ -266,7 +295,7 @@ export async function runTemporalAgent(
|
|
|
266
295
|
// purely temporal (no topic tokens) or the tag index doesn't cover the file.
|
|
267
296
|
let topicBoost = 0;
|
|
268
297
|
if (topicTokens.length > 0) {
|
|
269
|
-
const tags = pathToTags.get(p);
|
|
298
|
+
const tags = pathToTags.get(p) ?? pathToTags.get(safePath);
|
|
270
299
|
if (tags && tags.length > 0) {
|
|
271
300
|
const tagSet = new Set(tags.flatMap((t) => tokenize(t)));
|
|
272
301
|
const hits = topicTokens.filter((t) => tagSet.has(t)).length;
|
|
@@ -275,11 +304,11 @@ export async function runTemporalAgent(
|
|
|
275
304
|
}
|
|
276
305
|
const score = recencyScore * (1 + topicBoost * 0.3);
|
|
277
306
|
|
|
278
|
-
const baseName = path.basename(
|
|
307
|
+
const baseName = path.basename(safePath, ".md");
|
|
279
308
|
|
|
280
309
|
results.push({
|
|
281
310
|
docid: baseName,
|
|
282
|
-
path:
|
|
311
|
+
path: safePath,
|
|
283
312
|
snippet: "", // populated by augmentWithDirectAndTemporal after merge
|
|
284
313
|
score,
|
|
285
314
|
transport: "scoped_prefilter",
|
|
@@ -320,6 +349,7 @@ export async function runContextualAgent(
|
|
|
320
349
|
);
|
|
321
350
|
return results.map((r: QmdSearchResult) => ({ ...r, agentSource: "contextual" as const }));
|
|
322
351
|
} catch (err) {
|
|
352
|
+
if (isAbortError(err)) throw err;
|
|
323
353
|
log.debug(`ContextualAgent error: ${err}`);
|
|
324
354
|
return [];
|
|
325
355
|
}
|
|
@@ -375,9 +405,10 @@ function stripFrontmatter(raw: string): string {
|
|
|
375
405
|
return raw.slice(end + 4).replace(/^\n+/, "");
|
|
376
406
|
}
|
|
377
407
|
|
|
378
|
-
async function populateEmptySnippets(results: QmdSearchResult[]): Promise<QmdSearchResult[]> {
|
|
408
|
+
async function populateEmptySnippets(results: QmdSearchResult[], memoryDir?: string): Promise<QmdSearchResult[]> {
|
|
379
409
|
const needsSnippet = results.filter((r) => !r.snippet && r.path);
|
|
380
410
|
if (needsSnippet.length === 0) return results;
|
|
411
|
+
const canonicalRoot = memoryDir ? await realpath(memoryDir).catch(() => null) : null;
|
|
381
412
|
|
|
382
413
|
const toRead = needsSnippet.slice(0, MAX_SNIPPET_READS);
|
|
383
414
|
const snippetMap = new Map<string, string>();
|
|
@@ -385,7 +416,11 @@ async function populateEmptySnippets(results: QmdSearchResult[]): Promise<QmdSea
|
|
|
385
416
|
await Promise.all(
|
|
386
417
|
toRead.map(async (r) => {
|
|
387
418
|
try {
|
|
388
|
-
const
|
|
419
|
+
const safePath = canonicalRoot && r.path
|
|
420
|
+
? await resolveContainedRegularFile(memoryDir!, r.path, canonicalRoot)
|
|
421
|
+
: null;
|
|
422
|
+
if (!safePath) return;
|
|
423
|
+
const raw = await readFile(safePath, "utf-8");
|
|
389
424
|
// Memory files start with YAML frontmatter — skip it so the snippet
|
|
390
425
|
// contains actual memory content, not metadata fields.
|
|
391
426
|
const body = stripFrontmatter(raw);
|
|
@@ -419,6 +454,7 @@ export async function mergeWithAgentResults(
|
|
|
419
454
|
temporalResults: ParallelSearchResult[],
|
|
420
455
|
weights: Record<SearchAgentSource, number>,
|
|
421
456
|
maxResults: number,
|
|
457
|
+
memoryDir?: string,
|
|
422
458
|
): Promise<QmdSearchResult[]> {
|
|
423
459
|
if (directResults.length === 0 && temporalResults.length === 0) {
|
|
424
460
|
return contextualResults.slice(0, maxResults);
|
|
@@ -434,7 +470,7 @@ export async function mergeWithAgentResults(
|
|
|
434
470
|
weights,
|
|
435
471
|
maxResults,
|
|
436
472
|
);
|
|
437
|
-
return populateEmptySnippets(merged);
|
|
473
|
+
return populateEmptySnippets(merged, memoryDir);
|
|
438
474
|
}
|
|
439
475
|
|
|
440
476
|
// ─── Augmentation helper (used by tests; orchestrator uses inline logic) ─────
|
|
@@ -542,7 +578,7 @@ export async function augmentWithDirectAndTemporal(
|
|
|
542
578
|
);
|
|
543
579
|
|
|
544
580
|
// Populate snippets for results discovered only by direct/temporal (no contextual preview)
|
|
545
|
-
return populateEmptySnippets(merged);
|
|
581
|
+
return populateEmptySnippets(merged, memoryDir);
|
|
546
582
|
}
|
|
547
583
|
|
|
548
584
|
// ─── Orchestrator ─────────────────────────────────────────────────────────────
|
|
@@ -601,6 +637,7 @@ export async function parallelRetrieval(
|
|
|
601
637
|
: Promise.resolve([] as ParallelSearchResult[]),
|
|
602
638
|
runContextual
|
|
603
639
|
? runContextualAgent(query, qmd, options.collection, maxPerAgent, options.signal).catch((err) => {
|
|
640
|
+
if (isAbortError(err)) throw err;
|
|
604
641
|
log.debug(`parallelRetrieval: ContextualAgent failed — ${err}`);
|
|
605
642
|
return [] as ParallelSearchResult[];
|
|
606
643
|
})
|
|
@@ -619,5 +656,5 @@ export async function parallelRetrieval(
|
|
|
619
656
|
options.agentWeights ?? PARALLEL_AGENT_WEIGHTS,
|
|
620
657
|
maxResults,
|
|
621
658
|
);
|
|
622
|
-
return populateEmptySnippets(merged);
|
|
659
|
+
return populateEmptySnippets(merged, memoryDir);
|
|
623
660
|
}
|
package/src/review/index.test.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
-
import
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import { mkdtemp, mkdir, readFile, rm, stat, symlink, writeFile } from "node:fs/promises";
|
|
3
4
|
import os from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import test from "node:test";
|
|
@@ -48,6 +49,37 @@ test("listReviewItems applies reason filtering before enforcing the limit", asyn
|
|
|
48
49
|
assert.equal(result.total, 1);
|
|
49
50
|
});
|
|
50
51
|
|
|
52
|
+
test("listReviewItems stops reading review files after satisfying the limit", async (t) => {
|
|
53
|
+
const memoryDir = await makeMemoryDir(t);
|
|
54
|
+
const suggestionsDir = path.join(memoryDir, "suggestions");
|
|
55
|
+
await mkdir(suggestionsDir, { recursive: true });
|
|
56
|
+
await writeFile(path.join(suggestionsDir, "001.md"), reviewMarkdown("suggestion-1", "suggestion"), "utf8");
|
|
57
|
+
await writeFile(path.join(suggestionsDir, "002.md"), reviewMarkdown("suggestion-2", "suggestion"), "utf8");
|
|
58
|
+
await writeFile(path.join(suggestionsDir, "003.md"), reviewMarkdown("suggestion-3", "suggestion"), "utf8");
|
|
59
|
+
|
|
60
|
+
const originalReadFileSync = fs.readFileSync;
|
|
61
|
+
let reviewFileReads = 0;
|
|
62
|
+
fs.readFileSync = function readFileSyncWithCount(
|
|
63
|
+
filePath: fs.PathOrFileDescriptor,
|
|
64
|
+
options?: BufferEncoding | { encoding?: BufferEncoding | null; flag?: string } | null,
|
|
65
|
+
) {
|
|
66
|
+
if (typeof filePath === "string" && filePath.startsWith(suggestionsDir) && filePath.endsWith(".md")) {
|
|
67
|
+
reviewFileReads += 1;
|
|
68
|
+
}
|
|
69
|
+
return originalReadFileSync.call(fs, filePath, options as never);
|
|
70
|
+
} as typeof fs.readFileSync;
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const result = listReviewItems({ memoryDir, limit: 1 });
|
|
74
|
+
|
|
75
|
+
assert.equal(result.items.length, 1);
|
|
76
|
+
assert.equal(result.total, 1);
|
|
77
|
+
assert.equal(reviewFileReads, 1);
|
|
78
|
+
} finally {
|
|
79
|
+
fs.readFileSync = originalReadFileSync;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
51
83
|
test("flag updates low-confidence category items returned by listReviewItems", async (t) => {
|
|
52
84
|
const memoryDir = await makeMemoryDir(t);
|
|
53
85
|
const factsDir = path.join(memoryDir, "facts", "2026-05-17");
|
|
@@ -124,6 +156,48 @@ Reviewed memory.`;
|
|
|
124
156
|
assert.equal(await readFile(memoryPath, "utf8"), original);
|
|
125
157
|
});
|
|
126
158
|
|
|
159
|
+
test("review listing and actions ignore symlinked review roots", async (t) => {
|
|
160
|
+
const memoryDir = await makeMemoryDir(t);
|
|
161
|
+
const outsideDir = await mkdtemp(path.join(os.tmpdir(), "remnic-review-outside-"));
|
|
162
|
+
t.after(() => rm(outsideDir, { recursive: true, force: true }));
|
|
163
|
+
const outsidePath = path.join(outsideDir, "victim.md");
|
|
164
|
+
await writeFile(outsidePath, reviewMarkdown("victim"), "utf8");
|
|
165
|
+
|
|
166
|
+
try {
|
|
167
|
+
await symlink(outsideDir, path.join(memoryDir, "review"), "dir");
|
|
168
|
+
} catch {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
assert.deepEqual(listReviewItems({ memoryDir }).items, []);
|
|
173
|
+
const result = performReview(memoryDir, "victim", "dismiss");
|
|
174
|
+
|
|
175
|
+
assert.equal(result.message, "Item not found");
|
|
176
|
+
assert.equal(await readFile(outsidePath, "utf8"), reviewMarkdown("victim"));
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test("review listing and actions ignore symlinked category roots", async (t) => {
|
|
180
|
+
const memoryDir = await makeMemoryDir(t);
|
|
181
|
+
const outsideDir = await mkdtemp(path.join(os.tmpdir(), "remnic-review-category-outside-"));
|
|
182
|
+
t.after(() => rm(outsideDir, { recursive: true, force: true }));
|
|
183
|
+
const outsideDateDir = path.join(outsideDir, "2026-05-17");
|
|
184
|
+
await mkdir(outsideDateDir, { recursive: true });
|
|
185
|
+
const outsidePath = path.join(outsideDateDir, "victim.md");
|
|
186
|
+
await writeFile(outsidePath, reviewMarkdown("category-victim"), "utf8");
|
|
187
|
+
|
|
188
|
+
try {
|
|
189
|
+
await symlink(outsideDir, path.join(memoryDir, "facts"), "dir");
|
|
190
|
+
} catch {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
assert.deepEqual(listReviewItems({ memoryDir }).items, []);
|
|
195
|
+
const result = performReview(memoryDir, "category-victim", "flag");
|
|
196
|
+
|
|
197
|
+
assert.equal(result.message, "Item not found");
|
|
198
|
+
assert.equal(await readFile(outsidePath, "utf8"), reviewMarkdown("category-victim"));
|
|
199
|
+
});
|
|
200
|
+
|
|
127
201
|
test("review actions can use the same custom confidence threshold as listReviewItems", async (t) => {
|
|
128
202
|
const memoryDir = await makeMemoryDir(t);
|
|
129
203
|
const factsDir = path.join(memoryDir, "facts", "2026-05-17");
|