@remnic/core 1.1.31 → 9.3.516
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstraction-nodes.js +2 -2
- package/dist/access-cli.d.ts +1 -1
- package/dist/access-cli.js +158 -121
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +9 -5
- package/dist/access-http.js +51 -51
- package/dist/access-idempotency.d.ts +2 -0
- package/dist/access-idempotency.js +1 -1
- package/dist/access-mcp.d.ts +16 -9
- package/dist/access-mcp.js +44 -44
- package/dist/access-schema.d.ts +45 -13
- package/dist/access-schema.js +8 -8
- package/dist/{access-service-CkZyb35d.d.ts → access-service-CZfksQuS.d.ts} +11 -130
- package/dist/access-service.d.ts +7 -4
- package/dist/access-service.js +40 -40
- package/dist/action-confidence.d.ts +1 -0
- package/dist/active-memory-bridge.d.ts +1 -0
- package/dist/active-memory-bridge.js +3 -2
- package/dist/active-recall.d.ts +1 -0
- package/dist/active-recall.js +14 -9
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +6 -2
- package/dist/adapters/claude-code.js +2 -2
- package/dist/adapters/codex.d.ts +5 -1
- package/dist/adapters/codex.js +2 -2
- package/dist/adapters/hermes.js +2 -2
- package/dist/adapters/index.js +6 -6
- package/dist/adapters/registry.js +6 -6
- package/dist/adapters/replit.d.ts +4 -2
- package/dist/adapters/replit.js +2 -2
- package/dist/adapters/types.d.ts +4 -0
- package/dist/adapters/types.js +1 -1
- package/dist/behavior-learner.d.ts +1 -0
- package/dist/behavior-signals.d.ts +1 -0
- package/dist/behavior-signals.js +1 -1
- package/dist/bootstrap.d.ts +5 -3
- package/dist/bootstrap.js +2 -2
- package/dist/boxes.d.ts +1 -0
- package/dist/boxes.js +1 -1
- package/dist/briefing.d.ts +1 -0
- package/dist/briefing.js +9 -9
- package/dist/buffer-surprise-report.d.ts +1 -0
- package/dist/buffer.d.ts +1 -0
- package/dist/buffer.js +2 -2
- package/dist/bulk-import/index.d.ts +28 -0
- package/dist/bulk-import/index.js +31 -0
- package/dist/calibration.d.ts +2 -0
- package/dist/calibration.js +50 -17
- package/dist/calibration.js.map +1 -1
- package/dist/{capsule-crypto-5CYAGVC5.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{capsule-merge-4MGKE7C5.js → capsule-merge-T2JRE46P.js} +3 -3
- package/dist/causal-behavior.d.ts +1 -0
- package/dist/causal-behavior.js +4 -4
- package/dist/causal-chain.js +4 -4
- package/dist/causal-consolidation.d.ts +16 -1
- package/dist/causal-consolidation.js +115 -32
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +14 -6
- package/dist/causal-retrieval.js.map +1 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +2 -2
- package/dist/{chunk-SAZS2QZB.js → chunk-23UORJ4S.js} +3 -3
- package/dist/{chunk-76FLAAUC.js → chunk-2AN2L4NL.js} +17 -6
- package/dist/chunk-2AN2L4NL.js.map +1 -0
- package/dist/{chunk-W4L6CZKA.js → chunk-2DL3OFLD.js} +15 -10
- package/dist/chunk-2DL3OFLD.js.map +1 -0
- package/dist/{chunk-NJ3MJQZX.js → chunk-2I5JGH3M.js} +2 -2
- package/dist/{chunk-NJ3MJQZX.js.map → chunk-2I5JGH3M.js.map} +1 -1
- package/dist/{chunk-7OZ53EXP.js → chunk-2NLLXCJG.js} +21 -10
- package/dist/chunk-2NLLXCJG.js.map +1 -0
- package/dist/{chunk-PK7H5L6Y.js → chunk-2NM43EWN.js} +2 -2
- package/dist/{chunk-PYXS46O7.js → chunk-3BP57I6J.js} +2 -2
- package/dist/{chunk-FBYESMQ2.js → chunk-3C5RPJAX.js} +2 -2
- package/dist/{chunk-FKFMOY3N.js → chunk-42NQ7AVG.js} +3 -4
- package/dist/{chunk-FKFMOY3N.js.map → chunk-42NQ7AVG.js.map} +1 -1
- package/dist/chunk-4426WSWL.js +73 -0
- package/dist/chunk-4426WSWL.js.map +1 -0
- package/dist/{chunk-LIRZNNUP.js → chunk-44442YCH.js} +5 -2
- package/dist/chunk-44442YCH.js.map +1 -0
- package/dist/{chunk-H3ME6L6D.js → chunk-46GJIW5M.js} +23 -20
- package/dist/chunk-46GJIW5M.js.map +1 -0
- package/dist/{chunk-QDZ2RLEC.js → chunk-472U7RDF.js} +3 -3
- package/dist/chunk-472U7RDF.js.map +1 -0
- package/dist/{chunk-NN2DKE4T.js → chunk-4H5ZJHEN.js} +16 -3
- package/dist/{chunk-NN2DKE4T.js.map → chunk-4H5ZJHEN.js.map} +1 -1
- package/dist/{chunk-56K5QLHX.js → chunk-4HP7HIE3.js} +56 -13
- package/dist/chunk-4HP7HIE3.js.map +1 -0
- package/dist/{chunk-RK2Y4XOM.js → chunk-4JRRISLU.js} +9 -6
- package/dist/chunk-4JRRISLU.js.map +1 -0
- package/dist/{chunk-XKLD5OK4.js → chunk-4RR6ROTB.js} +10 -11
- package/dist/chunk-4RR6ROTB.js.map +1 -0
- package/dist/{chunk-YROHKYBY.js → chunk-5UHVGNZD.js} +22 -6
- package/dist/chunk-5UHVGNZD.js.map +1 -0
- package/dist/{chunk-ZAVUCJ4H.js → chunk-5V456VRV.js} +154 -69
- package/dist/chunk-5V456VRV.js.map +1 -0
- package/dist/{chunk-77H5NU3M.js → chunk-6BR7L222.js} +82 -18
- package/dist/chunk-6BR7L222.js.map +1 -0
- package/dist/{chunk-4KGVTPGD.js → chunk-6F6BXB7A.js} +9 -8
- package/dist/chunk-6F6BXB7A.js.map +1 -0
- package/dist/{chunk-NMZY542O.js → chunk-6URPAY2D.js} +41 -17
- package/dist/chunk-6URPAY2D.js.map +1 -0
- package/dist/{chunk-N53K2EXC.js → chunk-6VF75M3X.js} +2 -2
- package/dist/{chunk-XSZEP4SF.js → chunk-6XSPNR6L.js} +6 -5
- package/dist/chunk-6XSPNR6L.js.map +1 -0
- package/dist/{chunk-6H2TESSP.js → chunk-765K3SAT.js} +3 -3
- package/dist/{chunk-EDTHC6UD.js → chunk-77NAFXUD.js} +2 -2
- package/dist/{chunk-S7KDBTWT.js → chunk-7F7Z6MOS.js} +29 -14
- package/dist/chunk-7F7Z6MOS.js.map +1 -0
- package/dist/{chunk-MZH6EHNR.js → chunk-7H6CFEBJ.js} +41 -14
- package/dist/chunk-7H6CFEBJ.js.map +1 -0
- package/dist/{chunk-MGKYQQYF.js → chunk-7Q3RCKAQ.js} +2 -2
- package/dist/chunk-7RXCMVFQ.js +27 -0
- package/dist/chunk-7RXCMVFQ.js.map +1 -0
- package/dist/{chunk-DGXUHMOV.js → chunk-A2IYSXDQ.js} +25 -6
- package/dist/chunk-A2IYSXDQ.js.map +1 -0
- package/dist/{chunk-EABGC2TL.js → chunk-A2Z6UCWT.js} +26 -4
- package/dist/chunk-A2Z6UCWT.js.map +1 -0
- package/dist/{chunk-5375UYTQ.js → chunk-A6D7A2FW.js} +4 -4
- package/dist/chunk-A6D7A2FW.js.map +1 -0
- package/dist/{chunk-FAAFWE4G.js → chunk-ALEPI75L.js} +24 -6
- package/dist/chunk-ALEPI75L.js.map +1 -0
- package/dist/{chunk-3SLRNYNG.js → chunk-AUDJPF4N.js} +15 -4
- package/dist/chunk-AUDJPF4N.js.map +1 -0
- package/dist/chunk-B5XMS73R.js +145 -0
- package/dist/chunk-B5XMS73R.js.map +1 -0
- package/dist/{chunk-HXXBL2KD.js → chunk-BECQDWBA.js} +44 -4
- package/dist/chunk-BECQDWBA.js.map +1 -0
- package/dist/{chunk-7SEAZFFB.js → chunk-BEUDU7Y4.js} +24 -4
- package/dist/chunk-BEUDU7Y4.js.map +1 -0
- package/dist/chunk-CHBI22MI.js +159 -0
- package/dist/chunk-CHBI22MI.js.map +1 -0
- package/dist/{chunk-GDFS42HT.js → chunk-CHCA44C3.js} +15 -8
- package/dist/chunk-CHCA44C3.js.map +1 -0
- package/dist/chunk-CINZGPSJ.js +22 -0
- package/dist/chunk-CINZGPSJ.js.map +1 -0
- package/dist/chunk-CMTINOFS.js +36 -0
- package/dist/chunk-CMTINOFS.js.map +1 -0
- package/dist/{chunk-34DQE4KF.js → chunk-CO7ZO4TU.js} +2 -2
- package/dist/{chunk-PFV5C235.js → chunk-CPPS65WS.js} +2 -1
- package/dist/{chunk-PFV5C235.js.map → chunk-CPPS65WS.js.map} +1 -1
- package/dist/{chunk-DINWEURR.js → chunk-CSKLPDN6.js} +20 -6
- package/dist/chunk-CSKLPDN6.js.map +1 -0
- package/dist/chunk-CWWMTTQE.js +566 -0
- package/dist/chunk-CWWMTTQE.js.map +1 -0
- package/dist/{chunk-IQT3XTKW.js → chunk-D24OXEPB.js} +13 -7
- package/dist/chunk-D24OXEPB.js.map +1 -0
- package/dist/{chunk-WIICJPET.js → chunk-DEUNUKTD.js} +6 -4
- package/dist/{chunk-WIICJPET.js.map → chunk-DEUNUKTD.js.map} +1 -1
- package/dist/{chunk-ZYVPLJ4T.js → chunk-DHGSZ3UD.js} +9 -7
- package/dist/chunk-DHGSZ3UD.js.map +1 -0
- package/dist/{chunk-JR4ZC3G4.js → chunk-DLJ4IR6M.js} +91 -41
- package/dist/chunk-DLJ4IR6M.js.map +1 -0
- package/dist/{chunk-U4SCL7B7.js → chunk-DRD2Q7HQ.js} +82 -18
- package/dist/chunk-DRD2Q7HQ.js.map +1 -0
- package/dist/{chunk-2IWUMAES.js → chunk-E62SBGQ3.js} +28 -13
- package/dist/chunk-E62SBGQ3.js.map +1 -0
- package/dist/{chunk-C5BCH4ZS.js → chunk-EAZGEEG2.js} +21 -3
- package/dist/chunk-EAZGEEG2.js.map +1 -0
- package/dist/{chunk-TPB3I2AC.js → chunk-ECZU5BJH.js} +31 -10
- package/dist/chunk-ECZU5BJH.js.map +1 -0
- package/dist/chunk-EDQVAMQI.js +308 -0
- package/dist/chunk-EDQVAMQI.js.map +1 -0
- package/dist/{chunk-RRF5UOBJ.js → chunk-EI6V5UXY.js} +22 -15
- package/dist/chunk-EI6V5UXY.js.map +1 -0
- package/dist/{chunk-ZKSK55RC.js → chunk-ETUPBUHB.js} +2 -2
- package/dist/{chunk-25MQ7IHJ.js → chunk-EUML3N6B.js} +17 -6
- package/dist/chunk-EUML3N6B.js.map +1 -0
- package/dist/{chunk-5RGLBDQF.js → chunk-EVZFIAPG.js} +12 -12
- package/dist/chunk-EVZFIAPG.js.map +1 -0
- package/dist/{chunk-QRNI5JBH.js → chunk-EYIEWJNI.js} +2 -2
- package/dist/{chunk-TPU5L5EY.js → chunk-FCOQXV3T.js} +272 -411
- package/dist/chunk-FCOQXV3T.js.map +1 -0
- package/dist/{chunk-TMQLARTH.js → chunk-FK556DDH.js} +34 -15
- package/dist/chunk-FK556DDH.js.map +1 -0
- package/dist/{chunk-43PJZYGL.js → chunk-FPGE5NVO.js} +45 -10
- package/dist/chunk-FPGE5NVO.js.map +1 -0
- package/dist/{chunk-3VAL7ZL2.js → chunk-FUC4LZMD.js} +60 -25
- package/dist/chunk-FUC4LZMD.js.map +1 -0
- package/dist/{chunk-C6QPK5GG.js → chunk-FZZ2QTJI.js} +2 -2
- package/dist/{chunk-D46YSIYX.js → chunk-G3Z3QEF5.js} +19 -11
- package/dist/{chunk-D46YSIYX.js.map → chunk-G3Z3QEF5.js.map} +1 -1
- package/dist/{chunk-3JXBXXM2.js → chunk-G4IAEX6D.js} +2 -2
- package/dist/{chunk-MSWG7JI6.js → chunk-G56P5RLD.js} +8 -2
- package/dist/chunk-G56P5RLD.js.map +1 -0
- package/dist/{chunk-AGZQD76C.js → chunk-GCGJW34D.js} +48 -2
- package/dist/chunk-GCGJW34D.js.map +1 -0
- package/dist/chunk-H2NCNXMS.js +159 -0
- package/dist/chunk-H2NCNXMS.js.map +1 -0
- package/dist/{chunk-XYIK4LF6.js → chunk-H3FZVNRN.js} +8 -2
- package/dist/chunk-H3FZVNRN.js.map +1 -0
- package/dist/{chunk-YU5KIWYQ.js → chunk-HC6EKOID.js} +94 -43
- package/dist/chunk-HC6EKOID.js.map +1 -0
- package/dist/{chunk-TK4UEOSK.js → chunk-HDDRVXX4.js} +8 -8
- package/dist/chunk-HDDRVXX4.js.map +1 -0
- package/dist/{chunk-LLQ2LLWF.js → chunk-HENLZHIT.js} +15 -5
- package/dist/chunk-HENLZHIT.js.map +1 -0
- package/dist/{chunk-N2D6GXBM.js → chunk-HINSGUA7.js} +28 -20
- package/dist/chunk-HINSGUA7.js.map +1 -0
- package/dist/{chunk-APO3DCMU.js → chunk-HLAVGJ62.js} +30 -8
- package/dist/chunk-HLAVGJ62.js.map +1 -0
- package/dist/{chunk-TPMQ3G6Z.js → chunk-HOJZMQ4J.js} +2 -2
- package/dist/chunk-HOJZMQ4J.js.map +1 -0
- package/dist/{chunk-LUDTDZLK.js → chunk-HPWVAEET.js} +33 -7
- package/dist/chunk-HPWVAEET.js.map +1 -0
- package/dist/{chunk-NZL6GGQE.js → chunk-HQ6NIBL6.js} +92 -30
- package/dist/chunk-HQ6NIBL6.js.map +1 -0
- package/dist/{chunk-UWVJF25J.js → chunk-HWVTS5NO.js} +20 -6
- package/dist/chunk-HWVTS5NO.js.map +1 -0
- package/dist/{chunk-2WWLHTZY.js → chunk-IC4GELZE.js} +2 -2
- package/dist/{chunk-QA2ZAPBU.js → chunk-IPLYGWQF.js} +28 -20
- package/dist/chunk-IPLYGWQF.js.map +1 -0
- package/dist/{chunk-A6KTB5R6.js → chunk-IQ3OI2RR.js} +3 -3
- package/dist/chunk-IQ3OI2RR.js.map +1 -0
- package/dist/{chunk-6LVVDPJ4.js → chunk-J64TK33U.js} +3 -4
- package/dist/chunk-J64TK33U.js.map +1 -0
- package/dist/{chunk-6FC5EGNV.js → chunk-JBPKEARU.js} +15 -5
- package/dist/{chunk-6FC5EGNV.js.map → chunk-JBPKEARU.js.map} +1 -1
- package/dist/{chunk-RHY3HH7P.js → chunk-JFEKNTX7.js} +125 -33
- package/dist/chunk-JFEKNTX7.js.map +1 -0
- package/dist/{chunk-TZOLIGIG.js → chunk-JJEJJ7RK.js} +4 -2
- package/dist/chunk-JJEJJ7RK.js.map +1 -0
- package/dist/{chunk-PCUKNJAZ.js → chunk-JKV57BTN.js} +2 -2
- package/dist/{chunk-EJI5XIBB.js → chunk-JLNBQWZ2.js} +55 -7
- package/dist/chunk-JLNBQWZ2.js.map +1 -0
- package/dist/{chunk-PIRJPV5T.js → chunk-JNANKJLN.js} +2 -2
- package/dist/chunk-JNANKJLN.js.map +1 -0
- package/dist/{chunk-XIG5PDM7.js → chunk-JUC24CTX.js} +8 -12
- package/dist/chunk-JUC24CTX.js.map +1 -0
- package/dist/{chunk-OIGNEXKZ.js → chunk-K5O2QY6T.js} +5 -1
- package/dist/{chunk-OIGNEXKZ.js.map → chunk-K5O2QY6T.js.map} +1 -1
- package/dist/{chunk-ZTFCYYEZ.js → chunk-KCYE2MZM.js} +3 -3
- package/dist/chunk-KCYE2MZM.js.map +1 -0
- package/dist/{chunk-JWPLJLDU.js → chunk-KD3QD3A5.js} +2 -2
- package/dist/{chunk-JWPLJLDU.js.map → chunk-KD3QD3A5.js.map} +1 -1
- package/dist/{chunk-YRMVARQP.js → chunk-KFY3SGN7.js} +49 -2
- package/dist/chunk-KFY3SGN7.js.map +1 -0
- package/dist/{chunk-CYFQJMUV.js → chunk-KIB7SDIJ.js} +15 -10
- package/dist/chunk-KIB7SDIJ.js.map +1 -0
- package/dist/{chunk-3KW65B36.js → chunk-KILOTVIF.js} +95 -48
- package/dist/chunk-KILOTVIF.js.map +1 -0
- package/dist/{chunk-MXFBBHJU.js → chunk-KJMYHC7K.js} +10 -5
- package/dist/chunk-KJMYHC7K.js.map +1 -0
- package/dist/{chunk-W3LR522O.js → chunk-KM2A35EO.js} +36 -34
- package/dist/chunk-KM2A35EO.js.map +1 -0
- package/dist/{chunk-575RMLWN.js → chunk-KXULCVOC.js} +30 -24
- package/dist/chunk-KXULCVOC.js.map +1 -0
- package/dist/{chunk-WELDCG6C.js → chunk-L227SKTB.js} +109 -36
- package/dist/chunk-L227SKTB.js.map +1 -0
- package/dist/{chunk-BVF3AGJP.js → chunk-LJBOVCQG.js} +26 -11
- package/dist/chunk-LJBOVCQG.js.map +1 -0
- package/dist/{chunk-2KI4QFHU.js → chunk-LMDRGRJ2.js} +2 -2
- package/dist/{chunk-MY6TPVXW.js → chunk-LMPHTYJC.js} +2 -2
- package/dist/{chunk-EHRTFRWW.js → chunk-LQHDIS7L.js} +10 -5
- package/dist/chunk-LQHDIS7L.js.map +1 -0
- package/dist/chunk-LUDUFZTV.js +170 -0
- package/dist/chunk-LUDUFZTV.js.map +1 -0
- package/dist/{chunk-5HRY2WRF.js → chunk-LZ3VEOU5.js} +2 -2
- package/dist/{chunk-Q7P4WJDP.js → chunk-M5T4Q2ZU.js} +1 -1
- package/dist/chunk-M5T4Q2ZU.js.map +1 -0
- package/dist/{chunk-ICRIXAP2.js → chunk-MC4FJXPA.js} +16 -6
- package/dist/chunk-MC4FJXPA.js.map +1 -0
- package/dist/{chunk-WPGJYVUH.js → chunk-MGVIEM2O.js} +23 -6
- package/dist/chunk-MGVIEM2O.js.map +1 -0
- package/dist/{chunk-NGAVDO7E.js → chunk-OADWQ5CR.js} +2 -2
- package/dist/{chunk-2NMMFZ5T.js → chunk-OD4FM2U7.js} +6 -3
- package/dist/chunk-OD4FM2U7.js.map +1 -0
- package/dist/{chunk-OZHRDTDX.js → chunk-OKTXM5H4.js} +11 -1
- package/dist/chunk-OKTXM5H4.js.map +1 -0
- package/dist/{chunk-RXDLTSWT.js → chunk-ONPLNAPX.js} +16 -7
- package/dist/chunk-ONPLNAPX.js.map +1 -0
- package/dist/{chunk-FJ43PRLT.js → chunk-ORFGK3XI.js} +20 -14
- package/dist/chunk-ORFGK3XI.js.map +1 -0
- package/dist/{chunk-DOM4GKSW.js → chunk-OZKVVUJB.js} +3 -3
- package/dist/{chunk-3TNBOMQT.js → chunk-PCI747N2.js} +13 -13
- package/dist/{chunk-3TNBOMQT.js.map → chunk-PCI747N2.js.map} +1 -1
- package/dist/{chunk-MT4HVDUZ.js → chunk-PM3QHTFT.js} +3 -3
- package/dist/{chunk-4DWOBS2A.js → chunk-PRQJ5ESM.js} +27 -2
- package/dist/{chunk-4DWOBS2A.js.map → chunk-PRQJ5ESM.js.map} +1 -1
- package/dist/chunk-PU44GBL4.js +52 -0
- package/dist/chunk-PU44GBL4.js.map +1 -0
- package/dist/{chunk-MJFNCJXV.js → chunk-Q4CAQGKQ.js} +47 -9
- package/dist/chunk-Q4CAQGKQ.js.map +1 -0
- package/dist/{chunk-U3WSW6PZ.js → chunk-QMYXNM4P.js} +90 -35
- package/dist/chunk-QMYXNM4P.js.map +1 -0
- package/dist/{chunk-XVVIG67A.js → chunk-QVJ4NWL2.js} +62 -18
- package/dist/chunk-QVJ4NWL2.js.map +1 -0
- package/dist/{chunk-NBNN5GOB.js → chunk-QY7YA7OL.js} +11 -2
- package/dist/chunk-QY7YA7OL.js.map +1 -0
- package/dist/{chunk-ZK7I7JYV.js → chunk-R3PS27B4.js} +7 -7
- package/dist/{chunk-2PRLKQAH.js → chunk-RLV3PQGH.js} +35 -19
- package/dist/chunk-RLV3PQGH.js.map +1 -0
- package/dist/{chunk-WW3QQF4H.js → chunk-ROZJACKP.js} +16 -1
- package/dist/chunk-ROZJACKP.js.map +1 -0
- package/dist/{chunk-7MNMYOFP.js → chunk-RSUYKGGZ.js} +3 -4
- package/dist/chunk-RSUYKGGZ.js.map +1 -0
- package/dist/{chunk-LT3NLYSI.js → chunk-RUZOJKNF.js} +10 -7
- package/dist/chunk-RUZOJKNF.js.map +1 -0
- package/dist/{chunk-326G7DJK.js → chunk-RW5DGAGO.js} +67 -13
- package/dist/chunk-RW5DGAGO.js.map +1 -0
- package/dist/{chunk-KOSORCJG.js → chunk-S53PKKWK.js} +63 -24
- package/dist/chunk-S53PKKWK.js.map +1 -0
- package/dist/{chunk-65PG43EQ.js → chunk-S7WU3Y3D.js} +21 -4
- package/dist/chunk-S7WU3Y3D.js.map +1 -0
- package/dist/{chunk-SKE7JYKA.js → chunk-SFXKHM7P.js} +2 -2
- package/dist/{chunk-HMDCOMYU.js → chunk-SKGV326D.js} +3 -3
- package/dist/{chunk-I5GLV3VE.js → chunk-SML26KED.js} +33 -26
- package/dist/{chunk-I5GLV3VE.js.map → chunk-SML26KED.js.map} +1 -1
- package/dist/chunk-T2PO5MUF.js +62 -0
- package/dist/chunk-T2PO5MUF.js.map +1 -0
- package/dist/{chunk-C7VW7C3F.js → chunk-TDKQGLJW.js} +3 -3
- package/dist/chunk-TDKQGLJW.js.map +1 -0
- package/dist/{chunk-3QKK7QOS.js → chunk-TERNBNJB.js} +3 -3
- package/dist/chunk-TERNBNJB.js.map +1 -0
- package/dist/{chunk-MXC3AP5I.js → chunk-TGQ2NTWH.js} +12 -7
- package/dist/chunk-TGQ2NTWH.js.map +1 -0
- package/dist/{chunk-3Y4P7RXM.js → chunk-TMSXWOBZ.js} +3 -4
- package/dist/chunk-TMSXWOBZ.js.map +1 -0
- package/dist/{chunk-3ZLVGM76.js → chunk-TTGZV5R3.js} +106 -44
- package/dist/chunk-TTGZV5R3.js.map +1 -0
- package/dist/{chunk-5UM2VJ6D.js → chunk-UEY3VB6W.js} +2 -2
- package/dist/{chunk-I6K5FBRQ.js → chunk-UI3NYK34.js} +4 -1
- package/dist/{chunk-I6K5FBRQ.js.map → chunk-UI3NYK34.js.map} +1 -1
- package/dist/{chunk-VBJ7V5SK.js → chunk-UIPDNLXA.js} +21 -8
- package/dist/chunk-UIPDNLXA.js.map +1 -0
- package/dist/{chunk-GIF42EW3.js → chunk-UP6MOYCB.js} +3 -3
- package/dist/{chunk-K4FLSOR5.js → chunk-USYGGIJZ.js} +44 -15
- package/dist/chunk-USYGGIJZ.js.map +1 -0
- package/dist/{chunk-FIT6DMX6.js → chunk-UWY7GIVS.js} +152 -54
- package/dist/chunk-UWY7GIVS.js.map +1 -0
- package/dist/{chunk-MRILGULB.js → chunk-V2RCP53Q.js} +2 -2
- package/dist/{chunk-XKECPATV.js → chunk-VFUEZZBS.js} +113 -4
- package/dist/chunk-VFUEZZBS.js.map +1 -0
- package/dist/{chunk-FSFEQI74.js → chunk-W7L6HXUC.js} +2 -2
- package/dist/{chunk-3IQ2TR4N.js → chunk-WLEB7WCG.js} +2 -2
- package/dist/{chunk-GL6I6MEQ.js → chunk-WSGF57U2.js} +3 -3
- package/dist/{chunk-KNKUID7G.js → chunk-X7Y7WX73.js} +72 -6
- package/dist/chunk-X7Y7WX73.js.map +1 -0
- package/dist/{chunk-5NPGSAVB.js → chunk-XEKAG3FM.js} +23 -5
- package/dist/chunk-XEKAG3FM.js.map +1 -0
- package/dist/{chunk-3APJ5EVB.js → chunk-XKIQZXUB.js} +41 -26
- package/dist/chunk-XKIQZXUB.js.map +1 -0
- package/dist/chunk-XKXKSQU7.js +92 -0
- package/dist/chunk-XKXKSQU7.js.map +1 -0
- package/dist/{chunk-JA3AK3PT.js → chunk-XNLXAWHX.js} +4 -4
- package/dist/{chunk-CULXMQJH.js → chunk-XPXEJRUB.js} +3 -3
- package/dist/chunk-XPXEJRUB.js.map +1 -0
- package/dist/{chunk-PZIAX57I.js → chunk-XR6DNK4U.js} +7 -4
- package/dist/chunk-XR6DNK4U.js.map +1 -0
- package/dist/{chunk-47VWKCAF.js → chunk-XSQ4SGM5.js} +33 -4
- package/dist/chunk-XSQ4SGM5.js.map +1 -0
- package/dist/{chunk-66DHUKLO.js → chunk-XSWKORGM.js} +16 -14
- package/dist/chunk-XSWKORGM.js.map +1 -0
- package/dist/{chunk-QR3C7BKQ.js → chunk-XZ4WBBB5.js} +7 -8
- package/dist/chunk-XZ4WBBB5.js.map +1 -0
- package/dist/{chunk-WNARATI3.js → chunk-Y2SXZ5KZ.js} +59 -11
- package/dist/chunk-Y2SXZ5KZ.js.map +1 -0
- package/dist/{chunk-QLLBRHAT.js → chunk-YDMVYYD2.js} +229 -264
- package/dist/chunk-YDMVYYD2.js.map +1 -0
- package/dist/{chunk-SIC6U3GZ.js → chunk-YHV3KRKS.js} +3 -3
- package/dist/{chunk-ZPKBYX2F.js → chunk-YNDLCWXS.js} +85 -9
- package/dist/chunk-YNDLCWXS.js.map +1 -0
- package/dist/{chunk-W6AQJ2PY.js → chunk-YNXOKMJP.js} +35 -16
- package/dist/chunk-YNXOKMJP.js.map +1 -0
- package/dist/{chunk-VLXA6PI2.js → chunk-YQMZ7IH2.js} +4 -4
- package/dist/{chunk-TMM4S4IJ.js → chunk-YR6GIWWY.js} +58 -8
- package/dist/chunk-YR6GIWWY.js.map +1 -0
- package/dist/{chunk-DK5LDEQM.js → chunk-YR7XMOWK.js} +39 -23
- package/dist/chunk-YR7XMOWK.js.map +1 -0
- package/dist/{chunk-U7EJOMFC.js → chunk-ZEY4KYRQ.js} +41 -14
- package/dist/chunk-ZEY4KYRQ.js.map +1 -0
- package/dist/chunk-ZFXCQPNO.js +27 -0
- package/dist/chunk-ZFXCQPNO.js.map +1 -0
- package/dist/citations.js +1 -1
- package/dist/{cli-kuh9PwZ5.d.ts → cli-CPe_2KB1.d.ts} +8 -31
- package/dist/cli.d.ts +10 -6
- package/dist/cli.js +124 -119
- package/dist/commitment-ledger.js +2 -2
- package/dist/compat/checks.js +1 -2
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +11 -11
- package/dist/compounding/preference-consolidator.d.ts +1 -0
- package/dist/compounding/preference-consolidator.js +8 -8
- package/dist/compounding/preference-consolidator.js.map +1 -1
- package/dist/compression-optimizer.d.ts +1 -0
- package/dist/compression-optimizer.js +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -0
- package/dist/connectors/codex-materialize-runner.js +12 -11
- package/dist/connectors/codex-materialize.d.ts +1 -0
- package/dist/connectors/codex-materialize.js +3 -2
- package/dist/connectors/index.d.ts +1 -0
- package/dist/connectors/index.js +14 -14
- package/dist/{connectors-cli-CwbyjGR7.d.ts → connectors-cli-DbTPNj2H.d.ts} +7 -1
- package/dist/connectors-cli.d.ts +1 -1
- package/dist/connectors-cli.js +3 -1
- package/dist/consolidation-provenance-check.d.ts +1 -0
- package/dist/consolidation-provenance-check.js +2 -2
- package/dist/consolidation-undo.d.ts +1 -0
- package/dist/consolidation-undo.js +1 -1
- package/dist/contradiction/index.d.ts +3 -1
- package/dist/contradiction/index.js +3 -3
- package/dist/{contradiction-review-ATP4S6IC.js → contradiction-review-6V2LXXK6.js} +2 -2
- package/dist/{contradiction-scan-5A4IDZV5.js → contradiction-scan-GIRVC4C7.js} +3 -3
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +1 -0
- package/dist/conversation-index/cleanup.js +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.js +1 -1
- package/dist/conversation-index/indexer.d.ts +5 -2
- package/dist/conversation-index/indexer.js +1 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/cross-namespace-budget.js +1 -1
- package/dist/cue-anchors.js +2 -2
- package/dist/dashboard-runtime.d.ts +6 -0
- package/dist/dashboard-runtime.js +3 -3
- package/dist/day-summary.d.ts +1 -0
- package/dist/day-summary.js +2 -2
- package/dist/delinearize.d.ts +1 -0
- package/dist/direct-answer-wiring.d.ts +1 -0
- package/dist/direct-answer.d.ts +1 -0
- package/dist/{dreams-ledger-LR2NBAZE.js → dreams-ledger-3WSCI5V4.js} +5 -4
- package/dist/{dreams-ledger-LR2NBAZE.js.map → dreams-ledger-3WSCI5V4.js.map} +1 -1
- package/dist/embedding-fallback.d.ts +3 -0
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +1 -0
- package/dist/enrichment/index.js +1 -1
- package/dist/entity-retrieval.d.ts +2 -0
- package/dist/entity-retrieval.js +9 -9
- package/dist/entity-schema.d.ts +1 -0
- package/dist/evals.js +1 -1
- package/dist/explicit-capture.d.ts +5 -3
- package/dist/explicit-capture.js +2 -2
- package/dist/extraction-judge-telemetry.d.ts +2 -0
- package/dist/extraction-judge-training.d.ts +2 -0
- package/dist/extraction-judge.d.ts +2 -0
- package/dist/extraction.d.ts +2 -0
- package/dist/extraction.js +12 -12
- package/dist/{faiss-adapter-CzPghc4C.d.ts → faiss-adapter-BHecI1fF.d.ts} +4 -1
- package/dist/fallback-llm.d.ts +11 -1
- package/dist/fallback-llm.js +8 -6
- package/dist/{first-start-migration-4MHQEOSD.js → first-start-migration-CKTCTCQI.js} +5 -5
- package/dist/graph-dashboard-diff.d.ts +4 -0
- package/dist/graph-dashboard-diff.js +1 -1
- package/dist/graph-dashboard-parser.js +1 -1
- package/dist/{graph-edge-decay-5DI5GUNL.js → graph-edge-decay-MUP5J7CC.js} +6 -6
- package/dist/graph-events.js +1 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.js +2 -2
- package/dist/harmonic-retrieval.js +4 -4
- package/dist/identity-continuity.d.ts +1 -0
- package/dist/importance.d.ts +1 -0
- package/dist/importers/index.d.ts +244 -0
- package/dist/importers/index.js +20 -0
- package/dist/index.d.ts +20 -350
- package/dist/index.js +885 -562
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -0
- package/dist/lcm/archive.d.ts +2 -2
- package/dist/lcm/archive.js +2 -2
- package/dist/lcm/engine.d.ts +3 -2
- package/dist/lcm/engine.js +6 -6
- package/dist/lcm/index.d.ts +1 -0
- package/dist/lcm/index.js +8 -8
- package/dist/lcm/recall.js +1 -1
- package/dist/lcm/summarizer.js +3 -3
- package/dist/lcm/tools.d.ts +1 -0
- package/dist/lifecycle.d.ts +1 -0
- package/dist/live-connectors-runner.d.ts +1 -0
- package/dist/live-connectors-runner.js +6 -6
- package/dist/local-llm.d.ts +1 -0
- package/dist/local-llm.js +2 -2
- package/dist/maintenance/archive-observations.js +1 -1
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +10 -8
- package/dist/maintenance/migrate-observations.js +3 -2
- package/dist/maintenance/observation-ledger-utils.d.ts +3 -0
- package/dist/maintenance/observation-ledger-utils.js +2 -1
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -1
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -8
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -1
- package/dist/maintenance/rebuild-memory-projection.js +13 -10
- package/dist/maintenance/rebuild-observations.d.ts +1 -0
- package/dist/maintenance/rebuild-observations.js +3 -2
- package/dist/mcp-memory-inspector-app.d.ts +7 -4
- package/dist/mcp-memory-inspector-app.js +1 -1
- package/dist/memory-action-policy.d.ts +1 -0
- package/dist/memory-cache.d.ts +1 -0
- package/dist/memory-cache.js +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -0
- package/dist/memory-projection-store.d.ts +1 -0
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-provenance.d.ts +1 -0
- package/dist/memory-worth-outcomes.d.ts +1 -0
- package/dist/migrate/from-engram.js +2 -2
- package/dist/{migrate-from-identity-anchor-G27MCD6A.js → migrate-from-identity-anchor-EB4XI4Q2.js} +2 -2
- package/dist/model-registry.js +1 -1
- package/dist/models-json.d.ts +1 -0
- package/dist/namespaces/migrate.d.ts +3 -0
- package/dist/namespaces/migrate.js +26 -24
- package/dist/namespaces/principal.d.ts +1 -0
- package/dist/namespaces/principal.js +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +17 -15
- package/dist/namespaces/storage.d.ts +4 -2
- package/dist/namespaces/storage.js +10 -9
- package/dist/native-knowledge.d.ts +1 -0
- package/dist/native-knowledge.js +1 -1
- package/dist/negative.js +1 -1
- package/dist/network/webdav.d.ts +16 -1
- package/dist/network/webdav.js +5 -3
- package/dist/objective-state-writers.js +4 -4
- package/dist/objective-state.js +2 -2
- package/dist/offline-sync.d.ts +4 -0
- package/dist/offline-sync.js +4 -4
- package/dist/operator-toolkit.d.ts +4 -1
- package/dist/operator-toolkit.js +37 -34
- package/dist/opik-exporter.js +1 -1
- package/dist/{orchestrator-DuWl9Hwx.d.ts → orchestrator-Co9nxRLF.d.ts} +4 -74
- package/dist/orchestrator.d.ts +5 -3
- package/dist/orchestrator.js +101 -98
- package/dist/page-versioning.js +1 -1
- package/dist/path-X2K5XCHL.js +9 -0
- package/dist/patterns-cli.d.ts +1 -0
- package/dist/peers/index.d.ts +328 -0
- package/dist/{peers-HCVGHMAE.js → peers/index.js} +4 -4
- package/dist/pipeline-D18UAKlN.d.ts +32 -0
- package/dist/plugin-entry-resolver.d.ts +9 -0
- package/dist/plugin-entry-resolver.js +8 -0
- package/dist/plugin-entry-resolver.js.map +1 -0
- package/dist/plugin-id.d.ts +2 -21
- package/dist/plugin-id.js +33 -4
- package/dist/plugin-id.js.map +1 -1
- package/dist/policy-runtime.d.ts +4 -0
- package/dist/policy-runtime.js +1 -1
- package/dist/profiling.js +1 -1
- package/dist/qmd-recall-cache.d.ts +1 -0
- package/dist/qmd.d.ts +2 -1
- package/dist/qmd.js +3 -3
- package/dist/recall-disclosure-escalation.d.ts +1 -0
- package/dist/recall-explain-renderer.d.ts +1 -0
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-state.d.ts +8 -1
- package/dist/recall-state.js +2 -1
- package/dist/recall-tag-filter.d.ts +1 -0
- package/dist/recall-xray-cli.d.ts +1 -0
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -0
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -0
- package/dist/recall-xray.js +2 -2
- package/dist/relevance.d.ts +7 -1
- package/dist/relevance.js +2 -1
- package/dist/replay/normalizers/chatgpt.js +2 -2
- package/dist/replay/normalizers/claude.js +2 -2
- package/dist/replay/normalizers/openclaw.js +2 -2
- package/dist/replay/normalizers/shared.js +1 -1
- package/dist/replay/runner.js +1 -1
- package/dist/rerank.js +1 -1
- package/dist/{resolution-B7FNQSSP.js → resolution-ZY7VM6WS.js} +3 -3
- package/dist/resolution-ZY7VM6WS.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -0
- package/dist/resolve-auth-token.js +1 -1
- package/dist/resolve-provider-secret.d.ts +19 -29
- package/dist/resolve-provider-secret.js +2 -6
- package/dist/resume-bundles.js +10 -9
- package/dist/retrieval-agents.d.ts +2 -1
- package/dist/retrieval-agents.js +2 -1
- package/dist/retrieval-tiers.d.ts +1 -0
- package/dist/routing/engine.d.ts +1 -0
- package/dist/routing/store.d.ts +3 -0
- package/dist/routing/store.js +1 -1
- package/dist/runtime/env.js +1 -1
- package/dist/schemas.d.ts +191 -17
- package/dist/schemas.js +1 -1
- package/dist/sdk-compat.js +1 -1
- package/dist/search/document-scanner.js +1 -1
- package/dist/search/embed-helper.d.ts +7 -2
- package/dist/search/embed-helper.js +3 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +15 -14
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +21 -20
- package/dist/search/lancedb-backend.d.ts +8 -7
- package/dist/search/lancedb-backend.js +4 -2
- package/dist/search/meilisearch-backend.d.ts +8 -7
- package/dist/search/meilisearch-backend.js +4 -2
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/noop-backend.js +1 -1
- package/dist/search/orama-backend.d.ts +10 -8
- package/dist/search/orama-backend.js +8 -4
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/search/remote-backend.js +1 -1
- package/dist/secure-store/index.d.ts +16 -3
- package/dist/secure-store/index.js +2 -2
- package/dist/{semantic-VwGI14Ok.d.ts → semantic-SLAa_prH.d.ts} +5 -3
- package/dist/semantic-consolidation.d.ts +1 -0
- package/dist/semantic-consolidation.js +14 -13
- package/dist/semantic-rule-promotion.js +8 -8
- package/dist/semantic-rule-verifier.d.ts +1 -0
- package/dist/semantic-rule-verifier.js +8 -8
- package/dist/session-integrity.d.ts +1 -0
- package/dist/session-integrity.js +1 -1
- package/dist/session-observer-bands.d.ts +1 -0
- package/dist/session-observer-state.d.ts +6 -1
- package/dist/session-observer-state.js +1 -1
- package/dist/shared-context/manager.d.ts +5 -0
- package/dist/shared-context/manager.js +3 -3
- package/dist/signal.d.ts +1 -0
- package/dist/signal.js +1 -1
- package/dist/source-attribution.js +1 -1
- package/dist/state-store-4QZISH3J.js +30 -0
- package/dist/state-store-4QZISH3J.js.map +1 -0
- package/dist/storage-C4DX8CuG.d.ts +157 -0
- package/dist/storage.d.ts +2 -0
- package/dist/storage.js +7 -7
- package/dist/store-contract.js +1 -1
- package/dist/summarizer.d.ts +1 -0
- package/dist/summarizer.js +7 -7
- package/dist/summary-snapshot.d.ts +1 -0
- package/dist/surfaces/dreams.js +48 -17
- package/dist/surfaces/dreams.js.map +1 -1
- package/dist/temporal-supersession.d.ts +1 -0
- package/dist/temporal-supersession.js +1 -1
- package/dist/temporal-validity.d.ts +1 -0
- package/dist/threading.d.ts +1 -0
- package/dist/tier-migration.d.ts +1 -0
- package/dist/tier-routing.d.ts +1 -0
- package/dist/{tier-stats-62ZVDFKS.js → tier-stats-SKML2OSF.js} +5 -5
- package/dist/tmt.js +1 -1
- package/dist/tokens.js +2 -2
- package/dist/topics.d.ts +1 -0
- package/dist/{trace-C5ETWBEF.js → trace-WM7V4CKI.js} +31 -1
- package/dist/trace-WM7V4CKI.js.map +1 -0
- package/dist/transcript.d.ts +1 -0
- package/dist/transcript.js +2 -2
- package/dist/transfer/autodetect.js +7 -7
- package/dist/transfer/backup.js +5 -5
- package/dist/transfer/capsule-export.js +5 -5
- package/dist/transfer/capsule-import.d.ts +6 -0
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/export-json.js +3 -3
- package/dist/transfer/export-md.js +3 -3
- package/dist/transfer/export-sqlite.js +3 -3
- package/dist/transfer/fs-utils.d.ts +2 -1
- package/dist/transfer/fs-utils.js +5 -3
- package/dist/transfer/import-json.js +3 -3
- package/dist/transfer/import-md.js +3 -3
- package/dist/transfer/import-sqlite.js +3 -3
- package/dist/trust-zones.js +2 -2
- package/dist/types-B1VHaf2w.d.ts +126 -0
- package/dist/types-BliCnURB.d.ts +83 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.js +1 -1
- package/dist/utility-learner.js +3 -3
- package/dist/utility-runtime.d.ts +1 -0
- package/dist/utility-runtime.js +4 -4
- package/dist/utility-telemetry.js +2 -2
- package/dist/verified-recall.js +9 -9
- package/dist/work/board.js +2 -2
- package/dist/work/boundary.js +1 -1
- package/dist/work/storage.d.ts +5 -0
- package/dist/work/storage.js +1 -1
- package/dist/work-product-ledger.js +2 -2
- package/package.json +74 -3
- package/scripts/ensure-better-sqlite3.mjs +8 -7
- package/scripts/faiss_index.py +141 -29
- package/src/access-cli.test.ts +87 -2
- package/src/access-cli.ts +59 -5
- package/src/access-http.test.ts +150 -0
- package/src/access-http.ts +103 -34
- package/src/access-idempotency.ts +136 -3
- package/src/access-mcp.test.ts +155 -0
- package/src/access-mcp.ts +116 -30
- package/src/access-schema.ts +22 -4
- package/src/access-service-namespace.test.ts +9 -9
- package/src/access-service-project-tag.test.ts +37 -0
- package/src/access-service.ts +15 -14
- package/src/active-recall.test.ts +29 -1
- package/src/active-recall.ts +11 -7
- package/src/adapters/claude-code.ts +7 -8
- package/src/adapters/codex.ts +6 -7
- package/src/adapters/hermes.ts +1 -5
- package/src/adapters/registry.test.ts +63 -0
- package/src/adapters/registry.ts +10 -0
- package/src/adapters/replit.ts +5 -7
- package/src/adapters/types.ts +24 -1
- package/src/behavior-signals.ts +1 -1
- package/src/binary-lifecycle/backend.ts +16 -4
- package/src/binary-lifecycle/pipeline.test.ts +149 -0
- package/src/binary-lifecycle/pipeline.ts +49 -7
- package/src/binary-lifecycle/scanner.ts +19 -4
- package/src/boxes.ts +119 -32
- package/src/buffer-session.test.ts +28 -0
- package/src/buffer.ts +10 -14
- package/src/bulk-import/types.ts +10 -0
- package/src/calibration.test.ts +99 -0
- package/src/calibration.ts +57 -13
- package/src/causal-consolidation.test.ts +214 -0
- package/src/causal-consolidation.ts +131 -14
- package/src/causal-retrieval.ts +16 -3
- package/src/citations.test.ts +75 -0
- package/src/citations.ts +19 -6
- package/src/cli.ts +134 -109
- package/src/coding/coding-namespace.test.ts +7 -0
- package/src/coding/coding-namespace.ts +8 -0
- package/src/coding/review-context.test.ts +30 -0
- package/src/coding/review-context.ts +79 -9
- package/src/coding/wire-coding-context.test.ts +16 -0
- package/src/compat/checks.test.ts +33 -0
- package/src/compat/checks.ts +64 -4
- package/src/compounding/engine.ts +2 -2
- package/src/compounding/preference-consolidator.test.ts +47 -0
- package/src/compounding/preference-consolidator.ts +8 -8
- package/src/compression-optimizer.ts +5 -2
- package/src/config.test.ts +34 -2
- package/src/config.ts +62 -18
- package/src/connectors/codex-materialize-runner.ts +4 -3
- package/src/connectors/codex-materialize.ts +149 -34
- package/src/connectors/index.test.ts +144 -7
- package/src/connectors/index.ts +86 -15
- package/src/connectors/live/github.test.ts +47 -0
- package/src/connectors/live/github.ts +29 -1
- package/src/connectors/live/index.ts +2 -0
- package/src/connectors/live/live-connectors.test.ts +359 -73
- package/src/connectors/live/notion.test.ts +84 -0
- package/src/connectors/live/notion.ts +18 -1
- package/src/connectors/live/state-store.ts +419 -38
- package/src/connectors/weclone-installer.test.ts +16 -18
- package/src/connectors-cli.ts +19 -0
- package/src/console/trace.test.ts +28 -0
- package/src/console/trace.ts +42 -5
- package/src/contradiction/contradiction-judge.test.ts +49 -0
- package/src/contradiction/contradiction-judge.ts +15 -5
- package/src/contradiction/contradiction-review.ts +31 -7
- package/src/contradiction/contradiction-scan.ts +28 -18
- package/src/contradiction/contradiction.test.ts +237 -1
- package/src/contradiction/resolution.ts +43 -4
- package/src/conversation-index/backend.ts +13 -5
- package/src/conversation-index/cleanup.ts +25 -4
- package/src/conversation-index/faiss-adapter.ts +24 -15
- package/src/conversation-index/indexer.test.ts +71 -10
- package/src/conversation-index/indexer.ts +22 -3
- package/src/cross-namespace-budget.test.ts +59 -0
- package/src/cross-namespace-budget.ts +15 -7
- package/src/curation/index.ts +18 -17
- package/src/dashboard-runtime.test.ts +98 -0
- package/src/dashboard-runtime.ts +96 -6
- package/src/dedup/index.test.ts +133 -0
- package/src/dedup/index.ts +73 -10
- package/src/dedup/semantic.test.ts +77 -2
- package/src/dedup/semantic.ts +26 -6
- package/src/embedding-fallback.ts +47 -15
- package/src/enrichment/audit.ts +8 -1
- package/src/enrichment/pipeline.ts +21 -13
- package/src/enrichment/web-search-provider.ts +1 -6
- package/src/entity-retrieval.ts +57 -6
- package/src/evals.ts +22 -13
- package/src/explicit-capture.test.ts +40 -0
- package/src/explicit-capture.ts +14 -2
- package/src/extraction.ts +42 -30
- package/src/fallback-llm.ts +35 -2
- package/src/graph-dashboard-diff.test.ts +57 -0
- package/src/graph-dashboard-diff.ts +24 -2
- package/src/graph-dashboard-parser.test.ts +31 -0
- package/src/graph-dashboard-parser.ts +4 -1
- package/src/graph-events.ts +6 -4
- package/src/graph.test.ts +69 -0
- package/src/graph.ts +7 -4
- package/src/importers/base.test.ts +70 -0
- package/src/importers/base.ts +56 -7
- package/src/index.ts +5 -2
- package/src/lcm/archive.ts +65 -16
- package/src/lcm/engine.ts +27 -8
- package/src/lcm/recall.ts +5 -5
- package/src/lcm-engine.test.ts +87 -1
- package/src/lcm-recall.test.ts +71 -0
- package/src/live-connectors-runner.ts +100 -36
- package/src/maintenance/archive-observations.ts +24 -3
- package/src/maintenance/atomic-file.ts +85 -0
- package/src/maintenance/dreams-ledger.ts +15 -8
- package/src/maintenance/memory-governance.test.ts +53 -0
- package/src/maintenance/memory-governance.ts +15 -5
- package/src/maintenance/observation-ledger-utils.ts +6 -5
- package/src/maintenance/purge.test.ts +64 -0
- package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +22 -9
- package/src/maintenance/rebuild-memory-projection.ts +22 -9
- package/src/maintenance/rebuild-observations.ts +7 -3
- package/src/mcp-memory-inspector-app.ts +26 -3
- package/src/memory-cache.test.ts +19 -0
- package/src/memory-cache.ts +1 -0
- package/src/memory-extension/codex-publisher.ts +25 -4
- package/src/memory-extension-host/host-discovery.test.ts +69 -0
- package/src/memory-extension-host/host-discovery.ts +63 -6
- package/src/memory-projection-store.ts +114 -62
- package/src/message-parts/index.ts +46 -31
- package/src/message-parts/message-parts.test.ts +77 -0
- package/src/migrate/from-engram.ts +68 -14
- package/src/model-registry.test.ts +38 -0
- package/src/model-registry.ts +12 -7
- package/src/namespaces/identity.test.ts +66 -0
- package/src/namespaces/identity.ts +23 -0
- package/src/namespaces/migrate.test.ts +62 -0
- package/src/namespaces/migrate.ts +82 -14
- package/src/namespaces/principal.test.ts +37 -1
- package/src/namespaces/principal.ts +18 -7
- package/src/namespaces/search.test.ts +96 -7
- package/src/namespaces/search.ts +32 -25
- package/src/namespaces/storage.ts +93 -11
- package/src/native-knowledge.ts +23 -3
- package/src/negative.ts +50 -5
- package/src/network/webdav.ts +177 -58
- package/src/offline-sync.test.ts +128 -18
- package/src/offline-sync.ts +41 -7
- package/src/onboarding/index.test.ts +105 -0
- package/src/onboarding/index.ts +17 -5
- package/src/operator-toolkit.ts +43 -5
- package/src/orchestrator.ts +120 -27
- package/src/page-versioning.ts +31 -5
- package/src/peers/peers.test.ts +70 -0
- package/src/peers/storage.ts +32 -3
- package/src/plugin-entry-resolver.test.ts +60 -0
- package/src/plugin-entry-resolver.ts +48 -0
- package/src/plugin-id.test.ts +38 -0
- package/src/plugin-id.ts +31 -64
- package/src/policy-runtime.test.ts +75 -0
- package/src/policy-runtime.ts +32 -3
- package/src/procedural/procedure-miner.test.ts +152 -0
- package/src/procedural/procedure-miner.ts +124 -19
- package/src/profiling.test.ts +23 -0
- package/src/profiling.ts +10 -1
- package/src/projection/index.test.ts +253 -0
- package/src/projection/index.ts +159 -18
- package/src/qmd-client.test.ts +45 -0
- package/src/qmd.ts +13 -10
- package/src/recall-disclosure.test.ts +15 -1
- package/src/recall-state.ts +24 -5
- package/src/relevance.ts +24 -5
- package/src/replay/normalizers/chatgpt.ts +14 -4
- package/src/replay/normalizers/claude.ts +8 -3
- package/src/replay/normalizers/openclaw.ts +35 -12
- package/src/replay/normalizers/replay-normalizers.test.ts +65 -0
- package/src/replay/normalizers/shared.ts +4 -1
- package/src/replay/runner.ts +1 -1
- package/src/rerank.test.ts +41 -1
- package/src/rerank.ts +2 -2
- package/src/resolve-auth-token.test.ts +29 -0
- package/src/resolve-auth-token.ts +12 -7
- package/src/resolve-provider-secret.test.ts +78 -22
- package/src/resolve-provider-secret.ts +55 -223
- package/src/retrieval-agents.ts +51 -14
- package/src/review/index.test.ts +75 -1
- package/src/review/index.ts +88 -30
- package/src/routing/store.ts +36 -6
- package/src/runtime/env.test.ts +73 -0
- package/src/runtime/env.ts +7 -11
- package/src/schemas.ts +16 -1
- package/src/search/abort.ts +18 -0
- package/src/search/document-scanner.test.ts +80 -0
- package/src/search/document-scanner.ts +51 -9
- package/src/search/embed-helper.ts +19 -6
- package/src/search/factory.ts +9 -5
- package/src/search/lancedb-backend.ts +66 -23
- package/src/search/meilisearch-backend.ts +39 -13
- package/src/search/noop-backend.ts +1 -1
- package/src/search/orama-backend.test.ts +27 -0
- package/src/search/orama-backend.ts +69 -16
- package/src/search/port.ts +4 -1
- package/src/search/remote-backend.ts +1 -1
- package/src/secure-store/cli-handlers.ts +70 -6
- package/src/secure-store/cli-renderer.ts +13 -7
- package/src/secure-store/secure-fs.ts +11 -5
- package/src/secure-store/secure-store.test.ts +70 -0
- package/src/semantic-consolidation.test.ts +45 -0
- package/src/semantic-consolidation.ts +3 -3
- package/src/session-integrity.test.ts +98 -0
- package/src/session-integrity.ts +51 -1
- package/src/session-observer-state.ts +108 -41
- package/src/shared-context/manager.ts +93 -15
- package/src/signal.test.ts +14 -0
- package/src/signal.ts +8 -1
- package/src/source-attribution.test.ts +8 -0
- package/src/source-attribution.ts +24 -2
- package/src/spaces/index.test.ts +93 -0
- package/src/spaces/index.ts +75 -9
- package/src/storage.ts +14 -1
- package/src/store-contract.test.ts +35 -0
- package/src/store-contract.ts +39 -5
- package/src/summarizer.ts +24 -18
- package/src/summary-snapshot.test.ts +77 -0
- package/src/surfaces/dreams.test.ts +73 -0
- package/src/surfaces/dreams.ts +53 -19
- package/src/sync/index.ts +42 -17
- package/src/taxonomy/taxonomy-loader.ts +43 -4
- package/src/temporal-supersession.test.ts +67 -0
- package/src/temporal-supersession.ts +8 -0
- package/src/tmt.test.ts +50 -0
- package/src/tmt.ts +35 -11
- package/src/tokens.test.ts +18 -0
- package/src/tokens.ts +7 -0
- package/src/training-export/converter.test.ts +55 -2
- package/src/training-export/converter.ts +36 -10
- package/src/training-export/registry.test.ts +17 -0
- package/src/training-export/registry.ts +19 -1
- package/src/transcript.ts +2 -2
- package/src/transfer/backup.ts +18 -7
- package/src/transfer/capsule-crypto.ts +105 -21
- package/src/transfer/capsule-encrypt.test.ts +106 -7
- package/src/transfer/capsule-export.ts +23 -14
- package/src/transfer/capsule-import.ts +11 -2
- package/src/transfer/exclusions.ts +7 -0
- package/src/transfer/export-sqlite.ts +14 -13
- package/src/transfer/fs-utils.ts +52 -1
- package/src/transfer/import-json.ts +12 -7
- package/src/transfer/import-md.ts +5 -5
- package/src/transfer/import-sqlite.ts +4 -5
- package/src/trust-zones.ts +1 -1
- package/src/types.ts +25 -0
- package/src/utility-telemetry.ts +1 -1
- package/src/utils/category-dir.test.ts +15 -0
- package/src/utils/category-dir.ts +3 -1
- package/src/work/boundary.ts +30 -18
- package/src/work/storage.ts +116 -38
- package/src/work-product-ledger.ts +1 -1
- package/dist/chunk-25MQ7IHJ.js.map +0 -1
- package/dist/chunk-2IWUMAES.js.map +0 -1
- package/dist/chunk-2NMMFZ5T.js.map +0 -1
- package/dist/chunk-2PRLKQAH.js.map +0 -1
- package/dist/chunk-326G7DJK.js.map +0 -1
- package/dist/chunk-3APJ5EVB.js.map +0 -1
- package/dist/chunk-3KW65B36.js.map +0 -1
- package/dist/chunk-3QKK7QOS.js.map +0 -1
- package/dist/chunk-3SLRNYNG.js.map +0 -1
- package/dist/chunk-3VAL7ZL2.js.map +0 -1
- package/dist/chunk-3Y4P7RXM.js.map +0 -1
- package/dist/chunk-3ZLVGM76.js.map +0 -1
- package/dist/chunk-43PJZYGL.js.map +0 -1
- package/dist/chunk-47VWKCAF.js.map +0 -1
- package/dist/chunk-4KGVTPGD.js.map +0 -1
- package/dist/chunk-5375UYTQ.js.map +0 -1
- package/dist/chunk-56K5QLHX.js.map +0 -1
- package/dist/chunk-575RMLWN.js.map +0 -1
- package/dist/chunk-5NPGSAVB.js.map +0 -1
- package/dist/chunk-5RGLBDQF.js.map +0 -1
- package/dist/chunk-65PG43EQ.js.map +0 -1
- package/dist/chunk-66DHUKLO.js.map +0 -1
- package/dist/chunk-6LVVDPJ4.js.map +0 -1
- package/dist/chunk-76FLAAUC.js.map +0 -1
- package/dist/chunk-77H5NU3M.js.map +0 -1
- package/dist/chunk-7MNMYOFP.js.map +0 -1
- package/dist/chunk-7OZ53EXP.js.map +0 -1
- package/dist/chunk-7SEAZFFB.js.map +0 -1
- package/dist/chunk-A6KTB5R6.js.map +0 -1
- package/dist/chunk-AGZQD76C.js.map +0 -1
- package/dist/chunk-APO3DCMU.js.map +0 -1
- package/dist/chunk-BVF3AGJP.js.map +0 -1
- package/dist/chunk-C5BCH4ZS.js.map +0 -1
- package/dist/chunk-C7VW7C3F.js.map +0 -1
- package/dist/chunk-CULXMQJH.js.map +0 -1
- package/dist/chunk-CYFQJMUV.js.map +0 -1
- package/dist/chunk-D654IBA6.js +0 -61
- package/dist/chunk-D654IBA6.js.map +0 -1
- package/dist/chunk-DGXUHMOV.js.map +0 -1
- package/dist/chunk-DINWEURR.js.map +0 -1
- package/dist/chunk-DK5LDEQM.js.map +0 -1
- package/dist/chunk-EABGC2TL.js.map +0 -1
- package/dist/chunk-EHRTFRWW.js.map +0 -1
- package/dist/chunk-EJI5XIBB.js.map +0 -1
- package/dist/chunk-FAAFWE4G.js.map +0 -1
- package/dist/chunk-FAJ7FZYM.js +0 -11
- package/dist/chunk-FAJ7FZYM.js.map +0 -1
- package/dist/chunk-FDU6HUUL.js +0 -147
- package/dist/chunk-FDU6HUUL.js.map +0 -1
- package/dist/chunk-FIT6DMX6.js.map +0 -1
- package/dist/chunk-FJ43PRLT.js.map +0 -1
- package/dist/chunk-FLTNHQK6.js +0 -262
- package/dist/chunk-FLTNHQK6.js.map +0 -1
- package/dist/chunk-GDFS42HT.js.map +0 -1
- package/dist/chunk-H3ME6L6D.js.map +0 -1
- package/dist/chunk-HXXBL2KD.js.map +0 -1
- package/dist/chunk-ICRIXAP2.js.map +0 -1
- package/dist/chunk-IQT3XTKW.js.map +0 -1
- package/dist/chunk-JR4ZC3G4.js.map +0 -1
- package/dist/chunk-K4FLSOR5.js.map +0 -1
- package/dist/chunk-KNKUID7G.js.map +0 -1
- package/dist/chunk-KOSORCJG.js.map +0 -1
- package/dist/chunk-LIRZNNUP.js.map +0 -1
- package/dist/chunk-LLQ2LLWF.js.map +0 -1
- package/dist/chunk-LPMVBPA3.js +0 -236
- package/dist/chunk-LPMVBPA3.js.map +0 -1
- package/dist/chunk-LT3NLYSI.js.map +0 -1
- package/dist/chunk-LUDTDZLK.js.map +0 -1
- package/dist/chunk-MJFNCJXV.js.map +0 -1
- package/dist/chunk-MSWG7JI6.js.map +0 -1
- package/dist/chunk-MXC3AP5I.js.map +0 -1
- package/dist/chunk-MXFBBHJU.js.map +0 -1
- package/dist/chunk-MZH6EHNR.js.map +0 -1
- package/dist/chunk-N2D6GXBM.js.map +0 -1
- package/dist/chunk-NBNN5GOB.js.map +0 -1
- package/dist/chunk-NMZY542O.js.map +0 -1
- package/dist/chunk-NZL6GGQE.js.map +0 -1
- package/dist/chunk-OZHRDTDX.js.map +0 -1
- package/dist/chunk-PIRJPV5T.js.map +0 -1
- package/dist/chunk-PZIAX57I.js.map +0 -1
- package/dist/chunk-Q7P4WJDP.js.map +0 -1
- package/dist/chunk-QA2ZAPBU.js.map +0 -1
- package/dist/chunk-QDZ2RLEC.js.map +0 -1
- package/dist/chunk-QLLBRHAT.js.map +0 -1
- package/dist/chunk-QR3C7BKQ.js.map +0 -1
- package/dist/chunk-RHY3HH7P.js.map +0 -1
- package/dist/chunk-RK2Y4XOM.js.map +0 -1
- package/dist/chunk-RR2PKP3I.js +0 -63
- package/dist/chunk-RR2PKP3I.js.map +0 -1
- package/dist/chunk-RRF5UOBJ.js.map +0 -1
- package/dist/chunk-RXDLTSWT.js.map +0 -1
- package/dist/chunk-RYED3SPJ.js +0 -42
- package/dist/chunk-RYED3SPJ.js.map +0 -1
- package/dist/chunk-S7KDBTWT.js.map +0 -1
- package/dist/chunk-TK4UEOSK.js.map +0 -1
- package/dist/chunk-TMM4S4IJ.js.map +0 -1
- package/dist/chunk-TMQLARTH.js.map +0 -1
- package/dist/chunk-TPB3I2AC.js.map +0 -1
- package/dist/chunk-TPMQ3G6Z.js.map +0 -1
- package/dist/chunk-TPU5L5EY.js.map +0 -1
- package/dist/chunk-TZOLIGIG.js.map +0 -1
- package/dist/chunk-U3WSW6PZ.js.map +0 -1
- package/dist/chunk-U4SCL7B7.js.map +0 -1
- package/dist/chunk-U66YHYC7.js +0 -31
- package/dist/chunk-U66YHYC7.js.map +0 -1
- package/dist/chunk-U7EJOMFC.js.map +0 -1
- package/dist/chunk-UWVJF25J.js.map +0 -1
- package/dist/chunk-VBJ7V5SK.js.map +0 -1
- package/dist/chunk-W3LR522O.js.map +0 -1
- package/dist/chunk-W4L6CZKA.js.map +0 -1
- package/dist/chunk-W6AQJ2PY.js.map +0 -1
- package/dist/chunk-WELDCG6C.js.map +0 -1
- package/dist/chunk-WNARATI3.js.map +0 -1
- package/dist/chunk-WPGJYVUH.js.map +0 -1
- package/dist/chunk-WW3QQF4H.js.map +0 -1
- package/dist/chunk-XIG5PDM7.js.map +0 -1
- package/dist/chunk-XKECPATV.js.map +0 -1
- package/dist/chunk-XKLD5OK4.js.map +0 -1
- package/dist/chunk-XSZEP4SF.js.map +0 -1
- package/dist/chunk-XVVIG67A.js.map +0 -1
- package/dist/chunk-XYIK4LF6.js.map +0 -1
- package/dist/chunk-YRMVARQP.js.map +0 -1
- package/dist/chunk-YROHKYBY.js.map +0 -1
- package/dist/chunk-YU5KIWYQ.js.map +0 -1
- package/dist/chunk-ZAVUCJ4H.js.map +0 -1
- package/dist/chunk-ZPKBYX2F.js.map +0 -1
- package/dist/chunk-ZTFCYYEZ.js.map +0 -1
- package/dist/chunk-ZYVPLJ4T.js.map +0 -1
- package/dist/path-MR5JPYOP.js +0 -9
- package/dist/state-store-VZU2IA53.js +0 -16
- package/dist/trace-C5ETWBEF.js.map +0 -1
- /package/dist/{capsule-crypto-5CYAGVC5.js.map → bulk-import/index.js.map} +0 -0
- /package/dist/{contradiction-review-ATP4S6IC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{capsule-merge-4MGKE7C5.js.map → capsule-merge-T2JRE46P.js.map} +0 -0
- /package/dist/{chunk-SAZS2QZB.js.map → chunk-23UORJ4S.js.map} +0 -0
- /package/dist/{chunk-PK7H5L6Y.js.map → chunk-2NM43EWN.js.map} +0 -0
- /package/dist/{chunk-PYXS46O7.js.map → chunk-3BP57I6J.js.map} +0 -0
- /package/dist/{chunk-FBYESMQ2.js.map → chunk-3C5RPJAX.js.map} +0 -0
- /package/dist/{chunk-N53K2EXC.js.map → chunk-6VF75M3X.js.map} +0 -0
- /package/dist/{chunk-6H2TESSP.js.map → chunk-765K3SAT.js.map} +0 -0
- /package/dist/{chunk-EDTHC6UD.js.map → chunk-77NAFXUD.js.map} +0 -0
- /package/dist/{chunk-MGKYQQYF.js.map → chunk-7Q3RCKAQ.js.map} +0 -0
- /package/dist/{chunk-34DQE4KF.js.map → chunk-CO7ZO4TU.js.map} +0 -0
- /package/dist/{chunk-ZKSK55RC.js.map → chunk-ETUPBUHB.js.map} +0 -0
- /package/dist/{chunk-QRNI5JBH.js.map → chunk-EYIEWJNI.js.map} +0 -0
- /package/dist/{chunk-C6QPK5GG.js.map → chunk-FZZ2QTJI.js.map} +0 -0
- /package/dist/{chunk-3JXBXXM2.js.map → chunk-G4IAEX6D.js.map} +0 -0
- /package/dist/{chunk-2WWLHTZY.js.map → chunk-IC4GELZE.js.map} +0 -0
- /package/dist/{chunk-PCUKNJAZ.js.map → chunk-JKV57BTN.js.map} +0 -0
- /package/dist/{chunk-2KI4QFHU.js.map → chunk-LMDRGRJ2.js.map} +0 -0
- /package/dist/{chunk-MY6TPVXW.js.map → chunk-LMPHTYJC.js.map} +0 -0
- /package/dist/{chunk-5HRY2WRF.js.map → chunk-LZ3VEOU5.js.map} +0 -0
- /package/dist/{chunk-NGAVDO7E.js.map → chunk-OADWQ5CR.js.map} +0 -0
- /package/dist/{chunk-DOM4GKSW.js.map → chunk-OZKVVUJB.js.map} +0 -0
- /package/dist/{chunk-MT4HVDUZ.js.map → chunk-PM3QHTFT.js.map} +0 -0
- /package/dist/{chunk-ZK7I7JYV.js.map → chunk-R3PS27B4.js.map} +0 -0
- /package/dist/{chunk-SKE7JYKA.js.map → chunk-SFXKHM7P.js.map} +0 -0
- /package/dist/{chunk-HMDCOMYU.js.map → chunk-SKGV326D.js.map} +0 -0
- /package/dist/{chunk-5UM2VJ6D.js.map → chunk-UEY3VB6W.js.map} +0 -0
- /package/dist/{chunk-GIF42EW3.js.map → chunk-UP6MOYCB.js.map} +0 -0
- /package/dist/{chunk-MRILGULB.js.map → chunk-V2RCP53Q.js.map} +0 -0
- /package/dist/{chunk-FSFEQI74.js.map → chunk-W7L6HXUC.js.map} +0 -0
- /package/dist/{chunk-3IQ2TR4N.js.map → chunk-WLEB7WCG.js.map} +0 -0
- /package/dist/{chunk-GL6I6MEQ.js.map → chunk-WSGF57U2.js.map} +0 -0
- /package/dist/{chunk-JA3AK3PT.js.map → chunk-XNLXAWHX.js.map} +0 -0
- /package/dist/{chunk-SIC6U3GZ.js.map → chunk-YHV3KRKS.js.map} +0 -0
- /package/dist/{chunk-VLXA6PI2.js.map → chunk-YQMZ7IH2.js.map} +0 -0
- /package/dist/{contradiction-scan-5A4IDZV5.js.map → contradiction-review-6V2LXXK6.js.map} +0 -0
- /package/dist/{migrate-from-identity-anchor-G27MCD6A.js.map → contradiction-scan-GIRVC4C7.js.map} +0 -0
- /package/dist/{first-start-migration-4MHQEOSD.js.map → first-start-migration-CKTCTCQI.js.map} +0 -0
- /package/dist/{graph-edge-decay-5DI5GUNL.js.map → graph-edge-decay-MUP5J7CC.js.map} +0 -0
- /package/dist/{path-MR5JPYOP.js.map → importers/index.js.map} +0 -0
- /package/dist/{peers-HCVGHMAE.js.map → migrate-from-identity-anchor-EB4XI4Q2.js.map} +0 -0
- /package/dist/{resolution-B7FNQSSP.js.map → path-X2K5XCHL.js.map} +0 -0
- /package/dist/{state-store-VZU2IA53.js.map → peers/index.js.map} +0 -0
- /package/dist/{tier-stats-62ZVDFKS.js.map → tier-stats-SKML2OSF.js.map} +0 -0
|
@@ -7,10 +7,13 @@ function clamp(value, min, max) {
|
|
|
7
7
|
function parseRecallQuality(reason) {
|
|
8
8
|
if (!reason) return "unknown";
|
|
9
9
|
const text = reason.toLowerCase();
|
|
10
|
-
if (
|
|
10
|
+
if (/\bunresolved\b|\b(?:not|never|no|without)\s+(?:yet\s+)?resolved\b/.test(text)) {
|
|
11
|
+
return "poor";
|
|
12
|
+
}
|
|
13
|
+
if (/(recall[_\s-]?good|quality[:=]\s*(good|high)|\bimprov(?:e|ed|ing)\b|\bresolved\b)/.test(text)) {
|
|
11
14
|
return "good";
|
|
12
15
|
}
|
|
13
|
-
if (/(recall[_\s-]?poor|quality[:=]\s*(poor|low)|
|
|
16
|
+
if (/(recall[_\s-]?poor|quality[:=]\s*(poor|low)|\bdegrad(?:e|ed|ing)\b|\bmiss(?:ed|ing)\b|\birrelevant\b)/.test(text)) {
|
|
14
17
|
return "poor";
|
|
15
18
|
}
|
|
16
19
|
return "unknown";
|
|
@@ -213,4 +216,4 @@ export {
|
|
|
213
216
|
renderCompressionGuidelinesMarkdown,
|
|
214
217
|
buildCompressionGuidelinesMarkdown
|
|
215
218
|
};
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-OD4FM2U7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/compression-optimizer.ts"],"sourcesContent":["import type {\n CompressionGuidelineOptimizerActionSummary,\n CompressionGuidelineOptimizerEventCounts,\n CompressionGuidelineOptimizerRuleUpdate,\n CompressionGuidelineOptimizerState,\n MemoryActionEvent,\n MemoryActionOutcome,\n MemoryActionType,\n} from \"./types.js\";\n\nexport interface CompressionGuidelineCandidate {\n generatedAt: string;\n sourceWindow: {\n from: string;\n to: string;\n };\n eventCounts: CompressionGuidelineOptimizerEventCounts;\n actionSummaries: CompressionGuidelineOptimizerActionSummary[];\n ruleUpdates: CompressionGuidelineOptimizerRuleUpdate[];\n guidelineVersion: number;\n optimizerVersion: number;\n}\n\nexport interface CompressionSemanticRuleRefinement {\n action: MemoryActionType;\n delta?: number;\n confidence?: \"low\" | \"medium\" | \"high\";\n note?: string;\n}\n\nexport interface CompressionSemanticRefinementResult {\n updates: CompressionSemanticRuleRefinement[];\n}\n\nexport interface CompressionSemanticRefinementOptions {\n enabled: boolean;\n timeoutMs: number;\n runRefinement?: (\n candidate: CompressionGuidelineCandidate,\n ) => Promise<CompressionSemanticRefinementResult | null>;\n}\n\nconst MAX_DELTA = 0.15;\nconst SPARSE_SAMPLE = 5;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction parseRecallQuality(reason: string | undefined): \"good\" | \"poor\" | \"unknown\" {\n if (!reason) return \"unknown\";\n const text = reason.toLowerCase();\n if (/\\bunresolved\\b|\\b(?:not|never|no|without)\\s+(?:yet\\s+)?resolved\\b/.test(text)) {\n return \"poor\";\n }\n if (/(recall[_\\s-]?good|quality[:=]\\s*(good|high)|\\bimprov(?:e|ed|ing)\\b|\\bresolved\\b)/.test(text)) {\n return \"good\";\n }\n if (/(recall[_\\s-]?poor|quality[:=]\\s*(poor|low)|\\bdegrad(?:e|ed|ing)\\b|\\bmiss(?:ed|ing)\\b|\\birrelevant\\b)/.test(text)) {\n return \"poor\";\n }\n return \"unknown\";\n}\n\nfunction nextGuidelineVersion(previousState: CompressionGuidelineOptimizerState | null): number {\n if (!previousState) return 1;\n return Math.max(1, previousState.guidelineVersion + 1);\n}\n\nfunction nextOptimizerVersion(previousState: CompressionGuidelineOptimizerState | null): number {\n if (!previousState) return 1;\n return Math.max(1, previousState.version + 1);\n}\n\nfunction roundDelta(value: number): number {\n return Math.round(value * 1000) / 1000;\n}\n\nfunction confidenceForDelta(delta: number): \"low\" | \"medium\" | \"high\" {\n const magnitude = Math.abs(delta);\n return magnitude >= 0.09 ? \"high\" : magnitude >= 0.04 ? \"medium\" : \"low\";\n}\n\nfunction directionForDelta(delta: number): \"increase\" | \"decrease\" | \"hold\" {\n return delta > 0 ? \"increase\" : delta < 0 ? \"decrease\" : \"hold\";\n}\n\nexport function computeCompressionGuidelineCandidate(\n events: MemoryActionEvent[],\n options: {\n generatedAtIso?: string;\n previousState?: CompressionGuidelineOptimizerState | null;\n } = {},\n): CompressionGuidelineCandidate {\n const generatedAt = options.generatedAtIso ?? new Date().toISOString();\n const previousState = options.previousState ?? null;\n const effectiveEvents = events.filter((event) => event.dryRun !== true);\n const totalCounts: CompressionGuidelineOptimizerEventCounts = {\n total: effectiveEvents.length,\n applied: 0,\n skipped: 0,\n failed: 0,\n };\n\n const actionMap = new Map<MemoryActionType, CompressionGuidelineOptimizerActionSummary>();\n let windowFrom = effectiveEvents[0]?.timestamp ?? generatedAt;\n let windowTo = effectiveEvents[0]?.timestamp ?? generatedAt;\n\n for (const event of effectiveEvents) {\n if (event.timestamp < windowFrom) windowFrom = event.timestamp;\n if (event.timestamp > windowTo) windowTo = event.timestamp;\n totalCounts[event.outcome] += 1;\n\n let summary = actionMap.get(event.action);\n if (!summary) {\n summary = {\n action: event.action,\n total: 0,\n outcomes: { applied: 0, skipped: 0, failed: 0 },\n quality: { good: 0, poor: 0, unknown: 0 },\n };\n actionMap.set(event.action, summary);\n }\n\n summary.total += 1;\n summary.outcomes[event.outcome] += 1;\n const quality = parseRecallQuality(event.reason);\n summary.quality[quality] += 1;\n }\n\n const actionSummaries = [...actionMap.values()].sort((a, b) => {\n if (b.total !== a.total) return b.total - a.total;\n return a.action.localeCompare(b.action);\n });\n\n const ruleUpdates = actionSummaries.map((summary): CompressionGuidelineOptimizerRuleUpdate => {\n const notes: string[] = [];\n if (summary.total < SPARSE_SAMPLE) {\n notes.push(\"Sparse sample size; holding baseline policy.\");\n return {\n action: summary.action,\n delta: 0,\n direction: \"hold\",\n confidence: \"low\",\n notes,\n };\n }\n\n const successRate = summary.outcomes.applied / summary.total;\n const failureRate = summary.outcomes.failed / summary.total;\n const qualitySeen = summary.quality.good + summary.quality.poor;\n const qualitySignal = qualitySeen > 0\n ? (summary.quality.good - summary.quality.poor) / qualitySeen\n : 0;\n const rawDelta = clamp((successRate - failureRate) * 0.12 + qualitySignal * 0.06, -MAX_DELTA, MAX_DELTA);\n const delta = roundDelta(rawDelta);\n\n const direction = directionForDelta(delta);\n if (direction === \"decrease\" && summary.outcomes.failed > summary.outcomes.applied) {\n notes.push(\"Failures exceed applied outcomes; conservative down-adjustment.\");\n } else if (direction === \"increase\" && summary.quality.good > summary.quality.poor) {\n notes.push(\"Good recall quality markers support this action.\");\n } else if (direction === \"decrease\" && summary.quality.poor > summary.quality.good) {\n notes.push(\"Poor recall quality markers exceed good markers.\");\n } else {\n notes.push(\"Outcomes are stable; keep bounded adjustments.\");\n }\n\n const confidence = confidenceForDelta(delta);\n return {\n action: summary.action,\n delta,\n direction,\n confidence,\n notes,\n };\n });\n\n return {\n generatedAt,\n sourceWindow: {\n from: effectiveEvents.length > 0 ? windowFrom : generatedAt,\n to: effectiveEvents.length > 0 ? windowTo : generatedAt,\n },\n eventCounts: totalCounts,\n actionSummaries,\n ruleUpdates,\n guidelineVersion: nextGuidelineVersion(previousState),\n optimizerVersion: nextOptimizerVersion(previousState),\n };\n}\n\nexport async function refineCompressionGuidelineCandidateSemantically(\n baseline: CompressionGuidelineCandidate,\n options: CompressionSemanticRefinementOptions,\n): Promise<CompressionGuidelineCandidate> {\n if (!options.enabled) return baseline;\n if (typeof options.runRefinement !== \"function\") return baseline;\n\n const timeoutMs = Math.max(1, Math.floor(options.timeoutMs));\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const timeout = new Promise<CompressionSemanticRefinementResult | null>((resolve) => {\n timeoutId = setTimeout(() => resolve(null), timeoutMs);\n });\n\n const refinementPromise = options.runRefinement(baseline).catch(() => null);\n\n let refinement: CompressionSemanticRefinementResult | null = null;\n try {\n refinement = await Promise.race([refinementPromise, timeout]);\n } catch {\n if (timeoutId) clearTimeout(timeoutId);\n return baseline;\n }\n if (timeoutId) clearTimeout(timeoutId);\n if (!refinement || !Array.isArray(refinement.updates) || refinement.updates.length === 0) {\n return baseline;\n }\n\n const updatesByAction = new Map<MemoryActionType, CompressionSemanticRuleRefinement>();\n for (const update of refinement.updates) {\n if (!update || typeof update.action !== \"string\") continue;\n updatesByAction.set(update.action, update);\n }\n\n let changed = false;\n const ruleUpdates = baseline.ruleUpdates.map((rule) => {\n const patch = updatesByAction.get(rule.action);\n if (!patch) return rule;\n\n const nextDelta =\n typeof patch.delta === \"number\" && Number.isFinite(patch.delta)\n ? roundDelta(clamp(patch.delta, -MAX_DELTA, MAX_DELTA))\n : rule.delta;\n const nextConfidence = patch.confidence ?? confidenceForDelta(nextDelta);\n const nextDirection = directionForDelta(nextDelta);\n const nextNotes =\n typeof patch.note === \"string\" && patch.note.trim().length > 0\n ? [patch.note.trim()]\n : rule.notes;\n\n if (\n nextDelta !== rule.delta ||\n nextDirection !== rule.direction ||\n nextConfidence !== rule.confidence ||\n nextNotes.join(\"\\n\") !== rule.notes.join(\"\\n\")\n ) {\n changed = true;\n }\n\n return {\n ...rule,\n delta: nextDelta,\n direction: nextDirection,\n confidence: nextConfidence,\n notes: nextNotes,\n };\n });\n\n if (!changed) return baseline;\n return {\n ...baseline,\n ruleUpdates,\n };\n}\n\nexport function renderCompressionGuidelinesMarkdown(candidate: CompressionGuidelineCandidate): string {\n const actionLines =\n candidate.actionSummaries.length === 0\n ? [\"- (none)\"]\n : candidate.actionSummaries.map((item) => `- ${item.action}: ${item.total}`);\n const outcomeLines: string[] = [\n `- applied: ${candidate.eventCounts.applied}`,\n `- skipped: ${candidate.eventCounts.skipped}`,\n `- failed: ${candidate.eventCounts.failed}`,\n ];\n const updateLines =\n candidate.ruleUpdates.length === 0\n ? [\"- No telemetry events available yet. Keep defaults conservative and gather action data first.\"]\n : candidate.ruleUpdates.map((update) => {\n const sign = update.delta > 0 ? \"+\" : \"\";\n return `- ${update.action}: ${update.direction} (${sign}${update.delta.toFixed(3)}, confidence=${update.confidence}) — ${update.notes.join(\" \")}`;\n });\n\n return [\n \"# Compression Guidelines\",\n \"\",\n `Generated: ${candidate.generatedAt}`,\n `Source events analyzed: ${candidate.eventCounts.total}`,\n `Source window: ${candidate.sourceWindow.from} -> ${candidate.sourceWindow.to}`,\n `Guideline version: ${candidate.guidelineVersion}`,\n \"\",\n \"## Action Distribution\",\n ...actionLines,\n \"\",\n \"## Outcome Distribution\",\n ...outcomeLines,\n \"\",\n \"## Suggested Guidelines\",\n ...updateLines,\n \"\",\n ].join(\"\\n\");\n}\n\nexport function buildCompressionGuidelinesMarkdown(\n events: MemoryActionEvent[],\n generatedAtIso: string = new Date().toISOString(),\n previousState: CompressionGuidelineOptimizerState | null = null,\n): string {\n const candidate = computeCompressionGuidelineCandidate(events, {\n generatedAtIso,\n previousState,\n });\n return renderCompressionGuidelinesMarkdown(candidate);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
// src/connectors-cli.ts
|
|
2
|
+
function buildConnectorRowsFromDefinitions(definitions, states) {
|
|
3
|
+
const stateMap = new Map(states.map((state) => [state.id, state]));
|
|
4
|
+
return definitions.map((definition) => ({
|
|
5
|
+
id: definition.id,
|
|
6
|
+
displayName: definition.displayName,
|
|
7
|
+
enabled: definition.enabled,
|
|
8
|
+
state: stateMap.get(definition.id) ?? null
|
|
9
|
+
}));
|
|
10
|
+
}
|
|
2
11
|
var CONNECTORS_OUTPUT_FORMATS = ["text", "markdown", "json"];
|
|
3
12
|
function parseConnectorsFormat(value, defaultFormat = "text") {
|
|
4
13
|
if (value === void 0 || value === null) return defaultFormat;
|
|
@@ -228,6 +237,7 @@ function escapePipes(value) {
|
|
|
228
237
|
}
|
|
229
238
|
|
|
230
239
|
export {
|
|
240
|
+
buildConnectorRowsFromDefinitions,
|
|
231
241
|
CONNECTORS_OUTPUT_FORMATS,
|
|
232
242
|
parseConnectorsFormat,
|
|
233
243
|
parseConnectorsListOptions,
|
|
@@ -237,4 +247,4 @@ export {
|
|
|
237
247
|
renderConnectorsRunResult,
|
|
238
248
|
runConnectorPollOnce
|
|
239
249
|
};
|
|
240
|
-
//# sourceMappingURL=chunk-
|
|
250
|
+
//# sourceMappingURL=chunk-OKTXM5H4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connectors-cli.ts"],"sourcesContent":["/**\n * `remnic connectors` CLI helpers (issue #683 PR 6/N).\n *\n * Three subcommands:\n *\n * remnic connectors list\n * Lists all configured live connectors, their enabled state, last poll\n * time, and last error. Output formats: text (default), markdown, json.\n *\n * remnic connectors status\n * Identical data to `list` but defaults to JSON output so scripts can\n * reliably parse it. Accepts `--format` to override.\n *\n * remnic connectors run <name>\n * Manually triggers a single `syncIncremental()` pass for the named\n * connector. Operator debug surface — useful when you want to test\n * credentials without waiting for the scheduler tick. Prints the\n * number of new documents imported plus any error.\n *\n * Design decisions:\n *\n * - Pure functions for list / status / run option parsing so they can be\n * unit-tested without booting an orchestrator (CLAUDE.md rules 14 + 51).\n * - Rendering lives here (not in cli.ts) so HTTP/MCP surfaces can reuse the\n * same output without forking formatting (CLAUDE.md rule 22).\n * - The `run` command requires the caller to pass a `pollFn` callback\n * (wrapping the actual connector's `syncIncremental`). This keeps the\n * helper module free of direct orchestrator / live-connector imports while\n * still being testable (CLAUDE.md rule 33 — mock signatures must match\n * production).\n * - CLAUDE.md rule 51: invalid `--format` throws with listed options; unknown\n * connector name in `run` throws a descriptive error; `--format` without a\n * value is caught by Commander's built-in argument check.\n * - `runConnectorPollOnce` encapsulates the persist-before-cursor-advance\n * contract (CLAUDE.md gotcha #25, #43) so it can be unit-tested in\n * isolation without an orchestrator.\n */\n\nimport {\n type ConnectorCursor,\n type ConnectorDocument,\n type ConnectorState,\n type ConnectorSyncStatus,\n} from \"./connectors/live/index.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types that cross the module boundary\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A lightweight descriptor for one live connector, assembled from the parsed\n * config and any persisted state. The CLI handler builds this from\n * `orchestrator.config.connectors` + `listConnectorStates(memoryDir)`.\n */\nexport interface ConnectorRow {\n /** Stable connector id (e.g. `\"google-drive\"`, `\"notion\"`). */\n id: string;\n /** Human-readable display name. */\n displayName: string;\n /** Whether the operator has enabled this connector in config. */\n enabled: boolean;\n /** Persisted sync state, or `null` if no sync has ever run. */\n state: ConnectorState | null;\n}\n\nexport interface ConnectorRowDefinition {\n id: string;\n displayName: string;\n enabled: boolean;\n}\n\nexport function buildConnectorRowsFromDefinitions(\n definitions: readonly ConnectorRowDefinition[],\n states: readonly ConnectorState[],\n): ConnectorRow[] {\n const stateMap = new Map(states.map((state) => [state.id, state]));\n return definitions.map((definition) => ({\n id: definition.id,\n displayName: definition.displayName,\n enabled: definition.enabled,\n state: stateMap.get(definition.id) ?? null,\n }));\n}\n\n/**\n * Result returned by the `run` command's poll function.\n */\nexport interface ConnectorRunResult {\n /** Number of new documents imported in this pass. */\n docsImported: number;\n /**\n * Error message if the sync or ingest failed, undefined on full success.\n * When only the cursor write failed after a successful ingest, this field is\n * undefined and `stateWriteError` carries the failure. When persisting error\n * state fails after a sync/ingest error, both fields are set so callers can\n * preserve the primary failure while also reporting stale persisted state.\n */\n error?: string;\n /**\n * Set when cursor/error-state persistence fails. On the success path,\n * `docsImported` reflects the actual count of successfully ingested docs so\n * the operator knows data was persisted even though the cursor did not\n * advance. On the error path, `error` preserves the primary sync/ingest\n * failure and this field reports the secondary persistence failure.\n */\n stateWriteError?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Output formats\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const CONNECTORS_OUTPUT_FORMATS = [\"text\", \"markdown\", \"json\"] as const;\nexport type ConnectorsOutputFormat = (typeof CONNECTORS_OUTPUT_FORMATS)[number];\n\n/**\n * Validate `--format <fmt>`. Throws a listed-options error for any value not\n * in `CONNECTORS_OUTPUT_FORMATS`. Returns the given default when the value is\n * `undefined` (no flag supplied).\n */\nexport function parseConnectorsFormat(\n value: unknown,\n defaultFormat: ConnectorsOutputFormat = \"text\",\n): ConnectorsOutputFormat {\n if (value === undefined || value === null) return defaultFormat;\n if (\n typeof value !== \"string\" ||\n !(CONNECTORS_OUTPUT_FORMATS as readonly string[]).includes(value)\n ) {\n throw new Error(\n `--format expects one of ${CONNECTORS_OUTPUT_FORMATS.join(\", \")}; got ${JSON.stringify(value)}`,\n );\n }\n return value as ConnectorsOutputFormat;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Parsed option types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ParsedConnectorsListOptions {\n format: ConnectorsOutputFormat;\n}\n\nexport interface ParsedConnectorsStatusOptions {\n /** `status` defaults to JSON for scripting; `--format` can override. */\n format: ConnectorsOutputFormat;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Option parsers (pure, unit-testable)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Validate the option bag for `remnic connectors list`.\n */\nexport function parseConnectorsListOptions(\n options: Record<string, unknown>,\n): ParsedConnectorsListOptions {\n return {\n format: parseConnectorsFormat(options.format, \"text\"),\n };\n}\n\n/**\n * Validate the option bag for `remnic connectors status`.\n * Defaults to `json` (machine-readable) unless `--format` overrides.\n */\nexport function parseConnectorsStatusOptions(\n options: Record<string, unknown>,\n): ParsedConnectorsStatusOptions {\n return {\n format: parseConnectorsFormat(options.format, \"json\"),\n };\n}\n\n/**\n * Validate the positional `<name>` argument for `remnic connectors run`.\n */\nexport function parseConnectorsRunName(rawName: unknown): string {\n if (typeof rawName !== \"string\" || rawName.trim().length === 0) {\n throw new Error(\n \"connectors run: <name> is required and must be a non-empty connector id\",\n );\n }\n return rawName.trim();\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatters: shared helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Human-readable summary of `ConnectorSyncStatus`.\n *\n * Does NOT fold in the enabled/disabled state — the text and markdown\n * renderers already display that separately. Mixing them produced\n * \"state: disabled, disabled\" when `enabled=false` and `status=\"never\"`.\n */\nfunction statusLabel(status: ConnectorSyncStatus): string {\n switch (status) {\n case \"never\":\n return \"never synced\";\n case \"success\":\n return \"ok\";\n case \"error\":\n return \"error\";\n default:\n return status;\n }\n}\n\n/**\n * Format a UTC ISO timestamp for display. If the value is `null` / `undefined`\n * returns the given fallback string.\n */\nfunction fmtTimestamp(value: string | null | undefined, fallback = \"—\"): string {\n if (!value) return fallback;\n return value;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Renderers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Render connector rows for `remnic connectors list` / `remnic connectors status`.\n */\nexport function renderConnectorsList(\n rows: readonly ConnectorRow[],\n format: ConnectorsOutputFormat,\n): string {\n if (format === \"json\") {\n const out = rows.map((row) => ({\n id: row.id,\n displayName: row.displayName,\n enabled: row.enabled,\n lastSyncAt: row.state?.lastSyncAt ?? null,\n lastSyncStatus: row.state?.lastSyncStatus ?? \"never\",\n lastSyncError: row.state?.lastSyncError ?? null,\n totalDocsImported: row.state?.totalDocsImported ?? 0,\n updatedAt: row.state?.updatedAt ?? null,\n }));\n return JSON.stringify(out, null, 2);\n }\n\n if (rows.length === 0) {\n if (format === \"markdown\") {\n return \"# Live connectors\\n\\n_No live connectors are configured._\\n\";\n }\n return \"No live connectors configured.\";\n }\n\n if (format === \"markdown\") {\n const lines: string[] = [\"# Live connectors\", \"\"];\n lines.push(\"| ID | Display name | Enabled | Last poll | Docs imported | Status |\");\n lines.push(\"| --- | --- | --- | --- | --- | --- |\");\n for (const row of rows) {\n const lastPoll = fmtTimestamp(row.state?.lastSyncAt);\n const docs = row.state?.totalDocsImported ?? 0;\n const status = statusLabel(row.state?.lastSyncStatus ?? \"never\");\n lines.push(\n `| \\`${row.id}\\` | ${row.displayName} | ${row.enabled ? \"yes\" : \"no\"} | ${lastPoll} | ${docs} | ${status} |`,\n );\n if (row.state?.lastSyncError) {\n lines.push(\n `| | | | | | _Error: ${escapePipes(row.state.lastSyncError)}_ |`,\n );\n }\n }\n return lines.join(\"\\n\") + \"\\n\";\n }\n\n // text\n const lines: string[] = [`Live connectors (${rows.length}):`];\n lines.push(\"\");\n for (const row of rows) {\n const enabledStr = row.enabled ? \"enabled\" : \"disabled\";\n const status = statusLabel(row.state?.lastSyncStatus ?? \"never\");\n const lastPoll = fmtTimestamp(row.state?.lastSyncAt, \"(never polled)\");\n const docs = row.state?.totalDocsImported ?? 0;\n lines.push(` ${row.id} (${row.displayName})`);\n lines.push(` state: ${enabledStr}, ${status}`);\n lines.push(` last_poll: ${lastPoll}`);\n lines.push(` docs_imported: ${docs}`);\n if (row.state?.lastSyncError) {\n lines.push(` last_error: ${row.state.lastSyncError}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Render the result of a manual `remnic connectors run <name>` invocation.\n */\nexport function renderConnectorsRunResult(\n connectorId: string,\n result: ConnectorRunResult,\n format: ConnectorsOutputFormat,\n): string {\n // A run is \"ok\" when neither a sync/ingest error nor a state-write error\n // is present. A partial success (ingest ok, cursor write failed) still\n // surfaces as a non-ok status so the operator knows to investigate.\n const ok = result.error === undefined && result.stateWriteError === undefined;\n\n if (format === \"json\") {\n return JSON.stringify(\n {\n connector: connectorId,\n docsImported: result.docsImported,\n error: result.error ?? null,\n stateWriteError: result.stateWriteError ?? null,\n ok,\n },\n null,\n 2,\n );\n }\n\n if (format === \"markdown\") {\n const lines: string[] = [`# connectors run: \\`${connectorId}\\``, \"\"];\n lines.push(`- **Status:** ${ok ? \"success\" : \"error\"}`);\n lines.push(`- **Docs imported:** ${result.docsImported}`);\n if (result.error !== undefined) {\n lines.push(`- **Error:** ${result.error}`);\n }\n if (result.stateWriteError !== undefined) {\n const label =\n result.error === undefined\n ? \"State-write error (cursor not advanced)\"\n : \"State-write error (error state not persisted)\";\n lines.push(`- **${label}:** ${result.stateWriteError}`);\n }\n return lines.join(\"\\n\") + \"\\n\";\n }\n\n // text\n const lines: string[] = [];\n if (ok) {\n lines.push(`connectors run: ${connectorId} — OK`);\n lines.push(` docs_imported: ${result.docsImported}`);\n } else {\n lines.push(`connectors run: ${connectorId} — FAILED`);\n lines.push(` docs_imported: ${result.docsImported}`);\n if (result.error !== undefined) {\n lines.push(` error: ${result.error}`);\n }\n if (result.stateWriteError !== undefined) {\n lines.push(\n ` state_write_error: ${result.stateWriteError}`,\n );\n if (result.error === undefined) {\n lines.push(\n result.docsImported > 0\n ? ` (docs were ingested; cursor was not advanced — next poll will re-fetch from prior position)`\n : ` (cursor was not advanced — next poll will retry from prior position)`,\n );\n } else {\n lines.push(\n ` (error state was not persisted — next poll will retry from prior position)`,\n );\n }\n }\n }\n return lines.join(\"\\n\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Poll orchestration helper\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Arguments for a single connector poll pass.\n *\n * All I/O is injectable so callers (cli.ts) can supply real implementations\n * and tests can supply lightweight stubs without booting an orchestrator.\n */\nexport interface RunConnectorPollOnceArgs {\n /** Connector identifier (used in error/success state writes). */\n connectorId: string;\n /** Prior persisted state, or `null` on the very first sync. */\n priorState: ConnectorState | null;\n /**\n * Perform a single incremental sync. Returns newly-fetched documents and\n * the cursor that should be persisted on success.\n */\n syncFn: (\n cursor: ConnectorCursor | null,\n ) => Promise<{ newDocs: ConnectorDocument[]; nextCursor: ConnectorCursor }>;\n /**\n * Ingest fetched documents into the memory layer. Called BEFORE the cursor\n * is advanced. If this throws the cursor is NOT advanced (CLAUDE.md gotcha\n * #25 — don't destroy old state before confirming new state succeeds).\n */\n ingestFn: (docs: ConnectorDocument[]) => Promise<void>;\n /**\n * Persist connector state (cursor + metadata). Called after `ingestFn`\n * succeeds (success path) or when `syncFn` / `ingestFn` throws (error path,\n * with old cursor retained).\n */\n writeCursorFn: (state: {\n cursor: ConnectorCursor | null;\n lastSyncStatus: ConnectorSyncStatus;\n lastSyncError?: string;\n totalDocsImported: number;\n }) => Promise<void>;\n}\n\n/**\n * Execute one `syncIncremental` pass for a live connector, enforcing the\n * persist-before-advance-cursor contract.\n *\n * Invariant (CLAUDE.md gotcha #25 + #43):\n * 1. `syncFn` fetches new docs and a next cursor.\n * 2. `ingestFn` persists the docs into the memory layer.\n * 3. Only if (2) succeeds does `writeCursorFn` advance the cursor.\n * 4. If (1) or (2) throws, `writeCursorFn` is still called but retains the\n * **prior** cursor so the next poll re-fetches the same window.\n *\n * Returns the `ConnectorRunResult` that `cli.ts` uses for output rendering.\n */\nexport async function runConnectorPollOnce(\n args: RunConnectorPollOnceArgs,\n): Promise<ConnectorRunResult> {\n const { connectorId, priorState, syncFn, ingestFn, writeCursorFn } = args;\n\n let syncResult: Awaited<ReturnType<typeof syncFn>> | undefined;\n let ingestError: string | undefined;\n\n // ── Phase 1: fetch ──────────────────────────────────────────────────────────\n try {\n syncResult = await syncFn(priorState?.cursor ?? null);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // syncFn failed — persist error state with the OLD cursor.\n let stateWriteError: string | undefined;\n try {\n await writeCursorFn({\n cursor: priorState?.cursor ?? null,\n lastSyncStatus: \"error\",\n lastSyncError: msg,\n totalDocsImported: priorState?.totalDocsImported ?? 0,\n });\n } catch (writeErr) {\n stateWriteError = writeErr instanceof Error ? writeErr.message : String(writeErr);\n console.error(\n `[remnic] connectors/${connectorId}: failed to persist error state after syncFn failure (${stateWriteError}); original error: ${msg}`,\n );\n }\n return {\n docsImported: 0,\n error: msg,\n ...(stateWriteError !== undefined ? { stateWriteError } : {}),\n };\n }\n\n // ── Phase 2: ingest ─────────────────────────────────────────────────────────\n // CRITICAL: ingest docs BEFORE advancing the cursor (CLAUDE.md gotcha #25).\n // If ingestFn throws, write the error state with the OLD cursor so the\n // next poll re-fetches the same document window.\n if (syncResult.newDocs.length > 0) {\n try {\n await ingestFn(syncResult.newDocs);\n } catch (err) {\n ingestError = err instanceof Error ? err.message : String(err);\n }\n }\n\n if (ingestError !== undefined) {\n // ingestFn failed — persist error state with the OLD cursor.\n let stateWriteError: string | undefined;\n try {\n await writeCursorFn({\n cursor: priorState?.cursor ?? null,\n lastSyncStatus: \"error\",\n lastSyncError: ingestError,\n totalDocsImported: priorState?.totalDocsImported ?? 0,\n });\n } catch (writeErr) {\n stateWriteError = writeErr instanceof Error ? writeErr.message : String(writeErr);\n // Intentionally not re-throwing: the original ingest error is the\n // actionable failure for the operator. The state-write failure is\n // secondary and should not replace it in the rendered output.\n // (CLAUDE.md gotcha #13; Codex P2 thread PRRT_kwDORJXyws59sk8K,\n // Cursor thread PRRT_kwDORJXyws59slAG)\n console.error(\n `[remnic] connectors/${connectorId}: failed to persist error state after ingestFn failure (${stateWriteError}); original error: ${ingestError}`,\n );\n }\n return {\n docsImported: 0,\n error: ingestError,\n ...(stateWriteError !== undefined ? { stateWriteError } : {}),\n };\n }\n\n // ── Phase 3: advance cursor ─────────────────────────────────────────────────\n // Ingest succeeded — advance the cursor. If the cursor write fails, the\n // docs ARE already in the memory layer so we must report the actual\n // docsImported count. Surface the state-write failure as a separate\n // `stateWriteError` field so the operator can diagnose it without\n // confusing it with a sync/ingest failure (Codex P1 thread\n // PRRT_kwDORJXyws59sm76, Cursor thread PRRT_kwDORJXyws59sm_N).\n const docsImported = syncResult.newDocs.length;\n try {\n await writeCursorFn({\n cursor: syncResult.nextCursor,\n lastSyncStatus: \"success\",\n totalDocsImported: (priorState?.totalDocsImported ?? 0) + docsImported,\n });\n } catch (writeErr) {\n const writeMsg = writeErr instanceof Error ? writeErr.message : String(writeErr);\n // Docs are already ingested — preserve the count so the operator knows\n // data was persisted. The next poll will re-fetch from the prior cursor\n // position but that only causes duplicate-ingest, not data loss.\n return { docsImported, stateWriteError: writeMsg };\n }\n\n return { docsImported };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Escape characters that would break a Markdown table cell (backslash first,\n * then pipe). Same pattern as in `patterns-cli.ts`.\n */\nfunction escapePipes(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\|/g, \"\\\\|\");\n}\n"],"mappings":"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","names":["lines"]}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
withTimeoutSignal
|
|
3
|
+
} from "./chunk-CINZGPSJ.js";
|
|
4
|
+
import {
|
|
5
|
+
isAbortError
|
|
6
|
+
} from "./chunk-PVGDJXVK.js";
|
|
1
7
|
import {
|
|
2
8
|
log
|
|
3
9
|
} from "./chunk-2ODBA7MQ.js";
|
|
@@ -24,21 +30,23 @@ var EmbedHelper = class {
|
|
|
24
30
|
/**
|
|
25
31
|
* Embed a single text string. Returns null if no provider is available.
|
|
26
32
|
*/
|
|
27
|
-
async embed(text) {
|
|
33
|
+
async embed(text, options = {}) {
|
|
28
34
|
const provider = this.getProvider();
|
|
29
35
|
if (!provider) return null;
|
|
30
|
-
return this.callEmbed(text, provider);
|
|
36
|
+
return this.callEmbed(text, provider, options.signal);
|
|
31
37
|
}
|
|
32
38
|
/**
|
|
33
39
|
* Embed a batch of texts. Returns an array parallel to input; entries are null on failure.
|
|
34
40
|
*/
|
|
35
|
-
async embedBatch(texts, batchSize = 32) {
|
|
41
|
+
async embedBatch(texts, batchSize = 32, options = {}) {
|
|
36
42
|
const provider = this.getProvider();
|
|
37
43
|
if (!provider) return texts.map(() => null);
|
|
38
44
|
const results = new Array(texts.length).fill(null);
|
|
39
45
|
for (let i = 0; i < texts.length; i += batchSize) {
|
|
40
46
|
const batch = texts.slice(i, i + batchSize);
|
|
41
|
-
const batchResults = await Promise.all(
|
|
47
|
+
const batchResults = await Promise.all(
|
|
48
|
+
batch.map((t) => this.callEmbed(t, provider, options.signal))
|
|
49
|
+
);
|
|
42
50
|
for (let j = 0; j < batchResults.length; j++) {
|
|
43
51
|
results[i + j] = batchResults[j];
|
|
44
52
|
}
|
|
@@ -88,7 +96,7 @@ var EmbedHelper = class {
|
|
|
88
96
|
}
|
|
89
97
|
return null;
|
|
90
98
|
}
|
|
91
|
-
async callEmbed(input, provider) {
|
|
99
|
+
async callEmbed(input, provider, signal) {
|
|
92
100
|
try {
|
|
93
101
|
const res = await fetch(provider.endpoint, {
|
|
94
102
|
method: "POST",
|
|
@@ -98,7 +106,7 @@ var EmbedHelper = class {
|
|
|
98
106
|
input: input.slice(0, 8e3),
|
|
99
107
|
encoding_format: "float"
|
|
100
108
|
}),
|
|
101
|
-
signal:
|
|
109
|
+
signal: withTimeoutSignal(signal, 3e4)
|
|
102
110
|
});
|
|
103
111
|
if (!res.ok) {
|
|
104
112
|
log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);
|
|
@@ -112,6 +120,7 @@ var EmbedHelper = class {
|
|
|
112
120
|
return Number.isFinite(v) ? v : 0;
|
|
113
121
|
});
|
|
114
122
|
} catch (err) {
|
|
123
|
+
if (isAbortError(err)) throw err;
|
|
115
124
|
log.debug(`EmbedHelper error: ${err}`);
|
|
116
125
|
return null;
|
|
117
126
|
}
|
|
@@ -121,4 +130,4 @@ var EmbedHelper = class {
|
|
|
121
130
|
export {
|
|
122
131
|
EmbedHelper
|
|
123
132
|
};
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
133
|
+
//# sourceMappingURL=chunk-ONPLNAPX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/search/embed-helper.ts"],"sourcesContent":["import { log } from \"../logger.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { isAbortError } from \"../abort-error.js\";\nimport { withTimeoutSignal } from \"./abort.js\";\n\ntype ProviderConfig = {\n type: \"openai\" | \"local\";\n model: string;\n endpoint: string;\n headers: Record<string, string>;\n};\n\nconst DEFAULT_OPENAI_MODEL = \"text-embedding-3-small\";\n\n/**\n * Standalone embedding helper for search backend adapters.\n *\n * NOTE: This intentionally duplicates provider resolution from EmbeddingFallback.\n * EmbeddingFallback is tightly integrated with the plugin lifecycle (telemetry,\n * rate-limit backoff, provider rotation). This class is a lightweight standalone\n * utility used by LanceDB/Orama backends which operate outside plugin context.\n * Merging them would break the port/adapter separation between search and plugin layers.\n */\nexport class EmbedHelper {\n private provider: ProviderConfig | null | undefined; // undefined = not yet resolved\n\n constructor(private readonly config: PluginConfig) {}\n\n /**\n * Whether an embedding provider is available.\n * Resolves the provider on first call.\n */\n isAvailable(): boolean {\n if (this.provider === undefined) {\n this.provider = this.resolveProvider();\n }\n return this.provider !== null;\n }\n\n /**\n * Embed a single text string. Returns null if no provider is available.\n */\n async embed(text: string, options: { signal?: AbortSignal } = {}): Promise<number[] | null> {\n const provider = this.getProvider();\n if (!provider) return null;\n return this.callEmbed(text, provider, options.signal);\n }\n\n /**\n * Embed a batch of texts. Returns an array parallel to input; entries are null on failure.\n */\n async embedBatch(\n texts: string[],\n batchSize = 32,\n options: { signal?: AbortSignal } = {},\n ): Promise<(number[] | null)[]> {\n const provider = this.getProvider();\n if (!provider) return texts.map(() => null);\n\n const results: (number[] | null)[] = new Array(texts.length).fill(null);\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const batchResults = await Promise.all(\n batch.map((t) => this.callEmbed(t, provider, options.signal)),\n );\n for (let j = 0; j < batchResults.length; j++) {\n results[i + j] = batchResults[j];\n }\n }\n return results;\n }\n\n private getProvider(): ProviderConfig | null {\n if (this.provider === undefined) {\n this.provider = this.resolveProvider();\n }\n return this.provider;\n }\n\n private resolveProvider(): ProviderConfig | null {\n if (!this.config.embeddingFallbackEnabled) return null;\n\n const preferred = this.config.embeddingFallbackProvider;\n const providers = preferred === \"auto\" ? [\"openai\", \"local\"] : [preferred];\n\n for (const p of providers) {\n if (p === \"openai\" && this.config.openaiApiKey) {\n const baseUrl = this.config.openaiBaseUrl ?? \"https://api.openai.com/v1\";\n return {\n type: \"openai\",\n model: DEFAULT_OPENAI_MODEL,\n endpoint: `${baseUrl.replace(/\\/$/, \"\")}/embeddings`,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.openaiApiKey}`,\n },\n };\n }\n\n if (p === \"local\" && this.config.localLlmEnabled && this.config.localLlmUrl) {\n const base = this.config.localLlmUrl.replace(/\\/$/, \"\");\n const endpoint = /\\/v1$/i.test(base) ? `${base}/embeddings` : `${base}/v1/embeddings`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(this.config.localLlmHeaders ?? {}),\n };\n if (this.config.localLlmApiKey && this.config.localLlmAuthHeader !== false) {\n headers.Authorization = `Bearer ${this.config.localLlmApiKey}`;\n }\n return {\n type: \"local\",\n model:\n this.config.embeddingFallbackModel ||\n this.config.localLlmModel ||\n DEFAULT_OPENAI_MODEL,\n endpoint,\n headers,\n };\n }\n }\n\n return null;\n }\n\n private async callEmbed(\n input: string,\n provider: ProviderConfig,\n signal?: AbortSignal,\n ): Promise<number[] | null> {\n try {\n const res = await fetch(provider.endpoint, {\n method: \"POST\",\n headers: provider.headers,\n body: JSON.stringify({\n model: provider.model,\n input: input.slice(0, 8000),\n encoding_format: \"float\",\n }),\n signal: withTimeoutSignal(signal, 30_000),\n });\n if (!res.ok) {\n log.debug(`EmbedHelper request failed: ${provider.type} ${res.status}`);\n return null;\n }\n const payload = (await res.json()) as any;\n const vector = payload?.data?.[0]?.embedding;\n if (!Array.isArray(vector)) return null;\n return vector.map((n: unknown) => { const v = Number(n); return Number.isFinite(v) ? v : 0; });\n } catch (err) {\n if (isAbortError(err)) throw err;\n log.debug(`EmbedHelper error: ${err}`);\n return null;\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -42,21 +42,25 @@ function resolveDefaultFaissScriptPath(fromModuleUrl = import.meta.url) {
|
|
|
42
42
|
var FaissConversationIndexAdapter = class {
|
|
43
43
|
constructor(config) {
|
|
44
44
|
this.config = config;
|
|
45
|
+
if (!Number.isInteger(config.maxBatchSize) || config.maxBatchSize <= 0) {
|
|
46
|
+
throw new RangeError("FAISS maxBatchSize must be a positive integer");
|
|
47
|
+
}
|
|
45
48
|
this.pythonBin = config.pythonBin && config.pythonBin.trim().length > 0 ? config.pythonBin.trim() : "python3";
|
|
46
49
|
this.scriptPath = config.scriptPath && config.scriptPath.trim().length > 0 ? config.scriptPath.trim() : resolveDefaultFaissScriptPath();
|
|
47
50
|
this.indexPath = path.isAbsolute(config.indexDir) ? config.indexDir : path.join(config.memoryDir, config.indexDir);
|
|
51
|
+
this.maxBatchSize = config.maxBatchSize;
|
|
48
52
|
this.spawnFn = config.spawnFn ?? launchProcess;
|
|
49
53
|
}
|
|
50
54
|
config;
|
|
51
55
|
pythonBin;
|
|
52
56
|
scriptPath;
|
|
53
57
|
indexPath;
|
|
58
|
+
maxBatchSize;
|
|
54
59
|
spawnFn;
|
|
55
|
-
async upsertChunks(chunks) {
|
|
56
|
-
if (this.config.maxBatchSize <= 0) return 0;
|
|
60
|
+
async upsertChunks(chunks, options = {}) {
|
|
57
61
|
let totalUpserted = 0;
|
|
58
|
-
for (let offset = 0; offset < chunks.length; offset += this.
|
|
59
|
-
const batch = chunks.slice(offset, offset + this.
|
|
62
|
+
for (let offset = 0; offset < chunks.length; offset += this.maxBatchSize) {
|
|
63
|
+
const batch = chunks.slice(offset, offset + this.maxBatchSize);
|
|
60
64
|
if (batch.length === 0) continue;
|
|
61
65
|
const payload = {
|
|
62
66
|
modelId: this.config.modelId,
|
|
@@ -67,7 +71,8 @@ var FaissConversationIndexAdapter = class {
|
|
|
67
71
|
text: chunk.text,
|
|
68
72
|
startTs: chunk.startTs,
|
|
69
73
|
endTs: chunk.endTs
|
|
70
|
-
}))
|
|
74
|
+
})),
|
|
75
|
+
...typeof options.retentionCutoffMs === "number" && Number.isFinite(options.retentionCutoffMs) ? { retentionCutoffMs: options.retentionCutoffMs } : {}
|
|
71
76
|
};
|
|
72
77
|
const result = await this.runCommand("upsert", payload, this.config.upsertTimeoutMs);
|
|
73
78
|
const upserted = result.upserted;
|
|
@@ -138,12 +143,10 @@ var FaissConversationIndexAdapter = class {
|
|
|
138
143
|
};
|
|
139
144
|
}
|
|
140
145
|
async rebuildChunks(chunks) {
|
|
141
|
-
if (this.config.maxBatchSize <= 0) return 0;
|
|
142
|
-
const firstBatch = chunks.slice(0, this.config.maxBatchSize);
|
|
143
146
|
const rebuildPayload = {
|
|
144
147
|
modelId: this.config.modelId,
|
|
145
148
|
indexPath: this.indexPath,
|
|
146
|
-
chunks:
|
|
149
|
+
chunks: chunks.map((chunk) => ({
|
|
147
150
|
id: chunk.id,
|
|
148
151
|
sessionKey: chunk.sessionKey,
|
|
149
152
|
text: chunk.text,
|
|
@@ -156,11 +159,14 @@ var FaissConversationIndexAdapter = class {
|
|
|
156
159
|
if (typeof rebuilt !== "number" || !Number.isFinite(rebuilt)) {
|
|
157
160
|
throw new FaissAdapterError("FAISS sidecar produced malformed rebuild response", "malformed_output");
|
|
158
161
|
}
|
|
159
|
-
const rebuildCount = Math.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
const rebuildCount = Math.floor(rebuilt);
|
|
163
|
+
if (rebuildCount !== chunks.length) {
|
|
164
|
+
throw new FaissAdapterError(
|
|
165
|
+
`FAISS sidecar rebuilt ${rebuildCount} chunk(s), expected ${chunks.length}`,
|
|
166
|
+
"malformed_output"
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return rebuildCount;
|
|
164
170
|
}
|
|
165
171
|
async runCommand(command, payload, timeoutMs) {
|
|
166
172
|
const args = [this.scriptPath, command];
|
|
@@ -269,4 +275,4 @@ export {
|
|
|
269
275
|
FaissConversationIndexAdapter,
|
|
270
276
|
failOpenFaissHealth
|
|
271
277
|
};
|
|
272
|
-
//# sourceMappingURL=chunk-
|
|
278
|
+
//# sourceMappingURL=chunk-ORFGK3XI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/conversation-index/faiss-adapter.ts"],"sourcesContent":["import { fileURLToPath } from \"node:url\";\nimport path from \"node:path\";\nimport { log } from \"../logger.js\";\nimport type { ConversationChunk } from \"./chunker.js\";\nimport type { ConversationSearchResult } from \"./search.js\";\nimport { launchProcess } from \"../runtime/child-process.js\";\n\nexport interface FaissAdapterConfig {\n memoryDir: string;\n scriptPath?: string;\n pythonBin?: string;\n modelId: string;\n indexDir: string;\n upsertTimeoutMs: number;\n searchTimeoutMs: number;\n healthTimeoutMs: number;\n maxBatchSize: number;\n maxSearchK: number;\n spawnFn?: typeof launchProcess;\n}\n\nexport interface FaissHealthResult {\n ok: boolean;\n status: \"ok\" | \"degraded\" | \"error\";\n indexPath: string;\n message?: string;\n manifest?: {\n version: number;\n modelId: string;\n normalizedModelId: string;\n dimension: number;\n chunkCount: number;\n updatedAt: string;\n lastSuccessfulRebuildAt: string;\n };\n}\n\nexport interface FaissInspectResult extends FaissHealthResult {\n metadata: {\n chunkCount: number;\n hasIndex: boolean;\n hasMetadata: boolean;\n hasManifest: boolean;\n };\n}\n\ntype SidecarCommand = \"upsert\" | \"search\" | \"health\" | \"inspect\" | \"rebuild\";\n\nexport class FaissAdapterError extends Error {\n constructor(message: string, readonly code: \"timeout\" | \"non_zero_exit\" | \"malformed_output\") {\n super(message);\n this.name = \"FaissAdapterError\";\n }\n}\n\ninterface SidecarResult {\n ok?: boolean;\n error?: string;\n upserted?: number;\n rebuilt?: number;\n status?: \"ok\" | \"degraded\" | \"error\";\n manifest?: {\n version?: number;\n modelId?: string;\n normalizedModelId?: string;\n dimension?: number;\n chunkCount?: number;\n updatedAt?: string;\n lastSuccessfulRebuildAt?: string;\n };\n results?: Array<{\n path: string;\n snippet: string;\n score: number;\n }>;\n metadata?: {\n chunkCount?: number;\n hasIndex?: boolean;\n hasMetadata?: boolean;\n hasManifest?: boolean;\n };\n}\n\nfunction parseSidecarManifest(result: SidecarResult): FaissHealthResult[\"manifest\"] | undefined {\n const manifest = result.manifest;\n if (\n !manifest ||\n typeof manifest.version !== \"number\" ||\n typeof manifest.modelId !== \"string\" ||\n typeof manifest.normalizedModelId !== \"string\" ||\n typeof manifest.dimension !== \"number\" ||\n typeof manifest.chunkCount !== \"number\" ||\n typeof manifest.updatedAt !== \"string\" ||\n typeof manifest.lastSuccessfulRebuildAt !== \"string\"\n ) {\n return undefined;\n }\n\n return {\n version: manifest.version,\n modelId: manifest.modelId,\n normalizedModelId: manifest.normalizedModelId,\n dimension: manifest.dimension,\n chunkCount: manifest.chunkCount,\n updatedAt: manifest.updatedAt,\n lastSuccessfulRebuildAt: manifest.lastSuccessfulRebuildAt,\n };\n}\n\nexport function resolveDefaultFaissScriptPath(fromModuleUrl: string = import.meta.url): string {\n const currentFile = fileURLToPath(fromModuleUrl);\n const moduleDir = path.dirname(currentFile);\n\n // Source runtime: src/conversation-index/faiss-adapter.ts\n if (moduleDir.endsWith(`${path.sep}conversation-index`)) {\n return path.resolve(moduleDir, \"..\", \"..\", \"scripts\", \"faiss_index.py\");\n }\n\n // Bundled runtime: dist/index.js (or neighboring dist chunks)\n return path.resolve(moduleDir, \"..\", \"scripts\", \"faiss_index.py\");\n}\n\nexport class FaissConversationIndexAdapter {\n private readonly pythonBin: string;\n private readonly scriptPath: string;\n private readonly indexPath: string;\n private readonly maxBatchSize: number;\n private readonly spawnFn: typeof launchProcess;\n\n constructor(private readonly config: FaissAdapterConfig) {\n if (!Number.isInteger(config.maxBatchSize) || config.maxBatchSize <= 0) {\n throw new RangeError(\"FAISS maxBatchSize must be a positive integer\");\n }\n this.pythonBin = config.pythonBin && config.pythonBin.trim().length > 0 ? config.pythonBin.trim() : \"python3\";\n this.scriptPath = config.scriptPath && config.scriptPath.trim().length > 0\n ? config.scriptPath.trim()\n : resolveDefaultFaissScriptPath();\n this.indexPath = path.isAbsolute(config.indexDir)\n ? config.indexDir\n : path.join(config.memoryDir, config.indexDir);\n this.maxBatchSize = config.maxBatchSize;\n this.spawnFn = config.spawnFn ?? launchProcess;\n }\n\n async upsertChunks(\n chunks: ConversationChunk[],\n options: { retentionCutoffMs?: number } = {},\n ): Promise<number> {\n let totalUpserted = 0;\n for (let offset = 0; offset < chunks.length; offset += this.maxBatchSize) {\n const batch = chunks.slice(offset, offset + this.maxBatchSize);\n if (batch.length === 0) continue;\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n chunks: batch.map((chunk) => ({\n id: chunk.id,\n sessionKey: chunk.sessionKey,\n text: chunk.text,\n startTs: chunk.startTs,\n endTs: chunk.endTs,\n })),\n ...(typeof options.retentionCutoffMs === \"number\" &&\n Number.isFinite(options.retentionCutoffMs)\n ? { retentionCutoffMs: options.retentionCutoffMs }\n : {}),\n };\n const result = await this.runCommand(\"upsert\", payload, this.config.upsertTimeoutMs);\n const upserted = result.upserted;\n if (typeof upserted !== \"number\" || !Number.isFinite(upserted)) {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed upsert response\", \"malformed_output\");\n }\n totalUpserted += Math.max(0, Math.floor(upserted));\n }\n return totalUpserted;\n }\n\n async searchChunks(query: string, topK: number): Promise<ConversationSearchResult[]> {\n const requestedTopK = Number.isFinite(topK) ? Math.floor(topK) : 0;\n const boundedTopK = this.config.maxSearchK > 0\n ? Math.max(0, Math.min(requestedTopK, this.config.maxSearchK))\n : 0;\n if (boundedTopK <= 0 || query.trim().length === 0) return [];\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n query,\n topK: boundedTopK,\n };\n const result = await this.runCommand(\"search\", payload, this.config.searchTimeoutMs);\n if (!Array.isArray(result.results)) {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed search response\", \"malformed_output\");\n }\n const rows = result.results;\n return rows\n .filter((row) =>\n row &&\n typeof row.path === \"string\" &&\n typeof row.snippet === \"string\" &&\n typeof row.score === \"number\"\n )\n .map((row) => ({ path: row.path, snippet: row.snippet, score: row.score }));\n }\n\n async health(): Promise<FaissHealthResult> {\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n };\n const result = await this.runCommand(\"health\", payload, this.config.healthTimeoutMs);\n if (result.status !== \"ok\" && result.status !== \"degraded\" && result.status !== \"error\") {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed health response\", \"malformed_output\");\n }\n return {\n ok: result.ok === true,\n status: result.status,\n indexPath: this.indexPath,\n message: typeof result.error === \"string\" && result.error.length > 0 ? result.error : undefined,\n manifest: parseSidecarManifest(result),\n };\n }\n\n async inspect(): Promise<FaissInspectResult> {\n const payload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n };\n const result = await this.runCommand(\"inspect\", payload, this.config.healthTimeoutMs);\n if (result.status !== \"ok\" && result.status !== \"degraded\" && result.status !== \"error\") {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed inspect response\", \"malformed_output\");\n }\n return {\n ok: result.ok === true,\n status: result.status,\n indexPath: this.indexPath,\n message: typeof result.error === \"string\" && result.error.length > 0 ? result.error : undefined,\n manifest: parseSidecarManifest(result),\n metadata: {\n chunkCount:\n result.metadata && typeof result.metadata.chunkCount === \"number\"\n ? result.metadata.chunkCount\n : 0,\n hasIndex: result.metadata?.hasIndex === true,\n hasMetadata: result.metadata?.hasMetadata === true,\n hasManifest: result.metadata?.hasManifest === true,\n },\n };\n }\n\n async rebuildChunks(chunks: ConversationChunk[]): Promise<number> {\n const rebuildPayload = {\n modelId: this.config.modelId,\n indexPath: this.indexPath,\n chunks: chunks.map((chunk) => ({\n id: chunk.id,\n sessionKey: chunk.sessionKey,\n text: chunk.text,\n startTs: chunk.startTs,\n endTs: chunk.endTs,\n })),\n };\n const result = await this.runCommand(\"rebuild\", rebuildPayload, this.config.upsertTimeoutMs);\n const rebuilt = result.rebuilt;\n if (typeof rebuilt !== \"number\" || !Number.isFinite(rebuilt)) {\n throw new FaissAdapterError(\"FAISS sidecar produced malformed rebuild response\", \"malformed_output\");\n }\n const rebuildCount = Math.floor(rebuilt);\n if (rebuildCount !== chunks.length) {\n throw new FaissAdapterError(\n `FAISS sidecar rebuilt ${rebuildCount} chunk(s), expected ${chunks.length}`,\n \"malformed_output\",\n );\n }\n return rebuildCount;\n }\n\n private async runCommand(command: SidecarCommand, payload: object, timeoutMs: number): Promise<SidecarResult> {\n const args = [this.scriptPath, command];\n const child = this.spawnFn(this.pythonBin, args, {\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n if (!child.stdin || !child.stdout || !child.stderr) {\n throw new FaissAdapterError(\n `FAISS sidecar missing stdio pipes (${command})`,\n \"non_zero_exit\",\n );\n }\n const stdinPipe = child.stdin;\n const stdoutPipe = child.stdout;\n const stderrPipe = child.stderr;\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n let timedOut = false;\n\n const timer = timeoutMs > 0\n ? setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGKILL\");\n }, timeoutMs)\n : undefined;\n\n stdoutPipe.on(\"data\", (chunk: Buffer | string) => {\n stdoutChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n stderrPipe.on(\"data\", (chunk: Buffer | string) => {\n stderrChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n\n let code: number | null;\n try {\n stdinPipe.write(JSON.stringify(payload));\n stdinPipe.end();\n\n code = await new Promise<number | null>((resolve, reject) => {\n const rejectAsProcessError = (err: unknown) => {\n const msg = err instanceof Error ? err.message : String(err);\n reject(new FaissAdapterError(`FAISS sidecar stream/process error (${command}): ${msg}`, \"non_zero_exit\"));\n };\n child.once(\"error\", rejectAsProcessError);\n stdinPipe.once(\"error\", rejectAsProcessError);\n child.once(\"close\", (exitCode) => resolve(exitCode));\n });\n } catch (err) {\n if (err instanceof FaissAdapterError) throw err;\n const msg = err instanceof Error ? err.message : String(err);\n throw new FaissAdapterError(`FAISS sidecar stream/process error (${command}): ${msg}`, \"non_zero_exit\");\n } finally {\n if (timer) clearTimeout(timer);\n }\n\n const stdout = Buffer.concat(stdoutChunks).toString(\"utf-8\").trim();\n const stderr = Buffer.concat(stderrChunks).toString(\"utf-8\").trim();\n\n if (timedOut) {\n throw new FaissAdapterError(\n `FAISS sidecar command timed out (${command}, ${timeoutMs}ms)`,\n \"timeout\",\n );\n }\n if (code !== 0) {\n throw new FaissAdapterError(\n `FAISS sidecar exited non-zero (${command}, code=${code ?? \"null\"})${stderr ? `: ${stderr}` : \"\"}`,\n \"non_zero_exit\",\n );\n }\n if (stdout.length === 0) {\n throw new FaissAdapterError(\n `FAISS sidecar produced empty output (${command})`,\n \"malformed_output\",\n );\n }\n\n let parsed: SidecarResult;\n try {\n parsed = JSON.parse(stdout) as SidecarResult;\n } catch {\n throw new FaissAdapterError(\n `FAISS sidecar produced malformed JSON (${command})`,\n \"malformed_output\",\n );\n }\n\n if (parsed.ok === false) {\n const message = typeof parsed.error === \"string\" && parsed.error.length > 0\n ? parsed.error\n : `FAISS sidecar command failed (${command})`;\n throw new FaissAdapterError(message, \"non_zero_exit\");\n }\n if (parsed.ok !== true) {\n throw new FaissAdapterError(\n `FAISS sidecar produced malformed success envelope (${command})`,\n \"malformed_output\",\n );\n }\n\n return parsed;\n }\n}\n\nexport async function failOpenFaissHealth(\n adapter: FaissConversationIndexAdapter | undefined,\n): Promise<FaissHealthResult> {\n if (!adapter) {\n return { ok: false, status: \"error\", indexPath: \"\", message: \"adapter-unavailable\" };\n }\n try {\n return await adapter.health();\n } catch (err) {\n log.debug(`faiss adapter health failed (fail-open): ${err}`);\n return { ok: false, status: \"error\", indexPath: \"\", message: \"adapter-error\" };\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
looksLikeEngramJsonExport
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2DL3OFLD.js";
|
|
4
4
|
import {
|
|
5
5
|
looksLikeEngramMdExport
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-765K3SAT.js";
|
|
7
7
|
|
|
8
8
|
// src/transfer/autodetect.ts
|
|
9
9
|
import path from "path";
|
|
@@ -31,4 +31,4 @@ async function detectImportFormat(fromPath) {
|
|
|
31
31
|
export {
|
|
32
32
|
detectImportFormat
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
34
|
+
//# sourceMappingURL=chunk-OZKVVUJB.js.map
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
getCachedQmdSearch,
|
|
11
11
|
setCachedQmdSearch
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-CPPS65WS.js";
|
|
13
13
|
import {
|
|
14
14
|
mergeEnv
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-JUC24CTX.js";
|
|
16
16
|
import {
|
|
17
17
|
log
|
|
18
18
|
} from "./chunk-2ODBA7MQ.js";
|
|
@@ -1351,9 +1351,10 @@ var QmdClient = class _QmdClient {
|
|
|
1351
1351
|
return args;
|
|
1352
1352
|
}
|
|
1353
1353
|
async search(query, collection, maxResults, options, execution) {
|
|
1354
|
-
if (!this.isAvailable()) return [];
|
|
1355
1354
|
const trimmed = query.trim();
|
|
1356
1355
|
if (!trimmed) return [];
|
|
1356
|
+
await this.maybeProbeDaemon();
|
|
1357
|
+
if (!this.isAvailable()) return [];
|
|
1357
1358
|
const col = collection ?? this.collection;
|
|
1358
1359
|
const n = maxResults ?? this.maxResults;
|
|
1359
1360
|
const searchOptions = this.resolveSearchOptions(options);
|
|
@@ -1364,7 +1365,6 @@ var QmdClient = class _QmdClient {
|
|
|
1364
1365
|
log.debug(`QMD search cache hit (${cached.length} results)`);
|
|
1365
1366
|
return cached;
|
|
1366
1367
|
}
|
|
1367
|
-
await this.maybeProbeDaemon();
|
|
1368
1368
|
if (this.daemonAvailable) {
|
|
1369
1369
|
let results;
|
|
1370
1370
|
try {
|
|
@@ -1394,12 +1394,12 @@ var QmdClient = class _QmdClient {
|
|
|
1394
1394
|
return subprocessResults;
|
|
1395
1395
|
}
|
|
1396
1396
|
async searchGlobal(query, maxResults, execution) {
|
|
1397
|
-
if (!this.isAvailable()) return [];
|
|
1398
1397
|
const trimmed = query.trim();
|
|
1399
1398
|
if (!trimmed) return [];
|
|
1399
|
+
await this.maybeProbeDaemon();
|
|
1400
|
+
if (!this.isAvailable()) return [];
|
|
1400
1401
|
const n = maxResults ?? 6;
|
|
1401
1402
|
const searchOptions = this.resolveSearchOptions();
|
|
1402
|
-
await this.maybeProbeDaemon();
|
|
1403
1403
|
if (this.daemonAvailable) {
|
|
1404
1404
|
let results;
|
|
1405
1405
|
try {
|
|
@@ -1429,12 +1429,12 @@ var QmdClient = class _QmdClient {
|
|
|
1429
1429
|
* BM25 keyword search (fast, ~0.3s). Uses `qmd search`.
|
|
1430
1430
|
*/
|
|
1431
1431
|
async bm25Search(query, collection, maxResults, execution) {
|
|
1432
|
-
if (!this.isAvailable()) return [];
|
|
1433
1432
|
const trimmed = query.trim();
|
|
1434
1433
|
if (!trimmed) return [];
|
|
1434
|
+
await this.maybeProbeDaemon();
|
|
1435
|
+
if (!this.isAvailable()) return [];
|
|
1435
1436
|
const col = collection ?? this.collection;
|
|
1436
1437
|
const n = maxResults ?? this.maxResults;
|
|
1437
|
-
await this.maybeProbeDaemon();
|
|
1438
1438
|
if (this.daemonAvailable && this.daemonSession) {
|
|
1439
1439
|
let results;
|
|
1440
1440
|
try {
|
|
@@ -1464,12 +1464,12 @@ var QmdClient = class _QmdClient {
|
|
|
1464
1464
|
* Vector similarity search (~3-4s). Uses `qmd vsearch`.
|
|
1465
1465
|
*/
|
|
1466
1466
|
async vectorSearch(query, collection, maxResults, execution) {
|
|
1467
|
-
if (!this.isAvailable()) return [];
|
|
1468
1467
|
const trimmed = query.trim();
|
|
1469
1468
|
if (!trimmed) return [];
|
|
1469
|
+
await this.maybeProbeDaemon();
|
|
1470
|
+
if (!this.isAvailable()) return [];
|
|
1470
1471
|
const col = collection ?? this.collection;
|
|
1471
1472
|
const n = maxResults ?? this.maxResults;
|
|
1472
|
-
await this.maybeProbeDaemon();
|
|
1473
1473
|
if (this.daemonAvailable && this.daemonSession) {
|
|
1474
1474
|
let results;
|
|
1475
1475
|
try {
|
|
@@ -1944,11 +1944,11 @@ var QmdClient = class _QmdClient {
|
|
|
1944
1944
|
log.warn(`QMD embed failed for collection ${name}: ${msg}`);
|
|
1945
1945
|
}
|
|
1946
1946
|
}
|
|
1947
|
-
async ensureCollection(memoryDir) {
|
|
1947
|
+
async ensureCollection(memoryDir, execution) {
|
|
1948
1948
|
if (this.available === false && !this.daemonAvailable) return "unknown";
|
|
1949
1949
|
if (this.available === false) return "skipped";
|
|
1950
1950
|
try {
|
|
1951
|
-
const { stdout } = await this.runQmdCommand(["collection", "list"], QMD_TIMEOUT_MS);
|
|
1951
|
+
const { stdout } = await this.runQmdCommand(["collection", "list"], QMD_TIMEOUT_MS, execution?.signal);
|
|
1952
1952
|
const collectionRegex = new RegExp(
|
|
1953
1953
|
`^${this.collection}\\s+\\(qmd://`,
|
|
1954
1954
|
"m"
|
|
@@ -1982,4 +1982,4 @@ export {
|
|
|
1982
1982
|
getQmdCommandName,
|
|
1983
1983
|
QmdClient
|
|
1984
1984
|
};
|
|
1985
|
-
//# sourceMappingURL=chunk-
|
|
1985
|
+
//# sourceMappingURL=chunk-PCI747N2.js.map
|