@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
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Decision-record surface tests (issue #1548 Track A PR 2).
3
+ *
4
+ * Covers:
5
+ * - Gate predicate: all three conditions (config.enabled + decisionRecords +
6
+ * coding context) checked identically.
7
+ * - Subcommand validation: invalid subcommand → error listing valid ones.
8
+ * - Unknown decision id → explicit not-found, not empty success (rule 34).
9
+ * - Prove-fail-before: `engram.coding_decision` absent from tools/list when
10
+ * the config gate is off; present when on (rule 39 byte-identical contract).
11
+ * - Three surfaces → one service method (rule 22 spirit).
12
+ * - Registry fitness: the operation resolves through the boundary.
13
+ */
14
+ import assert from "node:assert/strict";
15
+ import test from "node:test";
16
+ import { EngramAccessInputError, type EngramAccessService } from "../access-service.js";
17
+ import type { Orchestrator } from "../orchestrator.js";
18
+ import { getOperation, type OperationName } from "../access-boundary.js";
19
+ import "../access-operations.js";
20
+ import { EngramMcpServer } from "../access-mcp.js";
21
+ import {
22
+ DECISION_SUBCOMMANDS,
23
+ formatDecisionSubcommands,
24
+ isDecisionRecordSurfaceEnabled,
25
+ isDecisionRecordSurfaceVisible,
26
+ isDecisionSubcommand,
27
+ type DecisionSurfaceRequest,
28
+ type DecisionSurfaceResponse,
29
+ } from "./decision-surfaces.js";
30
+ import type { CodingContext, CodingKnowledgeConfig, PluginConfig } from "../types.js";
31
+
32
+ // ──────────────────────────────────────────────────────────────────────────
33
+ // Test helpers
34
+ // ──────────────────────────────────────────────────────────────────────────
35
+
36
+ const GATE_OFF_CONFIG: CodingKnowledgeConfig = {
37
+ enabled: false,
38
+ decisionRecords: true,
39
+ architectureCard: true,
40
+ sessionDelta: true,
41
+ architectureCardLlmSummary: false,
42
+ structuralProvider: "none",
43
+ structuralProviderCommand: "",
44
+ };
45
+
46
+ const GATE_ON_CONFIG: CodingKnowledgeConfig = {
47
+ ...GATE_OFF_CONFIG,
48
+ enabled: true,
49
+ };
50
+
51
+ const CODING_CONTEXT: CodingContext = {
52
+ projectId: "acme-backend",
53
+ branch: "main",
54
+ rootPath: "/repo/acme",
55
+ defaultBranch: "main",
56
+ };
57
+
58
+ /**
59
+ * Mock service that records calls to `codingDecision`. The mock signature MUST
60
+ * match the production method (rule 33).
61
+ */
62
+ function makeMockService(
63
+ response: DecisionSurfaceResponse = {
64
+ subcommand: "list",
65
+ records: [],
66
+ count: 0,
67
+ },
68
+ ): { service: EngramAccessService; calls: DecisionSurfaceRequest[] } {
69
+ const calls: DecisionSurfaceRequest[] = [];
70
+ const service = {
71
+ codingDecision(
72
+ req: DecisionSurfaceRequest,
73
+ _authenticatedPrincipal?: string,
74
+ ): Promise<DecisionSurfaceResponse> {
75
+ calls.push(req);
76
+ return Promise.resolve(response);
77
+ },
78
+ } as unknown as EngramAccessService;
79
+ return { service, calls };
80
+ }
81
+
82
+ function makeMockServiceWithConfig(
83
+ config: CodingKnowledgeConfig,
84
+ codingContext: CodingContext | null,
85
+ ): EngramAccessService {
86
+ const pluginConfig = {
87
+ codingKnowledge: config,
88
+ codingMode: { projectScope: true },
89
+ } as unknown as PluginConfig;
90
+ const orchestrator = {
91
+ config: pluginConfig,
92
+ getCodingContextForSession: (_sk: string) => codingContext,
93
+ } as unknown as Orchestrator;
94
+ return {
95
+ orchestrator,
96
+ } as unknown as EngramAccessService;
97
+ }
98
+
99
+ // ──────────────────────────────────────────────────────────────────────────
100
+ // Gate predicate tests
101
+ // ──────────────────────────────────────────────────────────────────────────
102
+
103
+ test("gate: disabled when config.enabled is false", () => {
104
+ assert.equal(isDecisionRecordSurfaceEnabled(GATE_OFF_CONFIG, CODING_CONTEXT), false);
105
+ });
106
+
107
+ test("gate: disabled when decisionRecords is false", () => {
108
+ const cfg: CodingKnowledgeConfig = { ...GATE_ON_CONFIG, decisionRecords: false };
109
+ assert.equal(isDecisionRecordSurfaceEnabled(cfg, CODING_CONTEXT), false);
110
+ });
111
+
112
+ test("gate: disabled when no coding context attached", () => {
113
+ assert.equal(isDecisionRecordSurfaceEnabled(GATE_ON_CONFIG, null), false);
114
+ assert.equal(isDecisionRecordSurfaceEnabled(GATE_ON_CONFIG, undefined), false);
115
+ });
116
+
117
+ test("gate: enabled only when all three conditions hold", () => {
118
+ assert.equal(isDecisionRecordSurfaceEnabled(GATE_ON_CONFIG, CODING_CONTEXT), true);
119
+ });
120
+
121
+ test("visibility gate: config-only check for tools/list construction", () => {
122
+ assert.equal(isDecisionRecordSurfaceVisible(GATE_OFF_CONFIG), false);
123
+ assert.equal(isDecisionRecordSurfaceVisible(GATE_ON_CONFIG), true);
124
+ assert.equal(
125
+ isDecisionRecordSurfaceVisible({ ...GATE_ON_CONFIG, decisionRecords: false }),
126
+ false,
127
+ );
128
+ });
129
+
130
+ // ──────────────────────────────────────────────────────────────────────────
131
+ // Subcommand validation tests
132
+ // ──────────────────────────────────────────────────────────────────────────
133
+
134
+ test("subcommand: isDecisionSubcommand accepts all valid values", () => {
135
+ for (const sc of DECISION_SUBCOMMANDS) {
136
+ assert.equal(isDecisionSubcommand(sc), true);
137
+ }
138
+ });
139
+
140
+ test("subcommand: isDecisionSubcommand rejects invalid values", () => {
141
+ assert.equal(isDecisionSubcommand("delete"), false);
142
+ assert.equal(isDecisionSubcommand(""), false);
143
+ assert.equal(isDecisionSubcommand(undefined), false);
144
+ assert.equal(isDecisionSubcommand(42), false);
145
+ });
146
+
147
+ test("subcommand: formatDecisionSubcommands lists all valid options", () => {
148
+ const formatted = formatDecisionSubcommands();
149
+ for (const sc of DECISION_SUBCOMMANDS) {
150
+ assert.ok(formatted.includes(sc), `formatted list should contain "${sc}"`);
151
+ }
152
+ });
153
+
154
+ // ──────────────────────────────────────────────────────────────────────────
155
+ // Prove-fail-before: tools/list gate (rule 39)
156
+ // ──────────────────────────────────────────────────────────────────────────
157
+
158
+ test("tools/list: engram.coding_decision absent when gate off (byte-identical to main)", async () => {
159
+ const stub = { briefingEnabled: true } as unknown as EngramAccessService;
160
+ const server = new EngramMcpServer(stub, { emitLegacyTools: true });
161
+ const response = await server.handleRequest({
162
+ jsonrpc: "2.0",
163
+ id: 1,
164
+ method: "tools/list",
165
+ });
166
+ const tools = (response as { result?: { tools?: Array<{ name: string }> } }).result?.tools ?? [];
167
+ const names = new Set(tools.map((t) => t.name));
168
+ assert.equal(names.has("engram.coding_decision"), false, "tool must be absent when gate is off");
169
+ assert.equal(names.has("remnic.coding_decision"), false, "alias must be absent when gate is off");
170
+ });
171
+
172
+ // ──────────────────────────────────────────────────────────────────────────
173
+ // Registry fitness: coding_decision operation is registered
174
+ // ──────────────────────────────────────────────────────────────────────────
175
+
176
+ test("registry: coding_decision operation is registered through the boundary", () => {
177
+ const op = getOperation("coding_decision" as OperationName);
178
+ assert.ok(op, "coding_decision must be registered in the operation registry");
179
+ assert.equal(op?.spec.name, "coding_decision");
180
+ });
181
+
182
+ // ──────────────────────────────────────────────────────────────────────────
183
+ // Three surfaces → one service method (rule 22 spirit)
184
+ // ──────────────────────────────────────────────────────────────────────────
185
+
186
+ test("MCP surface: engram.coding_decision dispatches through the boundary to service.codingDecision", async () => {
187
+ const { service, calls } = makeMockService();
188
+ const server = new EngramMcpServer(service, { emitLegacyTools: true });
189
+ await server.handleRequest({
190
+ jsonrpc: "2.0",
191
+ id: 1,
192
+ method: "tools/call",
193
+ params: {
194
+ name: "engram.coding_decision",
195
+ arguments: { subcommand: "list", sessionKey: "s1" },
196
+ },
197
+ });
198
+ assert.equal(calls.length, 1, "service.codingDecision called exactly once");
199
+ assert.equal(calls[0]?.subcommand, "list");
200
+ });
201
+
202
+ test("MCP surface: remnic.coding_decision alias dispatches identically", async () => {
203
+ const { service, calls } = makeMockService();
204
+ const server = new EngramMcpServer(service, { emitLegacyTools: true });
205
+ await server.handleRequest({
206
+ jsonrpc: "2.0",
207
+ id: 1,
208
+ method: "tools/call",
209
+ params: {
210
+ name: "remnic.coding_decision",
211
+ arguments: { subcommand: "list", sessionKey: "s1" },
212
+ },
213
+ });
214
+ assert.equal(calls.length, 1);
215
+ assert.equal(calls[0]?.subcommand, "list");
216
+ });
217
+
218
+ test("operation handler: invalid subcommand → error listing valid options", async () => {
219
+ const op = getOperation("coding_decision" as OperationName);
220
+ assert.ok(op);
221
+ await assert.rejects(
222
+ () =>
223
+ op!.run(
224
+ { subcommand: "delete", sessionKey: "s1" },
225
+ { service: makeMockService().service },
226
+ ),
227
+ (err: unknown) => {
228
+ assert.ok(err instanceof EngramAccessInputError, "should be EngramAccessInputError");
229
+ const msg = (err as Error).message;
230
+ assert.ok(msg.includes("list"), "error lists 'list'");
231
+ assert.ok(msg.includes("get"), "error lists 'get'");
232
+ assert.ok(msg.includes("record"), "error lists 'record'");
233
+ assert.ok(msg.includes("supersede"), "error lists 'supersede'");
234
+ return true;
235
+ },
236
+ );
237
+ });
238
+
239
+ test("operation handler: record subcommand calls service with record params", async () => {
240
+ const { service, calls } = makeMockService({
241
+ subcommand: "record",
242
+ memoryId: "mem-1",
243
+ status: "proposed",
244
+ });
245
+ const op = getOperation("coding_decision" as OperationName);
246
+ assert.ok(op);
247
+ await op!.run(
248
+ {
249
+ subcommand: "record",
250
+ sessionKey: "s1",
251
+ title: "Use SQLite for graph store",
252
+ context: "Need a local graph store",
253
+ decision: "Adopt better-sqlite3",
254
+ consequences: "Adds native dep",
255
+ },
256
+ { service },
257
+ );
258
+ assert.equal(calls.length, 1);
259
+ assert.equal(calls[0]?.subcommand, "record");
260
+ assert.equal(calls[0]?.title, "Use SQLite for graph store");
261
+ });
262
+
263
+ test("operation handler: get subcommand with unknown id → not-found response", async () => {
264
+ const { service } = makeMockService({
265
+ subcommand: "get",
266
+ found: false,
267
+ });
268
+ const op = getOperation("coding_decision" as OperationName);
269
+ assert.ok(op);
270
+ const output = (await op!.run(
271
+ { subcommand: "get", id: "nonexistent", sessionKey: "s1" },
272
+ { service },
273
+ )) as { result: DecisionSurfaceResponse };
274
+ const result = output.result;
275
+ assert.equal(result.subcommand, "get");
276
+ if (result.subcommand === "get") {
277
+ assert.equal(result.found, false, "unknown id → explicit not-found, not empty success");
278
+ }
279
+ });