@remnic/core 9.23.3 → 9.24.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 (377) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -10
  2. package/dist/access-admin-ops-surface.js +50 -46
  3. package/dist/access-boundary.d.ts +13 -10
  4. package/dist/access-boundary.js +50 -46
  5. package/dist/access-cli.js +125 -122
  6. package/dist/access-cli.js.map +1 -1
  7. package/dist/access-health-types.d.ts +54 -0
  8. package/dist/access-health-types.js +1 -0
  9. package/dist/access-health-types.js.map +1 -0
  10. package/dist/access-http.d.ts +14 -11
  11. package/dist/access-http.js +59 -55
  12. package/dist/access-identity-continuity-surface.d.ts +9 -8
  13. package/dist/access-identity-continuity-surface.js +50 -46
  14. package/dist/access-lcm-surface.d.ts +13 -10
  15. package/dist/access-lcm-surface.js +50 -46
  16. package/dist/access-mcp.d.ts +13 -10
  17. package/dist/access-mcp.js +55 -51
  18. package/dist/access-memory-search-fanout.d.ts +3 -2
  19. package/dist/{access-namespace-preflight-CmErR03h.d.ts → access-namespace-preflight-wRSZEO5V.d.ts} +1 -1
  20. package/dist/access-namespace-preflight.d.ts +4 -3
  21. package/dist/access-namespace-preflight.js +50 -46
  22. package/dist/access-observe-write-surface.d.ts +13 -10
  23. package/dist/access-observe-write-surface.js +50 -46
  24. package/dist/access-operations-batch.js +52 -48
  25. package/dist/access-operations.d.ts +17 -14
  26. package/dist/access-operations.js +54 -50
  27. package/dist/access-recall-concurrency.d.ts +13 -10
  28. package/dist/access-recall-concurrency.js +50 -46
  29. package/dist/access-recall-response.d.ts +13 -10
  30. package/dist/access-recall-response.js +50 -46
  31. package/dist/access-recall-surface.d.ts +13 -10
  32. package/dist/access-recall-surface.js +50 -46
  33. package/dist/access-schema.d.ts +86 -86
  34. package/dist/access-schema.js +8 -8
  35. package/dist/{access-service-CKEROeFP.d.ts → access-service-BlNKWBC9.d.ts} +11 -38
  36. package/dist/access-service.d.ts +15 -12
  37. package/dist/access-service.js +50 -46
  38. package/dist/access-surface-catalog.d.ts +13 -10
  39. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  40. package/dist/action-confidence.d.ts +2 -1
  41. package/dist/active-memory-bridge.d.ts +2 -1
  42. package/dist/active-recall.d.ts +2 -1
  43. package/dist/active-recall.js +3 -2
  44. package/dist/active-recall.js.map +1 -1
  45. package/dist/adapters/index.js +4 -4
  46. package/dist/adapters/registry.js +2 -2
  47. package/dist/behavior-learner.d.ts +2 -1
  48. package/dist/behavior-signals.d.ts +2 -1
  49. package/dist/bootstrap.d.ts +9 -8
  50. package/dist/briefing.d.ts +3 -2
  51. package/dist/briefing.js +14 -14
  52. package/dist/buffer-surprise-report.d.ts +2 -1
  53. package/dist/buffer.d.ts +6 -2
  54. package/dist/buffer.js +1 -1
  55. package/dist/bulk-import/index.d.ts +4 -3
  56. package/dist/calibration.d.ts +2 -1
  57. package/dist/capabilities.d.ts +2 -1
  58. package/dist/{catalog-BFTVo2Ez.d.ts → catalog-BLLxZ5L5.d.ts} +1 -1
  59. package/dist/causal-behavior.d.ts +2 -1
  60. package/dist/causal-consolidation.d.ts +2 -1
  61. package/dist/causal-consolidation.js +15 -15
  62. package/dist/causal-trajectory-graph.d.ts +2 -1
  63. package/dist/{chunk-P2BLHUL2.js → chunk-2NAFR36N.js} +5 -5
  64. package/dist/{chunk-WMLHJ5UW.js → chunk-2WSX7U2N.js} +2 -2
  65. package/dist/{chunk-E3ZMFFQZ.js → chunk-3FLPLDIL.js} +2 -2
  66. package/dist/chunk-443XCR34.js +213 -0
  67. package/dist/chunk-443XCR34.js.map +1 -0
  68. package/dist/{chunk-JNIJBXVK.js → chunk-4KAIGQVU.js} +2 -2
  69. package/dist/{chunk-354T54RR.js → chunk-4TFIRMTE.js} +28 -1
  70. package/dist/chunk-4TFIRMTE.js.map +1 -0
  71. package/dist/{chunk-XWPFZX6S.js → chunk-7CP7SO32.js} +108 -37
  72. package/dist/chunk-7CP7SO32.js.map +1 -0
  73. package/dist/{chunk-XGEFGNL5.js → chunk-7IECFM4E.js} +18 -10
  74. package/dist/chunk-7IECFM4E.js.map +1 -0
  75. package/dist/{chunk-ZN4UZWMT.js → chunk-A5N6ISRK.js} +2 -2
  76. package/dist/{chunk-XKGPIWGI.js → chunk-AVPXXV6J.js} +4 -4
  77. package/dist/{chunk-4PQ4KLLK.js → chunk-BHKDCWGH.js} +9 -9
  78. package/dist/{chunk-5CPI2QWG.js → chunk-CSXHRAJJ.js} +3 -3
  79. package/dist/{chunk-QCKQEBIY.js → chunk-DFTCJVXI.js} +6 -6
  80. package/dist/{chunk-QE63OHLB.js → chunk-ECG64R7B.js} +5 -5
  81. package/dist/{chunk-ATEAL5EI.js → chunk-EFYACT2X.js} +2 -2
  82. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  83. package/dist/{chunk-UGH6VPPO.js → chunk-FHH6R3QI.js} +2 -2
  84. package/dist/{chunk-WZVIB5BK.js → chunk-GCKIDUHE.js} +69 -53
  85. package/dist/chunk-GCKIDUHE.js.map +1 -0
  86. package/dist/{chunk-MAXVH44E.js → chunk-GF22HWS2.js} +10 -10
  87. package/dist/{chunk-ZYU7ZFLT.js → chunk-GJJBPI6I.js} +5 -1
  88. package/dist/chunk-GJJBPI6I.js.map +1 -0
  89. package/dist/{chunk-AU7Q3LSC.js → chunk-JBPKEARU.js} +4 -4
  90. package/dist/{chunk-IPLYGWQF.js → chunk-KQAFEZQX.js} +5 -5
  91. package/dist/{chunk-CUUY5CC4.js → chunk-L7DTBRTI.js} +2 -2
  92. package/dist/{chunk-AYAROCWD.js → chunk-LLISELSY.js} +2 -2
  93. package/dist/{chunk-MMTG3SCJ.js → chunk-M5EPMNS4.js} +2 -2
  94. package/dist/{chunk-HSSIWAZP.js → chunk-M6ZJR6HU.js} +140 -124
  95. package/dist/{chunk-HSSIWAZP.js.map → chunk-M6ZJR6HU.js.map} +1 -1
  96. package/dist/{chunk-WWZ35GWW.js → chunk-MX4TUDMB.js} +2 -2
  97. package/dist/{chunk-SVZGA2MK.js → chunk-NHPROHJD.js} +2 -2
  98. package/dist/{chunk-6TWXQ4E2.js → chunk-NM7SKDZM.js} +2 -2
  99. package/dist/chunk-NQ7E27HN.js +261 -0
  100. package/dist/chunk-NQ7E27HN.js.map +1 -0
  101. package/dist/{chunk-QJAQNXWI.js → chunk-ONHRRJZM.js} +6 -6
  102. package/dist/{chunk-V2XVMCP6.js → chunk-P25IPRXP.js} +7 -7
  103. package/dist/{chunk-KXGE7L62.js → chunk-RENY3AIW.js} +67 -67
  104. package/dist/chunk-RENY3AIW.js.map +1 -0
  105. package/dist/{chunk-3L5O7SMT.js → chunk-SGMORUEU.js} +3 -3
  106. package/dist/{chunk-3ZW6ZQO6.js → chunk-TBJV4BZE.js} +13 -13
  107. package/dist/{chunk-7I7AYIUQ.js → chunk-TGHUJC64.js} +5 -5
  108. package/dist/{chunk-SCOT5DTA.js → chunk-V25OWXAC.js} +1 -1
  109. package/dist/chunk-V25OWXAC.js.map +1 -0
  110. package/dist/{chunk-DLKRXYRL.js → chunk-V4MAO2Y4.js} +15 -15
  111. package/dist/{chunk-5FZQ74K5.js → chunk-WMR5WPZU.js} +2 -2
  112. package/dist/{chunk-M6LJXJ3J.js → chunk-WNSQOXWS.js} +6 -6
  113. package/dist/{chunk-KNB7IBBU.js → chunk-WO7KBATL.js} +4 -4
  114. package/dist/{chunk-3NAHZQU3.js → chunk-X3SQYAPP.js} +2 -2
  115. package/dist/{chunk-3UOSVTFR.js → chunk-XBRPEGXF.js} +5 -5
  116. package/dist/{chunk-GD3QOBMB.js → chunk-XHYCPA5C.js} +2 -2
  117. package/dist/{chunk-ES5IHQ6M.js → chunk-Z3B4V4YI.js} +5 -5
  118. package/dist/chunk-ZLNOX7B2.js +60 -0
  119. package/dist/chunk-ZLNOX7B2.js.map +1 -0
  120. package/dist/{cli-BrwT9YMD.d.ts → cli-Zc6UclD1.d.ts} +5 -5
  121. package/dist/cli.d.ts +15 -12
  122. package/dist/cli.js +85 -82
  123. package/dist/compounding/engine.d.ts +3 -2
  124. package/dist/compounding/engine.js +14 -14
  125. package/dist/compounding/preference-consolidator.d.ts +2 -1
  126. package/dist/compression-optimizer.d.ts +2 -1
  127. package/dist/config.d.ts +2 -1
  128. package/dist/config.js +3 -2
  129. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  130. package/dist/connectors/codex-materialize-runner.js +14 -14
  131. package/dist/connectors/codex-materialize.d.ts +2 -1
  132. package/dist/connectors/index.d.ts +2 -1
  133. package/dist/connectors/index.js +17 -17
  134. package/dist/consolidation-provenance-check.d.ts +3 -2
  135. package/dist/consolidation-undo.d.ts +3 -2
  136. package/dist/contradiction/index.d.ts +3 -2
  137. package/dist/conversation-index/backend.d.ts +2 -1
  138. package/dist/conversation-index/chunker.d.ts +2 -1
  139. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  140. package/dist/conversation-index/indexer.d.ts +2 -1
  141. package/dist/conversation-index/search.d.ts +2 -1
  142. package/dist/corpus-watermark.d.ts +228 -0
  143. package/dist/corpus-watermark.js +106 -0
  144. package/dist/corpus-watermark.js.map +1 -0
  145. package/dist/dashboard-runtime.js +2 -2
  146. package/dist/day-summary.d.ts +2 -1
  147. package/dist/delinearize.d.ts +2 -1
  148. package/dist/direct-answer-wiring.d.ts +2 -1
  149. package/dist/direct-answer.d.ts +2 -1
  150. package/dist/embedding-fallback.d.ts +2 -1
  151. package/dist/enrichment/index.d.ts +2 -1
  152. package/dist/entity-retrieval.d.ts +3 -2
  153. package/dist/entity-retrieval.js +14 -14
  154. package/dist/entity-schema.d.ts +2 -1
  155. package/dist/explicit-capture.d.ts +9 -8
  156. package/dist/extraction-error-classification.d.ts +2 -1
  157. package/dist/extraction-faithfulness.d.ts +2 -1
  158. package/dist/extraction-judge-telemetry.d.ts +2 -1
  159. package/dist/extraction-judge-training.d.ts +2 -1
  160. package/dist/extraction-judge.d.ts +2 -1
  161. package/dist/extraction-liveness.d.ts +5 -0
  162. package/dist/extraction-liveness.js +26 -0
  163. package/dist/extraction-liveness.js.map +1 -0
  164. package/dist/extraction.d.ts +2 -1
  165. package/dist/extraction.js +1 -1
  166. package/dist/fallback-llm.d.ts +2 -1
  167. package/dist/graph-dashboard-diff.d.ts +2 -1
  168. package/dist/graph-dashboard-key.d.ts +2 -1
  169. package/dist/graph-dashboard-parser.d.ts +2 -1
  170. package/dist/graph-edge-reinforcement.d.ts +2 -1
  171. package/dist/graph-snapshot.d.ts +2 -1
  172. package/dist/graph.d.ts +2 -1
  173. package/dist/importance.d.ts +2 -1
  174. package/dist/importers/index.d.ts +2 -1
  175. package/dist/in-flight-reads.d.ts +2 -1
  176. package/dist/index.d.ts +427 -424
  177. package/dist/index.js +212 -209
  178. package/dist/intent.d.ts +2 -1
  179. package/dist/lcm/engine.d.ts +2 -1
  180. package/dist/lcm/engine.js +4 -4
  181. package/dist/lcm/index.d.ts +2 -1
  182. package/dist/lcm/index.js +12 -12
  183. package/dist/lcm/tools.d.ts +2 -1
  184. package/dist/lifecycle.d.ts +2 -1
  185. package/dist/live-connectors-runner.d.ts +2 -1
  186. package/dist/local-llm.d.ts +2 -1
  187. package/dist/local-model-endpoint.d.ts +2 -1
  188. package/dist/maintenance/memory-governance.d.ts +2 -1
  189. package/dist/maintenance/memory-governance.js +14 -14
  190. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  191. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
  192. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  193. package/dist/maintenance/rebuild-memory-projection.js +15 -15
  194. package/dist/{maintenance-C98njYb8.d.ts → maintenance-DD22oIx9.d.ts} +3 -3
  195. package/dist/mcp-memory-inspector-app.d.ts +13 -10
  196. package/dist/memory-action-policy.d.ts +2 -1
  197. package/dist/memory-cache.d.ts +2 -1
  198. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  199. package/dist/memory-projection-store.d.ts +2 -1
  200. package/dist/memory-provenance.d.ts +2 -1
  201. package/dist/memory-worth-outcomes.d.ts +3 -2
  202. package/dist/models-json.d.ts +2 -1
  203. package/dist/namespaces/migrate.d.ts +4 -3
  204. package/dist/namespaces/migrate.js +21 -21
  205. package/dist/namespaces/principal.d.ts +2 -1
  206. package/dist/namespaces/search.d.ts +2 -1
  207. package/dist/namespaces/search.js +6 -6
  208. package/dist/namespaces/storage.d.ts +4 -3
  209. package/dist/namespaces/storage.js +14 -14
  210. package/dist/native-knowledge.d.ts +2 -1
  211. package/dist/offline-sync-impression-drain.d.ts +2 -1
  212. package/dist/offline-sync-impression-drain.js +4 -4
  213. package/dist/operator-doctor-corpus.d.ts +31 -0
  214. package/dist/operator-doctor-corpus.js +91 -0
  215. package/dist/operator-doctor-corpus.js.map +1 -0
  216. package/dist/operator-doctor-types.d.ts +22 -0
  217. package/dist/operator-doctor-types.js +1 -0
  218. package/dist/operator-doctor-types.js.map +1 -0
  219. package/dist/operator-toolkit.d.ts +10 -13
  220. package/dist/operator-toolkit.js +35 -29
  221. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  222. package/dist/orchestration/maintenance.d.ts +5 -4
  223. package/dist/orchestration/maintenance.js +20 -20
  224. package/dist/{orchestrator-C9ZVppNh.d.ts → orchestrator-BTGgoKli.d.ts} +7 -7
  225. package/dist/orchestrator.d.ts +9 -8
  226. package/dist/orchestrator.js +123 -120
  227. package/dist/patterns-cli.d.ts +2 -1
  228. package/dist/{pipeline-id_-sqYm.d.ts → pipeline-Bq5zU6Bp.d.ts} +1 -1
  229. package/dist/policy-runtime.d.ts +2 -1
  230. package/dist/proactive-contention.d.ts +2 -1
  231. package/dist/provenance.d.ts +2 -1
  232. package/dist/{qmd-R6XaQOZK.d.ts → qmd-3ILJkC70.d.ts} +1 -1
  233. package/dist/qmd-preflight.d.ts +3 -2
  234. package/dist/qmd-recall-cache.d.ts +2 -1
  235. package/dist/qmd.d.ts +3 -2
  236. package/dist/qmd.js +4 -4
  237. package/dist/recall-concurrency-config.d.ts +2 -1
  238. package/dist/recall-disclosure-escalation.d.ts +2 -1
  239. package/dist/recall-explain-renderer.d.ts +2 -1
  240. package/dist/recall-explain-renderer.js +3 -3
  241. package/dist/recall-memory-map.d.ts +2 -1
  242. package/dist/recall-planner-llm.d.ts +2 -1
  243. package/dist/recall-state.d.ts +2 -1
  244. package/dist/recall-tag-filter.d.ts +2 -1
  245. package/dist/recall-timings.d.ts +2 -1
  246. package/dist/recall-xray-cli.d.ts +2 -1
  247. package/dist/recall-xray-cli.js +4 -4
  248. package/dist/recall-xray-renderer.d.ts +2 -1
  249. package/dist/recall-xray-renderer.js +3 -3
  250. package/dist/recall-xray.d.ts +2 -1
  251. package/dist/recall-xray.js +2 -2
  252. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  253. package/dist/replay/normalizers/claude.d.ts +2 -1
  254. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  255. package/dist/replay/normalizers/shared.d.ts +2 -1
  256. package/dist/replay/runner.d.ts +2 -1
  257. package/dist/replay/types.d.ts +2 -1
  258. package/dist/resolve-auth-token.d.ts +2 -1
  259. package/dist/resume-bundles.js +5 -4
  260. package/dist/retrieval-agents.d.ts +3 -2
  261. package/dist/retrieval-tiers.d.ts +2 -1
  262. package/dist/routing/engine.d.ts +2 -1
  263. package/dist/routing/store.d.ts +2 -1
  264. package/dist/salvage-envelope.d.ts +2 -1
  265. package/dist/schemas.d.ts +76 -76
  266. package/dist/{scope-profiles-EhyuAKkd.d.ts → scope-profiles-D0-ff4xT.d.ts} +1 -1
  267. package/dist/search/embed-helper.d.ts +2 -1
  268. package/dist/search/factory.d.ts +2 -1
  269. package/dist/search/factory.js +5 -5
  270. package/dist/search/index.d.ts +2 -1
  271. package/dist/search/index.js +9 -9
  272. package/dist/search/lancedb-backend.d.ts +2 -1
  273. package/dist/search/meilisearch-backend.d.ts +2 -1
  274. package/dist/search/noop-backend.d.ts +2 -1
  275. package/dist/search/orama-backend.d.ts +2 -1
  276. package/dist/search/port.d.ts +2 -1
  277. package/dist/search/remote-backend.d.ts +2 -1
  278. package/dist/{semantic-consolidation-B2xo26UQ.d.ts → semantic-consolidation-4Tfh7c1g.d.ts} +1 -1
  279. package/dist/semantic-consolidation.d.ts +3 -2
  280. package/dist/semantic-consolidation.js +15 -15
  281. package/dist/semantic-rule-promotion.js +14 -14
  282. package/dist/semantic-rule-verifier.d.ts +2 -1
  283. package/dist/semantic-rule-verifier.js +14 -14
  284. package/dist/{service-DgFWlZ-r.d.ts → service-Z8uzoAST.d.ts} +2 -2
  285. package/dist/session-observer-bands.d.ts +2 -1
  286. package/dist/session-observer-state.d.ts +2 -1
  287. package/dist/shared-context/manager.d.ts +10 -9
  288. package/dist/signal.d.ts +2 -1
  289. package/dist/{storage-XGawwqXE.d.ts → storage-BZVMn8yJ.d.ts} +25 -2
  290. package/dist/storage.d.ts +3 -2
  291. package/dist/storage.js +13 -13
  292. package/dist/summarizer.d.ts +2 -1
  293. package/dist/summary-snapshot.d.ts +2 -1
  294. package/dist/temporal-supersession.d.ts +3 -2
  295. package/dist/temporal-timeline-recall.d.ts +2 -1
  296. package/dist/temporal-validity.d.ts +2 -1
  297. package/dist/threading.d.ts +2 -1
  298. package/dist/tier-migration.d.ts +3 -2
  299. package/dist/tier-routing.d.ts +2 -1
  300. package/dist/tokens.js +2 -2
  301. package/dist/topics.d.ts +2 -1
  302. package/dist/transcript.d.ts +2 -1
  303. package/dist/transfer/autodetect.js +1 -1
  304. package/dist/transfer/backup.js +3 -3
  305. package/dist/transfer/capsule-export.js +4 -4
  306. package/dist/transfer/capsule-import.js +1 -1
  307. package/dist/transfer/types.d.ts +66 -66
  308. package/dist/trust-score-stage.d.ts +2 -1
  309. package/dist/trust-score.d.ts +2 -1
  310. package/dist/{types-Bbs0qz6b.d.ts → types-DHBxIF0s.d.ts} +181 -5
  311. package/dist/types.d.ts +2 -1
  312. package/dist/types.js +1 -1
  313. package/dist/utility-runtime.d.ts +2 -1
  314. package/dist/verified-recall.js +14 -14
  315. package/dist/write-envelope.d.ts +2 -1
  316. package/package.json +12 -2
  317. package/src/access-health-types.ts +51 -0
  318. package/src/access-http.test.ts +22 -2
  319. package/src/access-service-health.test.ts +212 -0
  320. package/src/access-service.ts +14 -37
  321. package/src/buffer.ts +30 -0
  322. package/src/cli.ts +2 -4
  323. package/src/config.ts +4 -4
  324. package/src/corpus-watermark.test.ts +840 -0
  325. package/src/corpus-watermark.ts +531 -0
  326. package/src/extraction-liveness.test.ts +461 -0
  327. package/src/extraction-liveness.ts +462 -0
  328. package/src/operator-doctor-corpus.test.ts +171 -0
  329. package/src/operator-doctor-corpus.ts +95 -0
  330. package/src/operator-doctor-types.ts +20 -0
  331. package/src/operator-toolkit.ts +12 -13
  332. package/src/recall/archive-scoring.ts +18 -0
  333. package/src/storage/memory-read-store.ts +91 -22
  334. package/src/storage.ts +27 -2
  335. package/src/types.ts +4 -4
  336. package/dist/chunk-354T54RR.js.map +0 -1
  337. package/dist/chunk-KXGE7L62.js.map +0 -1
  338. package/dist/chunk-SCOT5DTA.js.map +0 -1
  339. package/dist/chunk-WZVIB5BK.js.map +0 -1
  340. package/dist/chunk-XGEFGNL5.js.map +0 -1
  341. package/dist/chunk-XWPFZX6S.js.map +0 -1
  342. package/dist/chunk-ZYU7ZFLT.js.map +0 -1
  343. /package/dist/{chunk-P2BLHUL2.js.map → chunk-2NAFR36N.js.map} +0 -0
  344. /package/dist/{chunk-WMLHJ5UW.js.map → chunk-2WSX7U2N.js.map} +0 -0
  345. /package/dist/{chunk-E3ZMFFQZ.js.map → chunk-3FLPLDIL.js.map} +0 -0
  346. /package/dist/{chunk-JNIJBXVK.js.map → chunk-4KAIGQVU.js.map} +0 -0
  347. /package/dist/{chunk-ZN4UZWMT.js.map → chunk-A5N6ISRK.js.map} +0 -0
  348. /package/dist/{chunk-XKGPIWGI.js.map → chunk-AVPXXV6J.js.map} +0 -0
  349. /package/dist/{chunk-4PQ4KLLK.js.map → chunk-BHKDCWGH.js.map} +0 -0
  350. /package/dist/{chunk-5CPI2QWG.js.map → chunk-CSXHRAJJ.js.map} +0 -0
  351. /package/dist/{chunk-QCKQEBIY.js.map → chunk-DFTCJVXI.js.map} +0 -0
  352. /package/dist/{chunk-QE63OHLB.js.map → chunk-ECG64R7B.js.map} +0 -0
  353. /package/dist/{chunk-ATEAL5EI.js.map → chunk-EFYACT2X.js.map} +0 -0
  354. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  355. /package/dist/{chunk-UGH6VPPO.js.map → chunk-FHH6R3QI.js.map} +0 -0
  356. /package/dist/{chunk-MAXVH44E.js.map → chunk-GF22HWS2.js.map} +0 -0
  357. /package/dist/{chunk-AU7Q3LSC.js.map → chunk-JBPKEARU.js.map} +0 -0
  358. /package/dist/{chunk-IPLYGWQF.js.map → chunk-KQAFEZQX.js.map} +0 -0
  359. /package/dist/{chunk-CUUY5CC4.js.map → chunk-L7DTBRTI.js.map} +0 -0
  360. /package/dist/{chunk-AYAROCWD.js.map → chunk-LLISELSY.js.map} +0 -0
  361. /package/dist/{chunk-MMTG3SCJ.js.map → chunk-M5EPMNS4.js.map} +0 -0
  362. /package/dist/{chunk-WWZ35GWW.js.map → chunk-MX4TUDMB.js.map} +0 -0
  363. /package/dist/{chunk-SVZGA2MK.js.map → chunk-NHPROHJD.js.map} +0 -0
  364. /package/dist/{chunk-6TWXQ4E2.js.map → chunk-NM7SKDZM.js.map} +0 -0
  365. /package/dist/{chunk-QJAQNXWI.js.map → chunk-ONHRRJZM.js.map} +0 -0
  366. /package/dist/{chunk-V2XVMCP6.js.map → chunk-P25IPRXP.js.map} +0 -0
  367. /package/dist/{chunk-3L5O7SMT.js.map → chunk-SGMORUEU.js.map} +0 -0
  368. /package/dist/{chunk-3ZW6ZQO6.js.map → chunk-TBJV4BZE.js.map} +0 -0
  369. /package/dist/{chunk-7I7AYIUQ.js.map → chunk-TGHUJC64.js.map} +0 -0
  370. /package/dist/{chunk-DLKRXYRL.js.map → chunk-V4MAO2Y4.js.map} +0 -0
  371. /package/dist/{chunk-5FZQ74K5.js.map → chunk-WMR5WPZU.js.map} +0 -0
  372. /package/dist/{chunk-M6LJXJ3J.js.map → chunk-WNSQOXWS.js.map} +0 -0
  373. /package/dist/{chunk-KNB7IBBU.js.map → chunk-WO7KBATL.js.map} +0 -0
  374. /package/dist/{chunk-3NAHZQU3.js.map → chunk-X3SQYAPP.js.map} +0 -0
  375. /package/dist/{chunk-3UOSVTFR.js.map → chunk-XBRPEGXF.js.map} +0 -0
  376. /package/dist/{chunk-GD3QOBMB.js.map → chunk-XHYCPA5C.js.map} +0 -0
  377. /package/dist/{chunk-ES5IHQ6M.js.map → chunk-Z3B4V4YI.js.map} +0 -0
@@ -449,3 +449,215 @@ test("health keeps namespace QMD failures scoped to the namespace", async () =>
449
449
  await rm(rootDir, { recursive: true, force: true });
450
450
  }
451
451
  });
452
+
453
+ test("health surfaces extraction liveness as degraded when the buffer is non-empty and the watermark is stale", async () => {
454
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-"));
455
+ try {
456
+ const oldTs = new Date(Date.now() - 10_000).toISOString();
457
+ const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 1000 } });
458
+ const service = new EngramAccessService({
459
+ config,
460
+ qmd: makeQmd({}),
461
+ buffer: {
462
+ getBufferSnapshot: async () => ({ bufferedSessionCount: 3, pendingTurnCount: 12, oldestTurnTimestamp: oldTs }),
463
+ },
464
+ // The extraction watermark is read from the daemon-global root store,
465
+ // not the per-namespace store (issue #2151).
466
+ storage: {
467
+ loadMeta: async () => ({
468
+ lastExtractionAt: oldTs,
469
+ extractionCount: 4,
470
+ lastConsolidationAt: null,
471
+ totalMemories: 0,
472
+ totalEntities: 0,
473
+ }),
474
+ },
475
+ async getStorage() {
476
+ return { dir: memoryDir };
477
+ },
478
+ } as unknown as Orchestrator);
479
+
480
+ const health = await service.health();
481
+ assert.equal(health.extraction.degraded, true);
482
+ assert.equal(health.extraction.bufferedSessionCount, 3);
483
+ assert.equal(health.extraction.pendingTurnCount, 12);
484
+ assert.equal(health.extraction.lastExtractionAt, oldTs);
485
+ const oldestAge = health.extraction.oldestBufferedTurnAgeMs ?? -1;
486
+ assert.ok(
487
+ oldestAge >= 10_000 && oldestAge < 60_000,
488
+ `oldest buffered turn age reflects the ~10s offset, not merely non-negative (got ${oldestAge}ms)`,
489
+ );
490
+ assert.ok(
491
+ health.extraction.degradedReason !== null && health.extraction.degradedReason.length > 0,
492
+ "degraded reason is populated",
493
+ );
494
+ } finally {
495
+ await rm(memoryDir, { recursive: true, force: true });
496
+ }
497
+ });
498
+
499
+ test("health reports extraction liveness ok when the buffer is empty (nothing to extract)", async () => {
500
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-ok-"));
501
+ try {
502
+ const oldTs = new Date(Date.now() - 10_000).toISOString();
503
+ const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 1000 } });
504
+ const service = new EngramAccessService({
505
+ config,
506
+ qmd: makeQmd({}),
507
+ buffer: {
508
+ getBufferSnapshot: async () => ({ bufferedSessionCount: 0, pendingTurnCount: 0, oldestTurnTimestamp: null }),
509
+ },
510
+ storage: {
511
+ loadMeta: async () => ({
512
+ lastExtractionAt: oldTs,
513
+ extractionCount: 4,
514
+ lastConsolidationAt: null,
515
+ totalMemories: 0,
516
+ totalEntities: 0,
517
+ }),
518
+ },
519
+ async getStorage() {
520
+ return { dir: memoryDir };
521
+ },
522
+ } as unknown as Orchestrator);
523
+
524
+ const health = await service.health();
525
+ assert.equal(health.extraction.degraded, false);
526
+ assert.equal(health.extraction.bufferedSessionCount, 0);
527
+ assert.equal(health.extraction.lastExtractionAt, oldTs);
528
+ } finally {
529
+ await rm(memoryDir, { recursive: true, force: true });
530
+ }
531
+ });
532
+
533
+ test("health returns the same daemon-global extraction verdict for every namespace (issue #2151)", async () => {
534
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-ns-"));
535
+ try {
536
+ const rootTs = new Date().toISOString(); // fresh daemon-global watermark
537
+ const staleTs = new Date(Date.now() - 7_200_000).toISOString(); // 2h old
538
+ const config = parseConfig({
539
+ memoryDir,
540
+ qmdEnabled: false,
541
+ namespacesEnabled: true,
542
+ defaultNamespace: "default",
543
+ extractionLiveness: { staleWindowMs: 3_600_000 },
544
+ });
545
+ // Per-namespace stores return DIVERGING watermarks (fresh vs 2h stale vs
546
+ // never), but the global buffer is shared and the watermark must be sourced
547
+ // from the root store. Pre-fix, the extraction verdict tracked the
548
+ // namespace argument; post-fix it is identical for every namespace.
549
+ const perNamespaceMeta: Record<string, string | null> = { fresh: rootTs, stale: staleTs };
550
+ const service = new EngramAccessService({
551
+ config,
552
+ qmd: makeQmd({}),
553
+ buffer: {
554
+ getBufferSnapshot: async () => ({ bufferedSessionCount: 3, pendingTurnCount: 12, oldestTurnTimestamp: staleTs }),
555
+ },
556
+ storage: {
557
+ loadMeta: async () => ({
558
+ lastExtractionAt: rootTs,
559
+ extractionCount: 4,
560
+ lastConsolidationAt: null,
561
+ totalMemories: 0,
562
+ totalEntities: 0,
563
+ }),
564
+ },
565
+ async getStorage(namespace?: string) {
566
+ return {
567
+ dir: memoryDir,
568
+ loadMeta: async () => ({
569
+ lastExtractionAt: namespace ? perNamespaceMeta[namespace] ?? null : staleTs,
570
+ extractionCount: 4,
571
+ lastConsolidationAt: null,
572
+ totalMemories: 0,
573
+ totalEntities: 0,
574
+ }),
575
+ };
576
+ },
577
+ } as unknown as Orchestrator);
578
+
579
+ const fresh = (await service.health("fresh")).extraction;
580
+ const stale = (await service.health("stale")).extraction;
581
+ const def = (await service.health()).extraction;
582
+ // The namespace-governed fields must not vary with the namespace argument
583
+ // (oldestBufferedTurnAgeMs is time-derived and intentionally excluded).
584
+ assert.equal(stale.degraded, fresh.degraded, "degraded must not vary by namespace");
585
+ assert.equal(def.degraded, fresh.degraded, "default health matches namespaced health");
586
+ assert.equal(stale.lastExtractionAt, fresh.lastExtractionAt, "watermark must not vary by namespace");
587
+ assert.equal(def.lastExtractionAt, fresh.lastExtractionAt);
588
+ assert.equal(stale.degradedReason, fresh.degradedReason);
589
+ // Sourced from the fresh root watermark → healthy despite stale per-namespace stores.
590
+ assert.equal(fresh.degraded, false);
591
+ assert.equal(fresh.lastExtractionAt, rootTs);
592
+ } finally {
593
+ await rm(memoryDir, { recursive: true, force: true });
594
+ }
595
+ });
596
+
597
+ test("health reports extraction liveness degraded when the buffer read fails (§22)", async () => {
598
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-readfail-"));
599
+ try {
600
+ const freshTs = new Date().toISOString();
601
+ const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 3_600_000 } });
602
+ const service = new EngramAccessService({
603
+ config,
604
+ qmd: makeQmd({}),
605
+ buffer: {
606
+ getBufferSnapshot: async () => {
607
+ throw new Error("buffer file corrupt");
608
+ },
609
+ },
610
+ // Fresh watermark → the ONLY fault is the unreadable buffer, proving the
611
+ // read failure (not staleness) drives the degradation.
612
+ storage: {
613
+ loadMeta: async () => ({
614
+ lastExtractionAt: freshTs,
615
+ extractionCount: 4,
616
+ lastConsolidationAt: null,
617
+ totalMemories: 0,
618
+ totalEntities: 0,
619
+ }),
620
+ },
621
+ async getStorage() {
622
+ return { dir: memoryDir };
623
+ },
624
+ } as unknown as Orchestrator);
625
+
626
+ const health = await service.health();
627
+ assert.equal(health.extraction.degraded, true, "an unreadable buffer must not report a healthy pipeline");
628
+ assert.match(health.extraction.degradedReason ?? "", /unreadable/);
629
+ assert.match(health.extraction.degradedReason ?? "", /buffer file corrupt/);
630
+ } finally {
631
+ await rm(memoryDir, { recursive: true, force: true });
632
+ }
633
+ });
634
+
635
+ test("health reports extraction liveness degraded when the watermark (meta) read fails (§22)", async () => {
636
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-metafail-"));
637
+ try {
638
+ const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 3_600_000 } });
639
+ const service = new EngramAccessService({
640
+ config,
641
+ qmd: makeQmd({}),
642
+ // Empty buffer: proves the meta-read failure alone drives the degradation.
643
+ buffer: {
644
+ getBufferSnapshot: async () => ({ bufferedSessionCount: 0, pendingTurnCount: 0, oldestTurnTimestamp: null }),
645
+ },
646
+ storage: {
647
+ loadMeta: async () => {
648
+ throw new Error("meta.json unreadable");
649
+ },
650
+ },
651
+ async getStorage() {
652
+ return { dir: memoryDir };
653
+ },
654
+ } as unknown as Orchestrator);
655
+
656
+ const health = await service.health();
657
+ assert.equal(health.extraction.degraded, true, "an unreadable watermark must not report a healthy pipeline");
658
+ assert.match(health.extraction.degradedReason ?? "", /watermark unreadable/);
659
+ assert.match(health.extraction.degradedReason ?? "", /meta\.json unreadable/);
660
+ } finally {
661
+ await rm(memoryDir, { recursive: true, force: true });
662
+ }
663
+ });
@@ -6,6 +6,7 @@ import { readdirSync, unlinkSync } from "node:fs";
6
6
  import { createHash } from "node:crypto";
7
7
  import { ZodError } from "zod";
8
8
  import { AccessIdempotencyStore, hashAccessIdempotencyPayload } from "./access-idempotency.js";
9
+ import { computeExtractionLivenessStatus, ExtractionLivenessWarnThrottle } from "./extraction-liveness.js";
9
10
  import { enforceNamespaceAllowList, tokenCapabilityStore } from "./access-token-capabilities.js";
10
11
  import {
11
12
  recordCitationUsage as recordCitationUsageForAccess,
@@ -18,6 +19,13 @@ import { resolveNamespaceCapabilities,
18
19
  resolveMemoryLifecycleCapabilities,
19
20
  resolveQmdCapabilities,
20
21
  resolveSecurityCapabilities, resolveObjectiveStateCapabilities, resolveCompressionCapabilities, resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
22
+ import { CorpusWatermarkCache, computeServiceCorpusWatermarks } from "./corpus-watermark.js";
23
+ import type {
24
+ EngramAccessHealthResponse,
25
+ EngramAccessQmdCollectionState,
26
+ EngramAccessQmdHealthResponse,
27
+ } from "./access-health-types.js";
28
+ export type { EngramAccessHealthResponse, EngramAccessQmdCollectionState, EngramAccessQmdHealthResponse };
21
29
  import { AccessAuditAdapter, type AccessAuditConfig, type AccessAuditResult } from "./access-audit.js";
22
30
  import type { AnomalyDetectorResult } from "./recall-audit-anomaly.js";
23
31
  import { resolveGitContext } from "./coding/git-context.js";
@@ -341,43 +349,6 @@ function normalizeTrustZoneInputError(error: unknown): EngramAccessInputError |
341
349
 
342
350
  export const ENGRAM_ACCESS_WRITE_SCHEMA_VERSION = 1;
343
351
 
344
- export interface EngramAccessHealthResponse {
345
- ok: true;
346
- memoryDir: string;
347
- namespacesEnabled: boolean;
348
- defaultNamespace: string;
349
- searchBackend: string;
350
- qmdEnabled: boolean;
351
- qmd: EngramAccessQmdHealthResponse;
352
- nativeKnowledgeEnabled: boolean;
353
- projectionAvailable: boolean;
354
- }
355
-
356
- export type EngramAccessQmdCollectionState =
357
- | "present"
358
- | "missing"
359
- | "unknown"
360
- | "skipped";
361
-
362
- export interface EngramAccessQmdHealthResponse {
363
- enabled: boolean;
364
- active: boolean;
365
- degraded: boolean;
366
- mode: "cli" | "daemon" | "fallback" | "disabled" | "not-selected";
367
- collection: string;
368
- collectionState: EngramAccessQmdCollectionState;
369
- installedVersion: string | null;
370
- supportedVersion: string | null;
371
- supported: boolean | null;
372
- upgradeAvailable: boolean | null;
373
- doctorAvailable: boolean | null;
374
- debugStatus: string;
375
- pendingEmbeddings: number | null;
376
- oldestPendingAgeMs: number | null;
377
- embeddingBacklogThreshold: number;
378
- degradedReason?: string;
379
- }
380
-
381
352
  export interface EngramAccessRecallRequest {
382
353
  query: string;
383
354
  sessionKey?: string;
@@ -1302,6 +1273,7 @@ export class EngramAccessService {
1302
1273
  private readonly recallInFlight = new Map<string, unknown>();
1303
1274
  private readonly budget: CrossNamespaceBudget;
1304
1275
  private readonly auditAdapter: AccessAuditAdapter | null;
1276
+ private readonly corpusWatermarkCache = new CorpusWatermarkCache();
1305
1277
 
1306
1278
  /** AccessObserveWriteSurface (access-service decomposition). Lazy; selfDeps live wiring. */
1307
1279
  private _accessObserveWriteSurface: AccessObserveWriteSurface | undefined;
@@ -1362,6 +1334,7 @@ export class EngramAccessService {
1362
1334
  }
1363
1335
  return this._accessIdentityContinuitySurface;
1364
1336
  }
1337
+ private readonly extractionLivenessWarn = new ExtractionLivenessWarnThrottle();
1365
1338
 
1366
1339
  constructor(private readonly orchestrator: Orchestrator) {
1367
1340
  this.idempotency = new AccessIdempotencyStore(orchestrator.config.memoryDir);
@@ -2455,6 +2428,7 @@ export class EngramAccessService {
2455
2428
  const storage = await this.orchestrator.getStorage(resolvedNamespace);
2456
2429
  const searchBackend = this.orchestrator.config.searchBackend ?? "qmd";
2457
2430
  const qmdEnabled = resolveQmdCapabilities(this.orchestrator.config).qmd === true;
2431
+ const extraction = await computeExtractionLivenessStatus(this.orchestrator, this.extractionLivenessWarn);
2458
2432
  let projectionAvailable = false;
2459
2433
  try {
2460
2434
  await stat(getMemoryProjectionPath(storage.dir));
@@ -2478,6 +2452,9 @@ export class EngramAccessService {
2478
2452
  ),
2479
2453
  nativeKnowledgeEnabled: this.orchestrator.config.nativeKnowledge?.enabled === true,
2480
2454
  projectionAvailable,
2455
+ extraction,
2456
+ corpus: await computeServiceCorpusWatermarks(this.orchestrator, {
2457
+ cache: this.corpusWatermarkCache, caps: tokenCapabilityStore.getStore() }),
2481
2458
  };
2482
2459
  }
2483
2460
 
package/src/buffer.ts CHANGED
@@ -10,6 +10,7 @@ import type {
10
10
  SignalLevel,
11
11
  } from "./types.js";
12
12
  import { resolvePresentationCapabilities } from "./capabilities.js";
13
+ import type { ExtractionBufferSnapshot } from "./extraction-liveness.js";
13
14
 
14
15
  export type TriggerDecision = "extract_now" | "extract_batch" | "keep_buffering";
15
16
 
@@ -306,6 +307,35 @@ export class SmartBuffer {
306
307
  await this.enqueueMutation(async () => this.loadUnlocked());
307
308
  }
308
309
 
310
+ /** Snapshot of buffered, not-yet-extracted work across sessions (#2151): session count,
311
+ * pending-turn total, oldest buffered turn. Counts retained (#562) + active turns per entry. */
312
+ async getBufferSnapshot(): Promise<ExtractionBufferSnapshot> {
313
+ await this.load();
314
+ let bufferedSessionCount = 0;
315
+ let pendingTurnCount = 0;
316
+ let oldestMs = Number.POSITIVE_INFINITY;
317
+ let oldestTurnTimestamp: string | null = null;
318
+ const consider = (turns: BufferTurn[] | undefined): void => {
319
+ if (!Array.isArray(turns) || turns.length === 0) return;
320
+ bufferedSessionCount += 1;
321
+ pendingTurnCount += turns.length;
322
+ const first = turns[0]?.timestamp;
323
+ const parsed = typeof first === "string" ? Date.parse(first) : Number.NaN;
324
+ if (Number.isFinite(parsed) && parsed < oldestMs) {
325
+ oldestMs = parsed;
326
+ oldestTurnTimestamp = first ?? null;
327
+ }
328
+ };
329
+ const entries = this.state.entries;
330
+ if (entries) {
331
+ // Retained turns (deferred #562) are pending too - count with active (oldest-first), like getTurns().
332
+ for (const entry of Object.values(entries)) consider([...(entry?.retainedTurns ?? []), ...(entry?.turns ?? [])]);
333
+ } else {
334
+ consider(this.state.turns);
335
+ }
336
+ return { bufferedSessionCount, pendingTurnCount, oldestTurnTimestamp };
337
+ }
338
+
309
339
  /**
310
340
  * Reset the buffer to an empty, usable state.
311
341
  * Called when the persisted buffer file is corrupt and load() fails,
package/src/cli.ts CHANGED
@@ -30,6 +30,7 @@ import { isRecallDisclosure, RECALL_DISCLOSURE_LEVELS } from "./types.js";
30
30
  import { chunkContent } from "./chunking.js";
31
31
  import { rescoreMemoryImportance } from "./importance.js";
32
32
  import { renderQmdBacklogStatus } from "./qmd-status.js";
33
+ import { renderExtractionLivenessStats } from "./extraction-liveness.js";
33
34
  import { exportJsonBundle } from "./transfer/export-json.js";
34
35
  import { exportMarkdownBundle } from "./transfer/export-md.js";
35
36
  import { backupMemoryDir } from "./transfer/backup.js";
@@ -3653,7 +3654,6 @@ export function registerCli(
3653
3654
  // Ensure QMD is probed before checking availability
3654
3655
  await orchestrator.qmd.probe();
3655
3656
 
3656
- const meta = await orchestrator.storage.loadMeta();
3657
3657
  const memories = await orchestrator.storage.readAllMemories();
3658
3658
  const entities = await orchestrator.storage.readEntities();
3659
3659
  const profile = await orchestrator.storage.readProfile();
@@ -3662,9 +3662,7 @@ export function registerCli(
3662
3662
  console.log(`Total memories: ${memories.length}`);
3663
3663
  console.log(`Total entities: ${entities.length}`);
3664
3664
  console.log(`Profile size: ${profile.length} chars`);
3665
- console.log(`Extractions: ${meta.extractionCount}`);
3666
- console.log(`Last extraction: ${meta.lastExtractionAt ?? "never"}`);
3667
- console.log(`Last consolidation: ${meta.lastConsolidationAt ?? "never"}`);
3665
+ for (const line of await renderExtractionLivenessStats(orchestrator)) console.log(line);
3668
3666
  console.log(`QMD: ${orchestrator.qmd.isAvailable() ? "available" : "not available"}`);
3669
3667
  for (const line of await renderQmdBacklogStatus(orchestrator.qmd, orchestrator.config.qmdEmbeddingBacklogThreshold)) console.log(line);
3670
3668
 
package/src/config.ts CHANGED
@@ -37,6 +37,7 @@ import { expandTildePath } from "./utils/path.js";
37
37
  // config.ts → connectors/index.ts nor the reverse circular import arises.
38
38
  import { coerceBool, coerceBooleanLike, coerceInstallExtension, coerceNumber } from "./connectors/coerce.js";
39
39
  import { parseRecallConcurrencyConfig } from "./recall-concurrency-config.js";
40
+ import { parseExtractionLivenessConfig } from "./extraction-liveness.js";
40
41
  import { hasLegacyConnectorEntries } from "./connectors/paths.js";
41
42
  import {
42
43
  parseQmdChunkStrategy,
@@ -2326,15 +2327,14 @@ export function parseConfig(
2326
2327
  typeof cfg.activeRecallEntityGraphDepth === "number"
2327
2328
  ? Math.min(3, Math.max(0, Math.floor(cfg.activeRecallEntityGraphDepth)))
2328
2329
  : 1,
2329
- activeRecallIncludeCausalTrajectories:
2330
- cfg.activeRecallIncludeCausalTrajectories === true,
2330
+ activeRecallIncludeCausalTrajectories: cfg.activeRecallIncludeCausalTrajectories === true,
2331
2331
  activeRecallIncludeDaySummary: cfg.activeRecallIncludeDaySummary === true,
2332
2332
  activeRecallAttachRecallExplain: cfg.activeRecallAttachRecallExplain === true,
2333
- activeRecallAllowChainedActiveMemory:
2334
- cfg.activeRecallAllowChainedActiveMemory === true,
2333
+ activeRecallAllowChainedActiveMemory: cfg.activeRecallAllowChainedActiveMemory === true,
2335
2334
  dreaming,
2336
2335
  dreamsPhases,
2337
2336
  procedural,
2337
+ extractionLiveness: parseExtractionLivenessConfig(cfg),
2338
2338
  wearables,
2339
2339
  meetings,
2340
2340
  activity,