@zlink-systems/framework 0.21.0 → 0.23.0

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 (516) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -30,20 +30,28 @@ export enum ZLinkStreamCodec {
30
30
 
31
31
  export function streamCodecContentType(codec: ZLinkStreamCodec): string {
32
32
  switch (codec) {
33
- case ZLinkStreamCodec.Json: return 'application/json';
34
- case ZLinkStreamCodec.MessagePack: return 'application/x-msgpack';
35
- case ZLinkStreamCodec.Protobuf: return 'application/x-protobuf';
36
- case ZLinkStreamCodec.Raw: return 'application/octet-stream';
33
+ case ZLinkStreamCodec.Json:
34
+ return 'application/json';
35
+ case ZLinkStreamCodec.MessagePack:
36
+ return 'application/x-msgpack';
37
+ case ZLinkStreamCodec.Protobuf:
38
+ return 'application/x-protobuf';
39
+ case ZLinkStreamCodec.Raw:
40
+ return 'application/octet-stream';
37
41
  }
38
42
  throw new TypeError(`Unsupported STREAM codec '${codec}'.`);
39
43
  }
40
44
 
41
45
  export function streamCodecForContentType(contentType: string): ZLinkStreamCodec {
42
46
  switch (contentType) {
43
- case 'application/json': return ZLinkStreamCodec.Json;
44
- case 'application/x-msgpack': return ZLinkStreamCodec.MessagePack;
45
- case 'application/x-protobuf': return ZLinkStreamCodec.Protobuf;
46
- case 'application/octet-stream': return ZLinkStreamCodec.Raw;
47
+ case 'application/json':
48
+ return ZLinkStreamCodec.Json;
49
+ case 'application/x-msgpack':
50
+ return ZLinkStreamCodec.MessagePack;
51
+ case 'application/x-protobuf':
52
+ return ZLinkStreamCodec.Protobuf;
53
+ case 'application/octet-stream':
54
+ return ZLinkStreamCodec.Raw;
47
55
  }
48
56
  throw new TypeError(`Unsupported STREAM content type '${contentType}'.`);
49
57
  }
@@ -62,7 +70,8 @@ export enum ZLinkStreamHeaderFlags {
62
70
  HasMetadata = 0x02,
63
71
  PayloadCompressed = 0x04,
64
72
  HasCorrelationId = 0x08,
65
- HasFlowId = 0x10
73
+ HasFlowId = 0x10,
74
+ HasActorSlot = 0x20
66
75
  }
67
76
 
68
77
  export enum ZLinkStreamCloseReasonCode {
@@ -87,18 +96,21 @@ export interface ZLinkStreamFrameHeader {
87
96
  readonly correlationId?: string;
88
97
  readonly flowId?: string;
89
98
  readonly flowOrigin?: ZLinkFlowOrigin;
99
+ readonly actorSlot?: number;
90
100
  }
91
101
 
92
102
  export type ZLinkStreamReplyMessageKind =
93
- | ZLinkStreamMessageKind.Response
94
- | ZLinkStreamMessageKind.Error;
103
+ ZLinkStreamMessageKind.Response | ZLinkStreamMessageKind.Error;
95
104
 
96
105
  export interface ZLinkStreamFrame {
97
106
  readonly header: Uint8Array;
98
107
  readonly payload: Uint8Array;
99
108
  }
100
109
 
101
- export function resolvePacketName(message: unknown, explicitPacketName: string | undefined): string {
110
+ export function resolvePacketName(
111
+ message: unknown,
112
+ explicitPacketName: string | undefined
113
+ ): string {
102
114
  const packetName = resolveFrameworkPacketName(message, explicitPacketName, 'Stream');
103
115
  if (packetName.trim().length === 0) {
104
116
  throw new Error('Stream packet name must not be empty.');
@@ -117,13 +129,38 @@ export function encodeStreamFrame(header: ZLinkStreamFrameHeader, payload: Uint8
117
129
  }
118
130
 
119
131
  export function encodeStreamControlFrame(name: string): Uint8Array {
120
- return encodeStreamFrame({
121
- kind: ZLinkStreamMessageKind.Control,
122
- codec: ZLinkStreamCodec.Raw,
123
- flags: ZLinkStreamHeaderFlags.None,
124
- name,
125
- metadata: EMPTY_STREAM_METADATA
126
- }, new Uint8Array());
132
+ return encodeStreamFrame(
133
+ {
134
+ kind: ZLinkStreamMessageKind.Control,
135
+ codec: ZLinkStreamCodec.Raw,
136
+ flags: ZLinkStreamHeaderFlags.None,
137
+ name,
138
+ metadata: EMPTY_STREAM_METADATA
139
+ },
140
+ new Uint8Array()
141
+ );
142
+ }
143
+
144
+ export function encodeActorBoundFrame(actorSlot: number, actorId: string): Uint8Array {
145
+ const actorIdBytes = utf8Encode(actorId);
146
+ if (actorIdBytes.length < 1 || actorIdBytes.length > 0xff) {
147
+ throw new Error('Actor id length is invalid for a STREAM binding control packet.');
148
+ }
149
+ const payload = new Uint8Array(4 + actorIdBytes.length);
150
+ payload[0] = 1;
151
+ payload[1] = actorSlot >>> 8;
152
+ payload[2] = actorSlot & 0xff;
153
+ payload[3] = actorIdBytes.length;
154
+ payload.set(actorIdBytes, 4);
155
+ return encodeStreamFrame(controlHeader('$zlink.actor.bound'), payload);
156
+ }
157
+
158
+ export function encodeActorUnboundFrame(actorSlot: number): Uint8Array {
159
+ const payload = new Uint8Array(3);
160
+ payload[0] = 1;
161
+ payload[1] = actorSlot >>> 8;
162
+ payload[2] = actorSlot & 0xff;
163
+ return encodeStreamFrame(controlHeader('$zlink.actor.unbound'), payload);
127
164
  }
128
165
 
129
166
  export function encodeSessionClosingFrame(
@@ -138,13 +175,16 @@ export function encodeSessionClosingFrame(
138
175
  payload[2] = diagnosticBytes.length >>> 8;
139
176
  payload[3] = diagnosticBytes.length & 0xff;
140
177
  payload.set(diagnosticBytes, 4);
141
- return encodeStreamFrame({
142
- kind: ZLinkStreamMessageKind.Control,
143
- codec: ZLinkStreamCodec.Raw,
144
- flags: ZLinkStreamHeaderFlags.None,
145
- name: 'session-closing',
146
- metadata: new Map()
147
- }, payload);
178
+ return encodeStreamFrame(
179
+ {
180
+ kind: ZLinkStreamMessageKind.Control,
181
+ codec: ZLinkStreamCodec.Raw,
182
+ flags: ZLinkStreamHeaderFlags.None,
183
+ name: 'session-closing',
184
+ metadata: new Map()
185
+ },
186
+ payload
187
+ );
148
188
  }
149
189
 
150
190
  export function decodeStreamFrame(frame: Uint8Array): ZLinkStreamFrame {
@@ -160,8 +200,14 @@ export function encodeStreamHeader(header: ZLinkStreamFrameHeader): Uint8Array {
160
200
  const hasMetadata = header.metadata.size > 0;
161
201
  const hasCorrelation = header.correlationId !== undefined && header.correlationId.length > 0;
162
202
  const hasFlow = header.flowId !== undefined || header.flowOrigin !== undefined;
163
- if (header.kind === ZLinkStreamMessageKind.Control && (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow)) {
164
- throw new Error('Control packet must not contain a request sequence, metadata, correlation id, or flow id.');
203
+ const hasActorSlot = header.actorSlot !== undefined;
204
+ if (
205
+ header.kind === ZLinkStreamMessageKind.Control &&
206
+ (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow || hasActorSlot)
207
+ ) {
208
+ throw new Error(
209
+ 'Control packet must not contain a request sequence, metadata, correlation id, or flow id.'
210
+ );
165
211
  }
166
212
  // Explicit construction: this runs for every outbound frame, so avoid a
167
213
  // per-message spread of the whole header.
@@ -174,14 +220,12 @@ export function encodeStreamHeader(header: ZLinkStreamFrameHeader): Uint8Array {
174
220
  metadata: header.metadata,
175
221
  correlationId: header.correlationId,
176
222
  flowId: header.flowId,
177
- flowOrigin: encodeFlowOrigin(header.flowOrigin)
223
+ flowOrigin: encodeFlowOrigin(header.flowOrigin),
224
+ actorSlot: header.actorSlot
178
225
  });
179
226
  }
180
227
 
181
- export function decodeStreamHeader(
182
- header: Uint8Array,
183
- flowEnabled = true
184
- ): ZLinkStreamFrameHeader {
228
+ export function decodeStreamHeader(header: Uint8Array, flowEnabled = true): ZLinkStreamFrameHeader {
185
229
  const decoded = decodeStreamWireHeader(header, undefined, flowEnabled);
186
230
  const kind = decoded.kind as ZLinkStreamMessageKind;
187
231
  const flags = decoded.flags as ZLinkStreamHeaderFlags;
@@ -189,26 +233,35 @@ export function decodeStreamHeader(
189
233
  const hasMetadata = (flags & ZLinkStreamHeaderFlags.HasMetadata) !== 0;
190
234
  const hasCorrelation = (flags & ZLinkStreamHeaderFlags.HasCorrelationId) !== 0;
191
235
  const hasFlow = (flags & ZLinkStreamHeaderFlags.HasFlowId) !== 0;
192
- if (kind === ZLinkStreamMessageKind.Control && (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow)) {
193
- throw new Error('Control packet must not contain a request sequence, metadata, correlation id, or flow id.');
236
+ const hasActorSlot = (flags & ZLinkStreamHeaderFlags.HasActorSlot) !== 0;
237
+ if (
238
+ kind === ZLinkStreamMessageKind.Control &&
239
+ (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow || hasActorSlot)
240
+ ) {
241
+ throw new Error(
242
+ 'Control packet must not contain a request sequence, metadata, correlation id, or flow id.'
243
+ );
194
244
  }
195
245
  const metadata = publicStreamMetadata(decoded.metadata);
196
246
  return {
197
247
  kind,
198
248
  codec: decoded.codec as ZLinkStreamCodec,
199
- flags: (metadata.size === 0
200
- ? flags & ~ZLinkStreamHeaderFlags.HasMetadata
201
- : flags) & (flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
249
+ flags:
250
+ (metadata.size === 0 ? flags & ~ZLinkStreamHeaderFlags.HasMetadata : flags) &
251
+ (flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
202
252
  requestSeq: decoded.requestSeq,
203
253
  name: decoded.name,
204
254
  metadata,
205
255
  correlationId: decoded.correlationId,
206
256
  flowId: decoded.flowId,
207
- flowOrigin: decodeFlowOrigin(decoded.flowOrigin)
257
+ flowOrigin: decodeFlowOrigin(decoded.flowOrigin),
258
+ actorSlot: decoded.actorSlot
208
259
  };
209
260
  }
210
261
 
211
- export function actorRequestDeadlineMetadata(deadlineUnixMs: number | undefined): ReadonlyMap<string, string> {
262
+ export function actorRequestDeadlineMetadata(
263
+ deadlineUnixMs: number | undefined
264
+ ): ReadonlyMap<string, string> {
212
265
  return deadlineUnixMs === undefined
213
266
  ? EMPTY_STREAM_METADATA
214
267
  : new Map([[actorRequestDeadlineMetadataKey, String(deadlineUnixMs)]]);
@@ -250,18 +303,31 @@ export function createStreamReplyHeader(
250
303
  // observation-only and is not copied into the reply when tracing is Off
251
304
  // (spec 27 §4, §7).
252
305
  correlationId: requestHeader.correlationId,
253
- ...(includeFlow
254
- ? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin }
255
- : {})
306
+ actorSlot: requestHeader.actorSlot,
307
+ ...(includeFlow ? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin } : {})
308
+ };
309
+ }
310
+
311
+ function controlHeader(name: string): ZLinkStreamFrameHeader {
312
+ return {
313
+ kind: ZLinkStreamMessageKind.Control,
314
+ codec: ZLinkStreamCodec.Raw,
315
+ flags: ZLinkStreamHeaderFlags.None,
316
+ name,
317
+ metadata: EMPTY_STREAM_METADATA
256
318
  };
257
319
  }
258
320
 
259
321
  function encodeFlowOrigin(origin: ZLinkFlowOrigin | undefined): number | undefined {
260
- return origin === undefined ? undefined : ({ Inbound: 1, Timer: 2, Application: 3, Lifecycle: 4 } as const)[origin];
322
+ return origin === undefined
323
+ ? undefined
324
+ : ({ Inbound: 1, Timer: 2, Application: 3, Lifecycle: 4 } as const)[origin];
261
325
  }
262
326
 
263
327
  function decodeFlowOrigin(origin: number | undefined): ZLinkFlowOrigin | undefined {
264
- return origin === undefined ? undefined : ({ 1: 'Inbound', 2: 'Timer', 3: 'Application', 4: 'Lifecycle' } as const)[origin];
328
+ return origin === undefined
329
+ ? undefined
330
+ : ({ 1: 'Inbound', 2: 'Timer', 3: 'Application', 4: 'Lifecycle' } as const)[origin];
265
331
  }
266
332
 
267
333
  export function messageToBytes(message: Message): Uint8Array {
@@ -286,6 +352,9 @@ export function lz4Pickle(payload: Uint8Array): Uint8Array {
286
352
  return lz4PickleUncompressed(payload);
287
353
  }
288
354
 
289
- export function lz4Unpickle(payload: Uint8Array, maxDecompressedSize = defaultMaxDecompressedPayloadSize): Uint8Array {
355
+ export function lz4Unpickle(
356
+ payload: Uint8Array,
357
+ maxDecompressedSize = defaultMaxDecompressedPayloadSize
358
+ ): Uint8Array {
290
359
  return lz4UnpicklePayload(payload, maxDecompressedSize);
291
360
  }
@@ -1,9 +1,8 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
2
1
  import {
3
- ActorRef,
4
- ZLinkActor,
5
- ZLinkFrameworkException
6
- } from '../../contracts';
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException
4
+ } from '../framework-errors-internal';
5
+ import { ActorRef, ZLinkActor, ZLinkFrameworkException } from '../../contracts';
7
6
  import { throwIfAborted } from '../abort';
8
7
  import { routingIdsEqual } from '../routing-id';
9
8
  import type { ZLinkRuntimeMetrics } from '../diagnostics';
@@ -12,13 +11,8 @@ import {
12
11
  type ZLinkActorSessionAuthorityFence
13
12
  } from './actor-session-binding-registry';
14
13
  import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
15
- import {
16
- ZLinkManagedStream
17
- } from './managed-stream';
18
- import {
19
- DefaultZLinkSessionActor,
20
- DefaultZLinkSessionContext
21
- } from './session-context';
14
+ import { ZLinkManagedStream } from './managed-stream';
15
+ import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
22
16
 
23
17
  export interface ZLinkSessionActorCoordinatorOptions {
24
18
  readonly actorBindTimeoutMs?: number;
@@ -27,9 +21,11 @@ export interface ZLinkSessionActorCoordinatorOptions {
27
21
  actorId: string,
28
22
  signal?: AbortSignal
29
23
  ) => Promise<ZLinkActorSessionAuthorityFence | undefined>;
30
- readonly nativeActorNodeProvider?: () => {
31
- status(): { readonly routingId: unknown };
32
- } | undefined;
24
+ readonly nativeActorNodeProvider?: () =>
25
+ | {
26
+ status(): { readonly routingId: unknown };
27
+ }
28
+ | undefined;
33
29
  readonly nativeActorMeshNameProvider?: () => string | undefined;
34
30
  readonly confirmRemoteActorSessionBinding?: (
35
31
  actor: ActorRef,
@@ -37,15 +33,20 @@ export interface ZLinkSessionActorCoordinatorOptions {
37
33
  signal?: AbortSignal,
38
34
  options?: { readonly waitForAcknowledgement?: boolean }
39
35
  ) => Promise<void>;
40
- readonly errorSink?: () => {
41
- reportRuntimeTaskException(taskName: string, error: unknown): void;
42
- } | undefined;
36
+ readonly errorSink?: () =>
37
+ | {
38
+ reportRuntimeTaskException(taskName: string, error: unknown): void;
39
+ }
40
+ | undefined;
43
41
  readonly metrics?: ZLinkRuntimeMetrics;
44
42
  }
45
43
 
46
44
  export class ZLinkSessionActorCoordinator {
47
45
  constructor(
48
- private readonly routes: ZLinkActorSessionBindingRegistry<DefaultZLinkSessionContext, DefaultZLinkSessionActor>,
46
+ private readonly routes: ZLinkActorSessionBindingRegistry<
47
+ DefaultZLinkSessionContext,
48
+ DefaultZLinkSessionActor
49
+ >,
49
50
  private readonly sessionActorRuntime: ConstructorParameters<typeof DefaultZLinkSessionActor>[0],
50
51
  private readonly options: ZLinkSessionActorCoordinatorOptions = {},
51
52
  private readonly lifecycle = new ZLinkActorSessionLifecycleCoordinator()
@@ -59,7 +60,9 @@ export class ZLinkSessionActorCoordinator {
59
60
  const actorRef = isActorRefLike(actorOrRef)
60
61
  ? normalizeActorRef(actorOrRef, this.options.nativeActorMeshNameProvider?.())
61
62
  : this.resolveActorRef(actorOrRef as ZLinkActor);
62
- return await this.lifecycle.run(actorRef.actorId, async () => this.replaceBinding(context, actorRef, signal));
63
+ return await this.lifecycle.run(actorRef.actorId, async () =>
64
+ this.replaceBinding(context, actorRef, signal)
65
+ );
63
66
  }
64
67
 
65
68
  private async replaceBinding(
@@ -101,13 +104,12 @@ export class ZLinkSessionActorCoordinator {
101
104
 
102
105
  const previous = await this.routes.route(actorRef.actorId);
103
106
  const sameIncarnation =
104
- previous !== undefined
105
- && previous.context === context
106
- && previous.actor.ref.actorId === actorRef.actorId
107
- && BigInt(previous.actor.ref.objectGeneration) === BigInt(actorRef.objectGeneration);
107
+ previous !== undefined &&
108
+ previous.context === context &&
109
+ previous.actor.ref.actorId === actorRef.actorId &&
110
+ BigInt(previous.actor.ref.objectGeneration) === BigInt(actorRef.objectGeneration);
108
111
  const samePhysicalBinding = sameIncarnation && sameActorRef(previous!.actor.ref, actorRef);
109
- const reuseActor =
110
- sameIncarnation ? previous!.actor : undefined;
112
+ const reuseActor = sameIncarnation ? previous!.actor : undefined;
111
113
  if (reuseActor !== undefined) {
112
114
  // A repeated bind from the same physical session is idempotent. A route
113
115
  // refresh for the same actor incarnation still submits the native bind,
@@ -127,10 +129,10 @@ export class ZLinkSessionActorCoordinator {
127
129
  : undefined,
128
130
  previous?.actor.ref
129
131
  );
130
- const sessionActor = reuseActor
131
- ?? new DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
132
+ const sessionActor =
133
+ reuseActor ??
134
+ new DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
132
135
  const sessionIdentity = String(this.actorBindingRoutingId(context));
133
- sessionActor.updateRef(boundActorRef);
134
136
  if (previous === undefined) {
135
137
  if (releaseSeal !== undefined) {
136
138
  throw createInternalFrameworkException(
@@ -139,7 +141,14 @@ export class ZLinkSessionActorCoordinator {
139
141
  true
140
142
  );
141
143
  }
142
- await this.routes.bind(context, sessionActor, bindingToken, authorityFence, sessionIdentity);
144
+ await this.routes.bind(
145
+ context,
146
+ sessionActor,
147
+ bindingToken,
148
+ authorityFence,
149
+ sessionIdentity,
150
+ () => sessionActor.updateRef(boundActorRef)
151
+ );
143
152
  } else if (releaseSeal !== undefined) {
144
153
  await this.routes.replaceAndReleaseSeal(
145
154
  previous,
@@ -148,7 +157,8 @@ export class ZLinkSessionActorCoordinator {
148
157
  bindingToken,
149
158
  releaseSeal.sealId,
150
159
  authorityFence,
151
- sessionIdentity
160
+ sessionIdentity,
161
+ () => sessionActor.updateRef(boundActorRef)
152
162
  );
153
163
  } else {
154
164
  await this.routes.replace(
@@ -157,12 +167,16 @@ export class ZLinkSessionActorCoordinator {
157
167
  sessionActor,
158
168
  bindingToken,
159
169
  authorityFence,
160
- sessionIdentity
170
+ sessionIdentity,
171
+ () => sessionActor.updateRef(boundActorRef)
161
172
  );
162
173
  }
163
- if (confirmRemoteSessionBinding !== false && this.options.confirmRemoteActorSessionBinding !== undefined) {
164
- const waitForAcknowledgement = previous === undefined
165
- && confirmRemoteSessionBinding !== 'send';
174
+ if (
175
+ confirmRemoteSessionBinding !== false &&
176
+ this.options.confirmRemoteActorSessionBinding !== undefined
177
+ ) {
178
+ const waitForAcknowledgement =
179
+ previous === undefined && confirmRemoteSessionBinding !== 'send';
166
180
  const confirmation = this.options.confirmRemoteActorSessionBinding(
167
181
  boundActorRef,
168
182
  this.actorBindingRoutingId(context),
@@ -174,10 +188,9 @@ export class ZLinkSessionActorCoordinator {
174
188
  // its failure is bounded diagnostics rather than a rollback. The
175
189
  // relay retries independently and reports the typed failure through
176
190
  // the runtime error sink instead of silently discarding it.
177
- this.options.errorSink?.()?.reportRuntimeTaskException(
178
- 'remote session binding confirmation',
179
- error
180
- );
191
+ this.options
192
+ .errorSink?.()
193
+ ?.reportRuntimeTaskException('remote session binding confirmation', error);
181
194
  };
182
195
  if (waitForAcknowledgement) {
183
196
  try {
@@ -227,11 +240,11 @@ export class ZLinkSessionActorCoordinator {
227
240
  readonly ownerLeaseGeneration?: bigint;
228
241
  readonly ownerNodeGeneration?: bigint;
229
242
  };
230
- if (internal.ownershipGeneration !== undefined
231
- && internal.ownerLeaseGeneration !== undefined) {
232
- const resolved = internal.ownerNodeGeneration === undefined
233
- ? await this.options.actorAuthorityFenceResolver?.(actorRef.actorId, signal)
234
- : undefined;
243
+ if (internal.ownershipGeneration !== undefined && internal.ownerLeaseGeneration !== undefined) {
244
+ const resolved =
245
+ internal.ownerNodeGeneration === undefined
246
+ ? await this.options.actorAuthorityFenceResolver?.(actorRef.actorId, signal)
247
+ : undefined;
235
248
  return {
236
249
  authorityOwnerGeneration: internal.ownershipGeneration,
237
250
  ownerLeaseGeneration: internal.ownerLeaseGeneration,
@@ -331,11 +344,10 @@ export class ZLinkSessionActorCoordinator {
331
344
  requireSameIncarnation(route.actor.ref, normalizedActorRef);
332
345
  if (routingIdsEqual(route.actor.ref.nodeRid, normalizedActorRef.nodeRid)) {
333
346
  const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
334
- if (options.releaseSeal !== undefined
335
- && !await this.routes.validateSeal(
336
- normalizedActorRef.actorId,
337
- options.releaseSeal.sealId
338
- )) {
347
+ if (
348
+ options.releaseSeal !== undefined &&
349
+ !(await this.routes.validateSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))
350
+ ) {
339
351
  throw createInternalFrameworkException(
340
352
  ZLinkFrameworkInternalErrorKind.ActorLocationStale,
341
353
  `Actor '${normalizedActorRef.actorId}' route switch did not match its relocation seal.`,
@@ -346,11 +358,10 @@ export class ZLinkSessionActorCoordinator {
346
358
  if (authorityFence !== undefined) {
347
359
  await this.routes.updateAuthorityFence(normalizedActorRef.actorId, authorityFence);
348
360
  }
349
- if (options.releaseSeal !== undefined
350
- && !await this.routes.abortSeal(
351
- normalizedActorRef.actorId,
352
- options.releaseSeal.sealId
353
- )) {
361
+ if (
362
+ options.releaseSeal !== undefined &&
363
+ !(await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))
364
+ ) {
354
365
  throw createInternalFrameworkException(
355
366
  ZLinkFrameworkInternalErrorKind.ActorLocationStale,
356
367
  `Actor '${normalizedActorRef.actorId}' route switch lost its relocation seal.`,
@@ -379,10 +390,10 @@ export class ZLinkSessionActorCoordinator {
379
390
  throwIfAborted(signal);
380
391
  const route = await this.routes.route(actorRef.actorId);
381
392
  if (
382
- route === undefined
383
- || !sameActorRef(route.actor.ref, actorRef)
384
- || !routingIdsEqual(route.sessionIdentity, sessionRid)
385
- || bindingGenerationOf(route.actor.ref) !== bindingGeneration
393
+ route === undefined ||
394
+ !sameActorRef(route.actor.ref, actorRef) ||
395
+ !routingIdsEqual(route.sessionIdentity, sessionRid) ||
396
+ bindingGenerationOf(route.actor.ref) !== bindingGeneration
386
397
  ) {
387
398
  return false;
388
399
  }
@@ -394,26 +405,29 @@ export class ZLinkSessionActorCoordinator {
394
405
  });
395
406
  }
396
407
 
397
- async authorityFence(actorId: string): Promise<{
398
- readonly authorityOwnerGeneration: bigint;
399
- readonly ownerLeaseGeneration: bigint;
400
- } | undefined> {
408
+ async authorityFence(actorId: string): Promise<
409
+ | {
410
+ readonly authorityOwnerGeneration: bigint;
411
+ readonly ownerLeaseGeneration: bigint;
412
+ }
413
+ | undefined
414
+ > {
401
415
  return (await this.routes.route(actorId))?.authorityFence;
402
416
  }
403
417
 
404
- async sessionRouteFence(actorId: string): Promise<{
405
- readonly actor: ActorRef;
406
- readonly sessionRid: ActorRef['nodeRid'];
407
- readonly bindingGeneration: bigint;
408
- } | undefined> {
418
+ async sessionRouteFence(actorId: string): Promise<
419
+ | {
420
+ readonly actor: ActorRef;
421
+ readonly sessionRid: ActorRef['nodeRid'];
422
+ readonly bindingGeneration: bigint;
423
+ }
424
+ | undefined
425
+ > {
409
426
  const route = await this.routes.route(actorId);
410
427
  const sessionRid = route?.sessionIdentity;
411
- const actor = route?.actor.ref as (ActorRef & { readonly bindingGeneration?: bigint }) | undefined;
412
- if (
413
- route === undefined
414
- || sessionRid === undefined
415
- || actor?.bindingGeneration === undefined
416
- ) {
428
+ const actor = route?.actor.ref as
429
+ (ActorRef & { readonly bindingGeneration?: bigint }) | undefined;
430
+ if (route === undefined || sessionRid === undefined || actor?.bindingGeneration === undefined) {
417
431
  return undefined;
418
432
  }
419
433
  return {
@@ -468,9 +482,8 @@ export class ZLinkSessionActorCoordinator {
468
482
  private actorBindingRoutingId(context: DefaultZLinkSessionContext): ActorRef['nodeRid'] {
469
483
  return context.stream instanceof ZLinkManagedStream
470
484
  ? context.stream.actorBindingRoutingId
471
- : context.routingId as ActorRef['nodeRid'];
485
+ : (context.routingId as ActorRef['nodeRid']);
472
486
  }
473
-
474
487
  }
475
488
 
476
489
  function withBindingGeneration(
@@ -480,9 +493,8 @@ function withBindingGeneration(
480
493
  ): ActorRef {
481
494
  const input = actorRef as ActorRef & { readonly bindingGeneration?: bigint };
482
495
  const previous = previousRef as (ActorRef & { readonly bindingGeneration?: bigint }) | undefined;
483
- const bindingGeneration = nativeBindingGeneration
484
- ?? input.bindingGeneration
485
- ?? previous?.bindingGeneration;
496
+ const bindingGeneration =
497
+ nativeBindingGeneration ?? input.bindingGeneration ?? previous?.bindingGeneration;
486
498
  if (bindingGeneration === undefined) {
487
499
  return actorRef;
488
500
  }
@@ -518,10 +530,12 @@ function preserveInternalActorRefField(
518
530
  source: ActorRef,
519
531
  field: 'ownershipGeneration' | 'ownerLeaseGeneration'
520
532
  ): void {
521
- const value = (source as ActorRef & {
522
- readonly ownershipGeneration?: bigint;
523
- readonly ownerLeaseGeneration?: bigint;
524
- })[field];
533
+ const value = (
534
+ source as ActorRef & {
535
+ readonly ownershipGeneration?: bigint;
536
+ readonly ownerLeaseGeneration?: bigint;
537
+ }
538
+ )[field];
525
539
  if (value === undefined) return;
526
540
  Object.defineProperty(target, field, {
527
541
  configurable: false,
@@ -540,10 +554,10 @@ function isActorRefLike(
540
554
  value: ZLinkActor | ActorRef | CompatibleActorRef
541
555
  ): value is CompatibleActorRef {
542
556
  return (
543
- typeof value === 'object'
544
- && 'nodeRid' in value
545
- && 'actorId' in value
546
- && ('objectGeneration' in value || 'generation' in value)
557
+ typeof value === 'object' &&
558
+ 'nodeRid' in value &&
559
+ 'actorId' in value &&
560
+ ('objectGeneration' in value || 'generation' in value)
547
561
  );
548
562
  }
549
563
 
@@ -584,22 +598,24 @@ function createBindingToken(): string {
584
598
  }
585
599
 
586
600
  function sameActorRef(left: ActorRef, right: ActorRef): boolean {
587
- return routingIdsEqual(left.nodeRid, right.nodeRid)
588
- && left.actorId === right.actorId
589
- && BigInt(left.objectGeneration) === BigInt(right.objectGeneration);
601
+ return (
602
+ routingIdsEqual(left.nodeRid, right.nodeRid) &&
603
+ left.actorId === right.actorId &&
604
+ BigInt(left.objectGeneration) === BigInt(right.objectGeneration)
605
+ );
590
606
  }
591
607
 
592
608
  function requireSameIncarnation(current: ActorRef, updated: ActorRef): void {
593
609
  if (
594
- current.actorId === updated.actorId
595
- && BigInt(current.objectGeneration) === BigInt(updated.objectGeneration)
610
+ current.actorId === updated.actorId &&
611
+ BigInt(current.objectGeneration) === BigInt(updated.objectGeneration)
596
612
  ) {
597
613
  return;
598
614
  }
599
615
  throw createInternalFrameworkException(
600
616
  ZLinkFrameworkInternalErrorKind.ActorLocationStale,
601
- `Actor '${updated.actorId}' route update cannot replace object generation `
602
- + `${String(current.objectGeneration)} with ${String(updated.objectGeneration)}.`,
617
+ `Actor '${updated.actorId}' route update cannot replace object generation ` +
618
+ `${String(current.objectGeneration)} with ${String(updated.objectGeneration)}.`,
603
619
  true
604
620
  );
605
621
  }
@@ -5,9 +5,7 @@ import type {
5
5
  ZLinkSessionSendCall
6
6
  } from '../../contracts';
7
7
  import type { ZLinkSubmitResult } from '../messaging/submission-result';
8
- import {
9
- requireOneWayCompletion
10
- } from '../messaging/submission-result';
8
+ import { requireOneWayCompletion } from '../messaging/submission-result';
11
9
  import type { Message } from '../../contracts/Common/Message';
12
10
  import { throwIfAborted } from '../abort';
13
11
  import { ZLinkConfigurationException } from '../configuration';
@@ -160,11 +158,7 @@ export class DefaultZLinkSessionSendCall implements ZLinkSessionSendCall {
160
158
  this.message
161
159
  );
162
160
  try {
163
- const result = await this.context.stream.submitRaw(
164
- message,
165
- signal,
166
- this.selectedTimeoutMs
167
- );
161
+ const result = await this.context.stream.submitRaw(message, signal, this.selectedTimeoutMs);
168
162
  requireOneWayCompletion(result, 'STREAM session send');
169
163
  this.context.traceFrameWritten?.(ZLinkStreamMessageKind.Send, packetName, undefined);
170
164
  } finally {