@origintrail-official/dkg-agent 10.0.5 → 10.0.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 (318) hide show
  1. package/dist/chain-reconciler.d.ts +62 -10
  2. package/dist/chain-reconciler.d.ts.map +1 -1
  3. package/dist/chain-reconciler.js +318 -25
  4. package/dist/chain-reconciler.js.map +1 -1
  5. package/dist/context-graph-join-admission-lock.d.ts +25 -0
  6. package/dist/context-graph-join-admission-lock.d.ts.map +1 -0
  7. package/dist/context-graph-join-admission-lock.js +50 -0
  8. package/dist/context-graph-join-admission-lock.js.map +1 -0
  9. package/dist/context-graph-join-admission.d.ts +106 -0
  10. package/dist/context-graph-join-admission.d.ts.map +1 -0
  11. package/dist/context-graph-join-admission.js +435 -0
  12. package/dist/context-graph-join-admission.js.map +1 -0
  13. package/dist/context-graph-membership-mutation.d.ts +21 -0
  14. package/dist/context-graph-membership-mutation.d.ts.map +1 -0
  15. package/dist/context-graph-membership-mutation.js +27 -0
  16. package/dist/context-graph-membership-mutation.js.map +1 -0
  17. package/dist/context-graph-meta-projection.d.ts +9 -0
  18. package/dist/context-graph-meta-projection.d.ts.map +1 -1
  19. package/dist/context-graph-meta-projection.js +69 -0
  20. package/dist/context-graph-meta-projection.js.map +1 -1
  21. package/dist/context-graph-private-meta-proof.d.ts +15 -0
  22. package/dist/context-graph-private-meta-proof.d.ts.map +1 -0
  23. package/dist/context-graph-private-meta-proof.js +183 -0
  24. package/dist/context-graph-private-meta-proof.js.map +1 -0
  25. package/dist/curator-meta-refresh.d.ts +20 -0
  26. package/dist/curator-meta-refresh.d.ts.map +1 -0
  27. package/dist/curator-meta-refresh.js +359 -0
  28. package/dist/curator-meta-refresh.js.map +1 -0
  29. package/dist/dkg-agent-base.d.ts +83 -31
  30. package/dist/dkg-agent-base.d.ts.map +1 -1
  31. package/dist/dkg-agent-base.js +103 -29
  32. package/dist/dkg-agent-base.js.map +1 -1
  33. package/dist/dkg-agent-ccl.d.ts.map +1 -1
  34. package/dist/dkg-agent-ccl.js.map +1 -1
  35. package/dist/dkg-agent-cg-registry.d.ts +17 -1
  36. package/dist/dkg-agent-cg-registry.d.ts.map +1 -1
  37. package/dist/dkg-agent-cg-registry.js +66 -4
  38. package/dist/dkg-agent-cg-registry.js.map +1 -1
  39. package/dist/dkg-agent-cg-resolve.d.ts +2 -3
  40. package/dist/dkg-agent-cg-resolve.d.ts.map +1 -1
  41. package/dist/dkg-agent-cg-resolve.js +77 -101
  42. package/dist/dkg-agent-cg-resolve.js.map +1 -1
  43. package/dist/dkg-agent-constants.d.ts +37 -17
  44. package/dist/dkg-agent-constants.d.ts.map +1 -1
  45. package/dist/dkg-agent-constants.js +44 -16
  46. package/dist/dkg-agent-constants.js.map +1 -1
  47. package/dist/dkg-agent-context-graph.d.ts +33 -1
  48. package/dist/dkg-agent-context-graph.d.ts.map +1 -1
  49. package/dist/dkg-agent-context-graph.js +141 -91
  50. package/dist/dkg-agent-context-graph.js.map +1 -1
  51. package/dist/dkg-agent-crypto.d.ts.map +1 -1
  52. package/dist/dkg-agent-crypto.js +37 -77
  53. package/dist/dkg-agent-crypto.js.map +1 -1
  54. package/dist/dkg-agent-endorse.d.ts.map +1 -1
  55. package/dist/dkg-agent-endorse.js.map +1 -1
  56. package/dist/dkg-agent-helpers.d.ts +1 -23
  57. package/dist/dkg-agent-helpers.d.ts.map +1 -1
  58. package/dist/dkg-agent-helpers.js +3 -61
  59. package/dist/dkg-agent-helpers.js.map +1 -1
  60. package/dist/dkg-agent-join.d.ts +185 -35
  61. package/dist/dkg-agent-join.d.ts.map +1 -1
  62. package/dist/dkg-agent-join.js +1290 -210
  63. package/dist/dkg-agent-join.js.map +1 -1
  64. package/dist/dkg-agent-lifecycle.d.ts +74 -6
  65. package/dist/dkg-agent-lifecycle.d.ts.map +1 -1
  66. package/dist/dkg-agent-lifecycle.js +1947 -564
  67. package/dist/dkg-agent-lifecycle.js.map +1 -1
  68. package/dist/dkg-agent-ownership.d.ts +12 -33
  69. package/dist/dkg-agent-ownership.d.ts.map +1 -1
  70. package/dist/dkg-agent-ownership.js +18 -34
  71. package/dist/dkg-agent-ownership.js.map +1 -1
  72. package/dist/dkg-agent-publish.d.ts +81 -38
  73. package/dist/dkg-agent-publish.d.ts.map +1 -1
  74. package/dist/dkg-agent-publish.js +1406 -657
  75. package/dist/dkg-agent-publish.js.map +1 -1
  76. package/dist/dkg-agent-query.d.ts.map +1 -1
  77. package/dist/dkg-agent-query.js.map +1 -1
  78. package/dist/dkg-agent-registry.d.ts +1 -0
  79. package/dist/dkg-agent-registry.d.ts.map +1 -1
  80. package/dist/dkg-agent-registry.js +48 -21
  81. package/dist/dkg-agent-registry.js.map +1 -1
  82. package/dist/dkg-agent-swm-host.d.ts +27 -9
  83. package/dist/dkg-agent-swm-host.d.ts.map +1 -1
  84. package/dist/dkg-agent-swm-host.js +331 -109
  85. package/dist/dkg-agent-swm-host.js.map +1 -1
  86. package/dist/dkg-agent-swm-substrate.d.ts.map +1 -1
  87. package/dist/dkg-agent-swm-substrate.js +6 -5
  88. package/dist/dkg-agent-swm-substrate.js.map +1 -1
  89. package/dist/dkg-agent-types.d.ts +184 -11
  90. package/dist/dkg-agent-types.d.ts.map +1 -1
  91. package/dist/dkg-agent-types.js.map +1 -1
  92. package/dist/dkg-agent-utils.d.ts +5 -7
  93. package/dist/dkg-agent-utils.d.ts.map +1 -1
  94. package/dist/dkg-agent-utils.js +15 -195
  95. package/dist/dkg-agent-utils.js.map +1 -1
  96. package/dist/dkg-agent.d.ts +47 -19
  97. package/dist/dkg-agent.d.ts.map +1 -1
  98. package/dist/dkg-agent.js +324 -291
  99. package/dist/dkg-agent.js.map +1 -1
  100. package/dist/finalization-handler.d.ts +162 -6
  101. package/dist/finalization-handler.d.ts.map +1 -1
  102. package/dist/finalization-handler.js +1282 -60
  103. package/dist/finalization-handler.js.map +1 -1
  104. package/dist/finalized-lifecycle-scope.d.ts +15 -0
  105. package/dist/finalized-lifecycle-scope.d.ts.map +1 -0
  106. package/dist/finalized-lifecycle-scope.js +31 -0
  107. package/dist/finalized-lifecycle-scope.js.map +1 -0
  108. package/dist/gossip-publish-handler.d.ts +10 -5
  109. package/dist/gossip-publish-handler.d.ts.map +1 -1
  110. package/dist/gossip-publish-handler.js +271 -26
  111. package/dist/gossip-publish-handler.js.map +1 -1
  112. package/dist/index.d.ts +11 -4
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +9 -2
  115. package/dist/index.js.map +1 -1
  116. package/dist/join-request-retention.d.ts +16 -0
  117. package/dist/join-request-retention.d.ts.map +1 -0
  118. package/dist/join-request-retention.js +95 -0
  119. package/dist/join-request-retention.js.map +1 -0
  120. package/dist/ka-identity.d.ts +5 -0
  121. package/dist/ka-identity.d.ts.map +1 -1
  122. package/dist/ka-identity.js +9 -0
  123. package/dist/ka-identity.js.map +1 -1
  124. package/dist/map-with-concurrency.d.ts +6 -0
  125. package/dist/map-with-concurrency.d.ts.map +1 -0
  126. package/dist/map-with-concurrency.js +26 -0
  127. package/dist/map-with-concurrency.js.map +1 -0
  128. package/dist/named-ka-publish-recovery.d.ts +35 -0
  129. package/dist/named-ka-publish-recovery.d.ts.map +1 -0
  130. package/dist/named-ka-publish-recovery.js +155 -0
  131. package/dist/named-ka-publish-recovery.js.map +1 -0
  132. package/dist/named-ka-vm-lifecycle.d.ts +14 -0
  133. package/dist/named-ka-vm-lifecycle.d.ts.map +1 -0
  134. package/dist/named-ka-vm-lifecycle.js +68 -0
  135. package/dist/named-ka-vm-lifecycle.js.map +1 -0
  136. package/dist/p2p/messenger.d.ts +84 -44
  137. package/dist/p2p/messenger.d.ts.map +1 -1
  138. package/dist/p2p/messenger.js +173 -86
  139. package/dist/p2p/messenger.js.map +1 -1
  140. package/dist/p2p/multiaddr-peer-target.d.ts +28 -0
  141. package/dist/p2p/multiaddr-peer-target.d.ts.map +1 -0
  142. package/dist/p2p/multiaddr-peer-target.js +87 -0
  143. package/dist/p2p/multiaddr-peer-target.js.map +1 -0
  144. package/dist/p2p/network-admission-coordinator.d.ts +7 -1
  145. package/dist/p2p/network-admission-coordinator.d.ts.map +1 -1
  146. package/dist/p2p/network-admission-coordinator.js +151 -42
  147. package/dist/p2p/network-admission-coordinator.js.map +1 -1
  148. package/dist/p2p/network-admission-probe-retry.d.ts +40 -0
  149. package/dist/p2p/network-admission-probe-retry.d.ts.map +1 -0
  150. package/dist/p2p/network-admission-probe-retry.js +89 -0
  151. package/dist/p2p/network-admission-probe-retry.js.map +1 -0
  152. package/dist/p2p/network-admission-protocol-adapter.d.ts +11 -0
  153. package/dist/p2p/network-admission-protocol-adapter.d.ts.map +1 -0
  154. package/dist/p2p/network-admission-protocol-adapter.js +25 -0
  155. package/dist/p2p/network-admission-protocol-adapter.js.map +1 -0
  156. package/dist/p2p/network-admission.d.ts +21 -9
  157. package/dist/p2p/network-admission.d.ts.map +1 -1
  158. package/dist/p2p/network-admission.js +79 -52
  159. package/dist/p2p/network-admission.js.map +1 -1
  160. package/dist/p2p/network-identity-proof.d.ts.map +1 -1
  161. package/dist/p2p/network-identity-proof.js +20 -10
  162. package/dist/p2p/network-identity-proof.js.map +1 -1
  163. package/dist/p2p/outbox-drainer.d.ts +21 -0
  164. package/dist/p2p/outbox-drainer.d.ts.map +1 -0
  165. package/dist/p2p/outbox-drainer.js +69 -0
  166. package/dist/p2p/outbox-drainer.js.map +1 -0
  167. package/dist/p2p/peer-connect.d.ts +2 -1
  168. package/dist/p2p/peer-connect.d.ts.map +1 -1
  169. package/dist/p2p/peer-connect.js +11 -12
  170. package/dist/p2p/peer-connect.js.map +1 -1
  171. package/dist/p2p/peer-id.d.ts +8 -0
  172. package/dist/p2p/peer-id.d.ts.map +1 -0
  173. package/dist/p2p/peer-id.js +16 -0
  174. package/dist/p2p/peer-id.js.map +1 -0
  175. package/dist/p2p/sync-transport.d.ts +18 -3
  176. package/dist/p2p/sync-transport.d.ts.map +1 -1
  177. package/dist/p2p/sync-transport.js +12 -0
  178. package/dist/p2p/sync-transport.js.map +1 -1
  179. package/dist/random-sampling-bind.d.ts +7 -0
  180. package/dist/random-sampling-bind.d.ts.map +1 -1
  181. package/dist/random-sampling-bind.js +6 -4
  182. package/dist/random-sampling-bind.js.map +1 -1
  183. package/dist/rootless-update-error.d.ts +9 -0
  184. package/dist/rootless-update-error.d.ts.map +1 -0
  185. package/dist/rootless-update-error.js +23 -0
  186. package/dist/rootless-update-error.js.map +1 -0
  187. package/dist/startup-jitter.d.ts +11 -0
  188. package/dist/startup-jitter.d.ts.map +1 -0
  189. package/dist/startup-jitter.js +29 -0
  190. package/dist/startup-jitter.js.map +1 -0
  191. package/dist/swm-ka-bound.d.ts +21 -0
  192. package/dist/swm-ka-bound.d.ts.map +1 -0
  193. package/dist/swm-ka-bound.js +36 -0
  194. package/dist/swm-ka-bound.js.map +1 -0
  195. package/dist/sync/append-in-place.d.ts +21 -0
  196. package/dist/sync/append-in-place.d.ts.map +1 -0
  197. package/dist/sync/append-in-place.js +25 -0
  198. package/dist/sync/append-in-place.js.map +1 -0
  199. package/dist/sync/auth/request-build.d.ts +11 -0
  200. package/dist/sync/auth/request-build.d.ts.map +1 -1
  201. package/dist/sync/auth/request-build.js +15 -2
  202. package/dist/sync/auth/request-build.js.map +1 -1
  203. package/dist/sync/backpressure.d.ts +41 -3
  204. package/dist/sync/backpressure.d.ts.map +1 -1
  205. package/dist/sync/backpressure.js +133 -37
  206. package/dist/sync/backpressure.js.map +1 -1
  207. package/dist/sync/catchup-concurrency.d.ts +3 -0
  208. package/dist/sync/catchup-concurrency.d.ts.map +1 -0
  209. package/dist/sync/catchup-concurrency.js +6 -0
  210. package/dist/sync/catchup-concurrency.js.map +1 -0
  211. package/dist/sync/changelog/wire.d.ts +39 -0
  212. package/dist/sync/changelog/wire.d.ts.map +1 -0
  213. package/dist/sync/changelog/wire.js +140 -0
  214. package/dist/sync/changelog/wire.js.map +1 -0
  215. package/dist/sync/checkpoint/state.d.ts +28 -0
  216. package/dist/sync/checkpoint/state.d.ts.map +1 -1
  217. package/dist/sync/checkpoint/state.js +19 -0
  218. package/dist/sync/checkpoint/state.js.map +1 -1
  219. package/dist/sync/durable-integrity.d.ts +79 -0
  220. package/dist/sync/durable-integrity.d.ts.map +1 -0
  221. package/dist/sync/durable-integrity.js +1056 -0
  222. package/dist/sync/durable-integrity.js.map +1 -0
  223. package/dist/sync/durable-progress.d.ts +51 -0
  224. package/dist/sync/durable-progress.d.ts.map +1 -0
  225. package/dist/sync/durable-progress.js +89 -0
  226. package/dist/sync/durable-progress.js.map +1 -0
  227. package/dist/sync/graph-scoped-swm-recovery.d.ts +52 -0
  228. package/dist/sync/graph-scoped-swm-recovery.d.ts.map +1 -0
  229. package/dist/sync/graph-scoped-swm-recovery.js +329 -0
  230. package/dist/sync/graph-scoped-swm-recovery.js.map +1 -0
  231. package/dist/sync/memory-telemetry.d.ts +24 -0
  232. package/dist/sync/memory-telemetry.d.ts.map +1 -0
  233. package/dist/sync/memory-telemetry.js +70 -0
  234. package/dist/sync/memory-telemetry.js.map +1 -0
  235. package/dist/sync/on-connect/sync-on-connect.d.ts +4 -13
  236. package/dist/sync/on-connect/sync-on-connect.d.ts.map +1 -1
  237. package/dist/sync/on-connect/sync-on-connect.js +61 -61
  238. package/dist/sync/on-connect/sync-on-connect.js.map +1 -1
  239. package/dist/sync/oversize-filter.d.ts +19 -0
  240. package/dist/sync/oversize-filter.d.ts.map +1 -1
  241. package/dist/sync/oversize-filter.js +67 -2
  242. package/dist/sync/oversize-filter.js.map +1 -1
  243. package/dist/sync/policy.d.ts +24 -0
  244. package/dist/sync/policy.d.ts.map +1 -0
  245. package/dist/sync/policy.js +81 -0
  246. package/dist/sync/policy.js.map +1 -0
  247. package/dist/sync/priority-admission-queue.d.ts +74 -0
  248. package/dist/sync/priority-admission-queue.d.ts.map +1 -0
  249. package/dist/sync/priority-admission-queue.js +260 -0
  250. package/dist/sync/priority-admission-queue.js.map +1 -0
  251. package/dist/sync/requester/changelog-sync.d.ts +119 -0
  252. package/dist/sync/requester/changelog-sync.d.ts.map +1 -0
  253. package/dist/sync/requester/changelog-sync.js +187 -0
  254. package/dist/sync/requester/changelog-sync.js.map +1 -0
  255. package/dist/sync/requester/durable-sync.d.ts +21 -1
  256. package/dist/sync/requester/durable-sync.d.ts.map +1 -1
  257. package/dist/sync/requester/durable-sync.js +308 -25
  258. package/dist/sync/requester/durable-sync.js.map +1 -1
  259. package/dist/sync/requester/graph-scoped-materialization.d.ts +33 -0
  260. package/dist/sync/requester/graph-scoped-materialization.d.ts.map +1 -0
  261. package/dist/sync/requester/graph-scoped-materialization.js +242 -0
  262. package/dist/sync/requester/graph-scoped-materialization.js.map +1 -0
  263. package/dist/sync/requester/ordered-sync.d.ts +24 -0
  264. package/dist/sync/requester/ordered-sync.d.ts.map +1 -0
  265. package/dist/sync/requester/ordered-sync.js +45 -0
  266. package/dist/sync/requester/ordered-sync.js.map +1 -0
  267. package/dist/sync/requester/page-fetch.d.ts +13 -2
  268. package/dist/sync/requester/page-fetch.d.ts.map +1 -1
  269. package/dist/sync/requester/page-fetch.js +65 -7
  270. package/dist/sync/requester/page-fetch.js.map +1 -1
  271. package/dist/sync/requester/shared-memory-sync.d.ts +36 -0
  272. package/dist/sync/requester/shared-memory-sync.d.ts.map +1 -1
  273. package/dist/sync/requester/shared-memory-sync.js +59 -12
  274. package/dist/sync/requester/shared-memory-sync.js.map +1 -1
  275. package/dist/sync/requester/swm-recovery-apply.d.ts +2 -0
  276. package/dist/sync/requester/swm-recovery-apply.d.ts.map +1 -1
  277. package/dist/sync/requester/swm-recovery-apply.js.map +1 -1
  278. package/dist/sync/requester/swm-recovery.d.ts +43 -30
  279. package/dist/sync/requester/swm-recovery.d.ts.map +1 -1
  280. package/dist/sync/requester/swm-recovery.js +241 -17
  281. package/dist/sync/requester/swm-recovery.js.map +1 -1
  282. package/dist/sync/responder/durable-meta-admission.d.ts +10 -0
  283. package/dist/sync/responder/durable-meta-admission.d.ts.map +1 -0
  284. package/dist/sync/responder/durable-meta-admission.js +28 -0
  285. package/dist/sync/responder/durable-meta-admission.js.map +1 -0
  286. package/dist/sync/responder/graph-plan.d.ts +102 -26
  287. package/dist/sync/responder/graph-plan.d.ts.map +1 -1
  288. package/dist/sync/responder/graph-plan.js +1537 -278
  289. package/dist/sync/responder/graph-plan.js.map +1 -1
  290. package/dist/sync/responder/snapshot-budget.d.ts +59 -0
  291. package/dist/sync/responder/snapshot-budget.d.ts.map +1 -0
  292. package/dist/sync/responder/snapshot-budget.js +142 -0
  293. package/dist/sync/responder/snapshot-budget.js.map +1 -0
  294. package/dist/sync/responder/snapshot-cache.d.ts +65 -0
  295. package/dist/sync/responder/snapshot-cache.d.ts.map +1 -0
  296. package/dist/sync/responder/snapshot-cache.js +370 -0
  297. package/dist/sync/responder/snapshot-cache.js.map +1 -0
  298. package/dist/sync/responder/sync-handler.d.ts +20 -0
  299. package/dist/sync/responder/sync-handler.d.ts.map +1 -1
  300. package/dist/sync/responder/sync-handler.js +296 -123
  301. package/dist/sync/responder/sync-handler.js.map +1 -1
  302. package/dist/sync-verify-worker-impl.d.ts +2 -1
  303. package/dist/sync-verify-worker-impl.d.ts.map +1 -1
  304. package/dist/sync-verify-worker-impl.js +89 -180
  305. package/dist/sync-verify-worker-impl.js.map +1 -1
  306. package/dist/sync-verify-worker.d.ts +34 -1
  307. package/dist/sync-verify-worker.d.ts.map +1 -1
  308. package/dist/sync-verify-worker.js +39 -2
  309. package/dist/sync-verify-worker.js.map +1 -1
  310. package/dist/vm-reconcile-service.d.ts +40 -0
  311. package/dist/vm-reconcile-service.d.ts.map +1 -0
  312. package/dist/vm-reconcile-service.js +32 -0
  313. package/dist/vm-reconcile-service.js.map +1 -0
  314. package/package.json +10 -8
  315. package/dist/sync/map-with-concurrency.d.ts +0 -19
  316. package/dist/sync/map-with-concurrency.d.ts.map +0 -1
  317. package/dist/sync/map-with-concurrency.js +0 -53
  318. package/dist/sync/map-with-concurrency.js.map +0 -1
@@ -23,6 +23,7 @@
23
23
  * with a single trailing re-run if more events land mid-sweep.
24
24
  */
25
25
  import { type CursorState } from './reconcile-cursor.js';
26
+ import { type VmReconcileSource } from './vm-reconcile-service.js';
26
27
  /**
27
28
  * Outcome of attempting to reconcile a single per-CG registration ordinal.
28
29
  * - `reconciled` — promoted to VM this pass; eligible to advance the watermark
@@ -81,20 +82,71 @@ export interface ReconcileResult {
81
82
  * if it moved. Mutates `state` in place (the agent owns one `CursorState` per CG).
82
83
  */
83
84
  export declare function reconcileContextGraph(deps: ChainReconcilerDeps, state: CursorState, localCgId: string, onChainCgId: bigint): Promise<ReconcileResult>;
85
+ export interface VmReconcileDispatcherOptions {
86
+ concurrency?: number;
87
+ maxPending?: number;
88
+ maxForegroundBurst?: number;
89
+ }
84
90
  /**
85
- * Per-key single-flight coalescer: a burst of triggers for the same key runs
86
- * the action ONCE, with a single trailing re-run if new triggers arrive while
87
- * a run is in flight (so events that land mid-sweep aren't lost). Used so N
88
- * KACG events for one CG cause one sweep (+ at most one trailing sweep), not N.
91
+ * Single admission and scheduling policy for chain-driven VM reconciliation.
92
+ *
93
+ * This dispatcher owns per-CG coalescing, live failure holds, pending priority
94
+ * upgrades, global concurrency, overload bounds, foreground fairness, and
95
+ * shutdown. Keeping those decisions in one state machine prevents a CG from
96
+ * looking active to one scheduler while it is only queued in another.
89
97
  */
90
- export declare class ReconcileCoalescer {
98
+ export declare class VmReconcileDispatcher<T> {
91
99
  private readonly run;
92
- private readonly inFlight;
93
- private readonly again;
94
- constructor(run: (key: string) => Promise<void>);
95
- trigger(key: string): Promise<void>;
96
- /** True if a run for `key` is currently in flight. */
100
+ private readonly onFailure;
101
+ private active;
102
+ private queued;
103
+ private sequence;
104
+ private foregroundBurst;
105
+ private closed;
106
+ private readonly states;
107
+ private readonly pending;
108
+ private readonly idleWaiters;
109
+ private readonly keyIdleWaiters;
110
+ private readonly concurrency;
111
+ private readonly maxPending;
112
+ private readonly maxForegroundBurst;
113
+ constructor(run: (key: string, source: VmReconcileSource) => Promise<T>, onFailure: (key: string, error: unknown) => void, options?: VmReconcileDispatcherOptions);
114
+ /** Enqueue a low-latency chain-event nudge; suppressed until a sweep after failure. */
115
+ triggerLive(key: string): void;
116
+ /** Enqueue the reliability path; every periodic sweep gets one failure retry. */
117
+ triggerPeriodic(key: string): void;
118
+ /**
119
+ * Attempt periodic admission without hiding bounded-queue overflow.
120
+ *
121
+ * Sweep orchestration retains its round-robin cursor at the first rejected
122
+ * key, so stable iteration order cannot permanently starve the tail.
123
+ */
124
+ tryTriggerPeriodic(key: string): boolean;
125
+ /** Operator path; errors and the typed domain result propagate to the API. */
126
+ triggerManual(key: string): Promise<T>;
127
+ /** Typed admission used by the canonical agent operation and focused tests. */
128
+ dispatch(key: string, source: VmReconcileSource): Promise<T>;
97
129
  isInFlight(key: string): boolean;
130
+ pendingSource(key: string): VmReconcileSource | undefined;
131
+ snapshot(): {
132
+ active: number;
133
+ queued: number;
134
+ closed: boolean;
135
+ };
136
+ /** Reject queued work immediately and wait only for already-active work. */
137
+ close(): Promise<void>;
138
+ /** Wait globally for shutdown, or for one CG including its trailing pass. */
139
+ waitForIdle(key?: string): Promise<void>;
140
+ private stateFor;
141
+ private canAdmitWithoutOverflow;
142
+ private admit;
143
+ private createQueuedWork;
144
+ private sortPending;
145
+ private mergeWork;
146
+ private takeNext;
147
+ private resolveIdleWaiters;
148
+ private resolveKeyIdleWaiters;
149
+ private drain;
98
150
  }
99
151
  /**
100
152
  * Bounded LRU-ish dedupe set for recently-reconciled UALs, so a burst of
@@ -1 +1 @@
1
- {"version":3,"file":"chain-reconciler.d.ts","sourceRoot":"","sources":["../src/chain-reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD;;;;OAIG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChD;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,KAC1B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iEAAiE;IACjE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAuD1B;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;gBAEd,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAEhE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnC,sDAAsD;IACtD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGjC;AAED;;;;GAIG;AACH,qBAAa,YAAY;IAEX,OAAO,CAAC,QAAQ,CAAC,GAAG;IADhC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBACrB,GAAG,SAAO;IAEvC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAStB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAKtD"}
1
+ {"version":3,"file":"chain-reconciler.d.ts","sourceRoot":"","sources":["../src/chain-reconciler.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@
23
23
  * with a single trailing re-run if more events land mid-sweep.
24
24
  */
25
25
  import { recordCompletion, absorbConfirmed, ordinalsToReconcile, } from './reconcile-cursor.js';
26
+ import { VmReconcileQueueClosedError, VmReconcileQueueFullError, } from './vm-reconcile-service.js';
26
27
  /**
27
28
  * One sweep pass for a single CG: reconcile every ordinal in `[watermark, head)`
28
29
  * (skipping ones already completed and held in the cursor), then advance the
@@ -32,6 +33,13 @@ import { recordCompletion, absorbConfirmed, ordinalsToReconcile, } from './recon
32
33
  export async function reconcileContextGraph(deps, state, localCgId, onChainCgId) {
33
34
  const head = await deps.getKCCount(onChainCgId);
34
35
  const before = state.watermark;
36
+ // The persisted contiguous watermark is durable completeness evidence. If
37
+ // it already covers the chain head, avoid the head-block RPC and all ordinal
38
+ // work. A watermark ahead of the observed head is surfaced by the caller as
39
+ // an evidence mismatch, but is equally non-actionable in this pass.
40
+ if (before >= head) {
41
+ return { head, watermark: before, reconciled: 0, pending: 0 };
42
+ }
35
43
  // Keep transient head-fetch failures distinct from truly head-less chains.
36
44
  // A thrown head read means the chain is temporarily unavailable; skip
37
45
  // materialization for this pass so reconcileOrdinal never falls back to a
@@ -80,39 +88,324 @@ export async function reconcileContextGraph(deps, state, localCgId, onChainCgId)
80
88
  }
81
89
  return { head, watermark: state.watermark, reconciled, pending };
82
90
  }
91
+ function vmReconcileSourceRank(source) {
92
+ if (source === 'manual')
93
+ return 2;
94
+ if (source === 'live')
95
+ return 1;
96
+ return 0;
97
+ }
83
98
  /**
84
- * Per-key single-flight coalescer: a burst of triggers for the same key runs
85
- * the action ONCE, with a single trailing re-run if new triggers arrive while
86
- * a run is in flight (so events that land mid-sweep aren't lost). Used so N
87
- * KACG events for one CG cause one sweep (+ at most one trailing sweep), not N.
99
+ * Single admission and scheduling policy for chain-driven VM reconciliation.
100
+ *
101
+ * This dispatcher owns per-CG coalescing, live failure holds, pending priority
102
+ * upgrades, global concurrency, overload bounds, foreground fairness, and
103
+ * shutdown. Keeping those decisions in one state machine prevents a CG from
104
+ * looking active to one scheduler while it is only queued in another.
88
105
  */
89
- export class ReconcileCoalescer {
106
+ export class VmReconcileDispatcher {
90
107
  run;
91
- inFlight = new Map();
92
- again = new Set();
93
- constructor(run) {
108
+ onFailure;
109
+ active = 0;
110
+ queued = 0;
111
+ sequence = 0;
112
+ foregroundBurst = 0;
113
+ closed = false;
114
+ states = new Map();
115
+ pending = [];
116
+ idleWaiters = new Set();
117
+ keyIdleWaiters = new Map();
118
+ concurrency;
119
+ maxPending;
120
+ maxForegroundBurst;
121
+ constructor(run, onFailure, options = {}) {
94
122
  this.run = run;
123
+ this.onFailure = onFailure;
124
+ const { concurrency = 1, maxPending = 256, maxForegroundBurst = 8, } = options;
125
+ if (!Number.isSafeInteger(concurrency) || concurrency < 1) {
126
+ throw new Error(`VM reconcile concurrency must be a positive safe integer, got ${concurrency}`);
127
+ }
128
+ if (!Number.isSafeInteger(maxPending) || maxPending < 1) {
129
+ throw new Error(`VM reconcile maxPending must be a positive safe integer, got ${maxPending}`);
130
+ }
131
+ if (!Number.isSafeInteger(maxForegroundBurst) || maxForegroundBurst < 1) {
132
+ throw new Error(`VM reconcile maxForegroundBurst must be a positive safe integer, got ${maxForegroundBurst}`);
133
+ }
134
+ this.concurrency = concurrency;
135
+ this.maxPending = maxPending;
136
+ this.maxForegroundBurst = maxForegroundBurst;
137
+ }
138
+ /** Enqueue a low-latency chain-event nudge; suppressed until a sweep after failure. */
139
+ triggerLive(key) {
140
+ if (this.states.get(key)?.hold === 'live-blocked')
141
+ return;
142
+ void this.admit(key, 'live').catch(() => undefined);
143
+ }
144
+ /** Enqueue the reliability path; every periodic sweep gets one failure retry. */
145
+ triggerPeriodic(key) {
146
+ void this.admit(key, 'periodic').catch(() => undefined);
147
+ }
148
+ /**
149
+ * Attempt periodic admission without hiding bounded-queue overflow.
150
+ *
151
+ * Sweep orchestration retains its round-robin cursor at the first rejected
152
+ * key, so stable iteration order cannot permanently starve the tail.
153
+ */
154
+ tryTriggerPeriodic(key) {
155
+ if (!this.canAdmitWithoutOverflow(key))
156
+ return false;
157
+ void this.admit(key, 'periodic').catch(() => undefined);
158
+ return true;
159
+ }
160
+ /** Operator path; errors and the typed domain result propagate to the API. */
161
+ triggerManual(key) {
162
+ return this.dispatch(key, 'manual');
163
+ }
164
+ /** Typed admission used by the canonical agent operation and focused tests. */
165
+ dispatch(key, source) {
166
+ return this.admit(key, source);
167
+ }
168
+ isInFlight(key) {
169
+ const state = this.states.get(key);
170
+ return Boolean(state?.active || state?.pending || state?.trailing);
171
+ }
172
+ pendingSource(key) {
173
+ return this.states.get(key)?.pending?.source;
174
+ }
175
+ snapshot() {
176
+ return { active: this.active, queued: this.queued, closed: this.closed };
177
+ }
178
+ /** Reject queued work immediately and wait only for already-active work. */
179
+ close() {
180
+ if (!this.closed) {
181
+ this.closed = true;
182
+ const error = new VmReconcileQueueClosedError();
183
+ for (const work of this.pending.splice(0)) {
184
+ const state = this.states.get(work.key);
185
+ if (state?.pending === work)
186
+ state.pending = undefined;
187
+ work.reject(error);
188
+ }
189
+ for (const [key, state] of this.states) {
190
+ if (state.trailing) {
191
+ state.trailing.reject(error);
192
+ state.trailing = undefined;
193
+ }
194
+ if (!state.active)
195
+ this.states.delete(key);
196
+ this.resolveKeyIdleWaiters(key);
197
+ }
198
+ this.queued = 0;
199
+ this.resolveIdleWaiters();
200
+ }
201
+ return this.waitForIdle();
202
+ }
203
+ /** Wait globally for shutdown, or for one CG including its trailing pass. */
204
+ waitForIdle(key) {
205
+ if (key !== undefined) {
206
+ if (!this.isInFlight(key))
207
+ return Promise.resolve();
208
+ return new Promise((resolve) => {
209
+ let waiters = this.keyIdleWaiters.get(key);
210
+ if (!waiters) {
211
+ waiters = new Set();
212
+ this.keyIdleWaiters.set(key, waiters);
213
+ }
214
+ waiters.add(resolve);
215
+ });
216
+ }
217
+ if (this.active === 0 && this.queued === 0)
218
+ return Promise.resolve();
219
+ return new Promise((resolve) => this.idleWaiters.add(resolve));
95
220
  }
96
- trigger(key) {
97
- const existing = this.inFlight.get(key);
98
- if (existing) {
99
- // A run is in flight — mark that one more pass is needed after it.
100
- this.again.add(key);
101
- return existing;
221
+ stateFor(key) {
222
+ let state = this.states.get(key);
223
+ if (!state) {
224
+ state = { hold: 'ready' };
225
+ this.states.set(key, state);
102
226
  }
103
- const promise = this.run(key)
104
- .catch(() => { })
105
- .finally(() => {
106
- this.inFlight.delete(key);
107
- if (this.again.delete(key))
108
- void this.trigger(key);
227
+ return state;
228
+ }
229
+ canAdmitWithoutOverflow(key) {
230
+ if (this.closed)
231
+ return false;
232
+ const state = this.states.get(key);
233
+ if (state?.pending || state?.trailing)
234
+ return true;
235
+ return this.queued < this.maxPending;
236
+ }
237
+ admit(key, source) {
238
+ if (this.closed)
239
+ return Promise.reject(new VmReconcileQueueClosedError());
240
+ const state = this.stateFor(key);
241
+ if (state.pending) {
242
+ this.mergeWork(state.pending, source);
243
+ this.sortPending();
244
+ return state.pending.promise;
245
+ }
246
+ if (state.active) {
247
+ // An operator request must observe a head snapshot taken no earlier than
248
+ // that request. It may share an already-active operator pass, but never
249
+ // an older automatic pass. In that case it joins or creates one fresh
250
+ // trailing pass; repeated operator requests coalesce there.
251
+ if (source === 'manual' && state.active.source === 'manual') {
252
+ return state.active.promise;
253
+ }
254
+ if (state.trailing) {
255
+ this.mergeWork(state.trailing, source);
256
+ return state.trailing.promise;
257
+ }
258
+ const trailing = this.createQueuedWork(key, source);
259
+ if (!trailing)
260
+ return Promise.reject(new VmReconcileQueueFullError(this.maxPending));
261
+ state.trailing = trailing;
262
+ return trailing.promise;
263
+ }
264
+ const work = this.createQueuedWork(key, source);
265
+ if (!work) {
266
+ if (state.hold === 'ready')
267
+ this.states.delete(key);
268
+ return Promise.reject(new VmReconcileQueueFullError(this.maxPending));
269
+ }
270
+ state.pending = work;
271
+ this.pending.push(work);
272
+ this.sortPending();
273
+ this.drain();
274
+ return work.promise;
275
+ }
276
+ createQueuedWork(key, source) {
277
+ if (this.queued >= this.maxPending)
278
+ return undefined;
279
+ let resolveWork;
280
+ let rejectWork;
281
+ const promise = new Promise((resolve, reject) => {
282
+ resolveWork = resolve;
283
+ rejectWork = reject;
109
284
  });
110
- this.inFlight.set(key, promise);
111
- return promise;
285
+ this.queued += 1;
286
+ return {
287
+ key,
288
+ source,
289
+ automatic: source !== 'manual',
290
+ periodicRequested: source === 'periodic',
291
+ sequence: this.sequence++,
292
+ promise,
293
+ resolve: resolveWork,
294
+ reject: rejectWork,
295
+ };
112
296
  }
113
- /** True if a run for `key` is currently in flight. */
114
- isInFlight(key) {
115
- return this.inFlight.has(key);
297
+ sortPending() {
298
+ this.pending.sort((a, b) => {
299
+ const priorityDelta = (a.source === 'periodic' ? 1 : 0)
300
+ - (b.source === 'periodic' ? 1 : 0);
301
+ return priorityDelta || a.sequence - b.sequence;
302
+ });
303
+ }
304
+ mergeWork(work, source) {
305
+ work.automatic ||= source !== 'manual';
306
+ work.periodicRequested ||= source === 'periodic';
307
+ if (vmReconcileSourceRank(source) > vmReconcileSourceRank(work.source)) {
308
+ work.source = source;
309
+ }
310
+ }
311
+ takeNext() {
312
+ if (this.pending.length === 0)
313
+ return undefined;
314
+ let index = 0;
315
+ if (this.foregroundBurst >= this.maxForegroundBurst) {
316
+ const backgroundIndex = this.pending.findIndex((work) => work.source === 'periodic');
317
+ if (backgroundIndex >= 0)
318
+ index = backgroundIndex;
319
+ }
320
+ const [work] = this.pending.splice(index, 1);
321
+ if (!work)
322
+ return undefined;
323
+ const state = this.states.get(work.key);
324
+ if (state?.pending === work)
325
+ state.pending = undefined;
326
+ this.queued -= 1;
327
+ if (work.source !== 'periodic')
328
+ this.foregroundBurst += 1;
329
+ else
330
+ this.foregroundBurst = 0;
331
+ return work;
332
+ }
333
+ resolveIdleWaiters() {
334
+ if (this.active !== 0 || this.queued !== 0)
335
+ return;
336
+ for (const resolve of this.idleWaiters)
337
+ resolve();
338
+ this.idleWaiters.clear();
339
+ }
340
+ resolveKeyIdleWaiters(key) {
341
+ if (this.isInFlight(key))
342
+ return;
343
+ const waiters = this.keyIdleWaiters.get(key);
344
+ if (!waiters)
345
+ return;
346
+ this.keyIdleWaiters.delete(key);
347
+ for (const resolve of waiters)
348
+ resolve();
349
+ }
350
+ drain() {
351
+ while (!this.closed && this.active < this.concurrency && this.pending.length > 0) {
352
+ const work = this.takeNext();
353
+ if (!work)
354
+ return;
355
+ const state = this.stateFor(work.key);
356
+ state.active = work;
357
+ if (work.periodicRequested)
358
+ state.hold = 'ready';
359
+ this.active += 1;
360
+ let failure;
361
+ void Promise.resolve()
362
+ .then(() => this.run(work.key, work.source))
363
+ .then((result) => {
364
+ // Any successful full pass, including an operator-forced recovery,
365
+ // proves the failed-live hold can be released.
366
+ state.hold = 'ready';
367
+ work.resolve(result);
368
+ }, (error) => {
369
+ failure = error;
370
+ if (work.automatic) {
371
+ state.hold = 'live-blocked';
372
+ try {
373
+ this.onFailure(work.key, error);
374
+ }
375
+ catch {
376
+ // Observability must never break admission or callers.
377
+ }
378
+ }
379
+ work.reject(error);
380
+ })
381
+ .finally(() => {
382
+ this.active -= 1;
383
+ state.active = undefined;
384
+ const trailing = state.trailing;
385
+ state.trailing = undefined;
386
+ if (trailing
387
+ && state.hold === 'live-blocked'
388
+ && trailing.source === 'live'
389
+ && !trailing.periodicRequested) {
390
+ // A failing live pass must not immediately retry itself. Preserve
391
+ // the failure hold until the periodic reliability path arrives.
392
+ // A manual completion boundary is never suppressed by this rule.
393
+ this.queued -= 1;
394
+ trailing.reject(failure);
395
+ }
396
+ else if (trailing && !this.closed) {
397
+ state.pending = trailing;
398
+ this.pending.push(trailing);
399
+ this.sortPending();
400
+ }
401
+ else if (!trailing && state.hold === 'ready') {
402
+ this.states.delete(work.key);
403
+ }
404
+ this.drain();
405
+ this.resolveIdleWaiters();
406
+ this.resolveKeyIdleWaiters(work.key);
407
+ });
408
+ }
116
409
  }
117
410
  }
118
411
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chain-reconciler.js","sourceRoot":"","sources":["../src/chain-reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAEL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAuD/B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAyB,EACzB,KAAkB,EAClB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IAE/B,2EAA2E;IAC3E,sEAAsE;IACtE,0EAA0E;IAC1E,iDAAiD;IACjD,IAAI,SAA6B,CAAC;IAClC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,SAAS,6CAA6C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnI,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,SAAS,KAAK,SAAS;QAAE,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAEvF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACxF,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACpE,UAAU,IAAI,CAAC,CAAC;gBAChB,qEAAqE;gBACrE,sEAAsE;gBACtE,mCAAmC;gBACnC,gBAAgB,CACd,KAAK,EACL,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EAC7C,SAAS,IAAI,OAAO,CAAC,WAAW,EAChC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,aAAa,SAAS,eAAe,MAAM,OAAO,KAAK,CAAC,SAAS,UAAU,IAAI,gBAAgB,UAAU,aAAa,OAAO,GAAG,CAAC,CAAC;IAC7I,CAAC;SAAM,IAAI,UAAU,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,aAAa,SAAS,uBAAuB,KAAK,CAAC,SAAS,UAAU,IAAI,gBAAgB,UAAU,aAAa,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAIA;IAHZ,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAE3C,YAA6B,GAAmC;QAAnC,QAAG,GAAH,GAAG,CAAgC;IAAG,CAAC;IAEpE,OAAO,CAAC,GAAW;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,mEAAmE;YACnE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;aAC1B,KAAK,CAAC,GAAG,EAAE,GAAgD,CAAC,CAAC;aAC7D,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sDAAsD;IACtD,UAAU,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,YAAY;IAEM;IADZ,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,YAA6B,MAAM,IAAI;QAAV,QAAG,GAAH,GAAG,CAAO;IAAG,CAAC;IAE3C,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC7C,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,MAAe;QAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"chain-reconciler.js","sourceRoot":"","sources":["../src/chain-reconciler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Nominal capability issued while one context graph's admission lane is held.
3
+ * The brand is intentionally private to this module: callers can pass tokens
4
+ * around, but cannot construct one without an unsafe type assertion. Runtime
5
+ * validation below rejects asserted/forged objects as well.
6
+ */
7
+ declare const contextGraphJoinAdmissionLockTokenBrand: unique symbol;
8
+ export type ContextGraphJoinAdmissionLockToken = Readonly<{
9
+ [contextGraphJoinAdmissionLockTokenBrand]: true;
10
+ }>;
11
+ /**
12
+ * Process-local, per-context-graph admission serializer.
13
+ *
14
+ * Tokens are registered in this manager's private WeakMap only for the
15
+ * lifetime of the callback. Consequently a token from another manager, for a
16
+ * different context graph, or retained after the callback returns is invalid.
17
+ */
18
+ export declare class ContextGraphJoinAdmissionLockManager {
19
+ private readonly queues;
20
+ private readonly liveTokens;
21
+ withLock<T>(contextGraphId: string, operation: (token: ContextGraphJoinAdmissionLockToken) => Promise<T>): Promise<T>;
22
+ assertHeld(contextGraphId: string, token: ContextGraphJoinAdmissionLockToken | undefined): void;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=context-graph-join-admission-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-graph-join-admission-lock.d.ts","sourceRoot":"","sources":["../src/context-graph-join-admission-lock.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,QAAA,MAAM,uCAAuC,EAAE,OAAO,MAErD,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,QAAQ,CAAC;IACxD,CAAC,uCAAuC,CAAC,EAAE,IAAI,CAAC;CACjD,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,qBAAa,oCAAoC;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAEtD,QAAQ,CAAC,CAAC,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,CAAC,KAAK,EAAE,kCAAkC,KAAK,OAAO,CAAC,CAAC,CAAC,GACnE,OAAO,CAAC,CAAC,CAAC;IAuBb,UAAU,CACR,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,kCAAkC,GAAG,SAAS,GACpD,IAAI;CAYR"}
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Nominal capability issued while one context graph's admission lane is held.
4
+ * The brand is intentionally private to this module: callers can pass tokens
5
+ * around, but cannot construct one without an unsafe type assertion. Runtime
6
+ * validation below rejects asserted/forged objects as well.
7
+ */
8
+ const contextGraphJoinAdmissionLockTokenBrand = Symbol('ContextGraphJoinAdmissionLockToken');
9
+ /**
10
+ * Process-local, per-context-graph admission serializer.
11
+ *
12
+ * Tokens are registered in this manager's private WeakMap only for the
13
+ * lifetime of the callback. Consequently a token from another manager, for a
14
+ * different context graph, or retained after the callback returns is invalid.
15
+ */
16
+ export class ContextGraphJoinAdmissionLockManager {
17
+ queues = new Map();
18
+ liveTokens = new WeakMap();
19
+ async withLock(contextGraphId, operation) {
20
+ const previous = this.queues.get(contextGraphId) ?? Promise.resolve();
21
+ let release;
22
+ const gate = new Promise((resolve) => { release = resolve; });
23
+ const current = previous.catch(() => { }).then(() => gate);
24
+ this.queues.set(contextGraphId, current);
25
+ await previous.catch(() => { });
26
+ const token = Object.freeze({
27
+ [contextGraphJoinAdmissionLockTokenBrand]: true,
28
+ });
29
+ this.liveTokens.set(token, contextGraphId);
30
+ try {
31
+ return await operation(token);
32
+ }
33
+ finally {
34
+ this.liveTokens.delete(token);
35
+ release();
36
+ if (this.queues.get(contextGraphId) === current) {
37
+ this.queues.delete(contextGraphId);
38
+ }
39
+ }
40
+ }
41
+ assertHeld(contextGraphId, token) {
42
+ if (token === undefined
43
+ || typeof token !== 'object'
44
+ || token === null
45
+ || this.liveTokens.get(token) !== contextGraphId) {
46
+ throw new Error(`Context graph admission mutation for "${contextGraphId}" requires its live admission-lock token.`);
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=context-graph-join-admission-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-graph-join-admission-lock.js","sourceRoot":"","sources":["../src/context-graph-join-admission-lock.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;GAKG;AACH,MAAM,uCAAuC,GAAkB,MAAM,CACnE,oCAAoC,CACrC,CAAC;AAMF;;;;;;GAMG;AACH,MAAM,OAAO,oCAAoC;IAC9B,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC1C,UAAU,GAAG,IAAI,OAAO,EAAkB,CAAC;IAE5D,KAAK,CAAC,QAAQ,CACZ,cAAsB,EACtB,SAAoE;QAEpE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACtE,IAAI,OAAoB,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE/B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,CAAC,uCAAuC,CAAC,EAAE,IAAI;SAChD,CAAuC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,OAAO,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU,CACR,cAAsB,EACtB,KAAqD;QAErD,IACE,KAAK,KAAK,SAAS;eAChB,OAAO,KAAK,KAAK,QAAQ;eACzB,KAAK,KAAK,IAAI;eACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,cAAc,EAChD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,yCAAyC,cAAc,2CAA2C,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}