@cleocode/cleo 2026.9.7 → 2026.9.10
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/cli/index.js +3873 -2234
- package/package.json +14 -13
- package/scripts/check-cleo-tarball-size.mjs +105 -0
- package/scripts/copy-studio-dist.mjs +33 -9
- package/studio-dist/client/_app/immutable/chunks/{wI_OOyoh.js → BB7zPpV2.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{D8NsLz6i.js → BOnrCZaR.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{eK8hf4s7.js → BSRBuVG3.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/C6jhAnil.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/C87Q3uxm.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/{DVHIxkgs.js → CLZBEpLY.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{CqF5Lomf.js → CTLGzgdN.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{o1PZ6Kzq.js → CY3heNub.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{RptFUp2P.js → Cge6qiwc.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{BRgWBQlV.js → CnwXLaZJ.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{Bxz2A0ZC.js → DEH43YwF.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/DGftG5oL.js +3 -0
- package/studio-dist/client/_app/immutable/chunks/DX_JOBSO.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/{CEqOYim7.js → DZrdToAH.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/EZwHPWle.js +2 -0
- package/studio-dist/client/_app/immutable/chunks/cWVw9W0E.js +3 -0
- package/studio-dist/client/_app/immutable/chunks/{B9psmq5-.js → rB_71s8h.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{JPJd4fEI.js → rUtW7Hx6.js} +1 -1
- package/studio-dist/client/_app/immutable/entry/app.tvu3-wbp.js +2 -0
- package/studio-dist/client/_app/immutable/entry/start.BS-rpdjH.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{0.CZzEEyVh.js → 0.DMP7swbx.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{1.Bj3Opbua.js → 1.CYZMFpIp.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{10.xe_Mc2Ko.js → 10.3rxHNnSx.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{11.DuKPA7JD.js → 11.B6jWv3Kz.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{12.BoZ_QrUS.js → 12.BrDHeTEq.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{13.DFJiUiv8.js → 13.CE5bd4JV.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{14.eaAlFU4w.js → 14.DgXD2LRx.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{15.BfXgiwMC.js → 15.Cz1KI9Fv.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{16.mEwy9cqh.js → 16.K9wYQPhb.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{17.DP2QtQGn.js → 17.CtUmdfMg.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{18.Bu0054sX.js → 18.mtosd0sL.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{19.UWt6QbCm.js → 19.su55K8y_.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{2.y5jKpHiR.js → 2.mqgFVWFQ.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{20.B1AIHdkP.js → 20.NJuHLxuS.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{21.CpAN71H8.js → 21.BhwhdQCq.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{22.CrYKrN4c.js → 22.BmJEWwER.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{23.pGRaHQjq.js → 23.CAVIJEH-.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{24.BUoUu37z.js → 24.CMuXs5Sy.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/25.DhMBJYAo.js +39 -0
- package/studio-dist/client/_app/immutable/nodes/26.CJ4FA5FS.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{28.DcmYM7lb.js → 28.D64RBcfs.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{29.lbHbMqNO.js → 29.yfuBeH1x.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{3.Dyir4xXj.js → 3.y115j1d5.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{30.DXj0Wm2A.js → 30.1WUv5bh9.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/4.D6vXYBoQ.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{5.VWSdP7oc.js → 5.hjw2O-4e.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{6.Dl-XLwOj.js → 6.CAoDfDt6.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{7.CFuC5L-y.js → 7.CLgPSQ8Z.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{8.BCJ0DhOb.js → 8.zuaO1Hik.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{9.Bq4SUzL9.js → 9.Cdsd85m2.js} +1 -1
- package/studio-dist/client/_app/version.json +1 -1
- package/studio-dist/server/chunks/0-BQvtFOrC.js +41 -0
- package/studio-dist/server/chunks/1-Bx2_yoiK.js +9 -0
- package/studio-dist/server/chunks/{10-DvOD4ksa.js → 10-CYLc3d5x.js} +3 -3
- package/studio-dist/server/chunks/{11-DMnBZ02H.js → 11-DcIYR5vm.js} +3 -3
- package/studio-dist/server/chunks/{12-CCyRyRWX.js → 12-WE1u104t.js} +3 -3
- package/studio-dist/server/chunks/{13-Dx1c3a_X.js → 13-joBDoxhK.js} +3 -3
- package/studio-dist/server/chunks/{14-Bo-dTCaZ.js → 14-Doj5F4uJ.js} +3 -3
- package/studio-dist/server/chunks/{15-BvUNl3KL.js → 15-nQTeHGD1.js} +3 -3
- package/studio-dist/server/chunks/{16-De6EzPSa.js → 16-CcTN0e8k.js} +5 -4
- package/studio-dist/server/chunks/{17-CZNsiZhi.js → 17-DWiFnzES.js} +10 -93
- package/studio-dist/server/chunks/{18-CbxxjZox.js → 18-Dcc9GnPo.js} +5 -4
- package/studio-dist/server/chunks/{19-DqHyladS.js → 19-BAQHPrMB.js} +3 -3
- package/studio-dist/server/chunks/{2-COvmA-ZA.js → 2-DXSVVaej.js} +10 -93
- package/studio-dist/server/chunks/20-DfQlGHPW.js +57 -0
- package/studio-dist/server/chunks/{21-DXK9ptAC.js → 21-qhGjkW41.js} +4 -31
- package/studio-dist/server/chunks/{22-DD5CLWJC.js → 22-Byy16hFA.js} +3 -3
- package/studio-dist/server/chunks/23-CZpFrGp4.js +97 -0
- package/studio-dist/server/chunks/24-EEysaT9T.js +67 -0
- package/studio-dist/server/chunks/{25-CAg6Xcmn.js → 25-CgiYn70L.js} +15 -96
- package/studio-dist/server/chunks/{26-_nfVTvNi.js → 26-Cfd6BaUb.js} +12 -93
- package/studio-dist/server/chunks/{27-C9edghG4.js → 27-Cqzlh9gZ.js} +3 -2
- package/studio-dist/server/chunks/{28-VemTJGyc.js → 28-DeYe2rpm.js} +8 -62
- package/studio-dist/server/chunks/{29-CXP-m29t.js → 29-6pjLM0Z1.js} +10 -93
- package/studio-dist/server/chunks/{3-B8KhfvHp.js → 3-E_fWDAkq.js} +9 -25
- package/studio-dist/server/chunks/{30-QiM1S4cJ.js → 30-Dw317sSW.js} +10 -93
- package/studio-dist/server/chunks/{31-BwdY9NnB.js → 31-Q4kHbp8j.js} +3 -2
- package/studio-dist/server/chunks/{4-CSaG4HjO.js → 4-C9BMSh4K.js} +4 -3
- package/studio-dist/server/chunks/{5-i5ry4y3C.js → 5-C0CF4WKG.js} +3 -3
- package/studio-dist/server/chunks/{6-DR1GWBMT.js → 6-BWyOJust.js} +3 -3
- package/studio-dist/server/chunks/{7-DSNwn3aQ.js → 7-CK4MK5gy.js} +3 -3
- package/studio-dist/server/chunks/{8-Bj0bx07K.js → 8-CiX7Xk9k.js} +3 -3
- package/studio-dist/server/chunks/{9-B3Tz0mZq.js → 9-Be5118w4.js} +3 -3
- package/studio-dist/server/chunks/{HeroHeader-v4Q9vaGr.js → HeroHeader-BrGN5WPw.js} +2 -2
- package/studio-dist/server/chunks/{Sparkline-BJ-GuhRd.js → Sparkline-DU_NVxz9.js} +2 -2
- package/studio-dist/server/chunks/{StatBlock-DHJMmOCx.js → StatBlock-jNsxycS1.js} +2 -2
- package/studio-dist/server/chunks/{Tabs-DzG6Bn9a.js → Tabs-DQKDflnT.js} +2 -2
- package/studio-dist/server/chunks/_dispatch-DTWViLGL.js +145 -0
- package/studio-dist/server/chunks/{_layout.svelte-BEIGQcIv.js → _layout.svelte-CL6GfET2.js} +7 -9
- package/studio-dist/server/chunks/{_page.svelte-al08ovKm.js → _page.svelte-6iMiGR11.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-Byz2djto.js → _page.svelte-B-YXGvAW.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-tYN7_LXI.js → _page.svelte-B5E6RqVb.js} +9 -11
- package/studio-dist/server/chunks/{_page.svelte-UYiF7YBK.js → _page.svelte-BCRyjlk2.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-CCoTp89s.js → _page.svelte-BoYafqft.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-nzffIbBP.js → _page.svelte-C7Wm6_HB.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-C_VSL8NW.js → _page.svelte-Cgqt7ucn.js} +13 -71
- package/studio-dist/server/chunks/{_page.svelte-CophUar3.js → _page.svelte-CqI6hqMm.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-BgwL2Gyu.js → _page.svelte-CvQ2rZZ1.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-l4Z_xjl9.js → _page.svelte-CvTyJEyS.js} +9 -11
- package/studio-dist/server/chunks/{_page.svelte-DOWw416I.js → _page.svelte-CvzAttO9.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-DYNorA0S.js → _page.svelte-Cx9Ptecp.js} +10 -67
- package/studio-dist/server/chunks/{_page.svelte-Wfx7ww_h.js → _page.svelte-Cx9dPjsT.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-2cgtvHwW.js → _page.svelte-DGN5j-At.js} +13 -71
- package/studio-dist/server/chunks/{_page.svelte-BVVTrzTL.js → _page.svelte-DaheDIRs.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-M5D2QnMS.js → _page.svelte-Dm8y5a8S.js} +10 -67
- package/studio-dist/server/chunks/{_page.svelte-B_pq-Z98.js → _page.svelte-DqXxyNsF.js} +7 -7
- package/studio-dist/server/chunks/{_page.svelte-C3aIui4o.js → _page.svelte-DqsbnAhk.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-ksTJUXce.js → _page.svelte-Dt0_c1T-.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-bGhsrIjS.js → _page.svelte-Dv6iwhu7.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-BXyoMME1.js → _page.svelte-GPiHej3P.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-CYDjW1R0.js → _page.svelte-LuRm8XxE.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-Clbkk1gm.js → _page.svelte-Z7nL9SC-.js} +8 -9
- package/studio-dist/server/chunks/{_page.svelte-DUWbZjC7.js → _page.svelte-_kntHS6v.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-BIlhmugm.js → _page.svelte-eiomv6Pa.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-9OQphlnm.js → _page.svelte-jXJbd8Mx.js} +14 -69
- package/studio-dist/server/chunks/{_page.svelte-CHzXuw2Q.js → _page.svelte-me5SUosG.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-DSzRdt1U.js → _server.ts--2m_U4SL.js} +11 -94
- package/studio-dist/server/chunks/{_server.ts-ujoDR2_g.js → _server.ts--sGLmBsz.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-k2fApwOp.js → _server.ts-0ukyuE0I.js} +5 -60
- package/studio-dist/server/chunks/_server.ts-1eW2mTeh.js +40 -0
- package/studio-dist/server/chunks/{_server.ts-Bfr4u3EP.js → _server.ts-3LzqLzt0.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-40h9Y46Y.js +122 -0
- package/studio-dist/server/chunks/_server.ts-5euivmMj.js +38 -0
- package/studio-dist/server/chunks/{_server.ts-CShsBkeE.js → _server.ts-B0uoay97.js} +7 -23
- package/studio-dist/server/chunks/{_server.ts-hL92cV7Z.js → _server.ts-B5vYKkI6.js} +9 -63
- package/studio-dist/server/chunks/{_server.ts-_RJXtmfi.js → _server.ts-B8dTbPHd.js} +8 -23
- package/studio-dist/server/chunks/{_server.ts-C3Jo-ju8.js → _server.ts-BA8Xdegq.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-BBClE0n9.js +54 -0
- package/studio-dist/server/chunks/{_server.ts-ZS1_yMwR.js → _server.ts-BDwMoyZ_.js} +6 -32
- package/studio-dist/server/chunks/{_server.ts-sv4pA808.js → _server.ts-BE-Uhx4N.js} +5 -46
- package/studio-dist/server/chunks/{_server.ts-DV6pzF-M.js → _server.ts-BSHADOUJ.js} +4 -3
- package/studio-dist/server/chunks/_server.ts-BcsqAqXt.js +67 -0
- package/studio-dist/server/chunks/_server.ts-Bl9tMqwZ.js +159 -0
- package/studio-dist/server/chunks/_server.ts-BlzDnRI0.js +51 -0
- package/studio-dist/server/chunks/{_server.ts-DnE0f-iC.js → _server.ts-BtuemCsf.js} +4 -3
- package/studio-dist/server/chunks/{_server.ts-BPcErnS0.js → _server.ts-C2nYqbd9.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-4p6cp9ke.js → _server.ts-C6IDM_3I.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-C8Z32vuL.js +45 -0
- package/studio-dist/server/chunks/_server.ts-CBXyadsy.js +26 -0
- package/studio-dist/server/chunks/{_server.ts-Do9RIPRo.js → _server.ts-CE6h2ATE.js} +5 -32
- package/studio-dist/server/chunks/_server.ts-CH06JVqZ.js +65 -0
- package/studio-dist/server/chunks/_server.ts-CNqcws-M.js +29 -0
- package/studio-dist/server/chunks/{_server.ts-CJA1djzJ.js → _server.ts-CPf8necd.js} +8 -92
- package/studio-dist/server/chunks/{_server.ts-uUx7uT2Y.js → _server.ts-CYv5YuHd.js} +6 -43
- package/studio-dist/server/chunks/{_server.ts-B2E7fxo9.js → _server.ts-CZ5GZRWX.js} +6 -91
- package/studio-dist/server/chunks/{_server.ts-DSAv66wD.js → _server.ts-CbThsyhY.js} +4 -3
- package/studio-dist/server/chunks/{_server.ts-DgbY5EB3.js → _server.ts-CeQolQOK.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-ChoGyX5C.js +61 -0
- package/studio-dist/server/chunks/_server.ts-CjJYkLJH.js +61 -0
- package/studio-dist/server/chunks/{_server.ts-lPlBUIJX.js → _server.ts-CtjArzxf.js} +5 -60
- package/studio-dist/server/chunks/{_server.ts-Cq60m8Pw.js → _server.ts-D3QWZwt_.js} +4 -3
- package/studio-dist/server/chunks/{_server.ts-CkoJ2HCW.js → _server.ts-D6wP5bCh.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-DwTRjS4y.js → _server.ts-D7JwQTun.js} +10 -93
- package/studio-dist/server/chunks/_server.ts-DKFJdXPK.js +97 -0
- package/studio-dist/server/chunks/_server.ts-DNAPGKEF.js +55 -0
- package/studio-dist/server/chunks/_server.ts-DQiTiY3E.js +78 -0
- package/studio-dist/server/chunks/{_server.ts-BT0Uq2yq.js → _server.ts-DUyeSXbV.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-DRVz9D-J.js → _server.ts-DY7BwZCv.js} +9 -24
- package/studio-dist/server/chunks/{_server.ts-Cz0zgaUV.js → _server.ts-D_E276ms.js} +3 -2
- package/studio-dist/server/chunks/{_server.ts-B5g3eScF.js → _server.ts-DgtmTAp5.js} +5 -60
- package/studio-dist/server/chunks/{_server.ts-CboRJY0Q.js → _server.ts-DhTKaw7h.js} +10 -63
- package/studio-dist/server/chunks/_server.ts-DqKBSCPT.js +31 -0
- package/studio-dist/server/chunks/{_server.ts-CpmMp5D8.js → _server.ts-DyXBNnRD.js} +4 -3
- package/studio-dist/server/chunks/_server.ts-DzjUpduu.js +25 -0
- package/studio-dist/server/chunks/{_server.ts-CGiAXy5i.js → _server.ts-Dznqw6Dg.js} +8 -23
- package/studio-dist/server/chunks/{_server.ts-tKMjUFUP.js → _server.ts-EVwS7UXb.js} +4 -3
- package/studio-dist/server/chunks/_server.ts-J17j25VG.js +62 -0
- package/studio-dist/server/chunks/{_server.ts-BdN4AJ6o.js → _server.ts-VQchZxXq.js} +10 -91
- package/studio-dist/server/chunks/{_server.ts-C4BcDGqS.js → _server.ts-XLV5SvjH.js} +7 -63
- package/studio-dist/server/chunks/_server.ts-jZgqFIJz.js +45 -0
- package/studio-dist/server/chunks/{_server.ts-Bw7A4zgb.js → _server.ts-lyiGGv7w.js} +5 -3
- package/studio-dist/server/chunks/{brain-CXR7ZT7S.js → brain-xt_NeshR.js} +2 -2
- package/studio-dist/server/chunks/cleo-home-_XIqkZaL.js +109 -0
- package/studio-dist/server/chunks/{cli-action-DQcaqcfn.js → cli-action-VJPEn1pY.js} +2 -2
- package/studio-dist/server/chunks/{client-CgX38JBu.js → client-D71MZ7Vi.js} +5 -6
- package/studio-dist/server/chunks/cluster-label-layer-CysRMvhi.js +6721 -0
- package/studio-dist/server/chunks/connections-CWLPjwBP.js +15 -0
- package/studio-dist/server/chunks/{connections2-mi7mZqJM.js → connections2-DHVs5ytW.js} +32 -19
- package/studio-dist/server/chunks/{dev-BNpEUZI3.js → dev-Br5zieNA.js} +2 -2
- package/studio-dist/server/chunks/dist-BzgWhfUR.js +18748 -0
- package/studio-dist/server/chunks/{error.svelte-CplNulnS.js → error.svelte-BIToUowC.js} +6 -8
- package/studio-dist/server/chunks/{explorer-loader-BN_mkt3_.js → explorer-loader-B_uCSs9_.js} +2 -2
- package/studio-dist/server/chunks/exports-Dg-gdPPq.js +124 -0
- package/studio-dist/server/chunks/{hooks.server-DBsyphiX.js → hooks.server-CWBRp8NI.js} +10 -93
- package/studio-dist/server/chunks/{http-CRTZe306.js → http-DPU3HHl2.js} +3 -4
- package/studio-dist/server/chunks/{index-server-DocJvixA.js → index-server-BgfA6C0S.js} +17 -4
- package/studio-dist/server/chunks/{internal-D6eWgsHJ.js → internal-DPnIJYMs.js} +56 -92
- package/studio-dist/server/chunks/{memory2-Cgc_4D5q.js → memory-BZHnDZzu.js} +4 -4
- package/studio-dist/server/chunks/{nexus-adapter-9EL_VlGI.js → nexus-adapter-D1ryYG1Z.js} +5 -5
- package/studio-dist/server/chunks/{no-face-up-DcejJLy-.js → no-face-up-B_3h6Hgs.js} +2 -2
- package/studio-dist/server/chunks/project-context-BAXQmgch.js +188 -0
- package/studio-dist/server/chunks/{src-BUqGet2c.js → src-D2rW9bIF.js} +422 -5
- package/studio-dist/server/chunks/{stores-5DmdjPCH.js → stores-BZdYTyl7.js} +3 -3
- package/studio-dist/server/chunks/{tasks2-Bf9VHrv-.js → tasks-sWuEmiGW.js} +2349 -9
- package/studio-dist/server/chunks/{ui-DR8zOSpC.js → ui-CkQ-pCs3.js} +2 -2
- package/studio-dist/server/chunks/utils-g564cUMV.js +151 -0
- package/studio-dist/server/index.js +5 -16
- package/studio-dist/server/manifest.js +88 -88
- package/dist/cli/index.js.map +0 -6
- package/studio-dist/client/_app/immutable/assets/parse-worker.CSEr67Qi.js +0 -1127
- package/studio-dist/client/_app/immutable/chunks/2mEksghu2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/3KebaI-z.js +0 -53
- package/studio-dist/client/_app/immutable/chunks/3y2yNYEk2.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/7UXYlaI1.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/83VLmCvk.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/84Rhmi6r.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/9CV9TXTg2.js +0 -92
- package/studio-dist/client/_app/immutable/chunks/9LFtcz24.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/9bLMgKwu2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/9kKqohVR2.js +0 -37
- package/studio-dist/client/_app/immutable/chunks/B-Ye28EY.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/B-jnUl7o.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B0ORuy8x2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B0xCM1wN2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B0zCN4sX.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B1wt-iGW.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/B2F3KUIU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B2_6RrlL2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B2qKEYxA2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B2u2rNyI2.js +0 -8
- package/studio-dist/client/_app/immutable/chunks/B3_X3Lhd2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B3sNtbqf.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B4NQP1Ax2.js +0 -6
- package/studio-dist/client/_app/immutable/chunks/BAtZg5v5.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BB6WKLm82.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BBX8UDtn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BBs1U1iU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BEli_4Jp2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BEt2wIUt.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BEyM8qSW2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BFZA3Dsk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BGdPweG1.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BGiusSqE.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BGmpyfzD.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BH5rhSIR.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BHciFt922.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BHnFwTQY.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BIvye3XP2.js +0 -59
- package/studio-dist/client/_app/immutable/chunks/BJ8mcpQA2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BK17qSHw.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BLkgUtyb.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BMUko3r62.js +0 -5
- package/studio-dist/client/_app/immutable/chunks/BMwzdEaa.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BQZx6brg.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BUPJTTTd.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BVNGAeZe2.js +0 -146
- package/studio-dist/client/_app/immutable/chunks/BWfLryGm.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BXIfeogw.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BXTfFyUU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BYJC6_MM.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BZV1ZJzH.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BZu9rehd.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Bbzm48C52.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BfGnlwjH.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Bfjb9LPp.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BieFfu-R.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Bmv63uXe2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BtBW1A0u.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BxISGQCl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/ByNR_KvT.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BzjhD6Hr2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BzpWnq0c2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C-yJVcyI2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C0cQ-8kS2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C1vWmhYe.js +0 -48
- package/studio-dist/client/_app/immutable/chunks/C1w6bBje.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C243sn7r.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/C2oZaDvt.js +0 -67
- package/studio-dist/client/_app/immutable/chunks/C3OziSQx.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C3hFPbMK.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/C4P9oFvU2.js +0 -6
- package/studio-dist/client/_app/immutable/chunks/C5Nlanei.js +0 -8
- package/studio-dist/client/_app/immutable/chunks/C6KBAXPl.js +0 -15
- package/studio-dist/client/_app/immutable/chunks/C8MZnWta.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CAoan3K12.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CBpcINYH.js +0 -29
- package/studio-dist/client/_app/immutable/chunks/CE7phgWq.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CFb4Co_K.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CGWoRK3t2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CH3t4xo1.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CHJgk6g-.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CHgPjuDQ.js +0 -17
- package/studio-dist/client/_app/immutable/chunks/CHkCZrnr.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CI_91WUN.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/CJ7-hP0H.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CKIrNnkY2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CKoQ7Ko5.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CM8O4zqs.js +0 -56
- package/studio-dist/client/_app/immutable/chunks/CMz3AVRO.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CNToUR3P.js +0 -13
- package/studio-dist/client/_app/immutable/chunks/CNuQG1yl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CQLIZtxj.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CQYVNgM0.js +0 -20
- package/studio-dist/client/_app/immutable/chunks/CQeVOmFO2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CSPHHq09.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CTJEdbIn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CTTT3wYw.js +0 -35
- package/studio-dist/client/_app/immutable/chunks/CV4ck7fz.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CXQrVnHf.js +0 -11
- package/studio-dist/client/_app/immutable/chunks/CXTCtOUQ.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C_CsU7Qq.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C_IZx3682.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CbTnu2Po2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cba8RZ1a2.js +0 -8
- package/studio-dist/client/_app/immutable/chunks/Cc8xxDr5.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CdPxoldu.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CdqDTozW.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CdsmcCfC.js +0 -25
- package/studio-dist/client/_app/immutable/chunks/CeYPAoY9.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cf4kGS9y.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CfWEqXtJ2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cg7Wj2b9.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CgTpKZfi2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Chpy9ca7.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CiLKuLrQ.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/CjNDJjwu.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cjde0ZKr2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cjgnade02.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/Ckp90om52.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/ClAPVhCD.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/ClT89UdO.js +0 -11
- package/studio-dist/client/_app/immutable/chunks/CnJf5tML.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CpF4Rrcc2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CqCka5yX2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CqtqZrOl.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CrJdywQt.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cs0zC2l2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CsMn5fBs.js +0 -141
- package/studio-dist/client/_app/immutable/chunks/CsvKLHQQ2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Ctaresvj.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Ctetf8vc2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Cv7yW6MG.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CxRIz-Zd.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CxbvtjIH.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/CxfeoXkZ.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CySLscL2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/D0PKQAbM.js +0 -87
- package/studio-dist/client/_app/immutable/chunks/D0WQsLTu.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1LBVx6r2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1NlFXu9.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1QfC4hu2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1yrHAn72.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D2pa4reh.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/D3QsWcIw2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/D4OkQuPl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D6UDnATk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D7w7HllH.js +0 -38
- package/studio-dist/client/_app/immutable/chunks/D93KpglN.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D99fQj2G2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DB5ifLM-.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/DBhP8ifO2.js +0 -15
- package/studio-dist/client/_app/immutable/chunks/DF_4OWhj.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DFpNK1vs2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DGRYMk-W.js +0 -142
- package/studio-dist/client/_app/immutable/chunks/DH3CcQwq.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DHQfJeLU.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/DL89yEDy2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DLRku_0p2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DMZkjPYT2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DNP72foU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DO2GztVm.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DOVNXmCK2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DOqzs8kl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DQnR63hh2.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/DTxtWPkw.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DVDgCC9A2.js +0 -20
- package/studio-dist/client/_app/immutable/chunks/DVVCJYjz.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DWRhYUMj2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DWavBJBI.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/DXDSWRw-.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DXoHaH4a.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DXpCX2Hi.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYP3EJMY.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYQphR_V.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYUlIivP.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYo2ye8X2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYxFu8yV.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DZ66sRb6.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D_XTiylm2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DaRv9jn22.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DaXb9i_E.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dccf4VP2.js +0 -24
- package/studio-dist/client/_app/immutable/chunks/DdODs-Sb.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DdekYWer.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DeHaovsF.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DeRRkRO52.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DeWI5qCn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DfivR-Md.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DgmxpSo7.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DhPLWrun2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DhhrVdfi.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Djr2dbcc2.js +0 -37
- package/studio-dist/client/_app/immutable/chunks/DjuRo5vv.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Djz4EDzO.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DkRfaw-K2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DksB5g4W2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dmqenb5z2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DnbToVyf.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DpGZwlmj.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dq0lE5C32.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dq54XqHT2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DqK84mbb.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DqjFtSJD.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DrKWWDpL.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DsQIgu-4.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DsqdgJHS2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DtNkZUkq.js +0 -17
- package/studio-dist/client/_app/immutable/chunks/DutIls4V2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DvxYFW4C.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dwp-76GQ.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DxSZd548.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DxiUMhk0.js +0 -5
- package/studio-dist/client/_app/immutable/chunks/DxslLswf.js +0 -23
- package/studio-dist/client/_app/immutable/chunks/Dy7EjGgb2.js +0 -9
- package/studio-dist/client/_app/immutable/chunks/DyGQ_VXC.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/DySe3kTV2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DyzE2Uxw.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DzhuJaxE2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/FmMHyrh6.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Gxs0J274.js +0 -5
- package/studio-dist/client/_app/immutable/chunks/HwtzDYxN.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/ITRz_Q7H2.js +0 -15
- package/studio-dist/client/_app/immutable/chunks/KDNP98XY2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/LmVjFhpk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/MiAejGV_.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Ml4JR6Jz2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/NU5S3nNs2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Oh5zPjv3.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/QZkvJ9vi.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Rbn8UpBm.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/SPX3gYwn2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/TX-23QW3.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/UyeQuL132.js +0 -12
- package/studio-dist/client/_app/immutable/chunks/VQszoXcV.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/VtZsEMxD.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/W2IeK61p2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Wadww7ZG.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/WgfA1zWk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/WxIgAS1f.js +0 -21
- package/studio-dist/client/_app/immutable/chunks/XrsBoOj9.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Y3PX4poR.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/YxfwqiF32.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Z7uO1YaO.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/_4ykQk_8.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/_kRcZFVn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/aQNM7eVA2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/bHKz_Fb2.js +0 -45
- package/studio-dist/client/_app/immutable/chunks/bJRyRGSZ.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/dlzF6lnR.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/fjRbpfEr2.js +0 -26
- package/studio-dist/client/_app/immutable/chunks/imLk4if5.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/lgRG0R-32.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/mFhCjxQJ2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/mgnH6qYg.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/n6M_5LoW.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/nLIOiDZp2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/nab7WB3u2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/orUmAKoW2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/p-fLQDfY2.js +0 -63
- package/studio-dist/client/_app/immutable/chunks/s0-WkOGk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/sPuXfbUF.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/t4h0vrqR2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/uE83FKL-.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/uzhXlm0g2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/vTrEsGlD2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/xJgCk3dx2.js +0 -28
- package/studio-dist/client/_app/immutable/chunks/z0Mt579s2.js +0 -13
- package/studio-dist/client/_app/immutable/entry/app.BoQ7cgT2.js +0 -2
- package/studio-dist/client/_app/immutable/entry/start.Cg1v8DU4.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/25.ddZ1_EFk.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/26.6OcmQbLV.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/4.CCjOEwVU.js +0 -1
- package/studio-dist/server/chunks/0-CvsKDxQ6.js +0 -126
- package/studio-dist/server/chunks/1-ck_x2Hf0.js +0 -9
- package/studio-dist/server/chunks/20-DVU22np7.js +0 -142
- package/studio-dist/server/chunks/23-D_tUnnoc.js +0 -181
- package/studio-dist/server/chunks/24-CVlymvLF.js +0 -151
- package/studio-dist/server/chunks/AwsRestJsonProtocol-BZuoNBmL.js +0 -416
- package/studio-dist/server/chunks/UnionSerde-BflIkhKj.js +0 -2653
- package/studio-dist/server/chunks/_dispatch-ncuRztUQ.js +0 -5597
- package/studio-dist/server/chunks/_server.ts-4NyKAneX.js +0 -116
- package/studio-dist/server/chunks/_server.ts-7hGdxdEI.js +0 -136
- package/studio-dist/server/chunks/_server.ts-B6b3b-yA.js +0 -131
- package/studio-dist/server/chunks/_server.ts-BOgGqaZp.js +0 -144
- package/studio-dist/server/chunks/_server.ts-BV1HiKZ0.js +0 -120
- package/studio-dist/server/chunks/_server.ts-BWp3g6Cr.js +0 -110
- package/studio-dist/server/chunks/_server.ts-C5NF-UgC.js +0 -122
- package/studio-dist/server/chunks/_server.ts-CDMurH5m.js +0 -2301
- package/studio-dist/server/chunks/_server.ts-COJHCgbq.js +0 -127
- package/studio-dist/server/chunks/_server.ts-CUl-Utkt.js +0 -148
- package/studio-dist/server/chunks/_server.ts-D0GAFJRb.js +0 -156
- package/studio-dist/server/chunks/_server.ts-DA6p3pmi.js +0 -117
- package/studio-dist/server/chunks/_server.ts-DThYFaZj.js +0 -160
- package/studio-dist/server/chunks/_server.ts-D_3Pm0gr.js +0 -179
- package/studio-dist/server/chunks/_server.ts-DcHxdMsm.js +0 -144
- package/studio-dist/server/chunks/_server.ts-Dlfadh2I.js +0 -144
- package/studio-dist/server/chunks/_server.ts-JallJnps.js +0 -240
- package/studio-dist/server/chunks/_server.ts-NEFTbJpM.js +0 -142
- package/studio-dist/server/chunks/_server.ts-d-2NvRwX.js +0 -122
- package/studio-dist/server/chunks/_server.ts-rUWMLkIw.js +0 -146
- package/studio-dist/server/chunks/abort-events-CDRAJSqb.js +0 -30
- package/studio-dist/server/chunks/adapters-BkMgPNUM.js +0 -359
- package/studio-dist/server/chunks/adapters2-CQ3PzoaK.js +0 -28
- package/studio-dist/server/chunks/api-mode2-3W-I1-XO.js +0 -36
- package/studio-dist/server/chunks/api2-CmNQzb0b.js +0 -96
- package/studio-dist/server/chunks/attention-consolidate-CidG1jfH.js +0 -485
- package/studio-dist/server/chunks/audit3-DMO_fUGp.js +0 -52
- package/studio-dist/server/chunks/auto-extract-B84La1Vs.js +0 -34
- package/studio-dist/server/chunks/brain-consolidator-JGm6mzFf.js +0 -373
- package/studio-dist/server/chunks/brain-doctor-Dc2WqVbs.js +0 -311
- package/studio-dist/server/chunks/brain-embedding-Djw9ekXu.js +0 -42
- package/studio-dist/server/chunks/brain-lifecycle-BOOa876K.js +0 -969
- package/studio-dist/server/chunks/brain-maintenance-U6VvsvmK.js +0 -133
- package/studio-dist/server/chunks/brain-maintenance2-CwVSmfDT.js +0 -43
- package/studio-dist/server/chunks/brain-retrieval2-exR8mdgh.js +0 -751
- package/studio-dist/server/chunks/brain-search-CpSh-SNi.js +0 -48
- package/studio-dist/server/chunks/brain-search2-CwI2cXgg.js +0 -716
- package/studio-dist/server/chunks/brain-similarity-DI4yzm9e.js +0 -113
- package/studio-dist/server/chunks/brain-stdp2-BxSBIlSr.js +0 -960
- package/studio-dist/server/chunks/brain-writer-handlers-Dwu0QCAA.js +0 -188
- package/studio-dist/server/chunks/brain-writer-thread-6n7wI7Gy.js +0 -360
- package/studio-dist/server/chunks/branch-lock-Cq7zzmFK.js +0 -1118
- package/studio-dist/server/chunks/branch-lock2-CmDc4CZW.js +0 -45
- package/studio-dist/server/chunks/cancelled-child-waiver-audit-DkesrN83.js +0 -54
- package/studio-dist/server/chunks/catalog-model-resolver-Bas9qnoP.js +0 -9
- package/studio-dist/server/chunks/catalog-model-resolver2-Cexk2TN0.js +0 -237
- package/studio-dist/server/chunks/catalog-resolver-CLot3XJO.js +0 -260
- package/studio-dist/server/chunks/catalog-resolver2-JmKb91kY.js +0 -33
- package/studio-dist/server/chunks/chunk-DDP5xfzh.js +0 -39
- package/studio-dist/server/chunks/cleo-home-CCfe6kAQ.js +0 -64
- package/studio-dist/server/chunks/concrete-session2-bb_vxJ2N.js +0 -43
- package/studio-dist/server/chunks/config-DHj9CcFs.js +0 -386
- package/studio-dist/server/chunks/config2-F6PPIn7D.js +0 -35
- package/studio-dist/server/chunks/connections-BMGJVYcS.js +0 -98
- package/studio-dist/server/chunks/credential-pool-vF6NdtT9.js +0 -4600
- package/studio-dist/server/chunks/credentials-C7EJFf5O.js +0 -35
- package/studio-dist/server/chunks/credentials-store-CFygIuB2.js +0 -35
- package/studio-dist/server/chunks/cross-db-cleanup-1LWTUKPi.js +0 -147
- package/studio-dist/server/chunks/data-accessor-CWgVndbR.js +0 -72
- package/studio-dist/server/chunks/data-safety-central-DaFxK27G.js +0 -683
- package/studio-dist/server/chunks/decisions-CmVXV2-H.js +0 -574
- package/studio-dist/server/chunks/decisions2-XQsSYdxa.js +0 -48
- package/studio-dist/server/chunks/depends-waiver-audit-CUmlBYHx.js +0 -56
- package/studio-dist/server/chunks/dialectic-evaluator2-BOyyXhdI.js +0 -96
- package/studio-dist/server/chunks/dist-es2-DQy2Mjn_.js +0 -43
- package/studio-dist/server/chunks/dist-es3-CBygU4n5.js +0 -365
- package/studio-dist/server/chunks/dist-es4-CavbNu4B.js +0 -162
- package/studio-dist/server/chunks/dist-es5-Crpm8Wsl.js +0 -465
- package/studio-dist/server/chunks/dist-es6-CgePHzh4.js +0 -99
- package/studio-dist/server/chunks/dist-es7-k6c5GEd7.js +0 -311
- package/studio-dist/server/chunks/dist-es8-Bd9v0_pE.js +0 -91
- package/studio-dist/server/chunks/dist3-23bsJhRw.js +0 -27
- package/studio-dist/server/chunks/dist4-DmC1zSXi.js +0 -35618
- package/studio-dist/server/chunks/dual-scope-db-DKnWu1KM.js +0 -5672
- package/studio-dist/server/chunks/dual-scope-db2-Dht3luRw.js +0 -31
- package/studio-dist/server/chunks/duplicate-bypass-audit-BN5w1H2y.js +0 -36
- package/studio-dist/server/chunks/duplicate-detector-CaVFMKdE.js +0 -692
- package/studio-dist/server/chunks/edge-types-CgBvb0w1.js +0 -28
- package/studio-dist/server/chunks/embedding-local-xEnym8Ho.js +0 -92
- package/studio-dist/server/chunks/event-streams-Bi2p_fVo.js +0 -232
- package/studio-dist/server/chunks/execution-learning-BVCw7Plq.js +0 -278
- package/studio-dist/server/chunks/exodus-BBuuN6aA.js +0 -2594
- package/studio-dist/server/chunks/externalDataInterceptor-C3C4cObe.js +0 -21
- package/studio-dist/server/chunks/extraction-gate-DDNBq7gu.js +0 -48
- package/studio-dist/server/chunks/extraction-gate2-D77EZBQ6.js +0 -375
- package/studio-dist/server/chunks/getSSOTokenFromFile-yZAJxDci.js +0 -21
- package/studio-dist/server/chunks/governor2-CtfV3wfX.js +0 -923
- package/studio-dist/server/chunks/graph-auto-populate-Dmsr9ZJM.js +0 -42
- package/studio-dist/server/chunks/graph-auto-populate2-Cz0qeebM.js +0 -156
- package/studio-dist/server/chunks/graph-memory-bridge-CY8ft_d7.js +0 -43
- package/studio-dist/server/chunks/graph-memory-bridge2-Cd0XZwqc.js +0 -429
- package/studio-dist/server/chunks/handler-helpers-AANBGA_p.js +0 -49
- package/studio-dist/server/chunks/hash-Cm6yMET4.js +0 -14
- package/studio-dist/server/chunks/health-monitor-FepUZN1m.js +0 -106
- package/studio-dist/server/chunks/identity-DRpurt56.js +0 -30
- package/studio-dist/server/chunks/identity2-DeAB5RXE.js +0 -114
- package/studio-dist/server/chunks/index-61916rmV.js +0 -632
- package/studio-dist/server/chunks/index-DAgVDouG.js +0 -268
- package/studio-dist/server/chunks/index-Dtt_h58T.js +0 -2116
- package/studio-dist/server/chunks/indexes-DZ52grq6.js +0 -615
- package/studio-dist/server/chunks/json-Bfixam3g.js +0 -126
- package/studio-dist/server/chunks/learnings-D6Y3YGMU.js +0 -47
- package/studio-dist/server/chunks/learnings2-MwBdR9vb.js +0 -171
- package/studio-dist/server/chunks/lifecycle-ops2-V2CR5-7X.js +0 -121
- package/studio-dist/server/chunks/list-BhObczvn.js +0 -229
- package/studio-dist/server/chunks/living-brain2-j0B_Ir8j.js +0 -285
- package/studio-dist/server/chunks/llm-backend-resolver-D4ANvUPL.js +0 -295
- package/studio-dist/server/chunks/llm-extraction-DVCu4heR.js +0 -408
- package/studio-dist/server/chunks/loadSharedConfigFiles-umvW7kuz.js +0 -73
- package/studio-dist/server/chunks/loadSso-iidd5iKx.js +0 -599
- package/studio-dist/server/chunks/local-model-fit-B0TxifnX.js +0 -53
- package/studio-dist/server/chunks/local-model-fit2-BMqo6GJm.js +0 -2664
- package/studio-dist/server/chunks/lock-CA7d6lj7.js +0 -57
- package/studio-dist/server/chunks/logger-DQIoyZbq.js +0 -34
- package/studio-dist/server/chunks/memory-BUbicBbE.js +0 -618
- package/studio-dist/server/chunks/memory-accessor-i3P-RHSg.js +0 -42
- package/studio-dist/server/chunks/memory-accessor2-B981tHDR.js +0 -467
- package/studio-dist/server/chunks/memory-bridge-BOlEWg9w.js +0 -424
- package/studio-dist/server/chunks/memory-sqlite2-B7dq8doO.js +0 -42
- package/studio-dist/server/chunks/model-runner2-B71xjp4y.js +0 -43
- package/studio-dist/server/chunks/mvi-helpers-BNsJ8ZpQ.js +0 -59
- package/studio-dist/server/chunks/nexus-plasticity-BTfU8cW_.js +0 -269
- package/studio-dist/server/chunks/nexus-risk-audit-p379-TU5.js +0 -54
- package/studio-dist/server/chunks/nexus-schema-zeygY8OD.js +0 -11
- package/studio-dist/server/chunks/nexus-schema2-DP0Qd7CA.js +0 -444
- package/studio-dist/server/chunks/nexus-sqlite-BVNIpwc7.js +0 -36
- package/studio-dist/server/chunks/nexus-sqlite2-BBfY2xnY.js +0 -1103
- package/studio-dist/server/chunks/node-http-handler-CJI8kn7X.js +0 -386
- package/studio-dist/server/chunks/observe-Bo9veHGe.js +0 -47
- package/studio-dist/server/chunks/observe2-wzO0MaMY.js +0 -245
- package/studio-dist/server/chunks/observer-reflector-BwNOuq1d.js +0 -62
- package/studio-dist/server/chunks/observer-reflector2-ggtC1hmk.js +0 -478
- package/studio-dist/server/chunks/on-open-Wpcw7DV4.js +0 -740
- package/studio-dist/server/chunks/open-cleo-db--8sYNaYY.js +0 -70
- package/studio-dist/server/chunks/parseKnownFiles-Dg0pMFcT.js +0 -18
- package/studio-dist/server/chunks/parseUrl-qgGfl-Vh.js +0 -120
- package/studio-dist/server/chunks/paths-CV7S5-Zm.js +0 -30012
- package/studio-dist/server/chunks/patterns-lh5kn13I.js +0 -48
- package/studio-dist/server/chunks/patterns2-CzIcT-ai.js +0 -177
- package/studio-dist/server/chunks/pipeline-stage-IB_pOft-.js +0 -63
- package/studio-dist/server/chunks/prediction-D1lSGJ4c.js +0 -217
- package/studio-dist/server/chunks/premature-close-audit-VG09uAco.js +0 -53
- package/studio-dist/server/chunks/project-context-BjiqfEBi.js +0 -166
- package/studio-dist/server/chunks/provider-registry2-Cu7rAF0R.js +0 -35
- package/studio-dist/server/chunks/quality-feedback-CuCGEI6S.js +0 -371
- package/studio-dist/server/chunks/quality-scoring-CCPuRQmJ.js +0 -160
- package/studio-dist/server/chunks/query-ops-DCrjbZb9.js +0 -78
- package/studio-dist/server/chunks/query-promise-BkPmGPJy.js +0 -1257
- package/studio-dist/server/chunks/readFile-CxwXhymG.js +0 -31
- package/studio-dist/server/chunks/registry-CL2gN1zd.js +0 -27
- package/studio-dist/server/chunks/registry2-DoPYJnUW.js +0 -233
- package/studio-dist/server/chunks/registry3-BajEb-ll.js +0 -42
- package/studio-dist/server/chunks/registry4-DCqffZkT.js +0 -142
- package/studio-dist/server/chunks/retry-B3oEKYpp.js +0 -105
- package/studio-dist/server/chunks/role-executor-CC8BU54L.js +0 -25379
- package/studio-dist/server/chunks/role-resolver-D9QaDT0e.js +0 -6544
- package/studio-dist/server/chunks/role-resolver2-nkhzS1oy.js +0 -37
- package/studio-dist/server/chunks/rollup-CiefjN_Y.js +0 -194
- package/studio-dist/server/chunks/safety-data-accessor-CniDmGJO.js +0 -276
- package/studio-dist/server/chunks/service-connections-accessor-yBCdcgU-.js +0 -282
- package/studio-dist/server/chunks/session-factory-vbengc42.js +0 -96
- package/studio-dist/server/chunks/session-grade-BF4ZZtN_.js +0 -244
- package/studio-dist/server/chunks/session-journal-Bvey70Ur.js +0 -235
- package/studio-dist/server/chunks/session-narrative-BirZINSU.js +0 -304
- package/studio-dist/server/chunks/session-store--N_xHxUH.js +0 -557
- package/studio-dist/server/chunks/session-store2-DAM-eVTH.js +0 -43
- package/studio-dist/server/chunks/sessions-33DD4hkt.js +0 -2273
- package/studio-dist/server/chunks/sessions2-BHswKRDP.js +0 -50
- package/studio-dist/server/chunks/sigil-B-RznFXz.js +0 -33
- package/studio-dist/server/chunks/sigil2-jRMG5DuR.js +0 -47
- package/studio-dist/server/chunks/signin-BAsW3mM8.js +0 -644
- package/studio-dist/server/chunks/sleep-consolidation-BnSwXrvq.js +0 -823
- package/studio-dist/server/chunks/specialists-B_ZbpQlK.js +0 -441
- package/studio-dist/server/chunks/sqlite-Bm5LzbPs.js +0 -5977
- package/studio-dist/server/chunks/sqlite-backup-CFG1-b2e.js +0 -42
- package/studio-dist/server/chunks/sqlite-data-accessor-DD_RFX6r.js +0 -987
- package/studio-dist/server/chunks/sqlite-data-accessor2-CRmgNBnq.js +0 -44
- package/studio-dist/server/chunks/sqlite-native-BwlIqtbs.js +0 -42
- package/studio-dist/server/chunks/sqlite2-CUPut2fh.js +0 -42
- package/studio-dist/server/chunks/src2-DK8DKufK.js +0 -290
- package/studio-dist/server/chunks/src3-BJjf7XRG.js +0 -798
- package/studio-dist/server/chunks/src4-DNleK_t_.js +0 -28
- package/studio-dist/server/chunks/sso-oidc-eUvwseuL.js +0 -861
- package/studio-dist/server/chunks/storage-B9UA3BHR.js +0 -198
- package/studio-dist/server/chunks/sts-g7LDMLEd.js +0 -4655
- package/studio-dist/server/chunks/surprisal-CwTfWQi8.js +0 -224
- package/studio-dist/server/chunks/surprisal-tree-7dfHsuw1.js +0 -230
- package/studio-dist/server/chunks/system-resolver2-Bzhue_zQ.js +0 -53
- package/studio-dist/server/chunks/tasks-SHX7UPGY.js +0 -19694
- package/studio-dist/server/chunks/tasks-schema2-CTMoQKQy.js +0 -42
- package/studio-dist/server/chunks/temporal-supersession-DP4GPG_B.js +0 -298
- package/studio-dist/server/chunks/token-cAhAD9f9.js +0 -139
- package/studio-dist/server/chunks/token-util-D6drEz8_.js +0 -353
- package/studio-dist/server/chunks/token-util2-8UPSGvbb.js +0 -97
- package/studio-dist/server/chunks/transcript-scanner-kJWhWmlg.js +0 -53
- package/studio-dist/server/chunks/transformers.node-_xbxmK5p.js +0 -38475
- package/studio-dist/server/chunks/typed-query-l1D_QElt.js +0 -18
- package/studio-dist/server/chunks/unique-constraint-BZrrwgwc.js +0 -88
- package/studio-dist/server/chunks/update-B2YVBZG0.js +0 -1594
- package/studio-dist/server/chunks/user-profile-B61ZhVmC.js +0 -89
- package/studio-dist/server/chunks/utils-BPSZyajG.js +0 -1176
- package/studio-dist/server/chunks/validation-rules-CE27rtoF.js +0 -44
- package/studio-dist/server/chunks/zod-DsAeKNLm.js +0 -141
- /package/studio-dist/client/_app/immutable/chunks/{CQCxd1p9.js → B8WnZMYa.js} +0 -0
- /package/studio-dist/client/_app/immutable/chunks/{D13Quv9e2.js → B_0_YCYG.js} +0 -0
- /package/studio-dist/client/_app/immutable/chunks/{djL6V-tr.js → CqgtdAx_.js} +0 -0
- /package/studio-dist/client/_app/immutable/chunks/{_FU7h_8p2.js → KrUPZzXZ.js} +0 -0
|
@@ -1,923 +0,0 @@
|
|
|
1
|
-
import { g as getCleoHome, h as getCleoHome$1, L as LeaseIpcRequestEnvelopeSchema, G as LEASE_IPC_PROTOCOL_VERSION, H as LeaseIpcResponseEnvelopeSchema, b as getLogger, I as DEFAULT_RESOURCE_RETRY_AFTER_MS } from './paths-CV7S5-Zm.js';
|
|
2
|
-
import { EventEmitter } from 'node:events';
|
|
3
|
-
import { readFile, stat } from 'node:fs/promises';
|
|
4
|
-
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { availableParallelism, totalmem } from 'node:os';
|
|
7
|
-
import { l as lockfile } from './index-Dtt_h58T.js';
|
|
8
|
-
import { connect } from 'node:net';
|
|
9
|
-
import 'node:diagnostics_channel';
|
|
10
|
-
import 'fs';
|
|
11
|
-
import 'events';
|
|
12
|
-
import 'util';
|
|
13
|
-
import 'path';
|
|
14
|
-
import 'assert';
|
|
15
|
-
import 'worker_threads';
|
|
16
|
-
import 'module';
|
|
17
|
-
import 'node:url';
|
|
18
|
-
import 'url';
|
|
19
|
-
import 'buffer';
|
|
20
|
-
import 'node:module';
|
|
21
|
-
import 'node:child_process';
|
|
22
|
-
import 'node:crypto';
|
|
23
|
-
import 'node:process';
|
|
24
|
-
import 'node:async_hooks';
|
|
25
|
-
import 'constants';
|
|
26
|
-
import 'stream';
|
|
27
|
-
|
|
28
|
-
//#region ../core/dist/resources/linux-backend.js
|
|
29
|
-
/**
|
|
30
|
-
* Linux ResourceMonitor backend.
|
|
31
|
-
*
|
|
32
|
-
* Reads:
|
|
33
|
-
* - `/proc/pressure/memory` — global PSI (some + full)
|
|
34
|
-
* - `<cgroupSlicePath>/memory.pressure` — cleo.slice scoped PSI
|
|
35
|
-
* - `/proc/meminfo` — MemAvailable
|
|
36
|
-
* - `<walPath>` size stat — WAL growth signal (DHQ-050 starvation class)
|
|
37
|
-
* - `/proc/<pid>/smaps_rollup` — per-child RSS (SEPARATE low-frequency path)
|
|
38
|
-
*
|
|
39
|
-
* ## Read-count discipline (Amendment 1)
|
|
40
|
-
*
|
|
41
|
-
* `sample()` calls the injected reader at most:
|
|
42
|
-
* - 1× for `/proc/pressure/memory`
|
|
43
|
-
* - 1× for the slice `memory.pressure` (if configured)
|
|
44
|
-
* - 1× for `/proc/meminfo`
|
|
45
|
-
* - N× stat calls for N configured WAL paths
|
|
46
|
-
*
|
|
47
|
-
* smaps_rollup reads are on a SEPARATE `sweepChildRss()` method and are
|
|
48
|
-
* structurally impossible to reach from the `sample()` hot path.
|
|
49
|
-
*
|
|
50
|
-
* ## oomd threshold facts (Amendment 4)
|
|
51
|
-
*
|
|
52
|
-
* systemd-oomd on Fedora defaults to 80%/20s on user@1000.service.
|
|
53
|
-
* Our hold/backoff thresholds (some avg10 >10% / full avg10 >5%) sit far
|
|
54
|
-
* below that line, ensuring cleo always throttles before oomd kills.
|
|
55
|
-
*
|
|
56
|
-
* @module resources/linux-backend
|
|
57
|
-
* @task T11994
|
|
58
|
-
* @epic T11992
|
|
59
|
-
*/
|
|
60
|
-
/**
|
|
61
|
-
* Parse a single PSI line.
|
|
62
|
-
*
|
|
63
|
-
* Format: `some avg10=0.42 avg60=0.31 avg300=0.20 total=1234567`
|
|
64
|
-
*
|
|
65
|
-
* Returns `null` when the line does not match the expected format.
|
|
66
|
-
*/
|
|
67
|
-
function parsePressureLine(line) {
|
|
68
|
-
const avg10Match = /avg10=([\d.]+)/.exec(line);
|
|
69
|
-
const avg60Match = /avg60=([\d.]+)/.exec(line);
|
|
70
|
-
const avg300Match = /avg300=([\d.]+)/.exec(line);
|
|
71
|
-
const totalMatch = /total=(\d+)/.exec(line);
|
|
72
|
-
if (!avg10Match?.[1] || !avg60Match?.[1] || !avg300Match?.[1] || !totalMatch?.[1]) return null;
|
|
73
|
-
return {
|
|
74
|
-
avg10: parseFloat(avg10Match[1]),
|
|
75
|
-
avg60: parseFloat(avg60Match[1]),
|
|
76
|
-
avg300: parseFloat(avg300Match[1]),
|
|
77
|
-
totalUs: parseInt(totalMatch[1], 10)
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Parse a PSI file (two lines: `some ...` and `full ...`).
|
|
82
|
-
*
|
|
83
|
-
* Returns `null` when the content is unreadable / unparseable — callers
|
|
84
|
-
* treat this as "pressure interface absent" (degraded mode).
|
|
85
|
-
*/
|
|
86
|
-
function parsePsiFile(content) {
|
|
87
|
-
const lines = content.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
88
|
-
let some = null;
|
|
89
|
-
let full = null;
|
|
90
|
-
for (const line of lines) if (line.startsWith("some ")) some = parsePressureLine(line);
|
|
91
|
-
else if (line.startsWith("full ")) full = parsePressureLine(line);
|
|
92
|
-
if (!some) return null;
|
|
93
|
-
return {
|
|
94
|
-
some,
|
|
95
|
-
full
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Parse `MemAvailable` from `/proc/meminfo`.
|
|
100
|
-
*
|
|
101
|
-
* Format: `MemAvailable: 42233788 kB`
|
|
102
|
-
*
|
|
103
|
-
* Returns `null` when the field is absent (non-Linux / old kernel).
|
|
104
|
-
* Reuses the same parsing pattern as `packages/core/src/llm/local-model-fit.ts:269`.
|
|
105
|
-
*/
|
|
106
|
-
function parseMemAvailable(content) {
|
|
107
|
-
for (const line of content.split("\n")) if (line.startsWith("MemAvailable:")) {
|
|
108
|
-
const match = /MemAvailable:\s+(\d+)\s+kB/.exec(line);
|
|
109
|
-
if (match?.[1]) return parseInt(match[1], 10) * 1024;
|
|
110
|
-
}
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Parse a `/proc/<pid>/smaps_rollup` file for RSS and PSS.
|
|
115
|
-
*
|
|
116
|
-
* Relevant fields:
|
|
117
|
-
* `Rss: 12345 kB`
|
|
118
|
-
* `Pss: 9876 kB`
|
|
119
|
-
*
|
|
120
|
-
* Returns `null` when either field is absent.
|
|
121
|
-
*/
|
|
122
|
-
function parseSmapsRollup(content) {
|
|
123
|
-
let rssKb = null;
|
|
124
|
-
let pssKb = null;
|
|
125
|
-
for (const line of content.split("\n")) if (line.startsWith("Rss:")) {
|
|
126
|
-
const m = /Rss:\s+(\d+)\s+kB/.exec(line);
|
|
127
|
-
if (m?.[1]) rssKb = parseInt(m[1], 10);
|
|
128
|
-
} else if (line.startsWith("Pss:")) {
|
|
129
|
-
const m = /Pss:\s+(\d+)\s+kB/.exec(line);
|
|
130
|
-
if (m?.[1]) pssKb = parseInt(m[1], 10);
|
|
131
|
-
}
|
|
132
|
-
if (rssKb === null || pssKb === null) return null;
|
|
133
|
-
return {
|
|
134
|
-
rssBytes: rssKb * 1024,
|
|
135
|
-
pssBytes: pssKb * 1024
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
var defaultReadFile = (path, encoding) => readFile(path, encoding);
|
|
139
|
-
var defaultStat = async (path) => {
|
|
140
|
-
try {
|
|
141
|
-
return { size: (await stat(path)).size };
|
|
142
|
-
} catch {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
/**
|
|
147
|
-
* Linux implementation of {@link ResourceBackend}.
|
|
148
|
-
*
|
|
149
|
-
* Uses injected `readFileFn` / `statFileFn` so unit tests can:
|
|
150
|
-
* 1. Fake file contents (threshold-crossing, degraded mode)
|
|
151
|
-
* 2. Count reads to assert the bounded-read contract (Amendment 1)
|
|
152
|
-
*/
|
|
153
|
-
var LinuxResourceBackend = class {
|
|
154
|
-
globalPressurePath;
|
|
155
|
-
cgroupSlicePressurePath;
|
|
156
|
-
walPaths;
|
|
157
|
-
readFileFn;
|
|
158
|
-
statFileFn;
|
|
159
|
-
constructor(opts = {}) {
|
|
160
|
-
this.globalPressurePath = opts.globalPressurePath ?? "/proc/pressure/memory";
|
|
161
|
-
this.cgroupSlicePressurePath = opts.cgroupSlicePressurePath ?? null;
|
|
162
|
-
this.walPaths = opts.walPaths ?? [];
|
|
163
|
-
this.readFileFn = opts.readFileFn ?? defaultReadFile;
|
|
164
|
-
this.statFileFn = opts.statFileFn ?? defaultStat;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Take a bounded point-in-time resource sample.
|
|
168
|
-
*
|
|
169
|
-
* Read-count (bounded by Amendment 1):
|
|
170
|
-
* - 1 read: `/proc/pressure/memory`
|
|
171
|
-
* - 0–1 reads: slice `memory.pressure` (if configured)
|
|
172
|
-
* - 1 read: `/proc/meminfo`
|
|
173
|
-
* - N stat calls: one per WAL path in `walPaths`
|
|
174
|
-
*
|
|
175
|
-
* Never spawns a child process.
|
|
176
|
-
*/
|
|
177
|
-
async sample() {
|
|
178
|
-
const sampledAtMs = Date.now();
|
|
179
|
-
const globalPressure = await this._readPsi(this.globalPressurePath);
|
|
180
|
-
const pressureAvailable = globalPressure !== null;
|
|
181
|
-
let slicePressure = null;
|
|
182
|
-
if (this.cgroupSlicePressurePath) slicePressure = await this._readPsi(this.cgroupSlicePressurePath);
|
|
183
|
-
const memAvailableBytes = await this._readMemAvailable();
|
|
184
|
-
const walObservations = await this._readWalObservations();
|
|
185
|
-
return {
|
|
186
|
-
sampledAtMs,
|
|
187
|
-
pressureAvailable,
|
|
188
|
-
memAvailableBytes,
|
|
189
|
-
globalPressure,
|
|
190
|
-
slicePressure,
|
|
191
|
-
walObservations
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Sweep per-child RSS via `/proc/<pid>/smaps_rollup`.
|
|
196
|
-
*
|
|
197
|
-
* **STRUCTURALLY SEPARATED from sample()** — smaps_rollup reads are
|
|
198
|
-
* ms-scale per multi-GB process and must never appear in the hot path.
|
|
199
|
-
* Call on a separate low-frequency cadence (e.g. every 60s or on
|
|
200
|
-
* backoff→hold state transition).
|
|
201
|
-
*
|
|
202
|
-
* @param pids - PIDs to sweep. Dead/unknown PIDs are silently skipped.
|
|
203
|
-
*/
|
|
204
|
-
async sweepChildRss(pids) {
|
|
205
|
-
const sampledAtMs = Date.now();
|
|
206
|
-
const entries = [];
|
|
207
|
-
for (const pid of pids) try {
|
|
208
|
-
const parsed = parseSmapsRollup(await this.readFileFn(`/proc/${pid}/smaps_rollup`, "utf-8"));
|
|
209
|
-
if (parsed) entries.push({
|
|
210
|
-
pid,
|
|
211
|
-
...parsed
|
|
212
|
-
});
|
|
213
|
-
} catch {}
|
|
214
|
-
return {
|
|
215
|
-
sampledAtMs,
|
|
216
|
-
entries
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
async _readPsi(path) {
|
|
220
|
-
try {
|
|
221
|
-
return parsePsiFile(await this.readFileFn(path, "utf-8"));
|
|
222
|
-
} catch {
|
|
223
|
-
return null;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
async _readMemAvailable() {
|
|
227
|
-
try {
|
|
228
|
-
return parseMemAvailable(await this.readFileFn("/proc/meminfo", "utf-8"));
|
|
229
|
-
} catch {
|
|
230
|
-
return null;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
async _readWalObservations() {
|
|
234
|
-
const results = [];
|
|
235
|
-
for (const walPath of this.walPaths) {
|
|
236
|
-
const info = await this.statFileFn(walPath);
|
|
237
|
-
results.push({
|
|
238
|
-
walPath,
|
|
239
|
-
sizeBytes: info?.size ?? null
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
return results;
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
//#endregion
|
|
246
|
-
//#region ../core/dist/resources/monitor.js
|
|
247
|
-
/**
|
|
248
|
-
* ResourceMonitor — PSI + MemAvailable sensing, daemon-off capable.
|
|
249
|
-
*
|
|
250
|
-
* Two operational modes:
|
|
251
|
-
*
|
|
252
|
-
* 1. **Point-in-time sample** (`ResourceMonitor.sample()`): used inside the
|
|
253
|
-
* governor acquire path when the daemon is off. Single call, bounded reads.
|
|
254
|
-
*
|
|
255
|
-
* 2. **Continuous loop** (`ResourceMonitor.startContinuous()`): used by the
|
|
256
|
-
* daemon/supervisor. Polls at `pollIntervalMs` and emits `ok` → `hold` →
|
|
257
|
-
* `backoff` state transitions with hysteresis.
|
|
258
|
-
*
|
|
259
|
-
* ## State machine
|
|
260
|
-
*
|
|
261
|
-
* ok ──── pressure > holdThreshold ──────→ hold
|
|
262
|
-
* hold ─── pressure < holdThreshold - hyst ─→ ok
|
|
263
|
-
* hold ─── pressure > backoffThreshold ─────→ backoff
|
|
264
|
-
* backoff ─ pressure < holdThreshold - hyst ─→ ok
|
|
265
|
-
*
|
|
266
|
-
* Default thresholds (far below systemd-oomd's Fedora 80%/20s kill line):
|
|
267
|
-
* - hold: some avg10 > 10% OR full avg10 > 5%
|
|
268
|
-
* - backoff: some avg10 > 20% OR full avg10 > 10%
|
|
269
|
-
* - hysteresis: 3 percentage points (prevents thrash on threshold edge)
|
|
270
|
-
*
|
|
271
|
-
* ## Degraded mode
|
|
272
|
-
*
|
|
273
|
-
* When the PSI interface is absent (non-Linux, locked-down container,
|
|
274
|
-
* unprivileged environment), the monitor falls back to availability-only
|
|
275
|
-
* sampling: `pressureAvailable = false`, `state = 'ok'` unless
|
|
276
|
-
* `memAvailableBytes` is below `headroomMb`.
|
|
277
|
-
*
|
|
278
|
-
* ## oomd facts (Amendment 4)
|
|
279
|
-
*
|
|
280
|
-
* systemd-oomd on Fedora defaults to 80%/20s on user@1000.service (NOT
|
|
281
|
-
* the 50%/20s figure cited in older research). Our hold/backoff thresholds
|
|
282
|
-
* sit far below that line — cleo always throttles before oomd kills.
|
|
283
|
-
*
|
|
284
|
-
* ## WAL growth signal (Amendment 3)
|
|
285
|
-
*
|
|
286
|
-
* The monitor accepts an optional watch on SQLite `-wal` sidecar file sizes.
|
|
287
|
-
* A size above `walWarnThresholdBytes` is surfaced in the sample and can
|
|
288
|
-
* drive governor decisions independently of memory pressure.
|
|
289
|
-
*
|
|
290
|
-
* @module resources/monitor
|
|
291
|
-
* @task T11994
|
|
292
|
-
* @epic T11992
|
|
293
|
-
*/
|
|
294
|
-
var DEFAULTS = {
|
|
295
|
-
holdSomeAvg10: 10,
|
|
296
|
-
backoffSomeAvg10: 20,
|
|
297
|
-
holdFullAvg10: 5,
|
|
298
|
-
backoffFullAvg10: 10,
|
|
299
|
-
hysteresisPoints: 3,
|
|
300
|
-
headroomBytes: 256 * 1024 * 1024,
|
|
301
|
-
walWarnThresholdBytes: 256 * 1024 * 1024,
|
|
302
|
-
pollIntervalMs: 1500
|
|
303
|
-
};
|
|
304
|
-
function resolveThresholds(cfg) {
|
|
305
|
-
return {
|
|
306
|
-
holdSomeAvg10: cfg.psi?.holdSomeAvg10 ?? DEFAULTS.holdSomeAvg10,
|
|
307
|
-
backoffSomeAvg10: cfg.psi?.backoffSomeAvg10 ?? DEFAULTS.backoffSomeAvg10,
|
|
308
|
-
holdFullAvg10: cfg.psi?.holdFullAvg10 ?? DEFAULTS.holdFullAvg10,
|
|
309
|
-
backoffFullAvg10: cfg.psi?.backoffFullAvg10 ?? DEFAULTS.backoffFullAvg10,
|
|
310
|
-
hysteresisPoints: cfg.hysteresisPoints ?? DEFAULTS.hysteresisPoints,
|
|
311
|
-
headroomBytes: cfg.headroomBytes ?? DEFAULTS.headroomBytes,
|
|
312
|
-
walWarnThresholdBytes: cfg.walWarnThresholdBytes ?? DEFAULTS.walWarnThresholdBytes,
|
|
313
|
-
pollIntervalMs: cfg.pollIntervalMs ?? DEFAULTS.pollIntervalMs
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Evaluate the pressure state given a sample and resolved thresholds.
|
|
318
|
-
*
|
|
319
|
-
* In degraded mode (PSI absent), the state is `hold` only when free memory
|
|
320
|
-
* falls below `headroomBytes`.
|
|
321
|
-
*
|
|
322
|
-
* @internal
|
|
323
|
-
*/
|
|
324
|
-
function evaluateState(sample, thresholds, currentState) {
|
|
325
|
-
if (!sample.pressureAvailable) {
|
|
326
|
-
if (sample.memAvailableBytes !== null && sample.memAvailableBytes < thresholds.headroomBytes) return {
|
|
327
|
-
state: "hold",
|
|
328
|
-
reason: "degraded: memAvailable below headroom"
|
|
329
|
-
};
|
|
330
|
-
return {
|
|
331
|
-
state: "ok",
|
|
332
|
-
reason: "degraded: PSI unavailable, memAvailable sufficient"
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
const somePressure = sample.globalPressure?.some ?? sample.slicePressure?.some;
|
|
336
|
-
const fullPressure = sample.globalPressure?.full ?? sample.slicePressure?.full;
|
|
337
|
-
const someAvg10 = somePressure?.avg10 ?? 0;
|
|
338
|
-
const fullAvg10 = fullPressure?.avg10 ?? 0;
|
|
339
|
-
if (someAvg10 > thresholds.backoffSomeAvg10 || fullAvg10 > thresholds.backoffFullAvg10) return {
|
|
340
|
-
state: "backoff",
|
|
341
|
-
reason: `some avg10=${someAvg10.toFixed(2)} full avg10=${fullAvg10.toFixed(2)} — above backoff threshold`
|
|
342
|
-
};
|
|
343
|
-
if (someAvg10 > thresholds.holdSomeAvg10 || fullAvg10 > thresholds.holdFullAvg10) return {
|
|
344
|
-
state: "hold",
|
|
345
|
-
reason: `some avg10=${someAvg10.toFixed(2)} full avg10=${fullAvg10.toFixed(2)} — above hold threshold`
|
|
346
|
-
};
|
|
347
|
-
if (currentState !== "ok") {
|
|
348
|
-
const hysteresisFloor = thresholds.holdSomeAvg10 - thresholds.hysteresisPoints;
|
|
349
|
-
const fullHysteresisFloor = thresholds.holdFullAvg10 - thresholds.hysteresisPoints;
|
|
350
|
-
if (someAvg10 > hysteresisFloor || fullAvg10 > fullHysteresisFloor) return {
|
|
351
|
-
state: currentState === "backoff" ? "hold" : currentState,
|
|
352
|
-
reason: `some avg10=${someAvg10.toFixed(2)} full avg10=${fullAvg10.toFixed(2)} — hysteresis hold (floor: some ${hysteresisFloor}, full ${fullHysteresisFloor})`
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
return {
|
|
356
|
-
state: "ok",
|
|
357
|
-
reason: `some avg10=${someAvg10.toFixed(2)} full avg10=${fullAvg10.toFixed(2)} — below thresholds`
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* ResourceMonitor — PSI + MemAvailable sensing, daemon-off capable.
|
|
362
|
-
*
|
|
363
|
-
* @example Point-in-time (daemon-off governor acquire):
|
|
364
|
-
* ```ts
|
|
365
|
-
* const monitor = new ResourceMonitor();
|
|
366
|
-
* const sample = await monitor.sample();
|
|
367
|
-
* if (sample.memAvailableBytes !== null && sample.memAvailableBytes < 256 * 1024 * 1024) {
|
|
368
|
-
* throw new Error('insufficient memory');
|
|
369
|
-
* }
|
|
370
|
-
* ```
|
|
371
|
-
*
|
|
372
|
-
* @example Continuous mode (daemon supervisor):
|
|
373
|
-
* ```ts
|
|
374
|
-
* const monitor = new ResourceMonitor({ pollIntervalMs: 1500 });
|
|
375
|
-
* monitor.on('transition', ({ from, to, reason }) => {
|
|
376
|
-
* logger.warn(`pressure: ${from} → ${to} (${reason})`);
|
|
377
|
-
* });
|
|
378
|
-
* const stop = monitor.startContinuous();
|
|
379
|
-
* // later:
|
|
380
|
-
* stop();
|
|
381
|
-
* ```
|
|
382
|
-
*/
|
|
383
|
-
var ResourceMonitor = class extends EventEmitter {
|
|
384
|
-
thresholds;
|
|
385
|
-
backend;
|
|
386
|
-
_state = "ok";
|
|
387
|
-
_timer = null;
|
|
388
|
-
_running = false;
|
|
389
|
-
constructor(cfg = {}) {
|
|
390
|
-
super();
|
|
391
|
-
this.thresholds = resolveThresholds(cfg);
|
|
392
|
-
this.backend = cfg.backend ?? new LinuxResourceBackend();
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Current pressure state (only meaningful after at least one sample).
|
|
396
|
-
*/
|
|
397
|
-
get state() {
|
|
398
|
-
return this._state;
|
|
399
|
-
}
|
|
400
|
-
/**
|
|
401
|
-
* `true` while the continuous loop is running.
|
|
402
|
-
*/
|
|
403
|
-
get running() {
|
|
404
|
-
return this._running;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Take a single point-in-time resource sample.
|
|
408
|
-
*
|
|
409
|
-
* Safe to call with the daemon off (no child processes, bounded reads).
|
|
410
|
-
* Does NOT update `this.state` — use {@link startContinuous} for that.
|
|
411
|
-
*/
|
|
412
|
-
async sample() {
|
|
413
|
-
return this.backend.sample();
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Start the continuous polling loop.
|
|
417
|
-
*
|
|
418
|
-
* Returns a `stop()` function. Calling `stop()` is idempotent.
|
|
419
|
-
*
|
|
420
|
-
* Emits:
|
|
421
|
-
* - `'sample'` on every poll (even if state did not change)
|
|
422
|
-
* - `'transition'` when `PressureState` changes
|
|
423
|
-
* - `'error'` if the backend throws (loop continues regardless)
|
|
424
|
-
*/
|
|
425
|
-
startContinuous() {
|
|
426
|
-
if (this._running) return () => this._stopLoop();
|
|
427
|
-
this._running = true;
|
|
428
|
-
this._scheduleNext();
|
|
429
|
-
return () => this._stopLoop();
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Stop the continuous polling loop. Idempotent.
|
|
433
|
-
*/
|
|
434
|
-
stop() {
|
|
435
|
-
this._stopLoop();
|
|
436
|
-
}
|
|
437
|
-
_scheduleNext() {
|
|
438
|
-
this._timer = setTimeout(() => {
|
|
439
|
-
this._tick();
|
|
440
|
-
}, this.thresholds.pollIntervalMs);
|
|
441
|
-
if (typeof this._timer.unref === "function") this._timer.unref();
|
|
442
|
-
}
|
|
443
|
-
async _tick() {
|
|
444
|
-
if (!this._running) return;
|
|
445
|
-
try {
|
|
446
|
-
const sample = await this.backend.sample();
|
|
447
|
-
this.emit("sample", sample);
|
|
448
|
-
const { state: newState, reason } = evaluateState(sample, this.thresholds, this._state);
|
|
449
|
-
if (newState !== this._state) {
|
|
450
|
-
const transition = {
|
|
451
|
-
from: this._state,
|
|
452
|
-
to: newState,
|
|
453
|
-
sample,
|
|
454
|
-
reason
|
|
455
|
-
};
|
|
456
|
-
this._state = newState;
|
|
457
|
-
this.emit("transition", transition);
|
|
458
|
-
}
|
|
459
|
-
} catch (err) {
|
|
460
|
-
this.emit("error", err instanceof Error ? err : new Error(String(err)));
|
|
461
|
-
}
|
|
462
|
-
if (this._running) this._scheduleNext();
|
|
463
|
-
}
|
|
464
|
-
_stopLoop() {
|
|
465
|
-
this._running = false;
|
|
466
|
-
if (this._timer !== null) {
|
|
467
|
-
clearTimeout(this._timer);
|
|
468
|
-
this._timer = null;
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
};
|
|
472
|
-
|
|
473
|
-
//#region ../core/dist/resources/supervisor-admit.js
|
|
474
|
-
/**
|
|
475
|
-
* Supervisor-mode resource admission client (T12001 · Epic T11992).
|
|
476
|
-
*
|
|
477
|
-
* The `supervisor`-mode counterpart of the {@link ResourceGovernor}'s local slot
|
|
478
|
-
* engine. Where local mode arbitrates heavy-op concurrency through cross-process
|
|
479
|
-
* lockfiles, supervisor mode routes the `resource_admit` / `resource_release`
|
|
480
|
-
* lease-ipc verbs to the Rust `cleo-supervisor` so a single in-memory counter is
|
|
481
|
-
* the machine-wide source of truth.
|
|
482
|
-
*
|
|
483
|
-
* A dead/absent supervisor must NEVER deadlock work: every send degrades to
|
|
484
|
-
* `{ unavailable }` on any transport error, and the governor falls back to the
|
|
485
|
-
* local slot engine. Mirrors the `llm-queue-admit.ts` transport (core cannot
|
|
486
|
-
* import `@cleocode/runtime` — a cycle — so it speaks the NDJSON codec directly
|
|
487
|
-
* through the shared `@cleocode/contracts` lease-ipc Zod schemas).
|
|
488
|
-
*
|
|
489
|
-
* @task T12001
|
|
490
|
-
* @epic T11992
|
|
491
|
-
*/
|
|
492
|
-
/** The supervisor IPC socket filename — MUST equal `SOCKET_NAME` in `crates/cleo-supervisor/src/paths.rs`. */
|
|
493
|
-
var SUPERVISOR_SOCKET_NAME = "cleo-supervisor.sock";
|
|
494
|
-
/** Connect timeout (ms). A slow/absent socket degrades fast — never a deadlock. */
|
|
495
|
-
var CONNECT_TIMEOUT_MS = 250;
|
|
496
|
-
/** Per-request read timeout for a result frame (ms). */
|
|
497
|
-
var REQUEST_TIMEOUT_MS = 2e3;
|
|
498
|
-
/**
|
|
499
|
-
* Resolve the supervisor socket path: `$CLEO_SUPERVISOR_SOCKET` overrides,
|
|
500
|
-
* otherwise `<cleoHome>/cleo-supervisor.sock`.
|
|
501
|
-
*/
|
|
502
|
-
function resolveSupervisorSocketPath() {
|
|
503
|
-
return process.env.CLEO_SUPERVISOR_SOCKET ?? join(getCleoHome$1(), SUPERVISOR_SOCKET_NAME);
|
|
504
|
-
}
|
|
505
|
-
/**
|
|
506
|
-
* Admit (or defer) a heavy op of `cls` for `holderId` against `budget` through
|
|
507
|
-
* the supervisor's central arbiter. Resolves the `resource_admit_result` reply,
|
|
508
|
-
* or `{ unavailable }` when the supervisor cannot arbitrate (degrade to local).
|
|
509
|
-
*/
|
|
510
|
-
async function sendResourceAdmit(socketPath, cls, holderId, budget) {
|
|
511
|
-
const result = await sendLeaseRequest(socketPath, {
|
|
512
|
-
kind: "resource_admit",
|
|
513
|
-
class: cls,
|
|
514
|
-
holder_id: holderId,
|
|
515
|
-
budget
|
|
516
|
-
}, "resource_admit_result");
|
|
517
|
-
if ("unavailable" in result) return result;
|
|
518
|
-
if (result.kind === "resource_admit_result") return result;
|
|
519
|
-
return {
|
|
520
|
-
unavailable: true,
|
|
521
|
-
reason: `unexpected response kind: ${result.kind}`
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
/**
|
|
525
|
-
* Release a previously-admitted slot of `cls` for `holderId`. Resolves the
|
|
526
|
-
* `resource_release_result` reply, or `{ unavailable }` on transport failure
|
|
527
|
-
* (the slot self-heals via the arbiter's process-death reclaim / stale recovery).
|
|
528
|
-
*/
|
|
529
|
-
async function sendResourceRelease(socketPath, cls, holderId) {
|
|
530
|
-
const result = await sendLeaseRequest(socketPath, {
|
|
531
|
-
kind: "resource_release",
|
|
532
|
-
class: cls,
|
|
533
|
-
holder_id: holderId
|
|
534
|
-
}, "resource_release_result");
|
|
535
|
-
if ("unavailable" in result) return result;
|
|
536
|
-
if (result.kind === "resource_release_result") return result;
|
|
537
|
-
return {
|
|
538
|
-
unavailable: true,
|
|
539
|
-
reason: `unexpected response kind: ${result.kind}`
|
|
540
|
-
};
|
|
541
|
-
}
|
|
542
|
-
/**
|
|
543
|
-
* One-shot NDJSON lease-ipc round-trip over a fresh Unix socket. Connection per
|
|
544
|
-
* request (the verbs are stateless); the socket is closed before resolution.
|
|
545
|
-
* Any transport error resolves to `{ unavailable }` — never throws, never
|
|
546
|
-
* deadlocks. `expectedKind` is the result `kind` the caller correlates.
|
|
547
|
-
*/
|
|
548
|
-
function sendLeaseRequest(socketPath, request, expectedKind) {
|
|
549
|
-
return new Promise((resolve) => {
|
|
550
|
-
const id = `ra-${process.pid}-${request.kind}`;
|
|
551
|
-
const envelope = LeaseIpcRequestEnvelopeSchema.parse({
|
|
552
|
-
protocol_version: LEASE_IPC_PROTOCOL_VERSION,
|
|
553
|
-
id,
|
|
554
|
-
direction: "request",
|
|
555
|
-
request
|
|
556
|
-
});
|
|
557
|
-
const line = `${JSON.stringify(envelope)}\n`;
|
|
558
|
-
let settled = false;
|
|
559
|
-
let buffer = "";
|
|
560
|
-
const socket = connect(socketPath);
|
|
561
|
-
const done = (value) => {
|
|
562
|
-
if (settled) return;
|
|
563
|
-
settled = true;
|
|
564
|
-
socket.removeAllListeners();
|
|
565
|
-
socket.destroy();
|
|
566
|
-
resolve(value);
|
|
567
|
-
};
|
|
568
|
-
const degrade = (reason) => done({
|
|
569
|
-
unavailable: true,
|
|
570
|
-
reason
|
|
571
|
-
});
|
|
572
|
-
socket.setTimeout(REQUEST_TIMEOUT_MS);
|
|
573
|
-
const connectTimer = setTimeout(() => degrade("supervisor connect timeout"), CONNECT_TIMEOUT_MS);
|
|
574
|
-
socket.on("connect", () => {
|
|
575
|
-
clearTimeout(connectTimer);
|
|
576
|
-
socket.write(line);
|
|
577
|
-
});
|
|
578
|
-
socket.on("timeout", () => degrade("supervisor request timeout"));
|
|
579
|
-
socket.on("error", (err) => {
|
|
580
|
-
clearTimeout(connectTimer);
|
|
581
|
-
degrade(err.message);
|
|
582
|
-
});
|
|
583
|
-
socket.on("close", () => {
|
|
584
|
-
if (!settled) degrade("supervisor closed the connection before responding");
|
|
585
|
-
});
|
|
586
|
-
socket.on("data", (chunk) => {
|
|
587
|
-
buffer += chunk.toString("utf8");
|
|
588
|
-
const nl = buffer.indexOf("\n");
|
|
589
|
-
if (nl < 0) return;
|
|
590
|
-
let json;
|
|
591
|
-
try {
|
|
592
|
-
json = JSON.parse(buffer.slice(0, nl));
|
|
593
|
-
} catch (cause) {
|
|
594
|
-
degrade(`malformed lease-ipc frame: ${cause instanceof Error ? cause.message : cause}`);
|
|
595
|
-
return;
|
|
596
|
-
}
|
|
597
|
-
const parsed = LeaseIpcResponseEnvelopeSchema.safeParse(json);
|
|
598
|
-
if (!parsed.success) {
|
|
599
|
-
degrade(`off-contract lease-ipc response: ${parsed.error.message}`);
|
|
600
|
-
return;
|
|
601
|
-
}
|
|
602
|
-
const { response } = parsed.data;
|
|
603
|
-
if (response.kind === expectedKind) {
|
|
604
|
-
done(response);
|
|
605
|
-
return;
|
|
606
|
-
}
|
|
607
|
-
if (response.kind === "error") {
|
|
608
|
-
degrade(`${response.code}: ${response.message}`);
|
|
609
|
-
return;
|
|
610
|
-
}
|
|
611
|
-
degrade(`unexpected lease-ipc response kind for ${request.kind}: ${response.kind}`);
|
|
612
|
-
});
|
|
613
|
-
});
|
|
614
|
-
}
|
|
615
|
-
//#endregion
|
|
616
|
-
//#region ../core/dist/resources/governor.js
|
|
617
|
-
/**
|
|
618
|
-
* ResourceGovernor — Never-OOM class-based admission (T11999, Epic T11992).
|
|
619
|
-
*
|
|
620
|
-
* Admits resource-intensive work through priority classes whose slot budgets
|
|
621
|
-
* are computed at acquire time from host memory + memory-pressure (PSI). A
|
|
622
|
-
* denial returns a structured, retryable {@link ResourceDeferral} — never a
|
|
623
|
-
* silent drop, never a crash. Existing grants are NEVER revoked.
|
|
624
|
-
*
|
|
625
|
-
* Three modes (verbatim writer-lease shape, `writer-lease.ts` `resolveLeaseMode`):
|
|
626
|
-
* - `supervisor` — defer to the Rust `cleo-supervisor` `resource_admit` verb.
|
|
627
|
-
* Demotes to `local` (log-once) until the IPC client is wired — a
|
|
628
|
-
* dead/absent arbiter must never deadlock work.
|
|
629
|
-
* - `local` — DEFAULT, daemon-off. Per-class slot directories under
|
|
630
|
-
* `getCleoHome()/locks/resource-<class>/` arbitrated by `proper-lockfile`
|
|
631
|
-
* (crash-stale auto-release ⇒ genuinely cross-process without a daemon),
|
|
632
|
-
* plus a point-sample of the {@link ResourceMonitor} taken INSIDE acquire.
|
|
633
|
-
* Generalizes the tool-semaphore engine (`tool-semaphore.ts`).
|
|
634
|
-
* - `off` — pure pass-through.
|
|
635
|
-
*
|
|
636
|
-
* `interactive-cli` is NEVER gated; `full-build` is pinned to one machine-wide
|
|
637
|
-
* slot regardless of pressure.
|
|
638
|
-
*
|
|
639
|
-
* @task T11999
|
|
640
|
-
* @epic T11992
|
|
641
|
-
* @adr resource-governor-never-oom-architecture §3.4
|
|
642
|
-
*/
|
|
643
|
-
var _log = null;
|
|
644
|
-
function log() {
|
|
645
|
-
if (_log === null) _log = getLogger("resource-governor");
|
|
646
|
-
return _log;
|
|
647
|
-
}
|
|
648
|
-
var _cachedMode = null;
|
|
649
|
-
var _supervisorDegradeLogged = false;
|
|
650
|
-
/**
|
|
651
|
-
* Resolve the governor mode from `CLEO_RESOURCES_MODE`, once per process.
|
|
652
|
-
* Unknown / unset values resolve to `'local'` — the production-safe default
|
|
653
|
-
* while the supervisor daemon is disabled.
|
|
654
|
-
*
|
|
655
|
-
* @task T11999
|
|
656
|
-
*/
|
|
657
|
-
function resolveGovernorMode() {
|
|
658
|
-
if (_cachedMode !== null) return _cachedMode;
|
|
659
|
-
const raw = process.env.CLEO_RESOURCES_MODE;
|
|
660
|
-
_cachedMode = raw === "supervisor" || raw === "local" || raw === "off" ? raw : "local";
|
|
661
|
-
return _cachedMode;
|
|
662
|
-
}
|
|
663
|
-
/**
|
|
664
|
-
* Log (once) that `supervisor` mode degraded to the local slot engine because
|
|
665
|
-
* the arbiter was unreachable — a dead/absent supervisor must never deadlock
|
|
666
|
-
* work (T12001). Mirrors the writer-lease degrade-once behaviour.
|
|
667
|
-
*/
|
|
668
|
-
function logSupervisorDegradeOnce(reason) {
|
|
669
|
-
if (_supervisorDegradeLogged) return;
|
|
670
|
-
_supervisorDegradeLogged = true;
|
|
671
|
-
log().info(`CLEO_RESOURCES_MODE=supervisor but the arbiter is unreachable (${reason}); degrading to local-mode admission for the process lifetime.`);
|
|
672
|
-
}
|
|
673
|
-
var MB = 1024 * 1024;
|
|
674
|
-
/** Extract `some avg10` (0–100) from a sample; 0 when unavailable. */
|
|
675
|
-
function someAvg10(sample) {
|
|
676
|
-
return (sample.globalPressure?.some ?? sample.slicePressure?.some)?.avg10 ?? 0;
|
|
677
|
-
}
|
|
678
|
-
/**
|
|
679
|
-
* Compute the slot budget for a class given a point-sample.
|
|
680
|
-
*
|
|
681
|
-
* - `interactive-cli` → `Infinity` (never gated).
|
|
682
|
-
* - `full-build` → `1` machine-wide, pressure-independent.
|
|
683
|
-
* - `agent-session` → `clamp(1, ⌊(MemAvailable − headroom)/estRamMb⌋, cpus−2)`.
|
|
684
|
-
* - `test-run` / `scoped-build` → `clamp(1, ⌊(MemAvailable − headroom)/estRamMb⌋,
|
|
685
|
-
* ⌊cpus/4⌋)`, ×0.5 when `some>hold`, floored to 1 when `some>floor` (T12091:
|
|
686
|
-
* was core-only, which authorised 144 GiB of heap on a 62 GiB box).
|
|
687
|
-
* - `llm-call` → `max(1, cpus−2)` (primarily gated by the llm-queue elsewhere).
|
|
688
|
-
* - `db-heavy` → `1`, deferred (→0) under `backoff`-level pressure.
|
|
689
|
-
* - `background-autonomous` → `1` only when pressure is `ok`, else `0`.
|
|
690
|
-
*
|
|
691
|
-
* @adr resource-governor-never-oom-architecture §3.4 (budgets)
|
|
692
|
-
*/
|
|
693
|
-
function computeClassBudget(cls, sample, opts = {}) {
|
|
694
|
-
if (cls === "interactive-cli") return Number.POSITIVE_INFINITY;
|
|
695
|
-
const cpus = Math.max(1, opts.cpuCount ?? availableParallelism());
|
|
696
|
-
const totalBytes = opts.totalMemBytes ?? totalmem();
|
|
697
|
-
const headroomBytes = (opts.headroomMb ?? 2048) * MB;
|
|
698
|
-
const hold = opts.holdSomeAvg10 ?? 10;
|
|
699
|
-
const floor = opts.floorSomeAvg10 ?? 25;
|
|
700
|
-
const some = someAvg10(sample);
|
|
701
|
-
const availBytes = sample.memAvailableBytes ?? totalBytes;
|
|
702
|
-
const fullStall = sample.globalPressure?.full?.avg10 ?? sample.slicePressure?.full?.avg10 ?? 0;
|
|
703
|
-
const backoff = some > floor || fullStall > 10;
|
|
704
|
-
switch (cls) {
|
|
705
|
-
case "full-build": return 1;
|
|
706
|
-
case "agent-session": {
|
|
707
|
-
const estRamBytes = (opts.agentEstRamMb ?? 4096) * MB;
|
|
708
|
-
return clamp(1, Math.floor((availBytes - headroomBytes) / estRamBytes), Math.max(1, cpus - 2));
|
|
709
|
-
}
|
|
710
|
-
case "llm-call": return Math.max(1, cpus - 2);
|
|
711
|
-
case "test-run":
|
|
712
|
-
case "scoped-build": {
|
|
713
|
-
const estRamBytes = (opts.testRunEstRamMb ?? 24576) * MB;
|
|
714
|
-
const base = clamp(1, Math.floor((availBytes - headroomBytes) / estRamBytes), Math.max(1, Math.floor(cpus / 4)));
|
|
715
|
-
if (some > floor) return 1;
|
|
716
|
-
if (some > hold) return Math.max(1, Math.floor(base / 2));
|
|
717
|
-
return base;
|
|
718
|
-
}
|
|
719
|
-
case "db-heavy": return backoff ? 0 : 1;
|
|
720
|
-
case "background-autonomous": return some > hold || fullStall > 5 ? 0 : 1;
|
|
721
|
-
default: return 1;
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
function clamp(lo, v, hi) {
|
|
725
|
-
return Math.max(lo, Math.min(v, hi));
|
|
726
|
-
}
|
|
727
|
-
/**
|
|
728
|
-
* Machine-wide slot directory for a class, under
|
|
729
|
-
* `getCleoHome()/locks/resource-<class>/`. Shared across projects, worktrees,
|
|
730
|
-
* and PIDs — exactly like the tool semaphore.
|
|
731
|
-
*/
|
|
732
|
-
function governorSlotDir(cls) {
|
|
733
|
-
return join(getCleoHome(), "locks", `resource-${cls}`);
|
|
734
|
-
}
|
|
735
|
-
function ensureSlotFiles(dir, count) {
|
|
736
|
-
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
737
|
-
const paths = [];
|
|
738
|
-
for (let i = 0; i < count; i++) {
|
|
739
|
-
const p = join(dir, `slot-${i}.lock`);
|
|
740
|
-
if (!existsSync(p)) writeFileSync(p, "", { flag: "a" });
|
|
741
|
-
paths.push(p);
|
|
742
|
-
}
|
|
743
|
-
return paths;
|
|
744
|
-
}
|
|
745
|
-
var STALE_MS = 6e5;
|
|
746
|
-
function sleep(ms) {
|
|
747
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
748
|
-
}
|
|
749
|
-
function passThroughGrant(cls) {
|
|
750
|
-
return {
|
|
751
|
-
deferred: false,
|
|
752
|
-
class: cls,
|
|
753
|
-
slot: -1,
|
|
754
|
-
acquiredAtMs: Date.now(),
|
|
755
|
-
release: async () => {}
|
|
756
|
-
};
|
|
757
|
-
}
|
|
758
|
-
function deferral(cls, reason, retryAfterMs) {
|
|
759
|
-
return {
|
|
760
|
-
deferred: true,
|
|
761
|
-
class: cls,
|
|
762
|
-
retryAfterMs,
|
|
763
|
-
reason
|
|
764
|
-
};
|
|
765
|
-
}
|
|
766
|
-
var _supervisorHolderSeq = 0;
|
|
767
|
-
/**
|
|
768
|
-
* A process-unique holder id for a supervisor `resource_admit`, so each acquire
|
|
769
|
-
* is a distinct slot (matched 1:1 by its `release`). `pid` scopes the holder to
|
|
770
|
-
* this process; the sequence distinguishes concurrent holds of the same class.
|
|
771
|
-
*/
|
|
772
|
-
function supervisorHolderId(cls) {
|
|
773
|
-
_supervisorHolderSeq += 1;
|
|
774
|
-
return `${process.pid}:${cls}:${_supervisorHolderSeq}`;
|
|
775
|
-
}
|
|
776
|
-
/**
|
|
777
|
-
* The Never-OOM admission gate. Stateless wrapper over the mode-resolved
|
|
778
|
-
* backend (local slot dirs today; supervisor IPC when wired). Construct once
|
|
779
|
-
* and share, or use the module-level {@link governor} singleton.
|
|
780
|
-
*/
|
|
781
|
-
var ResourceGovernor = class {
|
|
782
|
-
/**
|
|
783
|
-
* Acquire one slot of `cls`. Returns a {@link ResourceGrant} on success or a
|
|
784
|
-
* {@link ResourceDeferral} on denial. Never throws for admission control;
|
|
785
|
-
* only genuinely unexpected I/O errors propagate.
|
|
786
|
-
*/
|
|
787
|
-
async acquire(cls, opts = {}) {
|
|
788
|
-
const mode = resolveGovernorMode();
|
|
789
|
-
if (mode === "off" || cls === "interactive-cli") return passThroughGrant(cls);
|
|
790
|
-
const sample = opts.sample ?? await (opts.monitor ?? new ResourceMonitor()).sample();
|
|
791
|
-
const budget = computeClassBudget(cls, sample, opts);
|
|
792
|
-
if (!Number.isFinite(budget)) return passThroughGrant(cls);
|
|
793
|
-
if (budget <= 0) return deferral(cls, `class '${cls}' budget is 0 under current pressure (some avg10=${someAvg10(sample).toFixed(1)})`, DEFAULT_RESOURCE_RETRY_AFTER_MS);
|
|
794
|
-
if (mode === "supervisor") {
|
|
795
|
-
const viaSupervisor = await this.acquireViaSupervisor(cls, Math.floor(budget));
|
|
796
|
-
if (viaSupervisor !== null) return viaSupervisor;
|
|
797
|
-
}
|
|
798
|
-
const slots = ensureSlotFiles(governorSlotDir(cls), budget);
|
|
799
|
-
const blocking = opts.blocking ?? true;
|
|
800
|
-
const timeoutMs = opts.timeoutMs ?? 36e5;
|
|
801
|
-
const pollMs = opts.pollMs ?? 200;
|
|
802
|
-
const startedAt = Date.now();
|
|
803
|
-
do {
|
|
804
|
-
const order = shuffledIndices(slots.length);
|
|
805
|
-
for (const idx of order) {
|
|
806
|
-
const path = slots[idx];
|
|
807
|
-
if (!path) continue;
|
|
808
|
-
try {
|
|
809
|
-
const release = await lockfile.lock(path, {
|
|
810
|
-
retries: 0,
|
|
811
|
-
stale: STALE_MS,
|
|
812
|
-
realpath: false
|
|
813
|
-
});
|
|
814
|
-
let released = false;
|
|
815
|
-
return {
|
|
816
|
-
deferred: false,
|
|
817
|
-
class: cls,
|
|
818
|
-
slot: idx,
|
|
819
|
-
acquiredAtMs: Date.now(),
|
|
820
|
-
release: async () => {
|
|
821
|
-
if (released) return;
|
|
822
|
-
released = true;
|
|
823
|
-
try {
|
|
824
|
-
await release();
|
|
825
|
-
} catch {}
|
|
826
|
-
}
|
|
827
|
-
};
|
|
828
|
-
} catch {}
|
|
829
|
-
}
|
|
830
|
-
if (!blocking) break;
|
|
831
|
-
await sleep(pollMs);
|
|
832
|
-
} while (Date.now() - startedAt < timeoutMs);
|
|
833
|
-
return deferral(cls, `class '${cls}' is at capacity (${budget} slot(s)); ` + (blocking ? `timed out after ${timeoutMs}ms` : "no slot free"), Math.min(pollMs * 4, DEFAULT_RESOURCE_RETRY_AFTER_MS));
|
|
834
|
-
}
|
|
835
|
-
/**
|
|
836
|
-
* Route an admission through the supervisor's central `resource_admit` verb.
|
|
837
|
-
* Returns a grant (whose `release` calls `resource_release`) or a deferral, or
|
|
838
|
-
* `null` when the supervisor is unreachable so the caller degrades to the
|
|
839
|
-
* local slot engine. Never throws — a dead arbiter never deadlocks work.
|
|
840
|
-
*
|
|
841
|
-
* @task T12001
|
|
842
|
-
*/
|
|
843
|
-
async acquireViaSupervisor(cls, budget) {
|
|
844
|
-
const socketPath = resolveSupervisorSocketPath();
|
|
845
|
-
const holderId = supervisorHolderId(cls);
|
|
846
|
-
const reply = await sendResourceAdmit(socketPath, cls, holderId, budget);
|
|
847
|
-
if ("unavailable" in reply) {
|
|
848
|
-
logSupervisorDegradeOnce(reply.reason);
|
|
849
|
-
return null;
|
|
850
|
-
}
|
|
851
|
-
if (reply.disposition === "deferred") return deferral(cls, `class '${cls}' deferred by supervisor (budget ${budget})`, reply.retry_after_ms || 2e3);
|
|
852
|
-
let released = false;
|
|
853
|
-
return {
|
|
854
|
-
deferred: false,
|
|
855
|
-
class: cls,
|
|
856
|
-
slot: 0,
|
|
857
|
-
acquiredAtMs: Date.now(),
|
|
858
|
-
release: async () => {
|
|
859
|
-
if (released) return;
|
|
860
|
-
released = true;
|
|
861
|
-
await sendResourceRelease(socketPath, cls, holderId).catch(() => {});
|
|
862
|
-
}
|
|
863
|
-
};
|
|
864
|
-
}
|
|
865
|
-
/** Non-blocking single-pass acquire (admission semantics). */
|
|
866
|
-
async tryAcquire(cls, opts = {}) {
|
|
867
|
-
return this.acquire(cls, {
|
|
868
|
-
...opts,
|
|
869
|
-
blocking: false
|
|
870
|
-
});
|
|
871
|
-
}
|
|
872
|
-
/**
|
|
873
|
-
* Currently-grantable slot count for `cls` = budget − held. Held is the count
|
|
874
|
-
* of slot files currently locked. `Infinity` for ungated classes.
|
|
875
|
-
*/
|
|
876
|
-
async available(cls, opts = {}) {
|
|
877
|
-
if (resolveGovernorMode() === "off" || cls === "interactive-cli") return Number.POSITIVE_INFINITY;
|
|
878
|
-
const budget = computeClassBudget(cls, opts.sample ?? await (opts.monitor ?? new ResourceMonitor()).sample(), opts);
|
|
879
|
-
if (!Number.isFinite(budget)) return Number.POSITIVE_INFINITY;
|
|
880
|
-
if (budget <= 0) return 0;
|
|
881
|
-
const held = await countHeldSlots(cls, budget);
|
|
882
|
-
return Math.max(0, budget - held);
|
|
883
|
-
}
|
|
884
|
-
};
|
|
885
|
-
function shuffledIndices(n) {
|
|
886
|
-
const order = Array.from({ length: n }, (_, i) => i);
|
|
887
|
-
for (let i = order.length - 1; i > 0; i--) {
|
|
888
|
-
const j = Math.floor(Math.random() * (i + 1));
|
|
889
|
-
const a = order[i];
|
|
890
|
-
const b = order[j];
|
|
891
|
-
if (a !== void 0 && b !== void 0) {
|
|
892
|
-
order[i] = b;
|
|
893
|
-
order[j] = a;
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
return order;
|
|
897
|
-
}
|
|
898
|
-
/**
|
|
899
|
-
* Count how many of `budget` slots are currently held, by probing each with a
|
|
900
|
-
* non-blocking lock. A successful probe-lock is released immediately — it never
|
|
901
|
-
* holds the slot, so it cannot starve a real acquirer.
|
|
902
|
-
*/
|
|
903
|
-
async function countHeldSlots(cls, budget) {
|
|
904
|
-
const dir = governorSlotDir(cls);
|
|
905
|
-
if (!existsSync(dir)) return 0;
|
|
906
|
-
const slots = ensureSlotFiles(dir, budget);
|
|
907
|
-
let held = 0;
|
|
908
|
-
for (const path of slots) try {
|
|
909
|
-
await (await lockfile.lock(path, {
|
|
910
|
-
retries: 0,
|
|
911
|
-
stale: STALE_MS,
|
|
912
|
-
realpath: false
|
|
913
|
-
}))();
|
|
914
|
-
} catch {
|
|
915
|
-
held++;
|
|
916
|
-
}
|
|
917
|
-
return held;
|
|
918
|
-
}
|
|
919
|
-
/** Process-wide governor singleton. */
|
|
920
|
-
var governor = new ResourceGovernor();
|
|
921
|
-
|
|
922
|
-
export { governor };
|
|
923
|
-
//# sourceMappingURL=governor2-CtfV3wfX.js.map
|