@remnic/core 9.69.85 → 9.69.87

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 (336) hide show
  1. package/dist/access-admin-ops-surface.js +45 -44
  2. package/dist/access-authorization-probe.js +46 -45
  3. package/dist/access-boundary.js +45 -44
  4. package/dist/access-cli.js +111 -110
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.d.ts.map +1 -1
  7. package/dist/access-extraction-force-flush.js +45 -44
  8. package/dist/access-http-briefing.js +46 -45
  9. package/dist/access-http-query.js +47 -46
  10. package/dist/access-http.js +67 -66
  11. package/dist/access-identity-continuity-surface.js +45 -44
  12. package/dist/access-lcm-surface.js +45 -44
  13. package/dist/access-mcp.d.ts.map +1 -1
  14. package/dist/access-mcp.js +59 -58
  15. package/dist/access-namespace-preflight.js +45 -44
  16. package/dist/access-observe-write-category.js +4 -4
  17. package/dist/access-observe-write-surface.js +45 -44
  18. package/dist/access-operations-batch.js +49 -48
  19. package/dist/access-operations.js +56 -55
  20. package/dist/access-recall-concurrency.js +45 -44
  21. package/dist/access-recall-diagnostics.js +4 -4
  22. package/dist/access-recall-response.js +45 -44
  23. package/dist/access-recall-surface.js +45 -44
  24. package/dist/access-schema.js +3 -3
  25. package/dist/access-service-helpers.d.ts +1 -0
  26. package/dist/access-service-helpers.d.ts.map +1 -1
  27. package/dist/access-service-helpers.js +1 -1
  28. package/dist/access-service.js +45 -44
  29. package/dist/access-surface-catalog.js +47 -46
  30. package/dist/access-surface-catalog.js.map +1 -1
  31. package/dist/active-recall.js +13 -12
  32. package/dist/active-recall.js.map +1 -1
  33. package/dist/{auto-sync-WEUDMXUW.js → auto-sync-6IPX2BAC.js} +5 -5
  34. package/dist/background-generation.js +2 -2
  35. package/dist/briefing.js +7 -7
  36. package/dist/buffer.js +4 -3
  37. package/dist/calibration.js +2 -2
  38. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
  39. package/dist/causal-behavior.js +2 -2
  40. package/dist/causal-chain.js +2 -2
  41. package/dist/causal-consolidation.js +10 -10
  42. package/dist/causal-retrieval.js +2 -2
  43. package/dist/causal-trajectory-graph.js +3 -3
  44. package/dist/causal-trajectory.js +1 -1
  45. package/dist/{chunk-J3IWHCMF.js → chunk-2DT7PIDZ.js} +3 -3
  46. package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
  47. package/dist/{chunk-MFZACYZ6.js → chunk-37S3IMYB.js} +2 -2
  48. package/dist/{chunk-IBGEHKQ6.js → chunk-3C3J243X.js} +2 -2
  49. package/dist/{chunk-55FCXCXJ.js → chunk-3GQC3NMB.js} +4 -4
  50. package/dist/{chunk-QOPB6KE3.js → chunk-3TB2XQ3C.js} +2 -2
  51. package/dist/{chunk-3XQYM4RE.js → chunk-4BZP2B4U.js} +2 -2
  52. package/dist/{chunk-FYAU4S6E.js → chunk-4CDYONWO.js} +3 -3
  53. package/dist/{chunk-CRKWSSS4.js → chunk-4IEOGIPB.js} +2 -2
  54. package/dist/{chunk-W75BBBSY.js → chunk-4IIMMZZK.js} +11 -11
  55. package/dist/{chunk-Q3THVX75.js → chunk-4RL3JOB3.js} +2 -2
  56. package/dist/{chunk-7G6WUOLB.js → chunk-66DKTOBY.js} +2 -2
  57. package/dist/{chunk-IP5VLSLO.js → chunk-6L3PBSAR.js} +2 -2
  58. package/dist/{chunk-AZ2X5LNA.js → chunk-6LYAEM54.js} +2 -2
  59. package/dist/{chunk-RCQKAOOB.js → chunk-6NQ4LSMS.js} +40 -40
  60. package/dist/{chunk-WB2I2EQK.js → chunk-6TT6HRE4.js} +2 -2
  61. package/dist/{chunk-JX6USXZR.js → chunk-72JNNJJJ.js} +2 -2
  62. package/dist/{chunk-BUKK5SWA.js → chunk-7LCGFUMB.js} +4 -4
  63. package/dist/{chunk-OEBLZZKK.js → chunk-7XG7KMIW.js} +2 -2
  64. package/dist/{chunk-3GN2PEOT.js → chunk-AQK54Q7O.js} +2 -2
  65. package/dist/{chunk-3SG4FGDV.js → chunk-AWD36R4D.js} +5 -2
  66. package/dist/chunk-AWD36R4D.js.map +1 -0
  67. package/dist/{chunk-BOUFVFV2.js → chunk-AZSGSRIM.js} +2 -2
  68. package/dist/{chunk-N3MNDVJO.js → chunk-BFO3IR56.js} +2 -2
  69. package/dist/{chunk-2UPTRDGM.js → chunk-BJRAELDH.js} +3 -3
  70. package/dist/{chunk-IMAP236M.js → chunk-CS52MFDV.js} +2 -2
  71. package/dist/{chunk-UNJOB4DY.js → chunk-CUCWX3MO.js} +2 -2
  72. package/dist/{chunk-QB75LKQQ.js → chunk-CWHV574S.js} +32 -13
  73. package/dist/chunk-CWHV574S.js.map +1 -0
  74. package/dist/{chunk-DQISIT63.js → chunk-DZ42MDZE.js} +3 -3
  75. package/dist/{chunk-ML2MVAEZ.js → chunk-DZ525SNQ.js} +1 -1
  76. package/dist/{chunk-5ELENZTA.js → chunk-EDIH6X2P.js} +2 -2
  77. package/dist/{chunk-S42HZILI.js → chunk-EHS5MJEF.js} +2 -2
  78. package/dist/{chunk-IA3X2Y4K.js → chunk-EQ6YOIKO.js} +2 -2
  79. package/dist/{chunk-4V44AA7O.js → chunk-FAN73COB.js} +2 -2
  80. package/dist/{chunk-KERNN6BC.js → chunk-FB64XE3R.js} +2 -2
  81. package/dist/{chunk-SVZWVZ7E.js → chunk-FOH7AMMI.js} +72 -55
  82. package/dist/chunk-FOH7AMMI.js.map +1 -0
  83. package/dist/{chunk-S55WTPFJ.js → chunk-FRCESVV6.js} +7 -7
  84. package/dist/{chunk-GEX5NI36.js → chunk-HBBHL4YF.js} +2 -2
  85. package/dist/{chunk-2I6VHX6Q.js → chunk-HESDNYRB.js} +2 -2
  86. package/dist/{chunk-2U3R3DDH.js → chunk-ICZQG4XE.js} +9 -9
  87. package/dist/{chunk-DGAWEJVI.js → chunk-JGSQ6P4D.js} +2 -2
  88. package/dist/{chunk-TIQZNDZ5.js → chunk-JKMHZF3Q.js} +2 -2
  89. package/dist/{chunk-NAFPHFDM.js → chunk-JNLEJE4A.js} +2 -2
  90. package/dist/{chunk-IFCKHPY4.js → chunk-K4J4E7WV.js} +2 -2
  91. package/dist/{chunk-2QG4SLZI.js → chunk-KF7PQ7G2.js} +2 -2
  92. package/dist/{chunk-JXMECXMF.js → chunk-KFCMMDHH.js} +2 -2
  93. package/dist/{chunk-SQDKX4RW.js → chunk-KP7SANCF.js} +2 -2
  94. package/dist/{chunk-OM5BIPBR.js → chunk-L6UZEAID.js} +2 -2
  95. package/dist/{chunk-TEV2JGU5.js → chunk-LF5IGOOD.js} +15 -15
  96. package/dist/{chunk-QWUJWBZ5.js → chunk-LQG5O5EP.js} +2 -2
  97. package/dist/{chunk-NKFLHW7J.js → chunk-LS3XH3UE.js} +2 -2
  98. package/dist/{chunk-BJX3VQWZ.js → chunk-M536WNTQ.js} +2 -2
  99. package/dist/{chunk-EU3N5MK3.js → chunk-MQJL6CDZ.js} +3 -3
  100. package/dist/{chunk-VZBW6CDG.js → chunk-N4S4NUX5.js} +1 -1
  101. package/dist/{chunk-L2LBMKSI.js → chunk-NE6PHPLG.js} +10 -10
  102. package/dist/{chunk-VTPASHTO.js → chunk-NE7I2RCT.js} +2 -2
  103. package/dist/{chunk-OAOBL6OY.js → chunk-NR2ASHBL.js} +5 -5
  104. package/dist/{chunk-7UUKRS3J.js → chunk-P2WZHLUF.js} +3 -3
  105. package/dist/{chunk-IVH7INFM.js → chunk-P6WFK4ZJ.js} +6 -6
  106. package/dist/{chunk-CHDGJJV6.js → chunk-PUKTBULQ.js} +2 -2
  107. package/dist/{chunk-NAYBHNGN.js → chunk-QEV26L2F.js} +2 -2
  108. package/dist/{chunk-I4G4UWQA.js → chunk-QI2E6ISQ.js} +1 -1
  109. package/dist/{chunk-CK5U7JGH.js → chunk-QVS22WTO.js} +2 -2
  110. package/dist/{chunk-B47OHVFT.js → chunk-QWW2JDDX.js} +7 -7
  111. package/dist/{chunk-EJPF6XDQ.js → chunk-RDJ6C7NZ.js} +3 -3
  112. package/dist/{chunk-C2WWQ4OR.js → chunk-RMMA44HE.js} +1 -1
  113. package/dist/chunk-RMMA44HE.js.map +1 -0
  114. package/dist/{chunk-I53NAHZ4.js → chunk-S7GCT7NU.js} +3 -2
  115. package/dist/chunk-S7GCT7NU.js.map +1 -0
  116. package/dist/{chunk-RDEUG2M2.js → chunk-SOZUJCME.js} +6 -6
  117. package/dist/{chunk-T4QGUXCV.js → chunk-SPSRGEDQ.js} +2 -2
  118. package/dist/{chunk-TY446V34.js → chunk-SRZW7FNU.js} +2 -2
  119. package/dist/{chunk-SV72F4DS.js → chunk-SY5KDWGU.js} +2 -2
  120. package/dist/{chunk-H36X4NRH.js → chunk-TDYAIXHK.js} +5 -5
  121. package/dist/{chunk-ZTHGFTMW.js → chunk-TKC5LZ43.js} +2 -2
  122. package/dist/{chunk-6DTJBTHL.js → chunk-TM3RXL4G.js} +14 -2
  123. package/dist/chunk-TM3RXL4G.js.map +1 -0
  124. package/dist/{chunk-AXDOF4VI.js → chunk-UA5DX5C3.js} +2 -2
  125. package/dist/{chunk-JS3S2HVG.js → chunk-V2ES4WCZ.js} +2 -2
  126. package/dist/{chunk-5FNZ3G6X.js → chunk-VKQI47DJ.js} +4 -4
  127. package/dist/{chunk-JVY556FW.js → chunk-VLLD4TOB.js} +2 -2
  128. package/dist/{chunk-NMBX4D7P.js → chunk-VQNONC4E.js} +2 -2
  129. package/dist/{chunk-GZAGLCQH.js → chunk-VVDWZRZG.js} +2 -2
  130. package/dist/{chunk-T4BE5KJM.js → chunk-VX6GCKBS.js} +3 -3
  131. package/dist/{chunk-RIEX7NOZ.js → chunk-W4AOR52H.js} +2 -2
  132. package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
  133. package/dist/{chunk-BNPLDVM6.js → chunk-XTYX6V52.js} +2 -2
  134. package/dist/{chunk-FZVROZKC.js → chunk-XVZA6VXC.js} +4 -4
  135. package/dist/{chunk-RGMVMVMF.js → chunk-YBA52OKG.js} +2 -1
  136. package/dist/chunk-YBA52OKG.js.map +1 -0
  137. package/dist/{chunk-C7JAUNFC.js → chunk-YITN5WXI.js} +2 -2
  138. package/dist/{chunk-HS75MCQF.js → chunk-YRULQW5J.js} +2 -2
  139. package/dist/{chunk-DINRT75P.js → chunk-YSBL7VPO.js} +2 -2
  140. package/dist/{chunk-7QK5TUTW.js → chunk-YSJTCOHR.js} +2 -2
  141. package/dist/{chunk-QC56VZXC.js → chunk-YTQGGO3K.js} +67 -67
  142. package/dist/{chunk-HKFJ3PF3.js → chunk-ZI7QA4MK.js} +2 -2
  143. package/dist/chunk-ZJP66Q4I.js +48 -0
  144. package/dist/chunk-ZJP66Q4I.js.map +1 -0
  145. package/dist/cli.js +86 -85
  146. package/dist/coding/export-okf-codegraph.js +6 -6
  147. package/dist/coding/pre-action-gate.js +2 -2
  148. package/dist/compounding/engine.js +7 -7
  149. package/dist/config.js +13 -12
  150. package/dist/connectors/codex-materialize-runner.js +7 -7
  151. package/dist/connectors/index.js +7 -7
  152. package/dist/contradiction/index.js +3 -3
  153. package/dist/{contradiction-scan-5EJYRKD3.js → contradiction-scan-TAGMOUQ2.js} +3 -3
  154. package/dist/convergence-refresh.js +9 -9
  155. package/dist/corpus-watermark.js +9 -9
  156. package/dist/correction/correction-access-wiring.d.ts.map +1 -1
  157. package/dist/deep-recall-http-glue.js +4 -4
  158. package/dist/deep-recall-policy-llm.js +3 -3
  159. package/dist/deep-recall.js +2 -2
  160. package/dist/entity-retrieval.js +7 -7
  161. package/dist/external-wiki-access.js +46 -45
  162. package/dist/extraction-faithfulness.js +3 -3
  163. package/dist/extraction-judge.js +3 -3
  164. package/dist/extraction-liveness.d.ts +9 -0
  165. package/dist/extraction-liveness.d.ts.map +1 -1
  166. package/dist/extraction-liveness.js +2 -1
  167. package/dist/extraction-llm-health.d.ts +32 -0
  168. package/dist/extraction-llm-health.d.ts.map +1 -0
  169. package/dist/extraction-llm-health.js +17 -0
  170. package/dist/extraction-span-config.js +3 -2
  171. package/dist/extraction-span-materialize.js +2 -2
  172. package/dist/extraction.js +16 -15
  173. package/dist/fallback-llm.js +2 -2
  174. package/dist/{first-start-migration-GAT7G733.js → first-start-migration-7OATHJKB.js} +4 -4
  175. package/dist/{graph-edge-decay-PVKDKLQK.js → graph-edge-decay-KQGS3L3B.js} +6 -6
  176. package/dist/graph-jsonl.js +4 -4
  177. package/dist/graph-snapshot.js +4 -4
  178. package/dist/graph.js +5 -5
  179. package/dist/harmonic-retrieval.js +1 -1
  180. package/dist/index.js +136 -135
  181. package/dist/json-extract.d.ts.map +1 -1
  182. package/dist/json-extract.js +1 -1
  183. package/dist/lcm/engine.js +2 -2
  184. package/dist/lcm/index.js +5 -5
  185. package/dist/local-llm.d.ts.map +1 -1
  186. package/dist/local-llm.js +1 -1
  187. package/dist/location/index.js +9 -9
  188. package/dist/maintenance/memory-governance.js +7 -7
  189. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +7 -7
  190. package/dist/maintenance/rebuild-memory-projection.js +8 -8
  191. package/dist/memory-browse-operations.js +46 -45
  192. package/dist/memory-browse.js +3 -3
  193. package/dist/namespaces/migrate.js +8 -8
  194. package/dist/namespaces/storage.js +7 -7
  195. package/dist/operator-doctor-corpus.js +10 -10
  196. package/dist/operator-toolkit.js +25 -24
  197. package/dist/orchestration/extraction-run.d.ts.map +1 -1
  198. package/dist/orchestration/maintenance.js +17 -17
  199. package/dist/orchestrator.js +111 -110
  200. package/dist/recall-navigation-operations.js +46 -45
  201. package/dist/recall-navigation.js +45 -44
  202. package/dist/recall-planner-llm.js +2 -2
  203. package/dist/recall-state-view-admission.js +3 -3
  204. package/dist/recall-why-service.js +6 -6
  205. package/dist/recall-why.js +3 -3
  206. package/dist/{resolution-UYJU5JUA.js → resolution-DNX7FO7A.js} +4 -4
  207. package/dist/resolution-DNX7FO7A.js.map +1 -0
  208. package/dist/resume-bundles.js +14 -13
  209. package/dist/semantic-consolidation.js +8 -8
  210. package/dist/semantic-rule-promotion.js +7 -7
  211. package/dist/semantic-rule-verifier.js +7 -7
  212. package/dist/source-agent-qualifier.js +11 -10
  213. package/dist/standup/build.js +7 -7
  214. package/dist/storage.js +6 -6
  215. package/dist/summarizer.js +5 -5
  216. package/dist/support-passport/index.js +48 -47
  217. package/dist/transfer/backup.js +2 -2
  218. package/dist/transfer/capsule-export.js +2 -2
  219. package/dist/transfer/capsule-import.js +2 -2
  220. package/dist/transfer/export-okf.js +7 -7
  221. package/dist/verified-recall.js +7 -7
  222. package/dist/who-knows-cli.js +8 -8
  223. package/dist/who-knows.js +7 -7
  224. package/package.json +2 -2
  225. package/src/access-extraction-force-flush.ts +15 -7
  226. package/src/access-mcp.ts +90 -28
  227. package/src/access-service-health.test.ts +41 -5
  228. package/src/access-service-helpers.ts +1 -0
  229. package/src/access-service-observe-lcm-parity.test.ts +56 -24
  230. package/src/correction/correction-access-wiring.ts +36 -8
  231. package/src/correction/correction-classify-parse.test.ts +178 -0
  232. package/src/extraction-liveness.ts +13 -1
  233. package/src/extraction-llm-health.test.ts +103 -0
  234. package/src/extraction-llm-health.ts +71 -0
  235. package/src/json-extract.ts +6 -0
  236. package/src/local-llm-thinking.test.ts +12 -0
  237. package/src/local-llm.ts +1 -0
  238. package/src/orchestration/extraction-run.test.ts +55 -1
  239. package/src/orchestration/extraction-run.ts +13 -0
  240. package/dist/chunk-3SG4FGDV.js.map +0 -1
  241. package/dist/chunk-6DTJBTHL.js.map +0 -1
  242. package/dist/chunk-C2WWQ4OR.js.map +0 -1
  243. package/dist/chunk-I53NAHZ4.js.map +0 -1
  244. package/dist/chunk-QB75LKQQ.js.map +0 -1
  245. package/dist/chunk-RGMVMVMF.js.map +0 -1
  246. package/dist/chunk-SVZWVZ7E.js.map +0 -1
  247. /package/dist/{auto-sync-WEUDMXUW.js.map → auto-sync-6IPX2BAC.js.map} +0 -0
  248. /package/dist/{capsule-crypto-GWVG7LGC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  249. /package/dist/{chunk-J3IWHCMF.js.map → chunk-2DT7PIDZ.js.map} +0 -0
  250. /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
  251. /package/dist/{chunk-MFZACYZ6.js.map → chunk-37S3IMYB.js.map} +0 -0
  252. /package/dist/{chunk-IBGEHKQ6.js.map → chunk-3C3J243X.js.map} +0 -0
  253. /package/dist/{chunk-55FCXCXJ.js.map → chunk-3GQC3NMB.js.map} +0 -0
  254. /package/dist/{chunk-QOPB6KE3.js.map → chunk-3TB2XQ3C.js.map} +0 -0
  255. /package/dist/{chunk-3XQYM4RE.js.map → chunk-4BZP2B4U.js.map} +0 -0
  256. /package/dist/{chunk-FYAU4S6E.js.map → chunk-4CDYONWO.js.map} +0 -0
  257. /package/dist/{chunk-CRKWSSS4.js.map → chunk-4IEOGIPB.js.map} +0 -0
  258. /package/dist/{chunk-W75BBBSY.js.map → chunk-4IIMMZZK.js.map} +0 -0
  259. /package/dist/{chunk-Q3THVX75.js.map → chunk-4RL3JOB3.js.map} +0 -0
  260. /package/dist/{chunk-7G6WUOLB.js.map → chunk-66DKTOBY.js.map} +0 -0
  261. /package/dist/{chunk-IP5VLSLO.js.map → chunk-6L3PBSAR.js.map} +0 -0
  262. /package/dist/{chunk-AZ2X5LNA.js.map → chunk-6LYAEM54.js.map} +0 -0
  263. /package/dist/{chunk-RCQKAOOB.js.map → chunk-6NQ4LSMS.js.map} +0 -0
  264. /package/dist/{chunk-WB2I2EQK.js.map → chunk-6TT6HRE4.js.map} +0 -0
  265. /package/dist/{chunk-JX6USXZR.js.map → chunk-72JNNJJJ.js.map} +0 -0
  266. /package/dist/{chunk-BUKK5SWA.js.map → chunk-7LCGFUMB.js.map} +0 -0
  267. /package/dist/{chunk-OEBLZZKK.js.map → chunk-7XG7KMIW.js.map} +0 -0
  268. /package/dist/{chunk-3GN2PEOT.js.map → chunk-AQK54Q7O.js.map} +0 -0
  269. /package/dist/{chunk-BOUFVFV2.js.map → chunk-AZSGSRIM.js.map} +0 -0
  270. /package/dist/{chunk-N3MNDVJO.js.map → chunk-BFO3IR56.js.map} +0 -0
  271. /package/dist/{chunk-2UPTRDGM.js.map → chunk-BJRAELDH.js.map} +0 -0
  272. /package/dist/{chunk-IMAP236M.js.map → chunk-CS52MFDV.js.map} +0 -0
  273. /package/dist/{chunk-UNJOB4DY.js.map → chunk-CUCWX3MO.js.map} +0 -0
  274. /package/dist/{chunk-DQISIT63.js.map → chunk-DZ42MDZE.js.map} +0 -0
  275. /package/dist/{chunk-ML2MVAEZ.js.map → chunk-DZ525SNQ.js.map} +0 -0
  276. /package/dist/{chunk-5ELENZTA.js.map → chunk-EDIH6X2P.js.map} +0 -0
  277. /package/dist/{chunk-S42HZILI.js.map → chunk-EHS5MJEF.js.map} +0 -0
  278. /package/dist/{chunk-IA3X2Y4K.js.map → chunk-EQ6YOIKO.js.map} +0 -0
  279. /package/dist/{chunk-4V44AA7O.js.map → chunk-FAN73COB.js.map} +0 -0
  280. /package/dist/{chunk-KERNN6BC.js.map → chunk-FB64XE3R.js.map} +0 -0
  281. /package/dist/{chunk-S55WTPFJ.js.map → chunk-FRCESVV6.js.map} +0 -0
  282. /package/dist/{chunk-GEX5NI36.js.map → chunk-HBBHL4YF.js.map} +0 -0
  283. /package/dist/{chunk-2I6VHX6Q.js.map → chunk-HESDNYRB.js.map} +0 -0
  284. /package/dist/{chunk-2U3R3DDH.js.map → chunk-ICZQG4XE.js.map} +0 -0
  285. /package/dist/{chunk-DGAWEJVI.js.map → chunk-JGSQ6P4D.js.map} +0 -0
  286. /package/dist/{chunk-TIQZNDZ5.js.map → chunk-JKMHZF3Q.js.map} +0 -0
  287. /package/dist/{chunk-NAFPHFDM.js.map → chunk-JNLEJE4A.js.map} +0 -0
  288. /package/dist/{chunk-IFCKHPY4.js.map → chunk-K4J4E7WV.js.map} +0 -0
  289. /package/dist/{chunk-2QG4SLZI.js.map → chunk-KF7PQ7G2.js.map} +0 -0
  290. /package/dist/{chunk-JXMECXMF.js.map → chunk-KFCMMDHH.js.map} +0 -0
  291. /package/dist/{chunk-SQDKX4RW.js.map → chunk-KP7SANCF.js.map} +0 -0
  292. /package/dist/{chunk-OM5BIPBR.js.map → chunk-L6UZEAID.js.map} +0 -0
  293. /package/dist/{chunk-TEV2JGU5.js.map → chunk-LF5IGOOD.js.map} +0 -0
  294. /package/dist/{chunk-QWUJWBZ5.js.map → chunk-LQG5O5EP.js.map} +0 -0
  295. /package/dist/{chunk-NKFLHW7J.js.map → chunk-LS3XH3UE.js.map} +0 -0
  296. /package/dist/{chunk-BJX3VQWZ.js.map → chunk-M536WNTQ.js.map} +0 -0
  297. /package/dist/{chunk-EU3N5MK3.js.map → chunk-MQJL6CDZ.js.map} +0 -0
  298. /package/dist/{chunk-VZBW6CDG.js.map → chunk-N4S4NUX5.js.map} +0 -0
  299. /package/dist/{chunk-L2LBMKSI.js.map → chunk-NE6PHPLG.js.map} +0 -0
  300. /package/dist/{chunk-VTPASHTO.js.map → chunk-NE7I2RCT.js.map} +0 -0
  301. /package/dist/{chunk-OAOBL6OY.js.map → chunk-NR2ASHBL.js.map} +0 -0
  302. /package/dist/{chunk-7UUKRS3J.js.map → chunk-P2WZHLUF.js.map} +0 -0
  303. /package/dist/{chunk-IVH7INFM.js.map → chunk-P6WFK4ZJ.js.map} +0 -0
  304. /package/dist/{chunk-CHDGJJV6.js.map → chunk-PUKTBULQ.js.map} +0 -0
  305. /package/dist/{chunk-NAYBHNGN.js.map → chunk-QEV26L2F.js.map} +0 -0
  306. /package/dist/{chunk-I4G4UWQA.js.map → chunk-QI2E6ISQ.js.map} +0 -0
  307. /package/dist/{chunk-CK5U7JGH.js.map → chunk-QVS22WTO.js.map} +0 -0
  308. /package/dist/{chunk-B47OHVFT.js.map → chunk-QWW2JDDX.js.map} +0 -0
  309. /package/dist/{chunk-EJPF6XDQ.js.map → chunk-RDJ6C7NZ.js.map} +0 -0
  310. /package/dist/{chunk-RDEUG2M2.js.map → chunk-SOZUJCME.js.map} +0 -0
  311. /package/dist/{chunk-T4QGUXCV.js.map → chunk-SPSRGEDQ.js.map} +0 -0
  312. /package/dist/{chunk-TY446V34.js.map → chunk-SRZW7FNU.js.map} +0 -0
  313. /package/dist/{chunk-SV72F4DS.js.map → chunk-SY5KDWGU.js.map} +0 -0
  314. /package/dist/{chunk-H36X4NRH.js.map → chunk-TDYAIXHK.js.map} +0 -0
  315. /package/dist/{chunk-ZTHGFTMW.js.map → chunk-TKC5LZ43.js.map} +0 -0
  316. /package/dist/{chunk-AXDOF4VI.js.map → chunk-UA5DX5C3.js.map} +0 -0
  317. /package/dist/{chunk-JS3S2HVG.js.map → chunk-V2ES4WCZ.js.map} +0 -0
  318. /package/dist/{chunk-5FNZ3G6X.js.map → chunk-VKQI47DJ.js.map} +0 -0
  319. /package/dist/{chunk-JVY556FW.js.map → chunk-VLLD4TOB.js.map} +0 -0
  320. /package/dist/{chunk-NMBX4D7P.js.map → chunk-VQNONC4E.js.map} +0 -0
  321. /package/dist/{chunk-GZAGLCQH.js.map → chunk-VVDWZRZG.js.map} +0 -0
  322. /package/dist/{chunk-T4BE5KJM.js.map → chunk-VX6GCKBS.js.map} +0 -0
  323. /package/dist/{chunk-RIEX7NOZ.js.map → chunk-W4AOR52H.js.map} +0 -0
  324. /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
  325. /package/dist/{chunk-BNPLDVM6.js.map → chunk-XTYX6V52.js.map} +0 -0
  326. /package/dist/{chunk-FZVROZKC.js.map → chunk-XVZA6VXC.js.map} +0 -0
  327. /package/dist/{chunk-C7JAUNFC.js.map → chunk-YITN5WXI.js.map} +0 -0
  328. /package/dist/{chunk-HS75MCQF.js.map → chunk-YRULQW5J.js.map} +0 -0
  329. /package/dist/{chunk-DINRT75P.js.map → chunk-YSBL7VPO.js.map} +0 -0
  330. /package/dist/{chunk-7QK5TUTW.js.map → chunk-YSJTCOHR.js.map} +0 -0
  331. /package/dist/{chunk-QC56VZXC.js.map → chunk-YTQGGO3K.js.map} +0 -0
  332. /package/dist/{chunk-HKFJ3PF3.js.map → chunk-ZI7QA4MK.js.map} +0 -0
  333. /package/dist/{contradiction-scan-5EJYRKD3.js.map → contradiction-scan-TAGMOUQ2.js.map} +0 -0
  334. /package/dist/{graph-edge-decay-PVKDKLQK.js.map → extraction-llm-health.js.map} +0 -0
  335. /package/dist/{first-start-migration-GAT7G733.js.map → first-start-migration-7OATHJKB.js.map} +0 -0
  336. /package/dist/{resolution-UYJU5JUA.js.map → graph-edge-decay-KQGS3L3B.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-TIQZNDZ5.js";
4
+ } from "./chunk-JKMHZF3Q.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-S55WTPFJ.js";
6
+ import "./chunk-FRCESVV6.js";
7
7
  import "./chunk-UHVXE24Y.js";
8
8
  import "./chunk-46WM6JX2.js";
9
9
  import "./chunk-D5F7TKMH.js";
@@ -22,12 +22,12 @@ import "./chunk-F4TWWUMP.js";
22
22
  import "./chunk-72A4L5JJ.js";
23
23
  import "./chunk-A7Q43EUZ.js";
24
24
  import "./chunk-S2V7RUCL.js";
25
- import "./chunk-S2HLHAZ4.js";
26
25
  import "./chunk-MRPOZBJC.js";
27
- import "./chunk-DM2T26WE.js";
26
+ import "./chunk-S2HLHAZ4.js";
28
27
  import "./chunk-LDXUBPMO.js";
28
+ import "./chunk-DM2T26WE.js";
29
29
  import "./chunk-FF6N7BXC.js";
30
- import "./chunk-J3IWHCMF.js";
30
+ import "./chunk-2DT7PIDZ.js";
31
31
  import "./chunk-AAD2ZS6P.js";
32
32
  import "./chunk-DUJYRVUD.js";
33
33
  import "./chunk-3ONXXHQO.js";
@@ -51,7 +51,7 @@ import "./chunk-IUM3VSHI.js";
51
51
  import "./chunk-23G5P7TA.js";
52
52
  import "./chunk-C64XATK7.js";
53
53
  import "./chunk-42JKGUFJ.js";
54
- import "./chunk-ZTHGFTMW.js";
54
+ import "./chunk-TKC5LZ43.js";
55
55
  import "./chunk-I55KAVET.js";
56
56
  import "./chunk-L2EXJQJP.js";
57
57
  import "./chunk-45GF7Y3V.js";
@@ -81,7 +81,7 @@ import "./chunk-AW4QUFQF.js";
81
81
  import "./chunk-5FVVY2EB.js";
82
82
  import "./chunk-FFAZ2XFU.js";
83
83
  import "./chunk-PWF4JXKD.js";
84
- import "./chunk-RGMVMVMF.js";
84
+ import "./chunk-YBA52OKG.js";
85
85
  import "./chunk-PWPIERBM.js";
86
86
  import "./chunk-JDSVLVCG.js";
87
87
  import "./chunk-5GKPFL3S.js";
@@ -4,9 +4,9 @@ import {
4
4
  renderWhoKnows,
5
5
  renderWhoKnowsJson,
6
6
  renderWhoKnowsText
7
- } from "./chunk-RIEX7NOZ.js";
8
- import "./chunk-IMAP236M.js";
9
- import "./chunk-S55WTPFJ.js";
7
+ } from "./chunk-W4AOR52H.js";
8
+ import "./chunk-CS52MFDV.js";
9
+ import "./chunk-FRCESVV6.js";
10
10
  import "./chunk-UHVXE24Y.js";
11
11
  import "./chunk-46WM6JX2.js";
12
12
  import "./chunk-D5F7TKMH.js";
@@ -25,12 +25,12 @@ import "./chunk-F4TWWUMP.js";
25
25
  import "./chunk-72A4L5JJ.js";
26
26
  import "./chunk-A7Q43EUZ.js";
27
27
  import "./chunk-S2V7RUCL.js";
28
- import "./chunk-S2HLHAZ4.js";
29
28
  import "./chunk-MRPOZBJC.js";
30
- import "./chunk-DM2T26WE.js";
29
+ import "./chunk-S2HLHAZ4.js";
31
30
  import "./chunk-LDXUBPMO.js";
31
+ import "./chunk-DM2T26WE.js";
32
32
  import "./chunk-FF6N7BXC.js";
33
- import "./chunk-J3IWHCMF.js";
33
+ import "./chunk-2DT7PIDZ.js";
34
34
  import "./chunk-AAD2ZS6P.js";
35
35
  import "./chunk-DUJYRVUD.js";
36
36
  import "./chunk-3ONXXHQO.js";
@@ -54,7 +54,7 @@ import "./chunk-IUM3VSHI.js";
54
54
  import "./chunk-23G5P7TA.js";
55
55
  import "./chunk-C64XATK7.js";
56
56
  import "./chunk-42JKGUFJ.js";
57
- import "./chunk-ZTHGFTMW.js";
57
+ import "./chunk-TKC5LZ43.js";
58
58
  import "./chunk-I55KAVET.js";
59
59
  import "./chunk-L2EXJQJP.js";
60
60
  import "./chunk-45GF7Y3V.js";
@@ -84,7 +84,7 @@ import "./chunk-AW4QUFQF.js";
84
84
  import "./chunk-5FVVY2EB.js";
85
85
  import "./chunk-FFAZ2XFU.js";
86
86
  import "./chunk-PWF4JXKD.js";
87
- import "./chunk-RGMVMVMF.js";
87
+ import "./chunk-YBA52OKG.js";
88
88
  import "./chunk-PWPIERBM.js";
89
89
  import "./chunk-JDSVLVCG.js";
90
90
  import "./chunk-5GKPFL3S.js";
package/dist/who-knows.js CHANGED
@@ -9,8 +9,8 @@ import {
9
9
  loadWhoKnowsEntities,
10
10
  tokenizeTopic,
11
11
  validateWhoKnowsInput
12
- } from "./chunk-IMAP236M.js";
13
- import "./chunk-S55WTPFJ.js";
12
+ } from "./chunk-CS52MFDV.js";
13
+ import "./chunk-FRCESVV6.js";
14
14
  import "./chunk-UHVXE24Y.js";
15
15
  import "./chunk-46WM6JX2.js";
16
16
  import "./chunk-D5F7TKMH.js";
@@ -29,12 +29,12 @@ import "./chunk-F4TWWUMP.js";
29
29
  import "./chunk-72A4L5JJ.js";
30
30
  import "./chunk-A7Q43EUZ.js";
31
31
  import "./chunk-S2V7RUCL.js";
32
- import "./chunk-S2HLHAZ4.js";
33
32
  import "./chunk-MRPOZBJC.js";
34
- import "./chunk-DM2T26WE.js";
33
+ import "./chunk-S2HLHAZ4.js";
35
34
  import "./chunk-LDXUBPMO.js";
35
+ import "./chunk-DM2T26WE.js";
36
36
  import "./chunk-FF6N7BXC.js";
37
- import "./chunk-J3IWHCMF.js";
37
+ import "./chunk-2DT7PIDZ.js";
38
38
  import "./chunk-AAD2ZS6P.js";
39
39
  import "./chunk-DUJYRVUD.js";
40
40
  import "./chunk-3ONXXHQO.js";
@@ -58,7 +58,7 @@ import "./chunk-IUM3VSHI.js";
58
58
  import "./chunk-23G5P7TA.js";
59
59
  import "./chunk-C64XATK7.js";
60
60
  import "./chunk-42JKGUFJ.js";
61
- import "./chunk-ZTHGFTMW.js";
61
+ import "./chunk-TKC5LZ43.js";
62
62
  import "./chunk-I55KAVET.js";
63
63
  import "./chunk-L2EXJQJP.js";
64
64
  import "./chunk-45GF7Y3V.js";
@@ -88,7 +88,7 @@ import "./chunk-AW4QUFQF.js";
88
88
  import "./chunk-5FVVY2EB.js";
89
89
  import "./chunk-FFAZ2XFU.js";
90
90
  import "./chunk-PWF4JXKD.js";
91
- import "./chunk-RGMVMVMF.js";
91
+ import "./chunk-YBA52OKG.js";
92
92
  import "./chunk-PWPIERBM.js";
93
93
  import "./chunk-JDSVLVCG.js";
94
94
  import "./chunk-5GKPFL3S.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.69.85",
3
+ "version": "9.69.87",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3317,7 +3317,7 @@
3317
3317
  "core"
3318
3318
  ],
3319
3319
  "peerDependencies": {
3320
- "@remnic/coding-graph": "^9.69.85"
3320
+ "@remnic/coding-graph": "^9.69.87"
3321
3321
  },
3322
3322
  "peerDependenciesMeta": {
3323
3323
  "@remnic/coding-graph": {
@@ -34,6 +34,14 @@ export async function extractionForceFlush(
34
34
  if (request.deadlineMs !== undefined && (!Number.isFinite(request.deadlineMs) || request.deadlineMs < 0)) {
35
35
  throw new EngramAccessInputError("deadlineMs must be a finite non-negative number");
36
36
  }
37
+ // `deadlineMs` is a BUDGET from now, not an absolute epoch (issue #3140):
38
+ // callers passing a natural relative value (e.g. 30000) were instantly
39
+ // rejected with `replay extraction deadline exceeded (scope_resolution)`
40
+ // because the raw duration was compared against Date.now(). Convert once
41
+ // here; every phase below and the orchestrator flush keep absolute deadlines.
42
+ const deadlineAt = typeof request.deadlineMs === "number"
43
+ ? (request.deadlineMs > 1e11 ? request.deadlineMs : Date.now() + request.deadlineMs)
44
+ : undefined;
37
45
 
38
46
  const authenticatedPrincipal = request.authenticatedPrincipal?.trim();
39
47
  throwIfAborted(request.abortSignal, "extraction force-flush aborted");
@@ -87,7 +95,7 @@ export async function extractionForceFlush(
87
95
  () => deps.resolveMemoryScopePlan(request),
88
96
  {
89
97
  abortSignal: request.abortSignal,
90
- extractionDeadlineMs: request.deadlineMs,
98
+ extractionDeadlineMs: deadlineAt,
91
99
  reason: "access_force_flush",
92
100
  deadlineStage: "scope_resolution",
93
101
  onDeadline: cancelBeforeScopeResolution,
@@ -107,7 +115,7 @@ export async function extractionForceFlush(
107
115
  };
108
116
  if (request.abortSignal?.aborted) cancelScopedPendingObserveExtractions();
109
117
  throwIfAborted(request.abortSignal, "extraction force-flush aborted");
110
- if (typeof request.deadlineMs === "number" && request.deadlineMs <= Date.now()) {
118
+ if (deadlineAt !== undefined && deadlineAt <= Date.now()) {
111
119
  cancelScopedPendingObserveExtractions();
112
120
  throw new EngramAccessInputError("extraction force-flush deadline exceeded before buffer drain");
113
121
  }
@@ -119,7 +127,7 @@ export async function extractionForceFlush(
119
127
  reason: "access_force_flush",
120
128
  abortSignal: request.abortSignal,
121
129
  failOnExtractionFailure: true,
122
- extractionDeadlineMs: request.deadlineMs,
130
+ extractionDeadlineMs: deadlineAt,
123
131
  writeNamespaceOverride: scope.writeNamespace,
124
132
  principalOverride:
125
133
  typeof scope.principal === "string" && scope.principal.length > 0 ? scope.principal : undefined,
@@ -128,7 +136,7 @@ export async function extractionForceFlush(
128
136
  }),
129
137
  {
130
138
  abortSignal: request.abortSignal,
131
- extractionDeadlineMs: request.deadlineMs,
139
+ extractionDeadlineMs: deadlineAt,
132
140
  reason: "access_force_flush",
133
141
  deadlineStage: "buffer_drain",
134
142
  onDeadline: cancelScopedPendingObserveExtractions,
@@ -154,7 +162,7 @@ export async function extractionForceFlush(
154
162
  ),
155
163
  {
156
164
  abortSignal: request.abortSignal,
157
- extractionDeadlineMs: request.deadlineMs,
165
+ extractionDeadlineMs: deadlineAt,
158
166
  reason: "access_force_flush",
159
167
  deadlineStage: "pending_observe_extraction",
160
168
  onDeadline: () => {
@@ -172,11 +180,11 @@ export async function extractionForceFlush(
172
180
  () =>
173
181
  buffer.clearRetainedTurnsForSession(request.sessionKey, namespacesEnabled ? scope.principal : undefined, {
174
182
  abortSignal: request.abortSignal,
175
- deadlineMs: request.deadlineMs,
183
+ deadlineMs: deadlineAt,
176
184
  }),
177
185
  {
178
186
  abortSignal: request.abortSignal,
179
- extractionDeadlineMs: request.deadlineMs,
187
+ extractionDeadlineMs: deadlineAt,
180
188
  reason: "access_force_flush",
181
189
  deadlineStage: "retained_turn_cleanup",
182
190
  }
package/src/access-mcp.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { sharedContextMcpTools } from "./access-mcp-shared-context-tools.js";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import {
4
- MCP_ADMIN_OPS_MIGRATED_OPERATIONS, MCP_ADMIN_OPS_TOOLS,
4
+ MCP_ADMIN_OPS_MIGRATED_OPERATIONS,
5
+ MCP_ADMIN_OPS_TOOLS,
5
6
  MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
6
7
  } from "./access-mcp-admin-tools.js";
7
8
  import { readFile } from "node:fs/promises";
@@ -10,7 +11,12 @@ import type { Readable, Writable } from "node:stream";
10
11
  // (memory_get / memory_search / memory_store) as a side effect; callTool
11
12
  // dispatches migrated tools through the registry (issue #1525).
12
13
  import { type OperationName, getOperation } from "./access-boundary.js";
13
- import { assertOperationAllowed, capabilityAllowsOp, enforceNamespaceAllowList, tokenCapabilityStore } from "./access-token-capabilities.js";
14
+ import {
15
+ assertOperationAllowed,
16
+ capabilityAllowsOp,
17
+ enforceNamespaceAllowList,
18
+ tokenCapabilityStore,
19
+ } from "./access-token-capabilities.js";
14
20
  import {
15
21
  type ActionConfidenceRequest,
16
22
  type CapsuleExportRequest,
@@ -53,9 +59,14 @@ import {
53
59
  withToolAliases,
54
60
  } from "./access-mcp-tool-names.js";
55
61
  import { MCP_READ_ONLY_TOOL_SUFFIXES } from "./mcp-read-only-tools.js";
56
- import { MEETINGS_MCP_TOOLS } from "./meetings/mcp-tools.js"; import { DEEP_RECALL_MCP_TOOLS } from "./deep-recall-mcp-tools.js"; import { RECALL_NAVIGATION_MCP_TOOLS } from "./recall-navigation-mcp-tools.js"; import { MEMORY_BROWSE_MCP_TOOLS } from "./memory-browse-mcp-tools.js";
62
+ import { MEETINGS_MCP_TOOLS } from "./meetings/mcp-tools.js";
63
+ import { DEEP_RECALL_MCP_TOOLS } from "./deep-recall-mcp-tools.js";
64
+ import { RECALL_NAVIGATION_MCP_TOOLS } from "./recall-navigation-mcp-tools.js";
65
+ import { MEMORY_BROWSE_MCP_TOOLS } from "./memory-browse-mcp-tools.js";
57
66
  import { WEARABLES_MCP_TOOLS } from "./wearables/mcp-tools.js";
58
- import { WHO_KNOWS_MCP_TOOLS } from "./who-knows.js"; import { LOCATION_MCP_TOOLS } from "./location/mcp-tools.js"; import { STANDUP_MCP_TOOLS } from "./standup/mcp-tools.js";
67
+ import { WHO_KNOWS_MCP_TOOLS } from "./who-knows.js";
68
+ import { LOCATION_MCP_TOOLS } from "./location/mcp-tools.js";
69
+ import { STANDUP_MCP_TOOLS } from "./standup/mcp-tools.js";
59
70
  import { RECALL_WHY_MCP_TOOLS } from "./access-recall-diagnostics.js";
60
71
  import { PROMOTION_CANDIDATES_MCP_TOOLS } from "./memory-subject.js";
61
72
  import { EXTERNAL_WIKI_MCP_TOOLS } from "./external-wiki-mcp-tools.js";
@@ -170,13 +181,26 @@ export const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> =
170
181
  // Fully migrated through the strict-schema boundary (#1668).
171
182
  "engram.recall": "recall",
172
183
  "engram.recall_explain": "recall_explain",
173
- "engram.set_coding_context": "set_coding_context", "engram.recall_tier_explain": "recall_tier_explain",
174
- "engram.recall_xray": "recall_xray", "engram.recall_why": "recall_why", "engram.who_knows": "who_knows", "engram.promotion_candidates": "promotion_candidates",
175
- "engram.wearables_status": "wearables_status", "engram.wearables_sync": "wearables_sync",
176
- "engram.location_status": "location_status", "engram.location_check": "location_check", "engram.location_sync": "location_sync",
177
- "engram.location_backfill": "location_backfill", "engram.location_day": "location_day",
178
- "engram.transcript_day": "transcript_day", "engram.transcript_search": "transcript_search",
179
- "engram.transcript_memories": "transcript_memories", "engram.meetings_list": "meetings_list", "engram.meetings_get": "meetings_get", "engram.meetings_build": "meetings_build", "engram.standup": "standup",
184
+ "engram.set_coding_context": "set_coding_context",
185
+ "engram.recall_tier_explain": "recall_tier_explain",
186
+ "engram.recall_xray": "recall_xray",
187
+ "engram.recall_why": "recall_why",
188
+ "engram.who_knows": "who_knows",
189
+ "engram.promotion_candidates": "promotion_candidates",
190
+ "engram.wearables_status": "wearables_status",
191
+ "engram.wearables_sync": "wearables_sync",
192
+ "engram.location_status": "location_status",
193
+ "engram.location_check": "location_check",
194
+ "engram.location_sync": "location_sync",
195
+ "engram.location_backfill": "location_backfill",
196
+ "engram.location_day": "location_day",
197
+ "engram.transcript_day": "transcript_day",
198
+ "engram.transcript_search": "transcript_search",
199
+ "engram.transcript_memories": "transcript_memories",
200
+ "engram.meetings_list": "meetings_list",
201
+ "engram.meetings_get": "meetings_get",
202
+ "engram.meetings_build": "meetings_build",
203
+ "engram.standup": "standup",
180
204
  "engram.action_confidence": "action_confidence",
181
205
  "engram.chatgpt_memory_inspector": "chatgpt_memory_inspector",
182
206
  "engram.day_summary": "day_summary",
@@ -187,7 +211,8 @@ export const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> =
187
211
  "engram.entity_synthesis_run": "entity_synthesis_run",
188
212
  "engram.procedure_mining_run": "procedure_mining_run",
189
213
  "engram.pattern_reinforcement_run": "pattern_reinforcement_run",
190
- "engram.procedural_stats": "procedural_stats", "engram.procedure_library_maintenance": "procedure_library_maintenance",
214
+ "engram.procedural_stats": "procedural_stats",
215
+ "engram.procedure_library_maintenance": "procedure_library_maintenance",
191
216
  "engram.memory_timeline": "memory_timeline",
192
217
  "engram.suggestion_submit": "suggestion_submit",
193
218
  "engram.entity_get": "entity_get",
@@ -249,7 +274,14 @@ export const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> =
249
274
  "engram.console_state": "console_state",
250
275
  "engram.dreams_status": "dreams_status",
251
276
  "engram.dreams_run": "dreams_run",
252
- ...SUPPORT_PASSPORT_MCP_MIGRATED_OPERATIONS, ...MCP_ADMIN_OPS_MIGRATED_OPERATIONS, "engram.deep_recall": "deep_recall", "engram.memory_expand": "memory_expand", "engram.memory_traverse": "memory_traverse", "engram.memory_ls": "memory_ls", "engram.memory_tree": "memory_tree", "engram.memory_find": "memory_find",
277
+ ...SUPPORT_PASSPORT_MCP_MIGRATED_OPERATIONS,
278
+ ...MCP_ADMIN_OPS_MIGRATED_OPERATIONS,
279
+ "engram.deep_recall": "deep_recall",
280
+ "engram.memory_expand": "memory_expand",
281
+ "engram.memory_traverse": "memory_traverse",
282
+ "engram.memory_ls": "memory_ls",
283
+ "engram.memory_tree": "memory_tree",
284
+ "engram.memory_find": "memory_find",
253
285
  "engram.memory_chat": "chat_message",
254
286
  };
255
287
 
@@ -570,7 +602,8 @@ export class EngramMcpServer {
570
602
  },
571
603
  stateView: {
572
604
  type: "boolean",
573
- description: "Opt in to state-aware recall views (issue #1952); ORs with the recallStateViews config flag.",
605
+ description:
606
+ "Opt in to state-aware recall views (issue #1952); ORs with the recallStateViews config flag.",
574
607
  },
575
608
  },
576
609
  required: ["query"],
@@ -690,7 +723,15 @@ export class EngramMcpServer {
690
723
  additionalProperties: false,
691
724
  },
692
725
  },
693
- ...WEARABLES_MCP_TOOLS, ...MEETINGS_MCP_TOOLS, ...WHO_KNOWS_MCP_TOOLS, ...PROMOTION_CANDIDATES_MCP_TOOLS, ...LOCATION_MCP_TOOLS, ...STANDUP_MCP_TOOLS, ...DEEP_RECALL_MCP_TOOLS, ...(service.recallNavigationEnabled !== false ? RECALL_NAVIGATION_MCP_TOOLS : []), ...MEMORY_BROWSE_MCP_TOOLS,
726
+ ...WEARABLES_MCP_TOOLS,
727
+ ...MEETINGS_MCP_TOOLS,
728
+ ...WHO_KNOWS_MCP_TOOLS,
729
+ ...PROMOTION_CANDIDATES_MCP_TOOLS,
730
+ ...LOCATION_MCP_TOOLS,
731
+ ...STANDUP_MCP_TOOLS,
732
+ ...DEEP_RECALL_MCP_TOOLS,
733
+ ...(service.recallNavigationEnabled !== false ? RECALL_NAVIGATION_MCP_TOOLS : []),
734
+ ...MEMORY_BROWSE_MCP_TOOLS,
694
735
  ...RECALL_WHY_MCP_TOOLS,
695
736
  ...(service.supportPassportEnabled ? SUPPORT_PASSPORT_MCP_TOOLS : []),
696
737
  {
@@ -1089,7 +1130,11 @@ export class EngramMcpServer {
1089
1130
  namespace: { type: "string" },
1090
1131
  cwd: { type: "string", description: "Working directory for auto git-context resolution." },
1091
1132
  projectTag: { type: "string", description: "Project tag for non-git project scoping." },
1092
- deadlineMs: { type: "number", minimum: 0 },
1133
+ deadlineMs: {
1134
+ type: "number",
1135
+ minimum: 0,
1136
+ description: "Budget in milliseconds from now; the flush aborts when it elapses.",
1137
+ },
1093
1138
  },
1094
1139
  required: ["sessionKey"],
1095
1140
  additionalProperties: false,
@@ -1375,7 +1420,12 @@ export class EngramMcpServer {
1375
1420
  description:
1376
1421
  "QMD collection. With namespaces enabled, omitted, base, and 'global' searches stay scoped to readable namespaces; namespace-derived collections require matching namespace access.",
1377
1422
  },
1378
- mode: { type: "string", enum: ["search", "hybrid", "bm25", "vector"], description: "Ranking mode; omitted uses the backend default. Not supported with 'collection' on a flat corpus." },
1423
+ mode: {
1424
+ type: "string",
1425
+ enum: ["search", "hybrid", "bm25", "vector"],
1426
+ description:
1427
+ "Ranking mode; omitted uses the backend default. Not supported with 'collection' on a flat corpus.",
1428
+ },
1379
1429
  },
1380
1430
  required: ["query"],
1381
1431
  additionalProperties: false,
@@ -1587,9 +1637,16 @@ export class EngramMcpServer {
1587
1637
  type: "object",
1588
1638
  properties: {
1589
1639
  since: { type: "string", description: "Lookback window (e.g. 'yesterday', '3d', '1w', '24h')." },
1590
- focus: { type: "string", description: "Optional focus filter (e.g. 'person:Jane Doe', 'project:remnic-core', 'topic:retrieval')." },
1640
+ focus: {
1641
+ type: "string",
1642
+ description:
1643
+ "Optional focus filter (e.g. 'person:Jane Doe', 'project:remnic-core', 'topic:retrieval').",
1644
+ },
1591
1645
  namespace: { type: "string" },
1592
- includeLocation: { type: "boolean", description: "Opt-in: append matched location place names (location gates apply)." },
1646
+ includeLocation: {
1647
+ type: "boolean",
1648
+ description: "Opt-in: append matched location place names (location gates apply).",
1649
+ },
1593
1650
  format: { type: "string", enum: ["markdown", "json"] },
1594
1651
  maxFollowups: {
1595
1652
  type: "number",
@@ -2256,9 +2313,10 @@ export class EngramMcpServer {
2256
2313
  // token's ops allow-list via the same map callTool uses. Unrestricted
2257
2314
  // tokens (ops axis absent) see everything; unmapped tool ⇒ "" ⇒ hidden.
2258
2315
  const caps = tokenCapabilityStore.getStore();
2259
- const tools = caps?.ops === undefined
2260
- ? this.tools
2261
- : this.tools.filter((t) => capabilityAllowsOp(caps, MCP_MIGRATED_OPERATIONS[toLegacyToolName(t.name)] ?? ""));
2316
+ const tools =
2317
+ caps?.ops === undefined
2318
+ ? this.tools
2319
+ : this.tools.filter((t) => capabilityAllowsOp(caps, MCP_MIGRATED_OPERATIONS[toLegacyToolName(t.name)] ?? ""));
2262
2320
  return { jsonrpc: "2.0", id, result: { tools } };
2263
2321
  }
2264
2322
  if (method === "resources/list") {
@@ -2370,7 +2428,7 @@ export class EngramMcpServer {
2370
2428
  options?.enforceWriteQuota,
2371
2429
  options?.recordWriteCommit,
2372
2430
  options?.sourceConnector,
2373
- options?.abortSignal,
2431
+ options?.abortSignal
2374
2432
  );
2375
2433
  if (isReadOnlyToolName(name)) {
2376
2434
  throwMcpAbort(options?.abortSignal, "MCP request aborted before response");
@@ -2588,7 +2646,7 @@ export class EngramMcpServer {
2588
2646
  enforceWriteQuota?: () => void | Promise<void>,
2589
2647
  recordWriteCommit?: () => void,
2590
2648
  sourceConnector?: string,
2591
- abortSignal?: AbortSignal,
2649
+ abortSignal?: AbortSignal
2592
2650
  ): Promise<unknown> {
2593
2651
  const migrated = MCP_MIGRATED_OPERATIONS[toLegacyToolName(name)];
2594
2652
  if (!migrated) {
@@ -2604,8 +2662,7 @@ export class EngramMcpServer {
2604
2662
  const visible = this.tools
2605
2663
  .filter(
2606
2664
  (t) =>
2607
- caps?.ops === undefined
2608
- || capabilityAllowsOp(caps, MCP_MIGRATED_OPERATIONS[toLegacyToolName(t.name)] ?? ""),
2665
+ caps?.ops === undefined || capabilityAllowsOp(caps, MCP_MIGRATED_OPERATIONS[toLegacyToolName(t.name)] ?? "")
2609
2666
  )
2610
2667
  .map((t) => t.name);
2611
2668
  throw new Error(unknownToolError(name, visible));
@@ -2641,7 +2698,7 @@ export class EngramMcpServer {
2641
2698
  enforceNamespaceAllowList(
2642
2699
  tokenCapabilityStore.getStore(),
2643
2700
  scope?.namespace,
2644
- this.service.configRef?.defaultNamespace,
2701
+ this.service.configRef?.defaultNamespace
2645
2702
  );
2646
2703
  }
2647
2704
  const chatResult = await processChatMessage({
@@ -2689,7 +2746,12 @@ export class EngramMcpServer {
2689
2746
  service: this.service,
2690
2747
  authenticatedPrincipal: effectivePrincipal,
2691
2748
  ...(enforceWriteQuota || recordWriteCommit
2692
- ? { hooks: { ...(enforceWriteQuota ? { enforceWriteQuota } : {}), ...(recordWriteCommit ? { recordWriteCommit } : {}) } }
2749
+ ? {
2750
+ hooks: {
2751
+ ...(enforceWriteQuota ? { enforceWriteQuota } : {}),
2752
+ ...(recordWriteCommit ? { recordWriteCommit } : {}),
2753
+ },
2754
+ }
2693
2755
  : {}),
2694
2756
  ...(sourceConnector ? { sourceConnector } : {}),
2695
2757
  ...(abortSignal ? { abortSignal } : {}),
@@ -511,11 +511,11 @@ test("health surfaces extraction liveness as degraded when the buffer is non-emp
511
511
  assert.equal(health.extraction.oldestBufferedTurnAgeMs, 10_000);
512
512
  assert.ok(
513
513
  health.extraction.degradedReason !== null && health.extraction.degradedReason.length > 0,
514
- "degraded reason is populated",
514
+ "degraded reason is populated"
515
515
  );
516
516
  const scopedHealth = await tokenCapabilityStore.run(
517
517
  { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
518
- () => service.health(),
518
+ () => service.health()
519
519
  );
520
520
  assert.equal(scopedHealth.extraction.lastExtractionAt, null);
521
521
  assert.equal(scopedHealth.extraction.degraded, true);
@@ -562,7 +562,7 @@ test("health reports extraction liveness ok when the buffer is empty (nothing to
562
562
  assert.equal(health.extraction.lastExtractionAt, oldTs);
563
563
  const scopedHealth = await tokenCapabilityStore.run(
564
564
  { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
565
- () => service.health(),
565
+ () => service.health()
566
566
  );
567
567
  assert.equal(scopedHealth.extraction.degraded, health.extraction.degraded);
568
568
  assert.equal(scopedHealth.extraction.lastExtractionAt, null);
@@ -685,7 +685,7 @@ test("health reports extraction liveness degraded when the buffer read fails (§
685
685
  assert.match(health.extraction.degradedReason ?? "", /buffer file corrupt/);
686
686
  const scopedHealth = await tokenCapabilityStore.run(
687
687
  { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
688
- () => service.health(),
688
+ () => service.health()
689
689
  );
690
690
  assert.equal(scopedHealth.extraction.lastExtractionAt, null);
691
691
  assert.match(scopedHealth.extraction.degradedReason ?? "", /extraction buffer unreadable/);
@@ -722,7 +722,7 @@ test("health reports extraction liveness degraded when the watermark (meta) read
722
722
  assert.match(health.extraction.degradedReason ?? "", /meta\.json unreadable/);
723
723
  const scopedHealth = await tokenCapabilityStore.run(
724
724
  { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
725
- () => service.health(),
725
+ () => service.health()
726
726
  );
727
727
  assert.equal(scopedHealth.extraction.lastExtractionAt, null);
728
728
  assert.match(scopedHealth.extraction.degradedReason ?? "", /extraction watermark unreadable/);
@@ -731,3 +731,39 @@ test("health reports extraction liveness degraded when the watermark (meta) read
731
731
  await rm(memoryDir, { recursive: true, force: true });
732
732
  }
733
733
  });
734
+
735
+ test("health surfaces extraction-LLM availability and last failure reason (#3140)", async () => {
736
+ const {
737
+ getExtractionLlmHealth,
738
+ recordExtractionLlmFailure,
739
+ recordExtractionLlmSuccess,
740
+ resetExtractionLlmHealthForTests,
741
+ } = await import("./extraction-llm-health.js");
742
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-llm-"));
743
+ const makeService = () =>
744
+ new EngramAccessService({
745
+ config: parseConfig({ memoryDir }),
746
+ qmd: makeQmd({}),
747
+ async getStorage() {
748
+ return { dir: memoryDir };
749
+ },
750
+ } as unknown as Orchestrator);
751
+ try {
752
+ resetExtractionLlmHealthForTests();
753
+ recordExtractionLlmFailure("no_models", Date.now());
754
+ const unhealthy = await makeService().health();
755
+ assert.equal(unhealthy.extraction.llmReachable, false);
756
+ assert.equal(unhealthy.extraction.lastFailureReason, "no_models");
757
+ assert.equal(unhealthy.extraction.lastFailureAt, getExtractionLlmHealth().lastFailureAt);
758
+
759
+ // A recovered extractor reads reachable with no stale reason.
760
+ recordExtractionLlmSuccess();
761
+ const healthy = await makeService().health();
762
+ assert.equal(healthy.extraction.llmReachable, true);
763
+ assert.equal(healthy.extraction.lastFailureReason, null);
764
+ assert.equal(healthy.extraction.lastFailureAt, null);
765
+ } finally {
766
+ resetExtractionLlmHealthForTests();
767
+ await rm(memoryDir, { recursive: true, force: true });
768
+ }
769
+ });
@@ -20,6 +20,7 @@ export interface EngramAccessExtractionForceFlushRequest extends CodingScopedWri
20
20
  sessionKey: string;
21
21
  namespace?: string;
22
22
  authenticatedPrincipal?: string;
23
+ /** Budget in milliseconds FROM NOW (not an absolute epoch); converted at the force-flush entry (#3140). */
23
24
  deadlineMs?: number;
24
25
  abortSignal?: AbortSignal;
25
26
  /** Internal HTTP hook invoked at the durable commit boundary. */