@remnic/core 9.7.15 → 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.
Files changed (929) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -6
  2. package/dist/access-admin-ops-surface.js +85 -71
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-boundary.d.ts +35 -17
  5. package/dist/access-boundary.js +86 -74
  6. package/dist/access-citation.d.ts +28 -0
  7. package/dist/access-citation.js +9 -0
  8. package/dist/access-cli.js +194 -178
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-errors.d.ts +16 -1
  11. package/dist/access-errors.js +7 -3
  12. package/dist/access-http.d.ts +25 -19
  13. package/dist/access-http.js +100 -87
  14. package/dist/access-identity-continuity-surface.d.ts +13 -8
  15. package/dist/access-identity-continuity-surface.js +85 -71
  16. package/dist/access-lcm-surface.d.ts +16 -9
  17. package/dist/access-lcm-surface.js +85 -71
  18. package/dist/access-mcp.d.ts +23 -16
  19. package/dist/access-mcp.js +96 -84
  20. package/dist/access-memory-search-fanout.d.ts +93 -0
  21. package/dist/access-memory-search-fanout.js +18 -0
  22. package/dist/access-observe-write-surface.d.ts +26 -8
  23. package/dist/access-observe-write-surface.js +85 -71
  24. package/dist/access-operations-batch.js +92 -80
  25. package/dist/access-operations.d.ts +29 -22
  26. package/dist/access-operations.js +94 -82
  27. package/dist/access-recall-concurrency.d.ts +250 -0
  28. package/dist/access-recall-concurrency.js +157 -0
  29. package/dist/access-recall-response.d.ts +130 -0
  30. package/dist/access-recall-response.js +147 -0
  31. package/dist/access-recall-surface.d.ts +15 -7
  32. package/dist/access-recall-surface.js +85 -71
  33. package/dist/access-schema.d.ts +98 -98
  34. package/dist/access-schema.js +8 -6
  35. package/dist/{access-service-DpcYZ9Nl.d.ts → access-service-DEL4qCrc.d.ts} +25 -32
  36. package/dist/access-service.d.ts +13 -6
  37. package/dist/access-service.js +89 -72
  38. package/dist/access-surface-catalog.d.ts +23 -16
  39. package/dist/access-surface-catalog.js +1 -0
  40. package/dist/access-surface-catalog.js.map +1 -1
  41. package/dist/access-token-capabilities.d.ts +2 -1
  42. package/dist/access-token-capabilities.js +4 -2
  43. package/dist/action-confidence.d.ts +3 -1
  44. package/dist/active-memory-bridge.d.ts +3 -1
  45. package/dist/active-memory-bridge.js +4 -4
  46. package/dist/active-recall.d.ts +4 -1
  47. package/dist/active-recall.js +23 -13
  48. package/dist/active-recall.js.map +1 -1
  49. package/dist/adapters/index.js +4 -4
  50. package/dist/adapters/registry.js +2 -2
  51. package/dist/{auto-sync-AAMTVZMK.js → auto-sync-UZG3XQZ5.js} +14 -8
  52. package/dist/{auto-sync-AAMTVZMK.js.map → auto-sync-UZG3XQZ5.js.map} +1 -1
  53. package/dist/behavior-learner.d.ts +3 -1
  54. package/dist/behavior-signals.d.ts +3 -1
  55. package/dist/bootstrap.d.ts +12 -7
  56. package/dist/bootstrap.js +2 -2
  57. package/dist/bounded-jsonl-state.d.ts +54 -0
  58. package/dist/bounded-jsonl-state.js +10 -0
  59. package/dist/boxes.js +2 -2
  60. package/dist/briefing.d.ts +5 -2
  61. package/dist/briefing.js +34 -24
  62. package/dist/buffer-surprise-report.d.ts +3 -1
  63. package/dist/buffer.d.ts +60 -2
  64. package/dist/buffer.js +3 -3
  65. package/dist/bulk-import/index.d.ts +5 -3
  66. package/dist/calibration.d.ts +3 -1
  67. package/dist/calibration.js +6 -6
  68. package/dist/capabilities.d.ts +7 -7
  69. package/dist/capabilities.js +1 -1
  70. package/dist/{capsule-crypto-CZJSLEFG.js → capsule-crypto-YO5QJ6L3.js} +3 -3
  71. package/dist/capsule-crypto-YO5QJ6L3.js.map +1 -0
  72. package/dist/{catalog-C9444P10.d.ts → catalog-BWqHb5HT.d.ts} +1 -1
  73. package/dist/causal-behavior.d.ts +3 -1
  74. package/dist/causal-behavior.js +6 -6
  75. package/dist/causal-chain.js +4 -4
  76. package/dist/causal-consolidation.d.ts +3 -1
  77. package/dist/causal-consolidation.js +43 -34
  78. package/dist/causal-consolidation.js.map +1 -1
  79. package/dist/causal-retrieval.js +6 -6
  80. package/dist/causal-trajectory-graph.d.ts +3 -1
  81. package/dist/causal-trajectory-graph.js +1 -1
  82. package/dist/causal-trajectory.js +1 -1
  83. package/dist/{chunk-A3GOMRJG.js → chunk-23L3IXFD.js} +2 -2
  84. package/dist/chunk-2CGLBUW3.js +15 -0
  85. package/dist/chunk-2CGLBUW3.js.map +1 -0
  86. package/dist/{chunk-MRHFJV44.js → chunk-2DQ2XREU.js} +2 -2
  87. package/dist/{chunk-QKQYXZVS.js → chunk-2EJOEICD.js} +1819 -1481
  88. package/dist/chunk-2EJOEICD.js.map +1 -0
  89. package/dist/{chunk-L2B3EE7B.js → chunk-2QMKMVHH.js} +2 -2
  90. package/dist/{chunk-VJVNLNDQ.js → chunk-2UFO7X4Q.js} +7 -7
  91. package/dist/{chunk-2MR3MFQB.js → chunk-2VEOKUPP.js} +3 -3
  92. package/dist/chunk-2Z24E5W2.js +22 -0
  93. package/dist/chunk-2Z24E5W2.js.map +1 -0
  94. package/dist/{chunk-RHOZ5LLO.js → chunk-347WD2LE.js} +2 -2
  95. package/dist/{chunk-HDTQVNWD.js → chunk-3QAH2S33.js} +3 -3
  96. package/dist/{chunk-37CTGERM.js → chunk-3WCASNQZ.js} +12 -1
  97. package/dist/chunk-3WCASNQZ.js.map +1 -0
  98. package/dist/{chunk-LRNMRXJO.js → chunk-3Y224NYC.js} +3 -3
  99. package/dist/{chunk-3IY64MV6.js → chunk-44XZ75OQ.js} +44 -10
  100. package/dist/chunk-44XZ75OQ.js.map +1 -0
  101. package/dist/{chunk-VFSP73LP.js → chunk-45GF7Y3V.js} +2 -2
  102. package/dist/{chunk-K7LOWSLU.js → chunk-4BJQODZF.js} +2479 -1520
  103. package/dist/chunk-4BJQODZF.js.map +1 -0
  104. package/dist/{chunk-JREB6UFH.js → chunk-57OWKFUQ.js} +17 -6
  105. package/dist/chunk-57OWKFUQ.js.map +1 -0
  106. package/dist/{chunk-OEHCMALU.js → chunk-5I4M26Q7.js} +5 -5
  107. package/dist/{chunk-2AZXIZEN.js → chunk-5Q7EVV4X.js} +6 -6
  108. package/dist/{chunk-LC7OODWZ.js → chunk-5SB7SC2G.js} +80 -49
  109. package/dist/chunk-5SB7SC2G.js.map +1 -0
  110. package/dist/{chunk-PUBTHW5O.js → chunk-6DRPPQEJ.js} +2 -2
  111. package/dist/{chunk-NWTGD4AN.js → chunk-6KIQT7RG.js} +10 -9
  112. package/dist/chunk-6KIQT7RG.js.map +1 -0
  113. package/dist/{chunk-FDCTQWLW.js → chunk-6O22TZSB.js} +3 -3
  114. package/dist/{chunk-ZQ7UBUZ6.js → chunk-6QYST5XN.js} +6 -6
  115. package/dist/{chunk-W4PGTAS2.js → chunk-6WAFYNVT.js} +3 -3
  116. package/dist/chunk-6ZMAMSHS.js +20 -0
  117. package/dist/chunk-6ZMAMSHS.js.map +1 -0
  118. package/dist/{chunk-R5VAVVHP.js → chunk-72A4L5JJ.js} +2 -2
  119. package/dist/{chunk-X64YLC24.js → chunk-72VAXGEI.js} +5 -13
  120. package/dist/chunk-72VAXGEI.js.map +1 -0
  121. package/dist/{chunk-IKQTFQMI.js → chunk-755Q3DGF.js} +22 -3
  122. package/dist/chunk-755Q3DGF.js.map +1 -0
  123. package/dist/{chunk-OVJ2HIPE.js → chunk-76GLCM57.js} +158 -125
  124. package/dist/chunk-76GLCM57.js.map +1 -0
  125. package/dist/{chunk-D7FOKIY5.js → chunk-7AMFUATK.js} +12 -9
  126. package/dist/{chunk-D7FOKIY5.js.map → chunk-7AMFUATK.js.map} +1 -1
  127. package/dist/{chunk-BFVEEB7W.js → chunk-7ON2JW73.js} +57 -22
  128. package/dist/chunk-7ON2JW73.js.map +1 -0
  129. package/dist/chunk-7RNBVZZO.js +270 -0
  130. package/dist/chunk-7RNBVZZO.js.map +1 -0
  131. package/dist/{chunk-3FAMU5TX.js → chunk-A6USBZTO.js} +2 -2
  132. package/dist/{chunk-ZHIVCODT.js → chunk-A72SWTWW.js} +7 -7
  133. package/dist/{chunk-FC77VUX5.js → chunk-A7Q43EUZ.js} +2 -2
  134. package/dist/{chunk-UJBESW6X.js → chunk-AE7WMV4V.js} +7 -7
  135. package/dist/{chunk-J2HSAU72.js → chunk-AIK5W3IW.js} +29 -1
  136. package/dist/chunk-AIK5W3IW.js.map +1 -0
  137. package/dist/{chunk-A5UXZRRM.js → chunk-AJ7QCSIS.js} +2 -2
  138. package/dist/{chunk-FNMFJWBY.js → chunk-ANEUPF6O.js} +5 -5
  139. package/dist/chunk-AREGMX2J.js +50 -0
  140. package/dist/chunk-AREGMX2J.js.map +1 -0
  141. package/dist/chunk-AVPXXV6J.js +448 -0
  142. package/dist/chunk-AVPXXV6J.js.map +1 -0
  143. package/dist/{chunk-2A3OXAP2.js → chunk-B7RWBZXW.js} +2 -2
  144. package/dist/{chunk-GWTFLF2P.js → chunk-BJMBJZ2Y.js} +59 -59
  145. package/dist/chunk-BJMBJZ2Y.js.map +1 -0
  146. package/dist/{chunk-74F5STS4.js → chunk-BLAKS3CP.js} +4 -4
  147. package/dist/{chunk-M7VGG3ID.js → chunk-BV5WMSIJ.js} +9 -9
  148. package/dist/{chunk-2BFLDH5F.js → chunk-BXLOS5AJ.js} +2 -2
  149. package/dist/{chunk-UXKMMNJD.js → chunk-C23BYTJV.js} +6 -6
  150. package/dist/{chunk-JZHHREBL.js → chunk-C3AKM55W.js} +2 -2
  151. package/dist/{chunk-RP7YXA67.js → chunk-C5JF6EZ7.js} +2 -2
  152. package/dist/{chunk-T7Y5KPLN.js → chunk-C6XBRYVD.js} +16 -15
  153. package/dist/chunk-C6XBRYVD.js.map +1 -0
  154. package/dist/{chunk-FTYDWKO6.js → chunk-CEN6DW6X.js} +12 -2
  155. package/dist/chunk-CEN6DW6X.js.map +1 -0
  156. package/dist/chunk-CGASUJVP.js +421 -0
  157. package/dist/chunk-CGASUJVP.js.map +1 -0
  158. package/dist/{chunk-EHCONI6E.js → chunk-CQMEM5CC.js} +2 -2
  159. package/dist/{chunk-PBNZVPFS.js → chunk-CXZQOVIE.js} +12 -12
  160. package/dist/chunk-D3V3UMET.js +44 -0
  161. package/dist/chunk-D3V3UMET.js.map +1 -0
  162. package/dist/{chunk-7N2RUBAP.js → chunk-DDA47TES.js} +2 -2
  163. package/dist/{chunk-64SE4X5G.js → chunk-DEBHXHJR.js} +3 -3
  164. package/dist/{chunk-EHK6KZHK.js → chunk-DNHVPZOD.js} +2 -2
  165. package/dist/{chunk-437S3G37.js → chunk-DQEMWVMT.js} +2 -2
  166. package/dist/{chunk-LZZNTPLR.js → chunk-DX3XRGLH.js} +2 -2
  167. package/dist/chunk-EA2H5LML.js +72 -0
  168. package/dist/chunk-EA2H5LML.js.map +1 -0
  169. package/dist/{chunk-INELTPRG.js → chunk-EEC7UJPX.js} +103 -106
  170. package/dist/chunk-EEC7UJPX.js.map +1 -0
  171. package/dist/{chunk-KSNVDPDF.js → chunk-EKBNDKDY.js} +21 -20
  172. package/dist/chunk-EKBNDKDY.js.map +1 -0
  173. package/dist/{chunk-YF6FMLBT.js → chunk-EQWEIIKQ.js} +64 -34
  174. package/dist/chunk-EQWEIIKQ.js.map +1 -0
  175. package/dist/{chunk-DZKHSDOM.js → chunk-ES36HTSC.js} +4 -4
  176. package/dist/{chunk-TN7THW5U.js → chunk-ET356KSB.js} +2 -2
  177. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  178. package/dist/{chunk-DMSDUGDM.js → chunk-F7GAIWFA.js} +20 -20
  179. package/dist/{chunk-G6XXLKC5.js → chunk-FFPJINJE.js} +6 -6
  180. package/dist/chunk-FMLKOL2Z.js +636 -0
  181. package/dist/chunk-FMLKOL2Z.js.map +1 -0
  182. package/dist/chunk-FQC3DHH2.js +20 -0
  183. package/dist/chunk-FQC3DHH2.js.map +1 -0
  184. package/dist/{chunk-G4CN3ZXL.js → chunk-FUTF72MJ.js} +15 -15
  185. package/dist/chunk-GCASGYIO.js +71 -0
  186. package/dist/chunk-GCASGYIO.js.map +1 -0
  187. package/dist/{chunk-HF77M34J.js → chunk-GFPZS3F5.js} +8 -8
  188. package/dist/{chunk-BCDKBDSY.js → chunk-GNVZQ5JN.js} +99 -41
  189. package/dist/chunk-GNVZQ5JN.js.map +1 -0
  190. package/dist/{chunk-G6NKALRN.js → chunk-H4WG3UQZ.js} +2 -2
  191. package/dist/{chunk-UDQUSU27.js → chunk-HNZKVLAN.js} +2 -2
  192. package/dist/{chunk-5EZXHU36.js → chunk-HYQJQGD3.js} +2 -2
  193. package/dist/{chunk-OAZVR2BV.js → chunk-IDZFBSHN.js} +8 -6
  194. package/dist/{chunk-OAZVR2BV.js.map → chunk-IDZFBSHN.js.map} +1 -1
  195. package/dist/{chunk-PLQE6MJA.js → chunk-IFH6LWTO.js} +50 -8
  196. package/dist/chunk-IFH6LWTO.js.map +1 -0
  197. package/dist/{chunk-RULE4VG5.js → chunk-ILGC6JH6.js} +21 -6
  198. package/dist/chunk-ILGC6JH6.js.map +1 -0
  199. package/dist/chunk-IUM3VSHI.js +113 -0
  200. package/dist/chunk-IUM3VSHI.js.map +1 -0
  201. package/dist/{chunk-DCFV7A7H.js → chunk-IYNGIMVG.js} +101 -91
  202. package/dist/chunk-IYNGIMVG.js.map +1 -0
  203. package/dist/{chunk-TRWPCR6P.js → chunk-JECBQBEX.js} +3 -3
  204. package/dist/{chunk-E6CBU7XP.js → chunk-JYIFGGEM.js} +2 -2
  205. package/dist/{chunk-VA4WSW54.js → chunk-JYIJNNN3.js} +3 -3
  206. package/dist/{chunk-L5HJQC36.js → chunk-K2TDK7GG.js} +3 -3
  207. package/dist/{chunk-KDXVOFYY.js → chunk-KAVBJSBQ.js} +4 -4
  208. package/dist/{chunk-BS4SGLWV.js → chunk-KF5EUVKQ.js} +16 -6
  209. package/dist/chunk-KF5EUVKQ.js.map +1 -0
  210. package/dist/chunk-KFZY2OFH.js +42 -0
  211. package/dist/chunk-KFZY2OFH.js.map +1 -0
  212. package/dist/{chunk-4OKLXWDZ.js → chunk-KNB7IBBU.js} +2 -2
  213. package/dist/{chunk-QLULYKWZ.js → chunk-KSXJOC4F.js} +2 -2
  214. package/dist/{chunk-2S6QHZGJ.js → chunk-L2DPF4DF.js} +1 -1
  215. package/dist/{chunk-JI5AVXYO.js → chunk-LEPOP46W.js} +6 -6
  216. package/dist/{chunk-O7BBFJLP.js → chunk-LTAVSOZW.js} +2 -2
  217. package/dist/{chunk-E3VODCC3.js → chunk-LUDXM7MD.js} +14 -2
  218. package/dist/{chunk-E3VODCC3.js.map → chunk-LUDXM7MD.js.map} +1 -1
  219. package/dist/{chunk-2IZAGAJR.js → chunk-LULR4IUW.js} +3 -3
  220. package/dist/{chunk-QQGPUKMT.js → chunk-MC5Q3J7S.js} +398 -7
  221. package/dist/chunk-MC5Q3J7S.js.map +1 -0
  222. package/dist/{chunk-WMWVO45V.js → chunk-MC6XO7T4.js} +2 -2
  223. package/dist/chunk-MKQBXQKU.js +107 -0
  224. package/dist/chunk-MKQBXQKU.js.map +1 -0
  225. package/dist/{chunk-7PND4PUC.js → chunk-MMGGVZ4Q.js} +29 -9
  226. package/dist/{chunk-7PND4PUC.js.map → chunk-MMGGVZ4Q.js.map} +1 -1
  227. package/dist/{chunk-D6RIFG4O.js → chunk-MNB5RMAY.js} +2 -2
  228. package/dist/{chunk-Q5WG43OP.js → chunk-MYFQ3ED4.js} +7 -7
  229. package/dist/{chunk-V3UE5I5F.js → chunk-MYVPLJOO.js} +2 -2
  230. package/dist/chunk-NINSR6LX.js +83 -0
  231. package/dist/chunk-NINSR6LX.js.map +1 -0
  232. package/dist/{chunk-MTWKDOVO.js → chunk-NLE6TSLG.js} +2 -2
  233. package/dist/{chunk-DBRYEIGY.js → chunk-OJP3N7UK.js} +2 -2
  234. package/dist/{chunk-VDW4VU7B.js → chunk-OQJIB32H.js} +28 -23
  235. package/dist/chunk-OQJIB32H.js.map +1 -0
  236. package/dist/{chunk-SMX5267P.js → chunk-OZKOPQCM.js} +2 -2
  237. package/dist/{chunk-JCK7V6SN.js → chunk-P65YJEEL.js} +2 -2
  238. package/dist/{chunk-MTR7BZQN.js → chunk-PBGWYM3H.js} +3 -3
  239. package/dist/chunk-PIG4WJFQ.js +87 -0
  240. package/dist/chunk-PIG4WJFQ.js.map +1 -0
  241. package/dist/chunk-PQVCH2AE.js +76 -0
  242. package/dist/chunk-PQVCH2AE.js.map +1 -0
  243. package/dist/{chunk-AXTXN4T6.js → chunk-PWFCHOB3.js} +2 -2
  244. package/dist/{chunk-FDPZVY6D.js → chunk-QFN4U7AG.js} +2 -2
  245. package/dist/{chunk-K2ZLHESQ.js → chunk-QIEUU4UK.js} +2 -2
  246. package/dist/{chunk-DYP3YYJJ.js → chunk-QJAQNXWI.js} +39 -5
  247. package/dist/chunk-QJAQNXWI.js.map +1 -0
  248. package/dist/{chunk-3D6AFGQR.js → chunk-QVT3E4CE.js} +7 -7
  249. package/dist/{chunk-FIJUY7GG.js → chunk-R26ZMXR2.js} +23 -23
  250. package/dist/{chunk-FIJUY7GG.js.map → chunk-R26ZMXR2.js.map} +1 -1
  251. package/dist/chunk-R3DJVOSM.js +34 -0
  252. package/dist/chunk-R3DJVOSM.js.map +1 -0
  253. package/dist/{chunk-SFQ6QNL7.js → chunk-R6YJI3HE.js} +2 -1
  254. package/dist/{chunk-5CJVLG3H.js → chunk-RFDD3B7W.js} +5 -5
  255. package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
  256. package/dist/chunk-ROI7BK7H.js +88 -0
  257. package/dist/chunk-ROI7BK7H.js.map +1 -0
  258. package/dist/{chunk-FNZQGN76.js → chunk-S2BBISHU.js} +4 -4
  259. package/dist/{chunk-IALLX7EE.js → chunk-S2FSBU4H.js} +3 -3
  260. package/dist/{chunk-BFPETA3S.js → chunk-SCCO46KZ.js} +3 -2
  261. package/dist/chunk-SCCO46KZ.js.map +1 -0
  262. package/dist/chunk-SICXL4MK.js +165 -0
  263. package/dist/chunk-SICXL4MK.js.map +1 -0
  264. package/dist/chunk-SK7AMF2J.js +168 -0
  265. package/dist/chunk-SK7AMF2J.js.map +1 -0
  266. package/dist/{chunk-LZOV7MX7.js → chunk-TDTXKOAJ.js} +6474 -5747
  267. package/dist/chunk-TDTXKOAJ.js.map +1 -0
  268. package/dist/{chunk-KSBEEMQF.js → chunk-TG6IHVE2.js} +151 -6
  269. package/dist/chunk-TG6IHVE2.js.map +1 -0
  270. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  271. package/dist/{chunk-DPAENM7O.js → chunk-U3ZAVRP3.js} +2 -2
  272. package/dist/{chunk-ODPLEWB6.js → chunk-UFGFMWAD.js} +47 -17
  273. package/dist/chunk-UFGFMWAD.js.map +1 -0
  274. package/dist/{chunk-4KJLYTLS.js → chunk-V57NLO5P.js} +2 -2
  275. package/dist/{chunk-FLVL4L3L.js → chunk-VDX2J7OX.js} +2 -2
  276. package/dist/{chunk-AJLLIIML.js → chunk-W4FBGYGK.js} +1 -1
  277. package/dist/{chunk-TXLGHDHS.js → chunk-W4XJFLAL.js} +53 -32
  278. package/dist/chunk-W4XJFLAL.js.map +1 -0
  279. package/dist/{chunk-6SXVCD7W.js → chunk-W7IGLX4G.js} +2 -2
  280. package/dist/{chunk-KQDNAXOM.js → chunk-WG5HSQ4P.js} +19 -6
  281. package/dist/chunk-WG5HSQ4P.js.map +1 -0
  282. package/dist/{chunk-LTJAMRGI.js → chunk-WL5EBRDH.js} +17 -3
  283. package/dist/chunk-WL5EBRDH.js.map +1 -0
  284. package/dist/{chunk-KAWTOYAW.js → chunk-WLZYGLJ4.js} +2 -2
  285. package/dist/{chunk-RO4LQGT3.js → chunk-WON4APQY.js} +4 -4
  286. package/dist/{chunk-PQVK2S3J.js → chunk-WZFAPHIK.js} +6 -6
  287. package/dist/{chunk-KQPJLK3X.js → chunk-XL24QQ63.js} +2 -2
  288. package/dist/{chunk-RVZRYUQH.js → chunk-YROFNEG5.js} +7 -7
  289. package/dist/{chunk-RAR2BSEM.js → chunk-YV32N67O.js} +1 -1
  290. package/dist/chunk-YV32N67O.js.map +1 -0
  291. package/dist/{chunk-PBSAPHHA.js → chunk-YVKF3HEW.js} +1 -1
  292. package/dist/chunk-YVKF3HEW.js.map +1 -0
  293. package/dist/{chunk-VRAD2FGO.js → chunk-Z54EM5YZ.js} +12 -12
  294. package/dist/{chunk-2VN4JAX7.js → chunk-ZOKZIR5K.js} +95 -33
  295. package/dist/chunk-ZOKZIR5K.js.map +1 -0
  296. package/dist/{cli-Cd5fMmhq.d.ts → cli-C_pqqTCw.d.ts} +28 -12
  297. package/dist/cli.d.ts +16 -9
  298. package/dist/cli.js +142 -127
  299. package/dist/compounding/engine.d.ts +5 -2
  300. package/dist/compounding/engine.js +36 -26
  301. package/dist/compounding/preference-consolidator.d.ts +3 -1
  302. package/dist/compounding/preference-consolidator.js +1 -1
  303. package/dist/compression-optimizer.d.ts +3 -1
  304. package/dist/config-qmd.d.ts +8 -0
  305. package/dist/config-qmd.js +20 -0
  306. package/dist/config-qmd.js.map +1 -0
  307. package/dist/config.d.ts +3 -1
  308. package/dist/config.js +15 -10
  309. package/dist/connectors/codex-materialize-runner.d.ts +3 -1
  310. package/dist/connectors/codex-materialize-runner.js +36 -26
  311. package/dist/connectors/codex-materialize.d.ts +3 -1
  312. package/dist/connectors/codex-materialize.js +2 -2
  313. package/dist/connectors/index.d.ts +3 -1
  314. package/dist/connectors/index.js +41 -32
  315. package/dist/consolidation-provenance-check.d.ts +5 -2
  316. package/dist/consolidation-undo.d.ts +5 -2
  317. package/dist/contradiction/index.d.ts +5 -2
  318. package/dist/contradiction/index.js +10 -4
  319. package/dist/{contradiction-scan-J57T5QV7.js → contradiction-scan-RJBABNRH.js} +4 -4
  320. package/dist/contradiction-scan-RJBABNRH.js.map +1 -0
  321. package/dist/conversation-index/backend.d.ts +3 -1
  322. package/dist/conversation-index/backend.js +5 -5
  323. package/dist/conversation-index/chunker.d.ts +3 -1
  324. package/dist/conversation-index/cleanup.js +2 -2
  325. package/dist/conversation-index/faiss-adapter.d.ts +3 -1
  326. package/dist/conversation-index/faiss-adapter.js +2 -2
  327. package/dist/conversation-index/indexer.d.ts +3 -1
  328. package/dist/conversation-index/indexer.js +2 -2
  329. package/dist/conversation-index/search.d.ts +3 -1
  330. package/dist/conversation-index/search.js +2 -2
  331. package/dist/cross-namespace-budget.d.ts +45 -1
  332. package/dist/cross-namespace-budget.js +5 -3
  333. package/dist/dashboard-runtime.js +2 -2
  334. package/dist/day-summary.d.ts +3 -1
  335. package/dist/day-summary.js +3 -3
  336. package/dist/delinearize.d.ts +3 -1
  337. package/dist/direct-answer-wiring.d.ts +3 -1
  338. package/dist/direct-answer.d.ts +3 -1
  339. package/dist/{dreams-ledger-6UODQOX6.js → dreams-ledger-567VKVOU.js} +4 -2
  340. package/dist/dreams-ledger-567VKVOU.js.map +1 -0
  341. package/dist/embedding-fallback.d.ts +3 -1
  342. package/dist/embedding-fallback.js +3 -3
  343. package/dist/enrichment/index.d.ts +3 -1
  344. package/dist/entity-retrieval.d.ts +5 -2
  345. package/dist/entity-retrieval.js +35 -26
  346. package/dist/entity-schema.d.ts +3 -1
  347. package/dist/explicit-capture.d.ts +13 -8
  348. package/dist/explicit-capture.js +7 -3
  349. package/dist/extraction-faithfulness.d.ts +3 -1
  350. package/dist/extraction-faithfulness.js +5 -5
  351. package/dist/extraction-judge-telemetry.d.ts +3 -1
  352. package/dist/extraction-judge-telemetry.js +2 -2
  353. package/dist/extraction-judge-training.d.ts +3 -1
  354. package/dist/extraction-judge-training.js +2 -2
  355. package/dist/extraction-judge.d.ts +3 -1
  356. package/dist/extraction-judge.js +5 -5
  357. package/dist/extraction.d.ts +3 -1
  358. package/dist/extraction.js +13 -12
  359. package/dist/faithfulness-config.js +3 -2
  360. package/dist/fallback-llm.d.ts +3 -1
  361. package/dist/fallback-llm.js +4 -4
  362. package/dist/{first-start-migration-TI67YMLG.js → first-start-migration-CSRHCJIQ.js} +2 -2
  363. package/dist/{forget-CQCLB5LB.js → forget-HRPLVB3W.js} +5 -5
  364. package/dist/graph-dashboard-diff.d.ts +3 -1
  365. package/dist/graph-dashboard-key.d.ts +3 -1
  366. package/dist/graph-dashboard-parser.d.ts +3 -1
  367. package/dist/{graph-edge-decay-IOGBBAGC.js → graph-edge-decay-Z6ENALU2.js} +3 -3
  368. package/dist/graph-edge-decay-Z6ENALU2.js.map +1 -0
  369. package/dist/graph-edge-reinforcement.d.ts +3 -1
  370. package/dist/graph-snapshot.d.ts +3 -1
  371. package/dist/graph-snapshot.js +2 -2
  372. package/dist/graph.d.ts +3 -1
  373. package/dist/graph.js +1 -1
  374. package/dist/identity-continuity.d.ts +1 -2
  375. package/dist/importance.d.ts +3 -1
  376. package/dist/importers/index.d.ts +3 -1
  377. package/dist/in-flight-reads.d.ts +3 -1
  378. package/dist/index.d.ts +473 -464
  379. package/dist/index.js +287 -239
  380. package/dist/intent.d.ts +3 -1
  381. package/dist/lcm/archive.js +2 -2
  382. package/dist/lcm/engine.d.ts +3 -1
  383. package/dist/lcm/engine.js +6 -6
  384. package/dist/lcm/index.d.ts +3 -1
  385. package/dist/lcm/index.js +13 -13
  386. package/dist/lcm/schema.js +2 -2
  387. package/dist/lcm/summarizer.js +3 -3
  388. package/dist/lcm/tools.d.ts +3 -1
  389. package/dist/lifecycle.d.ts +3 -1
  390. package/dist/live-connectors-runner.d.ts +3 -1
  391. package/dist/local-llm.d.ts +5 -2
  392. package/dist/local-llm.js +3 -3
  393. package/dist/local-model-endpoint.d.ts +3 -1
  394. package/dist/logger.d.ts +3 -1
  395. package/dist/logger.js +7 -3
  396. package/dist/maintenance/archive-observations.js +2 -2
  397. package/dist/maintenance/memory-governance.d.ts +3 -1
  398. package/dist/maintenance/memory-governance.js +35 -25
  399. package/dist/maintenance/migrate-observations.js +3 -3
  400. package/dist/maintenance/observation-ledger-utils.js +2 -2
  401. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +102 -1
  402. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +37 -25
  403. package/dist/maintenance/rebuild-memory-projection.js +38 -28
  404. package/dist/maintenance/rebuild-observations.js +3 -3
  405. package/dist/mcp-memory-inspector-app.d.ts +22 -15
  406. package/dist/memory-action-policy.d.ts +3 -1
  407. package/dist/memory-cache.d.ts +3 -1
  408. package/dist/memory-lifecycle-ledger-utils.d.ts +25 -2
  409. package/dist/memory-lifecycle-ledger-utils.js +11 -1
  410. package/dist/memory-projection-store.d.ts +3 -1
  411. package/dist/memory-projection-store.js +2 -2
  412. package/dist/memory-provenance.d.ts +3 -1
  413. package/dist/memory-worth-outcomes.d.ts +5 -2
  414. package/dist/model-registry.js +2 -2
  415. package/dist/models-json.d.ts +3 -1
  416. package/dist/models-json.js +2 -2
  417. package/dist/namespaces/migrate.d.ts +6 -3
  418. package/dist/namespaces/migrate.js +51 -42
  419. package/dist/namespaces/principal.d.ts +27 -2
  420. package/dist/namespaces/principal.js +6 -2
  421. package/dist/namespaces/search.d.ts +16 -2
  422. package/dist/namespaces/search.js +24 -20
  423. package/dist/namespaces/storage.d.ts +24 -3
  424. package/dist/namespaces/storage.js +35 -27
  425. package/dist/native-knowledge.d.ts +3 -1
  426. package/dist/native-knowledge.js +2 -2
  427. package/dist/negative.js +2 -2
  428. package/dist/offline-sync-exclude-globs.d.ts +13 -0
  429. package/dist/offline-sync-exclude-globs.js +10 -0
  430. package/dist/offline-sync-exclude-globs.js.map +1 -0
  431. package/dist/offline-sync-impression-drain.d.ts +78 -0
  432. package/dist/offline-sync-impression-drain.js +37 -0
  433. package/dist/offline-sync-impression-drain.js.map +1 -0
  434. package/dist/offline-sync.js +4 -2
  435. package/dist/operator-toolkit.d.ts +5 -2
  436. package/dist/operator-toolkit.js +69 -54
  437. package/dist/orchestration/compression-guideline-coordinator.d.ts +5 -2
  438. package/dist/orchestration/compression-guideline-coordinator.js +3 -3
  439. package/dist/orchestration/maintenance.d.ts +121 -2
  440. package/dist/orchestration/maintenance.js +44 -31
  441. package/dist/{orchestrator-Bp_jeBHK.d.ts → orchestrator-CQJ8U7En.d.ts} +85 -79
  442. package/dist/orchestrator.d.ts +13 -8
  443. package/dist/orchestrator.js +194 -177
  444. package/dist/patterns-cli.d.ts +3 -1
  445. package/dist/{pipeline-BAj5bx7g.d.ts → pipeline-Cn-kvYeV.d.ts} +1 -1
  446. package/dist/policy-runtime.d.ts +3 -1
  447. package/dist/prioritized-embed.d.ts +19 -0
  448. package/dist/prioritized-embed.js +8 -0
  449. package/dist/prioritized-embed.js.map +1 -0
  450. package/dist/proactive-contention.d.ts +28 -0
  451. package/dist/proactive-contention.js +8 -0
  452. package/dist/proactive-contention.js.map +1 -0
  453. package/dist/profiling.js +2 -2
  454. package/dist/provenance.d.ts +3 -1
  455. package/dist/provenance.js +3 -2
  456. package/dist/{purge-NDWV6WYD.js → purge-IRF47ZTX.js} +3 -3
  457. package/dist/{qmd-_MDSlj1m.d.ts → qmd-oh9VXz1d.d.ts} +11 -1
  458. package/dist/qmd-preflight.d.ts +5 -2
  459. package/dist/qmd-recall-cache.d.ts +3 -1
  460. package/dist/qmd-status.d.ts +57 -0
  461. package/dist/qmd-status.js +18 -0
  462. package/dist/qmd-status.js.map +1 -0
  463. package/dist/qmd.d.ts +5 -2
  464. package/dist/qmd.js +7 -3
  465. package/dist/recall-concurrency-config.d.ts +16 -0
  466. package/dist/recall-concurrency-config.js +10 -0
  467. package/dist/recall-concurrency-config.js.map +1 -0
  468. package/dist/recall-disclosure-escalation.d.ts +3 -1
  469. package/dist/recall-explain-renderer.d.ts +4 -1
  470. package/dist/recall-explain-renderer.js +3 -3
  471. package/dist/recall-memory-map.d.ts +26 -0
  472. package/dist/recall-memory-map.js +18 -0
  473. package/dist/recall-memory-map.js.map +1 -0
  474. package/dist/recall-planner-llm.d.ts +3 -1
  475. package/dist/recall-planner-llm.js +4 -4
  476. package/dist/recall-qos.js +2 -2
  477. package/dist/recall-state.d.ts +163 -2
  478. package/dist/recall-state.js +6 -3
  479. package/dist/recall-tag-filter.d.ts +3 -1
  480. package/dist/recall-timings.d.ts +11 -2
  481. package/dist/recall-timings.js +3 -1
  482. package/dist/recall-xray-cli.d.ts +3 -1
  483. package/dist/recall-xray-cli.js +4 -4
  484. package/dist/recall-xray-renderer.d.ts +3 -1
  485. package/dist/recall-xray-renderer.js +3 -3
  486. package/dist/recall-xray.d.ts +3 -1
  487. package/dist/recall-xray.js +2 -2
  488. package/dist/relevance.js +3 -3
  489. package/dist/replay/normalizers/chatgpt.d.ts +3 -1
  490. package/dist/replay/normalizers/claude.d.ts +3 -1
  491. package/dist/replay/normalizers/openclaw.d.ts +3 -1
  492. package/dist/replay/normalizers/shared.d.ts +3 -1
  493. package/dist/replay/runner.d.ts +3 -1
  494. package/dist/replay/types.d.ts +3 -1
  495. package/dist/rerank.d.ts +8 -1
  496. package/dist/rerank.js +3 -1
  497. package/dist/resolution-3K27T4VO.js +18 -0
  498. package/dist/resolution-3K27T4VO.js.map +1 -0
  499. package/dist/resolve-auth-token.d.ts +3 -1
  500. package/dist/resolve-provider-secret.js +2 -2
  501. package/dist/resume-bundles.js +19 -14
  502. package/dist/retrieval-agents.d.ts +19 -16
  503. package/dist/retrieval-agents.js +3 -3
  504. package/dist/retrieval-tiers.d.ts +3 -1
  505. package/dist/routing/engine.d.ts +3 -1
  506. package/dist/routing/store.d.ts +3 -1
  507. package/dist/routing/store.js +2 -2
  508. package/dist/salvage-envelope.d.ts +18 -0
  509. package/dist/salvage-envelope.js +15 -0
  510. package/dist/salvage-envelope.js.map +1 -0
  511. package/dist/schemas.d.ts +98 -98
  512. package/dist/scope-profiles-EpJG7yKP.d.ts +30 -0
  513. package/dist/search/document-scanner.js +3 -2
  514. package/dist/search/embed-helper.d.ts +3 -1
  515. package/dist/search/embed-helper.js +3 -3
  516. package/dist/search/factory.d.ts +3 -1
  517. package/dist/search/factory.js +18 -16
  518. package/dist/search/index.d.ts +3 -1
  519. package/dist/search/index.js +22 -20
  520. package/dist/search/lancedb-backend.d.ts +3 -1
  521. package/dist/search/lancedb-backend.js +6 -5
  522. package/dist/search/meilisearch-backend.d.ts +3 -1
  523. package/dist/search/meilisearch-backend.js +6 -5
  524. package/dist/search/noop-backend.d.ts +3 -1
  525. package/dist/search/orama-backend.d.ts +3 -1
  526. package/dist/search/orama-backend.js +6 -5
  527. package/dist/search/port.d.ts +16 -2
  528. package/dist/search/port.js +1 -1
  529. package/dist/search/remote-backend.d.ts +3 -1
  530. package/dist/search/remote-backend.js +3 -3
  531. package/dist/secure-store/index.d.ts +12 -1
  532. package/dist/secure-store/index.js +6 -3
  533. package/dist/{semantic-consolidation-C2m5eHHE.d.ts → semantic-consolidation-DILZEQq3.d.ts} +1 -1
  534. package/dist/semantic-consolidation.d.ts +4 -2
  535. package/dist/semantic-consolidation.js +38 -29
  536. package/dist/semantic-rule-promotion.js +34 -24
  537. package/dist/semantic-rule-verifier.d.ts +3 -1
  538. package/dist/semantic-rule-verifier.js +35 -25
  539. package/dist/session-observer-bands.d.ts +3 -1
  540. package/dist/session-observer-state.d.ts +3 -1
  541. package/dist/session-observer-state.js +2 -2
  542. package/dist/session-transcript-migration.js +2 -2
  543. package/dist/shared-context/manager.d.ts +11 -9
  544. package/dist/shared-context/manager.js +3 -3
  545. package/dist/signal.d.ts +3 -1
  546. package/dist/{storage-hr_Y2z5R.d.ts → storage-NIyKYD8g.d.ts} +489 -110
  547. package/dist/storage-guards.js +2 -2
  548. package/dist/storage.d.ts +6 -3
  549. package/dist/storage.js +38 -26
  550. package/dist/structured-attributes.d.ts +23 -1
  551. package/dist/structured-attributes.js +7 -1
  552. package/dist/summarizer.d.ts +3 -1
  553. package/dist/summarizer.js +11 -11
  554. package/dist/summary-snapshot.d.ts +3 -1
  555. package/dist/summary-snapshot.js +2 -2
  556. package/dist/temporal-index-batch.d.ts +1 -0
  557. package/dist/temporal-index-batch.js +10 -0
  558. package/dist/temporal-index-batch.js.map +1 -0
  559. package/dist/temporal-index-compat.d.ts +279 -1
  560. package/dist/temporal-index-compat.js +1 -1
  561. package/dist/temporal-index.d.ts +1 -225
  562. package/dist/temporal-index.js +35 -3
  563. package/dist/temporal-supersession.d.ts +5 -2
  564. package/dist/temporal-supersession.js +2 -2
  565. package/dist/temporal-timeline-recall.d.ts +3 -1
  566. package/dist/temporal-validity.d.ts +3 -1
  567. package/dist/threading.d.ts +3 -1
  568. package/dist/threading.js +2 -2
  569. package/dist/tier-migration.d.ts +5 -2
  570. package/dist/tier-routing.d.ts +3 -1
  571. package/dist/{tier-stats-KV7IWCJR.js → tier-stats-QEJSPFV2.js} +2 -2
  572. package/dist/tokens.js +3 -3
  573. package/dist/topics.d.ts +3 -1
  574. package/dist/transcript.d.ts +3 -1
  575. package/dist/transcript.js +2 -2
  576. package/dist/transfer/backup.js +3 -3
  577. package/dist/transfer/capsule-export.js +3 -3
  578. package/dist/transfer/capsule-import.js +3 -3
  579. package/dist/transfer/types.d.ts +90 -90
  580. package/dist/trust-score-stage.d.ts +75 -38
  581. package/dist/trust-score-stage.js +11 -3
  582. package/dist/trust-score.d.ts +3 -1
  583. package/dist/{types-Cg8q7W7_.d.ts → types-D_fG2ix8.d.ts} +39 -63
  584. package/dist/types-continuity.d.ts +52 -0
  585. package/dist/types-continuity.js +1 -0
  586. package/dist/types-continuity.js.map +1 -0
  587. package/dist/types.d.ts +3 -1
  588. package/dist/types.js +1 -1
  589. package/dist/utility-runtime.d.ts +3 -1
  590. package/dist/utils/serialize-mutations.d.ts +31 -2
  591. package/dist/utils/serialize-mutations.js +1 -1
  592. package/dist/verified-recall.js +36 -26
  593. package/dist/write-envelope.d.ts +282 -0
  594. package/dist/write-envelope.js +35 -0
  595. package/dist/write-envelope.js.map +1 -0
  596. package/dist/write-quarantine.d.ts +79 -0
  597. package/dist/write-quarantine.js +11 -0
  598. package/dist/write-quarantine.js.map +1 -0
  599. package/dist/write-rate-limiter.d.ts +45 -0
  600. package/dist/write-rate-limiter.js +9 -0
  601. package/dist/write-rate-limiter.js.map +1 -0
  602. package/package.json +37 -2
  603. package/src/access-admin-ops-surface.ts +17 -7
  604. package/src/access-boundary.test.ts +28 -0
  605. package/src/access-boundary.ts +31 -2
  606. package/src/access-citation.test.ts +72 -0
  607. package/src/access-citation.ts +139 -0
  608. package/src/access-errors.ts +21 -0
  609. package/src/access-fingerprint-parity.test.ts +211 -0
  610. package/src/access-http-cancellation.test.ts +59 -21
  611. package/src/access-http.test.ts +90 -0
  612. package/src/access-http.ts +79 -79
  613. package/src/access-mcp-cancellation.test.ts +16 -7
  614. package/src/access-memory-search-fanout.test.ts +220 -0
  615. package/src/access-memory-search-fanout.ts +168 -0
  616. package/src/access-observe-quarantine.test.ts +120 -0
  617. package/src/access-observe-write-surface.ts +130 -11
  618. package/src/access-operations-batch.ts +2 -0
  619. package/src/access-recall-concurrency.ts +773 -0
  620. package/src/access-recall-response.ts +307 -0
  621. package/src/access-recall-surface.ts +100 -252
  622. package/src/access-service-coding-write.test.ts +22 -4
  623. package/src/access-service-health.test.ts +49 -0
  624. package/src/access-service-namespace.test.ts +486 -8
  625. package/src/access-service-observe-scope.test.ts +4 -0
  626. package/src/access-service-recall-concurrency.test.ts +1990 -0
  627. package/src/access-service.ts +182 -175
  628. package/src/access-surface-catalog.ts +1 -0
  629. package/src/access-token-capabilities.ts +16 -9
  630. package/src/active-recall.test.ts +35 -0
  631. package/src/active-recall.ts +7 -0
  632. package/src/bounded-jsonl-state.ts +93 -0
  633. package/src/buffer-session.test.ts +422 -5
  634. package/src/buffer-surprise-trigger.test.ts +41 -0
  635. package/src/buffer.ts +218 -3
  636. package/src/capabilities-cluster-b.test.ts +1 -0
  637. package/src/capabilities.ts +5 -6
  638. package/src/cli.ts +21 -22
  639. package/src/coding/architecture-surfaces.test.ts +6 -3
  640. package/src/coding/architecture-surfaces.ts +36 -25
  641. package/src/coding/decision-surfaces.ts +42 -34
  642. package/src/compounding/engine.test.ts +5 -1
  643. package/src/compounding/engine.ts +7 -7
  644. package/src/config-qmd.ts +89 -0
  645. package/src/config.test.ts +136 -0
  646. package/src/config.ts +113 -118
  647. package/src/connector-provenance-lifecycle.test.ts +4 -4
  648. package/src/connectors/coerce.test.ts +131 -0
  649. package/src/connectors/coerce.ts +80 -7
  650. package/src/contradiction/contradiction.test.ts +10 -6
  651. package/src/contradiction/resolution.ts +17 -4
  652. package/src/correction/correction-access-wiring.ts +62 -18
  653. package/src/cross-namespace-budget.test.ts +35 -0
  654. package/src/cross-namespace-budget.ts +86 -19
  655. package/src/explicit-capture.ts +54 -17
  656. package/src/extraction.ts +2 -3
  657. package/src/faithfulness-graph-guard.test.ts +16 -69
  658. package/src/graph-recall.test.ts +31 -0
  659. package/src/index.ts +22 -2
  660. package/src/local-llm.ts +4 -6
  661. package/src/logger.ts +16 -0
  662. package/src/maintenance/dreams-ledger.ts +100 -49
  663. package/src/maintenance/rebuild-memory-lifecycle-ledger-cli.ts +77 -0
  664. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +373 -9
  665. package/src/memory-lifecycle-ledger-utils.ts +51 -5
  666. package/src/namespaces/principal.test.ts +37 -1
  667. package/src/namespaces/principal.ts +48 -0
  668. package/src/namespaces/search.test.ts +79 -5
  669. package/src/namespaces/search.ts +59 -6
  670. package/src/namespaces/storage.ts +43 -1
  671. package/src/offline-sync-exclude-globs.ts +58 -0
  672. package/src/offline-sync-impression-drain.test.ts +316 -0
  673. package/src/offline-sync-impression-drain.ts +260 -0
  674. package/src/offline-sync.test.ts +32 -5
  675. package/src/offline-sync.ts +1 -14
  676. package/src/operator-toolkit.ts +1 -1
  677. package/src/orchestration/batch-deindex-flush.test.ts +146 -0
  678. package/src/orchestration/consolidation-run.ts +96 -85
  679. package/src/orchestration/extraction-envelope.ts +94 -0
  680. package/src/orchestration/extraction-persist-promotion.ts +134 -0
  681. package/src/orchestration/extraction-persist.ts +325 -260
  682. package/src/orchestration/extraction-run.test.ts +1 -1
  683. package/src/orchestration/extraction-run.ts +2 -2
  684. package/src/orchestration/graph-recall-coordinator.ts +18 -7
  685. package/src/orchestration/lifecycle-policy-coordinator.ts +63 -48
  686. package/src/orchestration/maintenance.test.ts +2103 -3
  687. package/src/orchestration/maintenance.ts +574 -2
  688. package/src/orchestration/namespace-read-fanout.ts +14 -8
  689. package/src/orchestration/orchestrator-helpers.ts +8 -1
  690. package/src/orchestration/orchestrator-init.ts +22 -6
  691. package/src/orchestration/orchestrator-namespace-scope.ts +71 -0
  692. package/src/orchestration/persistence-index.ts +64 -9
  693. package/src/orchestration/qmd-result-resolver.ts +27 -0
  694. package/src/orchestration/recall-entry.ts +34 -19
  695. package/src/orchestration/recall-internal.ts +207 -79
  696. package/src/orchestration/recall-rerank-coordinator.ts +229 -82
  697. package/src/orchestration/recall-result-formatter.ts +76 -20
  698. package/src/orchestration/recall-search-pipeline.test.ts +70 -0
  699. package/src/orchestration/recall-search-pipeline.ts +102 -129
  700. package/src/orchestration/recall-section-coordinator.ts +315 -85
  701. package/src/orchestration/semantic-consolidation-coordinator.ts +69 -37
  702. package/src/orchestration/session-context.ts +21 -0
  703. package/src/orchestration/workspace-ops.test.ts +348 -0
  704. package/src/orchestration/workspace-ops.ts +168 -34
  705. package/src/orchestrator-chunked-hash-durability.test.ts +126 -0
  706. package/src/orchestrator-connector-dedup.test.ts +1061 -40
  707. package/src/orchestrator-flush.test.ts +155 -39
  708. package/src/orchestrator-nonchunked-hash-durability.test.ts +121 -0
  709. package/src/orchestrator-source-attribution.test.ts +9 -9
  710. package/src/orchestrator.ts +160 -149
  711. package/src/prioritized-embed.ts +123 -0
  712. package/src/proactive-contention.test.ts +80 -0
  713. package/src/proactive-contention.ts +39 -0
  714. package/src/procedural/procedure-miner.test.ts +19 -14
  715. package/src/procedural/procedure-miner.ts +44 -13
  716. package/src/qmd-client.test.ts +111 -1
  717. package/src/qmd-status.ts +186 -0
  718. package/src/qmd.ts +47 -47
  719. package/src/recall-budget-config.test.ts +30 -0
  720. package/src/recall-cold-deadline.test.ts +149 -0
  721. package/src/recall-concurrency-config.ts +28 -0
  722. package/src/recall-memory-map.ts +74 -0
  723. package/src/recall-rerank-coordinator.test.ts +508 -0
  724. package/src/recall-state.test.ts +825 -1
  725. package/src/recall-state.ts +406 -7
  726. package/src/recall-timings-access.test.ts +41 -0
  727. package/src/recall-timings.ts +16 -0
  728. package/src/relay/mission-access.test.ts +5 -5
  729. package/src/rerank.ts +22 -0
  730. package/src/retrieval-agents.test.ts +79 -0
  731. package/src/retrieval-agents.ts +71 -19
  732. package/src/salvage-envelope.ts +28 -0
  733. package/src/scopes/scope-plan.test.ts +42 -0
  734. package/src/scopes/scope-plan.ts +45 -0
  735. package/src/search/port.ts +13 -0
  736. package/src/secure-store/index.ts +1 -0
  737. package/src/secure-store/secure-fs.ts +48 -0
  738. package/src/secure-store/secure-store.test.ts +40 -0
  739. package/src/semantic-rule-promotion.ts +13 -4
  740. package/src/storage/content-hash-index.ts +655 -0
  741. package/src/storage/entity-timeline.ts +473 -0
  742. package/src/storage/memory-lifecycle-ledger-access.ts +603 -0
  743. package/src/storage/secure-line-reader.test.ts +197 -0
  744. package/src/storage/secure-line-reader.ts +181 -3
  745. package/src/storage-append-header-sniff.test.ts +195 -0
  746. package/src/storage-behavior-signals-cache.test.ts +237 -0
  747. package/src/storage-contract/cache-coherence.test.ts +96 -1
  748. package/src/storage-contract/content-hash.test.ts +47 -2
  749. package/src/storage-fact-hash-index-defer.test.ts +1200 -0
  750. package/src/storage-memory-lifecycle-ledger.test.ts +1146 -3
  751. package/src/storage.ts +882 -890
  752. package/src/structured-attributes.ts +52 -0
  753. package/src/temporal-index-batch.ts +112 -0
  754. package/src/temporal-index.test.ts +193 -0
  755. package/src/temporal-index.ts +49 -53
  756. package/src/testing/lifecycle-matrix.test.ts +212 -0
  757. package/src/testing/lifecycle-matrix.ts +271 -0
  758. package/src/testing/orchestrator-lite.ts +236 -0
  759. package/src/testing/subjects/dreams-ledger.test.ts +67 -0
  760. package/src/testing/subjects/extraction-lifecycle.test.ts +442 -0
  761. package/src/testing/subjects/lifecycle-ledger.test.ts +93 -0
  762. package/src/testing/subjects/recall-budget.test.ts +461 -0
  763. package/src/testing/subjects/serialized-write-chain.test.ts +224 -0
  764. package/src/trust-score-stage.test.ts +154 -0
  765. package/src/trust-score-stage.ts +216 -53
  766. package/src/types-continuity.ts +57 -0
  767. package/src/types.ts +51 -77
  768. package/src/utils/path-containment.test.ts +75 -0
  769. package/src/utils/path-containment.ts +76 -0
  770. package/src/utils/serialize-mutations.test.ts +122 -0
  771. package/src/utils/serialize-mutations.ts +68 -3
  772. package/src/wearables/memory-gen.test.ts +31 -9
  773. package/src/wearables/memory-gen.ts +95 -55
  774. package/src/wearables/pipeline.test.ts +10 -7
  775. package/src/wearables/service.test.ts +6 -8
  776. package/src/wearables/service.ts +2 -2
  777. package/src/write-envelope.extension.test.ts +111 -0
  778. package/src/write-envelope.test.ts +683 -0
  779. package/src/write-envelope.ts +902 -0
  780. package/src/write-quarantine.test.ts +193 -0
  781. package/src/write-quarantine.ts +241 -0
  782. package/src/write-rate-limiter.test.ts +105 -0
  783. package/src/write-rate-limiter.ts +135 -0
  784. package/src/write-sealed-parity.test.ts +204 -0
  785. package/dist/chunk-2VN4JAX7.js.map +0 -1
  786. package/dist/chunk-37CTGERM.js.map +0 -1
  787. package/dist/chunk-3IY64MV6.js.map +0 -1
  788. package/dist/chunk-BCDKBDSY.js.map +0 -1
  789. package/dist/chunk-BFPETA3S.js.map +0 -1
  790. package/dist/chunk-BFVEEB7W.js.map +0 -1
  791. package/dist/chunk-BS4SGLWV.js.map +0 -1
  792. package/dist/chunk-DCFV7A7H.js.map +0 -1
  793. package/dist/chunk-DYP3YYJJ.js.map +0 -1
  794. package/dist/chunk-E5BK6CGV.js +0 -335
  795. package/dist/chunk-E5BK6CGV.js.map +0 -1
  796. package/dist/chunk-FTYDWKO6.js.map +0 -1
  797. package/dist/chunk-GWTFLF2P.js.map +0 -1
  798. package/dist/chunk-IKQTFQMI.js.map +0 -1
  799. package/dist/chunk-INELTPRG.js.map +0 -1
  800. package/dist/chunk-J2HSAU72.js.map +0 -1
  801. package/dist/chunk-JREB6UFH.js.map +0 -1
  802. package/dist/chunk-K7LOWSLU.js.map +0 -1
  803. package/dist/chunk-KQDNAXOM.js.map +0 -1
  804. package/dist/chunk-KSBEEMQF.js.map +0 -1
  805. package/dist/chunk-KSNVDPDF.js.map +0 -1
  806. package/dist/chunk-LC7OODWZ.js.map +0 -1
  807. package/dist/chunk-LTJAMRGI.js.map +0 -1
  808. package/dist/chunk-LZOV7MX7.js.map +0 -1
  809. package/dist/chunk-NWTGD4AN.js.map +0 -1
  810. package/dist/chunk-ODPLEWB6.js.map +0 -1
  811. package/dist/chunk-OVJ2HIPE.js.map +0 -1
  812. package/dist/chunk-PBSAPHHA.js.map +0 -1
  813. package/dist/chunk-PHK3HARR.js +0 -32
  814. package/dist/chunk-PHK3HARR.js.map +0 -1
  815. package/dist/chunk-PLQE6MJA.js.map +0 -1
  816. package/dist/chunk-QKQYXZVS.js.map +0 -1
  817. package/dist/chunk-QQGPUKMT.js.map +0 -1
  818. package/dist/chunk-RANHFI3P.js +0 -8
  819. package/dist/chunk-RANHFI3P.js.map +0 -1
  820. package/dist/chunk-RAR2BSEM.js.map +0 -1
  821. package/dist/chunk-RULE4VG5.js.map +0 -1
  822. package/dist/chunk-SVOZFLIQ.js +0 -16
  823. package/dist/chunk-SVOZFLIQ.js.map +0 -1
  824. package/dist/chunk-T7Y5KPLN.js.map +0 -1
  825. package/dist/chunk-TXLGHDHS.js.map +0 -1
  826. package/dist/chunk-VDW4VU7B.js.map +0 -1
  827. package/dist/chunk-VSMRDBFT.js +0 -17
  828. package/dist/chunk-VSMRDBFT.js.map +0 -1
  829. package/dist/chunk-X64YLC24.js.map +0 -1
  830. package/dist/chunk-XDSXEKYK.js +0 -118
  831. package/dist/chunk-XDSXEKYK.js.map +0 -1
  832. package/dist/chunk-YF6FMLBT.js.map +0 -1
  833. package/dist/resolution-VH4NGENZ.js +0 -12
  834. /package/dist/{capsule-crypto-CZJSLEFG.js.map → access-citation.js.map} +0 -0
  835. /package/dist/{contradiction-scan-J57T5QV7.js.map → access-memory-search-fanout.js.map} +0 -0
  836. /package/dist/{dreams-ledger-6UODQOX6.js.map → access-recall-concurrency.js.map} +0 -0
  837. /package/dist/{graph-edge-decay-IOGBBAGC.js.map → access-recall-response.js.map} +0 -0
  838. /package/dist/{resolution-VH4NGENZ.js.map → bounded-jsonl-state.js.map} +0 -0
  839. /package/dist/{chunk-A3GOMRJG.js.map → chunk-23L3IXFD.js.map} +0 -0
  840. /package/dist/{chunk-MRHFJV44.js.map → chunk-2DQ2XREU.js.map} +0 -0
  841. /package/dist/{chunk-L2B3EE7B.js.map → chunk-2QMKMVHH.js.map} +0 -0
  842. /package/dist/{chunk-VJVNLNDQ.js.map → chunk-2UFO7X4Q.js.map} +0 -0
  843. /package/dist/{chunk-2MR3MFQB.js.map → chunk-2VEOKUPP.js.map} +0 -0
  844. /package/dist/{chunk-RHOZ5LLO.js.map → chunk-347WD2LE.js.map} +0 -0
  845. /package/dist/{chunk-HDTQVNWD.js.map → chunk-3QAH2S33.js.map} +0 -0
  846. /package/dist/{chunk-LRNMRXJO.js.map → chunk-3Y224NYC.js.map} +0 -0
  847. /package/dist/{chunk-VFSP73LP.js.map → chunk-45GF7Y3V.js.map} +0 -0
  848. /package/dist/{chunk-OEHCMALU.js.map → chunk-5I4M26Q7.js.map} +0 -0
  849. /package/dist/{chunk-2AZXIZEN.js.map → chunk-5Q7EVV4X.js.map} +0 -0
  850. /package/dist/{chunk-PUBTHW5O.js.map → chunk-6DRPPQEJ.js.map} +0 -0
  851. /package/dist/{chunk-FDCTQWLW.js.map → chunk-6O22TZSB.js.map} +0 -0
  852. /package/dist/{chunk-ZQ7UBUZ6.js.map → chunk-6QYST5XN.js.map} +0 -0
  853. /package/dist/{chunk-W4PGTAS2.js.map → chunk-6WAFYNVT.js.map} +0 -0
  854. /package/dist/{chunk-R5VAVVHP.js.map → chunk-72A4L5JJ.js.map} +0 -0
  855. /package/dist/{chunk-3FAMU5TX.js.map → chunk-A6USBZTO.js.map} +0 -0
  856. /package/dist/{chunk-ZHIVCODT.js.map → chunk-A72SWTWW.js.map} +0 -0
  857. /package/dist/{chunk-FC77VUX5.js.map → chunk-A7Q43EUZ.js.map} +0 -0
  858. /package/dist/{chunk-UJBESW6X.js.map → chunk-AE7WMV4V.js.map} +0 -0
  859. /package/dist/{chunk-A5UXZRRM.js.map → chunk-AJ7QCSIS.js.map} +0 -0
  860. /package/dist/{chunk-FNMFJWBY.js.map → chunk-ANEUPF6O.js.map} +0 -0
  861. /package/dist/{chunk-2A3OXAP2.js.map → chunk-B7RWBZXW.js.map} +0 -0
  862. /package/dist/{chunk-74F5STS4.js.map → chunk-BLAKS3CP.js.map} +0 -0
  863. /package/dist/{chunk-M7VGG3ID.js.map → chunk-BV5WMSIJ.js.map} +0 -0
  864. /package/dist/{chunk-2BFLDH5F.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  865. /package/dist/{chunk-UXKMMNJD.js.map → chunk-C23BYTJV.js.map} +0 -0
  866. /package/dist/{chunk-JZHHREBL.js.map → chunk-C3AKM55W.js.map} +0 -0
  867. /package/dist/{chunk-RP7YXA67.js.map → chunk-C5JF6EZ7.js.map} +0 -0
  868. /package/dist/{chunk-EHCONI6E.js.map → chunk-CQMEM5CC.js.map} +0 -0
  869. /package/dist/{chunk-PBNZVPFS.js.map → chunk-CXZQOVIE.js.map} +0 -0
  870. /package/dist/{chunk-7N2RUBAP.js.map → chunk-DDA47TES.js.map} +0 -0
  871. /package/dist/{chunk-64SE4X5G.js.map → chunk-DEBHXHJR.js.map} +0 -0
  872. /package/dist/{chunk-EHK6KZHK.js.map → chunk-DNHVPZOD.js.map} +0 -0
  873. /package/dist/{chunk-437S3G37.js.map → chunk-DQEMWVMT.js.map} +0 -0
  874. /package/dist/{chunk-LZZNTPLR.js.map → chunk-DX3XRGLH.js.map} +0 -0
  875. /package/dist/{chunk-DZKHSDOM.js.map → chunk-ES36HTSC.js.map} +0 -0
  876. /package/dist/{chunk-TN7THW5U.js.map → chunk-ET356KSB.js.map} +0 -0
  877. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  878. /package/dist/{chunk-DMSDUGDM.js.map → chunk-F7GAIWFA.js.map} +0 -0
  879. /package/dist/{chunk-G6XXLKC5.js.map → chunk-FFPJINJE.js.map} +0 -0
  880. /package/dist/{chunk-G4CN3ZXL.js.map → chunk-FUTF72MJ.js.map} +0 -0
  881. /package/dist/{chunk-HF77M34J.js.map → chunk-GFPZS3F5.js.map} +0 -0
  882. /package/dist/{chunk-G6NKALRN.js.map → chunk-H4WG3UQZ.js.map} +0 -0
  883. /package/dist/{chunk-UDQUSU27.js.map → chunk-HNZKVLAN.js.map} +0 -0
  884. /package/dist/{chunk-5EZXHU36.js.map → chunk-HYQJQGD3.js.map} +0 -0
  885. /package/dist/{chunk-TRWPCR6P.js.map → chunk-JECBQBEX.js.map} +0 -0
  886. /package/dist/{chunk-E6CBU7XP.js.map → chunk-JYIFGGEM.js.map} +0 -0
  887. /package/dist/{chunk-VA4WSW54.js.map → chunk-JYIJNNN3.js.map} +0 -0
  888. /package/dist/{chunk-L5HJQC36.js.map → chunk-K2TDK7GG.js.map} +0 -0
  889. /package/dist/{chunk-KDXVOFYY.js.map → chunk-KAVBJSBQ.js.map} +0 -0
  890. /package/dist/{chunk-4OKLXWDZ.js.map → chunk-KNB7IBBU.js.map} +0 -0
  891. /package/dist/{chunk-QLULYKWZ.js.map → chunk-KSXJOC4F.js.map} +0 -0
  892. /package/dist/{chunk-2S6QHZGJ.js.map → chunk-L2DPF4DF.js.map} +0 -0
  893. /package/dist/{chunk-JI5AVXYO.js.map → chunk-LEPOP46W.js.map} +0 -0
  894. /package/dist/{chunk-O7BBFJLP.js.map → chunk-LTAVSOZW.js.map} +0 -0
  895. /package/dist/{chunk-2IZAGAJR.js.map → chunk-LULR4IUW.js.map} +0 -0
  896. /package/dist/{chunk-WMWVO45V.js.map → chunk-MC6XO7T4.js.map} +0 -0
  897. /package/dist/{chunk-D6RIFG4O.js.map → chunk-MNB5RMAY.js.map} +0 -0
  898. /package/dist/{chunk-Q5WG43OP.js.map → chunk-MYFQ3ED4.js.map} +0 -0
  899. /package/dist/{chunk-V3UE5I5F.js.map → chunk-MYVPLJOO.js.map} +0 -0
  900. /package/dist/{chunk-MTWKDOVO.js.map → chunk-NLE6TSLG.js.map} +0 -0
  901. /package/dist/{chunk-DBRYEIGY.js.map → chunk-OJP3N7UK.js.map} +0 -0
  902. /package/dist/{chunk-SMX5267P.js.map → chunk-OZKOPQCM.js.map} +0 -0
  903. /package/dist/{chunk-JCK7V6SN.js.map → chunk-P65YJEEL.js.map} +0 -0
  904. /package/dist/{chunk-MTR7BZQN.js.map → chunk-PBGWYM3H.js.map} +0 -0
  905. /package/dist/{chunk-AXTXN4T6.js.map → chunk-PWFCHOB3.js.map} +0 -0
  906. /package/dist/{chunk-FDPZVY6D.js.map → chunk-QFN4U7AG.js.map} +0 -0
  907. /package/dist/{chunk-K2ZLHESQ.js.map → chunk-QIEUU4UK.js.map} +0 -0
  908. /package/dist/{chunk-3D6AFGQR.js.map → chunk-QVT3E4CE.js.map} +0 -0
  909. /package/dist/{chunk-SFQ6QNL7.js.map → chunk-R6YJI3HE.js.map} +0 -0
  910. /package/dist/{chunk-5CJVLG3H.js.map → chunk-RFDD3B7W.js.map} +0 -0
  911. /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
  912. /package/dist/{chunk-FNZQGN76.js.map → chunk-S2BBISHU.js.map} +0 -0
  913. /package/dist/{chunk-IALLX7EE.js.map → chunk-S2FSBU4H.js.map} +0 -0
  914. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  915. /package/dist/{chunk-DPAENM7O.js.map → chunk-U3ZAVRP3.js.map} +0 -0
  916. /package/dist/{chunk-4KJLYTLS.js.map → chunk-V57NLO5P.js.map} +0 -0
  917. /package/dist/{chunk-FLVL4L3L.js.map → chunk-VDX2J7OX.js.map} +0 -0
  918. /package/dist/{chunk-AJLLIIML.js.map → chunk-W4FBGYGK.js.map} +0 -0
  919. /package/dist/{chunk-6SXVCD7W.js.map → chunk-W7IGLX4G.js.map} +0 -0
  920. /package/dist/{chunk-KAWTOYAW.js.map → chunk-WLZYGLJ4.js.map} +0 -0
  921. /package/dist/{chunk-RO4LQGT3.js.map → chunk-WON4APQY.js.map} +0 -0
  922. /package/dist/{chunk-PQVK2S3J.js.map → chunk-WZFAPHIK.js.map} +0 -0
  923. /package/dist/{chunk-KQPJLK3X.js.map → chunk-XL24QQ63.js.map} +0 -0
  924. /package/dist/{chunk-RVZRYUQH.js.map → chunk-YROFNEG5.js.map} +0 -0
  925. /package/dist/{chunk-VRAD2FGO.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  926. /package/dist/{first-start-migration-TI67YMLG.js.map → first-start-migration-CSRHCJIQ.js.map} +0 -0
  927. /package/dist/{forget-CQCLB5LB.js.map → forget-HRPLVB3W.js.map} +0 -0
  928. /package/dist/{purge-NDWV6WYD.js.map → purge-IRF47ZTX.js.map} +0 -0
  929. /package/dist/{tier-stats-KV7IWCJR.js.map → tier-stats-QEJSPFV2.js.map} +0 -0
@@ -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 { throwIfAborted } from "./abort-error.js";
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 BudgetDecision } from "./cross-namespace-budget.js";
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
- export class EngramAccessInputError extends Error {}
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?: BudgetDecision;
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 budgetLocks = new Map<string, Promise<void>>();
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
- throw new EngramAccessInputError(
1463
- result.reason === "unsupported"
1464
- ? `unsupported namespace: ${result.namespace}`
1465
- : `namespace is not writable: ${result.namespace}`,
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 EngramAccessInputError(
1592
- `scope profile ${profilePlan.profileId} has no writable layer inside the profile read stack for principal ${principal ?? "anonymous"}`,
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 EngramAccessInputError(`namespace is not writable: ${base}`);
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 EngramAccessInputError(
1824
- `scope profile ${profilePlan.profileId} has no writable layer inside the profile read stack for principal ${principal ?? "anonymous"}`,
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 EngramAccessInputError(
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 EngramAccessInputError(
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(namespace: string | undefined, principal?: string): string[] {
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
- const namespaces = profilePlan
2040
- ? expandScopeProfileReadNamespaces({
2041
- profilePlan,
2042
- principalSelfNamespace: profilePlan.baseNamespace,
2043
- config: this.orchestrator.config,
2044
- principal,
2045
- codingOverlay: null,
2046
- legacyRecallNamespaces,
2047
- })
2048
- : legacyRecallNamespaces;
2049
- if (profilePlan) return namespaces;
2050
- return namespaces.filter((ns) =>
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 relativeToNamespaces = nodePath.relative(namespacesRoot, resolvedPath);
2231
- const [namespaceSegment] = relativeToNamespaces.split(/[\\/]/);
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
- return this.withBudgetLock(principal ?? "default", request.abortSignal, async () => {
2747
- let budgetRecordPrincipal: string | null = null;
2748
- const response = await this.handleIdempotentRead({
2749
- operation: "recall",
2750
- idempotencyKey: request.idempotencyKey,
2751
- requestFingerprint,
2752
- execute: async () => {
2753
- const result = await this.executeRecall(normalizedRequest);
2754
- throwIfAborted(request.abortSignal);
2755
- budgetRecordPrincipal = result.budgetRecordPrincipal;
2756
- return result.response;
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
- requestFingerprint: {
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
- requestFingerprint: {
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
- requestFingerprint: {
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 = namespaces.length === 0
4770
- ? []
4771
- : await this.orchestrator.searchAcrossNamespaces({
4772
- query,
4773
- namespaces,
4774
- maxResults,
4775
- mode: "search",
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
- * Record citation usage from an observed oai-mem-citation block.
4999
- * For each citation entry, extract the memory ID from the path and
5000
- * increment its access tracking via the orchestrator. Returns the
5001
- * count of submitted IDs and the count of IDs that matched real memories.
5002
- */
5003
- async recordCitationUsage(request: {
5004
- sessionId?: string;
5005
- namespace?: string;
5006
- authenticatedPrincipal?: string;
5007
- entries: Array<{ path: string; lineStart: number; lineEnd: number; note: string }>;
5008
- rolloutIds: string[];
5009
- }): Promise<{ submitted: number; matched: number }> {
5010
- if (request.entries.length === 0) return { submitted: 0, matched: 0 };
5011
-
5012
- // Enforce namespace ACLs — citation tracking is a write-like operation.
5013
- // Pass authenticatedPrincipal so the principal resolution matches other
5014
- // write endpoints (gotcha #42: read and write paths must resolve through
5015
- // the same namespace layer).
5016
- const resolvedNamespace = this.writableNamespaceFor(
5017
- request.namespace,
5018
- request.sessionId,
5019
- request.authenticatedPrincipal,
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.getStorage(resolvedNamespace);
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.getStorage(resolvedNamespace);
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.getStorage(resolvedNamespace);
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?.namespaces === undefined) return; // unrestricted token — unchanged
336
- const effective = resolveEffectiveNamespace(namespace, defaultNamespace);
337
- if (effective === undefined || !caps.namespaces.includes(effective)) {
338
- throw new EngramAccessForbiddenError(
339
- namespace === undefined
340
- ? "token is scoped to specific namespaces; the server default namespace is not permitted — supply an allowed namespace"
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
  /**