@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,13 +1,18 @@
1
1
  import {
2
- matchesOfflineSyncDefaultExclude
3
- } from "./chunk-63LFM77Z.js";
2
+ EMBEDDING_SHARD_FILE_PATTERN
3
+ } from "./chunk-LDWE7OZS.js";
4
4
  import {
5
5
  prepareSafeArchiveRoot,
6
6
  resolveSafeArchiveTarget
7
7
  } from "./chunk-GCGJW34D.js";
8
8
  import {
9
- EMBEDDING_SHARD_FILE_PATTERN
10
- } from "./chunk-LDWE7OZS.js";
9
+ matchesOfflineSyncDefaultExclude
10
+ } from "./chunk-63LFM77Z.js";
11
+ import {
12
+ assertEmbeddingGenerationLockHeld,
13
+ embeddingGenerationLockPath,
14
+ withEmbeddingGenerationLock
15
+ } from "./chunk-XZ66U5M3.js";
11
16
  import {
12
17
  EmbeddingIndexFileStore,
13
18
  EmbeddingIndexStorageError,
@@ -16,11 +21,6 @@ import {
16
21
  shardEntriesForIndex,
17
22
  validateShardMembership
18
23
  } from "./chunk-SWRRZNHM.js";
19
- import {
20
- assertEmbeddingGenerationLockHeld,
21
- embeddingGenerationLockPath,
22
- withEmbeddingGenerationLock
23
- } from "./chunk-XZ66U5M3.js";
24
24
  import {
25
25
  GENERATION_MARKER_BASENAME,
26
26
  beginGenerationMarker,
@@ -709,4 +709,4 @@ export {
709
709
  divergedEmbeddingGenerationDeferrals,
710
710
  applyIncomingEmbeddingGenerations
711
711
  };
712
- //# sourceMappingURL=chunk-5KDDAQ6K.js.map
712
+ //# sourceMappingURL=chunk-WN2DASTS.js.map
@@ -0,0 +1,38 @@
1
+ import {
2
+ log
3
+ } from "./chunk-3WCASNQZ.js";
4
+
5
+ // src/access-observe-stage-timing.ts
6
+ var OBSERVE_SLOW_LOG_MS = 1e4;
7
+ function createObserveStageTimer() {
8
+ const startedAtMs = performance.now();
9
+ const stageMs = {};
10
+ const formatStages = () => Object.entries(stageMs).map(([stage, ms]) => `${stage}Ms=${Math.round(ms)}`).join(" ");
11
+ return {
12
+ async timed(stage, fn) {
13
+ const stageStartMs = performance.now();
14
+ try {
15
+ return await fn();
16
+ } finally {
17
+ stageMs[stage] = (stageMs[stage] ?? 0) + (performance.now() - stageStartMs);
18
+ }
19
+ },
20
+ logSlow(messages) {
21
+ const totalMs = Math.round(performance.now() - startedAtMs);
22
+ if (totalMs < OBSERVE_SLOW_LOG_MS) return;
23
+ log.warn(
24
+ `access-observe-slow totalMs=${totalMs} messages=${messages} ${formatStages()}`
25
+ );
26
+ },
27
+ logFailed(messages) {
28
+ log.warn(
29
+ `access-observe-failed totalMs=${Math.round(performance.now() - startedAtMs)} messages=${messages} ${formatStages()}`
30
+ );
31
+ }
32
+ };
33
+ }
34
+
35
+ export {
36
+ createObserveStageTimer
37
+ };
38
+ //# sourceMappingURL=chunk-WZU5AGO6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/access-observe-stage-timing.ts"],"sourcesContent":["/**\n * Noncontent stage timing for the observe surface.\n *\n * Durations only — never message content, session keys, namespaces or\n * principals. A monotonic clock (`performance.now`) keeps phase durations\n * sane under wall-clock corrections.\n *\n * A slow observe logs `access-observe-slow`; a failed observe always logs\n * `access-observe-failed`, so a 25s-class stall attributes to a phase\n * instead of a guess.\n */\nimport { log } from \"./logger.js\";\n\n/** Observes slower than this log `access-observe-slow` with per-stage durations. */\nconst OBSERVE_SLOW_LOG_MS = 10_000;\n\nexport interface ObserveStageTimer {\n /** Run one stage, recording its duration even when the stage rejects. */\n timed<T>(stage: string, fn: () => Promise<T>): Promise<T>;\n /** Log a slow successful observe with per-stage durations. */\n logSlow(messages: number): void;\n /** Log a failed observe with per-stage durations. */\n logFailed(messages: number): void;\n}\n\n/** Timer for one observe request. */\nexport function createObserveStageTimer(): ObserveStageTimer {\n const startedAtMs = performance.now();\n const stageMs: Record<string, number> = {};\n\n const formatStages = (): string =>\n Object.entries(stageMs)\n .map(([stage, ms]) => `${stage}Ms=${Math.round(ms)}`)\n .join(\" \");\n\n return {\n async timed<T>(stage: string, fn: () => Promise<T>): Promise<T> {\n const stageStartMs = performance.now();\n try {\n return await fn();\n } finally {\n stageMs[stage] = (stageMs[stage] ?? 0) + (performance.now() - stageStartMs);\n }\n },\n logSlow(messages: number): void {\n const totalMs = Math.round(performance.now() - startedAtMs);\n if (totalMs < OBSERVE_SLOW_LOG_MS) return;\n log.warn(\n `access-observe-slow totalMs=${totalMs} messages=${messages} ${formatStages()}`,\n );\n },\n logFailed(messages: number): void {\n log.warn(\n `access-observe-failed totalMs=${Math.round(performance.now() - startedAtMs)} messages=${messages} ${formatStages()}`,\n );\n },\n };\n}\n"],"mappings":";;;;;AAcA,IAAM,sBAAsB;AAYrB,SAAS,0BAA6C;AAC3D,QAAM,cAAc,YAAY,IAAI;AACpC,QAAM,UAAkC,CAAC;AAEzC,QAAM,eAAe,MACnB,OAAO,QAAQ,OAAO,EACnB,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC,EAAE,EACnD,KAAK,GAAG;AAEb,SAAO;AAAA,IACL,MAAM,MAAS,OAAe,IAAkC;AAC9D,YAAM,eAAe,YAAY,IAAI;AACrC,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,UAAE;AACA,gBAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI;AAAA,MAChE;AAAA,IACF;AAAA,IACA,QAAQ,UAAwB;AAC9B,YAAM,UAAU,KAAK,MAAM,YAAY,IAAI,IAAI,WAAW;AAC1D,UAAI,UAAU,oBAAqB;AACnC,UAAI;AAAA,QACF,+BAA+B,OAAO,aAAa,QAAQ,IAAI,aAAa,CAAC;AAAA,MAC/E;AAAA,IACF;AAAA,IACA,UAAU,UAAwB;AAChC,UAAI;AAAA,QACF,iCAAiC,KAAK,MAAM,YAAY,IAAI,IAAI,WAAW,CAAC,aAAa,QAAQ,IAAI,aAAa,CAAC;AAAA,MACrH;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -246,4 +246,4 @@ export {
246
246
  decryptCapsuleFile,
247
247
  decryptCapsuleFileInMemory
248
248
  };
249
- //# sourceMappingURL=chunk-UVYI6VIX.js.map
249
+ //# sourceMappingURL=chunk-X7Y7WX73.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-NHWDTOBN.js";
3
+ } from "./chunk-ILD7N3XC.js";
4
4
  import {
5
5
  composeMemoryEnvelope
6
6
  } from "./chunk-JRVMCZE3.js";
@@ -546,4 +546,4 @@ export {
546
546
  setSemanticRulePromotionTestHooks,
547
547
  promoteSemanticRuleFromMemory
548
548
  };
549
- //# sourceMappingURL=chunk-5Y6VA6X2.js.map
549
+ //# sourceMappingURL=chunk-XDUP6SWG.js.map
@@ -8,11 +8,11 @@ import {
8
8
  } from "./chunk-YUTT4ZTI.js";
9
9
  import {
10
10
  resolveDefaultNamespaceRoot
11
- } from "./chunk-5UM4H64E.js";
11
+ } from "./chunk-D3AGBN6G.js";
12
12
  import {
13
13
  StorageManager,
14
14
  readRawMemoryDocument
15
- } from "./chunk-NHWDTOBN.js";
15
+ } from "./chunk-ILD7N3XC.js";
16
16
  import {
17
17
  parseContinuityImprovementLoops
18
18
  } from "./chunk-LDXUBPMO.js";
@@ -1869,4 +1869,4 @@ export {
1869
1869
  defaultTierMigrationCycleBudget,
1870
1870
  CompoundingEngine
1871
1871
  };
1872
- //# sourceMappingURL=chunk-GHHQLSSY.js.map
1872
+ //# sourceMappingURL=chunk-XR4QR3JT.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ ClaudeCodeAdapter
3
+ } from "./chunk-3JKYQBLC.js";
1
4
  import {
2
5
  CodexAdapter
3
6
  } from "./chunk-7RKSJVOQ.js";
@@ -7,9 +10,6 @@ import {
7
10
  import {
8
11
  ReplitAdapter
9
12
  } from "./chunk-SI36RWC3.js";
10
- import {
11
- ClaudeCodeAdapter
12
- } from "./chunk-3JKYQBLC.js";
13
13
  import {
14
14
  headerValue
15
15
  } from "./chunk-NJAIR57U.js";
@@ -110,4 +110,4 @@ export {
110
110
  OpenCodeAdapter,
111
111
  AdapterRegistry
112
112
  };
113
- //# sourceMappingURL=chunk-64S6X4IU.js.map
113
+ //# sourceMappingURL=chunk-XTN54NML.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  defineOperation
3
- } from "./chunk-6WKWL53V.js";
3
+ } from "./chunk-B7YAIHAV.js";
4
4
  import {
5
5
  EngramAccessInputError
6
6
  } from "./chunk-LGEH473S.js";
@@ -92,4 +92,4 @@ defineOperation({
92
92
  };
93
93
  }
94
94
  });
95
- //# sourceMappingURL=chunk-QGFR73SN.js.map
95
+ //# sourceMappingURL=chunk-YIG4HPY4.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-AJG2TAMR.js";
4
4
  import {
5
5
  deepRecallRequestSchema
6
- } from "./chunk-H6VJSITJ.js";
6
+ } from "./chunk-CIL4GHMD.js";
7
7
  import {
8
8
  EngramAccessInputError
9
9
  } from "./chunk-LGEH473S.js";
@@ -40,4 +40,4 @@ async function respondDeepRecall(req, res, respondJson, readJsonBody, service, s
40
40
  export {
41
41
  respondDeepRecall
42
42
  };
43
- //# sourceMappingURL=chunk-UYUFDTIX.js.map
43
+ //# sourceMappingURL=chunk-YIXWY4OZ.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SupportPassportError,
3
3
  getOperation
4
- } from "./chunk-6WKWL53V.js";
4
+ } from "./chunk-B7YAIHAV.js";
5
5
  import {
6
6
  abortError,
7
7
  isAbortError
@@ -499,4 +499,4 @@ export {
499
499
  buildSupportPassportPublicRequestHandler,
500
500
  composeSupportPassportExternalRequestHandlers
501
501
  };
502
- //# sourceMappingURL=chunk-GJ4HU6LK.js.map
502
+ //# sourceMappingURL=chunk-YLMTFRZR.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
3
3
  SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
4
- } from "./chunk-6WKWL53V.js";
4
+ } from "./chunk-B7YAIHAV.js";
5
5
  import {
6
6
  SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
7
7
  } from "./chunk-PWPIERBM.js";
@@ -343,4 +343,4 @@ export {
343
343
  parseSupportPassportModelJob,
344
344
  SupportPassportModelBridge
345
345
  };
346
- //# sourceMappingURL=chunk-GGD2YDS6.js.map
346
+ //# sourceMappingURL=chunk-YRMSHA7H.js.map
@@ -1,6 +1,15 @@
1
+ import {
2
+ LcmSummarizer
3
+ } from "./chunk-AQNHEDXP.js";
4
+ import {
5
+ LcmArchive
6
+ } from "./chunk-SDL22RRW.js";
7
+ import {
8
+ LcmDag
9
+ } from "./chunk-7N4KAIGN.js";
1
10
  import {
2
11
  LcmWorkQueue
3
- } from "./chunk-MMCO4SRG.js";
12
+ } from "./chunk-QNN4FYBD.js";
4
13
  import {
5
14
  assembleCompressedHistoryWithTrace
6
15
  } from "./chunk-UXPUUL3G.js";
@@ -8,15 +17,6 @@ import {
8
17
  ensureLcmStateDir,
9
18
  openLcmDatabase
10
19
  } from "./chunk-DDA47TES.js";
11
- import {
12
- LcmSummarizer
13
- } from "./chunk-KOLJJN5G.js";
14
- import {
15
- LcmArchive
16
- } from "./chunk-WVP2I6C5.js";
17
- import {
18
- LcmDag
19
- } from "./chunk-7N4KAIGN.js";
20
20
  import {
21
21
  nativeBindingRecoveryHint
22
22
  } from "./chunk-LD72P4YS.js";
@@ -74,6 +74,9 @@ var EMPTY_LCM_STATS = {
74
74
  totalSummaryNodes: 0,
75
75
  maxDepth: -1
76
76
  };
77
+ var LCM_SUMMARIZE_MAX_LEAF_BATCHES_PER_JOB = 16;
78
+ var LCM_SUMMARIZE_RETRY_BASE_MS = 500;
79
+ var LCM_SUMMARIZE_RETRY_MAX_MS = 3e4;
77
80
  var LcmEngine = class {
78
81
  constructor(pluginConfig, summarizeFn) {
79
82
  this.summarizeFn = summarizeFn;
@@ -90,6 +93,14 @@ var LcmEngine = class {
90
93
  config;
91
94
  memoryDir;
92
95
  initPromise = null;
96
+ summarizeRetryTimers = /* @__PURE__ */ new Map();
97
+ summarizeRetryAttempts = /* @__PURE__ */ new Map();
98
+ /** Resolved when the session's pending retry timer has fired or been cleared. */
99
+ summarizeRetryWaiters = /* @__PURE__ */ new Map();
100
+ /** Explicit idle waiters per session; referenced only while nonzero. */
101
+ summarizeRetryIdleWaiters = /* @__PURE__ */ new Map();
102
+ /** Base backoff delay; tests shrink it to keep the retry loop fast. */
103
+ summarizeRetryBaseMs = LCM_SUMMARIZE_RETRY_BASE_MS;
93
104
  pendingObserveInitCounts = /* @__PURE__ */ new Map();
94
105
  pendingObserveInitWaiters = /* @__PURE__ */ new Map();
95
106
  pendingObserveInitIdleWaiters = [];
@@ -130,8 +141,8 @@ var LcmEngine = class {
130
141
  );
131
142
  const observeQueue = new LcmWorkQueue({
132
143
  concurrency: this.config.observeConcurrency,
133
- worker: async (sessionId, messages) => {
134
- await this.processObserveMessages(sessionId, messages);
144
+ worker: async (sessionId) => {
145
+ await this.processSummarizeJob(sessionId);
135
146
  },
136
147
  hooks: {
137
148
  onJobStart: ({ sessionId, depth, inFlight, waitMs }) => {
@@ -169,47 +180,73 @@ var LcmEngine = class {
169
180
  this.dag = dag;
170
181
  this.summarizer = summarizer;
171
182
  this.observeQueue = observeQueue;
183
+ this.resumeOutstandingSummaries();
172
184
  log.info("LCM engine initialized");
173
185
  }
174
186
  /**
175
- * Enqueue messages from agent_end hook.
176
- * The queue worker performs the archive append and incremental summarization.
187
+ * Restart resume: sessions whose durable archive still holds complete
188
+ * unsummarized batches get a summary job without any new observe call.
189
+ * Only session references are queued — the content already lives in SQLite.
190
+ */
191
+ resumeOutstandingSummaries() {
192
+ if (!this.archive || !this.observeQueue) return;
193
+ const sessions = this.archive.listSessionsWithUnsummarizedTurns(
194
+ this.config.leafBatchSize
195
+ );
196
+ if (sessions.length === 0) return;
197
+ for (const sessionId of sessions) this.observeQueue.enqueue(sessionId);
198
+ log.info(`LCM resume scheduled summary jobs: sessions=${sessions.length}`);
199
+ }
200
+ /**
201
+ * Archive observed messages and schedule background summarization.
202
+ *
203
+ * The archive append completes BEFORE this resolves: an accepted observe is
204
+ * already durable in SQLite, so a crash cannot lose it. Only the
205
+ * summarization is background work, and it resumes from the durable archive.
177
206
  */
178
207
  async observeMessages(sessionId, messages) {
179
208
  const normalizedSessionId = normalizeLcmSessionId(sessionId);
180
209
  if (!normalizedSessionId) return;
181
- this.enqueueObserveMessages(normalizedSessionId, messages);
210
+ await this.enqueueObserveMessages(normalizedSessionId, messages);
182
211
  }
183
- /** Enqueue an observe job without waiting for worker completion. */
184
- enqueueObserveMessages(sessionId, messages) {
185
- if (!this.config.enabled || this.closed) return;
212
+ /**
213
+ * Durably archive messages, then queue a metadata-only summary job.
214
+ *
215
+ * Rejects when the archive append fails — callers must not treat a failed
216
+ * archive as an accepted observation.
217
+ */
218
+ async enqueueObserveMessages(sessionId, messages) {
219
+ if (!this.config.enabled) return;
220
+ if (this.closed) throw new Error("LCM engine is closed");
186
221
  const normalizedSessionId = normalizeLcmSessionId(sessionId);
187
222
  if (!normalizedSessionId) return;
188
223
  if (messages.length === 0) return;
189
224
  this.reservePendingObserveInit(normalizedSessionId);
190
- void this.ensureInitialized().then(() => {
191
- if (this.closed || !this.observeQueue) return;
192
- this.observeQueue.enqueue(normalizedSessionId, messages);
225
+ try {
226
+ await this.ensureInitialized();
227
+ if (this.closed) throw new Error("LCM engine is closed");
228
+ if (!this.archive || !this.observeQueue) {
229
+ throw new Error("LCM engine is not initialized");
230
+ }
231
+ const archived = this.archiveObservedMessages(normalizedSessionId, messages);
232
+ this.observeQueue.enqueue(normalizedSessionId);
193
233
  log.debug(
194
- `LCM observe enqueued: session=${normalizedSessionId}, depth=${this.observeQueue.depth}, inFlight=${this.observeQueue.inFlightCount}`
234
+ `LCM observe archived: session=${normalizedSessionId}, messages=${archived}, depth=${this.observeQueue.depth}, inFlight=${this.observeQueue.inFlightCount}`
195
235
  );
196
- }).catch((err) => {
197
- if (this.closed) return;
236
+ } catch (err) {
198
237
  log.error(
199
- `LCM observe enqueue initialization error: ${err}${nativeBindingRecoveryHint(err)}`
238
+ `LCM observe archive failed: session=${normalizedSessionId}, error=${err}${nativeBindingRecoveryHint(err)}`
200
239
  );
201
- }).finally(() => {
240
+ throw err;
241
+ } finally {
202
242
  this.releasePendingObserveInit(normalizedSessionId);
203
- });
243
+ }
204
244
  }
205
- async processObserveMessages(sessionId, messages) {
206
- if (this.closed) return;
207
- await this.ensureInitialized();
208
- if (this.closed || !this.archive || !this.summarizer) return;
209
- if (messages.length === 0) return;
245
+ /** Append observed messages to the archive; returns the number of rows. */
246
+ archiveObservedMessages(sessionId, messages) {
210
247
  const currentMax = this.archive.getMaxTurnIndex(sessionId);
211
248
  const { messagePartsEnabled } = this.config;
212
- const newMessages = messages.map((m, i) => ({
249
+ const rows = messages.map((m, i) => ({
213
250
  turnIndex: currentMax + 1 + i,
214
251
  role: m.role,
215
252
  content: m.content,
@@ -217,14 +254,90 @@ var LcmEngine = class {
217
254
  rawContent: messagePartsEnabled ? m.rawContent : void 0,
218
255
  sourceFormat: messagePartsEnabled ? m.sourceFormat : void 0
219
256
  }));
220
- this.archive.appendMessages(sessionId, newMessages, {
221
- messagePartsEnabled
222
- });
257
+ this.archive.appendMessages(sessionId, rows, { messagePartsEnabled });
258
+ return rows.length;
259
+ }
260
+ /**
261
+ * Summarize one session's durable backlog.
262
+ *
263
+ * The pass is capped so a long backlog never holds a job open indefinitely;
264
+ * remaining batches stay durable and the job re-queues itself.
265
+ */
266
+ async processSummarizeJob(sessionId) {
267
+ if (this.closed) return;
268
+ await this.ensureInitialized();
269
+ if (this.closed || !this.archive || !this.summarizer || !this.observeQueue)
270
+ return;
223
271
  try {
224
- await this.summarizer.summarizeIncremental(sessionId);
272
+ await this.summarizer.summarizeIncremental(sessionId, {
273
+ maxLeafBatches: LCM_SUMMARIZE_MAX_LEAF_BATCHES_PER_JOB
274
+ });
225
275
  } catch (err) {
226
- log.debug(`LCM incremental summarization error: ${err}`);
276
+ log.error(`LCM incremental summarization failed: session=${sessionId}, error=${err}`);
277
+ this.scheduleSummarizeRetry(sessionId);
278
+ return;
279
+ }
280
+ this.clearSummarizeRetry(sessionId);
281
+ if (this.hasCompleteBatchPending(sessionId)) {
282
+ this.observeQueue.enqueue(sessionId);
283
+ }
284
+ }
285
+ /**
286
+ * Schedule a metadata-only retry for a failed summary pass.
287
+ *
288
+ * The retry keeps trying for as long as the engine is open and complete
289
+ * batches remain — a transient failure must never strand durable work.
290
+ * What is bounded is the RATE, not the ability to retry: one pending timer
291
+ * per session, exponential backoff capped at
292
+ * {@link LCM_SUMMARIZE_RETRY_MAX_MS}, and an unreferenced timer that is
293
+ * cleared when the engine closes.
294
+ */
295
+ scheduleSummarizeRetry(sessionId) {
296
+ if (this.closed || this.summarizeRetryTimers.has(sessionId)) return;
297
+ const attempt = (this.summarizeRetryAttempts.get(sessionId) ?? 0) + 1;
298
+ this.summarizeRetryAttempts.set(sessionId, attempt);
299
+ const delayMs = Math.min(
300
+ LCM_SUMMARIZE_RETRY_MAX_MS,
301
+ this.summarizeRetryBaseMs * 2 ** Math.min(attempt - 1, 16)
302
+ );
303
+ const retry = Promise.withResolvers();
304
+ this.summarizeRetryWaiters.set(sessionId, retry);
305
+ const timer = setTimeout(() => {
306
+ this.summarizeRetryTimers.delete(sessionId);
307
+ this.summarizeRetryWaiters.delete(sessionId);
308
+ if (this.closed) {
309
+ retry.resolve();
310
+ return;
311
+ }
312
+ if (!this.hasCompleteBatchPending(sessionId)) {
313
+ this.summarizeRetryAttempts.delete(sessionId);
314
+ retry.resolve();
315
+ return;
316
+ }
317
+ this.observeQueue?.enqueue(sessionId);
318
+ retry.resolve();
319
+ }, delayMs);
320
+ timer.unref?.();
321
+ this.summarizeRetryTimers.set(sessionId, timer);
322
+ }
323
+ /** True when the session still holds a complete unsummarized batch. */
324
+ hasCompleteBatchPending(sessionId) {
325
+ if (!this.archive) return false;
326
+ return this.archive.countUnsummarizedMessages(sessionId) >= this.config.leafBatchSize;
327
+ }
328
+ /** Drop a pending retry, its attempt counter, and release idle waiters. */
329
+ clearSummarizeRetry(sessionId) {
330
+ const timer = this.summarizeRetryTimers.get(sessionId);
331
+ if (timer) {
332
+ clearTimeout(timer);
333
+ this.summarizeRetryTimers.delete(sessionId);
334
+ }
335
+ const waiter = this.summarizeRetryWaiters.get(sessionId);
336
+ if (waiter) {
337
+ this.summarizeRetryWaiters.delete(sessionId);
338
+ waiter.resolve();
227
339
  }
340
+ this.summarizeRetryAttempts.delete(sessionId);
228
341
  }
229
342
  get observeQueueDepth() {
230
343
  return this.observeQueue?.depth ?? 0;
@@ -232,12 +345,21 @@ var LcmEngine = class {
232
345
  get observeQueueInFlightCount() {
233
346
  return this.observeQueue?.inFlightCount ?? 0;
234
347
  }
235
- async waitForObserveQueueIdle() {
348
+ async waitForObserveQueueIdle(abortSignal) {
349
+ abortSignal?.throwIfAborted();
236
350
  if (!this.config.enabled || this.closed) return;
237
351
  await this.ensureInitialized();
352
+ abortSignal?.throwIfAborted();
238
353
  if (this.closed) return;
239
- await this.waitForPendingObserveInitIdle();
240
- await this.observeQueue?.whenIdle();
354
+ for (; ; ) {
355
+ abortSignal?.throwIfAborted();
356
+ await this.waitForPendingObserveInitIdle(void 0, abortSignal);
357
+ await this.observeQueue?.whenIdle(abortSignal);
358
+ abortSignal?.throwIfAborted();
359
+ const entry = [...this.summarizeRetryWaiters.entries()][0];
360
+ if (!entry) return;
361
+ await this.awaitSummarizeRetry(entry[0], entry[1], abortSignal);
362
+ }
241
363
  }
242
364
  async waitForSessionObserveIdle(sessionId, abortSignal) {
243
365
  abortSignal?.throwIfAborted();
@@ -247,8 +369,34 @@ var LcmEngine = class {
247
369
  await this.ensureInitialized();
248
370
  abortSignal?.throwIfAborted();
249
371
  if (this.closed) return;
250
- await this.waitForPendingObserveInitIdle(normalizedSessionId, abortSignal);
251
- await this.observeQueue?.whenSessionIdle(normalizedSessionId, abortSignal) ?? Promise.resolve();
372
+ for (; ; ) {
373
+ await this.waitForPendingObserveInitIdle(normalizedSessionId, abortSignal);
374
+ await this.observeQueue?.whenSessionIdle(normalizedSessionId, abortSignal) ?? Promise.resolve();
375
+ const waiter = this.summarizeRetryWaiters.get(normalizedSessionId);
376
+ if (!waiter) return;
377
+ await this.awaitSummarizeRetry(normalizedSessionId, waiter, abortSignal);
378
+ }
379
+ }
380
+ /**
381
+ * Park an explicit idle wait on a pending retry. While any wait is parked,
382
+ * the retry timer is referenced so a one-shot host cannot exit under the
383
+ * wait; with no waiters the timer stays unreferenced background work.
384
+ */
385
+ async awaitSummarizeRetry(sessionId, waiter, abortSignal) {
386
+ const waiters = (this.summarizeRetryIdleWaiters.get(sessionId) ?? 0) + 1;
387
+ this.summarizeRetryIdleWaiters.set(sessionId, waiters);
388
+ this.summarizeRetryTimers.get(sessionId)?.ref?.();
389
+ try {
390
+ await abortOnSignal(abortSignal, waiter.promise);
391
+ } finally {
392
+ const remaining = (this.summarizeRetryIdleWaiters.get(sessionId) ?? 1) - 1;
393
+ if (remaining <= 0) {
394
+ this.summarizeRetryIdleWaiters.delete(sessionId);
395
+ this.summarizeRetryTimers.get(sessionId)?.unref?.();
396
+ } else {
397
+ this.summarizeRetryIdleWaiters.set(sessionId, remaining);
398
+ }
399
+ }
252
400
  }
253
401
  reservePendingObserveInit(sessionId) {
254
402
  const count = this.pendingObserveInitCounts.get(sessionId) ?? 0;
@@ -296,8 +444,18 @@ var LcmEngine = class {
296
444
  return;
297
445
  }
298
446
  if (this.pendingObserveInitCounts.size === 0) return;
299
- await new Promise((resolve) => {
300
- this.pendingObserveInitIdleWaiters.push(resolve);
447
+ await new Promise((resolve, reject) => {
448
+ const finish = () => {
449
+ abortSignal?.removeEventListener("abort", onAbort);
450
+ resolve();
451
+ };
452
+ const onAbort = () => {
453
+ const remaining = this.pendingObserveInitIdleWaiters.filter((waiter) => waiter !== finish);
454
+ this.pendingObserveInitIdleWaiters.splice(0, this.pendingObserveInitIdleWaiters.length, ...remaining);
455
+ reject(abortSignal?.reason instanceof Error ? abortSignal.reason : new DOMException("Aborted", "AbortError"));
456
+ };
457
+ this.pendingObserveInitIdleWaiters.push(finish);
458
+ abortSignal?.addEventListener("abort", onAbort, { once: true });
301
459
  });
302
460
  }
303
461
  /** Build the compressed history recall section for a session. */
@@ -536,22 +694,24 @@ ${preview}`,
536
694
  };
537
695
  }
538
696
  /** Clear all LCM archive and summary state for one session. */
539
- async clearSession(sessionId) {
697
+ async clearSession(sessionId, abortSignal) {
540
698
  if (!this.config.enabled || this.closed) return;
541
699
  const normalizedSessionId = normalizeLcmSessionId(sessionId);
542
700
  if (!normalizedSessionId) return;
543
701
  await this.ensureInitialized();
544
702
  if (this.closed || !this.archive || !this.dag) return;
545
- await this.waitForSessionObserveIdle(normalizedSessionId);
703
+ await this.waitForSessionObserveIdle(normalizedSessionId, abortSignal);
704
+ abortSignal?.throwIfAborted();
546
705
  this.dag.deleteSession(normalizedSessionId);
547
706
  this.archive.deleteSession(normalizedSessionId);
548
707
  }
549
708
  /** Clear all LCM archive and summary state without closing the engine. */
550
- async clearAll() {
709
+ async clearAll(abortSignal) {
551
710
  if (!this.config.enabled || this.closed) return;
552
711
  await this.ensureInitialized();
553
712
  if (this.closed || !this.archive || !this.dag) return;
554
- await this.waitForObserveQueueIdle();
713
+ await this.waitForObserveQueueIdle(abortSignal);
714
+ abortSignal?.throwIfAborted();
555
715
  this.dag.deleteAll();
556
716
  this.archive.deleteAll();
557
717
  }
@@ -570,6 +730,12 @@ ${preview}`,
570
730
  /** Close the database connection. */
571
731
  close() {
572
732
  this.closed = true;
733
+ for (const timer of this.summarizeRetryTimers.values()) clearTimeout(timer);
734
+ this.summarizeRetryTimers.clear();
735
+ this.summarizeRetryAttempts.clear();
736
+ for (const retry of this.summarizeRetryWaiters.values()) retry.resolve();
737
+ this.summarizeRetryWaiters.clear();
738
+ this.summarizeRetryIdleWaiters.clear();
573
739
  if (this.db) {
574
740
  this.db.close();
575
741
  }
@@ -602,4 +768,4 @@ export {
602
768
  extractLcmConfig,
603
769
  LcmEngine
604
770
  };
605
- //# sourceMappingURL=chunk-Y7427SL7.js.map
771
+ //# sourceMappingURL=chunk-ZG4GNPRE.js.map