@oasys/oecs 0.5.3 → 0.6.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 (510) hide show
  1. package/CHANGELOG.md +1399 -276
  2. package/README.md +327 -169
  3. package/dist/core/ecs/access_check.d.cts +31 -31
  4. package/dist/core/ecs/access_check.d.ts +31 -31
  5. package/dist/core/ecs/access_check.d.ts.map +1 -1
  6. package/dist/core/ecs/archetype.d.cts +273 -205
  7. package/dist/core/ecs/archetype.d.ts +273 -205
  8. package/dist/core/ecs/archetype.d.ts.map +1 -1
  9. package/dist/core/ecs/archetype_closure.d.cts +23 -0
  10. package/dist/core/ecs/archetype_closure.d.ts +23 -0
  11. package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
  12. package/dist/core/ecs/archetype_graph.d.cts +34 -34
  13. package/dist/core/ecs/archetype_graph.d.ts +34 -34
  14. package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
  15. package/dist/core/ecs/archetype_types.d.cts +55 -0
  16. package/dist/core/ecs/archetype_types.d.ts +55 -0
  17. package/dist/core/ecs/archetype_types.d.ts.map +1 -0
  18. package/dist/core/ecs/change_feed.d.cts +53 -0
  19. package/dist/core/ecs/change_feed.d.ts +53 -0
  20. package/dist/core/ecs/change_feed.d.ts.map +1 -0
  21. package/dist/core/ecs/changed_query.d.cts +36 -0
  22. package/dist/core/ecs/changed_query.d.ts +36 -0
  23. package/dist/core/ecs/changed_query.d.ts.map +1 -0
  24. package/dist/core/ecs/chunk_columns.d.cts +49 -0
  25. package/dist/core/ecs/chunk_columns.d.ts +49 -0
  26. package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
  27. package/dist/core/ecs/command_log.d.cts +30 -30
  28. package/dist/core/ecs/command_log.d.ts +30 -30
  29. package/dist/core/ecs/command_log.d.ts.map +1 -1
  30. package/dist/core/ecs/component.d.cts +45 -44
  31. package/dist/core/ecs/component.d.ts +45 -44
  32. package/dist/core/ecs/component.d.ts.map +1 -1
  33. package/dist/core/ecs/component_registry.d.cts +53 -0
  34. package/dist/core/ecs/component_registry.d.ts +53 -0
  35. package/dist/core/ecs/component_registry.d.ts.map +1 -0
  36. package/dist/core/ecs/compute_backend.d.cts +18 -7
  37. package/dist/core/ecs/compute_backend.d.ts +18 -7
  38. package/dist/core/ecs/compute_backend.d.ts.map +1 -1
  39. package/dist/core/ecs/deferred_commands.d.cts +15 -14
  40. package/dist/core/ecs/deferred_commands.d.ts +15 -14
  41. package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
  42. package/dist/core/ecs/dispatch_trace.d.cts +32 -31
  43. package/dist/core/ecs/dispatch_trace.d.ts +32 -31
  44. package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
  45. package/dist/core/ecs/ecs.d.cts +337 -276
  46. package/dist/core/ecs/ecs.d.ts +337 -276
  47. package/dist/core/ecs/ecs.d.ts.map +1 -1
  48. package/dist/core/ecs/ecs_memory.d.cts +134 -136
  49. package/dist/core/ecs/ecs_memory.d.ts +134 -136
  50. package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
  51. package/dist/core/ecs/ecs_options.d.cts +89 -0
  52. package/dist/core/ecs/ecs_options.d.ts +89 -0
  53. package/dist/core/ecs/ecs_options.d.ts.map +1 -0
  54. package/dist/core/ecs/entity.d.cts +4 -4
  55. package/dist/core/ecs/entity.d.ts +4 -4
  56. package/dist/core/ecs/entity_allocator.d.cts +24 -22
  57. package/dist/core/ecs/entity_allocator.d.ts +24 -22
  58. package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
  59. package/dist/core/ecs/event.d.cts +37 -23
  60. package/dist/core/ecs/event.d.ts +37 -23
  61. package/dist/core/ecs/event.d.ts.map +1 -1
  62. package/dist/core/ecs/facades.d.cts +12 -126
  63. package/dist/core/ecs/facades.d.ts +12 -126
  64. package/dist/core/ecs/facades.d.ts.map +1 -1
  65. package/dist/core/ecs/frame_stepper.d.cts +12 -12
  66. package/dist/core/ecs/frame_stepper.d.ts +12 -12
  67. package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
  68. package/dist/core/ecs/frame_trace.d.cts +34 -34
  69. package/dist/core/ecs/frame_trace.d.ts +34 -34
  70. package/dist/core/ecs/frame_trace.d.ts.map +1 -1
  71. package/dist/core/ecs/host_commands.d.cts +107 -89
  72. package/dist/core/ecs/host_commands.d.ts +107 -89
  73. package/dist/core/ecs/host_commands.d.ts.map +1 -1
  74. package/dist/core/ecs/index.d.cts +22 -12
  75. package/dist/core/ecs/index.d.ts +22 -12
  76. package/dist/core/ecs/index.d.ts.map +1 -1
  77. package/dist/core/ecs/observer.d.cts +41 -122
  78. package/dist/core/ecs/observer.d.ts +41 -122
  79. package/dist/core/ecs/observer.d.ts.map +1 -1
  80. package/dist/core/ecs/phase.d.cts +79 -0
  81. package/dist/core/ecs/phase.d.ts +79 -0
  82. package/dist/core/ecs/phase.d.ts.map +1 -0
  83. package/dist/core/ecs/plugin.d.cts +125 -0
  84. package/dist/core/ecs/plugin.d.ts +125 -0
  85. package/dist/core/ecs/plugin.d.ts.map +1 -0
  86. package/dist/core/ecs/plugin_slots.d.cts +26 -0
  87. package/dist/core/ecs/plugin_slots.d.ts +26 -0
  88. package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
  89. package/dist/core/ecs/query.d.cts +219 -568
  90. package/dist/core/ecs/query.d.ts +219 -568
  91. package/dist/core/ecs/query.d.ts.map +1 -1
  92. package/dist/core/ecs/query_cache.d.cts +130 -0
  93. package/dist/core/ecs/query_cache.d.ts +130 -0
  94. package/dist/core/ecs/query_cache.d.ts.map +1 -0
  95. package/dist/core/ecs/query_registry.d.cts +47 -0
  96. package/dist/core/ecs/query_registry.d.ts +47 -0
  97. package/dist/core/ecs/query_registry.d.ts.map +1 -0
  98. package/dist/core/ecs/query_terms.d.cts +126 -0
  99. package/dist/core/ecs/query_terms.d.ts +126 -0
  100. package/dist/core/ecs/query_terms.d.ts.map +1 -0
  101. package/dist/core/ecs/ref.d.cts +129 -16
  102. package/dist/core/ecs/ref.d.ts +129 -16
  103. package/dist/core/ecs/ref.d.ts.map +1 -1
  104. package/dist/core/ecs/relation.d.cts +105 -186
  105. package/dist/core/ecs/relation.d.ts +105 -186
  106. package/dist/core/ecs/relation.d.ts.map +1 -1
  107. package/dist/core/ecs/resource.d.cts +14 -14
  108. package/dist/core/ecs/resource.d.ts +14 -14
  109. package/dist/core/ecs/resource_registry.d.cts +6 -6
  110. package/dist/core/ecs/resource_registry.d.ts +6 -6
  111. package/dist/core/ecs/resource_registry.d.ts.map +1 -1
  112. package/dist/core/ecs/row_kinds.d.cts +24 -0
  113. package/dist/core/ecs/row_kinds.d.ts +24 -0
  114. package/dist/core/ecs/row_kinds.d.ts.map +1 -0
  115. package/dist/core/ecs/run_condition.d.cts +23 -23
  116. package/dist/core/ecs/run_condition.d.ts +23 -23
  117. package/dist/core/ecs/run_condition.d.ts.map +1 -1
  118. package/dist/core/ecs/schedule.d.cts +98 -114
  119. package/dist/core/ecs/schedule.d.ts +98 -114
  120. package/dist/core/ecs/schedule.d.ts.map +1 -1
  121. package/dist/core/ecs/schedule_plan.d.cts +33 -0
  122. package/dist/core/ecs/schedule_plan.d.ts +33 -0
  123. package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
  124. package/dist/core/ecs/snapshot.d.cts +77 -0
  125. package/dist/core/ecs/snapshot.d.ts +77 -0
  126. package/dist/core/ecs/snapshot.d.ts.map +1 -0
  127. package/dist/core/ecs/snapshot_mount.d.cts +42 -0
  128. package/dist/core/ecs/snapshot_mount.d.ts +42 -0
  129. package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
  130. package/dist/core/ecs/sparse_store.d.cts +110 -53
  131. package/dist/core/ecs/sparse_store.d.ts +110 -53
  132. package/dist/core/ecs/sparse_store.d.ts.map +1 -1
  133. package/dist/core/ecs/store.d.cts +644 -511
  134. package/dist/core/ecs/store.d.ts +644 -511
  135. package/dist/core/ecs/store.d.ts.map +1 -1
  136. package/dist/core/ecs/store_layout_listener.d.cts +8 -8
  137. package/dist/core/ecs/store_layout_listener.d.ts +8 -8
  138. package/dist/core/ecs/store_types.d.cts +122 -0
  139. package/dist/core/ecs/store_types.d.ts +122 -0
  140. package/dist/core/ecs/store_types.d.ts.map +1 -0
  141. package/dist/core/ecs/system.d.cts +151 -66
  142. package/dist/core/ecs/system.d.ts +151 -66
  143. package/dist/core/ecs/system.d.ts.map +1 -1
  144. package/dist/core/ecs/system_context.d.cts +296 -0
  145. package/dist/core/ecs/system_context.d.ts +296 -0
  146. package/dist/core/ecs/system_context.d.ts.map +1 -0
  147. package/dist/core/ecs/system_set.d.cts +48 -0
  148. package/dist/core/ecs/system_set.d.ts +48 -0
  149. package/dist/core/ecs/system_set.d.ts.map +1 -0
  150. package/dist/core/ecs/utils/arrays.d.cts +15 -1
  151. package/dist/core/ecs/utils/arrays.d.ts +15 -1
  152. package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
  153. package/dist/core/ecs/utils/error.d.cts +87 -4
  154. package/dist/core/ecs/utils/error.d.ts +87 -4
  155. package/dist/core/ecs/utils/error.d.ts.map +1 -1
  156. package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
  157. package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
  158. package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
  159. package/dist/core/restore_errors.d.cts +30 -0
  160. package/dist/core/restore_errors.d.ts +30 -0
  161. package/dist/core/restore_errors.d.ts.map +1 -0
  162. package/dist/core/store/action_ring.d.cts +48 -49
  163. package/dist/core/store/action_ring.d.ts +48 -49
  164. package/dist/core/store/action_ring.d.ts.map +1 -1
  165. package/dist/core/store/allocator.d.cts +166 -114
  166. package/dist/core/store/allocator.d.ts +166 -114
  167. package/dist/core/store/allocator.d.ts.map +1 -1
  168. package/dist/core/store/buffer_backed_column.d.cts +21 -22
  169. package/dist/core/store/buffer_backed_column.d.ts +21 -22
  170. package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
  171. package/dist/core/store/column_store.d.cts +138 -100
  172. package/dist/core/store/column_store.d.ts +138 -100
  173. package/dist/core/store/column_store.d.ts.map +1 -1
  174. package/dist/core/store/command_dispatch.d.cts +14 -15
  175. package/dist/core/store/command_dispatch.d.ts +14 -15
  176. package/dist/core/store/command_dispatch.d.ts.map +1 -1
  177. package/dist/core/store/command_ring.d.cts +41 -45
  178. package/dist/core/store/command_ring.d.ts +41 -45
  179. package/dist/core/store/command_ring.d.ts.map +1 -1
  180. package/dist/core/store/descriptor.d.cts +35 -18
  181. package/dist/core/store/descriptor.d.ts +35 -18
  182. package/dist/core/store/descriptor.d.ts.map +1 -1
  183. package/dist/core/store/entity_index.d.cts +34 -35
  184. package/dist/core/store/entity_index.d.ts +34 -35
  185. package/dist/core/store/entity_index.d.ts.map +1 -1
  186. package/dist/core/store/event_ring.d.cts +40 -42
  187. package/dist/core/store/event_ring.d.ts +40 -42
  188. package/dist/core/store/event_ring.d.ts.map +1 -1
  189. package/dist/core/store/extend.d.cts +15 -9
  190. package/dist/core/store/extend.d.ts +15 -9
  191. package/dist/core/store/extend.d.ts.map +1 -1
  192. package/dist/core/store/grow.d.cts +3 -3
  193. package/dist/core/store/grow.d.ts +3 -3
  194. package/dist/core/store/grow.d.ts.map +1 -1
  195. package/dist/core/store/header.d.cts +37 -33
  196. package/dist/core/store/header.d.ts +37 -33
  197. package/dist/core/store/header.d.ts.map +1 -1
  198. package/dist/core/store/index.d.cts +10 -10
  199. package/dist/core/store/index.d.ts +10 -10
  200. package/dist/core/store/index.d.ts.map +1 -1
  201. package/dist/core/store/layout_ops.d.cts +72 -63
  202. package/dist/core/store/layout_ops.d.ts +72 -63
  203. package/dist/core/store/layout_ops.d.ts.map +1 -1
  204. package/dist/core/store/region_table.d.cts +28 -21
  205. package/dist/core/store/region_table.d.ts +28 -21
  206. package/dist/core/store/region_table.d.ts.map +1 -1
  207. package/dist/core/store/snapshot.d.cts +31 -16
  208. package/dist/core/store/snapshot.d.ts +31 -16
  209. package/dist/core/store/snapshot.d.ts.map +1 -1
  210. package/dist/core/store/state_hash.d.cts +14 -14
  211. package/dist/core/store/state_hash.d.ts +14 -14
  212. package/dist/core/store/state_hash.d.ts.map +1 -1
  213. package/dist/core/store/store_regions.d.cts +10 -10
  214. package/dist/core/store/store_regions.d.ts +10 -10
  215. package/dist/core/store/store_regions.d.ts.map +1 -1
  216. package/dist/core/store/vendored_abi/abi.d.cts +27 -2
  217. package/dist/core/store/vendored_abi/abi.d.ts +27 -2
  218. package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
  219. package/dist/host_commands-B2KMx8O2.cjs +1 -0
  220. package/dist/host_commands-ClVPvhSa.cjs +2 -0
  221. package/dist/host_commands-CwxVQS1z.js +1524 -0
  222. package/dist/host_commands-nJvTy88E.js +1667 -0
  223. package/dist/index.cjs +1 -1
  224. package/dist/index.d.cts +16 -11
  225. package/dist/index.d.ts +16 -11
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.development.cjs +1 -1
  228. package/dist/index.development.js +6709 -5729
  229. package/dist/index.js +5664 -4743
  230. package/dist/internal.cjs +2 -2
  231. package/dist/internal.d.cts +5 -2
  232. package/dist/internal.d.ts +5 -2
  233. package/dist/internal.d.ts.map +1 -1
  234. package/dist/internal.development.cjs +1 -1
  235. package/dist/internal.development.js +70 -20
  236. package/dist/internal.js +138 -83
  237. package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
  238. package/dist/plugins/abi-NP8pNxpd.js +42 -0
  239. package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
  240. package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
  241. package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
  242. package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
  243. package/dist/{extensions → plugins}/editor/editor.d.cts +56 -56
  244. package/dist/{extensions → plugins}/editor/editor.d.ts +56 -56
  245. package/dist/plugins/editor/editor.d.ts.map +1 -0
  246. package/dist/{extensions → plugins}/editor/field_handle.d.cts +13 -13
  247. package/dist/{extensions → plugins}/editor/field_handle.d.ts +13 -13
  248. package/dist/plugins/editor/field_handle.d.ts.map +1 -0
  249. package/dist/plugins/editor/index.d.cts +22 -0
  250. package/dist/plugins/editor/index.d.ts +22 -0
  251. package/dist/plugins/editor/index.d.ts.map +1 -0
  252. package/dist/plugins/editor.cjs +1 -0
  253. package/dist/plugins/editor.d.cts +1 -0
  254. package/dist/plugins/editor.d.ts +1 -0
  255. package/dist/plugins/editor.development.cjs +1 -0
  256. package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +83 -66
  257. package/dist/{extensions/editor/index.js → plugins/editor.js} +83 -66
  258. package/dist/plugins/events/event_channel.d.cts +13 -0
  259. package/dist/plugins/events/event_channel.d.ts +13 -0
  260. package/dist/plugins/events/event_channel.d.ts.map +1 -0
  261. package/dist/plugins/events/event_registry.d.cts +22 -0
  262. package/dist/plugins/events/event_registry.d.ts +22 -0
  263. package/dist/plugins/events/event_registry.d.ts.map +1 -0
  264. package/dist/plugins/events/facade.d.cts +26 -0
  265. package/dist/plugins/events/facade.d.ts +26 -0
  266. package/dist/plugins/events/facade.d.ts.map +1 -0
  267. package/dist/plugins/events/index.d.cts +10 -0
  268. package/dist/plugins/events/index.d.ts +10 -0
  269. package/dist/plugins/events/index.d.ts.map +1 -0
  270. package/dist/plugins/events.cjs +1 -0
  271. package/dist/plugins/events.d.cts +1 -0
  272. package/dist/plugins/events.d.ts +1 -0
  273. package/dist/plugins/events.development.cjs +1 -0
  274. package/dist/plugins/events.development.js +174 -0
  275. package/dist/plugins/events.js +159 -0
  276. package/dist/plugins/observers/index.d.cts +23 -0
  277. package/dist/plugins/observers/index.d.ts +23 -0
  278. package/dist/plugins/observers/index.d.ts.map +1 -0
  279. package/dist/plugins/observers/observer_registry.d.cts +101 -0
  280. package/dist/plugins/observers/observer_registry.d.ts +101 -0
  281. package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
  282. package/dist/plugins/observers.cjs +1 -0
  283. package/dist/plugins/observers.d.cts +1 -0
  284. package/dist/plugins/observers.d.ts +1 -0
  285. package/dist/plugins/observers.development.cjs +1 -0
  286. package/dist/plugins/observers.development.js +431 -0
  287. package/dist/plugins/observers.js +403 -0
  288. package/dist/plugins/relation_store-BsoegrZh.js +313 -0
  289. package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
  290. package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
  291. package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
  292. package/dist/plugins/relations/builtin_relations.d.cts +48 -0
  293. package/dist/plugins/relations/builtin_relations.d.ts +48 -0
  294. package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
  295. package/dist/plugins/relations/facade.d.cts +73 -0
  296. package/dist/plugins/relations/facade.d.ts +73 -0
  297. package/dist/plugins/relations/facade.d.ts.map +1 -0
  298. package/dist/plugins/relations/index.d.cts +11 -0
  299. package/dist/plugins/relations/index.d.ts +11 -0
  300. package/dist/plugins/relations/index.d.ts.map +1 -0
  301. package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +93 -105
  302. package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +93 -105
  303. package/dist/plugins/relations/relation_service.d.ts.map +1 -0
  304. package/dist/plugins/relations/relation_store.d.cts +177 -0
  305. package/dist/plugins/relations/relation_store.d.ts +177 -0
  306. package/dist/plugins/relations/relation_store.d.ts.map +1 -0
  307. package/dist/plugins/relations.cjs +1 -0
  308. package/dist/plugins/relations.d.cts +1 -0
  309. package/dist/plugins/relations.d.ts +1 -0
  310. package/dist/plugins/relations.development.cjs +1 -0
  311. package/dist/plugins/relations.development.js +603 -0
  312. package/dist/plugins/relations.js +553 -0
  313. package/dist/plugins/snapshots/index.d.cts +33 -0
  314. package/dist/plugins/snapshots/index.d.ts +33 -0
  315. package/dist/plugins/snapshots/index.d.ts.map +1 -0
  316. package/dist/plugins/snapshots/resume.d.cts +57 -0
  317. package/dist/plugins/snapshots/resume.d.ts +57 -0
  318. package/dist/plugins/snapshots/resume.d.ts.map +1 -0
  319. package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
  320. package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
  321. package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
  322. package/dist/plugins/snapshots.cjs +1 -0
  323. package/dist/plugins/snapshots.d.cts +1 -0
  324. package/dist/plugins/snapshots.d.ts +1 -0
  325. package/dist/plugins/snapshots.development.cjs +1 -0
  326. package/dist/plugins/snapshots.development.js +737 -0
  327. package/dist/plugins/snapshots.js +737 -0
  328. package/dist/plugins/solid/index.d.cts +8 -0
  329. package/dist/plugins/solid/index.d.ts +8 -0
  330. package/dist/plugins/solid/index.d.ts.map +1 -0
  331. package/dist/plugins/solid/solid.d.cts +97 -0
  332. package/dist/plugins/solid/solid.d.ts +97 -0
  333. package/dist/plugins/solid/solid.d.ts.map +1 -0
  334. package/dist/plugins/solid.cjs +1 -0
  335. package/dist/plugins/solid.d.cts +1 -0
  336. package/dist/plugins/solid.d.ts +1 -0
  337. package/dist/plugins/solid.development.cjs +1 -0
  338. package/dist/plugins/solid.development.js +319 -0
  339. package/dist/plugins/solid.js +319 -0
  340. package/dist/plugins/workers/index.d.cts +75 -0
  341. package/dist/plugins/workers/index.d.ts +75 -0
  342. package/dist/plugins/workers/index.d.ts.map +1 -0
  343. package/dist/plugins/workers/node_threads.d.cts +25 -0
  344. package/dist/plugins/workers/node_threads.d.ts +25 -0
  345. package/dist/plugins/workers/node_threads.d.ts.map +1 -0
  346. package/dist/plugins/workers/plan.d.cts +61 -0
  347. package/dist/plugins/workers/plan.d.ts +61 -0
  348. package/dist/plugins/workers/plan.d.ts.map +1 -0
  349. package/dist/plugins/workers/pool.d.cts +144 -0
  350. package/dist/plugins/workers/pool.d.ts +144 -0
  351. package/dist/plugins/workers/pool.d.ts.map +1 -0
  352. package/dist/plugins/workers/protocol.d.cts +112 -0
  353. package/dist/plugins/workers/protocol.d.ts +112 -0
  354. package/dist/plugins/workers/protocol.d.ts.map +1 -0
  355. package/dist/plugins/workers/worker_bind.d.cts +64 -0
  356. package/dist/plugins/workers/worker_bind.d.ts +64 -0
  357. package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
  358. package/dist/plugins/workers/worker_loop.d.cts +14 -0
  359. package/dist/plugins/workers/worker_loop.d.ts +14 -0
  360. package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
  361. package/dist/plugins/workers.cjs +1 -0
  362. package/dist/plugins/workers.d.cts +1 -0
  363. package/dist/plugins/workers.d.ts +1 -0
  364. package/dist/plugins/workers.development.cjs +1 -0
  365. package/dist/plugins/workers.development.js +596 -0
  366. package/dist/plugins/workers.js +474 -0
  367. package/dist/primitives.cjs +1 -1
  368. package/dist/primitives.d.cts +4 -4
  369. package/dist/primitives.d.ts +4 -4
  370. package/dist/primitives.development.cjs +1 -1
  371. package/dist/primitives.development.js +66 -22
  372. package/dist/primitives.js +66 -22
  373. package/dist/shared-BKl12xF1.js +132 -0
  374. package/dist/shared-Dk-pACZT.cjs +1 -0
  375. package/dist/shared.cjs +1 -1
  376. package/dist/shared.d.cts +7 -7
  377. package/dist/shared.d.ts +7 -7
  378. package/dist/shared.d.ts.map +1 -1
  379. package/dist/shared.development.cjs +1 -1
  380. package/dist/shared.development.js +4 -3
  381. package/dist/shared.js +4 -3
  382. package/dist/topological_sort-Cc_yXqPT.js +346 -0
  383. package/dist/topological_sort-vp1imU6D.cjs +1 -0
  384. package/dist/type_primitives/assertions.d.cts +12 -16
  385. package/dist/type_primitives/assertions.d.ts +12 -16
  386. package/dist/type_primitives/assertions.d.ts.map +1 -1
  387. package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
  388. package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
  389. package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
  390. package/dist/type_primitives/bitset/bitset.d.cts +7 -11
  391. package/dist/type_primitives/bitset/bitset.d.ts +7 -11
  392. package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
  393. package/dist/type_primitives/brand.d.cts +2 -7
  394. package/dist/type_primitives/brand.d.ts +2 -7
  395. package/dist/type_primitives/brand.d.ts.map +1 -1
  396. package/dist/type_primitives/error.d.cts +1 -2
  397. package/dist/type_primitives/error.d.ts +1 -2
  398. package/dist/type_primitives/error.d.ts.map +1 -1
  399. package/dist/type_primitives/index.d.cts +1 -1
  400. package/dist/type_primitives/index.d.ts +1 -1
  401. package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
  402. package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
  403. package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
  404. package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
  405. package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
  406. package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
  407. package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
  408. package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
  409. package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
  410. package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +18 -17
  411. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +18 -17
  412. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
  413. package/dist/utils/error.d.ts.map +1 -1
  414. package/dist/version.d.cts +4 -4
  415. package/dist/version.d.ts +4 -4
  416. package/dist/worker.cjs +1 -0
  417. package/dist/worker.d.cts +17 -0
  418. package/dist/worker.d.ts +17 -0
  419. package/dist/worker.d.ts.map +1 -0
  420. package/dist/worker.development.cjs +1 -0
  421. package/dist/worker.development.js +253 -0
  422. package/dist/worker.js +253 -0
  423. package/package.json +363 -191
  424. package/dist/core/ecs/builtin_relations.d.cts +0 -43
  425. package/dist/core/ecs/builtin_relations.d.ts +0 -43
  426. package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
  427. package/dist/core/ecs/event_registry.d.cts +0 -22
  428. package/dist/core/ecs/event_registry.d.ts +0 -22
  429. package/dist/core/ecs/event_registry.d.ts.map +0 -1
  430. package/dist/core/ecs/relation_service.d.ts.map +0 -1
  431. package/dist/core/ecs/resume.d.cts +0 -85
  432. package/dist/core/ecs/resume.d.ts +0 -85
  433. package/dist/core/ecs/resume.d.ts.map +0 -1
  434. package/dist/core/ecs/snapshot_service.d.cts +0 -94
  435. package/dist/core/ecs/snapshot_service.d.ts +0 -94
  436. package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
  437. package/dist/extensions/editor/editor.d.ts.map +0 -1
  438. package/dist/extensions/editor/field_handle.d.ts.map +0 -1
  439. package/dist/extensions/editor/index.cjs +0 -1
  440. package/dist/extensions/editor/index.d.cts +0 -21
  441. package/dist/extensions/editor/index.d.ts +0 -21
  442. package/dist/extensions/editor/index.d.ts.map +0 -1
  443. package/dist/extensions/editor/index.development.cjs +0 -1
  444. package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
  445. package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
  446. package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
  447. package/dist/extensions/reactive/index.cjs +0 -1
  448. package/dist/extensions/reactive/index.d.cts +0 -23
  449. package/dist/extensions/reactive/index.d.ts +0 -23
  450. package/dist/extensions/reactive/index.d.ts.map +0 -1
  451. package/dist/extensions/reactive/index.development.cjs +0 -1
  452. package/dist/extensions/reactive/index.development.js +0 -215
  453. package/dist/extensions/reactive/index.js +0 -215
  454. package/dist/extensions/solid/index.cjs +0 -1
  455. package/dist/extensions/solid/index.d.cts +0 -6
  456. package/dist/extensions/solid/index.d.ts +0 -6
  457. package/dist/extensions/solid/index.d.ts.map +0 -1
  458. package/dist/extensions/solid/index.development.cjs +0 -1
  459. package/dist/extensions/solid/index.development.js +0 -40
  460. package/dist/extensions/solid/index.js +0 -36
  461. package/dist/extensions/solid/kernel_solid.d.cts +0 -45
  462. package/dist/extensions/solid/kernel_solid.d.ts +0 -45
  463. package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
  464. package/dist/host_commands-3jyFfWNg.js +0 -2326
  465. package/dist/host_commands-DNf0f6ko.cjs +0 -1
  466. package/dist/internal-C9jjL90H.js +0 -2485
  467. package/dist/internal-RZN14uMw.cjs +0 -2
  468. package/dist/interop-CT-REx0W.cjs +0 -1
  469. package/dist/interop-CcY6ASQc.js +0 -18
  470. package/dist/interop-DqxleBo7.js +0 -18
  471. package/dist/interop-T1HZ-Dpa.cjs +0 -1
  472. package/dist/kernel-Cz2Kxlwl.js +0 -240
  473. package/dist/kernel-DgyrLFjW.js +0 -227
  474. package/dist/kernel-sw7ScKWu.cjs +0 -1
  475. package/dist/kernel-yWV3XnAb.cjs +0 -1
  476. package/dist/reactive/array.d.cts +0 -24
  477. package/dist/reactive/array.d.ts +0 -24
  478. package/dist/reactive/array.d.ts.map +0 -1
  479. package/dist/reactive/index.cjs +0 -1
  480. package/dist/reactive/index.d.cts +0 -11
  481. package/dist/reactive/index.d.ts +0 -11
  482. package/dist/reactive/index.d.ts.map +0 -1
  483. package/dist/reactive/index.development.cjs +0 -1
  484. package/dist/reactive/index.development.js +0 -18
  485. package/dist/reactive/index.js +0 -18
  486. package/dist/reactive/interop.d.cts +0 -19
  487. package/dist/reactive/interop.d.ts +0 -19
  488. package/dist/reactive/interop.d.ts.map +0 -1
  489. package/dist/reactive/kernel.d.cts +0 -73
  490. package/dist/reactive/kernel.d.ts +0 -73
  491. package/dist/reactive/kernel.d.ts.map +0 -1
  492. package/dist/reactive/map.d.cts +0 -16
  493. package/dist/reactive/map.d.ts +0 -16
  494. package/dist/reactive/map.d.ts.map +0 -1
  495. package/dist/reactive/shallow.d.cts +0 -11
  496. package/dist/reactive/shallow.d.ts +0 -11
  497. package/dist/reactive/shallow.d.ts.map +0 -1
  498. package/dist/reactive/struct.d.cts +0 -10
  499. package/dist/reactive/struct.d.ts +0 -10
  500. package/dist/reactive/struct.d.ts.map +0 -1
  501. package/dist/shallow-9S1pY_Iw.js +0 -159
  502. package/dist/shallow-C5YmTbtb.cjs +0 -1
  503. package/dist/shallow-DQ8aG51_.cjs +0 -1
  504. package/dist/shallow-DfnAm9vG.js +0 -150
  505. package/dist/shared-BMXh9hxm.cjs +0 -1
  506. package/dist/shared-DQKK0i-E.js +0 -109
  507. package/dist/topological_sort-BDvEyb9W.cjs +0 -1
  508. package/dist/topological_sort-DK6EjpWa.js +0 -135
  509. package/dist/typed_arrays-BcXcnzB4.js +0 -258
  510. package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
@@ -1,72 +1,71 @@
1
1
  /**
2
- * Action ring main-thread producer / worker-thread consumer SPSC ring
3
- * for client input intents (`send_action`-shaped bytes). Plan §6.5 task
4
- * 3 / `docs/ideas/buffer-wasm-sim-plan-2026-05-14T1600.md`.
2
+ * Action ring, a main-thread producer and worker-thread consumer SPSC ring
3
+ * for client input intents (`send_action`-shaped bytes).
5
4
  *
6
5
  * Same on-the-wire shape as `command_ring.ts`, but with two practical
7
6
  * differences:
8
7
  *
9
- * 1. Producer/consumer roles flip the action ring is main → worker,
8
+ * 1. Producer and consumer roles flip, the action ring is main → worker,
10
9
  * whereas the command ring is sim → host.
11
10
  * 2. Slot payload carries a `length` prefix because client actions are
12
11
  * variable-width (the encoded bytes that would normally go straight
13
- * to the WebSocket). `payload[0]` is the length in bytes; bytes
12
+ * to the WebSocket). `payload[0]` is the length in bytes. Bytes
14
13
  * `[1..1+length)` are the action payload itself.
15
14
  *
16
15
  * Layout (identical to command ring header):
17
16
  *
18
- * [ write_head: u32 ] monotonic; modulo `capacity_slots` for slot
17
+ * [ write_head: u32 ] monotonic. Modulo `capacity_slots` for slot
19
18
  * [ read_head: u32 ] monotonic
20
19
  * [ capacity: u32 ] slot count, power-of-two
21
- * [ overflow: u32 ] 0 = OK; 1 = ring exhausted (producer side)
20
+ * [ overflow: u32 ] 0 = OK, 1 = ring exhausted (producer side)
22
21
  * [ slot 0: 16 B ] length: u8, payload: [15]u8
23
22
  * [ slot 1: 16 B ] ...
24
23
  *
25
24
  * SPSC contract:
26
- * - Producer: main thread, from `GameNetworkClient.send_action`. Pushes
27
- * one entry per user action; `Atomics.store`s `write_head` after each.
28
- * - Consumer: sim worker, drained on each `apply_diff` / `apply_snapshot`
29
- * boundary. `Atomics.store`s `read_head` after each pop.
30
- * - Today's consumer is a no-op observer (logs / counts in DEV) the
31
- * wire path still goes main → WebSocket → server. PR 5N migrates the
32
- * `PredictionReconciler` into the worker so the action ring becomes
33
- * load-bearing for client-side prediction.
25
+ * - Producer: the main thread, from the host's action-send call. It pushes
26
+ * one entry per user action, and `Atomics.store`s `write_head` after each.
27
+ * - Consumer: the worker, drained on each apply boundary. It `Atomics.store`s
28
+ * `read_head` after each pop.
29
+ * - Today's consumer only observes (it logs or counts in DEV), because the
30
+ * host's own send path still carries the action. A later change moves
31
+ * reconciliation into the worker, and the ring becomes load-bearing for
32
+ * client-side prediction.
34
33
  *
35
34
  * Overflow:
36
- * - If main writes a slot when `(write_head - read_head) === capacity`,
37
- * it sets `overflow = 1` and the push returns `false`. The server
38
- * send path is independent (`_transport.send(...)` ran first), so an
39
- * overflow doesn't drop the action it only drops worker
35
+ * - If the main thread writes a slot when
36
+ * `(write_head - read_head) === capacity`, it sets `overflow = 1` and the
37
+ * push returns `false`. The host's own send path is independent and ran
38
+ * first, so an overflow does not drop the action. It only drops worker
40
39
  * observability for that one entry.
41
40
  *
42
- * Atomics: the head fields (`write_head` / `read_head`) are the
43
- * cross-thread synchronization edge the producer runs on the main
44
- * thread, the consumer in the sim worker, and both alias the same
41
+ * Atomics: the head fields `write_head` and `read_head` are the
42
+ * cross-thread synchronization edge, the producer runs on the main
43
+ * thread, the consumer in the worker, and both alias the same
45
44
  * `SharedArrayBuffer`. The producer writes the slot bytes, then
46
- * `Atomics.store`s `write_head`; the consumer `Atomics.load`s
45
+ * `Atomics.store`s `write_head`. The consumer `Atomics.load`s
47
46
  * `write_head` before touching the slot, reads it, then `Atomics.store`s
48
47
  * `read_head`. These SeqCst ops establish the happens-before that a
49
- * plain `DataView` write does not under the JS memory model (#374):
48
+ * plain `DataView` write does not under the JS memory model:
50
49
  * without them the worker could observe a bumped `write_head` before the
51
50
  * producer's `setUint8(len)` + payload `set()` are visible and read a
52
- * torn/stale slot, and the producer could read a stale `read_head`
51
+ * torn or stale slot, and the producer could read a stale `read_head`
53
52
  * (false overflow, or overwrite a slot mid-read). Slot payload bytes
54
- * stay on plain `DataView` / `Uint8Array` ops the head Atomics fence
55
- * them, so no per-byte atomic is needed. A future PR may still add an
56
- * `Atomics.wait/notify` pair so the worker can block between actions
57
- * instead of polling additive change, no layout shift.
53
+ * stay on plain `DataView` and `Uint8Array` ops, the head Atomics fence
54
+ * them, so no per-byte atomic is needed. A later change may still add an
55
+ * `Atomics.wait` and `Atomics.notify` pair so the worker can block between
56
+ * actions instead of polling. That is additive, with no layout shift.
58
57
  */
59
58
  /** Total bytes for the ring header. Identical to `command_ring`. */
60
59
  export declare const ACTION_RING_HEADER_BYTES = 16;
61
- /** Fixed slot size 1-byte length + 15-byte payload. */
60
+ /** Fixed slot size, 1-byte length + 15-byte payload. */
62
61
  export declare const ACTION_RING_SLOT_BYTES = 16;
63
- /** Default ring capacity in slots. Sized for ~250 ms of click-spam at 60
64
- * Hz on the high end of human input rates; 256 × 16 B = 4 KiB + 16 B
65
- * header. */
62
+ /** Default ring capacity in slots. It holds a burst of clicks at the high end
63
+ * of a human input rate, over the frames a host takes to drain it. The region
64
+ * is the slot count times `ACTION_RING_SLOT_BYTES`, plus the header. */
66
65
  export declare const ACTION_RING_DEFAULT_CAPACITY_SLOTS = 256;
67
- /** Max payload bytes per slot (slot size minus the length prefix). All
68
- * actions defined in `packages/protocol/src/actions.ts` encode to under
69
- * 8 bytes, so this is comfortably above today's max. */
66
+ /** Max payload bytes per slot, the slot size minus the length prefix. An
67
+ * action a host sends encodes to a few bytes, so the slot holds one with
68
+ * room to spare. */
70
69
  export declare const ACTION_RING_MAX_PAYLOAD_BYTES: number;
71
70
  /** Byte offsets within the ring header. Matches `command_ring` so a
72
71
  * future shared helper can normalise across both rings without per-ring
@@ -83,7 +82,7 @@ export declare class ActionRingError extends Error {
83
82
  constructor(message: string);
84
83
  }
85
84
  /** Initialise the ring header at `ringOff` in the SAB. Zeroes heads
86
- * and the overflow flag; sets `capacity_slots`. Slot bytes are left
85
+ * and the overflow flag. Sets `capacity_slots`. Slot bytes are left
87
86
  * as-is (callers normally allocate the ring on a zero-initialised SAB). */
88
87
  export declare function initActionRing(view: DataView, ringOff: number, capacitySlots: number): void;
89
88
  /** Read live ring-header fields. Heads are stored signed but returned
@@ -96,40 +95,40 @@ export declare function actionRingOverflow(view: DataView, ringOff: number): boo
96
95
  /** Pending entry count = `(write_head - read_head) mod 2^32`. */
97
96
  export declare function pendingActionCount(view: DataView, ringOff: number): number;
98
97
  /** Push an action into the ring. `payload` must be in
99
- * `[1, ACTION_RING_MAX_PAYLOAD_BYTES]`; longer payloads and **empty**
100
- * ones are an `ActionRingError` (the producer is the only caller and it
98
+ * `[1, ACTION_RING_MAX_PAYLOAD_BYTES]`. Longer payloads, and **empty**
99
+ * ones, are an `ActionRingError` (the producer is the only caller and it
101
100
  * can size its inputs ahead of time). The zero-length rejection closes the
102
101
  * lower-bound footgun: a 0-byte slot is indistinguishable from
103
102
  * `popAction`'s empty-ring sentinel (`0`), so admitting one would let it
104
103
  * masquerade as "ring empty". No encoder produces a 0-byte payload, so this
105
- * only ever rejects the ABI-skew bug case (#430). Returns `false` on
104
+ * only ever rejects the ABI-skew bug case. Returns `false` on
106
105
  * overflow and sets the overflow flag. */
107
106
  export declare function pushAction(view: DataView, ringOff: number, payload: Uint8Array): boolean;
108
107
  /** Pop one action from the ring. Returns the byte length written into
109
108
  * `outPayload`, or `0` if the ring was empty. `outPayload` must be at
110
- * least `ACTION_RING_MAX_PAYLOAD_BYTES`; only the first `length` bytes
109
+ * least `ACTION_RING_MAX_PAYLOAD_BYTES`. Only the first `length` bytes
111
110
  * are meaningful after a non-zero return.
112
111
  *
113
- * NOTE: a `0` return is ambiguous it means "ring empty" OR "a 0-byte
112
+ * A `0` return is ambiguous. It means "ring empty" or "a 0-byte
114
113
  * slot" (the latter only reachable via ABI-skew, since `pushAction`
115
114
  * rejects empty payloads). Callers that loop must decide emptiness from
116
- * the heads (`pendingActionCount` / `write_head === read_head`), not
117
- * from this return value; see `drainActionRing` and #430. */
115
+ * the heads, either `pendingActionCount` or `write_head === read_head`, and
116
+ * not from this return value. See `drainActionRing`. */
118
117
  export declare function popAction(view: DataView, ringOff: number, outPayload: Uint8Array): number;
119
118
  /** Drain every pending action, invoking `handler(payload)` per entry.
120
119
  * The `payload` passed to the handler is a freshly-copied
121
120
  * `Uint8Array(length)` so handlers can hold it past the next pop without
122
121
  * aliasing the scratch buffer. Returns the number of actions drained.
123
122
  *
124
- * Termination is decided from the heads (`pendingActionCount`), NOT from
125
- * `popAction`'s return value. A genuine 0-byte slot returns `0` the same
126
- * value `popAction` yields on an empty ring so terminating on `len === 0`
123
+ * Termination is decided from the heads (`pendingActionCount`), not from
124
+ * `popAction`'s return value. A genuine 0-byte slot returns `0`, the same
125
+ * value `popAction` yields on an empty ring, so terminating on `len === 0`
127
126
  * would silently consume the zero-length entry and strand everything queued
128
- * behind it for a tick (#430). The heads check is SPSC-safe: this consumer
127
+ * behind it for a tick. The heads check is SPSC-safe: this consumer
129
128
  * is the sole reader, so a non-zero pending count cannot race to empty before
130
129
  * the `popAction` below. */
131
130
  export declare function drainActionRing(view: DataView, ringOff: number, handler: (payload: Uint8Array) => void): number;
132
- /** Clear the overflow flag. The producer sets it on a failed push; the
131
+ /** Clear the overflow flag. The producer sets it on a failed push. The
133
132
  * consumer can reset it once it has observed and logged the condition,
134
133
  * so a single overflow doesn't keep firing dev assertions. */
135
134
  export declare function clearActionRingOverflow(view: DataView, ringOff: number): void;
@@ -1,72 +1,71 @@
1
1
  /**
2
- * Action ring main-thread producer / worker-thread consumer SPSC ring
3
- * for client input intents (`send_action`-shaped bytes). Plan §6.5 task
4
- * 3 / `docs/ideas/buffer-wasm-sim-plan-2026-05-14T1600.md`.
2
+ * Action ring, a main-thread producer and worker-thread consumer SPSC ring
3
+ * for client input intents (`send_action`-shaped bytes).
5
4
  *
6
5
  * Same on-the-wire shape as `command_ring.ts`, but with two practical
7
6
  * differences:
8
7
  *
9
- * 1. Producer/consumer roles flip the action ring is main → worker,
8
+ * 1. Producer and consumer roles flip, the action ring is main → worker,
10
9
  * whereas the command ring is sim → host.
11
10
  * 2. Slot payload carries a `length` prefix because client actions are
12
11
  * variable-width (the encoded bytes that would normally go straight
13
- * to the WebSocket). `payload[0]` is the length in bytes; bytes
12
+ * to the WebSocket). `payload[0]` is the length in bytes. Bytes
14
13
  * `[1..1+length)` are the action payload itself.
15
14
  *
16
15
  * Layout (identical to command ring header):
17
16
  *
18
- * [ write_head: u32 ] monotonic; modulo `capacity_slots` for slot
17
+ * [ write_head: u32 ] monotonic. Modulo `capacity_slots` for slot
19
18
  * [ read_head: u32 ] monotonic
20
19
  * [ capacity: u32 ] slot count, power-of-two
21
- * [ overflow: u32 ] 0 = OK; 1 = ring exhausted (producer side)
20
+ * [ overflow: u32 ] 0 = OK, 1 = ring exhausted (producer side)
22
21
  * [ slot 0: 16 B ] length: u8, payload: [15]u8
23
22
  * [ slot 1: 16 B ] ...
24
23
  *
25
24
  * SPSC contract:
26
- * - Producer: main thread, from `GameNetworkClient.send_action`. Pushes
27
- * one entry per user action; `Atomics.store`s `write_head` after each.
28
- * - Consumer: sim worker, drained on each `apply_diff` / `apply_snapshot`
29
- * boundary. `Atomics.store`s `read_head` after each pop.
30
- * - Today's consumer is a no-op observer (logs / counts in DEV) the
31
- * wire path still goes main → WebSocket → server. PR 5N migrates the
32
- * `PredictionReconciler` into the worker so the action ring becomes
33
- * load-bearing for client-side prediction.
25
+ * - Producer: the main thread, from the host's action-send call. It pushes
26
+ * one entry per user action, and `Atomics.store`s `write_head` after each.
27
+ * - Consumer: the worker, drained on each apply boundary. It `Atomics.store`s
28
+ * `read_head` after each pop.
29
+ * - Today's consumer only observes (it logs or counts in DEV), because the
30
+ * host's own send path still carries the action. A later change moves
31
+ * reconciliation into the worker, and the ring becomes load-bearing for
32
+ * client-side prediction.
34
33
  *
35
34
  * Overflow:
36
- * - If main writes a slot when `(write_head - read_head) === capacity`,
37
- * it sets `overflow = 1` and the push returns `false`. The server
38
- * send path is independent (`_transport.send(...)` ran first), so an
39
- * overflow doesn't drop the action it only drops worker
35
+ * - If the main thread writes a slot when
36
+ * `(write_head - read_head) === capacity`, it sets `overflow = 1` and the
37
+ * push returns `false`. The host's own send path is independent and ran
38
+ * first, so an overflow does not drop the action. It only drops worker
40
39
  * observability for that one entry.
41
40
  *
42
- * Atomics: the head fields (`write_head` / `read_head`) are the
43
- * cross-thread synchronization edge the producer runs on the main
44
- * thread, the consumer in the sim worker, and both alias the same
41
+ * Atomics: the head fields `write_head` and `read_head` are the
42
+ * cross-thread synchronization edge, the producer runs on the main
43
+ * thread, the consumer in the worker, and both alias the same
45
44
  * `SharedArrayBuffer`. The producer writes the slot bytes, then
46
- * `Atomics.store`s `write_head`; the consumer `Atomics.load`s
45
+ * `Atomics.store`s `write_head`. The consumer `Atomics.load`s
47
46
  * `write_head` before touching the slot, reads it, then `Atomics.store`s
48
47
  * `read_head`. These SeqCst ops establish the happens-before that a
49
- * plain `DataView` write does not under the JS memory model (#374):
48
+ * plain `DataView` write does not under the JS memory model:
50
49
  * without them the worker could observe a bumped `write_head` before the
51
50
  * producer's `setUint8(len)` + payload `set()` are visible and read a
52
- * torn/stale slot, and the producer could read a stale `read_head`
51
+ * torn or stale slot, and the producer could read a stale `read_head`
53
52
  * (false overflow, or overwrite a slot mid-read). Slot payload bytes
54
- * stay on plain `DataView` / `Uint8Array` ops the head Atomics fence
55
- * them, so no per-byte atomic is needed. A future PR may still add an
56
- * `Atomics.wait/notify` pair so the worker can block between actions
57
- * instead of polling additive change, no layout shift.
53
+ * stay on plain `DataView` and `Uint8Array` ops, the head Atomics fence
54
+ * them, so no per-byte atomic is needed. A later change may still add an
55
+ * `Atomics.wait` and `Atomics.notify` pair so the worker can block between
56
+ * actions instead of polling. That is additive, with no layout shift.
58
57
  */
59
58
  /** Total bytes for the ring header. Identical to `command_ring`. */
60
59
  export declare const ACTION_RING_HEADER_BYTES = 16;
61
- /** Fixed slot size 1-byte length + 15-byte payload. */
60
+ /** Fixed slot size, 1-byte length + 15-byte payload. */
62
61
  export declare const ACTION_RING_SLOT_BYTES = 16;
63
- /** Default ring capacity in slots. Sized for ~250 ms of click-spam at 60
64
- * Hz on the high end of human input rates; 256 × 16 B = 4 KiB + 16 B
65
- * header. */
62
+ /** Default ring capacity in slots. It holds a burst of clicks at the high end
63
+ * of a human input rate, over the frames a host takes to drain it. The region
64
+ * is the slot count times `ACTION_RING_SLOT_BYTES`, plus the header. */
66
65
  export declare const ACTION_RING_DEFAULT_CAPACITY_SLOTS = 256;
67
- /** Max payload bytes per slot (slot size minus the length prefix). All
68
- * actions defined in `packages/protocol/src/actions.ts` encode to under
69
- * 8 bytes, so this is comfortably above today's max. */
66
+ /** Max payload bytes per slot, the slot size minus the length prefix. An
67
+ * action a host sends encodes to a few bytes, so the slot holds one with
68
+ * room to spare. */
70
69
  export declare const ACTION_RING_MAX_PAYLOAD_BYTES: number;
71
70
  /** Byte offsets within the ring header. Matches `command_ring` so a
72
71
  * future shared helper can normalise across both rings without per-ring
@@ -83,7 +82,7 @@ export declare class ActionRingError extends Error {
83
82
  constructor(message: string);
84
83
  }
85
84
  /** Initialise the ring header at `ringOff` in the SAB. Zeroes heads
86
- * and the overflow flag; sets `capacity_slots`. Slot bytes are left
85
+ * and the overflow flag. Sets `capacity_slots`. Slot bytes are left
87
86
  * as-is (callers normally allocate the ring on a zero-initialised SAB). */
88
87
  export declare function initActionRing(view: DataView, ringOff: number, capacitySlots: number): void;
89
88
  /** Read live ring-header fields. Heads are stored signed but returned
@@ -96,40 +95,40 @@ export declare function actionRingOverflow(view: DataView, ringOff: number): boo
96
95
  /** Pending entry count = `(write_head - read_head) mod 2^32`. */
97
96
  export declare function pendingActionCount(view: DataView, ringOff: number): number;
98
97
  /** Push an action into the ring. `payload` must be in
99
- * `[1, ACTION_RING_MAX_PAYLOAD_BYTES]`; longer payloads and **empty**
100
- * ones are an `ActionRingError` (the producer is the only caller and it
98
+ * `[1, ACTION_RING_MAX_PAYLOAD_BYTES]`. Longer payloads, and **empty**
99
+ * ones, are an `ActionRingError` (the producer is the only caller and it
101
100
  * can size its inputs ahead of time). The zero-length rejection closes the
102
101
  * lower-bound footgun: a 0-byte slot is indistinguishable from
103
102
  * `popAction`'s empty-ring sentinel (`0`), so admitting one would let it
104
103
  * masquerade as "ring empty". No encoder produces a 0-byte payload, so this
105
- * only ever rejects the ABI-skew bug case (#430). Returns `false` on
104
+ * only ever rejects the ABI-skew bug case. Returns `false` on
106
105
  * overflow and sets the overflow flag. */
107
106
  export declare function pushAction(view: DataView, ringOff: number, payload: Uint8Array): boolean;
108
107
  /** Pop one action from the ring. Returns the byte length written into
109
108
  * `outPayload`, or `0` if the ring was empty. `outPayload` must be at
110
- * least `ACTION_RING_MAX_PAYLOAD_BYTES`; only the first `length` bytes
109
+ * least `ACTION_RING_MAX_PAYLOAD_BYTES`. Only the first `length` bytes
111
110
  * are meaningful after a non-zero return.
112
111
  *
113
- * NOTE: a `0` return is ambiguous it means "ring empty" OR "a 0-byte
112
+ * A `0` return is ambiguous. It means "ring empty" or "a 0-byte
114
113
  * slot" (the latter only reachable via ABI-skew, since `pushAction`
115
114
  * rejects empty payloads). Callers that loop must decide emptiness from
116
- * the heads (`pendingActionCount` / `write_head === read_head`), not
117
- * from this return value; see `drainActionRing` and #430. */
115
+ * the heads, either `pendingActionCount` or `write_head === read_head`, and
116
+ * not from this return value. See `drainActionRing`. */
118
117
  export declare function popAction(view: DataView, ringOff: number, outPayload: Uint8Array): number;
119
118
  /** Drain every pending action, invoking `handler(payload)` per entry.
120
119
  * The `payload` passed to the handler is a freshly-copied
121
120
  * `Uint8Array(length)` so handlers can hold it past the next pop without
122
121
  * aliasing the scratch buffer. Returns the number of actions drained.
123
122
  *
124
- * Termination is decided from the heads (`pendingActionCount`), NOT from
125
- * `popAction`'s return value. A genuine 0-byte slot returns `0` the same
126
- * value `popAction` yields on an empty ring so terminating on `len === 0`
123
+ * Termination is decided from the heads (`pendingActionCount`), not from
124
+ * `popAction`'s return value. A genuine 0-byte slot returns `0`, the same
125
+ * value `popAction` yields on an empty ring, so terminating on `len === 0`
127
126
  * would silently consume the zero-length entry and strand everything queued
128
- * behind it for a tick (#430). The heads check is SPSC-safe: this consumer
127
+ * behind it for a tick. The heads check is SPSC-safe: this consumer
129
128
  * is the sole reader, so a non-zero pending count cannot race to empty before
130
129
  * the `popAction` below. */
131
130
  export declare function drainActionRing(view: DataView, ringOff: number, handler: (payload: Uint8Array) => void): number;
132
- /** Clear the overflow flag. The producer sets it on a failed push; the
131
+ /** Clear the overflow flag. The producer sets it on a failed push. The
133
132
  * consumer can reset it once it has observed and logged the condition,
134
133
  * so a single overflow doesn't keep firing dev assertions. */
135
134
  export declare function clearActionRingOverflow(view: DataView, ringOff: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"action_ring.d.ts","sourceRoot":"","sources":["../../../src/core/store/action_ring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,yDAAyD;AACzD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;aAEa;AACb,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD;;wDAEwD;AACxD,eAAO,MAAM,6BAA6B,QAA6B,CAAC;AAExE;;iBAEiB;AACjB,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAwBX,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7D;AAMD,qBAAa,eAAgB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI3B;AAED;;2EAE2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAiB3F;AAED;;mDAEmD;AACnD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AACD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AACD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/E;AACD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;0CAQ0C;AAC1C,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAoCxF;AAED;;;;;;;;;6DAS6D;AAC7D,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAwBzF;AAED;;;;;;;;;;;4BAW4B;AAC5B,wBAAgB,eAAe,CAC9B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GACpC,MAAM,CAUR;AAED;;8DAE8D;AAC9D,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7E"}
1
+ {"version":3,"file":"action_ring.d.ts","sourceRoot":"","sources":["../../../src/core/store/action_ring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;wEAEwE;AACxE,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD;;oBAEoB;AACpB,eAAO,MAAM,6BAA6B,QAA6B,CAAC;AAExE;;iBAEiB;AACjB,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAwBX,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7D;AAMD,qBAAa,eAAgB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI3B;AAED;;2EAE2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAiB3F;AAED;;mDAEmD;AACnD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AACD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AACD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/E;AACD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;0CAQ0C;AAC1C,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CA0CxF;AAED;;;;;;;;;wDASwD;AACxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CA4BzF;AAED;;;;;;;;;;;4BAW4B;AAC5B,wBAAgB,eAAe,CAC9B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GACpC,MAAM,CAUR;AAED;;8DAE8D;AAC9D,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7E"}