@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
|
@@ -8,12 +8,14 @@ import {
|
|
|
8
8
|
Orchestrator,
|
|
9
9
|
} from "./orchestrator.js";
|
|
10
10
|
import { ExtractionQueueCoordinator } from "./orchestration/extraction-queue-coordinator.js";
|
|
11
|
+
import { SmartBuffer } from "./buffer.js";
|
|
11
12
|
import { parseConfig } from "./config.js";
|
|
12
13
|
import { stableHash } from "./coding/git-context.js";
|
|
13
|
-
import type { BufferTurn } from "./types.js";
|
|
14
|
+
import type { BufferState, BufferTurn } from "./types.js";
|
|
14
15
|
import type { ImportTurn } from "./bulk-import/types.js";
|
|
15
16
|
import { namespaceIdentityToken } from "./namespaces/identity.js";
|
|
16
17
|
import { readNamespaceMaintenanceStatuses } from "./maintenance/namespace-planner.js";
|
|
18
|
+
import { stubPersistExtraction } from "./testing/orchestrator-lite.js";
|
|
17
19
|
|
|
18
20
|
function makeTurn(sessionKey: string, content: string): BufferTurn {
|
|
19
21
|
return {
|
|
@@ -144,6 +146,140 @@ test("flushSession waits for queued extraction task completion", async () => {
|
|
|
144
146
|
assert.equal(flushSettled, true);
|
|
145
147
|
});
|
|
146
148
|
|
|
149
|
+
test("flushSession flushes the pending debounced buffer save before extraction, so keep_buffering turns survive a failed/timed-out extraction (issue #1909, PR #2016)", async () => {
|
|
150
|
+
// Regression: in steady-state debounced buffering a `keep_buffering` turn only
|
|
151
|
+
// SCHEDULES a trailing-edge save, so the newest turns live only in memory
|
|
152
|
+
// behind an unref'd timer. The lifecycle force-drain (before_reset /
|
|
153
|
+
// session_end) queues extraction with clearBufferAfterExtraction; if that
|
|
154
|
+
// extraction fails or times out and the host then exits, the debounce timer
|
|
155
|
+
// never fires and those turns are lost. flushSession must force the pending
|
|
156
|
+
// save durable BEFORE reading/clearing turns.
|
|
157
|
+
let saved: BufferState | null = null;
|
|
158
|
+
const storage = {
|
|
159
|
+
async loadBuffer(): Promise<BufferState> {
|
|
160
|
+
return saved
|
|
161
|
+
? structuredClone(saved)
|
|
162
|
+
: { turns: [], lastExtractionAt: null, extractionCount: 0 };
|
|
163
|
+
},
|
|
164
|
+
async saveBuffer(state: BufferState): Promise<void> {
|
|
165
|
+
saved = structuredClone(state);
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
const buffer = new SmartBuffer(
|
|
169
|
+
parseConfig({ bufferSaveDebounceMs: 10_000, triggerMode: "smart", bufferMaxTurns: 100 }),
|
|
170
|
+
storage as unknown as ConstructorParameters<typeof SmartBuffer>[1],
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
await buffer.addTurn("thread-a", makeTurn("thread-a", "remember alpha"));
|
|
174
|
+
// Debounced keep_buffering: buffered in memory but NOT yet durable.
|
|
175
|
+
assert.equal(saved, null, "debounced keep_buffering turn is not yet on disk");
|
|
176
|
+
assert.equal(buffer.getTurns("thread-a").length, 1);
|
|
177
|
+
|
|
178
|
+
interface FlushFake {
|
|
179
|
+
buffer: SmartBuffer;
|
|
180
|
+
queueBufferedExtraction: (
|
|
181
|
+
turns: BufferTurn[],
|
|
182
|
+
reason: string,
|
|
183
|
+
options?: Record<string, unknown>,
|
|
184
|
+
) => Promise<void>;
|
|
185
|
+
flushSession(sessionKey: string, options: { reason: string }): Promise<void>;
|
|
186
|
+
}
|
|
187
|
+
const orchestrator = Object.create(Orchestrator.prototype) as unknown as FlushFake;
|
|
188
|
+
orchestrator.buffer = buffer;
|
|
189
|
+
let extractionAttempted = false;
|
|
190
|
+
orchestrator.queueBufferedExtraction = async (
|
|
191
|
+
_turns: BufferTurn[],
|
|
192
|
+
_reason: string,
|
|
193
|
+
options?: Record<string, unknown>,
|
|
194
|
+
) => {
|
|
195
|
+
extractionAttempted = true;
|
|
196
|
+
// Extraction fails/times out: the buffer is NOT cleared.
|
|
197
|
+
(options?.onTaskSettled as ((error?: unknown) => void) | undefined)?.(
|
|
198
|
+
new Error("simulated extraction timeout"),
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
await assert.rejects(
|
|
203
|
+
orchestrator.flushSession("thread-a", { reason: "before_reset" }),
|
|
204
|
+
/simulated extraction timeout/,
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
assert.equal(extractionAttempted, true);
|
|
208
|
+
// The pending debounced save was forced durable BEFORE the failing
|
|
209
|
+
// extraction, so the keep_buffering turn is on disk for re-extraction even
|
|
210
|
+
// though extraction failed and (in production) the host would now exit.
|
|
211
|
+
assert.ok(saved, "pending debounced save was flushed before extraction");
|
|
212
|
+
const persisted = saved as BufferState;
|
|
213
|
+
const entryTurns = persisted.entries?.["thread-a"]?.turns ?? [];
|
|
214
|
+
assert.equal(entryTurns.length, 1, "keep_buffering turn is durable after failed flush");
|
|
215
|
+
assert.equal(entryTurns[0]?.content, "remember alpha");
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test("flushSession rejects and skips extraction when the durable buffer save fails, leaving turns and pending state intact (issue #1909, PR #2016)", async () => {
|
|
219
|
+
// Fail-closed regression: if the pending debounced save cannot land durably,
|
|
220
|
+
// flushSession must STOP before queuing extraction with
|
|
221
|
+
// clearBufferAfterExtraction. Otherwise the drain would clear turns that never
|
|
222
|
+
// reached disk; a subsequent extraction failure + host exit loses the turn.
|
|
223
|
+
let saved: BufferState | null = null;
|
|
224
|
+
let failSave = true;
|
|
225
|
+
const storage = {
|
|
226
|
+
async loadBuffer(): Promise<BufferState> {
|
|
227
|
+
return saved
|
|
228
|
+
? structuredClone(saved)
|
|
229
|
+
: { turns: [], lastExtractionAt: null, extractionCount: 0 };
|
|
230
|
+
},
|
|
231
|
+
async saveBuffer(state: BufferState): Promise<void> {
|
|
232
|
+
if (failSave) throw new Error("simulated durable save failure");
|
|
233
|
+
saved = structuredClone(state);
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
const buffer = new SmartBuffer(
|
|
237
|
+
parseConfig({ bufferSaveDebounceMs: 10_000, triggerMode: "smart", bufferMaxTurns: 100 }),
|
|
238
|
+
storage as unknown as ConstructorParameters<typeof SmartBuffer>[1],
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
await buffer.addTurn("thread-a", makeTurn("thread-a", "remember alpha"));
|
|
242
|
+
// Debounced keep_buffering: buffered in memory but NOT yet durable.
|
|
243
|
+
assert.equal(saved, null, "debounced keep_buffering turn is not yet on disk");
|
|
244
|
+
assert.equal(buffer.getTurns("thread-a").length, 1);
|
|
245
|
+
|
|
246
|
+
interface FlushFake {
|
|
247
|
+
buffer: SmartBuffer;
|
|
248
|
+
queueBufferedExtraction: (
|
|
249
|
+
turns: BufferTurn[],
|
|
250
|
+
reason: string,
|
|
251
|
+
options?: Record<string, unknown>,
|
|
252
|
+
) => Promise<void>;
|
|
253
|
+
flushSession(sessionKey: string, options: { reason: string }): Promise<void>;
|
|
254
|
+
}
|
|
255
|
+
const orchestrator = Object.create(Orchestrator.prototype) as unknown as FlushFake;
|
|
256
|
+
orchestrator.buffer = buffer;
|
|
257
|
+
let extractionAttempted = false;
|
|
258
|
+
orchestrator.queueBufferedExtraction = async () => {
|
|
259
|
+
extractionAttempted = true;
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
await assert.rejects(
|
|
263
|
+
orchestrator.flushSession("thread-a", { reason: "before_reset" }),
|
|
264
|
+
/simulated durable save failure/,
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
// The failed save short-circuits the drain: extraction never runs.
|
|
268
|
+
assert.equal(extractionAttempted, false, "extraction is skipped after a failed durable save");
|
|
269
|
+
assert.equal(saved, null, "nothing was written durably");
|
|
270
|
+
// In-memory turns survive: the buffer was never read/cleared.
|
|
271
|
+
assert.equal(buffer.getTurns("thread-a").length, 1, "buffered turn is retained after a failed flush");
|
|
272
|
+
|
|
273
|
+
// Pending state was retained (not cleared): once the durable write recovers,
|
|
274
|
+
// the still-pending save lands the turn on disk.
|
|
275
|
+
failSave = false;
|
|
276
|
+
await buffer.flushPendingSave();
|
|
277
|
+
assert.ok(saved, "pending save was retained and lands durably once the write recovers");
|
|
278
|
+
const entryTurns = (saved as BufferState).entries?.["thread-a"]?.turns ?? [];
|
|
279
|
+
assert.equal(entryTurns.length, 1, "retained pending save persists the keep_buffering turn");
|
|
280
|
+
assert.equal(entryTurns[0]?.content, "remember alpha");
|
|
281
|
+
});
|
|
282
|
+
|
|
147
283
|
test("ingestBulkImportBatch rejects when the extraction deadline expires in the queue", async () => {
|
|
148
284
|
const orchestrator = Object.create(Orchestrator.prototype) as any;
|
|
149
285
|
orchestrator.config = parseConfig({});
|
|
@@ -860,7 +996,6 @@ test("runExtraction fails closed on invalid extraction results when required", a
|
|
|
860
996
|
config.extractionMinUserTurns = 1;
|
|
861
997
|
|
|
862
998
|
let clearCalls = 0;
|
|
863
|
-
let persistCalls = 0;
|
|
864
999
|
const orchestrator = Object.create(Orchestrator.prototype) as any;
|
|
865
1000
|
orchestrator.config = config;
|
|
866
1001
|
orchestrator.buffer = {
|
|
@@ -885,10 +1020,7 @@ test("runExtraction fails closed on invalid extraction results when required", a
|
|
|
885
1020
|
orchestrator.extraction = {
|
|
886
1021
|
extract: async () => extractionResult,
|
|
887
1022
|
};
|
|
888
|
-
|
|
889
|
-
persistCalls += 1;
|
|
890
|
-
return ["fact-1"];
|
|
891
|
-
};
|
|
1023
|
+
const persistCalls = stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
892
1024
|
|
|
893
1025
|
await assert.rejects(
|
|
894
1026
|
orchestrator.runExtraction([makeTurn("session-invalid", "remember bad output")], {
|
|
@@ -899,7 +1031,7 @@ test("runExtraction fails closed on invalid extraction results when required", a
|
|
|
899
1031
|
);
|
|
900
1032
|
|
|
901
1033
|
assert.equal(clearCalls, 0);
|
|
902
|
-
assert.equal(persistCalls, 0);
|
|
1034
|
+
assert.equal(persistCalls.length, 0);
|
|
903
1035
|
}
|
|
904
1036
|
});
|
|
905
1037
|
|
|
@@ -909,7 +1041,6 @@ test("runExtraction persists processed fingerprints for empty extraction results
|
|
|
909
1041
|
config.extractionMinUserTurns = 1;
|
|
910
1042
|
|
|
911
1043
|
let clearCalls = 0;
|
|
912
|
-
let persistCalls = 0;
|
|
913
1044
|
let saveMetaCalls = 0;
|
|
914
1045
|
let savedMeta:
|
|
915
1046
|
| {
|
|
@@ -961,10 +1092,7 @@ test("runExtraction persists processed fingerprints for empty extraction results
|
|
|
961
1092
|
profileUpdates: [],
|
|
962
1093
|
}),
|
|
963
1094
|
};
|
|
964
|
-
|
|
965
|
-
persistCalls += 1;
|
|
966
|
-
return [];
|
|
967
|
-
};
|
|
1095
|
+
const persistCalls = stubPersistExtraction(orchestrator);
|
|
968
1096
|
|
|
969
1097
|
const turns = [
|
|
970
1098
|
{
|
|
@@ -981,7 +1109,7 @@ test("runExtraction persists processed fingerprints for empty extraction results
|
|
|
981
1109
|
|
|
982
1110
|
assert.equal(result.status, "skipped");
|
|
983
1111
|
assert.equal(result.reason, "empty_extraction_result");
|
|
984
|
-
assert.equal(persistCalls, 0);
|
|
1112
|
+
assert.equal(persistCalls.length, 0);
|
|
985
1113
|
assert.equal(saveMetaCalls, 1);
|
|
986
1114
|
assert.equal(clearCalls, 1);
|
|
987
1115
|
assert.equal(savedMeta?.extractionCount, 1);
|
|
@@ -1000,7 +1128,6 @@ test("runExtraction does not persist processed fingerprints for failed empty ext
|
|
|
1000
1128
|
config.extractionMinUserTurns = 1;
|
|
1001
1129
|
|
|
1002
1130
|
let clearCalls = 0;
|
|
1003
|
-
let persistCalls = 0;
|
|
1004
1131
|
let saveMetaCalls = 0;
|
|
1005
1132
|
|
|
1006
1133
|
const meta = {
|
|
@@ -1040,10 +1167,7 @@ test("runExtraction does not persist processed fingerprints for failed empty ext
|
|
|
1040
1167
|
extractionFailure: "gateway_unavailable",
|
|
1041
1168
|
}),
|
|
1042
1169
|
};
|
|
1043
|
-
|
|
1044
|
-
persistCalls += 1;
|
|
1045
|
-
return [];
|
|
1046
|
-
};
|
|
1170
|
+
const persistCalls = stubPersistExtraction(orchestrator);
|
|
1047
1171
|
|
|
1048
1172
|
const turns = [
|
|
1049
1173
|
{
|
|
@@ -1059,7 +1183,7 @@ test("runExtraction does not persist processed fingerprints for failed empty ext
|
|
|
1059
1183
|
|
|
1060
1184
|
assert.equal(result.status, "skipped");
|
|
1061
1185
|
assert.equal(result.reason, "empty_extraction_result");
|
|
1062
|
-
assert.equal(persistCalls, 0);
|
|
1186
|
+
assert.equal(persistCalls.length, 0);
|
|
1063
1187
|
// #1908: a failed extraction now persists per-fingerprint retry-state to meta (one
|
|
1064
1188
|
// saveMeta call), but MUST NOT record a processed fingerprint — the invariant
|
|
1065
1189
|
// below (processedExtractionFingerprints stays []) is the real contract.
|
|
@@ -1091,7 +1215,7 @@ test("runExtraction clears the buffer on a failed extraction when extractionRetr
|
|
|
1091
1215
|
orchestrator.extraction = {
|
|
1092
1216
|
extract: async () => ({ facts: [], entities: [], questions: [], profileUpdates: [], extractionFailure: "gateway_unavailable" }),
|
|
1093
1217
|
};
|
|
1094
|
-
orchestrator
|
|
1218
|
+
stubPersistExtraction(orchestrator);
|
|
1095
1219
|
const turns = [{ ...makeTurn("session-retry-off", "failed gateway"), logicalSessionKey: "logical-thread:retry-off", turnFingerprint: "fp-retry-off", persistProcessedFingerprint: true }];
|
|
1096
1220
|
const result = await orchestrator.runExtraction(turns, { bufferKey: "logical-thread:retry-off" });
|
|
1097
1221
|
assert.equal(result.status, "skipped");
|
|
@@ -1244,7 +1368,6 @@ test("runExtraction still clears the buffer when fingerprint persistence fails a
|
|
|
1244
1368
|
config.extractionMinChars = 0;
|
|
1245
1369
|
config.extractionMinUserTurns = 1;
|
|
1246
1370
|
let clearCalls = 0;
|
|
1247
|
-
let persistCalls = 0;
|
|
1248
1371
|
let fingerprintWrites = 0;
|
|
1249
1372
|
const orchestrator = Object.create(Orchestrator.prototype) as any;
|
|
1250
1373
|
orchestrator.config = config;
|
|
@@ -1282,10 +1405,7 @@ test("runExtraction still clears the buffer when fingerprint persistence fails a
|
|
|
1282
1405
|
profileUpdates: [],
|
|
1283
1406
|
}),
|
|
1284
1407
|
};
|
|
1285
|
-
|
|
1286
|
-
persistCalls += 1;
|
|
1287
|
-
return ["fact-1"];
|
|
1288
|
-
};
|
|
1408
|
+
const persistCalls = stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
1289
1409
|
orchestrator.recordProcessedExtractionFingerprint = async () => {
|
|
1290
1410
|
fingerprintWrites += 1;
|
|
1291
1411
|
throw new Error("saveMeta failed");
|
|
@@ -1307,7 +1427,7 @@ test("runExtraction still clears the buffer when fingerprint persistence fails a
|
|
|
1307
1427
|
},
|
|
1308
1428
|
);
|
|
1309
1429
|
|
|
1310
|
-
assert.equal(persistCalls, 1);
|
|
1430
|
+
assert.equal(persistCalls.length, 1);
|
|
1311
1431
|
assert.equal(fingerprintWrites, 1);
|
|
1312
1432
|
assert.equal(clearCalls, 1);
|
|
1313
1433
|
});
|
|
@@ -1380,7 +1500,7 @@ test("runExtraction persists fingerprint and extraction counters through one coh
|
|
|
1380
1500
|
profileUpdates: [],
|
|
1381
1501
|
}),
|
|
1382
1502
|
};
|
|
1383
|
-
orchestrator
|
|
1503
|
+
stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
1384
1504
|
orchestrator.requestQmdMaintenance = () => undefined;
|
|
1385
1505
|
orchestrator.runTierMigrationCycle = async () => undefined;
|
|
1386
1506
|
|
|
@@ -1488,7 +1608,7 @@ test("runExtraction loads meta before updating extraction counters when fingerpr
|
|
|
1488
1608
|
profileUpdates: [],
|
|
1489
1609
|
}),
|
|
1490
1610
|
};
|
|
1491
|
-
orchestrator
|
|
1611
|
+
stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
1492
1612
|
orchestrator.requestQmdMaintenance = () => undefined;
|
|
1493
1613
|
orchestrator.runTierMigrationCycle = async () => undefined;
|
|
1494
1614
|
|
|
@@ -1569,7 +1689,7 @@ test("runExtraction completes after late threading failures and saves the proces
|
|
|
1569
1689
|
profileUpdates: [],
|
|
1570
1690
|
}),
|
|
1571
1691
|
};
|
|
1572
|
-
orchestrator
|
|
1692
|
+
stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
1573
1693
|
orchestrator.threading = {
|
|
1574
1694
|
processTurn: async () => "thread-15",
|
|
1575
1695
|
appendEpisodeIds: async () => undefined,
|
|
@@ -1671,7 +1791,7 @@ test("runExtraction completes and clears the buffer when the post-persist meta s
|
|
|
1671
1791
|
profileUpdates: [],
|
|
1672
1792
|
}),
|
|
1673
1793
|
};
|
|
1674
|
-
orchestrator
|
|
1794
|
+
stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
1675
1795
|
orchestrator.requestQmdMaintenance = () => undefined;
|
|
1676
1796
|
orchestrator.runTierMigrationCycle = async () => undefined;
|
|
1677
1797
|
|
|
@@ -1754,7 +1874,7 @@ test("runExtraction still runs follow-on extraction helpers when the post-persis
|
|
|
1754
1874
|
profileUpdates: [],
|
|
1755
1875
|
}),
|
|
1756
1876
|
};
|
|
1757
|
-
orchestrator
|
|
1877
|
+
stubPersistExtraction(orchestrator, () => ["fact-1"]);
|
|
1758
1878
|
orchestrator.threading = {
|
|
1759
1879
|
processTurn: async () => "thread-17",
|
|
1760
1880
|
appendEpisodeIds: async () => {
|
|
@@ -1813,7 +1933,6 @@ test("runExtraction aborts before late buffer clearing when the caller cancels",
|
|
|
1813
1933
|
config.extractionMinUserTurns = 1;
|
|
1814
1934
|
|
|
1815
1935
|
let clearCalls = 0;
|
|
1816
|
-
let persistCalls = 0;
|
|
1817
1936
|
let resolveExtract!: (value: {
|
|
1818
1937
|
facts: [];
|
|
1819
1938
|
entities: [];
|
|
@@ -1851,10 +1970,7 @@ test("runExtraction aborts before late buffer clearing when the caller cancels",
|
|
|
1851
1970
|
orchestrator.extraction = {
|
|
1852
1971
|
extract: async () => extractPromise,
|
|
1853
1972
|
};
|
|
1854
|
-
|
|
1855
|
-
persistCalls += 1;
|
|
1856
|
-
return [];
|
|
1857
|
-
};
|
|
1973
|
+
const persistCalls = stubPersistExtraction(orchestrator);
|
|
1858
1974
|
|
|
1859
1975
|
const abortController = new AbortController();
|
|
1860
1976
|
const runPromise = orchestrator.runExtraction(
|
|
@@ -1877,7 +1993,7 @@ test("runExtraction aborts before late buffer clearing when the caller cancels",
|
|
|
1877
1993
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
1878
1994
|
|
|
1879
1995
|
assert.equal(clearCalls, 0);
|
|
1880
|
-
assert.equal(persistCalls, 0);
|
|
1996
|
+
assert.equal(persistCalls.length, 0);
|
|
1881
1997
|
});
|
|
1882
1998
|
|
|
1883
1999
|
test("runExtraction still clears the session buffer after persistence even if reset abort fires late", async () => {
|
|
@@ -1922,10 +2038,10 @@ test("runExtraction still clears the session buffer after persistence even if re
|
|
|
1922
2038
|
profileUpdates: [],
|
|
1923
2039
|
}),
|
|
1924
2040
|
};
|
|
1925
|
-
orchestrator
|
|
2041
|
+
stubPersistExtraction(orchestrator, () => {
|
|
1926
2042
|
abortController.abort();
|
|
1927
2043
|
return ["fact-1"];
|
|
1928
|
-
};
|
|
2044
|
+
});
|
|
1929
2045
|
orchestrator.maybeScheduleConsolidation = () => undefined;
|
|
1930
2046
|
orchestrator.requestQmdMaintenance = () => undefined;
|
|
1931
2047
|
orchestrator.nonZeroExtractionsSinceConsolidation = 0;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PR #2016 regression: non-chunked parent fact-hash durability.
|
|
3
|
+
*
|
|
4
|
+
* Sibling to orchestrator-chunked-hash-durability.test.ts. When fact dedup is
|
|
5
|
+
* enabled, the NON-chunked extraction path writes the fact memory with its
|
|
6
|
+
* fact-content-hash flush DEFERRED to the end-of-method batch
|
|
7
|
+
* saveContentHashIndexes() (issue #1909 batching). The fallible post-write work
|
|
8
|
+
* that follows — applyDeferredContradictionResolve(), embedding index, shared
|
|
9
|
+
* promotion, verbatim artifact write — can throw AFTER writeSealedMemory() has
|
|
10
|
+
* made the `.md` durable but BEFORE that batch save runs. Left unguarded, the
|
|
11
|
+
* durable fact would be missing from fact-hashes.txt until the next corpus
|
|
12
|
+
* rebuild, so a peer with an already-built in-memory index could re-extract it
|
|
13
|
+
* as a duplicate.
|
|
14
|
+
*
|
|
15
|
+
* Fix (extraction-persist.ts): the non-chunked path guards the post-write work
|
|
16
|
+
* and flushes the deferred parent hash before propagating any failure, while
|
|
17
|
+
* keeping #1909 batching on the success path. This test drives persistExtraction
|
|
18
|
+
* through the real Orchestrator, forces the verbatim-artifact write to throw,
|
|
19
|
+
* and asserts the fact's hash is already durable in the on-disk fact-hashes.txt
|
|
20
|
+
* (loaded directly, NOT via a corpus rebuild that would reconstruct it anyway).
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import test from "node:test";
|
|
24
|
+
import assert from "node:assert/strict";
|
|
25
|
+
import os from "node:os";
|
|
26
|
+
import path from "node:path";
|
|
27
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
28
|
+
|
|
29
|
+
import { parseConfig } from "./config.js";
|
|
30
|
+
import { Orchestrator } from "./orchestrator.js";
|
|
31
|
+
import { ContentHashIndex, StorageManager } from "./storage.js";
|
|
32
|
+
import { sanitizeMemoryContent } from "./sanitize.js";
|
|
33
|
+
import type { ExtractionResult, MemoryFile } from "./types.js";
|
|
34
|
+
|
|
35
|
+
/** persistExtraction is private; reach it through an unknown-cast surface. */
|
|
36
|
+
interface OrchestratorTestSurface {
|
|
37
|
+
persistExtraction: (
|
|
38
|
+
result: ExtractionResult,
|
|
39
|
+
storage: StorageManager,
|
|
40
|
+
threadId: string | null,
|
|
41
|
+
sourceContext?: { sourceConnector?: string; validAt?: string },
|
|
42
|
+
) => Promise<string[]>;
|
|
43
|
+
getStorage: (namespace: string) => Promise<StorageManager>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** A short single-sentence fact that does NOT chunk (non-chunked write path). */
|
|
47
|
+
const FACT_BODY = "The staging deploy pinned build 8421 as the rollback anchor.";
|
|
48
|
+
|
|
49
|
+
function factResult(content: string): ExtractionResult {
|
|
50
|
+
return {
|
|
51
|
+
facts: [{ content, category: "fact", confidence: 0.9, tags: [] }],
|
|
52
|
+
entities: [],
|
|
53
|
+
relationships: [],
|
|
54
|
+
questions: [],
|
|
55
|
+
profileUpdates: [],
|
|
56
|
+
} as ExtractionResult;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
test("#2016: a non-chunked fact's hash is durable on disk before fallible post-write work", async () => {
|
|
60
|
+
const memoryDir = await mkdtemp(
|
|
61
|
+
path.join(os.tmpdir(), "remnic-nonchunk-hash-durability-"),
|
|
62
|
+
);
|
|
63
|
+
try {
|
|
64
|
+
const config = parseConfig({
|
|
65
|
+
openaiApiKey: "sk-test",
|
|
66
|
+
memoryDir,
|
|
67
|
+
workspaceDir: path.join(memoryDir, "workspace"),
|
|
68
|
+
qmdEnabled: false,
|
|
69
|
+
embeddingFallbackEnabled: false,
|
|
70
|
+
// Force the non-chunked write path.
|
|
71
|
+
chunkingEnabled: false,
|
|
72
|
+
multiGraphMemoryEnabled: false,
|
|
73
|
+
factDeduplicationEnabled: true,
|
|
74
|
+
// Make the fallible post-write verbatim-artifact write reachable for a
|
|
75
|
+
// fact so the injected throw fires AFTER the durable .md write.
|
|
76
|
+
verbatimArtifactsEnabled: true,
|
|
77
|
+
verbatimArtifactCategories: ["fact"],
|
|
78
|
+
verbatimArtifactsMinConfidence: 0.5,
|
|
79
|
+
});
|
|
80
|
+
const orchestrator = new Orchestrator(
|
|
81
|
+
config,
|
|
82
|
+
) as unknown as OrchestratorTestSurface;
|
|
83
|
+
const storage = await orchestrator.getStorage("default");
|
|
84
|
+
await storage.ensureDirectories();
|
|
85
|
+
|
|
86
|
+
// Deterministic failure: the verbatim-artifact write throws — after the
|
|
87
|
+
// fact .md is durable and before the end-of-method saveContentHashIndexes().
|
|
88
|
+
storage.writeArtifact = async (): Promise<string> => {
|
|
89
|
+
throw new Error("simulated writeArtifact failure");
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
await assert.rejects(
|
|
93
|
+
orchestrator.persistExtraction(factResult(FACT_BODY), storage, null, {
|
|
94
|
+
sourceConnector: "chatgpt",
|
|
95
|
+
}),
|
|
96
|
+
/simulated writeArtifact failure/,
|
|
97
|
+
"the artifact write failure must propagate — post-write work is not swallowed",
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
// The fact .md is durable.
|
|
101
|
+
const all = await storage.readAllMemories();
|
|
102
|
+
const facts = all.filter(
|
|
103
|
+
(m: MemoryFile) => m.frontmatter.category === "fact" && m.content.includes("rollback anchor"),
|
|
104
|
+
);
|
|
105
|
+
assert.equal(facts.length, 1, "the fact .md must be durable");
|
|
106
|
+
|
|
107
|
+
// Its content hash was flushed to fact-hashes.txt BEFORE the throw. Load
|
|
108
|
+
// ONLY the on-disk index (no corpus rebuild) so this asserts the durable
|
|
109
|
+
// file itself, not a restart-time reconstruction.
|
|
110
|
+
const stateDir = path.join(memoryDir, "state");
|
|
111
|
+
const onDisk = new ContentHashIndex(stateDir);
|
|
112
|
+
await onDisk.load();
|
|
113
|
+
assert.equal(
|
|
114
|
+
onDisk.has(sanitizeMemoryContent(FACT_BODY).text),
|
|
115
|
+
true,
|
|
116
|
+
"the fact hash must be durable on disk before fallible post-write work (PR #2016)",
|
|
117
|
+
);
|
|
118
|
+
} finally {
|
|
119
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
120
|
+
}
|
|
121
|
+
});
|
|
@@ -71,7 +71,7 @@ test("persistExtraction is a no-op by default — no inline citation is injected
|
|
|
71
71
|
profileUpdates: [],
|
|
72
72
|
} as ExtractionResult;
|
|
73
73
|
|
|
74
|
-
const persistedIds = await orchestrator.persistExtraction(
|
|
74
|
+
const { persistedIds } = await orchestrator.persistExtraction(
|
|
75
75
|
result,
|
|
76
76
|
storage,
|
|
77
77
|
null,
|
|
@@ -512,7 +512,7 @@ test("persistExtraction injects the inline citation when the flag is enabled", a
|
|
|
512
512
|
profileUpdates: [],
|
|
513
513
|
} as ExtractionResult;
|
|
514
514
|
|
|
515
|
-
const persistedIds = await orchestrator.persistExtraction(
|
|
515
|
+
const { persistedIds } = await orchestrator.persistExtraction(
|
|
516
516
|
result,
|
|
517
517
|
storage,
|
|
518
518
|
null,
|
|
@@ -555,7 +555,7 @@ test("persistExtraction honors a custom inline citation format template", async
|
|
|
555
555
|
profileUpdates: [],
|
|
556
556
|
} as ExtractionResult;
|
|
557
557
|
|
|
558
|
-
const persistedIds = await orchestrator.persistExtraction(
|
|
558
|
+
const { persistedIds } = await orchestrator.persistExtraction(
|
|
559
559
|
result,
|
|
560
560
|
storage,
|
|
561
561
|
null,
|
|
@@ -597,7 +597,7 @@ test("persistExtraction does not double-inject a citation on facts that already
|
|
|
597
597
|
profileUpdates: [],
|
|
598
598
|
} as ExtractionResult;
|
|
599
599
|
|
|
600
|
-
const persistedIds = await orchestrator.persistExtraction(
|
|
600
|
+
const { persistedIds } = await orchestrator.persistExtraction(
|
|
601
601
|
result,
|
|
602
602
|
storage,
|
|
603
603
|
null,
|
|
@@ -650,7 +650,7 @@ test("dedup: pre-tagged fact is not re-persisted when canonical body is already
|
|
|
650
650
|
profileUpdates: [],
|
|
651
651
|
} as ExtractionResult;
|
|
652
652
|
|
|
653
|
-
const firstIds = await orchestrator.persistExtraction(
|
|
653
|
+
const { persistedIds: firstIds } = await orchestrator.persistExtraction(
|
|
654
654
|
firstResult,
|
|
655
655
|
storage,
|
|
656
656
|
null,
|
|
@@ -674,7 +674,7 @@ test("dedup: pre-tagged fact is not re-persisted when canonical body is already
|
|
|
674
674
|
profileUpdates: [],
|
|
675
675
|
} as ExtractionResult;
|
|
676
676
|
|
|
677
|
-
const secondIds = await orchestrator.persistExtraction(
|
|
677
|
+
const { persistedIds: secondIds } = await orchestrator.persistExtraction(
|
|
678
678
|
secondResult,
|
|
679
679
|
storage,
|
|
680
680
|
null,
|
|
@@ -719,7 +719,7 @@ test("dedup: exact matches are scoped to the target namespace storage", async ()
|
|
|
719
719
|
await tenantStorage.ensureDirectories();
|
|
720
720
|
|
|
721
721
|
const rawBody = "The Helios tenant keeps staging feature flags isolated.";
|
|
722
|
-
const firstIds = await orchestrator.persistExtraction(
|
|
722
|
+
const { persistedIds: firstIds } = await orchestrator.persistExtraction(
|
|
723
723
|
{
|
|
724
724
|
facts: [makeFact(rawBody)],
|
|
725
725
|
entities: [],
|
|
@@ -733,7 +733,7 @@ test("dedup: exact matches are scoped to the target namespace storage", async ()
|
|
|
733
733
|
);
|
|
734
734
|
assert.equal(firstIds.length, 1, "default namespace write must succeed");
|
|
735
735
|
|
|
736
|
-
const tenantIds = await orchestrator.persistExtraction(
|
|
736
|
+
const { persistedIds: tenantIds } = await orchestrator.persistExtraction(
|
|
737
737
|
{
|
|
738
738
|
facts: [makeFact(rawBody)],
|
|
739
739
|
entities: [],
|
|
@@ -751,7 +751,7 @@ test("dedup: exact matches are scoped to the target namespace storage", async ()
|
|
|
751
751
|
"a duplicate in another namespace must not be suppressed by the default hash index",
|
|
752
752
|
);
|
|
753
753
|
|
|
754
|
-
const tenantDuplicateIds = await orchestrator.persistExtraction(
|
|
754
|
+
const { persistedIds: tenantDuplicateIds } = await orchestrator.persistExtraction(
|
|
755
755
|
{
|
|
756
756
|
facts: [makeFact(rawBody)],
|
|
757
757
|
entities: [],
|