@zlink-systems/framework 0.30.0 → 0.30.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 (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -4,7 +4,7 @@ import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
4
4
  export declare class ZLinkSourceSpotRouter {
5
5
  private readonly defaultRequestTimeoutMs;
6
6
  constructor(defaultRequestTimeoutMs: number | undefined);
7
- request<TReply>(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
7
+ request<TReply>(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply>;
8
8
  send(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
9
- requestRaw(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
9
+ requestRaw(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
10
10
  }
@@ -9,12 +9,12 @@ class ZLinkSourceSpotRouter {
9
9
  constructor(defaultRequestTimeoutMs) {
10
10
  this.defaultRequestTimeoutMs = defaultRequestTimeoutMs;
11
11
  }
12
- async request(sourceSpot, target, packetName, request, timeoutMs, signal) {
12
+ async request(sourceSpot, target, packetName, request, timeoutMs, signal, onAdmitted) {
13
13
  (0, abort_1.throwIfAborted)(signal);
14
14
  const parts = [
15
15
  (0, spot_direct_envelope_1.encodeSpotDirectEnvelope)(1 /* ZLinkChannelMessageKind.Request */, target.routerChannelId, packetName, request)
16
16
  ];
17
- const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, parts, timeoutMs ?? this.defaultRequestTimeoutMs);
17
+ const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, parts, timeoutMs ?? this.defaultRequestTimeoutMs, onAdmitted);
18
18
  const replyParts = await (0, abort_1.awaitWithAbort)(operation, signal, () => {
19
19
  void operation.then(channel_envelope_1.closeMessages, () => undefined);
20
20
  });
@@ -37,9 +37,9 @@ class ZLinkSourceSpotRouter {
37
37
  (0, channel_envelope_1.closeMessages)(parts);
38
38
  }
39
39
  }
40
- async requestRaw(sourceSpot, target, request, timeoutMs, signal) {
40
+ async requestRaw(sourceSpot, target, request, timeoutMs, signal, onAdmitted) {
41
41
  (0, abort_1.throwIfAborted)(signal);
42
- const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, request, timeoutMs ?? this.defaultRequestTimeoutMs);
42
+ const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, request, timeoutMs ?? this.defaultRequestTimeoutMs, onAdmitted);
43
43
  return await (0, abort_1.awaitWithAbort)(operation, signal, () => {
44
44
  void operation.then(channel_envelope_1.closeMessages, () => undefined);
45
45
  });
@@ -8,6 +8,6 @@ export declare class ZLinkSpotNodeRouteTransport {
8
8
  private readonly targets;
9
9
  constructor(registration: ZLinkFrameworkRegistration, targets: ZLinkSpotRouteTargetResolver);
10
10
  send(target: ZLinkSpotRouteTarget, parts: readonly Message[]): Promise<boolean>;
11
- request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply> | undefined;
12
- requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]> | undefined;
11
+ request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply> | undefined;
12
+ requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]> | undefined;
13
13
  }
@@ -24,14 +24,14 @@ class ZLinkSpotNodeRouteTransport {
24
24
  (0, channel_envelope_1.closeMessages)(parts);
25
25
  }
26
26
  }
27
- request(target, parts, codecs, timeoutMs, signal) {
27
+ request(target, parts, codecs, timeoutMs, signal, onAdmitted) {
28
28
  const router = this.targets.spotNodeRouter(target.routerChannelId);
29
29
  if (router === undefined) {
30
30
  return undefined;
31
31
  }
32
32
  const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
33
33
  (0, abort_1.throwIfAborted)(signal);
34
- const operation = router.requestToSpot(target.targetNodeRid, target.spotId, parts, effectiveTimeoutMs);
34
+ const operation = router.requestToSpot(target.targetNodeRid, target.spotId, parts, effectiveTimeoutMs, onAdmitted);
35
35
  return (0, abort_1.awaitWithAbort)(operation, signal, () => {
36
36
  void operation.then(channel_envelope_1.closeMessages, () => undefined);
37
37
  }).then((replyParts) => {
@@ -44,14 +44,14 @@ class ZLinkSpotNodeRouteTransport {
44
44
  }
45
45
  });
46
46
  }
47
- requestRaw(target, request, timeoutMs, signal) {
47
+ requestRaw(target, request, timeoutMs, signal, onAdmitted) {
48
48
  const router = this.targets.spotNodeRouter(target.routerChannelId);
49
49
  if (router === undefined) {
50
50
  return undefined;
51
51
  }
52
52
  const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
53
53
  (0, abort_1.throwIfAborted)(signal);
54
- const operation = router.requestToSpot(target.targetNodeRid, target.spotId, request, effectiveTimeoutMs);
54
+ const operation = router.requestToSpot(target.targetNodeRid, target.spotId, request, effectiveTimeoutMs, onAdmitted);
55
55
  return (0, abort_1.awaitWithAbort)(operation, signal, () => {
56
56
  void operation.then(channel_envelope_1.closeMessages, () => undefined);
57
57
  });
@@ -8,7 +8,7 @@ export declare class ZLinkSpotRouteBridgeTransport {
8
8
  constructor(bridges: ReadonlyMap<string, ZLinkBackendSpotRouteBridge>, defaultRequestTimeoutMs: number | undefined);
9
9
  has(routerChannelId: string): boolean;
10
10
  send(target: ZLinkSpotRouteTarget, parts: readonly Message[]): Promise<void>;
11
- request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
12
- requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
11
+ request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply>;
12
+ requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
13
13
  private requireBridge;
14
14
  }
@@ -24,11 +24,11 @@ class ZLinkSpotRouteBridgeTransport {
24
24
  (0, channel_envelope_1.closeMessages)(parts);
25
25
  }
26
26
  }
27
- async request(target, parts, codecs, timeoutMs, signal) {
27
+ async request(target, parts, codecs, timeoutMs, signal, onAdmitted) {
28
28
  const bridge = this.requireBridge(target.routerChannelId);
29
29
  const operation = (0, channel_multipart_1.appendParts)(bridge.request(target.routerChannelId, target.targetNodeRid, target.spotId), parts)
30
30
  .timeout(timeoutMs ?? 0)
31
- .submit();
31
+ .submit(onAdmitted);
32
32
  const replyParts = await (0, abort_1.awaitWithAbort)(operation, signal, () => {
33
33
  void operation.then(channel_envelope_1.closeMessages, () => undefined);
34
34
  });
@@ -40,13 +40,13 @@ class ZLinkSpotRouteBridgeTransport {
40
40
  (0, channel_envelope_1.closeMessages)(parts);
41
41
  }
42
42
  }
43
- requestRaw(target, request, timeoutMs, signal) {
43
+ requestRaw(target, request, timeoutMs, signal, onAdmitted) {
44
44
  const bridge = this.requireBridge(target.routerChannelId);
45
45
  const operation = bridge
46
46
  .request(target.routerChannelId, target.targetNodeRid, target.spotId)
47
47
  .message(request)
48
48
  .timeout(timeoutMs ?? this.defaultRequestTimeoutMs ?? 0)
49
- .submit();
49
+ .submit(onAdmitted);
50
50
  return (0, abort_1.awaitWithAbort)(operation, signal, () => {
51
51
  void operation.then(channel_envelope_1.closeMessages, () => undefined);
52
52
  });
@@ -13,6 +13,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
13
13
  request<TReply>(spotId: RoutingId, packetName: string | undefined, request: unknown, context: {
14
14
  readonly channelName: string;
15
15
  readonly signal?: AbortSignal;
16
+ readonly onAdmitted?: () => void;
16
17
  readonly metadata?: ReadonlyMap<string, string>;
17
18
  }): Promise<TReply>;
18
19
  }
@@ -39,10 +40,10 @@ export declare class ZLinkSpotRouteDispatchStrategy {
39
40
  canRoutePacketChannel(routerChannelId: string): boolean;
40
41
  routeSendToSpot(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
41
42
  private routeSendToSpotScoped;
42
- routeRequestToSpot<TReply>(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
43
+ routeRequestToSpot<TReply>(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
43
44
  private routeRequestToSpotScoped;
44
- routeRequestFromSpotToSpot<TReply>(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
45
+ routeRequestFromSpotToSpot<TReply>(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply>;
45
46
  routeSendFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
46
- routeRequestRawFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
47
- routeRequestRawToSpot(spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
47
+ routeRequestRawFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
48
+ routeRequestRawToSpot(spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
48
49
  }
@@ -70,58 +70,58 @@ class ZLinkSpotRouteDispatchStrategy {
70
70
  }
71
71
  await this.routerSocketTransport.send(spotRouteTarget, parts, ZLINK_SEND_DONT_WAIT);
72
72
  }
73
- routeRequestToSpot(spotRouteTarget, packetName, request, timeoutMs, signal, metadata) {
74
- return (0, flow_context_1.runWithOutboundFlow)(this.options.flowCreationEnabled?.() ?? true, () => this.routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata));
73
+ routeRequestToSpot(spotRouteTarget, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
74
+ return (0, flow_context_1.runWithOutboundFlow)(this.options.flowCreationEnabled?.() ?? true, () => this.routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata, onAdmitted));
75
75
  }
76
- async routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata) {
76
+ async routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
77
77
  (0, abort_1.throwIfAborted)(signal);
78
78
  const localSpotRouteNode = this.targets.localRouteNode(spotRouteTarget);
79
79
  if (localSpotRouteNode !== undefined) {
80
- return this.localTransport.request(spotRouteTarget.routerChannelId, spotRouteTarget.spotId, packetName, request, timeoutMs, signal);
80
+ return this.localTransport.request(spotRouteTarget.routerChannelId, spotRouteTarget.spotId, packetName, request, timeoutMs, signal, onAdmitted);
81
81
  }
82
82
  const codecs = (0, channel_framework_packets_1.codecsForFrameworkPacket)(packetName, this.options.codecs);
83
83
  const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, spotRouteTarget.routerChannelId, packetName, request, timeoutMs, undefined, codecs, undefined, this.options.flowCreationEnabled?.() ?? true, metadata);
84
84
  if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
85
- const namedSpotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal);
85
+ const namedSpotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal, onAdmitted);
86
86
  if (namedSpotNodeRequest !== undefined)
87
87
  return namedSpotNodeRequest;
88
88
  }
89
89
  if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
90
- return this.bridgeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal);
90
+ return this.bridgeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal, onAdmitted);
91
91
  }
92
92
  if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
93
- return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, ZLINK_SEND_DONT_WAIT, timeoutMs, signal);
93
+ return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, ZLINK_SEND_DONT_WAIT, timeoutMs, signal, onAdmitted);
94
94
  }
95
- const spotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal);
95
+ const spotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal, onAdmitted);
96
96
  if (spotNodeRequest !== undefined) {
97
97
  return spotNodeRequest;
98
98
  }
99
- return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, 0, timeoutMs, signal);
99
+ return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, 0, timeoutMs, signal, onAdmitted);
100
100
  }
101
- routeRequestFromSpotToSpot(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal) {
102
- return this.sourceSpotRouter.request(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal);
101
+ routeRequestFromSpotToSpot(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal, onAdmitted) {
102
+ return this.sourceSpotRouter.request(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal, onAdmitted);
103
103
  }
104
104
  async routeSendFromSpotToSpot(sourceSpot, spotRouteTarget, packetName, message, metadata) {
105
105
  await this.sourceSpotRouter.send(sourceSpot, spotRouteTarget, packetName, message, metadata);
106
106
  }
107
- routeRequestRawFromSpotToSpot(sourceSpot, spotRouteTarget, request, timeoutMs, signal) {
108
- return this.sourceSpotRouter.requestRaw(sourceSpot, spotRouteTarget, request, timeoutMs, signal);
107
+ routeRequestRawFromSpotToSpot(sourceSpot, spotRouteTarget, request, timeoutMs, signal, onAdmitted) {
108
+ return this.sourceSpotRouter.requestRaw(sourceSpot, spotRouteTarget, request, timeoutMs, signal, onAdmitted);
109
109
  }
110
- async routeRequestRawToSpot(spotRouteTarget, request, timeoutMs, signal) {
110
+ async routeRequestRawToSpot(spotRouteTarget, request, timeoutMs, signal, onAdmitted) {
111
111
  (0, abort_1.throwIfAborted)(signal);
112
112
  if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
113
- const namedSpotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
113
+ const namedSpotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
114
114
  if (namedSpotNodeRequest !== undefined)
115
115
  return namedSpotNodeRequest;
116
116
  }
117
117
  if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
118
- return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
118
+ return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
119
119
  }
120
- const spotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
120
+ const spotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
121
121
  if (spotNodeRequest !== undefined) {
122
122
  return spotNodeRequest;
123
123
  }
124
- return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
124
+ return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
125
125
  }
126
126
  }
127
127
  exports.ZLinkSpotRouteDispatchStrategy = ZLinkSpotRouteDispatchStrategy;
@@ -9,7 +9,6 @@ exports.createInboundFlow = createInboundFlow;
9
9
  const node_async_hooks_1 = require("node:async_hooks");
10
10
  const node_crypto_1 = require("node:crypto");
11
11
  const FLOW_UUID_BYTES = 16;
12
- const FLOW_UUID_VARIANT_BYTE = 8;
13
12
  /**
14
13
  * Spec 27 §3 defines the flow_origin value set as lowercase
15
14
  * (`inbound|timer|application|lifecycle`); every language emits these exact
@@ -70,13 +69,26 @@ function createInboundFlow(flowId, flowOrigin, createIfAbsent, streamSessionId)
70
69
  }
71
70
  return { flowId: flowId ?? createFlowId(), flowOrigin: flowOrigin ?? 'Inbound', streamSessionId };
72
71
  }
72
+ /**
73
+ * UUIDv7 with a dedicated counter (RFC 9562 §6.2 method 1): the 48-bit
74
+ * millisecond timestamp, then a 42-bit counter that starts at a random value
75
+ * and spans `rand_a` and the top of `rand_b`, then 32 random bits drawn once
76
+ * per process. Flow ids stay unique within the process without drawing
77
+ * random bytes for every message.
78
+ */
79
+ const flowRandom = (0, node_crypto_1.randomBytes)(FLOW_UUID_BYTES);
80
+ const FLOW_COUNTER_SPAN = 2 ** 42;
81
+ let flowCounter = flowRandom.readUIntBE(0, 6) % FLOW_COUNTER_SPAN;
82
+ const FLOW_ID_TAIL = flowRandom.toString('hex', FLOW_UUID_BYTES - 4);
73
83
  function createFlowId() {
74
- const bytes = (0, node_crypto_1.randomBytes)(FLOW_UUID_BYTES);
84
+ const counter = flowCounter;
85
+ flowCounter = (flowCounter + 1) % FLOW_COUNTER_SPAN;
75
86
  // Date.now() is always within 48 bits, which is exactly the UUIDv7
76
87
  // timestamp field.
77
- bytes.writeUIntBE(Date.now(), 0, 6);
78
- bytes[6] = 0x70 | (bytes[6] & 0x0f);
79
- bytes[FLOW_UUID_VARIANT_BYTE] = 0x80 | (bytes[FLOW_UUID_VARIANT_BYTE] & 0x3f);
80
- const hex = bytes.toString('hex');
81
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
88
+ const timestamp = Date.now().toString(16).padStart(12, '0');
89
+ const randA = Math.floor(counter / 2 ** 30); // 12 bits
90
+ const randB = counter % 2 ** 30; // 30 bits after the 2 variant bits
91
+ const variantHigh = (0x8000 | Math.floor(randB / 2 ** 16)).toString(16);
92
+ const randBLow = (randB % 2 ** 16).toString(16).padStart(4, '0');
93
+ return `${timestamp.slice(0, 8)}-${timestamp.slice(8)}-7${randA.toString(16).padStart(3, '0')}-${variantHigh}-${randBLow}${FLOW_ID_TAIL}`;
82
94
  }
@@ -18,7 +18,6 @@ exports.ZLinkLocationMonitoringEventEmitter = exports.ZLinkLocationRuntimeMonito
18
18
  exports.isRelocationDebugEnabled = isRelocationDebugEnabled;
19
19
  exports.relocationDebug = relocationDebug;
20
20
  exports.emitActorOwnerLeaseObservation = emitActorOwnerLeaseObservation;
21
- const node_async_hooks_1 = require("node:async_hooks");
22
21
  const state_lane_1 = require("../execution/state-lane");
23
22
  const routing_id_1 = require("../routing-id");
24
23
  const internal_event_contracts_1 = require("./internal-event-contracts");
@@ -29,7 +28,6 @@ Object.defineProperty(exports, "ZLinkLocationRouteEventKind", { enumerable: true
29
28
  Object.defineProperty(exports, "ZLinkLocationSpotEventKind", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkLocationSpotEventKind; } });
30
29
  Object.defineProperty(exports, "ZLinkSocketNativeEventType", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkSocketNativeEventType; } });
31
30
  const ZLINK_DISCONNECT_REASON_HANDSHAKE_FAILED = 3;
32
- const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:location-runtime-monitoring-source');
33
31
  function isRelocationDebugEnabled() {
34
32
  return process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION === '1';
35
33
  }
@@ -113,7 +111,7 @@ class ZLinkLocationRuntimeMonitoringSource {
113
111
  let topology;
114
112
  let serviceSummary;
115
113
  try {
116
- [status, topology, serviceSummary] = await startOutsideStateLane(() => Promise.all([
114
+ [status, topology, serviceSummary] = await (0, state_lane_1.startOutsideStateLane)(() => Promise.all([
117
115
  this.query.getStatus(signal),
118
116
  this.query.listTopology({}, undefined, signal),
119
117
  this.query.listServiceSummaries({}, undefined, signal)
@@ -121,7 +119,7 @@ class ZLinkLocationRuntimeMonitoringSource {
121
119
  }
122
120
  catch (error) {
123
121
  if (await this.lane.run(() => this.markStoreFailureCore())) {
124
- await startOutsideStateLane(() => this.publisher.publish({
122
+ await (0, state_lane_1.startOutsideStateLane)(() => this.publisher.publish({
125
123
  sourceName: this.registration.sourceName,
126
124
  timestamp: new Date(),
127
125
  event: internal_event_contracts_1.ZLinkLocationRuntimeEventKind.StoreFailure
@@ -130,7 +128,7 @@ class ZLinkLocationRuntimeMonitoringSource {
130
128
  return;
131
129
  }
132
130
  if (await this.lane.run(() => this.markStoreRecoveredCore())) {
133
- await startOutsideStateLane(() => this.publisher.publish({
131
+ await (0, state_lane_1.startOutsideStateLane)(() => this.publisher.publish({
134
132
  sourceName: this.registration.sourceName,
135
133
  timestamp: new Date(),
136
134
  event: internal_event_contracts_1.ZLinkLocationRuntimeEventKind.StoreRecovered
@@ -157,7 +155,7 @@ class ZLinkLocationRuntimeMonitoringSource {
157
155
  const previous = await this.lane.run(() => this.previousSnapshotCore(event));
158
156
  if (current === previous)
159
157
  return;
160
- await startOutsideStateLane(() => publishLocationRuntimeChange(this.publisher, this.registration.sourceName, event, snapshot));
158
+ await (0, state_lane_1.startOutsideStateLane)(() => publishLocationRuntimeChange(this.publisher, this.registration.sourceName, event, snapshot));
161
159
  await this.lane.run(() => this.updateSnapshotCore(event, current));
162
160
  }
163
161
  previousSnapshotCore(event) {
@@ -352,9 +350,6 @@ async function publishLocationRuntimeChange(publisher, sourceName, event, snapsh
352
350
  };
353
351
  await publisher.publish(runtimeEvent);
354
352
  }
355
- function startOutsideStateLane(work) {
356
- return detachedStateLaneResource.runInAsyncScope(work);
357
- }
358
353
  function stableSnapshot(value) {
359
354
  return JSON.stringify(value, (_key, item) => (typeof item === 'bigint' ? item.toString() : item));
360
355
  }
@@ -12,6 +12,12 @@ export interface ZLinkDiagnosticsContext {
12
12
  export declare const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions;
13
13
  export declare const telemetryLogger: import("@opentelemetry/api-logs").Logger;
14
14
  export declare function effectiveMessageFlow(ctx: ZLinkDiagnosticsContext): ZLinkMessageFlowLogMode;
15
+ /**
16
+ * Message-flow tracing is on at Normal and Detailed only (04-flow-correlation
17
+ * §4). Below it no flow ID is created, validated, captured or propagated. This
18
+ * is the one decision every flow processing point reads.
19
+ */
20
+ export declare function messageFlowTracingEnabled(mode: ZLinkMessageFlowLogMode): boolean;
15
21
  export declare function createMessageFlowModeCell(dispatch: {
16
22
  diagnostics?: ZLinkDiagnosticsOptions;
17
23
  } | undefined): ZLinkMessageFlowModeCell;
@@ -22,7 +28,9 @@ export declare function flowIfEnabled(flow: ZLinkMessageFlowTracer | undefined,
22
28
  export interface ZLinkMessageFlowTracePoint {
23
29
  trace(flowInput: MessageFlowInput): void;
24
30
  }
31
+ export declare function traceSessionBindingControlDrop(flow: ZLinkMessageFlowTracer | undefined, sourceRid: string, actorId: string, packetName: string, errorReason: 'location_unavailable' | 'stale_target', error?: unknown): void;
25
32
  type MessageFlowInput = Omit<ZLinkRuntimeMessageFlowEvent, 'effectiveMode' | 'flowId' | 'flowOrigin'> & {
33
+ readonly severity?: 'warning';
26
34
  readonly effectiveMode?: ZLinkMessageFlowLogMode;
27
35
  readonly flowId?: string;
28
36
  readonly flowOrigin?: import('../../contracts').ZLinkFlowOrigin;
@@ -2,9 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkMessageFlowTracer = exports.telemetryLogger = exports.DEFAULT_ZLINK_DIAGNOSTICS = void 0;
4
4
  exports.effectiveMessageFlow = effectiveMessageFlow;
5
+ exports.messageFlowTracingEnabled = messageFlowTracingEnabled;
5
6
  exports.createMessageFlowModeCell = createMessageFlowModeCell;
6
7
  exports.createDiagnosticsContext = createDiagnosticsContext;
7
8
  exports.flowIfEnabled = flowIfEnabled;
9
+ exports.traceSessionBindingControlDrop = traceSessionBindingControlDrop;
8
10
  const api_1 = require("@opentelemetry/api");
9
11
  const api_logs_1 = require("@opentelemetry/api-logs");
10
12
  const contracts_1 = require("../../contracts");
@@ -24,6 +26,14 @@ let diagnosticsGeneration = 0n;
24
26
  function effectiveMessageFlow(ctx) {
25
27
  return ctx.liveMode.mode;
26
28
  }
29
+ /**
30
+ * Message-flow tracing is on at Normal and Detailed only (04-flow-correlation
31
+ * §4). Below it no flow ID is created, validated, captured or propagated. This
32
+ * is the one decision every flow processing point reads.
33
+ */
34
+ function messageFlowTracingEnabled(mode) {
35
+ return contracts_1.MESSAGE_FLOW_MODE_RANK[mode] >= contracts_1.MESSAGE_FLOW_MODE_RANK.normal;
36
+ }
27
37
  function createMessageFlowModeCell(dispatch) {
28
38
  return { mode: dispatch?.diagnostics?.messageFlow ?? 'errors' };
29
39
  }
@@ -53,6 +63,21 @@ function flowIfEnabled(flow, outcome, result, flowId, sourceMeshGeneration) {
53
63
  ? flow
54
64
  : undefined;
55
65
  }
66
+ function traceSessionBindingControlDrop(flow, sourceRid, actorId, packetName, errorReason, error) {
67
+ const point = flowIfEnabled(flow, ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped);
68
+ if (point === undefined)
69
+ return;
70
+ point.trace({
71
+ outcome: ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped,
72
+ surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.StreamSession,
73
+ messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Control,
74
+ sourceRid,
75
+ actorId,
76
+ packetName,
77
+ errorReason,
78
+ ...(0, dispatch_error_details_1.dispatchErrorDetails)(error)
79
+ });
80
+ }
56
81
  class ZLinkMessageFlowTracer {
57
82
  ctx;
58
83
  errorSink;
@@ -100,7 +125,7 @@ class ZLinkMessageFlowTracer {
100
125
  }
101
126
  }
102
127
  flowCreationEnabled() {
103
- return effectiveMessageFlow(this.ctx) !== 'off';
128
+ return messageFlowTracingEnabled(effectiveMessageFlow(this.ctx));
104
129
  }
105
130
  trace(flowInput) {
106
131
  const effectiveMode = effectiveMessageFlow(this.ctx);
@@ -164,12 +189,16 @@ class ZLinkMessageFlowTracer {
164
189
  }
165
190
  publishToLogger(record) {
166
191
  try {
167
- const severityNumber = record.eventId === DISPATCH_ERROR_EVENT_ID ? api_logs_1.SeverityNumber.ERROR : api_logs_1.SeverityNumber.INFO;
192
+ const severity = record.severity === 'warning'
193
+ ? 'WARN'
194
+ : record.eventId === DISPATCH_ERROR_EVENT_ID
195
+ ? 'ERROR'
196
+ : 'INFO';
168
197
  exports.telemetryLogger.emit({
169
198
  eventName: record.eventId,
170
199
  timestamp: record.timestamp,
171
- severityNumber,
172
- severityText: record.eventId === DISPATCH_ERROR_EVENT_ID ? 'ERROR' : 'INFO',
200
+ severityNumber: api_logs_1.SeverityNumber[severity],
201
+ severityText: severity,
173
202
  body: structuredLogBody(record),
174
203
  attributes: structuredLogAttributes(record)
175
204
  });
@@ -205,6 +234,7 @@ class ZLinkMessageFlowTracer {
205
234
  exports.ZLinkMessageFlowTracer = ZLinkMessageFlowTracer;
206
235
  function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
207
236
  return {
237
+ severity: flow.severity,
208
238
  eventId: flow.outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error
209
239
  ? DISPATCH_ERROR_EVENT_ID
210
240
  : MESSAGE_FLOW_EVENT_ID,
@@ -243,7 +273,7 @@ function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
243
273
  function traceAttributes(record) {
244
274
  const attributes = {};
245
275
  for (const [name, value] of Object.entries(record)) {
246
- if (value === undefined || name === 'timestamp')
276
+ if (value === undefined || name === 'timestamp' || name === 'severity')
247
277
  continue;
248
278
  attributes[toSnakeCase(name)] = value instanceof Date ? value.toISOString() : value;
249
279
  }
@@ -20,8 +20,8 @@ export interface ZLinkRuntimeMetricMeshSnapshot {
20
20
  readonly channelName: string;
21
21
  readonly readyMembers: number;
22
22
  }>;
23
- readonly actorCapacity: ZLinkRuntimeMetricCapacity;
24
- readonly spotCapacity: ZLinkRuntimeMetricCapacity;
23
+ readonly actorCapacity?: ZLinkRuntimeMetricCapacity;
24
+ readonly spotCapacity?: ZLinkRuntimeMetricCapacity;
25
25
  readonly spotTypeCapacities: ReadonlyArray<ZLinkRuntimeMetricSpotTypeCapacity>;
26
26
  readonly activation: {
27
27
  readonly active: number;
@@ -286,14 +286,16 @@ class MetricRegistry {
286
286
  }
287
287
  else if (name.startsWith('zlink.object.capacity.')) {
288
288
  const field = metricSuffix(name);
289
- result.observe(capacityValue(snapshot.actorCapacity, field), {
290
- ...mesh,
291
- capacity_scope: 'actor'
292
- });
293
- result.observe(capacityValue(snapshot.spotCapacity, field), {
294
- ...mesh,
295
- capacity_scope: 'spot'
296
- });
289
+ if (snapshot.actorCapacity !== undefined)
290
+ result.observe(capacityValue(snapshot.actorCapacity, field), {
291
+ ...mesh,
292
+ capacity_scope: 'actor'
293
+ });
294
+ if (snapshot.spotCapacity !== undefined)
295
+ result.observe(capacityValue(snapshot.spotCapacity, field), {
296
+ ...mesh,
297
+ capacity_scope: 'spot'
298
+ });
297
299
  }
298
300
  else if (name.startsWith('zlink.spot.type.capacity.')) {
299
301
  const field = metricSuffix(name);
@@ -20,6 +20,7 @@ export declare class ZLinkSpotSerialTurn {
20
20
  private suspendedResolve;
21
21
  private suspendedPromise;
22
22
  private suspendSignaled;
23
+ private yieldUsed;
23
24
  private owner;
24
25
  private frameworkOperationsBlocked;
25
26
  constructor(postResume: (turn: ZLinkSpotSerialTurn, resume: () => void, reject: (reason: unknown) => void) => boolean, executionClaim: ZLinkExecutionBarrierClaim | undefined, yieldAllowed: boolean);
@@ -34,6 +35,7 @@ export declare class ZLinkSpotSerialTurn {
34
35
  blockFrameworkOperations(): void;
35
36
  ensureFrameworkOperationAllowed(): void;
36
37
  resetSuspension(): void;
38
+ admitYield(): void;
37
39
  yieldPromise<T>(pending: Promise<T>): Promise<T>;
38
40
  /** Suspends a turn only for a Framework-owned lifecycle boundary. */
39
41
  yieldFrameworkPromise<T>(pending: Promise<T>): Promise<T>;
@@ -47,14 +49,14 @@ export declare function captureZLinkSpotSerialTurn(executor?: ZLinkSpotSerialTur
47
49
  export declare function currentZLinkSpotSerialSourceId(): unknown;
48
50
  export declare function requireZLinkYieldTurn(capturedTurn?: ZLinkSpotSerialTurn): ZLinkSpotSerialTurn;
49
51
  export interface ZLinkCapturedExecutionTurn {
50
- yieldPromise<T>(pending: Promise<T>): Promise<T>;
52
+ yieldPromise<T>(operation: () => Promise<T>): Promise<T>;
51
53
  post(callback: () => void): void;
52
54
  }
53
55
  export declare function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn | undefined;
54
56
  export declare function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean;
55
57
  export interface ZLinkExecutionBarrierSeal {
56
58
  readonly generation: bigint;
57
- readonly kind: 'close' | 'relocation';
59
+ readonly kind: 'close' | 'relocation' | 'activation';
58
60
  }
59
61
  export interface ZLinkExecutionBarrierClaim {
60
62
  release(): void;
@@ -11,7 +11,6 @@ exports.requireZLinkYieldTurn = requireZLinkYieldTurn;
11
11
  exports.captureZLinkExecutionTurn = captureZLinkExecutionTurn;
12
12
  exports.isCurrentZLinkSpotSerialTurn = isCurrentZLinkSpotSerialTurn;
13
13
  const node_async_hooks_1 = require("node:async_hooks");
14
- const configuration_1 = require("../configuration");
15
14
  const abort_1 = require("../abort");
16
15
  const framework_errors_internal_1 = require("../framework-errors-internal");
17
16
  var state_lane_1 = require("./state-lane");
@@ -36,6 +35,7 @@ class ZLinkSpotSerialTurn {
36
35
  suspendedResolve;
37
36
  suspendedPromise;
38
37
  suspendSignaled = false;
38
+ yieldUsed = false;
39
39
  owner;
40
40
  frameworkOperationsBlocked = false;
41
41
  constructor(postResume, executionClaim, yieldAllowed) {
@@ -79,22 +79,34 @@ class ZLinkSpotSerialTurn {
79
79
  }
80
80
  }
81
81
  resetSuspension() {
82
+ this.yieldUsed = false;
82
83
  this.suspendSignaled = false;
83
84
  this.suspendedResolve = undefined;
84
85
  this.suspendedPromise = undefined;
85
86
  }
86
- async yieldPromise(pending) {
87
- if (!this.yieldAllowed) {
88
- throw new configuration_1.ZLinkConfigurationException('yield requires a SpotWide User Spot or Instance Spot application handler.');
87
+ admitYield() {
88
+ const current = spotSerialTurnStorage.getStore();
89
+ if (current?.turn !== this ||
90
+ !this.yieldAllowed ||
91
+ !current.executor.isActiveTurn(this, current.turnId) ||
92
+ this.yieldUsed) {
93
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'Yield requires the current SpotWide application turn and may be used only once per turn.');
89
94
  }
95
+ this.yieldUsed = true;
96
+ }
97
+ async yieldPromise(pending) {
98
+ this.admitYield();
90
99
  return await this.yieldFrameworkPromise(pending);
91
100
  }
92
101
  /** Suspends a turn only for a Framework-owned lifecycle boundary. */
93
102
  async yieldFrameworkPromise(pending) {
94
103
  this.signalSuspended();
95
- const result = await pending;
96
- await this.awaitResumePermit();
97
- return result;
104
+ try {
105
+ return await pending;
106
+ }
107
+ finally {
108
+ await this.awaitResumePermit();
109
+ }
98
110
  }
99
111
  async resumeOwnerUntilNextYield() {
100
112
  const owner = this.owner;
@@ -146,9 +158,10 @@ function currentZLinkSpotSerialSourceId() {
146
158
  }
147
159
  function requireZLinkYieldTurn(capturedTurn) {
148
160
  const turn = capturedTurn ?? captureZLinkSpotSerialTurn();
149
- if (turn === undefined || !turn.yieldAllowed) {
150
- throw new configuration_1.ZLinkConfigurationException('yield requires a SpotWide User Spot or Instance Spot application handler.');
161
+ if (turn === undefined) {
162
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'Yield requires a current SpotWide application turn.');
151
163
  }
164
+ turn.admitYield();
152
165
  return turn;
153
166
  }
154
167
  function captureZLinkExecutionTurn() {
@@ -157,7 +170,17 @@ function captureZLinkExecutionTurn() {
157
170
  return undefined;
158
171
  }
159
172
  return {
160
- yieldPromise: (pending) => current.turn.yieldPromise(pending),
173
+ yieldPromise: (operation) => {
174
+ const turn = requireZLinkYieldTurn(current.turn);
175
+ let pending;
176
+ try {
177
+ pending = operation();
178
+ }
179
+ catch (error) {
180
+ pending = Promise.reject(error);
181
+ }
182
+ return turn.yieldFrameworkPromise(pending);
183
+ },
161
184
  post: (callback) => {
162
185
  void current.executor.post(callback);
163
186
  }
@@ -1,5 +1,8 @@
1
1
  export type ZLinkSerialWorkLane = 'application' | 'lifecycle';
2
2
  export interface ZLinkSerialWorkOptions {
3
+ readonly onAdmitted?: () => void;
4
+ /** Transfers an unstarted durable record out of this FIFO in the owner turn. */
5
+ readonly onWithdrawable?: (withdraw: () => boolean) => void;
3
6
  readonly lane?: ZLinkSerialWorkLane;
4
7
  readonly payloadBytes?: number;
5
8
  readonly metadataBytes?: number;
@@ -66,7 +69,9 @@ export declare class ZLinkSerialExecutionQueue {
66
69
  submitPreAdmitted<T>(operation: () => Promise<T> | T, options?: ZLinkSerialWorkOptions, context?: unknown): Promise<T>;
67
70
  /** Holds lifecycle FIFO through an operation result while its application turns can run. */
68
71
  submitLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
72
+ get retainsApplicationForLifecycle(): boolean;
69
73
  visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
74
+ get hasPendingDurableApplication(): boolean;
70
75
  get hasPendingWork(): boolean;
71
76
  whenIdle(): Promise<void>;
72
77
  /** Stops new submissions while allowing the accepted FIFO to finish. */