@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.
- package/LICENSE +201 -0
- package/dist/{Bound-BN1DQ_lM.d.ts → Bound-CEa1ihvH.d.ts} +2 -2
- package/dist/{Bound-BPIfH9SS.d.cts → Bound-CNLNkC7c.d.cts} +2 -2
- package/dist/Bound.cjs +620 -163
- package/dist/Bound.cjs.map +1 -1
- package/dist/Bound.d.cts +3 -3
- package/dist/Bound.d.ts +3 -3
- package/dist/Bound.js +14 -14
- package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-BhMYr-1i.d.cts} +3 -3
- package/dist/{Debug-B5q5Bkzx.d.ts → Debug-ByM7m4Ft.d.ts} +3 -3
- package/dist/Debug.cjs +553 -32
- package/dist/Debug.cjs.map +1 -1
- package/dist/Debug.d.cts +10 -8
- package/dist/Debug.d.ts +10 -8
- package/dist/Debug.js +12 -10
- package/dist/EffectOp.cjs.map +1 -1
- package/dist/EffectOp.js +2 -3
- package/dist/EffectOp.js.map +1 -1
- package/dist/Env.cjs +664 -6
- package/dist/Env.cjs.map +1 -1
- package/dist/Env.js +5 -2
- package/dist/ExternalStore-BAz83PVq.d.cts +60 -0
- package/dist/ExternalStore-BYWPbYs8.d.ts +60 -0
- package/dist/ExternalStore.cjs +746 -0
- package/dist/ExternalStore.cjs.map +1 -0
- package/dist/ExternalStore.d.cts +4 -0
- package/dist/ExternalStore.d.ts +4 -0
- package/dist/ExternalStore.js +19 -0
- package/dist/ExternalStore.js.map +1 -0
- package/dist/{Flow-1fZT8MpX.d.cts → Flow-BlSoMmhV.d.cts} +2 -2
- package/dist/{Flow-BhpjE22E.d.ts → Flow-CQSGve5c.d.ts} +2 -2
- package/dist/Flow.cjs +2 -2
- package/dist/Flow.cjs.map +1 -1
- package/dist/Flow.d.cts +4 -4
- package/dist/Flow.d.ts +4 -4
- package/dist/Flow.js +7 -8
- package/dist/{Handle-D_cLW1Z3.d.ts → Handle-B7PSmsrY.d.ts} +1 -1
- package/dist/{Handle-D8D1zPb_.d.cts → Handle-ByovhL-c.d.cts} +1 -1
- package/dist/Handle.d.cts +3 -3
- package/dist/Handle.d.ts +3 -3
- package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-DGSpS4GM.d.ts} +2 -2
- package/dist/{Kernel-8kC-jOda.d.cts → Kernel-DZAk-Mrn.d.cts} +2 -2
- package/dist/Kernel.cjs +680 -22
- package/dist/Kernel.cjs.map +1 -1
- package/dist/Kernel.d.cts +10 -8
- package/dist/Kernel.d.ts +10 -8
- package/dist/Kernel.js +7 -4
- package/dist/{Link-Db7975nU.d.ts → Link-Cm4eR9n0.d.ts} +10 -3
- package/dist/{Link-fX8x1eCK.d.cts → Link-DF8i8iWR.d.cts} +10 -3
- package/dist/Link.cjs +1128 -86
- package/dist/Link.cjs.map +1 -1
- package/dist/Link.d.cts +3 -3
- package/dist/Link.d.ts +3 -3
- package/dist/Link.js +30 -25
- package/dist/{Logic-DRh4sDZj.d.cts → Logic-BcQA0AvE.d.cts} +1 -1
- package/dist/{Logic-BRjEMr-W.d.ts → Logic-OotSE1xw.d.ts} +1 -1
- package/dist/Logic.d.cts +3 -3
- package/dist/Logic.d.ts +3 -3
- package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-BNDJ8waF.d.ts} +1 -1
- package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-CvZ5WY1B.d.cts} +1 -1
- package/dist/MatchBuilder.d.cts +4 -4
- package/dist/MatchBuilder.d.ts +4 -4
- package/dist/Middleware-D8tUDLv_.d.cts +100 -0
- package/dist/Middleware-DS7CbTTN.d.ts +100 -0
- package/dist/Middleware.cjs +461 -13
- package/dist/Middleware.cjs.map +1 -1
- package/dist/Middleware.d.cts +2 -86
- package/dist/Middleware.d.ts +2 -86
- package/dist/Middleware.js +13 -11
- package/dist/{Module-DnzluX2J.d.ts → Module-CFj0I2yE.d.ts} +45 -18
- package/dist/{Module-B_0xRDMR.d.cts → Module-DpXPW9EQ.d.cts} +45 -18
- package/dist/Module.cjs +8583 -5741
- package/dist/Module.cjs.map +1 -1
- package/dist/Module.d.cts +5 -4
- package/dist/Module.d.ts +5 -4
- package/dist/Module.js +32 -27
- package/dist/ModuleTag-BcVF6z7B.d.ts +113 -0
- package/dist/ModuleTag-DuZXo_NS.d.cts +113 -0
- package/dist/ModuleTag.cjs +2609 -1232
- package/dist/ModuleTag.cjs.map +1 -1
- package/dist/ModuleTag.d.cts +4 -4
- package/dist/ModuleTag.d.ts +4 -4
- package/dist/ModuleTag.js +28 -25
- package/dist/{Observability-cY4kLn0S.d.ts → Observability-D-ZWeEVb.d.ts} +22 -15
- package/dist/{Observability-COqEvp2C.d.cts → Observability-V7sRMYTh.d.cts} +22 -15
- package/dist/Observability.cjs +1938 -640
- package/dist/Observability.cjs.map +1 -1
- package/dist/Observability.d.cts +4 -4
- package/dist/Observability.d.ts +4 -4
- package/dist/Observability.js +21 -19
- package/dist/{Process-mL8fHDSB.d.cts → Process-B55aJMFk.d.cts} +29 -4
- package/dist/{Process-CM9xbMdP.d.ts → Process-DvhFEwUS.d.ts} +29 -4
- package/dist/Process.cjs +1122 -85
- package/dist/Process.cjs.map +1 -1
- package/dist/Process.d.cts +4 -3
- package/dist/Process.d.ts +4 -3
- package/dist/Process.js +27 -22
- package/dist/{ReadQuery-BlMwhe-F.d.ts → ReadQuery-C4vZ8Prc.d.ts} +2 -2
- package/dist/{ReadQuery-SinbStGF.d.ts → ReadQuery-CafjlJQo.d.cts} +1 -1
- package/dist/{ReadQuery-SinbStGF.d.cts → ReadQuery-CafjlJQo.d.ts} +1 -1
- package/dist/{ReadQuery-CL5XlXts.d.cts → ReadQuery-mc0NgrFV.d.cts} +2 -2
- package/dist/ReadQuery.cjs +3 -3
- package/dist/ReadQuery.cjs.map +1 -1
- package/dist/ReadQuery.d.cts +2 -2
- package/dist/ReadQuery.d.ts +2 -2
- package/dist/ReadQuery.js +3 -3
- package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-C8xZ267q.d.ts} +88 -7
- package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DP7Vsv3f.d.cts} +88 -7
- package/dist/Reflection.cjs +2934 -1553
- package/dist/Reflection.cjs.map +1 -1
- package/dist/Reflection.d.cts +14 -11
- package/dist/Reflection.d.ts +14 -11
- package/dist/Reflection.js +26 -21
- package/dist/Resource.cjs +670 -12
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.js +6 -3
- package/dist/Root.cjs +675 -17
- package/dist/Root.cjs.map +1 -1
- package/dist/Root.js +7 -3
- package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-BWc9YfUB.d.ts} +37 -7
- package/dist/{Runtime-B-aL-f29.d.cts → Runtime-PShIC4DW.d.cts} +37 -7
- package/dist/Runtime.cjs +1899 -809
- package/dist/Runtime.cjs.map +1 -1
- package/dist/Runtime.d.cts +14 -11
- package/dist/Runtime.d.ts +14 -11
- package/dist/Runtime.js +33 -28
- package/dist/ScopeRegistry.cjs +668 -10
- package/dist/ScopeRegistry.cjs.map +1 -1
- package/dist/ScopeRegistry.js +6 -3
- package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-CQsDlXJm.d.cts} +23 -6
- package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-YvJzVDKl.d.ts} +23 -6
- package/dist/StateTrait.cjs +1475 -370
- package/dist/StateTrait.cjs.map +1 -1
- package/dist/StateTrait.d.cts +7 -5
- package/dist/StateTrait.d.ts +7 -5
- package/dist/StateTrait.js +17 -14
- package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-CjIBICAA.d.ts} +2 -2
- package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-NmqGiXPC.d.cts} +2 -2
- package/dist/TraitLifecycle.cjs +489 -32
- package/dist/TraitLifecycle.cjs.map +1 -1
- package/dist/TraitLifecycle.d.cts +4 -4
- package/dist/TraitLifecycle.d.ts +4 -4
- package/dist/TraitLifecycle.js +7 -7
- package/dist/Workflow-BlFG_20_.d.cts +414 -0
- package/dist/Workflow-CW9S_aAP.d.ts +414 -0
- package/dist/Workflow.cjs +2977 -0
- package/dist/Workflow.cjs.map +1 -0
- package/dist/Workflow.d.cts +7 -0
- package/dist/Workflow.d.ts +7 -0
- package/dist/Workflow.js +55 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/{chunk-G5ZBFPNU.js → chunk-2A4UKO2D.js} +2 -2
- package/dist/chunk-2DE6D42I.js +248 -0
- package/dist/chunk-2DE6D42I.js.map +1 -0
- package/dist/{chunk-ANLBCBDC.js → chunk-2DVLMSOE.js} +6 -6
- package/dist/{chunk-BE3HW4FY.js → chunk-34CF6OGE.js} +14 -16
- package/dist/chunk-34CF6OGE.js.map +1 -0
- package/dist/{chunk-ZFY7U2FR.js → chunk-3LPIXG56.js} +43 -3
- package/dist/chunk-3LPIXG56.js.map +1 -0
- package/dist/chunk-3VZYDNXZ.js +10 -0
- package/dist/chunk-3VZYDNXZ.js.map +1 -0
- package/dist/{chunk-3TMODYZV.js → chunk-3XO4HR6V.js} +2 -2
- package/dist/chunk-46FGVWRF.js +817 -0
- package/dist/chunk-46FGVWRF.js.map +1 -0
- package/dist/chunk-4LODUXFI.js +288 -0
- package/dist/chunk-4LODUXFI.js.map +1 -0
- package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
- package/dist/chunk-4MZ7BT3R.js.map +1 -0
- package/dist/{chunk-TKZ7MEIA.js → chunk-53GVPGSM.js} +2 -2
- package/dist/{chunk-KP7MUZNX.js → chunk-5W2V2NVJ.js} +2 -2
- package/dist/chunk-5W2V2NVJ.js.map +1 -0
- package/dist/chunk-6DACKW3D.js +613 -0
- package/dist/chunk-6DACKW3D.js.map +1 -0
- package/dist/chunk-AQ7L2QZ5.js +1395 -0
- package/dist/chunk-AQ7L2QZ5.js.map +1 -0
- package/dist/{chunk-NZJKFF45.js → chunk-C2UZZQ76.js} +2 -2
- package/dist/chunk-CCKP5Z6F.js +701 -0
- package/dist/chunk-CCKP5Z6F.js.map +1 -0
- package/dist/chunk-CUKM2XUW.js +27 -0
- package/dist/{chunk-QCHIQWAJ.js.map → chunk-CUKM2XUW.js.map} +1 -1
- package/dist/{chunk-M2RGJPXX.js → chunk-DBD6Q6JH.js} +3 -3
- package/dist/{chunk-ZGDVUPTM.js → chunk-EB4RGQO3.js} +2 -2
- package/dist/{chunk-PAYXCY6A.js → chunk-G7ESIQTI.js} +12 -14
- package/dist/chunk-G7ESIQTI.js.map +1 -0
- package/dist/chunk-GPBAZQ23.js +348 -0
- package/dist/chunk-GPBAZQ23.js.map +1 -0
- package/dist/{chunk-OFADUJWJ.js → chunk-I4LCE5OY.js} +3 -5
- package/dist/{chunk-OFADUJWJ.js.map → chunk-I4LCE5OY.js.map} +1 -1
- package/dist/{chunk-DFNM3WX2.js → chunk-IMCC6TBN.js} +158 -39
- package/dist/chunk-IMCC6TBN.js.map +1 -0
- package/dist/{chunk-76WT3HOR.js → chunk-IROZNQAF.js} +22 -21
- package/dist/chunk-IROZNQAF.js.map +1 -0
- package/dist/{chunk-TAAPQVZN.js → chunk-ISKNULNH.js} +2 -2
- package/dist/chunk-J3CWXIPV.js +242 -0
- package/dist/chunk-J3CWXIPV.js.map +1 -0
- package/dist/{chunk-PYOE4VSI.js → chunk-JBKYRTCS.js} +224 -161
- package/dist/chunk-JBKYRTCS.js.map +1 -0
- package/dist/{chunk-66ALHVEX.js → chunk-KKIAYH4X.js} +3 -3
- package/dist/{chunk-3RMKLXHX.js → chunk-KLDVG3SY.js} +2 -2
- package/dist/{chunk-BABLDP24.js → chunk-KSZQYSEH.js} +3 -3
- package/dist/chunk-KSZQYSEH.js.map +1 -0
- package/dist/{chunk-CW6T36TN.js → chunk-M3M7JFAH.js} +4 -4
- package/dist/chunk-M3M7JFAH.js.map +1 -0
- package/dist/{chunk-THATMZXD.js → chunk-MLB253V2.js} +2 -2
- package/dist/{chunk-THATMZXD.js.map → chunk-MLB253V2.js.map} +1 -1
- package/dist/{chunk-JGIWG6SR.js → chunk-MS77U77X.js} +664 -550
- package/dist/chunk-MS77U77X.js.map +1 -0
- package/dist/chunk-MW4FA3MW.js +23 -0
- package/dist/chunk-MW4FA3MW.js.map +1 -0
- package/dist/chunk-MYKNINNN.js +228 -0
- package/dist/chunk-MYKNINNN.js.map +1 -0
- package/dist/{chunk-4CQAV7YB.js → chunk-O6TTQXTY.js} +2 -2
- package/dist/{chunk-NBD3KUOZ.js → chunk-OJDJ4VDQ.js} +35 -24
- package/dist/chunk-OJDJ4VDQ.js.map +1 -0
- package/dist/{chunk-NQZ2OSGR.js → chunk-PVZEMNJY.js} +9 -9
- package/dist/chunk-PVZEMNJY.js.map +1 -0
- package/dist/chunk-RN26DV2M.js +271 -0
- package/dist/chunk-RN26DV2M.js.map +1 -0
- package/dist/{chunk-JCXGZRMU.js → chunk-RQQW3IQC.js} +3 -3
- package/dist/chunk-RQQW3IQC.js.map +1 -0
- package/dist/{chunk-24VULZ7A.js → chunk-TKOGZDD6.js} +3 -3
- package/dist/{chunk-EGK3KN7B.js → chunk-TQYLVXGY.js} +70 -39
- package/dist/chunk-TQYLVXGY.js.map +1 -0
- package/dist/{chunk-QMM6O4CD.js → chunk-UACD2CL2.js} +15 -3
- package/dist/{chunk-QMM6O4CD.js.map → chunk-UACD2CL2.js.map} +1 -1
- package/dist/{chunk-M3WTHJHJ.js → chunk-VH575UTV.js} +30 -34
- package/dist/chunk-VH575UTV.js.map +1 -0
- package/dist/{chunk-AUIR5O6W.js → chunk-WWBMC24F.js} +9 -15
- package/dist/chunk-WWBMC24F.js.map +1 -0
- package/dist/{chunk-JWOYLO27.js → chunk-WYJUJV4L.js} +80 -7
- package/dist/chunk-WYJUJV4L.js.map +1 -0
- package/dist/{chunk-EY4NZKDR.js → chunk-XFMMPYNU.js} +2 -2
- package/dist/chunk-Y4VRBIS6.js +35 -0
- package/dist/chunk-Y4VRBIS6.js.map +1 -0
- package/dist/{chunk-DMBALCE2.js → chunk-ZC7MSQ5U.js} +77 -4
- package/dist/chunk-ZC7MSQ5U.js.map +1 -0
- package/dist/{chunk-OGWBVHB3.js → chunk-ZCK6SCOE.js} +67 -8
- package/dist/chunk-ZCK6SCOE.js.map +1 -0
- package/dist/{chunk-IHVBV5C2.js → chunk-ZTFTABXV.js} +2 -1
- package/dist/chunk-ZTFTABXV.js.map +1 -0
- package/dist/index.cjs +9532 -5017
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +163 -27
- package/dist/index.d.ts +163 -27
- package/dist/index.js +119 -56
- package/dist/index.js.map +1 -1
- package/dist/{ir-BMP7yxJJ.d.cts → ir-C-Zm_GlZ.d.cts} +1 -1
- package/dist/{ir-DUOz6H-5.d.ts → ir-DGyGiwVe.d.ts} +1 -1
- package/dist/{module-k7m3txak.d.ts → module-DqQ1U-Me.d.ts} +129 -100
- package/dist/{module-B8CBqIZ_.d.cts → module-doenaCsZ.d.cts} +129 -100
- package/package.json +12 -1
- package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
- package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
- package/dist/chunk-3QMIVH35.js +0 -43
- package/dist/chunk-3QMIVH35.js.map +0 -1
- package/dist/chunk-76WT3HOR.js.map +0 -1
- package/dist/chunk-AUIR5O6W.js.map +0 -1
- package/dist/chunk-BABLDP24.js.map +0 -1
- package/dist/chunk-BE3HW4FY.js.map +0 -1
- package/dist/chunk-CW6T36TN.js.map +0 -1
- package/dist/chunk-DFNM3WX2.js.map +0 -1
- package/dist/chunk-DMBALCE2.js.map +0 -1
- package/dist/chunk-EGK3KN7B.js.map +0 -1
- package/dist/chunk-GMPEOUP2.js.map +0 -1
- package/dist/chunk-IHVBV5C2.js.map +0 -1
- package/dist/chunk-JCXGZRMU.js.map +0 -1
- package/dist/chunk-JGIWG6SR.js.map +0 -1
- package/dist/chunk-JWOYLO27.js.map +0 -1
- package/dist/chunk-KIXAU3GM.js +0 -137
- package/dist/chunk-KIXAU3GM.js.map +0 -1
- package/dist/chunk-KP7MUZNX.js.map +0 -1
- package/dist/chunk-M3WTHJHJ.js.map +0 -1
- package/dist/chunk-M7IYCTJV.js +0 -79
- package/dist/chunk-M7IYCTJV.js.map +0 -1
- package/dist/chunk-NBD3KUOZ.js.map +0 -1
- package/dist/chunk-NQZ2OSGR.js.map +0 -1
- package/dist/chunk-OGWBVHB3.js.map +0 -1
- package/dist/chunk-PAYXCY6A.js.map +0 -1
- package/dist/chunk-PYOE4VSI.js.map +0 -1
- package/dist/chunk-QCHIQWAJ.js +0 -21
- package/dist/chunk-VZB726PE.js +0 -93
- package/dist/chunk-VZB726PE.js.map +0 -1
- package/dist/chunk-W3TEWHLO.js +0 -568
- package/dist/chunk-W3TEWHLO.js.map +0 -1
- package/dist/chunk-ZFLHVFUC.js +0 -192
- package/dist/chunk-ZFLHVFUC.js.map +0 -1
- package/dist/chunk-ZFY7U2FR.js.map +0 -1
- /package/dist/{chunk-G5ZBFPNU.js.map → chunk-2A4UKO2D.js.map} +0 -0
- /package/dist/{chunk-ANLBCBDC.js.map → chunk-2DVLMSOE.js.map} +0 -0
- /package/dist/{chunk-3TMODYZV.js.map → chunk-3XO4HR6V.js.map} +0 -0
- /package/dist/{chunk-TKZ7MEIA.js.map → chunk-53GVPGSM.js.map} +0 -0
- /package/dist/{chunk-NZJKFF45.js.map → chunk-C2UZZQ76.js.map} +0 -0
- /package/dist/{chunk-M2RGJPXX.js.map → chunk-DBD6Q6JH.js.map} +0 -0
- /package/dist/{chunk-ZGDVUPTM.js.map → chunk-EB4RGQO3.js.map} +0 -0
- /package/dist/{chunk-TAAPQVZN.js.map → chunk-ISKNULNH.js.map} +0 -0
- /package/dist/{chunk-66ALHVEX.js.map → chunk-KKIAYH4X.js.map} +0 -0
- /package/dist/{chunk-3RMKLXHX.js.map → chunk-KLDVG3SY.js.map} +0 -0
- /package/dist/{chunk-4CQAV7YB.js.map → chunk-O6TTQXTY.js.map} +0 -0
- /package/dist/{chunk-24VULZ7A.js.map → chunk-TKOGZDD6.js.map} +0 -0
- /package/dist/{chunk-EY4NZKDR.js.map → chunk-XFMMPYNU.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/WorkflowRuntime.ts"],"sourcesContent":["import { Cause, Context, Deferred, Effect, Exit, Fiber, FiberRef, Option, Stream } from 'effect'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport * as Debug from './DebugSink.js'\nimport * as LogicUnitMeta from './LogicUnitMeta.js'\nimport { toSerializableErrorSummary } from './errorSummary.js'\nimport type { AnyModuleShape, LogicPlan, ModuleRuntime as PublicModuleRuntime } from './module.js'\nimport { HostSchedulerTag, TickSchedulerTag } from './env.js'\nimport { currentTxnOriginOverride } from './TxnOriginOverride.js'\nimport { getRuntimeInternals } from './runtimeInternalsAccessor.js'\nimport { RootContextTag, type RootContext } from './RootContext.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport * as EffectOp from '../../effect-op.js'\nimport { makeWorkflowError } from '../../workflow/errors.js'\nimport { compileWorkflowRuntimeStepsV1, type CompiledWorkflowStep } from '../../workflow/compiler.js'\nimport { evalInputExpr, type CompiledInputExpr } from '../../workflow/inputExpr.js'\nimport type { WorkflowDefV1, WorkflowTriggerV1 } from '../../workflow/model.js'\n\ntype ModuleTag = Context.Tag<unknown, PublicModuleRuntime<unknown, unknown>>\n\nexport type WorkflowLike = {\n readonly _tag?: 'Workflow'\n readonly def: WorkflowDefV1\n readonly validate?: () => void\n}\n\ntype ConcurrencyMode = 'latest' | 'exhaust' | 'parallel'\ntype Priority = 'urgent' | 'nonUrgent'\n\ntype ServicePort = (input: unknown) => Effect.Effect<unknown, unknown, unknown>\n\ntype CompiledRuntimeStep =\n | { readonly kind: 'dispatch'; readonly key: string; readonly actionTag: string; readonly payload?: CompiledInputExpr }\n | { readonly kind: 'delay'; readonly key: string; readonly ms: number }\n | {\n readonly kind: 'call'\n readonly key: string\n readonly serviceId: string\n readonly input?: CompiledInputExpr\n readonly timeoutMs?: number\n readonly retryTimes?: number\n readonly port: ServicePort\n readonly onSuccess: ReadonlyArray<CompiledRuntimeStep>\n readonly onFailure: ReadonlyArray<CompiledRuntimeStep>\n }\n\ntype CompiledProgram = {\n readonly programId: string\n readonly localId: string\n readonly trigger: WorkflowTriggerV1\n readonly concurrency: ConcurrencyMode\n readonly priority: Priority\n readonly compiledSteps: ReadonlyArray<CompiledWorkflowStep>\n steps?: ReadonlyArray<CompiledRuntimeStep>\n}\n\ntype ProgramState =\n | { readonly mode: 'latest'; runSeq: number; current?: Fiber.RuntimeFiber<void, never>; currentRunId?: string }\n | { readonly mode: 'exhaust'; runSeq: number; busy: boolean }\n | { readonly mode: 'parallel'; runSeq: number }\n\ntype ProgramEntry = {\n readonly program: CompiledProgram\n readonly state: ProgramState\n}\n\ntype WorkflowRegistryV1 = {\n readonly byActionTag: Map<string, ReadonlyArray<ProgramEntry>>\n readonly entries: Array<ProgramEntry>\n watcherStarted: boolean\n watcherStartCount: number\n portsResolving: boolean\n portsReady: Deferred.Deferred<void, unknown>\n parallelLimiter: Effect.Semaphore | null | undefined\n}\n\nconst WORKFLOW_REGISTRY = Symbol.for('@logixjs/core/workflowRegistry')\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isObjectLike = (value: unknown): value is Record<string, unknown> | ((...args: never[]) => unknown) =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nconst getRegistry = (runtime: object): WorkflowRegistryV1 | undefined =>\n (runtime as Record<PropertyKey, unknown>)[WORKFLOW_REGISTRY] as WorkflowRegistryV1 | undefined\n\nconst resolveActionTag = (action: unknown): string | undefined => {\n const tag = isObjectLike(action) ? (action as Record<string, unknown>)._tag : undefined\n if (typeof tag === 'string' && tag.length > 0) return tag\n const type = isObjectLike(action) ? (action as Record<string, unknown>).type : undefined\n if (typeof type === 'string' && type.length > 0) return type\n if (tag != null) return String(tag)\n if (type != null) return String(type)\n return undefined\n}\n\nconst asNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined\n\nconst KERNEL_PORT_SOURCE_REFRESH = 'logix/kernel/sourceRefresh'\n\nconst resolveServicePort = (\n runtime: PublicModuleRuntime<unknown, unknown>,\n env: Context.Context<unknown>,\n serviceId: string,\n programId: string,\n stepKey: string,\n): ServicePort => {\n if (serviceId === KERNEL_PORT_SOURCE_REFRESH) {\n return (input) =>\n Effect.gen(function* () {\n const fieldPath = asNonEmptyString(isRecord(input) ? input.fieldPath : undefined)\n if (!fieldPath) {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_STEP',\n message: 'KernelPort sourceRefresh requires input.fieldPath (non-empty string).',\n programId,\n source: { stepKey },\n detail: { serviceId, input },\n })\n }\n\n const internals = getRuntimeInternals(runtime)\n const handler = internals.traits.getSourceRefreshHandler(fieldPath)\n\n // If no refresh handler is registered, treat it as a no-op (aligns with BoundApiRuntime behavior).\n if (!handler) {\n return\n }\n\n const force = isRecord(input) && input.force === true\n const runHandler = (state: unknown) =>\n force ? Effect.locally(TaskRunner.forceSourceRefresh, true)(handler(state)) : handler(state)\n\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n const state = yield* runtime.getState\n yield* runHandler(state)\n return\n }\n\n yield* internals.txn.runWithStateTransaction(\n {\n kind: 'source-refresh',\n name: fieldPath,\n },\n () =>\n Effect.gen(function* () {\n const state = yield* runtime.getState\n yield* runHandler(state)\n }),\n )\n })\n }\n\n const tag = Context.GenericTag<unknown>(serviceId)\n const opt = Context.getOption(env, tag)\n if (Option.isNone(opt)) {\n throw makeWorkflowError({\n code: 'WORKFLOW_MISSING_SERVICE',\n message: `Missing service for serviceId=\"${serviceId}\".`,\n programId,\n source: { stepKey },\n detail: { serviceId },\n })\n }\n\n const value: unknown = opt.value\n if (typeof value === 'function') {\n const fn = value as (input: unknown) => Effect.Effect<unknown, unknown, unknown>\n return (input) => fn(input)\n }\n\n const callFn = isObjectLike(value) ? (value as Record<string, unknown>).call : undefined\n if (typeof callFn === 'function') {\n const call = callFn as (this: unknown, input: unknown) => Effect.Effect<unknown, unknown, unknown>\n return (input) => call.call(value, input)\n }\n\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_SERVICE_PORT',\n message: `Invalid service port for serviceId=\"${serviceId}\" (expected a function or { call(input): Effect }).`,\n programId,\n source: { stepKey },\n detail: { serviceId, portType: typeof value },\n })\n}\n\nconst compileSteps = (steps: ReadonlyArray<CompiledWorkflowStep>, resolvePort: (serviceId: string, stepKey: string) => ServicePort) => {\n const visit = (step: CompiledWorkflowStep): CompiledRuntimeStep => {\n switch (step.kind) {\n case 'dispatch':\n return {\n kind: 'dispatch',\n key: step.key,\n actionTag: step.actionTag,\n ...(step.payload ? { payload: step.payload } : null),\n }\n case 'delay':\n return { kind: 'delay', key: step.key, ms: step.ms }\n case 'call':\n return {\n kind: 'call',\n key: step.key,\n serviceId: step.serviceId,\n port: resolvePort(step.serviceId, step.key),\n ...(step.input ? { input: step.input } : null),\n ...(step.timeoutMs !== undefined ? { timeoutMs: step.timeoutMs } : null),\n ...(step.retryTimes !== undefined ? { retryTimes: step.retryTimes } : null),\n onSuccess: step.onSuccess.map(visit),\n onFailure: step.onFailure.map(visit),\n }\n }\n }\n\n return steps.map(visit)\n}\n\nconst resolveConcurrency = (def: WorkflowDefV1): ConcurrencyMode => (def.policy?.concurrency ?? 'parallel') as ConcurrencyMode\nconst resolvePriority = (def: WorkflowDefV1): Priority => (def.policy?.priority ?? 'urgent') as Priority\n\nconst makeRunId = (instanceId: string, programId: string, runSeq: number): string =>\n `${instanceId}::wf:${programId}::r${runSeq}`\n\nconst runBoundary = <A, E, R>(args: {\n readonly kind: EffectOp.EffectOp['kind']\n readonly name: string\n readonly effect: Effect.Effect<A, E, R>\n readonly payload?: unknown\n readonly meta?: EffectOp.EffectOp['meta']\n readonly middleware: EffectOpCore.EffectOpMiddlewareEnv | undefined\n}): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n const op = yield* EffectOp.makeInRunSession({\n kind: args.kind,\n name: args.name,\n effect: args.effect,\n payload: args.payload,\n meta: args.meta,\n })\n const stack = args.middleware?.stack ?? []\n return yield* EffectOp.run(op, stack)\n }) as unknown as Effect.Effect<A, E, R>\n\nconst makeTimer = (args: {\n readonly host: {\n readonly scheduleMicrotask: (cb: () => void) => void\n readonly scheduleTimeout: (ms: number, cb: () => void) => () => void\n }\n readonly ms: number\n readonly onCancel: Effect.Effect<void, never, unknown>\n}): Effect.Effect<void, never, unknown> =>\n Effect.async<void, never, unknown>((resume) => {\n let fired = false\n const cancel = args.host.scheduleTimeout(args.ms, () => {\n fired = true\n // Route resumption through a microtask boundary:\n // - Improves determinism in tests (deterministic HostScheduler).\n // - Avoids deep JS-microtask chains that are invisible to HostScheduler flushing.\n args.host.scheduleMicrotask(() => resume(Effect.void))\n })\n return Effect.sync(() => {\n cancel()\n }).pipe(Effect.zipRight(fired ? Effect.void : args.onCancel))\n })\n\nconst ensureLimiterReady = (registry: WorkflowRegistryV1, runtime: PublicModuleRuntime<unknown, unknown>) =>\n Effect.gen(function* () {\n if (registry.parallelLimiter !== undefined) return\n\n const internals = getRuntimeInternals(runtime)\n const policy = yield* internals.concurrency.resolveConcurrencyPolicy()\n const limit = policy.concurrencyLimit\n if (limit === 'unbounded') {\n registry.parallelLimiter = null\n return\n }\n\n const n = typeof limit === 'number' && Number.isFinite(limit) && limit >= 1 ? Math.floor(limit) : 16\n registry.parallelLimiter = yield* Effect.makeSemaphore(n)\n })\n\nconst withRootEnvIfAvailable = <A, E, R>(eff: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.gen(function* () {\n const rootOpt = yield* Effect.serviceOption(RootContextTag)\n if (Option.isNone(rootOpt)) {\n return yield* eff\n }\n const root: RootContext = rootOpt.value\n const rootEnv = root.context ?? (yield* Deferred.await(root.ready))\n\n const currentEnv = yield* Effect.context<unknown>()\n const mergedEnv = Context.merge(rootEnv as unknown as Context.Context<unknown>, currentEnv)\n return yield* (Effect.provide(eff as unknown as Effect.Effect<A, E, unknown>, mergedEnv) as unknown as Effect.Effect<A, E, R>)\n }) as unknown as Effect.Effect<A, E, R>\n\nconst ensurePortsResolved = (\n registry: WorkflowRegistryV1,\n runtime: PublicModuleRuntime<unknown, unknown>,\n): Effect.Effect<void, unknown, unknown> =>\n Effect.gen(function* () {\n const done = yield* Deferred.isDone(registry.portsReady)\n if (done) {\n yield* Deferred.await(registry.portsReady)\n return\n }\n\n if (registry.portsResolving) {\n yield* Deferred.await(registry.portsReady)\n return\n }\n\n registry.portsResolving = true\n const env = yield* Effect.context<unknown>()\n\n yield* Effect.sync(() => {\n const portCache = new Map<string, ServicePort>()\n for (const entry of registry.entries) {\n const program = entry.program\n if (program.steps) continue\n\n const resolvePort = (serviceId: string, stepKey: string): ServicePort => {\n const cached = portCache.get(serviceId)\n if (cached) return cached\n const resolved = resolveServicePort(runtime, env, serviceId, program.programId, stepKey)\n portCache.set(serviceId, resolved)\n return resolved\n }\n\n program.steps = compileSteps(program.compiledSteps, resolvePort)\n }\n }).pipe(\n Effect.tap(() => Deferred.succeed(registry.portsReady, undefined)),\n Effect.catchAllCause((cause) => Deferred.failCause(registry.portsReady, cause).pipe(Effect.zipRight(Effect.failCause(cause)))),\n Effect.ensuring(\n Effect.sync(() => {\n registry.portsResolving = false\n }),\n ),\n )\n })\n\nconst shouldObserveForRun = (diagnostics: Debug.DiagnosticsLevel, runSeq: number): boolean => {\n if (diagnostics === 'off') return false\n if (diagnostics === 'sampled') {\n // Deterministic sampling (no Math.random): 1/16 by runSeq.\n return (runSeq & 0x0f) === 0\n }\n return true\n}\n\nconst startProgramRun = (args: {\n readonly entry: ProgramEntry\n readonly runtime: PublicModuleRuntime<unknown, unknown>\n readonly registry: WorkflowRegistryV1\n readonly trigger: { readonly kind: 'action'; readonly actionTag: string } | { readonly kind: 'lifecycle'; readonly phase: string }\n readonly payload: unknown\n readonly middleware: EffectOpCore.EffectOpMiddlewareEnv | undefined\n}): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n const { entry, runtime, registry } = args\n const { program, state } = entry\n\n const diagnostics = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n\n const beginRun = (): { readonly runSeq: number; readonly runId: string; readonly canWriteBack: () => boolean } => {\n if (state.mode === 'latest') {\n state.runSeq += 1\n const runSeq = state.runSeq\n const runId = makeRunId(runtime.instanceId, program.programId, runSeq)\n return {\n runSeq,\n runId,\n canWriteBack: () => state.runSeq === runSeq,\n }\n }\n\n state.runSeq += 1\n const runSeq = state.runSeq\n const runId = makeRunId(runtime.instanceId, program.programId, runSeq)\n return {\n runSeq,\n runId,\n canWriteBack: () => true,\n }\n }\n\n if (state.mode === 'exhaust') {\n if (state.busy) {\n if (diagnostics !== 'off') {\n const observe = shouldObserveForRun(diagnostics, state.runSeq)\n const tickSeq = observe ? (yield* TickSchedulerTag).getTickSeq() : undefined\n yield* runBoundary({\n kind: 'flow',\n name: 'workflow.drop',\n payload: { programId: program.programId, trigger: args.trigger },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy: { disableObservers: !observe },\n reason: 'exhaust' as const,\n },\n effect: Effect.void,\n middleware: args.middleware,\n })\n }\n return\n }\n state.busy = true\n }\n\n const { runSeq, runId, canWriteBack } = beginRun()\n\n if (state.mode === 'latest') {\n const prev = state.current\n const prevRunId = state.currentRunId\n if (prev) {\n yield* Fiber.interruptFork(prev)\n if (diagnostics !== 'off') {\n const observe = shouldObserveForRun(diagnostics, runSeq)\n const tickSeq = observe ? (yield* TickSchedulerTag).getTickSeq() : undefined\n yield* runBoundary({\n kind: 'flow',\n name: 'workflow.cancel',\n payload: { programId: program.programId, cancelled: prevRunId, by: runId },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy: { disableObservers: !observe },\n reason: 'latest' as const,\n cancelledByRunId: runId,\n cancelledRunId: prevRunId,\n },\n effect: Effect.void,\n middleware: args.middleware,\n })\n }\n }\n state.currentRunId = runId\n }\n\n const observe = shouldObserveForRun(diagnostics, runSeq)\n const policy = { disableObservers: !observe } satisfies NonNullable<EffectOp.EffectOp['meta']>['policy']\n\n const programEffect = Effect.gen(function* () {\n const host = yield* HostSchedulerTag\n const tick = yield* TickSchedulerTag\n\n if (!program.steps) {\n const env = yield* Effect.context<unknown>()\n const portCache = new Map<string, ServicePort>()\n const resolvePort = (serviceId: string, stepKey: string): ServicePort => {\n const cached = portCache.get(serviceId)\n if (cached) return cached\n const resolved = resolveServicePort(runtime, env, serviceId, program.programId, stepKey)\n portCache.set(serviceId, resolved)\n return resolved\n }\n program.steps = compileSteps(program.compiledSteps, resolvePort)\n }\n\n const getTickSeq = (): number | undefined => (observe ? tick.getTickSeq() : undefined)\n const emitTimerEvents = observe && diagnostics === 'full'\n\n const evalPayload = (expr: CompiledInputExpr | undefined): unknown => (expr ? evalInputExpr(expr, args.payload) : undefined)\n\n const defaultInputForCall = (): unknown =>\n args.trigger.kind === 'action' ? args.payload : undefined\n\n let timerTriggered = false\n\n const runSteps = (steps: ReadonlyArray<CompiledRuntimeStep>): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n for (const step of steps) {\n if (!canWriteBack()) return\n\n if (step.kind === 'dispatch') {\n const payload = evalPayload(step.payload)\n const action = { _tag: step.actionTag, payload }\n const tickSeq = getTickSeq()\n\n const dispatchEffectBase =\n program.priority === 'nonUrgent' ? runtime.dispatchLowPriority(action) : runtime.dispatch(action)\n\n const dispatchEffect = timerTriggered\n ? Effect.locally(\n currentTxnOriginOverride,\n {\n kind: 'workflow.timer',\n name: `timer:${program.programId}:${step.key}`,\n },\n )(dispatchEffectBase)\n : dispatchEffectBase\n\n yield* runBoundary({\n kind: 'flow',\n name: 'workflow.dispatch',\n payload: { actionTag: step.actionTag },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n runId,\n stepKey: step.key,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n },\n effect: dispatchEffect,\n middleware: args.middleware,\n }).pipe(Effect.asVoid)\n continue\n }\n\n if (step.kind === 'delay') {\n const timerId = emitTimerEvents ? `${runId}::timer:${step.key}` : undefined\n\n const recordTimerEvent = (name: string, patchMeta?: Record<string, unknown>) =>\n Effect.gen(function* () {\n const tickSeq = getTickSeq()\n yield* runBoundary({\n kind: 'flow',\n name,\n payload: { ms: step.ms },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n runId,\n stepKey: step.key,\n ...(timerId ? { timerId } : null),\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n ...(patchMeta ?? null),\n },\n effect: Effect.void,\n middleware: args.middleware,\n })\n })\n\n const schedule = emitTimerEvents ? recordTimerEvent('workflow.timer.schedule') : Effect.void\n const onCancel = emitTimerEvents ? recordTimerEvent('workflow.timer.cancel', { reason: 'interrupt' }) : Effect.void\n const fired = emitTimerEvents ? recordTimerEvent('workflow.timer.fired') : Effect.void\n\n const delayEffect = schedule.pipe(\n Effect.zipRight(makeTimer({ host, ms: step.ms, onCancel })),\n Effect.zipRight(fired),\n )\n\n const tickSeq = getTickSeq()\n\n yield* runBoundary({\n kind: 'flow',\n name: 'workflow.delay',\n payload: { ms: step.ms },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n runId,\n stepKey: step.key,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n ...(timerId ? { timerId } : null),\n policy,\n },\n effect: delayEffect,\n middleware: args.middleware,\n }).pipe(Effect.asVoid)\n\n timerTriggered = true\n continue\n }\n\n // call\n const input = step.input ? evalInputExpr(step.input, args.payload) : defaultInputForCall()\n const maxRetries = step.retryTimes ?? 0\n // Attempt id is 1-based and stable within a run.\n let exit: Exit.Exit<unknown, unknown> | undefined\n for (let attempt = 1; attempt <= maxRetries + 1; attempt += 1) {\n const tickSeq = getTickSeq()\n\n const base = runBoundary({\n kind: 'service',\n name: `workflow.call:${step.serviceId}`,\n payload: { serviceId: step.serviceId },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n runId,\n stepKey: step.key,\n serviceId: step.serviceId,\n attempt,\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n },\n effect: step.port(input),\n middleware: args.middleware,\n })\n\n const withTimeout =\n step.timeoutMs === undefined\n ? base\n : Effect.gen(function* () {\n const timeoutMs = step.timeoutMs\n if (timeoutMs === undefined) {\n // Defensive: TS doesn't keep narrowing across generator boundaries.\n return yield* base\n }\n\n // Unique per attempt (otherwise retries would reuse the same timerId and break explainability).\n const timerId = emitTimerEvents ? `${runId}::timeout:${step.key}:a${attempt}` : undefined\n\n const recordTimeoutEvent = (name: string, patchMeta?: Record<string, unknown>) =>\n Effect.gen(function* () {\n const tickSeq = getTickSeq()\n yield* runBoundary({\n kind: 'flow',\n name,\n payload: { ms: timeoutMs },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n runId,\n stepKey: step.key,\n attempt,\n ...(timerId ? { timerId } : null),\n ...(tickSeq !== undefined ? { tickSeq } : null),\n policy,\n ...(patchMeta ?? null),\n },\n effect: Effect.void,\n middleware: args.middleware,\n })\n })\n\n const schedule = emitTimerEvents ? recordTimeoutEvent('workflow.timeout.schedule') : Effect.void\n const onCancel = emitTimerEvents\n ? recordTimeoutEvent('workflow.timeout.cancel', { reason: 'interrupt' })\n : Effect.void\n const fired = emitTimerEvents ? recordTimeoutEvent('workflow.timeout.fired') : Effect.void\n\n const timeoutError = makeWorkflowError({\n code: 'WORKFLOW_CALL_TIMEOUT',\n message: `Workflow call timed out (serviceId=\"${step.serviceId}\", timeoutMs=${timeoutMs}).`,\n programId: program.programId,\n source: { stepKey: step.key },\n detail: { serviceId: step.serviceId, timeoutMs, attempt },\n })\n\n const timeoutFail = schedule.pipe(\n Effect.zipRight(makeTimer({ host, ms: timeoutMs, onCancel })),\n Effect.zipRight(fired),\n Effect.zipRight(Effect.fail(timeoutError)),\n )\n\n return yield* Effect.raceFirst(base, timeoutFail)\n })\n\n const attemptExit = yield* Effect.exit(withTimeout)\n exit = attemptExit\n\n if (!canWriteBack() || Exit.isSuccess(attemptExit)) {\n break\n }\n\n // Do not retry defects/interrupts; only retry failure-channel errors.\n if (Cause.isInterrupted(attemptExit.cause) || Option.isNone(Cause.failureOption(attemptExit.cause))) {\n break\n }\n\n // Retry if we still have remaining attempts.\n if (attempt < maxRetries + 1) {\n continue\n }\n\n break\n }\n\n // Defensive: attempt loop always runs at least once.\n if (!exit) {\n exit = Exit.succeed(undefined) as Exit.Exit<unknown, unknown>\n }\n\n if (!canWriteBack()) return\n\n if (Exit.isSuccess(exit)) {\n yield* runSteps(step.onSuccess)\n } else {\n // Timeout uses a timer; mark the continuation as timer-triggered (for trace:tick.triggerSummary).\n const failure = Option.getOrUndefined(Cause.failureOption(exit.cause))\n const isTimeout =\n isObjectLike(failure) &&\n (failure as Record<string, unknown>)._tag === 'WorkflowError' &&\n (failure as Record<string, unknown>).code === 'WORKFLOW_CALL_TIMEOUT'\n if (isTimeout) timerTriggered = true\n yield* runSteps(step.onFailure)\n }\n }\n })\n\n const runTickSeq = getTickSeq()\n yield* runBoundary({\n kind: 'flow',\n name: 'workflow.run',\n payload: { trigger: args.trigger },\n meta: {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n programId: program.programId,\n runId,\n ...(runTickSeq !== undefined ? { tickSeq: runTickSeq } : null),\n policy,\n },\n effect: runSteps(program.steps!),\n middleware: args.middleware,\n }).pipe(Effect.asVoid)\n })\n\n const limited = registry.parallelLimiter ? registry.parallelLimiter.withPermits(1)(programEffect) : programEffect\n\n const fiber = yield* Effect.forkScoped(\n limited.pipe(\n Effect.catchAllCause((cause) => {\n const { errorSummary, downgrade } = toSerializableErrorSummary(cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n return Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'workflow::run_crashed',\n severity: 'error',\n message: `Workflow run crashed for programId=\"${program.programId}\" runId=\"${runId}\".${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n actionTag: args.trigger.kind === 'action' ? args.trigger.actionTag : undefined,\n kind: 'workflow_run_crashed',\n trigger: {\n kind: 'workflow',\n name: 'run',\n details: {\n programId: program.programId,\n runId,\n trigger: args.trigger,\n },\n },\n }).pipe(Effect.catchAllCause(() => Effect.void))\n }),\n Effect.ensuring(\n Effect.sync(() => {\n if (state.mode === 'exhaust') {\n state.busy = false\n }\n }),\n ),\n ),\n )\n\n if (state.mode === 'latest') {\n state.current = fiber as Fiber.RuntimeFiber<void, never>\n }\n })\n\ntype RegistryInit = {\n readonly moduleId: string\n readonly instanceId: string\n readonly registry: WorkflowRegistryV1\n}\n\nconst ensureRegistry = (runtime: PublicModuleRuntime<unknown, unknown>) =>\n Effect.gen(function* () {\n const existing = getRegistry(runtime)\n if (existing) {\n return {\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n registry: existing,\n }\n }\n\n const portsReady = yield* Deferred.make<void, unknown>()\n\n const next: WorkflowRegistryV1 = {\n byActionTag: new Map(),\n entries: [],\n watcherStarted: false,\n watcherStartCount: 0,\n portsResolving: false,\n portsReady,\n parallelLimiter: undefined,\n }\n\n Object.defineProperty(runtime, WORKFLOW_REGISTRY, {\n value: next,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n\n return { moduleId: runtime.moduleId, instanceId: runtime.instanceId, registry: next }\n })\n\nconst registerPrograms = (args: {\n readonly moduleTag: ModuleTag\n readonly programs: ReadonlyArray<WorkflowLike>\n readonly entryLabel: string\n}): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n const runtime = yield* args.moduleTag\n const { moduleId, instanceId, registry } = yield* ensureRegistry(runtime)\n\n // Lazily resolve the global parallel limiter once.\n if (registry.parallelLimiter === undefined) {\n yield* ensureLimiterReady(registry, runtime)\n }\n\n const validateNoIoStepsForOnInit = (steps: ReadonlyArray<CompiledWorkflowStep>, programId: string): void => {\n const visit = (step: CompiledWorkflowStep): void => {\n if (step.kind === 'call' || step.kind === 'delay') {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_TRIGGER',\n message: 'Lifecycle onInit programs must not include call/delay (initRequired must stay sync-only; use onStart for IO/time).',\n programId,\n source: { stepKey: step.key },\n detail: { kind: step.kind },\n })\n }\n }\n for (const s of steps) visit(s)\n }\n\n const programHasCall = (steps: ReadonlyArray<CompiledWorkflowStep>): boolean =>\n steps.some((s) => s.kind === 'call')\n\n const insertEntry = (actionTag: string, entry: ProgramEntry): void => {\n const prev = registry.byActionTag.get(actionTag)\n registry.byActionTag.set(actionTag, prev ? [...prev, entry] : [entry])\n }\n\n const internals = getRuntimeInternals(runtime)\n\n for (const program of args.programs) {\n const def = program.def\n const localId = asNonEmptyString(def.localId)\n if (!localId) {\n throw makeWorkflowError({\n code: 'WORKFLOW_INVALID_DEF',\n message: 'Workflow.install: def.localId must be a non-empty string.',\n detail: { localId: def.localId },\n })\n }\n\n const programId = `${moduleId}.${localId}`\n const compiled = compileWorkflowRuntimeStepsV1({ def })\n\n if (def.trigger.kind === 'lifecycle' && def.trigger.phase === 'onInit') {\n validateNoIoStepsForOnInit(compiled, programId)\n }\n\n const compiledProgram: CompiledProgram = {\n programId,\n localId,\n trigger: def.trigger,\n concurrency: resolveConcurrency(def),\n priority: resolvePriority(def),\n compiledSteps: compiled,\n }\n\n if (!programHasCall(compiled)) {\n compiledProgram.steps = compileSteps(compiled, () => {\n throw makeWorkflowError({\n code: 'WORKFLOW_MISSING_SERVICE',\n message: 'Internal error: unexpected call step while resolving call-less program.',\n programId,\n detail: { programId },\n })\n })\n }\n\n const state: ProgramState =\n compiledProgram.concurrency === 'latest'\n ? { mode: 'latest', runSeq: 0, current: undefined, currentRunId: undefined }\n : compiledProgram.concurrency === 'exhaust'\n ? { mode: 'exhaust', runSeq: 0, busy: false }\n : { mode: 'parallel', runSeq: 0 }\n\n const entry: ProgramEntry = { program: compiledProgram, state }\n registry.entries.push(entry)\n\n if (def.trigger.kind === 'action') {\n insertEntry(def.trigger.actionTag, entry)\n } else {\n if (def.trigger.phase === 'onStart') {\n internals.lifecycle.registerStart(\n withRootEnvIfAvailable(\n Effect.gen(function* () {\n const middlewareOpt = yield* Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag)\n const middleware = Option.isSome(middlewareOpt) ? middlewareOpt.value : undefined\n yield* ensurePortsResolved(registry, runtime).pipe(Effect.orDie)\n yield* startProgramRun({\n entry,\n runtime,\n registry,\n trigger: { kind: 'lifecycle', phase: 'onStart' },\n payload: undefined,\n middleware,\n })\n }),\n ),\n { name: `workflow:${localId}` },\n )\n } else {\n internals.lifecycle.registerInitRequired(\n Effect.gen(function* () {\n const middlewareOpt = yield* Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag)\n const middleware = Option.isSome(middlewareOpt) ? middlewareOpt.value : undefined\n yield* startProgramRun({\n entry,\n runtime,\n registry,\n trigger: { kind: 'lifecycle', phase: 'onInit' },\n payload: undefined,\n middleware,\n })\n }),\n { name: `workflow:${localId}` },\n )\n }\n }\n }\n\n void instanceId\n })\n\nconst startWatcherIfNeeded = (args: {\n readonly moduleTag: ModuleTag\n readonly entryLabel: string\n}): Effect.Effect<void, never, unknown> =>\n Effect.gen(function* () {\n const runtime = yield* args.moduleTag\n const init = yield* ensureRegistry(runtime)\n const registry = init.registry\n\n if (registry.watcherStarted) {\n return\n }\n\n registry.watcherStarted = true\n registry.watcherStartCount += 1\n\n const middlewareOpt = yield* Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag)\n const middleware = Option.isSome(middlewareOpt) ? middlewareOpt.value : undefined\n\n const actions$ = runtime.actions$ as Stream.Stream<unknown>\n\n const portsExit = yield* Effect.exit(ensurePortsResolved(registry, runtime))\n if (Exit.isFailure(portsExit)) {\n const { errorSummary, downgrade } = toSerializableErrorSummary(portsExit.cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'workflow::ports_resolution_failed',\n severity: 'error',\n message: `Workflow ports resolution failed before starting watcher.${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n kind: 'workflow_ports_resolution_failed',\n trigger: {\n kind: 'workflow',\n name: 'portsResolution',\n details: {\n entryLabel: args.entryLabel,\n },\n },\n })\n return\n }\n\n yield* Stream.runForEach(actions$, (action) =>\n Effect.gen(function* () {\n const actionTag = resolveActionTag(action)\n if (!actionTag) return\n\n const entries = registry.byActionTag.get(actionTag)\n if (!entries || entries.length === 0) return\n\n const payload = isRecord(action) ? action.payload : undefined\n\n yield* Effect.forEach(\n entries,\n (entry) =>\n startProgramRun({\n entry,\n runtime,\n registry,\n trigger: { kind: 'action', actionTag },\n payload,\n middleware,\n }),\n { discard: true },\n )\n }),\n ).pipe(\n Effect.catchAllCause((cause) => {\n const { errorSummary, downgrade } = toSerializableErrorSummary(cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n return Debug.record({\n type: 'diagnostic',\n moduleId: runtime.moduleId,\n instanceId: runtime.instanceId,\n code: 'workflow::watcher_crashed',\n severity: 'error',\n message: `Workflow watcher crashed.${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n kind: 'workflow_watcher_crashed',\n trigger: {\n kind: 'workflow',\n name: 'watcher',\n details: {\n entryLabel: args.entryLabel,\n },\n },\n })\n }),\n )\n\n void args.entryLabel\n })\n\nexport const mountAll = (args: {\n readonly moduleTag: ModuleTag\n readonly programs: ReadonlyArray<WorkflowLike>\n}): LogicPlan<AnyModuleShape, unknown, never> => {\n const plan = {\n setup: registerPrograms({ moduleTag: args.moduleTag, programs: args.programs, entryLabel: 'mountAll' }),\n run: startWatcherIfNeeded({ moduleTag: args.moduleTag, entryLabel: 'mountAll' }),\n } satisfies LogicPlan<AnyModuleShape, unknown, never>\n\n LogicUnitMeta.attachLogicUnitMeta(plan, {\n id: '__logix_internal:workflows',\n kind: 'internal',\n name: 'workflows',\n })\n\n return plan\n}\n\nexport const installOne = (args: {\n readonly moduleTag: ModuleTag\n readonly program: WorkflowLike\n}): LogicPlan<AnyModuleShape, unknown, never> => {\n const localId = asNonEmptyString(args.program.def.localId) ?? 'unknown'\n const plan = {\n setup: registerPrograms({ moduleTag: args.moduleTag, programs: [args.program], entryLabel: `install:${localId}` }),\n run: startWatcherIfNeeded({ moduleTag: args.moduleTag, entryLabel: `install:${localId}` }),\n } satisfies LogicPlan<AnyModuleShape, unknown, never>\n\n LogicUnitMeta.attachLogicUnitMeta(plan, {\n id: `workflow:${localId}`,\n kind: 'workflow',\n name: localId,\n })\n\n return plan\n}\n\n// test-only probe: whether a watcher has started (for single-subscription gates).\nexport const __unsafeGetWatcherStartCount = (runtime: unknown): number => {\n if (!runtime || typeof runtime !== 'object') return 0\n const reg = getRegistry(runtime)\n return reg ? reg.watcherStartCount : 0\n}\n"],"mappings":"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","names":["runSeq","runId","observe","tickSeq"]}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getModuleProgramById
|
|
3
|
+
} from "./chunk-KKIAYH4X.js";
|
|
4
|
+
import {
|
|
5
|
+
appendConvergeStaticIrCollectors
|
|
6
|
+
} from "./chunk-M3BFQ7HK.js";
|
|
7
|
+
import {
|
|
8
|
+
getModuleTraitsProgram,
|
|
9
|
+
getRuntimeInternals
|
|
10
|
+
} from "./chunk-KLDVG3SY.js";
|
|
11
|
+
import {
|
|
12
|
+
clearDevtoolsEvents,
|
|
13
|
+
configureDevtoolsHub,
|
|
14
|
+
devtoolsHubConvergeStaticIrCollector,
|
|
15
|
+
devtoolsHubSink,
|
|
16
|
+
exportDevtoolsEvidencePackage,
|
|
17
|
+
getDevtoolsRunId,
|
|
18
|
+
getDevtoolsSnapshot,
|
|
19
|
+
getDevtoolsSnapshotToken,
|
|
20
|
+
getInstanceLabel,
|
|
21
|
+
getNodeEnv,
|
|
22
|
+
isDevtoolsEnabled,
|
|
23
|
+
setDevtoolsRunId,
|
|
24
|
+
setInstanceLabel,
|
|
25
|
+
startDevtoolsRun,
|
|
26
|
+
subscribeDevtoolsSnapshot
|
|
27
|
+
} from "./chunk-AQ7L2QZ5.js";
|
|
28
|
+
import {
|
|
29
|
+
browserConsoleLayer,
|
|
30
|
+
browserDiagnosticConsoleLayer,
|
|
31
|
+
currentDebugSinks,
|
|
32
|
+
currentDiagnosticsLevel,
|
|
33
|
+
currentRuntimeLabel,
|
|
34
|
+
currentTraitConvergeDiagnosticsSampling,
|
|
35
|
+
errorOnlyLayer,
|
|
36
|
+
noopLayer,
|
|
37
|
+
record,
|
|
38
|
+
toRuntimeDebugEventRef,
|
|
39
|
+
traitConvergeDiagnosticsSampling
|
|
40
|
+
} from "./chunk-ZC7MSQ5U.js";
|
|
41
|
+
import {
|
|
42
|
+
__export
|
|
43
|
+
} from "./chunk-PZ5AY32C.js";
|
|
44
|
+
|
|
45
|
+
// src/Debug.ts
|
|
46
|
+
var Debug_exports = {};
|
|
47
|
+
__export(Debug_exports, {
|
|
48
|
+
appendSinks: () => appendSinks,
|
|
49
|
+
clearDevtoolsEvents: () => clearDevtoolsEvents2,
|
|
50
|
+
devtoolsHubLayer: () => devtoolsHubLayer,
|
|
51
|
+
diagnosticsLevel: () => diagnosticsLevel,
|
|
52
|
+
exportEvidencePackage: () => exportEvidencePackage,
|
|
53
|
+
getDevtoolsRunId: () => getDevtoolsRunId2,
|
|
54
|
+
getDevtoolsSnapshot: () => getDevtoolsSnapshot2,
|
|
55
|
+
getDevtoolsSnapshotToken: () => getDevtoolsSnapshotToken2,
|
|
56
|
+
getInstanceLabel: () => getInstanceLabel2,
|
|
57
|
+
getModuleFinalTraits: () => getModuleFinalTraits,
|
|
58
|
+
getModuleTraits: () => getModuleTraits,
|
|
59
|
+
getModuleTraitsById: () => getModuleTraitsById,
|
|
60
|
+
getModuleTraitsSnapshot: () => getModuleTraitsSnapshot,
|
|
61
|
+
internal: () => internal,
|
|
62
|
+
isDevtoolsEnabled: () => isDevtoolsEnabled2,
|
|
63
|
+
layer: () => layer,
|
|
64
|
+
makeModuleRuntimeCounterSink: () => makeModuleRuntimeCounterSink,
|
|
65
|
+
makeRingBufferSink: () => makeRingBufferSink,
|
|
66
|
+
noopLayer: () => noopLayer2,
|
|
67
|
+
record: () => record2,
|
|
68
|
+
replace: () => replace,
|
|
69
|
+
runtimeLabel: () => runtimeLabel,
|
|
70
|
+
setDevtoolsRunId: () => setDevtoolsRunId2,
|
|
71
|
+
setInstanceLabel: () => setInstanceLabel2,
|
|
72
|
+
startDevtoolsRun: () => startDevtoolsRun2,
|
|
73
|
+
subscribeDevtoolsSnapshot: () => subscribeDevtoolsSnapshot2,
|
|
74
|
+
toRuntimeDebugEventRef: () => toRuntimeDebugEventRef2,
|
|
75
|
+
traceLayer: () => traceLayer,
|
|
76
|
+
traitConvergeDiagnosticsSampling: () => traitConvergeDiagnosticsSampling2,
|
|
77
|
+
withPrettyLogger: () => withPrettyLogger
|
|
78
|
+
});
|
|
79
|
+
import { Effect, Layer, Logger } from "effect";
|
|
80
|
+
var toRuntimeDebugEventRef2 = toRuntimeDebugEventRef;
|
|
81
|
+
var internal = {
|
|
82
|
+
currentDebugSinks,
|
|
83
|
+
currentRuntimeLabel,
|
|
84
|
+
currentDiagnosticsLevel,
|
|
85
|
+
currentTraitConvergeDiagnosticsSampling,
|
|
86
|
+
toRuntimeDebugEventRef
|
|
87
|
+
};
|
|
88
|
+
var getDevtoolsSnapshot2 = getDevtoolsSnapshot;
|
|
89
|
+
var getDevtoolsSnapshotToken2 = getDevtoolsSnapshotToken;
|
|
90
|
+
var subscribeDevtoolsSnapshot2 = subscribeDevtoolsSnapshot;
|
|
91
|
+
var clearDevtoolsEvents2 = clearDevtoolsEvents;
|
|
92
|
+
var getDevtoolsRunId2 = getDevtoolsRunId;
|
|
93
|
+
var setDevtoolsRunId2 = setDevtoolsRunId;
|
|
94
|
+
var startDevtoolsRun2 = startDevtoolsRun;
|
|
95
|
+
var setInstanceLabel2 = setInstanceLabel;
|
|
96
|
+
var getInstanceLabel2 = getInstanceLabel;
|
|
97
|
+
var exportEvidencePackage = (options) => exportDevtoolsEvidencePackage(options);
|
|
98
|
+
var diagnosticsLevel = (level) => Layer.fiberRefLocallyScopedWith(currentDiagnosticsLevel, () => level);
|
|
99
|
+
var traitConvergeDiagnosticsSampling2 = (config) => traitConvergeDiagnosticsSampling(config);
|
|
100
|
+
var isDevtoolsEnabled2 = isDevtoolsEnabled;
|
|
101
|
+
var makeModuleRuntimeCounterSink = () => {
|
|
102
|
+
const counts = /* @__PURE__ */ new Map();
|
|
103
|
+
const sink = {
|
|
104
|
+
record: (event) => Effect.sync(() => {
|
|
105
|
+
if (event.type === "module:init") {
|
|
106
|
+
const moduleId = event.moduleId ?? "unknown";
|
|
107
|
+
const runtimeLabel2 = "runtimeLabel" in event && event.runtimeLabel ? event.runtimeLabel : "unknown";
|
|
108
|
+
const key = `${runtimeLabel2}::${moduleId}`;
|
|
109
|
+
const prev = counts.get(key) ?? 0;
|
|
110
|
+
counts.set(key, prev + 1);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (event.type === "module:destroy") {
|
|
114
|
+
const moduleId = event.moduleId ?? "unknown";
|
|
115
|
+
const runtimeLabel2 = "runtimeLabel" in event && event.runtimeLabel ? event.runtimeLabel : "unknown";
|
|
116
|
+
const key = `${runtimeLabel2}::${moduleId}`;
|
|
117
|
+
const prev = counts.get(key) ?? 0;
|
|
118
|
+
const next = prev - 1;
|
|
119
|
+
if (next <= 0) {
|
|
120
|
+
counts.delete(key);
|
|
121
|
+
} else {
|
|
122
|
+
counts.set(key, next);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
};
|
|
127
|
+
const getSnapshot = () => new Map(counts);
|
|
128
|
+
return { sink, getSnapshot };
|
|
129
|
+
};
|
|
130
|
+
var makeRingBufferSink = (capacity = 1e3) => {
|
|
131
|
+
const buffer = [];
|
|
132
|
+
const sink = {
|
|
133
|
+
record: (event) => Effect.sync(() => {
|
|
134
|
+
if (capacity <= 0) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (buffer.length >= capacity) {
|
|
138
|
+
buffer.shift();
|
|
139
|
+
}
|
|
140
|
+
buffer.push(event);
|
|
141
|
+
})
|
|
142
|
+
};
|
|
143
|
+
const getSnapshot = () => buffer.slice();
|
|
144
|
+
const clear = () => {
|
|
145
|
+
buffer.length = 0;
|
|
146
|
+
};
|
|
147
|
+
return { sink, getSnapshot, clear };
|
|
148
|
+
};
|
|
149
|
+
var record2 = record;
|
|
150
|
+
var noopLayer2 = noopLayer;
|
|
151
|
+
var resolveMode = (mode) => {
|
|
152
|
+
if (mode && mode !== "auto") {
|
|
153
|
+
return mode;
|
|
154
|
+
}
|
|
155
|
+
const env = getNodeEnv();
|
|
156
|
+
return env === "production" ? "prod" : "dev";
|
|
157
|
+
};
|
|
158
|
+
var layer = (options) => {
|
|
159
|
+
const mode = resolveMode(options?.mode);
|
|
160
|
+
const diagnostics = options?.diagnosticsLevel;
|
|
161
|
+
const sinks = (() => {
|
|
162
|
+
switch (mode) {
|
|
163
|
+
case "off":
|
|
164
|
+
return noopLayer;
|
|
165
|
+
case "prod":
|
|
166
|
+
return errorOnlyLayer;
|
|
167
|
+
case "dev":
|
|
168
|
+
case "auto": {
|
|
169
|
+
return options?.devConsole === "diagnostic" ? browserDiagnosticConsoleLayer : browserConsoleLayer;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
})();
|
|
173
|
+
return diagnostics ? Layer.mergeAll(sinks, diagnosticsLevel(diagnostics)) : sinks;
|
|
174
|
+
};
|
|
175
|
+
var withPrettyLogger = (base, options) => Layer.merge(
|
|
176
|
+
base,
|
|
177
|
+
Logger.replace(Logger.defaultLogger, Logger.prettyLogger(options))
|
|
178
|
+
);
|
|
179
|
+
var replace = (sinks) => Layer.locallyScoped(internal.currentDebugSinks, sinks);
|
|
180
|
+
var appendSinks = (sinks) => Layer.fiberRefLocallyScopedWith(currentDebugSinks, (current) => [
|
|
181
|
+
...current,
|
|
182
|
+
...sinks
|
|
183
|
+
]);
|
|
184
|
+
function devtoolsHubLayer(baseOrOptions, maybeOptions) {
|
|
185
|
+
const isLayerValue = (value) => typeof value === "object" && value !== null && "_op_layer" in value;
|
|
186
|
+
const hasBase = isLayerValue(baseOrOptions);
|
|
187
|
+
const base = hasBase ? baseOrOptions : Layer.empty;
|
|
188
|
+
const options = hasBase ? maybeOptions : baseOrOptions;
|
|
189
|
+
configureDevtoolsHub(options);
|
|
190
|
+
const append = appendSinks([devtoolsHubSink]);
|
|
191
|
+
const appendConvergeStaticIr = appendConvergeStaticIrCollectors([
|
|
192
|
+
devtoolsHubConvergeStaticIrCollector
|
|
193
|
+
]);
|
|
194
|
+
const enableExportableDiagnostics = diagnosticsLevel(options?.diagnosticsLevel ?? "light");
|
|
195
|
+
const convergeSamplingLayer = options?.traitConvergeDiagnosticsSampling ? traitConvergeDiagnosticsSampling2(options.traitConvergeDiagnosticsSampling) : Layer.empty;
|
|
196
|
+
return Layer.provideMerge(
|
|
197
|
+
Layer.mergeAll(append, enableExportableDiagnostics, convergeSamplingLayer, appendConvergeStaticIr),
|
|
198
|
+
base
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
var runtimeLabel = (label) => Layer.fiberRefLocallyScopedWith(internal.currentRuntimeLabel, () => label);
|
|
202
|
+
var getModuleTraits = (module) => {
|
|
203
|
+
const moduleTag = module.tag ? module.tag : module;
|
|
204
|
+
const program = getModuleTraitsProgram(moduleTag);
|
|
205
|
+
if (!program) {
|
|
206
|
+
return {};
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
program,
|
|
210
|
+
graph: program.graph,
|
|
211
|
+
plan: program.plan
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
var getModuleTraitsById = (moduleId) => {
|
|
215
|
+
const program = getModuleProgramById(moduleId);
|
|
216
|
+
if (!program) {
|
|
217
|
+
return void 0;
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
program,
|
|
221
|
+
graph: program.graph,
|
|
222
|
+
plan: program.plan
|
|
223
|
+
};
|
|
224
|
+
};
|
|
225
|
+
var getModuleTraitsSnapshot = (runtime) => {
|
|
226
|
+
try {
|
|
227
|
+
const internals = getRuntimeInternals(runtime);
|
|
228
|
+
return internals.traits.getModuleTraitsSnapshot();
|
|
229
|
+
} catch {
|
|
230
|
+
return void 0;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
var getModuleFinalTraits = (runtime) => {
|
|
234
|
+
const snapshot = getModuleTraitsSnapshot(runtime);
|
|
235
|
+
if (!snapshot) return [];
|
|
236
|
+
return snapshot.traits.map((t) => ({
|
|
237
|
+
traitId: t.traitId,
|
|
238
|
+
name: t.name,
|
|
239
|
+
description: t.description,
|
|
240
|
+
provenance: snapshot.provenanceIndex[t.traitId]
|
|
241
|
+
}));
|
|
242
|
+
};
|
|
243
|
+
var isLayer = (value) => typeof value === "object" && value !== null && "_op_layer" in value;
|
|
244
|
+
function traceLayer(baseOrHandler, maybeOnTrace) {
|
|
245
|
+
const hasBase = isLayer(baseOrHandler);
|
|
246
|
+
const base = hasBase ? baseOrHandler : Layer.empty;
|
|
247
|
+
const onTrace = hasBase ? maybeOnTrace : baseOrHandler;
|
|
248
|
+
const traceSink = {
|
|
249
|
+
record: (event) => typeof event.type === "string" && event.type.startsWith("trace:") ? onTrace ? onTrace(event) : Effect.logDebug({ traceEvent: event }) : Effect.void
|
|
250
|
+
};
|
|
251
|
+
const appendTrace = Layer.fiberRefLocallyScopedWith(currentDebugSinks, (sinks) => [...sinks, traceSink]);
|
|
252
|
+
return Layer.provideMerge(appendTrace, base);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export {
|
|
256
|
+
toRuntimeDebugEventRef2 as toRuntimeDebugEventRef,
|
|
257
|
+
internal,
|
|
258
|
+
getDevtoolsSnapshot2 as getDevtoolsSnapshot,
|
|
259
|
+
getDevtoolsSnapshotToken2 as getDevtoolsSnapshotToken,
|
|
260
|
+
subscribeDevtoolsSnapshot2 as subscribeDevtoolsSnapshot,
|
|
261
|
+
clearDevtoolsEvents2 as clearDevtoolsEvents,
|
|
262
|
+
getDevtoolsRunId2 as getDevtoolsRunId,
|
|
263
|
+
setDevtoolsRunId2 as setDevtoolsRunId,
|
|
264
|
+
startDevtoolsRun2 as startDevtoolsRun,
|
|
265
|
+
setInstanceLabel2 as setInstanceLabel,
|
|
266
|
+
getInstanceLabel2 as getInstanceLabel,
|
|
267
|
+
exportEvidencePackage,
|
|
268
|
+
diagnosticsLevel,
|
|
269
|
+
traitConvergeDiagnosticsSampling2 as traitConvergeDiagnosticsSampling,
|
|
270
|
+
isDevtoolsEnabled2 as isDevtoolsEnabled,
|
|
271
|
+
makeModuleRuntimeCounterSink,
|
|
272
|
+
makeRingBufferSink,
|
|
273
|
+
record2 as record,
|
|
274
|
+
noopLayer2 as noopLayer,
|
|
275
|
+
layer,
|
|
276
|
+
withPrettyLogger,
|
|
277
|
+
replace,
|
|
278
|
+
appendSinks,
|
|
279
|
+
devtoolsHubLayer,
|
|
280
|
+
runtimeLabel,
|
|
281
|
+
getModuleTraits,
|
|
282
|
+
getModuleTraitsById,
|
|
283
|
+
getModuleTraitsSnapshot,
|
|
284
|
+
getModuleFinalTraits,
|
|
285
|
+
traceLayer,
|
|
286
|
+
Debug_exports
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=chunk-4LODUXFI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Debug.ts"],"sourcesContent":["import { Effect, Layer, Logger } from 'effect'\nimport type { AnyModuleShape, ModuleLike, ModuleRuntime, ModuleTag } from './internal/module.js'\nimport type { StateTraitProgram, StateTraitGraph, StateTraitPlan } from './StateTrait.js'\nimport * as Internal from './internal/runtime/core/DebugSink.js'\nimport * as DevtoolsHub from './internal/runtime/core/DevtoolsHub.js'\nimport * as ConvergeStaticIrCollector from './internal/runtime/core/ConvergeStaticIrCollector.js'\nimport * as ModuleTraitsRegistry from './internal/debug/ModuleTraitsRegistry.js'\nimport type * as ModuleTraits from './internal/runtime/core/ModuleTraits.js'\nimport { getModuleTraitsProgram, getRuntimeInternals } from './internal/runtime/core/runtimeInternalsAccessor.js'\nimport { getNodeEnv } from './internal/runtime/core/env.js'\nimport type { EvidencePackage, EvidencePackageSource } from './Observability.js'\n\n// Public Debug API: a namespace-shaped facade for debugging capabilities used by apps and platforms.\n// The event model and core Layers live in internal/runtime/core/DebugSink.ts; this module provides ergonomic entry points.\n\nexport type Event = Internal.Event\nexport interface Sink extends Internal.Sink {}\nexport interface RuntimeDebugEventRef extends Internal.RuntimeDebugEventRef {}\nexport type DiagnosticsLevel = Internal.DiagnosticsLevel\nexport type TraitConvergeDiagnosticsSamplingConfig = Internal.TraitConvergeDiagnosticsSamplingConfig\nexport type SnapshotToken = DevtoolsHub.SnapshotToken\n\nexport const toRuntimeDebugEventRef = Internal.toRuntimeDebugEventRef\n\nexport const internal = {\n currentDebugSinks: Internal.currentDebugSinks,\n currentRuntimeLabel: Internal.currentRuntimeLabel,\n currentDiagnosticsLevel: Internal.currentDiagnosticsLevel,\n currentTraitConvergeDiagnosticsSampling: Internal.currentTraitConvergeDiagnosticsSampling,\n toRuntimeDebugEventRef: Internal.toRuntimeDebugEventRef,\n}\n\nexport interface DevtoolsSnapshot extends DevtoolsHub.DevtoolsSnapshot {}\nexport interface DevtoolsHubOptions extends DevtoolsHub.DevtoolsHubOptions {\n readonly diagnosticsLevel?: DiagnosticsLevel\n readonly traitConvergeDiagnosticsSampling?: TraitConvergeDiagnosticsSamplingConfig\n}\n\nexport const getDevtoolsSnapshot = DevtoolsHub.getDevtoolsSnapshot\nexport const getDevtoolsSnapshotToken = DevtoolsHub.getDevtoolsSnapshotToken\nexport const subscribeDevtoolsSnapshot = DevtoolsHub.subscribeDevtoolsSnapshot\nexport const clearDevtoolsEvents = DevtoolsHub.clearDevtoolsEvents\nexport const getDevtoolsRunId = DevtoolsHub.getDevtoolsRunId\nexport const setDevtoolsRunId = DevtoolsHub.setDevtoolsRunId\nexport const startDevtoolsRun = DevtoolsHub.startDevtoolsRun\nexport const setInstanceLabel = DevtoolsHub.setInstanceLabel\nexport const getInstanceLabel = DevtoolsHub.getInstanceLabel\n\nexport const exportEvidencePackage = (options?: {\n readonly runId?: string\n readonly source?: EvidencePackageSource\n readonly protocolVersion?: string\n}): EvidencePackage => DevtoolsHub.exportDevtoolsEvidencePackage(options)\n\n/**\n * Diagnostics level for exportable events.\n *\n * Controls what DevtoolsHub exports (ring buffer / snapshots), without changing Debug.record's fallback semantics.\n */\nexport const diagnosticsLevel = (level: DiagnosticsLevel): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(Internal.currentDiagnosticsLevel as any, () => level) as Layer.Layer<\n any,\n never,\n never\n >\n\nexport const traitConvergeDiagnosticsSampling = (\n config: TraitConvergeDiagnosticsSamplingConfig,\n): Layer.Layer<any, never, never> => Internal.traitConvergeDiagnosticsSampling(config)\n\n/**\n * Whether Devtools is enabled.\n *\n * Used by React/Devtools UI to decide if extra instrumentation should be active; turned on by devtoolsHubLayer.\n */\nexport const isDevtoolsEnabled = DevtoolsHub.isDevtoolsEnabled\n\n/**\n * A lightweight counter of active module runtimes.\n *\n * Derived from module:init / module:destroy events; suitable as a DevTools / Playground data source.\n */\nexport interface ModuleRuntimeCounter {\n readonly sink: Sink\n readonly getSnapshot: () => ReadonlyMap<string, number>\n}\n\n/**\n * A simple in-memory ring buffer for Debug events.\n *\n * No filtering/grouping; consumers can post-process snapshots (by moduleId/type/etc.).\n */\nexport interface RingBufferSink {\n readonly sink: Sink\n readonly getSnapshot: () => ReadonlyArray<Event>\n readonly clear: () => void\n}\n\n/**\n * Create a Debug sink that counts active instances per moduleId.\n *\n * Snapshots are exposed via getSnapshot(); bridging to UI (window/postMessage/etc.) is left to consumers.\n */\nexport const makeModuleRuntimeCounterSink = (): ModuleRuntimeCounter => {\n const counts = new Map<string, number>()\n\n const sink: Sink = {\n record: (event: Event) =>\n Effect.sync(() => {\n if (event.type === 'module:init') {\n const moduleId = event.moduleId ?? 'unknown'\n const runtimeLabel = 'runtimeLabel' in event && event.runtimeLabel ? event.runtimeLabel : 'unknown'\n const key = `${runtimeLabel}::${moduleId}`\n const prev = counts.get(key) ?? 0\n counts.set(key, prev + 1)\n return\n }\n if (event.type === 'module:destroy') {\n const moduleId = event.moduleId ?? 'unknown'\n const runtimeLabel = 'runtimeLabel' in event && event.runtimeLabel ? event.runtimeLabel : 'unknown'\n const key = `${runtimeLabel}::${moduleId}`\n const prev = counts.get(key) ?? 0\n const next = prev - 1\n if (next <= 0) {\n counts.delete(key)\n } else {\n counts.set(key, next)\n }\n }\n }),\n }\n\n const getSnapshot = (): ReadonlyMap<string, number> => new Map(counts)\n\n return { sink, getSnapshot }\n}\n\n/**\n * Create a ring-buffer Debug sink.\n *\n * Records the last N events in chronological order; a good foundation for event timelines.\n */\nexport const makeRingBufferSink = (capacity = 1000): RingBufferSink => {\n const buffer: Event[] = []\n\n const sink: Sink = {\n record: (event: Event) =>\n Effect.sync(() => {\n if (capacity <= 0) {\n return\n }\n if (buffer.length >= capacity) {\n buffer.shift()\n }\n buffer.push(event)\n }),\n }\n\n const getSnapshot = (): ReadonlyArray<Event> => buffer.slice()\n const clear = (): void => {\n buffer.length = 0\n }\n\n return { sink, getSnapshot, clear }\n}\n\n/**\n * Emit a Debug event to sinks attached to the current Fiber.\n *\n * If no sink is provided, the runtime chooses a safe fallback (browser console grouping; node preserves error-class events).\n */\nexport const record = Internal.record\n\n/**\n * A no-op Debug layer.\n *\n * Provides an empty sink set and drops all Debug events; useful for tests or explicitly disabling Debug.\n */\nexport const noopLayer = Internal.noopLayer as unknown as Layer.Layer<any, never, never>\n\n/**\n * Debug mode selector.\n *\n * - `auto`: infer dev/prod from NODE_ENV.\n * - `dev`: verbose diagnostics.\n * - `prod`: keep only high-value diagnostics/errors.\n * - `off`: disable sinks (benchmarks/special tests).\n */\nexport type DebugMode = 'auto' | 'dev' | 'prod' | 'off'\n\nexport interface DebugLayerOptions {\n readonly mode?: DebugMode\n /**\n * In dev mode, choose what to print to the browser console:\n * - default: diagnostic + lifecycle:error + trace:* (legacy behavior)\n * - diagnostic: diagnostic(warn/error) + lifecycle:error only (recommended for app dev with Devtools)\n */\n readonly devConsole?: 'default' | 'diagnostic'\n /**\n * Diagnostics level for exportable debug event refs (used by DevtoolsHub and debug sinks that normalize events).\n *\n * Equivalent to composing `Debug.diagnosticsLevel(level)` with `Debug.layer(...)`.\n */\n readonly diagnosticsLevel?: DiagnosticsLevel\n /**\n * Reserved for future use: enable high-noise action/state logs in dev.\n */\n readonly verboseActions?: boolean\n /**\n * Reserved for future use: emit key events into metrics in prod.\n */\n readonly enableMetrics?: boolean\n}\n\nconst resolveMode = (mode: DebugMode | undefined): DebugMode => {\n if (mode && mode !== 'auto') {\n return mode\n }\n\n const env = getNodeEnv()\n return env === 'production' ? 'prod' : 'dev'\n}\n\n/**\n * Public entry: compose a Debug layer based on the environment or an explicit mode.\n *\n * Default mode is `auto`: non-production → `dev`; production → `prod`.\n *\n * @example\n * ```ts\n * const runtime = Runtime.make(AppImpl, {\n * layer: Layer.mergeAll(Debug.layer(), businessLayer),\n * })\n * ```\n */\nexport const layer = (options?: DebugLayerOptions): Layer.Layer<any, never, never> => {\n const mode = resolveMode(options?.mode)\n const diagnostics = options?.diagnosticsLevel\n\n const sinks = (() => {\n switch (mode) {\n case 'off':\n return Internal.noopLayer as unknown as Layer.Layer<any, never, never>\n case 'prod':\n // Production: keep only high-value diagnostics/errors to avoid noisy logs.\n return Internal.errorOnlyLayer as unknown as Layer.Layer<any, never, never>\n case 'dev':\n case 'auto': {\n // Dev: enable browser-friendly Debug sink output by default.\n // Logger.pretty is intentionally opt-in by callers to avoid implicitly rewriting the logger.\n return options?.devConsole === 'diagnostic'\n ? (Internal.browserDiagnosticConsoleLayer as unknown as Layer.Layer<any, never, never>)\n : (Internal.browserConsoleLayer as unknown as Layer.Layer<any, never, never>)\n }\n }\n })()\n\n return diagnostics\n ? (Layer.mergeAll(sinks, diagnosticsLevel(diagnostics)) as Layer.Layer<any, never, never>)\n : sinks\n}\n\n/**\n * PrettyLoggerOptions: parameters of Effect.Logger.prettyLogger.\n */\nexport type PrettyLoggerOptions = Parameters<typeof Logger.prettyLogger>[0]\n\n/**\n * Replace the default Effect logger with a pretty logger (as a Layer).\n *\n * Equivalent to `Logger.replace(Logger.defaultLogger, Logger.prettyLogger(options))`.\n */\nexport const withPrettyLogger = (\n base: Layer.Layer<any, any, any>,\n options?: PrettyLoggerOptions,\n): Layer.Layer<any, any, any> =>\n Layer.merge(\n base,\n Logger.replace(Logger.defaultLogger, Logger.prettyLogger(options)) as unknown as Layer.Layer<any, any, any>,\n )\n\n/**\n * Replace Debug sinks with the provided sink set.\n *\n * Advanced: use either `Debug.layer` or `Debug.replace` in a scope, not both.\n */\nexport const replace = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.locallyScoped(internal.currentDebugSinks, sinks as ReadonlyArray<Internal.Sink>) as Layer.Layer<\n any,\n never,\n never\n >\n\n/**\n * Append sinks to the current Fiber's sink set (without overriding existing sinks).\n */\nexport const appendSinks = (sinks: ReadonlyArray<Sink>): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(Internal.currentDebugSinks, (current) => [\n ...current,\n ...(sinks as ReadonlyArray<Internal.Sink>),\n ]) as Layer.Layer<any, never, never>\n\n/**\n * Append the DevtoolsHub sink to aggregate Debug events into snapshots.\n *\n * Works by appending sinks; it does not override `Debug.layer` / `Debug.replace` / custom sinks.\n */\nexport function devtoolsHubLayer(options?: DevtoolsHubOptions): Layer.Layer<any, never, never>\nexport function devtoolsHubLayer(\n base: Layer.Layer<any, any, any>,\n options?: DevtoolsHubOptions,\n): Layer.Layer<any, never, any>\nexport function devtoolsHubLayer(\n baseOrOptions?: Layer.Layer<any, any, any> | DevtoolsHubOptions,\n maybeOptions?: DevtoolsHubOptions,\n): Layer.Layer<any, never, any> {\n // In effect v3, Layer values are objects tagged with `_op_layer`.\n const isLayerValue = (value: unknown): value is Layer.Layer<any, any, any> =>\n typeof value === 'object' && value !== null && '_op_layer' in (value as Record<string, unknown>)\n\n const hasBase = isLayerValue(baseOrOptions)\n const base = hasBase\n ? (baseOrOptions as Layer.Layer<any, any, any>)\n : (Layer.empty as unknown as Layer.Layer<any, any, any>)\n const options = hasBase ? maybeOptions : (baseOrOptions as DevtoolsHubOptions | undefined)\n\n DevtoolsHub.configureDevtoolsHub(options)\n const append = appendSinks([DevtoolsHub.devtoolsHubSink])\n const appendConvergeStaticIr = ConvergeStaticIrCollector.appendConvergeStaticIrCollectors([\n DevtoolsHub.devtoolsHubConvergeStaticIrCollector,\n ])\n const enableExportableDiagnostics = diagnosticsLevel(options?.diagnosticsLevel ?? 'light')\n const convergeSamplingLayer = options?.traitConvergeDiagnosticsSampling\n ? traitConvergeDiagnosticsSampling(options.traitConvergeDiagnosticsSampling)\n : (Layer.empty as unknown as Layer.Layer<any, never, never>)\n\n // FiberRef layers must build base sinks first, then append; provideMerge(append, base)\n // builds base first and then applies append's FiberRefs patch, avoiding overrides.\n return Layer.provideMerge(\n Layer.mergeAll(append, enableExportableDiagnostics, convergeSamplingLayer, appendConvergeStaticIr) as Layer.Layer<\n any,\n never,\n any\n >,\n base,\n ) as Layer.Layer<any, never, any>\n}\n\n/**\n * Attach a logical runtime label to Debug events within the current Fiber scope.\n *\n * DevTools can group events by this label.\n */\nexport const runtimeLabel = (label: string): Layer.Layer<any, never, never> =>\n Layer.fiberRefLocallyScopedWith(internal.currentRuntimeLabel as any, () => label) as Layer.Layer<any, never, never>\n\n/**\n * StateTrait debug view for Devtools/scripts.\n */\nexport interface ModuleTraitsDebug {\n readonly program?: StateTraitProgram<any>\n readonly graph?: StateTraitGraph\n readonly plan?: StateTraitPlan\n}\n\n/**\n * A minimal enumerable trait item from the finalized snapshot (023).\n */\nexport interface ModuleTraitsFinalItem {\n readonly traitId: string\n readonly name: string\n readonly description?: string\n readonly provenance: ModuleTraits.TraitProvenance\n}\n\n/**\n * Read the StateTrait program (if any) from a module definition and return a debug view.\n */\nexport const getModuleTraits = (\n module: ModuleTag<string, AnyModuleShape> | ModuleLike<string, AnyModuleShape, any>,\n): ModuleTraitsDebug => {\n const moduleTag = (module as any).tag ? (module as any).tag : module\n\n const program = getModuleTraitsProgram(moduleTag as any) as StateTraitProgram<any> | undefined\n\n if (!program) {\n return {}\n }\n\n return {\n program,\n graph: program.graph,\n plan: program.plan,\n }\n}\n\n/**\n * Get a module's StateTrait debug view by moduleId (registered at Module.make time).\n */\nexport const getModuleTraitsById = (moduleId: string): ModuleTraitsDebug | undefined => {\n const program = ModuleTraitsRegistry.getModuleProgramById(moduleId)\n if (!program) {\n return undefined\n }\n return {\n program,\n graph: program.graph,\n plan: program.plan,\n }\n}\n\n/**\n * Read the finalized traits snapshot (023) from a ModuleRuntime; undefined if not finalized.\n */\nexport const getModuleTraitsSnapshot = (\n runtime: ModuleRuntime<any, any>,\n): ModuleTraits.ModuleTraitsSnapshot | undefined => {\n try {\n const internals = getRuntimeInternals(runtime as any)\n return internals.traits.getModuleTraitsSnapshot()\n } catch {\n return undefined\n }\n}\n\n/**\n * Export a minimal, enumerable trait list from the finalized snapshot (023).\n *\n * Order is deterministic and matches the snapshot.\n */\nexport const getModuleFinalTraits = (runtime: ModuleRuntime<any, any>): ReadonlyArray<ModuleTraitsFinalItem> => {\n const snapshot = getModuleTraitsSnapshot(runtime)\n if (!snapshot) return []\n\n return snapshot.traits.map((t) => ({\n traitId: t.traitId,\n name: t.name,\n description: t.description,\n provenance: snapshot.provenanceIndex[t.traitId]!,\n }))\n}\n\n/**\n * Append a trace-only sink (handles `trace:*`) on top of the current Debug sinks.\n *\n * Default behavior logs trace events via logDebug; you can provide a handler to forward into ring buffers / bridges.\n *\n * @example\n * ```ts\n * const layer = Debug.traceLayer(\n * Debug.layer({ mode: 'dev' }),\n * (event) => Effect.logInfo({ traceEvent: event }),\n * )\n * ```\n */\nconst isLayer = (value: unknown): value is Layer.Layer<any, any, any> =>\n typeof value === 'object' && value !== null && '_op_layer' in (value as Record<string, unknown>)\n\nexport function traceLayer(onTrace?: (event: Event) => Effect.Effect<void>): Layer.Layer<any, never, never>\nexport function traceLayer(\n base: Layer.Layer<any, any, any>,\n onTrace?: (event: Event) => Effect.Effect<void>,\n): Layer.Layer<any, never, any>\nexport function traceLayer(\n baseOrHandler?: Layer.Layer<any, any, any> | ((event: Event) => Effect.Effect<void>),\n maybeOnTrace?: (event: Event) => Effect.Effect<void>,\n): Layer.Layer<any, never, any> {\n const hasBase = isLayer(baseOrHandler)\n const base = hasBase\n ? (baseOrHandler as Layer.Layer<any, any, any>)\n : (Layer.empty as unknown as Layer.Layer<any, any, any>)\n const onTrace = hasBase ? maybeOnTrace : (baseOrHandler as ((event: Event) => Effect.Effect<void>) | undefined)\n\n const traceSink: Sink = {\n record: (event: Event) =>\n typeof event.type === 'string' && event.type.startsWith('trace:')\n ? onTrace\n ? onTrace(event)\n : Effect.logDebug({ traceEvent: event })\n : Effect.void,\n }\n\n // Append the trace sink via FiberRef: extend the current Fiber's sink set.\n // Do not depend on DebugHub/Tag; use FiberRef.currentDebugSinks as the single source of truth.\n const appendTrace = Layer.fiberRefLocallyScopedWith(Internal.currentDebugSinks, (sinks) => [...sinks, traceSink])\n\n // Same as devtoolsHubLayer: build base first, then appendTrace updates FiberRef sinks.\n return Layer.provideMerge(appendTrace, base as Layer.Layer<any, any, any>) as Layer.Layer<any, never, any>\n}\n"],"mappings":"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","names":["clearDevtoolsEvents","getDevtoolsRunId","getDevtoolsSnapshot","getDevtoolsSnapshotToken","getInstanceLabel","isDevtoolsEnabled","noopLayer","record","setDevtoolsRunId","setInstanceLabel","startDevtoolsRun","subscribeDevtoolsSnapshot","toRuntimeDebugEventRef","traitConvergeDiagnosticsSampling","toRuntimeDebugEventRef","getDevtoolsSnapshot","getDevtoolsSnapshotToken","subscribeDevtoolsSnapshot","clearDevtoolsEvents","getDevtoolsRunId","setDevtoolsRunId","startDevtoolsRun","setInstanceLabel","getInstanceLabel","traitConvergeDiagnosticsSampling","isDevtoolsEnabled","runtimeLabel","record","noopLayer"]}
|
|
@@ -10,7 +10,7 @@ var stableStringify = (value) => {
|
|
|
10
10
|
}
|
|
11
11
|
if (t === "object") {
|
|
12
12
|
const record = value;
|
|
13
|
-
const keys = Object.keys(record).sort(
|
|
13
|
+
const keys = Object.keys(record).sort();
|
|
14
14
|
return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(record[k])}`).join(",")}}`;
|
|
15
15
|
}
|
|
16
16
|
return "null";
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
stableStringify,
|
|
29
29
|
fnv1a32
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
31
|
+
//# sourceMappingURL=chunk-4MZ7BT3R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/digest.ts"],"sourcesContent":["/**\n * internal/digest:\n * - Minimal \"stable digest\" utilities for Runtime / Static IR / Traits, etc.\n * - Goal: stable output across runs/processes while staying lightweight (no extra dependencies).\n *\n * Note: stableStringify does not aim for full JSON equivalence; it only covers the subset needed by this repo:\n * - Stable key ordering (object fields sorted lexicographically).\n * - Non-finite numbers (NaN/±Infinity) degrade to null.\n * - Other non-representable values (undefined/function/symbol, etc.) degrade to null.\n * - undefined inside objects is not omitted; it is encoded as null (differs from JSON.stringify).\n */\n\nexport const stableStringify = (value: unknown): string => {\n if (value === null) return 'null'\n const t = typeof value\n if (t === 'string') return JSON.stringify(value)\n if (t === 'number') return Number.isFinite(value) ? String(value) : 'null'\n if (t === 'boolean') return value ? 'true' : 'false'\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`\n }\n\n if (t === 'object') {\n const record = value as Record<string, unknown>\n const keys = Object.keys(record).sort()\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(record[k])}`).join(',')}}`\n }\n\n return 'null'\n}\n\n/**\n * fnv1a32:\n * - 32-bit FNV-1a hash (for short digests); outputs fixed 8-char hex.\n */\nexport const fnv1a32 = (input: string): string => {\n let hash = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i)\n hash = (hash * 0x01000193) >>> 0\n }\n return hash.toString(16).padStart(8, '0')\n}\n"],"mappings":";AAYO,IAAM,kBAAkB,CAAC,UAA2B;AACzD,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,IAAI,OAAO;AACjB,MAAI,MAAM,SAAU,QAAO,KAAK,UAAU,KAAK;AAC/C,MAAI,MAAM,SAAU,QAAO,OAAO,SAAS,KAAK,IAAI,OAAO,KAAK,IAAI;AACpE,MAAI,MAAM,UAAW,QAAO,QAAQ,SAAS;AAE7C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,IAAI,MAAM,IAAI,eAAe,EAAE,KAAK,GAAG,CAAC;AAAA,EACjD;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,SAAS;AACf,UAAM,OAAO,OAAO,KAAK,MAAM,EAAE,KAAK;AACtC,WAAO,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,KAAK,UAAU,CAAC,CAAC,IAAI,gBAAgB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA,EAC5F;AAEA,SAAO;AACT;AAMO,IAAM,UAAU,CAAC,UAA0B;AAChD,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAQ,MAAM,WAAW,CAAC;AAC1B,WAAQ,OAAO,aAAgB;AAAA,EACjC;AACA,SAAO,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC1C;","names":[]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
compile,
|
|
3
3
|
isReadQuery,
|
|
4
4
|
make
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-M3M7JFAH.js";
|
|
6
6
|
import {
|
|
7
7
|
__export
|
|
8
8
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
compile2 as compile,
|
|
25
25
|
ReadQuery_exports
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
27
|
+
//# sourceMappingURL=chunk-53GVPGSM.js.map
|
|
@@ -15,7 +15,7 @@ var parseFallbackServiceIds = (overridesApplied) => {
|
|
|
15
15
|
const serviceId = entry.slice(colon + 1, eq);
|
|
16
16
|
if (serviceId.length > 0) out.add(serviceId);
|
|
17
17
|
}
|
|
18
|
-
return Array.from(out).sort(
|
|
18
|
+
return Array.from(out).sort();
|
|
19
19
|
};
|
|
20
20
|
var collectMissingServiceIds = (args) => {
|
|
21
21
|
const bindingByServiceId = /* @__PURE__ */ new Map();
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
evaluateFullCutoverGate,
|
|
81
81
|
RuntimeServiceBuiltinsTag
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-5W2V2NVJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/FullCutoverGate.ts","../src/internal/runtime/core/RuntimeServiceBuiltins.ts"],"sourcesContent":["import type { KernelId } from './KernelRef.js'\nimport type { RuntimeServiceBinding, RuntimeServicesEvidence } from './RuntimeKernel.js'\n\nexport interface CutoverCoverageMatrix {\n readonly version: 'v1'\n readonly requiredServiceIds: ReadonlyArray<string>\n}\n\nexport const CutoverCoverageMatrix = {\n version: 'v1',\n requiredServiceIds: ['txnQueue', 'operationRunner', 'transaction', 'dispatch'],\n} as const satisfies CutoverCoverageMatrix\n\nexport type FullCutoverGateMode = 'trial' | 'fullCutover'\n\nexport interface FullCutoverGateAnchor {\n readonly moduleId: string\n readonly instanceId: string\n /**\n * Convention: txnSeq=0 denotes assembly (a wiring-time failure anchor).\n * Full Cutover Gate is evaluated during assembly by default, so it does not depend on a real txn.\n */\n readonly txnSeq: number\n}\n\nexport type FullCutoverGateVerdict = 'PASS' | 'FAIL'\n\nexport interface FullCutoverGateResult {\n readonly version: 'v1'\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly verdict: FullCutoverGateVerdict\n /**\n * fullyActivated: a stricter \"full cutover\" truth value.\n * - Requires every serviceId in the coverage matrix to be bound to the expected implId.\n * - Requires no fallback (any `fallback=` in overridesApplied means not fully activated).\n *\n * Note: in trial mode the verdict may be PASS while fullyActivated can still be false.\n */\n readonly fullyActivated: boolean\n readonly missingServiceIds: ReadonlyArray<string>\n readonly fallbackServiceIds: ReadonlyArray<string>\n readonly anchor: FullCutoverGateAnchor\n /**\n * When diagnostics=off, it must stay slim (avoid permanent overhead).\n * In light/full, additional explainable info is allowed (still must be serializable).\n */\n readonly details?: {\n readonly expectedImplId: string\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n readonly overridesApplied: ReadonlyArray<string>\n }\n}\n\nconst expectedImplIdForKernel = (kernelId: KernelId): string => (kernelId === 'core' ? 'builtin' : kernelId)\n\nconst parseFallbackServiceIds = (overridesApplied: ReadonlyArray<string>): ReadonlyArray<string> => {\n const out = new Set<string>()\n for (const entry of overridesApplied) {\n if (!entry.includes('(fallback=')) continue\n const colon = entry.indexOf(':')\n if (colon < 0) continue\n const eq = entry.indexOf('=', colon + 1)\n if (eq < 0) continue\n const serviceId = entry.slice(colon + 1, eq)\n if (serviceId.length > 0) out.add(serviceId)\n }\n return Array.from(out).sort()\n}\n\nconst collectMissingServiceIds = (args: {\n readonly expectedImplId: string\n readonly requiredServiceIds: ReadonlyArray<string>\n readonly bindings: ReadonlyArray<RuntimeServiceBinding>\n}): ReadonlyArray<string> => {\n const bindingByServiceId = new Map<string, RuntimeServiceBinding>()\n for (const b of args.bindings) {\n bindingByServiceId.set(b.serviceId, b)\n }\n\n const missing: string[] = []\n for (const serviceId of args.requiredServiceIds) {\n const binding = bindingByServiceId.get(serviceId)\n const implId = binding?.implId\n if (!implId || implId !== args.expectedImplId) {\n missing.push(serviceId)\n }\n }\n\n return missing\n}\n\nexport const evaluateFullCutoverGate = (args: {\n readonly mode: FullCutoverGateMode\n readonly requestedKernelId: KernelId\n readonly runtimeServicesEvidence: RuntimeServicesEvidence\n readonly coverageMatrix?: CutoverCoverageMatrix\n readonly diagnosticsLevel?: 'off' | 'light' | 'full' | 'sampled'\n}): FullCutoverGateResult => {\n const expectedImplId = expectedImplIdForKernel(args.requestedKernelId)\n const matrix = args.coverageMatrix ?? CutoverCoverageMatrix\n\n const fallbackServiceIds = parseFallbackServiceIds(args.runtimeServicesEvidence.overridesApplied)\n const missingServiceIds = collectMissingServiceIds({\n expectedImplId,\n requiredServiceIds: matrix.requiredServiceIds,\n bindings: args.runtimeServicesEvidence.bindings,\n })\n\n const fullyActivated = missingServiceIds.length === 0 && fallbackServiceIds.length === 0\n\n const verdict: FullCutoverGateVerdict = args.mode === 'fullCutover' ? (fullyActivated ? 'PASS' : 'FAIL') : 'PASS'\n\n const moduleIdRaw = args.runtimeServicesEvidence.moduleId\n const moduleId = typeof moduleIdRaw === 'string' && moduleIdRaw.length > 0 ? moduleIdRaw : 'unknown'\n\n const anchor: FullCutoverGateAnchor = {\n moduleId,\n instanceId: args.runtimeServicesEvidence.instanceId,\n txnSeq: 0,\n }\n\n const level = args.diagnosticsLevel ?? 'off'\n\n return {\n version: 'v1',\n mode: args.mode,\n requestedKernelId: args.requestedKernelId,\n verdict,\n fullyActivated,\n missingServiceIds,\n fallbackServiceIds,\n anchor,\n ...(level === 'off'\n ? {}\n : {\n details: {\n expectedImplId,\n bindings: args.runtimeServicesEvidence.bindings,\n overridesApplied: args.runtimeServicesEvidence.overridesApplied,\n },\n }),\n }\n}\n","import { Context, Effect } from 'effect'\n\nexport interface RuntimeServiceBuiltins {\n /**\n * Returns the make Effect of a builtin implementation (provided by ModuleRuntime during assembly, avoiding external code\n * capturing internal closures/state).\n * - For kernel implementors only (e.g. core-ng) to implement behavior-equivalent replacements or thin wrappers.\n * - Not an app-facing contract; must not be depended on from business Flow/Logic.\n */\n readonly getBuiltinMake: (serviceId: string) => Effect.Effect<unknown, never, any>\n}\n\nexport class RuntimeServiceBuiltinsTag extends Context.Tag('@logixjs/core/RuntimeServiceBuiltins')<\n RuntimeServiceBuiltinsTag,\n RuntimeServiceBuiltins\n>() {}\n"],"mappings":";AAQO,IAAM,wBAAwB;AAAA,EACnC,SAAS;AAAA,EACT,oBAAoB,CAAC,YAAY,mBAAmB,eAAe,UAAU;AAC/E;AA2CA,IAAM,0BAA0B,CAAC,aAAgC,aAAa,SAAS,YAAY;AAEnG,IAAM,0BAA0B,CAAC,qBAAmE;AAClG,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,SAAS,kBAAkB;AACpC,QAAI,CAAC,MAAM,SAAS,YAAY,EAAG;AACnC,UAAM,QAAQ,MAAM,QAAQ,GAAG;AAC/B,QAAI,QAAQ,EAAG;AACf,UAAM,KAAK,MAAM,QAAQ,KAAK,QAAQ,CAAC;AACvC,QAAI,KAAK,EAAG;AACZ,UAAM,YAAY,MAAM,MAAM,QAAQ,GAAG,EAAE;AAC3C,QAAI,UAAU,SAAS,EAAG,KAAI,IAAI,SAAS;AAAA,EAC7C;AACA,SAAO,MAAM,KAAK,GAAG,EAAE,KAAK;AAC9B;AAEA,IAAM,2BAA2B,CAAC,SAIL;AAC3B,QAAM,qBAAqB,oBAAI,IAAmC;AAClE,aAAW,KAAK,KAAK,UAAU;AAC7B,uBAAmB,IAAI,EAAE,WAAW,CAAC;AAAA,EACvC;AAEA,QAAM,UAAoB,CAAC;AAC3B,aAAW,aAAa,KAAK,oBAAoB;AAC/C,UAAM,UAAU,mBAAmB,IAAI,SAAS;AAChD,UAAM,SAAS,SAAS;AACxB,QAAI,CAAC,UAAU,WAAW,KAAK,gBAAgB;AAC7C,cAAQ,KAAK,SAAS;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,0BAA0B,CAAC,SAMX;AAC3B,QAAM,iBAAiB,wBAAwB,KAAK,iBAAiB;AACrE,QAAM,SAAS,KAAK,kBAAkB;AAEtC,QAAM,qBAAqB,wBAAwB,KAAK,wBAAwB,gBAAgB;AAChG,QAAM,oBAAoB,yBAAyB;AAAA,IACjD;AAAA,IACA,oBAAoB,OAAO;AAAA,IAC3B,UAAU,KAAK,wBAAwB;AAAA,EACzC,CAAC;AAED,QAAM,iBAAiB,kBAAkB,WAAW,KAAK,mBAAmB,WAAW;AAEvF,QAAM,UAAkC,KAAK,SAAS,gBAAiB,iBAAiB,SAAS,SAAU;AAE3G,QAAM,cAAc,KAAK,wBAAwB;AACjD,QAAM,WAAW,OAAO,gBAAgB,YAAY,YAAY,SAAS,IAAI,cAAc;AAE3F,QAAM,SAAgC;AAAA,IACpC;AAAA,IACA,YAAY,KAAK,wBAAwB;AAAA,IACzC,QAAQ;AAAA,EACV;AAEA,QAAM,QAAQ,KAAK,oBAAoB;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM,KAAK;AAAA,IACX,mBAAmB,KAAK;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,UAAU,QACV,CAAC,IACD;AAAA,MACE,SAAS;AAAA,QACP;AAAA,QACA,UAAU,KAAK,wBAAwB;AAAA,QACvC,kBAAkB,KAAK,wBAAwB;AAAA,MACjD;AAAA,IACF;AAAA,EACN;AACF;;;AC/IA,SAAS,eAAuB;AAYzB,IAAM,4BAAN,cAAwC,QAAQ,IAAI,sCAAsC,EAG/F,EAAE;AAAC;","names":[]}
|