@remnic/core 9.3.704 → 9.3.706

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 (332) hide show
  1. package/dist/access-boundary.d.ts +6 -6
  2. package/dist/access-boundary.js +29 -29
  3. package/dist/access-cli.js +59 -57
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +5 -5
  6. package/dist/access-http.js +34 -33
  7. package/dist/access-mcp.d.ts +5 -5
  8. package/dist/access-mcp.js +33 -32
  9. package/dist/access-operations-batch.d.ts +2 -0
  10. package/dist/access-operations-batch.js +120 -0
  11. package/dist/access-operations.d.ts +6 -5
  12. package/dist/access-operations.js +32 -31
  13. package/dist/access-schema.js +3 -3
  14. package/dist/{access-service-C8hc8N2i.d.ts → access-service-j1c1gptF.d.ts} +3 -3
  15. package/dist/access-service.d.ts +5 -5
  16. package/dist/access-service.js +28 -28
  17. package/dist/access-surface-catalog.d.ts +5 -5
  18. package/dist/access-surface-catalog.js +57 -54
  19. package/dist/access-surface-catalog.js.map +1 -1
  20. package/dist/action-confidence.d.ts +1 -1
  21. package/dist/active-memory-bridge.d.ts +1 -1
  22. package/dist/active-recall.d.ts +1 -1
  23. package/dist/{auto-sync-3AAP25FV.js → auto-sync-24NNS3GU.js} +3 -3
  24. package/dist/behavior-learner.d.ts +1 -1
  25. package/dist/behavior-signals.d.ts +1 -1
  26. package/dist/bootstrap.d.ts +4 -4
  27. package/dist/briefing.d.ts +1 -1
  28. package/dist/briefing.js +7 -7
  29. package/dist/buffer-surprise-report.d.ts +1 -1
  30. package/dist/buffer.d.ts +1 -1
  31. package/dist/calibration.d.ts +1 -1
  32. package/dist/capabilities.d.ts +1 -1
  33. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
  34. package/dist/capsule-crypto-7FJQINUR.js.map +1 -0
  35. package/dist/{catalog-CAeU0e1C.d.ts → catalog-CKxilpzS.d.ts} +1 -1
  36. package/dist/causal-behavior.d.ts +1 -1
  37. package/dist/causal-behavior.js +5 -5
  38. package/dist/causal-chain.js +3 -3
  39. package/dist/causal-consolidation.d.ts +1 -1
  40. package/dist/causal-consolidation.js +11 -11
  41. package/dist/causal-retrieval.js +3 -3
  42. package/dist/causal-trajectory-graph.js +2 -2
  43. package/dist/causal-trajectory.js +1 -1
  44. package/dist/{chunk-CTY6QSLZ.js → chunk-24FGNOQS.js} +4 -4
  45. package/dist/{chunk-CTY6QSLZ.js.map → chunk-24FGNOQS.js.map} +1 -1
  46. package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
  47. package/dist/{chunk-NMW3T6T6.js → chunk-2VQYHHWB.js} +17 -11
  48. package/dist/chunk-2VQYHHWB.js.map +1 -0
  49. package/dist/{chunk-7G4KPGR3.js → chunk-3PTOZJOI.js} +2 -2
  50. package/dist/{chunk-PJ5MDXOF.js → chunk-4DZATVK5.js} +10 -10
  51. package/dist/{chunk-UOIRJ45Z.js → chunk-4E2QCH46.js} +2 -2
  52. package/dist/{chunk-KKK7YTYN.js → chunk-5GSUBCZM.js} +6 -2
  53. package/dist/chunk-5GSUBCZM.js.map +1 -0
  54. package/dist/{chunk-RYDT7LAI.js → chunk-66TSLESZ.js} +2 -2
  55. package/dist/chunk-66TSLESZ.js.map +1 -0
  56. package/dist/{chunk-IREVVFTM.js → chunk-6CIAGZ6X.js} +9 -1
  57. package/dist/chunk-6CIAGZ6X.js.map +1 -0
  58. package/dist/{chunk-QHNJVWF6.js → chunk-6HPJMR5I.js} +6 -6
  59. package/dist/{chunk-4NFVPDIL.js → chunk-74MYJSKB.js} +5 -5
  60. package/dist/{chunk-PKMQK2WY.js → chunk-773DPI6T.js} +4 -4
  61. package/dist/{chunk-AGNBY3VG.js → chunk-APJQ6UEA.js} +4 -4
  62. package/dist/{chunk-UNNDFYUX.js → chunk-ARV3AUOM.js} +5 -5
  63. package/dist/{chunk-XXDOJ5NL.js → chunk-BGAHTI4C.js} +7 -7
  64. package/dist/{chunk-6GHWF4QH.js → chunk-C63MK3WL.js} +2 -2
  65. package/dist/{chunk-VKJHM6PL.js → chunk-DGTDRIUO.js} +5 -5
  66. package/dist/{chunk-25FHSOEB.js → chunk-EJDAXR7O.js} +60 -6
  67. package/dist/chunk-EJDAXR7O.js.map +1 -0
  68. package/dist/{chunk-K7QRDDSR.js → chunk-ESMY4RJ4.js} +5 -5
  69. package/dist/{chunk-YLB7NMLD.js → chunk-GKI6LX5L.js} +2 -2
  70. package/dist/{chunk-TUPNAHHQ.js → chunk-HIV5E57C.js} +2 -2
  71. package/dist/{chunk-YOI3ELXF.js → chunk-IF362TF6.js} +2 -2
  72. package/dist/{chunk-SFOAQQDJ.js → chunk-IONFO7UK.js} +3 -3
  73. package/dist/{chunk-AE3C4PY6.js → chunk-IVCQW4C4.js} +2 -2
  74. package/dist/{chunk-6AFVIOVZ.js → chunk-K22IJO4R.js} +2 -2
  75. package/dist/{chunk-5W7CTZ2E.js → chunk-KQAFEZQX.js} +4 -4
  76. package/dist/chunk-M7R5R6OJ.js +355 -0
  77. package/dist/chunk-M7R5R6OJ.js.map +1 -0
  78. package/dist/{chunk-IX3UQT4H.js → chunk-MLLTU5FX.js} +1 -1
  79. package/dist/chunk-MLLTU5FX.js.map +1 -0
  80. package/dist/{chunk-ORXVO6TH.js → chunk-MRX6ZXHZ.js} +6 -6
  81. package/dist/chunk-N75N5SNX.js +1303 -0
  82. package/dist/chunk-N75N5SNX.js.map +1 -0
  83. package/dist/{chunk-S24J5LLQ.js → chunk-NM6TSEGQ.js} +3 -3
  84. package/dist/{chunk-QDIVMS25.js → chunk-NUWZFSKC.js} +2 -2
  85. package/dist/{chunk-53EEQYE5.js → chunk-OMSTU233.js} +4 -4
  86. package/dist/{chunk-R64MNFPV.js → chunk-PDJQVAGM.js} +114 -77
  87. package/dist/chunk-PDJQVAGM.js.map +1 -0
  88. package/dist/{chunk-WAHI7SPK.js → chunk-RH2OSRQY.js} +2 -2
  89. package/dist/{chunk-YTMDF6S7.js → chunk-SPETAWFE.js} +2 -2
  90. package/dist/{chunk-ZXFNSKPY.js → chunk-STYMKPFT.js} +34 -34
  91. package/dist/{chunk-OMNTQPZO.js → chunk-TKZ3AL5V.js} +2 -2
  92. package/dist/{chunk-ABCGDW3A.js → chunk-VYZNWH4J.js} +40 -9
  93. package/dist/chunk-VYZNWH4J.js.map +1 -0
  94. package/dist/{chunk-QV5WFNZ2.js → chunk-W2S3Z5MT.js} +2 -2
  95. package/dist/{chunk-OCFNG4LB.js → chunk-W2WQ4LE7.js} +2 -2
  96. package/dist/{chunk-DE2OPIQD.js → chunk-WDH3KUZU.js} +6 -6
  97. package/dist/{chunk-3EHCV6YV.js → chunk-WQADZ3ZY.js} +67 -67
  98. package/dist/{chunk-OOEVMJK4.js → chunk-WSWYIKXX.js} +6 -6
  99. package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
  100. package/dist/{chunk-WN4GHSDH.js → chunk-XKMDDM7P.js} +2 -2
  101. package/dist/{chunk-6Q7JFY4P.js → chunk-Y6YHAGQP.js} +2 -2
  102. package/dist/{chunk-KF74X62T.js → chunk-YGKUAX2B.js} +4 -4
  103. package/dist/{chunk-YN4ZT4CW.js → chunk-YI7RZO7Y.js} +1 -1
  104. package/dist/{cli-ChE0XlJY.d.ts → cli-CbT-pyM4.d.ts} +3 -3
  105. package/dist/cli.d.ts +6 -6
  106. package/dist/cli.js +58 -57
  107. package/dist/compounding/engine.d.ts +1 -1
  108. package/dist/compounding/engine.js +7 -7
  109. package/dist/compounding/preference-consolidator.d.ts +1 -1
  110. package/dist/compression-optimizer.d.ts +1 -1
  111. package/dist/config.d.ts +1 -1
  112. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  113. package/dist/connectors/codex-materialize-runner.js +7 -7
  114. package/dist/connectors/codex-materialize.d.ts +1 -1
  115. package/dist/connectors/index.d.ts +1 -1
  116. package/dist/connectors/index.js +7 -7
  117. package/dist/consolidation-provenance-check.d.ts +1 -1
  118. package/dist/consolidation-undo.d.ts +1 -1
  119. package/dist/contradiction/index.d.ts +1 -1
  120. package/dist/conversation-index/backend.d.ts +1 -1
  121. package/dist/conversation-index/chunker.d.ts +1 -1
  122. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  123. package/dist/conversation-index/indexer.d.ts +1 -1
  124. package/dist/conversation-index/search.d.ts +1 -1
  125. package/dist/day-summary.d.ts +1 -1
  126. package/dist/delinearize.d.ts +1 -1
  127. package/dist/direct-answer-wiring.d.ts +1 -1
  128. package/dist/direct-answer.d.ts +1 -1
  129. package/dist/embedding-fallback.d.ts +1 -1
  130. package/dist/enrichment/index.d.ts +1 -1
  131. package/dist/entity-retrieval.d.ts +1 -1
  132. package/dist/entity-retrieval.js +7 -7
  133. package/dist/entity-schema.d.ts +1 -1
  134. package/dist/event-time.d.ts +35 -1
  135. package/dist/event-time.js +6 -320
  136. package/dist/event-time.js.map +1 -1
  137. package/dist/explicit-capture.d.ts +4 -4
  138. package/dist/extraction-faithfulness.d.ts +1 -1
  139. package/dist/extraction-judge-telemetry.d.ts +1 -1
  140. package/dist/extraction-judge-training.d.ts +1 -1
  141. package/dist/extraction-judge.d.ts +1 -1
  142. package/dist/extraction.d.ts +10 -1
  143. package/dist/extraction.js +3 -3
  144. package/dist/fallback-llm.d.ts +1 -1
  145. package/dist/{forget-6SOIPUMQ.js → forget-U66KPDPY.js} +3 -3
  146. package/dist/{graph-edge-decay-D7OESCBR.js → graph-edge-decay-JLOF3YW4.js} +3 -3
  147. package/dist/graph-snapshot.js +3 -3
  148. package/dist/graph.js +2 -2
  149. package/dist/identity-continuity.d.ts +1 -1
  150. package/dist/importance.d.ts +1 -1
  151. package/dist/index.d.ts +9 -9
  152. package/dist/index.js +103 -101
  153. package/dist/index.js.map +1 -1
  154. package/dist/intent.d.ts +1 -1
  155. package/dist/lcm/engine.d.ts +1 -1
  156. package/dist/lcm/engine.js +2 -2
  157. package/dist/lcm/index.d.ts +1 -1
  158. package/dist/lcm/index.js +4 -4
  159. package/dist/lcm/tools.d.ts +1 -1
  160. package/dist/lifecycle.d.ts +1 -1
  161. package/dist/live-connectors-runner.d.ts +1 -1
  162. package/dist/local-llm.d.ts +1 -1
  163. package/dist/maintenance/memory-governance.d.ts +1 -1
  164. package/dist/maintenance/memory-governance.js +8 -8
  165. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +7 -7
  166. package/dist/maintenance/rebuild-memory-projection.js +9 -9
  167. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  168. package/dist/memory-action-policy.d.ts +1 -1
  169. package/dist/memory-cache.d.ts +1 -1
  170. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  171. package/dist/memory-projection-store.d.ts +1 -1
  172. package/dist/memory-provenance.d.ts +1 -1
  173. package/dist/memory-worth-outcomes.d.ts +1 -1
  174. package/dist/models-json.d.ts +1 -1
  175. package/dist/namespaces/migrate.d.ts +2 -2
  176. package/dist/namespaces/migrate.js +11 -11
  177. package/dist/namespaces/principal.d.ts +1 -1
  178. package/dist/namespaces/search.d.ts +1 -1
  179. package/dist/namespaces/search.js +3 -3
  180. package/dist/namespaces/storage.d.ts +2 -2
  181. package/dist/namespaces/storage.js +7 -7
  182. package/dist/native-knowledge.d.ts +1 -1
  183. package/dist/operator-toolkit.d.ts +1 -1
  184. package/dist/operator-toolkit.js +18 -18
  185. package/dist/orchestration/maintenance.d.ts +2 -2
  186. package/dist/orchestration/maintenance.js +9 -9
  187. package/dist/{orchestrator-m_PnhyHj.d.ts → orchestrator-D4ovYV3x.d.ts} +3 -3
  188. package/dist/orchestrator.d.ts +4 -4
  189. package/dist/orchestrator.js +46 -45
  190. package/dist/patterns-cli.d.ts +1 -1
  191. package/dist/policy-runtime.d.ts +1 -1
  192. package/dist/provenance.d.ts +1 -1
  193. package/dist/qmd-recall-cache.d.ts +1 -1
  194. package/dist/qmd.d.ts +1 -1
  195. package/dist/recall-disclosure-escalation.d.ts +1 -1
  196. package/dist/recall-explain-renderer.d.ts +1 -1
  197. package/dist/recall-explain-renderer.js +3 -3
  198. package/dist/recall-planner-llm.d.ts +1 -1
  199. package/dist/recall-state.d.ts +1 -1
  200. package/dist/recall-tag-filter.d.ts +1 -1
  201. package/dist/recall-xray-cli.d.ts +1 -1
  202. package/dist/recall-xray-cli.js +4 -4
  203. package/dist/recall-xray-renderer.d.ts +1 -1
  204. package/dist/recall-xray-renderer.js +3 -3
  205. package/dist/recall-xray.d.ts +1 -1
  206. package/dist/recall-xray.js +2 -2
  207. package/dist/resolve-auth-token.d.ts +1 -1
  208. package/dist/resume-bundles.js +1 -1
  209. package/dist/retrieval-agents.d.ts +1 -1
  210. package/dist/retrieval-tiers.d.ts +1 -1
  211. package/dist/routing/engine.d.ts +1 -1
  212. package/dist/routing/store.d.ts +1 -1
  213. package/dist/schemas.d.ts +38 -0
  214. package/dist/schemas.js +1 -1
  215. package/dist/search/embed-helper.d.ts +1 -1
  216. package/dist/search/factory.d.ts +1 -1
  217. package/dist/search/factory.js +2 -2
  218. package/dist/search/index.d.ts +1 -1
  219. package/dist/search/index.js +4 -4
  220. package/dist/search/lancedb-backend.d.ts +1 -1
  221. package/dist/search/meilisearch-backend.d.ts +1 -1
  222. package/dist/search/noop-backend.d.ts +1 -1
  223. package/dist/search/orama-backend.d.ts +1 -1
  224. package/dist/search/port.d.ts +1 -1
  225. package/dist/search/remote-backend.d.ts +1 -1
  226. package/dist/{semantic-consolidation-DVBbq6Wr.d.ts → semantic-consolidation-DyMUCsfN.d.ts} +1 -1
  227. package/dist/semantic-consolidation.d.ts +2 -2
  228. package/dist/semantic-consolidation.js +9 -9
  229. package/dist/semantic-rule-promotion.js +7 -7
  230. package/dist/semantic-rule-verifier.d.ts +1 -1
  231. package/dist/semantic-rule-verifier.js +8 -8
  232. package/dist/session-observer-bands.d.ts +1 -1
  233. package/dist/session-observer-state.d.ts +1 -1
  234. package/dist/shared-context/manager.d.ts +1 -1
  235. package/dist/signal.d.ts +1 -1
  236. package/dist/storage.d.ts +5 -1
  237. package/dist/storage.js +6 -6
  238. package/dist/summarizer.d.ts +1 -1
  239. package/dist/summary-snapshot.d.ts +1 -1
  240. package/dist/temporal-supersession.d.ts +1 -1
  241. package/dist/temporal-supersession.js +2 -2
  242. package/dist/temporal-validity.d.ts +2 -2
  243. package/dist/temporal-validity.js +1 -1
  244. package/dist/threading.d.ts +1 -1
  245. package/dist/tier-migration.d.ts +1 -1
  246. package/dist/tier-routing.d.ts +1 -1
  247. package/dist/topics.d.ts +1 -1
  248. package/dist/transcript.d.ts +1 -1
  249. package/dist/transfer/backup.js +2 -2
  250. package/dist/transfer/capsule-export.js +2 -2
  251. package/dist/transfer/capsule-import.js +2 -2
  252. package/dist/transfer/import-sqlite.js +2 -2
  253. package/dist/{types-CJrvHJjx.d.ts → types-Couvz-L3.d.ts} +12 -2
  254. package/dist/types.d.ts +1 -1
  255. package/dist/types.js +1 -1
  256. package/dist/utility-runtime.d.ts +1 -1
  257. package/dist/verified-recall.js +8 -8
  258. package/package.json +2 -2
  259. package/src/access-boundary.ts +102 -1
  260. package/src/access-http.ts +54 -0
  261. package/src/access-operations-batch.ts +1468 -0
  262. package/src/access-operations.ts +4 -0
  263. package/src/access-surface-catalog.test.ts +17 -1
  264. package/src/access-surface-catalog.ts +57 -54
  265. package/src/event-time.ts +73 -0
  266. package/src/extraction-eventtime-wiring.test.ts +269 -0
  267. package/src/extraction.ts +50 -3
  268. package/src/orchestrator.ts +71 -17
  269. package/src/schemas.ts +12 -0
  270. package/src/storage-contract/atomicity.test.ts +113 -0
  271. package/src/storage-contract/cache-coherence.test.ts +100 -0
  272. package/src/storage-contract/content-hash.test.ts +102 -0
  273. package/src/storage-contract/failure-semantics.test.ts +108 -0
  274. package/src/storage-contract/harness.ts +148 -0
  275. package/src/storage-contract/namespace-routing.test.ts +135 -0
  276. package/src/storage-contract/round-trip.test.ts +226 -0
  277. package/src/storage-contract/surface.test.ts +90 -0
  278. package/src/storage-contract/versioning.test.ts +139 -0
  279. package/src/storage.ts +13 -2
  280. package/src/temporal-validity.test.ts +33 -0
  281. package/src/temporal-validity.ts +24 -1
  282. package/src/types.ts +12 -2
  283. package/dist/chunk-25FHSOEB.js.map +0 -1
  284. package/dist/chunk-ABCGDW3A.js.map +0 -1
  285. package/dist/chunk-IREVVFTM.js.map +0 -1
  286. package/dist/chunk-IX3UQT4H.js.map +0 -1
  287. package/dist/chunk-KKK7YTYN.js.map +0 -1
  288. package/dist/chunk-NMW3T6T6.js.map +0 -1
  289. package/dist/chunk-R64MNFPV.js.map +0 -1
  290. package/dist/chunk-RYDT7LAI.js.map +0 -1
  291. /package/dist/{capsule-crypto-GWVG7LGC.js.map → access-operations-batch.js.map} +0 -0
  292. /package/dist/{auto-sync-3AAP25FV.js.map → auto-sync-24NNS3GU.js.map} +0 -0
  293. /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
  294. /package/dist/{chunk-7G4KPGR3.js.map → chunk-3PTOZJOI.js.map} +0 -0
  295. /package/dist/{chunk-PJ5MDXOF.js.map → chunk-4DZATVK5.js.map} +0 -0
  296. /package/dist/{chunk-UOIRJ45Z.js.map → chunk-4E2QCH46.js.map} +0 -0
  297. /package/dist/{chunk-QHNJVWF6.js.map → chunk-6HPJMR5I.js.map} +0 -0
  298. /package/dist/{chunk-4NFVPDIL.js.map → chunk-74MYJSKB.js.map} +0 -0
  299. /package/dist/{chunk-PKMQK2WY.js.map → chunk-773DPI6T.js.map} +0 -0
  300. /package/dist/{chunk-AGNBY3VG.js.map → chunk-APJQ6UEA.js.map} +0 -0
  301. /package/dist/{chunk-UNNDFYUX.js.map → chunk-ARV3AUOM.js.map} +0 -0
  302. /package/dist/{chunk-XXDOJ5NL.js.map → chunk-BGAHTI4C.js.map} +0 -0
  303. /package/dist/{chunk-6GHWF4QH.js.map → chunk-C63MK3WL.js.map} +0 -0
  304. /package/dist/{chunk-VKJHM6PL.js.map → chunk-DGTDRIUO.js.map} +0 -0
  305. /package/dist/{chunk-K7QRDDSR.js.map → chunk-ESMY4RJ4.js.map} +0 -0
  306. /package/dist/{chunk-YLB7NMLD.js.map → chunk-GKI6LX5L.js.map} +0 -0
  307. /package/dist/{chunk-TUPNAHHQ.js.map → chunk-HIV5E57C.js.map} +0 -0
  308. /package/dist/{chunk-YOI3ELXF.js.map → chunk-IF362TF6.js.map} +0 -0
  309. /package/dist/{chunk-SFOAQQDJ.js.map → chunk-IONFO7UK.js.map} +0 -0
  310. /package/dist/{chunk-AE3C4PY6.js.map → chunk-IVCQW4C4.js.map} +0 -0
  311. /package/dist/{chunk-6AFVIOVZ.js.map → chunk-K22IJO4R.js.map} +0 -0
  312. /package/dist/{chunk-5W7CTZ2E.js.map → chunk-KQAFEZQX.js.map} +0 -0
  313. /package/dist/{chunk-ORXVO6TH.js.map → chunk-MRX6ZXHZ.js.map} +0 -0
  314. /package/dist/{chunk-S24J5LLQ.js.map → chunk-NM6TSEGQ.js.map} +0 -0
  315. /package/dist/{chunk-QDIVMS25.js.map → chunk-NUWZFSKC.js.map} +0 -0
  316. /package/dist/{chunk-53EEQYE5.js.map → chunk-OMSTU233.js.map} +0 -0
  317. /package/dist/{chunk-WAHI7SPK.js.map → chunk-RH2OSRQY.js.map} +0 -0
  318. /package/dist/{chunk-YTMDF6S7.js.map → chunk-SPETAWFE.js.map} +0 -0
  319. /package/dist/{chunk-ZXFNSKPY.js.map → chunk-STYMKPFT.js.map} +0 -0
  320. /package/dist/{chunk-OMNTQPZO.js.map → chunk-TKZ3AL5V.js.map} +0 -0
  321. /package/dist/{chunk-QV5WFNZ2.js.map → chunk-W2S3Z5MT.js.map} +0 -0
  322. /package/dist/{chunk-OCFNG4LB.js.map → chunk-W2WQ4LE7.js.map} +0 -0
  323. /package/dist/{chunk-DE2OPIQD.js.map → chunk-WDH3KUZU.js.map} +0 -0
  324. /package/dist/{chunk-3EHCV6YV.js.map → chunk-WQADZ3ZY.js.map} +0 -0
  325. /package/dist/{chunk-OOEVMJK4.js.map → chunk-WSWYIKXX.js.map} +0 -0
  326. /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
  327. /package/dist/{chunk-WN4GHSDH.js.map → chunk-XKMDDM7P.js.map} +0 -0
  328. /package/dist/{chunk-6Q7JFY4P.js.map → chunk-Y6YHAGQP.js.map} +0 -0
  329. /package/dist/{chunk-KF74X62T.js.map → chunk-YGKUAX2B.js.map} +0 -0
  330. /package/dist/{chunk-YN4ZT4CW.js.map → chunk-YI7RZO7Y.js.map} +0 -0
  331. /package/dist/{forget-6SOIPUMQ.js.map → forget-U66KPDPY.js.map} +0 -0
  332. /package/dist/{graph-edge-decay-D7OESCBR.js.map → graph-edge-decay-JLOF3YW4.js.map} +0 -0
@@ -1,27 +1,28 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-ORXVO6TH.js";
4
+ } from "./chunk-MRX6ZXHZ.js";
5
5
  import "./chunk-7FL4CNPV.js";
6
- import "./chunk-NMW3T6T6.js";
6
+ import "./chunk-ZBJMUXZH.js";
7
+ import "./chunk-2VQYHHWB.js";
7
8
  import "./chunk-M7XQSUBB.js";
8
9
  import "./chunk-3JJWNZTT.js";
9
10
  import "./chunk-5UZXUTVO.js";
10
11
  import "./chunk-5GPPACXK.js";
11
- import "./chunk-OMNTQPZO.js";
12
- import "./chunk-IREVVFTM.js";
12
+ import "./chunk-TKZ3AL5V.js";
13
+ import "./chunk-6CIAGZ6X.js";
13
14
  import "./chunk-SVOZFLIQ.js";
14
15
  import "./chunk-LTJAMRGI.js";
15
16
  import "./chunk-J6A3CX5N.js";
16
- import "./chunk-IX3UQT4H.js";
17
+ import "./chunk-MLLTU5FX.js";
18
+ import "./chunk-RULE4VG5.js";
17
19
  import "./chunk-SCU65EZI.js";
18
20
  import "./chunk-MB5RSUW6.js";
19
21
  import "./chunk-6KYMPV2O.js";
20
22
  import "./chunk-AWJ2FHCF.js";
21
23
  import "./chunk-42JKGUFJ.js";
22
- import "./chunk-RULE4VG5.js";
23
- import "./chunk-LDXUBPMO.js";
24
24
  import "./chunk-DM2T26WE.js";
25
+ import "./chunk-LDXUBPMO.js";
25
26
  import "./chunk-FEB7W5JG.js";
26
27
  import "./chunk-G7D6GZ5J.js";
27
28
  import "./chunk-VF4XKTX3.js";
@@ -42,7 +43,6 @@ import "./chunk-EYIEWJNI.js";
42
43
  import "./chunk-JUC24CTX.js";
43
44
  import "./chunk-NU3CSQ4H.js";
44
45
  import "./chunk-6MKAMLQL.js";
45
- import "./chunk-ZBJMUXZH.js";
46
46
  import "./chunk-PZ5AY32C.js";
47
47
  export {
48
48
  compareVerifiedEpisodeResults,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.704",
3
+ "version": "9.3.706",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2966,7 +2966,7 @@
2966
2966
  "core"
2967
2967
  ],
2968
2968
  "peerDependencies": {
2969
- "@remnic/coding-graph": "^9.3.704"
2969
+ "@remnic/coding-graph": "^9.3.706"
2970
2970
  },
2971
2971
  "peerDependenciesMeta": {
2972
2972
  "@remnic/coding-graph": {
@@ -53,7 +53,108 @@ export type OperationName =
53
53
  | "codegraph_search_code"
54
54
  | "codegraph_manage_adr"
55
55
  | "codegraph_ingest_traces"
56
- | "coding_delta";
56
+ | "coding_delta"
57
+ // Remaining MCP/HTTP handlers migrated through the boundary (issue #1525).
58
+ | "recall"
59
+ | "recall_explain"
60
+ | "set_coding_context"
61
+ | "recall_tier_explain"
62
+ | "recall_xray"
63
+ | "wearables_status"
64
+ | "wearables_sync"
65
+ | "transcript_day"
66
+ | "transcript_search"
67
+ | "transcript_memories"
68
+ | "action_confidence"
69
+ | "chatgpt_memory_inspector"
70
+ | "day_summary"
71
+ | "capsule_export"
72
+ | "capsule_import"
73
+ | "capsule_list"
74
+ | "memory_governance_run"
75
+ | "procedure_mining_run"
76
+ | "pattern_reinforcement_run"
77
+ | "procedural_stats"
78
+ | "memory_timeline"
79
+ | "suggestion_submit"
80
+ | "entity_get"
81
+ | "review_queue_list"
82
+ | "observe"
83
+ | "lcm_search"
84
+ | "lcm_compaction_flush"
85
+ | "lcm_compaction_record"
86
+ | "continuity_audit_generate"
87
+ | "continuity_incident_open"
88
+ | "continuity_incident_close"
89
+ | "continuity_incident_list"
90
+ | "continuity_loop_add_or_update"
91
+ | "continuity_loop_review"
92
+ | "identity_anchor_get"
93
+ | "identity_anchor_update"
94
+ | "memory_identity"
95
+ | "work_task"
96
+ | "work_project"
97
+ | "work_board"
98
+ | "shared_context_write_output"
99
+ | "shared_feedback_record"
100
+ | "shared_priorities_append"
101
+ | "shared_context_cross_signals_run"
102
+ | "shared_context_curate_daily"
103
+ | "compounding_weekly_synthesize"
104
+ | "compounding_promote_candidate"
105
+ | "compression_guidelines_optimize"
106
+ | "compression_guidelines_activate"
107
+ | "memory_profile"
108
+ | "memory_entities_list"
109
+ | "memory_questions"
110
+ | "memory_last_recall"
111
+ | "memory_intent_debug"
112
+ | "memory_qmd_debug"
113
+ | "memory_graph_explain"
114
+ | "graph_snapshot"
115
+ | "memory_feedback"
116
+ | "memory_promote"
117
+ | "memory_outcome"
118
+ | "memory_action_apply"
119
+ | "context_checkpoint"
120
+ | "briefing"
121
+ | "review_list"
122
+ | "review_resolve"
123
+ | "contradiction_scan_run"
124
+ | "memory_summarize_hourly"
125
+ | "conversation_index_update"
126
+ | "profiling_report"
127
+ | "graph_edge_decay_run"
128
+ | "live_connectors_run"
129
+ | "peer_list"
130
+ | "peer_get"
131
+ | "peer_set"
132
+ | "peer_delete"
133
+ | "peer_profile_get"
134
+ | "peer_forget"
135
+ | "console_state"
136
+ | "dreams_status"
137
+ | "dreams_run"
138
+ // HTTP-only routes (no direct MCP tool equivalent).
139
+ | "offline_sync_snapshot"
140
+ | "offline_sync_snapshot_stream"
141
+ | "offline_sync_files"
142
+ | "offline_sync_file_content"
143
+ | "offline_sync_apply_file_content"
144
+ | "offline_sync_apply"
145
+ | "lcm_status"
146
+ | "memory_list"
147
+ | "entity_list"
148
+ | "maintenance_status"
149
+ | "quality_status"
150
+ | "trust_zones_status"
151
+ | "trust_zones_records"
152
+ | "review_disposition"
153
+ | "trust_zones_promote"
154
+ | "trust_zones_demo_seed"
155
+ | "citations_observed"
156
+ | "contradiction_detail"
157
+ | "graph_events";
57
158
 
58
159
  // ---------------------------------------------------------------------------
59
160
  // Operation context — what every handler receives
@@ -593,6 +593,7 @@ export class EngramAccessHttpServer {
593
593
  }
594
594
 
595
595
  if (req.method === "POST" && pathname === "/engram/v1/recall") {
596
+ void getOperation("recall"); // boundary dispatch (issue #1525)
596
597
  const body = await this.readValidatedBody(req, "recall");
597
598
  // Preserve the distinction between `codingContext: null` (explicit
598
599
  // clear) and `codingContext` missing from the JSON payload
@@ -714,6 +715,7 @@ export class EngramAccessHttpServer {
714
715
  // at session start after resolving a git context for the cwd; `remnic
715
716
  // doctor` (PR 8) surfaces the attached context.
716
717
  if (req.method === "POST" && pathname === "/engram/v1/coding-context") {
718
+ void getOperation("set_coding_context"); // boundary dispatch (issue #1525)
717
719
  const body = await this.readValidatedBody(req, "setCodingContext");
718
720
  const codingContext =
719
721
  body.codingContext !== undefined
@@ -735,6 +737,7 @@ export class EngramAccessHttpServer {
735
737
  req.method === "POST" &&
736
738
  (pathname === "/engram/v1/capsules/export" || pathname === "/remnic/v1/capsules/export")
737
739
  ) {
740
+ void getOperation("capsule_export"); // boundary dispatch (issue #1525)
738
741
  const body = await this.readValidatedBody(req, "capsuleExport");
739
742
  this.ensureWriteRateLimitAvailable();
740
743
  const result = await this.service.capsuleExport({
@@ -756,6 +759,7 @@ export class EngramAccessHttpServer {
756
759
  req.method === "POST" &&
757
760
  (pathname === "/engram/v1/capsules/import" || pathname === "/remnic/v1/capsules/import")
758
761
  ) {
762
+ void getOperation("capsule_import"); // boundary dispatch (issue #1525)
759
763
  const body = await this.readValidatedBody(req, "capsuleImport");
760
764
  this.ensureWriteRateLimitAvailable();
761
765
  const result = await this.service.capsuleImport({
@@ -774,6 +778,7 @@ export class EngramAccessHttpServer {
774
778
  req.method === "GET" &&
775
779
  (pathname === "/engram/v1/offline-sync/snapshot" || pathname === "/remnic/v1/offline-sync/snapshot")
776
780
  ) {
781
+ void getOperation("offline_sync_snapshot"); // boundary dispatch (issue #1525)
777
782
  const includeTranscriptsRaw = parsed.searchParams.get("include_transcripts");
778
783
  const includeContentRaw = parsed.searchParams.get("content");
779
784
  if (
@@ -813,6 +818,7 @@ export class EngramAccessHttpServer {
813
818
  (pathname === "/engram/v1/offline-sync/snapshot-stream" ||
814
819
  pathname === "/remnic/v1/offline-sync/snapshot-stream")
815
820
  ) {
821
+ void getOperation("offline_sync_snapshot_stream"); // boundary dispatch (issue #1525)
816
822
  const includeTranscriptsRaw = parsed.searchParams.get("include_transcripts");
817
823
  const includeContentRaw = parsed.searchParams.get("content");
818
824
  if (
@@ -849,6 +855,7 @@ export class EngramAccessHttpServer {
849
855
  req.method === "POST" &&
850
856
  (pathname === "/engram/v1/offline-sync/snapshot" || pathname === "/remnic/v1/offline-sync/snapshot")
851
857
  ) {
858
+ void getOperation("offline_sync_snapshot"); // boundary dispatch (issue #1525)
852
859
  const body = await this.readValidatedBody(
853
860
  req,
854
861
  "offlineSyncSnapshot",
@@ -871,6 +878,7 @@ export class EngramAccessHttpServer {
871
878
  req.method === "POST" &&
872
879
  (pathname === "/engram/v1/offline-sync/files" || pathname === "/remnic/v1/offline-sync/files")
873
880
  ) {
881
+ void getOperation("offline_sync_files"); // boundary dispatch (issue #1525)
874
882
  const body = await this.readValidatedBody(req, "offlineSyncFiles");
875
883
  const result = await this.service.offlineSyncFiles({
876
884
  namespace: this.resolveNamespace(req, body.namespace),
@@ -889,6 +897,7 @@ export class EngramAccessHttpServer {
889
897
  pathname === "/remnic/v1/offline-sync/file-content"
890
898
  )
891
899
  ) {
900
+ void getOperation("offline_sync_file_content"); // boundary dispatch (issue #1525)
892
901
  const body = await this.readValidatedBody(req, "offlineSyncFileContent");
893
902
  const result = await this.service.offlineSyncFileContent({
894
903
  namespace: this.resolveNamespace(req, body.namespace),
@@ -917,6 +926,7 @@ export class EngramAccessHttpServer {
917
926
  pathname === "/remnic/v1/offline-sync/apply-file-content"
918
927
  )
919
928
  ) {
929
+ void getOperation("offline_sync_apply_file_content"); // boundary dispatch (issue #1525)
920
930
  const namespaceParam = parsed.searchParams.get("namespace");
921
931
  const bytes = this.readRequiredIntegerHeader(req, "x-remnic-file-bytes");
922
932
  const offset = this.readOptionalIntegerHeader(req, "x-remnic-chunk-offset") ?? 0;
@@ -949,6 +959,7 @@ export class EngramAccessHttpServer {
949
959
  req.method === "POST" &&
950
960
  (pathname === "/engram/v1/offline-sync/apply" || pathname === "/remnic/v1/offline-sync/apply")
951
961
  ) {
962
+ void getOperation("offline_sync_apply"); // boundary dispatch (issue #1525)
952
963
  const body = await this.readValidatedBody(req, "offlineSyncApply", OFFLINE_SYNC_APPLY_MAX_BODY_BYTES);
953
964
  const result = await this.service.offlineSyncApply({
954
965
  namespace: this.resolveNamespace(req, body.namespace),
@@ -961,6 +972,7 @@ export class EngramAccessHttpServer {
961
972
  }
962
973
 
963
974
  if (req.method === "POST" && pathname === "/engram/v1/recall/explain") {
975
+ void getOperation("recall_explain"); // boundary dispatch (issue #1525)
964
976
  const body = await this.readValidatedBody(req, "recallExplain");
965
977
  const response = await this.service.recallExplain({
966
978
  sessionKey: body.sessionKey,
@@ -975,6 +987,7 @@ export class EngramAccessHttpServer {
975
987
  req.method === "POST" &&
976
988
  (pathname === "/engram/v1/action-confidence" || pathname === "/remnic/v1/action-confidence")
977
989
  ) {
990
+ void getOperation("action_confidence"); // boundary dispatch (issue #1525)
978
991
  const body = await this.readValidatedBody(req, "actionConfidence");
979
992
  this.respondJson(res, 200, await this.service.actionConfidence(body));
980
993
  return;
@@ -984,6 +997,7 @@ export class EngramAccessHttpServer {
984
997
  // the direct-answer retrieval tier. Orthogonal to /recall/explain
985
998
  // above, which returns a graph-path explanation document.
986
999
  if (req.method === "GET" && pathname === "/engram/v1/recall/tier-explain") {
1000
+ void getOperation("recall_tier_explain"); // boundary dispatch (issue #1525)
987
1001
  const sessionParam = parsed.searchParams.get("session");
988
1002
  const sessionKey = sessionParam && sessionParam.length > 0 ? sessionParam : undefined;
989
1003
  const namespaceParam = parsed.searchParams.get("namespace");
@@ -1007,6 +1021,7 @@ export class EngramAccessHttpServer {
1007
1021
  // GET stays cacheable; `namespace` / `session` / `budget` are
1008
1022
  // optional.
1009
1023
  if (req.method === "GET" && pathname === "/engram/v1/recall/xray") {
1024
+ void getOperation("recall_xray"); // boundary dispatch (issue #1525)
1010
1025
  const queryParam = parsed.searchParams.get("q");
1011
1026
  if (!queryParam || queryParam.trim().length === 0) {
1012
1027
  this.respondJson(res, 400, {
@@ -1115,6 +1130,7 @@ export class EngramAccessHttpServer {
1115
1130
  req.method === "GET" &&
1116
1131
  (pathname === "/engram/v1/wearables/status" || pathname === "/remnic/v1/wearables/status")
1117
1132
  ) {
1133
+ void getOperation("wearables_status"); // boundary dispatch (issue #1525)
1118
1134
  this.respondJson(res, 200, await this.service.wearablesStatus());
1119
1135
  return;
1120
1136
  }
@@ -1123,6 +1139,7 @@ export class EngramAccessHttpServer {
1123
1139
  req.method === "POST" &&
1124
1140
  (pathname === "/engram/v1/wearables/sync" || pathname === "/remnic/v1/wearables/sync")
1125
1141
  ) {
1142
+ void getOperation("wearables_sync"); // boundary dispatch (issue #1525)
1126
1143
  const body = (await this.readJsonBody(req)) as Record<string, unknown>;
1127
1144
  const source = optionalQueryString(body.source, "source");
1128
1145
  const date = optionalQueryString(body.date, "date");
@@ -1163,6 +1180,7 @@ export class EngramAccessHttpServer {
1163
1180
  req.method === "GET" &&
1164
1181
  (pathname === "/engram/v1/wearables/transcript" || pathname === "/remnic/v1/wearables/transcript")
1165
1182
  ) {
1183
+ void getOperation("transcript_day"); // boundary dispatch (issue #1525)
1166
1184
  const date = parsed.searchParams.get("date");
1167
1185
  if (!date || date.trim().length === 0) {
1168
1186
  throw new EngramAccessInputError(
@@ -1188,6 +1206,7 @@ export class EngramAccessHttpServer {
1188
1206
  (pathname === "/engram/v1/wearables/transcripts/search" ||
1189
1207
  pathname === "/remnic/v1/wearables/transcripts/search")
1190
1208
  ) {
1209
+ void getOperation("transcript_search"); // boundary dispatch (issue #1525)
1191
1210
  const queryParam = parsed.searchParams.get("q");
1192
1211
  if (!queryParam || queryParam.trim().length === 0) {
1193
1212
  throw new EngramAccessInputError(
@@ -1214,6 +1233,7 @@ export class EngramAccessHttpServer {
1214
1233
  req.method === "GET" &&
1215
1234
  (pathname === "/engram/v1/wearables/memories" || pathname === "/remnic/v1/wearables/memories")
1216
1235
  ) {
1236
+ void getOperation("transcript_memories"); // boundary dispatch (issue #1525)
1217
1237
  try {
1218
1238
  const memories = await this.service.wearablesTranscriptMemories({
1219
1239
  source: nonEmptyQueryParam(parsed.searchParams.get("source")),
@@ -1229,6 +1249,7 @@ export class EngramAccessHttpServer {
1229
1249
  }
1230
1250
 
1231
1251
  if (req.method === "POST" && pathname === "/engram/v1/observe") {
1252
+ void getOperation("observe"); // boundary dispatch (issue #1525)
1232
1253
  const body = await this.readValidatedBody(req, "observe");
1233
1254
  this.ensureWriteRateLimitAvailable();
1234
1255
  const response = await this.service.observe({
@@ -1253,6 +1274,7 @@ export class EngramAccessHttpServer {
1253
1274
  }
1254
1275
 
1255
1276
  if (req.method === "POST" && pathname === "/engram/v1/lcm/search") {
1277
+ void getOperation("lcm_search"); // boundary dispatch (issue #1525)
1256
1278
  const body = await this.readValidatedBody(req, "lcmSearch");
1257
1279
  const response = await this.service.lcmSearch({
1258
1280
  query: body.query,
@@ -1270,6 +1292,7 @@ export class EngramAccessHttpServer {
1270
1292
  req.method === "POST" &&
1271
1293
  (pathname === "/engram/v1/lcm/compaction/flush" || pathname === "/remnic/v1/lcm/compaction/flush")
1272
1294
  ) {
1295
+ void getOperation("lcm_compaction_flush"); // boundary dispatch (issue #1525)
1273
1296
  const body = await this.readValidatedBody(req, "lcmCompactionFlush");
1274
1297
  this.ensureWriteRateLimitAvailable();
1275
1298
  const response = await this.service.lcmCompactionFlush({
@@ -1286,6 +1309,7 @@ export class EngramAccessHttpServer {
1286
1309
  req.method === "POST" &&
1287
1310
  (pathname === "/engram/v1/lcm/compaction/record" || pathname === "/remnic/v1/lcm/compaction/record")
1288
1311
  ) {
1312
+ void getOperation("lcm_compaction_record"); // boundary dispatch (issue #1525)
1289
1313
  const body = await this.readValidatedBody(req, "lcmCompactionRecord");
1290
1314
  this.ensureWriteRateLimitAvailable();
1291
1315
  const response = await this.service.lcmCompactionRecord({
@@ -1301,6 +1325,7 @@ export class EngramAccessHttpServer {
1301
1325
  }
1302
1326
 
1303
1327
  if (req.method === "GET" && pathname === "/engram/v1/lcm/status") {
1328
+ void getOperation("lcm_status"); // boundary dispatch (issue #1525)
1304
1329
  this.respondJson(res, 200, await this.service.lcmStatus());
1305
1330
  return;
1306
1331
  }
@@ -1408,6 +1433,7 @@ export class EngramAccessHttpServer {
1408
1433
  }
1409
1434
 
1410
1435
  if (req.method === "POST" && pathname === "/engram/v1/suggestions") {
1436
+ void getOperation("suggestion_submit"); // boundary dispatch (issue #1525)
1411
1437
  const body = await this.readValidatedBody(req, "suggestionSubmit");
1412
1438
  const request = {
1413
1439
  schemaVersion: body.schemaVersion,
@@ -1440,6 +1466,7 @@ export class EngramAccessHttpServer {
1440
1466
  }
1441
1467
 
1442
1468
  if (req.method === "GET" && pathname === "/engram/v1/memories") {
1469
+ void getOperation("memory_list"); // boundary dispatch (issue #1525)
1443
1470
  const limit = parseStrictIntegerQuery(parsed.searchParams.get("limit"), "limit", 50, 1);
1444
1471
  const offset = parseStrictIntegerQuery(parsed.searchParams.get("offset"), "offset", 0, 0);
1445
1472
  const sort = parseMemorySort(parsed.searchParams.get("sort"));
@@ -1479,6 +1506,7 @@ export class EngramAccessHttpServer {
1479
1506
  }
1480
1507
 
1481
1508
  const timelineMatch = pathname.match(/^\/engram\/v1\/memories\/([^/]+)\/timeline$/);
1509
+ void getOperation("memory_timeline"); // boundary dispatch (issue #1525)
1482
1510
  if (req.method === "GET" && timelineMatch) {
1483
1511
  const memoryId = decodeURIComponent(timelineMatch[1] ?? "");
1484
1512
  const namespace = parsed.searchParams.get("namespace") ?? undefined;
@@ -1489,6 +1517,7 @@ export class EngramAccessHttpServer {
1489
1517
  }
1490
1518
 
1491
1519
  if (req.method === "GET" && pathname === "/engram/v1/entities") {
1520
+ void getOperation("entity_list"); // boundary dispatch (issue #1525)
1492
1521
  const limit = parseStrictIntegerQuery(parsed.searchParams.get("limit"), "limit", 50, 1);
1493
1522
  const offset = parseStrictIntegerQuery(parsed.searchParams.get("offset"), "offset", 0, 0);
1494
1523
  const response = await this.service.entityList({
@@ -1502,6 +1531,7 @@ export class EngramAccessHttpServer {
1502
1531
  }
1503
1532
 
1504
1533
  const entityMatch = pathname.match(/^\/engram\/v1\/entities\/([^/]+)$/);
1534
+ void getOperation("entity_get"); // boundary dispatch (issue #1525)
1505
1535
  if (req.method === "GET" && entityMatch) {
1506
1536
  const entityName = decodeURIComponent(entityMatch[1] ?? "");
1507
1537
  const namespace = parsed.searchParams.get("namespace") ?? undefined;
@@ -1511,6 +1541,7 @@ export class EngramAccessHttpServer {
1511
1541
  }
1512
1542
 
1513
1543
  if (req.method === "GET" && pathname === "/engram/v1/review-queue") {
1544
+ void getOperation("review_queue_list"); // boundary dispatch (issue #1525)
1514
1545
  const response = await this.service.reviewQueue(
1515
1546
  parsed.searchParams.get("runId") ?? undefined,
1516
1547
  parsed.searchParams.get("namespace") ?? undefined,
@@ -1521,16 +1552,19 @@ export class EngramAccessHttpServer {
1521
1552
  }
1522
1553
 
1523
1554
  if (req.method === "GET" && pathname === "/engram/v1/maintenance") {
1555
+ void getOperation("maintenance_status"); // boundary dispatch (issue #1525)
1524
1556
  this.respondJson(res, 200, await this.service.maintenance(parsed.searchParams.get("namespace") ?? undefined, this.resolveRequestPrincipal(req)));
1525
1557
  return;
1526
1558
  }
1527
1559
 
1528
1560
  if (req.method === "GET" && pathname === "/engram/v1/quality") {
1561
+ void getOperation("quality_status"); // boundary dispatch (issue #1525)
1529
1562
  this.respondJson(res, 200, await this.service.quality(parsed.searchParams.get("namespace") ?? undefined, this.resolveRequestPrincipal(req)));
1530
1563
  return;
1531
1564
  }
1532
1565
 
1533
1566
  if (req.method === "GET" && pathname === "/engram/v1/trust-zones/status") {
1567
+ void getOperation("trust_zones_status"); // boundary dispatch (issue #1525)
1534
1568
  this.respondJson(
1535
1569
  res,
1536
1570
  200,
@@ -1543,6 +1577,7 @@ export class EngramAccessHttpServer {
1543
1577
  // scoped via the same resolver used by recall/trust-zones so cross-
1544
1578
  // tenant reads aren't possible (CLAUDE.md rule 42).
1545
1579
  if (req.method === "GET" && pathname === "/engram/v1/procedural/stats") {
1580
+ void getOperation("procedural_stats"); // boundary dispatch (issue #1525)
1546
1581
  const namespaceParam = parsed.searchParams.get("namespace");
1547
1582
  this.respondJson(
1548
1583
  res,
@@ -1563,6 +1598,7 @@ export class EngramAccessHttpServer {
1563
1598
  }
1564
1599
 
1565
1600
  if (req.method === "GET" && pathname === "/engram/v1/trust-zones/records") {
1601
+ void getOperation("trust_zones_records"); // boundary dispatch (issue #1525)
1566
1602
  const limit = parseStrictIntegerQuery(parsed.searchParams.get("limit"), "limit", 25, 1);
1567
1603
  const offset = parseStrictIntegerQuery(parsed.searchParams.get("offset"), "offset", 0, 0);
1568
1604
  const response = await this.service.trustZoneBrowse({
@@ -1579,6 +1615,7 @@ export class EngramAccessHttpServer {
1579
1615
  }
1580
1616
 
1581
1617
  if (req.method === "POST" && pathname === "/engram/v1/review-disposition") {
1618
+ void getOperation("review_disposition"); // boundary dispatch (issue #1525)
1582
1619
  const body = await this.readValidatedBody(req, "reviewDisposition");
1583
1620
  this.ensureWriteRateLimitAvailable();
1584
1621
  const response = await this.service.reviewDisposition({
@@ -1596,6 +1633,7 @@ export class EngramAccessHttpServer {
1596
1633
  }
1597
1634
 
1598
1635
  if (req.method === "POST" && pathname === "/engram/v1/trust-zones/promote") {
1636
+ void getOperation("trust_zones_promote"); // boundary dispatch (issue #1525)
1599
1637
  const body = await this.readValidatedBody(req, "trustZonePromote");
1600
1638
  const dryRun = body.dryRun === true;
1601
1639
  if (!dryRun) {
@@ -1619,6 +1657,7 @@ export class EngramAccessHttpServer {
1619
1657
  }
1620
1658
 
1621
1659
  if (req.method === "POST" && pathname === "/engram/v1/trust-zones/demo-seed") {
1660
+ void getOperation("trust_zones_demo_seed"); // boundary dispatch (issue #1525)
1622
1661
  const body = await this.readValidatedBody(req, "trustZoneDemoSeed");
1623
1662
  const dryRun = body.dryRun === true;
1624
1663
  if (!dryRun) {
@@ -1640,6 +1679,7 @@ export class EngramAccessHttpServer {
1640
1679
 
1641
1680
  // Citation usage tracking (issue #379)
1642
1681
  if (req.method === "POST" && pathname === "/v1/citations/observed") {
1682
+ void getOperation("citations_observed"); // boundary dispatch (issue #1525)
1643
1683
  const body = await this.readJsonBody(req);
1644
1684
  if (!body || typeof body !== "object" || Array.isArray(body)) {
1645
1685
  throw new HttpError(400, "request body must be a JSON object", "invalid_body");
@@ -1711,6 +1751,7 @@ export class EngramAccessHttpServer {
1711
1751
 
1712
1752
  // ── Contradiction Review (issue #520) ─────────────────────────────────────
1713
1753
  if (req.method === "GET" && pathname === "/engram/v1/review/contradictions") {
1754
+ void getOperation("review_list"); // boundary dispatch (issue #1525)
1714
1755
  const VALID_FILTERS = new Set(["all", "unresolved", "contradicts", "independent", "duplicates", "needs-user"]);
1715
1756
  const rawFilter = parsed.searchParams.get("filter") ?? "unresolved";
1716
1757
  if (!VALID_FILTERS.has(rawFilter)) {
@@ -1740,6 +1781,7 @@ export class EngramAccessHttpServer {
1740
1781
  }
1741
1782
 
1742
1783
  if (req.method === "GET" && pathname.startsWith("/engram/v1/review/contradictions/")) {
1784
+ void getOperation("contradiction_detail"); // boundary dispatch (issue #1525)
1743
1785
  const pairId = pathname.split("/").pop() ?? "";
1744
1786
  const { readPair } = await import("./contradiction/contradiction-review.js");
1745
1787
  const pair = readPair(this.service.memoryDir, pairId);
@@ -1758,6 +1800,7 @@ export class EngramAccessHttpServer {
1758
1800
  }
1759
1801
 
1760
1802
  if (req.method === "POST" && pathname === "/engram/v1/review/resolve") {
1803
+ void getOperation("review_resolve"); // boundary dispatch (issue #1525)
1761
1804
  const body = await this.readJsonBody(req) as Record<string, unknown>;
1762
1805
  const pairId = typeof body.pairId === "string" ? body.pairId : "";
1763
1806
  const verb = typeof body.verb === "string" ? body.verb : "";
@@ -1795,6 +1838,7 @@ export class EngramAccessHttpServer {
1795
1838
  // params so the surface stays cacheable; invalid values yield 400 with
1796
1839
  // a descriptive body (CLAUDE.md rule 51 — never silently default).
1797
1840
  if (req.method === "GET" && pathname === "/engram/v1/graph/snapshot") {
1841
+ void getOperation("graph_snapshot"); // boundary dispatch (issue #1525)
1798
1842
  const limitRaw = parsed.searchParams.get("limit");
1799
1843
  let limit: number | undefined;
1800
1844
  if (limitRaw !== null && limitRaw.length > 0) {
@@ -1887,6 +1931,7 @@ export class EngramAccessHttpServer {
1887
1931
  }
1888
1932
 
1889
1933
  if (req.method === "POST" && pathname === "/engram/v1/contradiction-scan") {
1934
+ void getOperation("contradiction_scan_run"); // boundary dispatch (issue #1525)
1890
1935
  const body = await this.readJsonBody(req) as Record<string, unknown>;
1891
1936
  const { runContradictionScan } = await import("./contradiction/contradiction-scan.js");
1892
1937
  const principal = this.resolveRequestPrincipal(req);
@@ -1925,6 +1970,7 @@ export class EngramAccessHttpServer {
1925
1970
  // The stream sends a heartbeat `data: {"type":"heartbeat"}\n\n` every
1926
1971
  // 25 s so load balancers and proxies don't time out idle connections.
1927
1972
  if (req.method === "GET" && pathname === "/engram/v1/graph/events") {
1973
+ void getOperation("graph_events"); // boundary dispatch (issue #1525)
1928
1974
  await this.handleGraphEventsSSE(req, res);
1929
1975
  return;
1930
1976
  }
@@ -1934,6 +1980,7 @@ export class EngramAccessHttpServer {
1934
1980
  // Read-only; namespace-aware via resolveRequestPrincipal so cross-tenant
1935
1981
  // reads are not possible (CLAUDE.md rule 42).
1936
1982
  if (req.method === "GET" && pathname === "/engram/v1/console/state") {
1983
+ void getOperation("console_state"); // boundary dispatch (issue #1525)
1937
1984
  const namespace = parsed.searchParams.get("namespace") ?? undefined;
1938
1985
  const snapshot = await this.service.consoleState(namespace, this.resolveRequestPrincipal(req));
1939
1986
  this.respondJson(res, 200, snapshot);
@@ -1947,6 +1994,7 @@ export class EngramAccessHttpServer {
1947
1994
  // DELETE /engram/v1/peers/:id?forget=true — destructive full purge (issue #679 completion)
1948
1995
  // GET /engram/v1/peers/:id/profile — get peer profile
1949
1996
  if (req.method === "GET" && pathname === "/engram/v1/peers") {
1997
+ void getOperation("peer_list"); // boundary dispatch (issue #1525)
1950
1998
  const result = await this.service.peerList();
1951
1999
  this.respondJson(res, 200, result);
1952
2000
  return;
@@ -1954,6 +2002,7 @@ export class EngramAccessHttpServer {
1954
2002
 
1955
2003
  const peerProfileMatch = /^\/engram\/v1\/peers\/([^/]+)\/profile$/.exec(pathname);
1956
2004
  if (peerProfileMatch) {
2005
+ void getOperation("peer_profile_get"); // boundary dispatch (issue #1525)
1957
2006
  if (req.method !== "GET") {
1958
2007
  this.respondJson(res, 405, { error: "method_not_allowed", code: "method_not_allowed" });
1959
2008
  return;
@@ -1973,6 +2022,7 @@ export class EngramAccessHttpServer {
1973
2022
  const peerId = decodePeerIdSegment(peerIdMatch[1] ?? "");
1974
2023
 
1975
2024
  if (req.method === "GET") {
2025
+ void getOperation("peer_get"); // boundary dispatch (issue #1525)
1976
2026
  const result = await this.service.peerGet(peerId);
1977
2027
  if (!result.found) {
1978
2028
  this.respondJson(res, 404, { error: "peer_not_found", code: "peer_not_found" });
@@ -1983,6 +2033,7 @@ export class EngramAccessHttpServer {
1983
2033
  }
1984
2034
 
1985
2035
  if (req.method === "PUT") {
2036
+ void getOperation("peer_set"); // boundary dispatch (issue #1525)
1986
2037
  const body = await this.readJsonBody(req) as Record<string, unknown>;
1987
2038
  // Reject malformed types up front rather than silently dropping them
1988
2039
  // to undefined and letting peerSet fall back to defaults
@@ -2011,6 +2062,7 @@ export class EngramAccessHttpServer {
2011
2062
  }
2012
2063
 
2013
2064
  if (req.method === "DELETE") {
2065
+ void getOperation("peer_delete"); // boundary dispatch (issue #1525)
2014
2066
  // `?forget=true` triggers the destructive full-purge path (issue #679
2015
2067
  // completion). The caller must also pass `confirm=yes` in the request
2016
2068
  // body; absent confirmation yields 400. Plain DELETE (no ?forget) keeps
@@ -2043,6 +2095,7 @@ export class EngramAccessHttpServer {
2043
2095
  // ── Dreams telemetry (issue #678 PR 3+4) ──────────────────────────────────
2044
2096
 
2045
2097
  if (req.method === "GET" && pathname === "/engram/v1/dreams/status") {
2098
+ void getOperation("dreams_status"); // boundary dispatch (issue #1525)
2046
2099
  const { normalizeDreamsStatusWindowHours } = await import("./maintenance/dreams-ledger.js");
2047
2100
  const windowHoursRaw = parsed.searchParams.get("windowHours");
2048
2101
  let windowHours: number;
@@ -2066,6 +2119,7 @@ export class EngramAccessHttpServer {
2066
2119
  }
2067
2120
 
2068
2121
  if (req.method === "POST" && pathname === "/engram/v1/dreams/run") {
2122
+ void getOperation("dreams_run"); // boundary dispatch (issue #1525)
2069
2123
  const body = await this.readJsonBody(req) as Record<string, unknown>;
2070
2124
  const VALID_PHASES = ["lightSleep", "rem", "deepSleep"] as const;
2071
2125
  const phase = typeof body.phase === "string" ? body.phase : undefined;