@logixjs/core 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/LICENSE +201 -0
  2. package/dist/{Bound-BN1DQ_lM.d.ts → Bound-CEa1ihvH.d.ts} +2 -2
  3. package/dist/{Bound-BPIfH9SS.d.cts → Bound-CNLNkC7c.d.cts} +2 -2
  4. package/dist/Bound.cjs +620 -163
  5. package/dist/Bound.cjs.map +1 -1
  6. package/dist/Bound.d.cts +3 -3
  7. package/dist/Bound.d.ts +3 -3
  8. package/dist/Bound.js +14 -14
  9. package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-BhMYr-1i.d.cts} +3 -3
  10. package/dist/{Debug-B5q5Bkzx.d.ts → Debug-ByM7m4Ft.d.ts} +3 -3
  11. package/dist/Debug.cjs +553 -32
  12. package/dist/Debug.cjs.map +1 -1
  13. package/dist/Debug.d.cts +10 -8
  14. package/dist/Debug.d.ts +10 -8
  15. package/dist/Debug.js +12 -10
  16. package/dist/EffectOp.cjs.map +1 -1
  17. package/dist/EffectOp.js +2 -3
  18. package/dist/EffectOp.js.map +1 -1
  19. package/dist/Env.cjs +664 -6
  20. package/dist/Env.cjs.map +1 -1
  21. package/dist/Env.js +5 -2
  22. package/dist/ExternalStore-BAz83PVq.d.cts +60 -0
  23. package/dist/ExternalStore-BYWPbYs8.d.ts +60 -0
  24. package/dist/ExternalStore.cjs +746 -0
  25. package/dist/ExternalStore.cjs.map +1 -0
  26. package/dist/ExternalStore.d.cts +4 -0
  27. package/dist/ExternalStore.d.ts +4 -0
  28. package/dist/ExternalStore.js +19 -0
  29. package/dist/ExternalStore.js.map +1 -0
  30. package/dist/{Flow-1fZT8MpX.d.cts → Flow-BlSoMmhV.d.cts} +2 -2
  31. package/dist/{Flow-BhpjE22E.d.ts → Flow-CQSGve5c.d.ts} +2 -2
  32. package/dist/Flow.cjs +2 -2
  33. package/dist/Flow.cjs.map +1 -1
  34. package/dist/Flow.d.cts +4 -4
  35. package/dist/Flow.d.ts +4 -4
  36. package/dist/Flow.js +7 -8
  37. package/dist/{Handle-D_cLW1Z3.d.ts → Handle-B7PSmsrY.d.ts} +1 -1
  38. package/dist/{Handle-D8D1zPb_.d.cts → Handle-ByovhL-c.d.cts} +1 -1
  39. package/dist/Handle.d.cts +3 -3
  40. package/dist/Handle.d.ts +3 -3
  41. package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-DGSpS4GM.d.ts} +2 -2
  42. package/dist/{Kernel-8kC-jOda.d.cts → Kernel-DZAk-Mrn.d.cts} +2 -2
  43. package/dist/Kernel.cjs +680 -22
  44. package/dist/Kernel.cjs.map +1 -1
  45. package/dist/Kernel.d.cts +10 -8
  46. package/dist/Kernel.d.ts +10 -8
  47. package/dist/Kernel.js +7 -4
  48. package/dist/{Link-Db7975nU.d.ts → Link-Cm4eR9n0.d.ts} +10 -3
  49. package/dist/{Link-fX8x1eCK.d.cts → Link-DF8i8iWR.d.cts} +10 -3
  50. package/dist/Link.cjs +1128 -86
  51. package/dist/Link.cjs.map +1 -1
  52. package/dist/Link.d.cts +3 -3
  53. package/dist/Link.d.ts +3 -3
  54. package/dist/Link.js +30 -25
  55. package/dist/{Logic-DRh4sDZj.d.cts → Logic-BcQA0AvE.d.cts} +1 -1
  56. package/dist/{Logic-BRjEMr-W.d.ts → Logic-OotSE1xw.d.ts} +1 -1
  57. package/dist/Logic.d.cts +3 -3
  58. package/dist/Logic.d.ts +3 -3
  59. package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-BNDJ8waF.d.ts} +1 -1
  60. package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-CvZ5WY1B.d.cts} +1 -1
  61. package/dist/MatchBuilder.d.cts +4 -4
  62. package/dist/MatchBuilder.d.ts +4 -4
  63. package/dist/Middleware-D8tUDLv_.d.cts +100 -0
  64. package/dist/Middleware-DS7CbTTN.d.ts +100 -0
  65. package/dist/Middleware.cjs +461 -13
  66. package/dist/Middleware.cjs.map +1 -1
  67. package/dist/Middleware.d.cts +2 -86
  68. package/dist/Middleware.d.ts +2 -86
  69. package/dist/Middleware.js +13 -11
  70. package/dist/{Module-DnzluX2J.d.ts → Module-CFj0I2yE.d.ts} +45 -18
  71. package/dist/{Module-B_0xRDMR.d.cts → Module-DpXPW9EQ.d.cts} +45 -18
  72. package/dist/Module.cjs +8583 -5741
  73. package/dist/Module.cjs.map +1 -1
  74. package/dist/Module.d.cts +5 -4
  75. package/dist/Module.d.ts +5 -4
  76. package/dist/Module.js +32 -27
  77. package/dist/ModuleTag-BcVF6z7B.d.ts +113 -0
  78. package/dist/ModuleTag-DuZXo_NS.d.cts +113 -0
  79. package/dist/ModuleTag.cjs +2609 -1232
  80. package/dist/ModuleTag.cjs.map +1 -1
  81. package/dist/ModuleTag.d.cts +4 -4
  82. package/dist/ModuleTag.d.ts +4 -4
  83. package/dist/ModuleTag.js +28 -25
  84. package/dist/{Observability-cY4kLn0S.d.ts → Observability-D-ZWeEVb.d.ts} +22 -15
  85. package/dist/{Observability-COqEvp2C.d.cts → Observability-V7sRMYTh.d.cts} +22 -15
  86. package/dist/Observability.cjs +1938 -640
  87. package/dist/Observability.cjs.map +1 -1
  88. package/dist/Observability.d.cts +4 -4
  89. package/dist/Observability.d.ts +4 -4
  90. package/dist/Observability.js +21 -19
  91. package/dist/{Process-mL8fHDSB.d.cts → Process-B55aJMFk.d.cts} +29 -4
  92. package/dist/{Process-CM9xbMdP.d.ts → Process-DvhFEwUS.d.ts} +29 -4
  93. package/dist/Process.cjs +1122 -85
  94. package/dist/Process.cjs.map +1 -1
  95. package/dist/Process.d.cts +4 -3
  96. package/dist/Process.d.ts +4 -3
  97. package/dist/Process.js +27 -22
  98. package/dist/{ReadQuery-BlMwhe-F.d.ts → ReadQuery-C4vZ8Prc.d.ts} +2 -2
  99. package/dist/{ReadQuery-SinbStGF.d.ts → ReadQuery-CafjlJQo.d.cts} +1 -1
  100. package/dist/{ReadQuery-SinbStGF.d.cts → ReadQuery-CafjlJQo.d.ts} +1 -1
  101. package/dist/{ReadQuery-CL5XlXts.d.cts → ReadQuery-mc0NgrFV.d.cts} +2 -2
  102. package/dist/ReadQuery.cjs +3 -3
  103. package/dist/ReadQuery.cjs.map +1 -1
  104. package/dist/ReadQuery.d.cts +2 -2
  105. package/dist/ReadQuery.d.ts +2 -2
  106. package/dist/ReadQuery.js +3 -3
  107. package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-C8xZ267q.d.ts} +88 -7
  108. package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DP7Vsv3f.d.cts} +88 -7
  109. package/dist/Reflection.cjs +2934 -1553
  110. package/dist/Reflection.cjs.map +1 -1
  111. package/dist/Reflection.d.cts +14 -11
  112. package/dist/Reflection.d.ts +14 -11
  113. package/dist/Reflection.js +26 -21
  114. package/dist/Resource.cjs +670 -12
  115. package/dist/Resource.cjs.map +1 -1
  116. package/dist/Resource.js +6 -3
  117. package/dist/Root.cjs +675 -17
  118. package/dist/Root.cjs.map +1 -1
  119. package/dist/Root.js +7 -3
  120. package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-BWc9YfUB.d.ts} +37 -7
  121. package/dist/{Runtime-B-aL-f29.d.cts → Runtime-PShIC4DW.d.cts} +37 -7
  122. package/dist/Runtime.cjs +1899 -809
  123. package/dist/Runtime.cjs.map +1 -1
  124. package/dist/Runtime.d.cts +14 -11
  125. package/dist/Runtime.d.ts +14 -11
  126. package/dist/Runtime.js +33 -28
  127. package/dist/ScopeRegistry.cjs +668 -10
  128. package/dist/ScopeRegistry.cjs.map +1 -1
  129. package/dist/ScopeRegistry.js +6 -3
  130. package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-CQsDlXJm.d.cts} +23 -6
  131. package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-YvJzVDKl.d.ts} +23 -6
  132. package/dist/StateTrait.cjs +1475 -370
  133. package/dist/StateTrait.cjs.map +1 -1
  134. package/dist/StateTrait.d.cts +7 -5
  135. package/dist/StateTrait.d.ts +7 -5
  136. package/dist/StateTrait.js +17 -14
  137. package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-CjIBICAA.d.ts} +2 -2
  138. package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-NmqGiXPC.d.cts} +2 -2
  139. package/dist/TraitLifecycle.cjs +489 -32
  140. package/dist/TraitLifecycle.cjs.map +1 -1
  141. package/dist/TraitLifecycle.d.cts +4 -4
  142. package/dist/TraitLifecycle.d.ts +4 -4
  143. package/dist/TraitLifecycle.js +7 -7
  144. package/dist/Workflow-BlFG_20_.d.cts +414 -0
  145. package/dist/Workflow-CW9S_aAP.d.ts +414 -0
  146. package/dist/Workflow.cjs +2977 -0
  147. package/dist/Workflow.cjs.map +1 -0
  148. package/dist/Workflow.d.cts +7 -0
  149. package/dist/Workflow.d.ts +7 -0
  150. package/dist/Workflow.js +55 -0
  151. package/dist/Workflow.js.map +1 -0
  152. package/dist/{chunk-G5ZBFPNU.js → chunk-2A4UKO2D.js} +2 -2
  153. package/dist/chunk-2DE6D42I.js +248 -0
  154. package/dist/chunk-2DE6D42I.js.map +1 -0
  155. package/dist/{chunk-ANLBCBDC.js → chunk-2DVLMSOE.js} +6 -6
  156. package/dist/{chunk-BE3HW4FY.js → chunk-34CF6OGE.js} +14 -16
  157. package/dist/chunk-34CF6OGE.js.map +1 -0
  158. package/dist/{chunk-ZFY7U2FR.js → chunk-3LPIXG56.js} +43 -3
  159. package/dist/chunk-3LPIXG56.js.map +1 -0
  160. package/dist/chunk-3VZYDNXZ.js +10 -0
  161. package/dist/chunk-3VZYDNXZ.js.map +1 -0
  162. package/dist/{chunk-3TMODYZV.js → chunk-3XO4HR6V.js} +2 -2
  163. package/dist/chunk-46FGVWRF.js +817 -0
  164. package/dist/chunk-46FGVWRF.js.map +1 -0
  165. package/dist/chunk-4LODUXFI.js +288 -0
  166. package/dist/chunk-4LODUXFI.js.map +1 -0
  167. package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
  168. package/dist/chunk-4MZ7BT3R.js.map +1 -0
  169. package/dist/{chunk-TKZ7MEIA.js → chunk-53GVPGSM.js} +2 -2
  170. package/dist/{chunk-KP7MUZNX.js → chunk-5W2V2NVJ.js} +2 -2
  171. package/dist/chunk-5W2V2NVJ.js.map +1 -0
  172. package/dist/chunk-6DACKW3D.js +613 -0
  173. package/dist/chunk-6DACKW3D.js.map +1 -0
  174. package/dist/chunk-AQ7L2QZ5.js +1395 -0
  175. package/dist/chunk-AQ7L2QZ5.js.map +1 -0
  176. package/dist/{chunk-NZJKFF45.js → chunk-C2UZZQ76.js} +2 -2
  177. package/dist/chunk-CCKP5Z6F.js +701 -0
  178. package/dist/chunk-CCKP5Z6F.js.map +1 -0
  179. package/dist/chunk-CUKM2XUW.js +27 -0
  180. package/dist/{chunk-QCHIQWAJ.js.map → chunk-CUKM2XUW.js.map} +1 -1
  181. package/dist/{chunk-M2RGJPXX.js → chunk-DBD6Q6JH.js} +3 -3
  182. package/dist/{chunk-ZGDVUPTM.js → chunk-EB4RGQO3.js} +2 -2
  183. package/dist/{chunk-PAYXCY6A.js → chunk-G7ESIQTI.js} +12 -14
  184. package/dist/chunk-G7ESIQTI.js.map +1 -0
  185. package/dist/chunk-GPBAZQ23.js +348 -0
  186. package/dist/chunk-GPBAZQ23.js.map +1 -0
  187. package/dist/{chunk-OFADUJWJ.js → chunk-I4LCE5OY.js} +3 -5
  188. package/dist/{chunk-OFADUJWJ.js.map → chunk-I4LCE5OY.js.map} +1 -1
  189. package/dist/{chunk-DFNM3WX2.js → chunk-IMCC6TBN.js} +158 -39
  190. package/dist/chunk-IMCC6TBN.js.map +1 -0
  191. package/dist/{chunk-76WT3HOR.js → chunk-IROZNQAF.js} +22 -21
  192. package/dist/chunk-IROZNQAF.js.map +1 -0
  193. package/dist/{chunk-TAAPQVZN.js → chunk-ISKNULNH.js} +2 -2
  194. package/dist/chunk-J3CWXIPV.js +242 -0
  195. package/dist/chunk-J3CWXIPV.js.map +1 -0
  196. package/dist/{chunk-PYOE4VSI.js → chunk-JBKYRTCS.js} +224 -161
  197. package/dist/chunk-JBKYRTCS.js.map +1 -0
  198. package/dist/{chunk-66ALHVEX.js → chunk-KKIAYH4X.js} +3 -3
  199. package/dist/{chunk-3RMKLXHX.js → chunk-KLDVG3SY.js} +2 -2
  200. package/dist/{chunk-BABLDP24.js → chunk-KSZQYSEH.js} +3 -3
  201. package/dist/chunk-KSZQYSEH.js.map +1 -0
  202. package/dist/{chunk-CW6T36TN.js → chunk-M3M7JFAH.js} +4 -4
  203. package/dist/chunk-M3M7JFAH.js.map +1 -0
  204. package/dist/{chunk-THATMZXD.js → chunk-MLB253V2.js} +2 -2
  205. package/dist/{chunk-THATMZXD.js.map → chunk-MLB253V2.js.map} +1 -1
  206. package/dist/{chunk-JGIWG6SR.js → chunk-MS77U77X.js} +664 -550
  207. package/dist/chunk-MS77U77X.js.map +1 -0
  208. package/dist/chunk-MW4FA3MW.js +23 -0
  209. package/dist/chunk-MW4FA3MW.js.map +1 -0
  210. package/dist/chunk-MYKNINNN.js +228 -0
  211. package/dist/chunk-MYKNINNN.js.map +1 -0
  212. package/dist/{chunk-4CQAV7YB.js → chunk-O6TTQXTY.js} +2 -2
  213. package/dist/{chunk-NBD3KUOZ.js → chunk-OJDJ4VDQ.js} +35 -24
  214. package/dist/chunk-OJDJ4VDQ.js.map +1 -0
  215. package/dist/{chunk-NQZ2OSGR.js → chunk-PVZEMNJY.js} +9 -9
  216. package/dist/chunk-PVZEMNJY.js.map +1 -0
  217. package/dist/chunk-RN26DV2M.js +271 -0
  218. package/dist/chunk-RN26DV2M.js.map +1 -0
  219. package/dist/{chunk-JCXGZRMU.js → chunk-RQQW3IQC.js} +3 -3
  220. package/dist/chunk-RQQW3IQC.js.map +1 -0
  221. package/dist/{chunk-24VULZ7A.js → chunk-TKOGZDD6.js} +3 -3
  222. package/dist/{chunk-EGK3KN7B.js → chunk-TQYLVXGY.js} +70 -39
  223. package/dist/chunk-TQYLVXGY.js.map +1 -0
  224. package/dist/{chunk-QMM6O4CD.js → chunk-UACD2CL2.js} +15 -3
  225. package/dist/{chunk-QMM6O4CD.js.map → chunk-UACD2CL2.js.map} +1 -1
  226. package/dist/{chunk-M3WTHJHJ.js → chunk-VH575UTV.js} +30 -34
  227. package/dist/chunk-VH575UTV.js.map +1 -0
  228. package/dist/{chunk-AUIR5O6W.js → chunk-WWBMC24F.js} +9 -15
  229. package/dist/chunk-WWBMC24F.js.map +1 -0
  230. package/dist/{chunk-JWOYLO27.js → chunk-WYJUJV4L.js} +80 -7
  231. package/dist/chunk-WYJUJV4L.js.map +1 -0
  232. package/dist/{chunk-EY4NZKDR.js → chunk-XFMMPYNU.js} +2 -2
  233. package/dist/chunk-Y4VRBIS6.js +35 -0
  234. package/dist/chunk-Y4VRBIS6.js.map +1 -0
  235. package/dist/{chunk-DMBALCE2.js → chunk-ZC7MSQ5U.js} +77 -4
  236. package/dist/chunk-ZC7MSQ5U.js.map +1 -0
  237. package/dist/{chunk-OGWBVHB3.js → chunk-ZCK6SCOE.js} +67 -8
  238. package/dist/chunk-ZCK6SCOE.js.map +1 -0
  239. package/dist/{chunk-IHVBV5C2.js → chunk-ZTFTABXV.js} +2 -1
  240. package/dist/chunk-ZTFTABXV.js.map +1 -0
  241. package/dist/index.cjs +9532 -5017
  242. package/dist/index.cjs.map +1 -1
  243. package/dist/index.d.cts +163 -27
  244. package/dist/index.d.ts +163 -27
  245. package/dist/index.js +119 -56
  246. package/dist/index.js.map +1 -1
  247. package/dist/{ir-BMP7yxJJ.d.cts → ir-C-Zm_GlZ.d.cts} +1 -1
  248. package/dist/{ir-DUOz6H-5.d.ts → ir-DGyGiwVe.d.ts} +1 -1
  249. package/dist/{module-k7m3txak.d.ts → module-DqQ1U-Me.d.ts} +129 -100
  250. package/dist/{module-B8CBqIZ_.d.cts → module-doenaCsZ.d.cts} +129 -100
  251. package/package.json +12 -1
  252. package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
  253. package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
  254. package/dist/chunk-3QMIVH35.js +0 -43
  255. package/dist/chunk-3QMIVH35.js.map +0 -1
  256. package/dist/chunk-76WT3HOR.js.map +0 -1
  257. package/dist/chunk-AUIR5O6W.js.map +0 -1
  258. package/dist/chunk-BABLDP24.js.map +0 -1
  259. package/dist/chunk-BE3HW4FY.js.map +0 -1
  260. package/dist/chunk-CW6T36TN.js.map +0 -1
  261. package/dist/chunk-DFNM3WX2.js.map +0 -1
  262. package/dist/chunk-DMBALCE2.js.map +0 -1
  263. package/dist/chunk-EGK3KN7B.js.map +0 -1
  264. package/dist/chunk-GMPEOUP2.js.map +0 -1
  265. package/dist/chunk-IHVBV5C2.js.map +0 -1
  266. package/dist/chunk-JCXGZRMU.js.map +0 -1
  267. package/dist/chunk-JGIWG6SR.js.map +0 -1
  268. package/dist/chunk-JWOYLO27.js.map +0 -1
  269. package/dist/chunk-KIXAU3GM.js +0 -137
  270. package/dist/chunk-KIXAU3GM.js.map +0 -1
  271. package/dist/chunk-KP7MUZNX.js.map +0 -1
  272. package/dist/chunk-M3WTHJHJ.js.map +0 -1
  273. package/dist/chunk-M7IYCTJV.js +0 -79
  274. package/dist/chunk-M7IYCTJV.js.map +0 -1
  275. package/dist/chunk-NBD3KUOZ.js.map +0 -1
  276. package/dist/chunk-NQZ2OSGR.js.map +0 -1
  277. package/dist/chunk-OGWBVHB3.js.map +0 -1
  278. package/dist/chunk-PAYXCY6A.js.map +0 -1
  279. package/dist/chunk-PYOE4VSI.js.map +0 -1
  280. package/dist/chunk-QCHIQWAJ.js +0 -21
  281. package/dist/chunk-VZB726PE.js +0 -93
  282. package/dist/chunk-VZB726PE.js.map +0 -1
  283. package/dist/chunk-W3TEWHLO.js +0 -568
  284. package/dist/chunk-W3TEWHLO.js.map +0 -1
  285. package/dist/chunk-ZFLHVFUC.js +0 -192
  286. package/dist/chunk-ZFLHVFUC.js.map +0 -1
  287. package/dist/chunk-ZFY7U2FR.js.map +0 -1
  288. /package/dist/{chunk-G5ZBFPNU.js.map → chunk-2A4UKO2D.js.map} +0 -0
  289. /package/dist/{chunk-ANLBCBDC.js.map → chunk-2DVLMSOE.js.map} +0 -0
  290. /package/dist/{chunk-3TMODYZV.js.map → chunk-3XO4HR6V.js.map} +0 -0
  291. /package/dist/{chunk-TKZ7MEIA.js.map → chunk-53GVPGSM.js.map} +0 -0
  292. /package/dist/{chunk-NZJKFF45.js.map → chunk-C2UZZQ76.js.map} +0 -0
  293. /package/dist/{chunk-M2RGJPXX.js.map → chunk-DBD6Q6JH.js.map} +0 -0
  294. /package/dist/{chunk-ZGDVUPTM.js.map → chunk-EB4RGQO3.js.map} +0 -0
  295. /package/dist/{chunk-TAAPQVZN.js.map → chunk-ISKNULNH.js.map} +0 -0
  296. /package/dist/{chunk-66ALHVEX.js.map → chunk-KKIAYH4X.js.map} +0 -0
  297. /package/dist/{chunk-3RMKLXHX.js.map → chunk-KLDVG3SY.js.map} +0 -0
  298. /package/dist/{chunk-4CQAV7YB.js.map → chunk-O6TTQXTY.js.map} +0 -0
  299. /package/dist/{chunk-24VULZ7A.js.map → chunk-TKOGZDD6.js.map} +0 -0
  300. /package/dist/{chunk-EY4NZKDR.js.map → chunk-XFMMPYNU.js.map} +0 -0
@@ -0,0 +1,1395 @@
1
+ import {
2
+ getGlobalHostScheduler
3
+ } from "./chunk-MYKNINNN.js";
4
+ import {
5
+ clearRuntimeDebugEventSeq,
6
+ currentDiagnosticsLevel,
7
+ record,
8
+ toRuntimeDebugEventRef
9
+ } from "./chunk-ZC7MSQ5U.js";
10
+ import {
11
+ OBSERVABILITY_PROTOCOL_VERSION,
12
+ exportEvidencePackage
13
+ } from "./chunk-WYJUJV4L.js";
14
+
15
+ // src/internal/runtime/core/DevtoolsHub.ts
16
+ import { Effect, FiberRef } from "effect";
17
+ var instances = /* @__PURE__ */ new Map();
18
+ var latestStates = /* @__PURE__ */ new Map();
19
+ var latestTraitSummaries = /* @__PURE__ */ new Map();
20
+ var instanceLabels = /* @__PURE__ */ new Map();
21
+ var convergeStaticIrByDigest = /* @__PURE__ */ new Map();
22
+ var liveInstanceKeys = /* @__PURE__ */ new Set();
23
+ var exportBudget = {
24
+ dropped: 0,
25
+ oversized: 0
26
+ };
27
+ var lastRunTs = 0;
28
+ var lastRunTsSeq = 0;
29
+ var nextRunId = () => {
30
+ const ts = Date.now();
31
+ if (ts === lastRunTs) {
32
+ lastRunTsSeq += 1;
33
+ } else {
34
+ lastRunTs = ts;
35
+ lastRunTsSeq = 0;
36
+ }
37
+ return lastRunTsSeq === 0 ? `run-${ts}` : `run-${ts}.${lastRunTsSeq}`;
38
+ };
39
+ var currentRunId = nextRunId();
40
+ var nextSeq = 1;
41
+ var bufferSize = 500;
42
+ var ringBuffer = [];
43
+ var ringBufferSeq = [];
44
+ var snapshotToken = 0;
45
+ var ensureRingBufferSize = () => {
46
+ if (bufferSize <= 0) {
47
+ ringBuffer.length = 0;
48
+ ringBufferSeq.length = 0;
49
+ return;
50
+ }
51
+ if (ringBuffer.length <= bufferSize) return;
52
+ const excess = ringBuffer.length - bufferSize;
53
+ ringBuffer.splice(0, excess);
54
+ ringBufferSeq.splice(0, excess);
55
+ };
56
+ var trimRingBufferIfNeeded = () => {
57
+ if (bufferSize <= 0) {
58
+ ringBuffer.length = 0;
59
+ ringBufferSeq.length = 0;
60
+ return;
61
+ }
62
+ if (bufferSize <= 64) {
63
+ ensureRingBufferSize();
64
+ return;
65
+ }
66
+ const slack = Math.min(1024, Math.floor(bufferSize / 2));
67
+ const threshold = bufferSize + Math.max(1, slack);
68
+ if (ringBuffer.length <= threshold) return;
69
+ const excess = ringBuffer.length - bufferSize;
70
+ ringBuffer.splice(0, excess);
71
+ ringBufferSeq.splice(0, excess);
72
+ };
73
+ var currentSnapshot = {
74
+ snapshotToken,
75
+ instances,
76
+ events: ringBuffer,
77
+ latestStates,
78
+ latestTraitSummaries,
79
+ exportBudget
80
+ };
81
+ var listeners = /* @__PURE__ */ new Set();
82
+ var notifyScheduled = false;
83
+ var scheduleNotify = () => {
84
+ if (listeners.size === 0) return;
85
+ if (notifyScheduled) return;
86
+ notifyScheduled = true;
87
+ getGlobalHostScheduler().scheduleMicrotask(() => {
88
+ notifyScheduled = false;
89
+ for (const listener of listeners) {
90
+ listener();
91
+ }
92
+ });
93
+ };
94
+ var devtoolsEnabled = false;
95
+ var bumpSnapshotToken = () => {
96
+ snapshotToken += 1;
97
+ currentSnapshot.snapshotToken = snapshotToken;
98
+ };
99
+ var markSnapshotChanged = () => {
100
+ bumpSnapshotToken();
101
+ scheduleNotify();
102
+ };
103
+ var configureDevtoolsHub = (options) => {
104
+ devtoolsEnabled = true;
105
+ if (typeof options?.bufferSize === "number" && Number.isFinite(options.bufferSize)) {
106
+ const next = Math.floor(options.bufferSize);
107
+ const nextBufferSize = next >= 0 ? next : 0;
108
+ if (nextBufferSize !== bufferSize) {
109
+ bufferSize = nextBufferSize;
110
+ ensureRingBufferSize();
111
+ markSnapshotChanged();
112
+ }
113
+ }
114
+ };
115
+ var isDevtoolsEnabled = () => devtoolsEnabled;
116
+ var getDevtoolsSnapshot = () => currentSnapshot;
117
+ var getDevtoolsSnapshotToken = () => snapshotToken;
118
+ var subscribeDevtoolsSnapshot = (listener) => {
119
+ listeners.add(listener);
120
+ return () => {
121
+ listeners.delete(listener);
122
+ };
123
+ };
124
+ var getDevtoolsRunId = () => currentRunId;
125
+ var setDevtoolsRunId = (runId) => {
126
+ if (typeof runId !== "string" || runId.length === 0) return;
127
+ if (runId !== currentRunId) {
128
+ currentRunId = runId;
129
+ markSnapshotChanged();
130
+ }
131
+ };
132
+ var startDevtoolsRun = (runId) => {
133
+ currentRunId = typeof runId === "string" && runId.length > 0 ? runId : nextRunId();
134
+ nextSeq = 1;
135
+ clearRuntimeDebugEventSeq();
136
+ clearDevtoolsEvents();
137
+ return currentRunId;
138
+ };
139
+ var clearDevtoolsEvents = () => {
140
+ ringBuffer.length = 0;
141
+ ringBufferSeq.length = 0;
142
+ exportBudget.dropped = 0;
143
+ exportBudget.oversized = 0;
144
+ markSnapshotChanged();
145
+ };
146
+ var setInstanceLabel = (instanceId, label) => {
147
+ instanceLabels.set(instanceId, label);
148
+ markSnapshotChanged();
149
+ };
150
+ var getInstanceLabel = (instanceId) => instanceLabels.get(instanceId);
151
+ var registerConvergeStaticIr = (ir) => {
152
+ convergeStaticIrByDigest.set(ir.staticIrDigest, ir);
153
+ };
154
+ var devtoolsHubConvergeStaticIrCollector = {
155
+ register: registerConvergeStaticIr
156
+ };
157
+ var exportDevtoolsEvidencePackage = (options) => {
158
+ const protocolVersion = options?.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION;
159
+ const runId = options?.runId ?? currentRunId;
160
+ const source = options?.source ?? { host: "unknown" };
161
+ const events = ringBuffer.map((payload, i) => ({
162
+ protocolVersion,
163
+ runId,
164
+ seq: ringBufferSeq[i] ?? i + 1,
165
+ timestamp: payload.timestamp,
166
+ type: "debug:event",
167
+ payload
168
+ }));
169
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
170
+ const convergeDigests = /* @__PURE__ */ new Set();
171
+ let sawFullConverge = false;
172
+ for (const ref of ringBuffer) {
173
+ if (ref.kind !== "trait:converge") continue;
174
+ const meta = ref.meta;
175
+ if (!isRecord(meta)) continue;
176
+ const digest = meta.staticIrDigest;
177
+ if (typeof digest === "string" && digest.length > 0) {
178
+ convergeDigests.add(digest);
179
+ }
180
+ const dirty = meta.dirty;
181
+ if (isRecord(dirty) && typeof dirty.rootCount === "number") {
182
+ sawFullConverge = true;
183
+ }
184
+ }
185
+ let summary;
186
+ if (sawFullConverge && convergeDigests.size > 0) {
187
+ const staticIrByDigest = {};
188
+ for (const digest of convergeDigests) {
189
+ const ir = convergeStaticIrByDigest.get(digest);
190
+ if (ir) {
191
+ staticIrByDigest[digest] = ir;
192
+ }
193
+ }
194
+ if (Object.keys(staticIrByDigest).length > 0) {
195
+ summary = { converge: { staticIrByDigest } };
196
+ }
197
+ }
198
+ return exportEvidencePackage({
199
+ protocolVersion,
200
+ runId,
201
+ source,
202
+ events,
203
+ summary
204
+ });
205
+ };
206
+ var devtoolsHubSink = {
207
+ record: (event) => Effect.gen(function* () {
208
+ const level = yield* FiberRef.get(currentDiagnosticsLevel);
209
+ let changed = false;
210
+ if (event.type === "trace:instanceLabel") {
211
+ const instanceId = event.instanceId;
212
+ const data = event.data;
213
+ const label = data && typeof data === "object" && "label" in data ? String(data.label) : void 0;
214
+ if (instanceId && label) {
215
+ instanceLabels.set(instanceId, label);
216
+ changed = true;
217
+ }
218
+ }
219
+ if (event.type === "module:init" || event.type === "module:destroy") {
220
+ const moduleId = event.moduleId ?? "unknown";
221
+ const runtimeLabel = event.runtimeLabel ?? "unknown";
222
+ const instanceId = event.instanceId;
223
+ const key = `${runtimeLabel}::${moduleId}`;
224
+ const prev = instances.get(key) ?? 0;
225
+ if (event.type === "module:init") {
226
+ instances.set(key, prev + 1);
227
+ changed = true;
228
+ if (instanceId) {
229
+ const instanceKey = `${runtimeLabel}::${moduleId}::${instanceId}`;
230
+ liveInstanceKeys.add(instanceKey);
231
+ if (latestStates.delete(instanceKey)) changed = true;
232
+ if (latestTraitSummaries.delete(instanceKey)) changed = true;
233
+ }
234
+ } else {
235
+ const next = prev - 1;
236
+ if (next <= 0) {
237
+ if (instances.delete(key)) changed = true;
238
+ } else {
239
+ instances.set(key, next);
240
+ changed = true;
241
+ }
242
+ if (instanceId) {
243
+ const instanceKey = `${runtimeLabel}::${moduleId}::${instanceId}`;
244
+ liveInstanceKeys.delete(instanceKey);
245
+ if (latestStates.delete(instanceKey)) changed = true;
246
+ if (latestTraitSummaries.delete(instanceKey)) changed = true;
247
+ if (instanceLabels.delete(instanceId)) changed = true;
248
+ changed = true;
249
+ }
250
+ }
251
+ }
252
+ let exportBudgetChanged = false;
253
+ const ref = toRuntimeDebugEventRef(event, {
254
+ diagnosticsLevel: level,
255
+ resolveConvergeStaticIr: (staticIrDigest) => convergeStaticIrByDigest.get(staticIrDigest),
256
+ onMetaProjection: ({ stats }) => {
257
+ if (stats.dropped !== 0 || stats.oversized !== 0) {
258
+ exportBudgetChanged = true;
259
+ }
260
+ exportBudget.dropped += stats.dropped;
261
+ exportBudget.oversized += stats.oversized;
262
+ }
263
+ });
264
+ if (exportBudgetChanged) {
265
+ changed = true;
266
+ }
267
+ if (!ref) {
268
+ if (changed) {
269
+ markSnapshotChanged();
270
+ }
271
+ return;
272
+ }
273
+ if (ref.kind === "state" && ref.label === "state:update") {
274
+ const runtimeLabel = ref.runtimeLabel ?? "unknown";
275
+ const key = `${runtimeLabel}::${ref.moduleId}::${ref.instanceId}`;
276
+ if (liveInstanceKeys.has(key)) {
277
+ if (ref.meta && typeof ref.meta === "object" && !Array.isArray(ref.meta)) {
278
+ const anyMeta = ref.meta;
279
+ if ("state" in anyMeta) {
280
+ latestStates.set(key, anyMeta.state);
281
+ changed = true;
282
+ }
283
+ if ("traitSummary" in anyMeta && anyMeta.traitSummary !== void 0) {
284
+ latestTraitSummaries.set(key, anyMeta.traitSummary);
285
+ changed = true;
286
+ }
287
+ }
288
+ }
289
+ }
290
+ if (bufferSize > 0) {
291
+ const seq = nextSeq++;
292
+ ringBuffer.push(ref);
293
+ ringBufferSeq.push(seq);
294
+ trimRingBufferIfNeeded();
295
+ changed = true;
296
+ }
297
+ if (changed) {
298
+ markSnapshotChanged();
299
+ }
300
+ })
301
+ };
302
+
303
+ // src/internal/runtime/core/TickScheduler.ts
304
+ import { Effect as Effect5, FiberRef as FiberRef3 } from "effect";
305
+
306
+ // src/internal/runtime/core/JobQueue.ts
307
+ var maxPriority = (a, b) => a === "normal" || b === "normal" ? "normal" : "low";
308
+ var makeJobQueue = () => {
309
+ let pendingModules = /* @__PURE__ */ new Map();
310
+ let pendingDirtyTopics = /* @__PURE__ */ new Map();
311
+ const hasPending = () => pendingModules.size > 0 || pendingDirtyTopics.size > 0;
312
+ const enqueueModuleCommit = (commit) => {
313
+ const prev = pendingModules.get(commit.moduleInstanceKey);
314
+ if (!prev) {
315
+ pendingModules.set(commit.moduleInstanceKey, commit);
316
+ return false;
317
+ }
318
+ pendingModules.set(commit.moduleInstanceKey, {
319
+ ...commit,
320
+ meta: {
321
+ ...commit.meta,
322
+ priority: maxPriority(prev.meta.priority, commit.meta.priority)
323
+ }
324
+ });
325
+ return true;
326
+ };
327
+ const markTopicDirty = (topicKey, priority) => {
328
+ const prev = pendingDirtyTopics.get(topicKey);
329
+ pendingDirtyTopics.set(topicKey, prev ? maxPriority(prev, priority) : priority);
330
+ return prev != null;
331
+ };
332
+ const drain = () => {
333
+ if (!hasPending()) return void 0;
334
+ const drained = {
335
+ modules: pendingModules,
336
+ dirtyTopics: pendingDirtyTopics
337
+ };
338
+ pendingModules = /* @__PURE__ */ new Map();
339
+ pendingDirtyTopics = /* @__PURE__ */ new Map();
340
+ return drained;
341
+ };
342
+ const requeue = (drain2) => {
343
+ for (const [, commit] of drain2.modules) {
344
+ enqueueModuleCommit(commit);
345
+ }
346
+ for (const [k, p] of drain2.dirtyTopics) {
347
+ markTopicDirty(k, p);
348
+ }
349
+ };
350
+ return {
351
+ hasPending,
352
+ enqueueModuleCommit,
353
+ markTopicDirty,
354
+ drain,
355
+ requeue
356
+ };
357
+ };
358
+
359
+ // src/internal/runtime/core/TaskRunner.ts
360
+ import { Cause, Effect as Effect4, Fiber, FiberRef as FiberRef2, Ref, Stream } from "effect";
361
+
362
+ // src/internal/runtime/core/env.ts
363
+ import { Context, Effect as Effect3, Layer } from "effect";
364
+
365
+ // src/internal/runtime/core/RuntimeStore.ts
366
+ var makeModuleInstanceKey = (moduleId, instanceId) => `${moduleId}::${instanceId}`;
367
+ var makeReadQueryTopicKey = (moduleInstanceKey, selectorId) => `${moduleInstanceKey}::rq:${selectorId}`;
368
+ var parseTopicKey = (topicKey) => {
369
+ const idx = topicKey.indexOf("::");
370
+ if (idx <= 0) return void 0;
371
+ const moduleId = topicKey.slice(0, idx);
372
+ const rest = topicKey.slice(idx + 2);
373
+ if (rest.length === 0) return void 0;
374
+ const idx2 = rest.indexOf("::");
375
+ if (idx2 < 0) {
376
+ return { kind: "module", moduleInstanceKey: `${moduleId}::${rest}` };
377
+ }
378
+ const instanceId = rest.slice(0, idx2);
379
+ const suffix = rest.slice(idx2 + 2);
380
+ if (suffix.startsWith("rq:")) {
381
+ const selectorId = suffix.slice("rq:".length);
382
+ if (selectorId.length === 0) return void 0;
383
+ return {
384
+ kind: "readQuery",
385
+ moduleInstanceKey: `${moduleId}::${instanceId}`,
386
+ selectorId
387
+ };
388
+ }
389
+ return { kind: "module", moduleInstanceKey: `${moduleId}::${instanceId}` };
390
+ };
391
+ var makeRuntimeStore = () => {
392
+ let tickSeq = 0;
393
+ const moduleStates = /* @__PURE__ */ new Map();
394
+ const topicVersions = /* @__PURE__ */ new Map();
395
+ const topicPriorities = /* @__PURE__ */ new Map();
396
+ const listenersByTopic = /* @__PURE__ */ new Map();
397
+ const subscriberCountByModule = /* @__PURE__ */ new Map();
398
+ const getTopicVersion = (topicKey) => topicVersions.get(topicKey) ?? 0;
399
+ const getTopicPriority = (topicKey) => topicPriorities.get(topicKey) ?? "normal";
400
+ const commitTopicBump = (topicKey, priority) => {
401
+ const prev = topicVersions.get(topicKey) ?? 0;
402
+ topicVersions.set(topicKey, prev + 1);
403
+ topicPriorities.set(topicKey, priority);
404
+ };
405
+ const subscribeTopic = (topicKey, listener) => {
406
+ const info = parseTopicKey(topicKey);
407
+ const existing = listenersByTopic.get(topicKey);
408
+ const set = existing ?? /* @__PURE__ */ new Set();
409
+ const alreadyHas = set.has(listener);
410
+ if (!alreadyHas) {
411
+ set.add(listener);
412
+ }
413
+ if (!existing) {
414
+ listenersByTopic.set(topicKey, set);
415
+ }
416
+ if (!alreadyHas && info) {
417
+ const prev = subscriberCountByModule.get(info.moduleInstanceKey) ?? 0;
418
+ subscriberCountByModule.set(info.moduleInstanceKey, prev + 1);
419
+ }
420
+ return () => {
421
+ const current = listenersByTopic.get(topicKey);
422
+ if (!current) return;
423
+ const deleted = current.delete(listener);
424
+ if (deleted && info) {
425
+ const prev = subscriberCountByModule.get(info.moduleInstanceKey) ?? 0;
426
+ const next = prev - 1;
427
+ if (next <= 0) {
428
+ subscriberCountByModule.delete(info.moduleInstanceKey);
429
+ } else {
430
+ subscriberCountByModule.set(info.moduleInstanceKey, next);
431
+ }
432
+ }
433
+ if (current.size === 0) {
434
+ listenersByTopic.delete(topicKey);
435
+ }
436
+ };
437
+ };
438
+ const getTopicSubscriberCount = (topicKey) => listenersByTopic.get(topicKey)?.size ?? 0;
439
+ const getModuleSubscriberCount = (moduleInstanceKey) => subscriberCountByModule.get(moduleInstanceKey) ?? 0;
440
+ const registerModuleInstance = (args) => {
441
+ moduleStates.set(args.moduleInstanceKey, args.initialState);
442
+ if (!topicVersions.has(args.moduleInstanceKey)) {
443
+ topicVersions.set(args.moduleInstanceKey, 0);
444
+ topicPriorities.set(args.moduleInstanceKey, "normal");
445
+ }
446
+ };
447
+ const unregisterModuleInstance = (moduleInstanceKey) => {
448
+ moduleStates.delete(moduleInstanceKey);
449
+ };
450
+ const commitTick = (args) => {
451
+ tickSeq = args.tickSeq;
452
+ for (const [key, commit] of args.accepted.modules) {
453
+ moduleStates.set(key, commit.state);
454
+ }
455
+ const changedTopics = /* @__PURE__ */ new Map();
456
+ for (const [topicKey, priority] of args.accepted.dirtyTopics) {
457
+ commitTopicBump(topicKey, priority);
458
+ const listeners2 = Array.from(listenersByTopic.get(topicKey) ?? []);
459
+ if (listeners2.length > 0) {
460
+ changedTopics.set(topicKey, { priority, listeners: listeners2 });
461
+ }
462
+ }
463
+ return { changedTopics };
464
+ };
465
+ const getModuleState = (moduleInstanceKey) => moduleStates.get(moduleInstanceKey);
466
+ const dispose = () => {
467
+ moduleStates.clear();
468
+ topicVersions.clear();
469
+ topicPriorities.clear();
470
+ listenersByTopic.clear();
471
+ subscriberCountByModule.clear();
472
+ };
473
+ return {
474
+ getTickSeq: () => tickSeq,
475
+ getModuleState,
476
+ getTopicVersion,
477
+ getTopicPriority,
478
+ subscribeTopic,
479
+ getTopicSubscriberCount,
480
+ getModuleSubscriberCount,
481
+ registerModuleInstance,
482
+ unregisterModuleInstance,
483
+ commitTick,
484
+ dispose
485
+ };
486
+ };
487
+
488
+ // src/internal/runtime/core/DeclarativeLinkRuntime.ts
489
+ import { Effect as Effect2 } from "effect";
490
+ var makeDeclarativeLinkRuntime = () => {
491
+ const moduleAsSourceById = /* @__PURE__ */ new Map();
492
+ const moduleAsSourceIdsBySource = /* @__PURE__ */ new Map();
493
+ const declarativeById = /* @__PURE__ */ new Map();
494
+ const declarativeReadNodesBySource = /* @__PURE__ */ new Map();
495
+ const registerModuleAsSourceLink = (link) => {
496
+ const stored = {
497
+ ...link,
498
+ hasValue: false,
499
+ lastValue: void 0
500
+ };
501
+ moduleAsSourceById.set(link.id, stored);
502
+ const set = moduleAsSourceIdsBySource.get(link.sourceModuleInstanceKey) ?? /* @__PURE__ */ new Set();
503
+ set.add(link.id);
504
+ moduleAsSourceIdsBySource.set(link.sourceModuleInstanceKey, set);
505
+ return () => {
506
+ moduleAsSourceById.delete(link.id);
507
+ const current = moduleAsSourceIdsBySource.get(link.sourceModuleInstanceKey);
508
+ if (!current) return;
509
+ current.delete(link.id);
510
+ if (current.size === 0) {
511
+ moduleAsSourceIdsBySource.delete(link.sourceModuleInstanceKey);
512
+ }
513
+ };
514
+ };
515
+ const registerDeclarativeLink = (link) => {
516
+ const readNodeById = /* @__PURE__ */ new Map();
517
+ for (const n of link.readNodes) {
518
+ readNodeById.set(n.nodeId, n);
519
+ }
520
+ const dispatchNodeById = /* @__PURE__ */ new Map();
521
+ for (const n of link.dispatchNodes) {
522
+ dispatchNodeById.set(n.nodeId, n);
523
+ }
524
+ const incomingByDispatch = /* @__PURE__ */ new Map();
525
+ for (const e of link.ir.edges) {
526
+ const to = e.to;
527
+ const isDispatch = dispatchNodeById.has(to);
528
+ if (!isDispatch) continue;
529
+ incomingByDispatch.set(to, (incomingByDispatch.get(to) ?? 0) + 1);
530
+ const count = incomingByDispatch.get(to) ?? 0;
531
+ if (count > 1) {
532
+ throw new Error(
533
+ `[DeclarativeLinkRuntime] Invalid DeclarativeLinkIR: dispatch node has multiple incoming edges (linkId=${link.linkId}, nodeId=${to}).`
534
+ );
535
+ }
536
+ }
537
+ const dispatchTargetsByReadNode = /* @__PURE__ */ new Map();
538
+ for (const e of link.ir.edges) {
539
+ const from = e.from;
540
+ const to = e.to;
541
+ if (!readNodeById.has(from)) continue;
542
+ if (!dispatchNodeById.has(to)) continue;
543
+ const list = dispatchTargetsByReadNode.get(from) ?? [];
544
+ list.push(to);
545
+ dispatchTargetsByReadNode.set(from, list);
546
+ }
547
+ const stored = {
548
+ ...link,
549
+ readNodeById,
550
+ dispatchNodeById,
551
+ dispatchTargetsByReadNode,
552
+ readNodeState: /* @__PURE__ */ new Map()
553
+ };
554
+ declarativeById.set(link.linkId, stored);
555
+ for (const n of link.readNodes) {
556
+ const list = declarativeReadNodesBySource.get(n.moduleInstanceKey) ?? [];
557
+ list.push({ linkId: link.linkId, nodeId: n.nodeId });
558
+ declarativeReadNodesBySource.set(n.moduleInstanceKey, list);
559
+ }
560
+ return () => {
561
+ declarativeById.delete(link.linkId);
562
+ for (const n of link.readNodes) {
563
+ const list = declarativeReadNodesBySource.get(n.moduleInstanceKey);
564
+ if (!list) continue;
565
+ const next = list.filter((x) => !(x.linkId === link.linkId && x.nodeId === n.nodeId));
566
+ if (next.length === 0) {
567
+ declarativeReadNodesBySource.delete(n.moduleInstanceKey);
568
+ } else {
569
+ declarativeReadNodesBySource.set(n.moduleInstanceKey, next);
570
+ }
571
+ }
572
+ };
573
+ };
574
+ const applyForSources = (args) => Effect2.gen(function* () {
575
+ let scheduled = false;
576
+ for (const sourceKey of args.changedModuleInstanceKeys) {
577
+ const ids = moduleAsSourceIdsBySource.get(sourceKey);
578
+ if (!ids || ids.size === 0) continue;
579
+ const commit = args.acceptedModules.get(sourceKey);
580
+ if (!commit) continue;
581
+ for (const id of ids) {
582
+ const link = moduleAsSourceById.get(id);
583
+ if (!link) continue;
584
+ let selected;
585
+ try {
586
+ selected = link.readQuery.select(commit.state);
587
+ } catch {
588
+ continue;
589
+ }
590
+ const nextValue = link.computeValue(selected);
591
+ if (link.hasValue && link.equalsValue(link.lastValue, nextValue)) {
592
+ continue;
593
+ }
594
+ link.hasValue = true;
595
+ link.lastValue = nextValue;
596
+ scheduled = true;
597
+ yield* link.applyValue(nextValue);
598
+ }
599
+ }
600
+ for (const sourceKey of args.changedModuleInstanceKeys) {
601
+ const refs = declarativeReadNodesBySource.get(sourceKey);
602
+ if (!refs || refs.length === 0) continue;
603
+ const commit = args.acceptedModules.get(sourceKey);
604
+ if (!commit) continue;
605
+ for (const ref of refs) {
606
+ const link = declarativeById.get(ref.linkId);
607
+ if (!link) continue;
608
+ const readNode = link.readNodeById.get(ref.nodeId);
609
+ if (!readNode) continue;
610
+ let value;
611
+ try {
612
+ value = readNode.readQuery.select(commit.state);
613
+ } catch {
614
+ continue;
615
+ }
616
+ const state = link.readNodeState.get(ref.nodeId) ?? { hasValue: false, lastValue: void 0 };
617
+ const changed = !state.hasValue || !Object.is(state.lastValue, value);
618
+ if (!changed) continue;
619
+ state.hasValue = true;
620
+ state.lastValue = value;
621
+ link.readNodeState.set(ref.nodeId, state);
622
+ const targets = link.dispatchTargetsByReadNode.get(ref.nodeId) ?? [];
623
+ for (const dispatchNodeId of targets) {
624
+ const node = link.dispatchNodeById.get(dispatchNodeId);
625
+ if (!node) continue;
626
+ scheduled = true;
627
+ yield* node.dispatch(value);
628
+ }
629
+ }
630
+ }
631
+ return { scheduled };
632
+ });
633
+ return {
634
+ registerModuleAsSourceLink,
635
+ registerDeclarativeLink,
636
+ applyForSources
637
+ };
638
+ };
639
+
640
+ // src/internal/runtime/core/env.ts
641
+ var getNodeEnv = () => {
642
+ try {
643
+ const env = globalThis?.process?.env;
644
+ return typeof env?.NODE_ENV === "string" ? env.NODE_ENV : void 0;
645
+ } catch {
646
+ return void 0;
647
+ }
648
+ };
649
+ var isDevEnv = () => getNodeEnv() !== "production";
650
+ var getDefaultStateTxnInstrumentation = () => isDevEnv() ? "full" : "light";
651
+ var StateTransactionConfigTagImpl = class extends Context.Tag("@logixjs/core/StateTransactionRuntimeConfig")() {
652
+ };
653
+ var StateTransactionConfigTag = StateTransactionConfigTagImpl;
654
+ var ReadQueryStrictGateConfigTagImpl = class extends Context.Tag("@logixjs/core/ReadQueryStrictGateRuntimeConfig")() {
655
+ };
656
+ var ReadQueryStrictGateConfigTag = ReadQueryStrictGateConfigTagImpl;
657
+ var ReplayModeConfigTagImpl = class extends Context.Tag("@logixjs/core/ReplayModeConfig")() {
658
+ };
659
+ var ReplayModeConfigTag = ReplayModeConfigTagImpl;
660
+ var StateTransactionOverridesTagImpl = class extends Context.Tag("@logixjs/core/StateTransactionOverrides")() {
661
+ };
662
+ var StateTransactionOverridesTag = StateTransactionOverridesTagImpl;
663
+ var ConcurrencyPolicyTagImpl = class extends Context.Tag("@logixjs/core/ConcurrencyPolicy")() {
664
+ };
665
+ var ConcurrencyPolicyTag = ConcurrencyPolicyTagImpl;
666
+ var ConcurrencyPolicyOverridesTagImpl = class extends Context.Tag("@logixjs/core/ConcurrencyPolicyOverrides")() {
667
+ };
668
+ var ConcurrencyPolicyOverridesTag = ConcurrencyPolicyOverridesTagImpl;
669
+ var RuntimeStoreTag = class extends Context.Tag("@logixjs/core/RuntimeStore")() {
670
+ };
671
+ var runtimeStoreLayer = Layer.scoped(
672
+ RuntimeStoreTag,
673
+ Effect3.acquireRelease(
674
+ Effect3.sync(() => makeRuntimeStore()),
675
+ (store) => Effect3.sync(() => store.dispose())
676
+ )
677
+ );
678
+ var HostSchedulerTag = class extends Context.Tag("@logixjs/core/HostScheduler")() {
679
+ };
680
+ var hostSchedulerLayer = Layer.succeed(
681
+ HostSchedulerTag,
682
+ getGlobalHostScheduler()
683
+ );
684
+ var hostSchedulerTestStubLayer = (scheduler) => Layer.succeed(HostSchedulerTag, scheduler);
685
+ var DeclarativeLinkRuntimeTag = class extends Context.Tag("@logixjs/core/DeclarativeLinkRuntime")() {
686
+ };
687
+ var declarativeLinkRuntimeLayer = Layer.succeed(
688
+ DeclarativeLinkRuntimeTag,
689
+ makeDeclarativeLinkRuntime()
690
+ );
691
+ var TickSchedulerTag = class extends Context.Tag("@logixjs/core/TickScheduler")() {
692
+ };
693
+ var tickSchedulerLayer = (config) => Layer.effect(
694
+ TickSchedulerTag,
695
+ Effect3.gen(function* () {
696
+ const store = yield* RuntimeStoreTag;
697
+ const declarativeLinkRuntime = yield* DeclarativeLinkRuntimeTag;
698
+ const hostScheduler = yield* HostSchedulerTag;
699
+ return makeTickScheduler({ runtimeStore: store, declarativeLinkRuntime, hostScheduler, config });
700
+ })
701
+ );
702
+
703
+ // src/internal/runtime/core/TaskRunner.ts
704
+ var inSyncTransactionFiber = FiberRef2.unsafeMake(false);
705
+ var forceSourceRefresh = FiberRef2.unsafeMake(false);
706
+ var inSyncTransactionGlobalDepth = 0;
707
+ var enterSyncTransaction = () => {
708
+ inSyncTransactionGlobalDepth += 1;
709
+ };
710
+ var exitSyncTransaction = () => {
711
+ inSyncTransactionGlobalDepth = Math.max(0, inSyncTransactionGlobalDepth - 1);
712
+ };
713
+ var isInSyncTransaction = () => inSyncTransactionGlobalDepth > 0;
714
+ var resolve = (eff, payload) => typeof eff === "function" ? eff(payload) : eff;
715
+ var defaultOrigins = (triggerName) => ({
716
+ pending: {
717
+ kind: "task:pending",
718
+ name: triggerName
719
+ },
720
+ success: {
721
+ kind: "service-callback",
722
+ name: "task:success"
723
+ },
724
+ failure: {
725
+ kind: "service-callback",
726
+ name: "task:failure"
727
+ }
728
+ });
729
+ var shouldNoopInSyncTransactionFiber = (options) => Effect4.gen(function* () {
730
+ const inTxn = yield* FiberRef2.get(inSyncTransactionFiber);
731
+ if (!inTxn) {
732
+ return false;
733
+ }
734
+ if (isDevEnv()) {
735
+ yield* record({
736
+ type: "diagnostic",
737
+ moduleId: options.moduleId,
738
+ instanceId: options.instanceId,
739
+ code: options.code,
740
+ severity: options.severity,
741
+ message: options.message,
742
+ hint: options.hint,
743
+ actionTag: options.actionTag,
744
+ kind: options.kind
745
+ });
746
+ }
747
+ return true;
748
+ });
749
+ var resolveConcurrencyLimit = (runtime) => runtime.resolveConcurrencyPolicy ? runtime.resolveConcurrencyPolicy().pipe(Effect4.map((p) => p.concurrencyLimit)) : Effect4.succeed(16);
750
+ var runTaskLifecycle = (payload, runtime, config, getCanWriteBack) => Effect4.gen(function* () {
751
+ const noop = yield* shouldNoopInSyncTransactionFiber({
752
+ moduleId: runtime.moduleId,
753
+ instanceId: runtime.instanceId,
754
+ code: "logic::invalid_usage",
755
+ severity: "error",
756
+ message: "run*Task is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).",
757
+ hint: "Call run*Task from the run section of a watcher (e.g. $.onAction/$.onState/$.on); do not call it directly inside a reducer / trait.run / synchronous transaction body. For long-lived flows, use a multi-entry pattern (pending \u2192 IO \u2192 writeback).",
758
+ kind: "run_task_in_transaction"
759
+ });
760
+ if (noop) {
761
+ return;
762
+ }
763
+ const defaults = defaultOrigins(config.triggerName);
764
+ const origins = {
765
+ pending: config.origin?.pending ?? defaults.pending,
766
+ success: config.origin?.success ?? defaults.success,
767
+ failure: config.origin?.failure ?? defaults.failure
768
+ };
769
+ const pending = config.pending;
770
+ if (pending) {
771
+ yield* Effect4.uninterruptible(
772
+ runtime.runWithStateTransaction(origins.pending, () => Effect4.asVoid(resolve(pending, payload)))
773
+ );
774
+ }
775
+ const io = resolve(config.effect, payload);
776
+ const exit = yield* Effect4.exit(io);
777
+ if (getCanWriteBack) {
778
+ const ok = yield* getCanWriteBack;
779
+ if (!ok) {
780
+ return;
781
+ }
782
+ }
783
+ if (exit._tag === "Success") {
784
+ const success = config.success;
785
+ if (success) {
786
+ yield* runtime.runWithStateTransaction(origins.success, () => Effect4.asVoid(success(exit.value, payload)));
787
+ }
788
+ return;
789
+ }
790
+ const cause = exit.cause;
791
+ if (Cause.isInterrupted(cause)) {
792
+ return;
793
+ }
794
+ const failure = config.failure;
795
+ if (failure) {
796
+ yield* runtime.runWithStateTransaction(origins.failure, () => Effect4.asVoid(failure(cause, payload)));
797
+ }
798
+ }).pipe(
799
+ // Watchers must not crash as a whole due to a single task failure: swallow errors, but keep them diagnosable.
800
+ Effect4.catchAllCause(
801
+ (cause) => record({
802
+ type: "diagnostic",
803
+ moduleId: runtime.moduleId,
804
+ instanceId: runtime.instanceId,
805
+ code: "task_runner::unhandled_failure",
806
+ severity: "error",
807
+ message: "TaskRunner encountered an unhandled failure (pending/IO/writeback).",
808
+ hint: "Add a failure writeback for this task or handle errors explicitly upstream; avoid fire-and-forget swallowing errors.",
809
+ actionTag: config.triggerName,
810
+ kind: "task_runner_unhandled_failure",
811
+ trigger: {
812
+ kind: "task",
813
+ name: config.triggerName
814
+ }
815
+ }).pipe(Effect4.zipRight(Effect4.logError("TaskRunner error", cause)))
816
+ )
817
+ );
818
+ var makeTaskRunner = (stream, mode, runtime, config) => {
819
+ if (mode === "latest") {
820
+ return Effect4.gen(function* () {
821
+ const taskIdRef = yield* Ref.make(0);
822
+ const currentFiberRef = yield* Ref.make(void 0);
823
+ const start = (payload) => Effect4.gen(function* () {
824
+ const taskId = yield* Ref.updateAndGet(taskIdRef, (n) => n + 1);
825
+ const prev = yield* Ref.get(currentFiberRef);
826
+ if (prev) {
827
+ yield* Fiber.interruptFork(prev);
828
+ }
829
+ const canWriteBack = Ref.get(taskIdRef).pipe(Effect4.map((current) => current === taskId));
830
+ const fiber = yield* Effect4.fork(
831
+ runTaskLifecycle(payload, runtime, config, canWriteBack)
832
+ );
833
+ yield* Ref.set(currentFiberRef, fiber);
834
+ });
835
+ return yield* Stream.runForEach(stream, start);
836
+ });
837
+ }
838
+ if (mode === "exhaust") {
839
+ return Effect4.gen(function* () {
840
+ const concurrency = yield* resolveConcurrencyLimit(runtime);
841
+ const busyRef = yield* Ref.make(false);
842
+ const mapper = (payload) => Effect4.gen(function* () {
843
+ const acquired = yield* Ref.modify(
844
+ busyRef,
845
+ (busy) => busy ? [false, busy] : [true, true]
846
+ );
847
+ if (!acquired) {
848
+ return;
849
+ }
850
+ try {
851
+ yield* runTaskLifecycle(payload, runtime, config);
852
+ } finally {
853
+ yield* Ref.set(busyRef, false);
854
+ }
855
+ });
856
+ return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })));
857
+ });
858
+ }
859
+ if (mode === "parallel") {
860
+ return Effect4.gen(function* () {
861
+ const concurrency = yield* resolveConcurrencyLimit(runtime);
862
+ return yield* Stream.runDrain(
863
+ stream.pipe(
864
+ Stream.mapEffect((payload) => runTaskLifecycle(payload, runtime, config), {
865
+ concurrency
866
+ })
867
+ )
868
+ );
869
+ });
870
+ }
871
+ return Stream.runForEach(
872
+ stream,
873
+ (payload) => runTaskLifecycle(payload, runtime, config)
874
+ );
875
+ };
876
+
877
+ // src/internal/runtime/core/TickScheduler.ts
878
+ var batchDepth = 0;
879
+ var batchWaiters = /* @__PURE__ */ new Set();
880
+ var enterRuntimeBatch = () => {
881
+ batchDepth += 1;
882
+ };
883
+ var exitRuntimeBatch = () => {
884
+ batchDepth = Math.max(0, batchDepth - 1);
885
+ if (batchDepth !== 0) return;
886
+ const waiters = Array.from(batchWaiters);
887
+ batchWaiters.clear();
888
+ for (const w of waiters) {
889
+ try {
890
+ w.resolve();
891
+ } catch {
892
+ }
893
+ }
894
+ };
895
+ var waitForBatchEndIfNeeded = () => batchDepth === 0 ? Effect5.void : Effect5.async((resume, signal) => {
896
+ let done = false;
897
+ const cleanup = () => {
898
+ if (done) return;
899
+ done = true;
900
+ batchWaiters.delete(waiter);
901
+ try {
902
+ signal.removeEventListener("abort", onAbort);
903
+ } catch {
904
+ }
905
+ };
906
+ const onAbort = () => {
907
+ cleanup();
908
+ };
909
+ const waiter = {
910
+ resolve: () => {
911
+ cleanup();
912
+ resume(Effect5.void);
913
+ }
914
+ };
915
+ batchWaiters.add(waiter);
916
+ try {
917
+ signal.addEventListener("abort", onAbort, { once: true });
918
+ } catch {
919
+ }
920
+ });
921
+ var clampSampleRate = (sampleRate) => {
922
+ if (typeof sampleRate !== "number" || !Number.isFinite(sampleRate)) return 0;
923
+ if (sampleRate <= 0) return 0;
924
+ if (sampleRate >= 1) return 1;
925
+ return sampleRate;
926
+ };
927
+ var shouldSampleTick = (tickSeq, sampleRate) => {
928
+ if (sampleRate <= 0) return false;
929
+ if (sampleRate >= 1) return true;
930
+ const x = tickSeq >>> 0;
931
+ const h = Math.imul(x ^ 2654435769, 2246822507) >>> 0;
932
+ return h / 4294967295 < sampleRate;
933
+ };
934
+ var toTriggerKind = (originKind) => {
935
+ if (originKind === "action") return "dispatch";
936
+ if (originKind === "trait-external-store") return "externalStore";
937
+ if (originKind?.includes("timer")) return "timer";
938
+ return "unknown";
939
+ };
940
+ var toLane = (priority) => priority === "low" ? "nonUrgent" : "urgent";
941
+ var maxPriority2 = (a, b) => a === "normal" || b === "normal" ? "normal" : "low";
942
+ var mergeDrain = (base, next) => {
943
+ const modules = new Map(base.modules);
944
+ for (const [k, commit] of next.modules) {
945
+ const prev = modules.get(k);
946
+ if (!prev) {
947
+ modules.set(k, commit);
948
+ } else {
949
+ modules.set(k, {
950
+ ...commit,
951
+ meta: {
952
+ ...commit.meta,
953
+ priority: maxPriority2(prev.meta.priority, commit.meta.priority)
954
+ }
955
+ });
956
+ }
957
+ }
958
+ const dirtyTopics = new Map(base.dirtyTopics);
959
+ for (const [k, p] of next.dirtyTopics) {
960
+ const prev = dirtyTopics.get(k);
961
+ dirtyTopics.set(k, prev ? maxPriority2(prev, p) : p);
962
+ }
963
+ return { modules, dirtyTopics };
964
+ };
965
+ var emptyDrain = () => ({ modules: /* @__PURE__ */ new Map(), dirtyTopics: /* @__PURE__ */ new Map() });
966
+ var makeTickScheduler = (args) => {
967
+ const store = args.runtimeStore;
968
+ const hostScheduler = args.hostScheduler;
969
+ const declarativeLinks = args.declarativeLinkRuntime;
970
+ const queue = args.queue ?? makeJobQueue();
971
+ const config = {
972
+ maxSteps: args.config?.maxSteps ?? 64,
973
+ urgentStepCap: args.config?.urgentStepCap ?? 512,
974
+ maxDrainRounds: args.config?.maxDrainRounds ?? 8,
975
+ microtaskChainDepthLimit: args.config?.microtaskChainDepthLimit ?? 32
976
+ };
977
+ const telemetry = args.config?.telemetry;
978
+ const telemetrySampleRate = clampSampleRate(telemetry?.sampleRate);
979
+ let tickSeq = 0;
980
+ let scheduled = false;
981
+ let microtaskChainDepth = 0;
982
+ let nextForcedReason;
983
+ let coalescedModules = 0;
984
+ let coalescedTopics = 0;
985
+ const yieldMicrotask = Effect5.async((resume) => {
986
+ hostScheduler.scheduleMicrotask(() => resume(Effect5.void));
987
+ });
988
+ const yieldMacrotask = Effect5.async((resume, signal) => {
989
+ const cancel = hostScheduler.scheduleMacrotask(() => resume(Effect5.void));
990
+ try {
991
+ signal.addEventListener(
992
+ "abort",
993
+ () => {
994
+ cancel();
995
+ },
996
+ { once: true }
997
+ );
998
+ } catch {
999
+ }
1000
+ });
1001
+ const scheduleTick = () => Effect5.gen(function* () {
1002
+ if (scheduled) return;
1003
+ scheduled = true;
1004
+ const waitedForBatch = batchDepth > 0;
1005
+ const forcedReason = nextForcedReason;
1006
+ nextForcedReason = void 0;
1007
+ const shouldYieldForStarvation = forcedReason == null && microtaskChainDepth >= Math.max(1, config.microtaskChainDepthLimit);
1008
+ const reason = forcedReason ?? (shouldYieldForStarvation ? "microtask_starvation" : void 0);
1009
+ const boundary = reason ? "macrotask" : "microtask";
1010
+ const startedAs = waitedForBatch ? "batch" : boundary;
1011
+ const depthAtSchedule = microtaskChainDepth;
1012
+ yield* Effect5.forkDaemon(
1013
+ Effect5.locally(inSyncTransactionFiber, false)(
1014
+ Effect5.gen(function* () {
1015
+ try {
1016
+ yield* waitForBatchEndIfNeeded();
1017
+ if (boundary === "microtask") {
1018
+ yield* yieldMicrotask;
1019
+ microtaskChainDepth += 1;
1020
+ } else {
1021
+ yield* yieldMacrotask;
1022
+ microtaskChainDepth = 0;
1023
+ }
1024
+ const schedule = {
1025
+ startedAs,
1026
+ microtaskChainDepth: boundary === "macrotask" ? depthAtSchedule : microtaskChainDepth,
1027
+ ...boundary === "macrotask" ? { forcedMacrotask: true, reason: reason ?? "unknown" } : {}
1028
+ };
1029
+ const outcome = yield* flushTick(schedule);
1030
+ if (!outcome.stable) {
1031
+ nextForcedReason = outcome.degradeReason === "budget_steps" ? "budget" : outcome.degradeReason === "cycle_detected" ? "cycle_detected" : "unknown";
1032
+ }
1033
+ } finally {
1034
+ scheduled = false;
1035
+ if (queue.hasPending()) {
1036
+ yield* scheduleTick();
1037
+ } else {
1038
+ microtaskChainDepth = 0;
1039
+ }
1040
+ }
1041
+ })
1042
+ )
1043
+ );
1044
+ });
1045
+ const flushTick = (schedule) => Effect5.gen(function* () {
1046
+ if (!queue.hasPending()) {
1047
+ return { stable: true };
1048
+ }
1049
+ tickSeq += 1;
1050
+ const currentTickSeq = tickSeq;
1051
+ const diagnosticsLevel = yield* FiberRef3.get(currentDiagnosticsLevel);
1052
+ const shouldEmitTrace = isDevtoolsEnabled() && diagnosticsLevel !== "off";
1053
+ const captured = {
1054
+ drainRounds: 0,
1055
+ stable: true,
1056
+ accepted: emptyDrain()
1057
+ };
1058
+ while (captured.drainRounds < config.maxDrainRounds) {
1059
+ const drained = queue.drain();
1060
+ if (!drained) break;
1061
+ captured.drainRounds += 1;
1062
+ captured.accepted = mergeDrain(captured.accepted, drained);
1063
+ if (declarativeLinks && drained.modules.size > 0) {
1064
+ const changedModuleInstanceKeys = Array.from(drained.modules.keys());
1065
+ yield* declarativeLinks.applyForSources({
1066
+ tickSeq: currentTickSeq,
1067
+ acceptedModules: captured.accepted.modules,
1068
+ changedModuleInstanceKeys
1069
+ });
1070
+ }
1071
+ }
1072
+ if (queue.hasPending()) {
1073
+ captured.stable = false;
1074
+ captured.degradeReason = "cycle_detected";
1075
+ }
1076
+ const urgentModules = [];
1077
+ const nonUrgentModules = [];
1078
+ for (const commit of captured.accepted.modules.values()) {
1079
+ if (toLane(commit.meta.priority) === "urgent") {
1080
+ urgentModules.push(commit);
1081
+ } else {
1082
+ nonUrgentModules.push(commit);
1083
+ }
1084
+ }
1085
+ const urgentCapExceeded = urgentModules.length > config.urgentStepCap;
1086
+ const urgentAccepted = urgentCapExceeded ? urgentModules.slice(0, config.urgentStepCap) : urgentModules;
1087
+ const urgentDeferred = urgentCapExceeded ? urgentModules.slice(config.urgentStepCap) : [];
1088
+ const nonUrgentBudget = Math.max(0, config.maxSteps);
1089
+ const nonUrgentAccepted = urgentCapExceeded ? [] : nonUrgentModules.slice(0, nonUrgentBudget);
1090
+ const nonUrgentDeferred = urgentCapExceeded ? nonUrgentModules : nonUrgentModules.slice(nonUrgentBudget);
1091
+ if (urgentCapExceeded) {
1092
+ captured.stable = false;
1093
+ captured.degradeReason = "cycle_detected";
1094
+ } else if (nonUrgentDeferred.length > 0) {
1095
+ captured.stable = false;
1096
+ captured.degradeReason = captured.degradeReason ?? "budget_steps";
1097
+ }
1098
+ const acceptedModules = /* @__PURE__ */ new Map();
1099
+ const deferredModules = /* @__PURE__ */ new Map();
1100
+ for (const c of urgentAccepted) acceptedModules.set(c.moduleInstanceKey, c);
1101
+ for (const c of nonUrgentAccepted) acceptedModules.set(c.moduleInstanceKey, c);
1102
+ for (const c of urgentDeferred) deferredModules.set(c.moduleInstanceKey, c);
1103
+ for (const c of nonUrgentDeferred) deferredModules.set(c.moduleInstanceKey, c);
1104
+ const acceptedTopics = /* @__PURE__ */ new Map();
1105
+ const deferredTopics = /* @__PURE__ */ new Map();
1106
+ for (const [topicKey, priority] of captured.accepted.dirtyTopics) {
1107
+ const info = storeTopicToModuleInstanceKey(topicKey);
1108
+ if (!info) continue;
1109
+ if (acceptedModules.has(info)) {
1110
+ acceptedTopics.set(topicKey, priority);
1111
+ } else if (deferredModules.has(info)) {
1112
+ deferredTopics.set(topicKey, priority);
1113
+ } else {
1114
+ acceptedTopics.set(topicKey, priority);
1115
+ }
1116
+ }
1117
+ const acceptedDrain = {
1118
+ modules: acceptedModules,
1119
+ dirtyTopics: acceptedTopics
1120
+ };
1121
+ const deferredDrain = deferredModules.size > 0 || deferredTopics.size > 0 ? {
1122
+ modules: deferredModules,
1123
+ dirtyTopics: deferredTopics
1124
+ } : void 0;
1125
+ captured.deferred = deferredDrain;
1126
+ let startedAtMs;
1127
+ let triggerSummary;
1128
+ let anchor;
1129
+ let backlog;
1130
+ let result;
1131
+ if (shouldEmitTrace) {
1132
+ startedAtMs = Date.now();
1133
+ triggerSummary = (() => {
1134
+ const triggers = Array.from(captured.accepted.modules.values());
1135
+ const counts = /* @__PURE__ */ new Map();
1136
+ let primary = void 0;
1137
+ for (const t of triggers) {
1138
+ const kind = toTriggerKind(t.meta.originKind);
1139
+ counts.set(kind, (counts.get(kind) ?? 0) + 1);
1140
+ if (!primary) {
1141
+ primary = {
1142
+ kind,
1143
+ moduleId: t.moduleId,
1144
+ instanceId: t.instanceId,
1145
+ fieldPath: kind === "externalStore" ? t.meta.originName : void 0,
1146
+ actionTag: kind === "dispatch" ? t.meta.originName : void 0
1147
+ };
1148
+ }
1149
+ }
1150
+ return {
1151
+ total: triggers.length,
1152
+ kinds: Array.from(counts.entries()).map(([kind, count]) => ({ kind, count })),
1153
+ primary,
1154
+ coalescedCount: {
1155
+ modules: coalescedModules,
1156
+ topics: coalescedTopics
1157
+ }
1158
+ };
1159
+ })();
1160
+ anchor = (() => {
1161
+ const first = captured.accepted.modules.values().next().value;
1162
+ if (!first) return void 0;
1163
+ return {
1164
+ moduleId: first.moduleId,
1165
+ instanceId: first.instanceId,
1166
+ txnSeq: first.meta.txnSeq,
1167
+ txnId: first.meta.txnId,
1168
+ ...typeof first.opSeq === "number" ? { opSeq: first.opSeq } : null
1169
+ };
1170
+ })();
1171
+ backlog = (() => {
1172
+ const deferredWork = captured.deferred;
1173
+ if (!deferredWork) return void 0;
1174
+ const pendingDeferredWork = deferredWork.modules.size + deferredWork.dirtyTopics.size;
1175
+ const deferredModulesList = Array.from(deferredWork.modules.values());
1176
+ const pendingExternalInputs = deferredModulesList.filter((m) => toTriggerKind(m.meta.originKind) === "externalStore").length;
1177
+ const primaryDeferred = deferredModulesList.find((m) => toTriggerKind(m.meta.originKind) === "externalStore") ?? deferredModulesList[0];
1178
+ const kind = primaryDeferred ? toTriggerKind(primaryDeferred.meta.originKind) : "unknown";
1179
+ const deferredPrimary = primaryDeferred != null ? {
1180
+ kind: kind === "externalStore" ? "externalStore" : "unknown",
1181
+ moduleId: primaryDeferred.moduleId,
1182
+ instanceId: primaryDeferred.instanceId,
1183
+ fieldPath: kind === "externalStore" ? primaryDeferred.meta.originName : void 0,
1184
+ storeId: void 0
1185
+ } : void 0;
1186
+ return {
1187
+ pendingExternalInputs,
1188
+ pendingDeferredWork,
1189
+ deferredPrimary
1190
+ };
1191
+ })();
1192
+ result = {
1193
+ stable: captured.stable,
1194
+ ...captured.stable ? null : { degradeReason: captured.degradeReason ?? "unknown" }
1195
+ };
1196
+ }
1197
+ if (shouldEmitTrace && schedule.forcedMacrotask && schedule.reason === "microtask_starvation") {
1198
+ yield* record({
1199
+ type: "warn:microtask-starvation",
1200
+ moduleId: anchor?.moduleId,
1201
+ instanceId: anchor?.instanceId,
1202
+ tickSeq: currentTickSeq,
1203
+ microtaskChainDepth: schedule.microtaskChainDepth
1204
+ });
1205
+ }
1206
+ if (shouldEmitTrace) {
1207
+ yield* record({
1208
+ type: "trace:tick",
1209
+ moduleId: anchor?.moduleId,
1210
+ instanceId: anchor?.instanceId,
1211
+ data: {
1212
+ tickSeq: currentTickSeq,
1213
+ phase: "start",
1214
+ timestampMs: startedAtMs,
1215
+ schedule,
1216
+ triggerSummary,
1217
+ anchors: anchor,
1218
+ budget: {
1219
+ maxSteps: config.maxSteps,
1220
+ elapsedMs: 0,
1221
+ steps: 0,
1222
+ txnCount: acceptedModules.size
1223
+ }
1224
+ }
1225
+ });
1226
+ }
1227
+ if (!captured.stable && shouldEmitTrace) {
1228
+ yield* record({
1229
+ type: "trace:tick",
1230
+ moduleId: anchor?.moduleId,
1231
+ instanceId: anchor?.instanceId,
1232
+ data: {
1233
+ tickSeq: currentTickSeq,
1234
+ phase: "budgetExceeded",
1235
+ timestampMs: Date.now(),
1236
+ schedule,
1237
+ triggerSummary,
1238
+ anchors: anchor,
1239
+ budget: {
1240
+ maxSteps: config.maxSteps,
1241
+ elapsedMs: Math.max(0, Date.now() - startedAtMs),
1242
+ steps: config.maxSteps,
1243
+ txnCount: acceptedModules.size
1244
+ },
1245
+ backlog,
1246
+ result
1247
+ }
1248
+ });
1249
+ }
1250
+ if (deferredDrain) {
1251
+ queue.requeue(deferredDrain);
1252
+ }
1253
+ const committed = store.commitTick({
1254
+ tickSeq: currentTickSeq,
1255
+ accepted: acceptedDrain
1256
+ });
1257
+ for (const { listeners: listeners2 } of committed.changedTopics.values()) {
1258
+ for (const listener of listeners2) {
1259
+ try {
1260
+ listener();
1261
+ } catch {
1262
+ }
1263
+ }
1264
+ }
1265
+ if (!captured.stable && shouldEmitTrace && backlog?.deferredPrimary) {
1266
+ const primary = backlog.deferredPrimary;
1267
+ if (primary.kind === "externalStore") {
1268
+ const moduleInstanceKey = primary.moduleId && primary.instanceId ? `${primary.moduleId}::${primary.instanceId}` : void 0;
1269
+ if (moduleInstanceKey && store.getModuleSubscriberCount(moduleInstanceKey) > 0) {
1270
+ yield* record({
1271
+ type: "warn:priority-inversion",
1272
+ moduleId: primary.moduleId,
1273
+ instanceId: primary.instanceId,
1274
+ tickSeq: currentTickSeq,
1275
+ reason: "deferredBacklog"
1276
+ });
1277
+ }
1278
+ }
1279
+ }
1280
+ if (shouldEmitTrace) {
1281
+ yield* record({
1282
+ type: "trace:tick",
1283
+ moduleId: anchor?.moduleId,
1284
+ instanceId: anchor?.instanceId,
1285
+ data: {
1286
+ tickSeq: currentTickSeq,
1287
+ phase: "settled",
1288
+ timestampMs: Date.now(),
1289
+ schedule,
1290
+ triggerSummary,
1291
+ anchors: anchor,
1292
+ budget: {
1293
+ maxSteps: config.maxSteps,
1294
+ elapsedMs: Math.max(0, Date.now() - startedAtMs),
1295
+ steps: acceptedModules.size,
1296
+ txnCount: acceptedModules.size
1297
+ },
1298
+ backlog,
1299
+ result
1300
+ }
1301
+ });
1302
+ }
1303
+ if (telemetry?.onTickDegraded && (schedule.forcedMacrotask || !captured.stable) && shouldSampleTick(currentTickSeq, telemetrySampleRate)) {
1304
+ try {
1305
+ telemetry.onTickDegraded({
1306
+ tickSeq: currentTickSeq,
1307
+ stable: captured.stable,
1308
+ degradeReason: captured.stable ? void 0 : captured.degradeReason ?? "unknown",
1309
+ forcedMacrotask: schedule.forcedMacrotask,
1310
+ scheduleReason: schedule.reason,
1311
+ microtaskChainDepth: schedule.microtaskChainDepth,
1312
+ deferredWorkCount: deferredDrain ? deferredDrain.modules.size + deferredDrain.dirtyTopics.size : 0
1313
+ });
1314
+ } catch {
1315
+ }
1316
+ }
1317
+ coalescedModules = 0;
1318
+ coalescedTopics = 0;
1319
+ return { stable: captured.stable, degradeReason: captured.degradeReason };
1320
+ });
1321
+ const flushNow = flushTick({ startedAs: "unknown" }).pipe(Effect5.asVoid);
1322
+ const storeTopicToModuleInstanceKey = (topicKey) => {
1323
+ const idx = topicKey.indexOf("::rq:");
1324
+ if (idx > 0) {
1325
+ return topicKey.slice(0, idx);
1326
+ }
1327
+ if (topicKey.includes("::")) {
1328
+ return topicKey;
1329
+ }
1330
+ return void 0;
1331
+ };
1332
+ const onSelectorChanged = ({ moduleInstanceKey, selectorId, priority }) => {
1333
+ const coalesced = queue.markTopicDirty(makeReadQueryTopicKey(moduleInstanceKey, selectorId), priority);
1334
+ if (coalesced) coalescedTopics += 1;
1335
+ };
1336
+ const onModuleCommit = (commit) => Effect5.gen(function* () {
1337
+ const coalescedCommit = queue.enqueueModuleCommit(commit);
1338
+ if (coalescedCommit) coalescedModules += 1;
1339
+ const coalescedTopic = queue.markTopicDirty(commit.moduleInstanceKey, commit.meta.priority);
1340
+ if (coalescedTopic) coalescedTopics += 1;
1341
+ yield* scheduleTick();
1342
+ });
1343
+ return {
1344
+ getTickSeq: () => tickSeq,
1345
+ onModuleCommit,
1346
+ onSelectorChanged,
1347
+ flushNow
1348
+ };
1349
+ };
1350
+
1351
+ export {
1352
+ makeModuleInstanceKey,
1353
+ configureDevtoolsHub,
1354
+ isDevtoolsEnabled,
1355
+ getDevtoolsSnapshot,
1356
+ getDevtoolsSnapshotToken,
1357
+ subscribeDevtoolsSnapshot,
1358
+ getDevtoolsRunId,
1359
+ setDevtoolsRunId,
1360
+ startDevtoolsRun,
1361
+ clearDevtoolsEvents,
1362
+ setInstanceLabel,
1363
+ getInstanceLabel,
1364
+ devtoolsHubConvergeStaticIrCollector,
1365
+ exportDevtoolsEvidencePackage,
1366
+ devtoolsHubSink,
1367
+ enterRuntimeBatch,
1368
+ exitRuntimeBatch,
1369
+ getNodeEnv,
1370
+ isDevEnv,
1371
+ getDefaultStateTxnInstrumentation,
1372
+ StateTransactionConfigTag,
1373
+ ReadQueryStrictGateConfigTag,
1374
+ ReplayModeConfigTag,
1375
+ StateTransactionOverridesTag,
1376
+ ConcurrencyPolicyTag,
1377
+ ConcurrencyPolicyOverridesTag,
1378
+ RuntimeStoreTag,
1379
+ runtimeStoreLayer,
1380
+ HostSchedulerTag,
1381
+ hostSchedulerLayer,
1382
+ hostSchedulerTestStubLayer,
1383
+ DeclarativeLinkRuntimeTag,
1384
+ declarativeLinkRuntimeLayer,
1385
+ TickSchedulerTag,
1386
+ tickSchedulerLayer,
1387
+ inSyncTransactionFiber,
1388
+ forceSourceRefresh,
1389
+ enterSyncTransaction,
1390
+ exitSyncTransaction,
1391
+ isInSyncTransaction,
1392
+ shouldNoopInSyncTransactionFiber,
1393
+ makeTaskRunner
1394
+ };
1395
+ //# sourceMappingURL=chunk-AQ7L2QZ5.js.map