@remnic/core 10.0.69 → 10.0.70

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 (349) hide show
  1. package/dist/access-admin-ops-surface.js +80 -77
  2. package/dist/access-authorization-probe.js +81 -78
  3. package/dist/access-boundary.js +80 -77
  4. package/dist/access-cli.js +194 -191
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +80 -77
  7. package/dist/access-http-briefing.js +81 -78
  8. package/dist/access-http-query.js +82 -79
  9. package/dist/access-http.js +104 -101
  10. package/dist/access-identity-continuity-surface.js +80 -77
  11. package/dist/access-lcm-surface.js +80 -77
  12. package/dist/access-mcp.js +93 -90
  13. package/dist/access-namespace-preflight.js +80 -77
  14. package/dist/access-observe-lcm-archive.d.ts +5 -0
  15. package/dist/access-observe-lcm-archive.d.ts.map +1 -0
  16. package/dist/access-observe-lcm-archive.js +9 -0
  17. package/dist/access-observe-objective-state.d.ts +8 -0
  18. package/dist/access-observe-objective-state.d.ts.map +1 -0
  19. package/dist/access-observe-objective-state.js +17 -0
  20. package/dist/access-observe-stage-timing.d.ts +11 -0
  21. package/dist/access-observe-stage-timing.d.ts.map +1 -0
  22. package/dist/access-observe-stage-timing.js +9 -0
  23. package/dist/access-observe-stage-timing.js.map +1 -0
  24. package/dist/access-observe-write-category.js +13 -13
  25. package/dist/access-observe-write-surface.d.ts.map +1 -1
  26. package/dist/access-observe-write-surface.js +80 -77
  27. package/dist/access-offline-manifest.js +8 -8
  28. package/dist/access-operations-batch.js +83 -80
  29. package/dist/access-operations.js +90 -87
  30. package/dist/access-recall-concurrency.js +80 -77
  31. package/dist/access-recall-response.js +80 -77
  32. package/dist/access-recall-surface.js +80 -77
  33. package/dist/access-schema.js +12 -12
  34. package/dist/access-service.d.ts +1 -0
  35. package/dist/access-service.d.ts.map +1 -1
  36. package/dist/access-service.js +80 -77
  37. package/dist/access-surface-catalog.js +82 -79
  38. package/dist/access-surface-catalog.js.map +1 -1
  39. package/dist/active-recall.js +24 -24
  40. package/dist/adapters/index.js +4 -4
  41. package/dist/adapters/registry.js +2 -2
  42. package/dist/briefing.js +15 -15
  43. package/dist/buffer.js +8 -8
  44. package/dist/calibration.js +4 -4
  45. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
  46. package/dist/capsule-crypto-7FJQINUR.js.map +1 -0
  47. package/dist/causal-behavior.js +2 -2
  48. package/dist/causal-chain.js +2 -2
  49. package/dist/causal-consolidation.js +20 -20
  50. package/dist/causal-retrieval.js +2 -2
  51. package/dist/causal-trajectory-graph.js +3 -3
  52. package/dist/causal-trajectory.js +1 -1
  53. package/dist/{chunk-NCZGGGWI.js → chunk-2BBMCMJS.js} +12 -12
  54. package/dist/{chunk-UVVFPCPX.js → chunk-2GV24KFD.js} +2 -2
  55. package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
  56. package/dist/{chunk-QDZWQBLU.js → chunk-2R7OCBRR.js} +2 -2
  57. package/dist/{chunk-U2CAGMUD.js → chunk-2YPIFJHL.js} +2 -2
  58. package/dist/{chunk-4SOWMA55.js → chunk-3AASGFR4.js} +3 -3
  59. package/dist/{chunk-CI3MAAIY.js → chunk-3F7N4I5I.js} +2 -2
  60. package/dist/{chunk-PLCYKAWH.js → chunk-3ICAWZUU.js} +4 -4
  61. package/dist/{chunk-B4DXREWC.js → chunk-3W37NITP.js} +2 -2
  62. package/dist/{chunk-R4ZHF4K2.js → chunk-43FLJLT2.js} +4 -4
  63. package/dist/{chunk-RLVI2M5Q.js → chunk-4BOBW6H4.js} +2 -2
  64. package/dist/{chunk-HXFIILGF.js → chunk-4RASUAN3.js} +4 -4
  65. package/dist/{chunk-JLMOH5JA.js → chunk-5FMGPV34.js} +2 -2
  66. package/dist/{chunk-EI6M5NVK.js → chunk-5JBVPJCT.js} +2 -2
  67. package/dist/{chunk-74AY3S7U.js → chunk-5RW247F5.js} +10 -10
  68. package/dist/{chunk-P4TV3TQ2.js → chunk-5VQSKBNF.js} +5 -5
  69. package/dist/{chunk-H5DIRCZP.js → chunk-64U42JL5.js} +18 -18
  70. package/dist/{chunk-4XINO77L.js → chunk-66JOLMWS.js} +2 -2
  71. package/dist/{chunk-WHROVQ5Q.js → chunk-66PEACZP.js} +3 -3
  72. package/dist/{chunk-GKL6QYZO.js → chunk-6L63IN3M.js} +1 -1
  73. package/dist/{chunk-Y3XPSGNF.js → chunk-6QS5NQJH.js} +2 -2
  74. package/dist/{chunk-KOLJJN5G.js → chunk-AQNHEDXP.js} +11 -4
  75. package/dist/chunk-AQNHEDXP.js.map +1 -0
  76. package/dist/{chunk-6WKWL53V.js → chunk-B7YAIHAV.js} +127 -121
  77. package/dist/chunk-B7YAIHAV.js.map +1 -0
  78. package/dist/{chunk-M4IEZGCK.js → chunk-BFBS7OFQ.js} +7 -7
  79. package/dist/{chunk-4PG5R6BJ.js → chunk-BNU5TQLR.js} +2 -2
  80. package/dist/{chunk-B3MWELZ3.js → chunk-BW33YTF3.js} +2 -2
  81. package/dist/{chunk-H6VJSITJ.js → chunk-CIL4GHMD.js} +3 -3
  82. package/dist/{chunk-5UM4H64E.js → chunk-D3AGBN6G.js} +2 -2
  83. package/dist/{chunk-IG3EZ3TF.js → chunk-DM3UZUCN.js} +2 -2
  84. package/dist/{chunk-PMDOGXA2.js → chunk-EF3HNVL4.js} +2 -2
  85. package/dist/{chunk-TVE7W67N.js → chunk-EIZ4MK33.js} +2 -2
  86. package/dist/{chunk-AUFPPBC3.js → chunk-ENPJX3BB.js} +3 -3
  87. package/dist/{chunk-63A2BU2B.js → chunk-F4ZHKDBW.js} +5 -5
  88. package/dist/{chunk-3LBDEGQA.js → chunk-FDUCIUQ5.js} +2 -2
  89. package/dist/{chunk-CTH2CQCB.js → chunk-FM6UKZAE.js} +2 -2
  90. package/dist/{chunk-XVZA6VXC.js → chunk-FZVROZKC.js} +4 -4
  91. package/dist/{chunk-IAGVM7EY.js → chunk-GMSRLDVR.js} +2 -2
  92. package/dist/{chunk-HPB5TF55.js → chunk-GT4G2S2Y.js} +3 -3
  93. package/dist/{chunk-645WOU5I.js → chunk-H7BZBSP6.js} +4 -4
  94. package/dist/{chunk-5MGKGEL7.js → chunk-HNF7IMYQ.js} +2 -2
  95. package/dist/{chunk-W7K5BP3M.js → chunk-HQPFACXO.js} +2 -2
  96. package/dist/{chunk-TECK5IVY.js → chunk-HZNURRDS.js} +2 -2
  97. package/dist/{chunk-SXTVZ6JL.js → chunk-I6HRHJRA.js} +2 -2
  98. package/dist/{chunk-NHWDTOBN.js → chunk-ILD7N3XC.js} +20 -20
  99. package/dist/{chunk-4NV7O76Q.js → chunk-J5TVHCDG.js} +2 -2
  100. package/dist/{chunk-AL3TCNSJ.js → chunk-J6GZ2254.js} +4 -4
  101. package/dist/{chunk-OH55F76C.js → chunk-JEX2JL3U.js} +2 -2
  102. package/dist/{chunk-AVGDYYMA.js → chunk-JGQEF33K.js} +3 -3
  103. package/dist/{chunk-6P7U3HWG.js → chunk-K36RMINQ.js} +3 -3
  104. package/dist/{chunk-UW6LBFYN.js → chunk-K47G2CBP.js} +6 -6
  105. package/dist/{chunk-3RHU5MD7.js → chunk-K7LLGCPH.js} +2 -2
  106. package/dist/{chunk-BUKK5SWA.js → chunk-KQAFEZQX.js} +2 -2
  107. package/dist/chunk-L3E7MLMK.js +20 -0
  108. package/dist/chunk-L3E7MLMK.js.map +1 -0
  109. package/dist/{chunk-R2BIVU2Z.js → chunk-LTST4R7U.js} +2 -2
  110. package/dist/{chunk-IZBIDPMY.js → chunk-LYTKNK5O.js} +2 -2
  111. package/dist/{chunk-HH73M65H.js → chunk-MCFI6G7U.js} +3 -3
  112. package/dist/{chunk-V6SBA5O7.js → chunk-MFKBYXBY.js} +5 -5
  113. package/dist/{chunk-AYJQ644F.js → chunk-MK7HXGM6.js} +2 -2
  114. package/dist/{chunk-MOIJWWNA.js → chunk-MKMIY3E7.js} +13 -13
  115. package/dist/{chunk-EXQJMFRF.js → chunk-MRN2MKB7.js} +2 -2
  116. package/dist/{chunk-W26D2USW.js → chunk-MUH7RR6T.js} +6 -6
  117. package/dist/{chunk-64JLBFCQ.js → chunk-N7NAGECH.js} +2 -2
  118. package/dist/{chunk-75DCOS6I.js → chunk-OAKOAOEG.js} +67 -67
  119. package/dist/{chunk-DDBB55L2.js → chunk-OAQO5AZJ.js} +121 -121
  120. package/dist/{chunk-OPFVXM2D.js → chunk-OX6GY22Q.js} +2 -2
  121. package/dist/chunk-QCFZDYYG.js +34 -0
  122. package/dist/chunk-QCFZDYYG.js.map +1 -0
  123. package/dist/{chunk-MMCO4SRG.js → chunk-QNN4FYBD.js} +19 -11
  124. package/dist/chunk-QNN4FYBD.js.map +1 -0
  125. package/dist/{chunk-XWE3EOWX.js → chunk-RZED7FAU.js} +2 -2
  126. package/dist/{chunk-YSATDEBY.js → chunk-SBRUTD5O.js} +5 -5
  127. package/dist/{chunk-WVP2I6C5.js → chunk-SDL22RRW.js} +50 -11
  128. package/dist/chunk-SDL22RRW.js.map +1 -0
  129. package/dist/{chunk-ZORS5BG5.js → chunk-SQO5SEKA.js} +10 -10
  130. package/dist/{chunk-PRKNAIGZ.js → chunk-T6T2RMWW.js} +5 -5
  131. package/dist/{chunk-O5ZINWW3.js → chunk-THFSCUFC.js} +2 -2
  132. package/dist/{chunk-CIEEYVUB.js → chunk-TPX7XXY4.js} +2 -2
  133. package/dist/{chunk-OCK4D5PC.js → chunk-TSZP7GGJ.js} +2 -2
  134. package/dist/{chunk-L334PSLW.js → chunk-U2A56LLF.js} +8 -8
  135. package/dist/{chunk-TGQW3AMK.js → chunk-UIFWZMO7.js} +23 -23
  136. package/dist/{chunk-LN4X2NDA.js → chunk-UJ2FP2RV.js} +10 -10
  137. package/dist/{chunk-4MPAKYZU.js → chunk-VDYRXI3E.js} +5 -5
  138. package/dist/{chunk-IHCXMYSE.js → chunk-VPEIWMUT.js} +2 -2
  139. package/dist/{chunk-ELHJK7LM.js → chunk-WBN66HPI.js} +6 -6
  140. package/dist/{chunk-BJLCV2P3.js → chunk-WGRAB3KB.js} +2 -2
  141. package/dist/{chunk-IVUVQPTQ.js → chunk-WIW4LOZL.js} +2 -2
  142. package/dist/{chunk-5KDDAQ6K.js → chunk-WN2DASTS.js} +10 -10
  143. package/dist/chunk-WZU5AGO6.js +38 -0
  144. package/dist/chunk-WZU5AGO6.js.map +1 -0
  145. package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
  146. package/dist/{chunk-5Y6VA6X2.js → chunk-XDUP6SWG.js} +2 -2
  147. package/dist/{chunk-GHHQLSSY.js → chunk-XR4QR3JT.js} +3 -3
  148. package/dist/{chunk-64S6X4IU.js → chunk-XTN54NML.js} +4 -4
  149. package/dist/{chunk-QGFR73SN.js → chunk-YIG4HPY4.js} +2 -2
  150. package/dist/{chunk-UYUFDTIX.js → chunk-YIXWY4OZ.js} +2 -2
  151. package/dist/{chunk-GJ4HU6LK.js → chunk-YLMTFRZR.js} +2 -2
  152. package/dist/{chunk-GGD2YDS6.js → chunk-YRMSHA7H.js} +2 -2
  153. package/dist/{chunk-Y7427SL7.js → chunk-ZG4GNPRE.js} +216 -50
  154. package/dist/chunk-ZG4GNPRE.js.map +1 -0
  155. package/dist/{chunk-KZZ5EZ7O.js → chunk-ZS5LREUZ.js} +2 -2
  156. package/dist/{chunk-JLGBJ4AX.js → chunk-ZYEWTVNQ.js} +10 -10
  157. package/dist/cli.js +131 -128
  158. package/dist/coding/export-okf-codegraph.js +14 -14
  159. package/dist/coding/pre-action-gate.js +2 -2
  160. package/dist/compounding/engine.js +16 -16
  161. package/dist/config.js +24 -24
  162. package/dist/connectors/codex-materialize-runner.js +17 -17
  163. package/dist/connectors/codex-materialize.js +2 -2
  164. package/dist/connectors/index.js +18 -18
  165. package/dist/consolidation-provenance-check.js +2 -2
  166. package/dist/convergence-refresh.js +18 -18
  167. package/dist/corpus-watermark.js +18 -18
  168. package/dist/deep-recall-http-glue.js +13 -13
  169. package/dist/deep-recall.js +2 -2
  170. package/dist/embedding-fallback.js +2 -2
  171. package/dist/entity-retrieval.js +18 -18
  172. package/dist/event-order-recall.js +2 -2
  173. package/dist/external-wiki-access.js +81 -78
  174. package/dist/extraction-span-materialize.js +2 -2
  175. package/dist/extraction.js +30 -30
  176. package/dist/{graph-edge-decay-OEX5OGMI.js → graph-edge-decay-CXTNJ7IQ.js} +6 -6
  177. package/dist/graph-edge-decay-CXTNJ7IQ.js.map +1 -0
  178. package/dist/graph-jsonl.js +4 -4
  179. package/dist/graph-snapshot.js +4 -4
  180. package/dist/graph.js +3 -3
  181. package/dist/harmonic-retrieval.js +15 -15
  182. package/dist/index.js +279 -276
  183. package/dist/lcm/archive.d.ts +12 -2
  184. package/dist/lcm/archive.d.ts.map +1 -1
  185. package/dist/lcm/archive.js +2 -2
  186. package/dist/lcm/engine.d.ts +59 -8
  187. package/dist/lcm/engine.d.ts.map +1 -1
  188. package/dist/lcm/engine.js +6 -6
  189. package/dist/lcm/index.js +16 -16
  190. package/dist/lcm/queue.d.ts +7 -3
  191. package/dist/lcm/queue.d.ts.map +1 -1
  192. package/dist/lcm/queue.js +1 -1
  193. package/dist/lcm/summarizer.d.ts +8 -1
  194. package/dist/lcm/summarizer.d.ts.map +1 -1
  195. package/dist/lcm/summarizer.js +3 -3
  196. package/dist/local-llm.js +4 -4
  197. package/dist/location/index.js +17 -17
  198. package/dist/maintenance/memory-governance.js +16 -16
  199. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +15 -15
  200. package/dist/maintenance/rebuild-memory-projection-runner.js +18 -18
  201. package/dist/maintenance/rebuild-memory-projection.js +17 -17
  202. package/dist/memory-browse-operations.js +81 -78
  203. package/dist/memory-browse.js +6 -6
  204. package/dist/namespaces/migrate.js +16 -16
  205. package/dist/namespaces/search.js +7 -7
  206. package/dist/namespaces/storage.js +15 -15
  207. package/dist/offline-sync-changeset-generations.js +5 -5
  208. package/dist/offline-sync-embedding-generation.js +4 -4
  209. package/dist/offline-sync-snapshot-stream.js +7 -7
  210. package/dist/offline-sync.js +9 -9
  211. package/dist/operator-doctor-corpus.js +19 -19
  212. package/dist/operator-toolkit.js +39 -39
  213. package/dist/orchestration/buffer-drain-runner.js +194 -191
  214. package/dist/orchestration/buffer-drain-runner.js.map +1 -1
  215. package/dist/orchestration/maintenance.js +31 -31
  216. package/dist/orchestrator.js +195 -192
  217. package/dist/qmd.js +4 -4
  218. package/dist/recall-navigation-operations.js +81 -78
  219. package/dist/recall-navigation.js +80 -77
  220. package/dist/recall-state-view-admission.js +6 -6
  221. package/dist/recall-why-service.js +6 -6
  222. package/dist/resume-bundles.js +27 -27
  223. package/dist/search/factory.js +6 -6
  224. package/dist/search/index.js +12 -12
  225. package/dist/semantic-consolidation.js +23 -23
  226. package/dist/semantic-rule-promotion.js +15 -15
  227. package/dist/semantic-rule-verifier.js +15 -15
  228. package/dist/source-agent-qualifier.js +22 -22
  229. package/dist/standup/build.js +15 -15
  230. package/dist/storage.js +14 -14
  231. package/dist/summarizer.js +6 -6
  232. package/dist/support-passport/index.js +83 -80
  233. package/dist/transfer/backup.js +2 -2
  234. package/dist/transfer/capsule-export.js +2 -2
  235. package/dist/transfer/capsule-import.js +2 -2
  236. package/dist/transfer/export-okf.js +15 -15
  237. package/dist/verified-recall.js +15 -15
  238. package/dist/who-knows-cli.js +16 -16
  239. package/dist/who-knows.js +15 -15
  240. package/package.json +2 -2
  241. package/src/access-observe-lcm-archive.ts +30 -0
  242. package/src/access-observe-lcm-fail-closed.test.ts +118 -0
  243. package/src/access-observe-objective-state.ts +40 -0
  244. package/src/access-observe-stage-timing.test.ts +246 -0
  245. package/src/access-observe-stage-timing.ts +58 -0
  246. package/src/access-observe-write-surface.ts +45 -45
  247. package/src/access-service.ts +1 -0
  248. package/src/lcm/archive.ts +59 -7
  249. package/src/lcm/engine.ts +256 -53
  250. package/src/lcm/queue.test.ts +32 -14
  251. package/src/lcm/queue.ts +24 -16
  252. package/src/lcm/summarizer.ts +15 -2
  253. package/src/lcm-durability.test.ts +856 -0
  254. package/src/lcm-engine.test.ts +12 -3
  255. package/dist/chunk-6WKWL53V.js.map +0 -1
  256. package/dist/chunk-KOLJJN5G.js.map +0 -1
  257. package/dist/chunk-MMCO4SRG.js.map +0 -1
  258. package/dist/chunk-WVP2I6C5.js.map +0 -1
  259. package/dist/chunk-Y7427SL7.js.map +0 -1
  260. /package/dist/{capsule-crypto-GWVG7LGC.js.map → access-observe-lcm-archive.js.map} +0 -0
  261. /package/dist/{graph-edge-decay-OEX5OGMI.js.map → access-observe-objective-state.js.map} +0 -0
  262. /package/dist/{chunk-NCZGGGWI.js.map → chunk-2BBMCMJS.js.map} +0 -0
  263. /package/dist/{chunk-UVVFPCPX.js.map → chunk-2GV24KFD.js.map} +0 -0
  264. /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
  265. /package/dist/{chunk-QDZWQBLU.js.map → chunk-2R7OCBRR.js.map} +0 -0
  266. /package/dist/{chunk-U2CAGMUD.js.map → chunk-2YPIFJHL.js.map} +0 -0
  267. /package/dist/{chunk-4SOWMA55.js.map → chunk-3AASGFR4.js.map} +0 -0
  268. /package/dist/{chunk-CI3MAAIY.js.map → chunk-3F7N4I5I.js.map} +0 -0
  269. /package/dist/{chunk-PLCYKAWH.js.map → chunk-3ICAWZUU.js.map} +0 -0
  270. /package/dist/{chunk-B4DXREWC.js.map → chunk-3W37NITP.js.map} +0 -0
  271. /package/dist/{chunk-R4ZHF4K2.js.map → chunk-43FLJLT2.js.map} +0 -0
  272. /package/dist/{chunk-RLVI2M5Q.js.map → chunk-4BOBW6H4.js.map} +0 -0
  273. /package/dist/{chunk-HXFIILGF.js.map → chunk-4RASUAN3.js.map} +0 -0
  274. /package/dist/{chunk-JLMOH5JA.js.map → chunk-5FMGPV34.js.map} +0 -0
  275. /package/dist/{chunk-EI6M5NVK.js.map → chunk-5JBVPJCT.js.map} +0 -0
  276. /package/dist/{chunk-74AY3S7U.js.map → chunk-5RW247F5.js.map} +0 -0
  277. /package/dist/{chunk-P4TV3TQ2.js.map → chunk-5VQSKBNF.js.map} +0 -0
  278. /package/dist/{chunk-H5DIRCZP.js.map → chunk-64U42JL5.js.map} +0 -0
  279. /package/dist/{chunk-4XINO77L.js.map → chunk-66JOLMWS.js.map} +0 -0
  280. /package/dist/{chunk-WHROVQ5Q.js.map → chunk-66PEACZP.js.map} +0 -0
  281. /package/dist/{chunk-GKL6QYZO.js.map → chunk-6L63IN3M.js.map} +0 -0
  282. /package/dist/{chunk-Y3XPSGNF.js.map → chunk-6QS5NQJH.js.map} +0 -0
  283. /package/dist/{chunk-M4IEZGCK.js.map → chunk-BFBS7OFQ.js.map} +0 -0
  284. /package/dist/{chunk-4PG5R6BJ.js.map → chunk-BNU5TQLR.js.map} +0 -0
  285. /package/dist/{chunk-B3MWELZ3.js.map → chunk-BW33YTF3.js.map} +0 -0
  286. /package/dist/{chunk-H6VJSITJ.js.map → chunk-CIL4GHMD.js.map} +0 -0
  287. /package/dist/{chunk-5UM4H64E.js.map → chunk-D3AGBN6G.js.map} +0 -0
  288. /package/dist/{chunk-IG3EZ3TF.js.map → chunk-DM3UZUCN.js.map} +0 -0
  289. /package/dist/{chunk-PMDOGXA2.js.map → chunk-EF3HNVL4.js.map} +0 -0
  290. /package/dist/{chunk-TVE7W67N.js.map → chunk-EIZ4MK33.js.map} +0 -0
  291. /package/dist/{chunk-AUFPPBC3.js.map → chunk-ENPJX3BB.js.map} +0 -0
  292. /package/dist/{chunk-63A2BU2B.js.map → chunk-F4ZHKDBW.js.map} +0 -0
  293. /package/dist/{chunk-3LBDEGQA.js.map → chunk-FDUCIUQ5.js.map} +0 -0
  294. /package/dist/{chunk-CTH2CQCB.js.map → chunk-FM6UKZAE.js.map} +0 -0
  295. /package/dist/{chunk-XVZA6VXC.js.map → chunk-FZVROZKC.js.map} +0 -0
  296. /package/dist/{chunk-IAGVM7EY.js.map → chunk-GMSRLDVR.js.map} +0 -0
  297. /package/dist/{chunk-HPB5TF55.js.map → chunk-GT4G2S2Y.js.map} +0 -0
  298. /package/dist/{chunk-645WOU5I.js.map → chunk-H7BZBSP6.js.map} +0 -0
  299. /package/dist/{chunk-5MGKGEL7.js.map → chunk-HNF7IMYQ.js.map} +0 -0
  300. /package/dist/{chunk-W7K5BP3M.js.map → chunk-HQPFACXO.js.map} +0 -0
  301. /package/dist/{chunk-TECK5IVY.js.map → chunk-HZNURRDS.js.map} +0 -0
  302. /package/dist/{chunk-SXTVZ6JL.js.map → chunk-I6HRHJRA.js.map} +0 -0
  303. /package/dist/{chunk-NHWDTOBN.js.map → chunk-ILD7N3XC.js.map} +0 -0
  304. /package/dist/{chunk-4NV7O76Q.js.map → chunk-J5TVHCDG.js.map} +0 -0
  305. /package/dist/{chunk-AL3TCNSJ.js.map → chunk-J6GZ2254.js.map} +0 -0
  306. /package/dist/{chunk-OH55F76C.js.map → chunk-JEX2JL3U.js.map} +0 -0
  307. /package/dist/{chunk-AVGDYYMA.js.map → chunk-JGQEF33K.js.map} +0 -0
  308. /package/dist/{chunk-6P7U3HWG.js.map → chunk-K36RMINQ.js.map} +0 -0
  309. /package/dist/{chunk-UW6LBFYN.js.map → chunk-K47G2CBP.js.map} +0 -0
  310. /package/dist/{chunk-3RHU5MD7.js.map → chunk-K7LLGCPH.js.map} +0 -0
  311. /package/dist/{chunk-BUKK5SWA.js.map → chunk-KQAFEZQX.js.map} +0 -0
  312. /package/dist/{chunk-R2BIVU2Z.js.map → chunk-LTST4R7U.js.map} +0 -0
  313. /package/dist/{chunk-IZBIDPMY.js.map → chunk-LYTKNK5O.js.map} +0 -0
  314. /package/dist/{chunk-HH73M65H.js.map → chunk-MCFI6G7U.js.map} +0 -0
  315. /package/dist/{chunk-V6SBA5O7.js.map → chunk-MFKBYXBY.js.map} +0 -0
  316. /package/dist/{chunk-AYJQ644F.js.map → chunk-MK7HXGM6.js.map} +0 -0
  317. /package/dist/{chunk-MOIJWWNA.js.map → chunk-MKMIY3E7.js.map} +0 -0
  318. /package/dist/{chunk-EXQJMFRF.js.map → chunk-MRN2MKB7.js.map} +0 -0
  319. /package/dist/{chunk-W26D2USW.js.map → chunk-MUH7RR6T.js.map} +0 -0
  320. /package/dist/{chunk-64JLBFCQ.js.map → chunk-N7NAGECH.js.map} +0 -0
  321. /package/dist/{chunk-75DCOS6I.js.map → chunk-OAKOAOEG.js.map} +0 -0
  322. /package/dist/{chunk-DDBB55L2.js.map → chunk-OAQO5AZJ.js.map} +0 -0
  323. /package/dist/{chunk-OPFVXM2D.js.map → chunk-OX6GY22Q.js.map} +0 -0
  324. /package/dist/{chunk-XWE3EOWX.js.map → chunk-RZED7FAU.js.map} +0 -0
  325. /package/dist/{chunk-YSATDEBY.js.map → chunk-SBRUTD5O.js.map} +0 -0
  326. /package/dist/{chunk-ZORS5BG5.js.map → chunk-SQO5SEKA.js.map} +0 -0
  327. /package/dist/{chunk-PRKNAIGZ.js.map → chunk-T6T2RMWW.js.map} +0 -0
  328. /package/dist/{chunk-O5ZINWW3.js.map → chunk-THFSCUFC.js.map} +0 -0
  329. /package/dist/{chunk-CIEEYVUB.js.map → chunk-TPX7XXY4.js.map} +0 -0
  330. /package/dist/{chunk-OCK4D5PC.js.map → chunk-TSZP7GGJ.js.map} +0 -0
  331. /package/dist/{chunk-L334PSLW.js.map → chunk-U2A56LLF.js.map} +0 -0
  332. /package/dist/{chunk-TGQW3AMK.js.map → chunk-UIFWZMO7.js.map} +0 -0
  333. /package/dist/{chunk-LN4X2NDA.js.map → chunk-UJ2FP2RV.js.map} +0 -0
  334. /package/dist/{chunk-4MPAKYZU.js.map → chunk-VDYRXI3E.js.map} +0 -0
  335. /package/dist/{chunk-IHCXMYSE.js.map → chunk-VPEIWMUT.js.map} +0 -0
  336. /package/dist/{chunk-ELHJK7LM.js.map → chunk-WBN66HPI.js.map} +0 -0
  337. /package/dist/{chunk-BJLCV2P3.js.map → chunk-WGRAB3KB.js.map} +0 -0
  338. /package/dist/{chunk-IVUVQPTQ.js.map → chunk-WIW4LOZL.js.map} +0 -0
  339. /package/dist/{chunk-5KDDAQ6K.js.map → chunk-WN2DASTS.js.map} +0 -0
  340. /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
  341. /package/dist/{chunk-5Y6VA6X2.js.map → chunk-XDUP6SWG.js.map} +0 -0
  342. /package/dist/{chunk-GHHQLSSY.js.map → chunk-XR4QR3JT.js.map} +0 -0
  343. /package/dist/{chunk-64S6X4IU.js.map → chunk-XTN54NML.js.map} +0 -0
  344. /package/dist/{chunk-QGFR73SN.js.map → chunk-YIG4HPY4.js.map} +0 -0
  345. /package/dist/{chunk-UYUFDTIX.js.map → chunk-YIXWY4OZ.js.map} +0 -0
  346. /package/dist/{chunk-GJ4HU6LK.js.map → chunk-YLMTFRZR.js.map} +0 -0
  347. /package/dist/{chunk-GGD2YDS6.js.map → chunk-YRMSHA7H.js.map} +0 -0
  348. /package/dist/{chunk-KZZ5EZ7O.js.map → chunk-ZS5LREUZ.js.map} +0 -0
  349. /package/dist/{chunk-JLGBJ4AX.js.map → chunk-ZYEWTVNQ.js.map} +0 -0
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-KZZ5EZ7O.js";
4
+ } from "./chunk-ZS5LREUZ.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-NHWDTOBN.js";
7
- import "./chunk-UHVXE24Y.js";
6
+ import "./chunk-ILD7N3XC.js";
8
7
  import "./chunk-QGVCFVX6.js";
8
+ import "./chunk-UHVXE24Y.js";
9
9
  import "./chunk-IGOW4TJE.js";
10
10
  import "./chunk-ZOBYTRBU.js";
11
11
  import "./chunk-G6OFEGUR.js";
12
- import "./chunk-OH55F76C.js";
13
- import "./chunk-L334PSLW.js";
12
+ import "./chunk-JEX2JL3U.js";
13
+ import "./chunk-U2A56LLF.js";
14
+ import "./chunk-DOJBV6WR.js";
15
+ import "./chunk-PFUXPTBT.js";
14
16
  import "./chunk-CYEPCZN5.js";
15
17
  import "./chunk-DLZGSZVC.js";
16
18
  import "./chunk-OVZIYLBZ.js";
17
- import "./chunk-EXYT52NR.js";
18
- import "./chunk-DOJBV6WR.js";
19
- import "./chunk-PFUXPTBT.js";
20
19
  import "./chunk-WNEVEMJ3.js";
20
+ import "./chunk-EXYT52NR.js";
21
21
  import "./chunk-Y5NLBXPV.js";
22
22
  import "./chunk-TFA6HPOA.js";
23
23
  import "./chunk-F4TWWUMP.js";
@@ -35,14 +35,15 @@ import "./chunk-WXPBDEMW.js";
35
35
  import "./chunk-AAD2ZS6P.js";
36
36
  import "./chunk-BV2BRHD4.js";
37
37
  import "./chunk-ZIKENA2C.js";
38
+ import "./chunk-3ONXXHQO.js";
38
39
  import "./chunk-YXZG5TVN.js";
39
40
  import "./chunk-3OUGSOJP.js";
40
41
  import "./chunk-SCU65EZI.js";
41
- import "./chunk-3ONXXHQO.js";
42
- import "./chunk-3WU7XOFN.js";
43
42
  import "./chunk-P4GUQSK3.js";
44
43
  import "./chunk-4LZ7SVKM.js";
45
44
  import "./chunk-YHTG64XV.js";
45
+ import "./chunk-3WU7XOFN.js";
46
+ import "./chunk-G7D6GZ5J.js";
46
47
  import "./chunk-ER7XANP3.js";
47
48
  import "./chunk-M5GVCJSJ.js";
48
49
  import "./chunk-RBOJCG4T.js";
@@ -50,18 +51,17 @@ import "./chunk-IAYUTGF2.js";
50
51
  import "./chunk-5WITETWU.js";
51
52
  import "./chunk-6CIAGZ6X.js";
52
53
  import "./chunk-7CT3AI52.js";
53
- import "./chunk-G7D6GZ5J.js";
54
54
  import "./chunk-7VLBZKNB.js";
55
55
  import "./chunk-Y33KJ556.js";
56
- import "./chunk-ELHJK7LM.js";
57
- import "./chunk-IUM3VSHI.js";
56
+ import "./chunk-WBN66HPI.js";
58
57
  import "./chunk-NWA6IXR3.js";
59
58
  import "./chunk-VILPVT4S.js";
60
59
  import "./chunk-AF2XMJKD.js";
61
60
  import "./chunk-OR42ZI54.js";
62
- import "./chunk-23G5P7TA.js";
61
+ import "./chunk-IUM3VSHI.js";
63
62
  import "./chunk-C64XATK7.js";
64
63
  import "./chunk-42JKGUFJ.js";
64
+ import "./chunk-23G5P7TA.js";
65
65
  import "./chunk-U7MIMS2Y.js";
66
66
  import "./chunk-AVVCPA7U.js";
67
67
  import "./chunk-I55KAVET.js";
@@ -69,12 +69,12 @@ import "./chunk-L2EXJQJP.js";
69
69
  import "./chunk-45GF7Y3V.js";
70
70
  import "./chunk-YIJECSIX.js";
71
71
  import "./chunk-E2AWJ7KQ.js";
72
+ import "./chunk-W5BIQOAJ.js";
72
73
  import "./chunk-HADD45AR.js";
73
74
  import "./chunk-RNFMFC37.js";
74
75
  import "./chunk-YCVB7X56.js";
75
76
  import "./chunk-PQVCH2AE.js";
76
77
  import "./chunk-PJKTFXE2.js";
77
- import "./chunk-W5BIQOAJ.js";
78
78
  import "./chunk-V4XE263I.js";
79
79
  import "./chunk-YBA52OKG.js";
80
80
  import "./chunk-JRVMCZE3.js";
@@ -4,23 +4,23 @@ import {
4
4
  renderWhoKnows,
5
5
  renderWhoKnowsJson,
6
6
  renderWhoKnowsText
7
- } from "./chunk-RLVI2M5Q.js";
8
- import "./chunk-Y3XPSGNF.js";
9
- import "./chunk-NHWDTOBN.js";
10
- import "./chunk-UHVXE24Y.js";
7
+ } from "./chunk-4BOBW6H4.js";
8
+ import "./chunk-6QS5NQJH.js";
9
+ import "./chunk-ILD7N3XC.js";
11
10
  import "./chunk-QGVCFVX6.js";
11
+ import "./chunk-UHVXE24Y.js";
12
12
  import "./chunk-IGOW4TJE.js";
13
13
  import "./chunk-ZOBYTRBU.js";
14
14
  import "./chunk-G6OFEGUR.js";
15
- import "./chunk-OH55F76C.js";
16
- import "./chunk-L334PSLW.js";
15
+ import "./chunk-JEX2JL3U.js";
16
+ import "./chunk-U2A56LLF.js";
17
+ import "./chunk-DOJBV6WR.js";
18
+ import "./chunk-PFUXPTBT.js";
17
19
  import "./chunk-CYEPCZN5.js";
18
20
  import "./chunk-DLZGSZVC.js";
19
21
  import "./chunk-OVZIYLBZ.js";
20
- import "./chunk-EXYT52NR.js";
21
- import "./chunk-DOJBV6WR.js";
22
- import "./chunk-PFUXPTBT.js";
23
22
  import "./chunk-WNEVEMJ3.js";
23
+ import "./chunk-EXYT52NR.js";
24
24
  import "./chunk-Y5NLBXPV.js";
25
25
  import "./chunk-TFA6HPOA.js";
26
26
  import "./chunk-F4TWWUMP.js";
@@ -38,14 +38,15 @@ import "./chunk-WXPBDEMW.js";
38
38
  import "./chunk-AAD2ZS6P.js";
39
39
  import "./chunk-BV2BRHD4.js";
40
40
  import "./chunk-ZIKENA2C.js";
41
+ import "./chunk-3ONXXHQO.js";
41
42
  import "./chunk-YXZG5TVN.js";
42
43
  import "./chunk-3OUGSOJP.js";
43
44
  import "./chunk-SCU65EZI.js";
44
- import "./chunk-3ONXXHQO.js";
45
- import "./chunk-3WU7XOFN.js";
46
45
  import "./chunk-P4GUQSK3.js";
47
46
  import "./chunk-4LZ7SVKM.js";
48
47
  import "./chunk-YHTG64XV.js";
48
+ import "./chunk-3WU7XOFN.js";
49
+ import "./chunk-G7D6GZ5J.js";
49
50
  import "./chunk-ER7XANP3.js";
50
51
  import "./chunk-M5GVCJSJ.js";
51
52
  import "./chunk-RBOJCG4T.js";
@@ -53,18 +54,17 @@ import "./chunk-IAYUTGF2.js";
53
54
  import "./chunk-5WITETWU.js";
54
55
  import "./chunk-6CIAGZ6X.js";
55
56
  import "./chunk-7CT3AI52.js";
56
- import "./chunk-G7D6GZ5J.js";
57
57
  import "./chunk-7VLBZKNB.js";
58
58
  import "./chunk-Y33KJ556.js";
59
- import "./chunk-ELHJK7LM.js";
60
- import "./chunk-IUM3VSHI.js";
59
+ import "./chunk-WBN66HPI.js";
61
60
  import "./chunk-NWA6IXR3.js";
62
61
  import "./chunk-VILPVT4S.js";
63
62
  import "./chunk-AF2XMJKD.js";
64
63
  import "./chunk-OR42ZI54.js";
65
- import "./chunk-23G5P7TA.js";
64
+ import "./chunk-IUM3VSHI.js";
66
65
  import "./chunk-C64XATK7.js";
67
66
  import "./chunk-42JKGUFJ.js";
67
+ import "./chunk-23G5P7TA.js";
68
68
  import "./chunk-U7MIMS2Y.js";
69
69
  import "./chunk-AVVCPA7U.js";
70
70
  import "./chunk-I55KAVET.js";
@@ -72,12 +72,12 @@ import "./chunk-L2EXJQJP.js";
72
72
  import "./chunk-45GF7Y3V.js";
73
73
  import "./chunk-YIJECSIX.js";
74
74
  import "./chunk-E2AWJ7KQ.js";
75
+ import "./chunk-W5BIQOAJ.js";
75
76
  import "./chunk-HADD45AR.js";
76
77
  import "./chunk-RNFMFC37.js";
77
78
  import "./chunk-YCVB7X56.js";
78
79
  import "./chunk-PQVCH2AE.js";
79
80
  import "./chunk-PJKTFXE2.js";
80
- import "./chunk-W5BIQOAJ.js";
81
81
  import "./chunk-V4XE263I.js";
82
82
  import "./chunk-YBA52OKG.js";
83
83
  import "./chunk-JRVMCZE3.js";
package/dist/who-knows.js CHANGED
@@ -9,22 +9,22 @@ import {
9
9
  loadWhoKnowsEntities,
10
10
  tokenizeTopic,
11
11
  validateWhoKnowsInput
12
- } from "./chunk-Y3XPSGNF.js";
13
- import "./chunk-NHWDTOBN.js";
14
- import "./chunk-UHVXE24Y.js";
12
+ } from "./chunk-6QS5NQJH.js";
13
+ import "./chunk-ILD7N3XC.js";
15
14
  import "./chunk-QGVCFVX6.js";
15
+ import "./chunk-UHVXE24Y.js";
16
16
  import "./chunk-IGOW4TJE.js";
17
17
  import "./chunk-ZOBYTRBU.js";
18
18
  import "./chunk-G6OFEGUR.js";
19
- import "./chunk-OH55F76C.js";
20
- import "./chunk-L334PSLW.js";
19
+ import "./chunk-JEX2JL3U.js";
20
+ import "./chunk-U2A56LLF.js";
21
+ import "./chunk-DOJBV6WR.js";
22
+ import "./chunk-PFUXPTBT.js";
21
23
  import "./chunk-CYEPCZN5.js";
22
24
  import "./chunk-DLZGSZVC.js";
23
25
  import "./chunk-OVZIYLBZ.js";
24
- import "./chunk-EXYT52NR.js";
25
- import "./chunk-DOJBV6WR.js";
26
- import "./chunk-PFUXPTBT.js";
27
26
  import "./chunk-WNEVEMJ3.js";
27
+ import "./chunk-EXYT52NR.js";
28
28
  import "./chunk-Y5NLBXPV.js";
29
29
  import "./chunk-TFA6HPOA.js";
30
30
  import "./chunk-F4TWWUMP.js";
@@ -42,14 +42,15 @@ import "./chunk-WXPBDEMW.js";
42
42
  import "./chunk-AAD2ZS6P.js";
43
43
  import "./chunk-BV2BRHD4.js";
44
44
  import "./chunk-ZIKENA2C.js";
45
+ import "./chunk-3ONXXHQO.js";
45
46
  import "./chunk-YXZG5TVN.js";
46
47
  import "./chunk-3OUGSOJP.js";
47
48
  import "./chunk-SCU65EZI.js";
48
- import "./chunk-3ONXXHQO.js";
49
- import "./chunk-3WU7XOFN.js";
50
49
  import "./chunk-P4GUQSK3.js";
51
50
  import "./chunk-4LZ7SVKM.js";
52
51
  import "./chunk-YHTG64XV.js";
52
+ import "./chunk-3WU7XOFN.js";
53
+ import "./chunk-G7D6GZ5J.js";
53
54
  import "./chunk-ER7XANP3.js";
54
55
  import "./chunk-M5GVCJSJ.js";
55
56
  import "./chunk-RBOJCG4T.js";
@@ -57,18 +58,17 @@ import "./chunk-IAYUTGF2.js";
57
58
  import "./chunk-5WITETWU.js";
58
59
  import "./chunk-6CIAGZ6X.js";
59
60
  import "./chunk-7CT3AI52.js";
60
- import "./chunk-G7D6GZ5J.js";
61
61
  import "./chunk-7VLBZKNB.js";
62
62
  import "./chunk-Y33KJ556.js";
63
- import "./chunk-ELHJK7LM.js";
64
- import "./chunk-IUM3VSHI.js";
63
+ import "./chunk-WBN66HPI.js";
65
64
  import "./chunk-NWA6IXR3.js";
66
65
  import "./chunk-VILPVT4S.js";
67
66
  import "./chunk-AF2XMJKD.js";
68
67
  import "./chunk-OR42ZI54.js";
69
- import "./chunk-23G5P7TA.js";
68
+ import "./chunk-IUM3VSHI.js";
70
69
  import "./chunk-C64XATK7.js";
71
70
  import "./chunk-42JKGUFJ.js";
71
+ import "./chunk-23G5P7TA.js";
72
72
  import "./chunk-U7MIMS2Y.js";
73
73
  import "./chunk-AVVCPA7U.js";
74
74
  import "./chunk-I55KAVET.js";
@@ -76,12 +76,12 @@ import "./chunk-L2EXJQJP.js";
76
76
  import "./chunk-45GF7Y3V.js";
77
77
  import "./chunk-YIJECSIX.js";
78
78
  import "./chunk-E2AWJ7KQ.js";
79
+ import "./chunk-W5BIQOAJ.js";
79
80
  import "./chunk-HADD45AR.js";
80
81
  import "./chunk-RNFMFC37.js";
81
82
  import "./chunk-YCVB7X56.js";
82
83
  import "./chunk-PQVCH2AE.js";
83
84
  import "./chunk-PJKTFXE2.js";
84
- import "./chunk-W5BIQOAJ.js";
85
85
  import "./chunk-V4XE263I.js";
86
86
  import "./chunk-YBA52OKG.js";
87
87
  import "./chunk-JRVMCZE3.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "10.0.69",
3
+ "version": "10.0.70",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3376,7 +3376,7 @@
3376
3376
  "core"
3377
3377
  ],
3378
3378
  "peerDependencies": {
3379
- "@remnic/coding-graph": "^10.0.69"
3379
+ "@remnic/coding-graph": "^10.0.70"
3380
3380
  },
3381
3381
  "peerDependenciesMeta": {
3382
3382
  "@remnic/coding-graph": {
@@ -0,0 +1,30 @@
1
+ /**
2
+ * LCM archival acceptance for the observe surface.
3
+ *
4
+ * The archive append is durable before this returns: the queue holds only a
5
+ * session reference and summary DAGs are built in the background, so the
6
+ * caller is never blocked on inference.
7
+ *
8
+ * An archive failure rejects the observe (fail closed). An acknowledged
9
+ * observe must never lose its lossless copy: the client would not retry a
10
+ * request it was told succeeded.
11
+ */
12
+ import { log } from "./logger.js";
13
+ import type { LcmEngine } from "./lcm/engine.js";
14
+ import type { LcmObserveMessage } from "./lcm/queue.js";
15
+
16
+ /** Archive the observed turns; returns false when LCM is off. */
17
+ export async function archiveObservedTurns(
18
+ lcmEngine: LcmEngine | null,
19
+ lcmSessionKey: string,
20
+ messages: LcmObserveMessage[],
21
+ ): Promise<boolean> {
22
+ if (!lcmEngine || !lcmEngine.enabled) return false;
23
+ try {
24
+ await lcmEngine.enqueueObserveMessages(lcmSessionKey, messages);
25
+ return true;
26
+ } catch (err) {
27
+ log.error(`access-observe LCM archival failed: ${err}`);
28
+ throw err;
29
+ }
30
+ }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * LCM archival acceptance is durable and fail-closed.
3
+ *
4
+ * The observe surface used to enqueue archival without waiting: an archive
5
+ * failure was invisible, the response reported the turn as archived, and the
6
+ * client never retried — the lossless copy of the turn was simply gone.
7
+ *
8
+ * These tests drive the REAL orchestrator (real LCM engine, real SQLite
9
+ * archive, real capture buffer) and pin the contract: a successful observe
10
+ * means the archive accepted the turn, and a failed archive rejects the
11
+ * observe BEFORE extraction starts, so the caller can retry the same turns.
12
+ */
13
+ import assert from "node:assert/strict";
14
+ import { mkdir } from "node:fs/promises";
15
+ import path from "node:path";
16
+ import test from "node:test";
17
+
18
+ import { EngramAccessService } from "./access-service.js";
19
+ import { Orchestrator } from "./orchestrator.js";
20
+ import type { EngramAccessObserveRequest } from "./access-service.js";
21
+ import {
22
+ cleanupDir,
23
+ makeLifecycleConfig,
24
+ mkTempMemoryDir,
25
+ } from "./testing/orchestrator-lite.js";
26
+
27
+ function observeRequest(
28
+ overrides: Partial<EngramAccessObserveRequest>,
29
+ ): EngramAccessObserveRequest {
30
+ // SAFETY: the literal sets every required observe field the surface reads.
31
+ return {
32
+ sessionKey: "observe-fail-closed-session",
33
+ messages: [
34
+ { role: "user", content: "what database are we using?" },
35
+ { role: "assistant", content: "we use postgres for the primary store" },
36
+ ],
37
+ ...overrides,
38
+ } as EngramAccessObserveRequest;
39
+ }
40
+
41
+ test("observe reports the turn as archived only after the archive accepted it", async () => {
42
+ const memoryDir = await mkTempMemoryDir("observe-lcm-ok");
43
+ const orchestrator = new Orchestrator(
44
+ makeLifecycleConfig(memoryDir, { lcmEnabled: true, lcmLeafBatchSize: 1 }),
45
+ );
46
+ try {
47
+ const service = new EngramAccessService(orchestrator);
48
+
49
+ const response = await service.observe(observeRequest({}));
50
+
51
+ assert.equal(response.lcmArchived, true);
52
+ const archived = await orchestrator.lcmEngine?.searchContextFull(
53
+ "postgres",
54
+ 10,
55
+ "observe-fail-closed-session",
56
+ );
57
+ assert.equal(
58
+ archived?.length ?? 0,
59
+ 1,
60
+ "the observed turn must be in the durable LCM archive",
61
+ );
62
+ } finally {
63
+ await orchestrator.destroy().catch(() => undefined);
64
+ await cleanupDir(memoryDir);
65
+ }
66
+ });
67
+
68
+ test("observe rejects and starts no extraction when the LCM archive fails", async () => {
69
+ const memoryDir = await mkTempMemoryDir("observe-lcm-fail");
70
+ // The LCM archive database cannot be opened (a directory sits where the
71
+ // SQLite file belongs), so the archive rejects the turn: exactly the
72
+ // "archive failed" case a client must be able to retry.
73
+ await mkdir(path.join(memoryDir, "state", "lcm.sqlite"), { recursive: true });
74
+ const orchestrator = new Orchestrator(
75
+ makeLifecycleConfig(memoryDir, { lcmEnabled: true, lcmLeafBatchSize: 1 }),
76
+ );
77
+ try {
78
+ const service = new EngramAccessService(orchestrator);
79
+
80
+ await assert.rejects(() => service.observe(observeRequest({})));
81
+
82
+ const bufferKeys = await orchestrator.buffer.findBufferKeysForSession(
83
+ "observe-fail-closed-session",
84
+ );
85
+ assert.deepEqual(
86
+ bufferKeys,
87
+ [],
88
+ "extraction must not start when the lossless archive rejected the turn",
89
+ );
90
+ } finally {
91
+ await orchestrator.destroy().catch(() => undefined);
92
+ await cleanupDir(memoryDir);
93
+ }
94
+ });
95
+
96
+ test("observe rejects a closed LCM engine instead of acknowledging an empty archive", async () => {
97
+ const memoryDir = await mkTempMemoryDir("observe-lcm-closed");
98
+ const orchestrator = new Orchestrator(
99
+ makeLifecycleConfig(memoryDir, { lcmEnabled: true, lcmLeafBatchSize: 1 }),
100
+ );
101
+ try {
102
+ // The engine is closed underneath the observe surface: acceptance must
103
+ // fail loudly instead of reporting lcmArchived:true for a turn that was
104
+ // never stored.
105
+ orchestrator.lcmEngine?.close();
106
+ const service = new EngramAccessService(orchestrator);
107
+
108
+ await assert.rejects(() => service.observe(observeRequest({})));
109
+
110
+ const bufferKeys = await orchestrator.buffer.findBufferKeysForSession(
111
+ "observe-fail-closed-session",
112
+ );
113
+ assert.deepEqual(bufferKeys, [], "no capture may be admitted when the archive is closed");
114
+ } finally {
115
+ await orchestrator.destroy().catch(() => undefined);
116
+ await cleanupDir(memoryDir);
117
+ }
118
+ });
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Objective-state snapshots written from observed messages.
3
+ *
4
+ * Best-effort like the transcript write: a snapshot failure must not fail
5
+ * the observe, so it is logged and swallowed here.
6
+ */
7
+ import { log } from "./logger.js";
8
+ import { recordObjectiveStateSnapshotsFromObservedMessages } from "./objective-state-writers.js";
9
+ import { resolveObjectiveStateCapabilities } from "./capabilities.js";
10
+ import type { Orchestrator } from "./orchestrator.js";
11
+ import type { EngramAccessObserveRequest, MemoryScopePlan } from "./access-service.js";
12
+
13
+ /** Write the objective-state snapshots for one accepted observe. */
14
+ export async function recordObserveObjectiveState(
15
+ orchestrator: Orchestrator,
16
+ objectiveStateStoreLocationForNamespace: (
17
+ namespace: string,
18
+ ) => Promise<{ memoryDir: string; objectiveStateStoreDir?: string }>,
19
+ scope: MemoryScopePlan,
20
+ request: EngramAccessObserveRequest,
21
+ ): Promise<void> {
22
+ try {
23
+ const objectiveStateLocation = await objectiveStateStoreLocationForNamespace(
24
+ scope.objectiveStateNamespace,
25
+ );
26
+ await recordObjectiveStateSnapshotsFromObservedMessages({
27
+ memoryDir: objectiveStateLocation.memoryDir,
28
+ objectiveStateStoreDir: objectiveStateLocation.objectiveStateStoreDir,
29
+ objectiveStateMemoryEnabled:
30
+ resolveObjectiveStateCapabilities(orchestrator.config).objectiveStateMemory,
31
+ objectiveStateSnapshotWritesEnabled:
32
+ resolveObjectiveStateCapabilities(orchestrator.config).objectiveStateSnapshotWrites,
33
+ sessionKey: request.sessionKey,
34
+ recordedAt: new Date().toISOString(),
35
+ messages: request.messages,
36
+ });
37
+ } catch (err) {
38
+ log.error(`access-observe objective-state snapshot write failed: ${err}`);
39
+ }
40
+ }