@openpalm/ui 0.12.0-rc.1 → 0.12.0-rc.3
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/build/.openpalm-ui-version +1 -1
- package/build/client/_app/immutable/assets/4.4BLkUSeP.css +1 -0
- package/build/client/_app/immutable/assets/4.4BLkUSeP.css.br +0 -0
- package/build/client/_app/immutable/assets/4.4BLkUSeP.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{C5EI77dn.js → 37oeDbOM.js} +1 -1
- package/build/client/_app/immutable/chunks/37oeDbOM.js.br +0 -0
- package/build/client/_app/immutable/chunks/{C5EI77dn.js.gz → 37oeDbOM.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/{D6NbA5vY.js → BMMTxmQF.js} +2 -2
- package/build/client/_app/immutable/chunks/BMMTxmQF.js.br +0 -0
- package/build/client/_app/immutable/chunks/BMMTxmQF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D7U2TZGX.js +5 -0
- package/build/client/_app/immutable/chunks/D7U2TZGX.js.br +0 -0
- package/build/client/_app/immutable/chunks/D7U2TZGX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BihYGk9Y.js → DhPCzSpa.js} +1 -1
- package/build/client/_app/immutable/chunks/DhPCzSpa.js.br +0 -0
- package/build/client/_app/immutable/chunks/DhPCzSpa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/HlgKB0Yv.js +1 -0
- package/build/client/_app/immutable/chunks/HlgKB0Yv.js.br +2 -0
- package/build/client/_app/immutable/chunks/HlgKB0Yv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/qjfxE7Kl.js +1 -0
- package/build/client/_app/immutable/chunks/qjfxE7Kl.js.br +0 -0
- package/build/client/_app/immutable/chunks/qjfxE7Kl.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.D4HjSNXN.js → app.D_h1885H.js} +2 -2
- package/build/client/_app/immutable/entry/app.D_h1885H.js.br +0 -0
- package/build/client/_app/immutable/entry/app.D_h1885H.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.KkDWne9K.js +1 -0
- package/build/client/_app/immutable/entry/start.KkDWne9K.js.br +0 -0
- package/build/client/_app/immutable/entry/start.KkDWne9K.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.DEcud9DA.js → 0.CoKytf3n.js} +1 -1
- package/build/client/_app/immutable/nodes/0.CoKytf3n.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CoKytf3n.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Cv1FI9RA.js → 1.m2br4sx_.js} +1 -1
- package/build/client/_app/immutable/nodes/1.m2br4sx_.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.m2br4sx_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.C6POwnGO.js +130 -0
- package/build/client/_app/immutable/nodes/4.C6POwnGO.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.C6POwnGO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.B_jsAXs5.js → 5.BoZ0ezyr.js} +2 -2
- package/build/client/_app/immutable/nodes/5.BoZ0ezyr.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BoZ0ezyr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.CD18u_qC.js → 6.D3HpNODC.js} +1 -1
- package/build/client/_app/immutable/nodes/6.D3HpNODC.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.D3HpNODC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.BXyjSbT8.js → 7.Cldb-l42.js} +1 -1
- package/build/client/_app/immutable/nodes/7.Cldb-l42.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Cldb-l42.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.CDTwcjzi.js → 8.BWkb2W3i.js} +1 -1
- package/build/client/_app/immutable/nodes/8.BWkb2W3i.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BWkb2W3i.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +1 -1
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-u2E6UMPO.js → 0-_Ek7fSWr.js} +3 -3
- package/build/server/chunks/{0-u2E6UMPO.js.map → 0-_Ek7fSWr.js.map} +1 -1
- package/build/server/chunks/1-CvpyJciZ.js +9 -0
- package/build/server/chunks/{1-CVcQJtBc.js.map → 1-CvpyJciZ.js.map} +1 -1
- package/build/server/chunks/{10-W-ONZquv.js → 10-CX8_71GH.js} +4 -4
- package/build/server/chunks/{10-W-ONZquv.js.map → 10-CX8_71GH.js.map} +1 -1
- package/build/server/chunks/4-CGNm9qY9.js +9 -0
- package/build/server/chunks/{4-CTyDAO7N.js.map → 4-CGNm9qY9.js.map} +1 -1
- package/build/server/chunks/5-CCrG3Zq1.js +9 -0
- package/build/server/chunks/{5-BXILJ_BC.js.map → 5-CCrG3Zq1.js.map} +1 -1
- package/build/server/chunks/6-CJd5ozaP.js +9 -0
- package/build/server/chunks/{6-HdFbhR1m.js.map → 6-CJd5ozaP.js.map} +1 -1
- package/build/server/chunks/7-Bh7s1hZ3.js +9 -0
- package/build/server/chunks/{7-k9H-eD_d.js.map → 7-Bh7s1hZ3.js.map} +1 -1
- package/build/server/chunks/{8-CQmCVu_8.js → 8-CbIypXYv.js} +3 -3
- package/build/server/chunks/{8-CQmCVu_8.js.map → 8-CbIypXYv.js.map} +1 -1
- package/build/server/chunks/{ChatMessage-DfLmvrJq.js → ChatMessage-BAWjgbc_.js} +2 -2
- package/build/server/chunks/{ChatMessage-DfLmvrJq.js.map → ChatMessage-BAWjgbc_.js.map} +1 -1
- package/build/server/chunks/{Navbar-Dnxvfk10.js → Navbar-Bdk7TDAb.js} +4 -4
- package/build/server/chunks/{Navbar-Dnxvfk10.js.map → Navbar-Bdk7TDAb.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-DKvvz-xQ.js → _layout.svelte-CFKjimed.js} +2 -2
- package/build/server/chunks/{_layout.svelte-DKvvz-xQ.js.map → _layout.svelte-CFKjimed.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Dea_LGsw.js → _page.svelte-2gtLQdWF.js} +6 -6
- package/build/server/chunks/{_page.svelte-Dea_LGsw.js.map → _page.svelte-2gtLQdWF.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DnHQefg6.js → _page.svelte-CUeuGP5U.js} +7 -7
- package/build/server/chunks/{_page.svelte-DnHQefg6.js.map → _page.svelte-CUeuGP5U.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CqkvpyUV.js → _page.svelte-Cjok9-7E.js} +3 -3
- package/build/server/chunks/{_page.svelte-CqkvpyUV.js.map → _page.svelte-Cjok9-7E.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BsDNnBfz.js → _page.svelte-F2VqpLAW.js} +234 -35
- package/build/server/chunks/_page.svelte-F2VqpLAW.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DMBLB7p4.js → _page.svelte-bfGTUogD.js} +6 -6
- package/build/server/chunks/{_page.svelte-DMBLB7p4.js.map → _page.svelte-bfGTUogD.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BzEFvvlp.js → _server.ts-0fJZ0VmG.js} +7 -7
- package/build/server/chunks/{_server.ts-BzEFvvlp.js.map → _server.ts-0fJZ0VmG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dbnh0OAK.js → _server.ts-2jjEL-tJ.js} +5 -5
- package/build/server/chunks/{_server.ts-Dbnh0OAK.js.map → _server.ts-2jjEL-tJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BsgERSUa.js → _server.ts-2qYNEWJW.js} +5 -5
- package/build/server/chunks/{_server.ts-BsgERSUa.js.map → _server.ts-2qYNEWJW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Z6Jl5czR.js → _server.ts-44XLCjje.js} +5 -5
- package/build/server/chunks/{_server.ts-Z6Jl5czR.js.map → _server.ts-44XLCjje.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DSn8PZs3.js → _server.ts-5x4EV4ZH.js} +5 -5
- package/build/server/chunks/{_server.ts-DSn8PZs3.js.map → _server.ts-5x4EV4ZH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DzFK8bVm.js → _server.ts-70mUxM22.js} +5 -5
- package/build/server/chunks/{_server.ts-DzFK8bVm.js.map → _server.ts-70mUxM22.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ALC_q9Pv.js → _server.ts-7YO0AJyT.js} +5 -5
- package/build/server/chunks/{_server.ts-ALC_q9Pv.js.map → _server.ts-7YO0AJyT.js.map} +1 -1
- package/build/server/chunks/_server.ts-B0cdV0wH.js +89 -0
- package/build/server/chunks/_server.ts-B0cdV0wH.js.map +1 -0
- package/build/server/chunks/{_server.ts-CHC5iyoo.js → _server.ts-B0f-lyzD.js} +4 -4
- package/build/server/chunks/{_server.ts-CHC5iyoo.js.map → _server.ts-B0f-lyzD.js.map} +1 -1
- package/build/server/chunks/{_server.ts-b0eG_upf.js → _server.ts-B8ExhGgO.js} +5 -5
- package/build/server/chunks/{_server.ts-b0eG_upf.js.map → _server.ts-B8ExhGgO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CPzXJpes.js → _server.ts-B8l8YmXh.js} +6 -6
- package/build/server/chunks/{_server.ts-CPzXJpes.js.map → _server.ts-B8l8YmXh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BfpKWyaE.js → _server.ts-BBHICsQa.js} +18 -6
- package/build/server/chunks/_server.ts-BBHICsQa.js.map +1 -0
- package/build/server/chunks/{_server.ts-CfZXoUH1.js → _server.ts-BFfdVNpH.js} +5 -5
- package/build/server/chunks/{_server.ts-CfZXoUH1.js.map → _server.ts-BFfdVNpH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-tSnumHIh.js → _server.ts-BI0oEp2m.js} +5 -5
- package/build/server/chunks/{_server.ts-tSnumHIh.js.map → _server.ts-BI0oEp2m.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D53Q4y2U.js → _server.ts-BJPmYqJQ.js} +5 -5
- package/build/server/chunks/{_server.ts-D53Q4y2U.js.map → _server.ts-BJPmYqJQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Df_d0aal.js → _server.ts-BLqWydCg.js} +5 -5
- package/build/server/chunks/_server.ts-BLqWydCg.js.map +1 -0
- package/build/server/chunks/{_server.ts-BmQi3d-p.js → _server.ts-BPEwLxUz.js} +4 -4
- package/build/server/chunks/{_server.ts-BmQi3d-p.js.map → _server.ts-BPEwLxUz.js.map} +1 -1
- package/build/server/chunks/{_server.ts-vz7XppYp.js → _server.ts-BQSuiMBy.js} +5 -5
- package/build/server/chunks/{_server.ts-vz7XppYp.js.map → _server.ts-BQSuiMBy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dsl30Kqm.js → _server.ts-BRzEk9EI.js} +5 -5
- package/build/server/chunks/{_server.ts-Dsl30Kqm.js.map → _server.ts-BRzEk9EI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-LS-MWWTz.js → _server.ts-BTw50Sge.js} +6 -6
- package/build/server/chunks/{_server.ts-LS-MWWTz.js.map → _server.ts-BTw50Sge.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bs3oAE6C.js → _server.ts-BVLeyPrV.js} +5 -5
- package/build/server/chunks/{_server.ts-Bs3oAE6C.js.map → _server.ts-BVLeyPrV.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CSZz4p8L.js → _server.ts-Ba3Y8mZb.js} +5 -5
- package/build/server/chunks/{_server.ts-CSZz4p8L.js.map → _server.ts-Ba3Y8mZb.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dbczo4Pv.js → _server.ts-BbXRF71R.js} +2 -2
- package/build/server/chunks/{_server.ts-Dbczo4Pv.js.map → _server.ts-BbXRF71R.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CERCOBc3.js → _server.ts-BgZqc9BJ.js} +5 -5
- package/build/server/chunks/{_server.ts-CERCOBc3.js.map → _server.ts-BgZqc9BJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-anQxgBbg.js → _server.ts-BkgABCm4.js} +5 -5
- package/build/server/chunks/{_server.ts-anQxgBbg.js.map → _server.ts-BkgABCm4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DUJObAJG.js → _server.ts-BqNV9SKY.js} +6 -6
- package/build/server/chunks/{_server.ts-DUJObAJG.js.map → _server.ts-BqNV9SKY.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DhF_U44B.js → _server.ts-Br8Q79vg.js} +5 -5
- package/build/server/chunks/{_server.ts-DhF_U44B.js.map → _server.ts-Br8Q79vg.js.map} +1 -1
- package/build/server/chunks/{_server.ts-tVOMHVfT.js → _server.ts-BsCi8U0T.js} +6 -6
- package/build/server/chunks/{_server.ts-tVOMHVfT.js.map → _server.ts-BsCi8U0T.js.map} +1 -1
- package/build/server/chunks/{_server.ts-keJe--oH.js → _server.ts-BtzqRqdc.js} +2 -2
- package/build/server/chunks/{_server.ts-keJe--oH.js.map → _server.ts-BtzqRqdc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B2osMaU8.js → _server.ts-BuvcU_rd.js} +5 -5
- package/build/server/chunks/{_server.ts-B2osMaU8.js.map → _server.ts-BuvcU_rd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ComhXvuD.js → _server.ts-BvYQG4dt.js} +5 -5
- package/build/server/chunks/{_server.ts-ComhXvuD.js.map → _server.ts-BvYQG4dt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-WQLovWTW.js → _server.ts-Bvv8P8O9.js} +6 -6
- package/build/server/chunks/{_server.ts-WQLovWTW.js.map → _server.ts-Bvv8P8O9.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CGlVN30h.js → _server.ts-ByNLf-MM.js} +5 -5
- package/build/server/chunks/{_server.ts-CGlVN30h.js.map → _server.ts-ByNLf-MM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C2oIwHOm.js → _server.ts-C1P---qO.js} +5 -5
- package/build/server/chunks/{_server.ts-C2oIwHOm.js.map → _server.ts-C1P---qO.js.map} +1 -1
- package/build/server/chunks/_server.ts-C6_HX3EG.js +81 -0
- package/build/server/chunks/_server.ts-C6_HX3EG.js.map +1 -0
- package/build/server/chunks/{_server.ts-D1v6AXVY.js → _server.ts-CGk9ZLGa.js} +2 -2
- package/build/server/chunks/{_server.ts-D1v6AXVY.js.map → _server.ts-CGk9ZLGa.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DFfzCkBR.js → _server.ts-CIoiPQyf.js} +5 -5
- package/build/server/chunks/{_server.ts-DFfzCkBR.js.map → _server.ts-CIoiPQyf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D4lQjUia.js → _server.ts-CRzIDkX8.js} +7 -7
- package/build/server/chunks/{_server.ts-D4lQjUia.js.map → _server.ts-CRzIDkX8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BVQjwsMp.js → _server.ts-CSZ5Wh6G.js} +5 -5
- package/build/server/chunks/{_server.ts-BVQjwsMp.js.map → _server.ts-CSZ5Wh6G.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cya45Eco.js → _server.ts-CT1eXDu-.js} +5 -5
- package/build/server/chunks/{_server.ts-Cya45Eco.js.map → _server.ts-CT1eXDu-.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BCfPFzEV.js → _server.ts-CUuJlm00.js} +6 -6
- package/build/server/chunks/{_server.ts-BCfPFzEV.js.map → _server.ts-CUuJlm00.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D1dT173b.js → _server.ts-CZ-DRZvp.js} +5 -5
- package/build/server/chunks/{_server.ts-D1dT173b.js.map → _server.ts-CZ-DRZvp.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bu5_FYA-.js → _server.ts-Cc3N9css.js} +5 -5
- package/build/server/chunks/{_server.ts-Bu5_FYA-.js.map → _server.ts-Cc3N9css.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DtJPTK6T.js → _server.ts-Cf65eLqq.js} +5 -5
- package/build/server/chunks/{_server.ts-DtJPTK6T.js.map → _server.ts-Cf65eLqq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CB1MjjTN.js → _server.ts-Cg6XEPy2.js} +6 -6
- package/build/server/chunks/{_server.ts-CB1MjjTN.js.map → _server.ts-Cg6XEPy2.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DESj9ag6.js → _server.ts-CnP0tOCJ.js} +5 -5
- package/build/server/chunks/{_server.ts-DESj9ag6.js.map → _server.ts-CnP0tOCJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-xxCrP77n.js → _server.ts-CrJINkX_.js} +5 -5
- package/build/server/chunks/{_server.ts-xxCrP77n.js.map → _server.ts-CrJINkX_.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Ckf8jQdl.js → _server.ts-Crjjd765.js} +6 -6
- package/build/server/chunks/{_server.ts-Ckf8jQdl.js.map → _server.ts-Crjjd765.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D47IinIP.js → _server.ts-Cv8ofBVh.js} +7 -7
- package/build/server/chunks/{_server.ts-D47IinIP.js.map → _server.ts-Cv8ofBVh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BEdChB0B.js → _server.ts-CvjW0prw.js} +14 -7
- package/build/server/chunks/_server.ts-CvjW0prw.js.map +1 -0
- package/build/server/chunks/{_server.ts-CW_MqxCL.js → _server.ts-CzJEYcNT.js} +7 -7
- package/build/server/chunks/{_server.ts-CW_MqxCL.js.map → _server.ts-CzJEYcNT.js.map} +1 -1
- package/build/server/chunks/{_server.ts-gBd2rolQ.js → _server.ts-CzxUP04Y.js} +5 -5
- package/build/server/chunks/{_server.ts-gBd2rolQ.js.map → _server.ts-CzxUP04Y.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B409KD6U.js → _server.ts-D01NZcYW.js} +25 -7
- package/build/server/chunks/_server.ts-D01NZcYW.js.map +1 -0
- package/build/server/chunks/_server.ts-D1AbREnq.js +78 -0
- package/build/server/chunks/_server.ts-D1AbREnq.js.map +1 -0
- package/build/server/chunks/{_server.ts-DYU3yoaF.js → _server.ts-D7Jx0nis.js} +5 -5
- package/build/server/chunks/{_server.ts-DYU3yoaF.js.map → _server.ts-D7Jx0nis.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C40BmZoV.js → _server.ts-D81qWfpG.js} +5 -5
- package/build/server/chunks/{_server.ts-C40BmZoV.js.map → _server.ts-D81qWfpG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DMNpdAr1.js → _server.ts-D8cTdweQ.js} +5 -5
- package/build/server/chunks/{_server.ts-DMNpdAr1.js.map → _server.ts-D8cTdweQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dr56nQwT.js → _server.ts-DAyVdLae.js} +5 -5
- package/build/server/chunks/{_server.ts-Dr56nQwT.js.map → _server.ts-DAyVdLae.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BP1-cpdO.js → _server.ts-DG6X2pCM.js} +6 -6
- package/build/server/chunks/{_server.ts-BP1-cpdO.js.map → _server.ts-DG6X2pCM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D2YDAvSW.js → _server.ts-DIot9Cws.js} +5 -5
- package/build/server/chunks/_server.ts-DIot9Cws.js.map +1 -0
- package/build/server/chunks/{_server.ts-BfRDa9Ak.js → _server.ts-DLN16A-H.js} +5 -5
- package/build/server/chunks/{_server.ts-BfRDa9Ak.js.map → _server.ts-DLN16A-H.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DGkBTOLd.js → _server.ts-DNnk_Zxf.js} +5 -5
- package/build/server/chunks/{_server.ts-DGkBTOLd.js.map → _server.ts-DNnk_Zxf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dwhv7KnR.js → _server.ts-DRtWVz82.js} +6 -6
- package/build/server/chunks/{_server.ts-Dwhv7KnR.js.map → _server.ts-DRtWVz82.js.map} +1 -1
- package/build/server/chunks/{_server.ts--ZXHd_7G.js → _server.ts-DWLgZ0Yv.js} +6 -6
- package/build/server/chunks/{_server.ts--ZXHd_7G.js.map → _server.ts-DWLgZ0Yv.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CcKpUv9a.js → _server.ts-DWWvdqIf.js} +5 -5
- package/build/server/chunks/{_server.ts-CcKpUv9a.js.map → _server.ts-DWWvdqIf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Ou4LHoL0.js → _server.ts-DeYTt0bJ.js} +5 -5
- package/build/server/chunks/{_server.ts-Ou4LHoL0.js.map → _server.ts-DeYTt0bJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cg_nVcGe.js → _server.ts-DmJBOTT2.js} +6 -6
- package/build/server/chunks/{_server.ts-Cg_nVcGe.js.map → _server.ts-DmJBOTT2.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BX19lZQE.js → _server.ts-DrOOY95Q.js} +5 -5
- package/build/server/chunks/{_server.ts-BX19lZQE.js.map → _server.ts-DrOOY95Q.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DErSZ0aB.js → _server.ts-DtH3KC6o.js} +2 -2
- package/build/server/chunks/{_server.ts-DErSZ0aB.js.map → _server.ts-DtH3KC6o.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DsXYP4wI.js → _server.ts-DwkMC38U.js} +5 -5
- package/build/server/chunks/{_server.ts-DsXYP4wI.js.map → _server.ts-DwkMC38U.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BOYEjBGJ.js → _server.ts-DxG52eeA.js} +7 -7
- package/build/server/chunks/{_server.ts-BOYEjBGJ.js.map → _server.ts-DxG52eeA.js.map} +1 -1
- package/build/server/chunks/{_server.ts-JWoayilI.js → _server.ts-Dxuqlt4R.js} +15 -10
- package/build/server/chunks/_server.ts-Dxuqlt4R.js.map +1 -0
- package/build/server/chunks/{_server.ts-MPKhnT_9.js → _server.ts-DyCjXY9f.js} +5 -5
- package/build/server/chunks/{_server.ts-MPKhnT_9.js.map → _server.ts-DyCjXY9f.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DJ8dviE4.js → _server.ts-FfM2gx8M.js} +8 -8
- package/build/server/chunks/{_server.ts-DJ8dviE4.js.map → _server.ts-FfM2gx8M.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DjPUN7lf.js → _server.ts-FgmSApxO.js} +5 -5
- package/build/server/chunks/{_server.ts-DjPUN7lf.js.map → _server.ts-FgmSApxO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CI29Cyri.js → _server.ts-LoYAi4N3.js} +6 -6
- package/build/server/chunks/{_server.ts-CI29Cyri.js.map → _server.ts-LoYAi4N3.js.map} +1 -1
- package/build/server/chunks/{_server.ts-YGPIKWu1.js → _server.ts-UX21CkDV.js} +5 -5
- package/build/server/chunks/{_server.ts-YGPIKWu1.js.map → _server.ts-UX21CkDV.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BaCAfVqq.js → _server.ts-bY2IL1Nj.js} +7 -7
- package/build/server/chunks/{_server.ts-BaCAfVqq.js.map → _server.ts-bY2IL1Nj.js.map} +1 -1
- package/build/server/chunks/_server.ts-fMGCvAmz.js +64 -0
- package/build/server/chunks/_server.ts-fMGCvAmz.js.map +1 -0
- package/build/server/chunks/{_server.ts-Cl0rLFUw.js → _server.ts-jmKRuOrt.js} +6 -6
- package/build/server/chunks/{_server.ts-Cl0rLFUw.js.map → _server.ts-jmKRuOrt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B1yfYKPg.js → _server.ts-nxWIvPny.js} +5 -5
- package/build/server/chunks/{_server.ts-B1yfYKPg.js.map → _server.ts-nxWIvPny.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D30T84pQ.js → _server.ts-plme8zrC.js} +5 -5
- package/build/server/chunks/{_server.ts-D30T84pQ.js.map → _server.ts-plme8zrC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-0B6ETUr-.js → _server.ts-sTPNb2pN.js} +5 -5
- package/build/server/chunks/{_server.ts-0B6ETUr-.js.map → _server.ts-sTPNb2pN.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B5hR6mRJ.js → _server.ts-t27XF1J7.js} +2 -2
- package/build/server/chunks/{_server.ts-B5hR6mRJ.js.map → _server.ts-t27XF1J7.js.map} +1 -1
- package/build/server/chunks/{addon-helpers-CNp09lT6.js → addon-helpers-DY4O9SZB.js} +3 -3
- package/build/server/chunks/{addon-helpers-CNp09lT6.js.map → addon-helpers-DY4O9SZB.js.map} +1 -1
- package/build/server/chunks/{akm-Du5uQGJQ.js → akm-BSih7eOh.js} +2 -2
- package/build/server/chunks/{akm-Du5uQGJQ.js.map → akm-BSih7eOh.js.map} +1 -1
- package/build/server/chunks/{catalog-VJdRC16s.js → catalog-DyHJ6nBW.js} +5 -5
- package/build/server/chunks/{catalog-VJdRC16s.js.map → catalog-DyHJ6nBW.js.map} +1 -1
- package/build/server/chunks/{client-BQEOyapc.js → client-CnOg1BpV.js} +2 -2
- package/build/server/chunks/{client-BQEOyapc.js.map → client-CnOg1BpV.js.map} +1 -1
- package/build/server/chunks/{config-VQx1c1o2.js → config-BVnL1-S6.js} +2 -2
- package/build/server/chunks/{config-VQx1c1o2.js.map → config-BVnL1-S6.js.map} +1 -1
- package/build/server/chunks/{docker-DeSRsk_C.js → docker-QQYBC8du.js} +2 -2
- package/build/server/chunks/{docker-DeSRsk_C.js.map → docker-QQYBC8du.js.map} +1 -1
- package/build/server/chunks/{endpoints-CVaZyXGR.js → endpoints-BOzm3TR9.js} +2 -2
- package/build/server/chunks/{endpoints-CVaZyXGR.js.map → endpoints-BOzm3TR9.js.map} +1 -1
- package/build/server/chunks/{environment-BTWh1E9j.js → environment-DevEAj_M.js} +2 -2
- package/build/server/chunks/{environment-BTWh1E9j.js.map → environment-DevEAj_M.js.map} +1 -1
- package/build/server/chunks/{error.svelte-Cz7XJbXh.js → error.svelte-OEdYqdGu.js} +4 -4
- package/build/server/chunks/{error.svelte-Cz7XJbXh.js.map → error.svelte-OEdYqdGu.js.map} +1 -1
- package/build/server/chunks/{helpers-DEWuEDi5.js → helpers-lf-w8dFi.js} +3 -3
- package/build/server/chunks/{helpers-DEWuEDi5.js.map → helpers-lf-w8dFi.js.map} +1 -1
- package/build/server/chunks/{hooks.server-D_p0VTSA.js → hooks.server-yeur1GCR.js} +6 -6
- package/build/server/chunks/{hooks.server-D_p0VTSA.js.map → hooks.server-yeur1GCR.js.map} +1 -1
- package/build/server/chunks/{http-Bz9VDTR1.js → http-Bv92EpMx.js} +2 -2
- package/build/server/chunks/{http-Bz9VDTR1.js.map → http-Bv92EpMx.js.map} +1 -1
- package/build/server/chunks/{internal-CXonuT4k.js → internal-CQdgWpT6.js} +3 -3
- package/build/server/chunks/{internal-CXonuT4k.js.map → internal-CQdgWpT6.js.map} +1 -1
- package/build/server/chunks/{session-cookie-CQw8e0tc.js → session-cookie-DhA3swUc.js} +2 -2
- package/build/server/chunks/{session-cookie-CQw8e0tc.js.map → session-cookie-DhA3swUc.js.map} +1 -1
- package/build/server/chunks/{setup-deploy-BBl1pM-Q.js → setup-deploy-C0hLjImh.js} +2 -2
- package/build/server/chunks/{setup-deploy-BBl1pM-Q.js.map → setup-deploy-C0hLjImh.js.map} +1 -1
- package/build/server/chunks/{src-CHZNd5cO.js → src-B7oqi9q_.js} +517 -93
- package/build/server/chunks/src-B7oqi9q_.js.map +1 -0
- package/build/server/chunks/{state-BcQ5v_Ye.js → state-iFW46-kW.js} +2 -2
- package/build/server/chunks/{state-BcQ5v_Ye.js.map → state-iFW46-kW.js.map} +1 -1
- package/build/server/chunks/{state2-CGTr4dHs.js → state2-DkQitSl6.js} +2 -2
- package/build/server/chunks/{state2-CGTr4dHs.js.map → state2-DkQitSl6.js.map} +1 -1
- package/build/server/chunks/{theme-state.svelte-CUVpUHOv.js → theme-state.svelte-8qSluhfu.js} +35 -4
- package/build/server/chunks/theme-state.svelte-8qSluhfu.js.map +1 -0
- package/build/server/index.js +2 -2
- package/build/server/manifest.js +117 -89
- package/build/server/manifest.js.map +1 -1
- package/package.json +4 -2
- package/build/client/_app/immutable/assets/4.D-9LGiQD.css +0 -1
- package/build/client/_app/immutable/assets/4.D-9LGiQD.css.br +0 -0
- package/build/client/_app/immutable/assets/4.D-9LGiQD.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BXh0hlRI.js +0 -1
- package/build/client/_app/immutable/chunks/BXh0hlRI.js.br +0 -0
- package/build/client/_app/immutable/chunks/BXh0hlRI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BihYGk9Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/BihYGk9Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C5EI77dn.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMRs-cy6.js +0 -5
- package/build/client/_app/immutable/chunks/CMRs-cy6.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMRs-cy6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D6NbA5vY.js.br +0 -0
- package/build/client/_app/immutable/chunks/D6NbA5vY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/lIgyewlB.js +0 -1
- package/build/client/_app/immutable/chunks/lIgyewlB.js.br +0 -2
- package/build/client/_app/immutable/chunks/lIgyewlB.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.D4HjSNXN.js.br +0 -0
- package/build/client/_app/immutable/entry/app.D4HjSNXN.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BBmWGrcI.js +0 -1
- package/build/client/_app/immutable/entry/start.BBmWGrcI.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BBmWGrcI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DEcud9DA.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DEcud9DA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Cv1FI9RA.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.Cv1FI9RA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.0ZfV2HFJ.js +0 -120
- package/build/client/_app/immutable/nodes/4.0ZfV2HFJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.0ZfV2HFJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.B_jsAXs5.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.B_jsAXs5.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CD18u_qC.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CD18u_qC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.BXyjSbT8.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.BXyjSbT8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CDTwcjzi.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CDTwcjzi.js.gz +0 -0
- package/build/server/chunks/1-CVcQJtBc.js +0 -9
- package/build/server/chunks/4-CTyDAO7N.js +0 -9
- package/build/server/chunks/5-BXILJ_BC.js +0 -9
- package/build/server/chunks/6-HdFbhR1m.js +0 -9
- package/build/server/chunks/7-k9H-eD_d.js +0 -9
- package/build/server/chunks/_page.svelte-BsDNnBfz.js.map +0 -1
- package/build/server/chunks/_server.ts-B409KD6U.js.map +0 -1
- package/build/server/chunks/_server.ts-BEdChB0B.js.map +0 -1
- package/build/server/chunks/_server.ts-BfpKWyaE.js.map +0 -1
- package/build/server/chunks/_server.ts-D2YDAvSW.js.map +0 -1
- package/build/server/chunks/_server.ts-Df_d0aal.js.map +0 -1
- package/build/server/chunks/_server.ts-JWoayilI.js.map +0 -1
- package/build/server/chunks/src-CHZNd5cO.js.map +0 -1
- package/build/server/chunks/theme-state.svelte-CUVpUHOv.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as __commonJSMin, b as __require } from './chunk-CLZ62Ad-.js';
|
|
2
2
|
import { P as PROVIDER_DEFAULT_URLS, a as PROVIDER_KEY_MAP } from './provider-constants-DPrj3yBX.js';
|
|
3
3
|
import { r as require_dist } from './dist-DOFcG0Zp.js';
|
|
4
|
-
import Vt, { existsSync, readFileSync, copyFileSync, chmodSync, mkdirSync, lstatSync, rmSync, readdirSync, writeFileSync, renameSync, statSync, cpSync, openSync, constants, writeSync, closeSync, chownSync, realpathSync } from 'node:fs';
|
|
4
|
+
import Vt, { existsSync, readFileSync, copyFileSync, chmodSync, mkdirSync, lstatSync, rmSync, readdirSync, writeFileSync, renameSync, statSync, statfsSync, cpSync, openSync, constants, writeSync, closeSync, chownSync, realpathSync } from 'node:fs';
|
|
5
5
|
import or, { join, basename, dirname, resolve, win32, posix } from 'node:path';
|
|
6
6
|
import { Buffer as Buffer$1 } from 'buffer';
|
|
7
7
|
import I from 'fs';
|
|
@@ -96,6 +96,84 @@ function timestampDirName(now = /* @__PURE__ */ new Date()) {
|
|
|
96
96
|
return now.toISOString().replace(/[:.]/g, "-");
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
+
* Recursively sum the apparent size (in bytes) of every file under `path`,
|
|
100
|
+
* excluding the existing backups directory (we never back up backups).
|
|
101
|
+
*
|
|
102
|
+
* Cheap enough for a pre-backup estimate; errors on individual entries are
|
|
103
|
+
* skipped (a transient unreadable file should not block the safety copy).
|
|
104
|
+
*/
|
|
105
|
+
function estimateHomeBackupBytes(homeDir) {
|
|
106
|
+
if (!existsSync(homeDir)) return 0;
|
|
107
|
+
const backupsDir = join(homeDir, "data", "backups");
|
|
108
|
+
let total = 0;
|
|
109
|
+
const walk = (dir) => {
|
|
110
|
+
let entries;
|
|
111
|
+
try {
|
|
112
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
113
|
+
} catch {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
for (const entry of entries) {
|
|
117
|
+
const full = join(dir, entry.name);
|
|
118
|
+
if (full === backupsDir) continue;
|
|
119
|
+
if (entry.isDirectory()) walk(full);
|
|
120
|
+
else if (entry.isFile()) try {
|
|
121
|
+
total += statSync(full).size;
|
|
122
|
+
} catch {}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
walk(homeDir);
|
|
126
|
+
return total;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Estimate whether a full-home backup would fit safely on disk.
|
|
130
|
+
*
|
|
131
|
+
* Returns a structured result; the caller decides whether to warn, block, or
|
|
132
|
+
* (with explicit confirmation) proceed. This NEVER deletes anything — it only
|
|
133
|
+
* measures. `threshold` is the fraction of currently-free space the backup may
|
|
134
|
+
* consume before it is flagged `insufficient` (default 80%).
|
|
135
|
+
*/
|
|
136
|
+
function checkBackupFreeSpace(homeDir, threshold = .8) {
|
|
137
|
+
const estimatedBytes = estimateHomeBackupBytes(homeDir);
|
|
138
|
+
let freeBytes = Number.POSITIVE_INFINITY;
|
|
139
|
+
try {
|
|
140
|
+
const stat = statfsSync(homeDir);
|
|
141
|
+
freeBytes = stat.bavail * stat.bsize;
|
|
142
|
+
} catch {}
|
|
143
|
+
const ratio = freeBytes > 0 ? estimatedBytes / freeBytes : Number.POSITIVE_INFINITY;
|
|
144
|
+
return {
|
|
145
|
+
estimatedBytes,
|
|
146
|
+
freeBytes,
|
|
147
|
+
ratio,
|
|
148
|
+
insufficient: estimatedBytes > freeBytes * threshold,
|
|
149
|
+
threshold
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function formatBytes(bytes) {
|
|
153
|
+
if (!Number.isFinite(bytes)) return "unknown";
|
|
154
|
+
const units = [
|
|
155
|
+
"B",
|
|
156
|
+
"KB",
|
|
157
|
+
"MB",
|
|
158
|
+
"GB",
|
|
159
|
+
"TB"
|
|
160
|
+
];
|
|
161
|
+
let value = bytes;
|
|
162
|
+
let i = 0;
|
|
163
|
+
while (value >= 1024 && i < units.length - 1) {
|
|
164
|
+
value /= 1024;
|
|
165
|
+
i += 1;
|
|
166
|
+
}
|
|
167
|
+
return `${value.toFixed(value >= 10 || i === 0 ? 0 : 1)} ${units[i]}`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Human-readable, plain-language explanation of a low-free-space situation,
|
|
171
|
+
* suitable for a CLI warning or a UI notice.
|
|
172
|
+
*/
|
|
173
|
+
function describeBackupSpaceShortfall(check) {
|
|
174
|
+
return `The safety backup is estimated at ${formatBytes(check.estimatedBytes)}, but only ${formatBytes(check.freeBytes)} is free on this disk. Backing up could fill the disk. Free up space (your old backups are under data/backups/ — review them with \`openpalm backups list\`), or re-run with confirmation to proceed anyway. Nothing was changed or deleted.`;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
99
177
|
* Create a durable backup snapshot of the current OP_HOME contents.
|
|
100
178
|
*
|
|
101
179
|
* The backup is written under OP_HOME/data/backups/<timestamp>/ and excludes
|
|
@@ -123,6 +201,62 @@ function backupOpenPalmHome(homeDir) {
|
|
|
123
201
|
}
|
|
124
202
|
return copiedAny ? backupDir : null;
|
|
125
203
|
}
|
|
204
|
+
function listBackupDirs(homeDir) {
|
|
205
|
+
const backupsDir = join(homeDir, "data", "backups");
|
|
206
|
+
if (!existsSync(backupsDir)) return [];
|
|
207
|
+
return readdirSync(backupsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => join(backupsDir, entry.name)).sort((a, b) => b.localeCompare(a));
|
|
208
|
+
}
|
|
209
|
+
function dirSizeBytes(dir) {
|
|
210
|
+
let total = 0;
|
|
211
|
+
let entries;
|
|
212
|
+
try {
|
|
213
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
214
|
+
} catch {
|
|
215
|
+
return 0;
|
|
216
|
+
}
|
|
217
|
+
for (const entry of entries) {
|
|
218
|
+
const full = join(dir, entry.name);
|
|
219
|
+
if (entry.isDirectory()) total += dirSizeBytes(full);
|
|
220
|
+
else if (entry.isFile()) try {
|
|
221
|
+
total += statSync(full).size;
|
|
222
|
+
} catch {}
|
|
223
|
+
}
|
|
224
|
+
return total;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Summarize the upgrade backup snapshots for UI visibility (count, total size,
|
|
228
|
+
* last-backup time, per-backup sizes). Read-only — never deletes anything.
|
|
229
|
+
*/
|
|
230
|
+
function summarizeBackups(homeDir) {
|
|
231
|
+
const backups = listBackupDirs(homeDir).map((path) => {
|
|
232
|
+
let createdAt = "";
|
|
233
|
+
try {
|
|
234
|
+
createdAt = statSync(path).mtime.toISOString();
|
|
235
|
+
} catch {}
|
|
236
|
+
return {
|
|
237
|
+
path,
|
|
238
|
+
name: path.slice(path.lastIndexOf("/") + 1),
|
|
239
|
+
sizeBytes: dirSizeBytes(path),
|
|
240
|
+
createdAt
|
|
241
|
+
};
|
|
242
|
+
});
|
|
243
|
+
const totalBytes = backups.reduce((sum, b) => sum + b.sizeBytes, 0);
|
|
244
|
+
return {
|
|
245
|
+
count: backups.length,
|
|
246
|
+
totalBytes,
|
|
247
|
+
lastBackupAt: backups[0]?.createdAt || null,
|
|
248
|
+
backups
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
function pruneBackupDirs(homeDir, keep) {
|
|
252
|
+
if (!Number.isInteger(keep) || keep < 0) throw new Error("keep must be a non-negative integer");
|
|
253
|
+
const toDelete = listBackupDirs(homeDir).slice(keep);
|
|
254
|
+
for (const backupDir of toDelete) rmSync(backupDir, {
|
|
255
|
+
recursive: true,
|
|
256
|
+
force: true
|
|
257
|
+
});
|
|
258
|
+
return toDelete;
|
|
259
|
+
}
|
|
126
260
|
//#endregion
|
|
127
261
|
//#region ../lib/src/control-plane/install-lock.ts
|
|
128
262
|
var import_dist = require_dist();
|
|
@@ -249,6 +383,79 @@ function acquireInstallLock(dataDir) {
|
|
|
249
383
|
}
|
|
250
384
|
return null;
|
|
251
385
|
}
|
|
386
|
+
var INSTALL_LOCK_STALE_AFTER_MS = STALE_AFTER_MS;
|
|
387
|
+
/**
|
|
388
|
+
* Inspect the install lock under `dataDir` without modifying it. Used by the
|
|
389
|
+
* `openpalm unlock` command and the UI "operation stuck?" affordance to decide
|
|
390
|
+
* whether a removal is safe.
|
|
391
|
+
*/
|
|
392
|
+
function inspectInstallLock(dataDir) {
|
|
393
|
+
const path = join(dataDir, ".install.lock");
|
|
394
|
+
let content;
|
|
395
|
+
try {
|
|
396
|
+
content = readFileSync(path, "utf-8");
|
|
397
|
+
} catch (err) {
|
|
398
|
+
if (err.code === "ENOENT") return {
|
|
399
|
+
present: false,
|
|
400
|
+
path
|
|
401
|
+
};
|
|
402
|
+
let ageMs = null;
|
|
403
|
+
try {
|
|
404
|
+
ageMs = Date.now() - statSync(path).mtimeMs;
|
|
405
|
+
} catch {}
|
|
406
|
+
return {
|
|
407
|
+
present: true,
|
|
408
|
+
path,
|
|
409
|
+
pid: null,
|
|
410
|
+
timestamp: null,
|
|
411
|
+
ageMs,
|
|
412
|
+
stale: isStale(path)
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
const { pid, timestamp } = parseLockContent(content);
|
|
416
|
+
return {
|
|
417
|
+
present: true,
|
|
418
|
+
path,
|
|
419
|
+
pid,
|
|
420
|
+
timestamp,
|
|
421
|
+
ageMs: timestamp !== null ? Date.now() - timestamp : null,
|
|
422
|
+
stale: isStale(path)
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Remove the install lock ONLY if it is stale (dead holder PID or older than
|
|
427
|
+
* the 30-minute staleness window). Never blind-removes a lock held by a live,
|
|
428
|
+
* recent install. Returns `{ ok: false, reason: "live" }` when the lock is
|
|
429
|
+
* still active so the caller can surface a clear message instead of forcing.
|
|
430
|
+
*/
|
|
431
|
+
function unlockInstallLock(dataDir) {
|
|
432
|
+
const status = inspectInstallLock(dataDir);
|
|
433
|
+
if (!status.present) return {
|
|
434
|
+
ok: true,
|
|
435
|
+
removed: false,
|
|
436
|
+
status
|
|
437
|
+
};
|
|
438
|
+
if (!status.stale) return {
|
|
439
|
+
ok: false,
|
|
440
|
+
reason: "live",
|
|
441
|
+
status
|
|
442
|
+
};
|
|
443
|
+
try {
|
|
444
|
+
rmSync(status.path, { force: true });
|
|
445
|
+
logger$11.info("removed stale install lock via unlock", { path: status.path });
|
|
446
|
+
} catch (err) {
|
|
447
|
+
logger$11.warn("failed to remove stale install lock during unlock", {
|
|
448
|
+
path: status.path,
|
|
449
|
+
error: err instanceof Error ? err.message : String(err)
|
|
450
|
+
});
|
|
451
|
+
throw err;
|
|
452
|
+
}
|
|
453
|
+
return {
|
|
454
|
+
ok: true,
|
|
455
|
+
removed: true,
|
|
456
|
+
status
|
|
457
|
+
};
|
|
458
|
+
}
|
|
252
459
|
function releaseInstallLock(handle) {
|
|
253
460
|
if (!handle) return;
|
|
254
461
|
try {
|
|
@@ -261,7 +468,7 @@ function releaseInstallLock(handle) {
|
|
|
261
468
|
}
|
|
262
469
|
}
|
|
263
470
|
//#endregion
|
|
264
|
-
//#region ../lib/
|
|
471
|
+
//#region ../lib/package.json
|
|
265
472
|
var import_main = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
266
473
|
var fs$1 = __require("fs");
|
|
267
474
|
var path = __require("path");
|
|
@@ -529,6 +736,119 @@ var import_main = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
529
736
|
module.exports.populate = DotenvModule.populate;
|
|
530
737
|
module.exports = DotenvModule;
|
|
531
738
|
})))();
|
|
739
|
+
var package_default = {
|
|
740
|
+
version: "0.12.0-rc.3"};
|
|
741
|
+
//#endregion
|
|
742
|
+
//#region ../lib/src/control-plane/versioning.ts
|
|
743
|
+
var SEMVER_RE = /^v?\d+\.\d+\.\d+(?:[-+].*)?$/;
|
|
744
|
+
/**
|
|
745
|
+
* The canonical control-plane / platform version.
|
|
746
|
+
*
|
|
747
|
+
* This is the ONE source of truth for "which @openpalm/lib (and therefore which
|
|
748
|
+
* RELEASE_MIGRATIONS + lifecycle) is running." It travels with the data/ui
|
|
749
|
+
* build (the published @openpalm/ui inlines this lib), so it self-updates in
|
|
750
|
+
* place — it is NOT the Electron harness version (see
|
|
751
|
+
* packages/electron/src/harness-contract.ts: HARNESS_CONTRACT_VERSION).
|
|
752
|
+
*
|
|
753
|
+
* Stored Docker-canonical (`v`-prefixed) because every consumer that stamps a
|
|
754
|
+
* version into stack.env / a skeleton / a migration target wants the Docker tag
|
|
755
|
+
* form. Use `formatForDisplay` for user-facing strings and `normalizeVersion`
|
|
756
|
+
* for npm-style (no-`v`) comparisons.
|
|
757
|
+
*
|
|
758
|
+
* Replaces the former implicit `v${libPkg.version}` scattered through lifecycle
|
|
759
|
+
* / migrations so the platform version has a single, named home.
|
|
760
|
+
*/
|
|
761
|
+
var PLATFORM_VERSION = formatForDocker(package_default.version);
|
|
762
|
+
function isComparableSemver(version) {
|
|
763
|
+
return !!version && SEMVER_RE.test(version.trim());
|
|
764
|
+
}
|
|
765
|
+
function parseComparableVersion(version) {
|
|
766
|
+
const clean = normalizeVersion(version).split("+")[0];
|
|
767
|
+
const dashIdx = clean.indexOf("-");
|
|
768
|
+
const main = dashIdx === -1 ? clean : clean.slice(0, dashIdx);
|
|
769
|
+
const prerelease = dashIdx === -1 ? null : clean.slice(dashIdx + 1);
|
|
770
|
+
const [major = 0, minor = 0, patch = 0] = main.split(".").map(Number);
|
|
771
|
+
return {
|
|
772
|
+
major,
|
|
773
|
+
minor,
|
|
774
|
+
patch,
|
|
775
|
+
prerelease
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
function comparePrerelease(a, b) {
|
|
779
|
+
const aParts = a.split(".");
|
|
780
|
+
const bParts = b.split(".");
|
|
781
|
+
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
782
|
+
if (i >= aParts.length) return -1;
|
|
783
|
+
if (i >= bParts.length) return 1;
|
|
784
|
+
const aNum = Number(aParts[i]);
|
|
785
|
+
const bNum = Number(bParts[i]);
|
|
786
|
+
const aIsNum = !Number.isNaN(aNum);
|
|
787
|
+
const bIsNum = !Number.isNaN(bNum);
|
|
788
|
+
if (aIsNum && bIsNum) {
|
|
789
|
+
if (aNum !== bNum) return aNum > bNum ? 1 : -1;
|
|
790
|
+
continue;
|
|
791
|
+
}
|
|
792
|
+
if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;
|
|
793
|
+
if (aParts[i] !== bParts[i]) return aParts[i] > bParts[i] ? 1 : -1;
|
|
794
|
+
}
|
|
795
|
+
return 0;
|
|
796
|
+
}
|
|
797
|
+
function compareComparableVersions(a, b) {
|
|
798
|
+
const aParsed = parseComparableVersion(a);
|
|
799
|
+
const bParsed = parseComparableVersion(b);
|
|
800
|
+
if (aParsed.major !== bParsed.major) return aParsed.major > bParsed.major ? 1 : -1;
|
|
801
|
+
if (aParsed.minor !== bParsed.minor) return aParsed.minor > bParsed.minor ? 1 : -1;
|
|
802
|
+
if (aParsed.patch !== bParsed.patch) return aParsed.patch > bParsed.patch ? 1 : -1;
|
|
803
|
+
if (aParsed.prerelease === null && bParsed.prerelease !== null) return 1;
|
|
804
|
+
if (aParsed.prerelease !== null && bParsed.prerelease === null) return -1;
|
|
805
|
+
if (aParsed.prerelease !== null && bParsed.prerelease !== null) return comparePrerelease(aParsed.prerelease, bParsed.prerelease);
|
|
806
|
+
return 0;
|
|
807
|
+
}
|
|
808
|
+
function majorVersionOf(version) {
|
|
809
|
+
if (!isComparableSemver(version)) return null;
|
|
810
|
+
return parseComparableVersion(version).major;
|
|
811
|
+
}
|
|
812
|
+
function isSameMajorVersion(a, b) {
|
|
813
|
+
const aMajor = majorVersionOf(a);
|
|
814
|
+
const bMajor = majorVersionOf(b);
|
|
815
|
+
return aMajor !== null && bMajor !== null && aMajor === bMajor;
|
|
816
|
+
}
|
|
817
|
+
/**
|
|
818
|
+
* npm/display form: strip a single leading `v` and trim. `v0.12.0` → `0.12.0`.
|
|
819
|
+
* Pass-through for an already-bare version. Empty/whitespace → ''.
|
|
820
|
+
*/
|
|
821
|
+
function normalizeVersion(version) {
|
|
822
|
+
return (version ?? "").trim().replace(/^v/, "");
|
|
823
|
+
}
|
|
824
|
+
/**
|
|
825
|
+
* Docker-tag form: ensure exactly one leading `v`. `0.12.0` → `v0.12.0`,
|
|
826
|
+
* `v0.12.0` → `v0.12.0`. Empty/whitespace → '' (callers gate on RELEASE_TAG_REGEX
|
|
827
|
+
* before treating a value as a real tag).
|
|
828
|
+
*/
|
|
829
|
+
function formatForDocker(version) {
|
|
830
|
+
const bare = normalizeVersion(version);
|
|
831
|
+
return bare ? `v${bare}` : "";
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* True when `version` carries a semver pre-release segment (`0.12.0-rc.1`).
|
|
835
|
+
* Build metadata (`+build.5`) is NOT a pre-release. Non-semver → false.
|
|
836
|
+
*/
|
|
837
|
+
function isPrerelease(version) {
|
|
838
|
+
if (!isComparableSemver(version)) return false;
|
|
839
|
+
return parseComparableVersion(version).prerelease !== null;
|
|
840
|
+
}
|
|
841
|
+
/**
|
|
842
|
+
* User-facing presentation form: drop the leading `v` so the UI shows one
|
|
843
|
+
* canonical spelling regardless of whether the value arrived as a Docker tag or
|
|
844
|
+
* an npm version. Non-semver values are returned trimmed but otherwise untouched
|
|
845
|
+
* (e.g. a moving `latest`/`dev` tag).
|
|
846
|
+
*/
|
|
847
|
+
function formatForDisplay(version) {
|
|
848
|
+
return normalizeVersion(version);
|
|
849
|
+
}
|
|
850
|
+
//#endregion
|
|
851
|
+
//#region ../lib/src/control-plane/env.ts
|
|
532
852
|
function parseEnvContent(content) {
|
|
533
853
|
return (0, import_main.parse)(content);
|
|
534
854
|
}
|
|
@@ -675,64 +995,6 @@ function buildPlatformImageTagEnv(tag, perImage, pinnedImages = []) {
|
|
|
675
995
|
};
|
|
676
996
|
}
|
|
677
997
|
//#endregion
|
|
678
|
-
//#region ../lib/src/control-plane/versioning.ts
|
|
679
|
-
var SEMVER_RE = /^v?\d+\.\d+\.\d+(?:[-+].*)?$/;
|
|
680
|
-
function isComparableSemver(version) {
|
|
681
|
-
return !!version && SEMVER_RE.test(version.trim());
|
|
682
|
-
}
|
|
683
|
-
function parseComparableVersion(version) {
|
|
684
|
-
const clean = version.trim().replace(/^v/, "").split("+")[0];
|
|
685
|
-
const dashIdx = clean.indexOf("-");
|
|
686
|
-
const main = dashIdx === -1 ? clean : clean.slice(0, dashIdx);
|
|
687
|
-
const prerelease = dashIdx === -1 ? null : clean.slice(dashIdx + 1);
|
|
688
|
-
const [major = 0, minor = 0, patch = 0] = main.split(".").map(Number);
|
|
689
|
-
return {
|
|
690
|
-
major,
|
|
691
|
-
minor,
|
|
692
|
-
patch,
|
|
693
|
-
prerelease
|
|
694
|
-
};
|
|
695
|
-
}
|
|
696
|
-
function comparePrerelease(a, b) {
|
|
697
|
-
const aParts = a.split(".");
|
|
698
|
-
const bParts = b.split(".");
|
|
699
|
-
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
700
|
-
if (i >= aParts.length) return -1;
|
|
701
|
-
if (i >= bParts.length) return 1;
|
|
702
|
-
const aNum = Number(aParts[i]);
|
|
703
|
-
const bNum = Number(bParts[i]);
|
|
704
|
-
const aIsNum = !Number.isNaN(aNum);
|
|
705
|
-
const bIsNum = !Number.isNaN(bNum);
|
|
706
|
-
if (aIsNum && bIsNum) {
|
|
707
|
-
if (aNum !== bNum) return aNum > bNum ? 1 : -1;
|
|
708
|
-
continue;
|
|
709
|
-
}
|
|
710
|
-
if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;
|
|
711
|
-
if (aParts[i] !== bParts[i]) return aParts[i] > bParts[i] ? 1 : -1;
|
|
712
|
-
}
|
|
713
|
-
return 0;
|
|
714
|
-
}
|
|
715
|
-
function compareComparableVersions(a, b) {
|
|
716
|
-
const aParsed = parseComparableVersion(a);
|
|
717
|
-
const bParsed = parseComparableVersion(b);
|
|
718
|
-
if (aParsed.major !== bParsed.major) return aParsed.major > bParsed.major ? 1 : -1;
|
|
719
|
-
if (aParsed.minor !== bParsed.minor) return aParsed.minor > bParsed.minor ? 1 : -1;
|
|
720
|
-
if (aParsed.patch !== bParsed.patch) return aParsed.patch > bParsed.patch ? 1 : -1;
|
|
721
|
-
if (aParsed.prerelease === null && bParsed.prerelease !== null) return 1;
|
|
722
|
-
if (aParsed.prerelease !== null && bParsed.prerelease === null) return -1;
|
|
723
|
-
if (aParsed.prerelease !== null && bParsed.prerelease !== null) return comparePrerelease(aParsed.prerelease, bParsed.prerelease);
|
|
724
|
-
return 0;
|
|
725
|
-
}
|
|
726
|
-
function majorVersionOf(version) {
|
|
727
|
-
if (!isComparableSemver(version)) return null;
|
|
728
|
-
return parseComparableVersion(version).major;
|
|
729
|
-
}
|
|
730
|
-
function isSameMajorVersion(a, b) {
|
|
731
|
-
const aMajor = majorVersionOf(a);
|
|
732
|
-
const bMajor = majorVersionOf(b);
|
|
733
|
-
return aMajor !== null && bMajor !== null && aMajor === bMajor;
|
|
734
|
-
}
|
|
735
|
-
//#endregion
|
|
736
998
|
//#region ../lib/src/control-plane/migrations.ts
|
|
737
999
|
/**
|
|
738
1000
|
* On-disk layout migration harness.
|
|
@@ -767,6 +1029,22 @@ var MigrationError = class extends Error {
|
|
|
767
1029
|
this.name = "MigrationError";
|
|
768
1030
|
}
|
|
769
1031
|
};
|
|
1032
|
+
/**
|
|
1033
|
+
* Thrown when the pre-backup free-space check estimates the safety backup would
|
|
1034
|
+
* exceed a safe fraction of free disk. Surfaced so callers (CLI/UI) can present
|
|
1035
|
+
* a plain-language warning and re-run with explicit confirmation. NOTHING is
|
|
1036
|
+
* deleted — the migration aborts cleanly with no changes made.
|
|
1037
|
+
*/
|
|
1038
|
+
var BackupSpaceError = class extends MigrationError {
|
|
1039
|
+
estimatedBytes;
|
|
1040
|
+
freeBytes;
|
|
1041
|
+
constructor(message, guidance, estimatedBytes, freeBytes) {
|
|
1042
|
+
super(message, guidance, null);
|
|
1043
|
+
this.estimatedBytes = estimatedBytes;
|
|
1044
|
+
this.freeBytes = freeBytes;
|
|
1045
|
+
this.name = "BackupSpaceError";
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
770
1048
|
var RELEASE_VERSION_KEY = "OP_RELEASE_VERSION";
|
|
771
1049
|
function resolveMigrationPaths(homeDir) {
|
|
772
1050
|
return {
|
|
@@ -1218,7 +1496,7 @@ var RELEASE_MIGRATIONS = [
|
|
|
1218
1496
|
verify(ctx) {}
|
|
1219
1497
|
}
|
|
1220
1498
|
];
|
|
1221
|
-
var RECOVERY_GUIDANCE = "Your original files were left untouched and a full backup was taken first.
|
|
1499
|
+
var RECOVERY_GUIDANCE = "Your original files were left untouched and a full backup was taken first. If something went wrong, run `openpalm rollback` to restore your previous state, or restore the backup manually (see docs/operations/backup-restore.md). You can also run `openpalm migrate --dry-run` to preview the current copy-only migration. Full guide: docs/operations/upgrade-0.10-to-0.11.md";
|
|
1222
1500
|
function resolveComparableReleaseTarget(rawVersion) {
|
|
1223
1501
|
if (!rawVersion) return null;
|
|
1224
1502
|
return isComparableSemver(rawVersion) ? rawVersion : null;
|
|
@@ -1256,6 +1534,7 @@ function runReleaseMigrations(ctxBase, releaseFrom, targetVersion) {
|
|
|
1256
1534
|
function ensureMigrated(opts = {}) {
|
|
1257
1535
|
const homeDir = opts.homeDir ? resolve(opts.homeDir) : process.env.OP_HOME ? resolve(process.env.OP_HOME) : resolve(process.env.HOME ?? "", ".openpalm");
|
|
1258
1536
|
const dryRun = opts.dryRun ?? false;
|
|
1537
|
+
const confirmLowSpace = opts.confirmLowSpace ?? false;
|
|
1259
1538
|
const log = opts.log ?? (() => {});
|
|
1260
1539
|
const ctxBase = {
|
|
1261
1540
|
...resolveMigrationPaths(homeDir),
|
|
@@ -1299,6 +1578,8 @@ function ensureMigrated(opts = {}) {
|
|
|
1299
1578
|
}
|
|
1300
1579
|
lock = acquireInstallLock(ctxBase.dataDir);
|
|
1301
1580
|
if (!lock) throw new MigrationError("Another install/upgrade is in progress.", RECOVERY_GUIDANCE, null);
|
|
1581
|
+
const spaceCheck = checkBackupFreeSpace(homeDir);
|
|
1582
|
+
if (spaceCheck.insufficient && !confirmLowSpace) throw new BackupSpaceError(describeBackupSpaceShortfall(spaceCheck), RECOVERY_GUIDANCE, spaceCheck.estimatedBytes, spaceCheck.freeBytes);
|
|
1302
1583
|
log("Taking a full backup before migrating…");
|
|
1303
1584
|
try {
|
|
1304
1585
|
backupDir = backupOpenPalmHome(homeDir);
|
|
@@ -4734,10 +5015,6 @@ function resolveLocalOpenpalmDir() {
|
|
|
4734
5015
|
*/
|
|
4735
5016
|
var NPM_REGISTRY = "https://registry.npmjs.org";
|
|
4736
5017
|
var UI_PACKAGE = "@openpalm/ui";
|
|
4737
|
-
/** Strip a single leading 'v' so a release ref (v1.2.3) becomes an npm version (1.2.3). */
|
|
4738
|
-
function toNpmVersion(repoRef) {
|
|
4739
|
-
return repoRef.replace(/^v/, "");
|
|
4740
|
-
}
|
|
4741
5018
|
/**
|
|
4742
5019
|
* Resolve the npm manifest for `@openpalm/ui` by exact version OR dist-tag.
|
|
4743
5020
|
* `GET <registry>/@openpalm/ui/<version-or-tag>` returns the abbreviated
|
|
@@ -4748,10 +5025,13 @@ async function fetchNpmUiManifest(versionOrTag) {
|
|
|
4748
5025
|
if (!res.ok) throw new Error(`npm registry returned HTTP ${res.status} for ${UI_PACKAGE}@${versionOrTag}`);
|
|
4749
5026
|
const m = await res.json();
|
|
4750
5027
|
if (!m.version || !m.dist?.tarball) throw new Error(`npm manifest for ${UI_PACKAGE}@${versionOrTag} is missing version/dist.tarball`);
|
|
5028
|
+
const rawMin = typeof m.minHarnessContract === "number" ? m.minHarnessContract : Number(m.minHarnessContract);
|
|
5029
|
+
const minHarnessContract = Number.isFinite(rawMin) && rawMin > 0 ? rawMin : 0;
|
|
4751
5030
|
return {
|
|
4752
5031
|
version: m.version,
|
|
4753
5032
|
tarball: m.dist.tarball,
|
|
4754
|
-
integrity: m.dist.integrity ?? null
|
|
5033
|
+
integrity: m.dist.integrity ?? null,
|
|
5034
|
+
minHarnessContract
|
|
4755
5035
|
};
|
|
4756
5036
|
}
|
|
4757
5037
|
/**
|
|
@@ -4828,7 +5108,7 @@ async function downloadNpmUiBundle(manifest, uiDir, dataDir) {
|
|
|
4828
5108
|
async function seedUiBuild(repoRef, dataDir, options) {
|
|
4829
5109
|
const uiDir = join(dataDir, "ui");
|
|
4830
5110
|
mkdirSync(uiDir, { recursive: true });
|
|
4831
|
-
const manifest = await fetchNpmUiManifest(
|
|
5111
|
+
const manifest = await fetchNpmUiManifest(normalizeVersion(repoRef));
|
|
4832
5112
|
logger$9.debug("downloading UI build from npm", { version: manifest.version });
|
|
4833
5113
|
await downloadNpmUiBundle(manifest, uiDir, dataDir);
|
|
4834
5114
|
}
|
|
@@ -5282,20 +5562,84 @@ function writeSystemEnv(state) {
|
|
|
5282
5562
|
if (!hasUsableOperatorId(parsed, "OP_GID")) adminManaged.OP_GID = String(ids.gid);
|
|
5283
5563
|
}
|
|
5284
5564
|
if (!parsed.OP_HOME) adminManaged.OP_HOME = state.homeDir;
|
|
5285
|
-
|
|
5565
|
+
const { content: strippedBase, removed } = stripSecretLikeEnvKeys(base);
|
|
5566
|
+
base = strippedBase;
|
|
5567
|
+
if (removed.length > 0) {
|
|
5568
|
+
logger$7.warn("Removed secret-looking keys from stack.env (they belong in Connections/secrets)", {
|
|
5569
|
+
removedKeys: removed,
|
|
5570
|
+
stackEnvPath: systemEnvPath
|
|
5571
|
+
});
|
|
5572
|
+
recordSecretStripNotice(state, removed);
|
|
5573
|
+
}
|
|
5286
5574
|
assertNoSecretLikeStackEnvKeys(parseEnvContent(base));
|
|
5287
5575
|
assertNoSecretLikeStackEnvKeys(adminManaged);
|
|
5288
5576
|
writeFileSync(systemEnvPath, mergeEnvContent(base, adminManaged, { sectionHeader: "# ── Admin-managed ──────────────────────────────────────────────────" }), { mode: 384 });
|
|
5289
5577
|
chmodSync(systemEnvPath, 384);
|
|
5290
5578
|
}
|
|
5291
5579
|
function stripSecretLikeEnvKeys(content) {
|
|
5292
|
-
|
|
5293
|
-
|
|
5294
|
-
|
|
5295
|
-
|
|
5296
|
-
|
|
5297
|
-
|
|
5298
|
-
|
|
5580
|
+
const removed = [];
|
|
5581
|
+
return {
|
|
5582
|
+
content: content.split("\n").filter((line) => {
|
|
5583
|
+
let trimmed = line.trim();
|
|
5584
|
+
if (trimmed.startsWith("export ")) trimmed = trimmed.slice(7).trimStart();
|
|
5585
|
+
const eq = trimmed.indexOf("=");
|
|
5586
|
+
if (eq <= 0) return true;
|
|
5587
|
+
const key = trimmed.slice(0, eq).trim();
|
|
5588
|
+
if (isSecretLikeStackEnvKey(key)) {
|
|
5589
|
+
removed.push(key);
|
|
5590
|
+
return false;
|
|
5591
|
+
}
|
|
5592
|
+
return true;
|
|
5593
|
+
}).join("\n"),
|
|
5594
|
+
removed
|
|
5595
|
+
};
|
|
5596
|
+
}
|
|
5597
|
+
/**
|
|
5598
|
+
* Path of the one-time "secret-looking values were removed from stack.env"
|
|
5599
|
+
* notice the UI reads and dismisses.
|
|
5600
|
+
*/
|
|
5601
|
+
function secretStripNoticePath(state) {
|
|
5602
|
+
return `${state.dataDir}/secret-strip-notice.json`;
|
|
5603
|
+
}
|
|
5604
|
+
function recordSecretStripNotice(state, newlyRemoved) {
|
|
5605
|
+
const path = secretStripNoticePath(state);
|
|
5606
|
+
let keys = new Set(newlyRemoved);
|
|
5607
|
+
if (existsSync(path)) try {
|
|
5608
|
+
const prior = JSON.parse(readFileSync(path, "utf-8"));
|
|
5609
|
+
if (Array.isArray(prior.keys)) keys = new Set([...prior.keys, ...newlyRemoved]);
|
|
5610
|
+
} catch {}
|
|
5611
|
+
const notice = {
|
|
5612
|
+
keys: [...keys].sort(),
|
|
5613
|
+
at: (/* @__PURE__ */ new Date()).toISOString()
|
|
5614
|
+
};
|
|
5615
|
+
try {
|
|
5616
|
+
mkdirSync(state.dataDir, { recursive: true });
|
|
5617
|
+
writeFileSync(path, JSON.stringify(notice, null, 2));
|
|
5618
|
+
} catch (e) {
|
|
5619
|
+
logger$7.warn("Could not persist secret-strip notice", { error: e instanceof Error ? e.message : String(e) });
|
|
5620
|
+
}
|
|
5621
|
+
}
|
|
5622
|
+
/** Read the pending secret-strip notice, or null when there is none. */
|
|
5623
|
+
function readSecretStripNotice(state) {
|
|
5624
|
+
const path = secretStripNoticePath(state);
|
|
5625
|
+
if (!existsSync(path)) return null;
|
|
5626
|
+
try {
|
|
5627
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
5628
|
+
if (Array.isArray(parsed.keys) && parsed.keys.length > 0 && typeof parsed.at === "string") return {
|
|
5629
|
+
keys: parsed.keys,
|
|
5630
|
+
at: parsed.at
|
|
5631
|
+
};
|
|
5632
|
+
} catch {}
|
|
5633
|
+
return null;
|
|
5634
|
+
}
|
|
5635
|
+
/** Dismiss (delete) the pending secret-strip notice. */
|
|
5636
|
+
function dismissSecretStripNotice(state) {
|
|
5637
|
+
const path = secretStripNoticePath(state);
|
|
5638
|
+
if (existsSync(path)) try {
|
|
5639
|
+
rmSync(path);
|
|
5640
|
+
} catch (e) {
|
|
5641
|
+
logger$7.warn("Could not dismiss secret-strip notice", { error: e instanceof Error ? e.message : String(e) });
|
|
5642
|
+
}
|
|
5299
5643
|
}
|
|
5300
5644
|
function generateFallbackSystemEnv(state) {
|
|
5301
5645
|
const ids = resolveOperatorIds(state.homeDir);
|
|
@@ -6723,8 +7067,6 @@ function writeFileAtomic(path, content, mode) {
|
|
|
6723
7067
|
writeFileSync(tmp, content, mode !== void 0 ? { mode } : {});
|
|
6724
7068
|
renameSync(tmp, path);
|
|
6725
7069
|
}
|
|
6726
|
-
var package_default = {
|
|
6727
|
-
version: "0.12.0-rc.1"};
|
|
6728
7070
|
//#endregion
|
|
6729
7071
|
//#region ../lib/src/control-plane/rollback.ts
|
|
6730
7072
|
/**
|
|
@@ -6878,9 +7220,12 @@ var DOCKER_REGISTRY_TIMEOUT_MS = 1e4;
|
|
|
6878
7220
|
/**
|
|
6879
7221
|
* Resolve the best Docker image tag from a registry tags payload.
|
|
6880
7222
|
*
|
|
6881
|
-
* Constraints (
|
|
6882
|
-
* - `sameMajorAs`
|
|
6883
|
-
* - `atOrBelow`
|
|
7223
|
+
* Constraints (all optional):
|
|
7224
|
+
* - `sameMajorAs` — only consider tags whose major component matches this tag.
|
|
7225
|
+
* - `atOrBelow` — only consider tags whose version is <= this tag.
|
|
7226
|
+
* - `skipPrerelease` — ignore prerelease tags (`-rc`, `-beta`, …). Used so a
|
|
7227
|
+
* STABLE base never auto-jumps onto a prerelease (#494),
|
|
7228
|
+
* mirroring the UI card's channel gate.
|
|
6884
7229
|
*
|
|
6885
7230
|
* With no constraints: returns the first semver tag found, or the first
|
|
6886
7231
|
* non-"latest" tag as a fallback (mirrors the original resolveNewestDockerTag).
|
|
@@ -6889,8 +7234,8 @@ var DOCKER_REGISTRY_TIMEOUT_MS = 1e4;
|
|
|
6889
7234
|
function resolveNewestDockerTag(payload, constraints = {}) {
|
|
6890
7235
|
const results = payload?.results;
|
|
6891
7236
|
if (!Array.isArray(results)) return null;
|
|
6892
|
-
const { sameMajorAs, atOrBelow } = constraints;
|
|
6893
|
-
if (!(sameMajorAs !== void 0 || atOrBelow !== void 0)) {
|
|
7237
|
+
const { sameMajorAs, atOrBelow, skipPrerelease } = constraints;
|
|
7238
|
+
if (!(sameMajorAs !== void 0 || atOrBelow !== void 0 || skipPrerelease === true)) {
|
|
6894
7239
|
let fallback = null;
|
|
6895
7240
|
for (const entry of results) {
|
|
6896
7241
|
const name = typeof entry?.name === "string" ? entry.name.trim() : "";
|
|
@@ -6904,6 +7249,7 @@ function resolveNewestDockerTag(payload, constraints = {}) {
|
|
|
6904
7249
|
for (const entry of results) {
|
|
6905
7250
|
const name = typeof entry?.name === "string" ? entry.name.trim() : "";
|
|
6906
7251
|
if (!isComparableSemver(name)) continue;
|
|
7252
|
+
if (skipPrerelease && isPrerelease(name)) continue;
|
|
6907
7253
|
if (sameMajorAs !== void 0 && !isSameMajorVersion(name, sameMajorAs)) continue;
|
|
6908
7254
|
if (atOrBelow !== void 0 && compareComparableVersions(name, atOrBelow) > 0) continue;
|
|
6909
7255
|
if (!best || compareComparableVersions(name, best) > 0) best = name;
|
|
@@ -6913,7 +7259,69 @@ function resolveNewestDockerTag(payload, constraints = {}) {
|
|
|
6913
7259
|
function resolvePlatformVersionPolicyBaseTag(state) {
|
|
6914
7260
|
const configured = parseEnvFile(`${state.stashDir}/env/stack.env`).OP_IMAGE_TAG?.trim();
|
|
6915
7261
|
if (isComparableSemver(configured)) return configured;
|
|
6916
|
-
return
|
|
7262
|
+
return PLATFORM_VERSION;
|
|
7263
|
+
}
|
|
7264
|
+
/**
|
|
7265
|
+
* Host-vs-target guard (#492), keyed on the RUNNING control-plane version.
|
|
7266
|
+
*
|
|
7267
|
+
* The migrations a release needs live inside the @openpalm/lib that is actually
|
|
7268
|
+
* executing — i.e. PLATFORM_VERSION (the version of the running data/ui build, or
|
|
7269
|
+
* the compiled-in CLI lib). If a user points the stack at a tag NEWER than the
|
|
7270
|
+
* control plane they're running, `ensureReleaseMigrated` runs an OLD migration
|
|
7271
|
+
* array that doesn't contain that release's migrations → the new images come up
|
|
7272
|
+
* against half-migrated files. There is no safe recovery, so this is a HARD block
|
|
7273
|
+
* (not a warning): nothing is written before it throws.
|
|
7274
|
+
*
|
|
7275
|
+
* The thin-harness design (§6.5) makes this satisfiable: the supervisor self-
|
|
7276
|
+
* updates data/ui to the current platform BEFORE the UI serves the upgrade
|
|
7277
|
+
* request, so "target ≤ running platform" only fails when the user genuinely
|
|
7278
|
+
* picks a tag the running control plane cannot migrate to — at which point the
|
|
7279
|
+
* fix is to update the app / control plane first, not to proceed.
|
|
7280
|
+
*
|
|
7281
|
+
* Non-semver targets (a moving `latest`/`dev` tag) are not comparable and are
|
|
7282
|
+
* left to the resolver paths that turn them into a concrete release first.
|
|
7283
|
+
*/
|
|
7284
|
+
/**
|
|
7285
|
+
* Downgrade-needs-confirmation signal (#501).
|
|
7286
|
+
*
|
|
7287
|
+
* Release migrations are forward-only (copy-only, additive); they do NOT run
|
|
7288
|
+
* backward. Pointing the stack at an OLDER tag than the one currently running is
|
|
7289
|
+
* therefore a data-safety event, not a routine version change: the older images
|
|
7290
|
+
* may not understand files the newer release already migrated. We don't block it
|
|
7291
|
+
* (a user may legitimately need to roll back), but we require an explicit
|
|
7292
|
+
* confirmation so it can't happen by a stray dropdown selection. The UI catches
|
|
7293
|
+
* this by `code` and shows a plain warning + confirm; the CLI surfaces the
|
|
7294
|
+
* message and a `--confirm`/`--yes` path.
|
|
7295
|
+
*/
|
|
7296
|
+
var DowngradeConfirmationRequired = class extends Error {
|
|
7297
|
+
code = "downgrade_confirmation_required";
|
|
7298
|
+
currentVersion;
|
|
7299
|
+
targetVersion;
|
|
7300
|
+
constructor(currentVersion, targetVersion) {
|
|
7301
|
+
super(`Version ${formatForDisplay(targetVersion)} is older than the version you're running (${formatForDisplay(currentVersion)}). This is a downgrade. Release migrations don't run backward; your data may not be compatible — restore from backup if needed. Re-run with confirmation to proceed. Nothing was changed.`);
|
|
7302
|
+
this.name = "DowngradeConfirmationRequired";
|
|
7303
|
+
this.currentVersion = currentVersion;
|
|
7304
|
+
this.targetVersion = targetVersion;
|
|
7305
|
+
}
|
|
7306
|
+
};
|
|
7307
|
+
/**
|
|
7308
|
+
* Throw {@link DowngradeConfirmationRequired} when `targetTag` is strictly older
|
|
7309
|
+
* than the version currently configured in stack.env, unless the caller passed
|
|
7310
|
+
* an explicit confirmation. Non-semver tags (a moving `latest`/`dev` ref, or a
|
|
7311
|
+
* first install with no current tag) are not comparable and pass through — the
|
|
7312
|
+
* resolver paths turn `latest` into a concrete release before this runs.
|
|
7313
|
+
*/
|
|
7314
|
+
function assertNotUnconfirmedDowngrade(state, targetTag, confirmDowngrade) {
|
|
7315
|
+
if (confirmDowngrade) return;
|
|
7316
|
+
const currentTag = resolvePlatformVersionPolicyBaseTag(state);
|
|
7317
|
+
if (!isComparableSemver(targetTag) || !isComparableSemver(currentTag)) return;
|
|
7318
|
+
if (compareComparableVersions(targetTag, currentTag) >= 0) return;
|
|
7319
|
+
throw new DowngradeConfirmationRequired(currentTag, targetTag);
|
|
7320
|
+
}
|
|
7321
|
+
function assertTargetNotNewerThanPlatform(targetTag) {
|
|
7322
|
+
if (!isComparableSemver(targetTag) || !isComparableSemver(PLATFORM_VERSION)) return;
|
|
7323
|
+
if (compareComparableVersions(targetTag, PLATFORM_VERSION) <= 0) return;
|
|
7324
|
+
throw new Error(`Version ${formatForDisplay(targetTag)} is newer than the OpenPalm control plane you're running (${formatForDisplay(PLATFORM_VERSION)}). Update the OpenPalm app / control plane first, then update the stack. Nothing was changed.`);
|
|
6917
7325
|
}
|
|
6918
7326
|
function resolveImageNamespace(state) {
|
|
6919
7327
|
const namespace = (parseEnvFile(`${state.stashDir}/env/stack.env`).OP_IMAGE_NAMESPACE ?? process.env.OP_IMAGE_NAMESPACE ?? "openpalm").trim().toLowerCase();
|
|
@@ -7017,9 +7425,22 @@ async function resolveLatestPlatformTag(namespace) {
|
|
|
7017
7425
|
if (!latestTag) throw new Error("No usable Docker image tag found");
|
|
7018
7426
|
return latestTag;
|
|
7019
7427
|
}
|
|
7020
|
-
|
|
7021
|
-
|
|
7022
|
-
|
|
7428
|
+
/**
|
|
7429
|
+
* Resolve the default target version for `openpalm migrate --dry-run`: the
|
|
7430
|
+
* newest published platform tag in the current major. Mirrors the resolver the
|
|
7431
|
+
* upgrade path uses (same namespace, same base tag, same prerelease policy) so a
|
|
7432
|
+
* dry-run preview reflects the exact version `openpalm update` would move to.
|
|
7433
|
+
*/
|
|
7434
|
+
async function resolveDefaultMigrateTarget(state, opts = {}) {
|
|
7435
|
+
return resolveLatestPlatformTagForCurrentMajor(resolveImageNamespace(state), resolvePlatformVersionPolicyBaseTag(state), { allowPrerelease: opts.allowPrerelease });
|
|
7436
|
+
}
|
|
7437
|
+
async function resolveLatestPlatformTagForCurrentMajor(namespace, currentTag, opts = {}) {
|
|
7438
|
+
const skipPrerelease = !opts.allowPrerelease && !isPrerelease(currentTag);
|
|
7439
|
+
const latestTag = resolveNewestDockerTag(await fetchDockerTagsPayload(namespace, "assistant"), {
|
|
7440
|
+
sameMajorAs: currentTag,
|
|
7441
|
+
skipPrerelease
|
|
7442
|
+
});
|
|
7443
|
+
if (!latestTag) throw new Error(`No usable Docker image tag found in major ${majorVersionOf(currentTag) ?? currentTag}`);
|
|
7023
7444
|
return latestTag;
|
|
7024
7445
|
}
|
|
7025
7446
|
async function updateStackEnvToLatestImageTag(state, resolvedTag) {
|
|
@@ -7077,11 +7498,12 @@ async function withStackEnvRollback(state, run) {
|
|
|
7077
7498
|
*
|
|
7078
7499
|
* Callers handle their own audit logging and admin self-recreation.
|
|
7079
7500
|
*/
|
|
7080
|
-
async function performUpgrade(state) {
|
|
7501
|
+
async function performUpgrade(state, opts = {}) {
|
|
7081
7502
|
return withStackEnvRollback(state, async () => {
|
|
7082
7503
|
const composeOpts = buildComposeOptions(state);
|
|
7083
7504
|
const namespace = resolveImageNamespace(state);
|
|
7084
|
-
const imageTag = await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state));
|
|
7505
|
+
const imageTag = await resolveLatestPlatformTagForCurrentMajor(namespace, resolvePlatformVersionPolicyBaseTag(state), { allowPrerelease: opts.allowPrerelease });
|
|
7506
|
+
assertTargetNotNewerThanPlatform(imageTag);
|
|
7085
7507
|
ensureReleaseMigrated({
|
|
7086
7508
|
homeDir: state.homeDir,
|
|
7087
7509
|
targetVersion: imageTag
|
|
@@ -7112,7 +7534,7 @@ async function performUpgrade(state) {
|
|
|
7112
7534
|
* Set a specific image tag in stack.env then pull images and restart containers.
|
|
7113
7535
|
* Used by the admin "set version" action — skips the auto-detect step in performUpgrade.
|
|
7114
7536
|
*/
|
|
7115
|
-
async function applyTagChange(state, tag) {
|
|
7537
|
+
async function applyTagChange(state, tag, opts = {}) {
|
|
7116
7538
|
return withStackEnvRollback(state, async () => {
|
|
7117
7539
|
const namespace = resolveImageNamespace(state);
|
|
7118
7540
|
const requested = tag.trim();
|
|
@@ -7123,6 +7545,8 @@ async function applyTagChange(state, tag) {
|
|
|
7123
7545
|
const msg = e instanceof Error ? e.message : String(e);
|
|
7124
7546
|
throw new Error(`Cannot resolve "latest" to a concrete release: ${msg}. Check your network connection or select a specific version.`);
|
|
7125
7547
|
}
|
|
7548
|
+
assertTargetNotNewerThanPlatform(resolvedTag);
|
|
7549
|
+
assertNotUnconfirmedDowngrade(state, resolvedTag, opts.confirmDowngrade ?? false);
|
|
7126
7550
|
const stackEnvPath = `${state.stashDir}/env/stack.env`;
|
|
7127
7551
|
const currentEnv = parseEnvFile(stackEnvPath);
|
|
7128
7552
|
const pinnedImages = parsePinnedImages(currentEnv.OP_PINNED_IMAGES);
|
|
@@ -7608,7 +8032,7 @@ async function runDeploy(state, options = {}) {
|
|
|
7608
8032
|
const lock = acquireInstallLock(state.dataDir);
|
|
7609
8033
|
if (!lock) {
|
|
7610
8034
|
progress.deploying = false;
|
|
7611
|
-
progress.deployError = "install_in_progress: A deploy is already running. Wait for it to finish.";
|
|
8035
|
+
progress.deployError = "install_in_progress: A deploy is already running. Wait for it to finish (the lock clears itself automatically after 30 minutes). If you're sure nothing is running, run 'openpalm unlock' to clear a stale lock.";
|
|
7612
8036
|
emitProgress(options, progress);
|
|
7613
8037
|
return progress;
|
|
7614
8038
|
}
|
|
@@ -9282,7 +9706,7 @@ async function performSetup(input, opts) {
|
|
|
9282
9706
|
const lockHandle = acquireInstallLock(state.dataDir);
|
|
9283
9707
|
if (lockHandle === null) return {
|
|
9284
9708
|
ok: false,
|
|
9285
|
-
error: "install_in_progress: Another install is in progress. Wait for it to finish
|
|
9709
|
+
error: "install_in_progress: Another install is in progress. Wait for it to finish (the lock clears itself automatically after 30 minutes). If you're sure nothing is running, run 'openpalm unlock' to clear a stale lock."
|
|
9286
9710
|
};
|
|
9287
9711
|
logger.info("performing setup", { connectionCount: connections.length });
|
|
9288
9712
|
const updates = buildOwnerEnvFromSetup(owner);
|
|
@@ -9768,5 +10192,5 @@ function collectBindAddressWarnings(env) {
|
|
|
9768
10192
|
return warnings;
|
|
9769
10193
|
}
|
|
9770
10194
|
|
|
9771
|
-
export {
|
|
9772
|
-
//# sourceMappingURL=src-
|
|
10195
|
+
export { ensureReleaseMigrated as $, AKM_USER_ENV_REF as A, composeStats as B, CORE_SERVICES as C, DowngradeConfirmationRequired as D, composeStop as E, composeUp as F, createLogger as G, createOpenCodeClient as H, INSTALL_LOCK_STALE_AFTER_MS as I, createState as J, deleteUserEnvKey as K, deriveLaunchStatus as L, MigrationError as M, deriveLocalStackState as N, detectGpu as O, PLATFORM_VERSION as P, detectHostOpenCode as Q, detectLocalProviders as R, detectRuntime as S, disableHostAkmSharing as T, dismissSecretStripNotice as U, enableHostAkmSharing as V, ensureAkmUserEnv as W, ensureHomeDirs as X, ensureMigrated as Y, ensureOpenCodeConfig as Z, ensureOpenCodeSystemConfig as _, addonProfileId as a, writeRuntimeFiles as a$, ensureSecrets as a0, executeAutomation as a1, fetchProviderModels as a2, formatForDisplay as a3, getAddonProfileAvailability as a4, getAddonProfileSelection as a5, getAddonProfiles as a6, getAddonServiceNames as a7, getAkmStats as a8, getDockerEvents as a9, readSecret as aA, readSecretFile as aB, readSecretStripNotice as aC, readStackEnv as aD, readStackRuntimeEnv as aE, readStackSecretEnv as aF, readTaskFile as aG, readUserEnvFile as aH, recommendSetup as aI, removeSecretFile as aJ, removeTaskFile as aK, resolveComposeProjectName as aL, resolveDataDir as aM, resolveDefaultMigrateTarget as aN, resolveDeployJournalPath as aO, resolveRuntimeFiles as aP, resolveStackDir as aQ, runDeploy as aR, seedUiBuild as aS, setAddonEnabled as aT, setAddonProfileSelection as aU, summarizeBackups as aV, summarizeComposeStderr as aW, unlockInstallLock as aX, useExistingProviderForAssistantCli as aY, validateProposedState as aZ, writeFileAtomic as a_, getHostAkmSharingStatus as aa, getRegistryAddonConfig as ab, hostAkmStashPath as ac, importHostOpenCode as ad, initializeStateSecrets as ae, inspectInstallLock as af, isAllowedService as ag, isComparableSemver as ah, isHostAkmAvailable as ai, isSetupComplete as aj, listAssistantCliTools as ak, listAvailableAddonIds as al, listBackupDirs as am, listEnabledAddonIds as an, listSecretFiles as ao, loadAutomations as ap, mapDockerError as aq, markSetupComplete as ar, parseComposeStderr as as, parseEnvFile as at, patchSecretsEnvFile as au, performSetup as av, performUpgrade as aw, pruneBackupDirs as ax, readAutomationLogs as ay, readDeployJournal as az, annotateAddonProfileAvailability as b, writeSecretFile as b0, writeStackSecretEnv as b1, writeTaskFile as b2, writeUserEnvKey as b3, writeVoiceVars as b4, applyInstall as c, applyTagChange as d, applyUninstall as e, applyUpdate as f, assertSafeSecretFilename as g, assertSafeTaskFilename as h, authJsonPath as i, backupSetupInputs as j, buildAkmEndpoint as k, buildAkmEnv as l, buildComposeOptions as m, buildManagedServices as n, checkDocker as o, checkDockerCompose as p, classifyLocalInstall as q, collectBindAddressWarnings as r, compareComparableVersions as s, composeDown as t, composeLogs as u, composePreflight as v, composePs as w, composePull as x, composeRestart as y, composeStart as z };
|
|
10196
|
+
//# sourceMappingURL=src-B7oqi9q_.js.map
|