@graphrefly/graphrefly 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cascading-Cxs1eztH.d.cts → cascading-CH-_VwG9.d.cts} +2 -2
- package/dist/{cascading-BNfxffgc.d.ts → cascading-OgKQZjsa.d.ts} +2 -2
- package/dist/{chunk-CKFQS2CJ.js → chunk-2K5RXLAH.js} +1 -1
- package/dist/chunk-3ERTUW2J.js +45 -0
- package/dist/chunk-3K7HA4Y6.js +1 -0
- package/dist/chunk-3ZZX7M25.js +1 -0
- package/dist/chunk-4QH6VJF4.js +1 -0
- package/dist/{chunk-I2DEVPMU.js → chunk-5QRRKBUT.js} +1 -1
- package/dist/chunk-5ST42ESJ.js +1 -0
- package/dist/{chunk-FHRBBHJN.js → chunk-6YFZMUMR.js} +1 -1
- package/dist/{chunk-MNZIKXK4.js → chunk-7ARY3Y3T.js} +1 -1
- package/dist/chunk-7B7ELAT2.js +1 -0
- package/dist/{chunk-Z4F3DOWS.js → chunk-7VKFXLZQ.js} +1 -1
- package/dist/chunk-ACMJ2ZPS.js +3 -0
- package/dist/{chunk-32N3JALT.js → chunk-AGNM6RS6.js} +1 -1
- package/dist/chunk-AS3TV2TV.js +1 -0
- package/dist/{chunk-B7LCDQEV.js → chunk-CISGGAIF.js} +1 -1
- package/dist/{chunk-N43XM7BM.js → chunk-DEJTNNQC.js} +1 -1
- package/dist/{chunk-2QXRYP7Q.js → chunk-FDZAZNRO.js} +1 -1
- package/dist/{chunk-QSK3RRII.js → chunk-FUZ6S2DY.js} +1 -1
- package/dist/{chunk-LYM4PBMV.js → chunk-G5VBJ5K6.js} +1 -1
- package/dist/{chunk-6I726LZU.js → chunk-HZKW2AAB.js} +1 -1
- package/dist/{chunk-LCGAVGGV.js → chunk-IZM3UEH3.js} +3 -3
- package/dist/{chunk-2DMKW2AD.js → chunk-KCACBSJH.js} +1 -1
- package/dist/{chunk-SSCGRYJ2.js → chunk-KT5DTRBP.js} +1 -1
- package/dist/{chunk-WL6LFPJB.js → chunk-KY2LMAXU.js} +1 -1
- package/dist/{chunk-YXDRGKXP.js → chunk-LDQ3IUIP.js} +1 -1
- package/dist/chunk-LPRWATHB.js +61 -0
- package/dist/{chunk-6VWBPSSY.js → chunk-NWXQIOIB.js} +3 -3
- package/dist/{chunk-XW4YDF6G.js → chunk-Q7QQQA3I.js} +1 -1
- package/dist/chunk-VE5SIZEM.js +1 -0
- package/dist/chunk-VRALOYRD.js +1 -0
- package/dist/{chunk-XJLYLLIJ.js → chunk-WHMUB5QB.js} +1 -1
- package/dist/chunk-XLQPNNIC.js +1 -0
- package/dist/{chunk-JKBOIJ22.js → chunk-YGL7FPVQ.js} +1 -1
- package/dist/compat/index.cjs +5 -5
- package/dist/compat/index.d.cts +16 -16
- package/dist/compat/index.d.ts +16 -16
- package/dist/compat/index.js +1 -1
- package/dist/compat/jotai/index.d.cts +2 -2
- package/dist/compat/jotai/index.d.ts +2 -2
- package/dist/compat/nanostores/index.d.cts +2 -2
- package/dist/compat/nanostores/index.d.ts +2 -2
- package/dist/compat/nestjs/index.cjs +5 -5
- package/dist/compat/nestjs/index.d.cts +8 -8
- package/dist/compat/nestjs/index.d.ts +8 -8
- package/dist/compat/nestjs/index.js +1 -1
- package/dist/compat/react/index.d.cts +2 -2
- package/dist/compat/react/index.d.ts +2 -2
- package/dist/compat/solid/index.d.cts +2 -2
- package/dist/compat/solid/index.d.ts +2 -2
- package/dist/compat/svelte/index.d.cts +2 -2
- package/dist/compat/svelte/index.d.ts +2 -2
- package/dist/compat/vue/index.d.cts +2 -2
- package/dist/compat/vue/index.d.ts +2 -2
- package/dist/compat/zustand/index.cjs +3 -3
- package/dist/compat/zustand/index.d.cts +4 -4
- package/dist/compat/zustand/index.d.ts +4 -4
- package/dist/compat/zustand/index.js +1 -1
- package/dist/core/index.d.cts +4 -4
- package/dist/core/index.d.ts +4 -4
- package/dist/{decay-C25AyNAj.d.cts → decay-2ZukgQ4o.d.cts} +2 -2
- package/dist/{decay-BnrlbxSv.d.ts → decay-CdEBmDIs.d.ts} +2 -2
- package/dist/extra/browser.d.cts +1 -1
- package/dist/extra/browser.d.ts +1 -1
- package/dist/extra/index.cjs +14 -14
- package/dist/extra/index.d.cts +10 -11
- package/dist/extra/index.d.ts +10 -11
- package/dist/extra/index.js +1 -1
- package/dist/extra/node.cjs +2 -2
- package/dist/extra/node.d.cts +1 -1
- package/dist/extra/node.d.ts +1 -1
- package/dist/extra/node.js +1 -1
- package/dist/extra/operators.cjs +1 -1
- package/dist/extra/operators.d.cts +1 -1
- package/dist/extra/operators.d.ts +1 -1
- package/dist/extra/operators.js +1 -1
- package/dist/extra/reactive.d.cts +3 -3
- package/dist/extra/reactive.d.ts +3 -3
- package/dist/extra/reactive.js +1 -1
- package/dist/extra/render/index.d.cts +3 -3
- package/dist/extra/render/index.d.ts +3 -3
- package/dist/extra/sources.cjs +3 -1
- package/dist/extra/sources.d.cts +1 -1
- package/dist/extra/sources.d.ts +1 -1
- package/dist/extra/sources.js +1 -1
- package/dist/extra/storage-browser.d.cts +1 -1
- package/dist/extra/storage-browser.d.ts +1 -1
- package/dist/{fallback-CMZl39L5.d.ts → fallback-CqYVLL6X.d.ts} +1 -1
- package/dist/{fallback-8JYU8tlT.d.cts → fallback-Ctlj2tMY.d.cts} +1 -1
- package/dist/graph/index.cjs +7 -7
- package/dist/graph/index.d.cts +5 -5
- package/dist/graph/index.d.ts +5 -5
- package/dist/graph/index.js +1 -1
- package/dist/{graph-BkIkog4h.d.ts → graph-7VguS7a4.d.ts} +3 -3
- package/dist/{graph-E6likq7w.d.cts → graph-C4SHb3Ly.d.cts} +3 -3
- package/dist/{index-DktLSZOc.d.cts → index-2B7u2pVn.d.cts} +4 -4
- package/dist/{index-BTHOTC0Q.d.cts → index-3NmAfcH0.d.cts} +25 -7
- package/dist/{index-D1IEZUsj.d.ts → index-4Uz-e_fL.d.ts} +573 -213
- package/dist/{index-BAQrjuZF.d.ts → index-B-i4_g3k.d.ts} +2 -2
- package/dist/{index-DpiGqtrs.d.cts → index-B11anra4.d.cts} +441 -381
- package/dist/{index-WSlcjhQF.d.ts → index-B3OTH1dV.d.ts} +124 -13
- package/dist/{index-2n8Eai6M.d.ts → index-BG0BN3PB.d.ts} +1 -1
- package/dist/{index-z8WFPVI8.d.cts → index-BJX94aud.d.cts} +1 -1
- package/dist/{index-DhLyOHYZ.d.ts → index-BP8a88zx.d.ts} +11 -4
- package/dist/{index-Cnr1WrlX.d.cts → index-BTQtTb_H.d.cts} +14 -3
- package/dist/{index-BaA-xpSw.d.ts → index-BUYXac2c.d.ts} +3 -3
- package/dist/{index-DOBLxOti.d.cts → index-BVpm6noz.d.cts} +1 -1
- package/dist/{index-DhnsQfa3.d.ts → index-Bbkgpt5t.d.ts} +441 -381
- package/dist/{index-Cczxgd2D.d.ts → index-Bc41FuHp.d.cts} +3 -3
- package/dist/{index-BiHUBEKq.d.cts → index-BdGtBX-X.d.cts} +3 -3
- package/dist/index-BeT2r7sk.d.ts +760 -0
- package/dist/{index-da2V5vPy.d.ts → index-Bf7eqeSF.d.ts} +2 -2
- package/dist/{index-bXXLSvor.d.ts → index-Bn4zHYLj.d.ts} +4 -4
- package/dist/{index-DGTo1yka.d.cts → index-BoLv_OfD.d.cts} +2 -2
- package/dist/{index-B72TQQHd.d.cts → index-BsT7F2et.d.ts} +3 -3
- package/dist/{index-Bd91Nmf4.d.cts → index-BtAsBp8K.d.cts} +4 -4
- package/dist/{index-DgJc8Zgc.d.cts → index-C0-Jv1kP.d.cts} +81 -5
- package/dist/{index-C6ZUaos7.d.ts → index-C7O6r5fV.d.ts} +1 -1
- package/dist/{index-CL7oilfm.d.cts → index-C9kSENB4.d.cts} +1 -1
- package/dist/{index-yLt-aPMp.d.ts → index-CCq87F7t.d.ts} +1 -1
- package/dist/{index-DQQCOIt8.d.cts → index-CEMx8n40.d.cts} +10 -5
- package/dist/{index-BilOa6AE.d.cts → index-CJIuLu2f.d.cts} +124 -13
- package/dist/{index-B2RUoIUz.d.ts → index-CJK1JkYy.d.ts} +1 -1
- package/dist/{index-IUCY0OFN.d.ts → index-CJQm0g38.d.ts} +25 -7
- package/dist/index-CPNSy-U0.d.cts +760 -0
- package/dist/{index-A3U3CSve.d.cts → index-CZjOhcBy.d.cts} +2 -2
- package/dist/{index-CAP3UGsq.d.ts → index-CZmcDtFn.d.ts} +1 -1
- package/dist/{index-DYTBbF8T.d.cts → index-ChOyVLKm.d.cts} +1 -1
- package/dist/{index-eaQuGJnv.d.ts → index-CpyNFqkB.d.ts} +3 -3
- package/dist/{index-BJSZxSFX.d.ts → index-CvrqGfNS.d.ts} +1 -1
- package/dist/{index-DJ_MPOJ5.d.cts → index-D-Xs74HZ.d.cts} +573 -213
- package/dist/{index-C5cQ7Gfx.d.ts → index-D6egPFAL.d.ts} +4 -4
- package/dist/{index-CD2dBMet.d.ts → index-D8l8hNXn.d.ts} +10 -5
- package/dist/{index-40ZT4MHj.d.ts → index-DBHK8O6H.d.ts} +14 -3
- package/dist/{index-DVDapw2k.d.cts → index-DBIqYS43.d.cts} +35 -21
- package/dist/{index-3k4Gg6-n.d.ts → index-DBevwHj_.d.ts} +3 -3
- package/dist/{index-Ctb7_2sG.d.ts → index-DIOoAZUX.d.ts} +1 -1
- package/dist/{index-BQ1fR4li.d.ts → index-DO9XxMzS.d.ts} +35 -21
- package/dist/{index-CQtWm7jS.d.ts → index-DQo8xBgd.d.ts} +9 -9
- package/dist/{index-DH4fm2Ck.d.ts → index-Dgs8zcj7.d.ts} +2 -2
- package/dist/{index-CtFNGe-m.d.cts → index-Dhc7a7Xo.d.cts} +2 -2
- package/dist/{index-MxYuWOrf.d.cts → index-DmAgG5CI.d.cts} +3 -3
- package/dist/{index-CoM4rzyB.d.ts → index-Dmqp7KjD.d.ts} +1 -1
- package/dist/{index-B6iTqKtJ.d.ts → index-Dn-wI9g4.d.ts} +2 -2
- package/dist/{index-C-dkXOpB.d.cts → index-Du7u1lSf.d.cts} +11 -4
- package/dist/{index-DVAlsmEU.d.cts → index-HoU88d5U.d.cts} +3 -3
- package/dist/{index-CRm0YIzC.d.cts → index-LIpQQE9f.d.cts} +9 -9
- package/dist/{index-CgnCFhr2.d.cts → index-f5IivDUX.d.cts} +1 -1
- package/dist/{index-PgwvGWa1.d.cts → index-hHcaFlJX.d.cts} +1 -1
- package/dist/{index-I1cCY3ZI.d.ts → index-pT8sCpOJ.d.ts} +81 -5
- package/dist/{index-D4uimgee.d.cts → index-sl4NyzQx.d.cts} +1 -1
- package/dist/{index-tV3AA9hI.d.cts → index-tJoTcnHh.d.cts} +2 -2
- package/dist/{index-D3ayz3hy.d.cts → index-z96luz5O.d.cts} +1 -1
- package/dist/index.cjs +48 -48
- package/dist/index.d.cts +45 -50
- package/dist/index.d.ts +45 -50
- package/dist/index.js +1 -1
- package/dist/{meta-D8OyedKp.d.ts → meta-BgVAsg9j.d.ts} +1 -1
- package/dist/{meta-Ct9nqQS5.d.cts → meta-vE8bxW1E.d.cts} +1 -1
- package/dist/{node-BYInONRr.d.cts → node-ClS5yC-B.d.cts} +1 -1
- package/dist/{node-BYInONRr.d.ts → node-ClS5yC-B.d.ts} +1 -1
- package/dist/{observable-DO8DDEzv.d.ts → observable-BsBzUrcI.d.ts} +1 -1
- package/dist/{observable-DMIlYJV1.d.cts → observable-DLGPPtb8.d.cts} +1 -1
- package/dist/patterns/ai/browser.d.cts +4 -4
- package/dist/patterns/ai/browser.d.ts +4 -4
- package/dist/patterns/ai/browser.js +1 -1
- package/dist/patterns/ai/index.cjs +17 -17
- package/dist/patterns/ai/index.d.cts +17 -17
- package/dist/patterns/ai/index.d.ts +17 -17
- package/dist/patterns/ai/index.js +1 -1
- package/dist/patterns/ai/node.d.cts +4 -4
- package/dist/patterns/ai/node.d.ts +4 -4
- package/dist/patterns/ai/node.js +1 -1
- package/dist/patterns/cqrs/index.cjs +3 -3
- package/dist/patterns/cqrs/index.d.cts +6 -6
- package/dist/patterns/cqrs/index.d.ts +6 -6
- package/dist/patterns/cqrs/index.js +1 -1
- package/dist/patterns/demo-shell/index.cjs +5 -5
- package/dist/patterns/demo-shell/index.d.cts +5 -5
- package/dist/patterns/demo-shell/index.d.ts +5 -5
- package/dist/patterns/demo-shell/index.js +1 -1
- package/dist/patterns/domain-templates/index.cjs +3 -3
- package/dist/patterns/domain-templates/index.d.cts +4 -4
- package/dist/patterns/domain-templates/index.d.ts +4 -4
- package/dist/patterns/domain-templates/index.js +1 -1
- package/dist/patterns/graphspec/index.cjs +12 -12
- package/dist/patterns/graphspec/index.d.cts +5 -5
- package/dist/patterns/graphspec/index.d.ts +5 -5
- package/dist/patterns/graphspec/index.js +1 -1
- package/dist/patterns/harness/index.cjs +10 -8
- package/dist/patterns/harness/index.d.cts +11 -12
- package/dist/patterns/harness/index.d.ts +11 -12
- package/dist/patterns/harness/index.js +1 -1
- package/dist/patterns/inspect/index.cjs +3 -0
- package/dist/patterns/inspect/index.d.cts +9 -0
- package/dist/patterns/inspect/index.d.ts +9 -0
- package/dist/patterns/inspect/index.js +1 -0
- package/dist/patterns/job-queue/index.cjs +3 -3
- package/dist/patterns/job-queue/index.d.cts +6 -6
- package/dist/patterns/job-queue/index.d.ts +6 -6
- package/dist/patterns/job-queue/index.js +1 -1
- package/dist/patterns/memory/index.cjs +3 -3
- package/dist/patterns/memory/index.d.cts +6 -6
- package/dist/patterns/memory/index.d.ts +6 -6
- package/dist/patterns/memory/index.js +1 -1
- package/dist/patterns/messaging/index.cjs +3 -3
- package/dist/patterns/messaging/index.d.cts +5 -5
- package/dist/patterns/messaging/index.d.ts +5 -5
- package/dist/patterns/messaging/index.js +1 -1
- package/dist/patterns/orchestration/index.cjs +3 -3
- package/dist/patterns/orchestration/index.d.cts +7 -7
- package/dist/patterns/orchestration/index.d.ts +7 -7
- package/dist/patterns/orchestration/index.js +1 -1
- package/dist/patterns/process/index.cjs +1 -1
- package/dist/patterns/process/index.d.cts +7 -7
- package/dist/patterns/process/index.d.ts +7 -7
- package/dist/patterns/process/index.js +1 -1
- package/dist/patterns/reactive-layout/index.cjs +4 -4
- package/dist/patterns/reactive-layout/index.d.cts +5 -5
- package/dist/patterns/reactive-layout/index.d.ts +5 -5
- package/dist/patterns/reactive-layout/index.js +1 -1
- package/dist/patterns/reduction/index.cjs +3 -3
- package/dist/patterns/reduction/index.d.cts +4 -4
- package/dist/patterns/reduction/index.d.ts +4 -4
- package/dist/patterns/reduction/index.js +1 -1
- package/dist/patterns/surface/index.cjs +8 -8
- package/dist/patterns/surface/index.d.cts +6 -6
- package/dist/patterns/surface/index.d.ts +6 -6
- package/dist/patterns/surface/index.js +1 -1
- package/dist/{pipeline-graph-MWrQZXCq.d.cts → pipeline-graph-WBlobVhU.d.cts} +5 -5
- package/dist/{pipeline-graph-CB4La-UW.d.ts → pipeline-graph-v8fMvqNk.d.ts} +5 -5
- package/dist/{reactive-layout-BtZfUKuL.d.cts → reactive-layout-Dsvob4zD.d.cts} +2 -2
- package/dist/{reactive-layout-KJj4E2dT.d.ts → reactive-layout-v7KPvxoc.d.ts} +2 -2
- package/dist/{reactive-log-_zeEnB9H.d.cts → reactive-log-B00laMSQ.d.cts} +1 -1
- package/dist/{reactive-log-BlAsPLl2.d.ts → reactive-log-BezYsbA_.d.ts} +1 -1
- package/dist/{reactive-map-6P_k3AQM.d.cts → reactive-map-48mnZ-nu.d.cts} +1 -1
- package/dist/{reactive-map-CjXByDV-.d.ts → reactive-map-BVVPdvmi.d.ts} +1 -1
- package/dist/resilience-445VFFXQ.js +1 -0
- package/dist/{sugar-BhfjgetH.d.ts → sugar-CH-2ZY90.d.ts} +1 -1
- package/dist/{sugar-DzePN5-g.d.cts → sugar-DStZfUEK.d.cts} +1 -1
- package/dist/{topology-tree-mF7Emqzm.d.ts → topology-tree-BNGvuG82.d.ts} +1 -1
- package/dist/{topology-tree-3LBKFsUo.d.cts → topology-tree-BSdfSwMi.d.cts} +1 -1
- package/dist/{types-1Dhoi7HM.d.cts → types-B1jDWVsM.d.cts} +1 -1
- package/dist/{types-39jk0kaV.d.ts → types-DkzUUs0H.d.ts} +1 -1
- package/package.json +11 -51
- package/dist/budget-gate-CmmVtasH.d.ts +0 -115
- package/dist/budget-gate-DiP_nK0n.d.cts +0 -115
- package/dist/chunk-2BX4NB34.js +0 -3
- package/dist/chunk-6XVD5TZV.js +0 -1
- package/dist/chunk-756D5TFD.js +0 -1
- package/dist/chunk-7Q4ZD3YW.js +0 -1
- package/dist/chunk-ECQRP2UT.js +0 -1
- package/dist/chunk-INQFTVZA.js +0 -61
- package/dist/chunk-J63M5U46.js +0 -1
- package/dist/chunk-K2Z7UENB.js +0 -1
- package/dist/chunk-OSZ22J7O.js +0 -1
- package/dist/chunk-PPUYQ66A.js +0 -1
- package/dist/chunk-RZJDIV2G.js +0 -1
- package/dist/chunk-SGS4OJGS.js +0 -1
- package/dist/chunk-SVFKHUCW.js +0 -1
- package/dist/chunk-UWA6D7UF.js +0 -3
- package/dist/chunk-VMF23LGB.js +0 -1
- package/dist/chunk-WUT362QV.js +0 -1
- package/dist/chunk-YKD7WUYJ.js +0 -43
- package/dist/index-8s-Qm-gz.d.ts +0 -218
- package/dist/index-BgjS2b8N.d.ts +0 -366
- package/dist/index-BmSQLAZo.d.cts +0 -244
- package/dist/index-CGhMJNHb.d.cts +0 -128
- package/dist/index-CUIkE1l9.d.cts +0 -230
- package/dist/index-Ck35nA-T.d.ts +0 -244
- package/dist/index-CuPUehFa.d.cts +0 -218
- package/dist/index-D1Gc7wV5.d.ts +0 -230
- package/dist/index-N2MAxt7_.d.ts +0 -128
- package/dist/index-t6L2qpHh.d.cts +0 -366
- package/dist/patterns/audit/index.cjs +0 -3
- package/dist/patterns/audit/index.d.cts +0 -8
- package/dist/patterns/audit/index.d.ts +0 -8
- package/dist/patterns/audit/index.js +0 -1
- package/dist/patterns/guarded-execution/index.cjs +0 -3
- package/dist/patterns/guarded-execution/index.d.cts +0 -9
- package/dist/patterns/guarded-execution/index.d.ts +0 -9
- package/dist/patterns/guarded-execution/index.js +0 -1
- package/dist/patterns/lens/index.cjs +0 -3
- package/dist/patterns/lens/index.d.cts +0 -7
- package/dist/patterns/lens/index.d.ts +0 -7
- package/dist/patterns/lens/index.js +0 -1
- package/dist/patterns/refine-loop/index.cjs +0 -5
- package/dist/patterns/refine-loop/index.d.cts +0 -9
- package/dist/patterns/refine-loop/index.d.ts +0 -9
- package/dist/patterns/refine-loop/index.js +0 -1
- package/dist/patterns/resilient-pipeline/index.cjs +0 -3
- package/dist/patterns/resilient-pipeline/index.d.cts +0 -8
- package/dist/patterns/resilient-pipeline/index.d.ts +0 -8
- package/dist/patterns/resilient-pipeline/index.js +0 -1
- package/dist/resilience-S33JV6XC.js +0 -1
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
import { N as Node } from './node-BYInONRr.cjs';
|
|
2
|
-
import { NodeInput } from './extra/sources.cjs';
|
|
3
|
-
import { a as GraphOptions, G as Graph } from './graph-E6likq7w.cjs';
|
|
4
|
-
import { T as TopicGraph } from './index-Cnr1WrlX.cjs';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* refineLoop — universal prompt/artifact optimization loop as a reactive Graph.
|
|
8
|
-
*
|
|
9
|
-
* Roadmap §9.8 (Wave 2.5). The loop is a 4-topic reactive pipeline:
|
|
10
|
-
*
|
|
11
|
-
* iterationTrigger ──▶ GENERATE ──▶ EVALUATE ──▶ ANALYZE ──▶ DECIDE
|
|
12
|
-
* │ │
|
|
13
|
-
* └─────── feedback + trigger ◀─────┘
|
|
14
|
-
*
|
|
15
|
-
* Each stage is a `TopicGraph` so dispatches stay O(1) per subscriber (cursor-
|
|
16
|
-
* based) and every iteration is observable, replayable, and checkpointable.
|
|
17
|
-
*
|
|
18
|
-
* Composition invariants (from COMPOSITION-GUIDE):
|
|
19
|
-
* - §7 feedback cycle: only `iterationTrigger` drives re-generation. Strategy
|
|
20
|
-
* + feedback + dataset are read via closure updaters (§28 factory-time seed)
|
|
21
|
-
* so mid-run swaps apply to the NEXT iteration, never retrigger the current.
|
|
22
|
-
* - §28 factory-time seed: strategy, lastFeedback, prevCandidates, dataset
|
|
23
|
-
* closures captured at wiring time + updated via subscribe handlers so the
|
|
24
|
-
* first activation doesn't drop the initial pair.
|
|
25
|
-
* - §32 nested-drain state-mirror: the decide-effect writes `lastFeedback`
|
|
26
|
-
* BEFORE bumping `iterationTrigger` inside its `batch()`, guaranteeing the
|
|
27
|
-
* mirror is current when the next-iteration wave reaches the generate fn.
|
|
28
|
-
* - §19 terminal-emission: history / best emit once per iteration (settled),
|
|
29
|
-
* not on every intermediate wave.
|
|
30
|
-
* - §27 attachSnapshotStorage: the whole graph is checkpointable — pause overnight,
|
|
31
|
-
* resume tomorrow from the exact iteration count, candidate set, strategy.
|
|
32
|
-
*
|
|
33
|
-
* Scope clamp (v1): core factory + `RefineStrategy<T>` + `blindVariation` and
|
|
34
|
-
* `errorCritique` built-ins + budget gating + checkpoint/resume.
|
|
35
|
-
* `mutateAndRefine` / registry / `autoSelectStrategy` / `optimizeCatalog` /
|
|
36
|
-
* `refineExecutor` are deferred.
|
|
37
|
-
*
|
|
38
|
-
* @module
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
/** A single task row — the unit the evaluator scores one candidate against. */
|
|
42
|
-
interface DatasetItem {
|
|
43
|
-
readonly id: string;
|
|
44
|
-
readonly [k: string]: unknown;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* One candidate's score on one task. Higher is better by convention.
|
|
48
|
-
*
|
|
49
|
-
* Set `candidateIndex` when the evaluator fans out scores across multiple
|
|
50
|
-
* candidates (e.g. `candidates × tasks`). `pickBest` aggregates mean scores
|
|
51
|
-
* per `candidateIndex` when present; when absent, falls back to positional
|
|
52
|
-
* alignment (`scores[i]` ↔ `candidates[i]`).
|
|
53
|
-
*/
|
|
54
|
-
interface EvalResult {
|
|
55
|
-
readonly taskId: string;
|
|
56
|
-
readonly score: number;
|
|
57
|
-
readonly error?: string;
|
|
58
|
-
readonly detail?: unknown;
|
|
59
|
-
/** 0-based index into the `candidates` batch this score belongs to. */
|
|
60
|
-
readonly candidateIndex?: number;
|
|
61
|
-
}
|
|
62
|
-
/** Aggregated feedback the strategy produces from a scores batch. */
|
|
63
|
-
interface Feedback {
|
|
64
|
-
readonly summary: string;
|
|
65
|
-
readonly critique?: unknown;
|
|
66
|
-
readonly weakTasks?: readonly string[];
|
|
67
|
-
readonly score: number;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Strategy interface — plain object, no base class. Strategies implement three
|
|
71
|
-
* pure hooks; the loop infrastructure wraps them in reactive nodes so every
|
|
72
|
-
* decision is visible in `describe()`.
|
|
73
|
-
*
|
|
74
|
-
* `generate` may be sync or async. Async generates yield a microtask per
|
|
75
|
-
* iteration — that's what gives `pause()` / `setStrategy()` a window to
|
|
76
|
-
* interleave. **A fully synchronous `generate` will drain the entire loop
|
|
77
|
-
* during factory activation** (all iterations run before `refineLoop()`
|
|
78
|
-
* returns), which is usually not what you want for observable, steerable
|
|
79
|
-
* loops. Real strategies that call LLMs / evals are async and Just Work;
|
|
80
|
-
* custom sync strategies for tests are fine but should be marked `async`
|
|
81
|
-
* to match real cadence.
|
|
82
|
-
*/
|
|
83
|
-
interface RefineStrategy<T> {
|
|
84
|
-
readonly name: string;
|
|
85
|
-
/** Produce initial candidates from the seed. Called at iteration 0. */
|
|
86
|
-
seed(seed: T): readonly T[];
|
|
87
|
-
/** Reduce scores to feedback. Pure function. */
|
|
88
|
-
analyze(scores: readonly EvalResult[], candidates: readonly T[]): Feedback;
|
|
89
|
-
/**
|
|
90
|
-
* Generate next-iteration candidates from feedback + prior candidates.
|
|
91
|
-
* Async allowed — the loop awaits via `fromAny`.
|
|
92
|
-
*/
|
|
93
|
-
generate(feedback: Feedback, candidates: readonly T[]): Promise<readonly T[]> | readonly T[];
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Evaluator shape — Shape 4 (2026-04-22): both `candidates` and `dataset` are
|
|
97
|
-
* reactive nodes; the evaluator's returned node IS the EVALUATE topic's source
|
|
98
|
-
* (no glue). Implementers can batch-eval (e.g. `funnel` with concurrency) or
|
|
99
|
-
* map per-candidate — user's code.
|
|
100
|
-
*
|
|
101
|
-
* **`EvalResult.candidateIndex` semantics.** Optional per-result field.
|
|
102
|
-
* When present, multi-candidate aggregators ({@link errorCritique}'s
|
|
103
|
-
* `pickBest`) score per index, picking the candidate with the highest
|
|
104
|
-
* mean score. When absent across all results, those aggregators fall back
|
|
105
|
-
* to positional matching against `candidates[0]` — meaning a strategy that
|
|
106
|
-
* generates >1 candidate but emits unindexed scores effectively only ever
|
|
107
|
-
* critiques the first candidate. Set `candidateIndex` whenever the
|
|
108
|
-
* evaluator's score corresponds to a specific candidate in the batch.
|
|
109
|
-
*/
|
|
110
|
-
type Evaluator<T> = (candidates: Node<readonly T[]>, dataset: Node<readonly DatasetItem[]>) => Node<readonly EvalResult[]>;
|
|
111
|
-
/**
|
|
112
|
-
* Early-stop controls. Each field fans into its own derived node; the four
|
|
113
|
-
* combine via `||` into `converged: Node<boolean>`. Callers see exactly
|
|
114
|
-
* which rule tripped via `status` / the DECIDE topic's `reason`.
|
|
115
|
-
*/
|
|
116
|
-
interface ConvergenceOptions {
|
|
117
|
-
/** Stop when aggregate score has not improved for N iterations. */
|
|
118
|
-
patience?: number;
|
|
119
|
-
/** Stop when aggregate score reaches or exceeds this. */
|
|
120
|
-
minScore?: number;
|
|
121
|
-
/** Stop when absolute delta between consecutive scores falls below this. */
|
|
122
|
-
minDelta?: number;
|
|
123
|
-
/** Stop after N total evaluations (iteration count × per-iter candidates). */
|
|
124
|
-
maxEvaluations?: number;
|
|
125
|
-
/** Stop after N iterations. Always set a finite bound in production. */
|
|
126
|
-
maxIterations?: number;
|
|
127
|
-
}
|
|
128
|
-
/** Emitted to the GENERATE topic each time the strategy produces a batch. */
|
|
129
|
-
interface GenerateEvent<T> {
|
|
130
|
-
readonly iteration: number;
|
|
131
|
-
readonly candidates: readonly T[];
|
|
132
|
-
readonly timestamp_ns: number;
|
|
133
|
-
}
|
|
134
|
-
/** Emitted to the EVALUATE topic when scores settle for an iteration. */
|
|
135
|
-
interface EvaluateEvent<T> {
|
|
136
|
-
readonly iteration: number;
|
|
137
|
-
readonly candidates: readonly T[];
|
|
138
|
-
readonly scores: readonly EvalResult[];
|
|
139
|
-
readonly timestamp_ns: number;
|
|
140
|
-
}
|
|
141
|
-
/** Emitted to the ANALYZE topic — strategy's reduction over scores. */
|
|
142
|
-
interface AnalyzeEvent<T> {
|
|
143
|
-
readonly iteration: number;
|
|
144
|
-
readonly candidates: readonly T[];
|
|
145
|
-
readonly feedback: Feedback;
|
|
146
|
-
readonly timestamp_ns: number;
|
|
147
|
-
}
|
|
148
|
-
/** Emitted to the DECIDE topic — branch taken this iteration. */
|
|
149
|
-
interface DecideEvent {
|
|
150
|
-
readonly iteration: number;
|
|
151
|
-
readonly decision: "continue" | "converged" | "budget" | "paused";
|
|
152
|
-
readonly reason?: string;
|
|
153
|
-
readonly timestamp_ns: number;
|
|
154
|
-
}
|
|
155
|
-
type RefineStatus = "running" | "converged" | "budget" | "paused" | "errored";
|
|
156
|
-
interface Iteration<T> {
|
|
157
|
-
readonly n: number;
|
|
158
|
-
readonly candidates: readonly T[];
|
|
159
|
-
readonly scores: readonly EvalResult[];
|
|
160
|
-
readonly feedback: Feedback;
|
|
161
|
-
/** `null` iff the candidate batch for this iteration was empty. */
|
|
162
|
-
readonly best: T | null;
|
|
163
|
-
readonly bestScore: number;
|
|
164
|
-
readonly timestamp_ns: number;
|
|
165
|
-
}
|
|
166
|
-
interface RefineLoopOptions extends ConvergenceOptions {
|
|
167
|
-
/** Reactive dataset OR a plain array (auto-wrapped into `state`). */
|
|
168
|
-
dataset: NodeInput<readonly DatasetItem[]> | readonly DatasetItem[];
|
|
169
|
-
/** Total teacher calls cap across iterations. Default: unlimited. */
|
|
170
|
-
budget?: number;
|
|
171
|
-
/** Graph name. Default: `"refine-loop"`. */
|
|
172
|
-
name?: string;
|
|
173
|
-
/** Extra graph options forwarded to the underlying `Graph`. */
|
|
174
|
-
graph?: GraphOptions;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Return type — extends Graph so all observability tools (`describe`,
|
|
178
|
-
* `explain`, `observe`, `attachSnapshotStorage`, `snapshot`) Just Work.
|
|
179
|
-
*/
|
|
180
|
-
interface RefineLoopGraph<T> extends Graph {
|
|
181
|
-
readonly best: Node<T | null>;
|
|
182
|
-
readonly score: Node<number>;
|
|
183
|
-
readonly status: Node<RefineStatus>;
|
|
184
|
-
readonly history: Node<readonly Iteration<T>[]>;
|
|
185
|
-
readonly strategy: Node<RefineStrategy<T>>;
|
|
186
|
-
readonly iteration: Node<number>;
|
|
187
|
-
/** Stage topics — subscribe for per-stage streaming / cursor consumers. */
|
|
188
|
-
readonly generate: TopicGraph<GenerateEvent<T>>;
|
|
189
|
-
readonly evaluate: TopicGraph<EvaluateEvent<T>>;
|
|
190
|
-
readonly analyze: TopicGraph<AnalyzeEvent<T>>;
|
|
191
|
-
readonly decide: TopicGraph<DecideEvent>;
|
|
192
|
-
/** Swap the active strategy mid-run (human-in-the-loop handoff). */
|
|
193
|
-
setStrategy(next: RefineStrategy<T>): void;
|
|
194
|
-
/** Pause after the current iteration completes. */
|
|
195
|
-
pause(): void;
|
|
196
|
-
/** Resume a paused loop. */
|
|
197
|
-
resume(): void;
|
|
198
|
-
}
|
|
199
|
-
declare function refineLoop<T>(seed: T, evaluator: Evaluator<T>, initialStrategy: RefineStrategy<T>, opts: RefineLoopOptions): RefineLoopGraph<T>;
|
|
200
|
-
/**
|
|
201
|
-
* Context passed to a `blindVariation` teacher per call. `reportCost` is a
|
|
202
|
-
* per-call hook — see `BlindVariationOptions.tokens`.
|
|
203
|
-
*/
|
|
204
|
-
interface BlindVariationContext<T> {
|
|
205
|
-
readonly prior: T;
|
|
206
|
-
/**
|
|
207
|
-
* Report tokens consumed by this teacher call. Aggregated per iteration
|
|
208
|
-
* and flushed to `opts.tokens` in the strategy's `finally` block so
|
|
209
|
-
* partial spend is preserved when the teacher throws mid-batch.
|
|
210
|
-
*/
|
|
211
|
-
readonly reportCost: (tokens: number) => void;
|
|
212
|
-
}
|
|
213
|
-
interface BlindVariationOptions<T> {
|
|
214
|
-
/** Name — default: `"blindVariation"`. */
|
|
215
|
-
name?: string;
|
|
216
|
-
/** Number of candidates generated per iteration. Default: 4. */
|
|
217
|
-
width?: number;
|
|
218
|
-
/**
|
|
219
|
-
* Run teacher calls in parallel via `Promise.all`. Default `true` — the
|
|
220
|
-
* common case (independent LLM calls). Set `false` to run sequentially
|
|
221
|
-
* via `for/await` when teachers share stateful resources (rate limiters,
|
|
222
|
-
* rolling context, serial API ordering) that don't tolerate concurrency.
|
|
223
|
-
*/
|
|
224
|
-
parallel?: boolean;
|
|
225
|
-
/**
|
|
226
|
-
* Optional cost counter node. Running total tokens reported via
|
|
227
|
-
* `ctx.reportCost` during each iteration is added to this node in the
|
|
228
|
-
* strategy's `finally` block — fires on success AND on teacher throw so
|
|
229
|
-
* partial spend is never lost. User owns the node; wire to `budgetGate`,
|
|
230
|
-
* `attachSnapshotStorage`, telemetry, etc.
|
|
231
|
-
*/
|
|
232
|
-
tokens?: Node<number>;
|
|
233
|
-
/**
|
|
234
|
-
* Teacher — given `{prior, reportCost}`, produce one variant. Async
|
|
235
|
-
* allowed. Called `width` times per iteration. Call `ctx.reportCost(n)`
|
|
236
|
-
* to track tokens consumed per call (optional, no-op if `opts.tokens`
|
|
237
|
-
* is not set).
|
|
238
|
-
*/
|
|
239
|
-
teacher: (ctx: BlindVariationContext<T>) => Promise<T> | T;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Simplest built-in strategy: generate N variants per iteration via the
|
|
243
|
-
* supplied `teacher`; no feedback-informed steering (equivalent to Random
|
|
244
|
-
* Search). Validates the loop infrastructure end-to-end and is the baseline
|
|
245
|
-
* every other strategy should outperform.
|
|
246
|
-
*
|
|
247
|
-
* `analyze` records the mean score and flags the worst task — strategies that
|
|
248
|
-
* care about per-task critique layer on top.
|
|
249
|
-
*/
|
|
250
|
-
declare function blindVariation<T>(opts: BlindVariationOptions<T>): RefineStrategy<T>;
|
|
251
|
-
/**
|
|
252
|
-
* Context passed to an `errorCritique` teacher. `critique` is the pre-formatted
|
|
253
|
-
* summary a prompt template can drop in verbatim; `failures` carries the
|
|
254
|
-
* structured evidence (per-task error / score / detail) for richer prompts.
|
|
255
|
-
*/
|
|
256
|
-
interface ErrorCritiqueContext<T> {
|
|
257
|
-
readonly prior: T;
|
|
258
|
-
readonly critique: string;
|
|
259
|
-
readonly failures: readonly EvalResult[];
|
|
260
|
-
/**
|
|
261
|
-
* Report tokens consumed by this teacher call. Aggregated per iteration
|
|
262
|
-
* and flushed to `opts.tokens` in the strategy's `finally` block so
|
|
263
|
-
* partial spend is preserved when the teacher throws mid-batch.
|
|
264
|
-
*/
|
|
265
|
-
readonly reportCost: (tokens: number) => void;
|
|
266
|
-
}
|
|
267
|
-
interface ErrorCritiqueOptions<T> {
|
|
268
|
-
/** Name — default: `"errorCritique"`. */
|
|
269
|
-
name?: string;
|
|
270
|
-
/** Number of candidates generated per iteration. Default: 4. */
|
|
271
|
-
width?: number;
|
|
272
|
-
/**
|
|
273
|
-
* Cut-off below which a task is classified as a failure and fed into the
|
|
274
|
-
* critique. Default: the batch mean — any task scoring below the batch
|
|
275
|
-
* mean is a failure. Pass a number for an absolute cut-off, or a function
|
|
276
|
-
* for per-batch computation (e.g. a percentile). When the default mean
|
|
277
|
-
* is non-finite (NaN / ±Infinity from a degenerate evaluator), ALL scores
|
|
278
|
-
* are treated as failures so the critique loop continues to steer.
|
|
279
|
-
*/
|
|
280
|
-
failureThreshold?: number | ((scores: readonly EvalResult[]) => number);
|
|
281
|
-
/** Cap on failure samples packed into the critique. Default: 5. */
|
|
282
|
-
maxFailureSamples?: number;
|
|
283
|
-
/**
|
|
284
|
-
* Format failures into the `critique` string passed to the teacher. Default
|
|
285
|
-
* joins `- taskId (score=N) | error: …` lines. Override to shape LLM prompts.
|
|
286
|
-
*
|
|
287
|
-
* **Note:** the `feedback` argument is a shell with `{score, weakTasks}`
|
|
288
|
-
* populated; `summary` is empty because `analyze` computes the final summary
|
|
289
|
-
* AFTER `formatCritique` runs (the summary embeds the formatted count).
|
|
290
|
-
* Rely on `failures` and `feedback.score` — do not read `feedback.summary`
|
|
291
|
-
* here.
|
|
292
|
-
*/
|
|
293
|
-
formatCritique?: (failures: readonly EvalResult[], feedback: Feedback) => string;
|
|
294
|
-
/**
|
|
295
|
-
* Run teacher calls in parallel via `Promise.all`. Default `true` — the
|
|
296
|
-
* common case (independent LLM calls). Set `false` to run sequentially
|
|
297
|
-
* via `for/await` when teachers share stateful resources (rate limiters,
|
|
298
|
-
* rolling context, serial API ordering) that don't tolerate concurrency.
|
|
299
|
-
*/
|
|
300
|
-
parallel?: boolean;
|
|
301
|
-
/**
|
|
302
|
-
* Optional cost counter node. Running total tokens reported via
|
|
303
|
-
* `ctx.reportCost` during each iteration is added to this node in the
|
|
304
|
-
* strategy's `finally` block — fires on success AND on teacher throw so
|
|
305
|
-
* partial spend is never lost. User owns the node; wire to `budgetGate`,
|
|
306
|
-
* `attachSnapshotStorage`, telemetry, etc.
|
|
307
|
-
*/
|
|
308
|
-
tokens?: Node<number>;
|
|
309
|
-
/**
|
|
310
|
-
* Teacher — given `{prior, critique, failures, reportCost}`, produce one
|
|
311
|
-
* refined variant. Called `width` times per iteration. Async allowed.
|
|
312
|
-
* Call `ctx.reportCost(n)` to track tokens consumed per call (optional,
|
|
313
|
-
* no-op if `opts.tokens` is not set).
|
|
314
|
-
*/
|
|
315
|
-
teacher: (ctx: ErrorCritiqueContext<T>) => Promise<T> | T;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Critique-driven strategy (ProTeGi-style "textual gradient"). Each iteration:
|
|
319
|
-
* 1. `analyze` classifies tasks scoring below a threshold as failures, picks
|
|
320
|
-
* the best candidate from the batch, and packs both plus a formatted
|
|
321
|
-
* critique string into `feedback.critique` as a private payload.
|
|
322
|
-
* 2. `generate` unpacks that payload and calls the teacher with
|
|
323
|
-
* `{prior, critique, failures, reportCost}` `width` times, returning the
|
|
324
|
-
* refined batch.
|
|
325
|
-
*
|
|
326
|
-
* The teacher receives a pre-formatted string (drop into an LLM prompt) AND
|
|
327
|
-
* the structured failure list (for richer prompts that want per-task detail).
|
|
328
|
-
* Throws on empty candidate batches — matches `blindVariation`'s contract
|
|
329
|
-
* (no silent zero-candidate cycles).
|
|
330
|
-
*
|
|
331
|
-
* When `setStrategy()` swaps this strategy in mid-run, the first `generate`
|
|
332
|
-
* may receive a `Feedback` produced by the prior strategy (no private payload);
|
|
333
|
-
* the fallback path uses `candidates[last]` as the prior and the feedback
|
|
334
|
-
* summary as the critique, so the loop keeps running without a stall. When a
|
|
335
|
-
* private payload IS present, `priv.critiqueText` takes precedence over any
|
|
336
|
-
* edits a caller made to `feedback.summary` — treat `critique` as the
|
|
337
|
-
* strategy-owned channel.
|
|
338
|
-
*/
|
|
339
|
-
declare function errorCritique<T>(opts: ErrorCritiqueOptions<T>): RefineStrategy<T>;
|
|
340
|
-
|
|
341
|
-
type index_AnalyzeEvent<T> = AnalyzeEvent<T>;
|
|
342
|
-
type index_BlindVariationContext<T> = BlindVariationContext<T>;
|
|
343
|
-
type index_BlindVariationOptions<T> = BlindVariationOptions<T>;
|
|
344
|
-
type index_ConvergenceOptions = ConvergenceOptions;
|
|
345
|
-
type index_DatasetItem = DatasetItem;
|
|
346
|
-
type index_DecideEvent = DecideEvent;
|
|
347
|
-
type index_ErrorCritiqueContext<T> = ErrorCritiqueContext<T>;
|
|
348
|
-
type index_ErrorCritiqueOptions<T> = ErrorCritiqueOptions<T>;
|
|
349
|
-
type index_EvalResult = EvalResult;
|
|
350
|
-
type index_EvaluateEvent<T> = EvaluateEvent<T>;
|
|
351
|
-
type index_Evaluator<T> = Evaluator<T>;
|
|
352
|
-
type index_Feedback = Feedback;
|
|
353
|
-
type index_GenerateEvent<T> = GenerateEvent<T>;
|
|
354
|
-
type index_Iteration<T> = Iteration<T>;
|
|
355
|
-
type index_RefineLoopGraph<T> = RefineLoopGraph<T>;
|
|
356
|
-
type index_RefineLoopOptions = RefineLoopOptions;
|
|
357
|
-
type index_RefineStatus = RefineStatus;
|
|
358
|
-
type index_RefineStrategy<T> = RefineStrategy<T>;
|
|
359
|
-
declare const index_blindVariation: typeof blindVariation;
|
|
360
|
-
declare const index_errorCritique: typeof errorCritique;
|
|
361
|
-
declare const index_refineLoop: typeof refineLoop;
|
|
362
|
-
declare namespace index {
|
|
363
|
-
export { type index_AnalyzeEvent as AnalyzeEvent, type index_BlindVariationContext as BlindVariationContext, type index_BlindVariationOptions as BlindVariationOptions, type index_ConvergenceOptions as ConvergenceOptions, type index_DatasetItem as DatasetItem, type index_DecideEvent as DecideEvent, type index_ErrorCritiqueContext as ErrorCritiqueContext, type index_ErrorCritiqueOptions as ErrorCritiqueOptions, type index_EvalResult as EvalResult, type index_EvaluateEvent as EvaluateEvent, type index_Evaluator as Evaluator, type index_Feedback as Feedback, type index_GenerateEvent as GenerateEvent, type index_Iteration as Iteration, type index_RefineLoopGraph as RefineLoopGraph, type index_RefineLoopOptions as RefineLoopOptions, type index_RefineStatus as RefineStatus, type index_RefineStrategy as RefineStrategy, index_blindVariation as blindVariation, index_errorCritique as errorCritique, index_refineLoop as refineLoop };
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
export { type AnalyzeEvent as A, type BlindVariationContext as B, type ConvergenceOptions as C, type DatasetItem as D, type Evaluator as E, type Feedback as F, type GenerateEvent as G, type Iteration as I, type RefineStrategy as R, type EvalResult as a, type RefineLoopOptions as b, type RefineStatus as c, type BlindVariationOptions as d, type DecideEvent as e, type ErrorCritiqueContext as f, type ErrorCritiqueOptions as g, type EvaluateEvent as h, index as i, type RefineLoopGraph as j, blindVariation as k, errorCritique as l, refineLoop as r };
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";var it=Object.defineProperty;var Tn=Object.getOwnPropertyDescriptor;var On=Object.getOwnPropertyNames;var Nn=Object.prototype.hasOwnProperty;var z=(r,e)=>()=>(r&&(e=r(r=0)),e);var kn=(r,e)=>{for(var t in e)it(r,t,{get:e[t],enumerable:!0})},xn=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of On(e))!Nn.call(r,s)&&s!==t&&it(r,s,{get:()=>e[s],enumerable:!(n=Tn(e,s))||n.enumerable});return r};var En=r=>xn(it({},"__esModule",{value:!0}),r);function Me(){return ge>0||Ne}function Pt(){return ge>0}function be(r){ge>0?ke.push(r):r()}function ce(r){ge+=1;let e=!1;try{r()}catch(t){throw e=!0,t}finally{if(ge-=1,ge===0)if(e){if(!Ne){let t=ke.splice(0);for(let n of t)try{n()}catch{}ue.length=0,de.length=0,me.length=0}}else An()}}function An(){let r=!Ne;r&&(Ne=!0);let e=[],t=0;try{for(;ue.length>0||de.length>0||me.length>0||r&&ke.length>0;){if(r&&ke.length>0){let o=ke.splice(0);for(let i of o)try{i()}catch(a){e.push(a)}continue}if(t+=1,t>1e3)throw ue.length=0,de.length=0,me.length=0,new Error("batch drain exceeded 1000 iterations \u2014 likely a reactive cycle");let s=(ue.length>0?ue:de.length>0?de:me).splice(0);for(let o of s)try{o()}catch(i){e.push(i)}}}finally{r&&(Ne=!1)}if(e.length===1)throw e[0];if(e.length>1)throw new AggregateError(e,"batch drain: multiple callbacks threw")}function Pe(r,e,t){if(e.length===0)return;if(e.length===1){let d=t(e[0][0]);if(d<3||!Me()){r(e);return}(d>=5?me:d===4?de:ue).push(()=>r(e));return}let n=e.length,s=n,o=n,i=n,a=0;for(;a<n&&t(e[a][0])<3;)a++;for(s=a;a<n&&t(e[a][0])===3;)a++;for(o=a;a<n&&t(e[a][0])===4;)a++;i=a;let u=Me();if(s>0){let d=e.slice(0,s);r(d)}if(o>s){let d=e.slice(s,o);u?ue.push(()=>r(d)):r(d)}if(i>o){let d=e.slice(o,i);u?de.push(()=>r(d)):r(d)}if(n>i){let d=e.slice(i,n);u?me.push(()=>r(d)):r(d)}}var ge,Ne,ue,de,me,ke,xe=z(()=>{"use strict";ge=0,Ne=!1,ue=[],de=[],me=[],ke=[]});function B(){return Math.trunc(performance.now()*1e6)}function oe(){return Date.now()*1e6}var Ee=z(()=>{"use strict"});function $t(r){return Array.isArray(r)?[...r]:[r]}function Sn(r,e){return r.has(e)||r.has("*")}function Rn(r){let e=[];return r((s,o)=>{e.push({kind:"allow",actions:new Set($t(s)),where:o?.where??(()=>!0)})},(s,o)=>{e.push({kind:"deny",actions:new Set($t(s)),where:o?.where??(()=>!0)})}),(s,o)=>{let i=!1,a=!1;for(let u of e)Sn(u.actions,o)&&u.where(s)&&(u.kind==="deny"?i=!0:a=!0);return i?!1:a}}function at(r){return Rn((e,t)=>{for(let n of r){let s=n.actorType==null?null:new Set(Array.isArray(n.actorType)?n.actorType:[n.actorType]),o=n.actorId==null?null:new Set(Array.isArray(n.actorId)?n.actorId:[n.actorId]),i=Object.entries(n.claims??{}),a=u=>{if(s!==null&&!s.has(String(u.type))||o!==null&&!o.has(String(u.id??"")))return!1;for(let[d,l]of i)if(u[d]!==l)return!1;return!0};n.effect==="deny"?t(n.action,{where:a}):e(n.action,{where:a})}})}function ut(r){let e=Dn.filter(t=>r({type:t,id:""},"write"));return e.length===0?"restricted":e.includes("human")&&e.includes("llm")&&e.every(t=>t==="human"||t==="llm"||t==="system")?"both":e.length===1?e[0]:e.join("+")}var J,Dn,ye=z(()=>{"use strict";J=class extends Error{actor;action;nodeName;constructor(e,t){super(t??`GuardDenied: action "${String(e.action)}" denied for actor type "${String(e.actor.type)}"`),this.name="GuardDenied",this.actor=e.actor,this.action=e.action,this.nodeName=e.nodeName}get node(){return this.nodeName}};Dn=["human","llm","wallet","system"]});var ve,C,U,W,X,Q,re,F,V,$,le,$e,It,Ie,Lt,Ft,Le,dt,ct,lt,Fe,ie=z(()=>{"use strict";ve=Symbol.for("graphrefly/START"),C=Symbol.for("graphrefly/DATA"),U=Symbol.for("graphrefly/DIRTY"),W=Symbol.for("graphrefly/RESOLVED"),X=Symbol.for("graphrefly/INVALIDATE"),Q=Symbol.for("graphrefly/PAUSE"),re=Symbol.for("graphrefly/RESUME"),F=Symbol.for("graphrefly/TEARDOWN"),V=Symbol.for("graphrefly/COMPLETE"),$=Symbol.for("graphrefly/ERROR"),le=Object.freeze([U]),$e=Object.freeze([W]),It=Object.freeze([X]),Ie=Object.freeze([ve]),Lt=Object.freeze([V]),Ft=Object.freeze([F]),Le=Object.freeze([le]),dt=Object.freeze([$e]),ct=Object.freeze([It]),lt=Object.freeze([Lt]),Fe=Object.freeze([Ft])});function zt(r,e){let t=new TextEncoder().encode(r.name);if(t.length===0||t.length>255)throw new Error(`encodeEnvelope: codec name "${r.name}" encodes to ${t.length} bytes (must be 1\u2013255)`);let n=r.version;if(!Number.isInteger(n)||n<0||n>65535)throw new Error(`encodeEnvelope: codec.version ${n} out of u16 range (expected integer 0\u201365535)`);let s=2+t.length+2+e.length;if(s>4294967295)throw new Error(`encodeEnvelope: total envelope size ${s} exceeds 2^32-1 bytes (payload ${e.length} bytes)`);let o=new Uint8Array(s),i=0;return o[i++]=ft,o[i++]=t.length,o.set(t,i),i+=t.length,o[i++]=n>>>8&255,o[i++]=n&255,o.set(e,i),o}function jt(r,e){if(r.length<Vt)throw new Error(`decodeEnvelope: bytes too short (${r.length} < ${Vt})`);let t=0,n=r[t++];if(n!==ft)throw new Error(`decodeEnvelope: unsupported envelope version ${n} (expected ${ft})`);let s=r[t++];if(s===0)throw new Error("decodeEnvelope: name_len must be >= 1");if(t+s+2>r.length)throw new Error(`decodeEnvelope: envelope truncated (need ${t+s+2} bytes, have ${r.length})`);let o=new TextDecoder().decode(r.subarray(t,t+s));t+=s;let i=(r[t]<<8|r[t+1])>>>0;t+=2;let a=r.subarray(t),u=e.lookupCodec(o);if(u==null)throw new Error(`decodeEnvelope: codec "${o}" not registered (envelope codec_v=${i})`);return{codec:u,codecVersion:i,payload:a}}function Ht(r){r.registerCodec(Cn)}var Cn,ft,Vt,pt=z(()=>{"use strict";Cn={name:"json",version:1,contentType:"application/json",encode(r){let e=JSON.stringify(r);return new TextEncoder().encode(e)},decode(r,e){let t=new TextDecoder().decode(r);return JSON.parse(t)}},ft=1,Vt=4});function Ve(r){if(r==null)return _e;let{type:e,id:t,...n}=r;return{type:e??"system",id:t??"",...n}}var _e,ze=z(()=>{"use strict";_e={type:"system",id:""}});function Bt(r){r.registerMessageType(ve,{tier:0,wireCrossing:!1}),r.registerMessageType(U,{tier:1,wireCrossing:!1}),r.registerMessageType(X,{tier:1,wireCrossing:!1,metaPassthrough:!1}),r.registerMessageType(Q,{tier:2,wireCrossing:!1}),r.registerMessageType(re,{tier:2,wireCrossing:!1}),r.registerMessageType(C,{tier:3,wireCrossing:!0}),r.registerMessageType(W,{tier:3,wireCrossing:!0}),r.registerMessageType(V,{tier:4,wireCrossing:!0,metaPassthrough:!1}),r.registerMessageType($,{tier:4,wireCrossing:!0,metaPassthrough:!1}),r.registerMessageType(F,{tier:5,wireCrossing:!0,metaPassthrough:!1})}var je,Ut=z(()=>{"use strict";ie();je=class{_messageTypes=new Map;_codecs=new Map;_onMessage;_onSubscribe;_defaultVersioning;_defaultHashFn;_inspectorEnabled=!(typeof process<"u"&&process.env?.NODE_ENV==="production");_globalInspector;_rigorRecorder;_frozen=!1;tierOf;constructor(e){this._onMessage=e.onMessage,this._onSubscribe=e.onSubscribe,this._defaultVersioning=e.defaultVersioning,this._defaultHashFn=e.defaultHashFn,this.tierOf=t=>{let n=this._messageTypes.get(t);return n!=null?n.tier:1}}get onMessage(){return this._frozen=!0,this._onMessage}get onSubscribe(){return this._frozen=!0,this._onSubscribe}set onMessage(e){this._assertUnfrozen(),this._onMessage=e}set onSubscribe(e){this._assertUnfrozen(),this._onSubscribe=e}get defaultVersioning(){return this._defaultVersioning}set defaultVersioning(e){this._assertUnfrozen(),this._defaultVersioning=e}get defaultHashFn(){return this._defaultHashFn}set defaultHashFn(e){this._assertUnfrozen(),this._defaultHashFn=e}get inspectorEnabled(){return this._inspectorEnabled}set inspectorEnabled(e){this._inspectorEnabled=e}get globalInspector(){return this._globalInspector}set globalInspector(e){this._globalInspector=e}get rigorRecorder(){return this._rigorRecorder}set rigorRecorder(e){this._rigorRecorder=e}registerMessageType(e,t){return this._assertUnfrozen(),this._messageTypes.set(e,{tier:t.tier,wireCrossing:t.wireCrossing??t.tier>=3,metaPassthrough:t.metaPassthrough??!0}),this}messageTier(e){let t=this._messageTypes.get(e);return t!=null?t.tier:1}isWireCrossing(e){let t=this._messageTypes.get(e);return t!=null?t.wireCrossing:!0}isLocalOnly(e){return!this.isWireCrossing(e)}isMetaPassthrough(e){let t=this._messageTypes.get(e);return t!=null?t.metaPassthrough:!0}isKnownMessageType(e){return this._messageTypes.has(e)}registerCodec(e){return this._assertUnfrozen(),this._codecs.set(e.name,e),this}lookupCodec(e){return this._codecs.get(e)}_isFrozen(){return this._frozen}_assertUnfrozen(){if(this._frozen)throw new Error("GraphReFlyConfig is frozen: a node has already captured this config. Register custom types and set hooks before creating any node.")}}});function ht(r){if(r===void 0)return null;if(typeof r=="number"){if(!Number.isFinite(r))throw new TypeError(`Cannot hash non-finite number: ${r}`);if(Number.isInteger(r)&&!Number.isSafeInteger(r))throw new TypeError(`Cannot hash integer outside safe range (|n| > 2^53-1): ${r}. Cross-language cid parity is not guaranteed for unsafe integers.`);return r}if(typeof r=="string"||typeof r=="boolean"||r===null)return r;if(Array.isArray(r))return r.map(ht);if(typeof r=="object"&&r!==null){let e={};for(let t of Object.keys(r).sort())e[t]=ht(r[t]);return e}return null}function Pn(r){let e=Mn.encode(r),t=e.length,n=t*8,s=t+9+63&-64,o=new Uint8Array(s);o.set(e),o[t]=128;let i=new DataView(o.buffer);i.setUint32(s-4,n>>>0,!1),i.setUint32(s-8,Math.floor(n/4294967296)>>>0,!1);let a=1779033703,u=3144134277,d=1013904242,l=2773480762,h=1359893119,p=2600822924,g=528734635,c=1541459225,_=new Uint32Array(64),f=(v,b)=>v>>>b|v<<32-b;for(let v=0;v<s;v+=64){for(let N=0;N<16;N++)_[N]=i.getUint32(v+N*4,!1);for(let N=16;N<64;N++){let S=_[N-15],D=_[N-2],R=f(S,7)^f(S,18)^S>>>3,se=f(D,17)^f(D,19)^D>>>10;_[N]=_[N-16]+R+_[N-7]+se>>>0}let b=a,y=u,w=d,k=l,m=h,O=p,x=g,A=c;for(let N=0;N<64;N++){let S=f(m,6)^f(m,11)^f(m,25),D=m&O^~m&x,R=A+S+D+Gn[N]+_[N]>>>0,se=f(b,2)^f(b,13)^f(b,22),ne=b&y^b&w^y&w,Ce=se+ne>>>0;A=x,x=O,O=m,m=k+R>>>0,k=w,w=y,y=b,b=R+Ce>>>0}a=a+b>>>0,u=u+y>>>0,d=d+w>>>0,l=l+k>>>0,h=h+m>>>0,p=p+O>>>0,g=g+x>>>0,c=c+A>>>0}let T=v=>v.toString(16).padStart(8,"0");return T(a)+T(u)+T(d)+T(l)+T(h)+T(p)+T(g)+T(c)}function Ae(r){let e=ht(r??null),t=JSON.stringify(e);return Pn(t).slice(0,16)}function $n(){let r=globalThis.crypto;if(r?.randomUUID)return r.randomUUID();let e=()=>Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0"),t=e()+e()+e()+e();return`${t.slice(0,8)}-${t.slice(8,12)}-4${t.slice(13,16)}-${(parseInt(t.slice(16,17),16)&3|8).toString(16)}${t.slice(17,20)}-${t.slice(20,32)}`}function gt(r,e,t){let n=t?.id??$n();if(r===0)return{id:n,version:0};let o=(t?.hash??Ae)(e);return{id:n,version:0,cid:o,prev:null}}function Wt(r,e,t){r.version+=1,"cid"in r&&(r.prev=r.cid,r.cid=t(e))}var Gn,Mn,mt=z(()=>{"use strict";Gn=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Mn=new TextEncoder});function Yt(r){return{node:r,unsub:null,prevData:void 0,dirty:!1,involvedThisWave:!1,dataBatch:[],terminal:void 0}}function bt(r){r.prevData=void 0,r.dirty=!1,r.involvedThisWave=!1,r.dataBatch.length=0,r.terminal=void 0}function He(r){return r.length===0?r:typeof r[0]=="symbol"?[r]:r}function Te(r,e,t){let n=Jt(r)?r:[],s=typeof r=="function"?r:typeof e=="function"?e:void 0,o={};return Jt(r)?o=(yt(e)?e:t)??{}:yt(r)?o=r:o=(yt(e)?e:t)??{},new I(n,s,o)}var Kt,qt,In,Ln,we,I,Jt,yt,fe=z(()=>{"use strict";pt();ze();xe();Ee();Ut();ye();ie();mt();Kt=()=>{},qt=100;In=(r,e,t,n)=>{t.direction==="down-in"&&r._onDepMessage(t.depIndex,e)},Ln=(r,e,t,n)=>{let s=r;if(s._status==="completed"||s._status==="errored")return;let o=s._cached,i=o===void 0?[Ie]:[Ie,[C,o]];s._status==="dirty"&&i.push(le),Pe(e,i,s._config.tierOf)},we=new je({onMessage:In,onSubscribe:Ln});Bt(we);Ht(we);I=class r{_optsName;_describeKind;meta;_hasMeta;_config;_deps;_sinks=null;_sinkCount=0;_cached;_status;_cleanup;_store={};_waveHasNewData=!1;_hasNewTerminal=!1;_hasCalledFnOnce=!1;_paused=!1;_pendingWave=!1;_isExecutingFn=!1;_pendingRerun=!1;_rerunDepth=0;_dirtyDepCount=0;_batchPendingMessages=null;_pauseLocks=null;_pauseBuffer=null;_fn;_equals;_resubscribable;_resetOnTeardown;_autoComplete;_autoError;_pausable;_partial;_guard;_extraGuards;_hashFn;_versioning;_versioningLevel;_lastMutation;_inspectorHooks;_actions;constructor(e,t,n){this._config=n.config??we,this._config.onMessage,this._optsName=n.name,this._describeKind=n.describeKind,this._equals=n.equals??Object.is,this._resubscribable=n.resubscribable??!1,this._resetOnTeardown=n.resetOnTeardown??!1,this._autoComplete=n.completeWhenDepsComplete??!0,this._autoError=n.errorWhenDepsError??!0,this._pausable=n.pausable??!0,this._guard=n.guard,this._fn=t,this._partial=n.partial??!1,this._cached=n.initial!==void 0?n.initial:void 0,this._status=e.length===0&&t==null&&this._cached!==void 0?"settled":"sentinel",this._hashFn=n.versioningHash??this._config.defaultHashFn??Ae;let s=n.versioning??this._config.defaultVersioning;this._versioningLevel=s,this._versioning=s!=null?gt(s,this._cached===void 0?void 0:this._cached,{id:n.versioningId,hash:this._hashFn}):void 0,this._deps=e.map(Yt);let o={};for(let[a,u]of Object.entries(n.meta??{})){let d={initial:u,name:`${n.name??"node"}:meta:${a}`,describeKind:"state",config:this._config};n.guard!=null&&(d.guard=n.guard),o[a]=new r([],void 0,d)}Object.freeze(o),this.meta=o,this._hasMeta=Object.keys(o).length>0;let i=this;this._actions={emit(a){i._emit([[C,a]])},down(a){i._emit(He(a))},up(a){i._emitUp(He(a))}},this.down=this.down.bind(this),this.up=this.up.bind(this)}get _isTerminal(){return this._status==="completed"||this._status==="errored"}get name(){return this._optsName}get status(){return this._status}get cache(){return this._cached===void 0?void 0:this._cached}get lastMutation(){return this._lastMutation}get v(){return this._versioning}hasGuard(){return this._guard!=null}_applyVersioning(e,t){if(this._isExecutingFn)throw new Error(`Node "${this.name}": _applyVersioning cannot run mid-fn \u2014 call it outside of \`_execFn\` (typically at graph setup time before the first subscribe).`);let n=this._versioningLevel;if(n!=null&&e<=n)return;let s=t?.hash??this._hashFn;s!==this._hashFn&&(this._hashFn=s);let o=this._cached===void 0?void 0:this._cached,i=this._versioning,a=i?.id??t?.id,u=i?.version??0,d=gt(e,o,{id:a,hash:s});d.version=u,this._versioning=d,this._versioningLevel=e}_setInspectorHook(e){return e==null?()=>{}:(this._inspectorHooks==null&&(this._inspectorHooks=new Set),this._inspectorHooks.add(e),()=>{this._inspectorHooks?.delete(e),this._inspectorHooks?.size===0&&(this._inspectorHooks=void 0)})}_pushGuard(e){return this._extraGuards==null&&(this._extraGuards=new Set),this._extraGuards.add(e),()=>{this._extraGuards?.delete(e),this._extraGuards?.size===0&&(this._extraGuards=void 0)}}allowsObserve(e){if(this._guard==null&&this._extraGuards==null)return!0;let t=Ve(e);if(this._guard!=null&&!this._guard(t,"observe"))return!1;if(this._extraGuards!=null){for(let n of this._extraGuards)if(!n(t,"observe"))return!1}return!0}_checkGuard(e){if(e?.internal)return;let t=this._guard!=null||this._extraGuards!=null,n=e?.actor!=null;if(!t&&!n)return;let s=Ve(e?.actor),o=e?.delivery==="signal"?"signal":"write";if(this._guard!=null&&!this._guard(s,o))throw new J({actor:s,action:o,nodeName:this.name});if(this._extraGuards!=null){for(let i of this._extraGuards)if(!i(s,o))throw new J({actor:s,action:o,nodeName:this.name})}this._lastMutation={actor:s,timestamp_ns:oe()}}down(e,t){let n=He(e);n.length!==0&&(this._checkGuard(t),this._emit(n))}emit(e,t){this._checkGuard(t),this._emit([[C,e]])}up(e,t){if(this._deps.length===0)return;let n=He(e);if(n.length===0)return;this._checkGuard(t);let s=t??{internal:!0};this._validateUpTiers(n);for(let o of this._deps)o.node.up?.(n,s)}_emitUp(e){if(this._deps.length!==0&&e.length!==0){this._validateUpTiers(e);for(let t of this._deps)t.node.up?.(e,{internal:!0})}}_validateUpTiers(e){let t=this._config.tierOf;for(let n of e){let s=t(n[0]);if(s===3||s===4)throw new Error(`Node "${this.name}": tier-${s} messages cannot flow up \u2014 DATA/RESOLVED/COMPLETE/ERROR are downstream-only. Use \`down(...)\` for value delivery; \`up(...)\` is for control signals (DIRTY, INVALIDATE, PAUSE, RESUME, TEARDOWN).`)}}subscribe(e,t){if(t!=null&&this._guard!=null){let u=Ve(t);if(!this._guard(u,"observe"))throw new J({actor:u,action:"observe",nodeName:this.name})}let s=this._isTerminal&&this._resubscribable;if(s){this._cached=void 0,this._status="sentinel",this._store={},this._hasCalledFnOnce=!1,this._waveHasNewData=!1,this._hasNewTerminal=!1,this._paused=!1,this._pendingWave=!1,this._pendingRerun=!1,this._isExecutingFn=!1,this._rerunDepth=0,this._dirtyDepCount=0,this._pauseLocks=null,this._pauseBuffer=null;for(let u of this._deps)bt(u);if(this._partial===!1){for(let u of this._deps)if(u.prevData!==void 0||u.dataBatch.length!==0||u.terminal!==void 0||u.dirty)throw new Error(`resubscribable-reset invariant: DepRecord not fully reset for node ${this._optsName??"(anonymous)"}`)}}this._sinkCount+=1;let o;try{o=this._config.onSubscribe(this,e,{sinkCount:this._sinkCount,afterTerminalReset:s},this._actions)}catch(u){throw this._sinkCount-=1,u}this._sinks==null?this._sinks=e:typeof this._sinks=="function"?this._sinks=new Set([this._sinks,e]):this._sinks.add(e);let i=this._isTerminal;if(this._sinkCount===1&&!i)try{this._activate()}catch(u){if(this._sinkCount-=1,this._removeSink(e),this._sinkCount===0&&(this._status="sentinel"),typeof o=="function")try{o()}catch{}throw u}this._status==="sentinel"&&this._cached===void 0&&(this._status="pending");let a=!1;return()=>{a||(a=!0,this._sinkCount-=1,this._removeSink(e),typeof o=="function"&&o(),this._sinks==null&&this._deactivate())}}_removeSink(e){if(this._sinks===e)this._sinks=null;else if(this._sinks!=null&&typeof this._sinks!="function")if(this._sinks.delete(e),this._sinks.size===1){let[t]=this._sinks;this._sinks=t}else this._sinks.size===0&&(this._sinks=null)}_activate(){if(this._deps.length===0){this._fn&&this._execFn();return}this._dirtyDepCount=0;let e=this._deps.length,t=0;try{for(let n=0;n<e;n++){let s=n,o=this._deps[n];o.unsub=Kt,o.unsub=o.node.subscribe(i=>{if(o.unsub===null)return;let a=this._config.tierOf,u=!1;for(let d of i)a(d[0])>=3&&(u=!0),this._config.onMessage(this,d,{direction:"down-in",depIndex:s},this._actions);u&&this._maybeRunFnOnSettlement()}),t++}}catch(n){this._deps[t].unsub=null;for(let s=0;s<t;s++){let o=this._deps[s];if(o.unsub!=null){let i=o.unsub;o.unsub=null;try{i()}catch{}bt(o)}}throw this._dirtyDepCount=0,n}}_addDep(e){for(let s=0;s<this._deps.length;s++)if(this._deps[s].node===e)return s;let t=this._deps.length,n=Yt(e);if(this._deps.push(n),this._sinks==null)return t;n.dirty=!0,this._dirtyDepCount++,this._status!=="dirty"&&this._emit(Le),n.unsub=Kt;try{n.unsub=e.subscribe(s=>{if(n.unsub===null)return;let o=this._config.tierOf,i=!1;for(let a of s)o(a[0])>=3&&(i=!0),this._config.onMessage(this,a,{direction:"down-in",depIndex:t},this._actions);i&&this._maybeRunFnOnSettlement()})}catch(s){throw n.unsub=null,this._deps.pop(),this._dirtyDepCount--,s}return t}_deactivate(e=!1){let t=this._cleanup;if(this._cleanup=void 0,typeof t=="function")try{t()}catch(n){this._emit([[$,this._wrapFnError("cleanup threw",n)]])}else if(t!=null&&typeof t=="object"){let n=t.deactivate;if(typeof n=="function")try{n()}catch(s){this._emit([[$,this._wrapFnError("cleanup.deactivate threw",s)]])}}for(let n of this._deps){if(n.unsub!=null){let s=n.unsub;n.unsub=null;try{s()}catch{}}bt(n)}this._waveHasNewData=!1,this._hasNewTerminal=!1,this._hasCalledFnOnce=!1,this._paused=!1,this._pendingWave=!1,this._pendingRerun=!1,this._rerunDepth=0,this._store={},this._dirtyDepCount=0,this._pauseLocks=null,this._pauseBuffer=null,this._fn!=null&&(this._cached=void 0),e||(this._fn!=null||this._deps.length>0)&&(!this._isTerminal||this._resubscribable)&&(this._status="sentinel")}_onDepMessage(e,t){let n=this._deps[e],s=t[0];if(this._inspectorHooks!=null){let o={kind:"dep_message",depIndex:e,message:t};for(let i of this._inspectorHooks)i(o)}if(s!==ve){if(s===U){this._depDirtied(n);return}if(s===X){if(this._depInvalidated(n),this._cached===void 0)return;this._emit(ct);return}if(s===Q||s===re){this._emit([t]);return}if(s===F){this._emit(Fe);return}if(s===C)this._depSettledAsData(n,t[1]);else if(s===W)this._depSettledAsResolved(n);else if(s===V)this._depSettledAsTerminal(n,!0);else if(s===$)this._depSettledAsTerminal(n,t[1]);else{this._emit([t]);return}if(!this._fn){(s===C||s===W)&&this._emit([t]),(s===V||s===$)&&this._maybeAutoTerminalAfterWave();return}}}_depDirtied(e){e.dirty||(e.dirty=!0,e.involvedThisWave=!0,this._dirtyDepCount++,this._status!=="dirty"&&this._emit(Le))}_depSettledAsData(e,t){e.dirty&&(e.dirty=!1,this._dirtyDepCount--),e.involvedThisWave=!0,e.dataBatch.push(t),this._waveHasNewData=!0}_depSettledAsResolved(e){e.dirty&&(e.dirty=!1,this._dirtyDepCount--)}_depSettledAsTerminal(e,t){e.dirty&&(e.dirty=!1,this._dirtyDepCount--),e.terminal=t,e.involvedThisWave=!0,this._hasNewTerminal=!0}_depInvalidated(e){e.prevData=void 0,e.terminal=void 0,e.dataBatch.length=0,e.dirty?e.involvedThisWave=!1:(e.dirty=!0,e.involvedThisWave=!0,this._dirtyDepCount++)}_maybeRunFnOnSettlement(){if(!(this._isTerminal&&!this._resubscribable)&&!(this._dirtyDepCount>0)){if(!this._partial&&!this._hasCalledFnOnce)for(let e=0;e<this._deps.length;e++){let t=this._deps[e];if(t.dataBatch.length===0&&t.prevData===void 0&&t.terminal===void 0){this._maybeAutoTerminalAfterWave();return}}if(this._paused){this._pendingWave=!0;return}if(!this._waveHasNewData&&!this._hasNewTerminal&&this._hasCalledFnOnce){this._clearWaveFlags(),this._emit(dt),this._maybeAutoTerminalAfterWave();return}this._fn&&this._execFn(),this._maybeAutoTerminalAfterWave()}}_maybeAutoTerminalAfterWave(){if(this._deps.length===0||this._isTerminal)return;let e=this._deps.find(t=>t.terminal!==void 0&&t.terminal!==!0);if(e!=null){this._autoError&&this._emit([[$,e.terminal]]);return}this._autoComplete&&this._deps.every(t=>t.terminal!==void 0)&&this._emit(lt)}_execFn(){if(!this._fn||this._isTerminal&&!this._resubscribable)return;if(this._isExecutingFn){this._pendingRerun=!0;return}let e=this._cleanup;if(typeof e=="function"){this._cleanup=void 0;try{e()}catch(i){this._emit([[$,this._wrapFnError("cleanup threw",i)]]);return}}else if(e!=null&&typeof e=="object"){let i=e.beforeRun;if(typeof i=="function"){e.beforeRun=void 0;try{i()}catch(a){this._emit([[$,this._wrapFnError("cleanup.beforeRun threw",a)]]);return}}}let t=this._deps.map(i=>i.involvedThisWave?i.dataBatch.length>0?[...i.dataBatch]:[]:void 0),n=this._deps.map(i=>i.prevData);for(let i=0;i<this._deps.length;i++){let a=t[i];a!=null&&a.length>0&&(this._deps[i].prevData=a[a.length-1])}let s=this._deps.map(i=>i.terminal),o={prevData:n,terminalDeps:s,store:this._store};if(this._hasCalledFnOnce=!0,this._clearWaveFlags(),this._inspectorHooks!=null){let i={kind:"run",batchData:t,prevData:n};for(let a of this._inspectorHooks)a(i)}this._isExecutingFn=!0;try{let i=this._fn(t,this._actions,o);if(typeof i=="function")this._cleanup=i;else if(i!=null&&typeof i=="object"){let a=i;(typeof a.beforeRun=="function"||typeof a.deactivate=="function"||typeof a.invalidate=="function")&&(this._cleanup=i)}}catch(i){this._emit([[$,this._wrapFnError("fn threw",i)]])}finally{this._isExecutingFn=!1,this._pendingRerun?(this._pendingRerun=!1,this._rerunDepth+=1,this._rerunDepth>qt?(this._rerunDepth=0,this._emit([[$,new Error(`Node "${this.name}": _pendingRerun depth exceeded ${qt} \u2014 likely a reactive cycle`)]])):this._maybeRunFnOnSettlement()):this._rerunDepth=0,this._clearWaveFlags()}}_clearWaveFlags(){this._waveHasNewData=!1,this._hasNewTerminal=!1;for(let e of this._deps)e.involvedThisWave=!1,e.dataBatch.length=0}_wrapFnError(e,t){let n=t instanceof Error?t.message:String(t);return new Error(`Node "${this.name}": ${e}: ${n}`,{cause:t})}_frameBatch(e){let t=this._config.tierOf;if(e.length===1)return t(e[0][0])===3&&this._status!=="dirty"?[le,e[0]]:e;let n=!0,s=!1,o=!1,i=-1;for(let u of e){let d=t(u[0]);d<i&&(n=!1),d===3&&(s=!0),u[0]===U&&(o=!0),i=d}let a=e;if(!n){let u=e.map((d,l)=>({m:d,i:l,tier:t(d[0])}));u.sort((d,l)=>d.tier-l.tier||d.i-l.i),a=u.map(d=>d.m)}if(s&&!o&&this._status!=="dirty"){let u=0;for(;u<a.length&&t(a[u][0])===0;)u++;return u===0?[le,...a]:[...a.slice(0,u),le,...a.slice(u)]}return a}_emit(e){if(e.length===0)return;for(let a=0;a<e.length;a++){let u=e[a];if(u[0]===$&&u[1]===void 0)throw new TypeError('[ERROR, payload] requires a non-undefined payload (spec \xA71.2). Pass an Error object or domain tag instead \u2014 e.g. node.down([[ERROR, new Error("reason")]])')}let t=e;if(this._isTerminal&&!this._resubscribable){let a=e.filter(u=>u[0]===F||u[0]===X);if(a.length===0)return;t=a}t=this._frameBatch(t);let s=null;for(let a=0;a<t.length;a++){let u=t[a],d=u[0];if(d!==Q&&d!==re){s?.push(u);continue}if(u.length<2)throw new Error(`Node "${this.name}": [[${d===Q?"PAUSE":"RESUME"}]] must carry a lockId payload \u2014 bare PAUSE/RESUME is a protocol violation (C0 rule). Use \`[[PAUSE, lockId]]\` / \`[[RESUME, lockId]]\`.`);let l=!0;if(this._pausable!==!1){let h=u[1];if(d===Q)this._pauseLocks==null&&(this._pauseLocks=new Set),this._pauseLocks.add(h),this._paused=!0,this._pausable==="resumeAll"&&this._pauseBuffer==null&&(this._pauseBuffer=[]);else if(this._pauseLocks==null||!this._pauseLocks.has(h))l=!1;else if(this._pauseLocks.delete(h),this._pauseLocks.size===0){if(this._paused=!1,this._pauseBuffer!=null&&this._pauseBuffer.length>0){let p=this._pauseBuffer;this._pauseBuffer=[],this._emit(p)}this._pendingWave&&(this._pendingWave=!1,this._maybeRunFnOnSettlement())}}l?s?.push(u):s==null&&(s=t.slice(0,a))}if(s!=null){if(s.length===0)return;t=s}if(this._hasMeta&&t.some(a=>a[0]===F))for(let a of Object.keys(this.meta))try{this.meta[a]._emit(Fe)}catch{}let{finalMessages:o,equalsError:i}=this._updateState(t);if(o.length>0&&this._config.inspectorEnabled){let a=this._config.globalInspector;if(a!=null)try{a({kind:"emit",node:this,messages:o})}catch{}}if(o.length>0)if(this._paused&&this._pausable==="resumeAll"&&this._pauseBuffer!=null){let a=this._config.tierOf,u=[];for(let d of o)a(d[0])===3?this._pauseBuffer.push(d):u.push(d);u.length>0&&this._dispatchOrAccumulate(u)}else this._dispatchOrAccumulate(o);i!=null&&this._emit([[$,i]])}_updateState(e){let t=this._config.tierOf,n,s,o=-1,i=0;for(let l of e)t(l[0])===3&&i++;let a=i<=1,u=-1;if(this._versioning!=null&&i>1){for(let l=e.length-1;l>=0;l--)if(e[l][0]===C){u=l;break}}for(let l=0;l<e.length;l++){let h=e[l],p=h[0];if(p===C){if(h.length>=2){let g=!1;if(a&&this._cached!==void 0)try{g=this._equals(this._cached,h[1])}catch(c){s=this._wrapFnError("equals threw",c),o=l;break}if(g){n==null&&(n=e.slice(0,l)),n.push($e),this._status="resolved";continue}this._cached=h[1],this._versioning!=null&&(u<0||l===u)&&Wt(this._versioning,h[1],this._hashFn)}this._status="settled",n?.push(h)}else if(n?.push(h),p===U)this._status="dirty";else if(p===W)this._status="resolved";else if(p===V){this._status="completed";{let g=this._config.rigorRecorder;if(g!=null)try{g.onTerminalTransition(this,"completed",this._autoComplete,this._autoError,this._deps.length>0)}catch{}}}else if(p===$){this._status="errored";{let g=this._config.rigorRecorder;if(g!=null)try{g.onTerminalTransition(this,"errored",this._autoComplete,this._autoError,this._deps.length>0)}catch{}}}else if(p===X){if(this._cached!==void 0){let c=this._config.rigorRecorder;if(c!=null)try{c.onNonVacuousInvalidate(this,this._cached)}catch{}}this._cached=void 0,this._status="dirty";let g=this._cleanup;if(typeof g=="function"){this._cleanup=void 0;try{g()}catch{}}else if(g!=null&&typeof g=="object"){let c=g.invalidate;if(typeof c=="function")try{c()}catch{}}}else p===F&&(this._resetOnTeardown&&(this._cached=void 0),this._deactivate(!0),this._status="sentinel")}let d=o>=0?n??e.slice(0,o):n??e;return s!=null?{finalMessages:d,equalsError:s}:{finalMessages:d}}_deliverToSinks=e=>{if(this._sinks==null)return;if(typeof this._sinks=="function"){this._sinks(e);return}let t=[...this._sinks];for(let n of t)n(e)};_dispatchOrAccumulate(e){if(Pt()){this._batchPendingMessages===null&&(this._batchPendingMessages=[],be(()=>this._flushBatchPending()));for(let t of e)this._batchPendingMessages.push(t);return}Pe(this._deliverToSinks,e,this._config.tierOf)}_flushBatchPending(){let e=this._batchPendingMessages;if(e===null||(this._batchPendingMessages=null,e.length===0))return;let t=this._frameBatch(e);Pe(this._deliverToSinks,t,this._config.tierOf)}},Jt=r=>Array.isArray(r),yt=r=>typeof r=="object"&&r!=null&&!Array.isArray(r)});function _t(r,e){if(e!=null&&e.length>0)return new Set(e);switch(r){case"standard":return new Set(["type","status","value","deps","meta","v"]);case"full":return null;case"spec":return new Set(["type","deps","meta","value"]);default:return new Set(["type","deps"])}}function Fn(r){return r._describeKind!=null?r._describeKind:r._deps.length>0?"derived":r._fn!=null?"producer":"state"}function Xt(r){let e=new WeakSet,t={};for(let[n,s]of Zt(r))t[n]=vt(s,e);return t}function vt(r,e){if(r==null)return r;let t=typeof r;if(t==="boolean"||t==="number"||t==="string")return r;if(t==="function")return"<function>";if(Array.isArray(r))return e.has(r)?"<cycle>":(e.add(r),r.map(n=>vt(n,e)));if(t==="object"){let n=r;if(e.has(n))return"<cycle>";e.add(n);try{if(typeof n.subscribe=="function"&&"cache"in n)return"<Node>"}catch{return"<unserializable>"}let s={};for(let[o,i]of Zt(n))s[o]=vt(i,e);return s}return"<unserializable>"}function Zt(r){let e=[],t;try{t=Object.keys(r)}catch{return e}for(let n of t)try{e.push([n,r[n]])}catch{e.push([n,"<unserializable>"])}return e}function Vn(r){let e={};for(let[t,n]of Object.entries(r.meta))try{e[t]=n.cache}catch{}return e}function wt(r,e,t){let n=e==null,s=!n&&e!=null?[...e].filter(l=>l.startsWith("meta.")).map(l=>l.slice(5)):null,o=n||e.has("meta")||s!=null&&s.length>0,i="state",a=[];r instanceof I&&(i=Fn(r),a=r._deps.map(l=>l.node.name??""));let u={type:i,deps:a};(n||e.has("status"))&&(u.status=r.status);let d=r instanceof I?r._guard:void 0;if(o){let l={...Vn(r)};if(d!=null&&l.access===void 0&&(l.access=ut(d)),s!=null&&s.length>0&&!e.has("meta")){let h={};for(let p of s)p in l&&(h[p]=l[p]);u.meta=h}else u.meta=l}if(r.name!=null&&(u.name=r.name),(n||e.has("value"))&&(!t||i==="state")){r.status==="sentinel"&&(u.sentinel=!0);try{u.value=r.cache}catch{}}if((n||e.has("v"))&&r.v!=null){let l={id:r.v.id,version:r.v.version};"cid"in r.v&&(l.cid=r.v.cid,l.prev=r.v.prev),u.v=l}return(n||e.has("guard"))&&d!=null&&(u.guard=ut(d)),(n||e.has("lastMutation"))&&r.lastMutation!=null&&(u.lastMutation=r.lastMutation),u}var Tt=z(()=>{"use strict";ye();fe()});function ee(r,e){return Te([],{...e,initial:r})}function Be(r,e){return Te((n,s,o)=>r(s,o)??void 0,{describeKind:"producer",...e})}function j(r,e,t){return Te(r,(s,o,i)=>{let a=s.map((u,d)=>u!=null&&u.length>0?u.at(-1):i.prevData[d]);o.emit(e(a,i))},{describeKind:"derived",...t})}var Se=z(()=>{"use strict";fe()});function Ue(r,e,t){return{[r]:!0,[`${r}_type`]:e,...t??{}}}var Ot=z(()=>{"use strict"});function te(r){return r.subscribe(()=>{})}var Qt=z(()=>{"use strict"});var We=z(()=>{"use strict";Qt()});var Xe,an=z(()=>{"use strict";Xe=class{_timer;_gen=0;start(e,t){this.cancel(),this._gen+=1;let n=this._gen;this._timer=setTimeout(()=>{this._timer=void 0,n===this._gen&&t()},e)}cancel(){this._timer!==void 0&&(clearTimeout(this._timer),this._timer=void 0)}get pending(){return this._timer!==void 0}}});var De,un=z(()=>{"use strict";De=class{constructor(e){this.capacity=e;if(!Number.isInteger(e)||e<=0)throw new Error(`RingBuffer capacity must be a positive integer (got ${e})`);this.buf=new Array(e)}buf;head=0;_size=0;get size(){return this._size}get maxSize(){return this.capacity}push(e){let t=(this.head+this._size)%this.capacity;this.buf[t]=e,this._size<this.capacity?this._size++:this.head=(this.head+1)%this.capacity}shift(){if(this._size===0)return;let e=this.buf[this.head];return this.buf[this.head]=void 0,this.head=(this.head+1)%this.capacity,this._size--,e}at(e){if(this._size===0)return;let t=e<0?this._size+e:e;if(!(t<0||t>=this._size))return this.buf[(this.head+t)%this.capacity]}toArray(){let e=new Array(this._size);for(let t=0;t<this._size;t++)e[t]=this.buf[(this.head+t)%this.capacity];return e}clear(){for(let e=0;e<this._size;e++)this.buf[(this.head+e)%this.capacity]=void 0;this.head=0,this._size=0}}});var pr={};kn(pr,{AuditTrailGraph:()=>et,PolicyGateGraph:()=>tt,auditTrail:()=>ar,complianceSnapshot:()=>dr,policyGate:()=>ur});module.exports=En(pr);xe();Ee();ye();ie();Tt();fe();Se();mt();Ot();xe();ie();fe();Se();var Nt=class{_version=0;_maxSize;_buf;_head=0;_size=0;constructor(e,t){if(t!==void 0&&t<1)throw new RangeError("maxSize must be >= 1");if(this._maxSize=t,t!==void 0){if(this._buf=new Array(t),e&&e.length>0){let n=Math.min(e.length,t),s=e.length-n;for(let o=0;o<n;o++)this._buf[o]=e[s+o];this._size=n}}else this._buf=e?[...e]:[],this._size=this._buf.length}get version(){return this._version}get size(){return this._size}at(e){if(!Number.isInteger(e))return;let t=e>=0?e:this._size+e;if(!(t<0||t>=this._size))return this._maxSize!==void 0?this._buf[(this._head+t)%this._maxSize]:this._buf[t]}append(e){this._rawAppend(e),this._version+=1}appendMany(e){if(e.length===0)return;let t=this._maxSize!==void 0&&e.length>this._maxSize?e.length-this._maxSize:0;for(let n=t;n<e.length;n++)this._rawAppend(e[n]);this._version+=1}clear(){if(this._size===0)return 0;let e=this._size;if(this._maxSize===void 0)this._buf.length=0;else for(let t=0;t<e;t++)this._buf[(this._head+t)%this._maxSize]=void 0;return this._head=0,this._size=0,this._version+=1,e}trimHead(e){if(!Number.isInteger(e)||e<0)throw new RangeError(`trimHead: n must be a non-negative integer (got ${e})`);if(e===0||this._size===0)return 0;let t=Math.min(e,this._size);if(this._maxSize===void 0)this._buf.splice(0,t);else{for(let n=0;n<t;n++)this._buf[(this._head+n)%this._maxSize]=void 0;this._head=(this._head+t)%this._maxSize}return this._size-=t,this._version+=1,t}slice(e,t){if(!Number.isInteger(e)||e<0)throw new RangeError(`slice: start must be a non-negative integer (got ${e})`);if(t!==void 0&&(!Number.isInteger(t)||t<0))throw new RangeError(`slice: stop must be a non-negative integer or undefined (got ${t})`);let n=t===void 0?this._size:Math.min(Math.max(t,0),this._size),s=Math.min(e,this._size);if(s>=n)return[];let o=n-s;if(this._maxSize===void 0)return this._buf.slice(s,n);let i=new Array(o);for(let a=0;a<o;a++)i[a]=this._buf[(this._head+s+a)%this._maxSize];return i}tail(e){if(!Number.isInteger(e)||e<0)throw new RangeError(`tail: n must be a non-negative integer (got ${e})`);if(e===0||this._size===0)return[];let t=Math.min(e,this._size);return this.slice(this._size-t,this._size)}toArray(){if(this._maxSize===void 0)return[...this._buf];let e=new Array(this._size);for(let t=0;t<this._size;t++)e[t]=this._buf[(this._head+t)%this._maxSize];return e}snapshot(){return this.toArray()}restore(e){if(this._maxSize===void 0){this._buf.length=0;for(let t=0;t<e.length;t++)this._buf.push(e[t]);this._size=this._buf.length}else{let t=this._maxSize;for(let o=0;o<t;o++)this._buf[o]=void 0;this._head=0;let n=Math.min(e.length,t),s=e.length-n;for(let o=0;o<n;o++)this._buf[o]=e[s+o];this._size=n}this._version+=1}_rawAppend(e){if(this._maxSize===void 0){this._buf.push(e),this._size=this._buf.length;return}this._size<this._maxSize?(this._buf[(this._head+this._size)%this._maxSize]=e,this._size+=1):(this._buf[this._head]=e,this._head=(this._head+1)%this._maxSize)}};function Re(r){return r.subscribe(()=>{})}var zn=64;function Ke(r,e={}){let{name:t,maxSize:n,versioning:s,guard:o,backend:i}=e,a=i??new Nt(r,n),u=ee(a.toArray(),{name:t,describeKind:"state",equals:(m,O)=>m===O,...s!=null?{versioning:s}:{},...o!=null?{guard:o}:{}});function d(){let m=a.toArray();ce(()=>{u.down([[U]],{internal:!0}),u.down([[C,m]],{internal:!0})})}let l=new Map,h=new Map,p=new Map;function g(m,O){return`${m}:${O===void 0?"END":O}`}function c(m){if(m.size<zn)return;let O=m.keys().next();if(O.done)return;let x=m.get(O.value);x!==void 0&&x.dispose(),m.delete(O.value)}function _(m){let O=a.version;try{return m()}finally{a.version!==O&&d()}}function f(m){if(!Number.isInteger(m)||m<0)throw new RangeError(`tail: n must be a non-negative integer (got ${m})`);let O=l.get(m);if(O!==void 0)return l.delete(m),l.set(m,O),O.node;c(l);let x=j([u],([N])=>{let S=N;return m===0||S.length===0?[]:S.slice(Math.max(0,S.length-m))},{initial:a.tail(m),describeKind:"derived"}),A=Re(x);return l.set(m,{node:x,dispose:A}),x}function T(m,O){if(!Number.isInteger(m)||m<0)throw new RangeError(`slice: start must be a non-negative integer (got ${m})`);if(O!==void 0&&(!Number.isInteger(O)||O<0))throw new RangeError(`slice: stop must be a non-negative integer or undefined (got ${O})`);let x=g(m,O),A=h.get(x);if(A!==void 0)return h.delete(x),h.set(x,A),A.node;c(h);let N=j([u],([D])=>{let R=D;return O===void 0?R.slice(m):R.slice(m,O)},{initial:a.slice(m,O),describeKind:"derived"}),S=Re(N);return h.set(x,{node:N,dispose:S}),N}function v(m){let O=p.get(m);if(O!==void 0)return O.node;let x=j([u,m],([N,S])=>{let D=N,R=Math.max(0,Math.trunc(S??0));return D.slice(R)},{initial:[],describeKind:"derived"}),A=Re(x);return p.set(m,{node:x,dispose:A}),x}let b,y;function w(){b===void 0&&(b=Te([u],(m,O,x)=>{let A=m[0],S=A!=null&&A.length>0?A.at(-1):x.prevData[0];if(S==null||S.length===0){O.down([[W]]);return}O.emit(S[S.length-1])},{name:t!=null?`${t}::lastValue`:"lastValue",describeKind:"derived",initial:a.size===0?void 0:a.at(a.size-1)}),y=j([u],([m])=>m.length>0,{name:t!=null?`${t}::hasLatest`:"hasLatest",describeKind:"derived",initial:a.size>0}),Re(b),Re(y))}let k={entries:u,get size(){return a.size},at(m){return a.at(m)},append(m){_(()=>a.append(m))},appendMany(m){m.length!==0&&_(()=>a.appendMany(m))},clear(){_(()=>a.clear())},trimHead(m){_(()=>a.trimHead(m))},withLatest(){return w(),u},get lastValue(){return w(),b},get hasLatest(){return w(),y},view(m){switch(m.kind){case"tail":return f(m.n);case"slice":return T(m.start,m.stop);case"fromCursor":return v(m.cursor)}},attach(m){let O=m.subscribe(x=>{for(let A of x)A[0]===C&&k.append(A[1])});return()=>O()},attachStorage(m){if(m.length===0)return()=>{};let O=new Map;for(let A of m)O.set(A,a.size);(async()=>{for(let A of m)if(typeof A.loadEntries=="function")try{let N=await Promise.resolve(A.loadEntries());N.entries.length>0&&a.size===0&&(a.restore(N.entries),O.set(A,N.entries.length),d());break}catch{}})();let x=u.subscribe(A=>{for(let N of A){if(N[0]!==C)continue;let S=N[1];for(let D of m){let R=O.get(D)??0;if(S.length<R){try{let ne=D.appendEntries(S);ne instanceof Promise&&ne.catch(()=>{})}catch{}O.set(D,S.length);continue}if(S.length===R)continue;let se=S.slice(R);O.set(D,S.length);try{let ne=D.appendEntries(se);ne instanceof Promise&&ne.catch(()=>{})}catch{}}}});return()=>x()},disposeAllViews(){for(let m of l.values())m.dispose();l.clear();for(let m of h.values())m.dispose();h.clear();for(let m of p.values())m.dispose();p.clear()},dispose(){for(let m of l.values())m.dispose();l.clear();for(let m of h.values())m.dispose();h.clear();for(let m of p.values())m.dispose();p.clear()}};return k}We();var L={object:56,array:64,string:40,number:8,boolean:4,null:0,undefined:0,symbol:40,bigint:16,function:120,map:72,set:72,mapEntry:40,setEntry:24,date:24,regexp:48,error:64,url:80,promise:48,weakmap:40,weakset:40},jn=Symbol.for("sizeof");function en(r){let e=new WeakSet,t=new WeakSet,n=[r],s=0;for(;n.length>0;){let o=n.pop();s+=Hn(o,e,t,n)}return s}function Hn(r,e,t,n){if(r==null)return 0;switch(typeof r){case"number":return L.number;case"boolean":return L.boolean;case"string":return L.string+r.length*2;case"bigint":return L.bigint+Bn(r);case"symbol":return L.symbol;case"function":return e.has(r)?0:(e.add(r),L.function);case"undefined":return 0}let o=r;if(e.has(o))return 0;e.add(o);let i=o[jn];if(typeof i=="function")try{let d=i.call(o);if(typeof d=="number"&&Number.isFinite(d))return d}catch{}if(o instanceof Date)return L.date;if(o instanceof RegExp)return L.regexp+o.source.length*2;if(o instanceof Error){let d=o.message?o.message.length*2:0,l=o.stack?o.stack.length*2:0;return L.error+d+l}if(typeof URL<"u"&&o instanceof URL)return L.url+o.href.length*2;if(typeof Promise<"u"&&o instanceof Promise)return L.promise;if(o instanceof WeakMap)return L.weakmap;if(o instanceof WeakSet)return L.weakset;if(o instanceof Map){let d=L.map;for(let[l,h]of o)d+=L.mapEntry,n.push(l),n.push(h);return d}if(o instanceof Set){let d=L.set;for(let l of o)d+=L.setEntry,n.push(l);return d}if(Array.isArray(o)){let d=L.array+o.length*8;for(let l of o)n.push(l);return d}if(o instanceof ArrayBuffer)return t.has(o)?0:(t.add(o),o.byteLength);if(ArrayBuffer.isView(o)){let d=o;return t.has(d.buffer)?48:(t.add(d.buffer),d.buffer.byteLength+48)}let a=L.object,u=Object.keys(o);for(let d of u){a+=L.string+d.length*2;try{n.push(o[d])}catch{}}return a}function Bn(r){let e=r<0n?-r:r;if(e===0n)return 0;let t=e.toString(2).length;return Math.ceil(t/32)*8}function tn(r,e,t,n={}){let s=e in r.nodes,o=t in r.nodes;if(!s)return qe(e,t,"no-such-from");if(!o)return qe(e,t,"no-such-to");let i=n.maxDepth;if(i!=null&&(!Number.isInteger(i)||i<0))throw new Error("explainPath: maxDepth must be an integer >= 0");if(e===t){if(n.findCycle===!0){let d=Un(r,e,n);if(d!=null)return d}let u=Ye(e,r.nodes[e],0,n);return Je(e,t,[u])}if(i===0)return qe(e,t,"no-path");let a=nn(r,e,t,i);return a.found?Je(e,t,rn(r,a.pathOrder,n)):qe(e,t,a.truncated?"max-depth-exceeded":"no-path")}function nn(r,e,t,n){let s=new Map,o=[{path:t,depth:0}],i=new Set([t]),a=0,u=!1;for(;a<o.length;){let h=o[a++];if(h.path===e)break;if(n!=null&&h.depth>=n){let _=r.nodes[h.path];_?.deps&&_.deps.length>0&&(u=!0);continue}let p=r.nodes[h.path];if(p==null)continue;let g=p.deps??[],c=new Map;for(let _=0;_<g.length;_++){let f=g[_];if(!f)continue;let T=c.get(f);T==null&&(T=[],c.set(f,T)),T.push(_)}for(let[_,f]of c)i.has(_)||(i.add(_),s.set(_,{from:h.path,depIndices:f}),o.push({path:_,depth:h.depth+1}))}if(!s.has(e))return{found:!1,pathOrder:[],truncated:u};let d=[{path:e}],l=e;for(;l!==t;){let h=s.get(l);if(h==null)return{found:!1,pathOrder:[],truncated:!1};d[d.length-1].depIndices=h.depIndices,d.push({path:h.from}),l=h.from}return{found:!0,pathOrder:d,truncated:!1}}function Un(r,e,t){let n=r.nodes[e];if(n==null)return null;let s=n.deps??[],o=[];for(let a=0;a<s.length;a++)s[a]===e&&o.push(a);if(o.length>0){let a=Ye(e,n,0,t);a.dep_index=o[0];let u=Ye(e,n,1,t);return Je(e,e,[a,u])}let i=null;for(let a=0;a<s.length;a++){let u=s[a];if(!u||u===e)continue;let d=nn(r,u,e,t.maxDepth);d.found&&(i==null||d.pathOrder.length<i.pathOrder.length)&&(i=d,i={found:!0,pathOrder:[{path:e,depIndices:[a]},...d.pathOrder],truncated:!1})}return i==null?null:Je(e,e,rn(r,i.pathOrder,t))}function rn(r,e,t){return e.map((n,s)=>{let o=r.nodes[n.path],i=Ye(n.path,o,s,t);return n.depIndices!=null&&n.depIndices.length>0&&(i.dep_index=n.depIndices[0],n.depIndices.length>1&&(i.dep_indices=[...n.depIndices])),i})}function Ye(r,e,t,n){let s={path:r,type:e.type,hop:t};e.status!==void 0&&(s.status=e.status),"value"in e&&(s.value=e.value),e.v!=null&&(s.v=e.v);let o=n.annotations?.get(r)??e.annotation;o!=null&&(s.annotation=o);let i=n.lastMutations?.get(r)??e.lastMutation;return i!=null&&(s.lastMutation=i),s}function Je(r,e,t){return sn(r,e,!0,"ok",t)}function qe(r,e,t){return sn(r,e,!1,t,[])}function sn(r,e,t,n,s){let o=Wn(r,e,t,n,s);return{from:r,to:e,found:t,reason:n,steps:s,text:o,toJSON(){return{from:r,to:e,found:t,reason:n,steps:s}}}}function Wn(r,e,t,n,s){if(!t)switch(n){case"no-such-from":return`explainPath: no node named "${r}"`;case"no-such-to":return`explainPath: no node named "${e}"`;case"max-depth-exceeded":return`explainPath: no path from "${r}" to "${e}" within maxDepth`;default:return`explainPath: no path from "${r}" to "${e}"`}let o=[`Causal path: ${r} \u2192 ${e} (${s.length} step(s))`];for(let i of s){let u=` ${i.hop===0?"\xB7":"\u2193"} ${i.path} (${i.type}${i.status?`/${i.status}`:""})`;if(o.push(u),"value"in i&&o.push(` value: ${Kn(i.value)}`),i.annotation!=null&&o.push(` annotation: ${i.annotation}`),i.lastMutation!=null){let d=i.lastMutation.actor;o.push(` actor: ${d.type}${d.id?`:${d.id}`:""}`)}}return o.join(`
|
|
2
|
-
`)}function Kn(r){if(r===void 0)return"<sentinel>";if(r===null)return"null";if(typeof r=="string")return JSON.stringify(r);if(typeof r=="number"||typeof r=="boolean"||typeof r=="bigint")return String(r);try{let e=JSON.stringify(r);return e.length>80?`${e.slice(0,77)}...`:e}catch{return String(r)}}ze();xe();Ee();ye();ie();Tt();fe();Se();Ee();function kt(r,e){if(Object.is(r,e))return!0;if(r==null||e==null||typeof r!="object"||typeof e!="object")return!1;if(Array.isArray(r)){if(!Array.isArray(e)||r.length!==e.length)return!1;for(let o=0;o<r.length;o++)if(!kt(r[o],e[o]))return!1;return!0}if(Array.isArray(e))return!1;let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;let s=new Set(n);for(let o of t)if(!s.has(o)||!kt(r[o],e[o]))return!1;return!0}function on(r,e){return`${r}\0${e}`}function xt(r,e){let t=[],n=new Set(r.subgraphs),s=new Set(e.subgraphs),o=[];for(let f of s)n.has(f)||o.push(f);o.sort();for(let f of o)t.push({type:"subgraph-mounted",path:f});let i=new Set(Object.keys(r.nodes)),a=new Set(Object.keys(e.nodes)),u=[];for(let f of a)i.has(f)||u.push(f);u.sort();for(let f of u)t.push({type:"node-added",path:f,node:{...e.nodes[f]}});let d=[];for(let f of a){if(!i.has(f))continue;let T=r.nodes[f]?.meta,v=e.nodes[f]?.meta;T==null&&v==null||kt(T??{},v??{})||d.push(f)}d.sort();for(let f of d)t.push({type:"node-meta-changed",path:f,prevMeta:r.nodes[f]?.meta??{},nextMeta:e.nodes[f]?.meta??{}});let l=new Map;for(let f of r.edges)l.set(on(f.from,f.to),f);let h=new Map;for(let f of e.edges)h.set(on(f.from,f.to),f);let p=[];for(let[f,T]of h)l.has(f)||p.push(T);p.sort((f,T)=>f.from<T.from?-1:f.from>T.from?1:f.to<T.to?-1:f.to>T.to?1:0);for(let f of p)t.push({type:"edge-added",from:f.from,to:f.to});let g=[];for(let[f,T]of l)h.has(f)||g.push(T);g.sort((f,T)=>f.from<T.from?-1:f.from>T.from?1:f.to<T.to?-1:f.to>T.to?1:0);for(let f of g)t.push({type:"edge-removed",from:f.from,to:f.to});let c=[];for(let f of i)a.has(f)||c.push(f);c.sort();for(let f of c)t.push({type:"node-removed",path:f});let _=[];for(let f of n)s.has(f)||_.push(f);_.sort();for(let f of _)t.push({type:"subgraph-unmounted",path:f});return{events:t,flushedAt_ns:B()}}We();an();un();pt();fe();function dn(r,e){let t=e?.topN??10,n=r.describe({detail:"standard"}),s=[],o=r._collectObserveTargets;typeof o=="function"&&o.call(r,"",s);let i=new Map;for(let[p,g]of s)i.set(p,g);let a=[];for(let[p,g]of Object.entries(n.nodes)){let c=i.get(p),_=c instanceof I?c:null,f=_?en(_.cache):0,T=_?_._sinkCount:0,v=g.deps?.length??0,b=g.type==="effect"&&T===0,y=T===0?g.type==="effect"?"orphan-effect":g.type==="derived"?"idle-derived":g.type==="producer"?"idle-producer":null:null;a.push({path:p,type:g.type,status:g.status??"unknown",valueSizeBytes:f,subscriberCount:T,depCount:v,isOrphanEffect:b,orphanKind:y})}let u=a.reduce((p,g)=>p+g.valueSizeBytes,0),d=(p,g)=>[...a].sort(g??((c,_)=>_[p]-c[p])).slice(0,t),l=a.filter(p=>p.orphanKind!=null),h=a.filter(p=>p.isOrphanEffect);return{nodeCount:a.length,edgeCount:n.edges.length,subgraphCount:n.subgraphs.length,nodes:a,totalValueSizeBytes:u,hotspots:{byValueSize:d("valueSizeBytes"),bySubscriberCount:d("subscriberCount"),byDepCount:d("depCount")},orphans:l,orphanEffects:h}}var P="::",Z="__meta__",pe=1;function cn(r,e){let t=Math.max(16,r.size*4),n=0;for(;r.size>0;){if(n++>=t){console.error(`[Graph "${e}".destroy] disposer drain exceeded cap (${t}); ${r.size} disposer(s) discarded`),r.clear();return}let s=r.values().next();if(s.done)return;let o=s.value;r.delete(o);try{o()}catch(i){console.error(`[Graph "${e}".destroy] disposer threw:`,i)}}}function gn(r){return r!=null&&typeof r=="object"&&"cache"in r&&typeof r.subscribe=="function"&&typeof r.down=="function"}function qn(r){if(r!=null)return gn(r)?r.cache:r}function he(r){return r!=null&&typeof r=="object"&&"cache"in r&&typeof r.subscribe=="function"&&typeof r.down=="function"}function ae(r){return he(r)?r.cache??"":r}function ln(r){return he(r)?r.cache??0:r}function fn(r){return he(r)?r.cache??!1:r}function Yn(r){let e=[];for(let t of Object.keys(r).sort()){let n=r[t].v;n!=null&&e.push(`${t} ${n.id} ${n.version}`)}return e.join(`
|
|
3
|
-
`)}function pn(r){if(r.version!==pe)throw new Error(`unsupported snapshot version ${String(r.version)} (expected ${pe})`);for(let e of["name","nodes","edges","subgraphs"])if(!(e in r))throw new Error(`snapshot missing required key "${e}"`);if(typeof r.name!="string")throw new TypeError("snapshot 'name' must be a string");if(typeof r.nodes!="object"||r.nodes===null||Array.isArray(r.nodes))throw new TypeError("snapshot 'nodes' must be an object");if(!Array.isArray(r.edges))throw new TypeError("snapshot 'edges' must be an array");if(!Array.isArray(r.subgraphs))throw new TypeError("snapshot 'subgraphs' must be an array")}function Jn(r,e){let t=new WeakMap,n=(s,o)=>{if(Object.is(s,o))return!0;if(s==null||o==null||typeof s!="object"||typeof o!="object")return!1;let i=t.get(s);if(i==null&&(i=new WeakSet,t.set(s,i)),i.has(o))return!0;i.add(o);let a=s.constructor,u=o.constructor;if(a!==u)return!1;if(s instanceof Date)return s.getTime()===o.getTime();if(s instanceof RegExp)return s.source===o.source&&s.flags===o.flags;if(Array.isArray(s)){let p=o;if(s.length!==p.length)return!1;for(let g=0;g<s.length;g++)if(!n(s[g],p[g]))return!1;return!0}if(s instanceof Map){let p=o;if(s.size!==p.size)return!1;for(let[g,c]of s)if(!p.has(g)||!n(c,p.get(g)))return!1;return!0}if(s instanceof Set){let p=o;if(s.size!==p.size)return!1;for(let g of s){let c=!1;for(let _ of p)if(n(g,_)){c=!0;break}if(!c)return!1}return!0}if(ArrayBuffer.isView(s)){let p=s,g=o;if(p.length!==g.length)return!1;for(let c=0;c<p.length;c++)if(p[c]!==g[c])return!1;return!0}let d=Object.keys(s),l=Object.keys(o);if(d.length!==l.length)return!1;let h=new Set(l);for(let p of d)if(!h.has(p)||!n(s[p],o[p]))return!1;return!0};return n(r,e)}function Xn(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ze(r){let e="^";for(let t=0;t<r.length;t+=1){let n=r[t];if(n==="*"){e+=".*";continue}if(n==="?"){e+=".";continue}if(n==="["){let s=r.indexOf("]",t+1);if(s<=t+1){e+="\\[";continue}let o=r.slice(t+1,s);o.startsWith("!")&&(o=`^${o.slice(1)}`),o=o.replace(/\\/g,"\\\\"),e+=`[${o}]`,t=s;continue}e+=Xn(n)}return e+="$",new RegExp(e)}var Zn={data:"\x1B[32m",dirty:"\x1B[33m",resolved:"\x1B[36m",invalidate:"\x1B[93m",pause:"\x1B[90m",resume:"\x1B[96m",complete:"\x1B[34m",error:"\x1B[31m",teardown:"\x1B[91m",derived:"\x1B[35m",path:"\x1B[90m",reset:"\x1B[0m"},Qn={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Et(r){if(typeof r=="string")return JSON.stringify(r);if(typeof r=="number"||typeof r=="boolean"||r==null)return String(r);try{return JSON.stringify(r)}catch{return"[unserializable]"}}function er(r){return r==="none"?Qn:r==="ansi"||r==null?Zn:{data:r.data??"",dirty:r.dirty??"",resolved:r.resolved??"",invalidate:r.invalidate??"",pause:r.pause??"",resume:r.resume??"",complete:r.complete??"",error:r.error??"",teardown:r.teardown??"",derived:r.derived??"",path:r.path??"",reset:r.reset??""}}function hn(r){if(r==null)return{};let e=r.detail;return e==="full"?{...r,structured:r.structured??!0,timeline:r.timeline??!0,causal:r.causal??!0,derived:r.derived??!0}:e==="minimal"?{...r,structured:r.structured??!0}:r.format==="stage-log"?{...r,structured:r.structured??!0,timeline:r.timeline??!0}:r}function tr(r,e,t){for(let n=0;n<r.length;n++){let s=r.charCodeAt(n);if(s<32||s===127)throw new Error(`Graph "${e}": ${t} "${r}" must not contain control character (U+${s.toString(16).padStart(4,"0").toUpperCase()} at index ${n})`)}}function At(r,e,t){if(r==="")throw new Error(`Graph "${e}": ${t} name must be non-empty`);if(r.includes(P))throw new Error(`Graph "${e}": ${t} "${r}" must not contain '${P}' (path separator)`);if(r===Z)throw new Error(`Graph "${e}": ${t} name "${Z}" is reserved for meta companion paths`);tr(r,e,t)}function nr(r,e){if(r==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let t=r.split(P);for(let n of t)if(n==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return t}function rr(r,e){let t=!1;for(let s of r)if(!e.isMetaPassthrough(s[0])){t=!0;break}return t?r.filter(s=>e.isMetaPassthrough(s[0])):r}function mn(r){for(let e of r._mounts.values())mn(e);for(let e of r._nodes.values())try{e.down([[F]],{internal:!0})}catch{}}var K=class r{name;opts;config;_nodes=new Map;_nodeToName=new WeakMap;_mounts=new Map;_parent=void 0;_storageDisposers=new Set;_disposers=new Set;_destroyed=!1;_topology;_topologyEmitters=new Set;_factory;_factoryArgs;constructor(e,t){if(e==="")throw new Error("Graph name must be non-empty");if(e.includes(P))throw new Error(`Graph name must not contain '${P}' (got "${e}")`);if(e===Z)throw new Error(`Graph name "${Z}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...t??{}}),this.config=t?.config??we,this._traceRing=new De(t?.traceCapacity??1e3),t?.versioning!=null&&this.setVersioning(t.versioning),typeof t?.factory=="string"&&(this._factory=t.factory,t.factoryArgs!==void 0&&(this._factoryArgs=t.factoryArgs))}tagFactory(e,t){return this._factory=e,this._factoryArgs=t,this}ancestors(e=!0){let t=[],n=e?this:this._parent;for(;n!=null;)t.push(n),n=n._parent;return t}get topology(){return this._topology==null&&(this._topology=Be(e=>{let t=n=>{e.emit(n)};return this._topologyEmitters.add(t),()=>{this._topologyEmitters.delete(t)}},{name:`${this.name}_topology`})),this._topology}_emitTopology(e){if(!(this._topology==null||this._topologyEmitters.size===0))for(let t of this._topologyEmitters)t(e)}nameOf(e){return this._nodeToName.get(e)}add(e,t){let n=e.name,s=t?.name??n;if(s==null||s==="")throw new Error(`Graph "${this.name}": graph.add requires a non-empty name \u2014 pass via opts.name or set it on the node (e.g. state(0, { name: "x" }))`);let o=s,i=t?.annotation;if(At(o,this.name,"add"),this._mounts.has(o))throw new Error(`Graph "${this.name}": name "${o}" is already a mount point`);if(this._nodes.has(o))throw new Error(`Graph "${this.name}": node "${o}" already exists`);let a=this._nodeToName.get(e);if(a!==void 0)throw new Error(`Graph "${this.name}": node instance already registered as "${a}"`);return this._nodes.set(o,e),this._nodeToName.set(e,o),this._emitTopology({kind:"added",name:o,nodeKind:"node"}),i!=null&&(this._annotations.set(o,i),this.config.inspectorEnabled&&this._traceRing.push({path:o,annotation:i,timestamp_ns:B()})),e}setVersioning(e){if(e!=null)for(let t of this._nodes.values())t instanceof I&&t._applyVersioning(e)}remove(e){At(e,this.name,"remove");let t=this._mounts.get(e);if(t){let o={kind:"mount",nodes:[],mounts:[]},i=[];t._collectObserveTargets("",i);for(let[a,u]of i)a.includes(`${P}${Z}${P}`)||o.nodes.push(a);return o.nodes.sort(),o.mounts.push(e),o.mounts.push(...t._collectSubgraphs(`${e}${P}`)),this._mounts.delete(e),t._parent=void 0,mn(t),this._emitTopology({kind:"removed",name:e,nodeKind:"mount",audit:o}),o}let n=this._nodes.get(e);if(!n)throw new Error(`Graph "${this.name}": unknown node or mount "${e}"`);this._nodes.delete(e),this._nodeToName.delete(n),n.down([[F]],{internal:!0});let s={kind:"node",nodes:[e],mounts:[]};return this._emitTopology({kind:"removed",name:e,nodeKind:"node",audit:s}),s}removeAll(e){let t=typeof e=="function"?e:(()=>{let o=Ze(e);return i=>o.test(i)})(),n={kind:"mount",nodes:[],mounts:[]},s=[...this._nodes.keys(),...this._mounts.keys()].filter(o=>t(o));for(let o of s){let i=this.remove(o);n.nodes.push(...i.nodes),n.mounts.push(...i.mounts)}return n.nodes.sort(),n.mounts.sort(),n}[Symbol.iterator](){let e=[...this._nodes.keys()].sort(),t=this._nodes,n=0;return{[Symbol.iterator](){return this},next(){if(n>=e.length)return{value:void 0,done:!0};let s=e[n++];return{value:[s,t.get(s)],done:!1}}}}node(e){if(e==="")throw new Error(`Graph "${this.name}": node name must be non-empty`);if(e.includes(P))return this.resolve(e);let t=this._nodes.get(e);if(!t)throw new Error(`Graph "${this.name}": unknown node "${e}"`);return t}get(e){return this.node(e).cache}set(e,t,n){let s=n?.internal===!0;this.node(e).down([[C,t]],{actor:n?.actor,internal:s,delivery:"write"})}setAll(e,t){let n=Symbol.iterator in e?e:Object.entries(e);ce(()=>{for(let[s,o]of n)this.set(s,o,t)})}invalidate(e,t){let n=t?.internal===!0;this.node(e).down([[X]],{actor:t?.actor,internal:n,delivery:"write"})}error(e,t,n){let s=n?.internal===!0;this.node(e).down([[$,t]],{actor:n?.actor,internal:s,delivery:"write"})}complete(e,t){let n=t?.internal===!0;this.node(e).down([[V]],{actor:t?.actor,internal:n,delivery:"write"})}edges(e){let t=e?.recursive===!0,n=new Map;if(!t){for(let[u,d]of this._nodes)n.set(d,u);let a=[];for(let[u,d]of this._nodes)if(d instanceof I)for(let l of d._deps){let h=n.get(l.node);h!=null&&a.push([h,u])}return a.sort((u,d)=>u[0]<d[0]?-1:u[0]>d[0]?1:u[1]<d[1]?-1:u[1]>d[1]?1:0),a}let s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,u]of s)o.set(u,a);let i=[];for(let[a,u]of s)if(u instanceof I)for(let d of u._deps){let l=o.get(d.node);l!=null&&i.push([l,a])}return i.sort((a,u)=>a[0]<u[0]?-1:a[0]>u[0]?1:a[1]<u[1]?-1:a[1]>u[1]?1:0),i}mount(e,t){if(t===void 0){let s=new r(e);return this.mount(e,s)}if(typeof t=="function"){let s=new r(e);return t(s),this.mount(e,s)}let n=t;if(At(e,this.name,"mount"),this._nodes.has(e))throw new Error(`Graph "${this.name}": cannot mount at "${e}" \u2014 node with that name exists`);if(this._mounts.has(e))throw new Error(`Graph "${this.name}": mount "${e}" already exists`);if(n===this)throw new Error(`Graph "${this.name}": cannot mount a graph into itself`);if(n._parent!=null)throw new Error(`Graph "${this.name}": this child graph is already mounted on "${n._parent.name}"`);for(let s=this;s!=null;s=s._parent)if(s===n)throw new Error(`Graph "${this.name}": mount("${e}", \u2026) would create a mount cycle`);return this._mounts.set(e,n),n._parent=this,this._emitTopology({kind:"added",name:e,nodeKind:"mount"}),n}resolve(e){let t=nr(e,this.name);return this._resolveFromSegments(t)}tryResolve(e){try{return this.resolve(e)}catch{return}}_resolveFromSegments(e){let t=e;if(t[0]===this.name&&(t=t.slice(1),t.length===0))throw new Error(`Graph "${this.name}": resolve path ends at graph name only`);let n=t[0],s=t.slice(1);if(s.length===0){let a=this._nodes.get(n);if(a)return a;throw this._mounts.has(n)?new Error(`Graph "${this.name}": path ends at subgraph "${n}" \u2014 not a node (GRAPHREFLY-SPEC \xA73.5)`):new Error(`Graph "${this.name}": unknown name "${n}"`)}let o=this._nodes.get(n);if(o&&s.length>0&&s[0]===Z)return this._resolveMetaChainFromNode(o,s,t.join(P));let i=this._mounts.get(n);if(!i)throw this._nodes.has(n)?new Error(`Graph "${this.name}": "${n}" is a node; trailing path "${s.join(P)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${n}"`);return i.resolve(s.join(P))}_resolveMetaChainFromNode(e,t,n){let s=e,o=0,i=[...t];for(;o<i.length;){if(i[o]!==Z)throw new Error(`Graph "${this.name}": expected ${Z} segment in meta path "${n}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${Z} in "${n}"`);let a=i[o+1],u=s.meta[a];if(!u)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${n}"`);s=u,o+=2}return s}signal(e,t){if(t?.internal!==!0){for(let s of e)if(this.config.messageTier(s[0])===3)throw new Error(`Graph "${this.name}": Graph.signal() rejects tier-3 messages (DATA / RESOLVED). Broadcast is for control-plane tiers (START / DIRTY / INVALIDATE / PAUSE / RESUME / COMPLETE / ERROR / TEARDOWN). For per-node value writes, use Graph.set or graph.node(name).down(...).`)}let n=[];if(this._signalDeliver(e,t??{},new Set,n),n.length>0)throw n[0]}_signalDeliver(e,t,n,s){for(let u of this._mounts.values())u._signalDeliver(e,t,n,s);let i=t.internal===!0?{internal:!0}:{actor:t.actor,delivery:"signal"},a=rr(e,this.config);for(let u of[...this._nodes.keys()].sort()){let d=this._nodes.get(u);if(!n.has(d)){n.add(d);try{d.down(e,i)}catch(l){if(l instanceof J)throw l;s.push(l)}a.length!==0&&this._signalMetaSubtree(d,a,n,i,s)}}}_signalMetaSubtree(e,t,n,s,o){for(let i of Object.keys(e.meta).sort()){let a=e.meta[i];if(!n.has(a)){n.add(a);try{a.down(t,s)}catch(u){if(u instanceof J)throw u;o.push(u)}this._signalMetaSubtree(a,t,n,s,o)}}}describe(e){if(e?.reactive==="diff")return this._describeReactiveDiff(e);if(e?.reactive===!0)return this._describeReactive(e);let t=qn(e?.actor),n=e?.filter;if(e?.detail!=null&&e?.fields!=null)throw new TypeError("Graph.describe(): pass either `detail` or `fields`, not both. `detail: 'spec'` is the canonical spec projection; use `fields` only when you need a custom subset.");let s=_t(e?.detail,e?.fields),o=e?.detail==="spec",i=s,a=[];this._collectObserveTargets("",a);let u=new Map;for(let[y,w]of a)u.set(w,y);let d=[];{let y=a.map(([,m])=>m),w=new Set(u.values()),k=0;for(;y.length>0;){let m=y.shift();if(m instanceof I)for(let O of m._deps){let x=O.node;if(u.has(x))continue;let A=x.name??"",N=A;if(!N||w.has(N))if(A){let S=2;for(;w.has(`${A}#${S}`);)S++;N=`${A}#${S}`}else for(N=`__internal__/${k++}`;w.has(N);)N=`__internal__/${k++}`;u.set(x,N),w.add(N),d.push([N,x]),y.push(x)}}}let l=[...a,...d],h={};for(let[y,w]of l){if(t!=null&&!w.allowsObserve(t))continue;let k=wt(w,i,o),m=w instanceof I?w._deps.map(N=>u.get(N.node)??N.node.name??""):[],{name:O,...x}=k,A={...x,deps:m};if(!o){let N=this._annotations.get(y);N!=null&&(A.annotation=N)}if(n!=null)if(typeof n=="function"){let N=n;if(!(N.length>=2?N(y,A):N(A)))continue}else{let N=!0;for(let[S,D]of Object.entries(n)){let R=S==="deps_includes"?"depsIncludes":S==="meta_has"?"metaHas":S;if(R==="depsIncludes"){if(!A.deps.includes(String(D))){N=!1;break}continue}if(R==="metaHas"){if(!Object.hasOwn(A.meta??{},String(D))){N=!1;break}continue}if(A[R]!==D){N=!1;break}}if(!N)continue}h[y]=A}let p=new Set(Object.keys(h)),g=[];for(let[y,w]of l)if(w instanceof I)for(let k of w._deps){let m=u.get(k.node);m!=null&&g.push([m,y])}g.sort((y,w)=>y[0]<w[0]?-1:y[0]>w[0]?1:y[1]<w[1]?-1:y[1]>w[1]?1:0);let c=g.map(([y,w])=>({from:y,to:w}));(t!=null||n!=null)&&(c=c.filter(y=>p.has(y.from)&&p.has(y.to)));let _=this._collectSubgraphs(""),f=t!=null||n!=null?_.filter(y=>{let w=`${y}${P}`;return[...p].some(k=>k===y||k.startsWith(w))}):_,T=this,v=e;return{name:this.name,nodes:h,edges:c,subgraphs:f,...this._factory!==void 0?{factory:this._factory}:{},...this._factoryArgs!==void 0?{factoryArgs:this._factoryArgs}:{},expand(y){let w={...v};return Array.isArray(y)?(w.fields=y,w.detail=void 0):(w.detail=y,w.fields=void 0),T.describe(w)}}}_collectSubgraphs(e){let t=[];for(let n of[...this._mounts.keys()].sort()){let s=e===""?n:`${e}${n}`;t.push(s),t.push(...this._mounts.get(n)._collectSubgraphs(`${s}${P}`))}return t}resourceProfile(e){return dn(this,e)}reachable(e,t,n={}){return n.withDetail===!0?St(this.describe(),e,t,{...n,withDetail:!0}):St(this.describe(),e,t,n)}explain(e,t,n){return n?.reactive===!0?this._explainReactive(e,t,n):this._explainStatic(ae(e),ae(t),{...n?.maxDepth!==void 0?{maxDepth:ln(n.maxDepth)}:{},...n?.findCycle!==void 0?{findCycle:fn(n.findCycle)}:{}})}_explainStatic(e,t,n){let s=this.describe({detail:"full"}),o=new Map(this._annotations),i=new Map;for(let[a,u]of Object.entries(s.nodes))u.lastMutation!=null&&i.set(a,u.lastMutation);return tn(s,e,t,{...n?.maxDepth!=null?{maxDepth:n.maxDepth}:{},...n?.findCycle===!0?{findCycle:!0}:{},annotations:o,lastMutations:i})}_describeReactive(e){let t={...e,reactive:!1},n=e.reactiveName??"describe",s=0,o=ee(s,{name:`${n}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,d=()=>{a||u||(a=!0,be(()=>{a=!1,!u&&(s+=1,o.emit(s))}))},l=i.onEvent(v=>{let b=v.type;b!=="data"&&b!=="error"&&b!=="complete"&&b!=="teardown"||d()}),h=[],p=new WeakSet,g=v=>{if(p.has(v)||u)return;p.add(v);let b=v.topology.subscribe(y=>{for(let w of y){if(w[0]!==C)continue;let k=w[1];if(d(),k.kind==="added"&&k.nodeKind==="mount"){let m=v._mounts.get(k.name);m!=null&&g(m)}}});h.push(b);for(let y of v._mounts.keys()){let w=v._mounts.get(y);w!=null&&g(w)}};g(this);let c,_=e.actor;gn(_)&&(c=_.subscribe(v=>{let b=!1,y=!1;for(let w of v){let k=w[0];k===C?b=!0:(k===V||k===$||k===F)&&(y=!0)}b&&d(),y&&(c?.(),c=void 0,d())}));let f;try{f=j([o],()=>this.describe(t),{name:n,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(v,b)=>v===b})}catch(v){l(),c?.();for(let b of h)b();throw i.dispose(),v}let T=te(f);return{node:f,dispose(){u=!0,l(),c?.();for(let v of h)v();h.length=0,i.dispose(),T()}}}_describeReactiveDiff(e){let t={...e,reactive:!1},n=e.reactiveName??"describe-diff",s={name:this.name,nodes:{},edges:[],subgraphs:[]},o=this.describe(t),i=xt(s,o),a=ee(i,{name:n,meta:{domain:"audit",kind:"describe-diff"},equals:(p,g)=>p===g}),u=this._describeReactive({...e,reactiveName:void 0}),d=!1,l=u.node.subscribe(p=>{if(!d)for(let g of p){if(g[0]!==C)continue;let c=g[1],_=xt(o,c);o=c,_.events.length!==0&&a.emit(_)}}),h=te(a);return{node:a,dispose(){d=!0,l(),u.dispose(),a.down([[F,"describe-diff disposed"]]),h()}}}_explainReactive(e,t,n){let s=0,o=ee(s,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,d=()=>{a||u||(a=!0,be(()=>{a=!1,!u&&(s+=1,o.emit(s))}))},l=i.onEvent(v=>{let b=v.type;b!=="data"&&b!=="error"&&b!=="complete"&&b!=="teardown"||d()}),h=[];e!=null&&he(e)&&h.push(e),t!=null&&he(t)&&h.push(t),n?.maxDepth!=null&&he(n.maxDepth)&&h.push(n.maxDepth),n?.findCycle!=null&&he(n.findCycle)&&h.push(n.findCycle);let p=()=>{for(let v of h)if(v.cache===void 0)return!1;return!0},g=()=>{let v=ae(e),b=ae(t);return{from:v,to:b,found:!1,reason:"pending",steps:[],text:"(awaiting reactive args)",toJSON:()=>({from:v,to:b,found:!1,reason:"pending",steps:[]})}},c;try{c=j([o],()=>{if(!p())return g();let v=ae(e),b=ae(t),y={...n?.maxDepth!==void 0?{maxDepth:ln(n.maxDepth)}:{},...n?.findCycle!==void 0?{findCycle:fn(n.findCycle)}:{}};return this._explainStatic(v,b,y)},{name:n?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:ae(e),to:ae(t)},equals:(v,b)=>v.found===b.found&&v.reason===b.reason&&v.steps.length===b.steps.length&&sr(v.steps,b.steps)})}catch(v){throw l(),i.dispose(),v}let _=te(c),f=[],T=v=>{let b;return b=v.subscribe(y=>{let w=!1,k=!1;for(let m of y){let O=m[0];O===C?w=!0:(O===V||O===$||O===F)&&(k=!0)}(w||k)&&d(),k&&b&&(b(),b=void 0)}),()=>{b&&(b(),b=void 0)}};for(let v of h)f.push(T(v));return{node:c,dispose(){u=!0,l();for(let v of f)v?.();f.length=0,i.dispose(),_()}}}_pathsMatching(e){let t=Ze(e),n=[];return this._collectObserveTargets("",n),n.map(([s])=>s).filter(s=>t.test(s))}_collectObserveTargets(e,t){for(let n of[...this._mounts.keys()].sort()){let s=e===""?n:`${e}${P}${n}`;this._mounts.get(n)._collectObserveTargets(s,t)}for(let n of[...this._nodes.keys()].sort()){let s=this._nodes.get(n),o=e===""?n:`${e}${P}${n}`;t.push([o,s]),this._appendMetaObserveTargets(o,s,t)}}_appendMetaObserveTargets(e,t,n){for(let s of Object.keys(t.meta).sort()){let o=t.meta[s],i=`${e}${P}${Z}${P}${s}`;n.push([i,o]),this._appendMetaObserveTargets(i,o,n)}}observe(e,t){let n=typeof e=="string",o=hn(n?t:e);if(o.reactive===!0)return this._observeReactive(n?e:void 0,o);let i=o.structured===!0||o.timeline===!0||o.causal===!0||o.derived===!0||o.detail==="minimal"||o.detail==="full"||o.format!=null,a=o.actor;if(n){let l=e,h=this.resolve(l);if(a!=null&&!h.allowsObserve(a))throw new J({actor:a,action:"observe",nodeName:l});return i?this._buildStructuredObserver([[l,h]],o,"one"):{subscribe(p){return h.subscribe(p)},up(p){try{h.up?.(p)}catch(g){if(g instanceof J)return;throw g}}}}let u=[];this._collectObserveTargets("",u),u.sort((l,h)=>l[0]<h[0]?-1:l[0]>h[0]?1:0);let d=a==null?u:u.filter(([,l])=>l.allowsObserve(a));return i?this._buildStructuredObserver(d,o,"all"):{subscribe:l=>{let h=d.map(([p,g])=>g.subscribe(c=>{l(p,c)}));return()=>{for(let p of h)p()}},up:(l,h)=>{try{this.resolve(l).up?.(h)}catch(p){if(p instanceof J)return;throw p}}}}_observeReactive(e,t){let n=t.tiers,s=n!=null?new Set(n):null,o=t.reactiveName??"observe";return Be(i=>{let a=[],u=!1,d=!1,l=()=>{if(a.length===0||d)return;let _={events:a.slice(),flushedAt_ns:B()};a.length=0,i.emit(_)},h={...t,reactive:!1,structured:!0,timeline:!0},p=e!=null?this.observe(e,h):this.observe(h),g=_=>{d||(a.push(_),!u&&(u=!0,be(()=>{u=!1,l()})))};for(let _ of p.events)g(_);let c=p.onEvent(g);return()=>{d=!0,c(),p.dispose()}},{name:o,meta:{domain:"audit",kind:"observe-reactive"}})}_buildStructuredObserver(e,t,n){let s=n==="one"?e[0]?.[0]:void 0,o=i=>{if(n==="one"&&s!=null){let l=this.resolve(s);return this._buildStructuredObserver([[s,l]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((l,h)=>l[0]<h[0]?-1:l[0]>h[0]?1:0);let u=i.actor,d=u==null?a:a.filter(([,l])=>l.allowsObserve(u));return this._buildStructuredObserver(d,i,"all")};return this._createObserveResult(e,t,o)}_createObserveResult(e,t,n){let s=t.timeline===!0,o=t.causal===!0,i=t.derived===!0,a=t.detail==="minimal",u=this.config.inspectorEnabled,d=(o||i)&&u,l=t.maxEvents,h=l!=null&&l>0?new De(l):null,p=[],g=new Set,c=t.tiers!=null?new Set(t.tiers):null,_={},f=new Set,T=0,v=0,b=0,y=0,w=0,k=0,m=!1,O=!1,x=0,A=new Map,N=new Map,S=new Map,D=E=>{if(!(c!=null&&!c.has(E.type))){h?h.push(E):p.push(E);for(let M of g)M(E)}},R=E=>c==null||c.has(E),se=()=>s?{timestamp_ns:B(),in_batch:Me(),batch_id:x}:{},ne=(E,M)=>{if(!(!d||!(E instanceof I)))return E._setInspectorHook(q=>{if(q.kind==="dep_message")A.set(E,q.depIndex);else if(q.kind==="run"){let Oe=q.batchData.map((G,H)=>G!=null&&G.length>0?G.at(-1):q.prevData[H]);N.set(E,Oe);let Y=q.batchData.map(G=>G!=null?[...G]:void 0);S.set(E,Y),i&&D({type:"derived",path:M,dep_values:Oe,dep_batches:Y,...se()})}})},Ce=E=>{let M=A.get(E),q=N.get(E);if(!o||q==null)return{};let Y=(M!=null&&M>=0&&E instanceof I?E._deps[M]:void 0)?.node,G=Y?.v,H=S.get(E);return{trigger_dep_index:M,trigger_dep_name:Y?.name,...G!=null?{trigger_version:{id:G.id,version:G.version}}:{},dep_values:[...q],...H!=null?{dep_batches:H}:{}}},Ct=[],Gt=[];for(let[E,M]of e){let q=ne(M,E);q&&Ct.push(q),Gt.push(M.subscribe(Oe=>{x++;for(let Y of Oe){let G=Y[0],H=se();if(G===C){_[E]=Y[1];let ot=M instanceof I?M.lastMutation?.actor??_e:_e;D({type:"data",path:E,data:Y[1],actor:ot,...H,...Ce(M)})}else if(a)G===U?R("dirty")&&T++:G===W?R("resolved")&&v++:G===X?R("invalidate")&&b++:G===Q?R("pause")&&y++:G===re?R("resume")&&w++:G===F?R("teardown")&&k++:G===V&&!f.has(E)?R("complete")&&(m=!0):G===$&&R("error")&&(O=!0,f.add(E));else if(G===U)R("dirty")&&T++,D({type:"dirty",path:E,...H});else if(G===W)R("resolved")&&v++,D({type:"resolved",path:E,...H,...Ce(M)});else if(G===X)R("invalidate")&&b++,D({type:"invalidate",path:E,...H});else if(G===Q)R("pause")&&y++,D({type:"pause",path:E,lockId:Y[1],...H});else if(G===re)R("resume")&&w++,D({type:"resume",path:E,lockId:Y[1],...H});else if(G===V)R("complete")&&!f.has(E)&&(m=!0),D({type:"complete",path:E,...H});else if(G===$){R("error")&&(O=!0,f.add(E));let ot=M instanceof I?M.lastMutation?.actor??_e:_e;D({type:"error",path:E,data:Y[1],actor:ot,...H})}else G===F&&(R("teardown")&&k++,D({type:"teardown",path:E,...H}))}}))}let nt=!1,rt=()=>{if(!nt){nt=!0;for(let E of Gt)E();for(let E of Ct)E();for(let E of Ge)E({value:void 0,done:!0});Ge.length=0}},st=[],Ge=[];g.add(E=>{let M=Ge.shift();M?M({value:E,done:!1}):st.push(E)});let Mt={get values(){return _},get dirtyCount(){return T},get resolvedCount(){return v},get invalidateCount(){return b},get pauseCount(){return y},get resumeCount(){return w},get teardownCount(){return k},get events(){return h?h.toArray():[...p]},get anyCompletedCleanly(){return m},get anyErrored(){return O},get completedWithoutErrors(){return m&&!O},onEvent(E){return g.add(E),()=>g.delete(E)},dispose:rt,expand(E){rt();let M={...t};return typeof E=="string"?M.detail=E:Object.assign(M,E),n(hn(M))},[Symbol.asyncIterator](){return{next(){return st.length>0?Promise.resolve({value:st.shift(),done:!1}):nt?Promise.resolve({value:void 0,done:!0}):new Promise(E=>Ge.push(E))},return(){return rt(),Promise.resolve({value:void 0,done:!0})}}}};return t.format!=null&&this._attachFormatLogger(Mt,t),Mt}_attachFormatLogger(e,t){let n=t.format;if(n==null)return;let s=t.logger??(c=>console.log(c)),o=t.includeTypes?new Set(t.includeTypes):null,i=t.excludeTypes?new Set(t.excludeTypes):null,a=o==null&&i==null?()=>!0:c=>(o==null||o.has(c))&&(i==null||!i.has(c)),u=er(t.theme),d=n==="stage-log"?B():0,l=c=>c==null?"":t.stageLabels?.[c]??c,h=(c,_)=>c.length>_?`${c.slice(0,_-1)}\u2026`:c,p=c=>c.type==="data"||c.type==="error"?h(Et(c.data),120):"",g=c=>{if(n==="stage-log"){let m=(B()-d)/1e9,O=l(c.path).padEnd(9);if(c.type==="data"){let x=p(c);return`[${m.toFixed(3)}s] ${O} \u2190${x?` ${x}`:""}`}if(c.type==="error"){let x=p(c);return`[${m.toFixed(3)}s] ${O} \u2717${x?` ${x}`:""}`}return c.type==="complete"?`[${m.toFixed(3)}s] ${O} \u25A0 complete`:`[${m.toFixed(3)}s] ${O} ${c.type}`}if(n==="json")try{return JSON.stringify(c)}catch{return JSON.stringify({type:c.type,path:c.path,data:"[unserializable]"})}let _=u[c.type]??"",f=c.path?`${u.path}${c.path}${u.reset} `:"",T=c.type==="data"||c.type==="error",v=c.type==="pause"||c.type==="resume",b=T?` ${Et(c.data)}`:v?` ${Et(c.lockId)}`:"",y=c.type==="data"||c.type==="resolved"||c.type==="derived"?c:void 0,w=y?.trigger_dep_name!=null?` <- ${y.trigger_dep_name}`:y?.trigger_dep_index!=null?` <- #${y.trigger_dep_index}`:"",k=c.in_batch?" [batch]":"";return`${f}${_}${c.type.toUpperCase()}${u.reset}${b}${w}${k}`};e.onEvent(c=>{a(c.type)&&s(g(c),c)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){cn(this._disposers,this.name),this.signal([[F]],{internal:!0}),cn(this._storageDisposers,this.name);for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0,this._destroyed=!0}get destroyed(){return this._destroyed}_destroyClearOnly(){for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0,this._destroyed=!0}snapshot(e){let{expand:t,...n}=this.describe({detail:"full"}),s={};for(let a of Object.keys(n.nodes).sort()){let{lastMutation:u,guard:d,...l}=n.nodes[a];s[a]=l}let o=[...n.subgraphs].sort(),i={...n,version:1,nodes:s,subgraphs:o};if(e?.format==null)return i;if(e.format==="json-string")return JSON.stringify(i);if(e.format==="bytes"){if(e.codec==null)throw new Error("snapshot({format: 'bytes'}) requires a `codec` name");let a=this.config.lookupCodec(e.codec);if(a==null)throw new Error(`snapshot: codec "${e.codec}" is not registered on this graph's config. Call config.registerCodec(...) before creating nodes.`);return zt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,t){let n=t?.config??we,{codec:s,codecVersion:o,payload:i}=jt(e,n);return s.decode(i,o)}restore(e,t){if(pn(e),e.name!==this.name)throw new Error(`Graph "${this.name}": restore snapshot name "${e.name}" does not match this graph`);let n=t?.only==null?null:(Array.isArray(t.only)?t.only:[t.only]).map(o=>Ze(o)),s=t?.includeProducers===!0;for(let o of Object.keys(e.nodes).sort()){if(n!==null&&!n.some(a=>a.test(o)))continue;let i=e.nodes[o];if(i!==void 0){if(!("value"in i)||i.value===void 0){"value"in i&&i.value===void 0&&t?.onError?.(o,new Error(`restore: slice.value is undefined for "${o}" (undefined is the global SENTINEL; not valid DATA)`));continue}if(!(i.type==="derived"||i.type==="effect")&&!(i.type==="producer"&&!s)){if(i.v!=null){let u=this.tryResolve(o)?.v;if(u!=null&&u.id===i.v.id&&u.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){t?.onError?.(o,a)}}}}}static fromSnapshot(e,t){pn(e);let n=typeof t=="function"?t:t?.build,s=typeof t=="function"?void 0:t?.factories,o=new r(e.name);if(n)return n(o),o.restore(e),o;for(let g of[...e.subgraphs].sort((c,_)=>{let f=c.split(P).length,T=_.split(P).length;return f!==T?f-T:c<_?-1:c>_?1:0})){let c=g.split(P),_=o;for(let f of c)_._mounts.has(f)||_.mount(f,new r(f)),_=_._mounts.get(f)}let i=s?Object.entries(s).map(([g,c])=>({re:Ze(g),factory:c})):[],a=g=>{for(let c of i)if(c.re.test(g))return c.factory},u=g=>{let c=g.split(P),_=c.pop();if(_==null||_.length===0)throw new Error(`invalid snapshot path "${g}"`);let f=o;for(let T of c){let v=f._mounts.get(T);if(!v)throw new Error(`unknown mount "${T}" in path "${g}"`);f=v}return[f,_]},d=Object.entries(e.nodes).filter(([g])=>!g.includes(`${P}${Z}${P}`)).sort((g,c)=>g[0]<c[0]?-1:g[0]>c[0]?1:0),l=new Map(d),h=new Map,p=!0;for(;l.size>0&&p;){p=!1;for(let[g,c]of[...l.entries()]){let _=c?.deps??[];if(!_.every(w=>h.has(w)))continue;let[f,T]=u(g),v={...c?.meta??{}},b=a(g),y;if(c?.type==="state")y=ee(c.value,{meta:v});else{if(b==null)continue;y=b(T,{path:g,type:c.type,value:c.value,meta:v,deps:_,resolvedDeps:_.map(w=>h.get(w))})}f.add(y,{name:T}),h.set(g,y),l.delete(g),p=!0}}if(l.size>0){let g=[...l.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${g}. Pass matching factories via fromSnapshot(data, { factories: { pattern: factoryFn } }).`)}return o.restore(e),o}toJSON(){return this.snapshot()}attachSnapshotStorage(e,t={}){let n=e.map(d=>({tier:d,debounceMs:Math.max(0,d.debounceMs??0),compactEvery:Math.max(1,d.compactEvery??10),timer:void 0,seq:0,lastSnapshot:void 0,lastFingerprint:"",disposed:!1,savePending:void 0}));t.autoRestore===!0&&this._cascadeRestore(e,t.onError);let s=(d,l)=>{if(d.disposed)return;let h=Yn(l.nodes);if(d.lastSnapshot!=null&&h!==""&&h===d.lastFingerprint)return;let p=d.seq+1,g=oe(),f=d.lastSnapshot==null||p%d.compactEvery===0?{name:this.name,mode:"full",snapshot:l,seq:p,timestamp_ns:g,format_version:pe}:{name:this.name,mode:"diff",diff:bn(d.lastSnapshot,l),seq:p,timestamp_ns:g,format_version:pe};if(d.tier.filter&&!d.tier.filter(f))return;let T;try{T=d.tier.save(f)}catch(v){t.onError?.(v,d.tier);return}if(T&&typeof T.then=="function"){let y=(d.savePending??Promise.resolve()).then(()=>T,()=>T).then(()=>{d.disposed||(d.seq=p,d.lastSnapshot=l,d.lastFingerprint=h)},w=>{t.onError?.(w,d.tier)});d.savePending=y.finally(()=>{d.savePending===y&&(d.savePending=void 0)})}else d.seq=p,d.lastSnapshot=l,d.lastFingerprint=h},o=(d,l)=>{try{s(d,l)}catch(h){t.onError?.(h,d.tier)}},i=(d,l)=>{if(!l.some(c=>{let _=this.config.messageTier(c[0]);return _>=3&&_<5}))return;if(t.filter){let c=this.tryResolve(d);if(c==null)return;let _=wt(c,_t("standard"));if(!t.filter(d,_))return}let p,g=()=>(p==null&&(p=this.snapshot()),p);for(let c of n)c.disposed||(c.debounceMs===0?o(c,g()):(c.timer==null&&(c.timer=new Xe),c.timer.start(c.debounceMs,()=>{c.disposed||o(c,this.snapshot())})))},a;if(t.paths!=null){let l=(typeof t.paths=="string"?this._pathsMatching(t.paths):t.paths).map(h=>{let p=this.tryResolve(h);return p==null?()=>{}:p.subscribe(g=>i(h,g))});a=()=>{for(let h of l)h()}}else a=this.observe().subscribe((d,l)=>i(d,l));let u=()=>{a();for(let d of n)d.disposed=!0,d.timer?.cancel();this._storageDisposers.delete(u)};return this._storageDisposers.add(u),{dispose:u}}async _cascadeRestore(e,t){for(let n of e){let s;try{s=await n.load?.()}catch(i){t?.(i,n);continue}if(s==null||typeof s!="object"||Array.isArray(s))continue;let o=s;try{if(o.mode==="full"&&o.snapshot!=null)return this.restore(o.snapshot),!0;if(o.version===pe&&o.nodes!=null)return this.restore(o),!0}catch(i){t?.(i,n)}}return!1}static async fromStorage(e,t,n){for(let s of t){let o;try{o=await s.load?.()}catch(u){n?.onError?.(u,s);continue}if(o==null||typeof o!="object"||Array.isArray(o))continue;let i=o,a=i.mode==="full"&&i.snapshot!=null?i.snapshot:i.version===pe&&i.nodes!=null?i:void 0;if(a!=null)try{return r.fromSnapshot(a,n)}catch(u){n?.onError?.(u,s)}}throw new Error(`Graph.fromStorage: no tier held a restorable record for "${e}" across ${t.length} tier(s)`)}_annotations=new Map;_traceRing;trace(e,t,n){if(e!=null&&t!=null){if(this.tryResolve(e)==null)return;if(this._annotations.set(e,t),this.config.inspectorEnabled){let s={path:e,annotation:t,timestamp_ns:B(),...n?.actor!=null?{actor:n.actor}:{}};this._traceRing.push(s)}return}return e!=null?this.config.inspectorEnabled?this._annotations.get(e):void 0:this.config.inspectorEnabled?this._traceRing.toArray():[]}annotation(e){return this._annotations.get(e)}clearTrace(){this._annotations.clear(),this._traceRing.clear()}pruneTrace(e){let t=this._traceRing.toArray().filter(s=>!e(s)),n=this._traceRing.size-t.length;this._traceRing.clear();for(let s of t)this._traceRing.push(s);return n}static diff(e,t){let n=new Set(Object.keys(e.nodes)),s=new Set(Object.keys(t.nodes)),o=[...s].filter(v=>!n.has(v)).sort(),i=[...n].filter(v=>!s.has(v)).sort(),a=[],u=[];for(let v of n){if(!s.has(v))continue;let b=e.nodes[v],y=t.nodes[v],w=b.v,k=y.v;w!=null&&k!=null&&w.id===k.id&&w.version!==k.version&&u.push({path:v,id:w.id,from:w.version,to:k.version});let m=w!=null&&k!=null&&w.id===k.id&&w.version===k.version;for(let O of["type","status","sentinel"]){let x=b[O],A=y[O];x!==A&&a.push({path:v,field:O,from:x,to:A})}if(!m)for(let O of["value","meta"]){let x=b[O],A=y[O];Jn(x,A)||a.push({path:v,field:O,from:x,to:A})}}let d=v=>`${v.from} ${v.to}`,l=new Set(e.edges.map(d)),h=new Set(t.edges.map(d)),p=t.edges.filter(v=>!l.has(d(v))),g=e.edges.filter(v=>!h.has(d(v))),c=new Set(e.subgraphs),_=new Set(t.subgraphs),f=[..._].filter(v=>!c.has(v)).sort(),T=[...c].filter(v=>!_.has(v)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:u,edgesAdded:p,edgesRemoved:g,subgraphsAdded:f,subgraphsRemoved:T}}};function bn(r,e){let t=K.diff(r,e),n={};for(let s of t.nodesAdded){let o=e.nodes[s];o!=null&&(n[s]=o)}return{...t,nodesAddedFull:n}}function St(r,e,t,n={}){let s={paths:[],depths:new Map,truncated:!1};if(!e)return n.withDetail?s:[];if(!n.both&&t!=="upstream"&&t!=="downstream")throw new Error('reachable: direction must be "upstream" or "downstream"');let o=n.maxDepth;if(o!=null&&(!Number.isInteger(o)||o<0))throw new Error("reachable: maxDepth must be an integer >= 0");if(o===0)return n.withDetail?s:[];let i=new Map,a=new Map,u=new Map,d=new Map,l=new Set;for(let[b,y]of Object.entries(r.nodes)){if(!b)continue;l.add(b);let w=y.deps??[];i.set(b,w);for(let k of w)k&&(l.add(k),a.has(k)||a.set(k,new Set),a.get(k).add(b))}for(let b of r.edges){if(b==null||typeof b!="object")continue;let y=typeof b.from=="string"?b.from:"",w=typeof b.to=="string"?b.to:"";!y||!w||(l.add(y),l.add(w),d.has(y)||d.set(y,new Set),d.get(y).add(w),u.has(w)||u.set(w,new Set),u.get(w).add(y))}if(!l.has(e))return n.withDetail?s:[];let h=n.both===!0,p=b=>{if(h){let m=i.get(b)??[],O=u.get(b),x=a.get(b),A=d.get(b),N=[...m];return O&&N.push(...O),x&&N.push(...x),A&&N.push(...A),N}if(t==="upstream"){let m=i.get(b)??[],O=u.get(b);return O?[...m,...O]:m}let y=a.get(b),w=d.get(b),k=y?[...y]:[];return w&&k.push(...w),k},g=new Set([e]),c=new Map,_=[{path:e,depth:0}],f=0,T=!1;for(;f<_.length;){let b=_[f++];if(o!=null&&b.depth>=o){p(b.path).length>0&&(T=!0);continue}for(let y of p(b.path))!y||g.has(y)||(g.add(y),c.set(y,b.depth+1),_.push({path:y,depth:b.depth+1}))}let v=[...c.keys()].sort((b,y)=>b<y?-1:b>y?1:0);return n.withDetail?{paths:v,depths:c,truncated:T}:v}function sr(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++){let n=r[t],s=e[t];if(n.path!==s.path||n.type!==s.type||n.status!==s.status||n.hop!==s.hop||n.dep_index!==s.dep_index||n.annotation!==s.annotation||n.value!==s.value||n.lastMutation!==s.lastMutation)return!1;let o=n.v,i=s.v;if(o!==i&&(o==null||i==null||o.id!==i.id||o.version!==i.version))return!1}return!0}ie();function Rt(r,e){let t=new Map,n=(s,o)=>{if(t.has(s))return;let i={off:()=>{},prefix:o};t.set(s,i);let a=s.topology.subscribe(u=>{for(let d of u){if(d[0]!==C)continue;let l=d[1];if(e(l,s,o),l.kind==="added"&&l.nodeKind==="mount"){let h=s._mounts.get(l.name);if(h instanceof K){let p=`${o}${l.name}::`;n(h,p)}}else if(l.kind==="removed"&&l.nodeKind==="mount"){let h=`${o}${l.name}::`;for(let[p,g]of Array.from(t.entries()))p!==r&&g.prefix.startsWith(h)&&(g.off(),t.delete(p))}}});i.off=a;for(let[u,d]of s._mounts)if(d instanceof K){let l=`${o}${u}::`;n(d,l)}};return n(r,""),()=>{for(let s of t.values())s.off();t.clear()}}ze();ye();ie();Se();Ot();We();function yn(r,e){return Ue("messaging",r,e)}var or=1024,Qe=class extends K{_log;events;latest;hasLatest;constructor(e,t={}){super(e,t.graph),this._log=Ke([],{name:"events",maxSize:t.retainedLimit??or}),this._log.withLatest(),this.events=this._log.entries,this.add(this.events,{name:"events"}),this.latest=j([this.events],([n])=>{let s=n;return s.length===0?null:s[s.length-1]},{name:"latest",describeKind:"derived",meta:yn("topic_latest")}),this.add(this.latest,{name:"latest"}),this.addDisposer(te(this.latest)),this.hasLatest=j([this.events],([n])=>n.length>0,{name:"hasLatest",describeKind:"derived",meta:yn("topic_has_latest")}),this.add(this.hasLatest,{name:"hasLatest"}),this.addDisposer(te(this.hasLatest)),this.addDisposer(()=>{this.events.down([[V]])}),this.addDisposer(()=>this._log.disposeAllViews())}publish(e){if(e===void 0)throw new TypeError(`TopicGraph "${this.name}": publish(undefined) is not allowed (spec \xA75.12 SENTINEL).`);this._log.append(e)}attachEventStorage(e){return this._log.attachStorage(e)}retained(){return this.events.cache}get _logBundle(){return this._log}};function wn(r,e){return Ue("audit",r,e)}var ir=new Set(["data","error","complete","teardown"]),et=class extends K{entries;count;_log;_target;constructor(e,t){super(t.name??`${e.name}_audit`,t.graph),this._target=e,this._log=Ke([],{name:"entries",...t.maxSize!=null?{maxSize:t.maxSize}:{}}),this.entries=this._log.entries,this.add(this.entries,{name:"entries"}),this.count=j([this.entries],([u])=>u.length,{name:"count",describeKind:"derived",meta:wn("count")}),this.add(this.count,{name:"count"}),this.addDisposer(te(this.count));let n=t.includeTypes!=null?new Set(t.includeTypes):ir,s=t.filter,o=0,i=e.observe({timeline:!0,structured:!0}),a=i.onEvent(u=>{if(u.type==="derived")return;let d=u.type;if(!n.has(d))return;let l=u.path??"",h={seq:o++,timestamp_ns:u.timestamp_ns??B(),wall_clock_ns:oe(),path:l,type:d},g=(l?Dt(e,l):void 0)?.lastMutation;g!=null&&(h.actor=g.actor),d==="data"&&(h.value=u.data),d==="error"&&(h.error=u.data);let c=l?cr(e,l):void 0;c!=null&&(h.annotation=c),!(s!=null&&!s(h))&&this._log.append(h)});this.addDisposer(()=>{a(),i.dispose()}),this.addDisposer(()=>this._log.disposeAllViews())}all(){return this.entries.cache??[]}byNode(e){return this.all().filter(t=>t.path===e)}byActor(e){return this.all().filter(t=>t.actor?.id===e)}byActorType(e){return this.all().filter(t=>t.actor?.type===e)}byTimeRange(e,t){return this.all().filter(n=>!(n.timestamp_ns<e||t!=null&&n.timestamp_ns>=t))}get target(){return this._target}};function ar(r,e={}){return new et(r,e)}var tt=class extends K{policies;violations;violationCount;_target;_mode;_currentGuard;constructor(e,t,n){super(n.name??`${e.name}_policy`,n.graph),this._target=e,this._mode=n.mode??"audit";let s=vn(t)?t:ee(t,{name:"policies"});this.policies=s,this.add(this.policies,{name:"policies"}),this.violations=new Qe("violations",{retainedLimit:n.violationsLimit??1e3}),this.mount("violations",this.violations),this.violationCount=j([this.violations.events],([c])=>c.length,{name:"violationCount",describeKind:"derived",meta:wn("policy_violation_count")}),this.add(this.violationCount,{name:"violationCount"}),this.addDisposer(te(this.violationCount));let i=s.cache??[];this._currentGuard=at(i);let a=s.subscribe(c=>{for(let _ of c)_[0]===C&&(i=_[1]??[],this._currentGuard=at(i))});this.addDisposer(a);let u=n.paths,d=vn(u)?u:void 0,l=u!=null,p=d!=null?d.cache??[]:l?[...u]:void 0,g=p??_n(e);if(this._mode!=="enforce"&&d!=null){let c=d.subscribe(_=>{for(let f of _)f[0]===C&&(p=f[1]??[])});this.addDisposer(c)}if(this._mode==="enforce"){let c=new Map,_=f=>{if(c.has(f))return;let T=Dt(e,f);if(!(T instanceof I))return;let v=(b,y)=>{let w=this._currentGuard(b,y);return w||this._publishViolation(b,y,f,"blocked"),w};c.set(f,T._pushGuard(v))};for(let f of g)_(f);if(d!=null){let f=d.subscribe(T=>{for(let v of T){if(v[0]!==C)continue;let b=v[1]??[],y=new Set(b),w=new Set(p??[]);ce(()=>{for(let k of w){if(y.has(k))continue;let m=c.get(k);m!=null&&(m(),c.delete(k))}for(let k of y)w.has(k)||_(k);p=b})}});this.addDisposer(f)}if(l){let f=e.topology.subscribe(T=>{for(let v of T){if(v[0]!==C)continue;let b=v[1];if(b.kind!=="removed"||b.nodeKind!=="node")continue;let y=c.get(b.name);y!=null&&(y(),c.delete(b.name))}});this.addDisposer(f)}else{let f=Rt(e,(T,v,b)=>{if(T.kind==="added")if(T.nodeKind==="node")_(`${b}${T.name}`);else{let y=v._mounts.get(T.name);if(!(y instanceof K))return;let w=`${b}${T.name}::`,k=_n(y);for(let m of k)_(m===""?`${b}${T.name}`:`${w}${m}`)}else if(T.kind==="removed")if(T.nodeKind==="node"){let y=`${b}${T.name}`,w=c.get(y);w!=null&&(w(),c.delete(y))}else{let y=`${b}${T.name}`,w=`${y}::`;for(let[k,m]of c)(k===y||k.startsWith(w))&&(m(),c.delete(k))}});this.addDisposer(f)}this.addDisposer(()=>{for(let f of c.values())f();c.clear()})}else{let c=e.observe({timeline:!0,structured:!0}),_=c.onEvent(f=>{if(f.type!=="data"&&f.type!=="error")return;let T=f.path??"";if(!T||p!=null&&!p.includes(T))return;let v=f.actor??Dt(e,T)?.lastMutation?.actor;if(v==null)return;let b="write";this._currentGuard(v,b)||this._publishViolation(v,b,T,"observed")});this.addDisposer(()=>{_(),c.dispose()})}}_publishViolation(e,t,n,s){this.violations.publish({timestamp_ns:B(),wall_clock_ns:oe(),path:n,actor:e,action:t,mode:this._mode,result:s})}all(){return this.violations.retained()}get mode(){return this._mode}get target(){return this._target}};function ur(r,e,t={}){let n=new tt(r,e,t);return n.tagFactory("policyGate",Xt(t)),n}function dr(r,e={}){let t={format_version:1,timestamp_ns:B(),wall_clock_ns:oe(),graph:r.snapshot()};if(e.actor!=null&&(t.actor=e.actor),e.audit!=null){let s=[...e.audit.all()];t.audit={count:s.length,entries:s}}if(e.policies!=null){let s=e.policies.policies.cache??[];t.policies={mode:e.policies.mode,rules:s,violations:[...e.policies.all()]}}let n=lr(t);return{...t,fingerprint:n}}function vn(r){return typeof r=="object"&&r!==null&&"subscribe"in r}function Dt(r,e){try{return r.node(e)}catch{return}}function cr(r,e){try{return r.annotation(e)}catch{return}}function _n(r){let e=r.describe({detail:"minimal"});return Object.keys(e.nodes)}function lr(r){return Ae(JSON.stringify(fr(r)))}function fr(r){let e=new Set,t=n=>{if(n===void 0)return{__undefined:!0};if(n===null)return null;let s=typeof n;if(s==="bigint")return{__bigint:n.toString()};if(s!=="object")return n;let o=n;if(e.has(o))return{__circular:!0};e.add(o);try{if(Array.isArray(o))return o.map(t);if(o instanceof Date)return{__date:o.toISOString()};if(o instanceof RegExp)return{__regexp:{source:o.source,flags:o.flags}};if(o instanceof Map)return{__map:[...o.entries()].map(([u,d])=>[t(u),t(d)])};if(o instanceof Set)return{__set:[...o].map(t)};if(ArrayBuffer.isView(o)){let a=o,u=new Array(a.length);for(let d=0;d<a.length;d++)u[d]=a[d]??0;return{__typed_array:{ctor:o.constructor.name,data:u}}}let i={};for(let a of Object.keys(o).sort())i[a]=t(o[a]);return i}finally{e.delete(o)}};return t(r)}0&&(module.exports={AuditTrailGraph,PolicyGateGraph,auditTrail,complianceSnapshot,policyGate});
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import '../../node-BYInONRr.cjs';
|
|
2
|
-
import '../../graph-E6likq7w.cjs';
|
|
3
|
-
import '../../index-Cnr1WrlX.cjs';
|
|
4
|
-
export { A as AuditEntry, b as AuditTrailGraph, c as AuditTrailOptions, C as ComplianceSnapshotOptions, d as ComplianceSnapshotResult, P as PolicyGateGraph, e as PolicyGateOptions, a as PolicyViolation, f as auditTrail, g as complianceSnapshot, p as policyGate } from '../../index-BmSQLAZo.cjs';
|
|
5
|
-
import '../../meta-Ct9nqQS5.cjs';
|
|
6
|
-
import '../../extra/storage-core.cjs';
|
|
7
|
-
import '../../extra/storage-tiers.cjs';
|
|
8
|
-
import '../../reactive-log-_zeEnB9H.cjs';
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import '../../node-BYInONRr.js';
|
|
2
|
-
import '../../graph-BkIkog4h.js';
|
|
3
|
-
import '../../index-40ZT4MHj.js';
|
|
4
|
-
export { A as AuditEntry, b as AuditTrailGraph, c as AuditTrailOptions, C as ComplianceSnapshotOptions, d as ComplianceSnapshotResult, P as PolicyGateGraph, e as PolicyGateOptions, a as PolicyViolation, f as auditTrail, g as complianceSnapshot, p as policyGate } from '../../index-Ck35nA-T.js';
|
|
5
|
-
import '../../meta-D8OyedKp.js';
|
|
6
|
-
import '../../extra/storage-core.js';
|
|
7
|
-
import '../../extra/storage-tiers.js';
|
|
8
|
-
import '../../reactive-log-BlAsPLl2.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e}from"../../chunk-VMF23LGB.js";import"../../chunk-J63M5U46.js";import"../../chunk-ECQRP2UT.js";import"../../chunk-3G5U5QNE.js";import"../../chunk-C72GO4IZ.js";import"../../chunk-4I45FVQS.js";import"../../chunk-L6NSJVJZ.js";import"../../chunk-2BX4NB34.js";import"../../chunk-SGS4OJGS.js";import"../../chunk-ESMPEKEV.js";import"../../chunk-35JTVPOX.js";import"../../chunk-YXDRGKXP.js";import"../../chunk-CKFQS2CJ.js";import"../../chunk-LYCLF26R.js";import"../../chunk-CK2E7BTU.js";import"../../chunk-QYADASLV.js";export{a as AuditTrailGraph,c as PolicyGateGraph,b as auditTrail,e as complianceSnapshot,d as policyGate};
|