@remnic/core 9.54.5 → 9.54.7

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 (548) hide show
  1. package/dist/access-admin-ops-surface.d.ts +24 -24
  2. package/dist/access-admin-ops-surface.js +32 -29
  3. package/dist/access-authorization-probe.d.ts +25 -23
  4. package/dist/access-authorization-probe.js +35 -30
  5. package/dist/access-boundary.d.ts +26 -24
  6. package/dist/access-boundary.js +36 -31
  7. package/dist/access-cli.js +86 -80
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +19 -19
  11. package/dist/access-extraction-force-flush.js +32 -29
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +22 -22
  14. package/dist/access-http-lifecycle-flush.d.ts +22 -22
  15. package/dist/access-http-offline-stream.d.ts +18 -18
  16. package/dist/access-http-query.js +32 -29
  17. package/dist/access-http.d.ts +55 -37
  18. package/dist/access-http.js +52 -43
  19. package/dist/access-identity-continuity-surface.d.ts +9 -9
  20. package/dist/access-identity-continuity-surface.js +32 -29
  21. package/dist/access-lcm-surface.d.ts +21 -21
  22. package/dist/access-lcm-surface.js +32 -29
  23. package/dist/access-mcp.d.ts +22 -22
  24. package/dist/access-mcp.js +40 -36
  25. package/dist/access-memory-search-fanout.d.ts +2 -2
  26. package/dist/{access-namespace-preflight-BdHlGd_T.d.ts → access-namespace-preflight-CCNn_6NE.d.ts} +1 -1
  27. package/dist/access-namespace-preflight.d.ts +3 -3
  28. package/dist/access-namespace-preflight.js +32 -29
  29. package/dist/access-observe-write-surface.d.ts +22 -22
  30. package/dist/access-observe-write-surface.js +32 -29
  31. package/dist/access-offline-manifest.d.ts +9 -9
  32. package/dist/access-offline-manifest.js +2 -2
  33. package/dist/access-operations-batch.js +34 -31
  34. package/dist/access-operations.d.ts +23 -23
  35. package/dist/access-operations.js +38 -34
  36. package/dist/access-recall-concurrency.d.ts +21 -21
  37. package/dist/access-recall-concurrency.js +32 -29
  38. package/dist/access-recall-response.d.ts +19 -19
  39. package/dist/access-recall-response.js +32 -29
  40. package/dist/access-recall-surface.d.ts +19 -19
  41. package/dist/access-recall-surface.js +32 -29
  42. package/dist/access-schema.js +3 -3
  43. package/dist/{access-service-DL7X9hrg.d.ts → access-service-DK82xdNi.d.ts} +1314 -83
  44. package/dist/access-service-helpers.d.ts +22 -22
  45. package/dist/access-service.d.ts +31 -31
  46. package/dist/access-service.js +32 -29
  47. package/dist/access-surface-catalog.d.ts +22 -22
  48. package/dist/access-surface-catalog.js +209 -2
  49. package/dist/access-surface-catalog.js.map +1 -1
  50. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  51. package/dist/action-confidence.d.ts +1 -1
  52. package/dist/active-memory-bridge.d.ts +6 -5
  53. package/dist/active-memory-bridge.js +2 -2
  54. package/dist/active-recall.d.ts +1 -1
  55. package/dist/active-recall.js +2 -1
  56. package/dist/active-recall.js.map +1 -1
  57. package/dist/adapters/index.js +4 -4
  58. package/dist/adapters/registry.js +2 -2
  59. package/dist/admin-console/public/what-helps-me/app.js +1594 -0
  60. package/dist/admin-console/public/what-helps-me/index.html +339 -0
  61. package/dist/admin-console/public/what-helps-me/model.js +685 -0
  62. package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
  63. package/dist/ambient-provenance.d.ts +1 -1
  64. package/dist/artifact-search.d.ts +1 -1
  65. package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
  66. package/dist/behavior-learner.d.ts +1 -1
  67. package/dist/behavior-signals.d.ts +1 -1
  68. package/dist/bootstrap.d.ts +9 -9
  69. package/dist/briefing.d.ts +2 -2
  70. package/dist/briefing.js +14 -14
  71. package/dist/buffer-surprise-report.d.ts +1 -1
  72. package/dist/buffer-turn-helpers.d.ts +1 -1
  73. package/dist/buffer.d.ts +2 -2
  74. package/dist/buffer.js +2 -2
  75. package/dist/bulk-import/index.d.ts +3 -3
  76. package/dist/calibration.d.ts +1 -1
  77. package/dist/calibration.js +1 -1
  78. package/dist/capabilities.d.ts +1 -1
  79. package/dist/{catalog-B90is4d8.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
  80. package/dist/causal-behavior.d.ts +1 -1
  81. package/dist/causal-consolidation.d.ts +1 -1
  82. package/dist/causal-consolidation.js +15 -15
  83. package/dist/causal-trajectory-graph.d.ts +1 -1
  84. package/dist/{chunk-CSY44OKU.js → chunk-26ZXBTYN.js} +4 -4
  85. package/dist/chunk-26ZXBTYN.js.map +1 -0
  86. package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
  87. package/dist/{chunk-AU7Q3LSC.js → chunk-2QSZNTDO.js} +4 -4
  88. package/dist/chunk-37DZZFFM.js +502 -0
  89. package/dist/chunk-37DZZFFM.js.map +1 -0
  90. package/dist/chunk-3HSRWJTC.js +9 -0
  91. package/dist/chunk-3HSRWJTC.js.map +1 -0
  92. package/dist/{chunk-TKFGFDPJ.js → chunk-3TIZPSJC.js} +4 -4
  93. package/dist/{chunk-B4T3FQMT.js → chunk-43SEBY2M.js} +1 -1
  94. package/dist/{chunk-LVKYLMSM.js → chunk-46SZBVDS.js} +2 -2
  95. package/dist/{chunk-YKZLOPTC.js → chunk-5FD7JMTX.js} +2 -2
  96. package/dist/{chunk-2PNXOQ4P.js → chunk-5NB726GV.js} +3 -7
  97. package/dist/chunk-5NB726GV.js.map +1 -0
  98. package/dist/chunk-62OKGIJA.js +39 -0
  99. package/dist/chunk-62OKGIJA.js.map +1 -0
  100. package/dist/{chunk-WM5LD6AT.js → chunk-6CYHUWCO.js} +2 -2
  101. package/dist/{chunk-BIF4SHMD.js → chunk-76JJSXK7.js} +1 -1
  102. package/dist/chunk-76JJSXK7.js.map +1 -0
  103. package/dist/{chunk-3SXLD5T3.js → chunk-7BD6O7ZV.js} +189 -4
  104. package/dist/chunk-7BD6O7ZV.js.map +1 -0
  105. package/dist/chunk-7TBXNYLO.js +346 -0
  106. package/dist/chunk-7TBXNYLO.js.map +1 -0
  107. package/dist/{chunk-YR65W7BV.js → chunk-BRR5EUTF.js} +3 -3
  108. package/dist/{chunk-JKW663ZN.js → chunk-CIAI24TQ.js} +2 -2
  109. package/dist/{chunk-3WGI7F4V.js → chunk-D3LBIUWV.js} +9219 -5233
  110. package/dist/chunk-D3LBIUWV.js.map +1 -0
  111. package/dist/{chunk-YDWPYDML.js → chunk-EKTP7MNS.js} +4 -4
  112. package/dist/{chunk-6LEIWWAF.js → chunk-F2JRDPON.js} +2 -2
  113. package/dist/{chunk-VYQ4URQB.js → chunk-FFRTNF3L.js} +2 -2
  114. package/dist/{chunk-TY6MKIWP.js → chunk-FONWBCVY.js} +3 -3
  115. package/dist/{chunk-XSV2YDCJ.js → chunk-FPLM2TKD.js} +2 -2
  116. package/dist/{chunk-VTU5IEKY.js → chunk-FTPONF6B.js} +2 -2
  117. package/dist/{chunk-6PZGKGAO.js → chunk-FWX7W5PM.js} +2 -2
  118. package/dist/{chunk-QPW3PAIH.js → chunk-G6DFSS6A.js} +2 -2
  119. package/dist/{chunk-2DD6ZHOM.js → chunk-GJ776BC2.js} +3 -3
  120. package/dist/{chunk-XKAR4RF6.js → chunk-GN3WRFJY.js} +6 -6
  121. package/dist/{chunk-RG426DJO.js → chunk-H7NAZ3UB.js} +2 -2
  122. package/dist/{chunk-BSXGTDVJ.js → chunk-HBUFQRIM.js} +2 -2
  123. package/dist/{chunk-FFEBSFVT.js → chunk-HGJ6NJ4E.js} +2 -2
  124. package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
  125. package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
  126. package/dist/{chunk-QTO6BMQZ.js → chunk-I3MSGFGD.js} +17 -6
  127. package/dist/chunk-I3MSGFGD.js.map +1 -0
  128. package/dist/{chunk-5JKUSBMX.js → chunk-IKP5OYQQ.js} +2 -2
  129. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  130. package/dist/{chunk-DBY26JJJ.js → chunk-IQ4NVWEF.js} +2 -2
  131. package/dist/{chunk-7Q7JWLQ4.js → chunk-JYG4OLWH.js} +2 -2
  132. package/dist/{chunk-3OTSVCPK.js → chunk-K26NWEOC.js} +4 -4
  133. package/dist/{chunk-WZWZRZ2V.js → chunk-K2UGPTYY.js} +484 -43
  134. package/dist/chunk-K2UGPTYY.js.map +1 -0
  135. package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
  136. package/dist/chunk-KFBOPMF6.js.map +1 -0
  137. package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
  138. package/dist/{chunk-7RZJWZ46.js → chunk-LEPOP46W.js} +5 -5
  139. package/dist/{chunk-QQXWFDRD.js → chunk-M4YHAODQ.js} +270 -684
  140. package/dist/chunk-M4YHAODQ.js.map +1 -0
  141. package/dist/{chunk-NGT35IGQ.js → chunk-MIH3CJPN.js} +3 -3
  142. package/dist/{chunk-QPAQSG3F.js → chunk-MK5VEWCR.js} +2 -2
  143. package/dist/chunk-NISZQW72.js +140 -0
  144. package/dist/chunk-NISZQW72.js.map +1 -0
  145. package/dist/{chunk-L7RTUEDG.js → chunk-OCIP6YMD.js} +2 -2
  146. package/dist/{chunk-2INWPC6E.js → chunk-PG4QBPVG.js} +20 -10
  147. package/dist/chunk-PG4QBPVG.js.map +1 -0
  148. package/dist/{chunk-DDA55IVB.js → chunk-PT54WISF.js} +189 -55
  149. package/dist/chunk-PT54WISF.js.map +1 -0
  150. package/dist/{chunk-UWJNKGBA.js → chunk-QZLDRQ4I.js} +5 -5
  151. package/dist/{chunk-UYOXFFEY.js → chunk-RUNORG2P.js} +3 -3
  152. package/dist/{chunk-LC3FD4BV.js → chunk-RZQ6W2W4.js} +39 -39
  153. package/dist/{chunk-MRGJZ75M.js → chunk-SMNYAMJD.js} +3 -3
  154. package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
  155. package/dist/chunk-TB6CBZ5V.js.map +1 -0
  156. package/dist/{chunk-DN2IDKI5.js → chunk-TO7ZTWJW.js} +2 -2
  157. package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
  158. package/dist/{chunk-CUTFSLSD.js → chunk-UCTS3DDH.js} +2 -2
  159. package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
  160. package/dist/{chunk-QOQQMVR2.js → chunk-UKYS3NU5.js} +2 -2
  161. package/dist/{chunk-VZRFGJCH.js → chunk-UPLZNJKN.js} +2 -2
  162. package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
  163. package/dist/chunk-UW5NPZJ2.js.map +1 -0
  164. package/dist/{chunk-DOOWFDWN.js → chunk-V6ERBR7U.js} +2 -2
  165. package/dist/{chunk-7HG7MGAP.js → chunk-W5ZKPI34.js} +462 -2673
  166. package/dist/chunk-W5ZKPI34.js.map +1 -0
  167. package/dist/{chunk-HNDIND7P.js → chunk-XX4HPFFM.js} +54 -15
  168. package/dist/chunk-XX4HPFFM.js.map +1 -0
  169. package/dist/{chunk-N7CXQ5TA.js → chunk-XZHE2DEN.js} +1 -1
  170. package/dist/chunk-YXQEKCZM.js +223 -0
  171. package/dist/chunk-YXQEKCZM.js.map +1 -0
  172. package/dist/{chunk-6NNNURLK.js → chunk-Z54EM5YZ.js} +4 -4
  173. package/dist/{chunk-F2Y6I74C.js → chunk-ZRZVLB7O.js} +2 -2
  174. package/dist/{chunk-CLKBV3Z3.js → chunk-ZUKIUXHQ.js} +9 -9
  175. package/dist/{cli-jfuZXixq.d.ts → cli-BPDUXnAl.d.ts} +5 -5
  176. package/dist/cli.d.ts +22 -22
  177. package/dist/cli.js +66 -58
  178. package/dist/coding/pre-action-gate.d.ts +1 -1
  179. package/dist/compounding/engine.d.ts +2 -2
  180. package/dist/compounding/engine.js +14 -14
  181. package/dist/compounding/preference-consolidator.d.ts +1 -1
  182. package/dist/compression-optimizer.d.ts +1 -1
  183. package/dist/config.d.ts +1 -1
  184. package/dist/config.js +2 -1
  185. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  186. package/dist/connectors/codex-materialize-runner.js +14 -14
  187. package/dist/connectors/codex-materialize.d.ts +1 -1
  188. package/dist/connectors/index.d.ts +1 -1
  189. package/dist/connectors/index.js +14 -14
  190. package/dist/consolidation-provenance-check.d.ts +2 -2
  191. package/dist/consolidation-undo.d.ts +2 -2
  192. package/dist/contradiction/index.d.ts +2 -2
  193. package/dist/contradiction/index.js +2 -2
  194. package/dist/{contradiction-scan-KCADHXPE.js → contradiction-scan-JDTBXRGW.js} +3 -3
  195. package/dist/converge-config.d.ts +1 -1
  196. package/dist/convergence-refresh.d.ts +2 -2
  197. package/dist/convergence-refresh.js +16 -16
  198. package/dist/conversation-index/backend.d.ts +1 -1
  199. package/dist/conversation-index/backend.js +2 -2
  200. package/dist/conversation-index/chunker.d.ts +1 -1
  201. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  202. package/dist/conversation-index/indexer.d.ts +1 -1
  203. package/dist/conversation-index/search.d.ts +1 -1
  204. package/dist/corpus-watermark.d.ts +1 -1
  205. package/dist/corpus-watermark.js +16 -16
  206. package/dist/day-summary.d.ts +1 -1
  207. package/dist/delinearize.d.ts +1 -1
  208. package/dist/dependency-propagation-config.d.ts +1 -1
  209. package/dist/{dependency-propagation-delivery-CTDuAVJc.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
  210. package/dist/direct-answer-wiring.d.ts +1 -1
  211. package/dist/direct-answer.d.ts +1 -1
  212. package/dist/embedding-fallback.d.ts +1 -1
  213. package/dist/enrichment/index.d.ts +1 -1
  214. package/dist/entity-retrieval.d.ts +2 -2
  215. package/dist/entity-retrieval.js +14 -14
  216. package/dist/entity-schema.d.ts +1 -1
  217. package/dist/explicit-capture.d.ts +9 -9
  218. package/dist/explicit-capture.js +4 -3
  219. package/dist/external-wiki-access.d.ts +22 -22
  220. package/dist/external-wiki-access.js +33 -30
  221. package/dist/external-wiki-collection-registration.d.ts +1 -1
  222. package/dist/external-wiki-collection.d.ts +1 -1
  223. package/dist/external-wiki-mcp-tools.d.ts +22 -22
  224. package/dist/extraction-error-classification.d.ts +1 -1
  225. package/dist/extraction-faithfulness.d.ts +1 -1
  226. package/dist/extraction-faithfulness.js +2 -2
  227. package/dist/extraction-judge-telemetry.d.ts +1 -1
  228. package/dist/extraction-judge-training.d.ts +1 -1
  229. package/dist/extraction-judge.d.ts +1 -1
  230. package/dist/extraction-judge.js +2 -2
  231. package/dist/extraction-liveness.d.ts +1 -1
  232. package/dist/extraction-normalization.d.ts +1 -1
  233. package/dist/extraction-prompt.d.ts +1 -1
  234. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  235. package/dist/extraction-source-grounding.d.ts +1 -1
  236. package/dist/extraction.d.ts +1 -1
  237. package/dist/extraction.js +20 -20
  238. package/dist/fallback-llm.d.ts +14 -1
  239. package/dist/fallback-llm.js +1 -1
  240. package/dist/{first-start-migration-LMMZFLKK.js → first-start-migration-CRZCZAJN.js} +5 -5
  241. package/dist/graph-dashboard-diff.d.ts +1 -1
  242. package/dist/graph-dashboard-key.d.ts +1 -1
  243. package/dist/graph-dashboard-parser.d.ts +1 -1
  244. package/dist/graph-edge-reinforcement.d.ts +1 -1
  245. package/dist/graph-path-reconstruction.d.ts +1 -1
  246. package/dist/graph-path-scoring.d.ts +1 -1
  247. package/dist/graph-snapshot.d.ts +1 -1
  248. package/dist/graph.d.ts +1 -1
  249. package/dist/harmonic-retrieval.js +1 -1
  250. package/dist/importance.d.ts +1 -1
  251. package/dist/importers/index.d.ts +1 -1
  252. package/dist/in-flight-reads.d.ts +1 -1
  253. package/dist/index.d.ts +30 -747
  254. package/dist/index.js +203 -118
  255. package/dist/inline-script.d.ts +3 -0
  256. package/dist/inline-script.js +8 -0
  257. package/dist/inline-script.js.map +1 -0
  258. package/dist/intent.d.ts +1 -1
  259. package/dist/lcm/engine.d.ts +1 -1
  260. package/dist/lcm/engine.js +2 -2
  261. package/dist/lcm/index.d.ts +1 -1
  262. package/dist/lcm/index.js +2 -2
  263. package/dist/lcm/tools.d.ts +1 -1
  264. package/dist/lifecycle.d.ts +1 -1
  265. package/dist/live-connectors-runner.d.ts +1 -1
  266. package/dist/local-llm.d.ts +2 -1
  267. package/dist/local-llm.js +2 -2
  268. package/dist/local-model-endpoint.d.ts +1 -1
  269. package/dist/maintenance/memory-governance.d.ts +1 -1
  270. package/dist/maintenance/memory-governance.js +14 -14
  271. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  272. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
  273. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  274. package/dist/maintenance/rebuild-memory-projection.js +15 -15
  275. package/dist/{maintenance-heMZSq7G.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
  276. package/dist/mcp-memory-inspector-app.d.ts +22 -22
  277. package/dist/mcp-read-only-tools.js +1 -1
  278. package/dist/memory-action-policy.d.ts +1 -1
  279. package/dist/memory-cache.d.ts +1 -1
  280. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  281. package/dist/memory-projection-store.d.ts +1 -1
  282. package/dist/memory-provenance.d.ts +1 -1
  283. package/dist/memory-snapshot.d.ts +1 -1
  284. package/dist/memory-worth-outcomes.d.ts +2 -2
  285. package/dist/models-json.d.ts +1 -1
  286. package/dist/namespaces/migrate.d.ts +3 -3
  287. package/dist/namespaces/migrate.js +15 -15
  288. package/dist/namespaces/principal.d.ts +1 -1
  289. package/dist/namespaces/search.d.ts +1 -1
  290. package/dist/namespaces/search.js +6 -6
  291. package/dist/namespaces/storage.d.ts +3 -3
  292. package/dist/namespaces/storage.js +14 -14
  293. package/dist/native-knowledge.d.ts +1 -1
  294. package/dist/offline-sync-impression-drain.d.ts +1 -1
  295. package/dist/operator-doctor-corpus.d.ts +1 -1
  296. package/dist/operator-doctor-corpus.js +17 -17
  297. package/dist/operator-doctor-replica.d.ts +1 -1
  298. package/dist/operator-toolkit.d.ts +3 -3
  299. package/dist/operator-toolkit.js +23 -22
  300. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  301. package/dist/orchestration/maintenance.d.ts +4 -4
  302. package/dist/orchestration/maintenance.js +19 -19
  303. package/dist/{orchestrator-BQQPsSjs.d.ts → orchestrator-D85CzDDY.d.ts} +8 -8
  304. package/dist/orchestrator.d.ts +9 -9
  305. package/dist/orchestrator.js +86 -80
  306. package/dist/patterns-cli.d.ts +1 -1
  307. package/dist/{pipeline-DFfmsnGk.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
  308. package/dist/policy-runtime.d.ts +1 -1
  309. package/dist/proactive-contention.d.ts +1 -1
  310. package/dist/provenance.d.ts +1 -1
  311. package/dist/public-http-D3GBeII4.d.ts +25 -0
  312. package/dist/{qmd-BF5bcVRs.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
  313. package/dist/qmd-preflight.d.ts +2 -2
  314. package/dist/qmd-recall-cache.d.ts +1 -1
  315. package/dist/qmd.d.ts +2 -2
  316. package/dist/recall-concurrency-config.d.ts +1 -1
  317. package/dist/recall-disclosure-escalation.d.ts +1 -1
  318. package/dist/recall-explain-renderer.d.ts +1 -1
  319. package/dist/recall-explain-renderer.js +3 -3
  320. package/dist/recall-memory-map.d.ts +1 -1
  321. package/dist/recall-planner-llm.d.ts +1 -1
  322. package/dist/recall-planner-llm.js +1 -1
  323. package/dist/recall-state.d.ts +1 -1
  324. package/dist/recall-tag-filter.d.ts +1 -1
  325. package/dist/recall-timings.d.ts +1 -1
  326. package/dist/recall-xray-cli.d.ts +1 -1
  327. package/dist/recall-xray-cli.js +4 -4
  328. package/dist/recall-xray-renderer.d.ts +1 -1
  329. package/dist/recall-xray-renderer.js +3 -3
  330. package/dist/recall-xray.d.ts +1 -1
  331. package/dist/recall-xray.js +2 -2
  332. package/dist/reconcile/cursor.d.ts +1 -1
  333. package/dist/reconcile/manifest.d.ts +1 -1
  334. package/dist/reconcile/plan.d.ts +1 -1
  335. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  336. package/dist/replay/normalizers/claude.d.ts +1 -1
  337. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  338. package/dist/replay/normalizers/shared.d.ts +1 -1
  339. package/dist/replay/runner.d.ts +1 -1
  340. package/dist/replay/types.d.ts +1 -1
  341. package/dist/replica-divergence.d.ts +1 -1
  342. package/dist/replica-peers-config.d.ts +1 -1
  343. package/dist/resolve-auth-token.d.ts +1 -1
  344. package/dist/resume-bundles.js +3 -2
  345. package/dist/retrieval-agents.d.ts +2 -2
  346. package/dist/retrieval-tiers.d.ts +1 -1
  347. package/dist/routing/engine.d.ts +1 -1
  348. package/dist/routing/store.d.ts +1 -1
  349. package/dist/salvage-envelope.d.ts +1 -1
  350. package/dist/{scope-profiles-CbUOsE_E.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
  351. package/dist/search/embed-helper.d.ts +1 -1
  352. package/dist/search/factory.d.ts +1 -1
  353. package/dist/search/factory.js +5 -5
  354. package/dist/search/index.d.ts +1 -1
  355. package/dist/search/index.js +9 -9
  356. package/dist/search/lancedb-backend.d.ts +1 -1
  357. package/dist/search/meilisearch-backend.d.ts +1 -1
  358. package/dist/search/noop-backend.d.ts +1 -1
  359. package/dist/search/orama-backend.d.ts +1 -1
  360. package/dist/search/port.d.ts +1 -1
  361. package/dist/search/remote-backend.d.ts +1 -1
  362. package/dist/{semantic-consolidation-DAB3xdKM.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
  363. package/dist/semantic-consolidation.d.ts +2 -2
  364. package/dist/semantic-consolidation.js +15 -15
  365. package/dist/semantic-rule-promotion.js +14 -14
  366. package/dist/semantic-rule-verifier.d.ts +1 -1
  367. package/dist/semantic-rule-verifier.js +14 -14
  368. package/dist/{service-DGKg2O6r.d.ts → service-DT-pJyda.d.ts} +660 -660
  369. package/dist/session-observer-bands.d.ts +1 -1
  370. package/dist/session-observer-state.d.ts +1 -1
  371. package/dist/shared-context/manager.d.ts +1 -1
  372. package/dist/signal.d.ts +1 -1
  373. package/dist/source-agent-qualifier.d.ts +1 -1
  374. package/dist/source-agent-qualifier.js +16 -16
  375. package/dist/{storage-CC1jKcWg.d.ts → storage-qOnaJ1Lw.d.ts} +4 -1
  376. package/dist/storage.d.ts +2 -2
  377. package/dist/storage.js +13 -13
  378. package/dist/summarizer.d.ts +1 -1
  379. package/dist/summarizer.js +5 -5
  380. package/dist/summary-snapshot.d.ts +1 -1
  381. package/dist/support-passport/index.d.ts +518 -0
  382. package/dist/support-passport/index.js +357 -0
  383. package/dist/support-passport/index.js.map +1 -0
  384. package/dist/temporal-supersession.d.ts +2 -2
  385. package/dist/temporal-timeline-recall.d.ts +1 -1
  386. package/dist/temporal-validity.d.ts +1 -1
  387. package/dist/threading.d.ts +1 -1
  388. package/dist/tier-migration.d.ts +2 -2
  389. package/dist/tier-routing.d.ts +1 -1
  390. package/dist/tier-routing.js +2 -2
  391. package/dist/{tier-stats-JDN6HRNT.js → tier-stats-EXYSKSVN.js} +3 -3
  392. package/dist/topics.d.ts +1 -1
  393. package/dist/transcript.d.ts +1 -1
  394. package/dist/transfer/autodetect.js +1 -1
  395. package/dist/transfer/backup.js +1 -1
  396. package/dist/transfer/capsule-export.js +2 -2
  397. package/dist/transfer/types.d.ts +24 -24
  398. package/dist/trust-score-stage.d.ts +1 -1
  399. package/dist/trust-score.d.ts +1 -1
  400. package/dist/{types-BnQza1y8.d.ts → types-ed-SvS2t.d.ts} +7 -1
  401. package/dist/types.d.ts +1 -1
  402. package/dist/types.js +1 -1
  403. package/dist/utility-runtime.d.ts +1 -1
  404. package/dist/verified-recall.js +14 -14
  405. package/dist/write-envelope.d.ts +1 -1
  406. package/dist/write-rate-limiter.d.ts +11 -5
  407. package/dist/write-rate-limiter.js +1 -1
  408. package/package.json +12 -2
  409. package/scripts/build-with-heap.mjs +11 -1
  410. package/src/access-authorization-probe.ts +20 -2
  411. package/src/access-boundary.ts +32 -0
  412. package/src/access-http.test.ts +1940 -643
  413. package/src/access-http.ts +81 -74
  414. package/src/access-mcp.ts +3 -1
  415. package/src/access-operations.ts +2 -0
  416. package/src/access-service.ts +612 -845
  417. package/src/access-surface-catalog.test.ts +40 -10
  418. package/src/access-surface-catalog.ts +15 -0
  419. package/src/active-memory-bridge.ts +17 -19
  420. package/src/config.ts +18 -9
  421. package/src/fallback-llm.test.ts +54 -0
  422. package/src/fallback-llm.ts +54 -9
  423. package/src/inline-script.ts +6 -0
  424. package/src/local-llm-headers-timeout.test.ts +42 -0
  425. package/src/local-llm.ts +8 -8
  426. package/src/mcp-read-only-tools.ts +3 -0
  427. package/src/relay/mission-access.test.ts +11 -11
  428. package/src/relay/mission-ui.test.ts +3 -1
  429. package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
  430. package/src/storage-contract/failure-semantics.test.ts +102 -0
  431. package/src/support-passport/access-http-base.ts +143 -0
  432. package/src/support-passport/access-http.ts +172 -0
  433. package/src/support-passport/access-operations.ts +272 -0
  434. package/src/support-passport/access-service-base.test.ts +193 -0
  435. package/src/support-passport/access-service-base.ts +176 -0
  436. package/src/support-passport/access-surface.test.ts +283 -0
  437. package/src/support-passport/access-surface.ts +286 -0
  438. package/src/support-passport/card-projection.test.ts +8 -0
  439. package/src/support-passport/card-projection.ts +77 -16
  440. package/src/support-passport/card-replacement.ts +126 -0
  441. package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
  442. package/src/support-passport/card-service.test.ts +533 -31
  443. package/src/support-passport/card-service.ts +506 -364
  444. package/src/support-passport/card-state.ts +158 -0
  445. package/src/support-passport/config-model-routing.test.ts +37 -0
  446. package/src/support-passport/config.test.ts +34 -0
  447. package/src/support-passport/config.ts +41 -0
  448. package/src/support-passport/contracts.test.ts +15 -2
  449. package/src/support-passport/contracts.ts +13 -0
  450. package/src/support-passport/errors.ts +6 -0
  451. package/src/support-passport/generated-batch.test.ts +185 -0
  452. package/src/support-passport/generated-batch.ts +338 -0
  453. package/src/support-passport/grant-contracts.ts +45 -1
  454. package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
  455. package/src/support-passport/grant-service-cache.test.ts +2 -2
  456. package/src/support-passport/grant-service-cancellation.test.ts +2 -0
  457. package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
  458. package/src/support-passport/grant-service.test.ts +853 -239
  459. package/src/support-passport/grant-service.ts +206 -57
  460. package/src/support-passport/grant-store.ts +7 -3
  461. package/src/support-passport/index.ts +10 -0
  462. package/src/support-passport/mcp-tools.test.ts +222 -0
  463. package/src/support-passport/mcp-tools.ts +187 -0
  464. package/src/support-passport/model-adapter.test.ts +840 -0
  465. package/src/support-passport/model-adapter.ts +602 -0
  466. package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
  467. package/src/support-passport/model-audit.ts +152 -0
  468. package/src/support-passport/model-bridge.test.ts +456 -0
  469. package/src/support-passport/model-bridge.ts +439 -0
  470. package/src/support-passport/model-contracts.ts +124 -0
  471. package/src/support-passport/model-service.test.ts +1731 -0
  472. package/src/support-passport/model-service.ts +399 -0
  473. package/src/support-passport/owner-http.test.ts +671 -0
  474. package/src/support-passport/owner-lock.ts +26 -9
  475. package/src/support-passport/private-file.test.ts +99 -0
  476. package/src/support-passport/private-file.ts +139 -12
  477. package/src/support-passport/public-http.test.ts +476 -0
  478. package/src/support-passport/public-http.ts +601 -0
  479. package/src/support-passport/ui.test.ts +181 -0
  480. package/src/types.ts +7 -0
  481. package/src/write-rate-limiter.test.ts +30 -6
  482. package/src/write-rate-limiter.ts +29 -18
  483. package/dist/chunk-2INWPC6E.js.map +0 -1
  484. package/dist/chunk-2PNXOQ4P.js.map +0 -1
  485. package/dist/chunk-3SXLD5T3.js.map +0 -1
  486. package/dist/chunk-3WGI7F4V.js.map +0 -1
  487. package/dist/chunk-7HG7MGAP.js.map +0 -1
  488. package/dist/chunk-BIF4SHMD.js.map +0 -1
  489. package/dist/chunk-C23BYTJV.js.map +0 -1
  490. package/dist/chunk-CSY44OKU.js.map +0 -1
  491. package/dist/chunk-DDA55IVB.js.map +0 -1
  492. package/dist/chunk-HNDIND7P.js.map +0 -1
  493. package/dist/chunk-L6CQ7WIW.js.map +0 -1
  494. package/dist/chunk-MKQBXQKU.js.map +0 -1
  495. package/dist/chunk-QQXWFDRD.js.map +0 -1
  496. package/dist/chunk-QTO6BMQZ.js.map +0 -1
  497. package/dist/chunk-WZWZRZ2V.js.map +0 -1
  498. /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
  499. /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
  500. /package/dist/{chunk-AU7Q3LSC.js.map → chunk-2QSZNTDO.js.map} +0 -0
  501. /package/dist/{chunk-TKFGFDPJ.js.map → chunk-3TIZPSJC.js.map} +0 -0
  502. /package/dist/{chunk-B4T3FQMT.js.map → chunk-43SEBY2M.js.map} +0 -0
  503. /package/dist/{chunk-LVKYLMSM.js.map → chunk-46SZBVDS.js.map} +0 -0
  504. /package/dist/{chunk-YKZLOPTC.js.map → chunk-5FD7JMTX.js.map} +0 -0
  505. /package/dist/{chunk-WM5LD6AT.js.map → chunk-6CYHUWCO.js.map} +0 -0
  506. /package/dist/{chunk-YR65W7BV.js.map → chunk-BRR5EUTF.js.map} +0 -0
  507. /package/dist/{chunk-JKW663ZN.js.map → chunk-CIAI24TQ.js.map} +0 -0
  508. /package/dist/{chunk-YDWPYDML.js.map → chunk-EKTP7MNS.js.map} +0 -0
  509. /package/dist/{chunk-6LEIWWAF.js.map → chunk-F2JRDPON.js.map} +0 -0
  510. /package/dist/{chunk-VYQ4URQB.js.map → chunk-FFRTNF3L.js.map} +0 -0
  511. /package/dist/{chunk-TY6MKIWP.js.map → chunk-FONWBCVY.js.map} +0 -0
  512. /package/dist/{chunk-XSV2YDCJ.js.map → chunk-FPLM2TKD.js.map} +0 -0
  513. /package/dist/{chunk-VTU5IEKY.js.map → chunk-FTPONF6B.js.map} +0 -0
  514. /package/dist/{chunk-6PZGKGAO.js.map → chunk-FWX7W5PM.js.map} +0 -0
  515. /package/dist/{chunk-QPW3PAIH.js.map → chunk-G6DFSS6A.js.map} +0 -0
  516. /package/dist/{chunk-2DD6ZHOM.js.map → chunk-GJ776BC2.js.map} +0 -0
  517. /package/dist/{chunk-XKAR4RF6.js.map → chunk-GN3WRFJY.js.map} +0 -0
  518. /package/dist/{chunk-RG426DJO.js.map → chunk-H7NAZ3UB.js.map} +0 -0
  519. /package/dist/{chunk-BSXGTDVJ.js.map → chunk-HBUFQRIM.js.map} +0 -0
  520. /package/dist/{chunk-FFEBSFVT.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
  521. /package/dist/{chunk-5JKUSBMX.js.map → chunk-IKP5OYQQ.js.map} +0 -0
  522. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  523. /package/dist/{chunk-DBY26JJJ.js.map → chunk-IQ4NVWEF.js.map} +0 -0
  524. /package/dist/{chunk-7Q7JWLQ4.js.map → chunk-JYG4OLWH.js.map} +0 -0
  525. /package/dist/{chunk-3OTSVCPK.js.map → chunk-K26NWEOC.js.map} +0 -0
  526. /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
  527. /package/dist/{chunk-7RZJWZ46.js.map → chunk-LEPOP46W.js.map} +0 -0
  528. /package/dist/{chunk-NGT35IGQ.js.map → chunk-MIH3CJPN.js.map} +0 -0
  529. /package/dist/{chunk-QPAQSG3F.js.map → chunk-MK5VEWCR.js.map} +0 -0
  530. /package/dist/{chunk-L7RTUEDG.js.map → chunk-OCIP6YMD.js.map} +0 -0
  531. /package/dist/{chunk-UWJNKGBA.js.map → chunk-QZLDRQ4I.js.map} +0 -0
  532. /package/dist/{chunk-UYOXFFEY.js.map → chunk-RUNORG2P.js.map} +0 -0
  533. /package/dist/{chunk-LC3FD4BV.js.map → chunk-RZQ6W2W4.js.map} +0 -0
  534. /package/dist/{chunk-MRGJZ75M.js.map → chunk-SMNYAMJD.js.map} +0 -0
  535. /package/dist/{chunk-DN2IDKI5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
  536. /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
  537. /package/dist/{chunk-CUTFSLSD.js.map → chunk-UCTS3DDH.js.map} +0 -0
  538. /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
  539. /package/dist/{chunk-QOQQMVR2.js.map → chunk-UKYS3NU5.js.map} +0 -0
  540. /package/dist/{chunk-VZRFGJCH.js.map → chunk-UPLZNJKN.js.map} +0 -0
  541. /package/dist/{chunk-DOOWFDWN.js.map → chunk-V6ERBR7U.js.map} +0 -0
  542. /package/dist/{chunk-N7CXQ5TA.js.map → chunk-XZHE2DEN.js.map} +0 -0
  543. /package/dist/{chunk-6NNNURLK.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  544. /package/dist/{chunk-F2Y6I74C.js.map → chunk-ZRZVLB7O.js.map} +0 -0
  545. /package/dist/{chunk-CLKBV3Z3.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
  546. /package/dist/{contradiction-scan-KCADHXPE.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
  547. /package/dist/{first-start-migration-LMMZFLKK.js.map → first-start-migration-CRZCZAJN.js.map} +0 -0
  548. /package/dist/{tier-stats-JDN6HRNT.js.map → tier-stats-EXYSKSVN.js.map} +0 -0
@@ -7,7 +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 { WriteRateLimiter } from "./write-rate-limiter.js";
10
+ import { WriteRateLimiter, type WriteRateLimitReservation } from "./write-rate-limiter.js";
11
11
  import { abortError, isAbortError } from "./abort-error.js";
12
12
  import { EngramAccessForbiddenError } from "./access-errors.js";
13
13
  import {
@@ -44,7 +44,7 @@ import {
44
44
  import { expandTildePath } from "./utils/path.js";
45
45
  import { projectTagProjectId } from "./coding/coding-namespace.js";
46
46
  import { getOperation, type OperationName } from "./access-boundary.js";
47
- import { authorizationProbeNamespaces, probeOperationAuthorization } from "./access-authorization-probe.js";
47
+ import { authorizationProbeNamespaces, authorizationProbeRequiresPrincipalNamespace, probeOperationAuthorization } from "./access-authorization-probe.js";
48
48
  import { resolveQueryNamespaceWritablePreflight } from "./access-namespace-preflight.js";
49
49
  import { respondAccessCapabilitiesHttp } from "./access-http-lcm-compaction.js";
50
50
  import {
@@ -66,7 +66,9 @@ import { cleanupExpiredChatSessions, enforceChatSessionNamespace } from "./chat/
66
66
  import { isDefaultReviewNamespace, listPairs, readPair } from "./contradiction/contradiction-review.js";
67
67
  import { isValidResolutionVerb, executeResolution } from "./contradiction/resolution.js";
68
68
  import { RelayMissionStoreError } from "./relay/mission.js";
69
-
69
+ import { SupportPassportAccessHttpBase } from "./support-passport/access-http-base.js";
70
+ import { serializeInlineScriptValue } from "./inline-script.js";
71
+ import type { SupportPassportExternalRequestHandler } from "./support-passport/public-http.js";
70
72
  export interface AccessHttpReadinessState {
71
73
  ready: boolean;
72
74
  warmupAttempts: number;
@@ -78,7 +80,6 @@ export interface AccessHttpReadinessState {
78
80
  */
79
81
  degraded?: boolean;
80
82
  }
81
-
82
83
  export interface EngramAccessHttpServerOptions {
83
84
  service: EngramAccessService;
84
85
  host?: string;
@@ -151,11 +152,7 @@ export interface EngramAccessHttpServerOptions {
151
152
  * operator-only endpoints without owning token validation.
152
153
  * Errors thrown by the handler flow into the existing error handling.
153
154
  */
154
- externalRequestHandler?: (
155
- req: IncomingMessage,
156
- res: ServerResponse,
157
- ctx: { authorized: boolean },
158
- ) => Promise<boolean>;
155
+ externalRequestHandler?: SupportPassportExternalRequestHandler;
159
156
  }
160
157
 
161
158
  export interface EngramAccessHttpServerStatus {
@@ -216,14 +213,12 @@ export interface RemnicAdminControls {
216
213
  update?: (patch: RemnicAdminConfigPatch) => Promise<RemnicAdminDashboardStatus>;
217
214
  }
218
215
 
219
- function resolveDefaultAdminConsolePublicDir(): string {
220
- const thisDir = path.dirname(fileURLToPath(import.meta.url));
216
+ export function resolveDefaultAdminConsolePublicDir(sourceUrl = import.meta.url): string {
217
+ const thisDir = path.dirname(fileURLToPath(sourceUrl));
221
218
  const candidates = [
222
- // Standard: admin-console sibling to src/ (development layout)
223
- path.resolve(thisDir, "../admin-console/public"),
224
- // Bundled: admin-console inside dist/ alongside the bundle
219
+ path.resolve(thisDir, "../../../admin-console/public"),
220
+ path.resolve(thisDir, "../dist/admin-console/public"),
225
221
  path.resolve(thisDir, "./admin-console/public"),
226
- // Package root: walk up from dist/ to the package root
227
222
  path.resolve(thisDir, "../../admin-console/public"),
228
223
  ];
229
224
  return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];
@@ -389,8 +384,8 @@ function codingContextFromProjectTag(projectTag: string): {
389
384
  };
390
385
  }
391
386
 
392
- export class EngramAccessHttpServer {
393
- private readonly service: EngramAccessService;
387
+ export class EngramAccessHttpServer extends SupportPassportAccessHttpBase {
388
+ protected readonly service: EngramAccessService;
394
389
  private readonly host: string;
395
390
  private readonly requestedPort: number;
396
391
  private readonly authToken?: string;
@@ -401,18 +396,14 @@ export class EngramAccessHttpServer {
401
396
  private readonly authenticatedPrincipal?: string;
402
397
  private readonly maxBodyBytes: number;
403
398
  private readonly adminConsoleEnabled: boolean;
404
- private readonly adminConsolePublicDir: string;
399
+ protected readonly adminConsolePublicDir: string;
405
400
  private readonly adminConsolePrefillToken?: string;
406
401
  private readonly adminControls?: RemnicAdminControls;
407
402
  private readonly trustPrincipalHeader: boolean;
408
403
  private readonly adapterRegistry: AdapterRegistry | null;
409
404
  private readonly readiness: () => AccessHttpReadinessState;
410
405
  private readonly resourceMetadataUrl?: string;
411
- private readonly externalRequestHandler?: (
412
- req: IncomingMessage,
413
- res: ServerResponse,
414
- ctx: { authorized: boolean },
415
- ) => Promise<boolean>;
406
+ private readonly externalRequestHandler?: SupportPassportExternalRequestHandler;
416
407
  private readonly writeLimiter: WriteRateLimiter;
417
408
  private readonly mcpServer: EngramMcpServer;
418
409
  private server: Server | null = null;
@@ -438,6 +429,7 @@ export class EngramAccessHttpServer {
438
429
  private chatTtlTimer: NodeJS.Timeout | null = null;
439
430
 
440
431
  constructor(options: EngramAccessHttpServerOptions) {
432
+ super();
441
433
  this.service = options.service;
442
434
  this.host = options.host?.trim() || "127.0.0.1";
443
435
  this.requestedPort = parseHttpServerPort(options.port);
@@ -722,7 +714,7 @@ export class EngramAccessHttpServer {
722
714
  return result;
723
715
  }
724
716
 
725
- private resolveRequestPrincipal(req: IncomingMessage): string | undefined {
717
+ protected resolveRequestPrincipal(req: IncomingMessage): string | undefined {
726
718
  return this.resolveRequestIdentity(req).principal;
727
719
  }
728
720
 
@@ -821,10 +813,9 @@ export class EngramAccessHttpServer {
821
813
  ): Promise<void> {
822
814
  const parsed = new URL(req.url ?? "/", `http://${hostToUrlAuthority(this.host)}`);
823
815
  const pathname = parsed.pathname;
816
+ if (await this.handleSupportPassportUi(req, res, pathname)) return;
824
817
 
825
- if (this.adminConsoleEnabled && await this.handleAdminConsole(req, res, pathname)) {
826
- return;
827
- }
818
+ if (this.adminConsoleEnabled && await this.handleAdminConsole(req, res, pathname)) return;
828
819
 
829
820
  if (req.method === "GET" && (pathname === "/engram/v1/live" || pathname === "/engram/v1/health")) {
830
821
  const { ready, warmupAttempts, lastError } = this.readiness();
@@ -836,8 +827,8 @@ export class EngramAccessHttpServer {
836
827
  }
837
828
  }
838
829
 
839
- // Run any host-supplied pre-auth request handler. It runs AFTER the
840
- // admin-console branch (admin assets are public) and BEFORE the
830
+ if (await this.handleSupportPassportPublicRequest(req, res)) return;
831
+ // Run any host-supplied pre-auth request handler after public UI assets and before the
841
832
  // operator bearer gate. The handler decides whether it has fully
842
833
  // owned the response (return true) or wants the request to fall
843
834
  // through to the normal pipeline. `ctx.authorized` is computed
@@ -847,11 +838,13 @@ export class EngramAccessHttpServer {
847
838
  // Operator-only endpoints (OAuth pending/approve/deny) must only pass
848
839
  // for unrestricted tokens — a scoped (least-privileged) token must NOT
849
840
  // reach operator surfaces (issue #1837).
850
- const authorized = this.isAuthorized(req, pathname) &&
851
- !isCapabilityRestricted(this.resolveTokenCapabilities(req, pathname));
852
- if (await this.externalRequestHandler(req, res, { authorized })) {
853
- return;
854
- }
841
+ const tokenAuthorized = this.isAuthorized(req, pathname);
842
+ const capabilities = this.resolveTokenCapabilities(req, pathname);
843
+ const authorized = tokenAuthorized && !isCapabilityRestricted(capabilities);
844
+ if (await this.externalRequestHandler(req, res, {
845
+ authorized,
846
+ tokenAuthorized,
847
+ })) return;
855
848
  }
856
849
 
857
850
  if (!this.isAuthorized(req, pathname)) {
@@ -903,10 +896,9 @@ export class EngramAccessHttpServer {
903
896
  return;
904
897
  }
905
898
 
906
- if (req.method === "POST" && pathname === "/mcp") {
907
- await this.handleMcpRequest(req, res, abortSignal);
908
- return;
909
- }
899
+ if (req.method === "POST" && pathname === "/mcp") return this.handleMcpRequest(req, res, abortSignal);
900
+
901
+ if (await this.handleSupportPassportOwnerRequest(req, res, pathname, parsed.search.length > 0, abortSignal)) return;
910
902
 
911
903
  if (req.method === "GET" && pathname === "/engram/v1/live") return this.respondJson(res, 200, { ok: true, ready: true });
912
904
  if (req.method === "GET" && pathname === "/engram/v1/health") {
@@ -921,9 +913,10 @@ export class EngramAccessHttpServer {
921
913
  if (req.method === "GET" && pathname === "/engram/v1/authorization") {
922
914
  res.setHeader("cache-control", "no-store");
923
915
  const probe = probeOperationAuthorization(tokenCapabilityStore.getStore(), parsed.searchParams.getAll("op"));
924
- const namespaceParam = parsed.searchParams.get("namespace") ?? undefined;
925
- for (const namespace of authorizationProbeNamespaces(probe.operations, namespaceParam))
916
+ for (const namespace of authorizationProbeNamespaces(probe.operations, parsed.searchParams.get("namespace") ?? undefined))
926
917
  this.resolveNamespace(req, namespace);
918
+ if (authorizationProbeRequiresPrincipalNamespace(probe.operations))
919
+ await this.enforceSupportPassportAuthorizationProbe(req);
927
920
  this.respondJson(res, 200, probe);
928
921
  return;
929
922
  }
@@ -1854,7 +1847,7 @@ export class EngramAccessHttpServer {
1854
1847
  if (!op) {
1855
1848
  throw new Error("access-boundary: operation not registered: relay_mission_append");
1856
1849
  }
1857
- let releaseWriteQuota: (() => void) | undefined;
1850
+ let writeQuota: WriteRateLimitReservation | undefined;
1858
1851
  try {
1859
1852
  const output = (await op.run(
1860
1853
  { missionId, namespace, event: body.event },
@@ -1863,22 +1856,18 @@ export class EngramAccessHttpServer {
1863
1856
  authenticatedPrincipal: this.resolveRequestPrincipal(req),
1864
1857
  hooks: {
1865
1858
  enforceWriteQuota: () => {
1866
- releaseWriteQuota ??= this.reserveWriteRateLimitSlot(req);
1859
+ writeQuota ??= this.reserveWriteRateLimitSlot(req);
1867
1860
  },
1868
1861
  },
1869
1862
  },
1870
1863
  )) as { result: { appended: boolean; replayed: boolean; event: unknown } };
1871
1864
  if (output.result.appended) {
1872
- // The reservation is now the committed quota hit. Do not record a
1873
- // second timestamp after the append returns.
1874
- releaseWriteQuota = undefined;
1865
+ writeQuota?.commit();
1866
+ writeQuota = undefined;
1875
1867
  }
1876
1868
  this.respondJson(res, output.result.appended ? 201 : 200, output.result);
1877
1869
  } finally {
1878
- // Replays never invoke the hook. If a future store path invokes it but
1879
- // does not append, or persistence throws after reservation, return the
1880
- // slot so a failed write cannot exhaust the rolling window.
1881
- releaseWriteQuota?.();
1870
+ writeQuota?.release();
1882
1871
  }
1883
1872
  return;
1884
1873
  }
@@ -3271,10 +3260,6 @@ export class EngramAccessHttpServer {
3271
3260
  params?: Record<string, unknown>;
3272
3261
  };
3273
3262
 
3274
- // Enforce write rate limiting for MCP tool calls that mutate state,
3275
- // matching the same protection applied to the REST write endpoints.
3276
- // Pre-check ensures capacity; post-check skips counting dry runs and
3277
- // idempotency replays, consistent with the REST handlers.
3278
3263
  const toolName = typeof request.params?.name === "string" ? request.params.name : "";
3279
3264
  const toolArgs = request.params?.arguments;
3280
3265
  const dreamsRunDryRun =
@@ -3313,6 +3298,7 @@ export class EngramAccessHttpServer {
3313
3298
  const codegraphWrite =
3314
3299
  CODEGRAPH_WRITE_TOOLS.has(toolName) ||
3315
3300
  (isCodegraphManageAdr && (toolArgsSubcommand === "record" || toolArgsSubcommand === "supersede"));
3301
+ const supportPassportQuotaLimitedWrite = this.isSupportPassportQuotaLimitedWriteTool(toolName);
3316
3302
  const isMcpWrite =
3317
3303
  request.method === "tools/call" &&
3318
3304
  (
@@ -3352,28 +3338,32 @@ export class EngramAccessHttpServer {
3352
3338
  ) ||
3353
3339
  codingDecisionWrite ||
3354
3340
  codingArchitectureWrite ||
3355
- codegraphWrite
3341
+ codegraphWrite ||
3342
+ supportPassportQuotaLimitedWrite
3356
3343
  );
3357
- // observe self-enforces quota INSIDE its idempotency lock via the
3358
- // enforceWriteQuota hook (issue #1649) — mirroring the direct
3359
- // /engram/v1/observe route — so it must NOT be pre-checked here: a
3360
- // pre-check would 429 a response-lost replay. It still counts as a write
3361
- // for post-recording (the replay guard in shouldCountWriteRateLimit skips
3362
- // the record). Other write tools keep the coarse pre-check.
3363
3344
  const observeSelfEnforcesQuota =
3364
3345
  toolName === "engram.observe" || toolName === "remnic.observe";
3365
3346
  const extractionForceFlushWrite =
3366
3347
  toolName === "engram.extraction_force_flush" || toolName === "remnic.extraction_force_flush";
3367
3348
  let writeRateLimitRecorded = false;
3349
+ let supportPassportQuota: WriteRateLimitReservation | undefined;
3368
3350
  const recordCommittedMcpWrite = extractionForceFlushWrite
3369
3351
  ? () => {
3370
3352
  if (writeRateLimitRecorded) return;
3371
3353
  writeRateLimitRecorded = true;
3372
3354
  this.recordWriteRateLimitHit(req);
3373
3355
  }
3356
+ : supportPassportQuotaLimitedWrite
3357
+ ? () => {
3358
+ if (writeRateLimitRecorded) return;
3359
+ writeRateLimitRecorded = true;
3360
+ supportPassportQuota?.commit();
3361
+ supportPassportQuota = undefined;
3362
+ }
3374
3363
  : undefined;
3375
3364
  if (isMcpWrite && !observeSelfEnforcesQuota) {
3376
- this.ensureWriteRateLimitAvailable(req);
3365
+ if (supportPassportQuotaLimitedWrite) supportPassportQuota = this.reserveWriteRateLimitSlot(req);
3366
+ else this.ensureWriteRateLimitAvailable(req);
3377
3367
  }
3378
3368
 
3379
3369
  const sessionId = (() => {
@@ -3417,6 +3407,9 @@ export class EngramAccessHttpServer {
3417
3407
  recordWriteCommit: recordCommittedMcpWrite,
3418
3408
  sourceConnector: this.resolveConnector(req),
3419
3409
  abortSignal,
3410
+ }).catch((error) => {
3411
+ supportPassportQuota?.release();
3412
+ throw error;
3420
3413
  });
3421
3414
 
3422
3415
  if (isMcpWrite && response !== null) {
@@ -3437,10 +3430,16 @@ export class EngramAccessHttpServer {
3437
3430
  // dryRun/idempotencyReplay guards.
3438
3431
  const counts = structured ? this.shouldCountWriteRateLimit(structured) : true;
3439
3432
  if (!writeRateLimitRecorded && !isError && !isRejectedCodegraph && counts) {
3440
- this.recordWriteRateLimitHit(req);
3433
+ if (supportPassportQuota) {
3434
+ supportPassportQuota.commit();
3435
+ supportPassportQuota = undefined;
3436
+ } else {
3437
+ this.recordWriteRateLimitHit(req);
3438
+ }
3441
3439
  writeRateLimitRecorded = true;
3442
3440
  }
3443
3441
  }
3442
+ supportPassportQuota?.release();
3444
3443
  // A mutating tool may have committed just before the client disconnected.
3445
3444
  // Record that side effect above, then honor cancellation before emitting
3446
3445
  // any response. Read-only calls reach this guard without accounting.
@@ -3463,7 +3462,7 @@ export class EngramAccessHttpServer {
3463
3462
  this.respondJson(res, 200, response);
3464
3463
  }
3465
3464
 
3466
- private respondJson(res: ServerResponse, status: number, payload: unknown): void {
3465
+ protected respondJson(res: ServerResponse, status: number, payload: unknown): void {
3467
3466
  const body = JSON.stringify(payload, null, 2);
3468
3467
  res.statusCode = status;
3469
3468
  res.setHeader("content-type", "application/json; charset=utf-8");
@@ -3536,17 +3535,25 @@ export class EngramAccessHttpServer {
3536
3535
  return false;
3537
3536
  }
3538
3537
 
3539
- private async respondAdminConsoleShell(
3538
+ protected async respondAdminConsoleShell(
3540
3539
  req: IncomingMessage,
3541
3540
  res: ServerResponse,
3542
3541
  pathname: string,
3543
3542
  relativePath = "index.html",
3543
+ allowPrefill = true,
3544
3544
  ): Promise<void> {
3545
3545
  try {
3546
3546
  let body = await readFile(path.join(this.adminConsolePublicDir, relativePath), "utf-8");
3547
- const canPrefillToken = this.adminConsolePrefillToken && this.isAuthorized(req, pathname);
3547
+ const matched = this.resolveAuthorizedEntry(req, pathname);
3548
+ const canPrefillToken =
3549
+ allowPrefill &&
3550
+ this.adminConsolePrefillToken &&
3551
+ matched !== null &&
3552
+ matched.capabilities === undefined &&
3553
+ this.timingSafeStringEqual(matched.token, this.adminConsolePrefillToken);
3548
3554
  if (canPrefillToken) {
3549
- const script = `<script>window.__REMNIC_ADMIN_CONSOLE_PREFILL_TOKEN__=${JSON.stringify(this.adminConsolePrefillToken)};</script>`;
3555
+ const serializedToken = serializeInlineScriptValue(this.adminConsolePrefillToken);
3556
+ const script = `<script>(function(token,script){const key="__REMNIC_ADMIN_CONSOLE_PREFILL_TOKEN__";const clear=function(){token="";try{delete window[key]}catch{window[key]=""}};window.addEventListener("pagehide",clear,{once:true});window.addEventListener("beforeunload",clear,{once:true});try{if(new URLSearchParams(location.hash.slice(1)).has("secret")){clear();return}Object.defineProperty(window,key,{configurable:true,get:function(){const value=token;clear();return value}})}finally{if(script){script.textContent="";script.remove()}}})(${serializedToken},document.currentScript);</script>`;
3550
3557
  body = body.includes("</head>")
3551
3558
  ? body.replace("</head>", `${script}</head>`)
3552
3559
  : `${script}${body}`;
@@ -3562,7 +3569,7 @@ export class EngramAccessHttpServer {
3562
3569
  }
3563
3570
  }
3564
3571
 
3565
- private async respondStatic(res: ServerResponse, filePath: string, contentType: string): Promise<void> {
3572
+ protected async respondStatic(res: ServerResponse, filePath: string, contentType: string): Promise<void> {
3566
3573
  try {
3567
3574
  const body = await readFile(filePath, "utf-8");
3568
3575
  res.statusCode = 200;
@@ -3574,7 +3581,7 @@ export class EngramAccessHttpServer {
3574
3581
  }
3575
3582
  }
3576
3583
 
3577
- private async readJsonBody(
3584
+ protected async readJsonBody(
3578
3585
  req: IncomingMessage,
3579
3586
  maxBodyBytes = this.maxBodyBytes,
3580
3587
  ): Promise<Record<string, unknown>> {
@@ -3961,22 +3968,22 @@ export class EngramAccessHttpServer {
3961
3968
  return 200;
3962
3969
  }
3963
3970
 
3964
- private ensureWriteRateLimitAvailable(req?: IncomingMessage): void {
3971
+ protected ensureWriteRateLimitAvailable(req?: IncomingMessage): void {
3965
3972
  if (!this.writeLimiter.hasCapacity(this.principalForRateLimit(req))) {
3966
3973
  throw new HttpError(429, "write_rate_limited", "write_rate_limited");
3967
3974
  }
3968
3975
  }
3969
3976
 
3970
- private recordWriteRateLimitHit(req?: IncomingMessage): void {
3977
+ protected recordWriteRateLimitHit(req?: IncomingMessage): void {
3971
3978
  this.writeLimiter.record(this.principalForRateLimit(req));
3972
3979
  }
3973
3980
 
3974
- private reserveWriteRateLimitSlot(req?: IncomingMessage): () => void {
3975
- const release = this.writeLimiter.reserve(this.principalForRateLimit(req));
3976
- if (!release) {
3981
+ protected reserveWriteRateLimitSlot(req?: IncomingMessage): WriteRateLimitReservation {
3982
+ const reservation = this.writeLimiter.reserve(this.principalForRateLimit(req));
3983
+ if (!reservation) {
3977
3984
  throw new HttpError(429, "write_rate_limited", "write_rate_limited");
3978
3985
  }
3979
- return release;
3986
+ return reservation;
3980
3987
  }
3981
3988
 
3982
3989
  private principalForRateLimit(req?: IncomingMessage): string | undefined {
package/src/access-mcp.ts CHANGED
@@ -41,13 +41,13 @@ import { resolvePrincipal } from "./namespaces/principal.js";
41
41
  import { readEnvVar } from "./runtime/env.js";
42
42
  import type { RecallDisclosure, RecallPlanMode } from "./types.js";
43
43
  import { expandTildePath } from "./utils/path.js";
44
-
45
44
  import { applyToolOutputSchemas } from "./access-mcp-output-schemas.js";
46
45
  import { MCP_READ_ONLY_TOOL_SUFFIXES } from "./mcp-read-only-tools.js";
47
46
  import { MEETINGS_MCP_TOOLS } from "./meetings/mcp-tools.js";
48
47
  import { WEARABLES_MCP_TOOLS } from "./wearables/mcp-tools.js";
49
48
  import { EXTERNAL_WIKI_MCP_TOOLS } from "./external-wiki-mcp-tools.js";
50
49
  import { abortError, isAbortError } from "./abort-error.js";
50
+ import { SUPPORT_PASSPORT_MCP_MIGRATED_OPERATIONS, SUPPORT_PASSPORT_MCP_TOOLS } from "./support-passport/mcp-tools.js";
51
51
  type JsonRpcId = string | number | null;
52
52
 
53
53
  type JsonRpcRequest = {
@@ -264,6 +264,7 @@ const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> = {
264
264
  "engram.console_state": "console_state",
265
265
  "engram.dreams_status": "dreams_status",
266
266
  "engram.dreams_run": "dreams_run",
267
+ ...SUPPORT_PASSPORT_MCP_MIGRATED_OPERATIONS,
267
268
  "engram.memory_chat": "chat_message",
268
269
  };
269
270
 
@@ -687,6 +688,7 @@ export class EngramMcpServer {
687
688
  },
688
689
  },
689
690
  ...WEARABLES_MCP_TOOLS, ...MEETINGS_MCP_TOOLS,
691
+ ...(service.supportPassportEnabled ? SUPPORT_PASSPORT_MCP_TOOLS : []),
690
692
  {
691
693
  name: "engram.action_confidence",
692
694
  description:
@@ -689,6 +689,8 @@ export const codegraphIngestTracesOperation = defineOperation<
689
689
  // Batch-migrated operations (issue #1525): registers all remaining
690
690
  // handlers through the boundary as a side effect of importing this module.
691
691
  import "./access-operations-batch.js";
692
+ // Owner-controlled support passport operations (issue #2355).
693
+ import "./support-passport/access-operations.js";
692
694
  // Remnic Relay mission evidence operations (issue #1966).
693
695
  import "./relay/mission-access.js";
694
696