@remnic/core 9.7.15 → 9.9.0
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/access-admin-ops-surface.d.ts +13 -6
- package/dist/access-admin-ops-surface.js +85 -71
- package/dist/access-audit.js +2 -2
- package/dist/access-boundary.d.ts +35 -17
- package/dist/access-boundary.js +86 -74
- package/dist/access-citation.d.ts +28 -0
- package/dist/access-citation.js +9 -0
- package/dist/access-cli.js +194 -178
- package/dist/access-cli.js.map +1 -1
- package/dist/access-errors.d.ts +16 -1
- package/dist/access-errors.js +7 -3
- package/dist/access-http.d.ts +25 -19
- package/dist/access-http.js +100 -87
- package/dist/access-identity-continuity-surface.d.ts +13 -8
- package/dist/access-identity-continuity-surface.js +85 -71
- package/dist/access-lcm-surface.d.ts +16 -9
- package/dist/access-lcm-surface.js +85 -71
- package/dist/access-mcp.d.ts +23 -16
- package/dist/access-mcp.js +96 -84
- package/dist/access-memory-search-fanout.d.ts +93 -0
- package/dist/access-memory-search-fanout.js +18 -0
- package/dist/access-observe-write-surface.d.ts +26 -8
- package/dist/access-observe-write-surface.js +85 -71
- package/dist/access-operations-batch.js +92 -80
- package/dist/access-operations.d.ts +29 -22
- package/dist/access-operations.js +94 -82
- package/dist/access-recall-concurrency.d.ts +250 -0
- package/dist/access-recall-concurrency.js +157 -0
- package/dist/access-recall-response.d.ts +130 -0
- package/dist/access-recall-response.js +147 -0
- package/dist/access-recall-surface.d.ts +15 -7
- package/dist/access-recall-surface.js +85 -71
- package/dist/access-schema.d.ts +98 -98
- package/dist/access-schema.js +8 -6
- package/dist/{access-service-DpcYZ9Nl.d.ts → access-service-DbZ1G3zV.d.ts} +29 -36
- package/dist/access-service.d.ts +13 -6
- package/dist/access-service.js +89 -72
- package/dist/access-surface-catalog.d.ts +23 -16
- package/dist/access-surface-catalog.js +1 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-token-capabilities.d.ts +2 -1
- package/dist/access-token-capabilities.js +4 -2
- package/dist/action-confidence.d.ts +3 -1
- package/dist/active-memory-bridge.d.ts +3 -1
- package/dist/active-memory-bridge.js +4 -4
- package/dist/active-recall.d.ts +4 -1
- package/dist/active-recall.js +23 -13
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/{auto-sync-AAMTVZMK.js → auto-sync-UZG3XQZ5.js} +14 -8
- package/dist/{auto-sync-AAMTVZMK.js.map → auto-sync-UZG3XQZ5.js.map} +1 -1
- package/dist/behavior-learner.d.ts +3 -1
- package/dist/behavior-signals.d.ts +3 -1
- package/dist/bootstrap.d.ts +12 -7
- package/dist/bootstrap.js +2 -2
- package/dist/bounded-jsonl-state.d.ts +54 -0
- package/dist/bounded-jsonl-state.js +10 -0
- package/dist/boxes.js +2 -2
- package/dist/briefing.d.ts +5 -2
- package/dist/briefing.js +34 -24
- package/dist/buffer-surprise-report.d.ts +3 -1
- package/dist/buffer.d.ts +60 -2
- package/dist/buffer.js +3 -3
- package/dist/bulk-import/index.d.ts +5 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +6 -6
- package/dist/capabilities.d.ts +7 -7
- package/dist/capabilities.js +1 -1
- package/dist/{capsule-crypto-CZJSLEFG.js → capsule-crypto-YO5QJ6L3.js} +3 -3
- package/dist/capsule-crypto-YO5QJ6L3.js.map +1 -0
- package/dist/{catalog-C9444P10.d.ts → catalog-BWqHb5HT.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +3 -1
- package/dist/causal-behavior.js +6 -6
- package/dist/causal-chain.js +4 -4
- package/dist/causal-consolidation.d.ts +3 -1
- package/dist/causal-consolidation.js +43 -34
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +6 -6
- package/dist/causal-trajectory-graph.d.ts +3 -1
- package/dist/causal-trajectory-graph.js +1 -1
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-A3GOMRJG.js → chunk-23L3IXFD.js} +2 -2
- package/dist/chunk-2CGLBUW3.js +15 -0
- package/dist/chunk-2CGLBUW3.js.map +1 -0
- package/dist/{chunk-MRHFJV44.js → chunk-2DQ2XREU.js} +2 -2
- package/dist/{chunk-L2B3EE7B.js → chunk-2QMKMVHH.js} +2 -2
- package/dist/{chunk-VJVNLNDQ.js → chunk-2UFO7X4Q.js} +7 -7
- package/dist/{chunk-2MR3MFQB.js → chunk-2VEOKUPP.js} +3 -3
- package/dist/chunk-2Z24E5W2.js +22 -0
- package/dist/chunk-2Z24E5W2.js.map +1 -0
- package/dist/{chunk-RHOZ5LLO.js → chunk-347WD2LE.js} +2 -2
- package/dist/{chunk-HDTQVNWD.js → chunk-3QAH2S33.js} +3 -3
- package/dist/{chunk-37CTGERM.js → chunk-3WCASNQZ.js} +12 -1
- package/dist/chunk-3WCASNQZ.js.map +1 -0
- package/dist/{chunk-LRNMRXJO.js → chunk-3Y224NYC.js} +3 -3
- package/dist/{chunk-3IY64MV6.js → chunk-44XZ75OQ.js} +44 -10
- package/dist/chunk-44XZ75OQ.js.map +1 -0
- package/dist/{chunk-VFSP73LP.js → chunk-45GF7Y3V.js} +2 -2
- package/dist/{chunk-K7LOWSLU.js → chunk-4BJQODZF.js} +2479 -1520
- package/dist/chunk-4BJQODZF.js.map +1 -0
- package/dist/{chunk-JREB6UFH.js → chunk-57OWKFUQ.js} +17 -6
- package/dist/chunk-57OWKFUQ.js.map +1 -0
- package/dist/{chunk-OEHCMALU.js → chunk-5I4M26Q7.js} +5 -5
- package/dist/{chunk-2AZXIZEN.js → chunk-5Q7EVV4X.js} +6 -6
- package/dist/{chunk-LC7OODWZ.js → chunk-5SB7SC2G.js} +80 -49
- package/dist/chunk-5SB7SC2G.js.map +1 -0
- package/dist/{chunk-PUBTHW5O.js → chunk-6DRPPQEJ.js} +2 -2
- package/dist/{chunk-NWTGD4AN.js → chunk-6KIQT7RG.js} +10 -9
- package/dist/chunk-6KIQT7RG.js.map +1 -0
- package/dist/{chunk-FDCTQWLW.js → chunk-6O22TZSB.js} +3 -3
- package/dist/{chunk-ZQ7UBUZ6.js → chunk-6QYST5XN.js} +6 -6
- package/dist/{chunk-W4PGTAS2.js → chunk-6WAFYNVT.js} +3 -3
- package/dist/chunk-6ZMAMSHS.js +20 -0
- package/dist/chunk-6ZMAMSHS.js.map +1 -0
- package/dist/{chunk-R5VAVVHP.js → chunk-72A4L5JJ.js} +2 -2
- package/dist/{chunk-X64YLC24.js → chunk-72VAXGEI.js} +5 -13
- package/dist/chunk-72VAXGEI.js.map +1 -0
- package/dist/{chunk-IKQTFQMI.js → chunk-755Q3DGF.js} +22 -3
- package/dist/chunk-755Q3DGF.js.map +1 -0
- package/dist/{chunk-D7FOKIY5.js → chunk-7AMFUATK.js} +12 -9
- package/dist/{chunk-D7FOKIY5.js.map → chunk-7AMFUATK.js.map} +1 -1
- package/dist/{chunk-BFVEEB7W.js → chunk-7ON2JW73.js} +57 -22
- package/dist/chunk-7ON2JW73.js.map +1 -0
- package/dist/chunk-7RNBVZZO.js +270 -0
- package/dist/chunk-7RNBVZZO.js.map +1 -0
- package/dist/{chunk-3FAMU5TX.js → chunk-A6USBZTO.js} +2 -2
- package/dist/{chunk-ZHIVCODT.js → chunk-A72SWTWW.js} +7 -7
- package/dist/{chunk-FC77VUX5.js → chunk-A7Q43EUZ.js} +2 -2
- package/dist/{chunk-UJBESW6X.js → chunk-AE7WMV4V.js} +7 -7
- package/dist/{chunk-J2HSAU72.js → chunk-AIK5W3IW.js} +29 -1
- package/dist/chunk-AIK5W3IW.js.map +1 -0
- package/dist/{chunk-A5UXZRRM.js → chunk-AJ7QCSIS.js} +2 -2
- package/dist/{chunk-FNMFJWBY.js → chunk-ANEUPF6O.js} +5 -5
- package/dist/chunk-AREGMX2J.js +50 -0
- package/dist/chunk-AREGMX2J.js.map +1 -0
- package/dist/chunk-AVPXXV6J.js +448 -0
- package/dist/chunk-AVPXXV6J.js.map +1 -0
- package/dist/{chunk-2A3OXAP2.js → chunk-B7RWBZXW.js} +2 -2
- package/dist/{chunk-QKQYXZVS.js → chunk-BI2OJF6J.js} +1819 -1481
- package/dist/chunk-BI2OJF6J.js.map +1 -0
- package/dist/{chunk-GWTFLF2P.js → chunk-BJMBJZ2Y.js} +59 -59
- package/dist/chunk-BJMBJZ2Y.js.map +1 -0
- package/dist/{chunk-74F5STS4.js → chunk-BLAKS3CP.js} +4 -4
- package/dist/{chunk-M7VGG3ID.js → chunk-BV5WMSIJ.js} +9 -9
- package/dist/{chunk-2BFLDH5F.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-UXKMMNJD.js → chunk-C23BYTJV.js} +6 -6
- package/dist/{chunk-JZHHREBL.js → chunk-C3AKM55W.js} +2 -2
- package/dist/{chunk-RP7YXA67.js → chunk-C5JF6EZ7.js} +2 -2
- package/dist/{chunk-T7Y5KPLN.js → chunk-C6XBRYVD.js} +16 -15
- package/dist/chunk-C6XBRYVD.js.map +1 -0
- package/dist/{chunk-FTYDWKO6.js → chunk-CEN6DW6X.js} +12 -2
- package/dist/chunk-CEN6DW6X.js.map +1 -0
- package/dist/chunk-CGASUJVP.js +421 -0
- package/dist/chunk-CGASUJVP.js.map +1 -0
- package/dist/{chunk-EHCONI6E.js → chunk-CQMEM5CC.js} +2 -2
- package/dist/{chunk-PBNZVPFS.js → chunk-CXZQOVIE.js} +12 -12
- package/dist/chunk-D3V3UMET.js +44 -0
- package/dist/chunk-D3V3UMET.js.map +1 -0
- package/dist/{chunk-7N2RUBAP.js → chunk-DDA47TES.js} +2 -2
- package/dist/{chunk-64SE4X5G.js → chunk-DEBHXHJR.js} +3 -3
- package/dist/{chunk-EHK6KZHK.js → chunk-DNHVPZOD.js} +2 -2
- package/dist/{chunk-437S3G37.js → chunk-DQEMWVMT.js} +2 -2
- package/dist/{chunk-LZZNTPLR.js → chunk-DX3XRGLH.js} +2 -2
- package/dist/chunk-EA2H5LML.js +72 -0
- package/dist/chunk-EA2H5LML.js.map +1 -0
- package/dist/{chunk-INELTPRG.js → chunk-EEC7UJPX.js} +103 -106
- package/dist/chunk-EEC7UJPX.js.map +1 -0
- package/dist/{chunk-KSNVDPDF.js → chunk-EKBNDKDY.js} +21 -20
- package/dist/chunk-EKBNDKDY.js.map +1 -0
- package/dist/{chunk-YF6FMLBT.js → chunk-EQWEIIKQ.js} +64 -34
- package/dist/chunk-EQWEIIKQ.js.map +1 -0
- package/dist/{chunk-DZKHSDOM.js → chunk-ES36HTSC.js} +4 -4
- package/dist/{chunk-TN7THW5U.js → chunk-ET356KSB.js} +2 -2
- package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
- package/dist/{chunk-DMSDUGDM.js → chunk-F7GAIWFA.js} +20 -20
- package/dist/{chunk-G6XXLKC5.js → chunk-FFPJINJE.js} +6 -6
- package/dist/chunk-FMLKOL2Z.js +636 -0
- package/dist/chunk-FMLKOL2Z.js.map +1 -0
- package/dist/chunk-FQC3DHH2.js +20 -0
- package/dist/chunk-FQC3DHH2.js.map +1 -0
- package/dist/{chunk-G4CN3ZXL.js → chunk-FUTF72MJ.js} +15 -15
- package/dist/chunk-GCASGYIO.js +71 -0
- package/dist/chunk-GCASGYIO.js.map +1 -0
- package/dist/{chunk-HF77M34J.js → chunk-GFPZS3F5.js} +8 -8
- package/dist/{chunk-BCDKBDSY.js → chunk-GNVZQ5JN.js} +99 -41
- package/dist/chunk-GNVZQ5JN.js.map +1 -0
- package/dist/{chunk-G6NKALRN.js → chunk-H4WG3UQZ.js} +2 -2
- package/dist/{chunk-UDQUSU27.js → chunk-HNZKVLAN.js} +2 -2
- package/dist/{chunk-5EZXHU36.js → chunk-HYQJQGD3.js} +2 -2
- package/dist/{chunk-PLQE6MJA.js → chunk-IFH6LWTO.js} +50 -8
- package/dist/chunk-IFH6LWTO.js.map +1 -0
- package/dist/{chunk-RULE4VG5.js → chunk-ILGC6JH6.js} +21 -6
- package/dist/chunk-ILGC6JH6.js.map +1 -0
- package/dist/chunk-IUM3VSHI.js +113 -0
- package/dist/chunk-IUM3VSHI.js.map +1 -0
- package/dist/{chunk-TRWPCR6P.js → chunk-JECBQBEX.js} +3 -3
- package/dist/{chunk-E6CBU7XP.js → chunk-JYIFGGEM.js} +2 -2
- package/dist/{chunk-VA4WSW54.js → chunk-JYIJNNN3.js} +3 -3
- package/dist/{chunk-L5HJQC36.js → chunk-K2TDK7GG.js} +3 -3
- package/dist/{chunk-KDXVOFYY.js → chunk-KAVBJSBQ.js} +4 -4
- package/dist/{chunk-BS4SGLWV.js → chunk-KF5EUVKQ.js} +16 -6
- package/dist/chunk-KF5EUVKQ.js.map +1 -0
- package/dist/chunk-KFZY2OFH.js +42 -0
- package/dist/chunk-KFZY2OFH.js.map +1 -0
- package/dist/{chunk-4OKLXWDZ.js → chunk-KNB7IBBU.js} +2 -2
- package/dist/{chunk-QLULYKWZ.js → chunk-KSXJOC4F.js} +2 -2
- package/dist/{chunk-2S6QHZGJ.js → chunk-L2DPF4DF.js} +1 -1
- package/dist/{chunk-JI5AVXYO.js → chunk-LEPOP46W.js} +6 -6
- package/dist/{chunk-O7BBFJLP.js → chunk-LTAVSOZW.js} +2 -2
- package/dist/{chunk-E3VODCC3.js → chunk-LUDXM7MD.js} +14 -2
- package/dist/{chunk-E3VODCC3.js.map → chunk-LUDXM7MD.js.map} +1 -1
- package/dist/{chunk-2IZAGAJR.js → chunk-LULR4IUW.js} +3 -3
- package/dist/{chunk-QQGPUKMT.js → chunk-MC5Q3J7S.js} +398 -7
- package/dist/chunk-MC5Q3J7S.js.map +1 -0
- package/dist/{chunk-WMWVO45V.js → chunk-MC6XO7T4.js} +2 -2
- package/dist/chunk-MKQBXQKU.js +107 -0
- package/dist/chunk-MKQBXQKU.js.map +1 -0
- package/dist/{chunk-7PND4PUC.js → chunk-MMGGVZ4Q.js} +29 -9
- package/dist/{chunk-7PND4PUC.js.map → chunk-MMGGVZ4Q.js.map} +1 -1
- package/dist/{chunk-D6RIFG4O.js → chunk-MNB5RMAY.js} +2 -2
- package/dist/{chunk-Q5WG43OP.js → chunk-MYFQ3ED4.js} +7 -7
- package/dist/{chunk-V3UE5I5F.js → chunk-MYVPLJOO.js} +2 -2
- package/dist/chunk-NINSR6LX.js +83 -0
- package/dist/chunk-NINSR6LX.js.map +1 -0
- package/dist/{chunk-MTWKDOVO.js → chunk-NLE6TSLG.js} +2 -2
- package/dist/{chunk-OAZVR2BV.js → chunk-OGCAYLNA.js} +8 -6
- package/dist/{chunk-OAZVR2BV.js.map → chunk-OGCAYLNA.js.map} +1 -1
- package/dist/{chunk-DBRYEIGY.js → chunk-OJP3N7UK.js} +2 -2
- package/dist/{chunk-VDW4VU7B.js → chunk-OQJIB32H.js} +28 -23
- package/dist/chunk-OQJIB32H.js.map +1 -0
- package/dist/{chunk-SMX5267P.js → chunk-OZKOPQCM.js} +2 -2
- package/dist/{chunk-JCK7V6SN.js → chunk-P65YJEEL.js} +2 -2
- package/dist/{chunk-MTR7BZQN.js → chunk-PBGWYM3H.js} +3 -3
- package/dist/chunk-PIG4WJFQ.js +87 -0
- package/dist/chunk-PIG4WJFQ.js.map +1 -0
- package/dist/chunk-PJSK6OJM.js +201 -0
- package/dist/chunk-PJSK6OJM.js.map +1 -0
- package/dist/{chunk-OVJ2HIPE.js → chunk-PMUD7ERF.js} +158 -125
- package/dist/chunk-PMUD7ERF.js.map +1 -0
- package/dist/chunk-PQVCH2AE.js +76 -0
- package/dist/chunk-PQVCH2AE.js.map +1 -0
- package/dist/{chunk-AXTXN4T6.js → chunk-PWFCHOB3.js} +2 -2
- package/dist/{chunk-FDPZVY6D.js → chunk-QFN4U7AG.js} +2 -2
- package/dist/{chunk-K2ZLHESQ.js → chunk-QIEUU4UK.js} +2 -2
- package/dist/{chunk-DYP3YYJJ.js → chunk-QJAQNXWI.js} +39 -5
- package/dist/chunk-QJAQNXWI.js.map +1 -0
- package/dist/{chunk-3D6AFGQR.js → chunk-QVT3E4CE.js} +7 -7
- package/dist/{chunk-FIJUY7GG.js → chunk-R26ZMXR2.js} +23 -23
- package/dist/{chunk-FIJUY7GG.js.map → chunk-R26ZMXR2.js.map} +1 -1
- package/dist/chunk-R3DJVOSM.js +34 -0
- package/dist/chunk-R3DJVOSM.js.map +1 -0
- package/dist/{chunk-SFQ6QNL7.js → chunk-R6YJI3HE.js} +2 -1
- package/dist/{chunk-5CJVLG3H.js → chunk-RFDD3B7W.js} +5 -5
- package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
- package/dist/chunk-ROI7BK7H.js +88 -0
- package/dist/chunk-ROI7BK7H.js.map +1 -0
- package/dist/{chunk-FNZQGN76.js → chunk-S2BBISHU.js} +4 -4
- package/dist/{chunk-IALLX7EE.js → chunk-S2FSBU4H.js} +3 -3
- package/dist/{chunk-BFPETA3S.js → chunk-SCCO46KZ.js} +3 -2
- package/dist/chunk-SCCO46KZ.js.map +1 -0
- package/dist/chunk-SK7AMF2J.js +168 -0
- package/dist/chunk-SK7AMF2J.js.map +1 -0
- package/dist/{chunk-KSBEEMQF.js → chunk-TG6IHVE2.js} +151 -6
- package/dist/chunk-TG6IHVE2.js.map +1 -0
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-DPAENM7O.js → chunk-U3ZAVRP3.js} +2 -2
- package/dist/{chunk-ODPLEWB6.js → chunk-UFGFMWAD.js} +47 -17
- package/dist/chunk-UFGFMWAD.js.map +1 -0
- package/dist/{chunk-4KJLYTLS.js → chunk-V57NLO5P.js} +2 -2
- package/dist/{chunk-FLVL4L3L.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-AJLLIIML.js → chunk-W4FBGYGK.js} +1 -1
- package/dist/{chunk-TXLGHDHS.js → chunk-W4XJFLAL.js} +53 -32
- package/dist/chunk-W4XJFLAL.js.map +1 -0
- package/dist/{chunk-6SXVCD7W.js → chunk-W7IGLX4G.js} +2 -2
- package/dist/{chunk-KQDNAXOM.js → chunk-WG5HSQ4P.js} +19 -6
- package/dist/chunk-WG5HSQ4P.js.map +1 -0
- package/dist/{chunk-LTJAMRGI.js → chunk-WL5EBRDH.js} +17 -3
- package/dist/chunk-WL5EBRDH.js.map +1 -0
- package/dist/{chunk-KAWTOYAW.js → chunk-WLZYGLJ4.js} +2 -2
- package/dist/{chunk-RO4LQGT3.js → chunk-WON4APQY.js} +4 -4
- package/dist/{chunk-PQVK2S3J.js → chunk-WZFAPHIK.js} +6 -6
- package/dist/{chunk-KQPJLK3X.js → chunk-XL24QQ63.js} +2 -2
- package/dist/{chunk-LZOV7MX7.js → chunk-XQDRKZ7V.js} +6476 -5747
- package/dist/chunk-XQDRKZ7V.js.map +1 -0
- package/dist/{chunk-RVZRYUQH.js → chunk-YROFNEG5.js} +7 -7
- package/dist/{chunk-RAR2BSEM.js → chunk-YV32N67O.js} +1 -1
- package/dist/chunk-YV32N67O.js.map +1 -0
- package/dist/{chunk-PBSAPHHA.js → chunk-YVKF3HEW.js} +1 -1
- package/dist/chunk-YVKF3HEW.js.map +1 -0
- package/dist/{chunk-VRAD2FGO.js → chunk-Z54EM5YZ.js} +12 -12
- package/dist/{chunk-2VN4JAX7.js → chunk-ZOKZIR5K.js} +95 -33
- package/dist/chunk-ZOKZIR5K.js.map +1 -0
- package/dist/{chunk-DCFV7A7H.js → chunk-ZVAYK7GU.js} +101 -91
- package/dist/chunk-ZVAYK7GU.js.map +1 -0
- package/dist/{cli-Cd5fMmhq.d.ts → cli-5tNLVTvJ.d.ts} +28 -12
- package/dist/cli.d.ts +16 -9
- package/dist/cli.js +142 -127
- package/dist/compounding/engine.d.ts +5 -2
- package/dist/compounding/engine.js +36 -26
- package/dist/compounding/preference-consolidator.d.ts +3 -1
- package/dist/compounding/preference-consolidator.js +1 -1
- package/dist/compression-optimizer.d.ts +3 -1
- package/dist/config-qmd.d.ts +8 -0
- package/dist/config-qmd.js +20 -0
- package/dist/config-qmd.js.map +1 -0
- package/dist/config.d.ts +3 -1
- package/dist/config.js +15 -10
- package/dist/connectors/codex-materialize-runner.d.ts +3 -1
- package/dist/connectors/codex-materialize-runner.js +36 -26
- package/dist/connectors/codex-materialize.d.ts +3 -1
- package/dist/connectors/codex-materialize.js +2 -2
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.js +41 -32
- package/dist/consolidation-provenance-check.d.ts +5 -2
- package/dist/consolidation-undo.d.ts +5 -2
- package/dist/contradiction/index.d.ts +5 -2
- package/dist/contradiction/index.js +10 -4
- package/dist/{contradiction-scan-J57T5QV7.js → contradiction-scan-RJBABNRH.js} +4 -4
- package/dist/contradiction-scan-RJBABNRH.js.map +1 -0
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/backend.js +5 -5
- package/dist/conversation-index/chunker.d.ts +3 -1
- package/dist/conversation-index/cleanup.js +2 -2
- package/dist/conversation-index/faiss-adapter.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.js +2 -2
- package/dist/conversation-index/indexer.d.ts +3 -1
- package/dist/conversation-index/indexer.js +2 -2
- package/dist/conversation-index/search.d.ts +3 -1
- package/dist/conversation-index/search.js +2 -2
- package/dist/cross-namespace-budget.d.ts +45 -1
- package/dist/cross-namespace-budget.js +5 -3
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +3 -1
- package/dist/day-summary.js +3 -3
- package/dist/delinearize.d.ts +3 -1
- package/dist/direct-answer-wiring.d.ts +3 -1
- package/dist/direct-answer.d.ts +3 -1
- package/dist/{dreams-ledger-6UODQOX6.js → dreams-ledger-567VKVOU.js} +4 -2
- package/dist/dreams-ledger-567VKVOU.js.map +1 -0
- package/dist/embedding-fallback.d.ts +3 -1
- package/dist/embedding-fallback.js +3 -3
- package/dist/enrichment/index.d.ts +3 -1
- package/dist/entity-retrieval.d.ts +5 -2
- package/dist/entity-retrieval.js +35 -26
- package/dist/entity-schema.d.ts +3 -1
- package/dist/explicit-capture.d.ts +13 -8
- package/dist/explicit-capture.js +7 -3
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-faithfulness.js +5 -5
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-telemetry.js +2 -2
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge-training.js +2 -2
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-judge.js +5 -5
- package/dist/extraction.d.ts +3 -1
- package/dist/extraction.js +13 -12
- package/dist/faithfulness-config.js +3 -2
- package/dist/fallback-llm.d.ts +3 -1
- package/dist/fallback-llm.js +4 -4
- package/dist/{first-start-migration-TI67YMLG.js → first-start-migration-CSRHCJIQ.js} +2 -2
- package/dist/{forget-CQCLB5LB.js → forget-HRPLVB3W.js} +5 -5
- package/dist/graph-dashboard-diff.d.ts +3 -1
- package/dist/graph-dashboard-key.d.ts +3 -1
- package/dist/graph-dashboard-parser.d.ts +3 -1
- package/dist/{graph-edge-decay-IOGBBAGC.js → graph-edge-decay-Z6ENALU2.js} +3 -3
- package/dist/graph-edge-decay-Z6ENALU2.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +3 -1
- package/dist/graph-snapshot.d.ts +3 -1
- package/dist/graph-snapshot.js +2 -2
- package/dist/graph.d.ts +3 -1
- package/dist/graph.js +1 -1
- package/dist/identity-continuity.d.ts +1 -2
- package/dist/importance.d.ts +3 -1
- package/dist/importers/index.d.ts +3 -1
- package/dist/in-flight-reads.d.ts +3 -1
- package/dist/index.d.ts +473 -464
- package/dist/index.js +287 -239
- package/dist/intent.d.ts +3 -1
- package/dist/lcm/archive.js +2 -2
- package/dist/lcm/engine.d.ts +3 -1
- package/dist/lcm/engine.js +6 -6
- package/dist/lcm/index.d.ts +3 -1
- package/dist/lcm/index.js +13 -13
- package/dist/lcm/schema.js +2 -2
- package/dist/lcm/summarizer.js +3 -3
- package/dist/lcm/tools.d.ts +3 -1
- package/dist/lifecycle.d.ts +3 -1
- package/dist/live-connectors-runner.d.ts +3 -1
- package/dist/local-llm.d.ts +5 -2
- package/dist/local-llm.js +3 -3
- package/dist/local-model-endpoint.d.ts +3 -1
- package/dist/logger.d.ts +3 -1
- package/dist/logger.js +7 -3
- package/dist/maintenance/archive-observations.js +2 -2
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +35 -25
- package/dist/maintenance/migrate-observations.js +3 -3
- package/dist/maintenance/observation-ledger-utils.js +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +102 -1
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +37 -25
- package/dist/maintenance/rebuild-memory-projection.js +38 -28
- package/dist/maintenance/rebuild-observations.js +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +22 -15
- package/dist/memory-action-policy.d.ts +3 -1
- package/dist/memory-cache.d.ts +3 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +25 -2
- package/dist/memory-lifecycle-ledger-utils.js +11 -1
- package/dist/memory-projection-store.d.ts +3 -1
- package/dist/memory-projection-store.js +2 -2
- package/dist/memory-provenance.d.ts +3 -1
- package/dist/memory-worth-outcomes.d.ts +5 -2
- package/dist/model-registry.js +2 -2
- package/dist/models-json.d.ts +3 -1
- package/dist/models-json.js +2 -2
- package/dist/namespaces/migrate.d.ts +6 -3
- package/dist/namespaces/migrate.js +51 -42
- package/dist/namespaces/principal.d.ts +27 -2
- package/dist/namespaces/principal.js +6 -2
- package/dist/namespaces/search.d.ts +16 -2
- package/dist/namespaces/search.js +24 -20
- package/dist/namespaces/storage.d.ts +24 -3
- package/dist/namespaces/storage.js +35 -27
- package/dist/native-knowledge.d.ts +3 -1
- package/dist/native-knowledge.js +2 -2
- package/dist/negative.js +2 -2
- package/dist/offline-sync-exclude-globs.d.ts +13 -0
- package/dist/offline-sync-exclude-globs.js +10 -0
- package/dist/offline-sync-exclude-globs.js.map +1 -0
- package/dist/offline-sync-impression-drain.d.ts +78 -0
- package/dist/offline-sync-impression-drain.js +37 -0
- package/dist/offline-sync-impression-drain.js.map +1 -0
- package/dist/offline-sync.js +4 -2
- package/dist/operator-toolkit.d.ts +5 -2
- package/dist/operator-toolkit.js +69 -54
- package/dist/orchestration/compression-guideline-coordinator.d.ts +5 -2
- package/dist/orchestration/compression-guideline-coordinator.js +3 -3
- package/dist/orchestration/maintenance.d.ts +121 -2
- package/dist/orchestration/maintenance.js +44 -31
- package/dist/{orchestrator-Bp_jeBHK.d.ts → orchestrator-CQJ8U7En.d.ts} +85 -79
- package/dist/orchestrator.d.ts +13 -8
- package/dist/orchestrator.js +194 -177
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-BAj5bx7g.d.ts → pipeline-Cn-kvYeV.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +3 -1
- package/dist/prioritized-embed.d.ts +19 -0
- package/dist/prioritized-embed.js +8 -0
- package/dist/prioritized-embed.js.map +1 -0
- package/dist/proactive-contention.d.ts +28 -0
- package/dist/proactive-contention.js +8 -0
- package/dist/proactive-contention.js.map +1 -0
- package/dist/profiling.js +2 -2
- package/dist/provenance.d.ts +3 -1
- package/dist/provenance.js +3 -2
- package/dist/{purge-NDWV6WYD.js → purge-IRF47ZTX.js} +3 -3
- package/dist/{qmd-_MDSlj1m.d.ts → qmd-oh9VXz1d.d.ts} +11 -1
- package/dist/qmd-preflight.d.ts +5 -2
- package/dist/qmd-recall-cache.d.ts +3 -1
- package/dist/qmd-status.d.ts +57 -0
- package/dist/qmd-status.js +18 -0
- package/dist/qmd-status.js.map +1 -0
- package/dist/qmd.d.ts +5 -2
- package/dist/qmd.js +7 -3
- package/dist/recall-concurrency-config.d.ts +16 -0
- package/dist/recall-concurrency-config.js +10 -0
- package/dist/recall-concurrency-config.js.map +1 -0
- package/dist/recall-disclosure-escalation.d.ts +3 -1
- package/dist/recall-explain-renderer.d.ts +4 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +26 -0
- package/dist/recall-memory-map.js +18 -0
- package/dist/recall-memory-map.js.map +1 -0
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-planner-llm.js +4 -4
- package/dist/recall-qos.js +2 -2
- package/dist/recall-state.d.ts +163 -2
- package/dist/recall-state.js +6 -3
- package/dist/recall-tag-filter.d.ts +3 -1
- package/dist/recall-timings.d.ts +11 -2
- package/dist/recall-timings.js +3 -1
- package/dist/recall-xray-cli.d.ts +3 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +3 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +3 -1
- package/dist/recall-xray.js +2 -2
- package/dist/relevance.js +3 -3
- package/dist/replay/normalizers/chatgpt.d.ts +3 -1
- package/dist/replay/normalizers/claude.d.ts +3 -1
- package/dist/replay/normalizers/openclaw.d.ts +3 -1
- package/dist/replay/normalizers/shared.d.ts +3 -1
- package/dist/replay/runner.d.ts +3 -1
- package/dist/replay/types.d.ts +3 -1
- package/dist/rerank.d.ts +8 -1
- package/dist/rerank.js +3 -1
- package/dist/resolution-3K27T4VO.js +18 -0
- package/dist/resolution-3K27T4VO.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +3 -1
- package/dist/resolve-provider-secret.js +2 -2
- package/dist/resume-bundles.js +19 -14
- package/dist/retrieval-agents.d.ts +19 -16
- package/dist/retrieval-agents.js +3 -3
- package/dist/retrieval-tiers.d.ts +3 -1
- package/dist/routing/engine.d.ts +3 -1
- package/dist/routing/store.d.ts +3 -1
- package/dist/routing/store.js +2 -2
- package/dist/salvage-envelope.d.ts +18 -0
- package/dist/salvage-envelope.js +15 -0
- package/dist/salvage-envelope.js.map +1 -0
- package/dist/schemas.d.ts +98 -98
- package/dist/scope-profiles-EpJG7yKP.d.ts +30 -0
- package/dist/search/document-scanner.js +3 -2
- package/dist/search/embed-helper.d.ts +3 -1
- package/dist/search/embed-helper.js +3 -3
- package/dist/search/factory.d.ts +3 -1
- package/dist/search/factory.js +18 -16
- package/dist/search/index.d.ts +3 -1
- package/dist/search/index.js +22 -20
- package/dist/search/lancedb-backend.d.ts +3 -1
- package/dist/search/lancedb-backend.js +6 -5
- package/dist/search/meilisearch-backend.d.ts +3 -1
- package/dist/search/meilisearch-backend.js +6 -5
- package/dist/search/noop-backend.d.ts +3 -1
- package/dist/search/orama-backend.d.ts +3 -1
- package/dist/search/orama-backend.js +6 -5
- package/dist/search/port.d.ts +16 -2
- package/dist/search/port.js +1 -1
- package/dist/search/remote-backend.d.ts +3 -1
- package/dist/search/remote-backend.js +3 -3
- package/dist/secure-store/index.d.ts +12 -1
- package/dist/secure-store/index.js +6 -3
- package/dist/{semantic-consolidation-C2m5eHHE.d.ts → semantic-consolidation-DILZEQq3.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +38 -29
- package/dist/semantic-rule-promotion.js +34 -24
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +35 -25
- package/dist/session-observer-bands.d.ts +3 -1
- package/dist/session-observer-state.d.ts +3 -1
- package/dist/session-observer-state.js +2 -2
- package/dist/session-transcript-migration.js +2 -2
- package/dist/shared-context/manager.d.ts +11 -9
- package/dist/shared-context/manager.js +3 -3
- package/dist/signal.d.ts +3 -1
- package/dist/{storage-hr_Y2z5R.d.ts → storage-NIyKYD8g.d.ts} +489 -110
- package/dist/storage-guards.js +2 -2
- package/dist/storage.d.ts +6 -3
- package/dist/storage.js +38 -26
- package/dist/structured-attributes.d.ts +23 -1
- package/dist/structured-attributes.js +7 -1
- package/dist/summarizer.d.ts +3 -1
- package/dist/summarizer.js +11 -11
- package/dist/summary-snapshot.d.ts +3 -1
- package/dist/summary-snapshot.js +2 -2
- package/dist/temporal-index-batch.d.ts +1 -0
- package/dist/temporal-index-batch.js +10 -0
- package/dist/temporal-index-batch.js.map +1 -0
- package/dist/temporal-index-compat.d.ts +279 -1
- package/dist/temporal-index-compat.js +1 -1
- package/dist/temporal-index.d.ts +1 -225
- package/dist/temporal-index.js +35 -3
- package/dist/temporal-supersession.d.ts +5 -2
- package/dist/temporal-supersession.js +2 -2
- package/dist/temporal-timeline-recall.d.ts +3 -1
- package/dist/temporal-validity.d.ts +3 -1
- package/dist/threading.d.ts +3 -1
- package/dist/threading.js +2 -2
- package/dist/tier-migration.d.ts +5 -2
- package/dist/tier-routing.d.ts +3 -1
- package/dist/{tier-stats-KV7IWCJR.js → tier-stats-QEJSPFV2.js} +2 -2
- package/dist/tokens.js +3 -3
- package/dist/topics.d.ts +3 -1
- package/dist/transcript.d.ts +3 -1
- package/dist/transcript.js +2 -2
- package/dist/transfer/backup.js +3 -3
- package/dist/transfer/capsule-export.js +3 -3
- package/dist/transfer/capsule-import.js +3 -3
- package/dist/transfer/types.d.ts +90 -90
- package/dist/trust-score-stage.d.ts +75 -38
- package/dist/trust-score-stage.js +11 -3
- package/dist/trust-score.d.ts +3 -1
- package/dist/{types-Cg8q7W7_.d.ts → types-D_fG2ix8.d.ts} +39 -63
- package/dist/types-continuity.d.ts +52 -0
- package/dist/types-continuity.js +1 -0
- package/dist/types-continuity.js.map +1 -0
- package/dist/types.d.ts +3 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +3 -1
- package/dist/utils/serialize-mutations.d.ts +31 -2
- package/dist/utils/serialize-mutations.js +1 -1
- package/dist/verified-recall.js +36 -26
- package/dist/write-envelope.d.ts +282 -0
- package/dist/write-envelope.js +35 -0
- package/dist/write-envelope.js.map +1 -0
- package/dist/write-quarantine.d.ts +94 -0
- package/dist/write-quarantine.js +11 -0
- package/dist/write-quarantine.js.map +1 -0
- package/dist/write-rate-limiter.d.ts +45 -0
- package/dist/write-rate-limiter.js +9 -0
- package/dist/write-rate-limiter.js.map +1 -0
- package/package.json +37 -2
- package/src/access-admin-ops-surface.ts +17 -7
- package/src/access-boundary.test.ts +28 -0
- package/src/access-boundary.ts +31 -2
- package/src/access-citation.test.ts +72 -0
- package/src/access-citation.ts +139 -0
- package/src/access-errors.ts +21 -0
- package/src/access-fingerprint-parity.test.ts +211 -0
- package/src/access-http-cancellation.test.ts +59 -21
- package/src/access-http.test.ts +90 -0
- package/src/access-http.ts +79 -79
- package/src/access-mcp-cancellation.test.ts +16 -7
- package/src/access-memory-search-fanout.test.ts +220 -0
- package/src/access-memory-search-fanout.ts +168 -0
- package/src/access-observe-quarantine.test.ts +172 -0
- package/src/access-observe-write-surface.ts +137 -11
- package/src/access-operations-batch.ts +2 -0
- package/src/access-recall-concurrency.ts +773 -0
- package/src/access-recall-response.ts +307 -0
- package/src/access-recall-surface.ts +100 -252
- package/src/access-service-coding-write.test.ts +22 -4
- package/src/access-service-health.test.ts +49 -0
- package/src/access-service-namespace.test.ts +486 -8
- package/src/access-service-observe-scope.test.ts +4 -0
- package/src/access-service-recall-concurrency.test.ts +1990 -0
- package/src/access-service.ts +186 -179
- package/src/access-surface-catalog.ts +1 -0
- package/src/access-token-capabilities.ts +16 -9
- package/src/active-recall.test.ts +35 -0
- package/src/active-recall.ts +7 -0
- package/src/bounded-jsonl-state.ts +93 -0
- package/src/buffer-session.test.ts +422 -5
- package/src/buffer-surprise-trigger.test.ts +41 -0
- package/src/buffer.ts +218 -3
- package/src/capabilities-cluster-b.test.ts +1 -0
- package/src/capabilities.ts +5 -6
- package/src/cli.ts +21 -22
- package/src/coding/architecture-surfaces.test.ts +6 -3
- package/src/coding/architecture-surfaces.ts +36 -25
- package/src/coding/decision-surfaces.ts +42 -34
- package/src/compounding/engine.test.ts +5 -1
- package/src/compounding/engine.ts +7 -7
- package/src/config-qmd.ts +89 -0
- package/src/config.test.ts +136 -0
- package/src/config.ts +113 -118
- package/src/connector-provenance-lifecycle.test.ts +4 -4
- package/src/connectors/coerce.test.ts +131 -0
- package/src/connectors/coerce.ts +80 -7
- package/src/contradiction/contradiction.test.ts +10 -6
- package/src/contradiction/resolution.ts +17 -4
- package/src/correction/correction-access-wiring.ts +62 -18
- package/src/cross-namespace-budget.test.ts +35 -0
- package/src/cross-namespace-budget.ts +86 -19
- package/src/explicit-capture.ts +54 -17
- package/src/extraction.ts +2 -3
- package/src/faithfulness-graph-guard.test.ts +16 -69
- package/src/graph-recall.test.ts +31 -0
- package/src/index.ts +22 -2
- package/src/local-llm.ts +4 -6
- package/src/logger.ts +16 -0
- package/src/maintenance/dreams-ledger.ts +100 -49
- package/src/maintenance/rebuild-memory-lifecycle-ledger-cli.ts +77 -0
- package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +373 -9
- package/src/memory-lifecycle-ledger-utils.ts +51 -5
- package/src/namespaces/principal.test.ts +37 -1
- package/src/namespaces/principal.ts +48 -0
- package/src/namespaces/search.test.ts +79 -5
- package/src/namespaces/search.ts +59 -6
- package/src/namespaces/storage.ts +43 -1
- package/src/offline-sync-exclude-globs.ts +58 -0
- package/src/offline-sync-impression-drain.test.ts +316 -0
- package/src/offline-sync-impression-drain.ts +260 -0
- package/src/offline-sync.test.ts +32 -5
- package/src/offline-sync.ts +1 -14
- package/src/operator-toolkit.ts +1 -1
- package/src/orchestration/batch-deindex-flush.test.ts +146 -0
- package/src/orchestration/consolidation-run.ts +96 -85
- package/src/orchestration/extraction-envelope.ts +94 -0
- package/src/orchestration/extraction-persist-promotion.ts +134 -0
- package/src/orchestration/extraction-persist.ts +325 -260
- package/src/orchestration/extraction-run.test.ts +1 -1
- package/src/orchestration/extraction-run.ts +2 -2
- package/src/orchestration/graph-recall-coordinator.ts +18 -7
- package/src/orchestration/lifecycle-policy-coordinator.ts +63 -48
- package/src/orchestration/maintenance.test.ts +2103 -3
- package/src/orchestration/maintenance.ts +574 -2
- package/src/orchestration/namespace-read-fanout.ts +14 -8
- package/src/orchestration/orchestrator-helpers.ts +8 -1
- package/src/orchestration/orchestrator-init.ts +22 -6
- package/src/orchestration/orchestrator-namespace-scope.ts +71 -0
- package/src/orchestration/persistence-index.ts +64 -9
- package/src/orchestration/qmd-result-resolver.ts +27 -0
- package/src/orchestration/recall-entry.ts +34 -19
- package/src/orchestration/recall-internal.ts +207 -79
- package/src/orchestration/recall-rerank-coordinator.ts +229 -82
- package/src/orchestration/recall-result-formatter.ts +76 -20
- package/src/orchestration/recall-search-pipeline.test.ts +70 -0
- package/src/orchestration/recall-search-pipeline.ts +102 -129
- package/src/orchestration/recall-section-coordinator.ts +315 -85
- package/src/orchestration/semantic-consolidation-coordinator.ts +69 -37
- package/src/orchestration/session-context.ts +21 -0
- package/src/orchestration/workspace-ops.test.ts +348 -0
- package/src/orchestration/workspace-ops.ts +168 -34
- package/src/orchestrator-chunked-hash-durability.test.ts +126 -0
- package/src/orchestrator-connector-dedup.test.ts +1061 -40
- package/src/orchestrator-flush.test.ts +155 -39
- package/src/orchestrator-nonchunked-hash-durability.test.ts +121 -0
- package/src/orchestrator-source-attribution.test.ts +9 -9
- package/src/orchestrator.ts +160 -149
- package/src/prioritized-embed.ts +123 -0
- package/src/proactive-contention.test.ts +80 -0
- package/src/proactive-contention.ts +39 -0
- package/src/procedural/procedure-miner.test.ts +19 -14
- package/src/procedural/procedure-miner.ts +44 -13
- package/src/qmd-client.test.ts +111 -1
- package/src/qmd-status.ts +186 -0
- package/src/qmd.ts +47 -47
- package/src/recall-budget-config.test.ts +30 -0
- package/src/recall-cold-deadline.test.ts +149 -0
- package/src/recall-concurrency-config.ts +28 -0
- package/src/recall-memory-map.ts +74 -0
- package/src/recall-rerank-coordinator.test.ts +508 -0
- package/src/recall-state.test.ts +825 -1
- package/src/recall-state.ts +406 -7
- package/src/recall-timings-access.test.ts +41 -0
- package/src/recall-timings.ts +16 -0
- package/src/relay/mission-access.test.ts +5 -5
- package/src/rerank.ts +22 -0
- package/src/retrieval-agents.test.ts +79 -0
- package/src/retrieval-agents.ts +71 -19
- package/src/salvage-envelope.ts +28 -0
- package/src/scopes/scope-plan.test.ts +42 -0
- package/src/scopes/scope-plan.ts +45 -0
- package/src/search/port.ts +13 -0
- package/src/secure-store/index.ts +1 -0
- package/src/secure-store/secure-fs.ts +48 -0
- package/src/secure-store/secure-store.test.ts +40 -0
- package/src/semantic-rule-promotion.ts +13 -4
- package/src/storage/content-hash-index.ts +655 -0
- package/src/storage/entity-timeline.ts +473 -0
- package/src/storage/memory-lifecycle-ledger-access.ts +603 -0
- package/src/storage/secure-line-reader.test.ts +197 -0
- package/src/storage/secure-line-reader.ts +181 -3
- package/src/storage-append-header-sniff.test.ts +195 -0
- package/src/storage-behavior-signals-cache.test.ts +237 -0
- package/src/storage-contract/cache-coherence.test.ts +96 -1
- package/src/storage-contract/content-hash.test.ts +47 -2
- package/src/storage-fact-hash-index-defer.test.ts +1200 -0
- package/src/storage-memory-lifecycle-ledger.test.ts +1146 -3
- package/src/storage.ts +882 -890
- package/src/structured-attributes.ts +52 -0
- package/src/temporal-index-batch.ts +112 -0
- package/src/temporal-index.test.ts +193 -0
- package/src/temporal-index.ts +49 -53
- package/src/testing/lifecycle-matrix.test.ts +212 -0
- package/src/testing/lifecycle-matrix.ts +271 -0
- package/src/testing/orchestrator-lite.ts +236 -0
- package/src/testing/subjects/dreams-ledger.test.ts +67 -0
- package/src/testing/subjects/extraction-lifecycle.test.ts +442 -0
- package/src/testing/subjects/lifecycle-ledger.test.ts +93 -0
- package/src/testing/subjects/recall-budget.test.ts +461 -0
- package/src/testing/subjects/serialized-write-chain.test.ts +224 -0
- package/src/trust-score-stage.test.ts +154 -0
- package/src/trust-score-stage.ts +216 -53
- package/src/types-continuity.ts +57 -0
- package/src/types.ts +51 -77
- package/src/utils/path-containment.test.ts +75 -0
- package/src/utils/path-containment.ts +76 -0
- package/src/utils/serialize-mutations.test.ts +122 -0
- package/src/utils/serialize-mutations.ts +68 -3
- package/src/wearables/memory-gen.test.ts +31 -9
- package/src/wearables/memory-gen.ts +95 -55
- package/src/wearables/pipeline.test.ts +10 -7
- package/src/wearables/service.test.ts +6 -8
- package/src/wearables/service.ts +2 -2
- package/src/write-envelope.extension.test.ts +111 -0
- package/src/write-envelope.test.ts +683 -0
- package/src/write-envelope.ts +902 -0
- package/src/write-quarantine.test.ts +245 -0
- package/src/write-quarantine.ts +290 -0
- package/src/write-rate-limiter.test.ts +105 -0
- package/src/write-rate-limiter.ts +135 -0
- package/src/write-sealed-parity.test.ts +204 -0
- package/dist/chunk-2VN4JAX7.js.map +0 -1
- package/dist/chunk-37CTGERM.js.map +0 -1
- package/dist/chunk-3IY64MV6.js.map +0 -1
- package/dist/chunk-BCDKBDSY.js.map +0 -1
- package/dist/chunk-BFPETA3S.js.map +0 -1
- package/dist/chunk-BFVEEB7W.js.map +0 -1
- package/dist/chunk-BS4SGLWV.js.map +0 -1
- package/dist/chunk-DCFV7A7H.js.map +0 -1
- package/dist/chunk-DYP3YYJJ.js.map +0 -1
- package/dist/chunk-E5BK6CGV.js +0 -335
- package/dist/chunk-E5BK6CGV.js.map +0 -1
- package/dist/chunk-FTYDWKO6.js.map +0 -1
- package/dist/chunk-GWTFLF2P.js.map +0 -1
- package/dist/chunk-IKQTFQMI.js.map +0 -1
- package/dist/chunk-INELTPRG.js.map +0 -1
- package/dist/chunk-J2HSAU72.js.map +0 -1
- package/dist/chunk-JREB6UFH.js.map +0 -1
- package/dist/chunk-K7LOWSLU.js.map +0 -1
- package/dist/chunk-KQDNAXOM.js.map +0 -1
- package/dist/chunk-KSBEEMQF.js.map +0 -1
- package/dist/chunk-KSNVDPDF.js.map +0 -1
- package/dist/chunk-LC7OODWZ.js.map +0 -1
- package/dist/chunk-LTJAMRGI.js.map +0 -1
- package/dist/chunk-LZOV7MX7.js.map +0 -1
- package/dist/chunk-NWTGD4AN.js.map +0 -1
- package/dist/chunk-ODPLEWB6.js.map +0 -1
- package/dist/chunk-OVJ2HIPE.js.map +0 -1
- package/dist/chunk-PBSAPHHA.js.map +0 -1
- package/dist/chunk-PHK3HARR.js +0 -32
- package/dist/chunk-PHK3HARR.js.map +0 -1
- package/dist/chunk-PLQE6MJA.js.map +0 -1
- package/dist/chunk-QKQYXZVS.js.map +0 -1
- package/dist/chunk-QQGPUKMT.js.map +0 -1
- package/dist/chunk-RANHFI3P.js +0 -8
- package/dist/chunk-RANHFI3P.js.map +0 -1
- package/dist/chunk-RAR2BSEM.js.map +0 -1
- package/dist/chunk-RULE4VG5.js.map +0 -1
- package/dist/chunk-SVOZFLIQ.js +0 -16
- package/dist/chunk-SVOZFLIQ.js.map +0 -1
- package/dist/chunk-T7Y5KPLN.js.map +0 -1
- package/dist/chunk-TXLGHDHS.js.map +0 -1
- package/dist/chunk-VDW4VU7B.js.map +0 -1
- package/dist/chunk-VSMRDBFT.js +0 -17
- package/dist/chunk-VSMRDBFT.js.map +0 -1
- package/dist/chunk-X64YLC24.js.map +0 -1
- package/dist/chunk-XDSXEKYK.js +0 -118
- package/dist/chunk-XDSXEKYK.js.map +0 -1
- package/dist/chunk-YF6FMLBT.js.map +0 -1
- package/dist/resolution-VH4NGENZ.js +0 -12
- /package/dist/{capsule-crypto-CZJSLEFG.js.map → access-citation.js.map} +0 -0
- /package/dist/{contradiction-scan-J57T5QV7.js.map → access-memory-search-fanout.js.map} +0 -0
- /package/dist/{dreams-ledger-6UODQOX6.js.map → access-recall-concurrency.js.map} +0 -0
- /package/dist/{graph-edge-decay-IOGBBAGC.js.map → access-recall-response.js.map} +0 -0
- /package/dist/{resolution-VH4NGENZ.js.map → bounded-jsonl-state.js.map} +0 -0
- /package/dist/{chunk-A3GOMRJG.js.map → chunk-23L3IXFD.js.map} +0 -0
- /package/dist/{chunk-MRHFJV44.js.map → chunk-2DQ2XREU.js.map} +0 -0
- /package/dist/{chunk-L2B3EE7B.js.map → chunk-2QMKMVHH.js.map} +0 -0
- /package/dist/{chunk-VJVNLNDQ.js.map → chunk-2UFO7X4Q.js.map} +0 -0
- /package/dist/{chunk-2MR3MFQB.js.map → chunk-2VEOKUPP.js.map} +0 -0
- /package/dist/{chunk-RHOZ5LLO.js.map → chunk-347WD2LE.js.map} +0 -0
- /package/dist/{chunk-HDTQVNWD.js.map → chunk-3QAH2S33.js.map} +0 -0
- /package/dist/{chunk-LRNMRXJO.js.map → chunk-3Y224NYC.js.map} +0 -0
- /package/dist/{chunk-VFSP73LP.js.map → chunk-45GF7Y3V.js.map} +0 -0
- /package/dist/{chunk-OEHCMALU.js.map → chunk-5I4M26Q7.js.map} +0 -0
- /package/dist/{chunk-2AZXIZEN.js.map → chunk-5Q7EVV4X.js.map} +0 -0
- /package/dist/{chunk-PUBTHW5O.js.map → chunk-6DRPPQEJ.js.map} +0 -0
- /package/dist/{chunk-FDCTQWLW.js.map → chunk-6O22TZSB.js.map} +0 -0
- /package/dist/{chunk-ZQ7UBUZ6.js.map → chunk-6QYST5XN.js.map} +0 -0
- /package/dist/{chunk-W4PGTAS2.js.map → chunk-6WAFYNVT.js.map} +0 -0
- /package/dist/{chunk-R5VAVVHP.js.map → chunk-72A4L5JJ.js.map} +0 -0
- /package/dist/{chunk-3FAMU5TX.js.map → chunk-A6USBZTO.js.map} +0 -0
- /package/dist/{chunk-ZHIVCODT.js.map → chunk-A72SWTWW.js.map} +0 -0
- /package/dist/{chunk-FC77VUX5.js.map → chunk-A7Q43EUZ.js.map} +0 -0
- /package/dist/{chunk-UJBESW6X.js.map → chunk-AE7WMV4V.js.map} +0 -0
- /package/dist/{chunk-A5UXZRRM.js.map → chunk-AJ7QCSIS.js.map} +0 -0
- /package/dist/{chunk-FNMFJWBY.js.map → chunk-ANEUPF6O.js.map} +0 -0
- /package/dist/{chunk-2A3OXAP2.js.map → chunk-B7RWBZXW.js.map} +0 -0
- /package/dist/{chunk-74F5STS4.js.map → chunk-BLAKS3CP.js.map} +0 -0
- /package/dist/{chunk-M7VGG3ID.js.map → chunk-BV5WMSIJ.js.map} +0 -0
- /package/dist/{chunk-2BFLDH5F.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-UXKMMNJD.js.map → chunk-C23BYTJV.js.map} +0 -0
- /package/dist/{chunk-JZHHREBL.js.map → chunk-C3AKM55W.js.map} +0 -0
- /package/dist/{chunk-RP7YXA67.js.map → chunk-C5JF6EZ7.js.map} +0 -0
- /package/dist/{chunk-EHCONI6E.js.map → chunk-CQMEM5CC.js.map} +0 -0
- /package/dist/{chunk-PBNZVPFS.js.map → chunk-CXZQOVIE.js.map} +0 -0
- /package/dist/{chunk-7N2RUBAP.js.map → chunk-DDA47TES.js.map} +0 -0
- /package/dist/{chunk-64SE4X5G.js.map → chunk-DEBHXHJR.js.map} +0 -0
- /package/dist/{chunk-EHK6KZHK.js.map → chunk-DNHVPZOD.js.map} +0 -0
- /package/dist/{chunk-437S3G37.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-LZZNTPLR.js.map → chunk-DX3XRGLH.js.map} +0 -0
- /package/dist/{chunk-DZKHSDOM.js.map → chunk-ES36HTSC.js.map} +0 -0
- /package/dist/{chunk-TN7THW5U.js.map → chunk-ET356KSB.js.map} +0 -0
- /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
- /package/dist/{chunk-DMSDUGDM.js.map → chunk-F7GAIWFA.js.map} +0 -0
- /package/dist/{chunk-G6XXLKC5.js.map → chunk-FFPJINJE.js.map} +0 -0
- /package/dist/{chunk-G4CN3ZXL.js.map → chunk-FUTF72MJ.js.map} +0 -0
- /package/dist/{chunk-HF77M34J.js.map → chunk-GFPZS3F5.js.map} +0 -0
- /package/dist/{chunk-G6NKALRN.js.map → chunk-H4WG3UQZ.js.map} +0 -0
- /package/dist/{chunk-UDQUSU27.js.map → chunk-HNZKVLAN.js.map} +0 -0
- /package/dist/{chunk-5EZXHU36.js.map → chunk-HYQJQGD3.js.map} +0 -0
- /package/dist/{chunk-TRWPCR6P.js.map → chunk-JECBQBEX.js.map} +0 -0
- /package/dist/{chunk-E6CBU7XP.js.map → chunk-JYIFGGEM.js.map} +0 -0
- /package/dist/{chunk-VA4WSW54.js.map → chunk-JYIJNNN3.js.map} +0 -0
- /package/dist/{chunk-L5HJQC36.js.map → chunk-K2TDK7GG.js.map} +0 -0
- /package/dist/{chunk-KDXVOFYY.js.map → chunk-KAVBJSBQ.js.map} +0 -0
- /package/dist/{chunk-4OKLXWDZ.js.map → chunk-KNB7IBBU.js.map} +0 -0
- /package/dist/{chunk-QLULYKWZ.js.map → chunk-KSXJOC4F.js.map} +0 -0
- /package/dist/{chunk-2S6QHZGJ.js.map → chunk-L2DPF4DF.js.map} +0 -0
- /package/dist/{chunk-JI5AVXYO.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-O7BBFJLP.js.map → chunk-LTAVSOZW.js.map} +0 -0
- /package/dist/{chunk-2IZAGAJR.js.map → chunk-LULR4IUW.js.map} +0 -0
- /package/dist/{chunk-WMWVO45V.js.map → chunk-MC6XO7T4.js.map} +0 -0
- /package/dist/{chunk-D6RIFG4O.js.map → chunk-MNB5RMAY.js.map} +0 -0
- /package/dist/{chunk-Q5WG43OP.js.map → chunk-MYFQ3ED4.js.map} +0 -0
- /package/dist/{chunk-V3UE5I5F.js.map → chunk-MYVPLJOO.js.map} +0 -0
- /package/dist/{chunk-MTWKDOVO.js.map → chunk-NLE6TSLG.js.map} +0 -0
- /package/dist/{chunk-DBRYEIGY.js.map → chunk-OJP3N7UK.js.map} +0 -0
- /package/dist/{chunk-SMX5267P.js.map → chunk-OZKOPQCM.js.map} +0 -0
- /package/dist/{chunk-JCK7V6SN.js.map → chunk-P65YJEEL.js.map} +0 -0
- /package/dist/{chunk-MTR7BZQN.js.map → chunk-PBGWYM3H.js.map} +0 -0
- /package/dist/{chunk-AXTXN4T6.js.map → chunk-PWFCHOB3.js.map} +0 -0
- /package/dist/{chunk-FDPZVY6D.js.map → chunk-QFN4U7AG.js.map} +0 -0
- /package/dist/{chunk-K2ZLHESQ.js.map → chunk-QIEUU4UK.js.map} +0 -0
- /package/dist/{chunk-3D6AFGQR.js.map → chunk-QVT3E4CE.js.map} +0 -0
- /package/dist/{chunk-SFQ6QNL7.js.map → chunk-R6YJI3HE.js.map} +0 -0
- /package/dist/{chunk-5CJVLG3H.js.map → chunk-RFDD3B7W.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
- /package/dist/{chunk-FNZQGN76.js.map → chunk-S2BBISHU.js.map} +0 -0
- /package/dist/{chunk-IALLX7EE.js.map → chunk-S2FSBU4H.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-DPAENM7O.js.map → chunk-U3ZAVRP3.js.map} +0 -0
- /package/dist/{chunk-4KJLYTLS.js.map → chunk-V57NLO5P.js.map} +0 -0
- /package/dist/{chunk-FLVL4L3L.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-AJLLIIML.js.map → chunk-W4FBGYGK.js.map} +0 -0
- /package/dist/{chunk-6SXVCD7W.js.map → chunk-W7IGLX4G.js.map} +0 -0
- /package/dist/{chunk-KAWTOYAW.js.map → chunk-WLZYGLJ4.js.map} +0 -0
- /package/dist/{chunk-RO4LQGT3.js.map → chunk-WON4APQY.js.map} +0 -0
- /package/dist/{chunk-PQVK2S3J.js.map → chunk-WZFAPHIK.js.map} +0 -0
- /package/dist/{chunk-KQPJLK3X.js.map → chunk-XL24QQ63.js.map} +0 -0
- /package/dist/{chunk-RVZRYUQH.js.map → chunk-YROFNEG5.js.map} +0 -0
- /package/dist/{chunk-VRAD2FGO.js.map → chunk-Z54EM5YZ.js.map} +0 -0
- /package/dist/{first-start-migration-TI67YMLG.js.map → first-start-migration-CSRHCJIQ.js.map} +0 -0
- /package/dist/{forget-CQCLB5LB.js.map → forget-HRPLVB3W.js.map} +0 -0
- /package/dist/{purge-NDWV6WYD.js.map → purge-IRF47ZTX.js.map} +0 -0
- /package/dist/{tier-stats-KV7IWCJR.js.map → tier-stats-QEJSPFV2.js.map} +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
LifecyclePolicyCoordinator,
|
|
9
|
+
type LifecyclePolicyCoordinatorDeps,
|
|
10
|
+
} from "./lifecycle-policy-coordinator.js";
|
|
11
|
+
import { indexMemoryAsync } from "../temporal-index.js";
|
|
12
|
+
import type { StorageManager } from "../index.js";
|
|
13
|
+
import type { EmbeddingFallback } from "../embedding-fallback.js";
|
|
14
|
+
import type { ExtractionEngine } from "../extraction.js";
|
|
15
|
+
import type { MemoryFile, PluginConfig } from "../types.js";
|
|
16
|
+
|
|
17
|
+
// Regression for the #1911B Cursor finding: the maintenance de-index loops
|
|
18
|
+
// collect removals for a single batch flush. If a LATER iteration throws before
|
|
19
|
+
// the flush, memories already archived/invalidated on disk must still be
|
|
20
|
+
// de-indexed — the flush now lives in a `finally`. runFactArchival is the
|
|
21
|
+
// smallest self-contained loop with this shape; the same finally guard is
|
|
22
|
+
// applied to the consolidation-run INVALIDATE/MERGE and semantic-consolidation
|
|
23
|
+
// archive loops.
|
|
24
|
+
|
|
25
|
+
function makeFact(id: string, path: string, created: string): MemoryFile {
|
|
26
|
+
const memory = {
|
|
27
|
+
path,
|
|
28
|
+
content: `fact ${id}`,
|
|
29
|
+
frontmatter: {
|
|
30
|
+
id,
|
|
31
|
+
category: "fact",
|
|
32
|
+
created,
|
|
33
|
+
tags: ["project/remnic", "shared", `flat-${id}`],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
// Test fixture: MemoryFile carries many optional fields the archival loop
|
|
37
|
+
// never reads; a full literal would be noise. Narrow, deliberate cast.
|
|
38
|
+
return memory as unknown as MemoryFile;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async function temporalDates(memoryDir: string): Promise<Record<string, string[]>> {
|
|
42
|
+
const raw: unknown = JSON.parse(
|
|
43
|
+
await readFile(join(memoryDir, "state", "index_time.json"), "utf8"),
|
|
44
|
+
);
|
|
45
|
+
if (raw && typeof raw === "object" && "dates" in raw) {
|
|
46
|
+
return raw.dates as Record<string, string[]>;
|
|
47
|
+
}
|
|
48
|
+
throw new Error("temporal index missing dates map");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
test("#1911B fact-archival flushes prior de-index entries when a later iteration throws", async () => {
|
|
52
|
+
const memoryDir = await mkdtemp(join(tmpdir(), "remnic-batch-deindex-flush-"));
|
|
53
|
+
try {
|
|
54
|
+
const memA = makeFact("mem-a", "/tmp/mem-a.md", "2020-01-01T09:00:00.000Z");
|
|
55
|
+
const memB = makeFact("mem-b", "/tmp/mem-b.md", "2020-02-02T09:00:00.000Z");
|
|
56
|
+
|
|
57
|
+
// Seed the on-disk temporal index so a successful de-index is observable as
|
|
58
|
+
// the removal of the memory's date bucket.
|
|
59
|
+
await indexMemoryAsync(memoryDir, memA.path, memA.frontmatter.created, memA.frontmatter.tags ?? []);
|
|
60
|
+
await indexMemoryAsync(memoryDir, memB.path, memB.frontmatter.created, memB.frontmatter.tags ?? []);
|
|
61
|
+
|
|
62
|
+
const beforeDates = await temporalDates(memoryDir);
|
|
63
|
+
assert.deepEqual(beforeDates["2020-01-01"], [memA.path]);
|
|
64
|
+
assert.deepEqual(beforeDates["2020-02-02"], [memB.path]);
|
|
65
|
+
|
|
66
|
+
const archived: string[] = [];
|
|
67
|
+
const fakeStorage = {
|
|
68
|
+
// Both memories archive successfully on disk.
|
|
69
|
+
async archiveMemory(memory: MemoryFile): Promise<string> {
|
|
70
|
+
archived.push(memory.frontmatter.id);
|
|
71
|
+
return memory.frontmatter.id;
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
// runFactArchival only calls archiveMemory on the storage; the rest of the
|
|
75
|
+
// StorageManager surface is unused here.
|
|
76
|
+
const storage = fakeStorage as unknown as StorageManager;
|
|
77
|
+
|
|
78
|
+
const embeddingFallback = {
|
|
79
|
+
async removeFromIndex(): Promise<void> {},
|
|
80
|
+
} as unknown as EmbeddingFallback;
|
|
81
|
+
|
|
82
|
+
// Minimal config: the archival loop reads only these fields plus the
|
|
83
|
+
// queryAwareIndexing capability flag. A full PluginConfig literal is noise.
|
|
84
|
+
const config = {
|
|
85
|
+
memoryDir,
|
|
86
|
+
queryAwareIndexingEnabled: true,
|
|
87
|
+
factArchivalAgeDays: 0,
|
|
88
|
+
factArchivalProtectedCategories: [],
|
|
89
|
+
factArchivalMaxImportance: 1,
|
|
90
|
+
factArchivalMaxAccessCount: 1000,
|
|
91
|
+
} as unknown as PluginConfig;
|
|
92
|
+
|
|
93
|
+
const boom = new Error("content-hash removal exploded on a later iteration");
|
|
94
|
+
const deps: LifecyclePolicyCoordinatorDeps = {
|
|
95
|
+
config,
|
|
96
|
+
getStorage: () => storage,
|
|
97
|
+
extraction: {} as unknown as ExtractionEngine,
|
|
98
|
+
embeddingFallback,
|
|
99
|
+
getEffectiveLifecycleThresholds: () => ({
|
|
100
|
+
promoteHeatThreshold: 0,
|
|
101
|
+
staleDecayThreshold: 0,
|
|
102
|
+
archiveDecayThreshold: 0,
|
|
103
|
+
}),
|
|
104
|
+
// Throws for mem-b — the later iteration — after mem-b is already archived
|
|
105
|
+
// AND queued for de-index, but before its content-hash cleanup completes.
|
|
106
|
+
// Asserts the production call passes the target storage instance and the
|
|
107
|
+
// fact-archival context.
|
|
108
|
+
async removeContentHashForMemory(targetStorage, memory, context): Promise<void> {
|
|
109
|
+
assert.equal(
|
|
110
|
+
targetStorage,
|
|
111
|
+
storage,
|
|
112
|
+
"removeContentHashForMemory must receive the target storage instance",
|
|
113
|
+
);
|
|
114
|
+
assert.equal(
|
|
115
|
+
context,
|
|
116
|
+
"fact-archival",
|
|
117
|
+
"removeContentHashForMemory must receive the fact-archival context",
|
|
118
|
+
);
|
|
119
|
+
if (memory.frontmatter.id === "mem-b") throw boom;
|
|
120
|
+
},
|
|
121
|
+
async saveContentHashIndexes(): Promise<void> {},
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const coordinator = new LifecyclePolicyCoordinator(deps);
|
|
125
|
+
|
|
126
|
+
await assert.rejects(
|
|
127
|
+
() => coordinator.runFactArchival([memA, memB]),
|
|
128
|
+
/content-hash removal exploded/,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Both were archived on disk before the failure.
|
|
132
|
+
assert.deepEqual(archived, ["mem-a", "mem-b"]);
|
|
133
|
+
|
|
134
|
+
// Both facts were archived on disk AND queued for de-index — the queue push
|
|
135
|
+
// now precedes the throwing content-hash cleanup — so the finally-path flush
|
|
136
|
+
// must remove BOTH date buckets even though a later iteration threw. This
|
|
137
|
+
// fails on either ordering regression: move the flush out of `finally` and
|
|
138
|
+
// nothing is de-indexed (mem-a fails); move the queue push back after the
|
|
139
|
+
// throwing cleanup and mem-b is never queued (mem-b fails).
|
|
140
|
+
const afterDates = await temporalDates(memoryDir);
|
|
141
|
+
assert.equal(afterDates["2020-01-01"], undefined, "mem-a must be de-indexed via the finally flush");
|
|
142
|
+
assert.equal(afterDates["2020-02-02"], undefined, "mem-b must be de-indexed even though later cleanup threw");
|
|
143
|
+
} finally {
|
|
144
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
145
|
+
}
|
|
146
|
+
});
|
|
@@ -30,7 +30,7 @@ import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
|
30
30
|
import { log } from "../logger.js";
|
|
31
31
|
import { applyCommitmentLedgerLifecycle } from "../commitment-ledger.js";
|
|
32
32
|
import { recordDreamsPhaseRun } from "../maintenance/dreams-ledger.js";
|
|
33
|
-
import {
|
|
33
|
+
import { deindexMemoriesBatchAsync } from "../temporal-index-batch.js";
|
|
34
34
|
import { isActiveMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
|
|
35
35
|
import {
|
|
36
36
|
resolveConsolidationCapabilities,
|
|
@@ -153,80 +153,91 @@ export class ConsolidationRunCoordinator {
|
|
|
153
153
|
? new Map(allMemories.map((m) => [m.frontmatter.id, m]))
|
|
154
154
|
: null;
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
toInvalidate.frontmatter.tags ?? [],
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
case "UPDATE":
|
|
179
|
-
if (item.updatedContent) {
|
|
180
|
-
await storage.updateMemory(
|
|
181
|
-
item.existingId,
|
|
182
|
-
item.updatedContent,
|
|
183
|
-
{
|
|
184
|
-
lineage: [item.existingId],
|
|
185
|
-
},
|
|
186
|
-
);
|
|
187
|
-
memoryItemMutated = true;
|
|
188
|
-
await this.deps.indexPersistedMemory(storage, item.existingId);
|
|
189
|
-
// updateMemory() only changes content/updated/lineage — path, created, and tags
|
|
190
|
-
// are preserved, so the temporal/tag index entry is already correct; no reindex needed.
|
|
191
|
-
}
|
|
192
|
-
break;
|
|
193
|
-
case "MERGE":
|
|
194
|
-
if (item.updatedContent && item.mergeWith) {
|
|
195
|
-
await storage.updateMemory(
|
|
196
|
-
item.existingId,
|
|
197
|
-
item.updatedContent,
|
|
198
|
-
{
|
|
199
|
-
supersedes: item.mergeWith,
|
|
200
|
-
lineage: [item.existingId, item.mergeWith],
|
|
201
|
-
},
|
|
202
|
-
);
|
|
203
|
-
memoryItemMutated = true;
|
|
204
|
-
await this.deps.indexPersistedMemory(storage, item.existingId);
|
|
205
|
-
// updateMemory() only changes content/updated/supersedes/lineage — path, created, and tags
|
|
206
|
-
// are preserved, so the temporal/tag index entry for the survivor is already correct.
|
|
207
|
-
// Capture before invalidation for index cleanup
|
|
208
|
-
const toMergeInvalidate = resolveIndexingCapabilities(config).queryAwareIndexing
|
|
209
|
-
? (memoryLookup?.get(item.mergeWith) ?? null)
|
|
156
|
+
// Collect deindex entries from INVALIDATE/MERGE actions and de-index them in
|
|
157
|
+
// one batch, instead of a full index read-modify-write per memory. The
|
|
158
|
+
// queryAwareIndexing guard is preserved: memoryLookup is null when it is
|
|
159
|
+
// disabled, so toInvalidate/toMergeInvalidate stay null and nothing is
|
|
160
|
+
// collected. The flush runs in `finally` so memories already invalidated on
|
|
161
|
+
// disk are still de-indexed if a later iteration throws; it runs exactly once
|
|
162
|
+
// (normal completion or throw) and any loop error still propagates after it.
|
|
163
|
+
const itemsDeindexBatch: Array<{ path: string; createdAt: string; tags: string[] }> = [];
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
for (const item of result.items) {
|
|
167
|
+
switch (item.action) {
|
|
168
|
+
case "INVALIDATE": {
|
|
169
|
+
// Capture path/frontmatter before invalidation for index cleanup
|
|
170
|
+
const toInvalidate = resolveIndexingCapabilities(config).queryAwareIndexing
|
|
171
|
+
? (memoryLookup?.get(item.existingId) ?? null)
|
|
210
172
|
: null;
|
|
211
|
-
if (await storage.invalidateMemory(item.
|
|
173
|
+
if (await storage.invalidateMemory(item.existingId)) {
|
|
212
174
|
invalidated += 1;
|
|
213
|
-
|
|
214
|
-
await this.deps.embeddingFallback.removeFromIndex(item.
|
|
215
|
-
if (
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
toMergeInvalidate.path,
|
|
222
|
-
toMergeInvalidate.frontmatter.created,
|
|
223
|
-
toMergeInvalidate.frontmatter.tags ?? [],
|
|
224
|
-
);
|
|
175
|
+
memoryItemMutated = true;
|
|
176
|
+
await this.deps.embeddingFallback.removeFromIndex(item.existingId);
|
|
177
|
+
if (toInvalidate?.path && toInvalidate.frontmatter?.created) {
|
|
178
|
+
itemsDeindexBatch.push({
|
|
179
|
+
path: toInvalidate.path,
|
|
180
|
+
createdAt: toInvalidate.frontmatter.created,
|
|
181
|
+
tags: toInvalidate.frontmatter.tags ?? [],
|
|
182
|
+
});
|
|
225
183
|
}
|
|
226
184
|
}
|
|
185
|
+
break;
|
|
227
186
|
}
|
|
228
|
-
|
|
187
|
+
case "UPDATE":
|
|
188
|
+
if (item.updatedContent) {
|
|
189
|
+
await storage.updateMemory(
|
|
190
|
+
item.existingId,
|
|
191
|
+
item.updatedContent,
|
|
192
|
+
{
|
|
193
|
+
lineage: [item.existingId],
|
|
194
|
+
},
|
|
195
|
+
);
|
|
196
|
+
memoryItemMutated = true;
|
|
197
|
+
await this.deps.indexPersistedMemory(storage, item.existingId);
|
|
198
|
+
// updateMemory() only changes content/updated/lineage — path, created, and tags
|
|
199
|
+
// are preserved, so the temporal/tag index entry is already correct; no reindex needed.
|
|
200
|
+
}
|
|
201
|
+
break;
|
|
202
|
+
case "MERGE":
|
|
203
|
+
if (item.updatedContent && item.mergeWith) {
|
|
204
|
+
await storage.updateMemory(
|
|
205
|
+
item.existingId,
|
|
206
|
+
item.updatedContent,
|
|
207
|
+
{
|
|
208
|
+
supersedes: item.mergeWith,
|
|
209
|
+
lineage: [item.existingId, item.mergeWith],
|
|
210
|
+
},
|
|
211
|
+
);
|
|
212
|
+
memoryItemMutated = true;
|
|
213
|
+
await this.deps.indexPersistedMemory(storage, item.existingId);
|
|
214
|
+
// updateMemory() only changes content/updated/supersedes/lineage — path, created, and tags
|
|
215
|
+
// are preserved, so the temporal/tag index entry for the survivor is already correct.
|
|
216
|
+
// Capture before invalidation for index cleanup
|
|
217
|
+
const toMergeInvalidate = resolveIndexingCapabilities(config).queryAwareIndexing
|
|
218
|
+
? (memoryLookup?.get(item.mergeWith) ?? null)
|
|
219
|
+
: null;
|
|
220
|
+
if (await storage.invalidateMemory(item.mergeWith)) {
|
|
221
|
+
invalidated += 1;
|
|
222
|
+
merged += 1;
|
|
223
|
+
await this.deps.embeddingFallback.removeFromIndex(item.mergeWith);
|
|
224
|
+
if (
|
|
225
|
+
toMergeInvalidate?.path &&
|
|
226
|
+
toMergeInvalidate.frontmatter?.created
|
|
227
|
+
) {
|
|
228
|
+
itemsDeindexBatch.push({
|
|
229
|
+
path: toMergeInvalidate.path,
|
|
230
|
+
createdAt: toMergeInvalidate.frontmatter.created,
|
|
231
|
+
tags: toMergeInvalidate.frontmatter.tags ?? [],
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
229
238
|
}
|
|
239
|
+
} finally {
|
|
240
|
+
await deindexMemoriesBatchAsync(config.memoryDir, itemsDeindexBatch);
|
|
230
241
|
}
|
|
231
242
|
|
|
232
243
|
if (result.profileUpdates.length > 0) {
|
|
@@ -292,14 +303,14 @@ export class ConsolidationRunCoordinator {
|
|
|
292
303
|
memoryItemMutated = true;
|
|
293
304
|
log.info(`cleaned ${deletedCommitments.length} expired commitments`);
|
|
294
305
|
if (resolveIndexingCapabilities(config).queryAwareIndexing) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
m.path,
|
|
299
|
-
m.frontmatter.created,
|
|
300
|
-
m.frontmatter.tags ?? [],
|
|
301
|
-
)
|
|
302
|
-
|
|
306
|
+
await deindexMemoriesBatchAsync(
|
|
307
|
+
config.memoryDir,
|
|
308
|
+
deletedCommitments.map((m) => ({
|
|
309
|
+
path: m.path,
|
|
310
|
+
createdAt: m.frontmatter.created,
|
|
311
|
+
tags: m.frontmatter.tags ?? [],
|
|
312
|
+
})),
|
|
313
|
+
);
|
|
303
314
|
}
|
|
304
315
|
}
|
|
305
316
|
|
|
@@ -335,14 +346,14 @@ export class ConsolidationRunCoordinator {
|
|
|
335
346
|
memoryItemMutated = true;
|
|
336
347
|
log.info(`cleaned ${deletedTTL.length} TTL-expired memories`);
|
|
337
348
|
if (resolveIndexingCapabilities(config).queryAwareIndexing) {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
m.path,
|
|
342
|
-
m.frontmatter.created,
|
|
343
|
-
m.frontmatter.tags ?? [],
|
|
344
|
-
)
|
|
345
|
-
|
|
349
|
+
await deindexMemoriesBatchAsync(
|
|
350
|
+
config.memoryDir,
|
|
351
|
+
deletedTTL.map((m) => ({
|
|
352
|
+
path: m.path,
|
|
353
|
+
createdAt: m.frontmatter.created,
|
|
354
|
+
tags: m.frontmatter.tags ?? [],
|
|
355
|
+
})),
|
|
356
|
+
);
|
|
346
357
|
}
|
|
347
358
|
}
|
|
348
359
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import {
|
|
2
|
+
composeMemoryEnvelope,
|
|
3
|
+
TAG_LIMITS,
|
|
4
|
+
type MemoryWriteInput,
|
|
5
|
+
type SealedMemoryEnvelope,
|
|
6
|
+
type WriteContext,
|
|
7
|
+
} from "../write-envelope.js";
|
|
8
|
+
import { normalizeTags } from "../recall-tag-filter.js";
|
|
9
|
+
import { log } from "../logger.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Envelope helpers for the extraction persistence pipeline (issue #1989 PR2).
|
|
13
|
+
*
|
|
14
|
+
* Extraction input is MACHINE-GENERATED: one malformed LLM field must never
|
|
15
|
+
* abort a whole persistence batch that legacy `writeMemory` would have
|
|
16
|
+
* accepted. Every extraction-side compose therefore runs in salvage mode,
|
|
17
|
+
* and every drop is warn-logged (rule 34 — visible, never silent).
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Compose an extraction-side envelope in salvage mode and warn-log any
|
|
22
|
+
* salvage notes. The single compose wrapper for all extraction-persist
|
|
23
|
+
* write sites, so note logging cannot be forgotten at a new site.
|
|
24
|
+
*/
|
|
25
|
+
export function composeSalvagedExtractionEnvelope(
|
|
26
|
+
input: MemoryWriteInput,
|
|
27
|
+
ctx: WriteContext,
|
|
28
|
+
): SealedMemoryEnvelope {
|
|
29
|
+
const envelope = composeMemoryEnvelope(input, ctx, { salvage: true });
|
|
30
|
+
if (envelope.salvageNotes.length > 0) {
|
|
31
|
+
log.warn(`extraction write salvaged invalid fields: ${envelope.salvageNotes.join("; ")}`);
|
|
32
|
+
}
|
|
33
|
+
return envelope;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* System marker tags ("shared-promotion", "<target>-promotion", "chunked")
|
|
38
|
+
* must survive the tag cap — the CLI and stats identify chunked parents and
|
|
39
|
+
* promotions through them (#2014/#2017 review round). Normalize the source
|
|
40
|
+
* tags first (same trim/dedupe salvage would apply), reserve one slot for
|
|
41
|
+
* the marker, and warn when source tags are dropped to make room.
|
|
42
|
+
*/
|
|
43
|
+
export function withReservedMarkerTag(sourceTags: string[], marker: string): string[] {
|
|
44
|
+
// Drop overlong tags BEFORE budgeting (round 3): normalizeTags only
|
|
45
|
+
// trims/dedupes, so a >256-char tag would consume a budget slot here and
|
|
46
|
+
// then be salvage-dropped at compose time — squeezing out a valid later
|
|
47
|
+
// tag for nothing.
|
|
48
|
+
const usable = sourceTags.filter(
|
|
49
|
+
(tag) => typeof tag !== "string" || tag.trim().length <= TAG_LIMITS.maxTagLength,
|
|
50
|
+
);
|
|
51
|
+
const normalized = normalizeTags(usable) ?? [];
|
|
52
|
+
const budget = TAG_LIMITS.maxTags - 1;
|
|
53
|
+
if (normalized.length > budget) {
|
|
54
|
+
log.warn(
|
|
55
|
+
`extraction tags exceed ${budget}+marker cap; keeping the first ${budget} of ${normalized.length} and the ${JSON.stringify(marker)} marker`,
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
const capped = normalized.length > budget ? normalized.slice(0, budget) : normalized;
|
|
59
|
+
return [...capped, marker];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Pure salvage-compose probe: reproduce the SURVIVING entityRef and raw
|
|
64
|
+
* attribute pairs a salvage write of these fields would persist
|
|
65
|
+
* (deterministic, side-effect-free). Returns null when strict envelope
|
|
66
|
+
* preconditions reject (such input never reached a salvage write either) —
|
|
67
|
+
* callers fail open to their raw fields.
|
|
68
|
+
*/
|
|
69
|
+
export function probeSalvageSurvivingFields(input: {
|
|
70
|
+
content: string;
|
|
71
|
+
category: MemoryWriteInput["category"];
|
|
72
|
+
structuredAttributes?: Record<string, string>;
|
|
73
|
+
entityRef?: string;
|
|
74
|
+
}): { entityRef?: string; structuredAttributes?: Record<string, string> } | null {
|
|
75
|
+
try {
|
|
76
|
+
const probe = composeSalvagedExtractionEnvelope(
|
|
77
|
+
{
|
|
78
|
+
content: input.content,
|
|
79
|
+
category: input.category,
|
|
80
|
+
structuredAttributes: input.structuredAttributes,
|
|
81
|
+
entityRef: input.entityRef,
|
|
82
|
+
},
|
|
83
|
+
{ source: "bitemporal-backfill-probe" },
|
|
84
|
+
);
|
|
85
|
+
return {
|
|
86
|
+
entityRef: probe.entityRef,
|
|
87
|
+
structuredAttributes: probe.rawStructuredAttributes
|
|
88
|
+
? { ...probe.rawStructuredAttributes }
|
|
89
|
+
: undefined,
|
|
90
|
+
};
|
|
91
|
+
} catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-promotion gating helpers for the extraction-persist pipeline
|
|
3
|
+
* (extracted from extraction-persist.ts to keep that file under the
|
|
4
|
+
* structural line-count ceiling; issue #1909 / seam 16).
|
|
5
|
+
*
|
|
6
|
+
* Pure decision helpers that answer "may this fact be auto-promoted?" for
|
|
7
|
+
* both scope-profile targets and the server-shared namespace. Behavior is a
|
|
8
|
+
* verbatim move from the closures that previously lived inside
|
|
9
|
+
* `persistExtraction`; `this.deps.*` state is threaded in as explicit
|
|
10
|
+
* parameters so the functions stay free of coordinator instance state.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { StorageManager } from "../index.js";
|
|
14
|
+
import { log } from "../logger.js";
|
|
15
|
+
import { confidenceTier } from "../types.js";
|
|
16
|
+
import {
|
|
17
|
+
resolveNamespaceCapabilities,
|
|
18
|
+
resolveRecallEnhancementCapabilities,
|
|
19
|
+
} from "../capabilities.js";
|
|
20
|
+
import type { MemoryFile, PluginConfig } from "../types.js";
|
|
21
|
+
import type { ResolvedScopeProfilePlan } from "../namespaces/scope-profiles.js";
|
|
22
|
+
|
|
23
|
+
export const confidenceTierOrder = [
|
|
24
|
+
"explicit",
|
|
25
|
+
"implied",
|
|
26
|
+
"inferred",
|
|
27
|
+
"speculative",
|
|
28
|
+
] as const;
|
|
29
|
+
|
|
30
|
+
export function profileAutoPromotionAllows(
|
|
31
|
+
scopeProfileWritePlan: ResolvedScopeProfilePlan | null | undefined,
|
|
32
|
+
category: string,
|
|
33
|
+
confidence: number,
|
|
34
|
+
): boolean {
|
|
35
|
+
if (!scopeProfileWritePlan) return false;
|
|
36
|
+
const actualTier = confidenceTier(confidence);
|
|
37
|
+
const actualRank = confidenceTierOrder.indexOf(actualTier);
|
|
38
|
+
if (actualRank === -1) return false;
|
|
39
|
+
const autoPromote = scopeProfileWritePlan.profile.autoPromote;
|
|
40
|
+
if (!autoPromote.enabled) return false;
|
|
41
|
+
if (!autoPromote.categories.includes(category as any)) return false;
|
|
42
|
+
const minimumRank = confidenceTierOrder.indexOf(autoPromote.minConfidenceTier);
|
|
43
|
+
return minimumRank !== -1 && actualRank <= minimumRank;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function sharedAutoPromotionAllows(
|
|
47
|
+
config: PluginConfig,
|
|
48
|
+
scopeProfileWritePlan: ResolvedScopeProfilePlan | null | undefined,
|
|
49
|
+
category: string,
|
|
50
|
+
confidence: number,
|
|
51
|
+
): boolean {
|
|
52
|
+
if (!scopeProfileWritePlan) {
|
|
53
|
+
const actualTier = confidenceTier(confidence);
|
|
54
|
+
const actualRank = confidenceTierOrder.indexOf(actualTier);
|
|
55
|
+
if (actualRank === -1) return false;
|
|
56
|
+
if (!resolveRecallEnhancementCapabilities(config).autoPromoteToShared) return false;
|
|
57
|
+
if (!config.autoPromoteToSharedCategories.includes(category as any))
|
|
58
|
+
return false;
|
|
59
|
+
const minimumRank = confidenceTierOrder.indexOf(
|
|
60
|
+
config.autoPromoteMinConfidenceTier,
|
|
61
|
+
);
|
|
62
|
+
return minimumRank !== -1 && actualRank <= minimumRank;
|
|
63
|
+
}
|
|
64
|
+
return (
|
|
65
|
+
scopeProfileWritePlan.profile.autoPromote.targets.includes("serverShared") &&
|
|
66
|
+
profileAutoPromotionAllows(scopeProfileWritePlan, category, confidence)
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function shouldPromoteToShared(
|
|
71
|
+
config: PluginConfig,
|
|
72
|
+
scopeProfileWritePlan: ResolvedScopeProfilePlan | null | undefined,
|
|
73
|
+
profileAllowsSharedWrites: boolean,
|
|
74
|
+
storageDirNamespace: (storageDir: string) => string,
|
|
75
|
+
targetStorage: StorageManager,
|
|
76
|
+
category: string,
|
|
77
|
+
confidence: number,
|
|
78
|
+
): boolean {
|
|
79
|
+
if (
|
|
80
|
+
!resolveNamespaceCapabilities(config).namespaces ||
|
|
81
|
+
!profileAllowsSharedWrites ||
|
|
82
|
+
!sharedAutoPromotionAllows(config, scopeProfileWritePlan, category, confidence)
|
|
83
|
+
)
|
|
84
|
+
return false;
|
|
85
|
+
if (
|
|
86
|
+
storageDirNamespace(targetStorage.dir) ===
|
|
87
|
+
config.sharedNamespace
|
|
88
|
+
)
|
|
89
|
+
return false;
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Read the active-copy corpus across BOTH storage tiers (hot + cold).
|
|
95
|
+
*
|
|
96
|
+
* #2016 cold-tier finding: the authoritative content-hash rebuild unions the
|
|
97
|
+
* hot and cold tiers, so `hasFactContentHash()` can report a hit for a
|
|
98
|
+
* fact/procedure whose only active copy was demoted to `cold/`. A promotion or
|
|
99
|
+
* dedup confirmation scan that reads `readAllMemories()` (hot) alone misses
|
|
100
|
+
* that copy, so it either writes a duplicate hot copy or skips a needed
|
|
101
|
+
* temporal backfill. Scanning both tiers keeps the confirmation coherent with
|
|
102
|
+
* the hash index. Cold reads are folded in only when the cold tier is
|
|
103
|
+
* non-empty so hot-only namespaces incur no extra allocation.
|
|
104
|
+
*/
|
|
105
|
+
export async function readActiveMemoriesBothTiers(
|
|
106
|
+
storage: StorageManager,
|
|
107
|
+
): Promise<MemoryFile[]> {
|
|
108
|
+
const [hotMems, coldMems] = await Promise.all([
|
|
109
|
+
storage.readAllMemories(),
|
|
110
|
+
storage.readAllColdMemories(),
|
|
111
|
+
]);
|
|
112
|
+
return coldMems.length === 0 ? hotMems : [...hotMems, ...coldMems];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* PR #2016: after `writeSealedMemory` has made a fact `.md` durable with its
|
|
117
|
+
* fact-hash flush deferred (#1909 batching), a throw in the fallible post-write
|
|
118
|
+
* work (contradiction resolve, indexing, shared promotion, artifact write)
|
|
119
|
+
* would strand the deferred parent hash — the shared fact-hash index on disk
|
|
120
|
+
* would be missing the parent until the next corpus rebuild, letting a peer
|
|
121
|
+
* re-extract a duplicate. Flush the batch save before the error propagates so
|
|
122
|
+
* the durable-hash invariant holds on every path. No-op when dedup is off
|
|
123
|
+
* (`deferred=false` → the write already flushed and the batch saver is a no-op).
|
|
124
|
+
* Best-effort: a flush failure is logged and never masks the original error.
|
|
125
|
+
*/
|
|
126
|
+
export async function flushDeferredFactHashOnFailure(
|
|
127
|
+
saveContentHashIndexes: () => Promise<void>,
|
|
128
|
+
deferred: boolean,
|
|
129
|
+
): Promise<void> {
|
|
130
|
+
if (!deferred) return;
|
|
131
|
+
await saveContentHashIndexes().catch((err) =>
|
|
132
|
+
log.warn(`content-hash flush after post-write failure failed: ${err}`),
|
|
133
|
+
);
|
|
134
|
+
}
|