@remnic/core 10.0.90 → 10.0.92

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 (443) hide show
  1. package/dist/access-admin-ops-surface.js +92 -92
  2. package/dist/access-authorization-probe.js +93 -93
  3. package/dist/access-boundary.js +92 -92
  4. package/dist/access-cli.js +200 -199
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +92 -92
  7. package/dist/access-http-admission.d.ts +14 -0
  8. package/dist/access-http-admission.d.ts.map +1 -0
  9. package/dist/access-http-admission.js +9 -0
  10. package/dist/access-http-briefing.js +93 -93
  11. package/dist/access-http-query.js +94 -94
  12. package/dist/access-http-types.d.ts +145 -0
  13. package/dist/access-http-types.d.ts.map +1 -0
  14. package/dist/access-http-types.js +1 -0
  15. package/dist/access-http.d.ts +3 -142
  16. package/dist/access-http.d.ts.map +1 -1
  17. package/dist/access-http.js +121 -120
  18. package/dist/access-identity-continuity-surface.js +92 -92
  19. package/dist/access-lcm-surface.js +92 -92
  20. package/dist/access-mcp.d.ts.map +1 -1
  21. package/dist/access-mcp.js +108 -108
  22. package/dist/access-namespace-preflight.js +92 -92
  23. package/dist/access-observe-write-category.js +12 -12
  24. package/dist/access-observe-write-surface.js +92 -92
  25. package/dist/access-offline-manifest.js +17 -17
  26. package/dist/access-operations-batch.js +96 -96
  27. package/dist/access-operations.js +103 -103
  28. package/dist/access-recall-concurrency.js +92 -92
  29. package/dist/access-recall-diagnostics.js +7 -7
  30. package/dist/access-recall-response.js +92 -92
  31. package/dist/access-recall-surface.js +92 -92
  32. package/dist/access-schema.js +8 -8
  33. package/dist/access-service.d.ts +1 -0
  34. package/dist/access-service.d.ts.map +1 -1
  35. package/dist/access-service.js +92 -92
  36. package/dist/access-surface-catalog.js +94 -94
  37. package/dist/active-memory-bridge.js +6 -6
  38. package/dist/active-recall.js +43 -43
  39. package/dist/adapters/index.js +4 -4
  40. package/dist/adapters/registry.js +2 -2
  41. package/dist/auto-sync-3AZW7MXI.js +3 -3
  42. package/dist/briefing.js +31 -31
  43. package/dist/buffer-admission.d.ts +9 -0
  44. package/dist/buffer-admission.d.ts.map +1 -1
  45. package/dist/buffer-admission.js +3 -1
  46. package/dist/buffer.js +14 -14
  47. package/dist/calibration.js +5 -5
  48. package/dist/causal-behavior.js +2 -2
  49. package/dist/causal-chain.js +2 -2
  50. package/dist/causal-consolidation.js +36 -36
  51. package/dist/causal-retrieval.js +2 -2
  52. package/dist/causal-trajectory-graph.js +2 -2
  53. package/dist/causal-trajectory.js +1 -1
  54. package/dist/{chunk-4XYAWK5H.js → chunk-25BUV3TU.js} +2 -2
  55. package/dist/{chunk-QKES7GU6.js → chunk-2FGLEF7C.js} +2 -2
  56. package/dist/{chunk-3NF4QUNZ.js → chunk-2JSDPUKD.js} +5 -5
  57. package/dist/{chunk-AJHNXIQU.js → chunk-2LCRG2YV.js} +2 -2
  58. package/dist/{chunk-YRZPBN46.js → chunk-3RLK65ZK.js} +2 -2
  59. package/dist/{chunk-V4XE263I.js → chunk-43AA5FVD.js} +1 -1
  60. package/dist/chunk-43AA5FVD.js.map +1 -0
  61. package/dist/{chunk-GCBIXUPT.js → chunk-47F6WWLQ.js} +2 -2
  62. package/dist/{chunk-TSS3D7ZY.js → chunk-4CJTQHEG.js} +3 -3
  63. package/dist/{chunk-QD5R6U5J.js → chunk-4J363OAA.js} +2 -2
  64. package/dist/{chunk-C2HORX76.js → chunk-4WR2OD7K.js} +2 -2
  65. package/dist/{chunk-4X7HQKAG.js → chunk-4XINO77L.js} +2 -2
  66. package/dist/{chunk-OXQ7F45O.js → chunk-5HFXGXE5.js} +6 -6
  67. package/dist/{chunk-ELHJK7LM.js → chunk-5IYOKDM4.js} +12 -12
  68. package/dist/{chunk-LEEAO2TX.js → chunk-5M5M22GW.js} +3 -3
  69. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  70. package/dist/{chunk-QEZ3DW5O.js → chunk-65AUYLU3.js} +5 -5
  71. package/dist/{chunk-B56LORLY.js → chunk-6F42QONS.js} +2 -2
  72. package/dist/{chunk-ADYP7HXE.js → chunk-6F5MJFXY.js} +3 -3
  73. package/dist/{chunk-GOZXQNIM.js → chunk-6P7U3HWG.js} +3 -3
  74. package/dist/{chunk-SBRUTD5O.js → chunk-6SRYCJ5I.js} +10 -10
  75. package/dist/{chunk-JM2YZKCQ.js → chunk-7GLJMDEQ.js} +6 -6
  76. package/dist/{chunk-BLSHFIR6.js → chunk-7HTUYFR3.js} +5 -5
  77. package/dist/{chunk-SYKJBS7S.js → chunk-7W3RXOIG.js} +24 -24
  78. package/dist/{chunk-J6GZ2254.js → chunk-AL3TCNSJ.js} +4 -4
  79. package/dist/{chunk-BIVKPQ6Q.js → chunk-AP6NCP3V.js} +8 -8
  80. package/dist/{chunk-32YX7EJ3.js → chunk-ATPWZ4F7.js} +13 -13
  81. package/dist/{chunk-4GMI5HFH.js → chunk-B4QYQFGY.js} +26 -23
  82. package/dist/chunk-B4QYQFGY.js.map +1 -0
  83. package/dist/{chunk-HXFIILGF.js → chunk-BFPF5N3H.js} +4 -4
  84. package/dist/{chunk-LHGPU6DQ.js → chunk-BJRTMNCB.js} +6 -6
  85. package/dist/{chunk-F74G4KIH.js → chunk-BLJT6JP2.js} +2 -2
  86. package/dist/{chunk-3TKX2RYK.js → chunk-BQZEGOZ4.js} +2 -2
  87. package/dist/{chunk-HLN2HOXX.js → chunk-BRLXOZLM.js} +6 -6
  88. package/dist/{chunk-5UBXIV3N.js → chunk-BSACVS6R.js} +14 -14
  89. package/dist/{chunk-4Q26RNSR.js → chunk-CD4BCCNP.js} +2 -2
  90. package/dist/{chunk-5SOSQTVE.js → chunk-CIEEYVUB.js} +2 -2
  91. package/dist/{chunk-SO4DZIVF.js → chunk-DKAA2IHQ.js} +38 -36
  92. package/dist/chunk-DKAA2IHQ.js.map +1 -0
  93. package/dist/{chunk-G54BOKZ6.js → chunk-E3A7ELSG.js} +9 -9
  94. package/dist/{chunk-OL553AWT.js → chunk-E4IRW2FG.js} +12 -12
  95. package/dist/{chunk-TFEHSPGQ.js → chunk-E5PPE4VA.js} +4 -4
  96. package/dist/{chunk-3UZ2VMKD.js → chunk-E6M225BJ.js} +6 -6
  97. package/dist/{chunk-TIGYOZBU.js → chunk-E6Z4FBX6.js} +4 -4
  98. package/dist/{chunk-2XOFVTTT.js → chunk-E7YZXWIS.js} +2 -2
  99. package/dist/{chunk-QKERFEJS.js → chunk-EFYN5I7Z.js} +2 -2
  100. package/dist/{chunk-M3BEJJNV.js → chunk-ENQCH3SW.js} +8 -1
  101. package/dist/chunk-ENQCH3SW.js.map +1 -0
  102. package/dist/{chunk-D5EV6Y2L.js → chunk-ETZLQOUR.js} +2 -2
  103. package/dist/{chunk-IBDWYRDR.js → chunk-EXHXJETE.js} +2 -2
  104. package/dist/{chunk-APYY5CX3.js → chunk-F55YQP7N.js} +5 -4
  105. package/dist/chunk-F55YQP7N.js.map +1 -0
  106. package/dist/{chunk-S45INSV3.js → chunk-FF6N7BXC.js} +4 -4
  107. package/dist/{chunk-N7EKND7S.js → chunk-FLRP63GU.js} +175 -173
  108. package/dist/chunk-FLRP63GU.js.map +1 -0
  109. package/dist/{chunk-77PDJ4OE.js → chunk-FNXQZGUS.js} +2 -2
  110. package/dist/{chunk-H3WAT6BR.js → chunk-FQKBJJYB.js} +2 -2
  111. package/dist/{chunk-CC4V7HNP.js → chunk-FSO3G4JJ.js} +53 -53
  112. package/dist/{chunk-ZOJUWVAU.js → chunk-GKL6QYZO.js} +1 -1
  113. package/dist/{chunk-2U4LMSEX.js → chunk-GVGAO3WV.js} +3 -3
  114. package/dist/{chunk-DT7SNJH6.js → chunk-HF3BKUVV.js} +4 -4
  115. package/dist/{chunk-TRMZHGIX.js → chunk-HH5LY6RR.js} +15 -15
  116. package/dist/{chunk-Q5XJYCFE.js → chunk-HVX4LPNY.js} +2 -2
  117. package/dist/chunk-I3V3JJS7.js +24 -0
  118. package/dist/chunk-I3V3JJS7.js.map +1 -0
  119. package/dist/{chunk-5MF6LMUY.js → chunk-ID6JGIMD.js} +2 -2
  120. package/dist/{chunk-YLTU2DC4.js → chunk-IHCXMYSE.js} +2 -2
  121. package/dist/{chunk-2G4TV2ML.js → chunk-IPT2OY4B.js} +4 -4
  122. package/dist/{chunk-ZANNIXXE.js → chunk-IQMDQJCD.js} +3 -3
  123. package/dist/{chunk-S7GJNA3K.js → chunk-IQWUACVG.js} +2 -2
  124. package/dist/{chunk-QNSZYTSG.js → chunk-ITHZFHST.js} +2 -2
  125. package/dist/{chunk-QUMKDRCF.js → chunk-JDY34KBL.js} +4 -4
  126. package/dist/{chunk-2N4OUSIA.js → chunk-JV4S6VDH.js} +2 -2
  127. package/dist/{chunk-7LCGFUMB.js → chunk-KQAFEZQX.js} +4 -4
  128. package/dist/{chunk-ARRTLPRC.js → chunk-LUJCQQ3L.js} +3 -3
  129. package/dist/{chunk-DC55RIEZ.js → chunk-M4IEZGCK.js} +4 -4
  130. package/dist/{chunk-TNW6BOMM.js → chunk-MB6ZJDN6.js} +2 -2
  131. package/dist/{chunk-GGRRF4PZ.js → chunk-MDPT6QFK.js} +1 -1
  132. package/dist/{chunk-GGRRF4PZ.js.map → chunk-MDPT6QFK.js.map} +1 -1
  133. package/dist/{chunk-UWRHHRDK.js → chunk-MKRYQROF.js} +5 -5
  134. package/dist/{chunk-P452SEKO.js → chunk-MXHMNKWG.js} +2 -2
  135. package/dist/{chunk-IPD5GC7C.js → chunk-N4KAE2NB.js} +2 -2
  136. package/dist/{chunk-BCCG7VWM.js → chunk-NBH6K6G5.js} +63 -9
  137. package/dist/chunk-NBH6K6G5.js.map +1 -0
  138. package/dist/{chunk-25Q52SOT.js → chunk-NTRUKAAE.js} +3 -3
  139. package/dist/{chunk-3DAWHP5K.js → chunk-NZSRRVJQ.js} +5 -5
  140. package/dist/{chunk-ROGO7FRA.js → chunk-O55EKIEC.js} +2 -2
  141. package/dist/{chunk-J5WI4QRP.js → chunk-OIGJZHDU.js} +4 -4
  142. package/dist/{chunk-K3FH3LAQ.js → chunk-OJXK5C6Z.js} +4 -4
  143. package/dist/{chunk-EA2LA5RI.js → chunk-P4WNBSTW.js} +2 -2
  144. package/dist/{chunk-EURPSF4Y.js → chunk-PH5ZQM35.js} +2 -2
  145. package/dist/{chunk-3ICAWZUU.js → chunk-PLCYKAWH.js} +4 -4
  146. package/dist/{chunk-3Y5X6YFH.js → chunk-PMJFRDJI.js} +2 -2
  147. package/dist/{chunk-PDOOUXCS.js → chunk-PPCLZ4JU.js} +2 -2
  148. package/dist/{chunk-VKILERSL.js → chunk-PWXPRVLK.js} +2 -2
  149. package/dist/{chunk-G6HWNPZA.js → chunk-QJPJXCS4.js} +2 -2
  150. package/dist/{chunk-YMJRLT7S.js → chunk-R2DOFBG4.js} +3 -3
  151. package/dist/{chunk-PKZ274PI.js → chunk-R2LBF4HH.js} +3 -3
  152. package/dist/{chunk-NQP4ZYGG.js → chunk-RGUUBAT5.js} +3 -3
  153. package/dist/{chunk-EWJZZDRG.js → chunk-RHQLIHMB.js} +2 -2
  154. package/dist/{chunk-CYCEROPR.js → chunk-RIMK327Y.js} +7 -7
  155. package/dist/{chunk-P4JED3ZL.js → chunk-RMXS4I66.js} +2 -2
  156. package/dist/{chunk-TX6EHB2Q.js → chunk-RRJBDXAQ.js} +2 -2
  157. package/dist/{chunk-MTTYIXSU.js → chunk-RRTVGD3J.js} +9 -9
  158. package/dist/{chunk-OZNBZJ3S.js → chunk-SLDRXK37.js} +8 -8
  159. package/dist/{chunk-NIVKG3DS.js → chunk-SUSW74WU.js} +6 -6
  160. package/dist/{chunk-G67EUQAB.js → chunk-TG3R2SID.js} +4 -4
  161. package/dist/{chunk-3PJEDHLD.js → chunk-U6UNF5ZS.js} +3 -3
  162. package/dist/{chunk-YAVIBVCU.js → chunk-UA2NDTIU.js} +4 -4
  163. package/dist/{chunk-KVSOEVAF.js → chunk-UE6RRXMF.js} +2 -2
  164. package/dist/{chunk-TAUHAP5J.js → chunk-UXPXOVJI.js} +9 -9
  165. package/dist/{chunk-KZSGBWOJ.js → chunk-V2KGDESV.js} +2 -2
  166. package/dist/{chunk-UH3FPX3L.js → chunk-W7K5BP3M.js} +2 -2
  167. package/dist/{chunk-TQ4SCPGQ.js → chunk-WRT7GJ2D.js} +3 -3
  168. package/dist/{chunk-IHJZSRDM.js → chunk-X562NQFA.js} +90 -89
  169. package/dist/chunk-X562NQFA.js.map +1 -0
  170. package/dist/{chunk-M5O2ANZD.js → chunk-XDSCJOH7.js} +24 -22
  171. package/dist/chunk-XDSCJOH7.js.map +1 -0
  172. package/dist/{chunk-CN7Q3T2J.js → chunk-XNI3URDR.js} +2 -2
  173. package/dist/{chunk-7O2MC42R.js → chunk-XNRLRNQF.js} +2 -2
  174. package/dist/{chunk-64S6X4IU.js → chunk-XTN54NML.js} +4 -4
  175. package/dist/{chunk-ZBFLV657.js → chunk-XYKBWTWI.js} +2 -2
  176. package/dist/{chunk-PWPIERBM.js → chunk-YCNIGRRF.js} +4 -4
  177. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  178. package/dist/{chunk-DZ7DPDVW.js → chunk-YODUDA6R.js} +15 -15
  179. package/dist/{chunk-2K3AUDH7.js → chunk-YYOMGOHB.js} +4 -4
  180. package/dist/{chunk-ROKDHO74.js → chunk-Z7JIZ42P.js} +4 -4
  181. package/dist/{chunk-ATWFYXEN.js → chunk-ZTTCDQ4I.js} +146 -143
  182. package/dist/chunk-ZTTCDQ4I.js.map +1 -0
  183. package/dist/cli.d.ts.map +1 -1
  184. package/dist/cli.js +154 -153
  185. package/dist/coding/export-okf-codegraph.js +30 -30
  186. package/dist/coding/pre-action-gate.js +2 -2
  187. package/dist/compounding/engine.js +32 -32
  188. package/dist/config.d.ts.map +1 -1
  189. package/dist/config.js +43 -43
  190. package/dist/connectors/codex-materialize-runner.js +33 -33
  191. package/dist/connectors/codex-materialize.js +2 -2
  192. package/dist/connectors/index.js +36 -36
  193. package/dist/connectors/live/framework.d.ts +7 -0
  194. package/dist/connectors/live/framework.d.ts.map +1 -1
  195. package/dist/connectors/live/google-drive.d.ts +15 -3
  196. package/dist/connectors/live/google-drive.d.ts.map +1 -1
  197. package/dist/consolidation-provenance-check.js +2 -2
  198. package/dist/contradiction/index.js +6 -6
  199. package/dist/{contradiction-scan-P7KXB5R4.js → contradiction-scan-P2MHYFVG.js} +5 -5
  200. package/dist/convergence-refresh.js +33 -33
  201. package/dist/corpus-watermark.js +33 -33
  202. package/dist/dashboard-runtime.js +2 -2
  203. package/dist/deep-recall-http-glue.js +9 -9
  204. package/dist/deep-recall.js +2 -2
  205. package/dist/embedding-fallback.js +3 -3
  206. package/dist/entity-retrieval.js +32 -32
  207. package/dist/event-order-recall.js +3 -3
  208. package/dist/explicit-capture.js +10 -10
  209. package/dist/external-wiki-access.js +93 -93
  210. package/dist/extraction-evidence-class.js +2 -2
  211. package/dist/extraction-normalization.js +1 -1
  212. package/dist/extraction-source-grounding.js +3 -3
  213. package/dist/extraction.js +47 -47
  214. package/dist/{first-start-migration-A6PHIBUQ.js → first-start-migration-QFI7B5SH.js} +7 -7
  215. package/dist/{graph-edge-decay-EKWXRBWF.js → graph-edge-decay-OEX5OGMI.js} +6 -6
  216. package/dist/graph-jsonl.js +3 -3
  217. package/dist/graph-snapshot.js +3 -3
  218. package/dist/graph.js +2 -2
  219. package/dist/harmonic-retrieval.js +30 -30
  220. package/dist/index.js +309 -308
  221. package/dist/lcm/engine.js +3 -3
  222. package/dist/lcm/index.js +8 -8
  223. package/dist/live-connectors-runner.d.ts +2 -0
  224. package/dist/live-connectors-runner.d.ts.map +1 -1
  225. package/dist/live-connectors-runner.js +3 -3
  226. package/dist/local-llm-config.js +1 -1
  227. package/dist/local-llm.js +2 -2
  228. package/dist/location/index.js +33 -33
  229. package/dist/maintenance/memory-governance.js +31 -31
  230. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +30 -30
  231. package/dist/maintenance/rebuild-memory-projection-runner.js +33 -33
  232. package/dist/maintenance/rebuild-memory-projection.js +32 -32
  233. package/dist/memory-browse-operations.js +93 -93
  234. package/dist/memory-browse.js +10 -10
  235. package/dist/memory-subject.js +1 -1
  236. package/dist/namespaces/migrate.js +32 -32
  237. package/dist/namespaces/search.js +7 -7
  238. package/dist/namespaces/storage.js +31 -31
  239. package/dist/offline-sync-changeset-generations.js +4 -4
  240. package/dist/offline-sync-embedding-generation.js +3 -3
  241. package/dist/offline-sync-impression-drain.js +3 -3
  242. package/dist/offline-sync-snapshot-stream.js +6 -6
  243. package/dist/offline-sync.js +7 -7
  244. package/dist/operator-doctor-corpus.js +34 -34
  245. package/dist/operator-toolkit.js +58 -58
  246. package/dist/orchestration/backlog-scheduler.js +201 -200
  247. package/dist/orchestration/backlog-scheduler.js.map +1 -1
  248. package/dist/orchestration/buffer-drain-runner.js +201 -200
  249. package/dist/orchestration/maintenance.js +48 -48
  250. package/dist/orchestration/turn-ingestion.d.ts +2 -2
  251. package/dist/orchestration/turn-ingestion.d.ts.map +1 -1
  252. package/dist/orchestrator.d.ts +2 -0
  253. package/dist/orchestrator.d.ts.map +1 -1
  254. package/dist/orchestrator.js +201 -200
  255. package/dist/provenance.js +2 -2
  256. package/dist/qmd.js +6 -6
  257. package/dist/recall-explain-renderer.js +3 -3
  258. package/dist/recall-navigate-access.js +2 -2
  259. package/dist/recall-navigate-disclosure.js +2 -2
  260. package/dist/recall-navigate.js +2 -2
  261. package/dist/recall-navigation-operations.js +93 -93
  262. package/dist/recall-navigation.js +92 -92
  263. package/dist/recall-state-view-admission.js +7 -7
  264. package/dist/recall-why-service.js +14 -14
  265. package/dist/recall-why.js +5 -5
  266. package/dist/recall-xray-cli.js +4 -4
  267. package/dist/recall-xray-renderer.js +3 -3
  268. package/dist/recall-xray.js +2 -2
  269. package/dist/reconcile/cursor.js +2 -2
  270. package/dist/reconcile/manifest.js +6 -6
  271. package/dist/reconcile/plan.js +2 -2
  272. package/dist/{resolution-23ZBDM6A.js → resolution-N7H3F2E4.js} +7 -7
  273. package/dist/resolution-N7H3F2E4.js.map +1 -0
  274. package/dist/resume-bundles.js +45 -45
  275. package/dist/salvage-envelope.js +1 -1
  276. package/dist/search/factory.js +6 -6
  277. package/dist/search/index.js +10 -10
  278. package/dist/semantic-consolidation.js +39 -39
  279. package/dist/semantic-rule-promotion.js +30 -30
  280. package/dist/semantic-rule-verifier.js +30 -30
  281. package/dist/source-agent-qualifier.js +43 -43
  282. package/dist/standup/build.js +30 -30
  283. package/dist/{state-store-I5HLZTZT.js → state-store-EEAX2MBS.js} +2 -2
  284. package/dist/state-store-EEAX2MBS.js.map +1 -0
  285. package/dist/storage.js +29 -29
  286. package/dist/subject-config.js +1 -1
  287. package/dist/summarizer.js +5 -5
  288. package/dist/support-passport/index.js +108 -108
  289. package/dist/tier-routing.js +3 -3
  290. package/dist/{tier-stats-C3IAMS4X.js → tier-stats-FQGQSFET.js} +7 -7
  291. package/dist/transfer/capsule-export.js +2 -2
  292. package/dist/transfer/capsule-import.js +2 -2
  293. package/dist/transfer/export-okf.js +30 -30
  294. package/dist/types.d.ts +10 -10
  295. package/dist/types.d.ts.map +1 -1
  296. package/dist/types.js +1 -1
  297. package/dist/verified-recall.js +30 -30
  298. package/dist/who-knows-cli.js +31 -31
  299. package/dist/who-knows.js +30 -30
  300. package/dist/write-envelope.js +1 -1
  301. package/package.json +2 -2
  302. package/src/access-http-admission.ts +33 -0
  303. package/src/access-http-types.ts +153 -0
  304. package/src/access-http.test.ts +63 -1
  305. package/src/access-http.ts +26 -148
  306. package/src/access-mcp.test.ts +24 -0
  307. package/src/access-mcp.ts +3 -0
  308. package/src/access-observe-replay-durability.test.ts +4 -1
  309. package/src/access-service-observe-idempotency.test.ts +44 -0
  310. package/src/access-service.ts +3 -0
  311. package/src/buffer-admission.ts +13 -0
  312. package/src/cli.ts +1 -2
  313. package/src/config.test.ts +17 -0
  314. package/src/config.ts +25 -7
  315. package/src/connectors/live/framework.ts +8 -0
  316. package/src/connectors/live/google-drive.test.ts +35 -0
  317. package/src/connectors/live/google-drive.ts +108 -10
  318. package/src/live-connectors-runner.ts +3 -0
  319. package/src/live-connectors-secretref.test.ts +126 -0
  320. package/src/orchestration/turn-ingestion.ts +3 -3
  321. package/src/orchestrator.ts +5 -5
  322. package/src/types.ts +10 -10
  323. package/dist/chunk-4GMI5HFH.js.map +0 -1
  324. package/dist/chunk-APYY5CX3.js.map +0 -1
  325. package/dist/chunk-ATWFYXEN.js.map +0 -1
  326. package/dist/chunk-BCCG7VWM.js.map +0 -1
  327. package/dist/chunk-IHJZSRDM.js.map +0 -1
  328. package/dist/chunk-M3BEJJNV.js.map +0 -1
  329. package/dist/chunk-M5O2ANZD.js.map +0 -1
  330. package/dist/chunk-N7EKND7S.js.map +0 -1
  331. package/dist/chunk-SO4DZIVF.js.map +0 -1
  332. package/dist/chunk-V4XE263I.js.map +0 -1
  333. /package/dist/{contradiction-scan-P7KXB5R4.js.map → access-http-admission.js.map} +0 -0
  334. /package/dist/{graph-edge-decay-EKWXRBWF.js.map → access-http-types.js.map} +0 -0
  335. /package/dist/{chunk-4XYAWK5H.js.map → chunk-25BUV3TU.js.map} +0 -0
  336. /package/dist/{chunk-QKES7GU6.js.map → chunk-2FGLEF7C.js.map} +0 -0
  337. /package/dist/{chunk-3NF4QUNZ.js.map → chunk-2JSDPUKD.js.map} +0 -0
  338. /package/dist/{chunk-AJHNXIQU.js.map → chunk-2LCRG2YV.js.map} +0 -0
  339. /package/dist/{chunk-YRZPBN46.js.map → chunk-3RLK65ZK.js.map} +0 -0
  340. /package/dist/{chunk-GCBIXUPT.js.map → chunk-47F6WWLQ.js.map} +0 -0
  341. /package/dist/{chunk-TSS3D7ZY.js.map → chunk-4CJTQHEG.js.map} +0 -0
  342. /package/dist/{chunk-QD5R6U5J.js.map → chunk-4J363OAA.js.map} +0 -0
  343. /package/dist/{chunk-C2HORX76.js.map → chunk-4WR2OD7K.js.map} +0 -0
  344. /package/dist/{chunk-4X7HQKAG.js.map → chunk-4XINO77L.js.map} +0 -0
  345. /package/dist/{chunk-OXQ7F45O.js.map → chunk-5HFXGXE5.js.map} +0 -0
  346. /package/dist/{chunk-ELHJK7LM.js.map → chunk-5IYOKDM4.js.map} +0 -0
  347. /package/dist/{chunk-LEEAO2TX.js.map → chunk-5M5M22GW.js.map} +0 -0
  348. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  349. /package/dist/{chunk-QEZ3DW5O.js.map → chunk-65AUYLU3.js.map} +0 -0
  350. /package/dist/{chunk-B56LORLY.js.map → chunk-6F42QONS.js.map} +0 -0
  351. /package/dist/{chunk-ADYP7HXE.js.map → chunk-6F5MJFXY.js.map} +0 -0
  352. /package/dist/{chunk-GOZXQNIM.js.map → chunk-6P7U3HWG.js.map} +0 -0
  353. /package/dist/{chunk-SBRUTD5O.js.map → chunk-6SRYCJ5I.js.map} +0 -0
  354. /package/dist/{chunk-JM2YZKCQ.js.map → chunk-7GLJMDEQ.js.map} +0 -0
  355. /package/dist/{chunk-BLSHFIR6.js.map → chunk-7HTUYFR3.js.map} +0 -0
  356. /package/dist/{chunk-SYKJBS7S.js.map → chunk-7W3RXOIG.js.map} +0 -0
  357. /package/dist/{chunk-J6GZ2254.js.map → chunk-AL3TCNSJ.js.map} +0 -0
  358. /package/dist/{chunk-BIVKPQ6Q.js.map → chunk-AP6NCP3V.js.map} +0 -0
  359. /package/dist/{chunk-32YX7EJ3.js.map → chunk-ATPWZ4F7.js.map} +0 -0
  360. /package/dist/{chunk-HXFIILGF.js.map → chunk-BFPF5N3H.js.map} +0 -0
  361. /package/dist/{chunk-LHGPU6DQ.js.map → chunk-BJRTMNCB.js.map} +0 -0
  362. /package/dist/{chunk-F74G4KIH.js.map → chunk-BLJT6JP2.js.map} +0 -0
  363. /package/dist/{chunk-3TKX2RYK.js.map → chunk-BQZEGOZ4.js.map} +0 -0
  364. /package/dist/{chunk-HLN2HOXX.js.map → chunk-BRLXOZLM.js.map} +0 -0
  365. /package/dist/{chunk-5UBXIV3N.js.map → chunk-BSACVS6R.js.map} +0 -0
  366. /package/dist/{chunk-4Q26RNSR.js.map → chunk-CD4BCCNP.js.map} +0 -0
  367. /package/dist/{chunk-5SOSQTVE.js.map → chunk-CIEEYVUB.js.map} +0 -0
  368. /package/dist/{chunk-G54BOKZ6.js.map → chunk-E3A7ELSG.js.map} +0 -0
  369. /package/dist/{chunk-OL553AWT.js.map → chunk-E4IRW2FG.js.map} +0 -0
  370. /package/dist/{chunk-TFEHSPGQ.js.map → chunk-E5PPE4VA.js.map} +0 -0
  371. /package/dist/{chunk-3UZ2VMKD.js.map → chunk-E6M225BJ.js.map} +0 -0
  372. /package/dist/{chunk-TIGYOZBU.js.map → chunk-E6Z4FBX6.js.map} +0 -0
  373. /package/dist/{chunk-2XOFVTTT.js.map → chunk-E7YZXWIS.js.map} +0 -0
  374. /package/dist/{chunk-QKERFEJS.js.map → chunk-EFYN5I7Z.js.map} +0 -0
  375. /package/dist/{chunk-D5EV6Y2L.js.map → chunk-ETZLQOUR.js.map} +0 -0
  376. /package/dist/{chunk-IBDWYRDR.js.map → chunk-EXHXJETE.js.map} +0 -0
  377. /package/dist/{chunk-S45INSV3.js.map → chunk-FF6N7BXC.js.map} +0 -0
  378. /package/dist/{chunk-77PDJ4OE.js.map → chunk-FNXQZGUS.js.map} +0 -0
  379. /package/dist/{chunk-H3WAT6BR.js.map → chunk-FQKBJJYB.js.map} +0 -0
  380. /package/dist/{chunk-CC4V7HNP.js.map → chunk-FSO3G4JJ.js.map} +0 -0
  381. /package/dist/{chunk-ZOJUWVAU.js.map → chunk-GKL6QYZO.js.map} +0 -0
  382. /package/dist/{chunk-2U4LMSEX.js.map → chunk-GVGAO3WV.js.map} +0 -0
  383. /package/dist/{chunk-DT7SNJH6.js.map → chunk-HF3BKUVV.js.map} +0 -0
  384. /package/dist/{chunk-TRMZHGIX.js.map → chunk-HH5LY6RR.js.map} +0 -0
  385. /package/dist/{chunk-Q5XJYCFE.js.map → chunk-HVX4LPNY.js.map} +0 -0
  386. /package/dist/{chunk-5MF6LMUY.js.map → chunk-ID6JGIMD.js.map} +0 -0
  387. /package/dist/{chunk-YLTU2DC4.js.map → chunk-IHCXMYSE.js.map} +0 -0
  388. /package/dist/{chunk-2G4TV2ML.js.map → chunk-IPT2OY4B.js.map} +0 -0
  389. /package/dist/{chunk-ZANNIXXE.js.map → chunk-IQMDQJCD.js.map} +0 -0
  390. /package/dist/{chunk-S7GJNA3K.js.map → chunk-IQWUACVG.js.map} +0 -0
  391. /package/dist/{chunk-QNSZYTSG.js.map → chunk-ITHZFHST.js.map} +0 -0
  392. /package/dist/{chunk-QUMKDRCF.js.map → chunk-JDY34KBL.js.map} +0 -0
  393. /package/dist/{chunk-2N4OUSIA.js.map → chunk-JV4S6VDH.js.map} +0 -0
  394. /package/dist/{chunk-7LCGFUMB.js.map → chunk-KQAFEZQX.js.map} +0 -0
  395. /package/dist/{chunk-ARRTLPRC.js.map → chunk-LUJCQQ3L.js.map} +0 -0
  396. /package/dist/{chunk-DC55RIEZ.js.map → chunk-M4IEZGCK.js.map} +0 -0
  397. /package/dist/{chunk-TNW6BOMM.js.map → chunk-MB6ZJDN6.js.map} +0 -0
  398. /package/dist/{chunk-UWRHHRDK.js.map → chunk-MKRYQROF.js.map} +0 -0
  399. /package/dist/{chunk-P452SEKO.js.map → chunk-MXHMNKWG.js.map} +0 -0
  400. /package/dist/{chunk-IPD5GC7C.js.map → chunk-N4KAE2NB.js.map} +0 -0
  401. /package/dist/{chunk-25Q52SOT.js.map → chunk-NTRUKAAE.js.map} +0 -0
  402. /package/dist/{chunk-3DAWHP5K.js.map → chunk-NZSRRVJQ.js.map} +0 -0
  403. /package/dist/{chunk-ROGO7FRA.js.map → chunk-O55EKIEC.js.map} +0 -0
  404. /package/dist/{chunk-J5WI4QRP.js.map → chunk-OIGJZHDU.js.map} +0 -0
  405. /package/dist/{chunk-K3FH3LAQ.js.map → chunk-OJXK5C6Z.js.map} +0 -0
  406. /package/dist/{chunk-EA2LA5RI.js.map → chunk-P4WNBSTW.js.map} +0 -0
  407. /package/dist/{chunk-EURPSF4Y.js.map → chunk-PH5ZQM35.js.map} +0 -0
  408. /package/dist/{chunk-3ICAWZUU.js.map → chunk-PLCYKAWH.js.map} +0 -0
  409. /package/dist/{chunk-3Y5X6YFH.js.map → chunk-PMJFRDJI.js.map} +0 -0
  410. /package/dist/{chunk-PDOOUXCS.js.map → chunk-PPCLZ4JU.js.map} +0 -0
  411. /package/dist/{chunk-VKILERSL.js.map → chunk-PWXPRVLK.js.map} +0 -0
  412. /package/dist/{chunk-G6HWNPZA.js.map → chunk-QJPJXCS4.js.map} +0 -0
  413. /package/dist/{chunk-YMJRLT7S.js.map → chunk-R2DOFBG4.js.map} +0 -0
  414. /package/dist/{chunk-PKZ274PI.js.map → chunk-R2LBF4HH.js.map} +0 -0
  415. /package/dist/{chunk-NQP4ZYGG.js.map → chunk-RGUUBAT5.js.map} +0 -0
  416. /package/dist/{chunk-EWJZZDRG.js.map → chunk-RHQLIHMB.js.map} +0 -0
  417. /package/dist/{chunk-CYCEROPR.js.map → chunk-RIMK327Y.js.map} +0 -0
  418. /package/dist/{chunk-P4JED3ZL.js.map → chunk-RMXS4I66.js.map} +0 -0
  419. /package/dist/{chunk-TX6EHB2Q.js.map → chunk-RRJBDXAQ.js.map} +0 -0
  420. /package/dist/{chunk-MTTYIXSU.js.map → chunk-RRTVGD3J.js.map} +0 -0
  421. /package/dist/{chunk-OZNBZJ3S.js.map → chunk-SLDRXK37.js.map} +0 -0
  422. /package/dist/{chunk-NIVKG3DS.js.map → chunk-SUSW74WU.js.map} +0 -0
  423. /package/dist/{chunk-G67EUQAB.js.map → chunk-TG3R2SID.js.map} +0 -0
  424. /package/dist/{chunk-3PJEDHLD.js.map → chunk-U6UNF5ZS.js.map} +0 -0
  425. /package/dist/{chunk-YAVIBVCU.js.map → chunk-UA2NDTIU.js.map} +0 -0
  426. /package/dist/{chunk-KVSOEVAF.js.map → chunk-UE6RRXMF.js.map} +0 -0
  427. /package/dist/{chunk-TAUHAP5J.js.map → chunk-UXPXOVJI.js.map} +0 -0
  428. /package/dist/{chunk-KZSGBWOJ.js.map → chunk-V2KGDESV.js.map} +0 -0
  429. /package/dist/{chunk-UH3FPX3L.js.map → chunk-W7K5BP3M.js.map} +0 -0
  430. /package/dist/{chunk-TQ4SCPGQ.js.map → chunk-WRT7GJ2D.js.map} +0 -0
  431. /package/dist/{chunk-CN7Q3T2J.js.map → chunk-XNI3URDR.js.map} +0 -0
  432. /package/dist/{chunk-7O2MC42R.js.map → chunk-XNRLRNQF.js.map} +0 -0
  433. /package/dist/{chunk-64S6X4IU.js.map → chunk-XTN54NML.js.map} +0 -0
  434. /package/dist/{chunk-ZBFLV657.js.map → chunk-XYKBWTWI.js.map} +0 -0
  435. /package/dist/{chunk-PWPIERBM.js.map → chunk-YCNIGRRF.js.map} +0 -0
  436. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  437. /package/dist/{chunk-DZ7DPDVW.js.map → chunk-YODUDA6R.js.map} +0 -0
  438. /package/dist/{chunk-2K3AUDH7.js.map → chunk-YYOMGOHB.js.map} +0 -0
  439. /package/dist/{chunk-ROKDHO74.js.map → chunk-Z7JIZ42P.js.map} +0 -0
  440. /package/dist/{resolution-23ZBDM6A.js.map → contradiction-scan-P2MHYFVG.js.map} +0 -0
  441. /package/dist/{first-start-migration-A6PHIBUQ.js.map → first-start-migration-QFI7B5SH.js.map} +0 -0
  442. /package/dist/{state-store-I5HLZTZT.js.map → graph-edge-decay-OEX5OGMI.js.map} +0 -0
  443. /package/dist/{tier-stats-C3IAMS4X.js.map → tier-stats-FQGQSFET.js.map} +0 -0
package/dist/who-knows.js CHANGED
@@ -9,22 +9,22 @@ import {
9
9
  loadWhoKnowsEntities,
10
10
  tokenizeTopic,
11
11
  validateWhoKnowsInput
12
- } from "./chunk-IBDWYRDR.js";
13
- import "./chunk-CC4V7HNP.js";
14
- import "./chunk-UHVXE24Y.js";
12
+ } from "./chunk-EXHXJETE.js";
13
+ import "./chunk-FSO3G4JJ.js";
15
14
  import "./chunk-QGVCFVX6.js";
15
+ import "./chunk-UHVXE24Y.js";
16
16
  import "./chunk-IGOW4TJE.js";
17
17
  import "./chunk-NT7F7WJQ.js";
18
18
  import "./chunk-G6OFEGUR.js";
19
- import "./chunk-KVSOEVAF.js";
20
- import "./chunk-QEZ3DW5O.js";
19
+ import "./chunk-UE6RRXMF.js";
20
+ import "./chunk-65AUYLU3.js";
21
+ import "./chunk-DOJBV6WR.js";
21
22
  import "./chunk-PFUXPTBT.js";
22
23
  import "./chunk-CYEPCZN5.js";
23
24
  import "./chunk-DLZGSZVC.js";
24
25
  import "./chunk-OVZIYLBZ.js";
25
- import "./chunk-EXYT52NR.js";
26
- import "./chunk-DOJBV6WR.js";
27
26
  import "./chunk-WNEVEMJ3.js";
27
+ import "./chunk-EXYT52NR.js";
28
28
  import "./chunk-Y5NLBXPV.js";
29
29
  import "./chunk-TFA6HPOA.js";
30
30
  import "./chunk-F4TWWUMP.js";
@@ -33,16 +33,16 @@ import "./chunk-A7Q43EUZ.js";
33
33
  import "./chunk-S2V7RUCL.js";
34
34
  import "./chunk-PPUNC7UX.js";
35
35
  import "./chunk-X3724WL4.js";
36
- import "./chunk-S2HLHAZ4.js";
37
36
  import "./chunk-MRPOZBJC.js";
37
+ import "./chunk-S2HLHAZ4.js";
38
38
  import "./chunk-DM2T26WE.js";
39
39
  import "./chunk-LDXUBPMO.js";
40
+ import "./chunk-FF6N7BXC.js";
40
41
  import "./chunk-QFEDITXM.js";
41
42
  import "./chunk-AAD2ZS6P.js";
42
- import "./chunk-S45INSV3.js";
43
43
  import "./chunk-FHGWKODN.js";
44
- import "./chunk-YXZG5TVN.js";
45
44
  import "./chunk-ZIKENA2C.js";
45
+ import "./chunk-YXZG5TVN.js";
46
46
  import "./chunk-3OUGSOJP.js";
47
47
  import "./chunk-SCU65EZI.js";
48
48
  import "./chunk-3ONXXHQO.js";
@@ -50,7 +50,6 @@ import "./chunk-3WU7XOFN.js";
50
50
  import "./chunk-P4GUQSK3.js";
51
51
  import "./chunk-4LZ7SVKM.js";
52
52
  import "./chunk-YHTG64XV.js";
53
- import "./chunk-G7D6GZ5J.js";
54
53
  import "./chunk-ER7XANP3.js";
55
54
  import "./chunk-M5GVCJSJ.js";
56
55
  import "./chunk-RBOJCG4T.js";
@@ -58,12 +57,15 @@ import "./chunk-IAYUTGF2.js";
58
57
  import "./chunk-5WITETWU.js";
59
58
  import "./chunk-6CIAGZ6X.js";
60
59
  import "./chunk-7CT3AI52.js";
61
- import "./chunk-ELHJK7LM.js";
62
- import "./chunk-IUM3VSHI.js";
60
+ import "./chunk-G7D6GZ5J.js";
61
+ import "./chunk-7VLBZKNB.js";
62
+ import "./chunk-Y33KJ556.js";
63
+ import "./chunk-5IYOKDM4.js";
63
64
  import "./chunk-NWA6IXR3.js";
65
+ import "./chunk-OR42ZI54.js";
66
+ import "./chunk-IUM3VSHI.js";
64
67
  import "./chunk-VILPVT4S.js";
65
68
  import "./chunk-AF2XMJKD.js";
66
- import "./chunk-OR42ZI54.js";
67
69
  import "./chunk-23G5P7TA.js";
68
70
  import "./chunk-C64XATK7.js";
69
71
  import "./chunk-42JKGUFJ.js";
@@ -73,23 +75,13 @@ import "./chunk-L2EXJQJP.js";
73
75
  import "./chunk-45GF7Y3V.js";
74
76
  import "./chunk-ZU3NJNO7.js";
75
77
  import "./chunk-E2AWJ7KQ.js";
76
- import "./chunk-7VLBZKNB.js";
77
- import "./chunk-Y33KJ556.js";
78
78
  import "./chunk-UXXK523X.js";
79
+ import "./chunk-YCVB7X56.js";
80
+ import "./chunk-PQVCH2AE.js";
79
81
  import "./chunk-PJKTFXE2.js";
80
82
  import "./chunk-W5BIQOAJ.js";
81
83
  import "./chunk-HADD45AR.js";
82
84
  import "./chunk-RNFMFC37.js";
83
- import "./chunk-YCVB7X56.js";
84
- import "./chunk-PQVCH2AE.js";
85
- import "./chunk-V4XE263I.js";
86
- import "./chunk-YBA52OKG.js";
87
- import "./chunk-QEYTRFR3.js";
88
- import "./chunk-BT7NVCML.js";
89
- import "./chunk-R6HMAIKM.js";
90
- import "./chunk-BJMBJZ2Y.js";
91
- import "./chunk-UKJAGEXH.js";
92
- import "./chunk-FP2373TW.js";
93
85
  import "./chunk-L272A5QW.js";
94
86
  import "./chunk-BNZAR6PO.js";
95
87
  import "./chunk-ZA53AZND.js";
@@ -97,17 +89,25 @@ import "./chunk-7RJUVTVF.js";
97
89
  import "./chunk-AL3UYZ5N.js";
98
90
  import "./chunk-RL6NEVXT.js";
99
91
  import "./chunk-YET735EZ.js";
100
- import "./chunk-PWPIERBM.js";
92
+ import "./chunk-43AA5FVD.js";
93
+ import "./chunk-YBA52OKG.js";
94
+ import "./chunk-YCNIGRRF.js";
95
+ import "./chunk-VUFL7X3H.js";
96
+ import "./chunk-C5LWPYS3.js";
97
+ import "./chunk-QEYTRFR3.js";
98
+ import "./chunk-BT7NVCML.js";
99
+ import "./chunk-R6HMAIKM.js";
100
+ import "./chunk-BJMBJZ2Y.js";
101
+ import "./chunk-UKJAGEXH.js";
102
+ import "./chunk-FP2373TW.js";
101
103
  import "./chunk-UDKWFDV2.js";
102
104
  import "./chunk-5FVVY2EB.js";
103
105
  import "./chunk-BTNNL7ZW.js";
106
+ import "./chunk-EBV6VXKF.js";
104
107
  import "./chunk-JDSVLVCG.js";
105
108
  import "./chunk-5GKPFL3S.js";
106
109
  import "./chunk-JAKIDQB2.js";
107
- import "./chunk-EBV6VXKF.js";
108
110
  import "./chunk-P7FMDTKL.js";
109
- import "./chunk-VUFL7X3H.js";
110
- import "./chunk-C5LWPYS3.js";
111
111
  import "./chunk-X4OZMANG.js";
112
112
  import "./chunk-ZEFVK7XC.js";
113
113
  import "./chunk-6KH5NLQS.js";
@@ -17,10 +17,10 @@ import "./chunk-BT7NVCML.js";
17
17
  import "./chunk-R6HMAIKM.js";
18
18
  import "./chunk-UDKWFDV2.js";
19
19
  import "./chunk-5FVVY2EB.js";
20
+ import "./chunk-EBV6VXKF.js";
20
21
  import "./chunk-JDSVLVCG.js";
21
22
  import "./chunk-5GKPFL3S.js";
22
23
  import "./chunk-JAKIDQB2.js";
23
- import "./chunk-EBV6VXKF.js";
24
24
  import "./chunk-P7FMDTKL.js";
25
25
  import "./chunk-X4OZMANG.js";
26
26
  import "./chunk-R2MBW2S4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "10.0.90",
3
+ "version": "10.0.92",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3386,7 +3386,7 @@
3386
3386
  "core"
3387
3387
  ],
3388
3388
  "peerDependencies": {
3389
- "@remnic/coding-graph": "^10.0.90"
3389
+ "@remnic/coding-graph": "^10.0.92"
3390
3390
  },
3391
3391
  "peerDependenciesMeta": {
3392
3392
  "@remnic/coding-graph": {
@@ -0,0 +1,33 @@
1
+ import type { ServerResponse } from "node:http";
2
+
3
+ import { log } from "./logger.js";
4
+
5
+ /** Advisory backpressure hint for 503 buffer_admission_refused (optional; removable without a contract change). */
6
+ const BUFFER_ADMISSION_RETRY_AFTER_SECONDS = 5;
7
+
8
+ type AdmissionErrorBody = { error: string; code: "storage_target_required" | "buffer_admission_refused" };
9
+
10
+ /**
11
+ * Map durable-capture admission failures to HTTP answers. Returns true when the
12
+ * error was answered. A missing storage target is a permanent client fault (400,
13
+ * never retryable); a full buffer is retryable backpressure (503) that is logged
14
+ * with the request correlation id, not as a server fault.
15
+ */
16
+ export function respondBufferAdmissionError(
17
+ err: Error,
18
+ res: ServerResponse,
19
+ correlationId: string,
20
+ respond: (status: number, body: AdmissionErrorBody) => void,
21
+ ): boolean {
22
+ if (err.name === "StorageTargetRequiredError") {
23
+ respond(400, { error: err.message, code: "storage_target_required" });
24
+ return true;
25
+ }
26
+ if (err.name === "ReplayAdmissionRefusedError") {
27
+ log.warn(`engram access HTTP buffer admission refused [${correlationId}]: ${err.message}`);
28
+ res.setHeader("retry-after", String(BUFFER_ADMISSION_RETRY_AFTER_SECONDS));
29
+ respond(503, { error: err.message, code: "buffer_admission_refused" });
30
+ return true;
31
+ }
32
+ return false;
33
+ }
@@ -0,0 +1,153 @@
1
+ import type { AdapterRegistry } from "./adapters/index.js";
2
+ import type { EngramAccessService } from "./access-service.js";
3
+ import type { TokenCapabilities } from "./access-token-capabilities.js";
4
+ import type { SupportPassportExternalRequestHandler } from "./support-passport/public-http.js";
5
+
6
+ /** Public option, status and admin-control types for the access HTTP server (split out of access-http.ts for the file-size ratchet, #1995). */
7
+
8
+ export interface AccessHttpReadinessState {
9
+ ready: boolean;
10
+ warmupAttempts: number;
11
+ lastError?: string | null;
12
+ /**
13
+ * True when the standalone init gate opened before search warm-up completed
14
+ * (issue #2215): the service is functional (recall serves via fallback
15
+ * retrieval), so health answers 200 with degraded info instead of 503.
16
+ */
17
+ degraded?: boolean;
18
+ }
19
+ export interface EngramAccessHttpServerOptions {
20
+ service: EngramAccessService;
21
+ host?: string;
22
+ port?: number;
23
+ authToken?: string;
24
+ /** Additional valid tokens (for multi-connector auth). Checked alongside authToken. */
25
+ authTokens?: string[];
26
+ /** Dynamic token loader — called on each auth check so new/revoked tokens take effect without restart. */
27
+ authTokensGetter?: () => string[];
28
+ /**
29
+ * Dynamic token-ENTRY loader ({token, connector} pairs from one coherent
30
+ * snapshot). Preferred over `authTokensGetter` when a `tokenPathPolicy`
31
+ * is set: the connector used for the policy decision comes from the SAME
32
+ * entry that validated, so identity can never lag validation.
33
+ */
34
+ authTokenEntriesGetter?: () => ReadonlyArray<{ token: string; connector?: string; capabilities?: TokenCapabilities }>;
35
+ /**
36
+ * Optional per-request scope policy for tokens sourced from
37
+ * `authTokenEntriesGetter`. Return false to deny the (validated) token
38
+ * for this pathname. Static `authToken`/`authTokens` (operator-supplied)
39
+ * bypass the policy. Entries whose connector is missing FAIL CLOSED when
40
+ * a policy is configured.
41
+ */
42
+ tokenPathPolicy?: (connector: string, pathname: string | undefined) => boolean;
43
+ principal?: string;
44
+ maxBodyBytes?: number;
45
+ /**
46
+ * Max non-replayed write requests per rolling window before 429
47
+ * `write_rate_limited` (issue #1937). Positive integer; defaults to 30.
48
+ */
49
+ writeRateLimitMaxRequests?: number;
50
+ /** Rolling window for the write rate limit, in ms. Positive integer; defaults to 60000. */
51
+ writeRateLimitWindowMs?: number;
52
+ adminConsoleEnabled?: boolean;
53
+ adminConsolePublicDir?: string;
54
+ /** Inject the primary auth token into the admin console shell for trusted launch surfaces. */
55
+ adminConsolePrefillToken?: boolean;
56
+ trustPrincipalHeader?: boolean;
57
+ /** Enable adapter-based identity resolution from request headers */
58
+ enableAdapters?: boolean;
59
+ /** Custom adapter registry (defaults to built-in adapters) */
60
+ adapterRegistry?: AdapterRegistry;
61
+ /** Enable oai-mem-citation blocks in recall responses (issue #379). */
62
+ citationsEnabled?: boolean;
63
+ /** Auto-enable citations for Codex adapter connections (issue #379). */
64
+ citationsAutoDetect?: boolean;
65
+ /** Advertise legacy engram.* tool aliases on tools/list (issue #1427). Default true. */
66
+ emitLegacyTools?: boolean;
67
+ /** Optional authenticated admin dashboard/config controls supplied by the host server. */
68
+ adminControls?: RemnicAdminControls;
69
+ /**
70
+ * Standalone readiness state. Defaults to ready so embedded hosts keep their
71
+ * existing health behavior.
72
+ */
73
+ readiness?: () => AccessHttpReadinessState;
74
+ /**
75
+ * When set, every 401 response includes
76
+ * `WWW-Authenticate: Bearer resource_metadata="<value>"` so MCP clients
77
+ * can discover the OAuth 2.0 protected-resource metadata document
78
+ * (RFC 9728). Must be an absolute http(s) URL; constructor throws on
79
+ * anything else. Unset → bare `Bearer`.
80
+ */
81
+ resourceMetadataUrl?: string;
82
+ /**
83
+ * Optional pre-auth request handler (e.g. OAuth facade mounted by
84
+ * `@remnic/server`). Runs after the admin-console handler and BEFORE
85
+ * bearer authorization. Return true if the request was fully handled
86
+ * (response ended). `ctx.authorized` reports whether the request
87
+ * carries a valid operator bearer token, so the handler can gate
88
+ * operator-only endpoints without owning token validation.
89
+ * Errors thrown by the handler flow into the existing error handling.
90
+ */
91
+ externalRequestHandler?: SupportPassportExternalRequestHandler;
92
+ }
93
+
94
+ export interface EngramAccessHttpServerStatus {
95
+ running: boolean;
96
+ host: string;
97
+ port: number;
98
+ maxBodyBytes: number;
99
+ }
100
+
101
+ export interface RemnicAdminHarnessStatus {
102
+ id: string;
103
+ label: string;
104
+ detected: boolean;
105
+ enabled: boolean;
106
+ source?: string;
107
+ detail?: string;
108
+ }
109
+
110
+ export interface RemnicAdminModelOption {
111
+ id: string;
112
+ label: string;
113
+ provider: string;
114
+ detected: boolean;
115
+ enabled: boolean;
116
+ default?: boolean;
117
+ source?: string;
118
+ endpoint?: string;
119
+ }
120
+
121
+ export interface RemnicAdminFeatureStatus {
122
+ key: string;
123
+ label: string;
124
+ enabled: boolean;
125
+ writable: boolean;
126
+ restartRequired?: boolean;
127
+ }
128
+
129
+ export interface RemnicAdminConfigStatus {
130
+ path: string;
131
+ exists: boolean;
132
+ writable: boolean;
133
+ restartRequired: boolean;
134
+ values: Record<string, string | number | boolean | null>;
135
+ }
136
+
137
+ export interface RemnicAdminDashboardStatus {
138
+ config: RemnicAdminConfigStatus;
139
+ harnesses: RemnicAdminHarnessStatus[];
140
+ providers?: RemnicAdminHarnessStatus[];
141
+ models: RemnicAdminModelOption[];
142
+ features: RemnicAdminFeatureStatus[];
143
+ }
144
+
145
+ // Moved unchanged from access-http.ts (public admin API, consumed by @remnic/server): the patch
146
+ // payload is validated by the host's admin controls, so the value type is intentionally open here.
147
+ // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type
148
+ export type RemnicAdminConfigPatch = Record<string, unknown>;
149
+
150
+ export interface RemnicAdminControls {
151
+ status: () => Promise<RemnicAdminDashboardStatus>;
152
+ update?: (patch: RemnicAdminConfigPatch) => Promise<RemnicAdminDashboardStatus>;
153
+ }
@@ -22,6 +22,7 @@ import {
22
22
  type TokenCapabilities,
23
23
  } from "./access-token-capabilities.js";
24
24
  import { BriefingTimeoutError } from "./briefing-deadline.js";
25
+ import { initLogger, resetLogger, type LoggerBackend } from "./logger.js";
25
26
  import { parseConfig } from "./config.js";
26
27
  import { readPair, writePair } from "./contradiction/contradiction-review.js";
27
28
  import { createChatSession } from "./chat/chat-session.js";
@@ -815,7 +816,16 @@ test("HTTP coding-context endpoint accepts projectTag shorthand", async () => {
815
816
  }
816
817
  });
817
818
 
818
- test("HTTP observe answers 503 buffer_admission_refused when durable capture hits the entry cap", async () => {
819
+ test("HTTP observe answers 503 buffer_admission_refused when durable capture hits the entry cap", async (t) => {
820
+ const warns: string[] = [];
821
+ const backend: LoggerBackend = {
822
+ info() {},
823
+ warn(msg) { warns.push(msg); },
824
+ error() {},
825
+ debug() {},
826
+ };
827
+ initLogger(backend, false, { timestamps: false });
828
+ t.after(() => resetLogger());
819
829
  const refusal = new Error("buffer at session-entry cap");
820
830
  refusal.name = "ReplayAdmissionRefusedError";
821
831
  // SAFETY: this fixture drives only the observe route; the remaining service members are unreachable.
@@ -852,6 +862,58 @@ test("HTTP observe answers 503 buffer_admission_refused when durable capture hit
852
862
  error: "buffer at session-entry cap",
853
863
  code: "buffer_admission_refused",
854
864
  });
865
+ assert.equal(response.headers.get("retry-after"), "5", "503 must carry the advisory backpressure hint");
866
+ const requestId = response.headers.get("x-request-id");
867
+ assert.ok(requestId, "the response must expose the correlation id");
868
+ assert.ok(
869
+ warns.some((line) => line.includes(requestId) && line.includes("buffer admission refused")),
870
+ `capacity refusal must log a correlated warn, got ${JSON.stringify(warns)}`,
871
+ );
872
+ } finally {
873
+ await server.stop();
874
+ }
875
+ });
876
+
877
+ test("HTTP observe missing-storage-target refusal is a non-retryable request fault, not 503 backpressure", async () => {
878
+ const refusal = new Error(
879
+ "accepted capture requires an explicit storage target (writeNamespaceOverride or scopeProfileWritePlan.writeNamespace)",
880
+ );
881
+ refusal.name = "StorageTargetRequiredError";
882
+ // SAFETY: this fixture drives only the observe route; the remaining service members are unreachable.
883
+ const service = Object.assign({} as EngramAccessService, {
884
+ observe: async () => {
885
+ throw refusal;
886
+ },
887
+ });
888
+ const server = new EngramAccessHttpServer({
889
+ service,
890
+ port: 0,
891
+ authToken: "test-token",
892
+ adminConsoleEnabled: false,
893
+ });
894
+
895
+ const status = await server.start();
896
+ try {
897
+ const response = await fetch(
898
+ `http://127.0.0.1:${status.port}/engram/v1/observe`,
899
+ {
900
+ method: "POST",
901
+ headers: {
902
+ authorization: "Bearer test-token",
903
+ "content-type": "application/json",
904
+ },
905
+ body: JSON.stringify({
906
+ sessionKey: "missing-target-test-session",
907
+ messages: [{ role: "user", content: "no target" }],
908
+ }),
909
+ },
910
+ );
911
+ assert.equal(response.status, 400, "a request with no storage target cannot succeed on retry");
912
+ assert.deepEqual(await response.json(), {
913
+ error: refusal.message,
914
+ code: "storage_target_required",
915
+ });
916
+ assert.equal(response.headers.get("retry-after"), null, "no backpressure hint on a permanent fault");
855
917
  } finally {
856
918
  await server.stop();
857
919
  }
@@ -7,6 +7,7 @@ import path from "node:path";
7
7
  import { fileURLToPath, URL } from "node:url";
8
8
  import { gunzipSync } from "node:zlib";
9
9
  import { log } from "./logger.js";
10
+ import { respondBufferAdmissionError } from "./access-http-admission.js";
10
11
  import { resolveNamespaceCapabilities } from "./capabilities.js";
11
12
  import { WriteRateLimiter, type WriteRateLimitReservation } from "./write-rate-limiter.js";
12
13
  import { abortError, isAbortError } from "./abort-error.js";
@@ -81,149 +82,30 @@ import { ReviewDeckAccessHttpBase } from "./review/review-deck-http-base.js";
81
82
  import { serializeInlineScriptValue } from "./inline-script.js";
82
83
  import { toDottedRemnicName } from "./access-mcp-tool-names.js";
83
84
  import type { SupportPassportExternalRequestHandler } from "./support-passport/public-http.js";
84
- export interface AccessHttpReadinessState {
85
- ready: boolean;
86
- warmupAttempts: number;
87
- lastError?: string | null;
88
- /**
89
- * True when the standalone init gate opened before search warm-up completed
90
- * (issue #2215): the service is functional (recall serves via fallback
91
- * retrieval), so health answers 200 with degraded info instead of 503.
92
- */
93
- degraded?: boolean;
94
- }
95
- export interface EngramAccessHttpServerOptions {
96
- service: EngramAccessService;
97
- host?: string;
98
- port?: number;
99
- authToken?: string;
100
- /** Additional valid tokens (for multi-connector auth). Checked alongside authToken. */
101
- authTokens?: string[];
102
- /** Dynamic token loader — called on each auth check so new/revoked tokens take effect without restart. */
103
- authTokensGetter?: () => string[];
104
- /**
105
- * Dynamic token-ENTRY loader ({token, connector} pairs from one coherent
106
- * snapshot). Preferred over `authTokensGetter` when a `tokenPathPolicy`
107
- * is set: the connector used for the policy decision comes from the SAME
108
- * entry that validated, so identity can never lag validation.
109
- */
110
- authTokenEntriesGetter?: () => ReadonlyArray<{ token: string; connector?: string; capabilities?: TokenCapabilities }>;
111
- /**
112
- * Optional per-request scope policy for tokens sourced from
113
- * `authTokenEntriesGetter`. Return false to deny the (validated) token
114
- * for this pathname. Static `authToken`/`authTokens` (operator-supplied)
115
- * bypass the policy. Entries whose connector is missing FAIL CLOSED when
116
- * a policy is configured.
117
- */
118
- tokenPathPolicy?: (connector: string, pathname: string | undefined) => boolean;
119
- principal?: string;
120
- maxBodyBytes?: number;
121
- /**
122
- * Max non-replayed write requests per rolling window before 429
123
- * `write_rate_limited` (issue #1937). Positive integer; defaults to 30.
124
- */
125
- writeRateLimitMaxRequests?: number;
126
- /** Rolling window for the write rate limit, in ms. Positive integer; defaults to 60000. */
127
- writeRateLimitWindowMs?: number;
128
- adminConsoleEnabled?: boolean;
129
- adminConsolePublicDir?: string;
130
- /** Inject the primary auth token into the admin console shell for trusted launch surfaces. */
131
- adminConsolePrefillToken?: boolean;
132
- trustPrincipalHeader?: boolean;
133
- /** Enable adapter-based identity resolution from request headers */
134
- enableAdapters?: boolean;
135
- /** Custom adapter registry (defaults to built-in adapters) */
136
- adapterRegistry?: AdapterRegistry;
137
- /** Enable oai-mem-citation blocks in recall responses (issue #379). */
138
- citationsEnabled?: boolean;
139
- /** Auto-enable citations for Codex adapter connections (issue #379). */
140
- citationsAutoDetect?: boolean;
141
- /** Advertise legacy engram.* tool aliases on tools/list (issue #1427). Default true. */
142
- emitLegacyTools?: boolean;
143
- /** Optional authenticated admin dashboard/config controls supplied by the host server. */
144
- adminControls?: RemnicAdminControls;
145
- /**
146
- * Standalone readiness state. Defaults to ready so embedded hosts keep their
147
- * existing health behavior.
148
- */
149
- readiness?: () => AccessHttpReadinessState;
150
- /**
151
- * When set, every 401 response includes
152
- * `WWW-Authenticate: Bearer resource_metadata="<value>"` so MCP clients
153
- * can discover the OAuth 2.0 protected-resource metadata document
154
- * (RFC 9728). Must be an absolute http(s) URL; constructor throws on
155
- * anything else. Unset → bare `Bearer`.
156
- */
157
- resourceMetadataUrl?: string;
158
- /**
159
- * Optional pre-auth request handler (e.g. OAuth facade mounted by
160
- * `@remnic/server`). Runs after the admin-console handler and BEFORE
161
- * bearer authorization. Return true if the request was fully handled
162
- * (response ended). `ctx.authorized` reports whether the request
163
- * carries a valid operator bearer token, so the handler can gate
164
- * operator-only endpoints without owning token validation.
165
- * Errors thrown by the handler flow into the existing error handling.
166
- */
167
- externalRequestHandler?: SupportPassportExternalRequestHandler;
168
- }
169
-
170
- export interface EngramAccessHttpServerStatus {
171
- running: boolean;
172
- host: string;
173
- port: number;
174
- maxBodyBytes: number;
175
- }
176
-
177
- export interface RemnicAdminHarnessStatus {
178
- id: string;
179
- label: string;
180
- detected: boolean;
181
- enabled: boolean;
182
- source?: string;
183
- detail?: string;
184
- }
185
-
186
- export interface RemnicAdminModelOption {
187
- id: string;
188
- label: string;
189
- provider: string;
190
- detected: boolean;
191
- enabled: boolean;
192
- default?: boolean;
193
- source?: string;
194
- endpoint?: string;
195
- }
196
-
197
- export interface RemnicAdminFeatureStatus {
198
- key: string;
199
- label: string;
200
- enabled: boolean;
201
- writable: boolean;
202
- restartRequired?: boolean;
203
- }
204
-
205
- export interface RemnicAdminConfigStatus {
206
- path: string;
207
- exists: boolean;
208
- writable: boolean;
209
- restartRequired: boolean;
210
- values: Record<string, string | number | boolean | null>;
211
- }
212
-
213
- export interface RemnicAdminDashboardStatus {
214
- config: RemnicAdminConfigStatus;
215
- harnesses: RemnicAdminHarnessStatus[];
216
- providers?: RemnicAdminHarnessStatus[];
217
- models: RemnicAdminModelOption[];
218
- features: RemnicAdminFeatureStatus[];
219
- }
220
-
221
- export type RemnicAdminConfigPatch = Record<string, unknown>;
222
-
223
- export interface RemnicAdminControls {
224
- status: () => Promise<RemnicAdminDashboardStatus>;
225
- update?: (patch: RemnicAdminConfigPatch) => Promise<RemnicAdminDashboardStatus>;
226
- }
85
+ import type {
86
+ AccessHttpReadinessState,
87
+ EngramAccessHttpServerOptions,
88
+ EngramAccessHttpServerStatus,
89
+ RemnicAdminHarnessStatus,
90
+ RemnicAdminModelOption,
91
+ RemnicAdminFeatureStatus,
92
+ RemnicAdminConfigStatus,
93
+ RemnicAdminDashboardStatus,
94
+ RemnicAdminConfigPatch,
95
+ RemnicAdminControls,
96
+ } from "./access-http-types.js";
97
+ export type {
98
+ AccessHttpReadinessState,
99
+ EngramAccessHttpServerOptions,
100
+ EngramAccessHttpServerStatus,
101
+ RemnicAdminHarnessStatus,
102
+ RemnicAdminModelOption,
103
+ RemnicAdminFeatureStatus,
104
+ RemnicAdminConfigStatus,
105
+ RemnicAdminDashboardStatus,
106
+ RemnicAdminConfigPatch,
107
+ RemnicAdminControls,
108
+ } from "./access-http-types.js";
227
109
 
228
110
  export function resolveDefaultAdminConsolePublicDir(sourceUrl = import.meta.url): string {
229
111
  const thisDir = path.dirname(fileURLToPath(sourceUrl));
@@ -549,11 +431,7 @@ export class EngramAccessHttpServer extends ReviewDeckAccessHttpBase {
549
431
  });
550
432
  return;
551
433
  }
552
- if (err.name === "ReplayAdmissionRefusedError") {
553
- // Durable-capture backpressure (#3251/#1908): the request was
554
- // never accepted — the buffer is at entry capacity. Retryable,
555
- // not a server fault (503, not 500).
556
- this.respondJson(res, 503, { error: err.message, code: "buffer_admission_refused" });
434
+ if (respondBufferAdmissionError(err, res, correlationId, (status, body) => this.respondJson(res, status, body))) {
557
435
  return;
558
436
  }
559
437
  if (res.headersSent) {
@@ -150,6 +150,30 @@ test("MCP reports buffer admission refusal as retryable and does not return succ
150
150
  });
151
151
 
152
152
 
153
+ test("MCP reports a missing storage target as a non-retryable storage_target_required error", async () => {
154
+ const failure = new Error("accepted capture requires an explicit storage target");
155
+ failure.name = "StorageTargetRequiredError";
156
+ // SAFETY: the mock overrides only observe; every other MCP dispatch path is unreachable in this test.
157
+ const service = Object.assign({} as EngramAccessService, {
158
+ observe: async () => {
159
+ throw failure;
160
+ },
161
+ });
162
+ const server = new EngramMcpServer(service);
163
+ const response = await server.handleRequest(
164
+ makeToolRequest("engram.observe", {
165
+ sessionKey: "no-target-session",
166
+ messages: [{ role: "user", content: "cannot succeed on retry" }],
167
+ }),
168
+ );
169
+ // SAFETY: a tools/call request always resolves to a JSON-RPC result envelope; only isError and structuredContent are asserted.
170
+ const result = response as {
171
+ result?: { isError?: boolean; structuredContent?: { code?: string; retryable?: boolean } };
172
+ };
173
+ assert.equal(result.result?.isError, true);
174
+ assert.deepEqual(result.result?.structuredContent, { code: "storage_target_required", retryable: false }, JSON.stringify(response));
175
+ });
176
+
153
177
  // ──────────────────────────────────────────────────────────────────────────
154
178
  // Finding 2 (#396 new): invalid MCP briefing format values must be rejected
155
179
  // ──────────────────────────────────────────────────────────────────────────
package/src/access-mcp.ts CHANGED
@@ -2434,6 +2434,9 @@ export class EngramMcpServer {
2434
2434
  };
2435
2435
  if (admissionBackpressure) {
2436
2436
  result.structuredContent = { code: "buffer_admission_refused", retryable: true };
2437
+ } else if (err instanceof Error && err.name === "StorageTargetRequiredError") {
2438
+ // A permanent property of the request: tell clients not to retry it.
2439
+ result.structuredContent = { code: "storage_target_required", retryable: false };
2437
2440
  }
2438
2441
  return { jsonrpc: "2.0", id, result };
2439
2442
  }