@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
|
@@ -27,11 +27,13 @@ import {
|
|
|
27
27
|
import {
|
|
28
28
|
applyTrustScoreStage,
|
|
29
29
|
buildTrustSignalsForRerank,
|
|
30
|
+
trustResultKey,
|
|
30
31
|
type TrustStageResultItem,
|
|
31
32
|
} from "../trust-score-stage.js";
|
|
32
33
|
import type { TrustSignals } from "../trust-score.js";
|
|
33
34
|
import { reorderRecallResultsWithMmr } from "../recall-mmr.js";
|
|
34
35
|
import { applyReasoningTraceBoost } from "../reasoning-trace-recall.js";
|
|
36
|
+
import { memoryMapKey } from "../recall-memory-map.js";
|
|
35
37
|
|
|
36
38
|
/**
|
|
37
39
|
* Coordinator for the recall-result reranking subsystem.
|
|
@@ -47,19 +49,49 @@ export class RecallRerankCoordinator {
|
|
|
47
49
|
resultPath: string,
|
|
48
50
|
fallbackStorage: StorageManager,
|
|
49
51
|
recallNamespaces: readonly string[],
|
|
52
|
+
preferredNamespace?: string,
|
|
50
53
|
) => Promise<MemoryFile | null>;
|
|
51
54
|
|
|
55
|
+
// Per-namespace corpus-fallback caches (issue #1905). Keyed on the shared
|
|
56
|
+
// cross-process memory-corpus version rather than a wall-clock TTL: the old
|
|
57
|
+
// 30s TTL was SHORTER than recall p50 (~30.5s) so every steady-state recall
|
|
58
|
+
// was a guaranteed miss + full-corpus scan. The corpus version bumps on every
|
|
59
|
+
// memory mutation (StorageManager.getMemoryCorpusVersion / patchHotMemoriesCache),
|
|
60
|
+
// including mw_success/mw_fail counter writes, so a version match means the
|
|
61
|
+
// derived map is still current and can be served; a mismatch re-derives.
|
|
52
62
|
private readonly memoryWorthCounterCache = new Map<
|
|
53
63
|
string,
|
|
54
|
-
{
|
|
64
|
+
{ version: number; counters: ReadonlyMap<string, MemoryWorthCounters> }
|
|
55
65
|
>();
|
|
56
|
-
private static readonly MEMORY_WORTH_CACHE_TTL_MS = 30_000;
|
|
57
66
|
|
|
58
67
|
private readonly trustSignalCache = new Map<
|
|
59
68
|
string,
|
|
60
|
-
{
|
|
69
|
+
{ version: number; cachedAt: number; signals: ReadonlyMap<string, TrustSignals> }
|
|
61
70
|
>();
|
|
62
|
-
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Cap on distinct namespaces retained in the corpus-fallback caches. Each
|
|
74
|
+
* entry holds a derived per-namespace map; on high-cardinality namespace
|
|
75
|
+
* workloads an unbounded map would grow without limit (#1905, Cursor). Map
|
|
76
|
+
* preserves insertion order, so overflow evicts the oldest namespace.
|
|
77
|
+
*/
|
|
78
|
+
private static readonly CORPUS_FALLBACK_CACHE_MAX_NAMESPACES = 64;
|
|
79
|
+
|
|
80
|
+
// Trust-signal age bound (TRUST_SIGNAL_CACHE_MAX_AGE_MS) lives in
|
|
81
|
+
// trust-score-stage.ts — that module owns the signal cache's read/write and
|
|
82
|
+
// the TTL check (signals bake `now` into their values). This coordinator only
|
|
83
|
+
// owns the memory-worth counter cache, whose values are raw (no `now`), so it
|
|
84
|
+
// is version-keyed only.
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
/** Insert-ordered bounded set: evict the oldest namespace on overflow. */
|
|
88
|
+
private static capCache<K, V>(cache: Map<K, V>, max: number): void {
|
|
89
|
+
while (cache.size > max) {
|
|
90
|
+
const oldest = cache.keys().next().value;
|
|
91
|
+
if (oldest === undefined) break;
|
|
92
|
+
cache.delete(oldest);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
63
95
|
|
|
64
96
|
constructor(options: {
|
|
65
97
|
getConfig: () => PluginConfig;
|
|
@@ -68,6 +100,7 @@ export class RecallRerankCoordinator {
|
|
|
68
100
|
resultPath: string,
|
|
69
101
|
fallbackStorage: StorageManager,
|
|
70
102
|
recallNamespaces: readonly string[],
|
|
103
|
+
preferredNamespace?: string,
|
|
71
104
|
) => Promise<MemoryFile | null>;
|
|
72
105
|
}) {
|
|
73
106
|
this.getConfig = options.getConfig;
|
|
@@ -78,66 +111,110 @@ export class RecallRerankCoordinator {
|
|
|
78
111
|
async applyMemoryWorthRerank(
|
|
79
112
|
results: QmdSearchResult[],
|
|
80
113
|
namespaces: string[],
|
|
114
|
+
// Candidate frontmatter already loaded on the hot recall path (issue
|
|
115
|
+
// #1905). Additive + last so the positional call shape stays
|
|
116
|
+
// backward-compatible. When present, counters are seeded from it directly
|
|
117
|
+
// and the O(corpus) `readAllMemories` scan is skipped for warm candidates.
|
|
118
|
+
preloadedFrontmatter?: ReadonlyMap<string, MemoryFile>,
|
|
119
|
+
// Cooperative cancellation (issue #1905, Codex); additive + last.
|
|
120
|
+
abortSignal?: AbortSignal,
|
|
81
121
|
): Promise<QmdSearchResult[]> {
|
|
82
|
-
|
|
83
|
-
// namespace the recall spans — the recall path itself already
|
|
84
|
-
// aggregates candidates from multiple namespaces, so we must do the
|
|
85
|
-
// same when looking up counters. Per-namespace results are cached with
|
|
86
|
-
// a short TTL so interactive recall doesn't trigger a full
|
|
87
|
-
// `readAllMemories` scan per query (addresses codex P2 on PR 4).
|
|
122
|
+
const config = this.getConfig();
|
|
88
123
|
const counters = new Map<string, MemoryWorthCounters>();
|
|
89
|
-
|
|
90
|
-
|
|
124
|
+
// Paths examined via preloaded frontmatter (issue #1905, Codex). A candidate
|
|
125
|
+
// whose frontmatter is present but has no mw_success/mw_fail is a NEUTRAL
|
|
126
|
+
// prior — it must NOT be treated as "missing", otherwise the corpus scan +
|
|
127
|
+
// direct-read fallback fire for every uninstrumented hot-QMD candidate and
|
|
128
|
+
// the O(candidates) fast path is defeated. Track preloaded paths separately
|
|
129
|
+
// from counters and exclude them from every fallback.
|
|
130
|
+
const preloadedPaths = new Set<string>();
|
|
91
131
|
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
132
|
+
// O(candidates) fast path (issue #1905): seed counters directly from
|
|
133
|
+
// frontmatter already loaded on the hot path. The
|
|
134
|
+
// `mw_success === undefined && mw_fail === undefined` guard matches
|
|
135
|
+
// `buildMemoryWorthCounterMap` exactly so a candidate with no counters is a
|
|
136
|
+
// neutral prior, identical to the corpus scan.
|
|
137
|
+
if (preloadedFrontmatter) {
|
|
138
|
+
for (const r of results) {
|
|
139
|
+
const key = memoryMapKey(r);
|
|
140
|
+
// Composite (namespace, path) key is authoritative — it can never hit a
|
|
141
|
+
// wrong-namespace entry. The bare-path fallback keeps path-keyed callers
|
|
142
|
+
// working and is inert in production (loaded maps are composite-keyed).
|
|
143
|
+
const mem = preloadedFrontmatter.get(key) ?? preloadedFrontmatter.get(r.path);
|
|
144
|
+
if (!mem) continue;
|
|
145
|
+
preloadedPaths.add(key);
|
|
146
|
+
const fm = mem.frontmatter;
|
|
147
|
+
if (fm.mw_success === undefined && fm.mw_fail === undefined) continue;
|
|
148
|
+
counters.set(key, {
|
|
149
|
+
mw_success: fm.mw_success,
|
|
150
|
+
mw_fail: fm.mw_fail,
|
|
151
|
+
lastAccessed: fm.lastAccessed,
|
|
152
|
+
});
|
|
100
153
|
}
|
|
101
154
|
}
|
|
102
155
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
|
|
156
|
+
// Corpus-level fallback (config-gated): candidates still missing from the
|
|
157
|
+
// preloaded map probe a per-namespace counter map. The map is cached and
|
|
158
|
+
// invalidated by the shared cross-process corpus version (not a wall-clock
|
|
159
|
+
// TTL), so it actually hits in steady state. Only the candidate rows are
|
|
160
|
+
// copied out — never the whole ~99K-entry map (issue #1905).
|
|
161
|
+
if (config.recallTrustStageCorpusFallbackEnabled) {
|
|
162
|
+
const seenNamespaces = new Set<string>();
|
|
163
|
+
for (const ns of namespaces) {
|
|
164
|
+
// Cooperative cancellation: the recall's assembly deadline may have won
|
|
165
|
+
// the race — stop before another namespace scan (#1905, Codex).
|
|
166
|
+
if (abortSignal?.aborted) break;
|
|
167
|
+
if (seenNamespaces.has(ns)) continue;
|
|
168
|
+
seenNamespaces.add(ns);
|
|
169
|
+
if (results.every((r) => counters.has(memoryMapKey(r)) || preloadedPaths.has(memoryMapKey(r)))) break;
|
|
170
|
+
try {
|
|
115
171
|
const storage = await this.getStorage(ns);
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
172
|
+
const version = storage.getMemoryCorpusVersion();
|
|
173
|
+
const cached = this.memoryWorthCounterCache.get(ns);
|
|
174
|
+
let nsMap: ReadonlyMap<string, MemoryWorthCounters>;
|
|
175
|
+
if (cached && cached.version === version) {
|
|
176
|
+
nsMap = cached.counters;
|
|
177
|
+
} else {
|
|
178
|
+
const memories = await storage.readAllMemories();
|
|
179
|
+
nsMap = buildMemoryWorthCounterMap(memories);
|
|
180
|
+
this.memoryWorthCounterCache.set(ns, { version, counters: nsMap });
|
|
181
|
+
RecallRerankCoordinator.capCache(
|
|
182
|
+
this.memoryWorthCounterCache,
|
|
183
|
+
RecallRerankCoordinator.CORPUS_FALLBACK_CACHE_MAX_NAMESPACES,
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
for (const r of results) {
|
|
187
|
+
// Skip candidates already satisfied by a counter OR already examined
|
|
188
|
+
// via preloaded frontmatter (neutral prior — no corpus lookup needed).
|
|
189
|
+
const key = memoryMapKey(r);
|
|
190
|
+
if (counters.has(key) || preloadedPaths.has(key)) continue;
|
|
191
|
+
// A namespaced result belongs to exactly one namespace: never seed
|
|
192
|
+
// its counters from a different namespace's corpus map, or two
|
|
193
|
+
// same-path results in different namespaces collapse (#2020).
|
|
194
|
+
if (r.namespace !== undefined && r.namespace !== ns) continue;
|
|
195
|
+
const c = nsMap.get(r.path);
|
|
196
|
+
if (c) counters.set(key, c);
|
|
197
|
+
}
|
|
198
|
+
} catch (err) {
|
|
199
|
+
log.debug("memory-worth: failed to read namespace, skipping", {
|
|
200
|
+
namespace: ns,
|
|
201
|
+
error: (err as Error).message,
|
|
202
|
+
});
|
|
119
203
|
}
|
|
120
|
-
for (const [path, c] of nsMap) counters.set(path, c);
|
|
121
|
-
} catch (err) {
|
|
122
|
-
log.debug("memory-worth: failed to read namespace, skipping", {
|
|
123
|
-
namespace: ns,
|
|
124
|
-
error: (err as Error).message,
|
|
125
|
-
});
|
|
126
204
|
}
|
|
127
205
|
}
|
|
128
206
|
|
|
129
|
-
// For candidates
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
207
|
+
// For candidates still absent (cold-tier / archive, or corpus fallback
|
|
208
|
+
// disabled), try a direct per-path read. Bounded-parallel (≤16) to match
|
|
209
|
+
// loadSearchResultMemoryMap's batch size (issue #1905). Errors are swallowed
|
|
210
|
+
// so a single unreadable archive entry can't break the whole recall.
|
|
211
|
+
const missing = results.filter(
|
|
212
|
+
(r) => !counters.has(memoryMapKey(r)) && !preloadedPaths.has(memoryMapKey(r)),
|
|
213
|
+
);
|
|
136
214
|
if (missing.length > 0) {
|
|
137
215
|
// Use the first-seen namespace's storage as the reader — all
|
|
138
|
-
// StorageManagers share the same on-disk format, and
|
|
139
|
-
//
|
|
140
|
-
// have to match.
|
|
216
|
+
// StorageManagers share the same on-disk format, and readMemoryByPath
|
|
217
|
+
// takes an absolute path so the baseDir doesn't have to match.
|
|
141
218
|
let reader: StorageManager | null = null;
|
|
142
219
|
for (const ns of namespaces) {
|
|
143
220
|
try {
|
|
@@ -148,23 +225,36 @@ export class RecallRerankCoordinator {
|
|
|
148
225
|
}
|
|
149
226
|
}
|
|
150
227
|
if (reader) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
228
|
+
const readerNn = reader;
|
|
229
|
+
const BATCH = 16;
|
|
230
|
+
for (let off = 0; off < missing.length; off += BATCH) {
|
|
231
|
+
// Cooperative cancellation between batches (#1905, Codex).
|
|
232
|
+
if (abortSignal?.aborted) break;
|
|
233
|
+
await Promise.all(
|
|
234
|
+
missing.slice(off, off + BATCH).map(async (r) => {
|
|
235
|
+
try {
|
|
236
|
+
const memory = await this.readQmdResultMemory(
|
|
237
|
+
r.path,
|
|
238
|
+
readerNn,
|
|
239
|
+
namespaces,
|
|
240
|
+
r.namespace,
|
|
241
|
+
);
|
|
242
|
+
if (!memory) return;
|
|
243
|
+
const fm = memory.frontmatter;
|
|
244
|
+
if (fm.mw_success === undefined && fm.mw_fail === undefined) return;
|
|
245
|
+
counters.set(memoryMapKey(r), {
|
|
246
|
+
mw_success: fm.mw_success,
|
|
247
|
+
mw_fail: fm.mw_fail,
|
|
248
|
+
lastAccessed: fm.lastAccessed,
|
|
249
|
+
});
|
|
250
|
+
} catch (err) {
|
|
251
|
+
log.debug("memory-worth: direct path lookup failed", {
|
|
252
|
+
path: r.path,
|
|
253
|
+
error: (err as Error).message,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}),
|
|
257
|
+
);
|
|
168
258
|
}
|
|
169
259
|
}
|
|
170
260
|
}
|
|
@@ -183,12 +273,13 @@ export class RecallRerankCoordinator {
|
|
|
183
273
|
// multiplier on top. Ties fall back to the stable secondary key in
|
|
184
274
|
// `applyMemoryWorthFilter`.
|
|
185
275
|
const rankedInputs = results.map((r, i) => ({
|
|
186
|
-
path
|
|
276
|
+
// Composite (namespace, path) identity so same-path results in different
|
|
277
|
+
// namespaces stay distinct through the filter and reconstruction (#2020).
|
|
278
|
+
path: memoryMapKey(r),
|
|
187
279
|
// Large positive rank score so multiplier math stays well-scaled and
|
|
188
280
|
// we never hit zero; descending so earlier items rank higher.
|
|
189
281
|
score: results.length - i,
|
|
190
282
|
}));
|
|
191
|
-
const config = this.getConfig();
|
|
192
283
|
const filtered = applyMemoryWorthFilter(rankedInputs, {
|
|
193
284
|
counters,
|
|
194
285
|
now: new Date(),
|
|
@@ -203,7 +294,7 @@ export class RecallRerankCoordinator {
|
|
|
203
294
|
// we only reorder. Writing the synthetic rank-weighted score back
|
|
204
295
|
// would contaminate downstream logic (telemetry, confidence gates)
|
|
205
296
|
// that expects the original QMD/rerank score semantics.
|
|
206
|
-
const byPath = new Map(results.map((r) => [r
|
|
297
|
+
const byPath = new Map(results.map((r) => [memoryMapKey(r), r]));
|
|
207
298
|
const reordered: QmdSearchResult[] = [];
|
|
208
299
|
for (const item of filtered) {
|
|
209
300
|
const original = byPath.get(item.path);
|
|
@@ -229,6 +320,14 @@ export class RecallRerankCoordinator {
|
|
|
229
320
|
async applyTrustScoreRerank(
|
|
230
321
|
results: QmdSearchResult[],
|
|
231
322
|
namespaces: string[],
|
|
323
|
+
// Candidate frontmatter already loaded on the hot recall path (issue
|
|
324
|
+
// #1905); additive + last for positional back-compat. Seeds signals
|
|
325
|
+
// directly so warm candidates skip the O(corpus) namespace scan.
|
|
326
|
+
preloadedFrontmatter?: ReadonlyMap<string, MemoryFile>,
|
|
327
|
+
// Cooperative cancellation (issue #1905, Codex): aborted by the host when
|
|
328
|
+
// the recall's assembly deadline wins the race, so orphaned corpus scans
|
|
329
|
+
// stop at the next loop boundary. Additive + last for positional back-compat.
|
|
330
|
+
abortSignal?: AbortSignal,
|
|
232
331
|
): Promise<{
|
|
233
332
|
results: QmdSearchResult[];
|
|
234
333
|
trustByPath: Map<string, TrustStageResultItem> | null;
|
|
@@ -244,11 +343,19 @@ export class RecallRerankCoordinator {
|
|
|
244
343
|
// candidate (mirrors the memory-worth filter's reader selection).
|
|
245
344
|
let fallbackReader: StorageManager | null = null;
|
|
246
345
|
const signals = await buildTrustSignalsForRerank(
|
|
247
|
-
results.map((r) =>
|
|
346
|
+
results.map((r) => ({
|
|
347
|
+
path: r.path,
|
|
348
|
+
// Signals are keyed by the SAME composite key the trust stage looks up
|
|
349
|
+
// (trustResultKey), and preloaded frontmatter by memoryMapKey, so
|
|
350
|
+
// same-path results in different namespaces stay distinct (#2020).
|
|
351
|
+
signalKey: trustResultKey(r),
|
|
352
|
+
lookupKey: memoryMapKey(r),
|
|
353
|
+
namespace: r.namespace,
|
|
354
|
+
})),
|
|
248
355
|
namespaces,
|
|
249
356
|
{
|
|
250
357
|
readNamespaceMemories: async (ns) => (await this.getStorage(ns)).readAllMemories(),
|
|
251
|
-
readMemoryFrontmatter: async (path) => {
|
|
358
|
+
readMemoryFrontmatter: async (path, preferredNamespace) => {
|
|
252
359
|
if (!fallbackReader) {
|
|
253
360
|
for (const ns of namespaces) {
|
|
254
361
|
try {
|
|
@@ -260,23 +367,38 @@ export class RecallRerankCoordinator {
|
|
|
260
367
|
}
|
|
261
368
|
}
|
|
262
369
|
if (!fallbackReader) return null;
|
|
263
|
-
const memory = await this.readQmdResultMemory(
|
|
370
|
+
const memory = await this.readQmdResultMemory(
|
|
371
|
+
path,
|
|
372
|
+
fallbackReader,
|
|
373
|
+
namespaces,
|
|
374
|
+
preferredNamespace,
|
|
375
|
+
);
|
|
264
376
|
return memory ? memory.frontmatter : null;
|
|
265
377
|
},
|
|
378
|
+
// Corpus version bumps on every memory mutation (including mw counter
|
|
379
|
+
// writes) — keys the per-namespace signal cache so it invalidates on
|
|
380
|
+
// the next write instead of a wall-clock TTL (issue #1905).
|
|
381
|
+
getNamespaceVersion: async (ns) => (await this.getStorage(ns)).getMemoryCorpusVersion(),
|
|
266
382
|
},
|
|
267
|
-
{ cache: this.trustSignalCache
|
|
383
|
+
{ cache: this.trustSignalCache },
|
|
268
384
|
now,
|
|
269
385
|
{
|
|
270
386
|
recencyHalfLifeDays: halfLifeDays,
|
|
271
387
|
logDebug: (message, context) => log.debug(message, context),
|
|
388
|
+
preloadedFrontmatter,
|
|
389
|
+
corpusFallbackEnabled: config.recallTrustStageCorpusFallbackEnabled,
|
|
390
|
+
abortSignal,
|
|
272
391
|
},
|
|
273
392
|
);
|
|
274
393
|
if (signals.size === 0) {
|
|
275
394
|
return { results, trustByPath: null };
|
|
276
395
|
}
|
|
277
396
|
// Synthetic monotone-decreasing rank so the multiplier rebias is applied
|
|
278
|
-
|
|
279
|
-
|
|
397
|
+
const rankedInputs = results.map((r, i) => ({
|
|
398
|
+
path: r.path,
|
|
399
|
+
key: trustResultKey(r),
|
|
400
|
+
score: results.length - i,
|
|
401
|
+
}));
|
|
280
402
|
const stage = applyTrustScoreStage(rankedInputs, {
|
|
281
403
|
signals,
|
|
282
404
|
weights: config.trustScoreWeights,
|
|
@@ -284,10 +406,22 @@ export class RecallRerankCoordinator {
|
|
|
284
406
|
maxMultiplier: config.trustScoreMaxMultiplier,
|
|
285
407
|
quarantine: config.trustScoreQuarantine,
|
|
286
408
|
});
|
|
287
|
-
const trustByPath = new Map(
|
|
288
|
-
|
|
409
|
+
const trustByPath = new Map(
|
|
410
|
+
stage.all.map((item) => [item.key ?? item.path, item] as const),
|
|
411
|
+
);
|
|
412
|
+
const byKey = new Map<string, QmdSearchResult[]>();
|
|
413
|
+
for (const result of results) {
|
|
414
|
+
const key = trustResultKey(result);
|
|
415
|
+
const bucket = byKey.get(key);
|
|
416
|
+
if (bucket) bucket.push(result);
|
|
417
|
+
else byKey.set(key, [result]);
|
|
418
|
+
}
|
|
289
419
|
const admitted = stage.admitted
|
|
290
|
-
.map((item) =>
|
|
420
|
+
.map((item) => {
|
|
421
|
+
const key = item.key ?? item.path;
|
|
422
|
+
if (item.key !== undefined) return byKey.get(key)?.shift();
|
|
423
|
+
return results.find((result) => result.path === item.path);
|
|
424
|
+
})
|
|
291
425
|
.filter((r): r is QmdSearchResult => r !== undefined);
|
|
292
426
|
return { results: admitted, trustByPath };
|
|
293
427
|
}
|
|
@@ -307,13 +441,21 @@ export class RecallRerankCoordinator {
|
|
|
307
441
|
namespaces: string[],
|
|
308
442
|
caps: CapabilitySet,
|
|
309
443
|
label: string,
|
|
444
|
+
// Candidate frontmatter already loaded on this branch's hot path (issue
|
|
445
|
+
// #1905); additive + last. Threaded to the active stage so it does
|
|
446
|
+
// O(candidates) work instead of a full-corpus scan. `undefined` on
|
|
447
|
+
// branches without a safety-filter map → falls back to corpus/direct-read
|
|
448
|
+
// (identical lookup result, rule 41 parity).
|
|
449
|
+
preloadedFrontmatter?: ReadonlyMap<string, MemoryFile>,
|
|
450
|
+
// Cooperative cancellation (issue #1905, Codex); additive + last.
|
|
451
|
+
abortSignal?: AbortSignal,
|
|
310
452
|
): Promise<{
|
|
311
453
|
results: QmdSearchResult[];
|
|
312
454
|
trustByPath: Map<string, TrustStageResultItem> | null;
|
|
313
455
|
}> {
|
|
314
456
|
if (caps.recallTrustScore && results.length > 0) {
|
|
315
457
|
try {
|
|
316
|
-
return await this.applyTrustScoreRerank(results, namespaces);
|
|
458
|
+
return await this.applyTrustScoreRerank(results, namespaces, preloadedFrontmatter, abortSignal);
|
|
317
459
|
} catch (err) {
|
|
318
460
|
log.debug(`trust-score stage (${label}) failed open`, {
|
|
319
461
|
error: (err as Error).message,
|
|
@@ -321,7 +463,12 @@ export class RecallRerankCoordinator {
|
|
|
321
463
|
}
|
|
322
464
|
} else if (caps.recallMemoryWorthFilter && results.length > 0) {
|
|
323
465
|
try {
|
|
324
|
-
const filtered = await this.applyMemoryWorthRerank(
|
|
466
|
+
const filtered = await this.applyMemoryWorthRerank(
|
|
467
|
+
results,
|
|
468
|
+
namespaces,
|
|
469
|
+
preloadedFrontmatter,
|
|
470
|
+
abortSignal,
|
|
471
|
+
);
|
|
325
472
|
return { results: filtered, trustByPath: null };
|
|
326
473
|
} catch (err) {
|
|
327
474
|
log.debug(`memory-worth filter (${label}) failed open`, {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import { buildHandleIndexForResults } from "../recall-handles.js";
|
|
21
|
+
import path from "node:path";
|
|
21
22
|
import { renderEpistemicHedge } from "../trust-score.js";
|
|
22
23
|
import { resolveIdentityContinuityCapabilities } from "../capabilities.js";
|
|
23
24
|
import type { StorageManager } from "../index.js";
|
|
@@ -28,7 +29,7 @@ import type { HarmonicRetrievalResult } from "../harmonic-retrieval.js";
|
|
|
28
29
|
import type { VerifiedEpisodeResult } from "../verified-recall.js";
|
|
29
30
|
import type { VerifiedSemanticRuleResult } from "../semantic-rule-verifier.js";
|
|
30
31
|
import type { WorkProductLedgerSearchResult } from "../work-product-ledger.js";
|
|
31
|
-
import type
|
|
32
|
+
import { trustResultFor, type TrustStageResultItem } from "../trust-score-stage.js";
|
|
32
33
|
import type {
|
|
33
34
|
ContinuityIncidentRecord,
|
|
34
35
|
IdentityInjectionMode,
|
|
@@ -66,6 +67,53 @@ export function resolveEffectiveIdentityInjectionMode(options: {
|
|
|
66
67
|
return { mode: options.configuredMode, shouldInject: true };
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Render an internal (possibly absolute) result path as a memoryDir-relative
|
|
72
|
+
* path for display in prompts/citations, so operator-specific filesystem paths
|
|
73
|
+
* never leak into recall output and citations stay portable across machines
|
|
74
|
+
* (#2020). Non-absolute or out-of-root paths are returned unchanged.
|
|
75
|
+
*/
|
|
76
|
+
export function displayResultPath(
|
|
77
|
+
resultPath: string,
|
|
78
|
+
memoryDir: string,
|
|
79
|
+
namespace?: string,
|
|
80
|
+
): string {
|
|
81
|
+
if (!path.isAbsolute(resultPath)) return resultPath;
|
|
82
|
+
const root = path.resolve(memoryDir);
|
|
83
|
+
const nsRoot = path.join(root, "namespaces");
|
|
84
|
+
if (namespace && (resultPath === nsRoot || resultPath.startsWith(nsRoot + path.sep))) {
|
|
85
|
+
// memoryDir/namespaces/<token>/<rel> -> "<namespace>/<rel>", the exact
|
|
86
|
+
// form the citation resolver decodes back to the owning namespace.
|
|
87
|
+
const afterNs = path.relative(nsRoot, resultPath).split(path.sep).slice(1).join("/");
|
|
88
|
+
if (afterNs) return `${namespace}/${afterNs}`;
|
|
89
|
+
}
|
|
90
|
+
const rel = path.relative(root, resultPath);
|
|
91
|
+
return rel && !rel.startsWith("..") && !path.isAbsolute(rel)
|
|
92
|
+
? rel.split(path.sep).join("/")
|
|
93
|
+
: resultPath;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Return a copy of budget metadata with `includedMemoryPaths` rendered
|
|
98
|
+
* memoryDir-relative, so recall/last-recall API callers never receive operator
|
|
99
|
+
* filesystem paths via budget output even though the internal snapshot keeps
|
|
100
|
+
* absolute paths for tracking/x-ray (#2020). Other fields are unchanged.
|
|
101
|
+
*/
|
|
102
|
+
export function displaySafeBudgetsApplied<
|
|
103
|
+
T extends {
|
|
104
|
+
includedMemoryPaths?: string[];
|
|
105
|
+
includedMemoryNamespaces?: Array<string | undefined>;
|
|
106
|
+
},
|
|
107
|
+
>(budgetsApplied: T | undefined, memoryDir: string): T | undefined {
|
|
108
|
+
if (!budgetsApplied?.includedMemoryPaths) return budgetsApplied;
|
|
109
|
+
return {
|
|
110
|
+
...budgetsApplied,
|
|
111
|
+
includedMemoryPaths: budgetsApplied.includedMemoryPaths.map((p, i) =>
|
|
112
|
+
displayResultPath(p, memoryDir, budgetsApplied.includedMemoryNamespaces?.[i]),
|
|
113
|
+
),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
69
117
|
// ---------------------------------------------------------------------------
|
|
70
118
|
// Coordinator
|
|
71
119
|
// ---------------------------------------------------------------------------
|
|
@@ -80,39 +128,32 @@ export class RecallResultFormatter {
|
|
|
80
128
|
|
|
81
129
|
// ── QMD results (memory handles + epistemic hedge) ──────────────────────
|
|
82
130
|
|
|
83
|
-
|
|
131
|
+
formatQmdResultEntries(
|
|
84
132
|
title: string,
|
|
85
133
|
results: QmdSearchResult[],
|
|
86
134
|
sessionKey?: string,
|
|
87
135
|
trustByPath?: Map<string, TrustStageResultItem> | null,
|
|
88
|
-
): string {
|
|
89
|
-
// Issue #1582 — handles are only rendered when a session key is available:
|
|
90
|
-
// resolution requires the handle history to have been recorded for this
|
|
91
|
-
// session, which only happens when sessionKey is present. Rendering handles
|
|
92
|
-
// without recording would show tokens a user can never resolve (cursor
|
|
93
|
-
// review). The rendering logic itself lives in the pure handles module.
|
|
136
|
+
): { heading: string; entries: string[] } {
|
|
94
137
|
const handleByIndex = buildHandleIndexForResults(
|
|
95
138
|
results,
|
|
96
139
|
this.config.recallMemoryHandles === true && sessionKey != null,
|
|
97
140
|
);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
// and neutral items get no suffix (don't waste tokens on the common case).
|
|
103
|
-
const renderHedge = this.config.trustScoreEpistemicRendering && trustByPath !== null && trustByPath !== undefined;
|
|
141
|
+
const renderHedge =
|
|
142
|
+
this.config.trustScoreEpistemicRendering &&
|
|
143
|
+
trustByPath !== null &&
|
|
144
|
+
trustByPath !== undefined;
|
|
104
145
|
const hedgeMap = renderHedge ? trustByPath : null;
|
|
105
|
-
const
|
|
146
|
+
const entries = results.map((r, i) => {
|
|
106
147
|
const snippet = r.snippet
|
|
107
148
|
? r.snippet.slice(0, 500).replace(/\n/g, " ")
|
|
108
149
|
: "(no preview)";
|
|
109
|
-
const
|
|
150
|
+
const displayPath = displayResultPath(r.path, this.config.memoryDir, r.namespace);
|
|
151
|
+
const source = typeof r.line === "number" ? `${displayPath}:${r.line}` : displayPath;
|
|
110
152
|
const head = `[${i + 1}] ${source} (score: ${r.score.toFixed(3)})\n${snippet}`;
|
|
111
153
|
const handle = handleByIndex.get(i);
|
|
112
|
-
const
|
|
113
|
-
const withHandle = handle ? `${hedged} ${handle}` : hedged;
|
|
154
|
+
const withHandle = handle ? `${head.trimEnd()} ${handle}` : head.trimEnd();
|
|
114
155
|
if (hedgeMap) {
|
|
115
|
-
const item = hedgeMap
|
|
156
|
+
const item = trustResultFor(hedgeMap, r);
|
|
116
157
|
if (item) {
|
|
117
158
|
const hedge = renderEpistemicHedge(item.trust);
|
|
118
159
|
if (hedge.length > 0) return `${withHandle} ${hedge}`;
|
|
@@ -120,7 +161,22 @@ export class RecallResultFormatter {
|
|
|
120
161
|
}
|
|
121
162
|
return withHandle;
|
|
122
163
|
});
|
|
123
|
-
return `## ${title}
|
|
164
|
+
return { heading: `## ${title}`, entries };
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
formatQmdResults(
|
|
168
|
+
title: string,
|
|
169
|
+
results: QmdSearchResult[],
|
|
170
|
+
sessionKey?: string,
|
|
171
|
+
trustByPath?: Map<string, TrustStageResultItem> | null,
|
|
172
|
+
): string {
|
|
173
|
+
const formatted = this.formatQmdResultEntries(
|
|
174
|
+
title,
|
|
175
|
+
results,
|
|
176
|
+
sessionKey,
|
|
177
|
+
trustByPath,
|
|
178
|
+
);
|
|
179
|
+
return [formatted.heading, ...formatted.entries].join("\n\n");
|
|
124
180
|
}
|
|
125
181
|
|
|
126
182
|
// ── Specialized recall result formatters ────────────────────────────────
|