@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
package/src/access-service.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { stat } from "node:fs/promises";
|
|
2
|
+
import { buildAccessWriteRequestFingerprint, buildObserveRequestFingerprint } from "./write-envelope.js";
|
|
2
3
|
import * as nodeFs from "node:fs/promises";
|
|
3
4
|
import { constants as fsConstants } from "node:fs";
|
|
4
5
|
import { readdirSync, unlinkSync } from "node:fs";
|
|
5
6
|
import { createHash } from "node:crypto";
|
|
6
7
|
import { ZodError } from "zod";
|
|
7
8
|
import { AccessIdempotencyStore, hashAccessIdempotencyPayload } from "./access-idempotency.js";
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
recordCitationUsage as recordCitationUsageForAccess,
|
|
11
|
+
type CitationUsageRequest,
|
|
12
|
+
type CitationUsageResult,
|
|
13
|
+
} from "./access-citation.js";
|
|
14
|
+
import { coordinateRecall, type RecallCoordinatorHost, type RecallExecResult } from "./access-recall-concurrency.js";
|
|
9
15
|
import { resolveNamespaceCapabilities,
|
|
10
16
|
resolveMemoryLifecycleCapabilities,
|
|
11
17
|
resolveQmdCapabilities,
|
|
@@ -78,8 +84,14 @@ import {
|
|
|
78
84
|
type ExplicitCaptureInput,
|
|
79
85
|
type ValidExplicitCapture,
|
|
80
86
|
} from "./explicit-capture.js";
|
|
81
|
-
import { CrossNamespaceBudget, type
|
|
87
|
+
import { CrossNamespaceBudget, type BudgetWarning } from "./cross-namespace-budget.js";
|
|
82
88
|
import { log } from "./logger.js";
|
|
89
|
+
import {
|
|
90
|
+
defaultNamespaceAtFlatRoot,
|
|
91
|
+
mergeMemorySearchDefaultFallback,
|
|
92
|
+
resolveMemorySearchDefaultFallback,
|
|
93
|
+
runMemorySearchFanout,
|
|
94
|
+
} from "./access-memory-search-fanout.js";
|
|
83
95
|
import {
|
|
84
96
|
buildQualityScore,
|
|
85
97
|
buildProposedActions,
|
|
@@ -106,7 +118,7 @@ import {
|
|
|
106
118
|
toMemoryPathRel,
|
|
107
119
|
} from "./memory-lifecycle-ledger-utils.js";
|
|
108
120
|
import { getMemoryProjectionPath } from "./memory-projection-store.js";
|
|
109
|
-
import { canReadNamespace, canWriteNamespace, defaultNamespaceForPrincipal, recallNamespacesForPrincipal, resolvePrincipal } from "./namespaces/principal.js";
|
|
121
|
+
import { canReadNamespace, canWriteNamespace, citationAuthorizedNamespaces, defaultNamespaceForPrincipal, recallNamespacesForPrincipal, resolvePrincipal } from "./namespaces/principal.js";
|
|
110
122
|
import {
|
|
111
123
|
expandScopeProfileReadNamespaces,
|
|
112
124
|
resolveScopeProfilePlan,
|
|
@@ -153,6 +165,7 @@ import {
|
|
|
153
165
|
type GraphSnapshotNodeMetadata,
|
|
154
166
|
} from "./graph-snapshot.js";
|
|
155
167
|
import * as nodePath from "node:path";
|
|
168
|
+
import { ALL_CATEGORY_DIRS } from "./utils/category-dir.js";
|
|
156
169
|
import {
|
|
157
170
|
buildBriefing,
|
|
158
171
|
FileCalendarSource,
|
|
@@ -243,6 +256,7 @@ import {
|
|
|
243
256
|
type OfflineSyncFileState,
|
|
244
257
|
type OfflineSyncSnapshot,
|
|
245
258
|
} from "./offline-sync.js";
|
|
259
|
+
import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
|
|
246
260
|
import {
|
|
247
261
|
evaluateActionConfidence,
|
|
248
262
|
type ActionConfidenceInput,
|
|
@@ -258,7 +272,10 @@ import { AccessRecallSurface } from "./access-recall-surface.js";
|
|
|
258
272
|
import { AccessIdentityContinuitySurface } from "./access-identity-continuity-surface.js";
|
|
259
273
|
import { selfDeps } from "./orchestration/self-deps.js";
|
|
260
274
|
|
|
261
|
-
|
|
275
|
+
import { EngramAccessInputError, NamespaceNotWritableError } from "./access-errors.js";
|
|
276
|
+
// Re-exported so existing `import { … } from "./access-service.js"` callers keep
|
|
277
|
+
// working after these classes moved to ./access-errors (issue #1888).
|
|
278
|
+
export { EngramAccessInputError, NamespaceNotWritableError } from "./access-errors.js";
|
|
262
279
|
|
|
263
280
|
function qmdCollectionPathParts(resultPath: string): {
|
|
264
281
|
collection: string;
|
|
@@ -391,6 +408,10 @@ export interface EngramAccessQmdHealthResponse {
|
|
|
391
408
|
upgradeAvailable: boolean | null;
|
|
392
409
|
doctorAvailable: boolean | null;
|
|
393
410
|
debugStatus: string;
|
|
411
|
+
pendingEmbeddings: number | null;
|
|
412
|
+
oldestPendingAgeMs: number | null;
|
|
413
|
+
embeddingBacklogThreshold: number;
|
|
414
|
+
degradedReason?: string;
|
|
394
415
|
}
|
|
395
416
|
|
|
396
417
|
export interface EngramAccessRecallRequest {
|
|
@@ -403,6 +424,14 @@ export interface EngramAccessRecallRequest {
|
|
|
403
424
|
mode?: RecallPlanMode | "auto";
|
|
404
425
|
includeDebug?: boolean;
|
|
405
426
|
abortSignal?: AbortSignal;
|
|
427
|
+
/**
|
|
428
|
+
* Internal, server-set field (issue #1906): wall-clock ms the caller
|
|
429
|
+
* waited for a per-principal recall slot / single-flight leader before
|
|
430
|
+
* execution. Set by `recall()`, forwarded into `RecallInvocationOptions`,
|
|
431
|
+
* and folded additively into recall-timings. Not part of the zod schema
|
|
432
|
+
* (same pattern as `abortSignal`).
|
|
433
|
+
*/
|
|
434
|
+
queueWaitMs?: number;
|
|
406
435
|
/**
|
|
407
436
|
* Recall disclosure depth. Omitting it preserves the `"chunk"` default.
|
|
408
437
|
* Other accepted values are `"section"` and `"raw"`.
|
|
@@ -507,7 +536,7 @@ export interface EngramAccessRecallResponse {
|
|
|
507
536
|
disclosure: RecallDisclosure;
|
|
508
537
|
budgetsApplied?: LastRecallSnapshot["budgetsApplied"];
|
|
509
538
|
auditAnomalies?: AnomalyDetectorResult;
|
|
510
|
-
budgetWarning?:
|
|
539
|
+
budgetWarning?: BudgetWarning;
|
|
511
540
|
latencyMs?: number;
|
|
512
541
|
debug?: {
|
|
513
542
|
snapshot?: LastRecallSnapshot;
|
|
@@ -1305,7 +1334,8 @@ export function shapeMemorySummary(
|
|
|
1305
1334
|
export class EngramAccessService {
|
|
1306
1335
|
private readonly idempotency: AccessIdempotencyStore;
|
|
1307
1336
|
private readonly idempotencyLocks = new Map<string, Promise<void>>();
|
|
1308
|
-
private readonly
|
|
1337
|
+
private readonly recallSemaphores = new Map<string, unknown>();
|
|
1338
|
+
private readonly recallInFlight = new Map<string, unknown>();
|
|
1309
1339
|
private readonly budget: CrossNamespaceBudget;
|
|
1310
1340
|
private readonly auditAdapter: AccessAuditAdapter | null;
|
|
1311
1341
|
|
|
@@ -1459,10 +1489,12 @@ export class EngramAccessService {
|
|
|
1459
1489
|
this.orchestrator.config,
|
|
1460
1490
|
);
|
|
1461
1491
|
if (!result.ok) {
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1492
|
+
if (result.reason === "unsupported") {
|
|
1493
|
+
throw new EngramAccessInputError(`unsupported namespace: ${result.namespace}`);
|
|
1494
|
+
}
|
|
1495
|
+
throw new NamespaceNotWritableError(
|
|
1496
|
+
result.namespace,
|
|
1497
|
+
this.resolveRequestPrincipal(sessionKey, authenticatedPrincipal),
|
|
1466
1498
|
);
|
|
1467
1499
|
}
|
|
1468
1500
|
return result.namespace;
|
|
@@ -1588,9 +1620,8 @@ export class EngramAccessService {
|
|
|
1588
1620
|
profilePlan.writeNamespace.length > 0 &&
|
|
1589
1621
|
profilePlan.readNamespaces.includes(profilePlan.writeNamespace);
|
|
1590
1622
|
if (!selectedLayer?.writable || !writeNamespaceReadable) {
|
|
1591
|
-
throw new
|
|
1592
|
-
`scope profile ${profilePlan.profileId} has no writable layer
|
|
1593
|
-
);
|
|
1623
|
+
throw new NamespaceNotWritableError(profilePlan.writeNamespace, principal,
|
|
1624
|
+
`scope profile ${profilePlan.profileId} has no writable layer for principal ${principal ?? "anonymous"}`);
|
|
1594
1625
|
}
|
|
1595
1626
|
return profilePlan.writeNamespace;
|
|
1596
1627
|
}
|
|
@@ -1609,7 +1640,7 @@ export class EngramAccessService {
|
|
|
1609
1640
|
// no separate write policy.
|
|
1610
1641
|
const base = defaultNamespaceForPrincipal(principal, this.orchestrator.config);
|
|
1611
1642
|
if (!canWriteNamespace(principal, base, this.orchestrator.config)) {
|
|
1612
|
-
throw new
|
|
1643
|
+
throw new NamespaceNotWritableError(base, principal);
|
|
1613
1644
|
}
|
|
1614
1645
|
return combineNamespaces(base, overlay.namespace);
|
|
1615
1646
|
}
|
|
@@ -1820,9 +1851,8 @@ export class EngramAccessService {
|
|
|
1820
1851
|
profilePlan.readNamespaces.includes(profilePlan.writeNamespace);
|
|
1821
1852
|
if (!selectedLayer?.writable || !writeNamespaceReadable) {
|
|
1822
1853
|
clearSeededContext();
|
|
1823
|
-
throw new
|
|
1824
|
-
`scope profile ${profilePlan.profileId} has no writable layer
|
|
1825
|
-
);
|
|
1854
|
+
throw new NamespaceNotWritableError(profilePlan.writeNamespace, principal,
|
|
1855
|
+
`scope profile ${profilePlan.profileId} has no writable layer for principal ${principal ?? "anonymous"}`);
|
|
1826
1856
|
}
|
|
1827
1857
|
const legacyRecallNamespaces = Array.isArray(this.orchestrator.config.defaultRecallNamespaces)
|
|
1828
1858
|
? recallNamespacesForPrincipal(principal, this.orchestrator.config)
|
|
@@ -1896,9 +1926,7 @@ export class EngramAccessService {
|
|
|
1896
1926
|
!canWriteNamespace(principal, baseNamespace, this.orchestrator.config)
|
|
1897
1927
|
) {
|
|
1898
1928
|
clearSeededContext();
|
|
1899
|
-
throw new
|
|
1900
|
-
`namespace is not writable: ${baseNamespace}`,
|
|
1901
|
-
);
|
|
1929
|
+
throw new NamespaceNotWritableError(baseNamespace, principal);
|
|
1902
1930
|
}
|
|
1903
1931
|
return {
|
|
1904
1932
|
principal,
|
|
@@ -1925,9 +1953,7 @@ export class EngramAccessService {
|
|
|
1925
1953
|
// it, so it needs no separate write policy — rule 42 / 47 / 48).
|
|
1926
1954
|
if (!canWriteNamespace(principal, baseNamespace, this.orchestrator.config)) {
|
|
1927
1955
|
clearSeededContext();
|
|
1928
|
-
throw new
|
|
1929
|
-
`namespace is not writable: ${baseNamespace}`,
|
|
1930
|
-
);
|
|
1956
|
+
throw new NamespaceNotWritableError(baseNamespace, principal);
|
|
1931
1957
|
}
|
|
1932
1958
|
const writeNamespace = overlaidBase;
|
|
1933
1959
|
const readNamespaces = [writeNamespace];
|
|
@@ -2010,7 +2036,10 @@ export class EngramAccessService {
|
|
|
2010
2036
|
return resolved;
|
|
2011
2037
|
}
|
|
2012
2038
|
|
|
2013
|
-
private resolveReadableNamespacesForSearch(
|
|
2039
|
+
private async resolveReadableNamespacesForSearch(
|
|
2040
|
+
namespace: string | undefined,
|
|
2041
|
+
principal?: string,
|
|
2042
|
+
): Promise<string[]> {
|
|
2014
2043
|
const requested = namespace?.trim();
|
|
2015
2044
|
if (requested) {
|
|
2016
2045
|
return [this.resolveReadableNamespace(requested, principal)];
|
|
@@ -2036,18 +2065,32 @@ export class EngramAccessService {
|
|
|
2036
2065
|
codingContext: null,
|
|
2037
2066
|
codingOverlay: null,
|
|
2038
2067
|
});
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2068
|
+
if (profilePlan) {
|
|
2069
|
+
// Issue #2018: memory_search has no sessionKey, so unlike recall it
|
|
2070
|
+
// cannot resolve a coding overlay. Reach the base collection (default
|
|
2071
|
+
// namespace) only when the profile intends a global layer and the
|
|
2072
|
+
// principal is authorized — see access-memory-search-fanout.ts. The
|
|
2073
|
+
// flat-root storage probe runs lazily HERE (after auth, no explicit
|
|
2074
|
+
// namespace, profile active) so explicit-namespace queries and auth
|
|
2075
|
+
// rejections never touch the default store (#2056 r5).
|
|
2076
|
+
const profileNamespaces = expandScopeProfileReadNamespaces({
|
|
2077
|
+
profilePlan,
|
|
2078
|
+
principalSelfNamespace: profilePlan.baseNamespace,
|
|
2079
|
+
config: this.orchestrator.config,
|
|
2080
|
+
principal,
|
|
2081
|
+
codingOverlay: null,
|
|
2082
|
+
legacyRecallNamespaces,
|
|
2083
|
+
});
|
|
2084
|
+
const fallback = await resolveMemorySearchDefaultFallback({
|
|
2085
|
+
profilePlan,
|
|
2086
|
+
config: this.orchestrator.config,
|
|
2087
|
+
principal,
|
|
2088
|
+
defaultAtFlatRootProvider: () =>
|
|
2089
|
+
defaultNamespaceAtFlatRoot((n) => this.orchestrator.getStorage(n), this.orchestrator.config),
|
|
2090
|
+
});
|
|
2091
|
+
return mergeMemorySearchDefaultFallback(profileNamespaces, fallback);
|
|
2092
|
+
}
|
|
2093
|
+
return legacyRecallNamespaces.filter((ns) =>
|
|
2051
2094
|
canReadNamespace(principal, ns, this.orchestrator.config),
|
|
2052
2095
|
);
|
|
2053
2096
|
}
|
|
@@ -2215,7 +2258,7 @@ export class EngramAccessService {
|
|
|
2215
2258
|
memoryPath: string,
|
|
2216
2259
|
primaryNamespace: string,
|
|
2217
2260
|
recallNamespaces: readonly string[] = [],
|
|
2218
|
-
): Promise<{ storage: StorageManager; dir: string } | null> {
|
|
2261
|
+
): Promise<{ storage: StorageManager; dir: string; namespace: string } | null> {
|
|
2219
2262
|
const resolvedPath = nodePath.resolve(memoryPath);
|
|
2220
2263
|
const memoryRoot = nodePath.resolve(this.orchestrator.config.memoryDir);
|
|
2221
2264
|
const namespacesRoot = nodePath.join(memoryRoot, "namespaces");
|
|
@@ -2226,20 +2269,15 @@ export class EngramAccessService {
|
|
|
2226
2269
|
}
|
|
2227
2270
|
configuredNamespaces.add(this.orchestrator.config.defaultNamespace);
|
|
2228
2271
|
configuredNamespaces.add(this.orchestrator.config.sharedNamespace);
|
|
2272
|
+
// Legacy snapshots persist an absolute resultPath with no per-result namespace;
|
|
2273
|
+
// derive the on-disk owner (decoded) so those paths still resolve (#2020).
|
|
2229
2274
|
if (isPathInsideStorageRoot(namespacesRoot, resolvedPath)) {
|
|
2230
|
-
const
|
|
2231
|
-
|
|
2232
|
-
if (namespaceSegment) {
|
|
2233
|
-
configuredNamespaces.add(
|
|
2234
|
-
namespaceIdentityFromToken(namespaceSegment) ?? namespaceSegment,
|
|
2235
|
-
);
|
|
2236
|
-
}
|
|
2237
|
-
}
|
|
2238
|
-
for (const policy of this.orchestrator.config.namespacePolicies ?? []) {
|
|
2239
|
-
configuredNamespaces.add(policy.name);
|
|
2275
|
+
const [seg] = nodePath.relative(namespacesRoot, resolvedPath).split(/[\\/]/);
|
|
2276
|
+
if (seg) configuredNamespaces.add(namespaceIdentityFromToken(seg) ?? seg);
|
|
2240
2277
|
}
|
|
2278
|
+
for (const policy of this.orchestrator.config.namespacePolicies ?? []) configuredNamespaces.add(policy.name);
|
|
2241
2279
|
|
|
2242
|
-
const matches: Array<{ storage: StorageManager; dir: string }> = [];
|
|
2280
|
+
const matches: Array<{ storage: StorageManager; dir: string; namespace: string }> = [];
|
|
2243
2281
|
for (const ns of configuredNamespaces) {
|
|
2244
2282
|
if (!ns) continue;
|
|
2245
2283
|
let candidateStorage: StorageManager;
|
|
@@ -2256,7 +2294,7 @@ export class EngramAccessService {
|
|
|
2256
2294
|
) {
|
|
2257
2295
|
continue;
|
|
2258
2296
|
}
|
|
2259
|
-
matches.push({ storage: candidateStorage, dir: candidateRoot });
|
|
2297
|
+
matches.push({ storage: candidateStorage, dir: candidateRoot, namespace: ns });
|
|
2260
2298
|
}
|
|
2261
2299
|
|
|
2262
2300
|
matches.sort((a, b) => b.dir.length - a.dir.length);
|
|
@@ -2420,27 +2458,6 @@ export class EngramAccessService {
|
|
|
2420
2458
|
}
|
|
2421
2459
|
}
|
|
2422
2460
|
|
|
2423
|
-
private async withBudgetLock<T>(principal: string, abortSignal: AbortSignal | undefined, fn: () => Promise<T>): Promise<T> {
|
|
2424
|
-
const key = principal || "__anonymous__";
|
|
2425
|
-
const previous = this.budgetLocks.get(key) ?? Promise.resolve();
|
|
2426
|
-
let release!: () => void;
|
|
2427
|
-
const current = new Promise<void>((resolve) => {
|
|
2428
|
-
release = resolve;
|
|
2429
|
-
});
|
|
2430
|
-
const queued = previous.then(() => current, () => current);
|
|
2431
|
-
this.budgetLocks.set(key, queued);
|
|
2432
|
-
await previous.catch(() => {});
|
|
2433
|
-
try {
|
|
2434
|
-
throwIfAborted(abortSignal);
|
|
2435
|
-
return await fn();
|
|
2436
|
-
} finally {
|
|
2437
|
-
release();
|
|
2438
|
-
if (this.budgetLocks.get(key) === queued) {
|
|
2439
|
-
this.budgetLocks.delete(key);
|
|
2440
|
-
}
|
|
2441
|
-
}
|
|
2442
|
-
}
|
|
2443
|
-
|
|
2444
2461
|
async health(namespace?: string): Promise<EngramAccessHealthResponse> {
|
|
2445
2462
|
const resolvedNamespace = this.resolveNamespace(namespace);
|
|
2446
2463
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
@@ -2743,38 +2760,23 @@ export class EngramAccessService {
|
|
|
2743
2760
|
"authentication required: namespaces are enabled and no principal was supplied",
|
|
2744
2761
|
);
|
|
2745
2762
|
}
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
afterStore: () => {
|
|
2759
|
-
if (!budgetRecordPrincipal) return;
|
|
2760
|
-
const recordedBudgetDecision = this.budget.record(budgetRecordPrincipal);
|
|
2761
|
-
if (!recordedBudgetDecision.allowed) {
|
|
2762
|
-
throw new EngramAccessInputError(
|
|
2763
|
-
`recall denied: cross-namespace budget exceeded (${recordedBudgetDecision.count}/${recordedBudgetDecision.limit.hardLimit} in ${recordedBudgetDecision.limit.windowMs}ms window)`,
|
|
2764
|
-
);
|
|
2765
|
-
}
|
|
2766
|
-
},
|
|
2767
|
-
});
|
|
2768
|
-
return response;
|
|
2769
|
-
});
|
|
2763
|
+
const principalKey = principal ?? "default";
|
|
2764
|
+
// Single-flight gate resolved through the shared access-setup capability
|
|
2765
|
+
// projection so the config flag is read only in capabilities.ts (#1523).
|
|
2766
|
+
const singleFlight = resolveAccessSetupCapabilities(this.orchestrator.config).recallSingleFlight;
|
|
2767
|
+
return coordinateRecall(
|
|
2768
|
+
this as unknown as RecallCoordinatorHost,
|
|
2769
|
+
request,
|
|
2770
|
+
normalizedRequest,
|
|
2771
|
+
requestFingerprint,
|
|
2772
|
+
principalKey,
|
|
2773
|
+
singleFlight,
|
|
2774
|
+
);
|
|
2770
2775
|
}
|
|
2771
2776
|
|
|
2772
2777
|
private async executeRecall(
|
|
2773
2778
|
request: EngramAccessRecallRequest,
|
|
2774
|
-
): Promise<{
|
|
2775
|
-
response: EngramAccessRecallResponse;
|
|
2776
|
-
budgetRecordPrincipal: string | null;
|
|
2777
|
-
}> {
|
|
2779
|
+
): Promise<RecallExecResult> {
|
|
2778
2780
|
return this.accessRecallSurface.executeRecall(
|
|
2779
2781
|
request,
|
|
2780
2782
|
);
|
|
@@ -2947,18 +2949,20 @@ export class EngramAccessService {
|
|
|
2947
2949
|
return this.peekIdempotentWrite({
|
|
2948
2950
|
operation: "memory_store",
|
|
2949
2951
|
idempotencyKey: request.idempotencyKey,
|
|
2950
|
-
|
|
2952
|
+
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
2953
|
+
// inline literal is asserted by access-fingerprint-parity.test.ts.
|
|
2954
|
+
requestFingerprint: buildAccessWriteRequestFingerprint({
|
|
2951
2955
|
schemaVersion,
|
|
2956
|
+
namespace,
|
|
2952
2957
|
content: request.content,
|
|
2953
2958
|
category: request.category,
|
|
2954
2959
|
confidence: request.confidence,
|
|
2955
|
-
namespace,
|
|
2956
2960
|
tags: request.tags,
|
|
2957
2961
|
entityRef: request.entityRef,
|
|
2958
2962
|
ttl: request.ttl,
|
|
2959
2963
|
sourceReason: request.sourceReason,
|
|
2960
2964
|
sourceConnector: request.sourceConnector,
|
|
2961
|
-
},
|
|
2965
|
+
}),
|
|
2962
2966
|
skip: request.dryRun === true,
|
|
2963
2967
|
});
|
|
2964
2968
|
}
|
|
@@ -2984,18 +2988,20 @@ export class EngramAccessService {
|
|
|
2984
2988
|
return this.peekIdempotentWrite({
|
|
2985
2989
|
operation: "suggestion_submit",
|
|
2986
2990
|
idempotencyKey: request.idempotencyKey,
|
|
2987
|
-
|
|
2991
|
+
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
2992
|
+
// inline literal is asserted by access-fingerprint-parity.test.ts.
|
|
2993
|
+
requestFingerprint: buildAccessWriteRequestFingerprint({
|
|
2988
2994
|
schemaVersion,
|
|
2995
|
+
namespace,
|
|
2989
2996
|
content: request.content,
|
|
2990
2997
|
category: request.category,
|
|
2991
2998
|
confidence: request.confidence,
|
|
2992
|
-
namespace,
|
|
2993
2999
|
tags: request.tags,
|
|
2994
3000
|
entityRef: request.entityRef,
|
|
2995
3001
|
ttl: request.ttl,
|
|
2996
3002
|
sourceReason: request.sourceReason,
|
|
2997
3003
|
sourceConnector: request.sourceConnector,
|
|
2998
|
-
},
|
|
3004
|
+
}),
|
|
2999
3005
|
skip: request.dryRun === true,
|
|
3000
3006
|
});
|
|
3001
3007
|
}
|
|
@@ -3287,7 +3293,6 @@ export class EngramAccessService {
|
|
|
3287
3293
|
return isCorrectionFeatureEnabled(this.orchestrator.config);
|
|
3288
3294
|
}
|
|
3289
3295
|
|
|
3290
|
-
|
|
3291
3296
|
private _correctionService: CorrectionService | null = null;
|
|
3292
3297
|
|
|
3293
3298
|
/** Lazily construct + cache the CorrectionService with deps wired from the orchestrator. */
|
|
@@ -4050,7 +4055,9 @@ export class EngramAccessService {
|
|
|
4050
4055
|
return this.handleIdempotentWrite<EngramAccessObserveResponse>({
|
|
4051
4056
|
operation: "observe",
|
|
4052
4057
|
idempotencyKey: request.idempotencyKey,
|
|
4053
|
-
|
|
4058
|
+
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
4059
|
+
// inline literal is asserted by access-fingerprint-parity.test.ts.
|
|
4060
|
+
requestFingerprint: buildObserveRequestFingerprint({
|
|
4054
4061
|
sessionKey: request.sessionKey,
|
|
4055
4062
|
messages: request.messages,
|
|
4056
4063
|
namespace: request.namespace,
|
|
@@ -4060,7 +4067,7 @@ export class EngramAccessService {
|
|
|
4060
4067
|
projectTag: request.projectTag,
|
|
4061
4068
|
effectiveCodingContext: effectiveCodingContext ?? null,
|
|
4062
4069
|
sourceConnector: request.sourceConnector,
|
|
4063
|
-
},
|
|
4070
|
+
}),
|
|
4064
4071
|
beforeExecute: hooks?.enforceWriteQuota,
|
|
4065
4072
|
execute: () => this.runObserve(request),
|
|
4066
4073
|
});
|
|
@@ -4736,8 +4743,6 @@ export class EngramAccessService {
|
|
|
4736
4743
|
expectedGuidelineVersion: request.expectedGuidelineVersion,
|
|
4737
4744
|
});
|
|
4738
4745
|
}
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
4746
|
// ── Memory search & debug ─────────────────────────────────────────────
|
|
4742
4747
|
|
|
4743
4748
|
async memorySearch(request: {
|
|
@@ -4760,20 +4765,21 @@ export class EngramAccessService {
|
|
|
4760
4765
|
? await this.orchestrator.qmd.searchGlobal(query, maxResults)
|
|
4761
4766
|
: await this.orchestrator.qmd.search(query, collection, maxResults);
|
|
4762
4767
|
} else {
|
|
4763
|
-
const readableNamespaces = this.resolveReadableNamespacesForSearch(namespace, principal);
|
|
4768
|
+
const readableNamespaces = await this.resolveReadableNamespacesForSearch(namespace, principal);
|
|
4764
4769
|
const namespaces = this.resolveMemorySearchNamespacesForCollection(
|
|
4765
4770
|
collection,
|
|
4766
4771
|
readableNamespaces,
|
|
4767
4772
|
namespace?.trim() ? undefined : principal,
|
|
4768
4773
|
);
|
|
4769
|
-
results =
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4774
|
+
results = await runMemorySearchFanout({
|
|
4775
|
+
query,
|
|
4776
|
+
namespaces,
|
|
4777
|
+
maxResults,
|
|
4778
|
+
principal,
|
|
4779
|
+
requestedNamespace: namespace,
|
|
4780
|
+
collection,
|
|
4781
|
+
search: (params) => this.orchestrator.searchAcrossNamespaces(params),
|
|
4782
|
+
});
|
|
4777
4783
|
}
|
|
4778
4784
|
|
|
4779
4785
|
return {
|
|
@@ -4994,61 +5000,62 @@ export class EngramAccessService {
|
|
|
4994
5000
|
};
|
|
4995
5001
|
}
|
|
4996
5002
|
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5014
|
-
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5003
|
+
async recordCitationUsage(
|
|
5004
|
+
request: CitationUsageRequest,
|
|
5005
|
+
): Promise<CitationUsageResult> {
|
|
5006
|
+
return recordCitationUsageForAccess(
|
|
5007
|
+
{
|
|
5008
|
+
resolveNamespace: (namespace, sessionId, authenticatedPrincipal) =>
|
|
5009
|
+
this.writableNamespaceFor(namespace, sessionId, authenticatedPrincipal),
|
|
5010
|
+
resolveNamespaceForPath: async (
|
|
5011
|
+
memoryPath,
|
|
5012
|
+
fallbackNamespace,
|
|
5013
|
+
sessionId,
|
|
5014
|
+
authenticatedPrincipal,
|
|
5015
|
+
) => {
|
|
5016
|
+
const principal = this.resolveRequestPrincipal(sessionId, authenticatedPrincipal);
|
|
5017
|
+
const namespacesEnabled = resolveNamespaceCapabilities(this.orchestrator.config).namespaces;
|
|
5018
|
+
if (
|
|
5019
|
+
namespacesEnabled &&
|
|
5020
|
+
!canReadNamespace(principal, fallbackNamespace, this.orchestrator.config)
|
|
5021
|
+
) {
|
|
5022
|
+
throw new EngramAccessInputError(
|
|
5023
|
+
`namespace is not readable: ${fallbackNamespace}`,
|
|
5024
|
+
);
|
|
5025
|
+
}
|
|
5026
|
+
const authorizedNamespaces = namespacesEnabled
|
|
5027
|
+
? Array.from(
|
|
5028
|
+
new Set([...citationAuthorizedNamespaces(principal, this.orchestrator.config), fallbackNamespace]),
|
|
5029
|
+
)
|
|
5030
|
+
: [fallbackNamespace];
|
|
5031
|
+
const resolved = await this.storageForAbsoluteRecallPath(
|
|
5032
|
+
memoryPath,
|
|
5033
|
+
fallbackNamespace,
|
|
5034
|
+
authorizedNamespaces,
|
|
5035
|
+
);
|
|
5036
|
+
if (!resolved) {
|
|
5037
|
+
if (nodePath.isAbsolute(memoryPath)) {
|
|
5038
|
+
throw new EngramAccessInputError("cited path is outside the caller's readable namespaces");
|
|
5039
|
+
}
|
|
5040
|
+
// Attribute to the longest authorized namespace that prefixes the cited
|
|
5041
|
+
// path (namespace names may contain "/"); a bare category lead like a
|
|
5042
|
+
// default `facts/a.md` is not a namespace (#2020).
|
|
5043
|
+
let nsMatch = "";
|
|
5044
|
+
for (const ns of authorizedNamespaces) {
|
|
5045
|
+
if (!ns || ALL_CATEGORY_DIRS.includes(ns)) continue;
|
|
5046
|
+
if ((memoryPath === ns || memoryPath.startsWith(`${ns}/`)) && ns.length > nsMatch.length) nsMatch = ns;
|
|
5047
|
+
}
|
|
5048
|
+
if (nsMatch) return nsMatch;
|
|
5049
|
+
return fallbackNamespace;
|
|
5050
|
+
}
|
|
5051
|
+
return resolved.namespace;
|
|
5052
|
+
},
|
|
5053
|
+
getStorage: (namespace) => this.orchestrator.getStorage(namespace),
|
|
5054
|
+
trackMemoryAccess: (memoryIds, memoryPaths, memoryNamespaces) =>
|
|
5055
|
+
this.orchestrator.trackMemoryAccess(memoryIds, memoryPaths, memoryNamespaces),
|
|
5056
|
+
},
|
|
5057
|
+
request,
|
|
5020
5058
|
);
|
|
5021
|
-
|
|
5022
|
-
// Extract memory IDs from citation paths. The path in citations
|
|
5023
|
-
// follows the pattern `facts/<id>.md` or just `<id>.md`.
|
|
5024
|
-
const memoryIds: string[] = [];
|
|
5025
|
-
for (const entry of request.entries) {
|
|
5026
|
-
// Strip directory prefix and .md extension to derive the memory ID.
|
|
5027
|
-
const basename = entry.path.split("/").pop() ?? entry.path;
|
|
5028
|
-
const id = basename.endsWith(".md") ? basename.slice(0, -3) : basename;
|
|
5029
|
-
if (id.length > 0) {
|
|
5030
|
-
memoryIds.push(id);
|
|
5031
|
-
}
|
|
5032
|
-
}
|
|
5033
|
-
|
|
5034
|
-
if (memoryIds.length === 0) return { submitted: 0, matched: 0 };
|
|
5035
|
-
|
|
5036
|
-
// Determine which IDs correspond to real memories in storage using a
|
|
5037
|
-
// targeted file-existence scan instead of loading all memories (Finding #2).
|
|
5038
|
-
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
5039
|
-
const existingIds = await storage.filterExistingMemoryIds(memoryIds);
|
|
5040
|
-
const matchedIds = memoryIds.filter((id) => existingIds.has(id));
|
|
5041
|
-
|
|
5042
|
-
if (matchedIds.length > 0) {
|
|
5043
|
-
try {
|
|
5044
|
-
this.orchestrator.trackMemoryAccess(matchedIds);
|
|
5045
|
-
} catch {
|
|
5046
|
-
// Fail gracefully — citation usage tracking is best-effort.
|
|
5047
|
-
log.debug("citation usage tracking: failed to record access for cited memories");
|
|
5048
|
-
}
|
|
5049
|
-
}
|
|
5050
|
-
|
|
5051
|
-
return { submitted: memoryIds.length, matched: matchedIds.length };
|
|
5052
5059
|
}
|
|
5053
5060
|
|
|
5054
5061
|
// ── Operator Console state (issue #688 PR 2/3) ────────────────────────────
|
|
@@ -5502,7 +5509,7 @@ export class EngramAccessService {
|
|
|
5502
5509
|
options: EngramAccessOfflineSyncSnapshotRequest & { signal?: AbortSignal } = {},
|
|
5503
5510
|
): Promise<EngramAccessOfflineSyncSnapshotResponse> {
|
|
5504
5511
|
const resolvedNamespace = this.resolveReadableNamespace(options.namespace, options.principal);
|
|
5505
|
-
const storage = await this.orchestrator
|
|
5512
|
+
const storage = await offlineSyncStorageForSnapshot(this.orchestrator, resolvedNamespace);
|
|
5506
5513
|
const storageHash = createHash("sha256").update(storage.dir).digest("hex").slice(0, 16);
|
|
5507
5514
|
const snapshotBuilder = options.includeContent === false && options.baseFiles && options.baseFiles.length > 0
|
|
5508
5515
|
? buildOfflineSyncSnapshotFromBase
|
|
@@ -5528,7 +5535,7 @@ export class EngramAccessService {
|
|
|
5528
5535
|
options: Omit<EngramAccessOfflineSyncSnapshotRequest, "baseCapturedAt" | "baseFiles"> & { signal?: AbortSignal } = {},
|
|
5529
5536
|
): Promise<EngramAccessOfflineSyncSnapshotStreamResponse> {
|
|
5530
5537
|
const resolvedNamespace = this.resolveReadableNamespace(options.namespace, options.principal);
|
|
5531
|
-
const storage = await this.orchestrator
|
|
5538
|
+
const storage = await offlineSyncStorageForSnapshot(this.orchestrator, resolvedNamespace);
|
|
5532
5539
|
const storageHash = createHash("sha256").update(storage.dir).digest("hex").slice(0, 16);
|
|
5533
5540
|
return {
|
|
5534
5541
|
namespace: resolvedNamespace,
|
|
@@ -5553,7 +5560,7 @@ export class EngramAccessService {
|
|
|
5553
5560
|
options: EngramAccessOfflineSyncFilesRequest,
|
|
5554
5561
|
): Promise<EngramAccessOfflineSyncFilesResponse> {
|
|
5555
5562
|
const resolvedNamespace = this.resolveReadableNamespace(options.namespace, options.principal);
|
|
5556
|
-
const storage = await this.orchestrator
|
|
5563
|
+
const storage = await offlineSyncStorageForSnapshot(this.orchestrator, resolvedNamespace);
|
|
5557
5564
|
const storageHash = createHash("sha256").update(storage.dir).digest("hex").slice(0, 16);
|
|
5558
5565
|
try {
|
|
5559
5566
|
const snapshot = await buildOfflineSyncSnapshotForPaths({
|
|
@@ -183,6 +183,7 @@ export const HTTP_ROUTES: readonly HttpRouteEntry[] = [
|
|
|
183
183
|
{ method: "POST", pathname: "/engram/v1/action-confidence", operation: "action_confidence" },
|
|
184
184
|
{ method: "GET", pathname: "/engram/v1/recall/tier-explain", operation: "recall_tier_explain" },
|
|
185
185
|
{ method: "GET", pathname: "/engram/v1/recall/xray", operation: "recall_xray" },
|
|
186
|
+
{ method: "GET", pathname: "/engram/v1/namespace/writable", operation: "namespace_writable" },
|
|
186
187
|
{ method: "GET", pathname: "/engram/v1/wearables/status", operation: "wearables_status" },
|
|
187
188
|
{ method: "POST", pathname: "/engram/v1/wearables/sync", operation: "wearables_sync" },
|
|
188
189
|
{ method: "GET", pathname: "/engram/v1/wearables/transcript", operation: "transcript_day" },
|
|
@@ -327,20 +327,27 @@ export function resolveEffectiveNamespace(
|
|
|
327
327
|
* behavior is unchanged. Both the HTTP transport (`resolveNamespace`) and the
|
|
328
328
|
* MCP dispatch route through this ONE function so no surface is missed.
|
|
329
329
|
*/
|
|
330
|
+
export function isNamespaceAllowed(
|
|
331
|
+
caps: TokenCapabilities | undefined | null,
|
|
332
|
+
namespace: string | undefined,
|
|
333
|
+
defaultNamespace: string | undefined,
|
|
334
|
+
): boolean {
|
|
335
|
+
if (caps?.namespaces === undefined) return true; // unrestricted token
|
|
336
|
+
const effective = resolveEffectiveNamespace(namespace, defaultNamespace);
|
|
337
|
+
return effective !== undefined && caps.namespaces.includes(effective);
|
|
338
|
+
}
|
|
339
|
+
|
|
330
340
|
export function enforceNamespaceAllowList(
|
|
331
341
|
caps: TokenCapabilities | undefined | null,
|
|
332
342
|
namespace: string | undefined,
|
|
333
343
|
defaultNamespace: string | undefined,
|
|
334
344
|
): void {
|
|
335
|
-
if (caps
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
namespace
|
|
340
|
-
|
|
341
|
-
: `token is not permitted to access namespace: ${namespace}`,
|
|
342
|
-
);
|
|
343
|
-
}
|
|
345
|
+
if (isNamespaceAllowed(caps, namespace, defaultNamespace)) return;
|
|
346
|
+
throw new EngramAccessForbiddenError(
|
|
347
|
+
namespace === undefined
|
|
348
|
+
? "token is scoped to specific namespaces; the server default namespace is not permitted — supply an allowed namespace"
|
|
349
|
+
: `token is not permitted to access namespace: ${namespace}`,
|
|
350
|
+
);
|
|
344
351
|
}
|
|
345
352
|
|
|
346
353
|
/**
|