@zlink-systems/framework 0.21.0 → 0.22.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 (487) 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/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -1,15 +1,11 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException, internalFrameworkErrorKind } from '../framework-errors-internal';
2
- import type {
3
- ActorRef,
4
- ZLinkActor,
5
- ZLinkMessageSerializer,
6
- ZLinkSpot
7
- } from '../../contracts';
8
- import type { Message } from '../../contracts/Common/Message';
9
1
  import {
10
- ZLinkFrameworkException,
11
- zlinkMessageMetadata
12
- } from '../../contracts';
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException,
4
+ internalFrameworkErrorKind
5
+ } from '../framework-errors-internal';
6
+ import type { ActorRef, ZLinkActor, ZLinkMessageSerializer, ZLinkSpot } from '../../contracts';
7
+ import type { Message } from '../../contracts/Common/Message';
8
+ import { ZLinkFrameworkException, zlinkMessageMetadata } from '../../contracts';
13
9
  import {
14
10
  ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
15
11
  ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
@@ -96,9 +92,10 @@ interface ZLinkSpotActorPacketDispatchOptions {
96
92
  readonly actorLeft?: (actorId: string) => boolean;
97
93
  readonly routeBeforeLocal?: (
98
94
  delivery: ZLinkActorPacketDelivery
99
- ) => Promise<{ readonly handled: boolean; readonly response?: unknown } | undefined> |
100
- { readonly handled: boolean; readonly response?: unknown } |
101
- undefined;
95
+ ) =>
96
+ | Promise<{ readonly handled: boolean; readonly response?: unknown } | undefined>
97
+ | { readonly handled: boolean; readonly response?: unknown }
98
+ | undefined;
102
99
  readonly onRemoteBoundSessionTarget?: (
103
100
  actorId: string,
104
101
  target: ZLinkRemoteBoundSessionTarget | undefined
@@ -170,85 +167,85 @@ export class ZLinkSpotActorPacketDispatch {
170
167
  let requestDeadlineUnixMs: number | undefined;
171
168
  try {
172
169
  header = decodeStreamHeader(messageToBytes(parts[0]), flowEnabled);
173
- requestDeadlineUnixMs = header.kind === ZLinkStreamMessageKind.Request
174
- ? decodeActorRequestDeadlineUnixMs(messageToBytes(parts[0]))
175
- : undefined;
170
+ requestDeadlineUnixMs =
171
+ header.kind === ZLinkStreamMessageKind.Request
172
+ ? decodeActorRequestDeadlineUnixMs(messageToBytes(parts[0]))
173
+ : undefined;
176
174
  } catch (error) {
177
175
  this.reportInvalidFrame(actorId, ZLinkDispatchMessageKind.ActorSend, error);
178
176
  throw error;
179
177
  }
180
- return runWithFlow(createInboundFlow(
181
- header.flowId,
182
- header.flowOrigin,
183
- flowEnabled
184
- ), async () => {
185
- const messageKind = header.kind === ZLinkStreamMessageKind.Request
186
- ? ZLinkDispatchMessageKind.ActorRequest
187
- : ZLinkDispatchMessageKind.ActorSend;
188
- const action = messageKind === ZLinkDispatchMessageKind.ActorRequest
189
- ? ZLinkDispatchErrorAction.ReplyError
190
- : ZLinkDispatchErrorAction.Drop;
191
- this.trace(ZLinkMessageFlowOutcome.Received, actorId, header, messageKind);
192
- if (
193
- this.options.actorLeft?.(actorId) === true &&
194
- header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
195
- ) {
196
- return undefined;
197
- }
198
- if (
199
- remoteBoundSessionTarget !== undefined
200
- && actorMessageFollowContext(fallbackActorRef) === undefined
201
- ) {
202
- // A replayed handoff/Message Follow packet keeps its captured Session
203
- // route solely for that packet's response. It cannot republish the
204
- // predecessor route over a binding already confirmed by a later Actor
205
- // owner turn.
206
- this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
207
- }
208
- const routed = await this.options.routeBeforeLocal?.(
209
- delivery
210
- );
211
- if (routed?.handled === true) {
212
- return routed.response;
213
- }
214
- const actor = this.options.resolveActor(actorId);
215
- if (actor === undefined) {
216
- return this.handleMissingActor(
178
+ return runWithFlow(
179
+ createInboundFlow(header.flowId, header.flowOrigin, flowEnabled),
180
+ async () => {
181
+ const messageKind =
182
+ header.kind === ZLinkStreamMessageKind.Request
183
+ ? ZLinkDispatchMessageKind.ActorRequest
184
+ : ZLinkDispatchMessageKind.ActorSend;
185
+ const action =
186
+ messageKind === ZLinkDispatchMessageKind.ActorRequest
187
+ ? ZLinkDispatchErrorAction.ReplyError
188
+ : ZLinkDispatchErrorAction.Drop;
189
+ this.trace(ZLinkMessageFlowOutcome.Received, actorId, header, messageKind);
190
+ if (
191
+ this.options.actorLeft?.(actorId) === true &&
192
+ header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
193
+ ) {
194
+ return undefined;
195
+ }
196
+ if (
197
+ remoteBoundSessionTarget !== undefined &&
198
+ actorMessageFollowContext(fallbackActorRef) === undefined
199
+ ) {
200
+ // A replayed handoff/Message Follow packet keeps its captured Session
201
+ // route solely for that packet's response. It cannot republish the
202
+ // predecessor route over a binding already confirmed by a later Actor
203
+ // owner turn.
204
+ this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
205
+ }
206
+ const routed = await this.options.routeBeforeLocal?.(delivery);
207
+ if (routed?.handled === true) {
208
+ return routed.response;
209
+ }
210
+ const actor = this.options.resolveActor(actorId);
211
+ if (actor === undefined) {
212
+ return this.handleMissingActor(
213
+ actorId,
214
+ parts,
215
+ header,
216
+ messageKind,
217
+ action,
218
+ returnResponse,
219
+ remoteBoundSessionTarget,
220
+ fallbackActorRef,
221
+ requestTerminal
222
+ );
223
+ }
224
+ if (header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
225
+ this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
226
+ await this.options.onDisconnectActor(actor);
227
+ return undefined;
228
+ }
229
+ const decodePayload = this.createPayloadDecoder(parts[1], header);
230
+ return this.dispatchActorPacket(
231
+ actor,
217
232
  actorId,
218
- parts,
233
+ decodePayload,
219
234
  header,
220
235
  messageKind,
221
236
  action,
222
237
  returnResponse,
223
238
  remoteBoundSessionTarget,
224
239
  fallbackActorRef,
225
- requestTerminal
240
+ requestTerminal,
241
+ requestDeadlineUnixMs,
242
+ zlinkSerialWorkOptions(
243
+ parts[1].data().byteLength,
244
+ zlinkMetadataByteLength(header.metadata)
245
+ )
226
246
  );
227
247
  }
228
- if (header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
229
- this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
230
- await this.options.onDisconnectActor(actor);
231
- return undefined;
232
- }
233
- const decodePayload = this.createPayloadDecoder(parts[1], header);
234
- return this.dispatchActorPacket(
235
- actor,
236
- actorId,
237
- decodePayload,
238
- header,
239
- messageKind,
240
- action,
241
- returnResponse,
242
- remoteBoundSessionTarget,
243
- fallbackActorRef,
244
- requestTerminal,
245
- requestDeadlineUnixMs,
246
- zlinkSerialWorkOptions(
247
- parts[1].data().byteLength,
248
- zlinkMetadataByteLength(header.metadata)
249
- )
250
- );
251
- });
248
+ );
252
249
  }
253
250
 
254
251
  private async handleMissingActor(
@@ -263,14 +260,14 @@ export class ZLinkSpotActorPacketDispatch {
263
260
  requestTerminal: ZLinkActorRequestTerminal | undefined
264
261
  ): Promise<unknown> {
265
262
  if (
266
- this.options.routeToActorJoinPrewarm !== undefined
267
- && fallbackActorRef !== undefined
268
- && parts.length >= 2
263
+ this.options.routeToActorJoinPrewarm !== undefined &&
264
+ fallbackActorRef !== undefined &&
265
+ parts.length >= 2 &&
269
266
  // A Request without a terminal has no way to complete once
270
267
  // migrated later — parking it would leave the caller hanging
271
268
  // forever with no reply route. Fall through to the existing
272
269
  // missing-actor handling for that shape instead.
273
- && (messageKind !== ZLinkDispatchMessageKind.ActorRequest || requestTerminal !== undefined)
270
+ (messageKind !== ZLinkDispatchMessageKind.ActorRequest || requestTerminal !== undefined)
274
271
  ) {
275
272
  const parked = this.parkForActorJoinPrewarm(
276
273
  actorId,
@@ -300,7 +297,11 @@ export class ZLinkSpotActorPacketDispatch {
300
297
  ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound,
301
298
  `SPOT actor is not registered locally: ${actorId}`
302
299
  );
303
- if (header.requestSeq !== undefined && !returnResponse && this.options.actorErrorSender !== undefined) {
300
+ if (
301
+ header.requestSeq !== undefined &&
302
+ !returnResponse &&
303
+ this.options.actorErrorSender !== undefined
304
+ ) {
304
305
  await this.options.actorErrorSender(
305
306
  actorId,
306
307
  header.name,
@@ -389,13 +390,14 @@ export class ZLinkSpotActorPacketDispatch {
389
390
  message: Message,
390
391
  header: ReturnType<typeof decodeStreamHeader>
391
392
  ): () => unknown {
392
- return () => decodeFrameworkTypedPayloadMessage(
393
- message,
394
- this.options.messageSerializers,
395
- undefined,
396
- streamCodecContentType(header.codec),
397
- header.name
398
- );
393
+ return () =>
394
+ decodeFrameworkTypedPayloadMessage(
395
+ message,
396
+ this.options.messageSerializers,
397
+ undefined,
398
+ streamCodecContentType(header.codec),
399
+ header.name
400
+ );
399
401
  }
400
402
 
401
403
  private async dispatchActorPacket(
@@ -412,9 +414,7 @@ export class ZLinkSpotActorPacketDispatch {
412
414
  requestDeadlineUnixMs: number | undefined,
413
415
  workOptions: ZLinkSerialWorkOptions
414
416
  ): Promise<unknown> {
415
- const spot = typeof this.options.spot === 'function'
416
- ? this.options.spot()
417
- : this.options.spot;
417
+ const spot = typeof this.options.spot === 'function' ? this.options.spot() : this.options.spot;
418
418
  const dispatcher = new ZLinkSpotActorDispatcher({
419
419
  registry: this.options.registry,
420
420
  spot,
@@ -422,20 +422,15 @@ export class ZLinkSpotActorPacketDispatch {
422
422
  serial: this.options.serial,
423
423
  serialWorkOptions: workOptions,
424
424
  messageSerializers: this.options.messageSerializers,
425
- onAdmitted: () => this.trace(
426
- ZLinkMessageFlowOutcome.Admitted,
427
- actorId,
428
- header,
429
- messageKind
430
- ),
425
+ onAdmitted: () => this.trace(ZLinkMessageFlowOutcome.Admitted, actorId, header, messageKind),
431
426
  onHandlerStart: () => {
432
427
  // A transferred backlog is returned to the Actor queue as one FIFO
433
428
  // prefix. Check the request deadline when its owner turn actually
434
429
  // starts, not when that prefix is admitted.
435
430
  if (
436
- messageKind === ZLinkDispatchMessageKind.ActorRequest
437
- && requestDeadlineUnixMs !== undefined
438
- && Date.now() >= requestDeadlineUnixMs
431
+ messageKind === ZLinkDispatchMessageKind.ActorRequest &&
432
+ requestDeadlineUnixMs !== undefined &&
433
+ Date.now() >= requestDeadlineUnixMs
439
434
  ) {
440
435
  throw createInternalFrameworkException(
441
436
  ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
@@ -443,12 +438,7 @@ export class ZLinkSpotActorPacketDispatch {
443
438
  );
444
439
  }
445
440
  releaseApplicationJobPermitBeforeHandler();
446
- this.trace(
447
- ZLinkMessageFlowOutcome.Dispatched,
448
- actorId,
449
- header,
450
- messageKind
451
- );
441
+ this.trace(ZLinkMessageFlowOutcome.Dispatched, actorId, header, messageKind);
452
442
  }
453
443
  });
454
444
  try {
@@ -458,7 +448,12 @@ export class ZLinkSpotActorPacketDispatch {
458
448
  metadata: zlinkMessageMetadata(header.metadata),
459
449
  correlationId: header.correlationId ?? undefined
460
450
  });
461
- this.trace(ZLinkMessageFlowOutcome.Completed, actorId, header, ZLinkDispatchMessageKind.ActorSend);
451
+ this.trace(
452
+ ZLinkMessageFlowOutcome.Completed,
453
+ actorId,
454
+ header,
455
+ ZLinkDispatchMessageKind.ActorSend
456
+ );
462
457
  return undefined;
463
458
  }
464
459
  if (header.kind !== ZLinkStreamMessageKind.Request || header.requestSeq === undefined) {
@@ -477,59 +472,95 @@ export class ZLinkSpotActorPacketDispatch {
477
472
  if (returnResponse && requestTerminal !== undefined) {
478
473
  let preparedReply: unknown;
479
474
  let preparedReplyReady = false;
480
- await dispatcher.dispatchRequestThenDecoded(actor, header.name, decodePayload, {
481
- meshName: spot.context.meshName,
482
- metadata: zlinkMessageMetadata(header.metadata),
483
- correlationId: header.correlationId ?? header.requestSeq.toString()
484
- }, async (response) => {
485
- this.trace(ZLinkMessageFlowOutcome.Replied, actorId, header, ZLinkDispatchMessageKind.ActorRequest);
486
- await requestTerminal(response, preparedReplyReady ? preparedReply : undefined);
487
- }, requestTerminal.prepare === undefined
488
- ? undefined
489
- : async (response) => {
490
- preparedReply = await requestTerminal.prepare!(response);
491
- preparedReplyReady = true;
492
- });
475
+ await dispatcher.dispatchRequestThenDecoded(
476
+ actor,
477
+ header.name,
478
+ decodePayload,
479
+ {
480
+ meshName: spot.context.meshName,
481
+ metadata: zlinkMessageMetadata(header.metadata),
482
+ correlationId: header.correlationId ?? header.requestSeq.toString()
483
+ },
484
+ async (response) => {
485
+ this.trace(
486
+ ZLinkMessageFlowOutcome.Replied,
487
+ actorId,
488
+ header,
489
+ ZLinkDispatchMessageKind.ActorRequest
490
+ );
491
+ await requestTerminal(response, preparedReplyReady ? preparedReply : undefined);
492
+ },
493
+ requestTerminal.prepare === undefined
494
+ ? undefined
495
+ : async (response) => {
496
+ preparedReply = await requestTerminal.prepare!(response);
497
+ preparedReplyReady = true;
498
+ }
499
+ );
493
500
  return undefined;
494
501
  }
495
502
  if (returnResponse || this.options.actorResponseSender === undefined) {
496
- const response = await dispatcher.dispatchRequestDecoded(actor, header.name, decodePayload, {
497
- meshName: spot.context.meshName,
498
- metadata: zlinkMessageMetadata(header.metadata),
499
- correlationId: header.correlationId ?? header.requestSeq.toString()
500
- });
501
- this.trace(ZLinkMessageFlowOutcome.Replied, actorId, header, ZLinkDispatchMessageKind.ActorRequest);
502
- return response;
503
- }
504
- await dispatcher.dispatchRequestThenDecoded(actor, header.name, decodePayload, {
505
- meshName: spot.context.meshName,
506
- metadata: zlinkMessageMetadata(header.metadata),
507
- correlationId: header.correlationId ?? header.requestSeq.toString()
508
- }, async (response, replyOptions) => {
509
- this.trace(ZLinkMessageFlowOutcome.Replied, actorId, header, ZLinkDispatchMessageKind.ActorRequest);
510
- await this.options.actorResponseSender?.(
503
+ const response = await dispatcher.dispatchRequestDecoded(
511
504
  actor,
512
505
  header.name,
513
- requestSeq,
514
- response,
515
- replyOptions,
516
- fallbackBoundSessionTarget,
517
- fallbackActorRef,
518
- undefined
506
+ decodePayload,
507
+ {
508
+ meshName: spot.context.meshName,
509
+ metadata: zlinkMessageMetadata(header.metadata),
510
+ correlationId: header.correlationId ?? header.requestSeq.toString()
511
+ }
519
512
  );
520
- });
513
+ this.trace(
514
+ ZLinkMessageFlowOutcome.Replied,
515
+ actorId,
516
+ header,
517
+ ZLinkDispatchMessageKind.ActorRequest
518
+ );
519
+ return response;
520
+ }
521
+ await dispatcher.dispatchRequestThenDecoded(
522
+ actor,
523
+ header.name,
524
+ decodePayload,
525
+ {
526
+ meshName: spot.context.meshName,
527
+ metadata: zlinkMessageMetadata(header.metadata),
528
+ correlationId: header.correlationId ?? header.requestSeq.toString()
529
+ },
530
+ async (response, replyOptions) => {
531
+ this.trace(
532
+ ZLinkMessageFlowOutcome.Replied,
533
+ actorId,
534
+ header,
535
+ ZLinkDispatchMessageKind.ActorRequest
536
+ );
537
+ await this.options.actorResponseSender?.(
538
+ actor,
539
+ header.name,
540
+ requestSeq,
541
+ response,
542
+ replyOptions,
543
+ fallbackBoundSessionTarget,
544
+ fallbackActorRef,
545
+ undefined
546
+ );
547
+ }
548
+ );
521
549
  return undefined;
522
550
  } catch (error) {
523
551
  this.options.dispatchErrors?.report({
524
552
  surface: ZLinkDispatchErrorSurface.SpotActor,
525
553
  messageKind,
526
- reason: error instanceof ZLinkFrameworkException
527
- && internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
528
- ? ZLinkDispatchErrorReason.HandlerMissing
529
- : error instanceof ZLinkFrameworkException
530
- && internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed
531
- ? ZLinkDispatchErrorReason.PayloadDecodeFailed
532
- : ZLinkDispatchErrorReason.HandlerException,
554
+ reason:
555
+ error instanceof ZLinkFrameworkException &&
556
+ internalFrameworkErrorKind(error) ===
557
+ ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
558
+ ? ZLinkDispatchErrorReason.HandlerMissing
559
+ : error instanceof ZLinkFrameworkException &&
560
+ internalFrameworkErrorKind(error) ===
561
+ ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed
562
+ ? ZLinkDispatchErrorReason.PayloadDecodeFailed
563
+ : ZLinkDispatchErrorReason.HandlerException,
533
564
  action,
534
565
  packetName: header.name,
535
566
  spotId: this.options.spotId(),
@@ -1,19 +1,9 @@
1
- import type {
2
- ActorRef,
3
- RoutingId,
4
- ZLinkMessageSerializer
5
- } from '../../contracts';
6
- import {
7
- ZLinkFrameworkException,
8
- ZLinkFrameworkErrorKind
9
- } from '../../contracts';
1
+ import type { ActorRef, RoutingId, ZLinkMessageSerializer } from '../../contracts';
2
+ import { ZLinkFrameworkException, ZLinkFrameworkErrorKind } from '../../contracts';
10
3
  import type { Message } from '../../contracts/Common/Message';
11
4
  import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
12
5
  import { RequestResult } from '../backend/runtime-values';
13
- import type {
14
- ZLinkBackendActorRef,
15
- ZLinkBackendActorRecvInfo
16
- } from '../backend/contracts';
6
+ import type { ZLinkBackendActorRef, ZLinkBackendActorRecvInfo } from '../backend/contracts';
17
7
  import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
18
8
  import { REMOTE_BOUND_SESSION_BIND_PACKET } from './spot-remote-codec';
19
9
  import { ZLINK_RECV_DONT_WAIT } from './spot-native-flags';
@@ -59,7 +49,10 @@ interface ZLinkSpotActorPacketDrainOptions {
59
49
  const ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND = 1;
60
50
 
61
51
  export class ZLinkSpotActorPacketDrain {
62
- private readonly continuations = new Map<string, { readonly owner: string; readonly parts: Message[] }>();
52
+ private readonly continuations = new Map<
53
+ string,
54
+ { readonly owner: string; readonly parts: Message[] }
55
+ >();
63
56
 
64
57
  constructor(private readonly options: ZLinkSpotActorPacketDrainOptions) {}
65
58
 
@@ -96,7 +89,9 @@ export class ZLinkSpotActorPacketDrain {
96
89
  if (isStreamHeaderMessage(part.message, this.flowEnabled())) {
97
90
  closeMessages(pending.parts);
98
91
  this.continuations.delete(currentPacketKey);
99
- throw new Error(`Actor packet continuation '${pending.owner}' was replaced before completion.`);
92
+ throw new Error(
93
+ `Actor packet continuation '${pending.owner}' was replaced before completion.`
94
+ );
100
95
  }
101
96
  this.continuations.delete(currentPacketKey);
102
97
  parts.push(...pending.parts);
@@ -115,7 +110,14 @@ export class ZLinkSpotActorPacketDrain {
115
110
  break;
116
111
  }
117
112
  }
118
- const noBindInfo = this.createNoBindReplyInfo(actorRef, sourceNodeRid, sourceSessionRid, requestId, flags, parts);
113
+ const noBindInfo = this.createNoBindReplyInfo(
114
+ actorRef,
115
+ sourceNodeRid,
116
+ sourceSessionRid,
117
+ requestId,
118
+ flags,
119
+ parts
120
+ );
119
121
  if (this.consumeRemoteBoundSessionBind(actorRef, sourceNodeRid, sourceSessionRid, parts)) {
120
122
  return;
121
123
  }
@@ -160,15 +162,15 @@ export class ZLinkSpotActorPacketDrain {
160
162
  parts: readonly Message[]
161
163
  ): ZLinkBackendActorRecvInfo | undefined {
162
164
  if (
163
- actor === undefined
164
- || sourceNodeRid === undefined
165
- || sourceSessionRid === undefined
166
- || requestId === undefined
167
- || requestId === 0n
168
- || flags === undefined
169
- || (flags & ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND) === 0
170
- || this.options.replyActorNoBind === undefined
171
- || !this.isActorRequest(parts)
165
+ actor === undefined ||
166
+ sourceNodeRid === undefined ||
167
+ sourceSessionRid === undefined ||
168
+ requestId === undefined ||
169
+ requestId === 0n ||
170
+ flags === undefined ||
171
+ (flags & ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND) === 0 ||
172
+ this.options.replyActorNoBind === undefined ||
173
+ !this.isActorRequest(parts)
172
174
  ) {
173
175
  return undefined;
174
176
  }
@@ -208,7 +210,13 @@ export class ZLinkSpotActorPacketDrain {
208
210
  } catch (error) {
209
211
  this.options.replyActorNoBind?.(
210
212
  info,
211
- [this.encodeActorReplyFrame(parts[0], ZLinkStreamMessageKind.Error, frameworkErrorPayload(error))],
213
+ [
214
+ this.encodeActorReplyFrame(
215
+ parts[0],
216
+ ZLinkStreamMessageKind.Error,
217
+ frameworkErrorPayload(error)
218
+ )
219
+ ],
212
220
  RequestResult.Ok
213
221
  );
214
222
  }
@@ -228,19 +236,22 @@ export class ZLinkSpotActorPacketDrain {
228
236
  );
229
237
  try {
230
238
  // encodeStreamFrame returns a fresh, unaliased array; view it without re-copying.
231
- const frame = encodeStreamFrame({
232
- kind,
233
- codec: streamCodecForContentType(encoded.contentType),
234
- flags: ZLinkStreamHeaderFlags.None,
235
- requestSeq: requestHeader.requestSeq,
236
- name: '',
237
- metadata: new Map(),
238
- correlationId: requestHeader.correlationId,
239
- // Spec 27 §7: preserve the request flow pair on the reply while
240
- // tracing is on; the gated decode above already strips it at Off.
241
- flowId: requestHeader.flowId,
242
- flowOrigin: requestHeader.flowOrigin
243
- }, encoded.message.data());
239
+ const frame = encodeStreamFrame(
240
+ {
241
+ kind,
242
+ codec: streamCodecForContentType(encoded.contentType),
243
+ flags: ZLinkStreamHeaderFlags.None,
244
+ requestSeq: requestHeader.requestSeq,
245
+ name: '',
246
+ metadata: new Map(),
247
+ correlationId: requestHeader.correlationId,
248
+ // Spec 27 §7: preserve the request flow pair on the reply while
249
+ // tracing is on; the gated decode above already strips it at Off.
250
+ flowId: requestHeader.flowId,
251
+ flowOrigin: requestHeader.flowOrigin
252
+ },
253
+ encoded.message.data()
254
+ );
244
255
  return RuntimeMessage.fromOwned(
245
256
  Buffer.from(frame.buffer, frame.byteOffset, frame.byteLength)
246
257
  ) as Message;
@@ -321,8 +332,9 @@ function frameworkErrorPayload(error: unknown): {
321
332
  } {
322
333
  return {
323
334
  message: error instanceof Error ? error.message : String(error),
324
- kind: error instanceof ZLinkFrameworkException
325
- ? error.kind
326
- : ZLinkFrameworkErrorKind.InternalFailure
335
+ kind:
336
+ error instanceof ZLinkFrameworkException
337
+ ? error.kind
338
+ : ZLinkFrameworkErrorKind.InternalFailure
327
339
  };
328
340
  }