@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
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Runtime.ts","../src/internal/runtime/core/configValidation.ts","../src/internal/runtime/core/runner/ProgramRunner.ts","../src/internal/runtime/core/runner/ProgramRunner.exitCode.ts","../src/internal/runtime/core/runner/ProgramRunner.options.ts"],"sourcesContent":["import { Effect, Layer, ManagedRuntime, Option, Scope } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from './internal/module.js'\nimport type { AnyModule } from './Module.js'\nimport * as AppRuntimeImpl from './internal/runtime/AppRuntime.js'\nimport * as ModuleRuntime from './internal/runtime/ModuleRuntime.js'\nimport * as Debug from './Debug.js'\nimport type * as EffectOp from './EffectOp.js'\nimport * as EffectOpCore from './internal/runtime/core/EffectOpCore.js'\nimport * as RunSession from './internal/observability/runSession.js'\nimport type { ReadQueryFallbackReason as ReadQueryFallbackReasonCore } from './internal/runtime/core/ReadQuery.js'\nimport {\n ConcurrencyPolicyTag,\n ConcurrencyPolicyOverridesTag,\n type ReadQueryStrictGateRuntimeConfig,\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n type ConcurrencyPolicy,\n type ConcurrencyPolicyOverrides,\n type ConcurrencyPolicyPatch,\n type StateTransactionOverrides,\n type StateTransactionInstrumentation,\n type StateTransactionTraitConvergeOverrides,\n type TraitConvergeTimeSlicingPatch,\n type TxnLanesPatch,\n} from './internal/runtime/core/env.js'\nimport * as Middleware from './Middleware.js'\nimport { getRuntimeInternals } from './internal/runtime/core/runtimeInternalsAccessor.js'\nimport * as ScopeRegistry from './ScopeRegistry.js'\nimport {\n warnInvalidConcurrencyPolicyDevOnly,\n warnInvalidConcurrencyPolicyPatchDevOnly,\n warnInvalidStateTransactionOverridesDevOnly,\n warnInvalidStateTransactionRuntimeConfigDevOnly,\n warnInvalidStateTransactionTraitConvergeOverridesDevOnly,\n} from './internal/runtime/core/configValidation.js'\nimport * as ProgramRunner from './internal/runtime/ProgramRunner.js'\nimport type { ProgramRunContext } from './internal/runtime/ProgramRunner.context.js'\n\nexport type { ProgramRunContext } from './internal/runtime/ProgramRunner.context.js'\nexport {\n BootError,\n DisposeError,\n DisposeTimeoutError,\n MainError,\n type ProgramIdentity,\n type ProgramRunnerErrorTag,\n} from './internal/runtime/ProgramRunner.errors.js'\n\nexport interface OpenProgramOptions extends RuntimeOptions {\n readonly closeScopeTimeout?: number\n readonly handleSignals?: boolean\n}\n\nexport interface RunProgramOptions<Args = unknown> extends OpenProgramOptions {\n readonly args?: Args\n readonly exitCode?: boolean\n readonly reportError?: boolean\n}\n\nconst resolveRootImpl = <Sh extends AnyModuleShape>(\n root: ModuleImpl<any, Sh, any> | AnyModule,\n): ModuleImpl<any, Sh, any> =>\n ((root as any)?._tag === 'ModuleImpl'\n ? (root as ModuleImpl<any, Sh, any>)\n : ((root as any)?.impl as ModuleImpl<any, Sh, any>)) satisfies ModuleImpl<any, Sh, any>\n\n/**\n * Runtime-level StateTransaction defaults.\n *\n * Applied as the `runtime_default` baseline; modules and providers may override.\n */\nexport interface RuntimeStateTransactionOptions {\n readonly instrumentation?: StateTransactionInstrumentation\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeMode?: 'auto' | 'full' | 'dirty'\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n /** Txn lanes configuration at the `runtime_default` baseline (enabled by default). */\n readonly txnLanes?: TxnLanesPatch\n readonly traitConvergeOverridesByModuleId?: Readonly<Record<string, StateTransactionTraitConvergeOverrides>>\n /** Txn lanes overrides at the `runtime_module` layer. */\n readonly txnLanesOverridesByModuleId?: Readonly<Record<string, TxnLanesPatch>>\n}\n\nexport type ReadQueryFallbackReason = ReadQueryFallbackReasonCore\n\nexport interface RuntimeReadQueryStrictGateOptions {\n /**\n * Strict gate mode for ReadQuery fallbacks.\n *\n * - `off`: disabled (default).\n * - `warn`: allow but emit structured diagnostics.\n * - `error`: fail on forbidden fallbacks (CI/perf gate).\n */\n readonly mode?: 'off' | 'warn' | 'error'\n /**\n * Selectors that must stay on the static lane (keyed by selectorId).\n *\n * When undefined, the implementation decides the gate coverage (typically `all`).\n */\n readonly requireStatic?: {\n readonly selectorIds?: ReadonlyArray<string>\n readonly modules?: ReadonlyArray<string>\n }\n /**\n * Fine-grained kill switch: deny specific fallback reasons (e.g. `unstableSelectorId`).\n */\n readonly denyFallbackReasons?: ReadonlyArray<ReadQueryFallbackReason>\n}\n\nexport interface RuntimeReadQueryOptions {\n readonly strictGate?: RuntimeReadQueryStrictGateOptions\n}\n\nexport interface RuntimeOptions {\n readonly layer?: Layer.Layer<any, never, never>\n readonly onError?: (cause: import('effect').Cause.Cause<unknown>) => Effect.Effect<void>\n /**\n * Optional runtime label (e.g. `AppDemoRuntime`) for Debug / DevTools grouping.\n */\n readonly label?: string\n /**\n * Optional Debug console output configuration.\n *\n * - `true`: enable `Debug.layer()` (auto mode).\n * - `Debug.DebugLayerOptions`: forwarded to `Debug.layer(options)`.\n *\n * Advanced: for full control, omit this option and provide your own Debug layers via `options.layer`.\n */\n readonly debug?: true | Debug.DebugLayerOptions\n readonly middleware?: EffectOp.MiddlewareStack\n /**\n * Enable Devtools (explicit override).\n *\n * - `true`: use default `DevtoolsRuntimeOptions`.\n * - `DevtoolsRuntimeOptions`: customize hub buffer size, DebugObserver filters, etc.\n */\n readonly devtools?: true | DevtoolsRuntimeOptions\n /**\n * Runtime-level StateTransaction defaults.\n *\n * When not provided, modules fall back to NODE_ENV-based defaults; modules may override via\n * `ModuleDef.implement({ stateTransaction })`.\n */\n readonly stateTransaction?: RuntimeStateTransactionOptions\n /**\n * Runtime-level concurrency control plane.\n *\n * Converges unbounded concurrency into bounded (default 16), with module/provider overrides.\n */\n readonly concurrencyPolicy?: ConcurrencyPolicy\n /**\n * ReadQuery governance (e.g. strict gate policies).\n */\n readonly readQuery?: RuntimeReadQueryOptions\n}\n\nexport interface DevtoolsRuntimeOptions {\n /** Hub ring buffer capacity (events). Default: 500. */\n readonly bufferSize?: number\n /**\n * Diagnostics level for exportable Devtools events.\n *\n * Forwarded to `Debug.devtoolsHubLayer({ diagnosticsLevel })`.\n * Default: `\"light\"`.\n */\n readonly diagnosticsLevel?: Debug.DiagnosticsLevel\n /**\n * Trait converge diagnostics sampling config.\n *\n * Forwarded to `Debug.devtoolsHubLayer({ traitConvergeDiagnosticsSampling })`.\n */\n readonly traitConvergeDiagnosticsSampling?: Debug.TraitConvergeDiagnosticsSamplingConfig\n /** DebugObserver config for `trace:effectop`; undefined means full observation. */\n readonly observer?: Middleware.DebugObserverConfig | false\n /** Reserved: React render sampling / throttling config (consumed by `@logixjs/react`). */\n readonly sampling?: {\n readonly reactRenderSampleRate?: number\n }\n}\n\n/**\n * Construct an application runtime from a root module.\n *\n * - Uses the root module + layer as the composition root.\n * - Forks root processes within the runtime Scope.\n * - Exposes a ManagedRuntime; the full Env is provided by `root.layer + options.layer`.\n */\nexport const make = (\n root: ModuleImpl<any, AnyModuleShape, any> | AnyModule,\n options?: RuntimeOptions,\n): ManagedRuntime.ManagedRuntime<any, never> => {\n const rootImpl = resolveRootImpl(root)\n\n warnInvalidConcurrencyPolicyDevOnly(options?.concurrencyPolicy, 'Runtime.make options.concurrencyPolicy')\n warnInvalidStateTransactionRuntimeConfigDevOnly(options?.stateTransaction, 'Runtime.make options.stateTransaction')\n\n const debugLayer =\n options?.debug === true\n ? (Debug.layer() as Layer.Layer<any, never, never>)\n : options?.debug\n ? (Debug.layer(options.debug) as Layer.Layer<any, never, never>)\n : (Layer.empty as Layer.Layer<any, never, never>)\n\n // Base Env: fully defined by caller-provided Layers (e.g. Config / platform services).\n // Debug sinks can be enabled via options.debug, or manually composed via options.layer.\n const userLayer = (options?.layer ?? Layer.empty) as Layer.Layer<any, never, never>\n const userWithDebug = options?.debug ? (Layer.mergeAll(userLayer, debugLayer) as Layer.Layer<any, never, never>) : userLayer\n\n let middlewareStack: EffectOp.MiddlewareStack = options?.middleware ?? []\n\n // When devtools is explicitly enabled:\n // 1) Append DebugObserver (`trace:effectop`).\n // 2) Mount the DevtoolsHub sink in appLayer (process-level event aggregation).\n const devtoolsOptions: DevtoolsRuntimeOptions | undefined = options?.devtools === true ? {} : options?.devtools\n\n if (options?.devtools) {\n const observerConfig = devtoolsOptions?.observer === false ? false : devtoolsOptions?.observer\n middlewareStack = Middleware.withDebug(middlewareStack, {\n logger: false,\n observer: observerConfig,\n })\n }\n\n // Optional: inject the EffectOp MiddlewareStack service for this Runtime,\n // so runtime code (e.g. StateTrait.install) can resolve the unified EffectOp bus configuration from Env.\n const effectOpLayer: Layer.Layer<any, never, never> =\n middlewareStack.length > 0\n ? (Layer.succeed(EffectOpCore.EffectOpMiddlewareTag, {\n stack: middlewareStack,\n }) as Layer.Layer<any, never, never>)\n : (Layer.empty as Layer.Layer<any, never, never>)\n\n const baseLayer =\n options?.label != null\n ? (Layer.mergeAll(Debug.runtimeLabel(options.label), userWithDebug) as Layer.Layer<any, never, never>)\n : userWithDebug\n\n const baseWithDevtools = options?.devtools\n ? (Debug.devtoolsHubLayer(baseLayer, {\n bufferSize: devtoolsOptions?.bufferSize,\n diagnosticsLevel: devtoolsOptions?.diagnosticsLevel,\n traitConvergeDiagnosticsSampling: devtoolsOptions?.traitConvergeDiagnosticsSampling,\n }) as Layer.Layer<any, never, never>)\n : baseLayer\n\n // NOTE: runSession should be overrideable by callers (e.g. CI/trial-run injecting a stable runId).\n // In Layer.mergeAll, later layers override earlier ones; keep the default layer first.\n const appLayer = Layer.mergeAll(\n RunSession.runSessionLayer(),\n ScopeRegistry.layer(),\n baseWithDevtools,\n effectOpLayer,\n ) as Layer.Layer<any, never, never>\n\n const readQueryStrictGate: ReadQueryStrictGateRuntimeConfig | undefined = (() => {\n const strictGate = options?.readQuery?.strictGate\n if (!strictGate) return undefined\n\n const mode = strictGate.mode ?? 'off'\n if (mode === 'off') return undefined\n\n return {\n mode,\n requireStatic: strictGate.requireStatic,\n denyFallbackReasons: strictGate.denyFallbackReasons,\n }\n })()\n\n const appConfig: AppRuntimeImpl.LogixAppConfig<any> = {\n layer: appLayer,\n modules: [AppRuntimeImpl.provide(rootImpl.module, rootImpl.layer as Layer.Layer<any, any, any>)],\n processes: rootImpl.processes ?? [],\n onError: options?.onError,\n stateTransaction: options?.stateTransaction,\n concurrencyPolicy: options?.concurrencyPolicy,\n readQueryStrictGate,\n }\n\n const app = AppRuntimeImpl.makeApp(appConfig)\n return app.makeRuntime() as ManagedRuntime.ManagedRuntime<any, never>\n}\n\n/**\n * Resourceful entry: returns a scope-bound ProgramRunContext (booted and ready).\n */\nexport const openProgram = <Sh extends AnyModuleShape>(\n root: ModuleImpl<any, Sh, any> | AnyModule,\n options?: OpenProgramOptions,\n): Effect.Effect<ProgramRunContext<Sh>, unknown, Scope.Scope> =>\n ProgramRunner.openProgram(\n (rootImpl, runtimeOptions) => make(rootImpl, runtimeOptions as RuntimeOptions),\n resolveRootImpl(root),\n options,\n )\n\n/**\n * One-shot entry: boot → main(ctx,args) → dispose.\n */\nexport const runProgram = async <Sh extends AnyModuleShape, Args, A, E, R>(\n root: ModuleImpl<any, Sh, any> | AnyModule,\n main: (ctx: ProgramRunContext<Sh>, args: Args) => Effect.Effect<A, E, R>,\n options?: RunProgramOptions<Args>,\n): Promise<A> =>\n ProgramRunner.runProgram(\n (rootImpl, runtimeOptions) => make(rootImpl, runtimeOptions as RuntimeOptions),\n resolveRootImpl(root),\n main,\n options,\n )\n\n/**\n * Provider-scoped StateTransactionOverrides layer.\n *\n * Use it to apply local overrides on top of the `runtime_default` baseline.\n */\nexport const stateTransactionOverridesLayer = (\n overrides: StateTransactionOverrides,\n): Layer.Layer<any, never, never> => {\n warnInvalidStateTransactionOverridesDevOnly(overrides, 'Runtime.stateTransactionOverridesLayer')\n return Layer.succeed(StateTransactionOverridesTag, overrides) as Layer.Layer<any, never, never>\n}\n\n/**\n * Provider-scoped ConcurrencyPolicyOverrides layer.\n *\n * Use it to apply local overrides on top of the `runtime_default` baseline.\n */\nexport const concurrencyPolicyOverridesLayer = (\n overrides: ConcurrencyPolicyOverrides,\n): Layer.Layer<any, never, never> => {\n warnInvalidConcurrencyPolicyDevOnly(overrides, 'Runtime.concurrencyPolicyOverridesLayer')\n return Layer.succeed(ConcurrencyPolicyOverridesTag, overrides) as Layer.Layer<any, never, never>\n}\n\n/**\n * Hot-switch Trait converge overrides for a moduleId.\n *\n * This mutates the `runtime_module` patch map only; provider overrides still take precedence.\n */\nexport const setTraitConvergeOverride = (\n runtime: ManagedRuntime.ManagedRuntime<any, never>,\n moduleId: string,\n overrides: StateTransactionTraitConvergeOverrides | undefined,\n): void => {\n warnInvalidStateTransactionTraitConvergeOverridesDevOnly(overrides, `Runtime.setTraitConvergeOverride(${moduleId})`)\n\n runtime.runSync(\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n\n if (Option.isNone(runtimeConfigOpt)) {\n return\n }\n\n // NOTE: runtime config lives in Env as a Service; hot-switch by replacing the per-module patch map.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const runtimeConfig: any = runtimeConfigOpt.value\n const next = {\n ...(runtimeConfig.traitConvergeOverridesByModuleId ?? {}),\n }\n\n if (overrides) {\n next[moduleId] = overrides\n } else {\n delete next[moduleId]\n }\n\n runtimeConfig.traitConvergeOverridesByModuleId = next\n }),\n )\n}\n\n/**\n * Hot-switch ConcurrencyPolicy patch for a moduleId.\n *\n * This mutates the `runtime_module` patch map only; provider overrides still take precedence.\n */\nexport const setConcurrencyPolicyOverride = (\n runtime: ManagedRuntime.ManagedRuntime<any, never>,\n moduleId: string,\n patch: ConcurrencyPolicyPatch | undefined,\n): void => {\n warnInvalidConcurrencyPolicyPatchDevOnly(patch, `Runtime.setConcurrencyPolicyOverride(${moduleId})`)\n\n runtime.runSync(\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(ConcurrencyPolicyTag)\n\n if (Option.isNone(runtimeConfigOpt)) {\n return\n }\n\n // NOTE: runtime config lives in Env as a Service; hot-switch by replacing the per-module patch map.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const runtimeConfig: any = runtimeConfigOpt.value\n const next = {\n ...(runtimeConfig.overridesByModuleId ?? {}),\n }\n\n if (patch) {\n next[moduleId] = patch\n } else {\n delete next[moduleId]\n }\n\n runtimeConfig.overridesByModuleId = next\n }),\n )\n}\n\n/**\n * Apply a transaction snapshot for time-travel replay (dev/test).\n *\n * - `moduleId` / `instanceId` match Debug events.\n * - `mode`: `before` replays pre-transaction; `after` replays post-commit.\n *\n * No-op if the runtime/instance cannot be resolved.\n */\nexport const applyTransactionSnapshot = (\n moduleId: string,\n instanceId: string,\n txnId: string,\n mode: 'before' | 'after',\n): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const runtime = ModuleRuntime.getRuntimeByModuleAndInstance<any, any>(moduleId, instanceId)\n\n if (!runtime) {\n return\n }\n\n try {\n yield* getRuntimeInternals(runtime as any).txn.applyTransactionSnapshot(txnId, mode)\n } catch {\n return\n }\n })\n","import { Schema } from 'effect'\nimport { isDevEnv } from './env.js'\nimport {\n normalizeBoolean,\n normalizeNonNegativeNumber,\n normalizePositiveInt,\n normalizePositiveNumber,\n} from './normalize.js'\n\nconst PositiveIntSchema = Schema.Int.pipe(Schema.positive())\nconst PositiveNumberSchema = Schema.Number.pipe(Schema.positive())\nconst ConvergeModeSchema = Schema.Union(Schema.Literal('auto'), Schema.Literal('full'), Schema.Literal('dirty'))\nconst InstrumentationSchema = Schema.Union(Schema.Literal('full'), Schema.Literal('light'))\nconst ConcurrencyLimitSchema = Schema.Union(Schema.Literal('unbounded'), PositiveIntSchema)\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst warnDevOnly = (label: string, issues: ReadonlyArray<string>): void => {\n if (!isDevEnv()) return\n if (issues.length === 0) return\n // eslint-disable-next-line no-console\n console.warn(\n ['[Logix] Invalid runtime config detected.', `context: ${label}`, 'issues:']\n .concat(issues.map((i) => `- ${i}`))\n .join('\\n'),\n )\n}\n\nconst collectUnknownKeys = (\n obj: Record<string, unknown>,\n allowed: ReadonlySet<string>,\n prefix: string,\n): ReadonlyArray<string> => {\n const issues: string[] = []\n for (const key of Object.keys(obj)) {\n if (!allowed.has(key)) {\n issues.push(`${prefix}${key}: unknown key`)\n }\n }\n return issues\n}\n\nconst validateConcurrencyPolicyPatch = (obj: Record<string, unknown>, prefix: string): ReadonlyArray<string> => {\n const issues: string[] = []\n\n if ('concurrencyLimit' in obj && obj.concurrencyLimit != null) {\n if (!Schema.is(ConcurrencyLimitSchema)(obj.concurrencyLimit)) {\n issues.push(`${prefix}concurrencyLimit: expected positive int | \"unbounded\"`)\n }\n }\n\n if ('losslessBackpressureCapacity' in obj && obj.losslessBackpressureCapacity != null) {\n if (normalizePositiveInt(obj.losslessBackpressureCapacity) == null) {\n issues.push(`${prefix}losslessBackpressureCapacity: expected positive int`)\n }\n }\n\n if ('allowUnbounded' in obj && obj.allowUnbounded != null) {\n if (normalizeBoolean(obj.allowUnbounded) == null) {\n issues.push(`${prefix}allowUnbounded: expected boolean`)\n }\n }\n\n if ('pressureWarningThreshold' in obj && obj.pressureWarningThreshold != null) {\n const threshold = obj.pressureWarningThreshold\n if (!isRecord(threshold)) {\n issues.push(`${prefix}pressureWarningThreshold: expected object`)\n } else {\n const backlogCount = threshold['backlogCount']\n if (backlogCount != null) {\n if (normalizePositiveInt(backlogCount) == null) {\n issues.push(`${prefix}pressureWarningThreshold.backlogCount: expected positive int`)\n }\n }\n const backlogDurationMs = threshold['backlogDurationMs']\n if (backlogDurationMs != null) {\n if (normalizePositiveNumber(backlogDurationMs) == null) {\n issues.push(`${prefix}pressureWarningThreshold.backlogDurationMs: expected positive number`)\n }\n }\n }\n }\n\n if ('warningCooldownMs' in obj && obj.warningCooldownMs != null) {\n if (normalizePositiveNumber(obj.warningCooldownMs) == null) {\n issues.push(`${prefix}warningCooldownMs: expected positive number`)\n }\n }\n\n return issues\n}\n\nexport const warnInvalidConcurrencyPolicyDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const policy = value\n const issues: string[] = []\n\n issues.push(\n ...collectUnknownKeys(\n policy,\n new Set([\n 'concurrencyLimit',\n 'losslessBackpressureCapacity',\n 'allowUnbounded',\n 'pressureWarningThreshold',\n 'warningCooldownMs',\n 'overridesByModuleId',\n ]),\n '',\n ),\n )\n\n issues.push(...validateConcurrencyPolicyPatch(policy, ''))\n\n const overridesByModuleId = policy.overridesByModuleId\n if (overridesByModuleId != null) {\n if (!isRecord(overridesByModuleId)) {\n issues.push(`overridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(overridesByModuleId)) {\n const prefix = `overridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'concurrencyLimit',\n 'losslessBackpressureCapacity',\n 'allowUnbounded',\n 'pressureWarningThreshold',\n 'warningCooldownMs',\n ]),\n prefix,\n ),\n )\n issues.push(...validateConcurrencyPolicyPatch(patch, prefix))\n }\n }\n }\n\n warnDevOnly(label, issues)\n}\n\nexport const warnInvalidConcurrencyPolicyPatchDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'concurrencyLimit',\n 'losslessBackpressureCapacity',\n 'allowUnbounded',\n 'pressureWarningThreshold',\n 'warningCooldownMs',\n ]),\n '',\n ),\n )\n issues.push(...validateConcurrencyPolicyPatch(value, ''))\n\n warnDevOnly(label, issues)\n}\n\nconst validateStateTransactionTraitOverrides = (\n obj: Record<string, unknown>,\n prefix: string,\n): ReadonlyArray<string> => {\n const issues: string[] = []\n\n if ('traitConvergeMode' in obj && obj.traitConvergeMode != null) {\n if (!Schema.is(ConvergeModeSchema)(obj.traitConvergeMode)) {\n issues.push(`${prefix}traitConvergeMode: expected \"auto\" | \"full\" | \"dirty\"`)\n }\n }\n if ('traitConvergeBudgetMs' in obj && obj.traitConvergeBudgetMs != null) {\n if (normalizePositiveNumber(obj.traitConvergeBudgetMs) == null) {\n issues.push(`${prefix}traitConvergeBudgetMs: expected positive number`)\n }\n }\n if ('traitConvergeDecisionBudgetMs' in obj && obj.traitConvergeDecisionBudgetMs != null) {\n if (normalizePositiveNumber(obj.traitConvergeDecisionBudgetMs) == null) {\n issues.push(`${prefix}traitConvergeDecisionBudgetMs: expected positive number`)\n }\n }\n if ('traitConvergeTimeSlicing' in obj && obj.traitConvergeTimeSlicing != null) {\n const timeSlicing = obj.traitConvergeTimeSlicing\n if (!isRecord(timeSlicing)) {\n issues.push(`${prefix}traitConvergeTimeSlicing: expected object`)\n } else {\n const tsPrefix = `${prefix}traitConvergeTimeSlicing.`\n issues.push(...collectUnknownKeys(timeSlicing, new Set(['enabled', 'debounceMs', 'maxLagMs']), tsPrefix))\n\n if ('enabled' in timeSlicing && timeSlicing.enabled != null) {\n if (typeof timeSlicing.enabled !== 'boolean') {\n issues.push(`${tsPrefix}enabled: expected boolean`)\n }\n }\n if ('debounceMs' in timeSlicing && timeSlicing.debounceMs != null) {\n if (normalizePositiveNumber(timeSlicing.debounceMs) == null) {\n issues.push(`${tsPrefix}debounceMs: expected positive number`)\n }\n }\n if ('maxLagMs' in timeSlicing && timeSlicing.maxLagMs != null) {\n if (normalizePositiveNumber(timeSlicing.maxLagMs) == null) {\n issues.push(`${tsPrefix}maxLagMs: expected positive number`)\n }\n }\n }\n }\n\n return issues\n}\n\nconst validateTxnLanesPatch = (obj: Record<string, unknown>, prefix: string): ReadonlyArray<string> => {\n const issues: string[] = []\n\n if ('enabled' in obj && obj.enabled != null) {\n if (normalizeBoolean(obj.enabled) == null) {\n issues.push(`${prefix}enabled: expected boolean`)\n }\n }\n\n if ('overrideMode' in obj && obj.overrideMode != null) {\n const raw = obj.overrideMode\n if (typeof raw !== 'string' || (raw !== 'forced_off' && raw !== 'forced_sync')) {\n issues.push(`${prefix}overrideMode: expected \"forced_off\" | \"forced_sync\"`)\n }\n }\n\n if ('budgetMs' in obj && obj.budgetMs != null) {\n if (normalizeNonNegativeNumber(obj.budgetMs) == null) {\n issues.push(`${prefix}budgetMs: expected non-negative number`)\n }\n }\n\n if ('debounceMs' in obj && obj.debounceMs != null) {\n if (normalizeNonNegativeNumber(obj.debounceMs) == null) {\n issues.push(`${prefix}debounceMs: expected non-negative number`)\n }\n }\n\n if ('maxLagMs' in obj && obj.maxLagMs != null) {\n if (normalizeNonNegativeNumber(obj.maxLagMs) == null) {\n issues.push(`${prefix}maxLagMs: expected non-negative number`)\n }\n }\n\n if ('allowCoalesce' in obj && obj.allowCoalesce != null) {\n if (normalizeBoolean(obj.allowCoalesce) == null) {\n issues.push(`${prefix}allowCoalesce: expected boolean`)\n }\n }\n\n if ('yieldStrategy' in obj && obj.yieldStrategy != null) {\n const raw = obj.yieldStrategy\n if (typeof raw !== 'string' || (raw !== 'baseline' && raw !== 'inputPending')) {\n issues.push(`${prefix}yieldStrategy: expected \"baseline\" | \"inputPending\"`)\n }\n }\n\n return issues\n}\n\nexport const warnInvalidStateTransactionTraitConvergeOverridesDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeMode',\n 'traitConvergeTimeSlicing',\n ]),\n '',\n ),\n )\n issues.push(...validateStateTransactionTraitOverrides(value, ''))\n\n warnDevOnly(label, issues)\n}\n\nexport const warnInvalidStateTransactionRuntimeConfigDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'instrumentation',\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeMode',\n 'traitConvergeTimeSlicing',\n 'traitConvergeOverridesByModuleId',\n 'txnLanes',\n 'txnLanesOverridesByModuleId',\n ]),\n '',\n ),\n )\n\n if ('instrumentation' in value && value.instrumentation != null) {\n if (!Schema.is(InstrumentationSchema)(value.instrumentation)) {\n issues.push(`instrumentation: expected \"full\" | \"light\"`)\n }\n }\n\n issues.push(...validateStateTransactionTraitOverrides(value, ''))\n\n const txnLanes = (value as any).txnLanes\n if (txnLanes != null) {\n if (!isRecord(txnLanes)) {\n issues.push(`txnLanes: expected object`)\n } else {\n const prefix = 'txnLanes.'\n issues.push(\n ...collectUnknownKeys(\n txnLanes,\n new Set(['enabled', 'overrideMode', 'budgetMs', 'debounceMs', 'maxLagMs', 'allowCoalesce', 'yieldStrategy']),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(txnLanes, prefix))\n }\n }\n\n const overridesByModuleId = value.traitConvergeOverridesByModuleId\n if (overridesByModuleId != null) {\n if (!isRecord(overridesByModuleId)) {\n issues.push(`traitConvergeOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(overridesByModuleId)) {\n const prefix = `traitConvergeOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'traitConvergeMode',\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeTimeSlicing',\n ]),\n prefix,\n ),\n )\n issues.push(...validateStateTransactionTraitOverrides(patch, prefix))\n }\n }\n }\n\n const lanesOverridesByModuleId = (value as any).txnLanesOverridesByModuleId\n if (lanesOverridesByModuleId != null) {\n if (!isRecord(lanesOverridesByModuleId)) {\n issues.push(`txnLanesOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(lanesOverridesByModuleId)) {\n const prefix = `txnLanesOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'enabled',\n 'overrideMode',\n 'budgetMs',\n 'debounceMs',\n 'maxLagMs',\n 'allowCoalesce',\n 'yieldStrategy',\n ]),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(patch, prefix))\n }\n }\n }\n\n warnDevOnly(label, issues)\n}\n\nexport const warnInvalidStateTransactionOverridesDevOnly = (value: unknown, label: string): void => {\n if (!isDevEnv()) return\n if (value == null) return\n if (!isRecord(value)) {\n warnDevOnly(label, ['expected object'])\n return\n }\n\n const issues: string[] = []\n issues.push(\n ...collectUnknownKeys(\n value,\n new Set([\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeMode',\n 'traitConvergeTimeSlicing',\n 'traitConvergeOverridesByModuleId',\n 'txnLanes',\n 'txnLanesOverridesByModuleId',\n ]),\n '',\n ),\n )\n\n issues.push(...validateStateTransactionTraitOverrides(value, ''))\n\n const txnLanes = (value as any).txnLanes\n if (txnLanes != null) {\n if (!isRecord(txnLanes)) {\n issues.push(`txnLanes: expected object`)\n } else {\n const prefix = 'txnLanes.'\n issues.push(\n ...collectUnknownKeys(\n txnLanes,\n new Set(['enabled', 'overrideMode', 'budgetMs', 'debounceMs', 'maxLagMs', 'allowCoalesce']),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(txnLanes, prefix))\n }\n }\n\n const overridesByModuleId = value.traitConvergeOverridesByModuleId\n if (overridesByModuleId != null) {\n if (!isRecord(overridesByModuleId)) {\n issues.push(`traitConvergeOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(overridesByModuleId)) {\n const prefix = `traitConvergeOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set([\n 'traitConvergeMode',\n 'traitConvergeBudgetMs',\n 'traitConvergeDecisionBudgetMs',\n 'traitConvergeTimeSlicing',\n ]),\n prefix,\n ),\n )\n issues.push(...validateStateTransactionTraitOverrides(patch, prefix))\n }\n }\n }\n\n const lanesOverridesByModuleId = (value as any).txnLanesOverridesByModuleId\n if (lanesOverridesByModuleId != null) {\n if (!isRecord(lanesOverridesByModuleId)) {\n issues.push(`txnLanesOverridesByModuleId: expected record`)\n } else {\n for (const [moduleId, patch] of Object.entries(lanesOverridesByModuleId)) {\n const prefix = `txnLanesOverridesByModuleId.${moduleId}.`\n if (patch == null) continue\n if (!isRecord(patch)) {\n issues.push(`${prefix}<value>: expected object`)\n continue\n }\n issues.push(\n ...collectUnknownKeys(\n patch,\n new Set(['enabled', 'overrideMode', 'budgetMs', 'debounceMs', 'maxLagMs', 'allowCoalesce']),\n prefix,\n ),\n )\n issues.push(...validateTxnLanesPatch(patch, prefix))\n }\n }\n }\n\n warnDevOnly(label, issues)\n}\n","import { Cause, Effect, FiberRef, Option, Scope } from 'effect'\nimport type { ManagedRuntime } from 'effect'\nimport type { AnyModuleShape, ModuleImpl } from '../module.js'\nimport { make as makeBoundApi } from '../BoundApiRuntime.js'\nimport * as TaskRunner from '../TaskRunner.js'\nimport { closeProgramScope } from './ProgramRunner.closeScope.js'\nimport { BootError, MainError, type ProgramIdentity } from './ProgramRunner.errors.js'\nimport { reportErrorIfEnabled, setExitCodeIfEnabled, setFailureExitCodeIfEnabled } from './ProgramRunner.exitCode.js'\nimport { installGracefulShutdownHandlers } from './ProgramRunner.signals.js'\nimport type { ProgramRunContext } from './ProgramRunner.context.js'\nimport { makeProgramRunnerKernel } from './ProgramRunner.kernel.js'\nimport { resolveProgramRunnerOptions } from './ProgramRunner.options.js'\n\nexport type RuntimeFactory = (\n rootImpl: ModuleImpl<any, AnyModuleShape, any>,\n options?: unknown,\n) => ManagedRuntime.ManagedRuntime<any, never>\n\nexport const openProgram = <Sh extends AnyModuleShape>(\n makeRuntime: RuntimeFactory,\n rootImpl: ModuleImpl<any, Sh, any>,\n options?: unknown,\n): Effect.Effect<ProgramRunContext<Sh>, unknown, Scope.Scope> =>\n Effect.gen(function* () {\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n return yield* Effect.dieMessage(\n '[Logix] Runtime.openProgram/runProgram is not allowed inside a synchronous StateTransaction body',\n )\n }\n\n const runnerOptions = resolveProgramRunnerOptions(options)\n const kernel = yield* makeProgramRunnerKernel(makeRuntime, rootImpl, options)\n\n // Bind ctx.scope disposal to the outer scope (openProgram is scope-bound).\n yield* Effect.addFinalizer(() =>\n kernel.close({\n timeoutMs: runnerOptions.closeScopeTimeout,\n onError: (options as any)?.onError,\n }),\n )\n\n // Node-only: signals trigger graceful shutdown (closing ctx.scope).\n yield* kernel.installSignals(runnerOptions.handleSignals)\n\n // boot: touch the program module tag to ensure instantiation and logics/processes start.\n const moduleRuntime = yield* Effect.tryPromise({\n try: () => kernel.runtime.runPromise(rootImpl.module as any),\n catch: (error) => new BootError(kernel.identity, error),\n })\n\n kernel.setInstanceId((moduleRuntime as any).instanceId)\n return kernel.toContext(moduleRuntime)\n })\n\nexport const runProgram = async <Sh extends AnyModuleShape, Args, A, E, R>(\n makeRuntime: RuntimeFactory,\n rootImpl: ModuleImpl<any, Sh, any>,\n main: (ctx: ProgramRunContext<Sh>, args: Args) => Effect.Effect<A, E, R>,\n options?: unknown,\n): Promise<A> => {\n if (TaskRunner.isInSyncTransaction()) {\n throw new Error('[Logix] Runtime.openProgram/runProgram is not allowed inside a synchronous StateTransaction body')\n }\n\n const runnerOptions = resolveProgramRunnerOptions<Args>(options)\n const identity: ProgramIdentity = {\n moduleId: String(rootImpl.module.id),\n instanceId: 'unknown',\n }\n\n const scope = Effect.runSync(Scope.make())\n const runtime = makeRuntime(rootImpl as unknown as ModuleImpl<any, AnyModuleShape, any>, options)\n\n let ctx:\n | (ProgramRunContext<Sh> & {\n readonly module: { readonly instanceId: string }\n })\n | undefined\n let mainError: unknown | undefined\n let closeError: unknown | undefined\n let result:\n | { readonly _tag: 'success'; readonly value: A }\n | { readonly _tag: 'failure'; readonly error: unknown }\n | undefined\n\n try {\n // Runtime resource disposal: bind runtime.dispose to ctx.scope.\n Effect.runSync(Scope.addFinalizer(scope, Effect.promise(() => runtime.dispose()).pipe(Effect.asVoid)))\n\n // Node-only: signals trigger graceful shutdown (closing ctx.scope).\n if (runnerOptions.handleSignals) {\n Effect.runSync(\n installGracefulShutdownHandlers({\n scope,\n enabled: true,\n }),\n )\n }\n\n // boot: touch the program module tag to ensure instantiation and logics/processes start.\n let moduleRuntime: any\n try {\n moduleRuntime = await runtime.runPromise(rootImpl.module as any)\n } catch (error) {\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n reportErrorIfEnabled(runnerOptions.exitCode && runnerOptions.reportError, error)\n result = {\n _tag: 'failure',\n error: new BootError(identity, error),\n }\n }\n\n if (result?._tag !== 'failure') {\n identity.instanceId = String(moduleRuntime.instanceId ?? 'unknown')\n\n ctx = {\n scope,\n runtime,\n module: moduleRuntime,\n $: makeBoundApi(rootImpl.module.shape as any, moduleRuntime as any) as any,\n } satisfies ProgramRunContext<Sh> as any\n }\n\n if (ctx) {\n try {\n const value = (await ctx.runtime.runPromise(main(ctx, runnerOptions.args as Args) as any)) as A\n setExitCodeIfEnabled(runnerOptions.exitCode, value)\n result = { _tag: 'success', value }\n } catch (error) {\n mainError = error\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n reportErrorIfEnabled(runnerOptions.exitCode && runnerOptions.reportError, error)\n result = { _tag: 'failure', error: new MainError(identity, error) }\n }\n }\n } finally {\n const exit = await Effect.runPromiseExit(\n closeProgramScope({\n scope,\n timeoutMs: runnerOptions.closeScopeTimeout,\n identity,\n onError: (options as any)?.onError,\n }),\n )\n\n if (exit._tag === 'Failure') {\n const failureOpt = Cause.failureOption(exit.cause)\n if (Option.isSome(failureOpt)) {\n const error: any = failureOpt.value\n if (mainError !== undefined && error && typeof error === 'object') {\n error.mainError = mainError\n }\n closeError = error\n } else {\n const defectOpt = Cause.dieOption(exit.cause)\n if (Option.isSome(defectOpt) && defectOpt.value instanceof Error) {\n const error: any = defectOpt.value\n if (mainError !== undefined && error && typeof error === 'object') {\n error.mainError = mainError\n }\n closeError = error\n } else {\n closeError = new Error(String(exit.cause))\n }\n }\n }\n }\n\n if (closeError !== undefined) {\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n reportErrorIfEnabled(runnerOptions.exitCode && runnerOptions.reportError, closeError)\n throw closeError\n }\n\n if (!result) {\n setFailureExitCodeIfEnabled(runnerOptions.exitCode)\n throw new Error('[Logix] ProgramRunner.runProgram: missing result')\n }\n\n if (result._tag === 'failure') {\n throw result.error\n }\n\n return result.value\n}\n","const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nconst getProcess = (): any => (globalThis as any).process\n\nexport const setExitCodeIfEnabled = (enabled: boolean, value: unknown): void => {\n if (!enabled) return\n\n const proc = getProcess()\n if (!isRecord(proc)) return\n\n const next = typeof value === 'number' && Number.isInteger(value) ? value : 0\n\n proc.exitCode = next\n}\n\nexport const setFailureExitCodeIfEnabled = (enabled: boolean): void => {\n if (!enabled) return\n\n const proc = getProcess()\n if (!isRecord(proc)) return\n\n proc.exitCode = 1\n}\n\nexport const reportErrorIfEnabled = (enabled: boolean, error: unknown): void => {\n if (!enabled) return\n\n // eslint-disable-next-line no-console\n console.error(error)\n}\n","export interface ProgramRunnerOptions<Args = unknown> {\n readonly closeScopeTimeout: number\n readonly handleSignals: boolean\n readonly args: Args | undefined\n readonly exitCode: boolean\n readonly reportError: boolean\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nexport const resolveProgramRunnerOptions = <Args = unknown>(options: unknown): ProgramRunnerOptions<Args> => {\n const record = isRecord(options) ? options : undefined\n\n const closeScopeTimeout = typeof record?.closeScopeTimeout === 'number' ? record.closeScopeTimeout : 1000\n\n const handleSignals = typeof record?.handleSignals === 'boolean' ? record.handleSignals : true\n\n const exitCode = typeof record?.exitCode === 'boolean' ? record.exitCode : false\n\n const reportError = typeof record?.reportError === 'boolean' ? record.reportError : true\n\n const args = (record?.args as Args | undefined) ?? undefined\n\n return {\n closeScopeTimeout,\n handleSignals,\n args,\n exitCode,\n reportError,\n }\n}\n"],"mappings":"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","names":["make","openProgram","runProgram","Effect","Option","isRecord","isRecord","make","layer","openProgram","runProgram","Effect","Option"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/runtime/core/FlowRuntime.ts"],"sourcesContent":["import { Effect, Stream, Ref, Option } from 'effect'\nimport type { AnyModuleShape, ModuleRuntime, StateOf, ActionOf, ModuleShape } from './module.js'\nimport type * as Logic from './LogicMiddleware.js'\nimport * as EffectOp from '../../effect-op.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport { RunSessionTag } from '../../observability/runSession.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport * as Debug from './DebugSink.js'\nimport * as ReadQuery from './ReadQuery.js'\n\nconst getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack, never, any> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\nconst getRuntimeScope = (runtime: unknown): { readonly moduleId?: string; readonly instanceId?: string } => {\n if (!runtime) return {}\n if (typeof runtime !== 'object' && typeof runtime !== 'function') return {}\n const scope = runtime as { readonly moduleId?: unknown; readonly instanceId?: unknown }\n return {\n moduleId: typeof scope.moduleId === 'string' ? scope.moduleId : undefined,\n instanceId: typeof scope.instanceId === 'string' ? scope.instanceId : undefined,\n }\n}\n\nexport interface Api<Sh extends ModuleShape<any, any>, R = never> {\n readonly fromAction: <T extends ActionOf<Sh>>(predicate: (a: ActionOf<Sh>) => a is T) => Stream.Stream<T>\n\n readonly fromState: {\n <V>(selector: (s: StateOf<Sh>) => V): Stream.Stream<V>\n <V>(query: ReadQuery.ReadQuery<StateOf<Sh>, V>): Stream.Stream<V>\n }\n\n readonly debounce: <V>(ms: number) => (stream: Stream.Stream<V>) => Stream.Stream<V>\n\n readonly throttle: <V>(ms: number) => (stream: Stream.Stream<V>) => Stream.Stream<V>\n\n readonly filter: <V>(predicate: (value: V) => boolean) => (stream: Stream.Stream<V>) => Stream.Stream<V>\n\n readonly run: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n\n readonly runParallel: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n\n readonly runLatest: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n\n readonly runExhaust: <V, A = void, E = never, R2 = unknown>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: V) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) => (stream: Stream.Stream<V>) => Effect.Effect<void, E, Logic.Env<Sh, R & R2>>\n}\n\nconst resolveEffect = <T, Sh extends AnyModuleShape, R, A, E>(\n eff: Logic.Of<Sh, R, A, E> | ((payload: T) => Logic.Of<Sh, R, A, E>),\n payload: T,\n): Logic.Of<Sh, R, A, E> => (typeof eff === 'function' ? (eff as (p: T) => Logic.Of<Sh, R, A, E>)(payload) : eff)\n\nexport const make = <Sh extends AnyModuleShape, R = never>(\n runtime: ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n runtimeInternals?: RuntimeInternals,\n): Api<Sh, R> => {\n const scope = getRuntimeScope(runtime)\n const resolveConcurrencyLimit = (): Effect.Effect<number | 'unbounded', never, any> =>\n runtimeInternals\n ? runtimeInternals.concurrency.resolveConcurrencyPolicy().pipe(Effect.map((p) => p.concurrencyLimit))\n : Effect.succeed(16)\n\n const runAsFlowOp = <A, E, R2, V>(\n name: string,\n payload: V,\n eff: Effect.Effect<A, E, Logic.Env<Sh, R & R2>>,\n options?: Logic.OperationOptions,\n ): Effect.Effect<A, E, Logic.Env<Sh, R & R2>> =>\n Effect.gen(function* () {\n const stack = yield* getMiddlewareStack()\n const meta: any = {\n ...(options?.meta ?? {}),\n policy: options?.policy,\n tags: options?.tags,\n trace: options?.trace,\n moduleId: scope.moduleId,\n instanceId: scope.instanceId,\n }\n\n if (!(typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq))) {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const key = meta.instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n }\n }\n\n const op = EffectOp.make<A, E, any>({\n kind: 'flow',\n name,\n payload,\n effect: eff as any,\n meta,\n })\n return yield* EffectOp.run(op, stack)\n }) as any\n\n const runEffect =\n <T, A, E, R2>(eff: Logic.Of<Sh, R & R2, A, E> | ((payload: T) => Logic.Of<Sh, R & R2, A, E>)) =>\n (payload: T) =>\n resolveEffect<T, Sh, R & R2, A, E>(eff, payload)\n\n const runStreamSequential =\n <T, A, E, R2>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) =>\n (stream: Stream.Stream<T>): Effect.Effect<void, E, Logic.Env<Sh, R & R2>> =>\n Stream.runForEach(stream, (payload) =>\n runAsFlowOp<A, E, R2, T>('flow.run', payload, runEffect<T, A, E, R2>(eff)(payload), options),\n )\n\n const runStreamParallel =\n <T, A, E, R2>(\n eff: Logic.Of<Sh, R & R2, A, E> | ((payload: T) => Logic.Of<Sh, R & R2, A, E>),\n options?: Logic.OperationOptions,\n ) =>\n (stream: Stream.Stream<T>): Effect.Effect<void, E, Logic.Env<Sh, R & R2>> =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit()\n\n return yield* Stream.runDrain(\n stream.pipe(\n Stream.mapEffect(\n (payload) =>\n runAsFlowOp<A, E, R2, T>('flow.runParallel', payload, runEffect<T, A, E, R2>(eff)(payload), options),\n { concurrency },\n ),\n ),\n ).pipe(\n Effect.catchAllCause((cause) =>\n Debug.record({\n type: 'diagnostic',\n moduleId: scope.moduleId,\n instanceId: scope.instanceId,\n code: 'flow::unhandled_failure',\n severity: 'error',\n message: 'Flow watcher (runParallel) failed with an unhandled error.',\n hint: 'Handle errors explicitly inside the watcher (catch/catchAll) or write back via TaskRunner failure; avoid silent failures.',\n kind: 'flow_unhandled_failure',\n trigger: {\n kind: 'flow',\n name: 'runParallel',\n },\n }).pipe(Effect.zipRight(Effect.failCause(cause))),\n ),\n )\n }) as any\n\n return {\n fromAction: <T extends ActionOf<Sh>>(predicate: (a: ActionOf<Sh>) => a is T) =>\n runtime.actions$.pipe(Stream.filter(predicate)),\n\n fromState: <V>(selectorOrQuery: ((s: StateOf<Sh>) => V) | ReadQuery.ReadQuery<StateOf<Sh>, V>) =>\n runtime.changes(ReadQuery.isReadQuery(selectorOrQuery) ? selectorOrQuery.select : selectorOrQuery),\n\n debounce: (ms: number) => (stream) => Stream.debounce(stream, ms),\n\n throttle: (ms: number) => (stream) =>\n Stream.throttle(stream, {\n cost: () => 1,\n units: 1,\n duration: ms,\n strategy: 'enforce',\n }),\n\n filter: (predicate: (value: any) => boolean) => (stream) => Stream.filter(stream, predicate),\n\n run: (eff, options) => (stream) => runStreamSequential<any, any, any, any>(eff, options)(stream),\n\n runParallel: (eff, options) => (stream) => runStreamParallel<any, any, any, any>(eff, options)(stream),\n\n runLatest: (eff, options) => (stream) =>\n Stream.runDrain(\n Stream.map(stream, (payload) =>\n runAsFlowOp<any, any, any, any>(\n 'flow.runLatest',\n payload,\n runEffect<any, any, any, any>(eff)(payload),\n options,\n ),\n ).pipe(\n Stream.flatMap((effect) => Stream.fromEffect(effect), {\n switch: true,\n }),\n ),\n ),\n\n runExhaust: (eff, options) => (stream) =>\n Effect.gen(function* () {\n const concurrency = yield* resolveConcurrencyLimit()\n const busyRef = yield* Ref.make(false)\n const mapper = (payload: any) =>\n Effect.gen(function* () {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? ([false, busy] as const) : ([true, true] as const),\n )\n if (!acquired) {\n return\n }\n try {\n yield* runAsFlowOp<any, any, any, any>(\n 'flow.runExhaust',\n payload,\n runEffect<any, any, any, any>(eff)(payload),\n options,\n )\n } finally {\n yield* Ref.set(busyRef, false)\n }\n })\n\n return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })))\n }),\n }\n}\n"],"mappings":"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","names":["make"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Module.ts"],"sourcesContent":["import { Context, Effect, FiberRef, Layer, Schema } from 'effect'\nimport * as Debug from './Debug.js'\nimport * as Logic from './Logic.js'\nimport * as ModuleTagNS from './ModuleTag.js'\nimport * as Action from './internal/action.js'\nimport { isDevEnv } from './internal/runtime/core/env.js'\nimport * as LogicUnitMetaInternal from './internal/runtime/core/LogicUnitMeta.js'\nimport type {\n ActionsFromMap,\n ActionOf,\n AnyModuleShape,\n AnySchema,\n BoundApi,\n ModuleLike,\n ModuleHandle,\n ModuleImpl,\n ModuleImplementStateTransactionOptions,\n ModuleLogic,\n ModuleRuntime,\n ModuleTag,\n ModuleShape,\n MutatorsFromMap,\n ReducersFromMap,\n StateChangeWithMeta,\n StateCommitMeta,\n StateCommitMode,\n StateCommitPriority,\n StateOf,\n} from './internal/module.js'\n\n/**\n * Module (definition object) public API.\n *\n * - Domain factories (Form / CRUD / ...) should return this object.\n * - `.tag` is the identity anchor (ModuleTag/Context.Tag), used by `$.use(...)` and Env injection.\n * - `.impl` is the assembly blueprint (ModuleImpl), consumed by React/Runtime entry points.\n * - `.logic()` only produces the logic value; `.withLogic/withLayer(s)` changes the runnable shape (immutable: returns a new object).\n */\n\nexport type {\n AnySchema,\n AnyModuleShape,\n ModuleShape,\n ModuleLogic,\n ModuleImpl,\n ModuleRuntime,\n ModuleHandle,\n ModuleTag,\n StateOf,\n ActionOf,\n ActionsFromMap,\n MutatorsFromMap,\n ReducersFromMap,\n BoundApi,\n StateCommitMode,\n StateCommitPriority,\n StateCommitMeta,\n StateChangeWithMeta,\n} from './internal/module.js'\n\nexport interface DevSource {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface ModuleDev {\n readonly source?: DevSource\n}\n\nexport interface LogicUnitOptions {\n readonly id?: string\n readonly kind?: string\n readonly name?: string\n readonly source?: DevSource\n}\n\nexport interface MountedLogicUnitSummary {\n readonly kind: string\n readonly id: string\n readonly derived?: boolean\n readonly name?: string\n}\n\nexport interface ModuleDescriptor {\n readonly id: string\n readonly moduleId: string\n readonly instanceId: string\n readonly actionKeys: ReadonlyArray<string>\n readonly logicUnits: ReadonlyArray<MountedLogicUnitSummary>\n readonly schemaKeys?: ReadonlyArray<string>\n readonly meta?: Record<string, unknown>\n readonly source?: DevSource\n}\n\nexport type HandleExtendFn<Sh extends AnyModuleShape, Ext extends object> = (\n runtime: ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>,\n base: ModuleHandle<Sh>,\n) => Ext | (ModuleHandle<Sh> & Ext) | null | undefined\n\ntype LogicUnitMeta = LogicUnitMetaInternal.LogicUnitMeta\nconst attachLogicUnitMeta = <L extends object>(logic: L, meta: LogicUnitMeta): L =>\n LogicUnitMetaInternal.attachLogicUnitMeta(logic, meta as any) as any\n\ntype NoInfer_<T> = [T][T extends any ? 0 : never]\n\ntype MountedLogicUnit<Sh extends AnyModuleShape> = {\n readonly id: string\n readonly derived: boolean\n readonly kind: string\n readonly name?: string\n readonly source?: DevSource\n readonly logic: ModuleLogic<Sh, any, any>\n readonly origin?: {\n readonly explicitId?: string\n readonly defaultId?: string\n readonly derivedBase?: string\n }\n}\n\ntype LogicOverrideWarning = {\n readonly id: string\n readonly from: Pick<MountedLogicUnit<any>, 'kind' | 'name' | 'source'> & {\n readonly order: number\n }\n readonly to: Pick<MountedLogicUnit<any>, 'kind' | 'name' | 'source'> & {\n readonly order: number\n }\n}\n\ntype ModuleInternal<Id extends string, Sh extends AnyModuleShape> = {\n readonly initial: StateOf<Sh>\n readonly imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n readonly processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly stateTransaction?: ModuleImplementStateTransactionOptions\n readonly mounted: ReadonlyArray<MountedLogicUnit<Sh>>\n readonly overrides: ReadonlyArray<LogicOverrideWarning>\n readonly layers: ReadonlyArray<Layer.Layer<any, never, any>>\n readonly rebuild: () => ModuleImpl<Id, Sh, any>\n}\n\nconst MODULE_INTERNAL = Symbol.for('logix.module.internal')\nconst MODULE_DECLARED_EFFECTS = Symbol.for('logix.module.effects.declared')\n\ntype ModuleDefBase<\n Id extends string = string,\n Sh extends AnyModuleShape = AnyModuleShape,\n Ext extends object = {},\n> = ModuleLike<Id, Sh, Ext> & {\n readonly shape: Sh\n readonly stateSchema: Sh['stateSchema']\n readonly actionSchema: Sh['actionSchema']\n /**\n * Raw ActionMap (tag -> payload schema).\n * - Mainly for DX/reflection; runtime contract is still based on tag.shape/actionSchema.\n */\n readonly actions: Sh['actionMap']\n /**\n * Raw reducers (if provided by the definition).\n * - Mainly for DX/reflection; runtime normalizes them into primary reducers inside ModuleTag/ModuleFactory.\n */\n readonly reducers?: ReducersFromMap<Sh['stateSchema'], Sh['actionMap']>\n readonly live: <R = never, E = never>(\n initial: StateOf<Sh>,\n ...logics: Array<ModuleLogic<Sh, R, E>>\n ) => Layer.Layer<ModuleRuntime<StateOf<Sh>, ActionOf<Sh>>, E, R>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n readonly logic: <R = never, E = unknown>(\n build: (\n api: BoundApi<Sh, R> & {\n readonly self: Logic.Of<Sh, R, ModuleHandle<Sh> & Ext, never>\n },\n ) => ModuleLogic<Sh, R, E>,\n options?: LogicUnitOptions,\n ) => ModuleLogic<Sh, R, E>\n}\n\nexport type AnyModule = {\n readonly _kind: 'Module'\n readonly id: string\n readonly tag: ModuleTag<string, AnyModuleShape>\n readonly impl: ModuleImpl<any, AnyModuleShape, any>\n readonly actions: Record<string, AnySchema>\n readonly reducers?: Record<string, unknown>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n}\n\nexport type Module<Id extends string, Sh extends AnyModuleShape, Ext extends object = {}, R = never> = ModuleDefBase<\n Id,\n Sh,\n Ext\n> & {\n readonly _kind: 'Module'\n readonly impl: ModuleImpl<Id, Sh, R>\n readonly withLogic: (logic: ModuleLogic<Sh, any, any>, options?: LogicUnitOptions) => Module<Id, Sh, Ext, R>\n readonly withLogics: (...inputs: ReadonlyArray<MountInput<Sh>>) => Module<Id, Sh, Ext, R>\n readonly withLayer: (layer: Layer.Layer<any, never, any>) => Module<Id, Sh, Ext, R>\n readonly withLayers: (...layers: ReadonlyArray<Layer.Layer<any, never, any>>) => Module<Id, Sh, Ext, R>\n}\n\nexport type ModuleDef<Id extends string, Sh extends AnyModuleShape, Ext extends object = {}> = ModuleDefBase<\n Id,\n Sh,\n Ext\n> & {\n readonly _kind: 'ModuleDef'\n readonly implement: <R = never>(config: {\n readonly initial: StateOf<Sh>\n readonly logics?: Array<ModuleLogic<Sh, R, any>>\n readonly imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n readonly processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly stateTransaction?: ModuleImplementStateTransactionOptions\n }) => Module<Id, Sh, Ext, R>\n}\n\nexport const is = (value: unknown): value is ModuleDefBase => {\n if (!value || typeof value !== 'object') return false\n const kind = (value as any)._kind\n if (kind !== 'ModuleDef' && kind !== 'Module') return false\n return Context.isTag((value as any).tag)\n}\n\nexport const hasImpl = (value: unknown): value is AnyModule => {\n if (!is(value)) return false\n return (\n typeof (value as any).impl === 'object' && (value as any).impl !== null && (value as any).impl._tag === 'ModuleImpl'\n )\n}\n\nexport const unwrapTag = <Id extends string, Sh extends AnyModuleShape>(\n module: ModuleLike<Id, Sh, any>,\n): ModuleTag<Id, Sh> => module.tag\n\nexport const unwrapImpl = <Id extends string, Sh extends AnyModuleShape>(\n module: AnyModule & { readonly id: Id; readonly tag: ModuleTag<Id, Sh> },\n): ModuleImpl<Id, Sh, any> => (module as any).impl as ModuleImpl<Id, Sh, any>\n\nexport const descriptor = (\n module: ModuleDefBase<string, AnyModuleShape, any>,\n runtime: ModuleRuntime<any, any>,\n): ModuleDescriptor => {\n const actionKeys = Object.keys((module.tag as any).shape?.actionMap ?? {})\n\n const internal = (module as any)[MODULE_INTERNAL] as ModuleInternal<string, AnyModuleShape> | undefined\n\n const logicUnits: ReadonlyArray<MountedLogicUnitSummary> = internal\n ? internal.mounted.map((u) => ({\n kind: u.kind,\n id: u.id,\n derived: u.derived ? true : undefined,\n name: u.name,\n }))\n : []\n\n const schemaKeys = module.schemas && typeof module.schemas === 'object' ? Object.keys(module.schemas) : undefined\n\n const meta = module.meta && typeof module.meta === 'object' ? module.meta : undefined\n\n const source = module.dev?.source\n\n return {\n id: module.id,\n moduleId: String(runtime.moduleId),\n instanceId: String(runtime.instanceId),\n actionKeys,\n logicUnits,\n schemaKeys,\n meta,\n source,\n }\n}\n\ntype MountInput<Sh extends AnyModuleShape> =\n | ModuleLogic<Sh, any, any>\n | readonly [ModuleLogic<Sh, any, any>, LogicUnitOptions]\n\nconst normalizeMountInput = <Sh extends AnyModuleShape>(\n input: MountInput<Sh>,\n): { readonly logic: ModuleLogic<Sh, any, any>; readonly options?: LogicUnitOptions } => {\n if (Array.isArray(input)) {\n return { logic: input[0], options: input[1] }\n }\n return { logic: input as ModuleLogic<Sh, any, any> }\n}\n\nconst resolveLogicUnit = <Sh extends AnyModuleShape>(\n existing: ReadonlyArray<MountedLogicUnit<Sh>>,\n logic: ModuleLogic<Sh, any, any>,\n options?: LogicUnitOptions,\n): MountedLogicUnit<Sh> => {\n const meta = LogicUnitMetaInternal.getLogicUnitMeta(logic)\n const explicitId = options?.id\n const defaultId = meta?.id\n\n const kind = (options?.kind ?? meta?.kind ?? 'user').trim() || 'user'\n const name =\n options?.name ?? meta?.name ?? (typeof defaultId === 'string' && defaultId.length > 0 ? defaultId : undefined)\n\n const source = options?.source ?? meta?.source\n\n if (typeof explicitId === 'string' && explicitId.trim().length > 0) {\n return {\n id: explicitId.trim(),\n derived: false,\n kind,\n name,\n source,\n logic,\n origin: { explicitId: explicitId.trim(), defaultId },\n }\n }\n\n if (typeof defaultId === 'string' && defaultId.trim().length > 0) {\n return {\n id: defaultId.trim(),\n derived: false,\n kind,\n name,\n source,\n logic,\n origin: { defaultId: defaultId.trim() },\n }\n }\n\n // Derived id: reproducible within the same composition order.\n const used = new Set(existing.map((u) => u.id))\n const baseRaw = (name ?? kind ?? 'logic').trim() || 'logic'\n const base = baseRaw.replace(/\\s+/g, '_')\n\n let n = 1\n while (used.has(`${base}#${n}`)) n += 1\n const derivedId = `${base}#${n}`\n\n return {\n id: derivedId,\n derived: true,\n kind,\n name: name ?? baseRaw,\n source,\n logic,\n origin: { derivedBase: baseRaw },\n }\n}\n\nconst mountLogicUnit = <Sh extends AnyModuleShape>(\n current: ReadonlyArray<MountedLogicUnit<Sh>>,\n overrides: ReadonlyArray<LogicOverrideWarning>,\n input: { readonly logic: ModuleLogic<Sh, any, any>; readonly options?: LogicUnitOptions },\n): {\n readonly mounted: ReadonlyArray<MountedLogicUnit<Sh>>\n readonly overrides: ReadonlyArray<LogicOverrideWarning>\n} => {\n const nextUnit = resolveLogicUnit(current, input.logic, input.options)\n // Write the resolved verdict back to logic meta for provenance/diagnostics (aligned with 022-module).\n LogicUnitMetaInternal.updateLogicUnitMeta(nextUnit.logic as any, {\n resolvedId: nextUnit.id,\n resolvedIdKind: nextUnit.derived ? 'derived' : 'explicit',\n resolvedKind: nextUnit.kind,\n resolvedName: nextUnit.name,\n resolvedSource: nextUnit.source as any,\n })\n\n const prevIndex = current.findIndex((u) => u.id === nextUnit.id)\n if (prevIndex < 0) {\n return { mounted: [...current, nextUnit], overrides }\n }\n\n const prev = current[prevIndex]\n const nextMounted = [...current.slice(0, prevIndex), ...current.slice(prevIndex + 1), nextUnit]\n\n const nextOverrides: ReadonlyArray<LogicOverrideWarning> = [\n ...overrides,\n {\n id: nextUnit.id,\n from: {\n kind: prev.kind,\n name: prev.name,\n source: prev.source,\n order: prevIndex,\n },\n to: {\n kind: nextUnit.kind,\n name: nextUnit.name,\n source: nextUnit.source,\n order: nextMounted.length - 1,\n },\n },\n ]\n\n return { mounted: nextMounted, overrides: nextOverrides }\n}\n\nconst formatSource = (source?: DevSource): string => {\n if (!source) return 'unknown'\n return `${source.file}:${source.line}:${source.column}`\n}\n\nconst makeOverrideDiagnosticsLogic = (\n tag: ModuleTag<any, AnyModuleShape>,\n overrides: ReadonlyArray<LogicOverrideWarning>,\n): ModuleLogic<any, any, never> => {\n if (overrides.length === 0) {\n return Effect.void as any\n }\n\n return tag.logic(() =>\n Effect.gen(function* () {\n if (!isDevEnv()) return\n\n const diagnosticsLevel = yield* FiberRef.get(Debug.internal.currentDiagnosticsLevel as any)\n if (diagnosticsLevel === 'off') return\n\n const runtime = (yield* tag) as ModuleRuntime<any, any>\n\n yield* Effect.forEach(\n overrides,\n (o) =>\n Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'module_logic::override',\n severity: 'warning',\n message: `logicUnitId \"${o.id}\" overridden (last-write-wins).`,\n hint:\n `from(#${o.from.order}) kind=${o.from.kind} name=${o.from.name ?? 'unknown'} source=${formatSource(o.from.source)}\\n` +\n `to(#${o.to.order}) kind=${o.to.kind} name=${o.to.name ?? 'unknown'} source=${formatSource(o.to.source)}`,\n kind: 'logic_unit_override',\n }),\n { discard: true },\n )\n }),\n )\n}\n\nconst makeDeclaredEffectsLogic = (\n tag: ModuleTag<any, AnyModuleShape>,\n effects: Record<string, ReadonlyArray<unknown> | undefined> | undefined,\n moduleId: string,\n): ModuleLogic<any, any, never> => {\n if (!effects || typeof effects !== 'object' || Object.keys(effects).length === 0) {\n return Effect.void as any\n }\n\n const logic = tag.logic(($) => ({\n setup: Effect.gen(function* () {\n const actions = ($ as any).actions as Record<string, Action.AnyActionToken>\n const effectApi = ($ as any).effect as\n | ((token: unknown, handler: (payload: unknown) => Effect.Effect<void, any, any>) => Effect.Effect<void, never, any>)\n | undefined\n if (typeof effectApi !== 'function') return\n\n const wrappedHandlers = new WeakMap<(...args: any[]) => any, (payload: unknown) => Effect.Effect<void, any, any>>()\n\n for (const actionTag of Object.keys(effects).sort()) {\n const token = actions[actionTag]\n if (!Action.isActionToken(token)) continue\n\n const handlers = effects[actionTag]\n if (!Array.isArray(handlers)) continue\n\n for (const handler of handlers) {\n if (typeof handler !== 'function') continue\n let wrapped = wrappedHandlers.get(handler)\n if (!wrapped) {\n wrapped = (payload: unknown) => (handler as any)($, payload)\n wrappedHandlers.set(handler, wrapped)\n }\n yield* effectApi(token, wrapped)\n }\n }\n }),\n run: Effect.void,\n })) as ModuleLogic<any, any, never>\n\n LogicUnitMetaInternal.attachLogicUnitMeta(logic as any, {\n id: '__logix_internal:effects:declared',\n kind: 'internal',\n name: 'effects:declared',\n moduleId,\n })\n\n return logic\n}\n\nconst makeLogicFactory = <Id extends string, Sh extends AnyModuleShape, Ext extends object>(\n selfModule: ModuleDefBase<Id, Sh, Ext>,\n): ModuleDefBase<Id, Sh, Ext>['logic'] => {\n const tag = selfModule.tag\n return (build, options) => {\n const eff = tag.logic((api) => {\n const withSelf = Object.create(api) as BoundApi<Sh, any> & {\n readonly self: Logic.Of<Sh, any, ModuleHandle<Sh> & Ext, never>\n }\n ;(withSelf as any).self = Effect.suspend(() => (api as any).use(selfModule as any))\n return build(withSelf as any)\n }) as ModuleLogic<Sh, any, any>\n\n const meta: LogicUnitMeta = {\n id: options?.id,\n kind: options?.kind,\n name: options?.name,\n source: options?.source,\n moduleId: selfModule.id,\n }\n\n return attachLogicUnitMeta(eff as any, meta) as any\n }\n}\n\ntype MakeDef<Id extends string, SSchema extends AnySchema, AMap extends Action.ActionDefs> = {\n readonly state: SSchema\n readonly actions: AMap\n readonly reducers?: ReducersFromMap<SSchema, NoInfer_<AMap>>\n readonly immerReducers?: MutatorsFromMap<SSchema, NoInfer_<AMap>>\n readonly effects?: EffectsFromMap<NoInfer_<AMap>>\n readonly traits?: unknown\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n}\n\ntype AnyActionMap = Action.ActionDefs\ntype EmptyActionMap = Record<never, never>\n\ntype PayloadOfActionDef<V> = V extends Schema.Schema<any, any, any>\n ? Schema.Schema.Type<V>\n : V extends Action.ActionToken<any, infer P, any>\n ? P\n : never\n\ntype DeclaredEffectHandler<Payload> = ($: unknown, payload: Payload) => Effect.Effect<void, any, any>\n\ntype EffectsFromMap<M extends AnyActionMap> = {\n readonly [K in keyof M]?: ReadonlyArray<DeclaredEffectHandler<PayloadOfActionDef<M[K]>>>\n}\n\ntype MergeActionMap<Base extends AnyActionMap, Ext extends AnyActionMap> = {\n readonly [K in keyof Base | keyof Ext]: K extends keyof Ext ? Ext[K] : K extends keyof Base ? Base[K] : never\n}\n\n/**\n * Module.make \"app-side extension/override\" parameters (a two-stage responsibility split: domain library author → app developer).\n *\n * - `actions`: add-only (cannot override existing action schema); used to extend actionMap.\n * - `reducers`: add and override; used to override domain reducers or provide reducers for new actions.\n * - Other reflective fields (schemas/meta/services/dev) are shallow-merged (last-write-wins).\n */\nexport type MakeExtendDef<\n SSchema extends AnySchema,\n BaseActions extends AnyActionMap,\n ExtActions extends AnyActionMap = EmptyActionMap,\n> = {\n readonly actions?: ExtActions\n readonly reducers?: ReducersFromMap<SSchema, MergeActionMap<BaseActions, ExtActions>>\n readonly immerReducers?: MutatorsFromMap<SSchema, MergeActionMap<BaseActions, ExtActions>>\n readonly effects?: EffectsFromMap<MergeActionMap<BaseActions, ExtActions>>\n readonly schemas?: Record<string, unknown>\n readonly meta?: Record<string, unknown>\n readonly services?: Record<string, Context.Tag<any, any>>\n readonly dev?: ModuleDev\n}\n\nconst mergeMakeDef = <\n Id extends string,\n SSchema extends AnySchema,\n BaseActions extends AnyActionMap,\n ExtActions extends AnyActionMap,\n>(\n base: MakeDef<Id, SSchema, BaseActions>,\n extend?: MakeExtendDef<SSchema, BaseActions, ExtActions>,\n): MakeDef<Id, SSchema, MergeActionMap<BaseActions, ExtActions>> => {\n const baseActions = base.actions as Record<string, AnySchema>\n const extActions = (extend?.actions ?? {}) as Record<string, AnySchema>\n\n for (const key of Object.keys(extActions)) {\n if (key in baseActions && baseActions[key] !== extActions[key]) {\n throw new Error(\n `[Logix.Module.make] action key \"${key}\" already exists; overriding action schemas is not supported (define a new action tag instead).`,\n )\n }\n }\n\n const mergedActionDefs = { ...(base.actions as any), ...(extend?.actions as any) } as MergeActionMap<\n BaseActions,\n ExtActions\n >\n const actions = Action.normalizeActions(mergedActionDefs)\n\n const mergeEffects = (): Record<string, ReadonlyArray<unknown>> | undefined => {\n const baseEffects = (base.effects ?? {}) as Record<string, unknown>\n const extEffects = (extend?.effects ?? {}) as Record<string, unknown>\n\n const keys = Array.from(new Set([...Object.keys(baseEffects), ...Object.keys(extEffects)])).sort()\n if (keys.length === 0) return undefined\n\n const out: Record<string, ReadonlyArray<unknown>> = {}\n for (const key of keys) {\n if (!(key in actions)) {\n throw new Error(`[Logix.Module.make] effect key \"${key}\" does not exist in actionMap.`)\n }\n\n const baseValue = baseEffects[key]\n const extValue = extEffects[key]\n const baseArr = Array.isArray(baseValue) ? baseValue : baseValue === undefined ? [] : null\n const extArr = Array.isArray(extValue) ? extValue : extValue === undefined ? [] : null\n\n if (baseArr === null) {\n throw new Error(`[Logix.Module.make] effects[\"${key}\"] must be an array of handlers.`)\n }\n if (extArr === null) {\n throw new Error(`[Logix.Module.make] effects[\"${key}\"] must be an array of handlers.`)\n }\n\n const merged = [...baseArr, ...extArr].filter((h) => h !== undefined)\n for (const h of merged) {\n if (typeof h !== 'function') {\n throw new Error(`[Logix.Module.make] effects[\"${key}\"] handlers must be functions.`)\n }\n }\n\n if (merged.length > 0) {\n out[key] = merged as ReadonlyArray<unknown>\n }\n }\n\n return Object.keys(out).length > 0 ? out : undefined\n }\n\n const effects = mergeEffects()\n\n const wrapImmerReducers = (mutators?: Record<string, ((draft: unknown, payload: unknown) => void) | undefined>) => {\n if (!mutators) return {}\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(mutators)) {\n const mutator = mutators[key]\n if (typeof mutator !== 'function') continue\n out[key] = ModuleTagNS.Reducer.mutate(mutator as any)\n }\n return out\n }\n\n const reducers = {\n ...wrapImmerReducers(base.immerReducers as any),\n ...(base.reducers ?? {}),\n ...wrapImmerReducers(extend?.immerReducers as any),\n ...(extend?.reducers ?? {}),\n } as Record<string, unknown>\n\n for (const key of Object.keys(reducers)) {\n if (!(key in actions)) {\n throw new Error(`[Logix.Module.make] reducer key \"${key}\" does not exist in actionMap.`)\n }\n }\n\n const schemas =\n base.schemas || extend?.schemas ? { ...(base.schemas ?? {}), ...(extend?.schemas ?? {}) } : undefined\n\n const meta = base.meta || extend?.meta ? { ...(base.meta ?? {}), ...(extend?.meta ?? {}) } : undefined\n\n const services =\n base.services || extend?.services ? { ...(base.services ?? {}), ...(extend?.services ?? {}) } : undefined\n\n const dev = base.dev || extend?.dev ? { ...(base.dev ?? {}), ...(extend?.dev ?? {}) } : undefined\n\n return {\n ...base,\n actions: actions as any,\n reducers: Object.keys(reducers).length > 0 ? (reducers as any) : undefined,\n effects: effects as any,\n schemas,\n meta,\n services,\n dev,\n } as any\n}\n\nexport const Reducer = ModuleTagNS.Reducer\n\nexport type Shape<S extends AnySchema, M extends Action.ActionDefs> = ModuleShape<\n S,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<M>>>,\n Action.NormalizedActionTokens<M>\n>\n\nexport function make<\n Id extends string,\n SSchema extends AnySchema,\n AMap extends Action.ActionDefs,\n Ext extends object = {},\n>(\n id: Id,\n def: MakeDef<Id, SSchema, AMap>,\n): ModuleDef<\n Id,\n ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<AMap>>>,\n Action.NormalizedActionTokens<AMap>\n >,\n Ext\n>\n\nexport function make<\n Id extends string,\n SSchema extends AnySchema,\n AMap extends Action.ActionDefs,\n Ext extends object = {},\n ExtActions extends Action.ActionDefs = EmptyActionMap,\n>(\n id: Id,\n def: MakeDef<Id, SSchema, AMap>,\n extend: MakeExtendDef<SSchema, NoInfer_<AMap>, ExtActions>,\n): ModuleDef<\n Id,\n ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<MergeActionMap<AMap, ExtActions>>>>,\n Action.NormalizedActionTokens<MergeActionMap<AMap, ExtActions>>\n >,\n Ext\n>\n\nexport function make(id: any, def: any, extend?: any): any {\n const merged = mergeMakeDef(def as any, extend as any)\n\n const tag = ModuleTagNS.make(id, {\n state: merged.state,\n actions: merged.actions,\n reducers: merged.reducers,\n traits: merged.traits,\n }) as unknown as ModuleTag<any, AnyModuleShape>\n\n if (merged.effects && typeof merged.effects === 'object' && Object.keys(merged.effects).length > 0) {\n Object.defineProperty(tag as any, MODULE_DECLARED_EFFECTS, {\n value: merged.effects,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n }\n\n const base: any = {\n _kind: 'ModuleDef' as const,\n id,\n tag,\n shape: tag.shape,\n stateSchema: tag.stateSchema,\n actionSchema: tag.actionSchema,\n actions: merged.actions,\n reducers: merged.reducers,\n effects: merged.effects,\n live: tag.live,\n schemas: merged.schemas,\n meta: merged.meta,\n services: merged.services,\n dev: merged.dev,\n }\n\n base.logic = makeLogicFactory(base as any)\n\n base.implement = (config: any) => {\n type Sh = AnyModuleShape\n\n const initial = config.initial as any\n const imports = config.imports as any\n const processes = config.processes as any\n const stateTransaction = config.stateTransaction as any\n\n const mountedResult = (config.logics ?? []).reduce(\n (\n acc: {\n mounted: ReadonlyArray<MountedLogicUnit<any>>\n overrides: ReadonlyArray<LogicOverrideWarning>\n },\n logic: any,\n ) => mountLogicUnit(acc.mounted, acc.overrides, { logic }),\n { mounted: [] as const, overrides: [] as const },\n )\n\n type State = {\n readonly mounted: ReadonlyArray<MountedLogicUnit<any>>\n readonly overrides: ReadonlyArray<LogicOverrideWarning>\n readonly layers: ReadonlyArray<Layer.Layer<any, never, any>>\n }\n\n const buildImpl = (state: State): ModuleImpl<any, AnyModuleShape, any> => {\n const diagnosticsLogic = makeOverrideDiagnosticsLogic(tag as any, state.overrides)\n const declaredEffectsLogic = makeDeclaredEffectsLogic(tag as any, merged.effects, id)\n const allLogics = [...state.mounted.map((u) => u.logic), declaredEffectsLogic, diagnosticsLogic]\n\n let impl = (tag as any).implement({\n initial,\n logics: allLogics,\n imports,\n processes,\n stateTransaction,\n }) as ModuleImpl<any, AnyModuleShape, any>\n\n for (const layer of state.layers) {\n impl = impl.withLayer(layer)\n }\n\n return impl\n }\n\n const createModule = (state: State): any => {\n const internal: ModuleInternal<any, AnyModuleShape> = {\n initial,\n imports,\n processes,\n stateTransaction,\n mounted: state.mounted,\n overrides: state.overrides,\n layers: state.layers,\n rebuild: () => buildImpl(state),\n }\n\n const mod: any = {\n ...base,\n _kind: 'Module' as const,\n impl: buildImpl(state),\n }\n\n Object.defineProperty(mod, MODULE_INTERNAL, {\n value: internal,\n enumerable: false,\n configurable: true,\n })\n\n mod.logic = makeLogicFactory(mod)\n\n mod.withLogic = (logic: any, options?: LogicUnitOptions) => mod.withLogics([logic, options] as any)\n\n mod.withLogics = (...inputs: ReadonlyArray<MountInput<any>>) => {\n const current = (mod as any)[MODULE_INTERNAL] as ModuleInternal<any, AnyModuleShape>\n const normalized = inputs.map(normalizeMountInput)\n const next = normalized.reduce((acc, item) => mountLogicUnit(acc.mounted, acc.overrides, item as any), {\n mounted: current.mounted,\n overrides: current.overrides,\n })\n\n return createModule({\n mounted: next.mounted,\n overrides: next.overrides,\n layers: current.layers,\n })\n }\n\n mod.withLayer = (layer: Layer.Layer<any, never, any>) => {\n const current = (mod as any)[MODULE_INTERNAL] as ModuleInternal<any, AnyModuleShape>\n return createModule({\n mounted: current.mounted,\n overrides: current.overrides,\n layers: [...current.layers, layer],\n })\n }\n\n mod.withLayers = (...layers: ReadonlyArray<Layer.Layer<any, never, any>>) =>\n layers.reduce((acc, layer) => acc.withLayer(layer), mod as any)\n\n return mod as any\n }\n\n return createModule({\n mounted: mountedResult.mounted,\n overrides: mountedResult.overrides,\n layers: [],\n })\n }\n\n return base\n}\n\nexport const Manage = {\n make: <D extends (...args: any[]) => AnyModule>(config: {\n readonly kind?: string\n readonly define: D\n }): { readonly kind?: string; readonly make: D } => ({\n kind: config.kind,\n make: config.define,\n }),\n} as const\n"],"mappings":"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","names":["Reducer","make","attachLogicUnitMeta","internal","Reducer","make"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/runtime/core/process/meta.ts","../src/internal/observability/evidenceCollector.ts","../src/internal/runtime/core/process/ProcessRuntime.ts","../src/internal/runtime/core/process/identity.ts","../src/internal/runtime/core/process/concurrency.ts","../src/internal/runtime/core/process/events.ts","../src/internal/runtime/core/process/selectorSchema.ts","../src/internal/runtime/core/process/supervision.ts"],"sourcesContent":["import type { Effect } from 'effect'\nimport type { ProcessDefinition, ProcessScope } from './protocol.js'\n\nexport type ProcessMeta = {\n readonly definition: ProcessDefinition\n /**\n * installationScope: part of Static IR.\n * - For instance-scope / subtree-scope scenarios, the runtime overwrites this field during installation with a derived effect.\n * - This field is for export/diagnostics only; it does not participate in stable identity derivation (see identity.ts).\n */\n readonly installationScope?: ProcessScope\n readonly kind?: 'process' | 'link'\n}\n\nexport const PROCESS_META = Symbol.for('@logixjs/core/processMeta')\n\nexport type ProcessEffect<E = never, R = never> = Effect.Effect<void, E, R> & {\n readonly [PROCESS_META]?: ProcessMeta\n}\n\nconst defineHidden = (target: object, key: symbol, value: unknown): void => {\n Object.defineProperty(target, key, {\n value,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n}\n\nexport const getMeta = (effect: Effect.Effect<void, any, any>): ProcessMeta | undefined =>\n (effect as ProcessEffect)[PROCESS_META]\n\nexport const getDefinition = (effect: Effect.Effect<void, any, any>): ProcessDefinition | undefined =>\n getMeta(effect)?.definition\n\nexport const attachMeta = <E, R>(effect: Effect.Effect<void, E, R>, meta: ProcessMeta): ProcessEffect<E, R> => {\n defineHidden(effect as any, PROCESS_META, meta)\n return effect as ProcessEffect<E, R>\n}\n","import { Context, Effect, FiberRef, Layer } from 'effect'\nimport type { JsonValue } from './jsonValue.js'\nimport { projectJsonValue } from './jsonValue.js'\nimport type { EvidencePackage } from './evidence.js'\nimport type { RunSession } from './runSession.js'\nimport { makeEvidenceSink } from './runSession.js'\nimport {\n currentDiagnosticsLevel,\n toRuntimeDebugEventRef,\n type Event as DebugEvent,\n type Sink as DebugSink,\n} from '../runtime/core/DebugSink.js'\n\nexport interface EvidenceCollector {\n readonly session: RunSession\n readonly debugSink: DebugSink\n readonly registerConvergeStaticIr: (staticIr: unknown) => void\n readonly setKernelImplementationRef: (ref: unknown) => void\n readonly setRuntimeServicesEvidence: (evidence: unknown) => void\n readonly exportEvidencePackage: (options?: { readonly maxEvents?: number }) => EvidencePackage\n readonly clear: () => void\n}\n\nclass EvidenceCollectorTagImpl extends Context.Tag('@logixjs/core/EvidenceCollector')<\n EvidenceCollectorTagImpl,\n EvidenceCollector\n>() {}\n\nexport const EvidenceCollectorTag = EvidenceCollectorTagImpl\n\nexport const evidenceCollectorLayer = (\n collector: EvidenceCollector,\n): Layer.Layer<EvidenceCollectorTagImpl, never, never> =>\n Layer.succeed(EvidenceCollectorTag, collector) as Layer.Layer<EvidenceCollectorTagImpl, never, never>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nexport const makeEvidenceCollector = (session: RunSession): EvidenceCollector => {\n const sink = makeEvidenceSink(session)\n\n const convergeStaticIrByDigest = new Map<string, JsonValue>()\n let kernelImplementationRef: JsonValue | undefined\n let runtimeServicesEvidence: JsonValue | undefined\n\n const exportBudget = {\n dropped: 0,\n oversized: 0,\n nonSerializable: 0,\n }\n\n const debugSink: DebugSink = {\n record: (event: DebugEvent) =>\n Effect.gen(function* () {\n const level = yield* FiberRef.get(currentDiagnosticsLevel)\n const instanceIdRaw = (event as any).instanceId\n const instanceId = typeof instanceIdRaw === 'string' && instanceIdRaw.length > 0 ? instanceIdRaw : 'unknown'\n const eventSeq = level === 'off' ? undefined : session.local.nextSeq('eventSeq', instanceId)\n const ref = toRuntimeDebugEventRef(event, {\n diagnosticsLevel: level,\n eventSeq,\n onMetaProjection: ({ stats }) => {\n exportBudget.dropped += stats.dropped\n exportBudget.oversized += stats.oversized\n },\n })\n if (!ref) return\n\n const projected = projectJsonValue(ref)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n\n sink.record('debug:event', projected.value, {\n timestamp: ref.timestamp,\n })\n }),\n }\n\n const registerConvergeStaticIr = (staticIr: unknown): void => {\n if (!isRecord(staticIr)) return\n const digest = staticIr.staticIrDigest\n if (typeof digest !== 'string' || digest.length === 0) return\n const projected = projectJsonValue(staticIr)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n convergeStaticIrByDigest.set(digest, projected.value)\n }\n\n const setKernelImplementationRef = (ref: unknown): void => {\n const projected = projectJsonValue(ref)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n kernelImplementationRef = projected.value\n }\n\n const setRuntimeServicesEvidence = (evidence: unknown): void => {\n const projected = projectJsonValue(evidence)\n exportBudget.dropped += projected.stats.dropped\n exportBudget.oversized += projected.stats.oversized\n exportBudget.nonSerializable += projected.stats.nonSerializable\n runtimeServicesEvidence = projected.value\n }\n\n const exportEvidencePackage = (options?: { readonly maxEvents?: number }): EvidencePackage => {\n const convergeSummary =\n convergeStaticIrByDigest.size > 0\n ? ({\n staticIrByDigest: Object.fromEntries(convergeStaticIrByDigest),\n } as unknown as JsonValue)\n : undefined\n\n const runtimeSummary =\n kernelImplementationRef != null || runtimeServicesEvidence != null\n ? ({\n ...(kernelImplementationRef != null ? { kernelImplementationRef } : {}),\n ...(runtimeServicesEvidence != null ? { services: runtimeServicesEvidence } : {}),\n } as unknown as JsonValue)\n : undefined\n\n const summary =\n convergeSummary != null || runtimeSummary != null\n ? ({\n ...(convergeSummary != null ? { converge: convergeSummary } : {}),\n ...(runtimeSummary != null ? { runtime: runtimeSummary } : {}),\n } as unknown as JsonValue)\n : undefined\n\n return sink.export({\n maxEvents: options?.maxEvents,\n summary,\n })\n }\n\n const clear = (): void => {\n sink.clear()\n convergeStaticIrByDigest.clear()\n kernelImplementationRef = undefined\n runtimeServicesEvidence = undefined\n exportBudget.dropped = 0\n exportBudget.oversized = 0\n exportBudget.nonSerializable = 0\n }\n\n return {\n session,\n debugSink,\n registerConvergeStaticIr,\n setKernelImplementationRef,\n setRuntimeServicesEvidence,\n exportEvidencePackage,\n clear,\n }\n}\n","import {\n Cause,\n Context,\n Deferred,\n Duration,\n Effect,\n Fiber,\n FiberRef,\n Layer,\n Option,\n PubSub,\n Queue,\n Ref,\n Scope,\n Stream,\n} from 'effect'\nimport * as Debug from '../DebugSink.js'\nimport { toSerializableErrorSummary } from '../errorSummary.js'\nimport * as TaskRunner from '../TaskRunner.js'\nimport { isDevEnv } from '../env.js'\nimport { getRuntimeInternals } from '../runtimeInternalsAccessor.js'\nimport * as Identity from './identity.js'\nimport * as ProcessConcurrency from './concurrency.js'\nimport * as ProcessEvents from './events.js'\nimport * as Meta from './meta.js'\nimport { makeSchemaSelector, resolveSchemaAst } from './selectorSchema.js'\nimport type {\n ProcessControlRequest,\n ProcessDefinition,\n ProcessEvent,\n ProcessInstallation,\n ProcessInstanceIdentity,\n ProcessInstanceStatus,\n ProcessPlatformEvent,\n ProcessScope,\n ProcessTrigger,\n ProcessTriggerSpec,\n SerializableErrorSummary,\n} from './protocol.js'\nimport * as Supervision from './supervision.js'\n\ntype InstallationKey = string\ntype ProcessInstanceId = string\n\ntype ProcessInstallMode = 'switch' | 'exhaust'\n\ntype InstallationState = {\n readonly identity: {\n readonly processId: string\n readonly scope: ProcessScope\n }\n readonly scopeKey: string\n readonly definition: ProcessDefinition\n env: Context.Context<any>\n forkScope: Scope.Scope\n readonly process: Effect.Effect<void, any, unknown>\n readonly kind: Meta.ProcessMeta['kind']\n enabled: boolean\n installedAt?: string\n nextRunSeq: number\n supervision: Supervision.SupervisionState\n currentInstanceId?: ProcessInstanceId\n pendingStart?: { readonly forkScope: Scope.Scope }\n}\n\ntype InstanceState = {\n readonly installationKey: InstallationKey\n readonly processInstanceId: ProcessInstanceId\n readonly identity: ProcessInstanceIdentity\n readonly processId: string\n readonly scope: ProcessScope\n readonly forkScope: Scope.Scope\n readonly platformTriggersQueue: Queue.Queue<ProcessTrigger>\n status: ProcessInstanceStatus\n nextEventSeq: number\n nextTriggerSeq: number\n fiber?: Fiber.RuntimeFiber<unknown, unknown>\n}\n\nexport interface ProcessRuntime {\n readonly install: <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: ProcessInstallMode\n },\n ) => Effect.Effect<ProcessInstallation | undefined, never, R>\n readonly listInstallations: (filter?: {\n readonly scopeType?: ProcessScope['type']\n readonly scopeKey?: string\n }) => Effect.Effect<ReadonlyArray<ProcessInstallation>>\n readonly getInstanceStatus: (processInstanceId: string) => Effect.Effect<ProcessInstanceStatus | undefined>\n readonly controlInstance: (processInstanceId: string, request: ProcessControlRequest) => Effect.Effect<void>\n readonly deliverPlatformEvent: (event: ProcessPlatformEvent) => Effect.Effect<void>\n readonly events: Stream.Stream<ProcessEvent>\n readonly getEventsSnapshot: () => Effect.Effect<ReadonlyArray<ProcessEvent>>\n}\n\nexport class ProcessRuntimeTag extends Context.Tag('@logixjs/core/ProcessRuntime')<ProcessRuntimeTag, ProcessRuntime>() {}\n\nconst currentProcessTrigger = FiberRef.unsafeMake<ProcessTrigger | undefined>(undefined)\nconst currentProcessEventBudget = FiberRef.unsafeMake<Ref.Ref<ProcessEvents.ProcessRunEventBudgetState> | undefined>(\n undefined,\n)\nconst RUNTIME_BOOT_EVENT = 'runtime:boot' as const\n\nconst deriveDebugModuleId = (processId: string): string => `process:${processId}`\n\ntype NonPlatformTriggerSpec = Exclude<ProcessTriggerSpec, { readonly kind: 'platformEvent' }>\n\nconst deriveTxnAnchor = (event: ProcessEvent): { readonly txnSeq?: number; readonly txnId?: string } => {\n const trigger: any = event.trigger\n if (!trigger) return {}\n if (\n (trigger.kind === 'moduleAction' || trigger.kind === 'moduleStateChange') &&\n typeof trigger.instanceId === 'string' &&\n typeof trigger.txnSeq === 'number' &&\n Number.isFinite(trigger.txnSeq) &&\n trigger.txnSeq >= 1\n ) {\n const txnSeq = Math.floor(trigger.txnSeq)\n return {\n txnSeq,\n txnId: `${trigger.instanceId}::t${txnSeq}`,\n }\n }\n return {}\n}\n\nconst shouldNoopDueToSyncTxn = (scope: ProcessScope, kind: string): Effect.Effect<boolean> => {\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return TaskRunner.shouldNoopInSyncTransactionFiber({\n moduleId,\n instanceId,\n code: 'process::invalid_usage',\n severity: 'error',\n message:\n 'ProcessRuntime scheduling is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint:\n \"Trigger/schedule Process outside the transaction window (e.g. in a watcher's run section or a separate fiber); \" +\n 'do not trigger Process directly inside a reducer / synchronous transaction body.',\n kind,\n })\n}\n\nconst resolveRuntimeStateSchemaAst = (runtime: unknown): ReturnType<typeof resolveSchemaAst> => {\n try {\n const internals = getRuntimeInternals(runtime as any)\n return resolveSchemaAst(internals.stateSchema)\n } catch {\n return undefined\n }\n}\n\nconst withModuleHint = (error: Error, moduleId: string): Error => {\n const hint = (error as any).hint\n if (typeof hint === 'string' && hint.length > 0) {\n if (!hint.includes('moduleId=')) {\n ;(error as any).hint = `moduleId=${moduleId}\\n${hint}`\n }\n return error\n }\n ;(error as any).hint = `moduleId=${moduleId}`\n return error\n}\n\nconst actionIdFromUnknown = (action: unknown): string | undefined => {\n if (!action || typeof action !== 'object') return undefined\n const anyAction = action as any\n if (typeof anyAction._tag === 'string' && anyAction._tag.length > 0) return anyAction._tag\n if (typeof anyAction.type === 'string' && anyAction.type.length > 0) return anyAction.type\n return undefined\n}\n\nexport const make = (options?: {\n readonly maxEventHistory?: number\n}): Effect.Effect<ProcessRuntime, never, Scope.Scope> =>\n Effect.gen(function* () {\n const runtimeScope = yield* Effect.scope\n const maxEventHistory =\n typeof options?.maxEventHistory === 'number' &&\n Number.isFinite(options.maxEventHistory) &&\n options.maxEventHistory >= 0\n ? Math.floor(options.maxEventHistory)\n : 500\n\n const installations = new Map<InstallationKey, InstallationState>()\n const instances = new Map<ProcessInstanceId, InstanceState>()\n\n const eventsBuffer: ProcessEvent[] = []\n const eventsHub = yield* PubSub.sliding<ProcessEvent>(Math.max(1, Math.min(2048, maxEventHistory)))\n\n const trimEvents = () => {\n if (maxEventHistory <= 0) {\n eventsBuffer.length = 0\n return\n }\n if (eventsBuffer.length <= maxEventHistory) return\n const excess = eventsBuffer.length - maxEventHistory\n eventsBuffer.splice(0, excess)\n }\n\n const recordDebugEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n\n // diagnostics=off: avoid entering Debug sinks (near-zero cost); error cases are exposed via diagnostic events.\n if (diagnosticsLevel === 'off') {\n return\n }\n\n const processId = event.identity.identity.processId\n const processInstanceId = Identity.processInstanceIdFromIdentity(event.identity)\n const moduleId = deriveDebugModuleId(processId)\n const { txnSeq, txnId } = deriveTxnAnchor(event)\n\n yield* Debug.record({\n type: event.type,\n moduleId,\n instanceId: processInstanceId,\n identity: event.identity,\n severity: event.severity,\n eventSeq: event.eventSeq,\n timestampMs: event.timestampMs,\n trigger: event.trigger,\n dispatch: event.dispatch,\n error: event.error,\n txnSeq,\n txnId,\n } as any)\n })\n\n const publishEvent = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n eventsBuffer.push(event)\n trimEvents()\n yield* PubSub.publish(eventsHub, event)\n yield* recordDebugEvent(event)\n })\n\n const emit = (event: ProcessEvent): Effect.Effect<void> =>\n Effect.gen(function* () {\n const budgetRef = yield* FiberRef.get(currentProcessEventBudget)\n if (budgetRef) {\n const decision = yield* Ref.modify(budgetRef, (state) => {\n const [nextDecision, nextState] = ProcessEvents.applyProcessRunEventBudget(state, event)\n return [nextDecision, nextState] as const\n })\n\n if (decision._tag === 'emit' || decision._tag === 'emitSummary') {\n yield* publishEvent(decision.event)\n }\n return\n }\n\n const enforced = ProcessEvents.enforceProcessEventMaxBytes(event)\n yield* publishEvent(enforced.event)\n })\n\n const emitErrorDiagnostic = (\n scope: ProcessScope,\n processId: string,\n code: string,\n message: string,\n hint?: string,\n ): Effect.Effect<void> => {\n if (!isDevEnv()) {\n return Effect.void\n }\n const moduleId = scope.type === 'moduleInstance' ? scope.moduleId : undefined\n const instanceId = scope.type === 'moduleInstance' ? scope.instanceId : undefined\n return Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code,\n severity: 'error',\n message,\n hint,\n actionTag: processId,\n kind: 'process_runtime',\n })\n }\n\n const resolveMissingDependencies = (installation: InstallationState): ReadonlyArray<string> => {\n const declared = installation.definition.requires ?? []\n const implicitFromTriggers: string[] = []\n for (const trigger of installation.definition.triggers) {\n if (trigger.kind === 'moduleAction' || trigger.kind === 'moduleStateChange') {\n implicitFromTriggers.push(trigger.moduleId)\n }\n }\n\n const requires = Array.from(new Set([...declared, ...implicitFromTriggers]))\n if (requires.length === 0) return []\n\n const missing: string[] = []\n for (const dep of requires) {\n if (typeof dep !== 'string' || dep.length === 0) continue\n\n // ModuleTag key convention: `@logixjs/Module/${id}`; Tag identity is derived from the key, so we can construct it on demand.\n const tag = Context.Tag(`@logixjs/Module/${dep}`)() as Context.Tag<any, any>\n const found = Context.getOption(installation.env, tag)\n if (Option.isNone(found)) {\n missing.push(dep)\n }\n }\n return missing\n }\n\n const stopInstance = (\n instance: InstanceState,\n reason: ProcessInstanceStatus['stoppedReason'],\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (\n instance.status.status === 'stopped' ||\n instance.status.status === 'failed' ||\n instance.status.status === 'stopping'\n ) {\n return\n }\n\n const fiber = instance.fiber\n instance.status = {\n ...instance.status,\n status: 'stopping',\n stoppedReason: reason,\n }\n\n if (fiber) {\n yield* Fiber.interrupt(fiber)\n }\n\n yield* Queue.shutdown(instance.platformTriggersQueue)\n\n instance.status = {\n ...instance.status,\n status: 'stopped',\n stoppedReason: reason,\n }\n instance.fiber = undefined\n\n const evt: ProcessEvent = {\n type: 'process:stop',\n identity: instance.identity,\n severity: 'info',\n eventSeq: instance.nextEventSeq++,\n timestampMs: Date.now(),\n }\n yield* emit(evt)\n\n const installation = installations.get(instance.installationKey)\n if (installation?.pendingStart) {\n installation.pendingStart = undefined\n yield* startInstallation(instance.installationKey)\n }\n })\n\n const startInstallation: (installationKey: InstallationKey) => Effect.Effect<void> = (installationKey) =>\n Effect.gen(function* () {\n const installation = installations.get(installationKey)\n if (!installation) return\n installation.pendingStart = undefined\n\n const noop = yield* shouldNoopDueToSyncTxn(installation.identity.scope, 'process_start_in_transaction')\n if (noop) return\n\n // Do not start again if an active instance already exists.\n const currentId = installation.currentInstanceId\n if (currentId) {\n const current = instances.get(currentId)\n if (current && (current.status.status === 'running' || current.status.status === 'starting')) {\n return\n }\n }\n\n const runSeq = installation.nextRunSeq++\n const identity: ProcessInstanceIdentity = {\n identity: installation.identity,\n runSeq,\n }\n const processInstanceId = Identity.processInstanceIdFromIdentity(identity)\n\n const platformTriggersQueue = yield* Queue.sliding<ProcessTrigger>(64)\n\n const instanceState: InstanceState = {\n installationKey,\n processInstanceId,\n identity,\n processId: installation.identity.processId,\n scope: installation.identity.scope,\n forkScope: installation.forkScope,\n platformTriggersQueue,\n status: {\n identity,\n status: 'starting',\n },\n nextEventSeq: 1,\n nextTriggerSeq: 1,\n }\n\n instances.set(processInstanceId, instanceState)\n installation.currentInstanceId = processInstanceId\n\n // When forkScope is disposed (e.g. uiSubtree unmount), ensure the instance transitions to stopped and emits a stop event.\n // - Do not rely on unstable \"whether interruption reaches catchAllCause\" behavior.\n // - Do not double-register on runtimeScope; the runtime finalizer already stops all instances.\n if (installation.forkScope !== runtimeScope) {\n yield* Scope.addFinalizer(\n installation.forkScope as Scope.CloseableScope,\n Effect.suspend(() => {\n const status = instanceState.status.status\n if (status === 'stopped' || status === 'failed' || status === 'stopping') {\n return Effect.void\n }\n return stopInstance(instanceState, 'scopeDisposed')\n }).pipe(Effect.catchAllCause(() => Effect.void)),\n )\n }\n\n // start event: indicates the instance has entered the start flow (fiber has been forked).\n yield* emit({\n type: 'process:start',\n identity,\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n })\n\n const missing = resolveMissingDependencies(installation)\n if (missing.length > 0) {\n const hint = isDevEnv()\n ? [\n 'Strict scope dependency resolution: missing required modules in the current scope.',\n `missing: ${missing.join(', ')}`,\n '',\n 'fix:',\n '- Provide the missing module implementation(s) in the same scope via imports.',\n ` Example: RootModule.implement({ imports: [${missing[0]}.implement(...).impl], processes: [...] })`,\n '- Do not rely on cross-scope fallbacks / guessing instances.',\n ].join('\\n')\n : undefined\n\n const error: SerializableErrorSummary = {\n message: `Missing dependencies in scope: ${missing.join(', ')}`,\n code: 'process::missing_dependency',\n hint,\n }\n\n instanceState.status = {\n ...instanceState.status,\n status: 'failed',\n stoppedReason: 'failed',\n lastError: error,\n }\n\n yield* emit({\n type: 'process:error',\n identity,\n severity: 'error',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n\n yield* emitErrorDiagnostic(\n installation.identity.scope,\n installation.identity.processId,\n 'process::missing_dependency',\n error.message,\n hint,\n )\n return\n }\n\n const shouldRecordChainEvents = installation.definition.diagnosticsLevel !== 'off'\n\n const baseEnv = installation.env\n\n const makeWrappedEnv = (): Context.Context<any> => {\n if (!shouldRecordChainEvents) {\n return baseEnv\n }\n\n const requires = installation.definition.requires ?? []\n if (requires.length === 0) {\n return baseEnv\n }\n\n const ids = Array.from(new Set(requires))\n let nextEnv = baseEnv\n\n for (const moduleId of ids) {\n if (typeof moduleId !== 'string' || moduleId.length === 0) continue\n const tag = Context.Tag(`@logixjs/Module/${moduleId}`)() as Context.Tag<any, any>\n const found = Context.getOption(baseEnv, tag)\n if (Option.isNone(found)) continue\n const runtime = found.value as any\n\n const recordDispatch = (action: unknown) =>\n Effect.gen(function* () {\n const trigger = yield* FiberRef.get(currentProcessTrigger)\n if (!trigger) return\n\n const actionId = actionIdFromUnknown(action) ?? 'unknown'\n const dispatchModuleId = typeof runtime.moduleId === 'string' ? runtime.moduleId : moduleId\n const dispatchInstanceId = typeof runtime.instanceId === 'string' ? runtime.instanceId : 'unknown'\n\n const evt: ProcessEvent = {\n type: 'process:dispatch',\n identity,\n trigger,\n dispatch: {\n moduleId: dispatchModuleId,\n instanceId: dispatchInstanceId,\n actionId,\n },\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }\n\n yield* emit(evt)\n })\n\n const wrapped = {\n ...runtime,\n dispatch: (action: unknown) => runtime.dispatch(action).pipe(Effect.tap(() => recordDispatch(action))),\n dispatchLowPriority: (action: unknown) =>\n runtime.dispatchLowPriority(action).pipe(Effect.tap(() => recordDispatch(action))),\n dispatchBatch: (actions: ReadonlyArray<unknown>) =>\n runtime\n .dispatchBatch(actions)\n .pipe(Effect.tap(() => Effect.forEach(actions, recordDispatch, { discard: true }))),\n }\n\n nextEnv = Context.add(tag, wrapped)(nextEnv)\n }\n\n return nextEnv\n }\n\n const wrappedEnv = makeWrappedEnv()\n const providedProcess = Effect.provide(installation.process, wrappedEnv)\n\n const makeTriggerStream = (spec: NonPlatformTriggerSpec): Effect.Effect<Stream.Stream<ProcessTrigger>, Error> =>\n Effect.gen(function* () {\n if (spec.kind === 'timer') {\n const interval = Duration.decodeUnknown(spec.timerId)\n if (Option.isNone(interval)) {\n const err = new Error(`[ProcessRuntime] invalid timerId (expected DurationInput): ${spec.timerId}`)\n ;(err as any).code = 'process::invalid_timer_id'\n ;(err as any).hint =\n \"timerId must be a valid DurationInput string, e.g. '10 millis', '1 seconds', '5 minutes'.\"\n return yield* Effect.fail(err)\n }\n\n return Stream.tick(interval.value).pipe(\n Stream.map(\n () =>\n ({\n kind: 'timer',\n name: spec.name,\n timerId: spec.timerId,\n }) satisfies ProcessTrigger,\n ),\n )\n }\n\n if (spec.kind === 'moduleAction') {\n const tag = Context.Tag(`@logixjs/Module/${spec.moduleId}`)() as Context.Tag<any, any>\n const found = Context.getOption(baseEnv, tag)\n if (Option.isNone(found)) {\n return yield* Effect.fail(new Error(`Missing module runtime in scope: ${spec.moduleId}`))\n }\n\n const runtime = found.value as any\n\n // perf: when diagnostics=off, avoid subscribing to actionsWithMeta$ (published inside txns; more subscribers hurt hot paths).\n // diagnostics=light/full needs txnSeq/txnId anchors, so only use actionsWithMeta$ when chain events are enabled.\n if (!shouldRecordChainEvents) {\n const stream = runtime.actions$ as Stream.Stream<any> | undefined\n if (!stream) {\n const err = new Error('ModuleRuntime does not provide actions$ (required for moduleAction trigger).')\n ;(err as any).code = 'process::missing_action_stream'\n ;(err as any).hint = `moduleId=${spec.moduleId}`\n return yield* Effect.fail(err)\n }\n\n return stream.pipe(\n Stream.filter((action: any) => actionIdFromUnknown(action) === spec.actionId),\n Stream.map(\n () =>\n ({\n kind: 'moduleAction',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n actionId: spec.actionId,\n txnSeq: 1,\n }) satisfies ProcessTrigger,\n ),\n )\n }\n\n const stream = runtime.actionsWithMeta$ as Stream.Stream<any> | undefined\n if (!stream) {\n const err = new Error(\n 'ModuleRuntime does not provide actionsWithMeta$ (required for moduleAction trigger).',\n )\n ;(err as any).code = 'process::missing_action_meta_stream'\n ;(err as any).hint = `moduleId=${spec.moduleId}`\n return yield* Effect.fail(err)\n }\n\n return stream.pipe(\n Stream.filter((evt: any) => actionIdFromUnknown(evt.value) === spec.actionId),\n Stream.map((evt: any) => {\n const txnSeq = evt?.meta?.txnSeq\n return {\n kind: 'moduleAction',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n actionId: spec.actionId,\n txnSeq: typeof txnSeq === 'number' ? txnSeq : 1,\n } satisfies ProcessTrigger\n }),\n )\n }\n\n // moduleStateChange\n const tag = Context.Tag(`@logixjs/Module/${spec.moduleId}`)() as Context.Tag<any, any>\n const found = Context.getOption(baseEnv, tag)\n if (Option.isNone(found)) {\n return yield* Effect.fail(new Error(`Missing module runtime in scope: ${spec.moduleId}`))\n }\n\n const runtime = found.value as any\n const schemaAst = resolveRuntimeStateSchemaAst(runtime)\n const selectorResult = makeSchemaSelector(spec.path, schemaAst)\n if (!selectorResult.ok) {\n return yield* Effect.fail(withModuleHint(selectorResult.error, spec.moduleId))\n }\n const selectorBase = selectorResult.selector\n const prevRef = yield* Ref.make<Option.Option<unknown>>(Option.none())\n\n const enableSelectorDiagnostics = shouldRecordChainEvents\n\n const selectorDiagnosticsRef = enableSelectorDiagnostics\n ? yield* Ref.make({\n windowStartedMs: Date.now(),\n triggersInWindow: 0,\n lastWarningAtMs: 0,\n })\n : undefined\n\n const sampleEveryMask = 0x7f // sample every 128 calls\n const slowSampleThresholdMs = 4\n const triggerWindowMs = 1000\n const triggerWarningThreshold = isDevEnv() ? 20 : 200\n const warningCooldownMs = 30_000\n\n let selectorCalls = 0\n let selectorSamples = 0\n let selectorSlowSamples = 0\n let selectorMaxSampleMs = 0\n\n const nowMs = (): number => {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now()\n }\n return Date.now()\n }\n\n const selector = enableSelectorDiagnostics\n ? (state: unknown): unknown => {\n selectorCalls += 1\n if ((selectorCalls & sampleEveryMask) !== 0) {\n return selectorBase(state)\n }\n\n const t0 = nowMs()\n const value = selectorBase(state)\n const dt = nowMs() - t0\n\n selectorSamples += 1\n if (dt >= slowSampleThresholdMs) {\n selectorSlowSamples += 1\n }\n if (dt > selectorMaxSampleMs) {\n selectorMaxSampleMs = dt\n }\n\n return value\n }\n : selectorBase\n\n const maybeWarnSelector = (trigger: ProcessTrigger): Effect.Effect<void> => {\n if (!selectorDiagnosticsRef) {\n return Effect.void\n }\n\n return Effect.gen(function* () {\n const now = Date.now()\n\n const decision = yield* Ref.modify(selectorDiagnosticsRef, (s) => {\n const windowExpired = now - s.windowStartedMs >= triggerWindowMs\n const windowStartedMs = windowExpired ? now : s.windowStartedMs\n const triggersInWindow = windowExpired ? 1 : s.triggersInWindow + 1\n\n const shouldCooldown = now - s.lastWarningAtMs < warningCooldownMs\n const tooFrequent = triggersInWindow >= triggerWarningThreshold\n const tooSlow = selectorMaxSampleMs >= slowSampleThresholdMs && selectorSamples > 0\n const shouldWarn = !shouldCooldown && (tooFrequent || tooSlow)\n\n const next = shouldWarn\n ? {\n windowStartedMs: now,\n triggersInWindow: 0,\n lastWarningAtMs: now,\n }\n : {\n ...s,\n windowStartedMs,\n triggersInWindow,\n }\n\n return [\n {\n shouldWarn,\n tooFrequent,\n tooSlow,\n triggersInWindow,\n },\n next,\n ] as const\n })\n\n if (!decision.shouldWarn) {\n return\n }\n\n const code = decision.tooFrequent ? 'process::selector_high_frequency' : 'process::selector_slow'\n\n const hint = [\n `moduleId=${spec.moduleId}`,\n `path=${spec.path}`,\n `windowMs=${triggerWindowMs}`,\n `triggersInWindow=${decision.triggersInWindow}`,\n `threshold=${triggerWarningThreshold}`,\n `cooldownMs=${warningCooldownMs}`,\n '',\n 'selector sampling:',\n `calls=${selectorCalls}`,\n `sampled=${selectorSamples}`,\n `slowSamples(>=${slowSampleThresholdMs}ms)=${selectorSlowSamples}`,\n `maxSampleMs=${selectorMaxSampleMs.toFixed(2)}`,\n '',\n 'notes:',\n '- Ensure the selected value is stable (prefer primitive/tuple; avoid returning fresh objects).',\n '- Narrow the path to reduce change frequency; avoid selecting large objects.',\n ].join('\\n')\n\n selectorSamples = 0\n selectorSlowSamples = 0\n selectorMaxSampleMs = 0\n\n yield* emit({\n type: 'process:trigger',\n identity,\n trigger,\n severity: 'warning',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error: {\n message: 'moduleStateChange selector diagnostics warning',\n code,\n hint,\n },\n } satisfies ProcessEvent)\n })\n }\n\n const baseStream = (runtime.changesWithMeta(selector) as Stream.Stream<any>).pipe(\n Stream.mapEffect((evt: any) =>\n Ref.get(prevRef).pipe(\n Effect.flatMap((prev) => {\n if (Option.isSome(prev) && Object.is(prev.value, evt.value)) {\n return Effect.succeed(Option.none())\n }\n return Ref.set(prevRef, Option.some(evt.value)).pipe(Effect.as(Option.some(evt)))\n }),\n ),\n ),\n Stream.filterMap((opt) => opt),\n Stream.map((evt: any) => {\n const txnSeq = evt?.meta?.txnSeq\n return {\n kind: 'moduleStateChange',\n name: spec.name,\n moduleId: spec.moduleId,\n instanceId: runtime.instanceId as string,\n path: spec.path,\n txnSeq: typeof txnSeq === 'number' ? txnSeq : 1,\n } satisfies ProcessTrigger\n }),\n )\n\n return enableSelectorDiagnostics ? baseStream.pipe(Stream.tap(maybeWarnSelector)) : baseStream\n })\n\n const makeRun = (trigger: ProcessTrigger, fatal: Deferred.Deferred<Cause.Cause<any>>): Effect.Effect<void> =>\n Effect.locally(\n currentProcessTrigger,\n trigger,\n )(\n providedProcess.pipe(\n Effect.catchAllCause((cause) => {\n if (Cause.isInterruptedOnly(cause)) {\n return Effect.void\n }\n return Deferred.succeed(fatal, cause).pipe(\n Effect.asVoid,\n Effect.catchAll(() => Effect.void),\n )\n }),\n ),\n )\n\n const makeChainRun = (\n trigger: ProcessTrigger,\n fatal: Deferred.Deferred<Cause.Cause<any>>,\n ): Effect.Effect<void> => {\n if (!shouldRecordChainEvents) {\n return makeRun(trigger, fatal)\n }\n\n return Effect.gen(function* () {\n const budgetRef = yield* Ref.make(ProcessEvents.makeProcessRunEventBudgetState())\n return yield* Effect.locally(\n currentProcessEventBudget,\n budgetRef,\n )(emitTriggerEvent(trigger, 'info').pipe(Effect.zipRight(makeRun(trigger, fatal))))\n })\n }\n\n const assignTriggerSeq = (trigger: ProcessTrigger): ProcessTrigger => {\n if (!shouldRecordChainEvents) {\n return trigger\n }\n\n return {\n ...trigger,\n triggerSeq: instanceState.nextTriggerSeq++,\n }\n }\n\n const emitTriggerEvent = (trigger: ProcessTrigger, severity: ProcessEvent['severity']): Effect.Effect<void> => {\n if (!shouldRecordChainEvents) {\n return Effect.void\n }\n\n const evt: ProcessEvent = {\n type: 'process:trigger',\n identity,\n trigger,\n severity,\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }\n return emit(evt)\n }\n\n const policy = installation.definition.concurrency\n const autoStart = installation.definition.triggers.some(\n (t) => t.kind === 'platformEvent' && t.platformEvent === RUNTIME_BOOT_EVENT,\n )\n const bootTriggerSpec = installation.definition.triggers.find(\n (t): t is Extract<ProcessTriggerSpec, { readonly kind: 'platformEvent' }> =>\n t.kind === 'platformEvent' && t.platformEvent === RUNTIME_BOOT_EVENT,\n )\n\n const instanceProgram = Effect.gen(function* () {\n const fatal = yield* Deferred.make<Cause.Cause<any>>()\n\n const platformEventStream: Stream.Stream<ProcessTrigger> = Stream.fromQueue(\n instanceState.platformTriggersQueue,\n )\n\n const nonPlatformTriggers = installation.definition.triggers.filter(\n (t): t is NonPlatformTriggerSpec => t.kind !== 'platformEvent',\n )\n\n const streams = yield* Effect.forEach(nonPlatformTriggers, makeTriggerStream)\n\n const triggerStream = Stream.mergeAll([platformEventStream, ...streams], {\n concurrency: 'unbounded',\n })\n\n const reportQueueOverflow = (\n info: ProcessConcurrency.ProcessTriggerQueueOverflowInfo,\n ): Effect.Effect<void> => {\n const err = new Error('Process trigger queue overflow (serial maxQueue guard).')\n ;(err as any).code = 'process::serial_queue_overflow'\n ;(err as any).hint = [\n `mode=${info.mode}`,\n `queue: current=${info.currentLength} peak=${info.peak}`,\n `maxQueue: configured=${info.limit.configured} guard=${info.limit.guard}`,\n `policy: ${JSON.stringify(info.policy)}`,\n '',\n 'fix:',\n '- Configure concurrency.maxQueue (serial) to a finite value, or switch to mode=latest/drop to avoid unbounded backlog.',\n ].join('\\n')\n return Deferred.succeed(fatal, Cause.fail(err)).pipe(\n Effect.asVoid,\n Effect.catchAll(() => Effect.void),\n )\n }\n\n const runnerFiber = yield* Effect.forkScoped(\n ProcessConcurrency.runProcessTriggerStream({\n stream: triggerStream,\n policy,\n assignTriggerSeq,\n run: (trigger) => makeChainRun(trigger, fatal),\n onDrop: (trigger) => emitTriggerEvent(trigger, 'warning'),\n onQueueOverflow: reportQueueOverflow,\n }),\n )\n\n if (autoStart) {\n yield* Queue.offer(instanceState.platformTriggersQueue, {\n kind: 'platformEvent',\n name: bootTriggerSpec?.name,\n platformEvent: RUNTIME_BOOT_EVENT,\n })\n }\n\n const cause = yield* Deferred.await(fatal)\n yield* Fiber.interrupt(runnerFiber)\n return yield* Effect.failCause(cause)\n })\n\n const fiber = yield* Effect.forkIn(installation.forkScope)(\n Effect.scoped(instanceProgram).pipe(\n Effect.catchAllCause((cause) =>\n Effect.gen(function* () {\n // Interruptions (typically from scope dispose / manual stop) should not be treated as process failures.\n // Otherwise we emit process:error/diagnostic during scope shutdown and may deadlock disposal.\n if (Cause.isInterruptedOnly(cause)) {\n // If stopInstance already advanced the status to stopping, stopInstance owns the stop event and final state.\n if (instanceState.status.status === 'stopping') {\n return\n }\n\n // Otherwise treat as a natural stop due to scope disposal (e.g. moduleInstance scope closing).\n instanceState.status = {\n ...instanceState.status,\n status: 'stopped',\n stoppedReason: 'scopeDisposed',\n }\n instanceState.fiber = undefined\n\n yield* Effect.uninterruptible(\n emit({\n type: 'process:stop',\n identity,\n severity: 'info',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n }),\n )\n\n const installation = installations.get(installationKey)\n if (installation?.pendingStart) {\n installation.pendingStart = undefined\n yield* startInstallation(installationKey)\n }\n return\n }\n\n const primary = Option.getOrElse(Cause.failureOption(cause), () =>\n Option.getOrElse(Cause.dieOption(cause), () => cause),\n )\n const summary = toSerializableErrorSummary(primary)\n const error: SerializableErrorSummary = summary.errorSummary as any\n\n instanceState.status = {\n ...instanceState.status,\n status: 'failed',\n stoppedReason: 'failed',\n lastError: error,\n }\n\n yield* emit({\n type: 'process:error',\n identity,\n severity: 'error',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n\n const decision = Supervision.onFailure(\n installation.definition.errorPolicy,\n installation.supervision,\n Date.now(),\n )\n installation.supervision = decision.nextState\n\n if (decision.decision === 'restart') {\n // supervise: controlled restart (runSeq increments) and emit a restart event.\n yield* emit({\n type: 'process:restart',\n identity,\n severity: 'warning',\n eventSeq: instanceState.nextEventSeq++,\n timestampMs: Date.now(),\n error,\n })\n yield* startInstallation(installationKey)\n } else {\n yield* emitErrorDiagnostic(\n installation.identity.scope,\n installation.identity.processId,\n 'process::failed_stop',\n 'Process failed and stopped (failStop / restart limit reached).',\n `processId=${installation.identity.processId} scopeKey=${installation.scopeKey} failures=${decision.withinWindowFailures} maxRestarts=${decision.maxRestarts}`,\n )\n }\n }),\n ),\n ),\n )\n\n instanceState.fiber = fiber as Fiber.RuntimeFiber<unknown, unknown>\n instanceState.status = {\n ...instanceState.status,\n status: 'running',\n }\n\n // Best-effort: ensure the instance fiber starts subscribing to trigger streams before install/start returns,\n // avoiding lost moduleAction/moduleStateChange triggers right after env is built and dispatch happens.\n yield* Effect.yieldNow()\n })\n\n const install = <E, R>(\n process: Effect.Effect<void, E, R>,\n options: {\n readonly scope: ProcessScope\n readonly enabled?: boolean\n readonly installedAt?: string\n readonly mode?: ProcessInstallMode\n },\n ): Effect.Effect<ProcessInstallation | undefined, never, R> =>\n Effect.gen(function* () {\n const meta = Meta.getMeta(process)\n if (!meta) {\n return undefined\n }\n\n const env = yield* Effect.context<R>()\n const forkScopeOpt = yield* Effect.serviceOption(Scope.Scope)\n const forkScope = Option.isSome(forkScopeOpt) ? forkScopeOpt.value : runtimeScope\n\n const scopeKey = Identity.scopeKeyFromScope(options.scope)\n const identity = {\n processId: meta.definition.processId,\n scope: options.scope,\n } as const\n\n const installationKey = Identity.installationKeyFromIdentity(identity)\n const existing = installations.get(installationKey)\n if (existing) {\n existing.env = env as Context.Context<any>\n existing.forkScope = forkScope\n existing.enabled = options.enabled ?? true\n existing.installedAt = options.installedAt ?? existing.installedAt\n if (!existing.enabled) {\n existing.pendingStart = undefined\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n const currentId = existing.currentInstanceId\n const current = currentId ? instances.get(currentId) : undefined\n const status = current?.status.status\n\n if (status === 'running' || status === 'starting') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch' && current && current.forkScope !== forkScope) {\n existing.pendingStart = { forkScope }\n yield* Scope.addFinalizer(\n forkScope,\n Effect.sync(() => {\n const installation = installations.get(installationKey)\n if (!installation) return\n if (installation.pendingStart?.forkScope === forkScope) {\n installation.pendingStart = undefined\n }\n }),\n )\n } else {\n existing.pendingStart = undefined\n }\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n if (status === 'stopping') {\n const mode: ProcessInstallMode = options.mode ?? 'switch'\n if (mode === 'switch') {\n existing.pendingStart = { forkScope }\n yield* Scope.addFinalizer(\n forkScope,\n Effect.sync(() => {\n const installation = installations.get(installationKey)\n if (!installation) return\n if (installation.pendingStart?.forkScope === forkScope) {\n installation.pendingStart = undefined\n }\n }),\n )\n } else {\n existing.pendingStart = undefined\n }\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n existing.pendingStart = undefined\n yield* startInstallation(installationKey)\n return {\n identity,\n enabled: existing.enabled,\n installedAt: existing.installedAt,\n } satisfies ProcessInstallation\n }\n\n // Derive an effect for this installation to avoid overwriting meta on the original Effect (reused across scopes).\n // Note: do not provide env eagerly; we may need to layer additional context per-trigger execution (e.g. dispatch chain diagnostics).\n const derived = Effect.suspend(() => process)\n Meta.attachMeta(derived, {\n ...meta,\n installationScope: options.scope,\n })\n\n const installation: InstallationState = {\n identity,\n scopeKey,\n definition: meta.definition,\n env: env as Context.Context<any>,\n forkScope,\n process: derived as unknown as Effect.Effect<void, any, unknown>,\n kind: meta.kind ?? 'process',\n enabled: options.enabled ?? true,\n installedAt: options.installedAt,\n nextRunSeq: 1,\n supervision: Supervision.initialState(),\n pendingStart: undefined,\n }\n\n installations.set(installationKey, installation)\n\n if (installation.enabled) {\n yield* startInstallation(installationKey)\n }\n\n return {\n identity,\n enabled: installation.enabled,\n installedAt: installation.installedAt,\n } satisfies ProcessInstallation\n })\n\n const listInstallations: ProcessRuntime['listInstallations'] = (filter) =>\n Effect.sync(() => {\n const scopeType = filter?.scopeType\n const scopeKey = filter?.scopeKey\n const out: ProcessInstallation[] = []\n for (const installation of installations.values()) {\n if (scopeType && installation.identity.scope.type !== scopeType) continue\n if (scopeKey && installation.scopeKey !== scopeKey) continue\n out.push({\n identity: installation.identity,\n enabled: installation.enabled,\n installedAt: installation.installedAt,\n })\n }\n return out\n })\n\n const getInstanceStatus: ProcessRuntime['getInstanceStatus'] = (processInstanceId) =>\n Effect.sync(() => instances.get(processInstanceId)?.status)\n\n const controlInstance: ProcessRuntime['controlInstance'] = (processInstanceId, request) =>\n Effect.suspend(() => {\n const instance = instances.get(processInstanceId)\n if (!instance) {\n return Effect.void\n }\n\n return shouldNoopDueToSyncTxn(instance.scope, 'process_control_in_transaction').pipe(\n Effect.flatMap((noop) => {\n if (noop) {\n return Effect.void\n }\n\n if (request.action === 'stop') {\n return stopInstance(instance, 'manualStop')\n }\n\n if (request.action === 'restart') {\n return stopInstance(instance, 'manualStop').pipe(\n Effect.flatMap(() => {\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n installation.currentInstanceId = undefined\n return startInstallation(instance.installationKey)\n }),\n )\n }\n\n // start: only applies to stopped instances; reuses current runSeq without incrementing.\n if (request.action === 'start') {\n if (instance.status.status === 'running' || instance.status.status === 'starting') {\n return Effect.void\n }\n\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n installation.currentInstanceId = undefined\n return startInstallation(instance.installationKey)\n }\n\n return Effect.void\n }),\n )\n })\n\n const deliverPlatformEvent: ProcessRuntime['deliverPlatformEvent'] = (event) =>\n Effect.gen(function* () {\n const noop = yield* TaskRunner.shouldNoopInSyncTransactionFiber({\n code: 'process::invalid_usage',\n severity: 'error',\n message:\n 'ProcessRuntime platform events are not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).',\n hint: 'Deliver platformEvent outside the transaction window.',\n kind: 'process_platform_event_in_transaction',\n })\n if (noop) return\n\n const targets = Array.from(instances.values())\n const eventName = event.eventName\n\n yield* Effect.forEach(\n targets,\n (instance) =>\n Effect.suspend(() => {\n if (instance.status.status !== 'starting' && instance.status.status !== 'running') {\n return Effect.void\n }\n\n const installation = installations.get(instance.installationKey)\n if (!installation) {\n return Effect.void\n }\n\n const specs = installation.definition.triggers.filter(\n (t): t is Extract<ProcessTriggerSpec, { readonly kind: 'platformEvent' }> =>\n t.kind === 'platformEvent' && t.platformEvent === eventName,\n )\n if (specs.length === 0) {\n return Effect.void\n }\n\n return Effect.forEach(\n specs,\n (spec) =>\n Queue.offer(instance.platformTriggersQueue, {\n kind: 'platformEvent',\n name: spec.name,\n platformEvent: spec.platformEvent,\n } satisfies ProcessTrigger),\n { discard: true },\n )\n }),\n { discard: true },\n )\n })\n\n const eventsStream: ProcessRuntime['events'] = Stream.fromPubSub(eventsHub)\n\n const getEventsSnapshot: ProcessRuntime['getEventsSnapshot'] = () => Effect.sync(() => eventsBuffer.slice())\n\n yield* Effect.addFinalizer(() =>\n Effect.gen(function* () {\n for (const installation of installations.values()) {\n installation.pendingStart = undefined\n }\n for (const instance of instances.values()) {\n if (instance.fiber) {\n yield* stopInstance(instance, 'scopeDisposed')\n }\n }\n }).pipe(\n Effect.catchAllCause((cause) =>\n Effect.sync(() => {\n // Finalizers must not throw; best-effort logging only.\n if (isDevEnv()) {\n // eslint-disable-next-line no-console\n console.warn('[ProcessRuntime] finalizer failed', Cause.pretty(cause))\n }\n }),\n ),\n ),\n )\n\n return {\n install,\n listInstallations,\n getInstanceStatus,\n controlInstance,\n deliverPlatformEvent,\n events: eventsStream,\n getEventsSnapshot,\n } satisfies ProcessRuntime\n })\n\nexport const layer = (options?: { readonly maxEventHistory?: number }): Layer.Layer<ProcessRuntimeTag, never, never> =>\n Layer.scoped(ProcessRuntimeTag, make(options))\n","import type { ProcessIdentity, ProcessInstanceIdentity, ProcessScope } from './protocol.js'\n\nexport type ProcessScopeKey = string\n\nexport const scopeKeyFromScope = (scope: ProcessScope): ProcessScopeKey => {\n switch (scope.type) {\n case 'app':\n return `app:${scope.appId}`\n case 'moduleInstance':\n return `moduleInstance:${scope.moduleId}::${scope.instanceId}`\n case 'uiSubtree':\n return `uiSubtree:${scope.subtreeId}`\n }\n}\n\nexport const installationKeyFromIdentity = (identity: ProcessIdentity): string =>\n `${identity.processId}@@${scopeKeyFromScope(identity.scope)}`\n\nexport const processInstanceIdFromIdentity = (identity: ProcessInstanceIdentity): string => {\n const scopeKey = scopeKeyFromScope(identity.identity.scope)\n return `process:${identity.identity.processId}::${scopeKey}::r${identity.runSeq}`\n}\n","import { Effect, Fiber, Option, Ref, Scope, Stream } from 'effect'\nimport type { TaskRunnerMode } from '../TaskRunner.js'\nimport type { ProcessConcurrencyPolicy, ProcessTrigger } from './protocol.js'\n\nexport const DEFAULT_SERIAL_QUEUE_GUARD_LIMIT = 4096\nexport const DEFAULT_PARALLEL_LIMIT = 16\n\nexport const toTaskRunnerMode = (policy: ProcessConcurrencyPolicy): TaskRunnerMode => {\n switch (policy.mode) {\n case 'latest':\n return 'latest'\n case 'serial':\n return 'task'\n case 'drop':\n return 'exhaust'\n case 'parallel':\n return 'parallel'\n }\n}\n\nexport type ResolvedQueueLimit = {\n /** User-configured limit; treated as unlimited when omitted (still bounded by the guard). */\n readonly configured: number | 'unbounded'\n /** Runtime-enforced guard limit (prevents unbounded memory growth). */\n readonly guard: number\n}\n\nexport const resolveQueueLimit = (\n maxQueue: unknown,\n options?: {\n readonly defaultGuard?: number\n },\n): ResolvedQueueLimit => {\n const defaultGuard = options?.defaultGuard ?? DEFAULT_SERIAL_QUEUE_GUARD_LIMIT\n\n const configured =\n typeof maxQueue === 'number' && Number.isFinite(maxQueue) && maxQueue >= 0 ? Math.floor(maxQueue) : 'unbounded'\n\n return {\n configured,\n guard: configured === 'unbounded' ? defaultGuard : configured,\n }\n}\n\nexport type ProcessTriggerQueueOverflowInfo = {\n readonly mode: 'serial' | 'parallel'\n readonly currentLength: number\n readonly peak: number\n readonly limit: ResolvedQueueLimit\n readonly policy: ProcessConcurrencyPolicy\n}\n\nexport const runProcessTriggerStream = (args: {\n readonly stream: Stream.Stream<ProcessTrigger>\n readonly policy: ProcessConcurrencyPolicy\n readonly assignTriggerSeq: (trigger: ProcessTrigger) => ProcessTrigger\n /** run a trigger to completion (the caller decides what a \\\"run\\\" means). */\n readonly run: (trigger: ProcessTrigger) => Effect.Effect<void, never, Scope.Scope>\n /** invoked when a trigger is dropped (only for mode=drop). */\n readonly onDrop: (trigger: ProcessTrigger) => Effect.Effect<void>\n /** invoked when internal queue guard is exceeded (fail-stop by default). */\n readonly onQueueOverflow: (info: ProcessTriggerQueueOverflowInfo) => Effect.Effect<void>\n readonly defaultParallelLimit?: number\n readonly defaultQueueGuard?: number\n}): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const policy = args.policy\n const defaultQueueGuard = args.defaultQueueGuard ?? DEFAULT_SERIAL_QUEUE_GUARD_LIMIT\n\n if (policy.mode === 'latest') {\n const stateRef = yield* Ref.make<{\n readonly fiber?: Fiber.RuntimeFiber<void, never>\n readonly runningId: number\n readonly nextId: number\n }>({ fiber: undefined, runningId: 0, nextId: 0 })\n\n const onTrigger = (trigger0: ProcessTrigger): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const trigger = args.assignTriggerSeq(trigger0)\n\n const [prevFiber, prevRunningId, runId] = yield* Ref.modify(stateRef, (s) => {\n const nextId = s.nextId + 1\n return [[s.fiber, s.runningId, nextId] as const, { ...s, nextId, runningId: nextId }] as const\n })\n\n if (prevFiber && prevRunningId !== 0) {\n const done = yield* Fiber.poll(prevFiber)\n if (Option.isNone(done)) {\n yield* Fiber.interruptFork(prevFiber)\n }\n }\n\n const fiber = yield* Effect.forkScoped(\n args\n .run(trigger)\n .pipe(Effect.ensuring(Ref.update(stateRef, (s) => (s.runningId === runId ? { ...s, runningId: 0 } : s)))),\n )\n\n yield* Ref.update(stateRef, (s) => ({ ...s, fiber }))\n })\n\n return yield* Stream.runForEach(args.stream, onTrigger)\n }\n\n const busyRef = yield* Ref.make(false)\n const serialStateRef = yield* Ref.make({\n running: false,\n queue: [] as ProcessTrigger[],\n peak: 0,\n })\n const parallelStateRef = yield* Ref.make({\n active: 0,\n queue: [] as ProcessTrigger[],\n peak: 0,\n })\n\n const serialQueueLimit = resolveQueueLimit(policy.maxQueue, { defaultGuard: defaultQueueGuard })\n const parallelQueueLimit = resolveQueueLimit(undefined, { defaultGuard: defaultQueueGuard })\n const parallelLimit =\n typeof policy.maxParallel === 'number' && Number.isFinite(policy.maxParallel) && policy.maxParallel >= 1\n ? Math.floor(policy.maxParallel)\n : (args.defaultParallelLimit ?? DEFAULT_PARALLEL_LIMIT)\n\n const drainSerial = (): Effect.Effect<void, never, Scope.Scope> =>\n Effect.suspend(() =>\n Ref.modify(serialStateRef, (state) => {\n if (state.running || state.queue.length === 0) {\n return [Option.none(), state] as const\n }\n const [next, ...rest] = state.queue\n return [Option.some(next), { ...state, running: true, queue: rest }] as const\n }).pipe(\n Effect.flatMap((next) =>\n Option.match(next, {\n onNone: () => Effect.void,\n onSome: (trigger) =>\n Effect.forkScoped(\n args\n .run(trigger)\n .pipe(\n Effect.ensuring(Ref.update(serialStateRef, (s) => ({ ...s, running: false }))),\n Effect.zipRight(drainSerial()),\n ),\n ).pipe(Effect.asVoid),\n }),\n ),\n ),\n )\n\n const drainParallel = (): Effect.Effect<void, never, Scope.Scope> =>\n Effect.suspend(() =>\n Ref.modify(parallelStateRef, (state) => {\n if (state.active >= parallelLimit || state.queue.length === 0) {\n return [Option.none(), state] as const\n }\n const [next, ...rest] = state.queue\n return [Option.some(next), { ...state, active: state.active + 1, queue: rest }] as const\n }).pipe(\n Effect.flatMap((next) =>\n Option.match(next, {\n onNone: () => Effect.void,\n onSome: (trigger) =>\n Effect.forkScoped(\n args.run(trigger).pipe(\n Effect.ensuring(\n Ref.update(parallelStateRef, (s) => ({\n ...s,\n active: Math.max(0, s.active - 1),\n })),\n ),\n Effect.zipRight(drainParallel()),\n ),\n ).pipe(Effect.asVoid, Effect.zipRight(drainParallel())),\n }),\n ),\n ),\n )\n\n const onTrigger = (trigger0: ProcessTrigger): Effect.Effect<void, never, Scope.Scope> =>\n Effect.gen(function* () {\n const trigger = args.assignTriggerSeq(trigger0)\n\n if (policy.mode === 'drop') {\n const acquired = yield* Ref.modify(busyRef, (busy) =>\n busy ? ([false, busy] as const) : ([true, true] as const),\n )\n if (!acquired) {\n yield* args.onDrop(trigger)\n return\n }\n\n yield* Effect.forkScoped(args.run(trigger).pipe(Effect.ensuring(Ref.set(busyRef, false))))\n return\n }\n\n if (policy.mode === 'parallel') {\n const nextSize = yield* Ref.modify(parallelStateRef, (state) => {\n const queue = [...state.queue, trigger]\n return [queue.length, { ...state, queue, peak: Math.max(state.peak, queue.length) }] as const\n })\n\n if (nextSize > parallelQueueLimit.guard) {\n const state = yield* Ref.get(parallelStateRef)\n yield* args.onQueueOverflow({\n mode: 'parallel',\n currentLength: nextSize,\n peak: state.peak,\n limit: parallelQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainParallel()\n return\n }\n\n // serial\n const nextSize = yield* Ref.modify(serialStateRef, (state) => {\n const queue = [...state.queue, trigger]\n return [queue.length, { ...state, queue, peak: Math.max(state.peak, queue.length) }] as const\n })\n\n if (nextSize > serialQueueLimit.guard) {\n const state = yield* Ref.get(serialStateRef)\n yield* args.onQueueOverflow({\n mode: 'serial',\n currentLength: nextSize,\n peak: state.peak,\n limit: serialQueueLimit,\n policy,\n })\n return\n }\n\n yield* drainSerial()\n })\n\n return yield* Stream.runForEach(args.stream, onTrigger)\n })\n","import type { ProcessEvent } from './protocol.js'\n\nexport const PROCESS_EVENT_MAX_BYTES = 4 * 1024\nexport const PROCESS_EVENT_MAX_EVENTS_PER_RUN = 50\nexport const PROCESS_EVENT_RESERVED_EVENTS_FOR_SUMMARY = 1\n\nexport type ProcessRunEventBudgetState = {\n readonly maxEvents: number\n readonly maxBytes: number\n readonly emitted: number\n readonly dropped: number\n readonly downgraded: number\n readonly summaryEmitted: boolean\n}\n\nexport const makeProcessRunEventBudgetState = (options?: {\n readonly maxEvents?: number\n readonly maxBytes?: number\n}): ProcessRunEventBudgetState => ({\n maxEvents:\n typeof options?.maxEvents === 'number' && Number.isFinite(options.maxEvents) && options.maxEvents >= 0\n ? Math.floor(options.maxEvents)\n : PROCESS_EVENT_MAX_EVENTS_PER_RUN,\n maxBytes:\n typeof options?.maxBytes === 'number' && Number.isFinite(options.maxBytes) && options.maxBytes >= 0\n ? Math.floor(options.maxBytes)\n : PROCESS_EVENT_MAX_BYTES,\n emitted: 0,\n dropped: 0,\n downgraded: 0,\n summaryEmitted: false,\n})\n\nexport type ProcessRunEventBudgetDecision =\n | {\n readonly _tag: 'emit'\n readonly event: ProcessEvent\n }\n | {\n readonly _tag: 'emitSummary'\n readonly event: ProcessEvent\n }\n | {\n readonly _tag: 'drop'\n }\n\nconst makeBudgetSummaryEvent = (args: {\n readonly sourceEvent: ProcessEvent\n readonly maxEvents: number\n readonly maxBytes: number\n readonly emitted: number\n readonly dropped: number\n readonly downgraded: number\n}): ProcessEvent => ({\n type: 'process:trigger',\n identity: args.sourceEvent.identity,\n trigger: args.sourceEvent.trigger,\n severity: 'warning',\n eventSeq: args.sourceEvent.eventSeq,\n timestampMs: args.sourceEvent.timestampMs,\n error: {\n message: 'Process run event budget exceeded; further trigger/dispatch events are suppressed.',\n code: 'process::event_budget_exceeded',\n hint: `maxEvents=${args.maxEvents} maxBytes=${args.maxBytes} emitted=${args.emitted} dropped=${args.dropped} downgraded=${args.downgraded}`,\n },\n})\n\nexport const applyProcessRunEventBudget = (\n state: ProcessRunEventBudgetState,\n event: ProcessEvent,\n): readonly [ProcessRunEventBudgetDecision, ProcessRunEventBudgetState] => {\n const maxEvents = Math.max(0, state.maxEvents)\n const maxBytes = Math.max(0, state.maxBytes)\n\n if (state.summaryEmitted) {\n return [\n { _tag: 'drop' },\n {\n ...state,\n dropped: state.dropped + 1,\n },\n ]\n }\n\n const reserve = PROCESS_EVENT_RESERVED_EVENTS_FOR_SUMMARY\n const allowedRegular = Math.max(0, maxEvents - reserve)\n\n if (state.emitted < allowedRegular) {\n const enforced = enforceProcessEventMaxBytes(event, { maxBytes })\n return [\n { _tag: 'emit', event: enforced.event },\n {\n ...state,\n emitted: state.emitted + 1,\n downgraded: state.downgraded + (enforced.downgraded ? 1 : 0),\n },\n ]\n }\n\n const dropped = state.dropped + 1\n const summary = makeBudgetSummaryEvent({\n sourceEvent: event,\n maxEvents,\n maxBytes,\n emitted: state.emitted,\n dropped,\n downgraded: state.downgraded,\n })\n const enforcedSummary = enforceProcessEventMaxBytes(summary, { maxBytes })\n\n return [\n { _tag: 'emitSummary', event: enforcedSummary.event },\n {\n ...state,\n emitted: Math.min(maxEvents, state.emitted + 1),\n dropped,\n downgraded: state.downgraded + (enforcedSummary.downgraded ? 1 : 0),\n summaryEmitted: true,\n },\n ]\n}\n\nexport const estimateEventBytes = (event: ProcessEvent): number => {\n const json = JSON.stringify(event)\n return typeof Buffer !== 'undefined' ? Buffer.byteLength(json, 'utf8') : new TextEncoder().encode(json).length\n}\n\nconst truncateChars = (value: string, maxLen: number): string =>\n value.length <= maxLen ? value : value.slice(0, maxLen)\n\nconst normalizeErrorSummary = (error: NonNullable<ProcessEvent['error']>): NonNullable<ProcessEvent['error']> => {\n const message = typeof error.message === 'string' && error.message.length > 0 ? error.message : 'Error'\n\n const hint = typeof error.hint === 'string' && error.hint.length > 0 ? truncateChars(error.hint, 1024) : undefined\n\n return {\n name: typeof error.name === 'string' && error.name.length > 0 ? error.name : undefined,\n message: truncateChars(message, 256),\n code: typeof error.code === 'string' && error.code.length > 0 ? error.code : undefined,\n hint,\n }\n}\n\nexport const enforceProcessEventMaxBytes = (\n event: ProcessEvent,\n options?: {\n readonly maxBytes?: number\n },\n): { readonly event: ProcessEvent; readonly downgraded: boolean } => {\n const maxBytes = options?.maxBytes ?? PROCESS_EVENT_MAX_BYTES\n\n let downgraded = false\n let next: ProcessEvent = event\n\n if (event.error) {\n const normalized = normalizeErrorSummary(event.error)\n if (\n normalized.message !== event.error.message ||\n normalized.hint !== event.error.hint ||\n normalized.code !== event.error.code ||\n normalized.name !== event.error.name\n ) {\n downgraded = true\n next = { ...event, error: normalized }\n }\n }\n\n if (estimateEventBytes(next) <= maxBytes) {\n return { event: next, downgraded }\n }\n\n // Further trimming is applied to error.hint only (common trigger: multi-line hints).\n if (!next.error?.hint) {\n // Nothing left to trim; best-effort return.\n return { event: next, downgraded: true }\n }\n\n const hint = next.error.hint\n const steps = [512, 256, 128, 64, 32, 0]\n\n for (const maxLen of steps) {\n const trimmed = maxLen === 0 ? undefined : truncateChars(hint, maxLen)\n const candidate: ProcessEvent = {\n ...next,\n error: {\n ...next.error,\n hint: trimmed,\n },\n }\n if (estimateEventBytes(candidate) <= maxBytes) {\n return { event: candidate, downgraded: true }\n }\n }\n\n // Fallback: remove hint and shorten message (process:error must still have a message).\n const fallback: ProcessEvent = next.error\n ? ({\n ...next,\n error: {\n ...next.error,\n message: truncateChars(next.error.message, 96),\n hint: undefined,\n },\n } satisfies ProcessEvent)\n : next\n\n return { event: fallback, downgraded: true }\n}\n","import * as SchemaAST from 'effect/SchemaAST'\n\nexport type DotPathSegment = string | number\n\ntype DotPathParseResult =\n | { readonly ok: true; readonly segments: ReadonlyArray<DotPathSegment> }\n | { readonly ok: false; readonly error: Error }\n\nexport type DotPathSelectorResult =\n | {\n readonly ok: true\n readonly selector: (state: unknown) => unknown\n readonly segments: ReadonlyArray<DotPathSegment>\n }\n | { readonly ok: false; readonly error: Error }\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null\n\nexport const resolveSchemaAst = (schema: unknown): SchemaAST.AST | undefined => {\n if (!isRecord(schema)) return undefined\n const ast = (schema as any).ast as SchemaAST.AST | undefined\n if (!ast) return undefined\n if (typeof ast !== 'object' && typeof ast !== 'function') return undefined\n return ast\n}\n\nconst makeDotPathError = (path: string, message: string, hint?: string): Error => {\n const err = new Error(message)\n ;(err as any).code = 'process::invalid_dot_path'\n ;(err as any).hint =\n hint ??\n [\n \"Expected dot-path syntax: segments separated by '.', numeric segments represent array indices.\",\n `path: ${path}`,\n '',\n 'examples:',\n '- count',\n '- user.name',\n '- items.0.id',\n ].join('\\n')\n return err\n}\n\nconst makeSchemaMismatchError = (path: string): Error =>\n makeDotPathError(\n path,\n 'Invalid dot-path: path does not match the state schema.',\n [\n 'The module state schema does not contain the requested dot-path.',\n `path: ${path}`,\n '',\n 'fix:',\n '- Ensure the path exists in the state schema.',\n '- Use numeric segments for array indices (e.g. items.0.id).',\n ].join('\\n'),\n )\n\nconst parseDotPath = (path: string): DotPathParseResult => {\n if (typeof path !== 'string' || path.length === 0) {\n return { ok: false, error: makeDotPathError(String(path), 'dot-path must be a non-empty string') }\n }\n\n const raw = path.split('.')\n if (raw.length === 0) {\n return { ok: false, error: makeDotPathError(path, 'dot-path must contain at least one segment') }\n }\n\n const segments: DotPathSegment[] = []\n for (let i = 0; i < raw.length; i++) {\n const seg = raw[i]!\n if (seg.length === 0) {\n return {\n ok: false,\n error: makeDotPathError(\n path,\n `Invalid dot-path: empty segment at index ${i}.`,\n [\n \"Expected dot-path syntax: segments separated by '.', numeric segments represent array indices.\",\n `path: ${path}`,\n '',\n 'examples:',\n '- count',\n '- user.name',\n '- items.0.id',\n '',\n 'fix:',\n '- Remove consecutive dots or trailing dots.',\n ].join('\\n'),\n ),\n }\n }\n\n if (/^[0-9]+$/.test(seg)) {\n const n = Number(seg)\n if (!Number.isFinite(n) || n < 0) {\n return {\n ok: false,\n error: makeDotPathError(path, `Invalid array index segment \"${seg}\" at index ${i}.`),\n }\n }\n segments.push(Math.floor(n))\n continue\n }\n\n segments.push(seg)\n }\n\n return { ok: true, segments }\n}\n\nconst resolveAstForPath = (\n ast: SchemaAST.AST,\n segments: ReadonlyArray<DotPathSegment>,\n seen: Set<SchemaAST.AST>,\n): SchemaAST.AST | undefined => {\n if (segments.length === 0) return ast\n\n let current = ast\n while (true) {\n if (SchemaAST.isSuspend(current)) {\n if (seen.has(current)) return undefined\n seen.add(current)\n current = current.f()\n continue\n }\n if (SchemaAST.isRefinement(current)) {\n current = current.from\n continue\n }\n break\n }\n\n if (SchemaAST.isTransformation(current)) {\n const from = resolveAstForPath(current.from, segments, seen)\n if (from) return from\n return resolveAstForPath(current.to, segments, seen)\n }\n\n if (SchemaAST.isUnion(current)) {\n for (const node of current.types) {\n const resolved = resolveAstForPath(node, segments, seen)\n if (resolved) return resolved\n }\n return undefined\n }\n\n if (SchemaAST.isTupleType(current)) {\n const [head, ...tail] = segments\n if (typeof head !== 'number') return undefined\n const element =\n head < current.elements.length ? current.elements[head] : current.rest.length > 0 ? current.rest[0] : undefined\n return element ? resolveAstForPath(element.type, tail, seen) : undefined\n }\n\n if (SchemaAST.isTypeLiteral(current)) {\n const [head, ...tail] = segments\n if (head === undefined) return undefined\n\n if (typeof head === 'string') {\n for (const ps of current.propertySignatures) {\n if (String(ps.name) !== head) continue\n return resolveAstForPath(ps.type, tail, seen)\n }\n }\n\n for (const sig of current.indexSignatures) {\n let param: SchemaAST.AST = sig.parameter as unknown as SchemaAST.AST\n while (SchemaAST.isRefinement(param)) {\n param = param.from\n }\n const tag = (param as any)?._tag\n const acceptsString = tag === 'StringKeyword' || tag === 'TemplateLiteral'\n const acceptsNumber = tag === 'NumberKeyword'\n if (typeof head === 'string' && acceptsString) {\n return resolveAstForPath(sig.type, tail, seen)\n }\n if (typeof head === 'number' && acceptsNumber) {\n return resolveAstForPath(sig.type, tail, seen)\n }\n }\n }\n\n const tag = (current as any)?._tag\n if (tag === 'AnyKeyword' || tag === 'UnknownKeyword' || tag === 'ObjectKeyword' || tag === 'Declaration') {\n return current\n }\n\n return undefined\n}\n\nconst selectBySegments =\n (segments: ReadonlyArray<DotPathSegment>) =>\n (state: unknown): unknown => {\n let current: unknown = state\n for (const seg of segments) {\n if (current == null) return undefined\n if (typeof seg === 'number') {\n if (Array.isArray(current)) {\n current = current[seg]\n continue\n }\n if (isRecord(current)) {\n current = current[String(seg)]\n continue\n }\n return undefined\n }\n if (isRecord(current)) {\n current = current[seg]\n continue\n }\n return undefined\n }\n return current\n }\n\nexport const makeSchemaSelector = (path: string, schemaAst?: SchemaAST.AST): DotPathSelectorResult => {\n const parsed = parseDotPath(path)\n if (!parsed.ok) return { ok: false, error: parsed.error }\n\n if (schemaAst) {\n const resolved = resolveAstForPath(schemaAst, parsed.segments, new Set())\n if (!resolved) {\n return { ok: false, error: makeSchemaMismatchError(path) }\n }\n }\n\n return {\n ok: true,\n selector: selectBySegments(parsed.segments),\n segments: parsed.segments,\n }\n}\n","import type { ProcessErrorPolicy } from './protocol.js'\n\nexport type SupervisionDecision = 'stop' | 'restart'\n\nexport type SupervisionState = {\n readonly failureTimes: ReadonlyArray<number>\n}\n\nexport const initialState = (): SupervisionState => ({ failureTimes: [] })\n\nexport type FailureDecision = {\n readonly decision: SupervisionDecision\n readonly nextState: SupervisionState\n readonly withinWindowFailures: number\n readonly maxRestarts: number\n readonly windowMs?: number\n}\n\nexport const onFailure = (policy: ProcessErrorPolicy, state: SupervisionState, nowMs: number): FailureDecision => {\n if (policy.mode === 'failStop') {\n return {\n decision: 'stop',\n nextState: state,\n withinWindowFailures: state.failureTimes.length,\n maxRestarts: 0,\n windowMs: policy.windowMs,\n }\n }\n\n const maxRestartsRaw = policy.maxRestarts\n const maxRestarts =\n typeof maxRestartsRaw === 'number' && Number.isFinite(maxRestartsRaw) && maxRestartsRaw >= 0\n ? Math.floor(maxRestartsRaw)\n : 0\n\n if (maxRestarts <= 0) {\n return {\n decision: 'stop',\n nextState: state,\n withinWindowFailures: state.failureTimes.length,\n maxRestarts,\n windowMs: policy.windowMs,\n }\n }\n\n const windowMsRaw = policy.windowMs\n const windowMs =\n typeof windowMsRaw === 'number' && Number.isFinite(windowMsRaw) && windowMsRaw > 0\n ? Math.floor(windowMsRaw)\n : undefined\n\n const failureTimesRaw = [...state.failureTimes, nowMs]\n const failureTimes = windowMs ? failureTimesRaw.filter((t) => t >= nowMs - windowMs) : failureTimesRaw\n\n // Keep at most maxRestarts+1 timestamps to avoid unbounded growth.\n const cap = maxRestarts + 1\n const capped = failureTimes.length > cap ? failureTimes.slice(failureTimes.length - cap) : failureTimes\n\n const withinWindowFailures = capped.length\n const decision: SupervisionDecision = withinWindowFailures <= maxRestarts ? 'restart' : 'stop'\n\n return {\n decision,\n nextState: { failureTimes: capped },\n withinWindowFailures,\n maxRestarts,\n windowMs,\n }\n}\n"],"mappings":"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","names":["Context","Effect","Fiber","FiberRef","Layer","Option","Ref","Scope","Stream","Effect","Effect","onTrigger","nextSize","isRecord","tag","Context","FiberRef","Effect","Ref","Option","Fiber","Scope","Stream","tag","found","runtime","stream","installation","options","Layer"]}