@remnic/core 9.3.684 → 9.3.686

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 (315) hide show
  1. package/dist/access-boundary.d.ts +4 -3
  2. package/dist/access-boundary.js +23 -23
  3. package/dist/access-cli.js +152 -71
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +3 -2
  6. package/dist/access-http.js +26 -26
  7. package/dist/access-mcp.d.ts +14 -3
  8. package/dist/access-mcp.js +25 -25
  9. package/dist/access-operations.d.ts +10 -4
  10. package/dist/access-operations.js +26 -24
  11. package/dist/access-schema.d.ts +4 -4
  12. package/dist/{access-service-D-siI-xJ.d.ts → access-service-DmCHJ4cH.d.ts} +106 -39
  13. package/dist/access-service.d.ts +3 -2
  14. package/dist/access-service.js +22 -22
  15. package/dist/access-surface-catalog.d.ts +3 -2
  16. package/dist/access-surface-catalog.js +2 -0
  17. package/dist/access-surface-catalog.js.map +1 -1
  18. package/dist/active-recall.js +2 -2
  19. package/dist/{auto-sync-5CJBJMPZ.js → auto-sync-NUQWSFQD.js} +7 -7
  20. package/dist/bootstrap.d.ts +2 -1
  21. package/dist/bootstrap.js +2 -2
  22. package/dist/boxes.js +2 -2
  23. package/dist/briefing.js +3 -3
  24. package/dist/buffer.js +2 -2
  25. package/dist/calibration.js +4 -4
  26. package/dist/catalog-COqWZlZ6.d.ts +456 -0
  27. package/dist/causal-behavior.js +4 -4
  28. package/dist/causal-chain.js +4 -4
  29. package/dist/causal-consolidation.js +11 -11
  30. package/dist/causal-retrieval.js +4 -4
  31. package/dist/causal-trajectory-graph.js +1 -1
  32. package/dist/causal-trajectory.js +1 -1
  33. package/dist/{chunk-ROHLEUTH.js → chunk-2KAYTPPT.js} +10 -10
  34. package/dist/{chunk-NHQGDVJF.js → chunk-2SJCWLQD.js} +3 -3
  35. package/dist/{chunk-YTWNKQ2G.js → chunk-3FC6LW6T.js} +2 -2
  36. package/dist/{chunk-5OE4PYY5.js → chunk-473JIN2U.js} +61 -11
  37. package/dist/chunk-473JIN2U.js.map +1 -0
  38. package/dist/{chunk-XEA4Z7JU.js → chunk-4FE2K57M.js} +3 -3
  39. package/dist/{chunk-WI7JKV2T.js → chunk-4N3TFFPH.js} +2 -2
  40. package/dist/{chunk-BTVX7ZXZ.js → chunk-4NFVPDIL.js} +4 -4
  41. package/dist/{chunk-OUWAQVDJ.js → chunk-5CEJH5ZN.js} +2 -2
  42. package/dist/{chunk-6QM24CP7.js → chunk-6GJS4BFH.js} +2 -2
  43. package/dist/{chunk-J2FBJ63F.js → chunk-6O6A6YUO.js} +4 -4
  44. package/dist/{chunk-HQ6NIBL6.js → chunk-7FL4CNPV.js} +2 -2
  45. package/dist/{chunk-5VDJMYTF.js → chunk-7WWURLG6.js} +3 -3
  46. package/dist/{chunk-QWRC7GIO.js → chunk-A4HH2EWA.js} +5 -5
  47. package/dist/{chunk-4SKKVWLQ.js → chunk-AGJH5ISO.js} +2 -2
  48. package/dist/{chunk-2L3KLWOV.js → chunk-B43NZNMG.js} +54 -92
  49. package/dist/chunk-B43NZNMG.js.map +1 -0
  50. package/dist/{chunk-WRE3JPAW.js → chunk-B4XVLHJA.js} +3 -3
  51. package/dist/{chunk-53FDU4CE.js → chunk-BLIWOONZ.js} +39 -36
  52. package/dist/chunk-BLIWOONZ.js.map +1 -0
  53. package/dist/{chunk-AJU4PJGY.js → chunk-BVKCV2ZY.js} +2 -2
  54. package/dist/{chunk-DQY7NJ5L.js → chunk-CTOQEZSN.js} +2 -2
  55. package/dist/{chunk-7OGJQP7T.js → chunk-DCWIQFNA.js} +4 -4
  56. package/dist/{chunk-MHQC2WU2.js → chunk-DKTSR7EK.js} +2 -2
  57. package/dist/{chunk-RN7MUWON.js → chunk-EHISUJFN.js} +2 -2
  58. package/dist/{chunk-WLEB7WCG.js → chunk-EO5QWINU.js} +2 -2
  59. package/dist/{chunk-XKXKSQU7.js → chunk-EXM3CQTZ.js} +2 -2
  60. package/dist/{chunk-M3FWYURP.js → chunk-FE6DQUNJ.js} +9 -9
  61. package/dist/{chunk-LCC5EZTT.js → chunk-FIVDN2SM.js} +4 -4
  62. package/dist/{chunk-3MY4W5V4.js → chunk-FUCUR2OZ.js} +550 -63
  63. package/dist/chunk-FUCUR2OZ.js.map +1 -0
  64. package/dist/{chunk-452WDNFO.js → chunk-GG6AJN7A.js} +2 -2
  65. package/dist/{chunk-2IBGHRIO.js → chunk-GS55WYRL.js} +3 -3
  66. package/dist/{chunk-IBTZEBUD.js → chunk-HYNHLBKA.js} +2 -2
  67. package/dist/{chunk-EVWIEEKZ.js → chunk-IQ7WCZRW.js} +2 -2
  68. package/dist/{chunk-B5XMS73R.js → chunk-IQVQJJL7.js} +2 -2
  69. package/dist/{chunk-6RHNCKHG.js → chunk-K43PI6DQ.js} +2 -2
  70. package/dist/{chunk-OIF36KGD.js → chunk-KCQA46NR.js} +2 -2
  71. package/dist/{chunk-2LDBXPLB.js → chunk-KF74X62T.js} +1 -1
  72. package/dist/{chunk-3EVIMVQU.js → chunk-KFBOZYME.js} +42 -3
  73. package/dist/chunk-KFBOZYME.js.map +1 -0
  74. package/dist/{chunk-MAV46GWQ.js → chunk-KYYL4U6X.js} +2 -2
  75. package/dist/{chunk-6GC5SGFE.js → chunk-L24JROPR.js} +2 -2
  76. package/dist/{chunk-Q5ZU3RNY.js → chunk-LQ6JI4VH.js} +2 -2
  77. package/dist/{chunk-GWKCEM3S.js → chunk-MCQDSY4G.js} +3 -3
  78. package/dist/{chunk-HP5FMB6L.js → chunk-MDJURR27.js} +2 -2
  79. package/dist/{chunk-FYEVFGJD.js → chunk-NN7QYW5W.js} +2 -2
  80. package/dist/chunk-NN7QYW5W.js.map +1 -0
  81. package/dist/{chunk-2ODBA7MQ.js → chunk-NU3CSQ4H.js} +5 -5
  82. package/dist/chunk-NU3CSQ4H.js.map +1 -0
  83. package/dist/{chunk-T2PO5MUF.js → chunk-O7GOFAM3.js} +2 -2
  84. package/dist/{chunk-Z2OXSMZK.js → chunk-OBXTMFZQ.js} +3 -3
  85. package/dist/{chunk-K6ZN34WC.js → chunk-OV4D5T7V.js} +3 -3
  86. package/dist/{chunk-OMLIFZ4I.js → chunk-PH3HOKYW.js} +2 -2
  87. package/dist/{chunk-C3IW2F5Z.js → chunk-PLBIPT6I.js} +2 -2
  88. package/dist/{chunk-QY7YA7OL.js → chunk-PNLCEFE4.js} +2 -2
  89. package/dist/{chunk-AGRPGAKR.js → chunk-PONNZ54D.js} +2 -2
  90. package/dist/{chunk-XZ4WBBB5.js → chunk-PWFWCGOO.js} +2 -2
  91. package/dist/{chunk-XWEXT4XU.js → chunk-QANVLERJ.js} +4 -4
  92. package/dist/{chunk-W4RVMTHR.js → chunk-QRDOSYOR.js} +2 -2
  93. package/dist/{chunk-OXNOINIP.js → chunk-QVMXQGT7.js} +24 -24
  94. package/dist/chunk-QVMXQGT7.js.map +1 -0
  95. package/dist/{chunk-6IMKOIZ6.js → chunk-R6OVFAX6.js} +2 -2
  96. package/dist/{chunk-5N5DXYDW.js → chunk-S2OU5DZY.js} +31 -10
  97. package/dist/chunk-S2OU5DZY.js.map +1 -0
  98. package/dist/{chunk-JOASJWQR.js → chunk-SANZHXY2.js} +2 -2
  99. package/dist/{chunk-7DTASS5T.js → chunk-SJHM6I4J.js} +2 -2
  100. package/dist/{chunk-M6BVYHBU.js → chunk-STOEE37X.js} +4 -4
  101. package/dist/{chunk-GKKAXVAJ.js → chunk-U33LWTQQ.js} +1 -7
  102. package/dist/chunk-U33LWTQQ.js.map +1 -0
  103. package/dist/{chunk-LXH3DIF2.js → chunk-U7D7NP4J.js} +2 -2
  104. package/dist/{chunk-DRD2Q7HQ.js → chunk-UFS7OXGL.js} +2 -2
  105. package/dist/{chunk-H3HDXD3U.js → chunk-UPTZYUYJ.js} +2 -2
  106. package/dist/{chunk-3Z7NPD5T.js → chunk-UTYBJR7M.js} +2 -2
  107. package/dist/{chunk-LN4YGHTM.js → chunk-UUH4YQOF.js} +2 -2
  108. package/dist/{chunk-6VF75M3X.js → chunk-VGUOEDTU.js} +2 -2
  109. package/dist/{chunk-44VFF3BB.js → chunk-VILEUJXC.js} +2 -2
  110. package/dist/{chunk-7SI52C65.js → chunk-VL7DP3OW.js} +2 -2
  111. package/dist/{chunk-7DHTMOND.js → chunk-VQ34TERH.js} +2 -2
  112. package/dist/{chunk-6VMIHVGO.js → chunk-VX6OBUDW.js} +2 -2
  113. package/dist/{chunk-EW5KFXHL.js → chunk-WDXCNJSF.js} +7 -7
  114. package/dist/{chunk-FMEKEF47.js → chunk-WIHPNY65.js} +79 -3
  115. package/dist/chunk-WIHPNY65.js.map +1 -0
  116. package/dist/{chunk-X6IRLNOO.js → chunk-WIWPSQYU.js} +2 -2
  117. package/dist/{chunk-DOCTITOP.js → chunk-WRFKZEO6.js} +2 -2
  118. package/dist/{chunk-E6ZDCOHM.js → chunk-XBZQRZ6G.js} +2 -2
  119. package/dist/{chunk-7YX23JBA.js → chunk-XHYGJVXL.js} +2 -2
  120. package/dist/{chunk-JD4SCARD.js → chunk-YN4ZT4CW.js} +1 -1
  121. package/dist/{chunk-YXWAILM4.js → chunk-YOI3ELXF.js} +2 -2
  122. package/dist/{chunk-XCAZF7KQ.js → chunk-ZA2S2VLL.js} +2 -2
  123. package/dist/{chunk-BEUDU7Y4.js → chunk-ZCWIH4LH.js} +2 -2
  124. package/dist/{chunk-V25ZAOSB.js → chunk-ZPTISBQU.js} +5 -5
  125. package/dist/{cli-ooj6JQBS.d.ts → cli-D8nZ2MPH.d.ts} +2 -2
  126. package/dist/cli.d.ts +4 -3
  127. package/dist/cli.js +44 -44
  128. package/dist/compounding/engine.js +4 -4
  129. package/dist/compounding/preference-consolidator.js +1 -1
  130. package/dist/config.js +2 -2
  131. package/dist/connectors/codex-materialize-runner.js +4 -4
  132. package/dist/connectors/codex-materialize.js +2 -2
  133. package/dist/connectors/index.js +5 -5
  134. package/dist/contradiction/index.js +3 -3
  135. package/dist/{contradiction-scan-AZTGFMPY.js → contradiction-scan-HWGEOUDS.js} +3 -3
  136. package/dist/conversation-index/backend.js +5 -5
  137. package/dist/conversation-index/cleanup.js +2 -2
  138. package/dist/conversation-index/faiss-adapter.js +2 -2
  139. package/dist/conversation-index/indexer.js +2 -2
  140. package/dist/conversation-index/search.js +2 -2
  141. package/dist/day-summary.js +2 -2
  142. package/dist/embedding-fallback.js +2 -2
  143. package/dist/entity-retrieval.js +4 -4
  144. package/dist/explicit-capture.d.ts +2 -1
  145. package/dist/explicit-capture.js +1 -1
  146. package/dist/extraction-judge-telemetry.js +2 -2
  147. package/dist/extraction-judge-training.js +2 -2
  148. package/dist/extraction-judge.js +5 -5
  149. package/dist/extraction.js +9 -9
  150. package/dist/fallback-llm.js +4 -4
  151. package/dist/{graph-edge-decay-KSVJGCZW.js → graph-edge-decay-D7OESCBR.js} +2 -2
  152. package/dist/graph-snapshot.js +2 -2
  153. package/dist/graph.js +1 -1
  154. package/dist/index.d.ts +5 -4
  155. package/dist/index.js +80 -80
  156. package/dist/lcm/archive.js +2 -2
  157. package/dist/lcm/engine.js +5 -5
  158. package/dist/lcm/index.js +5 -5
  159. package/dist/lcm/schema.js +2 -2
  160. package/dist/lcm/summarizer.js +3 -3
  161. package/dist/local-llm.js +2 -2
  162. package/dist/logger.js +1 -1
  163. package/dist/maintenance/memory-governance.js +3 -3
  164. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  165. package/dist/maintenance/rebuild-memory-projection.js +5 -5
  166. package/dist/mcp-memory-inspector-app.d.ts +3 -2
  167. package/dist/model-registry.js +2 -2
  168. package/dist/models-json.js +2 -2
  169. package/dist/namespaces/migrate.d.ts +1 -0
  170. package/dist/namespaces/migrate.js +16 -16
  171. package/dist/namespaces/search.js +13 -13
  172. package/dist/namespaces/storage.d.ts +42 -1
  173. package/dist/namespaces/storage.js +3 -3
  174. package/dist/native-knowledge.js +2 -2
  175. package/dist/negative.js +2 -2
  176. package/dist/operator-toolkit.js +22 -22
  177. package/dist/{orchestrator-DIDDvwDw.d.ts → orchestrator-CA6ouzBn.d.ts} +3 -464
  178. package/dist/orchestrator.d.ts +2 -1
  179. package/dist/orchestrator.js +61 -61
  180. package/dist/profiling.js +2 -2
  181. package/dist/qmd.js +2 -2
  182. package/dist/recall-planner-llm.js +4 -4
  183. package/dist/recall-qos.js +2 -2
  184. package/dist/recall-state.js +2 -2
  185. package/dist/relevance.js +2 -2
  186. package/dist/{resolution-IDTEBJFS.js → resolution-MN36NW5P.js} +3 -3
  187. package/dist/resolve-provider-secret.js +2 -2
  188. package/dist/resume-bundles.js +4 -4
  189. package/dist/retrieval-agents.js +2 -2
  190. package/dist/routing/store.js +2 -2
  191. package/dist/schemas.d.ts +38 -38
  192. package/dist/search/embed-helper.js +2 -2
  193. package/dist/search/factory.js +12 -12
  194. package/dist/search/index.js +12 -12
  195. package/dist/search/lancedb-backend.js +2 -2
  196. package/dist/search/meilisearch-backend.js +2 -2
  197. package/dist/search/orama-backend.js +2 -2
  198. package/dist/search/remote-backend.js +2 -2
  199. package/dist/semantic-consolidation.js +5 -5
  200. package/dist/semantic-rule-promotion.js +3 -3
  201. package/dist/semantic-rule-verifier.js +3 -3
  202. package/dist/session-observer-state.js +2 -2
  203. package/dist/session-transcript-migration.js +2 -2
  204. package/dist/shared-context/manager.js +2 -2
  205. package/dist/storage.d.ts +4 -0
  206. package/dist/storage.js +2 -2
  207. package/dist/summarizer.js +7 -7
  208. package/dist/temporal-supersession.js +2 -2
  209. package/dist/threading.js +2 -2
  210. package/dist/transcript.js +2 -2
  211. package/dist/transfer/types.d.ts +22 -22
  212. package/dist/verified-recall.js +4 -4
  213. package/package.json +2 -2
  214. package/src/access-boundary.ts +2 -1
  215. package/src/access-cli.ts +94 -4
  216. package/src/access-http.ts +40 -2
  217. package/src/access-mcp.ts +55 -2
  218. package/src/access-operations.ts +66 -0
  219. package/src/access-service.ts +148 -73
  220. package/src/access-surface-catalog.test.ts +1 -1
  221. package/src/access-surface-catalog.ts +2 -0
  222. package/src/cli.ts +2 -1
  223. package/src/coding/decision-surfaces.test.ts +279 -0
  224. package/src/coding/decision-surfaces.ts +475 -0
  225. package/src/explicit-capture.ts +3 -12
  226. package/src/logger.ts +13 -4
  227. package/src/namespaces/catalog.test.ts +2 -2
  228. package/src/namespaces/storage.ts +81 -0
  229. package/src/orchestrator.ts +22 -64
  230. package/src/storage.ts +36 -36
  231. package/dist/chunk-2L3KLWOV.js.map +0 -1
  232. package/dist/chunk-2ODBA7MQ.js.map +0 -1
  233. package/dist/chunk-3EVIMVQU.js.map +0 -1
  234. package/dist/chunk-3MY4W5V4.js.map +0 -1
  235. package/dist/chunk-53FDU4CE.js.map +0 -1
  236. package/dist/chunk-5N5DXYDW.js.map +0 -1
  237. package/dist/chunk-5OE4PYY5.js.map +0 -1
  238. package/dist/chunk-FMEKEF47.js.map +0 -1
  239. package/dist/chunk-FYEVFGJD.js.map +0 -1
  240. package/dist/chunk-GKKAXVAJ.js.map +0 -1
  241. package/dist/chunk-OXNOINIP.js.map +0 -1
  242. /package/dist/{auto-sync-5CJBJMPZ.js.map → auto-sync-NUQWSFQD.js.map} +0 -0
  243. /package/dist/{chunk-ROHLEUTH.js.map → chunk-2KAYTPPT.js.map} +0 -0
  244. /package/dist/{chunk-NHQGDVJF.js.map → chunk-2SJCWLQD.js.map} +0 -0
  245. /package/dist/{chunk-YTWNKQ2G.js.map → chunk-3FC6LW6T.js.map} +0 -0
  246. /package/dist/{chunk-XEA4Z7JU.js.map → chunk-4FE2K57M.js.map} +0 -0
  247. /package/dist/{chunk-WI7JKV2T.js.map → chunk-4N3TFFPH.js.map} +0 -0
  248. /package/dist/{chunk-BTVX7ZXZ.js.map → chunk-4NFVPDIL.js.map} +0 -0
  249. /package/dist/{chunk-OUWAQVDJ.js.map → chunk-5CEJH5ZN.js.map} +0 -0
  250. /package/dist/{chunk-6QM24CP7.js.map → chunk-6GJS4BFH.js.map} +0 -0
  251. /package/dist/{chunk-J2FBJ63F.js.map → chunk-6O6A6YUO.js.map} +0 -0
  252. /package/dist/{chunk-HQ6NIBL6.js.map → chunk-7FL4CNPV.js.map} +0 -0
  253. /package/dist/{chunk-5VDJMYTF.js.map → chunk-7WWURLG6.js.map} +0 -0
  254. /package/dist/{chunk-QWRC7GIO.js.map → chunk-A4HH2EWA.js.map} +0 -0
  255. /package/dist/{chunk-4SKKVWLQ.js.map → chunk-AGJH5ISO.js.map} +0 -0
  256. /package/dist/{chunk-WRE3JPAW.js.map → chunk-B4XVLHJA.js.map} +0 -0
  257. /package/dist/{chunk-AJU4PJGY.js.map → chunk-BVKCV2ZY.js.map} +0 -0
  258. /package/dist/{chunk-DQY7NJ5L.js.map → chunk-CTOQEZSN.js.map} +0 -0
  259. /package/dist/{chunk-7OGJQP7T.js.map → chunk-DCWIQFNA.js.map} +0 -0
  260. /package/dist/{chunk-MHQC2WU2.js.map → chunk-DKTSR7EK.js.map} +0 -0
  261. /package/dist/{chunk-RN7MUWON.js.map → chunk-EHISUJFN.js.map} +0 -0
  262. /package/dist/{chunk-WLEB7WCG.js.map → chunk-EO5QWINU.js.map} +0 -0
  263. /package/dist/{chunk-XKXKSQU7.js.map → chunk-EXM3CQTZ.js.map} +0 -0
  264. /package/dist/{chunk-M3FWYURP.js.map → chunk-FE6DQUNJ.js.map} +0 -0
  265. /package/dist/{chunk-LCC5EZTT.js.map → chunk-FIVDN2SM.js.map} +0 -0
  266. /package/dist/{chunk-452WDNFO.js.map → chunk-GG6AJN7A.js.map} +0 -0
  267. /package/dist/{chunk-2IBGHRIO.js.map → chunk-GS55WYRL.js.map} +0 -0
  268. /package/dist/{chunk-IBTZEBUD.js.map → chunk-HYNHLBKA.js.map} +0 -0
  269. /package/dist/{chunk-EVWIEEKZ.js.map → chunk-IQ7WCZRW.js.map} +0 -0
  270. /package/dist/{chunk-B5XMS73R.js.map → chunk-IQVQJJL7.js.map} +0 -0
  271. /package/dist/{chunk-6RHNCKHG.js.map → chunk-K43PI6DQ.js.map} +0 -0
  272. /package/dist/{chunk-OIF36KGD.js.map → chunk-KCQA46NR.js.map} +0 -0
  273. /package/dist/{chunk-2LDBXPLB.js.map → chunk-KF74X62T.js.map} +0 -0
  274. /package/dist/{chunk-MAV46GWQ.js.map → chunk-KYYL4U6X.js.map} +0 -0
  275. /package/dist/{chunk-6GC5SGFE.js.map → chunk-L24JROPR.js.map} +0 -0
  276. /package/dist/{chunk-Q5ZU3RNY.js.map → chunk-LQ6JI4VH.js.map} +0 -0
  277. /package/dist/{chunk-GWKCEM3S.js.map → chunk-MCQDSY4G.js.map} +0 -0
  278. /package/dist/{chunk-HP5FMB6L.js.map → chunk-MDJURR27.js.map} +0 -0
  279. /package/dist/{chunk-T2PO5MUF.js.map → chunk-O7GOFAM3.js.map} +0 -0
  280. /package/dist/{chunk-Z2OXSMZK.js.map → chunk-OBXTMFZQ.js.map} +0 -0
  281. /package/dist/{chunk-K6ZN34WC.js.map → chunk-OV4D5T7V.js.map} +0 -0
  282. /package/dist/{chunk-OMLIFZ4I.js.map → chunk-PH3HOKYW.js.map} +0 -0
  283. /package/dist/{chunk-C3IW2F5Z.js.map → chunk-PLBIPT6I.js.map} +0 -0
  284. /package/dist/{chunk-QY7YA7OL.js.map → chunk-PNLCEFE4.js.map} +0 -0
  285. /package/dist/{chunk-AGRPGAKR.js.map → chunk-PONNZ54D.js.map} +0 -0
  286. /package/dist/{chunk-XZ4WBBB5.js.map → chunk-PWFWCGOO.js.map} +0 -0
  287. /package/dist/{chunk-XWEXT4XU.js.map → chunk-QANVLERJ.js.map} +0 -0
  288. /package/dist/{chunk-W4RVMTHR.js.map → chunk-QRDOSYOR.js.map} +0 -0
  289. /package/dist/{chunk-6IMKOIZ6.js.map → chunk-R6OVFAX6.js.map} +0 -0
  290. /package/dist/{chunk-JOASJWQR.js.map → chunk-SANZHXY2.js.map} +0 -0
  291. /package/dist/{chunk-7DTASS5T.js.map → chunk-SJHM6I4J.js.map} +0 -0
  292. /package/dist/{chunk-M6BVYHBU.js.map → chunk-STOEE37X.js.map} +0 -0
  293. /package/dist/{chunk-LXH3DIF2.js.map → chunk-U7D7NP4J.js.map} +0 -0
  294. /package/dist/{chunk-DRD2Q7HQ.js.map → chunk-UFS7OXGL.js.map} +0 -0
  295. /package/dist/{chunk-H3HDXD3U.js.map → chunk-UPTZYUYJ.js.map} +0 -0
  296. /package/dist/{chunk-3Z7NPD5T.js.map → chunk-UTYBJR7M.js.map} +0 -0
  297. /package/dist/{chunk-LN4YGHTM.js.map → chunk-UUH4YQOF.js.map} +0 -0
  298. /package/dist/{chunk-6VF75M3X.js.map → chunk-VGUOEDTU.js.map} +0 -0
  299. /package/dist/{chunk-44VFF3BB.js.map → chunk-VILEUJXC.js.map} +0 -0
  300. /package/dist/{chunk-7SI52C65.js.map → chunk-VL7DP3OW.js.map} +0 -0
  301. /package/dist/{chunk-7DHTMOND.js.map → chunk-VQ34TERH.js.map} +0 -0
  302. /package/dist/{chunk-6VMIHVGO.js.map → chunk-VX6OBUDW.js.map} +0 -0
  303. /package/dist/{chunk-EW5KFXHL.js.map → chunk-WDXCNJSF.js.map} +0 -0
  304. /package/dist/{chunk-X6IRLNOO.js.map → chunk-WIWPSQYU.js.map} +0 -0
  305. /package/dist/{chunk-DOCTITOP.js.map → chunk-WRFKZEO6.js.map} +0 -0
  306. /package/dist/{chunk-E6ZDCOHM.js.map → chunk-XBZQRZ6G.js.map} +0 -0
  307. /package/dist/{chunk-7YX23JBA.js.map → chunk-XHYGJVXL.js.map} +0 -0
  308. /package/dist/{chunk-JD4SCARD.js.map → chunk-YN4ZT4CW.js.map} +0 -0
  309. /package/dist/{chunk-YXWAILM4.js.map → chunk-YOI3ELXF.js.map} +0 -0
  310. /package/dist/{chunk-XCAZF7KQ.js.map → chunk-ZA2S2VLL.js.map} +0 -0
  311. /package/dist/{chunk-BEUDU7Y4.js.map → chunk-ZCWIH4LH.js.map} +0 -0
  312. /package/dist/{chunk-V25ZAOSB.js.map → chunk-ZPTISBQU.js.map} +0 -0
  313. /package/dist/{contradiction-scan-AZTGFMPY.js.map → contradiction-scan-HWGEOUDS.js.map} +0 -0
  314. /package/dist/{graph-edge-decay-KSVJGCZW.js.map → graph-edge-decay-D7OESCBR.js.map} +0 -0
  315. /package/dist/{resolution-IDTEBJFS.js.map → resolution-MN36NW5P.js.map} +0 -0
@@ -6,9 +6,9 @@ import {
6
6
  shouldFilterSupersededFromRecall,
7
7
  shouldSupersedeExisting,
8
8
  supersessionKeysForFact
9
- } from "./chunk-YTWNKQ2G.js";
9
+ } from "./chunk-3FC6LW6T.js";
10
10
  import "./chunk-MDYG7VI7.js";
11
- import "./chunk-2ODBA7MQ.js";
11
+ import "./chunk-NU3CSQ4H.js";
12
12
  import "./chunk-PZ5AY32C.js";
13
13
  export {
14
14
  applyTemporalSupersession,
package/dist/threading.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ThreadingManager
3
- } from "./chunk-W4RVMTHR.js";
3
+ } from "./chunk-QRDOSYOR.js";
4
4
  import "./chunk-FF4KLI5W.js";
5
- import "./chunk-2ODBA7MQ.js";
5
+ import "./chunk-NU3CSQ4H.js";
6
6
  import "./chunk-PZ5AY32C.js";
7
7
  export {
8
8
  ThreadingManager
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  TranscriptManager,
3
3
  utcDayRange
4
- } from "./chunk-AGRPGAKR.js";
4
+ } from "./chunk-PONNZ54D.js";
5
5
  import "./chunk-S4DDLTPX.js";
6
6
  import "./chunk-KFY3SGN7.js";
7
7
  import "./chunk-FF4KLI5W.js";
8
- import "./chunk-2ODBA7MQ.js";
8
+ import "./chunk-NU3CSQ4H.js";
9
9
  import "./chunk-PZ5AY32C.js";
10
10
  export {
11
11
  TranscriptManager,
@@ -108,6 +108,10 @@ declare const ExportBundleV1Schema: z.ZodObject<{
108
108
  path: string;
109
109
  }>, "many">;
110
110
  }, "strip", z.ZodTypeAny, {
111
+ records: {
112
+ content: string;
113
+ path: string;
114
+ }[];
111
115
  manifest: {
112
116
  schemaVersion: 1;
113
117
  createdAt: string;
@@ -120,11 +124,11 @@ declare const ExportBundleV1Schema: z.ZodObject<{
120
124
  pluginVersion: string;
121
125
  includesTranscripts: boolean;
122
126
  };
127
+ }, {
123
128
  records: {
124
129
  content: string;
125
130
  path: string;
126
131
  }[];
127
- }, {
128
132
  manifest: {
129
133
  schemaVersion: 1;
130
134
  createdAt: string;
@@ -137,10 +141,6 @@ declare const ExportBundleV1Schema: z.ZodObject<{
137
141
  pluginVersion: string;
138
142
  includesTranscripts: boolean;
139
143
  };
140
- records: {
141
- content: string;
142
- path: string;
143
- }[];
144
144
  }>;
145
145
  type ExportBundleV1 = z.infer<typeof ExportBundleV1Schema>;
146
146
  /**
@@ -313,13 +313,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
313
313
  peerProfiles: boolean;
314
314
  }>;
315
315
  }, "strip", z.ZodTypeAny, {
316
+ schemaVersion: string;
316
317
  includes: {
317
318
  procedural: boolean;
318
319
  taxonomy: boolean;
319
320
  identityAnchors: boolean;
320
321
  peerProfiles: boolean;
321
322
  };
322
- schemaVersion: string;
323
323
  id: string;
324
324
  description: string;
325
325
  version: string;
@@ -334,13 +334,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
334
334
  directAnswerEnabled: boolean;
335
335
  };
336
336
  }, {
337
+ schemaVersion: string;
337
338
  includes: {
338
339
  procedural: boolean;
339
340
  taxonomy: boolean;
340
341
  identityAnchors: boolean;
341
342
  peerProfiles: boolean;
342
343
  };
343
- schemaVersion: string;
344
344
  id: string;
345
345
  description: string;
346
346
  version: string;
@@ -464,13 +464,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
464
464
  peerProfiles: boolean;
465
465
  }>;
466
466
  }, "strip", z.ZodTypeAny, {
467
+ schemaVersion: string;
467
468
  includes: {
468
469
  procedural: boolean;
469
470
  taxonomy: boolean;
470
471
  identityAnchors: boolean;
471
472
  peerProfiles: boolean;
472
473
  };
473
- schemaVersion: string;
474
474
  id: string;
475
475
  description: string;
476
476
  version: string;
@@ -485,13 +485,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
485
485
  directAnswerEnabled: boolean;
486
486
  };
487
487
  }, {
488
+ schemaVersion: string;
488
489
  includes: {
489
490
  procedural: boolean;
490
491
  taxonomy: boolean;
491
492
  identityAnchors: boolean;
492
493
  peerProfiles: boolean;
493
494
  };
494
- schemaVersion: string;
495
495
  id: string;
496
496
  description: string;
497
497
  version: string;
@@ -518,13 +518,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
518
518
  pluginVersion: string;
519
519
  includesTranscripts: boolean;
520
520
  capsule: {
521
+ schemaVersion: string;
521
522
  includes: {
522
523
  procedural: boolean;
523
524
  taxonomy: boolean;
524
525
  identityAnchors: boolean;
525
526
  peerProfiles: boolean;
526
527
  };
527
- schemaVersion: string;
528
528
  id: string;
529
529
  description: string;
530
530
  version: string;
@@ -551,13 +551,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
551
551
  pluginVersion: string;
552
552
  includesTranscripts: boolean;
553
553
  capsule: {
554
+ schemaVersion: string;
554
555
  includes: {
555
556
  procedural: boolean;
556
557
  taxonomy: boolean;
557
558
  identityAnchors: boolean;
558
559
  peerProfiles: boolean;
559
560
  };
560
- schemaVersion: string;
561
561
  id: string;
562
562
  description: string;
563
563
  version: string;
@@ -683,13 +683,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
683
683
  peerProfiles: boolean;
684
684
  }>;
685
685
  }, "strip", z.ZodTypeAny, {
686
+ schemaVersion: string;
686
687
  includes: {
687
688
  procedural: boolean;
688
689
  taxonomy: boolean;
689
690
  identityAnchors: boolean;
690
691
  peerProfiles: boolean;
691
692
  };
692
- schemaVersion: string;
693
693
  id: string;
694
694
  description: string;
695
695
  version: string;
@@ -704,13 +704,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
704
704
  directAnswerEnabled: boolean;
705
705
  };
706
706
  }, {
707
+ schemaVersion: string;
707
708
  includes: {
708
709
  procedural: boolean;
709
710
  taxonomy: boolean;
710
711
  identityAnchors: boolean;
711
712
  peerProfiles: boolean;
712
713
  };
713
- schemaVersion: string;
714
714
  id: string;
715
715
  description: string;
716
716
  version: string;
@@ -737,13 +737,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
737
737
  pluginVersion: string;
738
738
  includesTranscripts: boolean;
739
739
  capsule: {
740
+ schemaVersion: string;
740
741
  includes: {
741
742
  procedural: boolean;
742
743
  taxonomy: boolean;
743
744
  identityAnchors: boolean;
744
745
  peerProfiles: boolean;
745
746
  };
746
- schemaVersion: string;
747
747
  id: string;
748
748
  description: string;
749
749
  version: string;
@@ -770,13 +770,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
770
770
  pluginVersion: string;
771
771
  includesTranscripts: boolean;
772
772
  capsule: {
773
+ schemaVersion: string;
773
774
  includes: {
774
775
  procedural: boolean;
775
776
  taxonomy: boolean;
776
777
  identityAnchors: boolean;
777
778
  peerProfiles: boolean;
778
779
  };
779
- schemaVersion: string;
780
780
  id: string;
781
781
  description: string;
782
782
  version: string;
@@ -803,6 +803,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
803
803
  path: string;
804
804
  }>, "many">;
805
805
  }, "strip", z.ZodTypeAny, {
806
+ records: {
807
+ content: string;
808
+ path: string;
809
+ }[];
806
810
  manifest: {
807
811
  schemaVersion: 2;
808
812
  createdAt: string;
@@ -815,13 +819,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
815
819
  pluginVersion: string;
816
820
  includesTranscripts: boolean;
817
821
  capsule: {
822
+ schemaVersion: string;
818
823
  includes: {
819
824
  procedural: boolean;
820
825
  taxonomy: boolean;
821
826
  identityAnchors: boolean;
822
827
  peerProfiles: boolean;
823
828
  };
824
- schemaVersion: string;
825
829
  id: string;
826
830
  description: string;
827
831
  version: string;
@@ -837,11 +841,11 @@ declare const ExportBundleV2Schema: z.ZodObject<{
837
841
  };
838
842
  };
839
843
  };
844
+ }, {
840
845
  records: {
841
846
  content: string;
842
847
  path: string;
843
848
  }[];
844
- }, {
845
849
  manifest: {
846
850
  schemaVersion: 2;
847
851
  createdAt: string;
@@ -854,13 +858,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
854
858
  pluginVersion: string;
855
859
  includesTranscripts: boolean;
856
860
  capsule: {
861
+ schemaVersion: string;
857
862
  includes: {
858
863
  procedural: boolean;
859
864
  taxonomy: boolean;
860
865
  identityAnchors: boolean;
861
866
  peerProfiles: boolean;
862
867
  };
863
- schemaVersion: string;
864
868
  id: string;
865
869
  description: string;
866
870
  version: string;
@@ -876,10 +880,6 @@ declare const ExportBundleV2Schema: z.ZodObject<{
876
880
  } | null | undefined;
877
881
  };
878
882
  };
879
- records: {
880
- content: string;
881
- path: string;
882
- }[];
883
883
  }>;
884
884
  type ExportBundleV2 = z.infer<typeof ExportBundleV2Schema>;
885
885
  type AnyExportManifest = ExportManifestV1 | ExportManifestV2;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-XEA4Z7JU.js";
5
- import "./chunk-HQ6NIBL6.js";
6
- import "./chunk-53FDU4CE.js";
4
+ } from "./chunk-4FE2K57M.js";
5
+ import "./chunk-7FL4CNPV.js";
6
+ import "./chunk-BLIWOONZ.js";
7
7
  import "./chunk-M7XQSUBB.js";
8
8
  import "./chunk-5UZXUTVO.js";
9
9
  import "./chunk-5GPPACXK.js";
@@ -27,7 +27,7 @@ import "./chunk-VS2IYZRU.js";
27
27
  import "./chunk-ZPQVJEVQ.js";
28
28
  import "./chunk-4DJQYKMN.js";
29
29
  import "./chunk-JUC24CTX.js";
30
- import "./chunk-2ODBA7MQ.js";
30
+ import "./chunk-NU3CSQ4H.js";
31
31
  import "./chunk-ZBJMUXZH.js";
32
32
  import "./chunk-PZ5AY32C.js";
33
33
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.684",
3
+ "version": "9.3.686",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2931,7 +2931,7 @@
2931
2931
  "core"
2932
2932
  ],
2933
2933
  "peerDependencies": {
2934
- "@remnic/coding-graph": "^9.3.684"
2934
+ "@remnic/coding-graph": "^9.3.686"
2935
2935
  },
2936
2936
  "peerDependenciesMeta": {
2937
2937
  "@remnic/coding-graph": {
@@ -33,7 +33,8 @@ import { expandTildePath } from "./utils/path.js";
33
33
  export type OperationName =
34
34
  | "memory_get"
35
35
  | "memory_search"
36
- | "memory_store";
36
+ | "memory_store"
37
+ | "coding_decision";
37
38
 
38
39
  // ---------------------------------------------------------------------------
39
40
  // Operation context — what every handler receives
package/src/access-cli.ts CHANGED
@@ -11,10 +11,11 @@ import { getOperation } from "./access-boundary.js";
11
11
  // Importing access-operations registers the pilot boundary operations as a
12
12
  // side effect; the store command dispatches through the registry (issue #1525).
13
13
  import "./access-operations.js";
14
+ import { projectTagProjectId } from "./coding/coding-namespace.js";
14
15
 
15
16
  const OPENCLAW_REMNIC_PLUGIN_IDS = ["openclaw-remnic", "openclaw-engram"] as const;
16
17
 
17
- type CommandName = "browse" | "store";
18
+ type CommandName = "browse" | "store" | "decision";
18
19
 
19
20
  type ParsedArgs = {
20
21
  command: CommandName;
@@ -133,9 +134,9 @@ function writeCliOutput(text: string = ""): void {
133
134
 
134
135
  function usage(): string {
135
136
  return [
136
- "Usage:",
137
137
  " engram-access browse [options]",
138
138
  " engram-access store [options]",
139
+ " engram-access decision [options]",
139
140
  "",
140
141
  "Browse options:",
141
142
  " --namespace <name>",
@@ -160,6 +161,21 @@ function usage(): string {
160
161
  " --source-reason <text>",
161
162
  " --idempotency-key <key>",
162
163
  " --dry-run",
164
+ "",
165
+ "Decision options:",
166
+ " --subcommand <list|get|record|supersede>",
167
+ " --namespace <name>",
168
+ " --session-key <key>",
169
+ " --principal <principal>",
170
+ " --id <id> (get/supersede)",
171
+ " --title <title> (record/supersede)",
172
+ " --status <proposed|accepted|superseded|rejected> (record)",
173
+ " --context <text> (record/supersede)",
174
+ " --decision <text> (record/supersede)",
175
+ " --consequences <text> (record/supersede)",
176
+ " --entity-ref <ref> (repeatable)",
177
+ " --project-tag <tag> (attach coding context for this invocation)",
178
+ " --supersedes-id <id> (alias for --id on supersede)",
163
179
  ].join("\n");
164
180
  }
165
181
 
@@ -194,8 +210,25 @@ const COMMAND_SPECS: Record<CommandName, CommandSpec> = {
194
210
  ]),
195
211
  flagOptions: new Set(["dry-run"]),
196
212
  },
213
+ decision: {
214
+ valueOptions: new Set([
215
+ "subcommand",
216
+ "namespace",
217
+ "session-key",
218
+ "principal",
219
+ "id",
220
+ "title",
221
+ "status",
222
+ "context",
223
+ "decision",
224
+ "consequences",
225
+ "entity-ref",
226
+ "project-tag",
227
+ "supersedes-id",
228
+ ]),
229
+ flagOptions: new Set(),
230
+ },
197
231
  };
198
-
199
232
  const BROWSE_SORT_VALUES = Object.freeze([
200
233
  "updated_desc",
201
234
  "updated_asc",
@@ -207,7 +240,7 @@ type BrowseSort = (typeof BROWSE_SORT_VALUES)[number];
207
240
 
208
241
  function parseArgs(argv: string[]): ParsedArgs {
209
242
  const [commandRaw, ...rest] = argv;
210
- if (commandRaw !== "browse" && commandRaw !== "store") {
243
+ if (commandRaw !== "browse" && commandRaw !== "store" && commandRaw !== "decision") {
211
244
  throw new UsageError("unsupported-command");
212
245
  }
213
246
  const spec = COMMAND_SPECS[commandRaw];
@@ -466,6 +499,59 @@ function expandOptionalPath(value: string | undefined): string | undefined {
466
499
  return value === undefined ? undefined : expandTildePath(value);
467
500
  }
468
501
 
502
+ /**
503
+ * Decision-record surface (issue #1548 Track A PR 2). Dispatches through the
504
+ * same `coding_decision` operation as the MCP tool and HTTP route — one
505
+ * validation boundary, three transports.
506
+ */
507
+ async function runDecision(args: ParsedArgs, preferredId?: string): Promise<void> {
508
+ const subcommand = requireOption(args, "subcommand");
509
+ const { config, service } = buildRuntime(preferredId);
510
+ // The CLI creates a fresh Orchestrator per invocation, so the session
511
+ // coding-context map is empty. If --project-tag + --session-key are
512
+ // provided, attach a coding context BEFORE dispatching so the gate
513
+ // passes and project-scoped writes resolve to the right namespace
514
+ // (review P2).
515
+ const projectTag = getLastOption(args, "project-tag");
516
+ const sessionKey = getLastOption(args, "session-key");
517
+ if (projectTag && projectTag.trim().length > 0 && sessionKey && sessionKey.trim().length > 0) {
518
+ const projectId = projectTagProjectId(projectTag.trim());
519
+ service.setCodingContext({
520
+ sessionKey,
521
+ codingContext: {
522
+ projectId,
523
+ branch: null,
524
+ rootPath: projectId,
525
+ defaultBranch: null,
526
+ },
527
+ });
528
+ }
529
+ const op = getOperation("coding_decision");
530
+ if (!op) {
531
+ throw new Error("access-boundary: operation not registered: coding_decision");
532
+ }
533
+ const output = (await op.run(
534
+ {
535
+ subcommand,
536
+ namespace: getLastOption(args, "namespace"),
537
+ sessionKey,
538
+ id: getLastOption(args, "id"),
539
+ supersedesId: getLastOption(args, "supersedes-id"),
540
+ title: getLastOption(args, "title"),
541
+ status: getLastOption(args, "status"),
542
+ context: getLastOption(args, "context"),
543
+ decision: getLastOption(args, "decision"),
544
+ consequences: getLastOption(args, "consequences"),
545
+ entityRefs: getAllOptions(args, "entity-ref"),
546
+ },
547
+ {
548
+ service,
549
+ authenticatedPrincipal: getLastOption(args, "principal") ?? config.agentAccessHttp.principal,
550
+ },
551
+ )) as { result: unknown };
552
+ console.log(JSON.stringify(output.result, null, 2));
553
+ }
554
+
469
555
  export async function main(
470
556
  argv: string[] = process.argv.slice(2),
471
557
  options: AccessCliOptions = {},
@@ -475,6 +561,10 @@ export async function main(
475
561
  await runBrowse(args, options.preferredId);
476
562
  return;
477
563
  }
564
+ if (args.command === "decision") {
565
+ await runDecision(args, options.preferredId);
566
+ return;
567
+ }
478
568
  await runStore(args, options.preferredId);
479
569
  }
480
570
 
@@ -315,6 +315,7 @@ export class EngramAccessHttpServer {
315
315
  citationsEnabled: options.citationsEnabled,
316
316
  citationsAutoDetect: options.citationsAutoDetect,
317
317
  emitLegacyTools: options.emitLegacyTools,
318
+ codingDecisionVisible: this.service.decisionRecordSurfaceVisible,
318
319
  });
319
320
  }
320
321
 
@@ -1331,6 +1332,35 @@ export class EngramAccessHttpServer {
1331
1332
  return;
1332
1333
  }
1333
1334
 
1335
+ if (req.method === "POST" && pathname === "/engram/v1/coding/decisions") {
1336
+ // Migrated through the access boundary (issue #1525/#1548): the
1337
+ // registry entry owns schema validation and service dispatch. HTTP
1338
+ // resolves the request principal; the boundary re-validates the
1339
+ // cleaned envelope. record/supersede persist decision memories, so they
1340
+ // are gated by the same 30/min write quota as /engram/v1/memories,
1341
+ // suggestions, and observe; list/get are pure reads and stay uncounted
1342
+ // (review P2: apply write quotas to decision writes).
1343
+ const body = await this.readJsonBody(req);
1344
+ const isWriteSubcommand =
1345
+ body.subcommand === "record" || body.subcommand === "supersede";
1346
+ if (isWriteSubcommand) {
1347
+ this.ensureWriteRateLimitAvailable();
1348
+ }
1349
+ const op = getOperation("coding_decision");
1350
+ if (!op) {
1351
+ throw new EngramAccessInputError("access-boundary: operation not registered: coding_decision");
1352
+ }
1353
+ const output = (await op.run(body, {
1354
+ service: this.service,
1355
+ authenticatedPrincipal: this.resolveRequestPrincipal(req),
1356
+ })) as { result: unknown };
1357
+ if (isWriteSubcommand) {
1358
+ this.recordWriteRateLimitHit();
1359
+ }
1360
+ this.respondJson(res, 200, output.result);
1361
+ return;
1362
+ }
1363
+
1334
1364
  if (req.method === "POST" && pathname === "/engram/v1/suggestions") {
1335
1365
  const body = await this.readValidatedBody(req, "suggestionSubmit");
1336
1366
  const request = {
@@ -1707,7 +1737,7 @@ export class EngramAccessHttpServer {
1707
1737
  // extraction write path. Record it so QMD maintenance / writtenSince
1708
1738
  // don't miss the write. Best-effort and failure-tolerant.
1709
1739
  onMergedMemoryWritten: (namespace, storageDir) => {
1710
- this.service.recordCatalogWrite(namespace, storageDir);
1740
+ // #1522: catalog touch handled at the storage chokepoint.
1711
1741
  },
1712
1742
  });
1713
1743
  this.respondJson(res, 200, result);
@@ -2183,6 +2213,13 @@ export class EngramAccessHttpServer {
2183
2213
  typeof toolArgs === "object" &&
2184
2214
  !Array.isArray(toolArgs) &&
2185
2215
  (toolArgs as { dryRun?: unknown }).dryRun === true;
2216
+ const codingDecisionWrite =
2217
+ (toolName === "engram.coding_decision" || toolName === "remnic.coding_decision") &&
2218
+ toolArgs !== null &&
2219
+ typeof toolArgs === "object" &&
2220
+ !Array.isArray(toolArgs) &&
2221
+ ((toolArgs as { subcommand?: unknown }).subcommand === "record" ||
2222
+ (toolArgs as { subcommand?: unknown }).subcommand === "supersede");
2186
2223
  const isMcpWrite =
2187
2224
  request.method === "tools/call" &&
2188
2225
  (
@@ -2210,7 +2247,8 @@ export class EngramAccessHttpServer {
2210
2247
  toolName === "engram.memory_action_apply" ||
2211
2248
  toolName === "remnic.memory_action_apply"
2212
2249
  )
2213
- )
2250
+ ) ||
2251
+ codingDecisionWrite
2214
2252
  );
2215
2253
  if (isMcpWrite) {
2216
2254
  this.ensureWriteRateLimitAvailable();
package/src/access-mcp.ts CHANGED
@@ -109,6 +109,7 @@ const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> = {
109
109
  "engram.memory_get": "memory_get",
110
110
  "engram.memory_search": "memory_search",
111
111
  "engram.memory_store": "memory_store",
112
+ "engram.coding_decision": "coding_decision",
112
113
  };
113
114
 
114
115
  function resolveChatGptInspectorRecallSessionKey(
@@ -304,7 +305,9 @@ export class EngramMcpServer {
304
305
  */
305
306
  private initSessionIds = new Map<string, string>();
306
307
 
307
- /** Whether oai-mem-citation guidance is explicitly enabled via config. */
308
+ /**
309
+ * Whether oai-mem-citation guidance is explicitly enabled via config.
310
+ */
308
311
  private readonly citationsEnabled: boolean;
309
312
  /** Whether to auto-enable citations for Codex adapter connections. */
310
313
  private readonly citationsAutoDetect: boolean;
@@ -314,6 +317,13 @@ export class EngramMcpServer {
314
317
  * set false to halve the advertised `tools/list` surface.
315
318
  */
316
319
  private readonly emitLegacyTools: boolean;
320
+ /**
321
+ * Whether the `coding_decision` tool should appear in `tools/list`. Gated on
322
+ * `codingKnowledge.enabled && codingKnowledge.decisionRecords` (issue #1548
323
+ * Track A PR 2, rule 39). When false the tools array is byte-identical to
324
+ * pre-feature.
325
+ */
326
+ private readonly codingDecisionVisible: boolean;
317
327
 
318
328
  constructor(
319
329
  private readonly service: EngramAccessService,
@@ -322,11 +332,13 @@ export class EngramMcpServer {
322
332
  citationsEnabled?: boolean;
323
333
  citationsAutoDetect?: boolean;
324
334
  emitLegacyTools?: boolean;
335
+ codingDecisionVisible?: boolean;
325
336
  } = {},
326
337
  ) {
327
338
  this.citationsEnabled = options.citationsEnabled === true;
328
339
  this.citationsAutoDetect = options.citationsAutoDetect !== false;
329
340
  this.emitLegacyTools = options.emitLegacyTools !== false;
341
+ this.codingDecisionVisible = options.codingDecisionVisible === true;
330
342
  this.authenticatedPrincipal =
331
343
  options.principal?.trim() ||
332
344
  readEnvVar("OPENCLAW_ENGRAM_ACCESS_PRINCIPAL")?.trim() ||
@@ -1946,6 +1958,47 @@ export class EngramMcpServer {
1946
1958
  },
1947
1959
  },
1948
1960
  ].flatMap((tool) => withToolAliases(tool, this.emitLegacyTools));
1961
+ if (this.codingDecisionVisible) {
1962
+ const codingDecisionTools = withToolAliases(
1963
+ {
1964
+ name: "engram.coding_decision",
1965
+ description:
1966
+ "List, get, record, or supersede decision records in the session's coding namespace (issue #1548 Track A). Subcommands: list, get, record, supersede.",
1967
+ inputSchema: {
1968
+ type: "object",
1969
+ properties: {
1970
+ subcommand: {
1971
+ type: "string",
1972
+ enum: ["list", "get", "record", "supersede"],
1973
+ description: "Which decision-record operation to run.",
1974
+ },
1975
+ sessionKey: { type: "string", description: "Session identifier whose coding context scopes the operation." },
1976
+ namespace: { type: "string", description: "Optional explicit namespace (overrides coding-context overlay)." },
1977
+ id: { type: "string", description: "Decision record id (required for get and supersede)." },
1978
+ title: { type: "string", description: "Decision title (required for record and supersede)." },
1979
+ status: {
1980
+ type: "string",
1981
+ enum: ["proposed", "accepted", "superseded", "rejected"],
1982
+ description: "Decision status (record only; defaults to proposed).",
1983
+ },
1984
+ context: { type: "string", description: "Context/background for the decision." },
1985
+ decision: { type: "string", description: "The decision itself (required for record and supersede)." },
1986
+ consequences: { type: "string", description: "Consequences of the decision." },
1987
+ entityRefs: {
1988
+ type: "array",
1989
+ items: { type: "string" },
1990
+ description: "Entity references the decision relates to.",
1991
+ },
1992
+ supersedesId: { type: "string", description: "Id of the record this decision supersedes (supersede only)." },
1993
+ },
1994
+ required: ["subcommand"],
1995
+ additionalProperties: false,
1996
+ },
1997
+ },
1998
+ this.emitLegacyTools,
1999
+ );
2000
+ this.tools = [...this.tools, ...codingDecisionTools];
2001
+ }
1949
2002
  }
1950
2003
 
1951
2004
  /** Get clientInfo for a specific MCP session. Returns undefined for non-MCP requests. */
@@ -3231,7 +3284,7 @@ export class EngramMcpServer {
3231
3284
  // extraction write path. Record it so QMD maintenance / writtenSince
3232
3285
  // don't miss the write. Best-effort and failure-tolerant.
3233
3286
  onMergedMemoryWritten: (namespace, storageDir) => {
3234
- this.service.recordCatalogWrite(namespace, storageDir);
3287
+ // #1522: catalog touch handled at the storage chokepoint.
3235
3288
  },
3236
3289
  });
3237
3290
  }