@openpalm/ui 0.11.0 → 0.11.2-rc.1
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/{0.DlIhzko8.css → 0.CFC7xzus.css} +1 -1
- package/build/client/_app/immutable/assets/0.CFC7xzus.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CFC7xzus.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.B_s_XYKm.css +1 -0
- package/build/client/_app/immutable/assets/4.B_s_XYKm.css.br +0 -0
- package/build/client/_app/immutable/assets/4.B_s_XYKm.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.CK_nuPTW.css +1 -0
- package/build/client/_app/immutable/assets/9.CK_nuPTW.css.br +0 -0
- package/build/client/_app/immutable/assets/9.CK_nuPTW.css.gz +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.rd8K9qqK.css +1 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.rd8K9qqK.css.br +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.rd8K9qqK.css.gz +0 -0
- package/build/client/_app/immutable/chunks/7Y-z2Cs4.js +3 -0
- package/build/client/_app/immutable/chunks/7Y-z2Cs4.js.br +0 -0
- package/build/client/_app/immutable/chunks/7Y-z2Cs4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{HJd0QhDi.js → BbsmUDEz.js} +1 -1
- package/build/client/_app/immutable/chunks/BbsmUDEz.js.br +0 -0
- package/build/client/_app/immutable/chunks/BbsmUDEz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Mj3AXROx.js → BxIEEPV3.js} +1 -1
- package/build/client/_app/immutable/chunks/BxIEEPV3.js.br +0 -0
- package/build/client/_app/immutable/chunks/BxIEEPV3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DBtofX2R.js +1 -0
- package/build/client/_app/immutable/chunks/DBtofX2R.js.br +2 -0
- package/build/client/_app/immutable/chunks/DBtofX2R.js.gz +0 -0
- package/build/client/_app/immutable/chunks/jhtvkF_A.js +1 -0
- package/build/client/_app/immutable/chunks/jhtvkF_A.js.br +0 -0
- package/build/client/_app/immutable/chunks/jhtvkF_A.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.8wJBndTj.js → app.DamaMvOo.js} +2 -2
- package/build/client/_app/immutable/entry/app.DamaMvOo.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DamaMvOo.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CiFTF0Id.js +1 -0
- package/build/client/_app/immutable/entry/start.CiFTF0Id.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CiFTF0Id.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.BeVZsPun.js → 1.D_t9eVLg.js} +1 -1
- package/build/client/_app/immutable/nodes/1.D_t9eVLg.js.br +1 -0
- package/build/client/_app/immutable/nodes/1.D_t9eVLg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.BAthCCnr.js → 4.rszAmyBN.js} +9 -9
- package/build/client/_app/immutable/nodes/4.rszAmyBN.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.rszAmyBN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.Ci-IDy_L.js → 5.B5KOuICr.js} +1 -1
- package/build/client/_app/immutable/nodes/5.B5KOuICr.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.B5KOuICr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6._GM9bF5h.js → 6.Bw69iLts.js} +1 -1
- package/build/client/_app/immutable/nodes/6.Bw69iLts.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Bw69iLts.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.Cx4EVpki.js → 7.ockxnYPK.js} +1 -1
- package/build/client/_app/immutable/nodes/7.ockxnYPK.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.ockxnYPK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.p0qRhws4.js → 8.Bt2Nswbt.js} +1 -1
- package/build/client/_app/immutable/nodes/8.Bt2Nswbt.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Bt2Nswbt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.pk1c6xm-.js +4 -0
- package/build/client/_app/immutable/nodes/9.pk1c6xm-.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.pk1c6xm-.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/client/setup/wizard.css +144 -406
- package/build/client/setup/wizard.css.br +0 -0
- package/build/client/setup/wizard.css.gz +0 -0
- package/build/server/chunks/{0-CTzT7i_m.js → 0-BK7D9z9V.js} +3 -3
- package/build/server/chunks/{0-CTzT7i_m.js.map → 0-BK7D9z9V.js.map} +1 -1
- package/build/server/chunks/1-BTD70sT7.js +9 -0
- package/build/server/chunks/{1-DTcDogB5.js.map → 1-BTD70sT7.js.map} +1 -1
- package/build/server/chunks/4-CubOOlWA.js +9 -0
- package/build/server/chunks/{4-Dn-0_RAr.js.map → 4-CubOOlWA.js.map} +1 -1
- package/build/server/chunks/5-C5D5O8w1.js +9 -0
- package/build/server/chunks/{5-Cbcb8WMr.js.map → 5-C5D5O8w1.js.map} +1 -1
- package/build/server/chunks/{6-CUZpLn9e.js → 6-DCNMSRHJ.js} +3 -3
- package/build/server/chunks/{6-CUZpLn9e.js.map → 6-DCNMSRHJ.js.map} +1 -1
- package/build/server/chunks/7-jdfP4oIc.js +9 -0
- package/build/server/chunks/{7-C0-ssq7j.js.map → 7-jdfP4oIc.js.map} +1 -1
- package/build/server/chunks/{8-CIt0k_cP.js → 8-Dd434AgX.js} +3 -3
- package/build/server/chunks/{8-CIt0k_cP.js.map → 8-Dd434AgX.js.map} +1 -1
- package/build/server/chunks/9-Dj1CAYUs.js +9 -0
- package/build/server/chunks/{9-B8DzptsC.js.map → 9-Dj1CAYUs.js.map} +1 -1
- package/build/server/chunks/{Navbar-F9NE4GcT.js → Navbar-Bbr28xK9.js} +3 -3
- package/build/server/chunks/{Navbar-F9NE4GcT.js.map → Navbar-Bbr28xK9.js.map} +1 -1
- package/build/server/chunks/VoiceProfileSelector-CbOV_v5A.js.map +1 -1
- package/build/server/chunks/{_page.svelte-DeJqqBhp.js → _page.svelte-4qKAK6Tb.js} +5 -5
- package/build/server/chunks/{_page.svelte-DeJqqBhp.js.map → _page.svelte-4qKAK6Tb.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DLAHj-kk.js → _page.svelte-B0M8mXzs.js} +6 -2
- package/build/server/chunks/_page.svelte-B0M8mXzs.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BgAgZqQA.js → _page.svelte-D-uhfsj5.js} +6 -6
- package/build/server/chunks/_page.svelte-D-uhfsj5.js.map +1 -0
- package/build/server/chunks/{_page.svelte-CqEu-vpE.js → _page.svelte-D7VlbGXj.js} +5 -5
- package/build/server/chunks/{_page.svelte-CqEu-vpE.js.map → _page.svelte-D7VlbGXj.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DnwUHFZ8.js → _page.svelte-Dfe5FJdv.js} +5 -5
- package/build/server/chunks/{_page.svelte-DnwUHFZ8.js.map → _page.svelte-Dfe5FJdv.js.map} +1 -1
- package/build/server/chunks/{_page.svelte--GbfGVnN.js → _page.svelte-fkfNgz2M.js} +3 -3
- package/build/server/chunks/{_page.svelte--GbfGVnN.js.map → _page.svelte-fkfNgz2M.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BrExNZ-2.js → _server.ts--N8krQnw.js} +4 -4
- package/build/server/chunks/{_server.ts-BrExNZ-2.js.map → _server.ts--N8krQnw.js.map} +1 -1
- package/build/server/chunks/{_server.ts-XOLGzzNk.js → _server.ts-67vw7faX.js} +4 -4
- package/build/server/chunks/{_server.ts-XOLGzzNk.js.map → _server.ts-67vw7faX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CsUi6NWt.js → _server.ts-B1J6gmcu.js} +4 -4
- package/build/server/chunks/{_server.ts-CsUi6NWt.js.map → _server.ts-B1J6gmcu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C8YMhHYj.js → _server.ts-B3uS0ABl.js} +4 -4
- package/build/server/chunks/{_server.ts-C8YMhHYj.js.map → _server.ts-B3uS0ABl.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DgIgXukK.js → _server.ts-B4p_jHqU.js} +38 -27
- package/build/server/chunks/_server.ts-B4p_jHqU.js.map +1 -0
- package/build/server/chunks/{_server.ts-BAsbrtjL.js → _server.ts-B7ST2I1g.js} +2 -2
- package/build/server/chunks/{_server.ts-BAsbrtjL.js.map → _server.ts-B7ST2I1g.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DLHN_6MC.js → _server.ts-BAlnprxv.js} +4 -4
- package/build/server/chunks/{_server.ts-DLHN_6MC.js.map → _server.ts-BAlnprxv.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B2RCiGeA.js → _server.ts-BAmfRgDu.js} +4 -4
- package/build/server/chunks/{_server.ts-B2RCiGeA.js.map → _server.ts-BAmfRgDu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CH8VLn03.js → _server.ts-BC7_zqMR.js} +4 -4
- package/build/server/chunks/{_server.ts-CH8VLn03.js.map → _server.ts-BC7_zqMR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-__xVWUvt.js → _server.ts-BDGqI5pR.js} +4 -4
- package/build/server/chunks/{_server.ts-__xVWUvt.js.map → _server.ts-BDGqI5pR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-l3A6IOvJ.js → _server.ts-BGBkyRka.js} +4 -4
- package/build/server/chunks/{_server.ts-l3A6IOvJ.js.map → _server.ts-BGBkyRka.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D4zkfcxH.js → _server.ts-BJYAW2v_.js} +4 -4
- package/build/server/chunks/{_server.ts-D4zkfcxH.js.map → _server.ts-BJYAW2v_.js.map} +1 -1
- package/build/server/chunks/{_server.ts-8iOMau6K.js → _server.ts-BLWYsGx3.js} +4 -4
- package/build/server/chunks/{_server.ts-8iOMau6K.js.map → _server.ts-BLWYsGx3.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C44tS0KC.js → _server.ts-BTwVVUpt.js} +4 -4
- package/build/server/chunks/{_server.ts-C44tS0KC.js.map → _server.ts-BTwVVUpt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-N6WIc0vw.js → _server.ts-BXQH4Qlt.js} +4 -4
- package/build/server/chunks/{_server.ts-N6WIc0vw.js.map → _server.ts-BXQH4Qlt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ZE9PYnxj.js → _server.ts-BZV8kPh-.js} +4 -4
- package/build/server/chunks/_server.ts-BZV8kPh-.js.map +1 -0
- package/build/server/chunks/{_server.ts-BCcQdRne.js → _server.ts-Bb62UkjI.js} +4 -4
- package/build/server/chunks/{_server.ts-BCcQdRne.js.map → _server.ts-Bb62UkjI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-vp9n_72N.js → _server.ts-BimilJxw.js} +4 -4
- package/build/server/chunks/{_server.ts-vp9n_72N.js.map → _server.ts-BimilJxw.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D0FZ3wh5.js → _server.ts-BjsoTMxt.js} +4 -4
- package/build/server/chunks/{_server.ts-D0FZ3wh5.js.map → _server.ts-BjsoTMxt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BQZSWSLy.js → _server.ts-Bkz7Vyl7.js} +5 -5
- package/build/server/chunks/{_server.ts-BQZSWSLy.js.map → _server.ts-Bkz7Vyl7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DQcL5wr_.js → _server.ts-BtIfXnk8.js} +4 -4
- package/build/server/chunks/{_server.ts-DQcL5wr_.js.map → _server.ts-BtIfXnk8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BD6Urice.js → _server.ts-C2jZDeoI.js} +4 -4
- package/build/server/chunks/{_server.ts-BD6Urice.js.map → _server.ts-C2jZDeoI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DrM8VAOS.js → _server.ts-C3UA92-P.js} +4 -4
- package/build/server/chunks/{_server.ts-DrM8VAOS.js.map → _server.ts-C3UA92-P.js.map} +1 -1
- package/build/server/chunks/_server.ts-CAycEHO4.js +95 -0
- package/build/server/chunks/_server.ts-CAycEHO4.js.map +1 -0
- package/build/server/chunks/{_server.ts-DXOh4EZe.js → _server.ts-CBYvFEVS.js} +15 -6
- package/build/server/chunks/_server.ts-CBYvFEVS.js.map +1 -0
- package/build/server/chunks/{_server.ts-CQPWD_WN.js → _server.ts-CKkuDSSM.js} +4 -4
- package/build/server/chunks/{_server.ts-CQPWD_WN.js.map → _server.ts-CKkuDSSM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D5Q5mczv.js → _server.ts-CRUfNiEL.js} +4 -4
- package/build/server/chunks/{_server.ts-D5Q5mczv.js.map → _server.ts-CRUfNiEL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CG1nihTT.js → _server.ts-CRgQ6JvE.js} +4 -4
- package/build/server/chunks/{_server.ts-CG1nihTT.js.map → _server.ts-CRgQ6JvE.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bj_nJzpo.js → _server.ts-CVnGEGgz.js} +4 -4
- package/build/server/chunks/{_server.ts-Bj_nJzpo.js.map → _server.ts-CVnGEGgz.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BVYIqRK2.js → _server.ts-C_o9u8JZ.js} +4 -4
- package/build/server/chunks/{_server.ts-BVYIqRK2.js.map → _server.ts-C_o9u8JZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DbMkM72G.js → _server.ts-CaIBfM3d.js} +4 -4
- package/build/server/chunks/{_server.ts-DbMkM72G.js.map → _server.ts-CaIBfM3d.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CPzbkayh.js → _server.ts-CcLqY7mC.js} +4 -4
- package/build/server/chunks/{_server.ts-CPzbkayh.js.map → _server.ts-CcLqY7mC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DAb50kOu.js → _server.ts-CgkGvTF0.js} +5 -5
- package/build/server/chunks/{_server.ts-DAb50kOu.js.map → _server.ts-CgkGvTF0.js.map} +1 -1
- package/build/server/chunks/{_server.ts-pLeJl6U2.js → _server.ts-Co5auLt6.js} +4 -4
- package/build/server/chunks/{_server.ts-pLeJl6U2.js.map → _server.ts-Co5auLt6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BaxB3oQq.js → _server.ts-CpO4xFnt.js} +4 -4
- package/build/server/chunks/{_server.ts-BaxB3oQq.js.map → _server.ts-CpO4xFnt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DtC0SjIr.js → _server.ts-Cw-3n_ep.js} +4 -4
- package/build/server/chunks/{_server.ts-DtC0SjIr.js.map → _server.ts-Cw-3n_ep.js.map} +1 -1
- package/build/server/chunks/{_server.ts-sEc4S_v5.js → _server.ts-D20tceEK.js} +6 -6
- package/build/server/chunks/{_server.ts-sEc4S_v5.js.map → _server.ts-D20tceEK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-EBySP1Ew.js → _server.ts-D39hF3fC.js} +2 -2
- package/build/server/chunks/{_server.ts-EBySP1Ew.js.map → _server.ts-D39hF3fC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BlMOxGWA.js → _server.ts-D3isWFzo.js} +7 -7
- package/build/server/chunks/_server.ts-D3isWFzo.js.map +1 -0
- package/build/server/chunks/{_server.ts-iAOP7FW1.js → _server.ts-D9xZdloN.js} +11 -14
- package/build/server/chunks/_server.ts-D9xZdloN.js.map +1 -0
- package/build/server/chunks/{_server.ts-DcQTtmS3.js → _server.ts-DCg7u0gt.js} +4 -4
- package/build/server/chunks/{_server.ts-DcQTtmS3.js.map → _server.ts-DCg7u0gt.js.map} +1 -1
- package/build/server/chunks/{_server.ts-COORKWSc.js → _server.ts-DDNv0MDu.js} +4 -4
- package/build/server/chunks/{_server.ts-COORKWSc.js.map → _server.ts-DDNv0MDu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CC-mpNNj.js → _server.ts-DEB9v5s4.js} +4 -4
- package/build/server/chunks/{_server.ts-CC-mpNNj.js.map → _server.ts-DEB9v5s4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DjlikYHH.js → _server.ts-DFBCN73l.js} +5 -5
- package/build/server/chunks/{_server.ts-DjlikYHH.js.map → _server.ts-DFBCN73l.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B8sdNvW5.js → _server.ts-DS6wkfxg.js} +4 -4
- package/build/server/chunks/{_server.ts-B8sdNvW5.js.map → _server.ts-DS6wkfxg.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DjnK1iz8.js → _server.ts-DSUpiCQo.js} +4 -4
- package/build/server/chunks/{_server.ts-DjnK1iz8.js.map → _server.ts-DSUpiCQo.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DFL8Mq_R.js → _server.ts-DUa6bwDM.js} +4 -4
- package/build/server/chunks/{_server.ts-DFL8Mq_R.js.map → _server.ts-DUa6bwDM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DQE5fd19.js → _server.ts-DVdrht9C.js} +4 -4
- package/build/server/chunks/{_server.ts-DQE5fd19.js.map → _server.ts-DVdrht9C.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Ban3zjRc.js → _server.ts-DXBrPiAj.js} +4 -4
- package/build/server/chunks/{_server.ts-Ban3zjRc.js.map → _server.ts-DXBrPiAj.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C7D2sok_.js → _server.ts-DYuZIg9l.js} +4 -4
- package/build/server/chunks/{_server.ts-C7D2sok_.js.map → _server.ts-DYuZIg9l.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C5uu6b2a.js → _server.ts-DZyh2rB9.js} +6 -5
- package/build/server/chunks/_server.ts-DZyh2rB9.js.map +1 -0
- package/build/server/chunks/{_server.ts-BkGQezlX.js → _server.ts-Dbqne9eY.js} +6 -6
- package/build/server/chunks/{_server.ts-BkGQezlX.js.map → _server.ts-Dbqne9eY.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BYTWLTxk.js → _server.ts-DguLVMDx.js} +6 -7
- package/build/server/chunks/_server.ts-DguLVMDx.js.map +1 -0
- package/build/server/chunks/{_server.ts-CSs35mBJ.js → _server.ts-DhXmrQhc.js} +4 -4
- package/build/server/chunks/{_server.ts-CSs35mBJ.js.map → _server.ts-DhXmrQhc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BG3UvxEU.js → _server.ts-DniIPBxO.js} +2 -2
- package/build/server/chunks/{_server.ts-BG3UvxEU.js.map → _server.ts-DniIPBxO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-_o3Yebl6.js → _server.ts-DrZeLUaT.js} +4 -4
- package/build/server/chunks/{_server.ts-_o3Yebl6.js.map → _server.ts-DrZeLUaT.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D9HJ0cWI.js → _server.ts-DteVoyg4.js} +4 -4
- package/build/server/chunks/{_server.ts-D9HJ0cWI.js.map → _server.ts-DteVoyg4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DuBJyo4e.js → _server.ts-Dw7_J4x-.js} +4 -4
- package/build/server/chunks/{_server.ts-DuBJyo4e.js.map → _server.ts-Dw7_J4x-.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Me1rXUGo.js → _server.ts-Dw9IUnbc.js} +4 -4
- package/build/server/chunks/{_server.ts-Me1rXUGo.js.map → _server.ts-Dw9IUnbc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ypkZ9bJf.js → _server.ts-KOGE5rzJ.js} +2 -2
- package/build/server/chunks/{_server.ts-ypkZ9bJf.js.map → _server.ts-KOGE5rzJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ccd1enMp.js → _server.ts-MJxff6j1.js} +4 -4
- package/build/server/chunks/{_server.ts-ccd1enMp.js.map → _server.ts-MJxff6j1.js.map} +1 -1
- package/build/server/chunks/{_server.ts-IkgMCbAi.js → _server.ts-SFkX7VFb.js} +6 -6
- package/build/server/chunks/{_server.ts-IkgMCbAi.js.map → _server.ts-SFkX7VFb.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C5wVttUW.js → _server.ts-cFNIAAvs.js} +3 -3
- package/build/server/chunks/{_server.ts-C5wVttUW.js.map → _server.ts-cFNIAAvs.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BZ8wMJ7l.js → _server.ts-fRYbSpUy.js} +4 -4
- package/build/server/chunks/{_server.ts-BZ8wMJ7l.js.map → _server.ts-fRYbSpUy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C1CpbG3_.js → _server.ts-kVbBWaDD.js} +4 -4
- package/build/server/chunks/{_server.ts-C1CpbG3_.js.map → _server.ts-kVbBWaDD.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DRxZJQd6.js → _server.ts-oLxKZF14.js} +6 -6
- package/build/server/chunks/{_server.ts-DRxZJQd6.js.map → _server.ts-oLxKZF14.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BVCET3CA.js → _server.ts-rGaZfdIc.js} +4 -4
- package/build/server/chunks/{_server.ts-BVCET3CA.js.map → _server.ts-rGaZfdIc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BTGThm9P.js → _server.ts-rP8pYqeQ.js} +4 -4
- package/build/server/chunks/{_server.ts-BTGThm9P.js.map → _server.ts-rP8pYqeQ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Mycnkmlz.js → _server.ts-swRf_u3E.js} +5 -5
- package/build/server/chunks/{_server.ts-Mycnkmlz.js.map → _server.ts-swRf_u3E.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cw2YXWgK.js → _server.ts-upBZRwnP.js} +5 -5
- package/build/server/chunks/{_server.ts-Cw2YXWgK.js.map → _server.ts-upBZRwnP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BD0Jit8e.js → _server.ts-vr1wDdjl.js} +4 -4
- package/build/server/chunks/{_server.ts-BD0Jit8e.js.map → _server.ts-vr1wDdjl.js.map} +1 -1
- package/build/server/chunks/{addon-helpers-B0E6L7iO.js → addon-helpers-DU7K-Jl-.js} +3 -3
- package/build/server/chunks/{addon-helpers-B0E6L7iO.js.map → addon-helpers-DU7K-Jl-.js.map} +1 -1
- package/build/server/chunks/{client-D0taHWmu.js → client-DlIaBp3l.js} +2 -2
- package/build/server/chunks/{client-D0taHWmu.js.map → client-DlIaBp3l.js.map} +1 -1
- package/build/server/chunks/{config-2pnPob92.js → config-DuMmS4Kk.js} +2 -2
- package/build/server/chunks/{config-2pnPob92.js.map → config-DuMmS4Kk.js.map} +1 -1
- package/build/server/chunks/{docker-D17EjIlp.js → docker-YA68OZn5.js} +2 -2
- package/build/server/chunks/{docker-D17EjIlp.js.map → docker-YA68OZn5.js.map} +1 -1
- package/build/server/chunks/{endpoints-DoIeO5WL.js → endpoints-CGm4oVfk.js} +2 -2
- package/build/server/chunks/{endpoints-DoIeO5WL.js.map → endpoints-CGm4oVfk.js.map} +1 -1
- package/build/server/chunks/{environment-B38QRFKh.js → environment-WrKoCzje.js} +2 -2
- package/build/server/chunks/{environment-B38QRFKh.js.map → environment-WrKoCzje.js.map} +1 -1
- package/build/server/chunks/{error.svelte-DB6X8EVo.js → error.svelte-D4IIBHJA.js} +4 -4
- package/build/server/chunks/{error.svelte-DB6X8EVo.js.map → error.svelte-D4IIBHJA.js.map} +1 -1
- package/build/server/chunks/{helpers-CeQwqpAT.js → helpers-h_Fq1SBb.js} +34 -8
- package/build/server/chunks/helpers-h_Fq1SBb.js.map +1 -0
- package/build/server/chunks/{hooks.server-2io-2N7D.js → hooks.server-SbPoC8s4.js} +13 -4
- package/build/server/chunks/hooks.server-SbPoC8s4.js.map +1 -0
- package/build/server/chunks/{http-CHmjTVGA.js → http-DbpsBgUe.js} +2 -2
- package/build/server/chunks/{http-CHmjTVGA.js.map → http-DbpsBgUe.js.map} +1 -1
- package/build/server/chunks/{internal-ClL4rso0.js → internal-DtdC4O8s.js} +3 -3
- package/build/server/chunks/{internal-ClL4rso0.js.map → internal-DtdC4O8s.js.map} +1 -1
- package/build/server/chunks/session-cookie-C61HbJV5.js +74 -0
- package/build/server/chunks/session-cookie-C61HbJV5.js.map +1 -0
- package/build/server/chunks/{setup-deploy-53S0fflh.js → setup-deploy-D0Om28m3.js} +19 -30
- package/build/server/chunks/setup-deploy-D0Om28m3.js.map +1 -0
- package/build/server/chunks/{src-D9YnoOnU.js → src-DJv-Q_k2.js} +365 -67
- package/build/server/chunks/src-DJv-Q_k2.js.map +1 -0
- package/build/server/chunks/{state-CO78UOQH.js → state-DGpfeO6d.js} +2 -2
- package/build/server/chunks/{state-CO78UOQH.js.map → state-DGpfeO6d.js.map} +1 -1
- package/build/server/index.js +2 -2
- package/build/server/manifest.js +86 -79
- package/build/server/manifest.js.map +1 -1
- package/package.json +2 -2
- package/build/client/_app/immutable/assets/0.DlIhzko8.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DlIhzko8.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.CLTnoKrH.css +0 -1
- package/build/client/_app/immutable/assets/4.CLTnoKrH.css.br +0 -0
- package/build/client/_app/immutable/assets/4.CLTnoKrH.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.cpz_TytB.css +0 -1
- package/build/client/_app/immutable/assets/9.cpz_TytB.css.br +0 -0
- package/build/client/_app/immutable/assets/9.cpz_TytB.css.gz +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css +0 -1
- package/build/client/_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css.br +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css.gz +0 -0
- package/build/client/_app/immutable/chunks/1sXFUT7r.js +0 -1
- package/build/client/_app/immutable/chunks/1sXFUT7r.js.br +0 -2
- package/build/client/_app/immutable/chunks/1sXFUT7r.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BNcdU8Ou.js +0 -3
- package/build/client/_app/immutable/chunks/BNcdU8Ou.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNcdU8Ou.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQrb5YOM.js +0 -1
- package/build/client/_app/immutable/chunks/BQrb5YOM.js.br +0 -0
- package/build/client/_app/immutable/chunks/BQrb5YOM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/HJd0QhDi.js.br +0 -0
- package/build/client/_app/immutable/chunks/HJd0QhDi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Mj3AXROx.js.br +0 -0
- package/build/client/_app/immutable/chunks/Mj3AXROx.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.8wJBndTj.js.br +0 -0
- package/build/client/_app/immutable/entry/app.8wJBndTj.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B6QaWAof.js +0 -1
- package/build/client/_app/immutable/entry/start.B6QaWAof.js.br +0 -0
- package/build/client/_app/immutable/entry/start.B6QaWAof.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BeVZsPun.js.br +0 -1
- package/build/client/_app/immutable/nodes/1.BeVZsPun.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BAthCCnr.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BAthCCnr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Ci-IDy_L.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Ci-IDy_L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6._GM9bF5h.js.br +0 -0
- package/build/client/_app/immutable/nodes/6._GM9bF5h.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.Cx4EVpki.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Cx4EVpki.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.p0qRhws4.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.p0qRhws4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.C1MP3zci.js +0 -2
- package/build/client/_app/immutable/nodes/9.C1MP3zci.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.C1MP3zci.js.gz +0 -0
- package/build/server/chunks/1-DTcDogB5.js +0 -9
- package/build/server/chunks/4-Dn-0_RAr.js +0 -9
- package/build/server/chunks/5-Cbcb8WMr.js +0 -9
- package/build/server/chunks/7-C0-ssq7j.js +0 -9
- package/build/server/chunks/9-B8DzptsC.js +0 -9
- package/build/server/chunks/_page.svelte-BgAgZqQA.js.map +0 -1
- package/build/server/chunks/_page.svelte-DLAHj-kk.js.map +0 -1
- package/build/server/chunks/_server.ts-BYTWLTxk.js.map +0 -1
- package/build/server/chunks/_server.ts-BlMOxGWA.js.map +0 -1
- package/build/server/chunks/_server.ts-C5uu6b2a.js.map +0 -1
- package/build/server/chunks/_server.ts-DXOh4EZe.js.map +0 -1
- package/build/server/chunks/_server.ts-DgIgXukK.js.map +0 -1
- package/build/server/chunks/_server.ts-ZE9PYnxj.js.map +0 -1
- package/build/server/chunks/_server.ts-iAOP7FW1.js.map +0 -1
- package/build/server/chunks/helpers-CeQwqpAT.js.map +0 -1
- package/build/server/chunks/hooks.server-2io-2N7D.js.map +0 -1
- package/build/server/chunks/setup-deploy-53S0fflh.js.map +0 -1
- package/build/server/chunks/src-D9YnoOnU.js.map +0 -1
- /package/build/client/_app/immutable/nodes/{0.rwRC6zAi.js → 0.0pi4RS6G.js} +0 -0
- /package/build/client/_app/immutable/nodes/{0.rwRC6zAi.js.br → 0.0pi4RS6G.js.br} +0 -0
- /package/build/client/_app/immutable/nodes/{0.rwRC6zAi.js.gz → 0.0pi4RS6G.js.gz} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _ as __commonJSMin, b as __require } from './chunk-CLZ62Ad-.js';
|
|
2
|
-
import Vt, { existsSync, readFileSync, copyFileSync, chmodSync, mkdirSync, readdirSync, writeFileSync, renameSync, rmSync, statSync, cpSync, lstatSync, openSync, constants, writeSync, closeSync, realpathSync } from 'node:fs';
|
|
2
|
+
import Vt, { existsSync, readFileSync, copyFileSync, chmodSync, mkdirSync, readdirSync, writeFileSync, renameSync, rmSync, statSync, cpSync, lstatSync, openSync, constants, writeSync, closeSync, chownSync, realpathSync } from 'node:fs';
|
|
3
3
|
import or, { basename, dirname, resolve, join, win32, posix } from 'node:path';
|
|
4
4
|
import { Buffer as Buffer$1 } from 'buffer';
|
|
5
5
|
import { homedir, tmpdir } from 'node:os';
|
|
@@ -6864,7 +6864,7 @@ function ensureHomeDirs() {
|
|
|
6864
6864
|
* On any unexpected error (permissions, ENOSPC, etc.) we return null so the
|
|
6865
6865
|
* caller surfaces "install_in_progress" rather than silently fake-acquiring.
|
|
6866
6866
|
*/
|
|
6867
|
-
var logger$
|
|
6867
|
+
var logger$10 = createLogger("install-lock");
|
|
6868
6868
|
var STALE_AFTER_MS = 1800 * 1e3;
|
|
6869
6869
|
function isProcessAlive(pid) {
|
|
6870
6870
|
try {
|
|
@@ -6931,7 +6931,7 @@ function acquireInstallLock(dataDir) {
|
|
|
6931
6931
|
try {
|
|
6932
6932
|
mkdirSync(dataDir, { recursive: true });
|
|
6933
6933
|
} catch (err) {
|
|
6934
|
-
logger$
|
|
6934
|
+
logger$10.warn("failed to ensure data dir for install lock", {
|
|
6935
6935
|
dataDir,
|
|
6936
6936
|
error: err instanceof Error ? err.message : String(err)
|
|
6937
6937
|
});
|
|
@@ -6941,18 +6941,18 @@ function acquireInstallLock(dataDir) {
|
|
|
6941
6941
|
try {
|
|
6942
6942
|
if (tryCreate(path)) return { path };
|
|
6943
6943
|
} catch (err) {
|
|
6944
|
-
logger$
|
|
6944
|
+
logger$10.warn("unexpected error acquiring install lock", {
|
|
6945
6945
|
path,
|
|
6946
6946
|
error: err instanceof Error ? err.message : String(err)
|
|
6947
6947
|
});
|
|
6948
6948
|
return null;
|
|
6949
6949
|
}
|
|
6950
6950
|
if (!isStale(path)) return null;
|
|
6951
|
-
logger$
|
|
6951
|
+
logger$10.info("removing stale install lock and retrying acquire", { path });
|
|
6952
6952
|
try {
|
|
6953
6953
|
rmSync(path, { force: true });
|
|
6954
6954
|
} catch (err) {
|
|
6955
|
-
logger$
|
|
6955
|
+
logger$10.warn("failed to remove stale install lock", {
|
|
6956
6956
|
path,
|
|
6957
6957
|
error: err instanceof Error ? err.message : String(err)
|
|
6958
6958
|
});
|
|
@@ -6961,7 +6961,7 @@ function acquireInstallLock(dataDir) {
|
|
|
6961
6961
|
try {
|
|
6962
6962
|
if (tryCreate(path)) return { path };
|
|
6963
6963
|
} catch (err) {
|
|
6964
|
-
logger$
|
|
6964
|
+
logger$10.warn("unexpected error re-acquiring install lock", {
|
|
6965
6965
|
path,
|
|
6966
6966
|
error: err instanceof Error ? err.message : String(err)
|
|
6967
6967
|
});
|
|
@@ -6974,7 +6974,7 @@ function releaseInstallLock(handle) {
|
|
|
6974
6974
|
try {
|
|
6975
6975
|
rmSync(handle.path, { force: true });
|
|
6976
6976
|
} catch (err) {
|
|
6977
|
-
logger$
|
|
6977
|
+
logger$10.warn("failed to release install lock", {
|
|
6978
6978
|
path: handle.path,
|
|
6979
6979
|
error: err instanceof Error ? err.message : String(err)
|
|
6980
6980
|
});
|
|
@@ -10665,7 +10665,7 @@ var yo = (s) => {
|
|
|
10665
10665
|
* 4. null → remote download (the UI build from the @openpalm/ui npm registry
|
|
10666
10666
|
* tarball; the .openpalm skeleton from the GitHub repo tarball)
|
|
10667
10667
|
*/
|
|
10668
|
-
var logger$
|
|
10668
|
+
var logger$9 = createLogger("lib:ui-assets");
|
|
10669
10669
|
async function fetchWithRetry(url, retries = 3) {
|
|
10670
10670
|
for (let i = 0; i < retries; i++) try {
|
|
10671
10671
|
const res = await fetch(url, { signal: AbortSignal.timeout(6e4) });
|
|
@@ -10761,7 +10761,7 @@ async function downloadNpmUiBundle(manifest, uiDir, dataDir) {
|
|
|
10761
10761
|
const data = new Uint8Array(await res.arrayBuffer());
|
|
10762
10762
|
if (!manifest.integrity) throw new Error(`npm manifest for ${UI_PACKAGE}@${manifest.version} has no integrity hash — refusing to install unverified`);
|
|
10763
10763
|
verifyNpmIntegrity(data, manifest.integrity);
|
|
10764
|
-
logger$
|
|
10764
|
+
logger$9.debug("UI bundle integrity verified", { version: manifest.version });
|
|
10765
10765
|
const tmpTar = join(dataDir, ".ui-build.tgz.tmp");
|
|
10766
10766
|
const staging = join(dataDir, ".ui-build.staging");
|
|
10767
10767
|
try {
|
|
@@ -10804,7 +10804,7 @@ async function seedUiBuild(repoRef, dataDir, options) {
|
|
|
10804
10804
|
const uiDir = join(dataDir, "ui");
|
|
10805
10805
|
mkdirSync(uiDir, { recursive: true });
|
|
10806
10806
|
const manifest = await fetchNpmUiManifest(toNpmVersion(repoRef));
|
|
10807
|
-
logger$
|
|
10807
|
+
logger$9.debug("downloading UI build from npm", { version: manifest.version });
|
|
10808
10808
|
await downloadNpmUiBundle(manifest, uiDir, dataDir);
|
|
10809
10809
|
}
|
|
10810
10810
|
//#endregion
|
|
@@ -10925,7 +10925,7 @@ function removeSecretFile(stackDir, name) {
|
|
|
10925
10925
|
//#region ../lib/src/control-plane/secrets.ts
|
|
10926
10926
|
/** Secrets and capability key management. */
|
|
10927
10927
|
var OPENCODE_STARTER_CONFIG = JSON.stringify({ $schema: "https://opencode.ai/config.json" }, null, 2) + "\n";
|
|
10928
|
-
var logger$
|
|
10928
|
+
var logger$8 = createLogger("secrets");
|
|
10929
10929
|
var VAULT_DIR_MODE = 448;
|
|
10930
10930
|
var VAULT_FILE_MODE = 384;
|
|
10931
10931
|
var SECRET_ENV_KEY_RE = /(?:^OP_UI_LOGIN_PASSWORD$|^OP_OPENCODE_PASSWORD$|_API_KEY$|_TOKEN$|_SECRET$|_PASSWORD$)/;
|
|
@@ -10945,7 +10945,7 @@ function enforceVaultDirMode(vaultDir) {
|
|
|
10945
10945
|
try {
|
|
10946
10946
|
chmodSync(vaultDir, VAULT_DIR_MODE);
|
|
10947
10947
|
} catch (error) {
|
|
10948
|
-
logger$
|
|
10948
|
+
logger$8.warn("failed to enforce vault directory permissions", {
|
|
10949
10949
|
vaultDir,
|
|
10950
10950
|
error: error instanceof Error ? error.message : String(error)
|
|
10951
10951
|
});
|
|
@@ -10956,7 +10956,7 @@ function writeVaultFile(path, content) {
|
|
|
10956
10956
|
try {
|
|
10957
10957
|
chmodSync(path, VAULT_FILE_MODE);
|
|
10958
10958
|
} catch (error) {
|
|
10959
|
-
logger$
|
|
10959
|
+
logger$8.warn("failed to enforce vault file permissions", {
|
|
10960
10960
|
path,
|
|
10961
10961
|
error: error instanceof Error ? error.message : String(error)
|
|
10962
10962
|
});
|
|
@@ -11021,7 +11021,7 @@ function ensureAuthJson(state) {
|
|
|
11021
11021
|
return;
|
|
11022
11022
|
}
|
|
11023
11023
|
} catch (error) {
|
|
11024
|
-
logger$
|
|
11024
|
+
logger$8.warn("failed to repair auth.json path", {
|
|
11025
11025
|
path: authJsonPath$1,
|
|
11026
11026
|
error: error instanceof Error ? error.message : String(error)
|
|
11027
11027
|
});
|
|
@@ -11064,12 +11064,12 @@ function writeAuthJsonProviderKeys(state, providerKeys) {
|
|
|
11064
11064
|
const corruptPath = `${authJsonPath$2}.corrupt-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
|
|
11065
11065
|
try {
|
|
11066
11066
|
renameSync(authJsonPath$2, corruptPath);
|
|
11067
|
-
logger$
|
|
11067
|
+
logger$8.warn("corrupt auth.json renamed for recovery", {
|
|
11068
11068
|
original: authJsonPath$2,
|
|
11069
11069
|
renamed: corruptPath
|
|
11070
11070
|
});
|
|
11071
11071
|
} catch (renameErr) {
|
|
11072
|
-
logger$
|
|
11072
|
+
logger$8.warn("could not rename corrupt auth.json; starting fresh", {
|
|
11073
11073
|
path: authJsonPath$2,
|
|
11074
11074
|
error: renameErr instanceof Error ? renameErr.message : String(renameErr)
|
|
11075
11075
|
});
|
|
@@ -11301,6 +11301,7 @@ async function refreshCoreAssets(version) {
|
|
|
11301
11301
|
* the rollback module (snapshot to OP_HOME/data/rollback/).
|
|
11302
11302
|
*/
|
|
11303
11303
|
var DEFAULT_IMAGE_TAG = "latest";
|
|
11304
|
+
var logger$7 = createLogger("config-persistence");
|
|
11304
11305
|
/**
|
|
11305
11306
|
* Return the env files used for docker compose --env-file args.
|
|
11306
11307
|
*
|
|
@@ -11437,6 +11438,7 @@ function ensureChannelSecret(stackDir, addon) {
|
|
|
11437
11438
|
function ensureComposeVolumeTargets(state) {
|
|
11438
11439
|
const composeFiles = discoverStackOverlays(state.stackDir, state.homeDir);
|
|
11439
11440
|
if (composeFiles.length === 0) return;
|
|
11441
|
+
const operatorIds = resolveOperatorIds(state.homeDir);
|
|
11440
11442
|
const envVars = {
|
|
11441
11443
|
...process.env,
|
|
11442
11444
|
...parseEnvFile(`${state.stashDir}/env/stack.env`)
|
|
@@ -11464,13 +11466,36 @@ function ensureComposeVolumeTargets(state) {
|
|
|
11464
11466
|
if (!resolvedHostPath.startsWith(`${homeRoot}/`) && resolvedHostPath !== homeRoot) continue;
|
|
11465
11467
|
if (existsSync(resolvedHostPath)) continue;
|
|
11466
11468
|
if ((resolvedHostPath.split("/").pop() ?? "").includes(".")) {
|
|
11467
|
-
|
|
11469
|
+
const parent = dirname(resolvedHostPath);
|
|
11470
|
+
mkdirSync(parent, { recursive: true });
|
|
11468
11471
|
writeFileSync(resolvedHostPath, "");
|
|
11469
|
-
|
|
11472
|
+
chownVolumeTarget(parent, operatorIds);
|
|
11473
|
+
chownVolumeTarget(resolvedHostPath, operatorIds);
|
|
11474
|
+
} else {
|
|
11475
|
+
mkdirSync(resolvedHostPath, { recursive: true });
|
|
11476
|
+
chownVolumeTarget(resolvedHostPath, operatorIds);
|
|
11477
|
+
}
|
|
11470
11478
|
}
|
|
11471
11479
|
}
|
|
11472
11480
|
}
|
|
11473
11481
|
}
|
|
11482
|
+
/**
|
|
11483
|
+
* chown a just-created bind-mount target to the operator UID/GID so the
|
|
11484
|
+
* non-root container (`user: ${OP_UID}:${OP_GID}`) can write to it.
|
|
11485
|
+
*
|
|
11486
|
+
* No-op on Windows (chown is meaningless there) or when no operator can be
|
|
11487
|
+
* resolved. A failure (e.g. not the owner) is logged and swallowed — the
|
|
11488
|
+
* mkdir already succeeded and Docker Desktop's gRPC-FUSE masks ownership
|
|
11489
|
+
* anyway, so a chown failure must not abort the install.
|
|
11490
|
+
*/
|
|
11491
|
+
function chownVolumeTarget(path, operatorIds) {
|
|
11492
|
+
if (process.platform === "win32" || !operatorIds) return;
|
|
11493
|
+
try {
|
|
11494
|
+
chownSync(path, operatorIds.uid, operatorIds.gid);
|
|
11495
|
+
} catch (error) {
|
|
11496
|
+
logger$7.warn(`Could not chown volume target ${path} to ${operatorIds.uid}:${operatorIds.gid}: ${error instanceof Error ? error.message : String(error)}`);
|
|
11497
|
+
}
|
|
11498
|
+
}
|
|
11474
11499
|
function writeRuntimeFiles(state) {
|
|
11475
11500
|
mkdirSync(state.stackDir, { recursive: true });
|
|
11476
11501
|
const composePath = `${state.stackDir}/core.compose.yml`;
|
|
@@ -11527,7 +11552,7 @@ function canonicalAddonProfileSelection(addon, profile) {
|
|
|
11527
11552
|
* the runtime source of truth.
|
|
11528
11553
|
*/
|
|
11529
11554
|
var VALID_NAME_RE = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
11530
|
-
var logger$
|
|
11555
|
+
var logger$6 = createLogger("registry");
|
|
11531
11556
|
var BUILTIN_ADDONS = [
|
|
11532
11557
|
"api",
|
|
11533
11558
|
"chat",
|
|
@@ -11728,7 +11753,7 @@ function readAddonServiceNamesFromContent(composeContent, composePath, addonName
|
|
|
11728
11753
|
return Array.isArray(profiles) && profiles.some((p) => typeof p === "string" && p.startsWith(`addon.${addonName}`));
|
|
11729
11754
|
}).map(([serviceName]) => serviceName);
|
|
11730
11755
|
} catch (error) {
|
|
11731
|
-
logger$
|
|
11756
|
+
logger$6.warn("failed to parse addon compose services", {
|
|
11732
11757
|
composePath,
|
|
11733
11758
|
error: error instanceof Error ? error.message : String(error)
|
|
11734
11759
|
});
|
|
@@ -11895,7 +11920,7 @@ function readAddonProfilesFromContent(composeContent, composePath) {
|
|
|
11895
11920
|
try {
|
|
11896
11921
|
parsed = (0, import_dist.parse)(composeContent);
|
|
11897
11922
|
} catch (error) {
|
|
11898
|
-
logger$
|
|
11923
|
+
logger$6.warn("failed to parse addon compose profiles", {
|
|
11899
11924
|
composePath,
|
|
11900
11925
|
error: error instanceof Error ? error.message : String(error)
|
|
11901
11926
|
});
|
|
@@ -12059,6 +12084,7 @@ function setAddonEnabled(homeDir, stackDir, name, enabled, state) {
|
|
|
12059
12084
|
"discord",
|
|
12060
12085
|
"slack"
|
|
12061
12086
|
]) ensureChannelSecret(stackDir, channel);
|
|
12087
|
+
if (state) ensureComposeVolumeTargets(state);
|
|
12062
12088
|
}
|
|
12063
12089
|
return {
|
|
12064
12090
|
ok: true,
|
|
@@ -12594,7 +12620,7 @@ function importHostProfiles(state, hostConfigPath) {
|
|
|
12594
12620
|
* We never write into the user's personal ~/.config/akm here. (Letting the host
|
|
12595
12621
|
* akm see OpenPalm's knowledge is a future, explicit opt-in.)
|
|
12596
12622
|
*/
|
|
12597
|
-
var logger$
|
|
12623
|
+
var logger$5 = createLogger("host-akm-sharing");
|
|
12598
12624
|
var ENV_KEY = "OP_HOST_AKM_STASH";
|
|
12599
12625
|
function userHome() {
|
|
12600
12626
|
return process.env.HOME ?? process.env.USERPROFILE ?? homedir();
|
|
@@ -12636,7 +12662,7 @@ function enableHostAkmSharing(state, opts = {}) {
|
|
|
12636
12662
|
addHostStashToOpenpalmConfig(state, opts.writable ?? true);
|
|
12637
12663
|
let profilesImported = [];
|
|
12638
12664
|
if (opts.importProfiles) profilesImported = importHostProfiles(state, hostAkmConfigPath()).imported;
|
|
12639
|
-
logger$
|
|
12665
|
+
logger$5.info("host akm sharing enabled", {
|
|
12640
12666
|
hostStashPath: hostAkmStashPath(),
|
|
12641
12667
|
profilesImported
|
|
12642
12668
|
});
|
|
@@ -12649,7 +12675,7 @@ function enableHostAkmSharing(state, opts = {}) {
|
|
|
12649
12675
|
*/
|
|
12650
12676
|
function disableHostAkmSharing(state) {
|
|
12651
12677
|
removeHostAkmSource(state);
|
|
12652
|
-
logger$
|
|
12678
|
+
logger$5.info("host akm sharing disabled");
|
|
12653
12679
|
}
|
|
12654
12680
|
/** Report availability + whether the host-akm source is currently configured. */
|
|
12655
12681
|
function getHostAkmSharingStatus(state) {
|
|
@@ -12870,7 +12896,7 @@ async function validateProposedState(state) {
|
|
|
12870
12896
|
};
|
|
12871
12897
|
}
|
|
12872
12898
|
/** Execute docker with an argument array — no shell interpolation. */
|
|
12873
|
-
function run(args, cwd, timeoutMs = 12e4, envOverrides) {
|
|
12899
|
+
function run$1(args, cwd, timeoutMs = 12e4, envOverrides) {
|
|
12874
12900
|
return new Promise((resolve) => {
|
|
12875
12901
|
execFile("docker", args, {
|
|
12876
12902
|
cwd,
|
|
@@ -12896,6 +12922,66 @@ function run(args, cwd, timeoutMs = 12e4, envOverrides) {
|
|
|
12896
12922
|
function resolveComposeProjectName(envOverrides = {}) {
|
|
12897
12923
|
return envOverrides.OP_PROJECT_NAME?.trim() || envOverrides.COMPOSE_PROJECT_NAME?.trim() || process.env.OP_PROJECT_NAME?.trim() || process.env.COMPOSE_PROJECT_NAME?.trim() || "openpalm";
|
|
12898
12924
|
}
|
|
12925
|
+
/**
|
|
12926
|
+
* Decide whether a running compose project (identified by its
|
|
12927
|
+
* `com.docker.compose.project.working_dir` label) is OURS — i.e. was launched
|
|
12928
|
+
* from this install's working dir. An empty/unknown label can't prove foreign,
|
|
12929
|
+
* so it counts as ours (reconcile rather than wrongly refuse a redeploy).
|
|
12930
|
+
*
|
|
12931
|
+
* Pure decision split out from detectExistingProject so the ours-vs-foreign
|
|
12932
|
+
* rule is unit-testable without a Docker daemon.
|
|
12933
|
+
*/
|
|
12934
|
+
function isProjectOurs(workingDirLabel, expectedWorkingDir) {
|
|
12935
|
+
const label = workingDirLabel.trim();
|
|
12936
|
+
return label === "" || label === expectedWorkingDir;
|
|
12937
|
+
}
|
|
12938
|
+
/**
|
|
12939
|
+
* Probe the Docker daemon for a running compose project that shares
|
|
12940
|
+
* `projectName`. Decides ours-vs-foreign by comparing the project's
|
|
12941
|
+
* `com.docker.compose.project.working_dir` label against `expectedWorkingDir`
|
|
12942
|
+
* (the install's OP_HOME / compose context).
|
|
12943
|
+
*
|
|
12944
|
+
* Returns `{ exists:false }` on any docker error (daemon down, no permission) —
|
|
12945
|
+
* detection is best-effort and never blocks the caller; a real failure surfaces
|
|
12946
|
+
* later through composeUp.
|
|
12947
|
+
*/
|
|
12948
|
+
function detectExistingProject(opts) {
|
|
12949
|
+
const none = {
|
|
12950
|
+
exists: false,
|
|
12951
|
+
isOurs: false,
|
|
12952
|
+
workingDir: ""
|
|
12953
|
+
};
|
|
12954
|
+
return new Promise((resolve) => {
|
|
12955
|
+
execFile("docker", [
|
|
12956
|
+
"ps",
|
|
12957
|
+
"-q",
|
|
12958
|
+
"--filter",
|
|
12959
|
+
`label=com.docker.compose.project=${opts.projectName}`
|
|
12960
|
+
], { timeout: 1e4 }, (err, stdout) => {
|
|
12961
|
+
if (err) return resolve(none);
|
|
12962
|
+
const ids = stdout.toString().trim().split(/\s+/).filter(Boolean);
|
|
12963
|
+
if (ids.length === 0) return resolve(none);
|
|
12964
|
+
execFile("docker", [
|
|
12965
|
+
"inspect",
|
|
12966
|
+
"--format",
|
|
12967
|
+
"{{ index .Config.Labels \"com.docker.compose.project.working_dir\" }}",
|
|
12968
|
+
ids[0]
|
|
12969
|
+
], { timeout: 1e4 }, (err2, stdout2) => {
|
|
12970
|
+
if (err2) return resolve({
|
|
12971
|
+
exists: true,
|
|
12972
|
+
isOurs: false,
|
|
12973
|
+
workingDir: ""
|
|
12974
|
+
});
|
|
12975
|
+
const workingDir = stdout2.toString().trim();
|
|
12976
|
+
resolve({
|
|
12977
|
+
exists: true,
|
|
12978
|
+
isOurs: isProjectOurs(workingDir, opts.expectedWorkingDir),
|
|
12979
|
+
workingDir
|
|
12980
|
+
});
|
|
12981
|
+
});
|
|
12982
|
+
});
|
|
12983
|
+
});
|
|
12984
|
+
}
|
|
12899
12985
|
/** Check if Docker is available */
|
|
12900
12986
|
async function checkDocker() {
|
|
12901
12987
|
return new Promise((resolve) => {
|
|
@@ -12954,7 +13040,7 @@ function collectEnvOverrides(envFiles) {
|
|
|
12954
13040
|
async function composePreflight(options) {
|
|
12955
13041
|
const args = buildComposeArgs(options);
|
|
12956
13042
|
args.push("config", "--quiet");
|
|
12957
|
-
return run(args, void 0, 3e4, collectEnvOverrides(options.envFiles));
|
|
13043
|
+
return run$1(args, void 0, 3e4, collectEnvOverrides(options.envFiles));
|
|
12958
13044
|
}
|
|
12959
13045
|
/**
|
|
12960
13046
|
* Run compose config preflight validation before any mutation.
|
|
@@ -12974,7 +13060,7 @@ async function runPreflight(options) {
|
|
|
12974
13060
|
async function composeConfigServices(options) {
|
|
12975
13061
|
const args = buildComposeArgs(options);
|
|
12976
13062
|
args.push("config", "--services");
|
|
12977
|
-
const result = await run(args, void 0, 3e4, collectEnvOverrides(options.envFiles));
|
|
13063
|
+
const result = await run$1(args, void 0, 3e4, collectEnvOverrides(options.envFiles));
|
|
12978
13064
|
if (!result.ok) return {
|
|
12979
13065
|
ok: false,
|
|
12980
13066
|
services: []
|
|
@@ -13001,7 +13087,20 @@ async function composeUp(options) {
|
|
|
13001
13087
|
if (options.forceRecreate) args.push("--force-recreate");
|
|
13002
13088
|
if (options.removeOrphans) args.push("--remove-orphans");
|
|
13003
13089
|
if (options.services?.length) args.push(...options.services);
|
|
13004
|
-
return run(args, void 0,
|
|
13090
|
+
return run$1(args, void 0, composeUpTimeoutMs(), collectEnvOverrides(options.envFiles));
|
|
13091
|
+
}
|
|
13092
|
+
/**
|
|
13093
|
+
* Timeout budget for `compose up`. A first install extracts multi-GB images
|
|
13094
|
+
* (voice CUDA ~7.6 GB) onto slow disks; the previous hard 5-minute cap
|
|
13095
|
+
* SIGTERM-killed the start mid-extraction and surfaced as an empty/opaque
|
|
13096
|
+
* error. Default 30 min, override with OP_COMPOSE_UP_TIMEOUT_MS. Kept bounded
|
|
13097
|
+
* (never removed) so a genuinely hung start still eventually fails.
|
|
13098
|
+
*/
|
|
13099
|
+
function composeUpTimeoutMs() {
|
|
13100
|
+
const raw = process.env.OP_COMPOSE_UP_TIMEOUT_MS?.trim();
|
|
13101
|
+
const parsed = raw ? Number(raw) : NaN;
|
|
13102
|
+
if (Number.isFinite(parsed) && parsed > 0) return parsed;
|
|
13103
|
+
return 30 * 6e4;
|
|
13005
13104
|
}
|
|
13006
13105
|
/**
|
|
13007
13106
|
* Run `docker compose down` to stop and remove containers.
|
|
@@ -13017,7 +13116,7 @@ async function composeDown(options) {
|
|
|
13017
13116
|
const args = buildComposeArgs(options);
|
|
13018
13117
|
args.push("down");
|
|
13019
13118
|
if (options.removeVolumes) args.push("-v");
|
|
13020
|
-
return run(args, void 0);
|
|
13119
|
+
return run$1(args, void 0);
|
|
13021
13120
|
}
|
|
13022
13121
|
/**
|
|
13023
13122
|
* Restart specific services.
|
|
@@ -13033,7 +13132,7 @@ async function composeRestart(services, options) {
|
|
|
13033
13132
|
};
|
|
13034
13133
|
const args = buildComposeArgs(options);
|
|
13035
13134
|
args.push("restart", ...services);
|
|
13036
|
-
return run(args, void 0);
|
|
13135
|
+
return run$1(args, void 0);
|
|
13037
13136
|
}
|
|
13038
13137
|
/**
|
|
13039
13138
|
* Stop specific services.
|
|
@@ -13042,7 +13141,7 @@ async function composeStop(services, options) {
|
|
|
13042
13141
|
await runPreflight(options);
|
|
13043
13142
|
const args = buildComposeArgs(options);
|
|
13044
13143
|
args.push("stop", ...services);
|
|
13045
|
-
return run(args, void 0);
|
|
13144
|
+
return run$1(args, void 0);
|
|
13046
13145
|
}
|
|
13047
13146
|
/**
|
|
13048
13147
|
* Start specific services (must already be created).
|
|
@@ -13051,14 +13150,14 @@ async function composeStart(services, options) {
|
|
|
13051
13150
|
await runPreflight(options);
|
|
13052
13151
|
const args = buildComposeArgs(options);
|
|
13053
13152
|
args.push("up", "-d", ...services);
|
|
13054
|
-
return run(args, void 0);
|
|
13153
|
+
return run$1(args, void 0);
|
|
13055
13154
|
}
|
|
13056
13155
|
/**
|
|
13057
13156
|
* Get the status of all containers in the project.
|
|
13058
13157
|
*/
|
|
13059
13158
|
async function composePs(options) {
|
|
13060
13159
|
const primaryFile = options.files[0];
|
|
13061
|
-
if (!existsSync(primaryFile)) return run([
|
|
13160
|
+
if (!existsSync(primaryFile)) return run$1([
|
|
13062
13161
|
"ps",
|
|
13063
13162
|
"--filter",
|
|
13064
13163
|
`label=com.docker.compose.project=${resolveComposeProjectName()}`,
|
|
@@ -13067,7 +13166,7 @@ async function composePs(options) {
|
|
|
13067
13166
|
], void 0);
|
|
13068
13167
|
const args = buildComposeArgs(options);
|
|
13069
13168
|
args.push("ps", "--format", "json");
|
|
13070
|
-
return run(args, void 0);
|
|
13169
|
+
return run$1(args, void 0);
|
|
13071
13170
|
}
|
|
13072
13171
|
/**
|
|
13073
13172
|
* Get logs for specific services or all services.
|
|
@@ -13077,14 +13176,14 @@ async function composeLogs(services, tail, options) {
|
|
|
13077
13176
|
args.push("logs", "--tail", String(tail));
|
|
13078
13177
|
if (options.since) args.push("--since", options.since);
|
|
13079
13178
|
if (services && services.length > 0) args.push(...services);
|
|
13080
|
-
return run(args, void 0);
|
|
13179
|
+
return run$1(args, void 0);
|
|
13081
13180
|
}
|
|
13082
13181
|
var PULL_TIMEOUT_MS = 60 * 6e4;
|
|
13083
13182
|
async function composePull(options) {
|
|
13084
13183
|
await runPreflight(options);
|
|
13085
13184
|
const args = buildComposeArgs(options);
|
|
13086
13185
|
args.push("pull");
|
|
13087
|
-
return run(args, void 0, PULL_TIMEOUT_MS, collectEnvOverrides(options.envFiles));
|
|
13186
|
+
return run$1(args, void 0, PULL_TIMEOUT_MS, collectEnvOverrides(options.envFiles));
|
|
13088
13187
|
}
|
|
13089
13188
|
/**
|
|
13090
13189
|
* Get resource usage stats for all containers in the project.
|
|
@@ -13092,13 +13191,13 @@ async function composePull(options) {
|
|
|
13092
13191
|
async function composeStats(options) {
|
|
13093
13192
|
const args = buildComposeArgs(options);
|
|
13094
13193
|
args.push("stats", "--no-stream", "--format", "json");
|
|
13095
|
-
return run(args, void 0);
|
|
13194
|
+
return run$1(args, void 0);
|
|
13096
13195
|
}
|
|
13097
13196
|
/**
|
|
13098
13197
|
* Get recent Docker events for the compose project.
|
|
13099
13198
|
*/
|
|
13100
13199
|
async function getDockerEvents(projectName, since = "1h") {
|
|
13101
|
-
return run([
|
|
13200
|
+
return run$1([
|
|
13102
13201
|
"events",
|
|
13103
13202
|
"--filter",
|
|
13104
13203
|
`label=com.docker.compose.project=${projectName}`,
|
|
@@ -13249,10 +13348,23 @@ function resolveNewestDockerTag(payload) {
|
|
|
13249
13348
|
}
|
|
13250
13349
|
return fallback;
|
|
13251
13350
|
}
|
|
13252
|
-
|
|
13253
|
-
const
|
|
13254
|
-
const namespace = (parseEnvFile(systemEnvPath).OP_IMAGE_NAMESPACE ?? process.env.OP_IMAGE_NAMESPACE ?? "openpalm").trim().toLowerCase();
|
|
13351
|
+
function resolveImageNamespace(state) {
|
|
13352
|
+
const namespace = (parseEnvFile(`${state.stashDir}/env/stack.env`).OP_IMAGE_NAMESPACE ?? process.env.OP_IMAGE_NAMESPACE ?? "openpalm").trim().toLowerCase();
|
|
13255
13353
|
if (!IMAGE_NAMESPACE_RE.test(namespace)) throw new Error(`Invalid image namespace in system.env: ${namespace}`);
|
|
13354
|
+
return namespace;
|
|
13355
|
+
}
|
|
13356
|
+
/**
|
|
13357
|
+
* Resolve the newest published platform tag from the Docker registry.
|
|
13358
|
+
*
|
|
13359
|
+
* `assistant` is the version-of-record image: all platform images
|
|
13360
|
+
* (assistant, guardian, channel, voice) are published in lockstep under the
|
|
13361
|
+
* same OP_IMAGE_TAG, so its newest tag is the canonical platform version.
|
|
13362
|
+
*
|
|
13363
|
+
* Used both to auto-detect during "Update now" and to resolve a requested
|
|
13364
|
+
* `latest` selection into a concrete release tag before fetching stack assets
|
|
13365
|
+
* (GitHub has no asset tree at a `latest` ref).
|
|
13366
|
+
*/
|
|
13367
|
+
async function resolveLatestPlatformTag(namespace) {
|
|
13256
13368
|
let response;
|
|
13257
13369
|
try {
|
|
13258
13370
|
response = await fetch(`https://registry.hub.docker.com/v2/repositories/${namespace}/assistant/tags?page_size=25&ordering=last_updated`, { headers: { Accept: "application/json" } });
|
|
@@ -13262,6 +13374,12 @@ async function updateStackEnvToLatestImageTag(state) {
|
|
|
13262
13374
|
if (!response.ok) throw new Error(`Docker tag lookup failed (${response.status})`);
|
|
13263
13375
|
const latestTag = resolveNewestDockerTag(await response.json());
|
|
13264
13376
|
if (!latestTag) throw new Error("No usable Docker image tag found");
|
|
13377
|
+
return latestTag;
|
|
13378
|
+
}
|
|
13379
|
+
async function updateStackEnvToLatestImageTag(state) {
|
|
13380
|
+
const systemEnvPath = `${state.stashDir}/env/stack.env`;
|
|
13381
|
+
const namespace = resolveImageNamespace(state);
|
|
13382
|
+
const latestTag = await resolveLatestPlatformTag(namespace);
|
|
13265
13383
|
writeFileSync(systemEnvPath, mergeEnvContent(existsSync(systemEnvPath) ? readFileSync(systemEnvPath, "utf-8") : "", { OP_IMAGE_TAG: latestTag }, { uncomment: true }));
|
|
13266
13384
|
return {
|
|
13267
13385
|
namespace,
|
|
@@ -13315,6 +13433,7 @@ async function performUpgrade(state) {
|
|
|
13315
13433
|
const upResult = await composeUp({
|
|
13316
13434
|
...composeOpts,
|
|
13317
13435
|
services,
|
|
13436
|
+
forceRecreate: true,
|
|
13318
13437
|
removeOrphans: true
|
|
13319
13438
|
});
|
|
13320
13439
|
if (!upResult.ok) throw new Error(`Images pulled but failed to recreate containers: ${upResult.stderr}`);
|
|
@@ -13331,12 +13450,21 @@ async function performUpgrade(state) {
|
|
|
13331
13450
|
* Used by the admin "set version" action — skips the auto-detect step in performUpgrade.
|
|
13332
13451
|
*/
|
|
13333
13452
|
async function applyTagChange(state, tag) {
|
|
13453
|
+
const namespace = resolveImageNamespace(state);
|
|
13454
|
+
const requested = tag.trim();
|
|
13455
|
+
let resolvedTag = requested;
|
|
13456
|
+
if (requested === "" || requested.toLowerCase() === "latest") try {
|
|
13457
|
+
resolvedTag = await resolveLatestPlatformTag(namespace);
|
|
13458
|
+
} catch (e) {
|
|
13459
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
13460
|
+
throw new Error(`Cannot resolve "latest" to a concrete release: ${msg}. Check your network connection or select a specific version.`);
|
|
13461
|
+
}
|
|
13334
13462
|
const stackEnvPath = `${state.stashDir}/env/stack.env`;
|
|
13335
|
-
writeFileSync(stackEnvPath, mergeEnvContent(existsSync(stackEnvPath) ? readFileSync(stackEnvPath, "utf-8") : "", { OP_IMAGE_TAG:
|
|
13336
|
-
const upgradeResult = await applyUpgrade(state,
|
|
13463
|
+
writeFileSync(stackEnvPath, mergeEnvContent(existsSync(stackEnvPath) ? readFileSync(stackEnvPath, "utf-8") : "", { OP_IMAGE_TAG: resolvedTag }, { uncomment: true }));
|
|
13464
|
+
const upgradeResult = await applyUpgrade(state, resolvedTag);
|
|
13337
13465
|
return {
|
|
13338
|
-
imageTag:
|
|
13339
|
-
namespace
|
|
13466
|
+
imageTag: resolvedTag,
|
|
13467
|
+
namespace,
|
|
13340
13468
|
backupDir: upgradeResult.backupDir,
|
|
13341
13469
|
assetsUpdated: upgradeResult.updated,
|
|
13342
13470
|
restarted: upgradeResult.restarted
|
|
@@ -13347,13 +13475,16 @@ function buildComposeFileList(state) {
|
|
|
13347
13475
|
}
|
|
13348
13476
|
async function buildManagedServices(state) {
|
|
13349
13477
|
const composeOpts = buildComposeOptions(state);
|
|
13478
|
+
const services = new Set(CORE_SERVICES);
|
|
13350
13479
|
if (composeOpts.files.length > 0 && !process.env.OP_SKIP_COMPOSE_PREFLIGHT) {
|
|
13351
13480
|
const result = await composeConfigServices(composeOpts);
|
|
13352
|
-
if (result.ok && result.services.length > 0)
|
|
13481
|
+
if (result.ok && result.services.length > 0) {
|
|
13482
|
+
for (const s of result.services) services.add(s);
|
|
13483
|
+
return [...services];
|
|
13484
|
+
}
|
|
13353
13485
|
}
|
|
13354
|
-
const
|
|
13355
|
-
|
|
13356
|
-
return services;
|
|
13486
|
+
for (const addon of listEnabledAddonIds(state.homeDir)) for (const s of getAddonServiceNames(state.homeDir, addon)) services.add(s);
|
|
13487
|
+
return [...services];
|
|
13357
13488
|
}
|
|
13358
13489
|
//#endregion
|
|
13359
13490
|
//#region ../lib/src/control-plane/markdown-task.ts
|
|
@@ -13365,14 +13496,14 @@ async function buildManagedServices(state) {
|
|
|
13365
13496
|
* prompt — `prompt: <text>` inline prompt text
|
|
13366
13497
|
* workflow — `workflow: workflow:<ref>` + optional `params` map
|
|
13367
13498
|
*/
|
|
13368
|
-
var logger$
|
|
13499
|
+
var logger$4 = createLogger("task-file");
|
|
13369
13500
|
function parseMarkdownTask(filePath) {
|
|
13370
13501
|
const id = basename(filePath).replace(/\.(?:ya?ml|md)$/, "");
|
|
13371
13502
|
let raw;
|
|
13372
13503
|
try {
|
|
13373
13504
|
raw = readFileSync(filePath, "utf-8");
|
|
13374
13505
|
} catch (err) {
|
|
13375
|
-
logger$
|
|
13506
|
+
logger$4.warn("failed to read task file", {
|
|
13376
13507
|
filePath,
|
|
13377
13508
|
error: String(err)
|
|
13378
13509
|
});
|
|
@@ -13383,12 +13514,12 @@ function parseMarkdownTask(filePath) {
|
|
|
13383
13514
|
try {
|
|
13384
13515
|
const parsed = (0, import_dist.parse)(frontmatter);
|
|
13385
13516
|
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
13386
|
-
logger$
|
|
13517
|
+
logger$4.warn("task YAML is not an object", { filePath });
|
|
13387
13518
|
return null;
|
|
13388
13519
|
}
|
|
13389
13520
|
fm = parsed;
|
|
13390
13521
|
} catch (err) {
|
|
13391
|
-
logger$
|
|
13522
|
+
logger$4.warn("failed to parse task YAML", {
|
|
13392
13523
|
filePath,
|
|
13393
13524
|
error: String(err)
|
|
13394
13525
|
});
|
|
@@ -13396,14 +13527,14 @@ function parseMarkdownTask(filePath) {
|
|
|
13396
13527
|
}
|
|
13397
13528
|
const schedule = fm.schedule;
|
|
13398
13529
|
if (typeof schedule !== "string" || !schedule.trim()) {
|
|
13399
|
-
logger$
|
|
13530
|
+
logger$4.warn("task missing or empty 'schedule'", { filePath });
|
|
13400
13531
|
return null;
|
|
13401
13532
|
}
|
|
13402
13533
|
let target;
|
|
13403
13534
|
if (fm.command !== void 0) {
|
|
13404
13535
|
const cmd = Array.isArray(fm.command) ? fm.command.map(String) : typeof fm.command === "string" ? [fm.command] : null;
|
|
13405
13536
|
if (!cmd || cmd.length === 0) {
|
|
13406
|
-
logger$
|
|
13537
|
+
logger$4.warn("task 'command' must be a non-empty array", { filePath });
|
|
13407
13538
|
return null;
|
|
13408
13539
|
}
|
|
13409
13540
|
target = {
|
|
@@ -13412,12 +13543,12 @@ function parseMarkdownTask(filePath) {
|
|
|
13412
13543
|
};
|
|
13413
13544
|
} else if (fm.prompt !== void 0) {
|
|
13414
13545
|
if (typeof fm.prompt !== "string" || !fm.prompt.trim()) {
|
|
13415
|
-
logger$
|
|
13546
|
+
logger$4.warn("task 'prompt' must be a non-empty string", { filePath });
|
|
13416
13547
|
return null;
|
|
13417
13548
|
}
|
|
13418
13549
|
const promptBody = fm.prompt.trim() === "inline" ? body.trim() : fm.prompt.trim();
|
|
13419
13550
|
if (!promptBody) {
|
|
13420
|
-
logger$
|
|
13551
|
+
logger$4.warn("task prompt body is empty", { filePath });
|
|
13421
13552
|
return null;
|
|
13422
13553
|
}
|
|
13423
13554
|
target = {
|
|
@@ -13427,7 +13558,7 @@ function parseMarkdownTask(filePath) {
|
|
|
13427
13558
|
};
|
|
13428
13559
|
} else if (fm.workflow !== void 0) {
|
|
13429
13560
|
if (typeof fm.workflow !== "string") {
|
|
13430
|
-
logger$
|
|
13561
|
+
logger$4.warn("task 'workflow' must be a string ref", { filePath });
|
|
13431
13562
|
return null;
|
|
13432
13563
|
}
|
|
13433
13564
|
target = {
|
|
@@ -13436,7 +13567,7 @@ function parseMarkdownTask(filePath) {
|
|
|
13436
13567
|
params: fm.params && typeof fm.params === "object" && !Array.isArray(fm.params) ? fm.params : {}
|
|
13437
13568
|
};
|
|
13438
13569
|
} else {
|
|
13439
|
-
logger$
|
|
13570
|
+
logger$4.warn("task must have one of: command, prompt, workflow", { filePath });
|
|
13440
13571
|
return null;
|
|
13441
13572
|
}
|
|
13442
13573
|
return {
|
|
@@ -13653,7 +13784,7 @@ function readUserEnvFile(envPath) {
|
|
|
13653
13784
|
* Scheduling is handled by the OS cron daemon (via `akm tasks sync`).
|
|
13654
13785
|
* Execution is handled by `akm tasks run <id>`.
|
|
13655
13786
|
*/
|
|
13656
|
-
var logger$
|
|
13787
|
+
var logger$3 = createLogger("scheduler");
|
|
13657
13788
|
function loadAutomations(stashDir) {
|
|
13658
13789
|
return loadMarkdownTasks(stashDir).map(taskToAutomationConfig);
|
|
13659
13790
|
}
|
|
@@ -13671,7 +13802,7 @@ async function executeAutomation(id, akmEnv) {
|
|
|
13671
13802
|
} }, (error, _stdout, stderr) => {
|
|
13672
13803
|
if (error) {
|
|
13673
13804
|
const msg = stderr?.trim() || error.message;
|
|
13674
|
-
logger$
|
|
13805
|
+
logger$3.warn("akm tasks run failed", {
|
|
13675
13806
|
id: taskId,
|
|
13676
13807
|
error: msg
|
|
13677
13808
|
});
|
|
@@ -13711,7 +13842,7 @@ function readAutomationLogs(id, dataDir, limit = 50) {
|
|
|
13711
13842
|
*
|
|
13712
13843
|
* Probes well-known endpoints for Docker Model Runner, Ollama, and LM Studio.
|
|
13713
13844
|
*/
|
|
13714
|
-
var logger$
|
|
13845
|
+
var logger$2 = createLogger("local-providers");
|
|
13715
13846
|
/** Ollama's root endpoint returns "Ollama is running" — use this to distinguish from other services on :11434. */
|
|
13716
13847
|
async function validateOllamaResponse(res) {
|
|
13717
13848
|
try {
|
|
@@ -13784,13 +13915,13 @@ async function detectLocalProviders() {
|
|
|
13784
13915
|
const res = await fetch(probeUrl, { signal: AbortSignal.timeout(3e3) });
|
|
13785
13916
|
if (res.ok) {
|
|
13786
13917
|
if (validate && !await validate(res)) {
|
|
13787
|
-
logger$
|
|
13918
|
+
logger$2.debug("provider probe response failed validation", {
|
|
13788
13919
|
provider,
|
|
13789
13920
|
url: baseUrl
|
|
13790
13921
|
});
|
|
13791
13922
|
continue;
|
|
13792
13923
|
}
|
|
13793
|
-
logger$
|
|
13924
|
+
logger$2.debug("detected local provider", {
|
|
13794
13925
|
provider,
|
|
13795
13926
|
url: baseUrl
|
|
13796
13927
|
});
|
|
@@ -13809,6 +13940,173 @@ async function detectLocalProviders() {
|
|
|
13809
13940
|
}));
|
|
13810
13941
|
}
|
|
13811
13942
|
//#endregion
|
|
13943
|
+
//#region ../lib/src/control-plane/hardware-detect.ts
|
|
13944
|
+
var logger$1 = createLogger("hardware-detect");
|
|
13945
|
+
/** Parse `nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits`. */
|
|
13946
|
+
function parseNvidiaSmi(stdout) {
|
|
13947
|
+
return stdout.split("\n").map((line) => line.trim()).filter(Boolean).map((line) => {
|
|
13948
|
+
const idx = line.lastIndexOf(",");
|
|
13949
|
+
if (idx === -1) return null;
|
|
13950
|
+
const name = line.slice(0, idx).trim();
|
|
13951
|
+
const vramMb = Number.parseInt(line.slice(idx + 1).trim(), 10);
|
|
13952
|
+
if (!name || !Number.isFinite(vramMb)) return null;
|
|
13953
|
+
return {
|
|
13954
|
+
vendor: "nvidia",
|
|
13955
|
+
name,
|
|
13956
|
+
vramMb
|
|
13957
|
+
};
|
|
13958
|
+
}).filter((g) => g !== null);
|
|
13959
|
+
}
|
|
13960
|
+
/** Parse `rocm-smi --showmeminfo vram --showproductname --json`. */
|
|
13961
|
+
function parseRocmSmi(stdout) {
|
|
13962
|
+
let doc;
|
|
13963
|
+
try {
|
|
13964
|
+
doc = JSON.parse(stdout);
|
|
13965
|
+
} catch {
|
|
13966
|
+
return [];
|
|
13967
|
+
}
|
|
13968
|
+
const out = [];
|
|
13969
|
+
for (const card of Object.values(doc)) {
|
|
13970
|
+
if (!card || typeof card !== "object") continue;
|
|
13971
|
+
const vramKey = Object.keys(card).find((k) => /vram total memory/i.test(k));
|
|
13972
|
+
const nameKey = Object.keys(card).find((k) => /product name|card series|gfx/i.test(k));
|
|
13973
|
+
const bytes = vramKey ? Number.parseInt(String(card[vramKey]).trim(), 10) : NaN;
|
|
13974
|
+
const vramMb = Number.isFinite(bytes) ? Math.round(bytes / (1024 * 1024)) : 0;
|
|
13975
|
+
out.push({
|
|
13976
|
+
vendor: "amd",
|
|
13977
|
+
name: nameKey ? String(card[nameKey]).trim() : "AMD GPU",
|
|
13978
|
+
vramMb
|
|
13979
|
+
});
|
|
13980
|
+
}
|
|
13981
|
+
return out;
|
|
13982
|
+
}
|
|
13983
|
+
/**
|
|
13984
|
+
* Parse `sysctl -n hw.memsize hw.model` (two lines: total bytes, then model id)
|
|
13985
|
+
* into an Apple-Silicon GpuInfo. `hw.memsize` is UNIFIED memory shared between
|
|
13986
|
+
* CPU and GPU, carried here as vramMb for informational display only — callers
|
|
13987
|
+
* must NOT treat it like discrete VRAM (see setup-recommendation). Pure; never throws.
|
|
13988
|
+
*/
|
|
13989
|
+
function parseAppleSilicon(stdout) {
|
|
13990
|
+
const lines = stdout.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
13991
|
+
if (lines.length === 0) return [];
|
|
13992
|
+
const bytes = Number.parseInt(lines[0] ?? "", 10);
|
|
13993
|
+
if (!Number.isFinite(bytes) || bytes <= 0) return [];
|
|
13994
|
+
const vramMb = Math.round(bytes / (1024 * 1024));
|
|
13995
|
+
return [{
|
|
13996
|
+
vendor: "apple",
|
|
13997
|
+
name: `Apple Silicon (${lines[1] && lines[1].length > 0 ? lines[1] : "arm64"})`,
|
|
13998
|
+
vramMb
|
|
13999
|
+
}];
|
|
14000
|
+
}
|
|
14001
|
+
var GPU_PROBES = [
|
|
14002
|
+
{
|
|
14003
|
+
vendor: "nvidia",
|
|
14004
|
+
command: "nvidia-smi",
|
|
14005
|
+
args: ["--query-gpu=name,memory.total", "--format=csv,noheader,nounits"],
|
|
14006
|
+
parse: parseNvidiaSmi
|
|
14007
|
+
},
|
|
14008
|
+
{
|
|
14009
|
+
vendor: "amd",
|
|
14010
|
+
command: "rocm-smi",
|
|
14011
|
+
args: [
|
|
14012
|
+
"--showmeminfo",
|
|
14013
|
+
"vram",
|
|
14014
|
+
"--showproductname",
|
|
14015
|
+
"--json"
|
|
14016
|
+
],
|
|
14017
|
+
parse: parseRocmSmi
|
|
14018
|
+
},
|
|
14019
|
+
{
|
|
14020
|
+
vendor: "apple",
|
|
14021
|
+
command: "sysctl",
|
|
14022
|
+
args: [
|
|
14023
|
+
"-n",
|
|
14024
|
+
"hw.memsize",
|
|
14025
|
+
"hw.model"
|
|
14026
|
+
],
|
|
14027
|
+
parse: parseAppleSilicon,
|
|
14028
|
+
enabled: process.platform === "darwin" && process.arch === "arm64"
|
|
14029
|
+
}
|
|
14030
|
+
];
|
|
14031
|
+
function run(command, args, timeoutMs = 3e3) {
|
|
14032
|
+
return new Promise((resolve) => {
|
|
14033
|
+
execFile(command, args, { timeout: timeoutMs }, (err, stdout) => {
|
|
14034
|
+
resolve(err ? null : stdout?.toString() ?? "");
|
|
14035
|
+
});
|
|
14036
|
+
});
|
|
14037
|
+
}
|
|
14038
|
+
/**
|
|
14039
|
+
* Detect the host's best GPU. Returns the highest-VRAM adapter across all probes,
|
|
14040
|
+
* or null when none is found. Never throws.
|
|
14041
|
+
*/
|
|
14042
|
+
async function detectGpu() {
|
|
14043
|
+
const found = [];
|
|
14044
|
+
await Promise.all(GPU_PROBES.map(async (probe) => {
|
|
14045
|
+
if (probe.enabled === false) return;
|
|
14046
|
+
const stdout = await run(probe.command, probe.args);
|
|
14047
|
+
if (stdout === null) return;
|
|
14048
|
+
try {
|
|
14049
|
+
found.push(...probe.parse(stdout));
|
|
14050
|
+
} catch (error) {
|
|
14051
|
+
logger$1.debug("gpu probe parse failed", {
|
|
14052
|
+
vendor: probe.vendor,
|
|
14053
|
+
error: String(error)
|
|
14054
|
+
});
|
|
14055
|
+
}
|
|
14056
|
+
}));
|
|
14057
|
+
if (found.length === 0) return null;
|
|
14058
|
+
return found.reduce((best, g) => g.vramMb > best.vramMb ? g : best);
|
|
14059
|
+
}
|
|
14060
|
+
/** Ollama hardware-profile variant chosen per GPU vendor. Extend per new vendor. */
|
|
14061
|
+
var VENDOR_PROFILE_VARIANT = {
|
|
14062
|
+
nvidia: "cuda",
|
|
14063
|
+
amd: "rocm",
|
|
14064
|
+
apple: "cpu",
|
|
14065
|
+
unknown: "cpu"
|
|
14066
|
+
};
|
|
14067
|
+
function gpuToProfileVariant(gpu) {
|
|
14068
|
+
return VENDOR_PROFILE_VARIANT[gpu.vendor] ?? "cpu";
|
|
14069
|
+
}
|
|
14070
|
+
var fmtGb = (mb) => (mb / 1024).toFixed(mb % 1024 === 0 ? 0 : 1);
|
|
14071
|
+
var labelHostProviders = (h) => h.map((p) => p.provider).join(" and ");
|
|
14072
|
+
/**
|
|
14073
|
+
* Decide what setup should do, given detected providers + hardware.
|
|
14074
|
+
*
|
|
14075
|
+
* Order (first match wins):
|
|
14076
|
+
* 1. cloud provider connected -> use it.
|
|
14077
|
+
* 2. host-local provider running -> add it, proceed.
|
|
14078
|
+
* 3. darwin + apple GPU -> guide to HOST Ollama (Metal); never in-stack.
|
|
14079
|
+
* 4. capable GPU (>= threshold) -> enable in-stack Ollama.
|
|
14080
|
+
* 5. otherwise -> ask the user to connect a provider.
|
|
14081
|
+
*/
|
|
14082
|
+
function recommendSetup(input) {
|
|
14083
|
+
const { cloudProviders, hostProviders, gpu } = input;
|
|
14084
|
+
const platform = input.platform ?? process.platform;
|
|
14085
|
+
if (cloudProviders.length > 0) return {
|
|
14086
|
+
action: "use-cloud",
|
|
14087
|
+
cloudProviders
|
|
14088
|
+
};
|
|
14089
|
+
if (hostProviders.length > 0) return {
|
|
14090
|
+
action: "use-host-providers",
|
|
14091
|
+
hostProviders,
|
|
14092
|
+
alert: `No cloud AI provider was detected, but ${labelHostProviders(hostProviders)} ${hostProviders.length > 1 ? "are" : "is"} running on your computer — added automatically. Pick your models on the next step.`
|
|
14093
|
+
};
|
|
14094
|
+
if (platform === "darwin" && gpu && gpu.vendor === "apple") return {
|
|
14095
|
+
action: "connect-manually",
|
|
14096
|
+
alert: "No AI provider was detected. On macOS, fast local models need Ollama running natively (it uses your Apple Silicon / Metal GPU) — the bundled in-stack Ollama runs in Linux and cannot reach Metal. Install Ollama for macOS (https://ollama.com/download), or connect a provider on the next step."
|
|
14097
|
+
};
|
|
14098
|
+
if (gpu && gpu.vramMb >= 8192) return {
|
|
14099
|
+
action: "enable-ollama",
|
|
14100
|
+
profileVariant: gpuToProfileVariant(gpu),
|
|
14101
|
+
gpu,
|
|
14102
|
+
alert: `No AI provider was detected, but a capable GPU was found (${gpu.name}, ${fmtGb(gpu.vramMb)} GB). Local models via Ollama have been enabled for you.`
|
|
14103
|
+
};
|
|
14104
|
+
return {
|
|
14105
|
+
action: "connect-manually",
|
|
14106
|
+
alert: "No AI provider was detected and no GPU with enough memory for local models was found. Connect a provider to continue — sign in to a provider on the next step, or add a custom OpenAI-compatible endpoint and key."
|
|
14107
|
+
};
|
|
14108
|
+
}
|
|
14109
|
+
//#endregion
|
|
13812
14110
|
//#region ../lib/src/control-plane/compose-errors.ts
|
|
13813
14111
|
/**
|
|
13814
14112
|
* Lines we recognise as per-service failure indicators. The compose CLI
|
|
@@ -14433,5 +14731,5 @@ function importHostOpenCode(state, options = {}) {
|
|
|
14433
14731
|
};
|
|
14434
14732
|
}
|
|
14435
14733
|
|
|
14436
|
-
export {
|
|
14437
|
-
//# sourceMappingURL=src-
|
|
14734
|
+
export { hostAkmStashPath as $, AKM_USER_ENV_REF as A, createState as B, CORE_SERVICES as C, deleteUserEnvKey as D, detectExistingProject as E, detectGpu as F, detectHostOpenCode as G, detectLocalProviders as H, disableHostAkmSharing as I, enableHostAkmSharing as J, ensureAkmUserEnv as K, ensureHomeDirs as L, MigrationError as M, ensureMigrated as N, ensureOpenCodeConfig as O, PROVIDER_KEY_MAP as P, ensureOpenCodeSystemConfig as Q, ensureSecrets as R, executeAutomation as S, fetchProviderModels as T, getAddonProfileAvailability as U, getAddonProfileSelection as V, getAddonProfiles as W, getAddonServiceNames as X, getDockerEvents as Y, getHostAkmSharingStatus as Z, getRegistryAddonConfig as _, addonProfileId as a, importHostOpenCode as a0, isAllowedService as a1, isHostAkmAvailable as a2, isSetupComplete as a3, listAvailableAddonIds as a4, listEnabledAddonIds as a5, listSecretFiles as a6, loadAutomations as a7, parseComposeStderr as a8, parseEnvFile as a9, writeTaskFile as aA, writeUserEnvKey as aB, writeVoiceVars as aC, performSetup as aa, performUpgrade as ab, readAutomationLogs as ac, readSecret as ad, readSecretFile as ae, readStackEnv as af, readStackRuntimeEnv as ag, readStackSecretEnv as ah, readTaskFile as ai, readUserEnvFile as aj, recommendSetup as ak, removeSecretFile as al, removeTaskFile as am, resolveComposeProjectName as an, resolveDataDir as ao, resolveRuntimeFiles as ap, resolveStackDir as aq, seedUiBuild as ar, setAddonEnabled as as, setAddonProfileSelection as at, summarizeComposeStderr as au, validateProposedState as av, writeFileAtomic as aw, writeRuntimeFiles as ax, writeSecretFile as ay, writeStackSecretEnv as az, annotateAddonProfileAvailability as b, applyInstall as c, applyTagChange as d, applyUninstall as e, applyUpdate as f, assertSafeSecretFilename as g, assertSafeTaskFilename as h, authJsonPath as i, buildAkmEnv as j, buildComposeOptions as k, buildManagedServices as l, checkDocker as m, checkDockerCompose as n, composeDown as o, composeLogs as p, composePreflight as q, composePs as r, composePull as s, composeRestart as t, composeStart as u, composeStats as v, composeStop as w, composeUp as x, createLogger as y, createOpenCodeClient as z };
|
|
14735
|
+
//# sourceMappingURL=src-DJv-Q_k2.js.map
|