@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
|
@@ -168,6 +168,7 @@ function parseAnthropicMessageParts(input, _options = {}) {
|
|
|
168
168
|
function parseOpenClawMessageParts(input, options = {}) {
|
|
169
169
|
const explicit = normalizeExplicitParts(input);
|
|
170
170
|
if (explicit.length > 0) return explicit;
|
|
171
|
+
if (Array.isArray(input)) return parseOpenClawContentArray(input, options);
|
|
171
172
|
if (!input || typeof input !== "object") return [];
|
|
172
173
|
const obj = input;
|
|
173
174
|
const content = obj.content;
|
|
@@ -195,43 +196,44 @@ function parseOpenClawMessageParts(input, options = {}) {
|
|
|
195
196
|
function parsePiMessageParts(input, options = {}) {
|
|
196
197
|
const explicit = normalizeExplicitParts(input);
|
|
197
198
|
if (explicit.length > 0) return explicit;
|
|
198
|
-
|
|
199
|
-
if (input
|
|
200
|
-
|
|
201
|
-
const
|
|
199
|
+
const inputRecord = isRecord(input) ? input : null;
|
|
200
|
+
if (!inputRecord && !Array.isArray(input)) return renderedFallbackParts(options);
|
|
201
|
+
if (inputRecord?.role === "bashExecution") {
|
|
202
|
+
const command = asNonEmptyString(inputRecord.command);
|
|
203
|
+
const output = asNonEmptyString(inputRecord.output);
|
|
202
204
|
const rendered = [command ? `Ran ${command}` : null, output].filter(Boolean).join("\n");
|
|
203
205
|
return withOrdinals([
|
|
204
206
|
makePart("tool_result", {
|
|
205
207
|
role: "bashExecution",
|
|
206
208
|
command,
|
|
207
209
|
output,
|
|
208
|
-
exitCode:
|
|
210
|
+
exitCode: inputRecord.exitCode ?? inputRecord.exit_code
|
|
209
211
|
}, {
|
|
210
212
|
toolName: "bashExecution",
|
|
211
|
-
filePath: firstFilePathFromObject(
|
|
213
|
+
filePath: firstFilePathFromObject(inputRecord) ?? firstFilePath(rendered)
|
|
212
214
|
})
|
|
213
215
|
]);
|
|
214
216
|
}
|
|
215
|
-
const topLevelType = asNonEmptyString(
|
|
217
|
+
const topLevelType = inputRecord ? asNonEmptyString(inputRecord.type ?? inputRecord.kind ?? inputRecord.role) : null;
|
|
216
218
|
if (topLevelType === "toolResult" || topLevelType === "tool_result") {
|
|
217
|
-
const toolName2 = asNonEmptyString(
|
|
218
|
-
const output =
|
|
219
|
-
const rendered = renderUnknownContent(output ??
|
|
219
|
+
const toolName2 = asNonEmptyString(inputRecord?.name ?? inputRecord?.toolName ?? inputRecord?.tool_name);
|
|
220
|
+
const output = inputRecord?.output ?? inputRecord?.result ?? inputRecord?.content;
|
|
221
|
+
const rendered = renderUnknownContent(output ?? inputRecord);
|
|
220
222
|
return withOrdinals([
|
|
221
223
|
makePart("tool_result", {
|
|
222
|
-
id:
|
|
224
|
+
id: inputRecord?.id ?? inputRecord?.toolCallId ?? inputRecord?.tool_call_id,
|
|
223
225
|
name: toolName2,
|
|
224
226
|
output: sanitizePayload(output),
|
|
225
|
-
...typeof
|
|
226
|
-
...typeof
|
|
227
|
+
...typeof inputRecord?.isError === "boolean" ? { isError: inputRecord.isError } : {},
|
|
228
|
+
...typeof inputRecord?.is_error === "boolean" ? { is_error: inputRecord.is_error } : {}
|
|
227
229
|
}, {
|
|
228
230
|
toolName: toolName2,
|
|
229
|
-
filePath: firstFilePathFromObject(
|
|
231
|
+
filePath: firstFilePathFromObject(inputRecord) ?? firstFilePath(rendered)
|
|
230
232
|
})
|
|
231
233
|
]);
|
|
232
234
|
}
|
|
233
|
-
const content =
|
|
234
|
-
const blocks = Array.isArray(content) ? content.filter(isRecord) : [];
|
|
235
|
+
const content = inputRecord?.content;
|
|
236
|
+
const blocks = Array.isArray(input) ? input.filter(isRecord) : Array.isArray(content) ? content.filter(isRecord) : [];
|
|
235
237
|
const parts = [];
|
|
236
238
|
if (typeof content === "string") {
|
|
237
239
|
parts.push(makePart("text", { text: content }, { filePath: firstFilePath(content) }));
|
|
@@ -270,12 +272,12 @@ function parsePiMessageParts(input, options = {}) {
|
|
|
270
272
|
});
|
|
271
273
|
}
|
|
272
274
|
});
|
|
273
|
-
const toolName = asNonEmptyString(
|
|
275
|
+
const toolName = asNonEmptyString(inputRecord?.toolName ?? inputRecord?.tool_name ?? inputRecord?.name);
|
|
274
276
|
if (parts.length === 0 && toolName) {
|
|
275
277
|
parts.push(classifyToolPart(toolName, {
|
|
276
278
|
name: toolName,
|
|
277
|
-
arguments: sanitizePayload(
|
|
278
|
-
output: sanitizePayload(
|
|
279
|
+
arguments: sanitizePayload(inputRecord?.arguments ?? inputRecord?.args ?? inputRecord?.input ?? inputRecord?.params),
|
|
280
|
+
output: sanitizePayload(inputRecord?.output ?? inputRecord?.result)
|
|
279
281
|
}));
|
|
280
282
|
}
|
|
281
283
|
return withRenderedFallback(withOrdinals(parts), options);
|
|
@@ -303,18 +305,31 @@ function inferSourceFormat(input) {
|
|
|
303
305
|
}
|
|
304
306
|
if (Array.isArray(obj.output)) return "openai";
|
|
305
307
|
if (isOpenAiResponseItem(obj)) return "openai";
|
|
306
|
-
if (Array.isArray(obj.content)
|
|
307
|
-
|
|
308
|
+
if (Array.isArray(obj.content)) {
|
|
309
|
+
const hasOpenAiBlocks = obj.content.some(isOpenAiContentBlock);
|
|
310
|
+
const hasAnthropicBlocks = obj.content.some(isAnthropicContentBlock);
|
|
311
|
+
const hasPiToolBlocks = obj.content.some(isPiToolContentBlock);
|
|
312
|
+
if (hasOpenAiBlocks && (hasAnthropicBlocks || hasPiToolBlocks)) {
|
|
313
|
+
return "openclaw";
|
|
314
|
+
}
|
|
315
|
+
if (hasOpenAiBlocks) return "openai";
|
|
308
316
|
}
|
|
309
|
-
if (Array.isArray(obj.content) && obj.content.some(isOpenAiContentBlock)) return "openai";
|
|
310
317
|
if (isAnthropicMessageObject(obj)) return "anthropic";
|
|
311
318
|
if (isPiMessageObject(obj)) return "pi";
|
|
312
319
|
if (Array.isArray(obj.content)) return "anthropic";
|
|
313
320
|
}
|
|
314
321
|
if (Array.isArray(input)) {
|
|
315
|
-
|
|
322
|
+
const records = input.filter(isRecord);
|
|
323
|
+
const hasOpenAiBlocks = records.some(
|
|
316
324
|
(item) => isRecord(item) && (isOpenAiResponseItem(item) || isOpenAiContentBlock(item))
|
|
317
|
-
)
|
|
325
|
+
);
|
|
326
|
+
const hasAnthropicBlocks = records.some(isAnthropicContentBlock);
|
|
327
|
+
const hasPiToolBlocks = records.some(isPiToolContentBlock);
|
|
328
|
+
if (hasOpenAiBlocks && (hasAnthropicBlocks || hasPiToolBlocks)) return "openclaw";
|
|
329
|
+
if (hasOpenAiBlocks) return "openai";
|
|
330
|
+
if (hasAnthropicBlocks) return "anthropic";
|
|
331
|
+
if (hasPiToolBlocks) return "pi";
|
|
332
|
+
return "anthropic";
|
|
318
333
|
}
|
|
319
334
|
return void 0;
|
|
320
335
|
}
|
|
@@ -479,7 +494,7 @@ function renderUnknownContent(value) {
|
|
|
479
494
|
}
|
|
480
495
|
function firstFilePathFromObject(value) {
|
|
481
496
|
if (!isRecord(value)) return null;
|
|
482
|
-
const keys = ["file_path", "filePath", "path", "filename"
|
|
497
|
+
const keys = ["file_path", "filePath", "path", "filename"];
|
|
483
498
|
for (const key of keys) {
|
|
484
499
|
const candidate = asNonEmptyString(value[key]);
|
|
485
500
|
if (candidate) return candidate;
|
|
@@ -598,4 +613,4 @@ export {
|
|
|
598
613
|
parsePiMessageParts,
|
|
599
614
|
partsFromRenderedText
|
|
600
615
|
};
|
|
601
|
-
//# sourceMappingURL=chunk-
|
|
616
|
+
//# sourceMappingURL=chunk-XKIQZXUB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/message-parts/index.ts"],"sourcesContent":["export type LcmMessagePartKind =\n | \"text\"\n | \"tool_call\"\n | \"tool_result\"\n | \"patch\"\n | \"file_read\"\n | \"file_write\"\n | \"step_start\"\n | \"step_finish\"\n | \"snapshot\"\n | \"retry\";\n\nexport const LCM_MESSAGE_PART_KINDS: readonly LcmMessagePartKind[] = [\n \"text\",\n \"tool_call\",\n \"tool_result\",\n \"patch\",\n \"file_read\",\n \"file_write\",\n \"step_start\",\n \"step_finish\",\n \"snapshot\",\n \"retry\",\n] as const;\n\nexport type MessagePartSourceFormat =\n | \"openai\"\n | \"anthropic\"\n | \"openclaw\"\n | \"pi\"\n | \"lossless-claw\"\n | \"remnic\";\n\nexport interface LcmMessagePartInput {\n ordinal?: number | null;\n kind: LcmMessagePartKind;\n payload: Record<string, unknown>;\n toolName?: string | null;\n tool_name?: string | null;\n filePath?: string | null;\n file_path?: string | null;\n createdAt?: string | null;\n created_at?: string | null;\n}\n\nexport interface LcmMessagePartRow extends LcmMessagePartInput {\n id: number;\n messageId: number;\n ordinal: number;\n payloadJson: string;\n createdAt: string;\n}\n\nexport interface ParseMessagePartsOptions {\n sourceFormat?: MessagePartSourceFormat;\n renderedContent?: string;\n allowRenderedFallback?: boolean;\n}\n\nconst SECRET_KEY_RE = /(api[_-]?key|authorization|bearer|credential|password|secret|token)/i;\nconst MAX_PAYLOAD_STRING = 8_000;\nconst MAX_FILE_SCAN_CHARS = 20_000;\n\nexport function isLcmMessagePartKind(value: unknown): value is LcmMessagePartKind {\n return (\n typeof value === \"string\" &&\n (LCM_MESSAGE_PART_KINDS as readonly string[]).includes(value)\n );\n}\n\nexport function parseMessageParts(\n input: unknown,\n options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const explicit = normalizeExplicitParts(input);\n if (explicit.length > 0) return explicit;\n\n const format = options.sourceFormat ?? inferSourceFormat(input);\n switch (format) {\n case \"openai\":\n return withRenderedFallback(parseOpenAiMessageParts(input, options), options);\n case \"anthropic\":\n return withRenderedFallback(parseAnthropicMessageParts(input, options), options);\n case \"openclaw\":\n return withRenderedFallback(parseOpenClawMessageParts(input, options), options);\n case \"pi\":\n return withRenderedFallback(parsePiMessageParts(input, options), options);\n case \"lossless-claw\":\n case \"remnic\":\n return withRenderedFallback(normalizeExplicitParts(input), options);\n default:\n return renderedFallbackParts(options);\n }\n}\n\nexport function normalizeExplicitParts(input: unknown): LcmMessagePartInput[] {\n const rawParts = pickArray(input, \"parts\") ?? pickArray(input, \"message_parts\");\n if (!rawParts) return [];\n\n const parts: LcmMessagePartInput[] = [];\n rawParts.forEach((raw, index) => {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return;\n const obj = raw as Record<string, unknown>;\n const kind = normalizeKind(obj.kind ?? obj.type);\n if (!kind) return;\n\n const payload =\n obj.payload && typeof obj.payload === \"object\" && !Array.isArray(obj.payload)\n ? (obj.payload as Record<string, unknown>)\n : { value: sanitizePayload(obj) };\n const toolName = asNonEmptyString(obj.toolName ?? obj.tool_name ?? obj.name);\n const filePath = asNonEmptyString(obj.filePath ?? obj.file_path ?? obj.path);\n const ordinal =\n typeof obj.ordinal === \"number\" && Number.isInteger(obj.ordinal)\n ? Math.max(0, obj.ordinal)\n : index;\n\n parts.push({\n ordinal,\n kind,\n payload: sanitizePayload(payload) as Record<string, unknown>,\n toolName,\n filePath,\n createdAt: asNonEmptyString(obj.createdAt ?? obj.created_at),\n });\n });\n return parts;\n}\n\nexport function parseOpenAiMessageParts(\n input: unknown,\n _options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const items = gatherOpenAiItems(input);\n const parts: LcmMessagePartInput[] = [];\n for (const item of items) {\n const type = asNonEmptyString(item.type) ?? asNonEmptyString(item.kind);\n if (!type) continue;\n if (isOpenAiContentBlock(item)) {\n const text = asNonEmptyString(item.text ?? item.content);\n if (text) parts.push(makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }));\n continue;\n }\n if (type === \"message\") {\n for (const block of gatherContentBlocks(item.content)) {\n const text = asNonEmptyString(block.text ?? block.content);\n if (text) parts.push(makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }));\n }\n continue;\n }\n if (type === \"function_call\") {\n const toolName = asNonEmptyString(item.name ?? item.tool_name);\n const callId = asNonEmptyString(item.call_id ?? item.callId);\n const itemId = asNonEmptyString(item.id);\n const payload = {\n id: callId ?? itemId,\n ...(callId ? { call_id: callId } : {}),\n ...(itemId && itemId !== callId ? { response_item_id: itemId } : {}),\n name: toolName,\n arguments: parseMaybeJson(item.arguments),\n };\n parts.push(classifyToolPart(toolName, payload));\n continue;\n }\n if (type === \"function_call_output\") {\n const output = asNonEmptyString(item.output) ?? JSON.stringify(sanitizePayload(item.output ?? item));\n const callId = asNonEmptyString(item.call_id ?? item.callId);\n const itemId = asNonEmptyString(item.id);\n parts.push(makePart(\"tool_result\", {\n id: callId ?? itemId,\n ...(callId ? { call_id: callId } : {}),\n ...(itemId && itemId !== callId ? { response_item_id: itemId } : {}),\n output,\n }, {\n filePath: firstFilePath(output),\n }));\n continue;\n }\n if (type === \"reasoning\") {\n parts.push(makePart(\"step_start\", { type, summary: sanitizePayload(item.summary ?? item) }));\n continue;\n }\n if (type === \"retry\") {\n parts.push(makePart(\"retry\", { type, item: sanitizePayload(item) }));\n }\n }\n return withOrdinals(parts);\n}\n\nexport function parseAnthropicMessageParts(\n input: unknown,\n _options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const blocks = gatherContentBlocks(\n Array.isArray(input) ? input : input && typeof input === \"object\" ? (input as Record<string, unknown>).content : input,\n );\n const parts: LcmMessagePartInput[] = [];\n for (const block of blocks) {\n const type = asNonEmptyString(block.type ?? block.kind);\n if (type === \"text\") {\n const text = asNonEmptyString(block.text);\n if (text) parts.push(makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }));\n continue;\n }\n if (type === \"tool_use\") {\n const toolName = asNonEmptyString(block.name);\n parts.push(classifyToolPart(toolName, {\n id: block.id,\n name: toolName,\n input: sanitizePayload(block.input),\n }));\n continue;\n }\n if (type === \"tool_result\") {\n const content = block.content;\n const rendered = renderUnknownContent(content);\n parts.push(makePart(\"tool_result\", {\n id: block.tool_use_id,\n content: sanitizePayload(content),\n ...(typeof block.is_error === \"boolean\" ? { is_error: block.is_error } : {}),\n ...(typeof block.isError === \"boolean\" ? { isError: block.isError } : {}),\n }, {\n filePath: firstFilePath(rendered),\n }));\n continue;\n }\n if (type === \"thinking\") {\n parts.push(makePart(\"step_start\", {\n type,\n thinking: truncateString(asNonEmptyString(block.thinking) ?? \"\"),\n signature: asNonEmptyString(block.signature),\n }));\n continue;\n }\n if (type === \"redacted_thinking\") {\n parts.push(makePart(\"step_finish\", { type }));\n }\n }\n return withOrdinals(parts);\n}\n\nexport function parseOpenClawMessageParts(\n input: unknown,\n options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const explicit = normalizeExplicitParts(input);\n if (explicit.length > 0) return explicit;\n if (Array.isArray(input)) return parseOpenClawContentArray(input, options);\n if (!input || typeof input !== \"object\") return [];\n const obj = input as Record<string, unknown>;\n\n const content = obj.content;\n if (Array.isArray(content)) {\n const mixedParts = parseOpenClawContentArray(content, options);\n if (mixedParts.length > 0) return mixedParts;\n const hasAnthropicBlocks = content.some(isAnthropicContentBlock);\n if (hasAnthropicBlocks) return parseAnthropicMessageParts({ content }, options);\n const piParts = parsePiMessageParts(input, { ...options, allowRenderedFallback: false });\n if (piParts.length > 0) return piParts;\n }\n\n const toolName = asNonEmptyString(obj.toolName ?? obj.tool_name ?? obj.name);\n if (toolName) {\n return withOrdinals([\n classifyToolPart(toolName, {\n name: toolName,\n input: sanitizePayload(obj.input ?? obj.arguments ?? obj.params),\n output: sanitizePayload(obj.output ?? obj.result),\n }),\n ]);\n }\n\n const rendered = options.allowRenderedFallback === false\n ? null\n : options.renderedContent ?? asNonEmptyString(obj.content);\n return rendered ? withOrdinals(partsFromRenderedText(rendered)) : [];\n}\n\nexport function parsePiMessageParts(\n input: unknown,\n options: ParseMessagePartsOptions = {},\n): LcmMessagePartInput[] {\n const explicit = normalizeExplicitParts(input);\n if (explicit.length > 0) return explicit;\n const inputRecord = isRecord(input) ? input : null;\n if (!inputRecord && !Array.isArray(input)) return renderedFallbackParts(options);\n\n if (inputRecord?.role === \"bashExecution\") {\n const command = asNonEmptyString(inputRecord.command);\n const output = asNonEmptyString(inputRecord.output);\n const rendered = [command ? `Ran ${command}` : null, output].filter(Boolean).join(\"\\n\");\n return withOrdinals([\n makePart(\"tool_result\", {\n role: \"bashExecution\",\n command,\n output,\n exitCode: inputRecord.exitCode ?? inputRecord.exit_code,\n }, {\n toolName: \"bashExecution\",\n filePath: firstFilePathFromObject(inputRecord) ?? firstFilePath(rendered),\n }),\n ]);\n }\n\n const topLevelType = inputRecord\n ? asNonEmptyString(inputRecord.type ?? inputRecord.kind ?? inputRecord.role)\n : null;\n if (topLevelType === \"toolResult\" || topLevelType === \"tool_result\") {\n const toolName = asNonEmptyString(inputRecord?.name ?? inputRecord?.toolName ?? inputRecord?.tool_name);\n const output = inputRecord?.output ?? inputRecord?.result ?? inputRecord?.content;\n const rendered = renderUnknownContent(output ?? inputRecord);\n return withOrdinals([\n makePart(\"tool_result\", {\n id: inputRecord?.id ?? inputRecord?.toolCallId ?? inputRecord?.tool_call_id,\n name: toolName,\n output: sanitizePayload(output),\n ...(typeof inputRecord?.isError === \"boolean\" ? { isError: inputRecord.isError } : {}),\n ...(typeof inputRecord?.is_error === \"boolean\" ? { is_error: inputRecord.is_error } : {}),\n }, {\n toolName,\n filePath: firstFilePathFromObject(inputRecord) ?? firstFilePath(rendered),\n }),\n ]);\n }\n\n const content = inputRecord?.content;\n const blocks = Array.isArray(input)\n ? input.filter(isRecord)\n : Array.isArray(content)\n ? content.filter(isRecord)\n : [];\n const parts: LcmMessagePartInput[] = [];\n\n if (typeof content === \"string\") {\n parts.push(makePart(\"text\", { text: content }, { filePath: firstFilePath(content) }));\n }\n\n blocks.forEach((block, ordinal) => {\n const type = asNonEmptyString(block.type ?? block.kind);\n if (type === \"text\") {\n const text = asNonEmptyString(block.text ?? block.content);\n if (text) parts.push({ ...makePart(\"text\", { type, text }, { filePath: firstFilePath(text) }), ordinal });\n return;\n }\n if (type === \"toolCall\" || type === \"tool_call\") {\n const toolName = asNonEmptyString(block.name ?? block.toolName ?? block.tool_name);\n const payload = {\n id: block.id,\n name: toolName,\n arguments: sanitizePayload(block.arguments ?? block.args ?? block.input ?? block.params),\n };\n parts.push({ ...classifyToolPart(toolName, payload), ordinal });\n return;\n }\n if (type === \"toolResult\" || type === \"tool_result\") {\n const rendered = renderUnknownContent(block.output ?? block.result ?? block.content ?? block);\n parts.push({\n ...makePart(\"tool_result\", {\n id: block.id ?? block.toolCallId ?? block.tool_call_id,\n name: asNonEmptyString(block.name ?? block.toolName ?? block.tool_name),\n output: sanitizePayload(block.output ?? block.result ?? block.content),\n ...(typeof block.isError === \"boolean\" ? { isError: block.isError } : {}),\n ...(typeof block.is_error === \"boolean\" ? { is_error: block.is_error } : {}),\n }, {\n toolName: asNonEmptyString(block.name ?? block.toolName ?? block.tool_name),\n filePath: firstFilePathFromObject(block) ?? firstFilePath(rendered),\n }),\n ordinal,\n });\n }\n });\n\n const toolName = asNonEmptyString(inputRecord?.toolName ?? inputRecord?.tool_name ?? inputRecord?.name);\n if (parts.length === 0 && toolName) {\n parts.push(classifyToolPart(toolName, {\n name: toolName,\n arguments: sanitizePayload(inputRecord?.arguments ?? inputRecord?.args ?? inputRecord?.input ?? inputRecord?.params),\n output: sanitizePayload(inputRecord?.output ?? inputRecord?.result),\n }));\n }\n\n return withRenderedFallback(withOrdinals(parts), options);\n}\n\nexport function partsFromRenderedText(text: string): LcmMessagePartInput[] {\n if (text.includes(\"*** Begin Patch\")) {\n const paths = extractFilePaths(text);\n const patchPaths = extractPatchPaths(text);\n return withOrdinals((patchPaths.length > 0 ? patchPaths : paths).map((filePath) =>\n makePart(\"patch\", { text: truncateString(text) }, { filePath })\n ));\n }\n const paths = extractFilePaths(text);\n if (paths.length === 0) return [];\n return withOrdinals(paths.map((filePath) =>\n makePart(\"file_read\", { text: truncateString(text) }, { filePath })\n ));\n}\n\nfunction inferSourceFormat(input: unknown): MessagePartSourceFormat | undefined {\n if (input && typeof input === \"object\") {\n const obj = input as Record<string, unknown>;\n const explicit = asNonEmptyString(obj.sourceFormat ?? obj.source_format);\n if (explicit === \"openai\" || explicit === \"anthropic\" || explicit === \"openclaw\" || explicit === \"pi\" || explicit === \"lossless-claw\" || explicit === \"remnic\") {\n return explicit;\n }\n if (Array.isArray(obj.output)) return \"openai\";\n if (isOpenAiResponseItem(obj)) return \"openai\";\n if (Array.isArray(obj.content)) {\n const hasOpenAiBlocks = obj.content.some(isOpenAiContentBlock);\n const hasAnthropicBlocks = obj.content.some(isAnthropicContentBlock);\n const hasPiToolBlocks = obj.content.some(isPiToolContentBlock);\n if (hasOpenAiBlocks && (hasAnthropicBlocks || hasPiToolBlocks)) {\n return \"openclaw\";\n }\n if (hasOpenAiBlocks) return \"openai\";\n }\n if (isAnthropicMessageObject(obj)) return \"anthropic\";\n if (isPiMessageObject(obj)) return \"pi\";\n if (Array.isArray(obj.content)) return \"anthropic\";\n }\n if (Array.isArray(input)) {\n const records = input.filter(isRecord);\n const hasOpenAiBlocks = records.some((item) =>\n isRecord(item) && (isOpenAiResponseItem(item) || isOpenAiContentBlock(item))\n );\n const hasAnthropicBlocks = records.some(isAnthropicContentBlock);\n const hasPiToolBlocks = records.some(isPiToolContentBlock);\n if (hasOpenAiBlocks && (hasAnthropicBlocks || hasPiToolBlocks)) return \"openclaw\";\n if (hasOpenAiBlocks) return \"openai\";\n if (hasAnthropicBlocks) return \"anthropic\";\n if (hasPiToolBlocks) return \"pi\";\n return \"anthropic\";\n }\n return undefined;\n}\n\nfunction isPiMessageObject(obj: Record<string, unknown>): boolean {\n if (obj.role === \"bashExecution\") return true;\n if (obj.role === \"toolResult\" || obj.role === \"tool_result\") return true;\n const type = asNonEmptyString(obj.type ?? obj.kind);\n if (type === \"toolCall\" || type === \"tool_call\" || type === \"toolResult\" || type === \"tool_result\") return true;\n if (!Array.isArray(obj.content)) return false;\n return obj.content.some(isPiToolContentBlock);\n}\n\nfunction parseOpenClawContentArray(\n content: unknown[],\n options: ParseMessagePartsOptions,\n): LcmMessagePartInput[] {\n const parts: LcmMessagePartInput[] = [];\n for (const block of content) {\n if (!isRecord(block)) continue;\n const blockParts = isOpenAiContentBlock(block) || isOpenAiResponseItem(block)\n ? parseOpenAiMessageParts([block], options)\n : isAnthropicContentBlock(block)\n ? parseAnthropicMessageParts({ content: [block] }, options)\n : isPiOpenClawContentBlock(block)\n ? parsePiMessageParts({ content: [block] }, { ...options, allowRenderedFallback: false })\n : [];\n parts.push(...blockParts.map(({ ordinal: _ordinal, ...part }) => part));\n }\n return withRenderedFallback(withOrdinals(parts), { ...options, allowRenderedFallback: false });\n}\n\nfunction isPiOpenClawContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const blockType = asNonEmptyString(value.type ?? value.kind);\n return blockType === \"text\" || isPiToolBlockType(blockType);\n}\n\nfunction isPiToolContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const blockType = asNonEmptyString(value.type ?? value.kind);\n return isPiToolBlockType(blockType);\n}\n\nfunction isPiToolBlockType(blockType: string | null): boolean {\n return blockType === \"toolCall\" || blockType === \"tool_call\" || blockType === \"toolResult\" || blockType === \"tool_result\";\n}\n\nfunction isAnthropicMessageObject(obj: Record<string, unknown>): boolean {\n if (isAnthropicContentBlock(obj)) return true;\n if (!Array.isArray(obj.content)) return false;\n return obj.content.some(isAnthropicContentBlock);\n}\n\nfunction isAnthropicContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const type = asNonEmptyString(value.type ?? value.kind);\n if (type === \"tool_use\" || type === \"thinking\" || type === \"redacted_thinking\") return true;\n return type === \"tool_result\" && value.tool_use_id !== undefined;\n}\n\nfunction isOpenAiResponseItem(obj: Record<string, unknown>): boolean {\n const type = asNonEmptyString(obj.type ?? obj.kind);\n return (\n type === \"message\" ||\n type === \"function_call\" ||\n type === \"function_call_output\" ||\n type === \"reasoning\" ||\n type === \"retry\"\n );\n}\n\nfunction isOpenAiContentBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const type = asNonEmptyString(value.type);\n return (\n type === \"input_text\" ||\n type === \"output_text\" ||\n type === \"input_image\" ||\n type === \"input_file\" ||\n type === \"refusal\"\n );\n}\n\nfunction gatherOpenAiItems(input: unknown): Record<string, unknown>[] {\n if (Array.isArray(input)) return input.filter(isRecord);\n if (!isRecord(input)) return [];\n if (Array.isArray(input.output)) return input.output.filter(isRecord);\n if (Array.isArray(input.items)) return input.items.filter(isRecord);\n if (!isOpenAiResponseItem(input) && Array.isArray(input.content) && input.content.some(isOpenAiContentBlock)) {\n return input.content.filter(isRecord);\n }\n return [input];\n}\n\nfunction gatherContentBlocks(input: unknown): Record<string, unknown>[] {\n if (Array.isArray(input)) return input.filter(isRecord);\n if (typeof input === \"string\") return [{ type: \"text\", text: input }];\n if (isRecord(input)) return [input];\n return [];\n}\n\nfunction classifyToolPart(\n toolName: string | null | undefined,\n payload: Record<string, unknown>,\n): LcmMessagePartInput {\n const normalized = (toolName ?? \"\").toLowerCase();\n const rendered = renderUnknownContent(payload);\n const filePath =\n firstFilePathFromObject(payload) ?? firstFilePath(rendered) ?? null;\n\n if (normalized.includes(\"apply_patch\") || rendered.includes(\"*** Begin Patch\")) {\n return makePart(\"patch\", payload, { toolName, filePath: filePath ?? extractPatchPaths(rendered)[0] ?? null });\n }\n if (/(write|edit|multiedit|create|save)/i.test(normalized)) {\n return makePart(\"file_write\", payload, { toolName, filePath });\n }\n if (/(read|grep|glob|search|list|ls)/i.test(normalized)) {\n return makePart(\"file_read\", payload, { toolName, filePath });\n }\n return makePart(\"tool_call\", payload, { toolName, filePath });\n}\n\nfunction makePart(\n kind: LcmMessagePartKind,\n payload: Record<string, unknown>,\n options: { toolName?: string | null; filePath?: string | null } = {},\n): LcmMessagePartInput {\n return {\n kind,\n payload: sanitizePayload(payload) as Record<string, unknown>,\n toolName: options.toolName ?? null,\n filePath: options.filePath ?? null,\n };\n}\n\nfunction withOrdinals(parts: LcmMessagePartInput[]): LcmMessagePartInput[] {\n return parts.map((part, ordinal) => ({ ...part, ordinal: part.ordinal ?? ordinal }));\n}\n\nfunction withRenderedFallback(\n parts: LcmMessagePartInput[],\n options: ParseMessagePartsOptions,\n): LcmMessagePartInput[] {\n return parts.length > 0 ? parts : renderedFallbackParts(options);\n}\n\nfunction renderedFallbackParts(options: ParseMessagePartsOptions): LcmMessagePartInput[] {\n if (options.allowRenderedFallback === false) {\n return [];\n }\n const rendered = asNonEmptyString(options.renderedContent);\n return rendered ? partsFromRenderedText(rendered) : [];\n}\n\nfunction normalizeKind(value: unknown): LcmMessagePartKind | null {\n if (isLcmMessagePartKind(value)) return value;\n if (value === \"tool_use\" || value === \"function_call\") return \"tool_call\";\n if (value === \"function_call_output\") return \"tool_result\";\n if (value === \"thinking\" || value === \"reasoning\") return \"step_start\";\n return null;\n}\n\nfunction pickArray(input: unknown, key: string): unknown[] | null {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return null;\n const value = (input as Record<string, unknown>)[key];\n return Array.isArray(value) ? value : null;\n}\n\nfunction asNonEmptyString(value: unknown): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseMaybeJson(value: unknown): unknown {\n if (typeof value !== \"string\") return sanitizePayload(value);\n try {\n return sanitizePayload(JSON.parse(value));\n } catch {\n return truncateString(value);\n }\n}\n\nfunction sanitizePayload(value: unknown, depth = 0): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"string\") return truncateString(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (Array.isArray(value)) {\n if (depth >= 4) return \"[truncated]\";\n return value.slice(0, 100).map((item) => sanitizePayload(item, depth + 1));\n }\n if (typeof value === \"object\") {\n if (depth >= 4) return \"[truncated]\";\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n out[key] = SECRET_KEY_RE.test(key) ? \"[redacted]\" : sanitizePayload(child, depth + 1);\n }\n return out;\n }\n return String(value);\n}\n\nfunction truncateString(value: string): string {\n return value.length > MAX_PAYLOAD_STRING\n ? `${value.slice(0, MAX_PAYLOAD_STRING)}...[truncated]`\n : value;\n}\n\nfunction renderUnknownContent(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n}\n\nfunction firstFilePathFromObject(value: unknown): string | null {\n if (!isRecord(value)) return null;\n const keys = [\"file_path\", \"filePath\", \"path\", \"filename\"];\n for (const key of keys) {\n const candidate = asNonEmptyString(value[key]);\n if (candidate) return candidate;\n }\n for (const child of Object.values(value)) {\n if (typeof child === \"string\") {\n const fromText = extractPatchPaths(child)[0] ?? firstFilePath(child);\n if (fromText) return fromText;\n }\n if (isRecord(child)) {\n const nested = firstFilePathFromObject(child);\n if (nested) return nested;\n }\n }\n return null;\n}\n\nfunction firstFilePath(text: string): string | null {\n return extractFilePaths(text)[0] ?? null;\n}\n\nfunction extractFilePaths(text: string): string[] {\n const out = new Set<string>();\n let token = \"\";\n const scanLength = Math.min(text.length, MAX_FILE_SCAN_CHARS);\n for (let index = 0; index <= scanLength; index += 1) {\n const char = index < scanLength ? text[index]! : \" \";\n if (isFilePathTokenSeparator(char)) {\n addFilePathCandidate(out, token);\n token = \"\";\n continue;\n }\n token += char;\n if (token.length > 512) {\n addFilePathCandidate(out, token);\n token = \"\";\n }\n }\n return [...out].slice(0, 20);\n}\n\nfunction isFilePathTokenSeparator(char: string): boolean {\n return (\n char === \" \" ||\n char === \"\\n\" ||\n char === \"\\r\" ||\n char === \"\\t\" ||\n char === \"\\\"\" ||\n char === \"'\" ||\n char === \"`\" ||\n char === \"(\" ||\n char === \")\" ||\n char === \"[\" ||\n char === \"]\" ||\n char === \"{\" ||\n char === \"}\" ||\n char === \"<\" ||\n char === \">\" ||\n char === \",\"\n );\n}\n\nfunction addFilePathCandidate(out: Set<string>, raw: string): void {\n const candidate = trimFilePathPunctuation(raw);\n if (candidate.length === 0 || candidate.includes(\"://\")) return;\n if (isLikelyFilePath(candidate)) out.add(candidate);\n}\n\nfunction trimFilePathPunctuation(raw: string): string {\n let start = 0;\n let end = raw.length;\n while (start < end && isLeadingFilePathPunctuation(raw[start]!)) start += 1;\n while (end > start && isTrailingFilePathPunctuation(raw[end - 1]!)) end -= 1;\n return raw.slice(start, end);\n}\n\nfunction isLeadingFilePathPunctuation(char: string): boolean {\n return (\n char === \":\" ||\n char === \";\" ||\n char === \"!\" ||\n char === \"?\" ||\n char === \"|\" ||\n char === \"*\" ||\n char === \"=\"\n );\n}\n\nfunction isTrailingFilePathPunctuation(char: string): boolean {\n return (\n char === \".\" ||\n char === \":\" ||\n char === \";\" ||\n char === \"!\" ||\n char === \"?\" ||\n char === \"|\" ||\n char === \"*\" ||\n char === \"=\"\n );\n}\n\nfunction isLikelyFilePath(value: string): boolean {\n if (value.startsWith(\"/\") || value.startsWith(\"./\") || value.startsWith(\"../\") || value.startsWith(\"~/\")) {\n return hasValidFileExtension(value);\n }\n if (value.includes(\"/\")) return hasValidFileExtension(value);\n return hasValidFileExtension(value);\n}\n\nfunction hasValidFileExtension(value: string): boolean {\n const lastSlash = value.lastIndexOf(\"/\");\n const basename = value.slice(lastSlash + 1);\n if (isKnownExtensionlessRepositoryFile(basename)) return true;\n if (isKnownBareDotfile(basename)) return true;\n if (isBasenameDotfile(basename)) return isPathLikeFilePath(value);\n const dot = basename.lastIndexOf(\".\");\n if (dot <= 0 || dot === basename.length - 1) return false;\n const ext = basename.slice(dot + 1);\n if (ext.length < 1 || ext.length > 12) return false;\n for (const char of ext) {\n if (!isFileExtensionChar(char)) return false;\n }\n return true;\n}\n\nfunction isKnownExtensionlessRepositoryFile(basename: string): boolean {\n return /^(Dockerfile|Containerfile|Makefile|GNUmakefile|LICENSE|NOTICE|README|CHANGELOG|Procfile)$/.test(basename);\n}\n\nfunction isKnownBareDotfile(basename: string): boolean {\n return /^(\\.env|\\.gitignore|\\.gitattributes|\\.npmrc|\\.yarnrc|\\.editorconfig|\\.prettierrc|\\.eslintrc)$/.test(basename);\n}\n\nfunction isPathLikeFilePath(value: string): boolean {\n return value.startsWith(\"/\") || value.startsWith(\"./\") || value.startsWith(\"../\") || value.startsWith(\"~/\") || value.includes(\"/\");\n}\n\nfunction isBasenameDotfile(basename: string): boolean {\n return /^\\.[A-Za-z0-9][A-Za-z0-9._+-]*$/.test(basename);\n}\n\nfunction isFileExtensionChar(char: string): boolean {\n const code = char.charCodeAt(0);\n return (\n (code >= 48 && code <= 57) ||\n (code >= 65 && code <= 90) ||\n (code >= 97 && code <= 122) ||\n char === \"_\" ||\n char === \"+\" ||\n char === \"-\"\n );\n}\n\nfunction extractPatchPaths(text: string): string[] {\n const out = new Set<string>();\n for (const line of text.split(/\\r?\\n/)) {\n const match = line.match(/^\\*\\*\\* (?:Add|Update|Delete) File: (.+)$/);\n if (match?.[1]) out.add(match[1].trim());\n const move = line.match(/^\\*\\*\\* Move to: (.+)$/);\n if (move?.[1]) out.add(move[1].trim());\n }\n return [...out].slice(0, 20);\n}\n"],"mappings":"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","names":["toolName","paths"]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
log
|
|
3
|
+
} from "./chunk-2ODBA7MQ.js";
|
|
4
|
+
|
|
5
|
+
// src/negative.ts
|
|
6
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
7
|
+
import path from "path";
|
|
8
|
+
var POISONOUS_NEGATIVE_MEMORY_IDS = /* @__PURE__ */ new Set(["__proto__", "prototype", "constructor"]);
|
|
9
|
+
function createNegativeState() {
|
|
10
|
+
return /* @__PURE__ */ Object.create(null);
|
|
11
|
+
}
|
|
12
|
+
function isSafeNegativeMemoryId(memoryId) {
|
|
13
|
+
return typeof memoryId === "string" && memoryId.length > 0 && !POISONOUS_NEGATIVE_MEMORY_IDS.has(memoryId);
|
|
14
|
+
}
|
|
15
|
+
function sanitizeNegativeState(value) {
|
|
16
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return createNegativeState();
|
|
17
|
+
const state = createNegativeState();
|
|
18
|
+
for (const [memoryId, rawEntry] of Object.entries(value)) {
|
|
19
|
+
if (!isSafeNegativeMemoryId(memoryId)) continue;
|
|
20
|
+
if (!rawEntry || typeof rawEntry !== "object" || Array.isArray(rawEntry)) continue;
|
|
21
|
+
const entry = rawEntry;
|
|
22
|
+
if (typeof entry.notUseful !== "number" || !Number.isFinite(entry.notUseful) || entry.notUseful < 0) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (typeof entry.lastUpdatedAt !== "string") continue;
|
|
26
|
+
const notes = Array.isArray(entry.notes) ? entry.notes.filter((note) => typeof note === "string") : void 0;
|
|
27
|
+
state[memoryId] = {
|
|
28
|
+
notUseful: Math.floor(entry.notUseful),
|
|
29
|
+
lastUpdatedAt: entry.lastUpdatedAt,
|
|
30
|
+
notes: notes && notes.length > 0 ? notes : void 0
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return state;
|
|
34
|
+
}
|
|
35
|
+
var NegativeExampleStore = class {
|
|
36
|
+
statePath;
|
|
37
|
+
state = createNegativeState();
|
|
38
|
+
constructor(memoryDir) {
|
|
39
|
+
this.statePath = path.join(memoryDir, "state", "negative_examples.json");
|
|
40
|
+
}
|
|
41
|
+
async load() {
|
|
42
|
+
try {
|
|
43
|
+
const raw = await readFile(this.statePath, "utf-8");
|
|
44
|
+
this.state = sanitizeNegativeState(JSON.parse(raw));
|
|
45
|
+
} catch {
|
|
46
|
+
this.state = createNegativeState();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Record that a memory was retrieved but not useful for the user.
|
|
51
|
+
* This should be lightweight and never block agent execution.
|
|
52
|
+
*/
|
|
53
|
+
async recordNotUseful(memoryIds, note) {
|
|
54
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
55
|
+
for (const memoryId of memoryIds) {
|
|
56
|
+
if (!isSafeNegativeMemoryId(memoryId)) continue;
|
|
57
|
+
const existing = this.state[memoryId] ?? { notUseful: 0, lastUpdatedAt: now };
|
|
58
|
+
const next = {
|
|
59
|
+
notUseful: existing.notUseful + 1,
|
|
60
|
+
lastUpdatedAt: now,
|
|
61
|
+
notes: note ? [...(existing.notes ?? []).slice(-19), note] : existing.notes
|
|
62
|
+
};
|
|
63
|
+
this.state[memoryId] = next;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
await mkdir(path.dirname(this.statePath), { recursive: true });
|
|
67
|
+
await writeFile(this.statePath, JSON.stringify(this.state, null, 2), "utf-8");
|
|
68
|
+
} catch (err) {
|
|
69
|
+
log.debug(`negative example store write failed: ${err}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Convert negative examples into a small score penalty.
|
|
74
|
+
* Intended as a soft bias, not a hard filter.
|
|
75
|
+
*/
|
|
76
|
+
penalty(memoryId, opts) {
|
|
77
|
+
if (!isSafeNegativeMemoryId(memoryId)) return 0;
|
|
78
|
+
const entry = this.state[memoryId];
|
|
79
|
+
if (!entry) return 0;
|
|
80
|
+
if (!Number.isFinite(entry.notUseful) || entry.notUseful < 0) return 0;
|
|
81
|
+
if (!Number.isFinite(opts.perHit) || opts.perHit < 0) return 0;
|
|
82
|
+
if (!Number.isFinite(opts.cap) || opts.cap < 0) return 0;
|
|
83
|
+
const hits = Math.min(10, entry.notUseful);
|
|
84
|
+
const raw = hits * opts.perHit;
|
|
85
|
+
return Math.min(opts.cap, raw);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
NegativeExampleStore
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=chunk-XKXKSQU7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/negative.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { log } from \"./logger.js\";\n\nexport interface NegativeExampleEntry {\n notUseful: number;\n lastUpdatedAt: string;\n notes?: string[];\n}\n\ntype NegativeState = Record<string, NegativeExampleEntry>;\n\nconst POISONOUS_NEGATIVE_MEMORY_IDS = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nfunction createNegativeState(): NegativeState {\n return Object.create(null) as NegativeState;\n}\n\nfunction isSafeNegativeMemoryId(memoryId: unknown): memoryId is string {\n return (\n typeof memoryId === \"string\" &&\n memoryId.length > 0 &&\n !POISONOUS_NEGATIVE_MEMORY_IDS.has(memoryId)\n );\n}\n\nfunction sanitizeNegativeState(value: unknown): NegativeState {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return createNegativeState();\n\n const state = createNegativeState();\n for (const [memoryId, rawEntry] of Object.entries(value)) {\n if (!isSafeNegativeMemoryId(memoryId)) continue;\n if (!rawEntry || typeof rawEntry !== \"object\" || Array.isArray(rawEntry)) continue;\n const entry = rawEntry as Partial<NegativeExampleEntry>;\n if (\n typeof entry.notUseful !== \"number\" ||\n !Number.isFinite(entry.notUseful) ||\n entry.notUseful < 0\n ) {\n continue;\n }\n if (typeof entry.lastUpdatedAt !== \"string\") continue;\n const notes = Array.isArray(entry.notes)\n ? entry.notes.filter((note): note is string => typeof note === \"string\")\n : undefined;\n state[memoryId] = {\n notUseful: Math.floor(entry.notUseful),\n lastUpdatedAt: entry.lastUpdatedAt,\n notes: notes && notes.length > 0 ? notes : undefined,\n };\n }\n return state;\n}\n\nexport class NegativeExampleStore {\n private readonly statePath: string;\n private state: NegativeState = createNegativeState();\n\n constructor(memoryDir: string) {\n this.statePath = path.join(memoryDir, \"state\", \"negative_examples.json\");\n }\n\n async load(): Promise<void> {\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n this.state = sanitizeNegativeState(JSON.parse(raw));\n } catch {\n this.state = createNegativeState();\n }\n }\n\n /**\n * Record that a memory was retrieved but not useful for the user.\n * This should be lightweight and never block agent execution.\n */\n async recordNotUseful(memoryIds: string[], note?: string): Promise<void> {\n const now = new Date().toISOString();\n\n for (const memoryId of memoryIds) {\n if (!isSafeNegativeMemoryId(memoryId)) continue;\n const existing = this.state[memoryId] ?? { notUseful: 0, lastUpdatedAt: now };\n const next: NegativeExampleEntry = {\n notUseful: existing.notUseful + 1,\n lastUpdatedAt: now,\n notes: note\n ? [...(existing.notes ?? []).slice(-19), note]\n : existing.notes,\n };\n this.state[memoryId] = next;\n }\n\n try {\n await mkdir(path.dirname(this.statePath), { recursive: true });\n await writeFile(this.statePath, JSON.stringify(this.state, null, 2), \"utf-8\");\n } catch (err) {\n log.debug(`negative example store write failed: ${err}`);\n }\n }\n\n /**\n * Convert negative examples into a small score penalty.\n * Intended as a soft bias, not a hard filter.\n */\n penalty(memoryId: string, opts: { perHit: number; cap: number }): number {\n if (!isSafeNegativeMemoryId(memoryId)) return 0;\n const entry = this.state[memoryId];\n if (!entry) return 0;\n if (!Number.isFinite(entry.notUseful) || entry.notUseful < 0) return 0;\n if (!Number.isFinite(opts.perHit) || opts.perHit < 0) return 0;\n if (!Number.isFinite(opts.cap) || opts.cap < 0) return 0;\n\n // Cap effect to avoid runaway ranking distortion.\n const hits = Math.min(10, entry.notUseful);\n const raw = hits * opts.perHit;\n return Math.min(opts.cap, raw);\n }\n}\n"],"mappings":";;;;;AAAA,SAAS,OAAO,UAAU,iBAAiB;AAC3C,OAAO,UAAU;AAWjB,IAAM,gCAAgC,oBAAI,IAAI,CAAC,aAAa,aAAa,aAAa,CAAC;AAEvF,SAAS,sBAAqC;AAC5C,SAAO,uBAAO,OAAO,IAAI;AAC3B;AAEA,SAAS,uBAAuB,UAAuC;AACrE,SACE,OAAO,aAAa,YACpB,SAAS,SAAS,KAClB,CAAC,8BAA8B,IAAI,QAAQ;AAE/C;AAEA,SAAS,sBAAsB,OAA+B;AAC5D,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO,oBAAoB;AAE5F,QAAM,QAAQ,oBAAoB;AAClC,aAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,KAAK,GAAG;AACxD,QAAI,CAAC,uBAAuB,QAAQ,EAAG;AACvC,QAAI,CAAC,YAAY,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,EAAG;AAC1E,UAAM,QAAQ;AACd,QACE,OAAO,MAAM,cAAc,YAC3B,CAAC,OAAO,SAAS,MAAM,SAAS,KAChC,MAAM,YAAY,GAClB;AACA;AAAA,IACF;AACA,QAAI,OAAO,MAAM,kBAAkB,SAAU;AAC7C,UAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IACnC,MAAM,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ,IACrE;AACJ,UAAM,QAAQ,IAAI;AAAA,MAChB,WAAW,KAAK,MAAM,MAAM,SAAS;AAAA,MACrC,eAAe,MAAM;AAAA,MACrB,OAAO,SAAS,MAAM,SAAS,IAAI,QAAQ;AAAA,IAC7C;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,uBAAN,MAA2B;AAAA,EACf;AAAA,EACT,QAAuB,oBAAoB;AAAA,EAEnD,YAAY,WAAmB;AAC7B,SAAK,YAAY,KAAK,KAAK,WAAW,SAAS,wBAAwB;AAAA,EACzE;AAAA,EAEA,MAAM,OAAsB;AAC1B,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,KAAK,WAAW,OAAO;AAClD,WAAK,QAAQ,sBAAsB,KAAK,MAAM,GAAG,CAAC;AAAA,IACpD,QAAQ;AACN,WAAK,QAAQ,oBAAoB;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAAgB,WAAqB,MAA8B;AACvE,UAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AAEnC,eAAW,YAAY,WAAW;AAChC,UAAI,CAAC,uBAAuB,QAAQ,EAAG;AACvC,YAAM,WAAW,KAAK,MAAM,QAAQ,KAAK,EAAE,WAAW,GAAG,eAAe,IAAI;AAC5E,YAAM,OAA6B;AAAA,QACjC,WAAW,SAAS,YAAY;AAAA,QAChC,eAAe;AAAA,QACf,OAAO,OACH,CAAC,IAAI,SAAS,SAAS,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,IAC3C,SAAS;AAAA,MACf;AACA,WAAK,MAAM,QAAQ,IAAI;AAAA,IACzB;AAEA,QAAI;AACF,YAAM,MAAM,KAAK,QAAQ,KAAK,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAC7D,YAAM,UAAU,KAAK,WAAW,KAAK,UAAU,KAAK,OAAO,MAAM,CAAC,GAAG,OAAO;AAAA,IAC9E,SAAS,KAAK;AACZ,UAAI,MAAM,wCAAwC,GAAG,EAAE;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,UAAkB,MAA+C;AACvE,QAAI,CAAC,uBAAuB,QAAQ,EAAG,QAAO;AAC9C,UAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,QAAI,CAAC,MAAO,QAAO;AACnB,QAAI,CAAC,OAAO,SAAS,MAAM,SAAS,KAAK,MAAM,YAAY,EAAG,QAAO;AACrE,QAAI,CAAC,OAAO,SAAS,KAAK,MAAM,KAAK,KAAK,SAAS,EAAG,QAAO;AAC7D,QAAI,CAAC,OAAO,SAAS,KAAK,GAAG,KAAK,KAAK,MAAM,EAAG,QAAO;AAGvD,UAAM,OAAO,KAAK,IAAI,IAAI,MAAM,SAAS;AACzC,UAAM,MAAM,OAAO,KAAK;AACxB,WAAO,KAAK,IAAI,KAAK,KAAK,GAAG;AAAA,EAC/B;AACF;","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BoxBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HQ6NIBL6.js";
|
|
4
4
|
import {
|
|
5
5
|
StorageManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UIPDNLXA.js";
|
|
7
7
|
import {
|
|
8
8
|
getCachedEpisodeMap,
|
|
9
9
|
setCachedEpisodeMap
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CPPS65WS.js";
|
|
11
11
|
import {
|
|
12
12
|
countRecallTokenOverlap,
|
|
13
13
|
normalizeRecallTokens
|
|
@@ -105,4 +105,4 @@ async function searchVerifiedEpisodes(options) {
|
|
|
105
105
|
export {
|
|
106
106
|
searchVerifiedEpisodes
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-XNLXAWHX.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
optionalStringArray,
|
|
12
12
|
recordStoreDay,
|
|
13
13
|
validateStringRecord
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-A2IYSXDQ.js";
|
|
15
15
|
import {
|
|
16
16
|
listJsonFiles,
|
|
17
17
|
readJsonFile
|
|
@@ -65,7 +65,7 @@ async function recordWorkProductLedgerEntry(options) {
|
|
|
65
65
|
const entriesDir = path.join(rootDir, "entries", day);
|
|
66
66
|
const filePath = path.join(entriesDir, `${validated.entryId}.json`);
|
|
67
67
|
await mkdir(entriesDir, { recursive: true });
|
|
68
|
-
await writeFile(filePath, JSON.stringify(validated, null, 2), "utf8");
|
|
68
|
+
await writeFile(filePath, JSON.stringify(validated, null, 2), { encoding: "utf8", flag: "wx" });
|
|
69
69
|
return filePath;
|
|
70
70
|
}
|
|
71
71
|
async function readWorkProductLedgerEntries(options) {
|
|
@@ -182,4 +182,4 @@ export {
|
|
|
182
182
|
searchWorkProductLedgerEntries,
|
|
183
183
|
getWorkProductLedgerStatus
|
|
184
184
|
};
|
|
185
|
-
//# sourceMappingURL=chunk-
|
|
185
|
+
//# sourceMappingURL=chunk-XPXEJRUB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/work-product-ledger.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport { countRecallTokenOverlap, normalizeRecallTokens } from \"./recall-tokenization.js\";\nimport {\n assertIsoRecordedAt,\n assertSafePathSegment,\n assertString,\n isRecord,\n optionalString,\n optionalStringArray,\n recordStoreDay,\n validateStringRecord,\n} from \"./store-contract.js\";\n\nexport type WorkProductLedgerSource = \"tool_result\" | \"cli\" | \"system\" | \"manual\";\nexport type WorkProductLedgerKind = \"artifact\" | \"file\" | \"record\" | \"report\" | \"workspace\";\nexport type WorkProductLedgerAction = \"created\" | \"updated\" | \"deleted\" | \"referenced\" | \"published\";\n\nexport interface WorkProductLedgerEntry {\n schemaVersion: 1;\n entryId: string;\n recordedAt: string;\n sessionKey: string;\n source: WorkProductLedgerSource;\n kind: WorkProductLedgerKind;\n action: WorkProductLedgerAction;\n scope: string;\n summary: string;\n artifactPath?: string;\n objectiveStateSnapshotRefs?: string[];\n entityRefs?: string[];\n tags?: string[];\n metadata?: Record<string, string>;\n}\n\nexport interface WorkProductLedgerStatus {\n enabled: boolean;\n rootDir: string;\n entriesDir: string;\n entries: {\n total: number;\n valid: number;\n invalid: number;\n byKind: Partial<Record<WorkProductLedgerKind, number>>;\n byAction: Partial<Record<WorkProductLedgerAction, number>>;\n latestEntryId?: string;\n latestRecordedAt?: string;\n latestSessionKey?: string;\n };\n latestEntry?: WorkProductLedgerEntry;\n invalidEntries: Array<{\n path: string;\n error: string;\n }>;\n}\n\nexport interface WorkProductLedgerSearchResult {\n entry: WorkProductLedgerEntry;\n score: number;\n matchedFields: string[];\n}\n\nexport function resolveWorkProductLedgerDir(memoryDir: string, overrideDir?: string): string {\n if (typeof overrideDir === \"string\" && overrideDir.trim().length > 0) {\n return overrideDir.trim();\n }\n return path.join(memoryDir, \"state\", \"work-product-ledger\");\n}\n\nexport function validateWorkProductLedgerEntry(raw: unknown): WorkProductLedgerEntry {\n if (!isRecord(raw)) throw new Error(\"work-product ledger entry must be an object\");\n if (raw.schemaVersion !== 1) throw new Error(\"schemaVersion must be 1\");\n\n const source = assertString(raw.source, \"source\");\n if (![\"tool_result\", \"cli\", \"system\", \"manual\"].includes(source)) {\n throw new Error(\"source must be one of tool_result|cli|system|manual\");\n }\n\n const kind = assertString(raw.kind, \"kind\");\n if (![\"artifact\", \"file\", \"record\", \"report\", \"workspace\"].includes(kind)) {\n throw new Error(\"kind must be one of artifact|file|record|report|workspace\");\n }\n\n const action = assertString(raw.action, \"action\");\n if (![\"created\", \"updated\", \"deleted\", \"referenced\", \"published\"].includes(action)) {\n throw new Error(\"action must be one of created|updated|deleted|referenced|published\");\n }\n\n return {\n schemaVersion: 1,\n entryId: assertSafePathSegment(assertString(raw.entryId, \"entryId\"), \"entryId\"),\n recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, \"recordedAt\")),\n sessionKey: assertString(raw.sessionKey, \"sessionKey\"),\n source: source as WorkProductLedgerSource,\n kind: kind as WorkProductLedgerKind,\n action: action as WorkProductLedgerAction,\n scope: assertString(raw.scope, \"scope\"),\n summary: assertString(raw.summary, \"summary\"),\n artifactPath: optionalString(raw.artifactPath),\n objectiveStateSnapshotRefs: optionalStringArray(raw.objectiveStateSnapshotRefs, \"objectiveStateSnapshotRefs\"),\n entityRefs: optionalStringArray(raw.entityRefs, \"entityRefs\"),\n tags: optionalStringArray(raw.tags, \"tags\"),\n metadata: validateStringRecord(raw.metadata, \"metadata\"),\n };\n}\n\nexport async function recordWorkProductLedgerEntry(options: {\n memoryDir: string;\n workProductLedgerDir?: string;\n entry: WorkProductLedgerEntry;\n}): Promise<string> {\n const rootDir = resolveWorkProductLedgerDir(options.memoryDir, options.workProductLedgerDir);\n const validated = validateWorkProductLedgerEntry(options.entry);\n const day = recordStoreDay(validated.recordedAt);\n const entriesDir = path.join(rootDir, \"entries\", day);\n const filePath = path.join(entriesDir, `${validated.entryId}.json`);\n await mkdir(entriesDir, { recursive: true });\n await writeFile(filePath, JSON.stringify(validated, null, 2), { encoding: \"utf8\", flag: \"wx\" });\n return filePath;\n}\n\nasync function readWorkProductLedgerEntries(options: {\n memoryDir: string;\n workProductLedgerDir?: string;\n}): Promise<{\n files: string[];\n entries: WorkProductLedgerEntry[];\n invalidEntries: Array<{ path: string; error: string }>;\n}> {\n const rootDir = resolveWorkProductLedgerDir(options.memoryDir, options.workProductLedgerDir);\n const files = await listJsonFiles(path.join(rootDir, \"entries\"));\n const entries: WorkProductLedgerEntry[] = [];\n const invalidEntries: Array<{ path: string; error: string }> = [];\n for (const filePath of files) {\n try {\n entries.push(validateWorkProductLedgerEntry(await readJsonFile(filePath)));\n } catch (error) {\n invalidEntries.push({\n path: filePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { files, entries, invalidEntries };\n}\n\nfunction lexicalScoreWorkProductLedgerEntry(\n entry: WorkProductLedgerEntry,\n queryTokens: Set<string>,\n): { score: number; matchedFields: string[] } {\n const weightedFields: Array<[string, string | undefined, number]> = [\n [\"scope\", entry.scope, 4],\n [\"summary\", entry.summary, 3],\n [\"artifactPath\", entry.artifactPath, 3],\n [\"tags\", entry.tags?.join(\" \"), 2],\n [\"entityRefs\", entry.entityRefs?.join(\" \"), 2],\n [\"objectiveStateSnapshotRefs\", entry.objectiveStateSnapshotRefs?.join(\" \"), 1],\n [\"kind\", entry.kind, 1],\n [\"action\", entry.action, 1],\n [\"source\", entry.source, 1],\n ];\n\n let score = 0;\n const matchedFields: string[] = [];\n for (const [field, value, weight] of weightedFields) {\n const matches = countRecallTokenOverlap(queryTokens, value, [\"what\", \"can\", \"reuse\"]);\n if (matches > 0) matchedFields.push(field);\n score += matches * weight;\n }\n return { score, matchedFields };\n}\n\nfunction scoreWorkProductLedgerEntry(\n entry: WorkProductLedgerEntry,\n lexicalScore: number,\n sessionKey?: string,\n): number {\n let score = lexicalScore;\n if (entry.kind === \"artifact\" || entry.kind === \"file\") score += 1;\n if (entry.action === \"created\" || entry.action === \"updated\" || entry.action === \"published\") score += 1;\n if (sessionKey && entry.sessionKey === sessionKey) score += 1;\n\n const recordedAtMs = Date.parse(entry.recordedAt);\n if (Number.isFinite(recordedAtMs)) {\n const ageHours = Math.max(0, (Date.now() - recordedAtMs) / 3_600_000);\n score += 1 / (1 + ageHours);\n }\n return score;\n}\n\nexport async function searchWorkProductLedgerEntries(options: {\n memoryDir: string;\n workProductLedgerDir?: string;\n query: string;\n maxResults: number;\n sessionKey?: string;\n}): Promise<WorkProductLedgerSearchResult[]> {\n const maxResults = Math.max(0, Math.floor(options.maxResults));\n if (maxResults === 0) return [];\n\n const { entries } = await readWorkProductLedgerEntries(options);\n if (entries.length === 0) return [];\n\n const queryTokens = new Set(normalizeRecallTokens(options.query, [\"what\", \"can\", \"reuse\"]));\n if (queryTokens.size === 0) return [];\n\n const scored = entries.map((entry) => {\n const lexical = lexicalScoreWorkProductLedgerEntry(entry, queryTokens);\n return {\n entry,\n matchedFields: lexical.matchedFields,\n lexicalScore: lexical.score,\n score: scoreWorkProductLedgerEntry(entry, lexical.score, options.sessionKey),\n };\n });\n\n const filtered = scored.filter((result) => result.lexicalScore > 0);\n filtered.sort((left, right) => {\n if (right.score !== left.score) return right.score - left.score;\n return right.entry.recordedAt.localeCompare(left.entry.recordedAt);\n });\n\n return filtered.slice(0, maxResults).map(({ entry, score, matchedFields }) => ({\n entry,\n score,\n matchedFields,\n }));\n}\n\nexport async function getWorkProductLedgerStatus(options: {\n memoryDir: string;\n workProductLedgerDir?: string;\n enabled: boolean;\n}): Promise<WorkProductLedgerStatus> {\n const rootDir = resolveWorkProductLedgerDir(options.memoryDir, options.workProductLedgerDir);\n const entriesDir = path.join(rootDir, \"entries\");\n const { files, entries, invalidEntries } = await readWorkProductLedgerEntries(options);\n entries.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));\n\n const byKind: Partial<Record<WorkProductLedgerKind, number>> = {};\n const byAction: Partial<Record<WorkProductLedgerAction, number>> = {};\n for (const entry of entries) {\n byKind[entry.kind] = (byKind[entry.kind] ?? 0) + 1;\n byAction[entry.action] = (byAction[entry.action] ?? 0) + 1;\n }\n\n return {\n enabled: options.enabled,\n rootDir,\n entriesDir,\n entries: {\n total: files.length,\n valid: entries.length,\n invalid: invalidEntries.length,\n byKind,\n byAction,\n latestEntryId: entries[0]?.entryId,\n latestRecordedAt: entries[0]?.recordedAt,\n latestSessionKey: entries[0]?.sessionKey,\n },\n latestEntry: entries[0],\n invalidEntries,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
backupAndWriteRebuiltObservations,
|
|
3
3
|
toHourBucketIso
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RUZOJKNF.js";
|
|
5
5
|
|
|
6
6
|
// src/maintenance/rebuild-observations.ts
|
|
7
7
|
import path from "path";
|
|
@@ -91,10 +91,13 @@ async function rebuildObservations(options) {
|
|
|
91
91
|
);
|
|
92
92
|
const transcriptFiles = await listTranscriptFiles(transcriptsRoot);
|
|
93
93
|
const contents = [];
|
|
94
|
+
const readTranscriptFile = options.readTranscriptFile ?? ((file) => readFile(file, "utf-8"));
|
|
94
95
|
for (const file of transcriptFiles) {
|
|
95
96
|
try {
|
|
96
|
-
contents.push(await
|
|
97
|
-
} catch {
|
|
97
|
+
contents.push(await readTranscriptFile(file));
|
|
98
|
+
} catch (err) {
|
|
99
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
100
|
+
throw new Error(`Failed to read transcript file ${file}: ${message}`);
|
|
98
101
|
}
|
|
99
102
|
}
|
|
100
103
|
const { aggregates, parsedTurns, malformedLines } = buildLedgerRows(contents);
|
|
@@ -121,4 +124,4 @@ async function rebuildObservations(options) {
|
|
|
121
124
|
export {
|
|
122
125
|
rebuildObservations
|
|
123
126
|
};
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
127
|
+
//# sourceMappingURL=chunk-XR6DNK4U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/maintenance/rebuild-observations.ts"],"sourcesContent":["import path from \"node:path\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport {\n backupAndWriteRebuiltObservations,\n toHourBucketIso,\n} from \"./observation-ledger-utils.js\";\n\ninterface TranscriptLikeEntry {\n timestamp?: string;\n role?: string;\n sessionKey?: string;\n}\n\ninterface ObservationAggregate {\n sessionKey: string;\n hour: string;\n turnCount: number;\n userTurns: number;\n assistantTurns: number;\n}\n\nexport interface RebuildObservationsOptions {\n memoryDir: string;\n dryRun?: boolean;\n now?: Date;\n readTranscriptFile?: (file: string) => Promise<string>;\n}\n\nexport interface RebuildObservationsResult {\n dryRun: boolean;\n scannedFiles: number;\n parsedTurns: number;\n malformedLines: number;\n rebuiltRows: number;\n outputPath: string;\n backupPath?: string;\n}\n\nfunction toSortableKey(sessionKey: string, hour: string): string {\n return `${sessionKey}\\u0000${hour}`;\n}\n\nasync function listTranscriptFiles(root: string): Promise<string[]> {\n const out: string[] = [];\n let entries: Array<{\n name: string;\n isDirectory(): boolean;\n isFile(): boolean;\n isSymbolicLink(): boolean;\n }>;\n try {\n entries = (await readdir(root, { withFileTypes: true })) as Array<{\n name: string;\n isDirectory(): boolean;\n isFile(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code && code === \"ENOENT\") return out;\n throw err;\n }\n\n for (const entry of entries) {\n if (entry.name === \".\" || entry.name === \"..\") continue;\n if (entry.isSymbolicLink()) continue;\n const full = path.join(root, entry.name);\n if (entry.isDirectory()) {\n out.push(...(await listTranscriptFiles(full)));\n continue;\n }\n if (entry.isFile() && entry.name.endsWith(\".jsonl\")) {\n out.push(full);\n }\n }\n\n out.sort((a, b) => a.localeCompare(b));\n return out;\n}\n\nfunction buildLedgerRows(linesByFile: string[]): {\n aggregates: ObservationAggregate[];\n parsedTurns: number;\n malformedLines: number;\n} {\n const byKey = new Map<string, ObservationAggregate>();\n let parsedTurns = 0;\n let malformedLines = 0;\n\n for (const rawFile of linesByFile) {\n for (const line of rawFile.split(\"\\n\")) {\n if (!line.trim()) continue;\n let parsed: TranscriptLikeEntry;\n try {\n const candidate = JSON.parse(line);\n if (candidate == null || typeof candidate !== \"object\" || Array.isArray(candidate)) {\n malformedLines += 1;\n continue;\n }\n parsed = candidate as TranscriptLikeEntry;\n } catch {\n malformedLines += 1;\n continue;\n }\n\n if (typeof parsed.sessionKey !== \"string\" || parsed.sessionKey.length === 0) continue;\n if (parsed.role !== \"user\" && parsed.role !== \"assistant\") continue;\n if (typeof parsed.timestamp !== \"string\") continue;\n const hour = toHourBucketIso(parsed.timestamp);\n if (!hour) continue;\n\n const key = toSortableKey(parsed.sessionKey, hour);\n const existing = byKey.get(key) ?? {\n sessionKey: parsed.sessionKey,\n hour,\n turnCount: 0,\n userTurns: 0,\n assistantTurns: 0,\n };\n existing.turnCount += 1;\n if (parsed.role === \"user\") existing.userTurns += 1;\n if (parsed.role === \"assistant\") existing.assistantTurns += 1;\n byKey.set(key, existing);\n parsedTurns += 1;\n }\n }\n\n const aggregates = Array.from(byKey.values()).sort((a, b) => {\n if (a.sessionKey !== b.sessionKey) return a.sessionKey.localeCompare(b.sessionKey);\n return a.hour.localeCompare(b.hour);\n });\n\n return { aggregates, parsedTurns, malformedLines };\n}\n\nexport async function rebuildObservations(\n options: RebuildObservationsOptions,\n): Promise<RebuildObservationsResult> {\n const dryRun = options.dryRun !== false;\n const now = options.now ?? new Date();\n const transcriptsRoot = path.join(options.memoryDir, \"transcripts\");\n const outputPath = path.join(\n options.memoryDir,\n \"state\",\n \"observation-ledger\",\n \"rebuilt-observations.jsonl\",\n );\n\n const transcriptFiles = await listTranscriptFiles(transcriptsRoot);\n const contents: string[] = [];\n const readTranscriptFile =\n options.readTranscriptFile ?? ((file: string) => readFile(file, \"utf-8\"));\n for (const file of transcriptFiles) {\n try {\n contents.push(await readTranscriptFile(file));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to read transcript file ${file}: ${message}`);\n }\n }\n const { aggregates, parsedTurns, malformedLines } = buildLedgerRows(contents);\n\n let backupPath: string | undefined;\n if (!dryRun) {\n backupPath = await backupAndWriteRebuiltObservations({\n memoryDir: options.memoryDir,\n outputPath,\n rows: aggregates,\n now,\n });\n }\n\n return {\n dryRun,\n scannedFiles: transcriptFiles.length,\n parsedTurns,\n malformedLines,\n rebuiltRows: aggregates.length,\n outputPath,\n backupPath,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readPair,
|
|
3
3
|
resolvePair
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HLAVGJ62.js";
|
|
5
5
|
import {
|
|
6
6
|
log
|
|
7
7
|
} from "./chunk-2ODBA7MQ.js";
|
|
@@ -32,6 +32,7 @@ async function executeResolution(memoryDir, storage, pairId, verb, options = {})
|
|
|
32
32
|
const affectedIds = [];
|
|
33
33
|
let message = "";
|
|
34
34
|
let supersedeFailed = false;
|
|
35
|
+
let rollbackAfterResolveFailure = null;
|
|
35
36
|
switch (verb) {
|
|
36
37
|
case "keep-a": {
|
|
37
38
|
const keepTarget = await validateKeepTarget(resolutionStorage, pairId, idA);
|
|
@@ -44,6 +45,7 @@ async function executeResolution(memoryDir, storage, pairId, verb, options = {})
|
|
|
44
45
|
const ok = sourceB ? await supersedeSafe(resolutionStorage, idB, idA, "contradiction-resolution:keep-a") : false;
|
|
45
46
|
if (ok) {
|
|
46
47
|
affectedIds.push(idB);
|
|
48
|
+
rollbackAfterResolveFailure = async () => restoreMemorySnapshot(resolutionStorage, sourceB, "contradiction-resolution:keep-a-rollback");
|
|
47
49
|
message = `Kept ${idA}, superseded ${idB}`;
|
|
48
50
|
} else {
|
|
49
51
|
supersedeFailed = true;
|
|
@@ -63,6 +65,7 @@ async function executeResolution(memoryDir, storage, pairId, verb, options = {})
|
|
|
63
65
|
const ok = sourceA ? await supersedeSafe(resolutionStorage, idA, idB, "contradiction-resolution:keep-b") : false;
|
|
64
66
|
if (ok) {
|
|
65
67
|
affectedIds.push(idA);
|
|
68
|
+
rollbackAfterResolveFailure = async () => restoreMemorySnapshot(resolutionStorage, sourceA, "contradiction-resolution:keep-b-rollback");
|
|
66
69
|
message = `Kept ${idB}, superseded ${idA}`;
|
|
67
70
|
} else {
|
|
68
71
|
supersedeFailed = true;
|
|
@@ -103,6 +106,14 @@ async function executeResolution(memoryDir, storage, pairId, verb, options = {})
|
|
|
103
106
|
break;
|
|
104
107
|
}
|
|
105
108
|
affectedIds.push(idA, idB);
|
|
109
|
+
rollbackAfterResolveFailure = async () => {
|
|
110
|
+
const rolledBackA = await restoreMemorySnapshot(resolutionStorage, replacement.sourceA);
|
|
111
|
+
const rolledBackB = await restoreMemorySnapshot(resolutionStorage, replacement.sourceB);
|
|
112
|
+
if (rolledBackA && rolledBackB) {
|
|
113
|
+
await cleanupCreatedReplacement(resolutionStorage, replacement);
|
|
114
|
+
}
|
|
115
|
+
return rolledBackA && rolledBackB;
|
|
116
|
+
};
|
|
106
117
|
message = `Both memories superseded by merged ${replacement.mergedId}`;
|
|
107
118
|
break;
|
|
108
119
|
}
|
|
@@ -116,7 +127,26 @@ async function executeResolution(memoryDir, storage, pairId, verb, options = {})
|
|
|
116
127
|
}
|
|
117
128
|
}
|
|
118
129
|
if (!supersedeFailed) {
|
|
119
|
-
|
|
130
|
+
let resolved = false;
|
|
131
|
+
try {
|
|
132
|
+
resolved = resolvePair(memoryDir, pairId, verb) !== null;
|
|
133
|
+
} catch (err) {
|
|
134
|
+
log.warn(
|
|
135
|
+
"[contradiction-resolution] failed to persist pair=%s verb=%s: %s",
|
|
136
|
+
pairId,
|
|
137
|
+
verb,
|
|
138
|
+
err instanceof Error ? err.message : err
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
if (!resolved) {
|
|
142
|
+
if (rollbackAfterResolveFailure) {
|
|
143
|
+
const rolledBack = await rollbackAfterResolveFailure();
|
|
144
|
+
affectedIds.length = 0;
|
|
145
|
+
message = rolledBack ? `Resolution persistence failed; rolled back memory changes and did not resolve ${pairId}` : `Resolution persistence failed; rollback incomplete and pair is not resolved`;
|
|
146
|
+
} else {
|
|
147
|
+
message = `Resolution persistence failed; pair is not resolved`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
120
150
|
}
|
|
121
151
|
log.info("[contradiction-resolution] pair=%s verb=%s affected=%d", pairId, verb, affectedIds.length);
|
|
122
152
|
return { pairId, verb, affectedIds, message };
|
|
@@ -161,7 +191,6 @@ async function prepareMergeReplacement(storage, pairId, idA, idB, options) {
|
|
|
161
191
|
tags: ["contradiction-resolution", "merge"],
|
|
162
192
|
source: "contradiction-resolution",
|
|
163
193
|
lineage: [idA, idB],
|
|
164
|
-
derivedFrom: [idA, idB],
|
|
165
194
|
derivedVia: "merge"
|
|
166
195
|
});
|
|
167
196
|
} catch (err) {
|
|
@@ -270,4 +299,4 @@ export {
|
|
|
270
299
|
isValidResolutionVerb,
|
|
271
300
|
executeResolution
|
|
272
301
|
};
|
|
273
|
-
//# sourceMappingURL=chunk-
|
|
302
|
+
//# sourceMappingURL=chunk-XSQ4SGM5.js.map
|