@remnic/core 9.7.14 → 9.8.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 +88 -74
- package/dist/access-audit.js +2 -2
- package/dist/access-boundary.d.ts +35 -17
- package/dist/access-boundary.js +89 -77
- package/dist/access-citation.d.ts +28 -0
- package/dist/access-citation.js +9 -0
- package/dist/access-cli.js +197 -181
- 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 +103 -90
- package/dist/access-identity-continuity-surface.d.ts +13 -8
- package/dist/access-identity-continuity-surface.js +88 -74
- package/dist/access-lcm-surface.d.ts +16 -9
- package/dist/access-lcm-surface.js +88 -74
- package/dist/access-mcp.d.ts +23 -16
- package/dist/access-mcp.js +99 -87
- 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 +88 -74
- package/dist/access-operations-batch.js +95 -83
- package/dist/access-operations.d.ts +26 -19
- package/dist/access-operations.js +97 -85
- 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 +88 -74
- package/dist/access-schema.d.ts +34 -34
- package/dist/access-schema.js +8 -6
- package/dist/{access-service-CPhSnLOH.d.ts → access-service-DEL4qCrc.d.ts} +25 -32
- package/dist/access-service.d.ts +13 -6
- package/dist/access-service.js +92 -75
- 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 +37 -27
- 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/{capsule-merge-Z2HUO6IK.js → capsule-merge-5KKJQBWQ.js} +4 -4
- package/dist/{catalog-uX9sT9ws.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 +46 -37
- 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-ASKEM4AR.js → chunk-2EJOEICD.js} +1823 -1483
- package/dist/chunk-2EJOEICD.js.map +1 -0
- package/dist/{chunk-L2B3EE7B.js → chunk-2QMKMVHH.js} +2 -2
- package/dist/{chunk-6CALL5VN.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-5S7Z5SHA.js → chunk-34RC5RT7.js} +2 -2
- package/dist/{chunk-KGWXHWAH.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-ZIDSD6VC.js → chunk-3Y224NYC.js} +3 -3
- package/dist/{chunk-RBQLJSJ7.js → chunk-44XZ75OQ.js} +46 -10
- package/dist/chunk-44XZ75OQ.js.map +1 -0
- package/dist/{chunk-VFSP73LP.js → chunk-45GF7Y3V.js} +2 -2
- package/dist/{chunk-7ICYQUOL.js → chunk-4BJQODZF.js} +2514 -1526
- package/dist/chunk-4BJQODZF.js.map +1 -0
- package/dist/{chunk-JMBVCAR4.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-2E6G7FCE.js → chunk-5Q7EVV4X.js} +7 -7
- package/dist/{chunk-LC7OODWZ.js → chunk-5SB7SC2G.js} +80 -49
- package/dist/chunk-5SB7SC2G.js.map +1 -0
- package/dist/{chunk-VZ5OJE4X.js → chunk-5VQJBH2G.js} +2 -2
- 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-4LEF6XWJ.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-F7AU34FC.js → chunk-76GLCM57.js} +160 -127
- package/dist/chunk-76GLCM57.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-TXVD7PLT.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-OKUEZOGW.js → chunk-AITCS2RC.js} +2 -2
- package/dist/{chunk-OC35KQIN.js → chunk-AJ7QCSIS.js} +4 -4
- 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-GWTFLF2P.js → chunk-BJMBJZ2Y.js} +59 -59
- package/dist/chunk-BJMBJZ2Y.js.map +1 -0
- package/dist/{chunk-N3JDIRBW.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-FBNWOMCE.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-DDGV7NAX.js → chunk-CQMEM5CC.js} +2 -2
- package/dist/{chunk-A7B4RMQG.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-IFJ23BHU.js → chunk-EEC7UJPX.js} +112 -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-7MW3CVLD.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-7LFXDGLH.js → chunk-F7GAIWFA.js} +20 -20
- package/dist/{chunk-IKSELOIV.js → chunk-FFPJINJE.js} +7 -7
- 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-V53GJUSL.js → chunk-FUTF72MJ.js} +15 -15
- package/dist/chunk-GCASGYIO.js +71 -0
- package/dist/chunk-GCASGYIO.js.map +1 -0
- package/dist/{chunk-5UNWK7KU.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-HLTAPHZZ.js → chunk-HNZKVLAN.js} +2 -2
- package/dist/{chunk-5EZXHU36.js → chunk-HYQJQGD3.js} +2 -2
- package/dist/{chunk-ANADNYWK.js → chunk-IDZFBSHN.js} +8 -6
- package/dist/{chunk-ANADNYWK.js.map → chunk-IDZFBSHN.js.map} +1 -1
- package/dist/{chunk-XVLEGMJI.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-ND5M64JJ.js → chunk-IYNGIMVG.js} +101 -91
- package/dist/chunk-IYNGIMVG.js.map +1 -0
- package/dist/{chunk-TRWPCR6P.js → chunk-JECBQBEX.js} +3 -3
- package/dist/{chunk-HG32URJJ.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-MKDRQAA3.js → chunk-KAVBJSBQ.js} +4 -4
- package/dist/{chunk-EEARRVZ2.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-OBMR4VIX.js → chunk-L2DPF4DF.js} +186 -15
- package/dist/chunk-L2DPF4DF.js.map +1 -0
- 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-NUWYOKS6.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-67ZCJLJY.js → chunk-MYFQ3ED4.js} +8 -8
- 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-DBRYEIGY.js → chunk-OJP3N7UK.js} +2 -2
- package/dist/{chunk-AD6AMF2N.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-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-AHLPZ2SF.js → chunk-QJAQNXWI.js} +44 -6
- package/dist/chunk-QJAQNXWI.js.map +1 -0
- package/dist/{chunk-3D6AFGQR.js → chunk-QVT3E4CE.js} +7 -7
- package/dist/{chunk-VYOFVVNK.js → chunk-R26ZMXR2.js} +24 -24
- package/dist/{chunk-VYOFVVNK.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-UTRJFDP2.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-SICXL4MK.js +165 -0
- package/dist/chunk-SICXL4MK.js.map +1 -0
- package/dist/chunk-SK7AMF2J.js +168 -0
- package/dist/chunk-SK7AMF2J.js.map +1 -0
- package/dist/{chunk-GMSDQUCR.js → chunk-TDTXKOAJ.js} +6475 -5748
- package/dist/chunk-TDTXKOAJ.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-PK5XBDA6.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-7XGSIUP5.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-W5NKDU24.js → chunk-WON4APQY.js} +4 -4
- package/dist/{chunk-NKCPUHCI.js → chunk-WZFAPHIK.js} +6 -6
- package/dist/{chunk-KQPJLK3X.js → chunk-XL24QQ63.js} +2 -2
- package/dist/{chunk-X47LWMKA.js → chunk-XMMESCPD.js} +26 -1
- package/dist/chunk-XMMESCPD.js.map +1 -0
- package/dist/{chunk-4B4MUS5D.js → chunk-YROFNEG5.js} +7 -7
- package/dist/{chunk-WU46YPY6.js → chunk-YV32N67O.js} +1 -1
- package/dist/chunk-YV32N67O.js.map +1 -0
- package/dist/{chunk-B3F4CWQR.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/{cli-_Y2Bmt6A.d.ts → cli-C_pqqTCw.d.ts} +28 -12
- package/dist/cli.d.ts +16 -9
- package/dist/cli.js +145 -130
- package/dist/compounding/engine.d.ts +5 -2
- package/dist/compounding/engine.js +39 -29
- 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 +39 -29
- 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 +44 -35
- package/dist/consolidation-provenance-check.d.ts +5 -2
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.d.ts +5 -2
- package/dist/consolidation-undo.js +3 -3
- 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 +38 -29
- 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-FO7AM4UR.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 +57 -10
- 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 +101 -92
- package/dist/index.js +290 -242
- 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 +38 -28
- 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 +40 -28
- package/dist/maintenance/rebuild-memory-projection.js +41 -31
- 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 +46 -2
- package/dist/memory-cache.js +7 -1
- package/dist/memory-corpus-version.js +2 -2
- 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 +54 -45
- 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 +25 -21
- package/dist/namespaces/storage.d.ts +24 -3
- package/dist/namespaces/storage.js +38 -30
- 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 +73 -58
- 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 +47 -34
- package/dist/{orchestrator-BbZ_dQSU.d.ts → orchestrator-CQJ8U7En.d.ts} +85 -79
- package/dist/orchestrator.d.ts +13 -8
- package/dist/orchestrator.js +197 -180
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-FRMDb1fn.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-xJRrHFbA.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 +8 -4
- 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 +24 -24
- 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 +19 -17
- package/dist/search/index.d.ts +3 -1
- package/dist/search/index.js +23 -21
- 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 +27 -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-fvdZRa5Z.d.ts → semantic-consolidation-DILZEQq3.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +41 -32
- package/dist/semantic-rule-promotion.js +37 -27
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +38 -28
- 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 +3 -1
- package/dist/shared-context/manager.js +3 -3
- package/dist/signal.d.ts +3 -1
- package/dist/{storage-CrvzaM9C.d.ts → storage-NIyKYD8g.d.ts} +505 -110
- package/dist/storage-guards.js +2 -2
- package/dist/storage.d.ts +6 -3
- package/dist/storage.js +41 -29
- 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 +6 -6
- package/dist/transfer/types.d.ts +24 -24
- 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-Bl4BWDM8.d.ts → types-D_fG2ix8.d.ts} +49 -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 +39 -29
- 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 +79 -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 +120 -0
- package/src/access-observe-write-surface.ts +130 -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 +182 -175
- 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 +122 -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/graph.test.ts +137 -1
- package/src/graph.ts +274 -17
- 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-cache.ts +70 -0
- 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 +45 -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 +581 -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 +172 -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 +166 -150
- 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.test.ts +22 -0
- package/src/qmd.ts +60 -48
- 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 +24 -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 +942 -903
- 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 +66 -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 +193 -0
- package/src/write-quarantine.ts +241 -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-7ICYQUOL.js.map +0 -1
- package/dist/chunk-AD6AMF2N.js.map +0 -1
- package/dist/chunk-AHLPZ2SF.js.map +0 -1
- package/dist/chunk-ASKEM4AR.js.map +0 -1
- package/dist/chunk-B3F4CWQR.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-E5BK6CGV.js +0 -335
- package/dist/chunk-E5BK6CGV.js.map +0 -1
- package/dist/chunk-EEARRVZ2.js.map +0 -1
- package/dist/chunk-F7AU34FC.js.map +0 -1
- package/dist/chunk-FBNWOMCE.js.map +0 -1
- package/dist/chunk-FTYDWKO6.js.map +0 -1
- package/dist/chunk-GMSDQUCR.js.map +0 -1
- package/dist/chunk-GWTFLF2P.js.map +0 -1
- package/dist/chunk-IFJ23BHU.js.map +0 -1
- package/dist/chunk-IKQTFQMI.js.map +0 -1
- package/dist/chunk-J2HSAU72.js.map +0 -1
- package/dist/chunk-JMBVCAR4.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-ND5M64JJ.js.map +0 -1
- package/dist/chunk-NUWYOKS6.js.map +0 -1
- package/dist/chunk-NWTGD4AN.js.map +0 -1
- package/dist/chunk-OBMR4VIX.js.map +0 -1
- package/dist/chunk-ODPLEWB6.js.map +0 -1
- package/dist/chunk-PHK3HARR.js +0 -32
- package/dist/chunk-PHK3HARR.js.map +0 -1
- package/dist/chunk-RANHFI3P.js +0 -8
- package/dist/chunk-RANHFI3P.js.map +0 -1
- package/dist/chunk-RBQLJSJ7.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-TXLGHDHS.js.map +0 -1
- package/dist/chunk-UN3CH3CO.js +0 -118
- package/dist/chunk-UN3CH3CO.js.map +0 -1
- package/dist/chunk-VSMRDBFT.js +0 -17
- package/dist/chunk-VSMRDBFT.js.map +0 -1
- package/dist/chunk-WU46YPY6.js.map +0 -1
- package/dist/chunk-X47LWMKA.js.map +0 -1
- package/dist/chunk-X64YLC24.js.map +0 -1
- package/dist/chunk-XVLEGMJI.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-FO7AM4UR.js.map → access-recall-response.js.map} +0 -0
- /package/dist/{resolution-VH4NGENZ.js.map → bounded-jsonl-state.js.map} +0 -0
- /package/dist/{capsule-merge-Z2HUO6IK.js.map → capsule-merge-5KKJQBWQ.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-6CALL5VN.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-5S7Z5SHA.js.map → chunk-34RC5RT7.js.map} +0 -0
- /package/dist/{chunk-KGWXHWAH.js.map → chunk-3QAH2S33.js.map} +0 -0
- /package/dist/{chunk-ZIDSD6VC.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-2E6G7FCE.js.map → chunk-5Q7EVV4X.js.map} +0 -0
- /package/dist/{chunk-VZ5OJE4X.js.map → chunk-5VQJBH2G.js.map} +0 -0
- /package/dist/{chunk-PUBTHW5O.js.map → chunk-6DRPPQEJ.js.map} +0 -0
- /package/dist/{chunk-4LEF6XWJ.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-TXVD7PLT.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-OKUEZOGW.js.map → chunk-AITCS2RC.js.map} +0 -0
- /package/dist/{chunk-OC35KQIN.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-N3JDIRBW.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-DDGV7NAX.js.map → chunk-CQMEM5CC.js.map} +0 -0
- /package/dist/{chunk-A7B4RMQG.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-7MW3CVLD.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-7LFXDGLH.js.map → chunk-F7GAIWFA.js.map} +0 -0
- /package/dist/{chunk-IKSELOIV.js.map → chunk-FFPJINJE.js.map} +0 -0
- /package/dist/{chunk-V53GJUSL.js.map → chunk-FUTF72MJ.js.map} +0 -0
- /package/dist/{chunk-5UNWK7KU.js.map → chunk-GFPZS3F5.js.map} +0 -0
- /package/dist/{chunk-G6NKALRN.js.map → chunk-H4WG3UQZ.js.map} +0 -0
- /package/dist/{chunk-HLTAPHZZ.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-HG32URJJ.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-MKDRQAA3.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-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-67ZCJLJY.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-UTRJFDP2.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-PK5XBDA6.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-7XGSIUP5.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-W5NKDU24.js.map → chunk-WON4APQY.js.map} +0 -0
- /package/dist/{chunk-NKCPUHCI.js.map → chunk-WZFAPHIK.js.map} +0 -0
- /package/dist/{chunk-KQPJLK3X.js.map → chunk-XL24QQ63.js.map} +0 -0
- /package/dist/{chunk-4B4MUS5D.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
|
@@ -22,6 +22,7 @@ import type { BufferState, BufferTurn } from "./types.js";
|
|
|
22
22
|
|
|
23
23
|
class FakeStorage {
|
|
24
24
|
public saved: BufferState | null = null;
|
|
25
|
+
public saveCount = 0;
|
|
25
26
|
|
|
26
27
|
constructor(private readonly initial: BufferState) {}
|
|
27
28
|
|
|
@@ -30,6 +31,7 @@ class FakeStorage {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
async saveBuffer(state: BufferState): Promise<void> {
|
|
34
|
+
this.saveCount += 1;
|
|
33
35
|
this.saved = structuredClone(state);
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -355,6 +357,7 @@ async function assertProbeRejectionHandled(
|
|
|
355
357
|
bufferSurpriseThreshold: 0.35,
|
|
356
358
|
bufferMaxTurns: 5,
|
|
357
359
|
triggerMode: "smart",
|
|
360
|
+
bufferSaveDebounceMs: 0,
|
|
358
361
|
});
|
|
359
362
|
const buffer = new SmartBuffer(config, storage as any, probe);
|
|
360
363
|
|
|
@@ -476,6 +479,7 @@ test("flag on: probe that never resolves is timed out, turn is still saved", asy
|
|
|
476
479
|
bufferSurpriseProbeTimeoutMs: 30,
|
|
477
480
|
bufferMaxTurns: 5,
|
|
478
481
|
triggerMode: "smart",
|
|
482
|
+
bufferSaveDebounceMs: 0,
|
|
479
483
|
});
|
|
480
484
|
const buffer = new SmartBuffer(config, storage as any, probe);
|
|
481
485
|
|
|
@@ -523,6 +527,7 @@ test("flag on: slow probe does not hold the buffer mutation queue", async () =>
|
|
|
523
527
|
bufferSurpriseProbeTimeoutMs: 1000,
|
|
524
528
|
bufferMaxTurns: 5,
|
|
525
529
|
triggerMode: "smart",
|
|
530
|
+
bufferSaveDebounceMs: 0,
|
|
526
531
|
});
|
|
527
532
|
const buffer = new SmartBuffer(config, storage as any, probe);
|
|
528
533
|
|
|
@@ -750,3 +755,39 @@ test("flag on: stale snapshot clears do not mark live turns as freshly extracted
|
|
|
750
755
|
"a skipped stale-snapshot clear must not advance extraction metadata",
|
|
751
756
|
);
|
|
752
757
|
});
|
|
758
|
+
|
|
759
|
+
// ---------------------------------------------------------------------------
|
|
760
|
+
// Issue #1909 (review finding 1) — surprise promotion forces a durable flush
|
|
761
|
+
// ---------------------------------------------------------------------------
|
|
762
|
+
|
|
763
|
+
test("debounce on: surprise-promoted extract_now flushes the buffer before extraction", async () => {
|
|
764
|
+
const storage = new FakeStorage(emptyBuffer());
|
|
765
|
+
const probe = fixedScoreProbe(0.99); // promotes keep_buffering -> extract_now
|
|
766
|
+
const config = parseConfig({
|
|
767
|
+
bufferSurpriseTriggerEnabled: true,
|
|
768
|
+
bufferSurpriseThreshold: 0.35,
|
|
769
|
+
// High turn cap so the built-in trigger keeps buffering; only the surprise
|
|
770
|
+
// probe promotes. Large debounce so a scheduled save would NOT have landed.
|
|
771
|
+
bufferMaxTurns: 100,
|
|
772
|
+
triggerMode: "smart",
|
|
773
|
+
bufferSaveDebounceMs: 10_000,
|
|
774
|
+
});
|
|
775
|
+
const buffer = new SmartBuffer(
|
|
776
|
+
config,
|
|
777
|
+
storage as unknown as ConstructorParameters<typeof SmartBuffer>[1],
|
|
778
|
+
probe,
|
|
779
|
+
);
|
|
780
|
+
|
|
781
|
+
const outcome = await buffer.addTurnWithOutcome("sess-1", makeTurn("sess-1", "novel turn"));
|
|
782
|
+
assert.equal(outcome.decision, "extract_now", "surprise promotes the turn");
|
|
783
|
+
assert.equal(
|
|
784
|
+
storage.saveCount,
|
|
785
|
+
1,
|
|
786
|
+
"the buffer was flushed to disk EXACTLY once before extraction (timer cancelled, single flush)",
|
|
787
|
+
);
|
|
788
|
+
assert.equal(
|
|
789
|
+
storage.saved?.entries?.["sess-1"]?.turns.length,
|
|
790
|
+
1,
|
|
791
|
+
"the persisted buffer contains the turn that triggered extraction",
|
|
792
|
+
);
|
|
793
|
+
});
|
package/src/buffer.ts
CHANGED
|
@@ -47,6 +47,25 @@ export interface BufferSurpriseProbe {
|
|
|
47
47
|
|
|
48
48
|
const MAX_BUFFER_ENTRY_COUNT = 200;
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Upper bound on how long a debounced buffer save may be deferred under
|
|
52
|
+
* sustained activity (issue #1909). Each new turn re-arms the trailing-edge
|
|
53
|
+
* timer, so a steady stream of turns could otherwise push the save out
|
|
54
|
+
* indefinitely and widen the crash-loss window without bound. Once a pending
|
|
55
|
+
* save has been deferred this many debounce windows, the next scheduled save
|
|
56
|
+
* forces an inline flush instead of re-arming.
|
|
57
|
+
*/
|
|
58
|
+
const BUFFER_SAVE_MAX_DEFER_MULTIPLIER = 5;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Node's maximum 32-bit `setTimeout` delay (2^31-1 ms, ~24.8 days). A larger
|
|
62
|
+
* value is overflow-clamped by Node to 1ms with a TimeoutOverflowWarning, so we
|
|
63
|
+
* clamp defensively at every timer arm (issue #1909 review round 5) even though
|
|
64
|
+
* parseConfig already caps `bufferSaveDebounceMs` — a directly-constructed config
|
|
65
|
+
* could still exceed it.
|
|
66
|
+
*/
|
|
67
|
+
const MAX_SET_TIMEOUT_MS = 2_147_483_647;
|
|
68
|
+
|
|
50
69
|
/**
|
|
51
70
|
* Minimal data carried on the serialized telemetry write chain
|
|
52
71
|
* (issue #563 PR 3).
|
|
@@ -113,6 +132,20 @@ export class SmartBuffer {
|
|
|
113
132
|
*/
|
|
114
133
|
private surpriseTelemetryWriteChain: Promise<unknown> = Promise.resolve();
|
|
115
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Debounced buffer-save state (issue #1909). Steady-state buffering used to
|
|
137
|
+
* serialize + rewrite the whole multi-session buffer on EVERY turn. We now
|
|
138
|
+
* coalesce those writes onto a trailing-edge timer; correctness boundaries
|
|
139
|
+
* (extraction trigger, extraction clear, shutdown) still force an immediate
|
|
140
|
+
* flush. `bufferSaveDebounceMs: 0` restores save-every-turn exactly.
|
|
141
|
+
*/
|
|
142
|
+
private saveTimer: NodeJS.Timeout | null = null;
|
|
143
|
+
private pendingSave = false;
|
|
144
|
+
/** Wall-clock ms when the currently-pending save was first scheduled (issue
|
|
145
|
+
* #1909). Null when nothing is pending. Used to bound deferral under sustained
|
|
146
|
+
* activity (see BUFFER_SAVE_MAX_DEFER_MULTIPLIER). */
|
|
147
|
+
private firstPendingAtMs: number | null = null;
|
|
148
|
+
|
|
116
149
|
constructor(
|
|
117
150
|
private readonly config: PluginConfig,
|
|
118
151
|
private readonly storage: StorageManager,
|
|
@@ -291,6 +324,154 @@ export class SmartBuffer {
|
|
|
291
324
|
await this.enqueueMutation(async () => this.saveUnlocked());
|
|
292
325
|
}
|
|
293
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Schedule a coalesced, TRUE trailing-edge buffer save (issue #1909). Only
|
|
329
|
+
* used for the debounced (`bufferSaveDebounceMs > 0`) steady-state buffering
|
|
330
|
+
* path; the debounce-off and correctness-boundary paths save inline within the
|
|
331
|
+
* mutation (see `recordTurnUnlocked`). Each call re-arms the timer from now so
|
|
332
|
+
* the write lands one full window after the LAST turn, not the first. To keep
|
|
333
|
+
* sustained activity from deferring the save without bound (which would widen
|
|
334
|
+
* the crash-loss window), once a pending save has been deferred
|
|
335
|
+
* BUFFER_SAVE_MAX_DEFER_MULTIPLIER windows it is flushed inline instead of
|
|
336
|
+
* re-armed. Runs inside the record mutation, so the inline save is awaited.
|
|
337
|
+
*/
|
|
338
|
+
private async scheduleSave(): Promise<void> {
|
|
339
|
+
const ms = Math.min(this.config.bufferSaveDebounceMs, MAX_SET_TIMEOUT_MS);
|
|
340
|
+
const now = Date.now();
|
|
341
|
+
this.pendingSave = true;
|
|
342
|
+
if (this.firstPendingAtMs === null) this.firstPendingAtMs = now;
|
|
343
|
+
if (now - this.firstPendingAtMs >= ms * BUFFER_SAVE_MAX_DEFER_MULTIPLIER) {
|
|
344
|
+
// Staleness cap hit: persist now rather than deferring further. Drop the
|
|
345
|
+
// armed timer, attempt the write, and only mark clean on success — a
|
|
346
|
+
// failure keeps the save pending + re-arms so shutdown/the next timer
|
|
347
|
+
// retries (issue #1909 review round 2), never diverging memory from disk.
|
|
348
|
+
clearTimeout(this.saveTimer ?? undefined);
|
|
349
|
+
this.saveTimer = null;
|
|
350
|
+
try {
|
|
351
|
+
await this.saveUnlocked();
|
|
352
|
+
this.pendingSave = false;
|
|
353
|
+
this.firstPendingAtMs = null;
|
|
354
|
+
} catch (err) {
|
|
355
|
+
log.warn(`buffer.scheduleSave: staleness-cap save failed, keeping it pending: ${describeError(err)}`);
|
|
356
|
+
this.saveTimer = setTimeout(() => {
|
|
357
|
+
this.saveTimer = null;
|
|
358
|
+
void this.flushPendingSave();
|
|
359
|
+
}, ms);
|
|
360
|
+
this.saveTimer.unref?.();
|
|
361
|
+
}
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
// True trailing edge: drop any armed timer and re-arm from now.
|
|
365
|
+
clearTimeout(this.saveTimer ?? undefined);
|
|
366
|
+
this.saveTimer = setTimeout(() => {
|
|
367
|
+
this.saveTimer = null;
|
|
368
|
+
void this.flushPendingSave();
|
|
369
|
+
}, ms);
|
|
370
|
+
this.saveTimer.unref?.();
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/** Cancel any armed debounced save without persisting. */
|
|
374
|
+
private cancelScheduledSave(): void {
|
|
375
|
+
if (this.saveTimer) {
|
|
376
|
+
clearTimeout(this.saveTimer);
|
|
377
|
+
this.saveTimer = null;
|
|
378
|
+
}
|
|
379
|
+
this.pendingSave = false;
|
|
380
|
+
this.firstPendingAtMs = null;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Persist the current in-memory buffer state inline, keeping the global
|
|
385
|
+
* pending-save state armed until the write SUCCEEDS (issue #1909). On failure
|
|
386
|
+
* the save stays pending and — when debounced — a background retry timer is
|
|
387
|
+
* (re-)armed before the error propagates, so a graceful shutdown flush and the
|
|
388
|
+
* next timer tick both retry. A failed post-mutation save therefore can never
|
|
389
|
+
* silently drop buffered turns, including turns from OTHER sessions that were
|
|
390
|
+
* only in the debounced pending state. The pending flag is cleared (and any
|
|
391
|
+
* armed timer dropped) only after a durable write.
|
|
392
|
+
*/
|
|
393
|
+
private async saveNowRetainingPendingOnFailure(context: string): Promise<void> {
|
|
394
|
+
this.pendingSave = true;
|
|
395
|
+
if (this.firstPendingAtMs === null) this.firstPendingAtMs = Date.now();
|
|
396
|
+
try {
|
|
397
|
+
await this.saveUnlocked();
|
|
398
|
+
} catch (err) {
|
|
399
|
+
log.warn(
|
|
400
|
+
`buffer.${context}: inline save failed, keeping it pending for retry: ${describeError(err)}`,
|
|
401
|
+
);
|
|
402
|
+
const ms = Math.min(this.config.bufferSaveDebounceMs, MAX_SET_TIMEOUT_MS);
|
|
403
|
+
if (ms > 0 && !this.saveTimer) {
|
|
404
|
+
this.saveTimer = setTimeout(() => {
|
|
405
|
+
this.saveTimer = null;
|
|
406
|
+
void this.flushPendingSave();
|
|
407
|
+
}, ms);
|
|
408
|
+
this.saveTimer.unref?.();
|
|
409
|
+
}
|
|
410
|
+
throw err;
|
|
411
|
+
}
|
|
412
|
+
this.cancelScheduledSave();
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Force any pending debounced save to land now (issue #1909). Idempotent and
|
|
417
|
+
* safe to call from outside a mutation (timer tick, shutdown/dispose, or the
|
|
418
|
+
* surprise-promotion path in `addTurnWithOutcome`). Do NOT `await` this from
|
|
419
|
+
* inside a mutation — it enqueues its own mutation and would deadlock the
|
|
420
|
+
* serializer.
|
|
421
|
+
*
|
|
422
|
+
* `throwOnFailure` (review round 7 finding 5): when set, a failed write is
|
|
423
|
+
* rethrown AFTER the keep-pending + re-arm bookkeeping, so the surprise
|
|
424
|
+
* extraction boundary gets the same durability guarantee as the built-in
|
|
425
|
+
* extract triggers (which propagate saveUnlocked failures) instead of
|
|
426
|
+
* proceeding to extract_now on a non-durable triggering turn. Default false
|
|
427
|
+
* keeps the fail-open behavior for the timer/shutdown callers.
|
|
428
|
+
*/
|
|
429
|
+
async flushPendingSave(opts?: { throwOnFailure?: boolean }): Promise<void> {
|
|
430
|
+
if (this.saveTimer) {
|
|
431
|
+
clearTimeout(this.saveTimer);
|
|
432
|
+
this.saveTimer = null;
|
|
433
|
+
}
|
|
434
|
+
if (!this.pendingSave) return;
|
|
435
|
+
try {
|
|
436
|
+
await this.enqueueMutation(async () => {
|
|
437
|
+
// Re-check under the serializer: a concurrent flush may have already
|
|
438
|
+
// persisted this pending save. Skip the redundant write (no phantom
|
|
439
|
+
// writes).
|
|
440
|
+
if (!this.pendingSave) return;
|
|
441
|
+
await this.saveUnlocked();
|
|
442
|
+
// Clear the pending flag INSIDE the same serialized mutation as the
|
|
443
|
+
// write (issue #1909 review). Clearing it after the enqueue await
|
|
444
|
+
// resolved raced an addTurn interleaving between the write and the
|
|
445
|
+
// clear: that turn's scheduleSave re-armed pendingSave + a timer, then
|
|
446
|
+
// this clear wiped it and the debounced flush was lost. Atomic
|
|
447
|
+
// write+clear means any addTurn runs wholly before (its turn is in the
|
|
448
|
+
// write) or wholly after (its pendingSave survives and its timer
|
|
449
|
+
// persists it).
|
|
450
|
+
this.pendingSave = false;
|
|
451
|
+
this.firstPendingAtMs = null;
|
|
452
|
+
});
|
|
453
|
+
} catch (err) {
|
|
454
|
+
// The write failed: memory and disk diverge (issue #1909 review round 2).
|
|
455
|
+
// Keep the save PENDING (do NOT clear pendingSave/firstPendingAtMs) so a
|
|
456
|
+
// graceful shutdown flush and the re-armed timer both retry it — clearing
|
|
457
|
+
// the flag here would drop the buffered turns permanently. Re-arm a
|
|
458
|
+
// background retry when debounced.
|
|
459
|
+
log.warn(`buffer.flushPendingSave: save failed, keeping it pending for retry: ${describeError(err)}`);
|
|
460
|
+
const ms = Math.min(this.config.bufferSaveDebounceMs, MAX_SET_TIMEOUT_MS);
|
|
461
|
+
if (ms > 0 && !this.saveTimer) {
|
|
462
|
+
this.saveTimer = setTimeout(() => {
|
|
463
|
+
this.saveTimer = null;
|
|
464
|
+
void this.flushPendingSave();
|
|
465
|
+
}, ms);
|
|
466
|
+
this.saveTimer.unref?.();
|
|
467
|
+
}
|
|
468
|
+
// Surprise-extraction boundary needs the durability guarantee — surface
|
|
469
|
+
// the failure so the caller does not proceed with a non-durable flush.
|
|
470
|
+
if (opts?.throwOnFailure) throw err;
|
|
471
|
+
return; // fail-open for timer/shutdown callers
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
294
475
|
async addTurn(bufferKey: string, turn: BufferTurn): Promise<TriggerDecision> {
|
|
295
476
|
return (await this.addTurnWithOutcome(bufferKey, turn)).decision;
|
|
296
477
|
}
|
|
@@ -336,6 +517,16 @@ export class SmartBuffer {
|
|
|
336
517
|
decision = "extract_now";
|
|
337
518
|
triggered = true;
|
|
338
519
|
extractionTurns = currentTurns;
|
|
520
|
+
// Issue #1909 (review): the record mutation for a `keep_buffering`
|
|
521
|
+
// turn only SCHEDULED a debounced save. Surprise now promotes it to
|
|
522
|
+
// extract_now AFTER that mutation, so force the buffer durable before
|
|
523
|
+
// the caller runs extraction — otherwise state/buffer.json lags the
|
|
524
|
+
// extracted turns by up to the debounce window on a crash. Safe to
|
|
525
|
+
// await here: we are outside the record mutation (deadlock-free).
|
|
526
|
+
// throwOnFailure (round 7 finding 5): match the built-in extract
|
|
527
|
+
// triggers — a failed durability write must NOT silently proceed to
|
|
528
|
+
// extract_now on a non-durable turn.
|
|
529
|
+
await this.flushPendingSave({ throwOnFailure: true });
|
|
339
530
|
} else {
|
|
340
531
|
log.debug(
|
|
341
532
|
`buffer[${bufferKey}]: surprise=${surprise.toFixed(3)} ignored because buffer changed before probe resolved`,
|
|
@@ -399,7 +590,20 @@ export class SmartBuffer {
|
|
|
399
590
|
const turnCountInWindow = entry.turns.length;
|
|
400
591
|
|
|
401
592
|
this.pruneEntries([bufferKey]);
|
|
402
|
-
|
|
593
|
+
if (decision === "keep_buffering" && this.config.bufferSaveDebounceMs > 0) {
|
|
594
|
+
// Steady-state buffering: coalesce the whole-state serialize onto a
|
|
595
|
+
// trailing-edge timer (issue #1909) instead of rewriting per turn.
|
|
596
|
+
await this.scheduleSave();
|
|
597
|
+
} else {
|
|
598
|
+
// Persist immediately within this mutation (awaited) when either:
|
|
599
|
+
// - the turn triggered extraction (the buffer must be durable), or
|
|
600
|
+
// - debounce is disabled (bufferSaveDebounceMs <= 0), which reproduces
|
|
601
|
+
// the legacy save-every-turn behavior byte-for-byte.
|
|
602
|
+
// Round 8 thread 4: the write is attempted BEFORE the pending state is
|
|
603
|
+
// cleared, and a failed write leaves it pending (+ a re-armed timer) for
|
|
604
|
+
// shutdown/timer retry instead of dropping the in-memory turns.
|
|
605
|
+
await this.saveNowRetainingPendingOnFailure("recordTurn");
|
|
606
|
+
}
|
|
403
607
|
return {
|
|
404
608
|
decision,
|
|
405
609
|
signalLevel: signal.level,
|
|
@@ -710,6 +914,17 @@ export class SmartBuffer {
|
|
|
710
914
|
extractedTurns?: readonly BufferTurn[],
|
|
711
915
|
): Promise<void> {
|
|
712
916
|
await this.enqueueMutation(async () => {
|
|
917
|
+
// Drop any armed debounce TIMER so it cannot fire mid-mutation and race
|
|
918
|
+
// our post-clear write, but KEEP the pending-save state (issue #1909
|
|
919
|
+
// review round 13): the post-clear save below can fail, and clearing the
|
|
920
|
+
// pending flag here would strand buffered turns — including turns from
|
|
921
|
+
// OTHER sessions that only ever entered the debounced pending state — with
|
|
922
|
+
// nothing left to retry them. saveNowRetainingPendingOnFailure clears the
|
|
923
|
+
// pending state only after a durable write, or re-arms it on failure.
|
|
924
|
+
if (this.saveTimer) {
|
|
925
|
+
clearTimeout(this.saveTimer);
|
|
926
|
+
this.saveTimer = null;
|
|
927
|
+
}
|
|
713
928
|
await this.loadUnlocked();
|
|
714
929
|
const entry = this.entryFor(bufferKey);
|
|
715
930
|
if (Array.isArray(extractedTurns)) {
|
|
@@ -733,7 +948,7 @@ export class SmartBuffer {
|
|
|
733
948
|
}
|
|
734
949
|
}
|
|
735
950
|
if (!clearedLiveTurns) {
|
|
736
|
-
await this.
|
|
951
|
+
await this.saveNowRetainingPendingOnFailure("clearAfterExtraction");
|
|
737
952
|
return;
|
|
738
953
|
}
|
|
739
954
|
} else {
|
|
@@ -747,7 +962,7 @@ export class SmartBuffer {
|
|
|
747
962
|
this.state.extractionCount = entry.extractionCount;
|
|
748
963
|
}
|
|
749
964
|
this.pruneEntries([bufferKey]);
|
|
750
|
-
await this.
|
|
965
|
+
await this.saveNowRetainingPendingOnFailure("clearAfterExtraction");
|
|
751
966
|
});
|
|
752
967
|
}
|
|
753
968
|
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
const ACCESS_FIELD_TO_FLAG: Record<keyof AccessSetupCapabilitySet, string> = {
|
|
18
18
|
recallCrossNamespaceBudget: "recallCrossNamespaceBudgetEnabled",
|
|
19
19
|
recallAuditAnomalyDetection: "recallAuditAnomalyDetectionEnabled",
|
|
20
|
+
recallSingleFlight: "recallSingleFlightEnabled",
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
const ACCESS_FIELDS = Object.keys(ACCESS_FIELD_TO_FLAG) as Array<
|
package/src/capabilities.ts
CHANGED
|
@@ -189,16 +189,14 @@ export interface AccessSetupCapabilitySet {
|
|
|
189
189
|
readonly recallCrossNamespaceBudget: boolean;
|
|
190
190
|
/** `recallAuditAnomalyDetectionEnabled` — access-audit anomaly detection (default-off). */
|
|
191
191
|
readonly recallAuditAnomalyDetection: boolean;
|
|
192
|
+
readonly recallSingleFlight: boolean;
|
|
192
193
|
}
|
|
193
194
|
|
|
194
|
-
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
* Call this ONCE at access-service handler entry and thread the result down.
|
|
198
|
-
*/
|
|
195
|
+
/** Resolve the {@link AccessSetupCapabilitySet} from parsed config. Call ONCE at
|
|
196
|
+
* access-service handler entry and thread the result down. */
|
|
199
197
|
export type AccessSetupConfigProjection = Pick<
|
|
200
198
|
PluginConfig,
|
|
201
|
-
"recallCrossNamespaceBudgetEnabled" | "recallAuditAnomalyDetectionEnabled"
|
|
199
|
+
"recallCrossNamespaceBudgetEnabled" | "recallAuditAnomalyDetectionEnabled" | "recallSingleFlightEnabled"
|
|
202
200
|
>;
|
|
203
201
|
|
|
204
202
|
export function resolveAccessSetupCapabilities(
|
|
@@ -208,6 +206,7 @@ export function resolveAccessSetupCapabilities(
|
|
|
208
206
|
recallCrossNamespaceBudget: config.recallCrossNamespaceBudgetEnabled,
|
|
209
207
|
// Optional/default-off flag: preserve `=== true` semantics.
|
|
210
208
|
recallAuditAnomalyDetection: config.recallAuditAnomalyDetectionEnabled === true,
|
|
209
|
+
recallSingleFlight: config.recallSingleFlightEnabled === true,
|
|
211
210
|
});
|
|
212
211
|
}
|
|
213
212
|
|
package/src/cli.ts
CHANGED
|
@@ -28,6 +28,7 @@ import type {
|
|
|
28
28
|
import { isRecallDisclosure, RECALL_DISCLOSURE_LEVELS } from "./types.js";
|
|
29
29
|
import { chunkContent } from "./chunking.js";
|
|
30
30
|
import { rescoreMemoryImportance } from "./importance.js";
|
|
31
|
+
import { renderQmdBacklogStatus } from "./qmd-status.js";
|
|
31
32
|
import { exportJsonBundle } from "./transfer/export-json.js";
|
|
32
33
|
import { exportMarkdownBundle } from "./transfer/export-md.js";
|
|
33
34
|
import { backupMemoryDir } from "./transfer/backup.js";
|
|
@@ -51,7 +52,11 @@ import {
|
|
|
51
52
|
type ProcessBatchFn,
|
|
52
53
|
} from "./bulk-import/index.js";
|
|
53
54
|
import { archiveObservations } from "./maintenance/archive-observations.js";
|
|
54
|
-
import {
|
|
55
|
+
import {
|
|
56
|
+
runRebuildMemoryLifecycleLedgerCliCommand,
|
|
57
|
+
type RebuildMemoryLifecycleLedgerCliCommandOptions,
|
|
58
|
+
} from "./maintenance/rebuild-memory-lifecycle-ledger-cli.js";
|
|
59
|
+
export { runRebuildMemoryLifecycleLedgerCliCommand, type RebuildMemoryLifecycleLedgerCliCommandOptions };
|
|
55
60
|
import {
|
|
56
61
|
listMemoryGovernanceRuns,
|
|
57
62
|
readMemoryGovernanceRunArtifact,
|
|
@@ -465,12 +470,6 @@ export interface RebuildObservationsCliCommandOptions {
|
|
|
465
470
|
now?: Date;
|
|
466
471
|
}
|
|
467
472
|
|
|
468
|
-
export interface RebuildMemoryLifecycleLedgerCliCommandOptions {
|
|
469
|
-
memoryDir: string;
|
|
470
|
-
write?: boolean;
|
|
471
|
-
now?: Date;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
473
|
export interface RebuildMemoryProjectionCliCommandOptions {
|
|
475
474
|
memoryDir: string;
|
|
476
475
|
defaultNamespace?: string;
|
|
@@ -1024,16 +1023,6 @@ export async function runRebuildObservationsCliCommand(
|
|
|
1024
1023
|
});
|
|
1025
1024
|
}
|
|
1026
1025
|
|
|
1027
|
-
export async function runRebuildMemoryLifecycleLedgerCliCommand(
|
|
1028
|
-
options: RebuildMemoryLifecycleLedgerCliCommandOptions,
|
|
1029
|
-
) {
|
|
1030
|
-
return rebuildMemoryLifecycleLedger({
|
|
1031
|
-
memoryDir: options.memoryDir,
|
|
1032
|
-
dryRun: options.write !== true,
|
|
1033
|
-
now: options.now,
|
|
1034
|
-
});
|
|
1035
|
-
}
|
|
1036
|
-
|
|
1037
1026
|
export async function runRebuildMemoryProjectionCliCommand(
|
|
1038
1027
|
options: RebuildMemoryProjectionCliCommandOptions,
|
|
1039
1028
|
) {
|
|
@@ -3674,10 +3663,9 @@ export function registerCli(
|
|
|
3674
3663
|
console.log(`Profile size: ${profile.length} chars`);
|
|
3675
3664
|
console.log(`Extractions: ${meta.extractionCount}`);
|
|
3676
3665
|
console.log(`Last extraction: ${meta.lastExtractionAt ?? "never"}`);
|
|
3677
|
-
console.log(
|
|
3678
|
-
`Last consolidation: ${meta.lastConsolidationAt ?? "never"}`,
|
|
3679
|
-
);
|
|
3666
|
+
console.log(`Last consolidation: ${meta.lastConsolidationAt ?? "never"}`);
|
|
3680
3667
|
console.log(`QMD: ${orchestrator.qmd.isAvailable() ? "available" : "not available"}`);
|
|
3668
|
+
for (const line of await renderQmdBacklogStatus(orchestrator.qmd, orchestrator.config.qmdEmbeddingBacklogThreshold)) console.log(line);
|
|
3681
3669
|
|
|
3682
3670
|
// Category breakdown
|
|
3683
3671
|
const categories: Record<string, number> = {};
|
|
@@ -7035,13 +7023,24 @@ export function registerCli(
|
|
|
7035
7023
|
.command("rebuild-memory-lifecycle-ledger")
|
|
7036
7024
|
.description("Rebuild the generic memory lifecycle ledger from markdown memories (dry-run by default)")
|
|
7037
7025
|
.option("--write", "Write rebuilt ledger (default: dry-run)")
|
|
7026
|
+
.option("--namespace <ns>", "Namespace whose ledger to rebuild (default: config defaultNamespace)", "")
|
|
7038
7027
|
.action(async (...args: unknown[]) => {
|
|
7039
7028
|
const options = (args[0] ?? {}) as Record<string, unknown>;
|
|
7029
|
+
const namespace = typeof options.namespace === "string" && options.namespace.trim().length > 0
|
|
7030
|
+
? options.namespace.trim()
|
|
7031
|
+
: undefined;
|
|
7032
|
+
// Route BOTH the undefined/default and explicit namespace through the
|
|
7033
|
+
// router (#2033 finding 2): a store may live at a tokenized
|
|
7034
|
+
// namespaces/<token>/ path, and the default can migrate off the legacy
|
|
7035
|
+
// root, so storage.dir keeps the rebuild aligned with the namespace
|
|
7036
|
+
// router and secure store. The raw resolver still validates the segment.
|
|
7037
|
+
await resolveMemoryDirForNamespace(orchestrator, namespace, { rejectUnsupportedOverride: true });
|
|
7038
|
+
const storage = await orchestrator.getStorageForNamespace(namespace);
|
|
7040
7039
|
const result = await runRebuildMemoryLifecycleLedgerCliCommand({
|
|
7041
|
-
memoryDir:
|
|
7040
|
+
memoryDir: storage.dir,
|
|
7042
7041
|
write: options.write === true,
|
|
7042
|
+
storage,
|
|
7043
7043
|
});
|
|
7044
|
-
|
|
7045
7044
|
console.log(`Dry run: ${result.dryRun ? "yes" : "no"}`);
|
|
7046
7045
|
console.log(`Scanned memories: ${result.scannedMemories}`);
|
|
7047
7046
|
console.log(`Rebuilt rows: ${result.rebuiltRows}`);
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
type ArchitectureSurfaceRequest,
|
|
32
32
|
type ArchitectureSurfaceStorage,
|
|
33
33
|
} from "./architecture-surfaces.js";
|
|
34
|
+
import { sealedWriteToLegacyArgs } from "../write-envelope.js";
|
|
34
35
|
import type { ArchitectureCardBuildResult } from "./architecture-card.js";
|
|
35
36
|
import type {
|
|
36
37
|
CodingKnowledgeConfig,
|
|
@@ -109,7 +110,9 @@ function makeStubStorage(initialMemories: MemoryFile[] = []): StubStorage {
|
|
|
109
110
|
written,
|
|
110
111
|
updated,
|
|
111
112
|
async readAllMemories() { return [...allMemories]; },
|
|
112
|
-
|
|
113
|
+
// Production mapper keeps the legacy-shaped recorder faithful (§21).
|
|
114
|
+
async writeSealedMemory(envelope, extras) {
|
|
115
|
+
const { category, content, options } = sealedWriteToLegacyArgs(envelope, extras as Record<string, unknown>);
|
|
113
116
|
const id = `fact-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
114
117
|
written.push({ category, content, options });
|
|
115
118
|
allMemories.push({
|
|
@@ -409,8 +412,8 @@ test("refresh: tombstone-blocked write surfaces refreshed:false + blocked reason
|
|
|
409
412
|
const base = makeStubStorage();
|
|
410
413
|
const storage: StubStorage = {
|
|
411
414
|
...base,
|
|
412
|
-
async
|
|
413
|
-
const result = await base.
|
|
415
|
+
async writeSealedMemory(envelope, extras) {
|
|
416
|
+
const result = await base.writeSealedMemory(envelope, extras);
|
|
414
417
|
return { ...result, tombstoneBlocked: true, blockedBy: "tomb-arch-1" };
|
|
415
418
|
},
|
|
416
419
|
};
|
|
@@ -34,6 +34,7 @@ import type { MemoryWriteResult } from "../storage.js";
|
|
|
34
34
|
import { stripAttributesSuffix } from "../structured-attributes.js";
|
|
35
35
|
import { ARCHITECTURE_CARD_TRUNCATION_MARKER, type ArchitectureCardBuildResult } from "./architecture-card.js";
|
|
36
36
|
import { log } from "../logger.js";
|
|
37
|
+
import { composeMemoryEnvelope, type SealedMemoryEnvelope } from "../write-envelope.js";
|
|
37
38
|
|
|
38
39
|
// ──────────────────────────────────────────────────────────────────────────
|
|
39
40
|
// Subcommands
|
|
@@ -149,17 +150,10 @@ export interface ArchitectureSurfaceStorage {
|
|
|
149
150
|
/** The resolved namespace — used for logging/observability. */
|
|
150
151
|
readonly namespace: string;
|
|
151
152
|
readAllMemories(): Promise<readonly MemoryFile[]>;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
confidence?: number;
|
|
157
|
-
tags?: string[];
|
|
158
|
-
source?: string;
|
|
159
|
-
status?: MemoryStatus;
|
|
160
|
-
structuredAttributes?: Record<string, string>;
|
|
161
|
-
sourceConnector?: string;
|
|
162
|
-
},
|
|
153
|
+
/** Sealed-envelope write entry point (issue #1989 PR4). */
|
|
154
|
+
writeSealedMemory(
|
|
155
|
+
envelope: SealedMemoryEnvelope,
|
|
156
|
+
extras: { status?: MemoryStatus },
|
|
163
157
|
): Promise<MemoryWriteResult>;
|
|
164
158
|
updateMemory(
|
|
165
159
|
id: string,
|
|
@@ -320,13 +314,22 @@ async function architectureRefresh(
|
|
|
320
314
|
log.warn(
|
|
321
315
|
`coding_architecture/refresh: updateMemory returned false for id=${existing.frontmatter.id} — falling back to writeMemory`,
|
|
322
316
|
);
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
317
|
+
// Sealed-envelope write (issue #1989 PR4): system-built card content —
|
|
318
|
+
// strict compose; an invalid card is a code bug that must surface.
|
|
319
|
+
const fallbackWrite = await storage.writeSealedMemory(
|
|
320
|
+
composeMemoryEnvelope(
|
|
321
|
+
{
|
|
322
|
+
content: cardContent,
|
|
323
|
+
category: "fact",
|
|
324
|
+
confidence: 1.0,
|
|
325
|
+
tags,
|
|
326
|
+
structuredAttributes: { cardKind: ARCHITECTURE_CARD_KIND },
|
|
327
|
+
...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),
|
|
328
|
+
},
|
|
329
|
+
{ source: "coding-architecture" },
|
|
330
|
+
),
|
|
331
|
+
{},
|
|
332
|
+
);
|
|
330
333
|
log.info(
|
|
331
334
|
`access-write op=coding_architecture/refresh memoryId=${fallbackWrite.id} (fallback write) byteSize=${buildResult.card.byteSize}`,
|
|
332
335
|
);
|
|
@@ -345,13 +348,21 @@ async function architectureRefresh(
|
|
|
345
348
|
}
|
|
346
349
|
|
|
347
350
|
// First card for this namespace — write a new memory.
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
351
|
+
// Sealed-envelope write (issue #1989 PR4): strict — see the fallback site.
|
|
352
|
+
const newWrite = await storage.writeSealedMemory(
|
|
353
|
+
composeMemoryEnvelope(
|
|
354
|
+
{
|
|
355
|
+
content: cardContent,
|
|
356
|
+
category: "fact",
|
|
357
|
+
confidence: 1.0,
|
|
358
|
+
tags,
|
|
359
|
+
structuredAttributes: { cardKind: ARCHITECTURE_CARD_KIND },
|
|
360
|
+
...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),
|
|
361
|
+
},
|
|
362
|
+
{ source: "coding-architecture" },
|
|
363
|
+
),
|
|
364
|
+
{},
|
|
365
|
+
);
|
|
355
366
|
log.info(
|
|
356
367
|
`access-write op=coding_architecture/refresh memoryId=${newWrite.id} (new) byteSize=${buildResult.card.byteSize}`,
|
|
357
368
|
);
|