@remnic/core 9.69.37 → 9.69.39

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 (697) hide show
  1. package/dist/access-admin-ops-surface.d.ts +14 -12
  2. package/dist/access-admin-ops-surface.js +86 -83
  3. package/dist/access-authorization-probe.d.ts +14 -12
  4. package/dist/access-authorization-probe.js +87 -84
  5. package/dist/access-boundary.d.ts +14 -12
  6. package/dist/access-boundary.js +86 -83
  7. package/dist/access-cli.js +197 -191
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-extraction-force-flush.d.ts +14 -12
  11. package/dist/access-extraction-force-flush.js +86 -83
  12. package/dist/access-health-types.d.ts +2 -1
  13. package/dist/access-http-briefing.d.ts +14 -12
  14. package/dist/access-http-briefing.js +87 -84
  15. package/dist/access-http-lcm-compaction.d.ts +14 -12
  16. package/dist/access-http-lifecycle-flush.d.ts +14 -12
  17. package/dist/access-http-offline-stream.d.ts +14 -12
  18. package/dist/access-http-query.d.ts +3 -2
  19. package/dist/access-http-query.js +88 -85
  20. package/dist/access-http.d.ts +15 -13
  21. package/dist/access-http.js +108 -105
  22. package/dist/access-identity-continuity-surface.d.ts +12 -10
  23. package/dist/access-identity-continuity-surface.js +86 -83
  24. package/dist/access-lcm-surface.d.ts +14 -12
  25. package/dist/access-lcm-surface.js +86 -83
  26. package/dist/access-mcp.d.ts +14 -12
  27. package/dist/access-mcp.js +97 -94
  28. package/dist/access-memory-search-fanout.d.ts +3 -2
  29. package/dist/{access-namespace-preflight-CV5cHujx.d.ts → access-namespace-preflight-DY4z6L5X.d.ts} +1 -1
  30. package/dist/access-namespace-preflight.d.ts +4 -3
  31. package/dist/access-namespace-preflight.js +86 -83
  32. package/dist/access-observe-transcript.d.ts +12 -10
  33. package/dist/access-observe-write-category.d.ts +37 -0
  34. package/dist/access-observe-write-category.js +34 -0
  35. package/dist/access-observe-write-surface.d.ts +17 -15
  36. package/dist/access-observe-write-surface.js +86 -83
  37. package/dist/access-offline-manifest.d.ts +12 -10
  38. package/dist/access-offline-manifest.js +15 -15
  39. package/dist/access-operations-batch.js +91 -88
  40. package/dist/access-operations.d.ts +17 -30
  41. package/dist/access-operations.js +96 -93
  42. package/dist/access-recall-concurrency.d.ts +14 -12
  43. package/dist/access-recall-concurrency.js +86 -83
  44. package/dist/access-recall-response.d.ts +14 -12
  45. package/dist/access-recall-response.js +86 -83
  46. package/dist/access-recall-surface.d.ts +14 -12
  47. package/dist/access-recall-surface.js +86 -83
  48. package/dist/access-schema.d.ts +210 -107
  49. package/dist/access-schema.js +9 -15
  50. package/dist/{access-service-DwHC7lcV.d.ts → access-service-MY4bsr_Q.d.ts} +101 -77
  51. package/dist/access-service-helpers.d.ts +14 -12
  52. package/dist/access-service.d.ts +14 -12
  53. package/dist/access-service.js +86 -83
  54. package/dist/access-surface-catalog.d.ts +14 -12
  55. package/dist/access-surface-catalog.js +88 -85
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +5 -3
  58. package/dist/action-confidence.d.ts +2 -1
  59. package/dist/active-memory-bridge.d.ts +2 -1
  60. package/dist/active-memory-bridge.js +3 -3
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +20 -17
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +2 -1
  65. package/dist/adapters/index.js +4 -4
  66. package/dist/adapters/registry.js +2 -2
  67. package/dist/ambient-provenance.d.ts +2 -1
  68. package/dist/artifact-search.d.ts +2 -1
  69. package/dist/{auto-sync-FSRJDU63.js → auto-sync-RP4C6ZPF.js} +11 -9
  70. package/dist/{auto-sync-FSRJDU63.js.map → auto-sync-RP4C6ZPF.js.map} +1 -1
  71. package/dist/background-generation-config.d.ts +10 -0
  72. package/dist/background-generation-config.js +9 -0
  73. package/dist/background-generation.d.ts +25 -0
  74. package/dist/background-generation.js +11 -0
  75. package/dist/behavior-learner.d.ts +2 -1
  76. package/dist/behavior-signals.d.ts +2 -1
  77. package/dist/bootstrap.d.ts +12 -10
  78. package/dist/briefing-window.d.ts +3 -2
  79. package/dist/briefing.d.ts +3 -2
  80. package/dist/briefing.js +27 -26
  81. package/dist/buffer-surprise-report.d.ts +2 -1
  82. package/dist/buffer-turn-helpers.d.ts +2 -1
  83. package/dist/buffer.d.ts +3 -2
  84. package/dist/buffer.js +8 -8
  85. package/dist/bulk-import/index.d.ts +4 -3
  86. package/dist/calibration.d.ts +3 -1
  87. package/dist/calibration.js +4 -2
  88. package/dist/calibration.js.map +1 -1
  89. package/dist/capabilities.d.ts +2 -1
  90. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  91. package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-IPG4IOFP.js} +2 -2
  92. package/dist/{catalog-Cl4H8N89.d.ts → catalog-CW87xGx8.d.ts} +1 -1
  93. package/dist/causal-behavior.d.ts +2 -1
  94. package/dist/causal-behavior.js +2 -2
  95. package/dist/causal-chain.js +2 -2
  96. package/dist/causal-consolidation.d.ts +2 -1
  97. package/dist/causal-consolidation.js +29 -28
  98. package/dist/causal-consolidation.js.map +1 -1
  99. package/dist/causal-retrieval.js +2 -2
  100. package/dist/causal-trajectory-graph.d.ts +2 -1
  101. package/dist/causal-trajectory-graph.js +2 -2
  102. package/dist/causal-trajectory.js +1 -1
  103. package/dist/{chunk-YHU5XUF4.js → chunk-27MKMTBY.js} +2 -2
  104. package/dist/{chunk-TK4FHQRN.js → chunk-2J3V5QEO.js} +4 -4
  105. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  106. package/dist/chunk-2QG4SLZI.js +44 -0
  107. package/dist/chunk-2QG4SLZI.js.map +1 -0
  108. package/dist/{chunk-TFRDUD3M.js → chunk-2ZTDRNCS.js} +2 -2
  109. package/dist/{chunk-PWPIERBM.js → chunk-37CAEC7E.js} +4 -4
  110. package/dist/{chunk-X7BCM2NA.js → chunk-3EKVN2OP.js} +2 -2
  111. package/dist/{chunk-S2ULTQZR.js → chunk-3N3PBBEH.js} +2 -2
  112. package/dist/{chunk-XCF3SFHD.js → chunk-3NPNBVFR.js} +2 -2
  113. package/dist/{chunk-JO5TQAKW.js → chunk-4BCHFSC7.js} +3 -3
  114. package/dist/{chunk-Q6D7EUSQ.js → chunk-4JVQRFZD.js} +10 -10
  115. package/dist/{chunk-YEDVOYL2.js → chunk-4RX5O34R.js} +2 -2
  116. package/dist/{chunk-JMPYZJQN.js → chunk-4RZLTZVM.js} +4 -4
  117. package/dist/{chunk-Q7JK6YEB.js → chunk-54NX5EG4.js} +2 -2
  118. package/dist/{chunk-GWK7FEUL.js → chunk-5FAGCOZD.js} +4 -4
  119. package/dist/{chunk-2PUE5P7C.js → chunk-5N4MZLEH.js} +5 -5
  120. package/dist/{chunk-B2YKTE7P.js → chunk-5SPCMAUC.js} +10 -10
  121. package/dist/{chunk-3OHISDDW.js → chunk-5U7K4W6K.js} +2 -2
  122. package/dist/{chunk-CYEMS2PG.js → chunk-5YCNDC3C.js} +3 -3
  123. package/dist/{chunk-PAAJWQH5.js → chunk-62D2PAAM.js} +4 -4
  124. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  125. package/dist/chunk-6AGWBKQU.js +94 -0
  126. package/dist/chunk-6AGWBKQU.js.map +1 -0
  127. package/dist/{chunk-326KUXIR.js → chunk-6EHM2AV7.js} +6 -6
  128. package/dist/{chunk-YM7YN37H.js → chunk-6ET2VII7.js} +2 -2
  129. package/dist/chunk-6H2G7RFT.js +58 -0
  130. package/dist/chunk-6H2G7RFT.js.map +1 -0
  131. package/dist/{chunk-A2YQL2FF.js → chunk-6P4REYKL.js} +5 -5
  132. package/dist/{chunk-7RKBPXY6.js → chunk-6YAIN5XJ.js} +2 -2
  133. package/dist/{chunk-2L5FSNPC.js → chunk-A7GQBJP5.js} +10 -10
  134. package/dist/{chunk-UYVXIY6C.js → chunk-AAZEKXUP.js} +2 -2
  135. package/dist/{chunk-JR6PP7UM.js → chunk-ACY4ZPF7.js} +28 -2
  136. package/dist/chunk-ACY4ZPF7.js.map +1 -0
  137. package/dist/{chunk-IQZ6ISFX.js → chunk-AECJY3GJ.js} +2 -2
  138. package/dist/{chunk-76DRU7C4.js → chunk-AENM6GKU.js} +2 -2
  139. package/dist/{chunk-KTRXQQFN.js → chunk-B36GUU6T.js} +4 -4
  140. package/dist/{chunk-TLHNF6GA.js → chunk-BV4ZKIZH.js} +1 -1
  141. package/dist/{chunk-ZWEZXVYH.js → chunk-CEO4DONG.js} +2 -2
  142. package/dist/chunk-CWTCMZGE.js +858 -0
  143. package/dist/chunk-CWTCMZGE.js.map +1 -0
  144. package/dist/{chunk-ZEPVWLCN.js → chunk-CZTPU65V.js} +25 -25
  145. package/dist/{chunk-TRU6JBOI.js → chunk-D545Z7UH.js} +3 -3
  146. package/dist/{chunk-6E5GYDIE.js → chunk-DGS34QSY.js} +2 -2
  147. package/dist/{chunk-65RENJGB.js → chunk-E2AWJ7KQ.js} +8 -4
  148. package/dist/chunk-E2AWJ7KQ.js.map +1 -0
  149. package/dist/{chunk-6Z3WW2MW.js → chunk-ENBPQEVU.js} +3 -3
  150. package/dist/{chunk-DOKKRZPH.js → chunk-EYKIDK33.js} +21 -19
  151. package/dist/chunk-EYKIDK33.js.map +1 -0
  152. package/dist/{chunk-PNEDMJ53.js → chunk-F4EHXVP7.js} +2 -2
  153. package/dist/{chunk-JPKZTCWZ.js → chunk-FNHLI2RE.js} +3 -3
  154. package/dist/{chunk-D2DIYEFW.js → chunk-FWWWUPOE.js} +12 -36
  155. package/dist/chunk-FWWWUPOE.js.map +1 -0
  156. package/dist/{chunk-M3MYMWXG.js → chunk-FXHOZGSE.js} +2 -2
  157. package/dist/{chunk-SAKA6PPL.js → chunk-GAS7KYC7.js} +5 -5
  158. package/dist/{chunk-LSLCFCCQ.js → chunk-GDYU6VF4.js} +1 -1
  159. package/dist/chunk-GDYU6VF4.js.map +1 -0
  160. package/dist/{chunk-2AR5JFD7.js → chunk-GG5FHZJJ.js} +6 -6
  161. package/dist/{chunk-WS3WNLST.js → chunk-GI4ZBWPQ.js} +3 -3
  162. package/dist/{chunk-JYR4LH76.js → chunk-GMIQV6DD.js} +2 -2
  163. package/dist/{chunk-WIKO4SCR.js → chunk-H3TKENU4.js} +5 -5
  164. package/dist/{chunk-ZLN7AROH.js → chunk-HIP6DKJJ.js} +5 -5
  165. package/dist/{chunk-SF6RFI5Z.js → chunk-HWLIMQE2.js} +2 -2
  166. package/dist/{chunk-JZYECQWN.js → chunk-IL6ODG6M.js} +2 -2
  167. package/dist/{chunk-GNR6YEWZ.js → chunk-IQEJIOEU.js} +6 -6
  168. package/dist/{chunk-BICNRVEC.js → chunk-IWO6QXWJ.js} +2 -2
  169. package/dist/{chunk-RN3MVLW3.js → chunk-IYKZJVL5.js} +1 -1
  170. package/dist/chunk-IYKZJVL5.js.map +1 -0
  171. package/dist/{chunk-42DJ235G.js → chunk-J272ODKJ.js} +2 -2
  172. package/dist/{chunk-R3TLVTWW.js → chunk-JDX2OA4R.js} +3 -3
  173. package/dist/{chunk-G5MO3VQA.js → chunk-JKKII6GX.js} +2 -2
  174. package/dist/{chunk-L5OXE4PX.js → chunk-JTQR6L2N.js} +3 -3
  175. package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
  176. package/dist/{chunk-AKE4GGQ3.js → chunk-KQW3YGEN.js} +2 -2
  177. package/dist/{chunk-LMMQKZK3.js → chunk-L63GFNKL.js} +1 -1
  178. package/dist/{chunk-BRZWWUCJ.js → chunk-LMLGBG6H.js} +2 -2
  179. package/dist/{chunk-3IXB77DA.js → chunk-LPYYY4AP.js} +318 -278
  180. package/dist/chunk-LPYYY4AP.js.map +1 -0
  181. package/dist/{chunk-YEN4TREG.js → chunk-LQNRVPTV.js} +54 -567
  182. package/dist/chunk-LQNRVPTV.js.map +1 -0
  183. package/dist/{chunk-CQ7SSBO4.js → chunk-M6HBPLBA.js} +2 -2
  184. package/dist/chunk-MCRVQ5YQ.js +14 -0
  185. package/dist/chunk-MCRVQ5YQ.js.map +1 -0
  186. package/dist/{chunk-3YMDY3ZF.js → chunk-MUTVRKKY.js} +16 -16
  187. package/dist/{chunk-FCFAYMTU.js → chunk-NXGSONWM.js} +2 -2
  188. package/dist/{chunk-4WGAMREC.js → chunk-O4M4BDIJ.js} +2 -2
  189. package/dist/{chunk-5SYI2F47.js → chunk-O76F5QPP.js} +2 -2
  190. package/dist/{chunk-SROIT6QY.js → chunk-OPBFP4TF.js} +28 -11
  191. package/dist/chunk-OPBFP4TF.js.map +1 -0
  192. package/dist/{chunk-7MJBKZPU.js → chunk-P4ZAEYKG.js} +68 -34
  193. package/dist/chunk-P4ZAEYKG.js.map +1 -0
  194. package/dist/{chunk-57GDHV2D.js → chunk-PCOVEDPK.js} +6 -6
  195. package/dist/{chunk-PPTOAHTZ.js → chunk-PGAB2V53.js} +2 -2
  196. package/dist/{chunk-HHDTBYDJ.js → chunk-Q432REND.js} +2 -2
  197. package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
  198. package/dist/{chunk-5LLQAUMI.js → chunk-Q7CLGFA7.js} +3 -3
  199. package/dist/{chunk-KUK56OPR.js → chunk-QHT7MOUF.js} +12 -12
  200. package/dist/{chunk-W6IJMWTZ.js → chunk-QTQ6XKGT.js} +4 -4
  201. package/dist/{chunk-FLLORID2.js → chunk-RLJHJQUY.js} +9 -9
  202. package/dist/{chunk-353KGBKY.js → chunk-RW4QNB4J.js} +4 -4
  203. package/dist/{chunk-GWQVMKUJ.js → chunk-SCXURCVT.js} +3 -3
  204. package/dist/{chunk-FQXJAC3T.js → chunk-SGUDMW2K.js} +4 -4
  205. package/dist/{chunk-LSDEIZ76.js → chunk-TA4C3XB7.js} +6 -6
  206. package/dist/{chunk-YIZ2EUUL.js → chunk-TNZNSMVJ.js} +94 -94
  207. package/dist/{chunk-CIYUWSMZ.js → chunk-TRLOFIQC.js} +2 -2
  208. package/dist/{chunk-TL7NLM2L.js → chunk-TSP5WH72.js} +2 -2
  209. package/dist/{chunk-3K6UFW5B.js → chunk-UHRZ324M.js} +8 -8
  210. package/dist/{chunk-JLXWRQNR.js → chunk-UZEHHXYC.js} +170 -167
  211. package/dist/chunk-UZEHHXYC.js.map +1 -0
  212. package/dist/{chunk-A5UQ52YQ.js → chunk-UZZ7SQT3.js} +5 -5
  213. package/dist/{chunk-GHX5PNXW.js → chunk-VBSNUH4J.js} +2 -2
  214. package/dist/{chunk-MR6LQVZ5.js → chunk-VJIE4D2I.js} +3 -3
  215. package/dist/{chunk-OTPXEE6W.js → chunk-VSL63CFJ.js} +15 -12
  216. package/dist/chunk-VSL63CFJ.js.map +1 -0
  217. package/dist/{chunk-2JGGZICG.js → chunk-WBM2MVBK.js} +2 -2
  218. package/dist/{chunk-CD3C4BJN.js → chunk-WIWLX65T.js} +2 -2
  219. package/dist/{chunk-GDDSXVWR.js → chunk-X4TD4O2F.js} +3 -3
  220. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  221. package/dist/{chunk-FPQDZCUX.js → chunk-XH3HGI2N.js} +2 -2
  222. package/dist/{chunk-C6KRO3SU.js → chunk-XVDZFTN5.js} +4 -4
  223. package/dist/{chunk-3SL52JKD.js → chunk-XVZA6VXC.js} +4 -4
  224. package/dist/chunk-YDVAM7S4.js +221 -0
  225. package/dist/chunk-YDVAM7S4.js.map +1 -0
  226. package/dist/chunk-YFTNZMGR.js +71 -0
  227. package/dist/chunk-YFTNZMGR.js.map +1 -0
  228. package/dist/{chunk-VELCIWJZ.js → chunk-YKREX63Z.js} +19 -10
  229. package/dist/chunk-YKREX63Z.js.map +1 -0
  230. package/dist/{chunk-BLHX5FQW.js → chunk-YUW66UAH.js} +2 -2
  231. package/dist/{chunk-DOQLHCSS.js → chunk-ZBW7A667.js} +2 -2
  232. package/dist/{chunk-4DPDIOVA.js → chunk-ZEGL7YCC.js} +2 -2
  233. package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
  234. package/dist/{chunk-GCBIXUPT.js → chunk-ZMWSYUUL.js} +2 -2
  235. package/dist/{chunk-X2QPKLPL.js → chunk-ZZUVBZL2.js} +2 -2
  236. package/dist/{cli-1mzd5TM4.d.ts → cli-DGq0MNpO.d.ts} +5 -5
  237. package/dist/cli-fallback.d.ts +4 -2
  238. package/dist/cli-fallback.js +3 -1
  239. package/dist/cli.d.ts +16 -14
  240. package/dist/cli.js +139 -134
  241. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  242. package/dist/coding/export-okf-codegraph.js +26 -25
  243. package/dist/coding/export-okf-codegraph.js.map +1 -1
  244. package/dist/coding/pre-action-gate.d.ts +2 -1
  245. package/dist/coding/pre-action-gate.js +2 -2
  246. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  247. package/dist/compat/codex-cli-fallback.js +3 -1
  248. package/dist/compat/codex-cli-fallback.js.map +1 -1
  249. package/dist/compounding/engine.d.ts +3 -2
  250. package/dist/compounding/engine.js +27 -26
  251. package/dist/compounding/preference-consolidator.d.ts +2 -1
  252. package/dist/compression-optimizer.d.ts +2 -1
  253. package/dist/config.d.ts +2 -1
  254. package/dist/config.js +18 -15
  255. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  256. package/dist/connectors/codex-materialize-runner.js +26 -25
  257. package/dist/connectors/codex-materialize.d.ts +2 -1
  258. package/dist/connectors/index.d.ts +2 -1
  259. package/dist/connectors/index.js +29 -28
  260. package/dist/consolidation-provenance-check.d.ts +3 -2
  261. package/dist/consolidation-undo.d.ts +3 -2
  262. package/dist/contradiction/index.d.ts +5 -3
  263. package/dist/contradiction/index.js +7 -7
  264. package/dist/{contradiction-scan-GVD4JJ7B.js → contradiction-scan-BSGKZHYJ.js} +4 -4
  265. package/dist/contradiction-scan-BSGKZHYJ.js.map +1 -0
  266. package/dist/converge-config.d.ts +2 -1
  267. package/dist/convergence-refresh.d.ts +3 -2
  268. package/dist/convergence-refresh.js +29 -28
  269. package/dist/conversation-index/backend.d.ts +2 -1
  270. package/dist/conversation-index/chunker.d.ts +2 -1
  271. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  272. package/dist/conversation-index/indexer.d.ts +2 -1
  273. package/dist/conversation-index/search.d.ts +2 -1
  274. package/dist/corpus-watermark.d.ts +2 -1
  275. package/dist/corpus-watermark.js +29 -28
  276. package/dist/cross-lingual-recall.d.ts +2 -1
  277. package/dist/day-summary.d.ts +2 -1
  278. package/dist/deep-recall-http-glue.d.ts +14 -12
  279. package/dist/deep-recall-http-glue.js +4 -14
  280. package/dist/deep-recall-mcp-tools.d.ts +14 -12
  281. package/dist/deep-recall-policy-llm.d.ts +3 -1
  282. package/dist/deep-recall-policy-llm.js +5 -3
  283. package/dist/deep-recall-seeds.d.ts +2 -1
  284. package/dist/delinearize.d.ts +2 -1
  285. package/dist/dependency-propagation-config.d.ts +2 -1
  286. package/dist/{dependency-propagation-delivery-Bua2ApHV.d.ts → dependency-propagation-delivery-Cq1ekOwV.d.ts} +1 -1
  287. package/dist/direct-answer-wiring.d.ts +2 -1
  288. package/dist/direct-answer.d.ts +2 -1
  289. package/dist/embedding-fallback.d.ts +2 -1
  290. package/dist/enrichment/index.d.ts +2 -1
  291. package/dist/entity-origin-fields.d.ts +2 -1
  292. package/dist/entity-retrieval.d.ts +3 -2
  293. package/dist/entity-retrieval.js +28 -27
  294. package/dist/entity-schema.d.ts +2 -1
  295. package/dist/episodic-context.d.ts +2 -1
  296. package/dist/eval-trajectory-contracts.d.ts +2 -1
  297. package/dist/eval-trajectory-store.d.ts +2 -1
  298. package/dist/eval-trajectory.d.ts +2 -1
  299. package/dist/event-order-recall.js +3 -3
  300. package/dist/explicit-capture.d.ts +12 -10
  301. package/dist/explicit-capture.js +6 -6
  302. package/dist/external-wiki-access.d.ts +14 -12
  303. package/dist/external-wiki-access.js +87 -84
  304. package/dist/external-wiki-collection-registration.d.ts +2 -1
  305. package/dist/external-wiki-collection.d.ts +2 -1
  306. package/dist/external-wiki-mcp-tools.d.ts +14 -12
  307. package/dist/extraction-error-classification.d.ts +2 -1
  308. package/dist/extraction-faithfulness.d.ts +3 -1
  309. package/dist/extraction-faithfulness.js +5 -3
  310. package/dist/extraction-judge-telemetry.d.ts +3 -1
  311. package/dist/extraction-judge-training.d.ts +3 -1
  312. package/dist/extraction-judge.d.ts +3 -1
  313. package/dist/extraction-judge.js +5 -3
  314. package/dist/extraction-liveness.d.ts +2 -1
  315. package/dist/extraction-normalization.d.ts +2 -1
  316. package/dist/extraction-prompt.d.ts +2 -1
  317. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  318. package/dist/extraction-source-grounding.d.ts +2 -1
  319. package/dist/extraction-source-grounding.js +3 -3
  320. package/dist/extraction-span-config.d.ts +2 -1
  321. package/dist/extraction-span-materialize.d.ts +2 -1
  322. package/dist/extraction-span-materialize.js +2 -2
  323. package/dist/extraction.d.ts +2 -1
  324. package/dist/extraction.js +46 -45
  325. package/dist/fallback-llm-codex-subscription.d.ts +79 -0
  326. package/dist/fallback-llm-codex-subscription.js +22 -0
  327. package/dist/fallback-llm-codex-subscription.js.map +1 -0
  328. package/dist/fallback-llm.d.ts +5 -1
  329. package/dist/fallback-llm.js +4 -2
  330. package/dist/{first-start-migration-GZ45G5FS.js → first-start-migration-ZWMV5CX4.js} +6 -6
  331. package/dist/{generic-recall-paths-DJBADojG.d.ts → generic-recall-paths-BcySh_f9.d.ts} +1 -1
  332. package/dist/graph-append-error.d.ts +2 -1
  333. package/dist/graph-dashboard-diff.d.ts +2 -1
  334. package/dist/graph-dashboard-key.d.ts +2 -1
  335. package/dist/graph-dashboard-parser.d.ts +2 -1
  336. package/dist/{graph-edge-decay-ROSUPDX3.js → graph-edge-decay-MKIRZ762.js} +5 -5
  337. package/dist/graph-edge-decay-MKIRZ762.js.map +1 -0
  338. package/dist/graph-edge-reinforcement.d.ts +2 -1
  339. package/dist/graph-jsonl.d.ts +2 -1
  340. package/dist/graph-jsonl.js +3 -3
  341. package/dist/graph-path-reconstruction.d.ts +2 -1
  342. package/dist/graph-path-scoring.d.ts +2 -1
  343. package/dist/graph-snapshot.d.ts +2 -1
  344. package/dist/graph-snapshot.js +3 -3
  345. package/dist/graph.d.ts +2 -1
  346. package/dist/graph.js +2 -2
  347. package/dist/harmonic-retrieval.js +3 -3
  348. package/dist/importance.d.ts +2 -1
  349. package/dist/importers/index.d.ts +2 -1
  350. package/dist/importers/test-utils.d.ts +2 -1
  351. package/dist/in-flight-reads.d.ts +2 -1
  352. package/dist/{index-Bsy8ygLL.d.ts → index-DWOb4wz9.d.ts} +2 -2
  353. package/dist/index.d.ts +713 -705
  354. package/dist/index.js +419 -346
  355. package/dist/intent.d.ts +2 -1
  356. package/dist/lcm/engine.d.ts +2 -1
  357. package/dist/lcm/engine.js +4 -4
  358. package/dist/lcm/index.d.ts +2 -1
  359. package/dist/lcm/index.js +12 -12
  360. package/dist/lcm/tools.d.ts +2 -1
  361. package/dist/lifecycle.d.ts +2 -1
  362. package/dist/live-connectors-runner.d.ts +2 -1
  363. package/dist/local-llm-config.d.ts +7 -1
  364. package/dist/local-llm-config.js +12 -0
  365. package/dist/local-llm.d.ts +2 -1
  366. package/dist/local-model-endpoint.d.ts +2 -1
  367. package/dist/location/index.d.ts +4 -3
  368. package/dist/location/index.js +60 -59
  369. package/dist/maintenance/memory-governance.d.ts +2 -1
  370. package/dist/maintenance/memory-governance.js +26 -25
  371. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  372. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +27 -26
  373. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  374. package/dist/maintenance/rebuild-memory-projection.js +28 -27
  375. package/dist/{maintenance-DItyBwTC.d.ts → maintenance-CW9wCzMP.d.ts} +3 -3
  376. package/dist/mcp-memory-inspector-app.d.ts +14 -12
  377. package/dist/memory-action-policy.d.ts +2 -1
  378. package/dist/memory-cache.d.ts +2 -1
  379. package/dist/memory-controller.d.ts +2 -1
  380. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  381. package/dist/memory-projection-store.d.ts +2 -1
  382. package/dist/memory-provenance.d.ts +2 -1
  383. package/dist/memory-snapshot.d.ts +2 -1
  384. package/dist/memory-subject-cli.d.ts +14 -12
  385. package/dist/memory-subject.d.ts +14 -12
  386. package/dist/memory-worth-outcomes.d.ts +3 -2
  387. package/dist/models-json.d.ts +2 -1
  388. package/dist/namespaces/migrate.d.ts +4 -3
  389. package/dist/namespaces/migrate.js +27 -26
  390. package/dist/namespaces/principal.d.ts +2 -1
  391. package/dist/namespaces/search.d.ts +2 -1
  392. package/dist/namespaces/search.js +6 -6
  393. package/dist/namespaces/storage.d.ts +4 -3
  394. package/dist/namespaces/storage.js +26 -25
  395. package/dist/native-knowledge.d.ts +2 -1
  396. package/dist/offline-sync-impression-drain.d.ts +2 -1
  397. package/dist/offline-sync-impression-drain.js +4 -4
  398. package/dist/operator-doctor-corpus.d.ts +2 -1
  399. package/dist/operator-doctor-corpus.js +30 -29
  400. package/dist/operator-doctor-replica.d.ts +2 -1
  401. package/dist/operator-toolkit.d.ts +4 -3
  402. package/dist/operator-toolkit.js +53 -49
  403. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  404. package/dist/orchestration/maintenance.d.ts +5 -4
  405. package/dist/orchestration/maintenance.js +39 -38
  406. package/dist/{orchestrator-DBUX-aAM.d.ts → orchestrator-ComHLm49.d.ts} +22 -11
  407. package/dist/orchestrator.d.ts +12 -10
  408. package/dist/orchestrator.js +224 -218
  409. package/dist/patterns-cli.d.ts +2 -1
  410. package/dist/{pipeline-BqgcOk1Z.d.ts → pipeline-CiYcqqhl.d.ts} +1 -1
  411. package/dist/policy-runtime.d.ts +2 -1
  412. package/dist/proactive-contention.d.ts +2 -1
  413. package/dist/provenance.d.ts +2 -1
  414. package/dist/provenance.js +2 -2
  415. package/dist/{public-http-CqtZ5kv3.d.ts → public-http-CuK4_Cb1.d.ts} +1 -1
  416. package/dist/qmd-preflight.d.ts +3 -2
  417. package/dist/{qmd-BD0ikV_Y.d.ts → qmd-qXD4vatU.d.ts} +1 -1
  418. package/dist/qmd-recall-cache.d.ts +2 -1
  419. package/dist/qmd.d.ts +3 -2
  420. package/dist/recall-concurrency-config.d.ts +2 -1
  421. package/dist/recall-disclosure-escalation.d.ts +2 -1
  422. package/dist/recall-explain-renderer.d.ts +2 -1
  423. package/dist/recall-explain-renderer.js +3 -3
  424. package/dist/recall-memory-map.d.ts +2 -1
  425. package/dist/recall-navigate-access.d.ts +2 -1
  426. package/dist/recall-navigate-access.js +2 -2
  427. package/dist/recall-navigate-disclosure.d.ts +2 -1
  428. package/dist/recall-navigate-disclosure.js +1 -1
  429. package/dist/recall-navigate.d.ts +2 -1
  430. package/dist/recall-navigate.js +2 -2
  431. package/dist/recall-planner-llm.d.ts +3 -1
  432. package/dist/recall-planner-llm.js +4 -2
  433. package/dist/recall-planner-llm.js.map +1 -1
  434. package/dist/recall-state-view-admission.d.ts +3 -2
  435. package/dist/recall-state-view-admission.js +9 -9
  436. package/dist/recall-state-view-anchors.d.ts +85 -0
  437. package/dist/recall-state-view-anchors.js +21 -0
  438. package/dist/recall-state-view-anchors.js.map +1 -0
  439. package/dist/recall-state-view-inject.js +2 -2
  440. package/dist/recall-state-view-render.js +2 -2
  441. package/dist/recall-state-view-widen.js +2 -2
  442. package/dist/recall-state-view-wire.js +3 -3
  443. package/dist/recall-state-view.d.ts +37 -1
  444. package/dist/recall-state-view.js +11 -3
  445. package/dist/recall-state.d.ts +2 -1
  446. package/dist/recall-tag-filter.d.ts +2 -1
  447. package/dist/recall-timings.d.ts +2 -1
  448. package/dist/recall-xray-cli.d.ts +2 -1
  449. package/dist/recall-xray-cli.js +4 -4
  450. package/dist/recall-xray-renderer.d.ts +2 -1
  451. package/dist/recall-xray-renderer.js +3 -3
  452. package/dist/recall-xray.d.ts +2 -1
  453. package/dist/recall-xray.js +2 -2
  454. package/dist/reconcile/cursor.d.ts +2 -1
  455. package/dist/reconcile/cursor.js +2 -2
  456. package/dist/reconcile/manifest.d.ts +2 -1
  457. package/dist/reconcile/manifest.js +4 -4
  458. package/dist/reconcile/plan.d.ts +2 -1
  459. package/dist/reconcile/plan.js +2 -2
  460. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  461. package/dist/replay/normalizers/claude.d.ts +2 -1
  462. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  463. package/dist/replay/normalizers/shared.d.ts +2 -1
  464. package/dist/replay/runner.d.ts +2 -1
  465. package/dist/replay/types.d.ts +2 -1
  466. package/dist/replica-divergence.d.ts +2 -1
  467. package/dist/replica-peers-config.d.ts +2 -1
  468. package/dist/{resolution-OHJZG45O.js → resolution-4GG3QZRJ.js} +8 -8
  469. package/dist/resolution-4GG3QZRJ.js.map +1 -0
  470. package/dist/resolve-auth-token.d.ts +2 -1
  471. package/dist/resume-bundles.js +19 -16
  472. package/dist/retrieval-agents.d.ts +3 -2
  473. package/dist/retrieval-tiers.d.ts +2 -1
  474. package/dist/routing/engine.d.ts +2 -1
  475. package/dist/routing/store.d.ts +2 -1
  476. package/dist/salvage-envelope.d.ts +2 -1
  477. package/dist/salvage-envelope.js +2 -2
  478. package/dist/schemas.d.ts +160 -160
  479. package/dist/{scope-profiles-BIJMsd0B.d.ts → scope-profiles-BT9rqC3w.d.ts} +1 -1
  480. package/dist/search/embed-helper.d.ts +2 -1
  481. package/dist/search/factory.d.ts +2 -1
  482. package/dist/search/factory.js +5 -5
  483. package/dist/search/index.d.ts +2 -1
  484. package/dist/search/index.js +13 -13
  485. package/dist/search/lancedb-backend.d.ts +2 -1
  486. package/dist/search/meilisearch-backend.d.ts +2 -1
  487. package/dist/search/noop-backend.d.ts +2 -1
  488. package/dist/search/orama-backend.d.ts +2 -1
  489. package/dist/search/port.d.ts +2 -1
  490. package/dist/search/remote-backend.d.ts +2 -1
  491. package/dist/{semantic-consolidation-D7sJocll.d.ts → semantic-consolidation-CmZi7thY.d.ts} +1 -1
  492. package/dist/semantic-consolidation.d.ts +3 -2
  493. package/dist/semantic-consolidation.js +27 -26
  494. package/dist/semantic-rule-promotion.js +26 -25
  495. package/dist/semantic-rule-verifier.d.ts +2 -1
  496. package/dist/semantic-rule-verifier.js +26 -25
  497. package/dist/{service-fwgEngUj.d.ts → service-CLkA7AQB.d.ts} +2 -2
  498. package/dist/session-observer-bands.d.ts +2 -1
  499. package/dist/session-observer-state.d.ts +2 -1
  500. package/dist/shared-context/manager.d.ts +8 -7
  501. package/dist/signal.d.ts +2 -1
  502. package/dist/source-agent-qualifier.d.ts +2 -1
  503. package/dist/source-agent-qualifier.js +41 -40
  504. package/dist/standup/build.js +27 -26
  505. package/dist/{storage-Cbll3-Tk.d.ts → storage-wvX01lht.d.ts} +1 -1
  506. package/dist/storage.d.ts +3 -2
  507. package/dist/storage.js +25 -24
  508. package/dist/subject-config.d.ts +2 -1
  509. package/dist/subject-config.js +2 -2
  510. package/dist/summarizer.d.ts +2 -1
  511. package/dist/summarizer.js +6 -3
  512. package/dist/summary-snapshot.d.ts +2 -1
  513. package/dist/support-passport/index.d.ts +17 -15
  514. package/dist/support-passport/index.js +92 -89
  515. package/dist/temporal-supersession.d.ts +3 -2
  516. package/dist/temporal-timeline-recall.d.ts +2 -1
  517. package/dist/temporal-validity.d.ts +2 -1
  518. package/dist/threading.d.ts +2 -1
  519. package/dist/tier-migration.d.ts +3 -2
  520. package/dist/tier-routing.d.ts +2 -1
  521. package/dist/tier-routing.js +3 -3
  522. package/dist/{tier-stats-VK5PCO2L.js → tier-stats-LUSUUNU6.js} +4 -4
  523. package/dist/topics.d.ts +2 -1
  524. package/dist/transcript.d.ts +2 -1
  525. package/dist/transfer/backup.js +2 -2
  526. package/dist/transfer/capsule-export.js +2 -2
  527. package/dist/transfer/capsule-import.js +3 -3
  528. package/dist/transfer/export-okf.d.ts +2 -1
  529. package/dist/transfer/export-okf.js +26 -25
  530. package/dist/transfer/types.d.ts +78 -78
  531. package/dist/trust-score-stage.d.ts +2 -1
  532. package/dist/trust-score.d.ts +2 -1
  533. package/dist/{types-48sPkWB0.d.ts → types-Cyr32ABj.d.ts} +3 -1
  534. package/dist/types.d.ts +2 -1
  535. package/dist/types.js +1 -1
  536. package/dist/utility-runtime.d.ts +2 -1
  537. package/dist/verified-recall.js +26 -25
  538. package/dist/who-knows-cli.d.ts +14 -12
  539. package/dist/who-knows-cli.js +27 -26
  540. package/dist/who-knows.d.ts +14 -12
  541. package/dist/who-knows.js +26 -25
  542. package/dist/write-envelope.d.ts +7 -1
  543. package/dist/write-envelope.js +1 -1
  544. package/package.json +2 -2
  545. package/src/access-boundary.ts +21 -6
  546. package/src/access-category-alias.test.ts +488 -51
  547. package/src/access-http.test.ts +249 -0
  548. package/src/access-http.ts +2 -0
  549. package/src/access-mcp.test.ts +2 -2
  550. package/src/access-observe-write-category.ts +25 -0
  551. package/src/access-observe-write-surface.ts +58 -57
  552. package/src/access-operations-batch.ts +28 -2
  553. package/src/access-operations.ts +6 -4
  554. package/src/access-schema.ts +106 -50
  555. package/src/access-service.ts +23 -9
  556. package/src/background-generation-config.ts +79 -0
  557. package/src/background-generation.test.ts +123 -0
  558. package/src/background-generation.ts +52 -0
  559. package/src/cli-fallback.ts +8 -2
  560. package/src/config.test.ts +172 -0
  561. package/src/config.ts +2 -43
  562. package/src/fallback-llm-codex-subscription.ts +168 -0
  563. package/src/fallback-llm.test.ts +46 -0
  564. package/src/fallback-llm.ts +60 -48
  565. package/src/index.ts +2 -16
  566. package/src/local-llm-config.ts +84 -0
  567. package/src/orchestration/recall-internal.ts +91 -74
  568. package/src/orchestration/recall-rerank-coordinator.ts +41 -4
  569. package/src/orchestration/recall-search-pipeline.ts +25 -18
  570. package/src/orchestration/recall-state-view-pipeline.test.ts +89 -0
  571. package/src/providers/codex-subscription.test.ts +804 -1
  572. package/src/providers/codex-subscription.ts +407 -65
  573. package/src/recall-rerank-coordinator.test.ts +153 -0
  574. package/src/recall-state-view-anchors.ts +163 -0
  575. package/src/recall-state-view-widen.ts +21 -7
  576. package/src/recall-state-view-zero-diff.test.ts +30 -0
  577. package/src/recall-state-view.test.ts +161 -0
  578. package/src/recall-state-view.ts +206 -35
  579. package/src/summarizer.ts +25 -0
  580. package/src/trust-score-recall-paths.test.ts +1 -1
  581. package/src/types.ts +3 -2
  582. package/src/write-envelope.ts +5 -0
  583. package/dist/chunk-255PC37A.js +0 -120
  584. package/dist/chunk-255PC37A.js.map +0 -1
  585. package/dist/chunk-3IXB77DA.js.map +0 -1
  586. package/dist/chunk-65RENJGB.js.map +0 -1
  587. package/dist/chunk-7MJBKZPU.js.map +0 -1
  588. package/dist/chunk-D2DIYEFW.js.map +0 -1
  589. package/dist/chunk-DOKKRZPH.js.map +0 -1
  590. package/dist/chunk-JLXWRQNR.js.map +0 -1
  591. package/dist/chunk-JR6PP7UM.js.map +0 -1
  592. package/dist/chunk-LSLCFCCQ.js.map +0 -1
  593. package/dist/chunk-OTPXEE6W.js.map +0 -1
  594. package/dist/chunk-RN3MVLW3.js.map +0 -1
  595. package/dist/chunk-SROIT6QY.js.map +0 -1
  596. package/dist/chunk-VELCIWJZ.js.map +0 -1
  597. package/dist/chunk-YEN4TREG.js.map +0 -1
  598. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → access-observe-write-category.js.map} +0 -0
  599. /package/dist/{contradiction-scan-GVD4JJ7B.js.map → background-generation-config.js.map} +0 -0
  600. /package/dist/{graph-edge-decay-ROSUPDX3.js.map → background-generation.js.map} +0 -0
  601. /package/dist/{resolution-OHJZG45O.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  602. /package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-IPG4IOFP.js.map} +0 -0
  603. /package/dist/{chunk-YHU5XUF4.js.map → chunk-27MKMTBY.js.map} +0 -0
  604. /package/dist/{chunk-TK4FHQRN.js.map → chunk-2J3V5QEO.js.map} +0 -0
  605. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  606. /package/dist/{chunk-TFRDUD3M.js.map → chunk-2ZTDRNCS.js.map} +0 -0
  607. /package/dist/{chunk-PWPIERBM.js.map → chunk-37CAEC7E.js.map} +0 -0
  608. /package/dist/{chunk-X7BCM2NA.js.map → chunk-3EKVN2OP.js.map} +0 -0
  609. /package/dist/{chunk-S2ULTQZR.js.map → chunk-3N3PBBEH.js.map} +0 -0
  610. /package/dist/{chunk-XCF3SFHD.js.map → chunk-3NPNBVFR.js.map} +0 -0
  611. /package/dist/{chunk-JO5TQAKW.js.map → chunk-4BCHFSC7.js.map} +0 -0
  612. /package/dist/{chunk-Q6D7EUSQ.js.map → chunk-4JVQRFZD.js.map} +0 -0
  613. /package/dist/{chunk-YEDVOYL2.js.map → chunk-4RX5O34R.js.map} +0 -0
  614. /package/dist/{chunk-JMPYZJQN.js.map → chunk-4RZLTZVM.js.map} +0 -0
  615. /package/dist/{chunk-Q7JK6YEB.js.map → chunk-54NX5EG4.js.map} +0 -0
  616. /package/dist/{chunk-GWK7FEUL.js.map → chunk-5FAGCOZD.js.map} +0 -0
  617. /package/dist/{chunk-2PUE5P7C.js.map → chunk-5N4MZLEH.js.map} +0 -0
  618. /package/dist/{chunk-B2YKTE7P.js.map → chunk-5SPCMAUC.js.map} +0 -0
  619. /package/dist/{chunk-3OHISDDW.js.map → chunk-5U7K4W6K.js.map} +0 -0
  620. /package/dist/{chunk-CYEMS2PG.js.map → chunk-5YCNDC3C.js.map} +0 -0
  621. /package/dist/{chunk-PAAJWQH5.js.map → chunk-62D2PAAM.js.map} +0 -0
  622. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  623. /package/dist/{chunk-326KUXIR.js.map → chunk-6EHM2AV7.js.map} +0 -0
  624. /package/dist/{chunk-YM7YN37H.js.map → chunk-6ET2VII7.js.map} +0 -0
  625. /package/dist/{chunk-A2YQL2FF.js.map → chunk-6P4REYKL.js.map} +0 -0
  626. /package/dist/{chunk-7RKBPXY6.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  627. /package/dist/{chunk-2L5FSNPC.js.map → chunk-A7GQBJP5.js.map} +0 -0
  628. /package/dist/{chunk-UYVXIY6C.js.map → chunk-AAZEKXUP.js.map} +0 -0
  629. /package/dist/{chunk-IQZ6ISFX.js.map → chunk-AECJY3GJ.js.map} +0 -0
  630. /package/dist/{chunk-76DRU7C4.js.map → chunk-AENM6GKU.js.map} +0 -0
  631. /package/dist/{chunk-KTRXQQFN.js.map → chunk-B36GUU6T.js.map} +0 -0
  632. /package/dist/{chunk-TLHNF6GA.js.map → chunk-BV4ZKIZH.js.map} +0 -0
  633. /package/dist/{chunk-ZWEZXVYH.js.map → chunk-CEO4DONG.js.map} +0 -0
  634. /package/dist/{chunk-ZEPVWLCN.js.map → chunk-CZTPU65V.js.map} +0 -0
  635. /package/dist/{chunk-TRU6JBOI.js.map → chunk-D545Z7UH.js.map} +0 -0
  636. /package/dist/{chunk-6E5GYDIE.js.map → chunk-DGS34QSY.js.map} +0 -0
  637. /package/dist/{chunk-6Z3WW2MW.js.map → chunk-ENBPQEVU.js.map} +0 -0
  638. /package/dist/{chunk-PNEDMJ53.js.map → chunk-F4EHXVP7.js.map} +0 -0
  639. /package/dist/{chunk-JPKZTCWZ.js.map → chunk-FNHLI2RE.js.map} +0 -0
  640. /package/dist/{chunk-M3MYMWXG.js.map → chunk-FXHOZGSE.js.map} +0 -0
  641. /package/dist/{chunk-SAKA6PPL.js.map → chunk-GAS7KYC7.js.map} +0 -0
  642. /package/dist/{chunk-2AR5JFD7.js.map → chunk-GG5FHZJJ.js.map} +0 -0
  643. /package/dist/{chunk-WS3WNLST.js.map → chunk-GI4ZBWPQ.js.map} +0 -0
  644. /package/dist/{chunk-JYR4LH76.js.map → chunk-GMIQV6DD.js.map} +0 -0
  645. /package/dist/{chunk-WIKO4SCR.js.map → chunk-H3TKENU4.js.map} +0 -0
  646. /package/dist/{chunk-ZLN7AROH.js.map → chunk-HIP6DKJJ.js.map} +0 -0
  647. /package/dist/{chunk-SF6RFI5Z.js.map → chunk-HWLIMQE2.js.map} +0 -0
  648. /package/dist/{chunk-JZYECQWN.js.map → chunk-IL6ODG6M.js.map} +0 -0
  649. /package/dist/{chunk-GNR6YEWZ.js.map → chunk-IQEJIOEU.js.map} +0 -0
  650. /package/dist/{chunk-BICNRVEC.js.map → chunk-IWO6QXWJ.js.map} +0 -0
  651. /package/dist/{chunk-42DJ235G.js.map → chunk-J272ODKJ.js.map} +0 -0
  652. /package/dist/{chunk-R3TLVTWW.js.map → chunk-JDX2OA4R.js.map} +0 -0
  653. /package/dist/{chunk-G5MO3VQA.js.map → chunk-JKKII6GX.js.map} +0 -0
  654. /package/dist/{chunk-L5OXE4PX.js.map → chunk-JTQR6L2N.js.map} +0 -0
  655. /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
  656. /package/dist/{chunk-AKE4GGQ3.js.map → chunk-KQW3YGEN.js.map} +0 -0
  657. /package/dist/{chunk-LMMQKZK3.js.map → chunk-L63GFNKL.js.map} +0 -0
  658. /package/dist/{chunk-BRZWWUCJ.js.map → chunk-LMLGBG6H.js.map} +0 -0
  659. /package/dist/{chunk-CQ7SSBO4.js.map → chunk-M6HBPLBA.js.map} +0 -0
  660. /package/dist/{chunk-3YMDY3ZF.js.map → chunk-MUTVRKKY.js.map} +0 -0
  661. /package/dist/{chunk-FCFAYMTU.js.map → chunk-NXGSONWM.js.map} +0 -0
  662. /package/dist/{chunk-4WGAMREC.js.map → chunk-O4M4BDIJ.js.map} +0 -0
  663. /package/dist/{chunk-5SYI2F47.js.map → chunk-O76F5QPP.js.map} +0 -0
  664. /package/dist/{chunk-57GDHV2D.js.map → chunk-PCOVEDPK.js.map} +0 -0
  665. /package/dist/{chunk-PPTOAHTZ.js.map → chunk-PGAB2V53.js.map} +0 -0
  666. /package/dist/{chunk-HHDTBYDJ.js.map → chunk-Q432REND.js.map} +0 -0
  667. /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
  668. /package/dist/{chunk-5LLQAUMI.js.map → chunk-Q7CLGFA7.js.map} +0 -0
  669. /package/dist/{chunk-KUK56OPR.js.map → chunk-QHT7MOUF.js.map} +0 -0
  670. /package/dist/{chunk-W6IJMWTZ.js.map → chunk-QTQ6XKGT.js.map} +0 -0
  671. /package/dist/{chunk-FLLORID2.js.map → chunk-RLJHJQUY.js.map} +0 -0
  672. /package/dist/{chunk-353KGBKY.js.map → chunk-RW4QNB4J.js.map} +0 -0
  673. /package/dist/{chunk-GWQVMKUJ.js.map → chunk-SCXURCVT.js.map} +0 -0
  674. /package/dist/{chunk-FQXJAC3T.js.map → chunk-SGUDMW2K.js.map} +0 -0
  675. /package/dist/{chunk-LSDEIZ76.js.map → chunk-TA4C3XB7.js.map} +0 -0
  676. /package/dist/{chunk-YIZ2EUUL.js.map → chunk-TNZNSMVJ.js.map} +0 -0
  677. /package/dist/{chunk-CIYUWSMZ.js.map → chunk-TRLOFIQC.js.map} +0 -0
  678. /package/dist/{chunk-TL7NLM2L.js.map → chunk-TSP5WH72.js.map} +0 -0
  679. /package/dist/{chunk-3K6UFW5B.js.map → chunk-UHRZ324M.js.map} +0 -0
  680. /package/dist/{chunk-A5UQ52YQ.js.map → chunk-UZZ7SQT3.js.map} +0 -0
  681. /package/dist/{chunk-GHX5PNXW.js.map → chunk-VBSNUH4J.js.map} +0 -0
  682. /package/dist/{chunk-MR6LQVZ5.js.map → chunk-VJIE4D2I.js.map} +0 -0
  683. /package/dist/{chunk-2JGGZICG.js.map → chunk-WBM2MVBK.js.map} +0 -0
  684. /package/dist/{chunk-CD3C4BJN.js.map → chunk-WIWLX65T.js.map} +0 -0
  685. /package/dist/{chunk-GDDSXVWR.js.map → chunk-X4TD4O2F.js.map} +0 -0
  686. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  687. /package/dist/{chunk-FPQDZCUX.js.map → chunk-XH3HGI2N.js.map} +0 -0
  688. /package/dist/{chunk-C6KRO3SU.js.map → chunk-XVDZFTN5.js.map} +0 -0
  689. /package/dist/{chunk-3SL52JKD.js.map → chunk-XVZA6VXC.js.map} +0 -0
  690. /package/dist/{chunk-BLHX5FQW.js.map → chunk-YUW66UAH.js.map} +0 -0
  691. /package/dist/{chunk-DOQLHCSS.js.map → chunk-ZBW7A667.js.map} +0 -0
  692. /package/dist/{chunk-4DPDIOVA.js.map → chunk-ZEGL7YCC.js.map} +0 -0
  693. /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
  694. /package/dist/{chunk-GCBIXUPT.js.map → chunk-ZMWSYUUL.js.map} +0 -0
  695. /package/dist/{chunk-X2QPKLPL.js.map → chunk-ZZUVBZL2.js.map} +0 -0
  696. /package/dist/{first-start-migration-GZ45G5FS.js.map → first-start-migration-ZWMV5CX4.js.map} +0 -0
  697. /package/dist/{tier-stats-VK5PCO2L.js.map → tier-stats-LUSUUNU6.js.map} +0 -0
@@ -3,7 +3,7 @@
3
3
  // field-level detail so consumers get clear feedback on malformed requests.
4
4
 
5
5
  import { z } from "zod";
6
- import { isMemoryCategory, MEMORY_CATEGORY_NAMES } from "./write-envelope.js";
6
+
7
7
  import type { MemoryCategory } from "./types.js";
8
8
  import {
9
9
  ACTION_CONFIDENCE_CONTEXT_READINESS,
@@ -267,86 +267,114 @@ export const deepRecallRequestSchema = z.object({
267
267
  // ---------------------------------------------------------------------------
268
268
 
269
269
  const writeContentSchema = z.string().min(1, "content is required").max(50000);
270
+ // ---------------------------------------------------------------------------
271
+ // Category wire contract (issue #2829): truthful input/output modeling.
272
+ // ---------------------------------------------------------------------------
273
+
274
+ /** Canonical input spellings — exactly the `MemoryCategory` union. */
275
+ const MEMORY_CATEGORY_CANONICAL_INPUT = [
276
+ "fact", "preference", "correction", "entity", "decision",
277
+ "relationship", "principle", "commitment", "moment", "skill", "rule", "procedure",
278
+ "reasoning_trace",
279
+ ] as const satisfies readonly MemoryCategory[];
280
+
270
281
  /**
271
- * #2780: the canonical category set stays authoritative (`isMemoryCategory`),
272
- * with exactly four admitted input-compat aliases the project-shaped
273
- * spellings fleet telemetry actually shows (`project`, `project_state`,
274
- * `project-state`, `project_update`) for a project-shaped category that
275
- * does not exist. Exact match only, no case folding: `Project_State` and
276
- * near-misses like `projection` reject like any other invalid category.
277
- * Aliases are NOT enum members: the write-surface funnel coerces them to
278
- * "fact" and reports the coercion on the response. Everything else rejects
279
- * naming the full valid set plus a "use fact" hint so callers learn the
280
- * canonical name.
282
+ * Compatibility alias spellings admitted on input. The four project-shaped
283
+ * categories fleet telemetry actually shows do not exist in the taxonomy;
284
+ * they parse to the canonical "fact". Exact match only — no trimming, no
285
+ * case folding, so near-misses like `projection` or `Project_State` reject
286
+ * like any other invalid category, with the full valid list in the error.
281
287
  */
282
- const PROJECT_CATEGORY_ALIASES: Record<string, true> = {
283
- project: true,
284
- project_state: true,
285
- "project-state": true,
286
- project_update: true,
288
+ const MEMORY_CATEGORY_ALIAS_INPUT = [
289
+ "project",
290
+ "project_state",
291
+ "project-state",
292
+ "project_update",
293
+ ] as const;
294
+
295
+ export type MemoryCategoryAlias = (typeof MEMORY_CATEGORY_ALIAS_INPUT)[number];
296
+
297
+ const MEMORY_CATEGORY_ALIAS_TO_CANONICAL: Readonly<
298
+ Record<MemoryCategoryAlias, Extract<MemoryCategory, "fact">>
299
+ > = {
300
+ project: "fact",
301
+ project_state: "fact",
302
+ "project-state": "fact",
303
+ project_update: "fact",
287
304
  };
288
305
 
306
+ export function isMemoryCategoryAlias(value: string): value is MemoryCategoryAlias {
307
+ return Object.prototype.hasOwnProperty.call(MEMORY_CATEGORY_ALIAS_TO_CANONICAL, value);
308
+ }
309
+
310
+ /** Coercion diagnostic for a write whose input category was a compat alias. */
289
311
  export interface CategoryAliasCoercion {
290
- from: string;
312
+ from: MemoryCategoryAlias;
291
313
  to: "fact";
292
314
  }
293
315
 
294
- export function coerceProjectCategoryAlias<T extends { category?: string }>(
295
- request: T,
296
- ): { request: T; categoryCoercion?: CategoryAliasCoercion } {
297
- const category = request.category;
298
- if (category === undefined || PROJECT_CATEGORY_ALIASES[category] !== true) {
299
- return { request };
300
- }
301
- return { request: { ...request, category: "fact" }, categoryCoercion: { from: category, to: "fact" } };
316
+ /** Boundary-derived coercion note for a retained raw spelling. */
317
+ export function categoryAliasCoercion(rawCategory: string | undefined): CategoryAliasCoercion | undefined {
318
+ return rawCategory !== undefined && isMemoryCategoryAlias(rawCategory)
319
+ ? { from: rawCategory, to: "fact" }
320
+ : undefined;
321
+ }
322
+
323
+ /**
324
+ * Recover the retained alias spelling from a pre-parse raw envelope: the
325
+ * `rawCategory` minted by a previous parse of the same schema (the HTTP/MCP
326
+ * validate-then-dispatch double pass) or an as-yet-untransformed alias
327
+ * `category` (single-parse callers like the CLI store command).
328
+ */
329
+ export function retainedCategoryAlias(rawInput: unknown): MemoryCategoryAlias | undefined {
330
+ if (!rawInput || typeof rawInput !== "object") return undefined;
331
+ const spelling = (rawInput as Record<string, unknown>).rawCategory;
332
+ return typeof spelling === "string" && isMemoryCategoryAlias(spelling) ? spelling : undefined;
302
333
  }
303
334
 
304
335
  /**
305
- * #2780 fix B: an idempotent replay returns the FIRST request's stored
306
- * response, whose coercion note names that request's spelling. Rewrite the
307
- * note from the CURRENT raw request so every response identifies what its
336
+ * An idempotent replay returns the FIRST request's stored response, whose
337
+ * coercion note names that request's spelling. Rewrite the note from the
338
+ * CURRENT request's retained spelling so every response identifies what its
308
339
  * caller actually sent; the stored idempotent result is reused untouched.
309
340
  */
310
- export function reapplyCategoryCoercion<T extends { categoryCoercion?: CategoryAliasCoercion }>(
341
+ export function reapplyCategoryCoercion<T extends object>(
311
342
  response: T,
312
343
  categoryCoercion: CategoryAliasCoercion | undefined,
313
- ): T {
344
+ ): T & { categoryCoercion?: CategoryAliasCoercion } {
345
+ const restamped: T & { categoryCoercion?: CategoryAliasCoercion } = { ...response };
314
346
  if (categoryCoercion !== undefined) {
315
- return { ...response, categoryCoercion };
316
- }
317
- if (response.categoryCoercion === undefined) {
318
- return response;
347
+ restamped.categoryCoercion = categoryCoercion;
348
+ } else {
349
+ delete restamped.categoryCoercion;
319
350
  }
320
- const { categoryCoercion: _stored, ...rest } = response;
321
- return rest as T;
351
+ return restamped;
322
352
  }
323
353
 
324
- const categorySchema = (
325
- z
326
- .string()
327
- .superRefine((value, ctx) => {
328
- if (isMemoryCategory(value)) return;
329
- if (PROJECT_CATEGORY_ALIASES[value] === true) return;
330
- ctx.addIssue({
331
- code: z.ZodIssueCode.custom,
332
- message: `category must be one of: ${MEMORY_CATEGORY_NAMES.join(", ")}; for project state/facts use "fact"`,
333
- });
334
- })
335
- .optional() as unknown as z.ZodType<MemoryCategory | undefined, z.ZodTypeDef, MemoryCategory | undefined>
354
+ const categoryWireSchema = z.enum(
355
+ [...MEMORY_CATEGORY_CANONICAL_INPUT, ...MEMORY_CATEGORY_ALIAS_INPUT],
356
+ {
357
+ errorMap: () => ({
358
+ message:
359
+ `category must be one of: ${[...MEMORY_CATEGORY_CANONICAL_INPUT, ...MEMORY_CATEGORY_ALIAS_INPUT].join(", ")}; ` +
360
+ 'for project state/facts use "fact"',
361
+ }),
362
+ },
336
363
  );
364
+
337
365
  const confidenceSchema = z.number().min(0).max(1).optional();
338
366
  const tagsSchema = z.array(z.string().max(256)).max(50).optional();
339
367
  const entityRefSchema = z.string().trim().max(512).optional();
340
368
  const ttlSchema = z.string().trim().max(128).optional();
341
369
  const sourceReasonSchema = z.string().trim().max(2000).optional();
342
370
 
343
- export const memoryStoreRequestSchema = z.object({
371
+ const memoryStoreRequestShape = z.object({
344
372
  schemaVersion: schemaVersionSchema,
345
373
  idempotencyKey: idempotencyKeySchema,
346
374
  dryRun: dryRunSchema,
347
375
  sessionKey: sessionKeySchema,
348
376
  content: writeContentSchema,
349
- category: categorySchema,
377
+ category: categoryWireSchema.optional(),
350
378
  confidence: confidenceSchema,
351
379
  namespace: namespaceSchema,
352
380
  tags: tagsSchema,
@@ -361,6 +389,34 @@ export const memoryStoreRequestSchema = z.object({
361
389
  projectTag: projectTagSchema,
362
390
  });
363
391
 
392
+ /**
393
+ * Parsed memory-store request (issue #2829): the category transform maps
394
+ * compat aliases to the canonical "fact" DURING parsing, so the output type
395
+ * stays the finite `MemoryCategory` union — never an alias spelling. The raw
396
+ * spelling travels separately on `rawCategory`, minted only by the transform
397
+ * (zod strips it from client bodies), for the write surface's coercion note
398
+ * and idempotent-replay rebuild.
399
+ */
400
+ export type MemoryStoreParsedRequest = Omit<z.infer<typeof memoryStoreRequestShape>, "category"> & {
401
+ category?: MemoryCategory;
402
+ rawCategory?: MemoryCategoryAlias;
403
+ };
404
+
405
+ export const memoryStoreRequestSchema = memoryStoreRequestShape.transform(
406
+ (request): MemoryStoreParsedRequest => {
407
+ if (request.category === undefined || !isMemoryCategoryAlias(request.category)) {
408
+ // Spread so the narrowed canonical category, not the wide wire union,
409
+ // becomes the output type.
410
+ return { ...request, category: request.category };
411
+ }
412
+ return {
413
+ ...request,
414
+ category: MEMORY_CATEGORY_ALIAS_TO_CANONICAL[request.category],
415
+ rawCategory: request.category,
416
+ };
417
+ },
418
+ );
419
+
364
420
  export const suggestionSubmitRequestSchema = memoryStoreRequestSchema;
365
421
 
366
422
  // ---------------------------------------------------------------------------
@@ -290,8 +290,8 @@ import {
290
290
  recordMemoryOutcome,
291
291
  } from "./memory-worth-outcomes.js";
292
292
  import type { LcmMessagePartInput, MessagePartSourceFormat } from "./message-parts/index.js";
293
- import type { ObserveRequest, RecallRequest } from "./access-schema.js";
294
- import { coerceProjectCategoryAlias, type CategoryAliasCoercion } from "./access-schema.js";
293
+ import type { CategoryAliasCoercion, ObserveRequest, RecallRequest } from "./access-schema.js";
294
+ import { splitCanonicalWriteRequest } from "./access-observe-write-category.js";
295
295
  import { recordObjectiveStateSnapshotsFromObservedMessages } from "./objective-state-writers.js";
296
296
  import { objectiveStateStoreOverrideForNamespace } from "./objective-state.js";
297
297
  import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
@@ -959,15 +959,29 @@ export interface MemoryScopePlan {
959
959
  warnings: string[];
960
960
  }
961
961
 
962
+ /**
963
+ * Raw `category` spelling retained at the request boundary when the wire
964
+ * schema's canonicalizing transform mapped a compat alias to "fact"
965
+ * (issue #2829). Diagnostic only: drives the response's `categoryCoercion`
966
+ * note and survives quarantine parking for replay. Never reaches the write
967
+ * candidate or the idempotency fingerprint, and never parses from client
968
+ * input (the wire schema strips it).
969
+ */
970
+ export interface RetainedCategorySpelling {
971
+ rawCategory?: string;
972
+ }
973
+
962
974
  export interface EngramAccessMemoryStoreRequest
963
975
  extends EngramAccessWriteEnvelope,
964
976
  ExplicitCaptureInput,
965
- CodingScopedWriteInput {}
977
+ CodingScopedWriteInput,
978
+ RetainedCategorySpelling {}
966
979
 
967
980
  export interface EngramAccessSuggestionSubmitRequest
968
981
  extends EngramAccessWriteEnvelope,
969
982
  ExplicitCaptureInput,
970
- CodingScopedWriteInput {}
983
+ CodingScopedWriteInput,
984
+ RetainedCategorySpelling {}
971
985
 
972
986
  export interface EngramAccessWriteResponse {
973
987
  schemaVersion: 1;
@@ -981,7 +995,7 @@ export interface EngramAccessWriteResponse {
981
995
  duplicateOf?: string;
982
996
  idempotencyKey?: string;
983
997
  idempotencyReplay?: boolean;
984
- /** #2780: set when a project-shaped category alias was coerced to "fact". */
998
+ /** Present when a project-shaped category alias was coerced to "fact" (#2780/#2829). */
985
999
  categoryCoercion?: CategoryAliasCoercion;
986
1000
  }
987
1001
 
@@ -2941,8 +2955,8 @@ export class EngramAccessService extends SupportPassportAccessServiceBase {
2941
2955
  async peekMemoryStoreIdempotency(
2942
2956
  rawRequest: EngramAccessMemoryStoreRequest
2943
2957
  ): Promise<EngramAccessIdempotencyStatus> {
2944
- // #2780: fingerprint the COERCED category so peek never diverges from the write it predicts.
2945
- const { request } = coerceProjectCategoryAlias(rawRequest);
2958
+ // #2780/#2829: fingerprint the canonical category (schema transform already mapped aliases).
2959
+ const { canonical: request } = splitCanonicalWriteRequest(rawRequest);
2946
2960
  const namespace = await this.resolveCodingScopedWriteNamespace(request);
2947
2961
  const schemaVersion = request.schemaVersion ?? ENGRAM_ACCESS_WRITE_SCHEMA_VERSION;
2948
2962
  if (schemaVersion !== ENGRAM_ACCESS_WRITE_SCHEMA_VERSION) {
@@ -2979,8 +2993,8 @@ export class EngramAccessService extends SupportPassportAccessServiceBase {
2979
2993
  async peekSuggestionSubmitIdempotency(
2980
2994
  rawRequest: EngramAccessSuggestionSubmitRequest
2981
2995
  ): Promise<EngramAccessIdempotencyStatus> {
2982
- // #2780: fingerprint the COERCED category so peek never diverges from the write it predicts.
2983
- const { request } = coerceProjectCategoryAlias(rawRequest);
2996
+ // #2780/#2829: fingerprint the canonical category (schema transform already mapped aliases).
2997
+ const { canonical: request } = splitCanonicalWriteRequest(rawRequest);
2984
2998
  const namespace = await this.resolveCodingScopedWriteNamespace(request);
2985
2999
  const schemaVersion = request.schemaVersion ?? ENGRAM_ACCESS_WRITE_SCHEMA_VERSION;
2986
3000
  if (schemaVersion !== ENGRAM_ACCESS_WRITE_SCHEMA_VERSION) {
@@ -0,0 +1,79 @@
1
+ import { isLoopbackHost } from "./runtime/http-transport.js";
2
+
3
+ export interface BackgroundGenerationConfig {
4
+ /** Full chat-completions URL. Never used as the global OpenAI base URL. */
5
+ endpoint: string;
6
+ /** Loopback bearer from the generated client file. */
7
+ token: string;
8
+ timeoutSeconds: number;
9
+ }
10
+
11
+ function stripTrailingSlashes(value: string): string {
12
+ let end = value.length;
13
+ while (end > 0 && value.charCodeAt(end - 1) === 47) {
14
+ end -= 1;
15
+ }
16
+ return end === value.length ? value : value.slice(0, end);
17
+ }
18
+
19
+ function parseBackgroundEndpoint(value: string, keyName: string): string {
20
+ const trimmed = stripTrailingSlashes(value.trim());
21
+ let parsed: URL;
22
+ try {
23
+ parsed = new URL(trimmed);
24
+ } catch {
25
+ throw new Error(`${keyName} must be an absolute HTTP or HTTPS URL`);
26
+ }
27
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
28
+ throw new Error(`${keyName} must use HTTP or HTTPS`);
29
+ }
30
+ if (parsed.protocol === "http:" && !isLoopbackHost(parsed.hostname)) {
31
+ throw new Error(`${keyName} must use HTTPS unless the host is loopback`);
32
+ }
33
+ if (parsed.username || parsed.password || parsed.search || parsed.hash) {
34
+ throw new Error(
35
+ `${keyName} must not include credentials, query parameters, or fragments`,
36
+ );
37
+ }
38
+ return trimmed;
39
+ }
40
+
41
+ function parseBackgroundGenerationObject(
42
+ raw: unknown,
43
+ keyName: string,
44
+ ): BackgroundGenerationConfig {
45
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
46
+ throw new Error(`${keyName} must be an object`);
47
+ }
48
+ const record = raw as Record<string, unknown>;
49
+ const endpointRaw = record.endpoint;
50
+ if (typeof endpointRaw !== "string" || endpointRaw.trim().length === 0) {
51
+ throw new Error(`${keyName} must include an endpoint URL`);
52
+ }
53
+ const tokenRaw = record.token;
54
+ if (typeof tokenRaw !== "string" || tokenRaw.length === 0) {
55
+ throw new Error(`${keyName} must include a token`);
56
+ }
57
+ const timeoutRaw = record.timeoutSeconds;
58
+ let timeoutSeconds = 120;
59
+ if (timeoutRaw !== undefined) {
60
+ const parsed = typeof timeoutRaw === "number" ? timeoutRaw : Number(timeoutRaw);
61
+ if (!Number.isFinite(parsed) || parsed <= 0) {
62
+ throw new Error(`${keyName} timeoutSeconds must be a finite number > 0`);
63
+ }
64
+ timeoutSeconds = parsed;
65
+ }
66
+ return {
67
+ endpoint: parseBackgroundEndpoint(endpointRaw, `${keyName}.endpoint`),
68
+ token: tokenRaw,
69
+ timeoutSeconds,
70
+ };
71
+ }
72
+
73
+ export function parseBackgroundGeneration(
74
+ cfg: Record<string, unknown>,
75
+ ): BackgroundGenerationConfig | undefined {
76
+ const explicitRaw = cfg.backgroundGeneration;
77
+ if (explicitRaw === undefined || explicitRaw === null) return undefined;
78
+ return parseBackgroundGenerationObject(explicitRaw, "backgroundGeneration");
79
+ }
@@ -0,0 +1,123 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtempSync, rmSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import path from "node:path";
5
+ import test from "node:test";
6
+
7
+ import {
8
+ completeBackgroundGeneration,
9
+ parseBackgroundGenerationJson,
10
+ } from "./background-generation.js";
11
+ import { parseConfig } from "./config.js";
12
+ import { HourlySummarizer } from "./summarizer.js";
13
+
14
+ test("completeBackgroundGeneration posts to the dedicated endpoint with the bearer", async () => {
15
+ const calls: Array<{ url: string; init: RequestInit }> = [];
16
+ const fetchImpl: typeof fetch = async (url, init) => {
17
+ calls.push({ url: String(url), init: init ?? {} });
18
+ return new Response(
19
+ JSON.stringify({
20
+ choices: [{ message: { content: '{"bullets":["one"]}' } }],
21
+ }),
22
+ { status: 200, headers: { "content-type": "application/json" } },
23
+ );
24
+ };
25
+
26
+ const text = await completeBackgroundGeneration(
27
+ {
28
+ backgroundGeneration: {
29
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
30
+ token: "bridge-token-fixture",
31
+ timeoutSeconds: 12,
32
+ },
33
+ },
34
+ [{ role: "user", content: "summarize" }],
35
+ fetchImpl,
36
+ );
37
+
38
+ assert.equal(text, '{"bullets":["one"]}');
39
+ assert.equal(calls.length, 1);
40
+ assert.equal(calls[0]?.url, "http://127.0.0.1:8765/v1/chat/completions");
41
+ const headers = new Headers(calls[0]?.init.headers);
42
+ assert.equal(headers.get("authorization"), "Bearer bridge-token-fixture");
43
+ assert.equal(headers.get("content-type"), "application/json");
44
+ assert.equal(
45
+ calls[0]?.init.body,
46
+ JSON.stringify({ messages: [{ role: "user", content: "summarize" }] }),
47
+ );
48
+ });
49
+
50
+ test("completeBackgroundGeneration refuses an unconfigured client", async () => {
51
+ await assert.rejects(
52
+ () => completeBackgroundGeneration({}, [{ role: "user", content: "x" }]),
53
+ /not configured/,
54
+ );
55
+ });
56
+
57
+ test("parseBackgroundGenerationJson keeps the first valid candidate", () => {
58
+ const parsed = parseBackgroundGenerationJson(
59
+ 'preamble {"bullets":["kept"]} trailing',
60
+ (value) => {
61
+ const record = value as { bullets?: string[] };
62
+ if (!Array.isArray(record.bullets)) throw new Error("no bullets");
63
+ return record.bullets;
64
+ },
65
+ );
66
+ assert.deepEqual(parsed, ["kept"]);
67
+ });
68
+
69
+ test("HourlySummarizer uses backgroundGeneration and not openaiBaseUrl", async () => {
70
+ const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-bg-summary-"));
71
+ const previousFetch = globalThis.fetch;
72
+ const previousXdg = process.env.XDG_CONFIG_HOME;
73
+ process.env.XDG_CONFIG_HOME = memoryDir;
74
+ const calls: string[] = [];
75
+ try {
76
+ const config = parseConfig({
77
+ memoryDir,
78
+ openaiApiKey: "keep-me",
79
+ openaiBaseUrl: "http://127.0.0.1:9999/v1",
80
+ backgroundGeneration: {
81
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
82
+ token: "bridge-token-fixture",
83
+ timeoutSeconds: 12,
84
+ },
85
+ });
86
+ globalThis.fetch = (async (url) => {
87
+ calls.push(String(url));
88
+ if (String(url) !== "http://127.0.0.1:8765/v1/chat/completions") {
89
+ return new Response("not the bridge", { status: 404 });
90
+ }
91
+ return new Response(
92
+ JSON.stringify({
93
+ choices: [{ message: { content: '{"bullets":["bridge-only"]}' } }],
94
+ }),
95
+ { status: 200, headers: { "content-type": "application/json" } },
96
+ );
97
+ }) as typeof fetch;
98
+
99
+ const summarizer = new HourlySummarizer(config);
100
+ const summary = await summarizer.generateSummary(
101
+ "session-bridge",
102
+ new Date("2026-08-23T10:00:00.000Z"),
103
+ [
104
+ {
105
+ timestamp: "2026-08-23T10:01:00.000Z",
106
+ role: "user",
107
+ content: "ship the bridge",
108
+ sessionKey: "session-bridge",
109
+ turnId: "t1",
110
+ },
111
+ ],
112
+ );
113
+
114
+ assert.deepEqual(summary?.bullets, ["bridge-only"]);
115
+ assert.deepEqual(calls, ["http://127.0.0.1:8765/v1/chat/completions"]);
116
+ assert.equal(config.openaiBaseUrl, "http://127.0.0.1:9999/v1");
117
+ } finally {
118
+ globalThis.fetch = previousFetch;
119
+ if (previousXdg === undefined) delete process.env.XDG_CONFIG_HOME;
120
+ else process.env.XDG_CONFIG_HOME = previousXdg;
121
+ rmSync(memoryDir, { recursive: true, force: true });
122
+ }
123
+ });
@@ -0,0 +1,52 @@
1
+ import { extractJsonCandidates } from "./json-extract.js";
2
+ import type { PluginConfig } from "./types.js";
3
+
4
+ export type BackgroundGenerationMessage = {
5
+ role: string;
6
+ content: string;
7
+ };
8
+
9
+ export async function completeBackgroundGeneration(
10
+ config: Pick<PluginConfig, "backgroundGeneration">,
11
+ messages: BackgroundGenerationMessage[],
12
+ fetchImpl: typeof fetch = fetch,
13
+ ): Promise<string> {
14
+ const background = config.backgroundGeneration;
15
+ if (!background) {
16
+ throw new Error("backgroundGeneration is not configured");
17
+ }
18
+ const response = await fetchImpl(background.endpoint, {
19
+ method: "POST",
20
+ headers: {
21
+ "content-type": "application/json",
22
+ authorization: `Bearer ${background.token}`,
23
+ },
24
+ body: JSON.stringify({ messages }),
25
+ signal: AbortSignal.timeout(Math.max(1, background.timeoutSeconds) * 1000),
26
+ });
27
+ if (!response.ok) {
28
+ throw new Error(`background generation failed (${response.status})`);
29
+ }
30
+ const payload = (await response.json()) as {
31
+ choices?: Array<{ message?: { content?: string } }>;
32
+ };
33
+ const text = payload.choices?.[0]?.message?.content;
34
+ if (typeof text !== "string" || text.length === 0) {
35
+ throw new Error("background generation returned no content");
36
+ }
37
+ return text;
38
+ }
39
+
40
+ export function parseBackgroundGenerationJson<T>(
41
+ text: string,
42
+ parse: (value: unknown) => T,
43
+ ): T | null {
44
+ for (const candidate of extractJsonCandidates(text)) {
45
+ try {
46
+ return parse(JSON.parse(candidate));
47
+ } catch {
48
+ // keep trying candidates
49
+ }
50
+ }
51
+ return null;
52
+ }
@@ -59,6 +59,11 @@ export function isCodexCliFallbackRunnerRegistered(): boolean {
59
59
  return processRunner !== undefined;
60
60
  }
61
61
 
62
+ /** Current process-local Codex CLI runner, if any. */
63
+ export function getCodexCliFallbackRunnerForProcess(): CodexCliFallbackRunner | undefined {
64
+ return processRunner;
65
+ }
66
+
62
67
  /**
63
68
  * Registers the process-local Codex CLI transport. Core itself stays free of
64
69
  * child_process here; hosts and benchmark runtimes opt in, and the
@@ -79,14 +84,15 @@ export async function callCodexCliFallback(
79
84
  modelId: string,
80
85
  messages: CodexCliFallbackMessage[],
81
86
  options: CodexCliFallbackOptions = {},
87
+ runner: CodexCliFallbackRunner | undefined = processRunner,
82
88
  ): Promise<CodexCliFallbackResult> {
83
- if (!processRunner) {
89
+ if (!runner) {
84
90
  throw new Error(
85
91
  'codex-cli fallback transport is not registered; install a runner with setCodexCliFallbackRunnerForProcess() before using api: "codex-cli"',
86
92
  );
87
93
  }
88
94
 
89
- return await processRunner({
95
+ return await runner({
90
96
  config: normalizeCodexCliFallbackConfig(config),
91
97
  modelId: normalizeCodexCliModel(modelId),
92
98
  messages,