@remnic/core 9.6.0 → 9.6.2

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 (333) hide show
  1. package/dist/access-admin-ops-surface.d.ts +7 -8
  2. package/dist/access-admin-ops-surface.js +8 -8
  3. package/dist/access-boundary.d.ts +9 -8
  4. package/dist/access-boundary.js +9 -9
  5. package/dist/access-cli.js +40 -40
  6. package/dist/access-http.d.ts +47 -16
  7. package/dist/access-http.js +13 -13
  8. package/dist/access-identity-continuity-surface.d.ts +6 -7
  9. package/dist/access-identity-continuity-surface.js +8 -8
  10. package/dist/access-lcm-surface.d.ts +7 -8
  11. package/dist/access-lcm-surface.js +8 -8
  12. package/dist/access-mcp.d.ts +13 -8
  13. package/dist/access-mcp.js +12 -12
  14. package/dist/access-observe-write-surface.d.ts +7 -8
  15. package/dist/access-observe-write-surface.js +8 -8
  16. package/dist/access-operations-batch.js +10 -10
  17. package/dist/access-operations.d.ts +8 -9
  18. package/dist/access-operations.js +11 -11
  19. package/dist/access-recall-surface.d.ts +7 -8
  20. package/dist/access-recall-surface.js +8 -8
  21. package/dist/access-schema.d.ts +6 -6
  22. package/dist/{access-service-CXJaql3A.d.ts → access-service-B_sc1w_k.d.ts} +9 -9
  23. package/dist/access-service.d.ts +7 -8
  24. package/dist/access-service.js +8 -8
  25. package/dist/access-surface-catalog.d.ts +7 -8
  26. package/dist/action-confidence.d.ts +1 -2
  27. package/dist/active-memory-bridge.d.ts +1 -2
  28. package/dist/active-recall.d.ts +1 -2
  29. package/dist/behavior-learner.d.ts +1 -2
  30. package/dist/behavior-signals.d.ts +1 -2
  31. package/dist/bootstrap.d.ts +6 -7
  32. package/dist/briefing.d.ts +2 -3
  33. package/dist/briefing.js +3 -3
  34. package/dist/buffer-surprise-report.d.ts +1 -2
  35. package/dist/buffer.d.ts +2 -3
  36. package/dist/buffer.js +1 -1
  37. package/dist/bulk-import/index.d.ts +3 -3
  38. package/dist/bulk-import/index.js +2 -2
  39. package/dist/calibration.d.ts +1 -2
  40. package/dist/capabilities.d.ts +1 -2
  41. package/dist/{catalog-C9cu67Ig.d.ts → catalog-9WanSGtt.d.ts} +1 -1
  42. package/dist/causal-behavior.d.ts +1 -2
  43. package/dist/causal-consolidation.d.ts +1 -2
  44. package/dist/causal-consolidation.js +4 -4
  45. package/dist/causal-trajectory-graph.d.ts +1 -2
  46. package/dist/{chunk-PNLFN2PZ.js → chunk-23G3T2Q5.js} +2 -2
  47. package/dist/{chunk-SIRPLF54.js → chunk-2K3OSLHE.js} +2 -2
  48. package/dist/{chunk-JS2HKKOK.js → chunk-3AC5UYKI.js} +1 -1
  49. package/dist/{chunk-JS2HKKOK.js.map → chunk-3AC5UYKI.js.map} +1 -1
  50. package/dist/{chunk-FKCRGLRD.js → chunk-4WRKKRTD.js} +266 -160
  51. package/dist/chunk-4WRKKRTD.js.map +1 -0
  52. package/dist/{chunk-LQHDIS7L.js → chunk-54BGIBCR.js} +2 -2
  53. package/dist/{chunk-PVUJ6WVV.js → chunk-5MH5NF3U.js} +5 -5
  54. package/dist/{chunk-PCLIWBGD.js → chunk-7ARV32PI.js} +8 -6
  55. package/dist/chunk-7ARV32PI.js.map +1 -0
  56. package/dist/{chunk-Y7UNNAZD.js → chunk-7ZYBDQ7V.js} +2 -2
  57. package/dist/{chunk-2PRQG7PV.js → chunk-AJVLDJU6.js} +1 -1
  58. package/dist/chunk-AJVLDJU6.js.map +1 -0
  59. package/dist/{chunk-LR5DZ56F.js → chunk-AXALUFAH.js} +2 -2
  60. package/dist/{chunk-AYZJID4S.js → chunk-B5GBWBCZ.js} +2 -2
  61. package/dist/{chunk-TLUDFPZL.js → chunk-CAZ3Z5M6.js} +2 -2
  62. package/dist/{chunk-RGK27ELN.js → chunk-DEKIXXIG.js} +2 -2
  63. package/dist/{chunk-2KK5WNQB.js → chunk-DQ42IQSK.js} +2 -2
  64. package/dist/{chunk-UFUKHGZD.js → chunk-F4I5NYBI.js} +89 -33
  65. package/dist/chunk-F4I5NYBI.js.map +1 -0
  66. package/dist/{chunk-HOJZMQ4J.js → chunk-FGDKJJZS.js} +2 -2
  67. package/dist/{chunk-ABP6QMVM.js → chunk-FQ7HAWWC.js} +2 -2
  68. package/dist/{chunk-CYWA2CXR.js → chunk-FVTLSFWU.js} +2 -2
  69. package/dist/{chunk-JJEJJ7RK.js → chunk-FXZTL7F7.js} +2 -2
  70. package/dist/{chunk-LADFWYHY.js → chunk-GOEV7CYF.js} +6 -6
  71. package/dist/chunk-GOEV7CYF.js.map +1 -0
  72. package/dist/{chunk-DANV2HTH.js → chunk-GQGDRLDM.js} +3 -3
  73. package/dist/{chunk-7F7Z6MOS.js → chunk-H4CKS5B2.js} +2 -2
  74. package/dist/{chunk-SVOHGUMI.js → chunk-H4FHR4UM.js} +174 -197
  75. package/dist/chunk-H4FHR4UM.js.map +1 -0
  76. package/dist/{chunk-CKITWVWJ.js → chunk-HSSERO3E.js} +2 -2
  77. package/dist/{chunk-23JFRB73.js → chunk-JODHPNLN.js} +2 -2
  78. package/dist/{chunk-DS7MM2ES.js → chunk-JZKR6ZAV.js} +2 -2
  79. package/dist/{chunk-BEM4D2QG.js → chunk-KJIJNLXT.js} +3 -3
  80. package/dist/{chunk-JSNVWNGX.js → chunk-KVSVVKHA.js} +2 -2
  81. package/dist/{chunk-4GNEDXDI.js → chunk-M67TLMP6.js} +2 -2
  82. package/dist/chunk-M67TLMP6.js.map +1 -0
  83. package/dist/{chunk-MC4FJXPA.js → chunk-MMACM5G2.js} +2 -2
  84. package/dist/{chunk-OUELRE5E.js → chunk-NOUJNHWG.js} +1 -1
  85. package/dist/chunk-NOUJNHWG.js.map +1 -0
  86. package/dist/{chunk-3XIY7MDQ.js → chunk-O6YI4CVI.js} +2 -2
  87. package/dist/{chunk-F53UF7CI.js → chunk-QLVLW7UD.js} +6 -2
  88. package/dist/{chunk-F53UF7CI.js.map → chunk-QLVLW7UD.js.map} +1 -1
  89. package/dist/{chunk-XCL57M6Q.js → chunk-RRKPLLCC.js} +21 -20
  90. package/dist/chunk-RRKPLLCC.js.map +1 -0
  91. package/dist/{chunk-72WG5QKN.js → chunk-SDAXPXER.js} +2 -2
  92. package/dist/{chunk-4LV23CHK.js → chunk-VHJARF5R.js} +2 -2
  93. package/dist/{chunk-H2DXDQCQ.js → chunk-VRJG3HIZ.js} +46 -42
  94. package/dist/chunk-VRJG3HIZ.js.map +1 -0
  95. package/dist/{chunk-6MMONPHM.js → chunk-W2AHSCKY.js} +2 -2
  96. package/dist/{chunk-P454KXD6.js → chunk-YAWJMR3Y.js} +21 -21
  97. package/dist/{chunk-K5LLP4CY.js → chunk-ZGPDSEKG.js} +20 -9
  98. package/dist/chunk-ZGPDSEKG.js.map +1 -0
  99. package/dist/{cli-CqdPA6z9.d.ts → cli-CnRsWREp.d.ts} +4 -5
  100. package/dist/cli.d.ts +9 -10
  101. package/dist/cli.js +32 -32
  102. package/dist/compounding/engine.d.ts +2 -3
  103. package/dist/compounding/engine.js +3 -3
  104. package/dist/compounding/preference-consolidator.d.ts +1 -2
  105. package/dist/compression-optimizer.d.ts +1 -2
  106. package/dist/config.d.ts +1 -2
  107. package/dist/connectors/codex-materialize-runner.d.ts +1 -2
  108. package/dist/connectors/codex-materialize-runner.js +3 -3
  109. package/dist/connectors/codex-materialize.d.ts +1 -2
  110. package/dist/connectors/index.d.ts +1 -2
  111. package/dist/connectors/index.js +3 -3
  112. package/dist/consolidation-provenance-check.d.ts +2 -3
  113. package/dist/consolidation-undo.d.ts +2 -3
  114. package/dist/contradiction/index.d.ts +3 -4
  115. package/dist/conversation-index/backend.d.ts +1 -2
  116. package/dist/conversation-index/chunker.d.ts +1 -2
  117. package/dist/conversation-index/faiss-adapter.d.ts +1 -2
  118. package/dist/conversation-index/indexer.d.ts +1 -2
  119. package/dist/conversation-index/search.d.ts +1 -2
  120. package/dist/day-summary.d.ts +1 -2
  121. package/dist/delinearize.d.ts +1 -2
  122. package/dist/direct-answer-wiring.d.ts +1 -2
  123. package/dist/direct-answer.d.ts +1 -2
  124. package/dist/embedding-fallback.d.ts +1 -2
  125. package/dist/enrichment/index.d.ts +1 -2
  126. package/dist/entity-retrieval.d.ts +2 -3
  127. package/dist/entity-retrieval.js +3 -3
  128. package/dist/entity-schema.d.ts +1 -2
  129. package/dist/explicit-capture.d.ts +8 -7
  130. package/dist/explicit-capture.js +1 -1
  131. package/dist/extraction-faithfulness.d.ts +1 -2
  132. package/dist/extraction-judge-telemetry.d.ts +1 -2
  133. package/dist/extraction-judge-training.d.ts +1 -2
  134. package/dist/extraction-judge.d.ts +1 -2
  135. package/dist/extraction.d.ts +1 -2
  136. package/dist/fallback-llm.d.ts +1 -2
  137. package/dist/graph-dashboard-diff.d.ts +1 -2
  138. package/dist/graph-dashboard-key.d.ts +1 -2
  139. package/dist/graph-dashboard-parser.d.ts +1 -2
  140. package/dist/graph-edge-reinforcement.d.ts +1 -2
  141. package/dist/graph-snapshot.d.ts +1 -2
  142. package/dist/graph.d.ts +1 -2
  143. package/dist/identity-continuity.d.ts +1 -2
  144. package/dist/importance.d.ts +1 -2
  145. package/dist/importers/index.d.ts +1 -1
  146. package/dist/importers/index.js +2 -2
  147. package/dist/index.d.ts +14 -15
  148. package/dist/index.js +40 -40
  149. package/dist/intent.d.ts +1 -2
  150. package/dist/lcm/engine.d.ts +1 -2
  151. package/dist/lcm/index.d.ts +1 -2
  152. package/dist/lcm/tools.d.ts +1 -2
  153. package/dist/lifecycle.d.ts +1 -2
  154. package/dist/live-connectors-runner.d.ts +1 -2
  155. package/dist/local-llm.d.ts +1 -2
  156. package/dist/local-model-endpoint.d.ts +1 -2
  157. package/dist/maintenance/memory-governance.d.ts +1 -2
  158. package/dist/maintenance/memory-governance.js +3 -3
  159. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  160. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  161. package/dist/mcp-memory-inspector-app.d.ts +7 -8
  162. package/dist/memory-action-policy.d.ts +1 -2
  163. package/dist/memory-cache.d.ts +1 -2
  164. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -2
  165. package/dist/memory-projection-store.d.ts +1 -2
  166. package/dist/memory-provenance.d.ts +1 -2
  167. package/dist/memory-worth-outcomes.d.ts +2 -3
  168. package/dist/models-json.d.ts +1 -2
  169. package/dist/namespaces/migrate.d.ts +3 -4
  170. package/dist/namespaces/migrate.js +4 -4
  171. package/dist/namespaces/principal.d.ts +1 -2
  172. package/dist/namespaces/search.d.ts +1 -2
  173. package/dist/namespaces/storage.d.ts +3 -4
  174. package/dist/namespaces/storage.js +3 -3
  175. package/dist/native-knowledge.d.ts +1 -2
  176. package/dist/operator-toolkit.d.ts +2 -3
  177. package/dist/operator-toolkit.js +7 -7
  178. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -3
  179. package/dist/orchestration/maintenance.d.ts +2 -3
  180. package/dist/orchestration/maintenance.js +5 -5
  181. package/dist/{orchestrator-CWFrT8AF.d.ts → orchestrator-NRLVXPpH.d.ts} +40 -15
  182. package/dist/orchestrator.d.ts +6 -7
  183. package/dist/orchestrator.js +40 -40
  184. package/dist/patterns-cli.d.ts +1 -2
  185. package/dist/{pipeline-DmqtvION.d.ts → pipeline-CiD86zIk.d.ts} +1 -1
  186. package/dist/policy-runtime.d.ts +1 -2
  187. package/dist/provenance.d.ts +1 -2
  188. package/dist/{qmd--fnPMK60.d.ts → qmd-Bef7DDuQ.d.ts} +1 -1
  189. package/dist/qmd-preflight.d.ts +2 -3
  190. package/dist/qmd-recall-cache.d.ts +1 -2
  191. package/dist/qmd.d.ts +2 -3
  192. package/dist/recall-disclosure-escalation.d.ts +1 -2
  193. package/dist/recall-explain-renderer.d.ts +1 -2
  194. package/dist/recall-explain-renderer.js +3 -3
  195. package/dist/recall-planner-llm.d.ts +1 -2
  196. package/dist/recall-state.d.ts +1 -2
  197. package/dist/recall-tag-filter.d.ts +1 -2
  198. package/dist/recall-timings.d.ts +1 -2
  199. package/dist/recall-xray-cli.d.ts +1 -2
  200. package/dist/recall-xray-cli.js +4 -4
  201. package/dist/recall-xray-renderer.d.ts +1 -2
  202. package/dist/recall-xray-renderer.js +3 -3
  203. package/dist/recall-xray.d.ts +1 -2
  204. package/dist/recall-xray.js +2 -2
  205. package/dist/replay/normalizers/chatgpt.d.ts +1 -0
  206. package/dist/replay/normalizers/chatgpt.js +3 -3
  207. package/dist/replay/normalizers/claude.d.ts +1 -0
  208. package/dist/replay/normalizers/claude.js +3 -3
  209. package/dist/replay/normalizers/openclaw.d.ts +1 -0
  210. package/dist/replay/normalizers/openclaw.js +3 -3
  211. package/dist/replay/normalizers/shared.d.ts +1 -0
  212. package/dist/replay/normalizers/shared.js +2 -2
  213. package/dist/replay/runner.d.ts +1 -0
  214. package/dist/replay/runner.js +2 -2
  215. package/dist/replay/types.d.ts +2 -1
  216. package/dist/replay/types.js +1 -1
  217. package/dist/resolve-auth-token.d.ts +1 -2
  218. package/dist/retrieval-agents.d.ts +2 -3
  219. package/dist/retrieval-tiers.d.ts +1 -2
  220. package/dist/routing/engine.d.ts +1 -2
  221. package/dist/routing/store.d.ts +1 -2
  222. package/dist/schemas.d.ts +44 -44
  223. package/dist/search/embed-helper.d.ts +1 -2
  224. package/dist/search/factory.d.ts +1 -2
  225. package/dist/search/index.d.ts +1 -2
  226. package/dist/search/lancedb-backend.d.ts +1 -2
  227. package/dist/search/meilisearch-backend.d.ts +1 -2
  228. package/dist/search/noop-backend.d.ts +1 -2
  229. package/dist/search/orama-backend.d.ts +1 -2
  230. package/dist/search/port.d.ts +1 -2
  231. package/dist/search/remote-backend.d.ts +1 -2
  232. package/dist/{semantic-DJR8_DMQ.d.ts → semantic-TddhF0y7.d.ts} +17 -1
  233. package/dist/{semantic-consolidation-O5lMZ4LG.d.ts → semantic-consolidation-BTShF2Fo.d.ts} +1 -1
  234. package/dist/semantic-consolidation.d.ts +2 -3
  235. package/dist/semantic-consolidation.js +4 -4
  236. package/dist/semantic-rule-promotion.js +3 -3
  237. package/dist/semantic-rule-verifier.d.ts +1 -2
  238. package/dist/semantic-rule-verifier.js +3 -3
  239. package/dist/session-observer-bands.d.ts +1 -2
  240. package/dist/session-observer-state.d.ts +1 -2
  241. package/dist/shared-context/manager.d.ts +3 -4
  242. package/dist/signal.d.ts +1 -2
  243. package/dist/{storage-C1maCNbc.d.ts → storage-DxPDAiU9.d.ts} +5 -1
  244. package/dist/storage.d.ts +2 -3
  245. package/dist/storage.js +2 -2
  246. package/dist/summarizer.d.ts +1 -2
  247. package/dist/summary-snapshot.d.ts +1 -2
  248. package/dist/temporal-supersession.d.ts +2 -3
  249. package/dist/temporal-validity.d.ts +1 -2
  250. package/dist/threading.d.ts +1 -2
  251. package/dist/tier-migration.d.ts +2 -3
  252. package/dist/tier-routing.d.ts +1 -2
  253. package/dist/topics.d.ts +1 -2
  254. package/dist/transcript.d.ts +1 -2
  255. package/dist/transfer/types.d.ts +12 -12
  256. package/dist/trust-score-stage.d.ts +1 -2
  257. package/dist/trust-score.d.ts +1 -2
  258. package/dist/{types-CGgcNWCG.d.ts → types-DDUDgd7T.d.ts} +93 -4
  259. package/dist/types.d.ts +1 -2
  260. package/dist/types.js +1 -1
  261. package/dist/utility-runtime.d.ts +1 -2
  262. package/dist/verified-recall.js +3 -3
  263. package/package.json +2 -2
  264. package/src/access-admin-ops-surface.ts +1 -0
  265. package/src/access-boundary.ts +2 -0
  266. package/src/access-http.test.ts +129 -0
  267. package/src/access-http.ts +92 -23
  268. package/src/access-mcp.ts +11 -2
  269. package/src/access-observe-write-surface.ts +87 -113
  270. package/src/access-operations-batch.ts +2 -2
  271. package/src/access-operations.ts +17 -16
  272. package/src/access-service.ts +11 -3
  273. package/src/admin/admin-surfaces.ts +2 -0
  274. package/src/buffer.ts +6 -1
  275. package/src/bulk-import/types.ts +2 -1
  276. package/src/coding/architecture-surfaces.test.ts +79 -5
  277. package/src/coding/architecture-surfaces.ts +7 -1
  278. package/src/coding/decision-surfaces.test.ts +1 -0
  279. package/src/coding/decision-surfaces.ts +4 -0
  280. package/src/connector-provenance-lifecycle.test.ts +618 -0
  281. package/src/connector-provenance.test.ts +219 -0
  282. package/src/dedup/semantic.test.ts +105 -0
  283. package/src/dedup/semantic.ts +69 -1
  284. package/src/explicit-capture.ts +21 -4
  285. package/src/orchestration/extraction-persist.ts +154 -6
  286. package/src/orchestration/extraction-run.ts +138 -228
  287. package/src/orchestration/persistence-index.ts +40 -5
  288. package/src/orchestration/turn-ingestion.ts +16 -9
  289. package/src/orchestrator-connector-dedup.test.ts +1082 -0
  290. package/src/orchestrator.ts +7 -11
  291. package/src/replay/types.ts +2 -1
  292. package/src/storage.ts +426 -553
  293. package/src/types.ts +11 -2
  294. package/src/utils/yaml-scalar.ts +20 -0
  295. package/dist/chunk-2PRQG7PV.js.map +0 -1
  296. package/dist/chunk-4GNEDXDI.js.map +0 -1
  297. package/dist/chunk-FKCRGLRD.js.map +0 -1
  298. package/dist/chunk-H2DXDQCQ.js.map +0 -1
  299. package/dist/chunk-K5LLP4CY.js.map +0 -1
  300. package/dist/chunk-LADFWYHY.js.map +0 -1
  301. package/dist/chunk-OUELRE5E.js.map +0 -1
  302. package/dist/chunk-PCLIWBGD.js.map +0 -1
  303. package/dist/chunk-SVOHGUMI.js.map +0 -1
  304. package/dist/chunk-UFUKHGZD.js.map +0 -1
  305. package/dist/chunk-XCL57M6Q.js.map +0 -1
  306. package/dist/types-gb_SNtjR.d.ts +0 -85
  307. /package/dist/{chunk-PNLFN2PZ.js.map → chunk-23G3T2Q5.js.map} +0 -0
  308. /package/dist/{chunk-SIRPLF54.js.map → chunk-2K3OSLHE.js.map} +0 -0
  309. /package/dist/{chunk-LQHDIS7L.js.map → chunk-54BGIBCR.js.map} +0 -0
  310. /package/dist/{chunk-PVUJ6WVV.js.map → chunk-5MH5NF3U.js.map} +0 -0
  311. /package/dist/{chunk-Y7UNNAZD.js.map → chunk-7ZYBDQ7V.js.map} +0 -0
  312. /package/dist/{chunk-LR5DZ56F.js.map → chunk-AXALUFAH.js.map} +0 -0
  313. /package/dist/{chunk-AYZJID4S.js.map → chunk-B5GBWBCZ.js.map} +0 -0
  314. /package/dist/{chunk-TLUDFPZL.js.map → chunk-CAZ3Z5M6.js.map} +0 -0
  315. /package/dist/{chunk-RGK27ELN.js.map → chunk-DEKIXXIG.js.map} +0 -0
  316. /package/dist/{chunk-2KK5WNQB.js.map → chunk-DQ42IQSK.js.map} +0 -0
  317. /package/dist/{chunk-HOJZMQ4J.js.map → chunk-FGDKJJZS.js.map} +0 -0
  318. /package/dist/{chunk-ABP6QMVM.js.map → chunk-FQ7HAWWC.js.map} +0 -0
  319. /package/dist/{chunk-CYWA2CXR.js.map → chunk-FVTLSFWU.js.map} +0 -0
  320. /package/dist/{chunk-JJEJJ7RK.js.map → chunk-FXZTL7F7.js.map} +0 -0
  321. /package/dist/{chunk-DANV2HTH.js.map → chunk-GQGDRLDM.js.map} +0 -0
  322. /package/dist/{chunk-7F7Z6MOS.js.map → chunk-H4CKS5B2.js.map} +0 -0
  323. /package/dist/{chunk-CKITWVWJ.js.map → chunk-HSSERO3E.js.map} +0 -0
  324. /package/dist/{chunk-23JFRB73.js.map → chunk-JODHPNLN.js.map} +0 -0
  325. /package/dist/{chunk-DS7MM2ES.js.map → chunk-JZKR6ZAV.js.map} +0 -0
  326. /package/dist/{chunk-BEM4D2QG.js.map → chunk-KJIJNLXT.js.map} +0 -0
  327. /package/dist/{chunk-JSNVWNGX.js.map → chunk-KVSVVKHA.js.map} +0 -0
  328. /package/dist/{chunk-MC4FJXPA.js.map → chunk-MMACM5G2.js.map} +0 -0
  329. /package/dist/{chunk-3XIY7MDQ.js.map → chunk-O6YI4CVI.js.map} +0 -0
  330. /package/dist/{chunk-72WG5QKN.js.map → chunk-SDAXPXER.js.map} +0 -0
  331. /package/dist/{chunk-4LV23CHK.js.map → chunk-VHJARF5R.js.map} +0 -0
  332. /package/dist/{chunk-6MMONPHM.js.map → chunk-W2AHSCKY.js.map} +0 -0
  333. /package/dist/{chunk-P454KXD6.js.map → chunk-YAWJMR3Y.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  StorageManager,
3
3
  normalizeEntityName
4
- } from "./chunk-SVOHGUMI.js";
4
+ } from "./chunk-H4FHR4UM.js";
5
5
  import {
6
6
  serializeMutations
7
7
  } from "./chunk-LTJAMRGI.js";
@@ -956,4 +956,4 @@ export {
956
956
  resolveBriefingSaveDir,
957
957
  briefingFilename
958
958
  };
959
- //# sourceMappingURL=chunk-Y7UNNAZD.js.map
959
+ //# sourceMappingURL=chunk-7ZYBDQ7V.js.map
@@ -83,4 +83,4 @@ export {
83
83
  parseIsoTimestamp,
84
84
  validateReplayTurn
85
85
  };
86
- //# sourceMappingURL=chunk-2PRQG7PV.js.map
86
+ //# sourceMappingURL=chunk-AJVLDJU6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/replay/types.ts"],"sourcesContent":["import { parseIsoUtcTimestamp } from \"../utils/iso-timestamp.js\";\nimport type { SourceConnectorProvenance } from \"../types.js\";\n\nexport type ReplaySource = \"openclaw\" | \"claude\" | \"chatgpt\";\nexport type ReplayRole = \"user\" | \"assistant\";\n\nexport interface ReplayTurn extends SourceConnectorProvenance {\n source: ReplaySource;\n sessionKey: string;\n role: ReplayRole;\n content: string;\n timestamp: string;\n sourceValidAt?: string;\n externalId?: string;\n metadata?: Record<string, unknown>;\n parts?: import(\"../message-parts/index.js\").LcmMessagePartInput[];\n rawContent?: unknown;\n sourceFormat?: import(\"../message-parts/index.js\").MessagePartSourceFormat;\n}\n\nexport interface ReplayWarning {\n code: string;\n message: string;\n index?: number;\n}\n\nexport interface ReplayValidationIssue {\n code: string;\n message: string;\n index?: number;\n}\n\nexport interface ReplayParseOptions {\n from?: string;\n to?: string;\n defaultSessionKey?: string;\n strict?: boolean;\n}\n\nexport interface ReplayParseResult {\n turns: ReplayTurn[];\n warnings: ReplayWarning[];\n}\n\nexport interface ReplayNormalizer {\n source: ReplaySource;\n parse(input: unknown, options?: ReplayParseOptions): Promise<ReplayParseResult> | ReplayParseResult;\n}\n\nconst VALID_SOURCES: ReadonlySet<string> = new Set([\"openclaw\", \"claude\", \"chatgpt\"]);\nconst VALID_ROLES: ReadonlySet<string> = new Set([\"user\", \"assistant\"]);\nexport const REPLAY_UNKNOWN_SESSION_KEY = \"replay:unknown\";\n\nexport function isReplaySource(value: unknown): value is ReplaySource {\n return typeof value === \"string\" && VALID_SOURCES.has(value);\n}\n\nexport function isReplayRole(value: unknown): value is ReplayRole {\n return typeof value === \"string\" && VALID_ROLES.has(value);\n}\n\nexport function normalizeReplaySessionKey(value: unknown): string {\n if (typeof value !== \"string\") return REPLAY_UNKNOWN_SESSION_KEY;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : REPLAY_UNKNOWN_SESSION_KEY;\n}\n\n/**\n * Strict UTC-only ISO-8601 parser used by the replay pipeline.\n *\n * Delegates to the shared parser in `utils/iso-timestamp.ts` — do not\n * reimplement locally; extend that helper instead. Replay intentionally\n * rejects timezone-offset timestamps to keep canonical form consistent\n * across recorded transcripts.\n */\nexport function parseIsoTimestamp(value: string): number | null {\n return parseIsoUtcTimestamp(value);\n}\n\nexport function validateReplayTurn(turn: ReplayTurn, index?: number): ReplayValidationIssue[] {\n const issues: ReplayValidationIssue[] = [];\n if (!turn || typeof turn !== \"object\") {\n issues.push({\n code: \"turn.invalid\",\n message: \"Replay turn must be an object.\",\n index,\n });\n return issues;\n }\n\n if (!isReplayRole(turn.role)) {\n issues.push({\n code: \"turn.role.invalid\",\n message: `Replay role must be 'user' or 'assistant', received '${String(turn.role)}'.`,\n index,\n });\n }\n\n if (!isReplaySource(turn.source)) {\n issues.push({\n code: \"turn.source.invalid\",\n message: `Replay source must be 'openclaw', 'claude', or 'chatgpt', received '${String(turn.source)}'.`,\n index,\n });\n }\n\n if (!turn.sessionKey || typeof turn.sessionKey !== \"string\" || turn.sessionKey.trim().length === 0) {\n issues.push({\n code: \"turn.sessionKey.invalid\",\n message: \"Replay sessionKey is required.\",\n index,\n });\n }\n\n if (!turn.content || typeof turn.content !== \"string\" || turn.content.trim().length === 0) {\n issues.push({\n code: \"turn.content.invalid\",\n message: \"Replay content must be a non-empty string.\",\n index,\n });\n }\n\n if (!turn.timestamp || typeof turn.timestamp !== \"string\" || parseIsoTimestamp(turn.timestamp) === null) {\n issues.push({\n code: \"turn.timestamp.invalid\",\n message: `Replay timestamp must be a valid ISO timestamp, received '${String(turn.timestamp)}'.`,\n index,\n });\n }\n\n if (\n turn.sourceValidAt !== undefined &&\n (typeof turn.sourceValidAt !== \"string\" ||\n parseIsoTimestamp(turn.sourceValidAt) === null)\n ) {\n issues.push({\n code: \"turn.sourceValidAt.invalid\",\n message: `Replay sourceValidAt must be a valid ISO timestamp when provided, received '${String(turn.sourceValidAt)}'.`,\n index,\n });\n }\n\n return issues;\n}\n"],"mappings":";;;;;AAiDA,IAAM,gBAAqC,oBAAI,IAAI,CAAC,YAAY,UAAU,SAAS,CAAC;AACpF,IAAM,cAAmC,oBAAI,IAAI,CAAC,QAAQ,WAAW,CAAC;AAC/D,IAAM,6BAA6B;AAEnC,SAAS,eAAe,OAAuC;AACpE,SAAO,OAAO,UAAU,YAAY,cAAc,IAAI,KAAK;AAC7D;AAEO,SAAS,aAAa,OAAqC;AAChE,SAAO,OAAO,UAAU,YAAY,YAAY,IAAI,KAAK;AAC3D;AAEO,SAAS,0BAA0B,OAAwB;AAChE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;AAUO,SAAS,kBAAkB,OAA8B;AAC9D,SAAO,qBAAqB,KAAK;AACnC;AAEO,SAAS,mBAAmB,MAAkB,OAAyC;AAC5F,QAAM,SAAkC,CAAC;AACzC,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,aAAa,KAAK,IAAI,GAAG;AAC5B,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS,wDAAwD,OAAO,KAAK,IAAI,CAAC;AAAA,MAClF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,eAAe,KAAK,MAAM,GAAG;AAChC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS,uEAAuE,OAAO,KAAK,MAAM,CAAC;AAAA,MACnG;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,KAAK,cAAc,OAAO,KAAK,eAAe,YAAY,KAAK,WAAW,KAAK,EAAE,WAAW,GAAG;AAClG,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,KAAK,WAAW,OAAO,KAAK,YAAY,YAAY,KAAK,QAAQ,KAAK,EAAE,WAAW,GAAG;AACzF,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,KAAK,aAAa,OAAO,KAAK,cAAc,YAAY,kBAAkB,KAAK,SAAS,MAAM,MAAM;AACvG,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS,6DAA6D,OAAO,KAAK,SAAS,CAAC;AAAA,MAC5F;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MACE,KAAK,kBAAkB,WACtB,OAAO,KAAK,kBAAkB,YAC7B,kBAAkB,KAAK,aAAa,MAAM,OAC5C;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS,+EAA+E,OAAO,KAAK,aAAa,CAAC;AAAA,MAClH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPostConsolidationMaterialize
3
- } from "./chunk-JSNVWNGX.js";
3
+ } from "./chunk-KVSVVKHA.js";
4
4
  import {
5
5
  discoverMemoryExtensions,
6
6
  renderExtensionsBlock,
@@ -220,4 +220,4 @@ export {
220
220
  buildExtensionsBlockForConsolidation,
221
221
  materializeAfterSemanticConsolidation
222
222
  };
223
- //# sourceMappingURL=chunk-LR5DZ56F.js.map
223
+ //# sourceMappingURL=chunk-AXALUFAH.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-UI4FVU6T.js";
5
5
  import {
6
6
  StorageManager
7
- } from "./chunk-SVOHGUMI.js";
7
+ } from "./chunk-H4FHR4UM.js";
8
8
  import {
9
9
  parseContinuityImprovementLoops
10
10
  } from "./chunk-LDXUBPMO.js";
@@ -1276,4 +1276,4 @@ export {
1276
1276
  defaultTierMigrationCycleBudget,
1277
1277
  CompoundingEngine
1278
1278
  };
1279
- //# sourceMappingURL=chunk-AYZJID4S.js.map
1279
+ //# sourceMappingURL=chunk-B5GBWBCZ.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-SFQ6QNL7.js";
7
7
  import {
8
8
  StorageManager
9
- } from "./chunk-SVOHGUMI.js";
9
+ } from "./chunk-H4FHR4UM.js";
10
10
  import {
11
11
  buildLifecycleEventsForMemory,
12
12
  sortMemoryLifecycleEvents
@@ -115,4 +115,4 @@ export {
115
115
  backupExistingLedger,
116
116
  rebuildMemoryLifecycleLedger
117
117
  };
118
- //# sourceMappingURL=chunk-TLUDFPZL.js.map
118
+ //# sourceMappingURL=chunk-CAZ3Z5M6.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-ZBJMUXZH.js";
5
5
  import {
6
6
  StorageManager
7
- } from "./chunk-SVOHGUMI.js";
7
+ } from "./chunk-H4FHR4UM.js";
8
8
  import {
9
9
  getCachedRuleMemories,
10
10
  setCachedRuleMemories
@@ -117,4 +117,4 @@ export {
117
117
  compareVerifiedSemanticRuleResults,
118
118
  searchVerifiedSemanticRules
119
119
  };
120
- //# sourceMappingURL=chunk-RGK27ELN.js.map
120
+ //# sourceMappingURL=chunk-DEKIXXIG.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-SOBJ6NEY.js";
4
4
  import {
5
5
  summarizeDisclosureTokens
6
- } from "./chunk-6MMONPHM.js";
6
+ } from "./chunk-W2AHSCKY.js";
7
7
  import {
8
8
  summarizeRetrievedMemoryProvenance
9
9
  } from "./chunk-I4WBNM3M.js";
@@ -587,4 +587,4 @@ export {
587
587
  renderRecallExplain,
588
588
  parseRecallExplainFormat
589
589
  };
590
- //# sourceMappingURL=chunk-2KK5WNQB.js.map
590
+ //# sourceMappingURL=chunk-DQ42IQSK.js.map
@@ -13,7 +13,7 @@ import {
13
13
  processChatMessage,
14
14
  sessionBelongsToPrincipal,
15
15
  subscribeChatTranscript
16
- } from "./chunk-PCLIWBGD.js";
16
+ } from "./chunk-7ARV32PI.js";
17
17
  import {
18
18
  validateRequest
19
19
  } from "./chunk-UPSAT4PY.js";
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-35NN3ZFA.js";
29
29
  import {
30
30
  getOperation
31
- } from "./chunk-4GNEDXDI.js";
31
+ } from "./chunk-M67TLMP6.js";
32
32
  import {
33
33
  assertOperationAllowed,
34
34
  enforceNamespaceAllowList,
@@ -38,7 +38,7 @@ import {
38
38
  import {
39
39
  CorrectionContractError,
40
40
  EngramAccessInputError
41
- } from "./chunk-H2DXDQCQ.js";
41
+ } from "./chunk-VRJG3HIZ.js";
42
42
  import {
43
43
  isTrustZoneName
44
44
  } from "./chunk-JGSKJHF7.js";
@@ -50,7 +50,7 @@ import {
50
50
  } from "./chunk-DEUNUKTD.js";
51
51
  import {
52
52
  isRecallDisclosure
53
- } from "./chunk-JS2HKKOK.js";
53
+ } from "./chunk-3AC5UYKI.js";
54
54
  import {
55
55
  expandTildePath
56
56
  } from "./chunk-EYIEWJNI.js";
@@ -1277,7 +1277,10 @@ var EngramAccessHttpServer = class {
1277
1277
  idempotencyKey: body.idempotencyKey,
1278
1278
  // Forward cwd/projectTag for auto git-context resolution (issue #569).
1279
1279
  cwd: body.cwd,
1280
- projectTag: body.projectTag
1280
+ projectTag: body.projectTag,
1281
+ // Phase 1 provenance: server-resolved connector identity from the
1282
+ // bearer token (REST path, mirroring the MCP tools/call dispatch).
1283
+ sourceConnector: this.resolveConnector(req)
1281
1284
  },
1282
1285
  // Enforce the write-quota INSIDE the service's idempotency lock
1283
1286
  // (beforeExecute, only on a real miss). A retried observe that hits the
@@ -1354,7 +1357,10 @@ var EngramAccessHttpServer = class {
1354
1357
  const output = await op.run(envelope, {
1355
1358
  service: this.service,
1356
1359
  authenticatedPrincipal: this.resolveRequestPrincipal(req),
1357
- hooks: { enforceWriteQuota: () => this.ensureWriteRateLimitAvailable() }
1360
+ hooks: { enforceWriteQuota: () => this.ensureWriteRateLimitAvailable() },
1361
+ // Phase 1 provenance: server-resolved connector identity from the
1362
+ // bearer token (REST path, mirroring the MCP tools/call dispatch).
1363
+ sourceConnector: this.resolveConnector(req)
1358
1364
  });
1359
1365
  const response = output.result;
1360
1366
  if (this.shouldCountWriteRateLimit(response)) {
@@ -1375,7 +1381,8 @@ var EngramAccessHttpServer = class {
1375
1381
  }
1376
1382
  const output = await op.run(this.gatedBodyNamespace(req, body), {
1377
1383
  service: this.service,
1378
- authenticatedPrincipal: this.resolveRequestPrincipal(req)
1384
+ authenticatedPrincipal: this.resolveRequestPrincipal(req),
1385
+ sourceConnector: this.resolveConnector(req)
1379
1386
  });
1380
1387
  if (isWriteSubcommand) {
1381
1388
  this.recordWriteRateLimitHit();
@@ -1395,7 +1402,8 @@ var EngramAccessHttpServer = class {
1395
1402
  }
1396
1403
  const output = await op.run(this.gatedBodyNamespace(req, body), {
1397
1404
  service: this.service,
1398
- authenticatedPrincipal: this.resolveRequestPrincipal(req)
1405
+ authenticatedPrincipal: this.resolveRequestPrincipal(req),
1406
+ sourceConnector: this.resolveConnector(req)
1399
1407
  });
1400
1408
  if (isWriteSubcommand) {
1401
1409
  this.recordWriteRateLimitHit();
@@ -1484,7 +1492,10 @@ var EngramAccessHttpServer = class {
1484
1492
  ttl: body.ttl,
1485
1493
  sourceReason: body.sourceReason,
1486
1494
  cwd: body.cwd,
1487
- projectTag: body.projectTag
1495
+ projectTag: body.projectTag,
1496
+ // Phase 1 provenance: server-resolved connector identity from the
1497
+ // bearer token (REST path, mirroring the MCP tools/call dispatch).
1498
+ sourceConnector: this.resolveConnector(req)
1488
1499
  };
1489
1500
  const response = await this.service.suggestionSubmit(request, {
1490
1501
  enforceWriteQuota: () => this.ensureWriteRateLimitAvailable()
@@ -2447,7 +2458,8 @@ var EngramAccessHttpServer = class {
2447
2458
  sessionKeyOverride: requestIdentity.sessionKey,
2448
2459
  sessionId,
2449
2460
  correlationId: mcpCorrelationId,
2450
- enforceWriteQuota: observeSelfEnforcesQuota ? () => this.ensureWriteRateLimitAvailable() : void 0
2461
+ enforceWriteQuota: observeSelfEnforcesQuota ? () => this.ensureWriteRateLimitAvailable() : void 0,
2462
+ sourceConnector: this.resolveConnector(req)
2451
2463
  });
2452
2464
  if (isMcpWrite && response !== null) {
2453
2465
  const result = response.result;
@@ -2727,13 +2739,36 @@ var EngramAccessHttpServer = class {
2727
2739
  return this.resolveAuthorizedEntry(req, pathname) !== null;
2728
2740
  }
2729
2741
  /**
2730
- * Resolve the presenting token's entry for an authorized request, or null.
2731
- * Captures the matched entry including its capabilities record — so the
2732
- * op/namespace capability enforcement (issue #1837) uses the SAME entry
2733
- * that validated. Static operator tokens (`authToken`/`authTokens`) and
2734
- * the string-token getter carry no capabilities unrestricted.
2742
+ * Per-request cache of the matched token entry (the entry whose token
2743
+ * matched the bearer credential, BEFORE any path-policy check). Pinning
2744
+ * the entry to the first read means authorization, capability
2745
+ * enforcement, and connector provenance all observe the SAME token-store
2746
+ * snapshot — a rotation between the auth check and the write handler can
2747
+ * no longer stamp the wrong connector (PR #1852 race).
2735
2748
  */
2736
- resolveAuthorizedEntry(req, pathname) {
2749
+ matchedEntryCache = /* @__PURE__ */ new WeakMap();
2750
+ /**
2751
+ * Resolve the matched token entry for this request, caching the result so
2752
+ * every downstream consumer (authorization, capability enforcement,
2753
+ * connector provenance) sees the same snapshot entry (PR #1852).
2754
+ */
2755
+ resolveMatchedEntry(req, pathname) {
2756
+ if (this.matchedEntryCache.has(req)) {
2757
+ return this.matchedEntryCache.get(req) ?? null;
2758
+ }
2759
+ const entry = this.computeMatchedEntry(req, pathname);
2760
+ this.matchedEntryCache.set(req, entry);
2761
+ return entry;
2762
+ }
2763
+ /**
2764
+ * Find the entry whose token matches the request's bearer credential.
2765
+ * Static operator tokens (`authToken`/`authTokens`) and the string-token
2766
+ * getter carry no capabilities ⇒ unrestricted. Dynamic entry-based tokens
2767
+ * capture connector identity and capabilities. A corrupt or unreadable
2768
+ * token store returns null rather than propagating an error — provenance
2769
+ * must never block an already-authenticated request.
2770
+ */
2771
+ computeMatchedEntry(req, pathname) {
2737
2772
  if (!this.authToken && this.authTokens.length === 0 && !this.authTokensGetter && !this.authTokenEntriesGetter) {
2738
2773
  return null;
2739
2774
  }
@@ -2767,12 +2802,12 @@ var EngramAccessHttpServer = class {
2767
2802
  if (this.timingSafeStringEqual(token, valid)) return { token: valid };
2768
2803
  }
2769
2804
  if (this.authTokenEntriesGetter) {
2770
- for (const entry of this.authTokenEntriesGetter()) {
2771
- if (!this.timingSafeStringEqual(token, entry.token)) continue;
2772
- const matched = { token: entry.token, connector: entry.connector, capabilities: entry.capabilities };
2773
- if (!this.tokenPathPolicy) return matched;
2774
- if (typeof entry.connector !== "string" || entry.connector.length === 0) return null;
2775
- return this.tokenPathPolicy(entry.connector, pathname) ? matched : null;
2805
+ try {
2806
+ for (const entry of this.authTokenEntriesGetter()) {
2807
+ if (!this.timingSafeStringEqual(token, entry.token)) continue;
2808
+ return { token: entry.token, connector: entry.connector, capabilities: entry.capabilities };
2809
+ }
2810
+ } catch {
2776
2811
  }
2777
2812
  return null;
2778
2813
  }
@@ -2783,21 +2818,31 @@ var EngramAccessHttpServer = class {
2783
2818
  }
2784
2819
  return null;
2785
2820
  }
2786
- /** Cache for per-request capability resolution (avoids re-resolving). */
2787
- capabilityCache = /* @__PURE__ */ new WeakMap();
2821
+ /**
2822
+ * Resolve the presenting token's entry for an authorized request, or null.
2823
+ * Applies the path-policy gate (if configured) on top of the per-request
2824
+ * cached matched entry so the identity that is authorized is the same one
2825
+ * whose connector later stamps frontmatter. Static operator tokens and the
2826
+ * string-token getter carry no capabilities ⇒ unrestricted.
2827
+ */
2828
+ resolveAuthorizedEntry(req, pathname) {
2829
+ const matched = this.resolveMatchedEntry(req, pathname);
2830
+ if (!matched) return null;
2831
+ if ("connector" in matched && this.tokenPathPolicy) {
2832
+ if (typeof matched.connector !== "string" || matched.connector.length === 0) return null;
2833
+ return this.tokenPathPolicy(matched.connector, pathname) ? matched : null;
2834
+ }
2835
+ return matched;
2836
+ }
2788
2837
  /**
2789
2838
  * Resolve the presenting token's capabilities for this request, or
2790
2839
  * undefined when the token is unrestricted (legacy / static operator /
2791
- * explicit-unrestricted record). Cached per-request. `null` sentinel
2792
- * distinguishes "resolved as unrestricted" from "not yet resolved".
2840
+ * explicit-unrestricted record). Reads from the per-request cached matched
2841
+ * entry so capabilities come from the same snapshot as authorization and
2842
+ * connector provenance (PR #1852).
2793
2843
  */
2794
2844
  resolveTokenCapabilities(req, pathname) {
2795
- if (this.capabilityCache.has(req)) {
2796
- return this.capabilityCache.get(req) ?? void 0;
2797
- }
2798
- const caps = this.resolveAuthorizedEntry(req, pathname)?.capabilities;
2799
- this.capabilityCache.set(req, caps ?? null);
2800
- return caps;
2845
+ return this.resolveMatchedEntry(req, pathname)?.capabilities;
2801
2846
  }
2802
2847
  /**
2803
2848
  * Enforce the presenting token's ops allow-list for an HTTP route that
@@ -2822,6 +2867,17 @@ var EngramAccessHttpServer = class {
2822
2867
  );
2823
2868
  }
2824
2869
  }
2870
+ /**
2871
+ * Resolve the connector identity for the request's bearer token (Phase 1
2872
+ * provenance). Reuses the per-request cached matched entry so a token
2873
+ * rotation between the auth check and the write handler cannot stamp the
2874
+ * wrong connector (PR #1852 race). Returns `undefined` for operator-
2875
+ * supplied static tokens or when no entry getter is configured — those
2876
+ * writes are operator-initiated.
2877
+ */
2878
+ resolveConnector(req) {
2879
+ return this.resolveMatchedEntry(req)?.connector;
2880
+ }
2825
2881
  timingSafeStringEqual(a, b) {
2826
2882
  const left = this.encodeSecret(a);
2827
2883
  const right = this.encodeSecret(b);
@@ -2898,4 +2954,4 @@ function positiveIntQueryParam(value, label) {
2898
2954
  export {
2899
2955
  EngramAccessHttpServer
2900
2956
  };
2901
- //# sourceMappingURL=chunk-UFUKHGZD.js.map
2957
+ //# sourceMappingURL=chunk-F4I5NYBI.js.map