@openpalm/ui 0.12.4 → 0.12.6
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/chunks/{CwrbcpZa.js → B-mBBr5-.js} +1 -1
- package/build/client/_app/immutable/chunks/B-mBBr5-.js.br +0 -0
- package/build/client/_app/immutable/chunks/B-mBBr5-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DF0a4TzS.js → CRSbY4Kh.js} +1 -1
- package/build/client/_app/immutable/chunks/CRSbY4Kh.js.br +0 -0
- package/build/client/_app/immutable/chunks/CRSbY4Kh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CwsyZWHi.js +1 -0
- package/build/client/_app/immutable/chunks/CwsyZWHi.js.br +2 -0
- package/build/client/_app/immutable/chunks/CwsyZWHi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BJvGvX8w.js → DQDnMiRB.js} +2 -2
- package/build/client/_app/immutable/chunks/DQDnMiRB.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQDnMiRB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B7Tzub6z.js → QZhQ9jgL.js} +1 -1
- package/build/client/_app/immutable/chunks/QZhQ9jgL.js.br +0 -0
- package/build/client/_app/immutable/chunks/QZhQ9jgL.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BKfeVXCZ.js → app.CjeyRTKT.js} +2 -2
- package/build/client/_app/immutable/entry/app.CjeyRTKT.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CjeyRTKT.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B0-iB266.js +1 -0
- package/build/client/_app/immutable/entry/start.B0-iB266.js.br +0 -0
- package/build/client/_app/immutable/entry/start.B0-iB266.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.DmI_S0q4.js → 1.CsV7DNn1.js} +1 -1
- package/build/client/_app/immutable/nodes/1.CsV7DNn1.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.CsV7DNn1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.BHriocBq.js → 4.KMrAUs2s.js} +3 -3
- package/build/client/_app/immutable/nodes/4.KMrAUs2s.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.KMrAUs2s.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.BAEivWeB.js → 5.BtCa1kCv.js} +1 -1
- package/build/client/_app/immutable/nodes/5.BtCa1kCv.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BtCa1kCv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.BbQyuQdv.js → 6.BVzjd6cM.js} +1 -1
- package/build/client/_app/immutable/nodes/6.BVzjd6cM.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BVzjd6cM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.gUDOE-wS.js → 7.vH7ptLBA.js} +1 -1
- package/build/client/_app/immutable/nodes/7.vH7ptLBA.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.vH7ptLBA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.CzwJhXsi.js → 8.DbovpYj-.js} +1 -1
- package/build/client/_app/immutable/nodes/8.DbovpYj-.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DbovpYj-.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/1-tqcyjyYn.js +9 -0
- package/build/server/chunks/{1-CpEwLT5m.js.map → 1-tqcyjyYn.js.map} +1 -1
- package/build/server/chunks/{10-Cn2Dy7hl.js → 10-ClWWC_db.js} +5 -5
- package/build/server/chunks/10-ClWWC_db.js.map +1 -0
- package/build/server/chunks/4-D45BCCjA.js +9 -0
- package/build/server/chunks/{4-DeEbyG9L.js.map → 4-D45BCCjA.js.map} +1 -1
- package/build/server/chunks/{5-C_AVL3ML.js → 5-DKkkz5Zu.js} +3 -3
- package/build/server/chunks/{5-C_AVL3ML.js.map → 5-DKkkz5Zu.js.map} +1 -1
- package/build/server/chunks/{6-CeQz74iU.js → 6-BmCqItlR.js} +3 -3
- package/build/server/chunks/{6-CeQz74iU.js.map → 6-BmCqItlR.js.map} +1 -1
- package/build/server/chunks/7-BCjeTrAw.js +9 -0
- package/build/server/chunks/{7-C2UdjZEe.js.map → 7-BCjeTrAw.js.map} +1 -1
- package/build/server/chunks/{8-CRJQbNkU.js → 8-BQYJohzV.js} +3 -3
- package/build/server/chunks/{8-CRJQbNkU.js.map → 8-BQYJohzV.js.map} +1 -1
- package/build/server/chunks/{ChatMessage-C3zhSEqG.js → ChatMessage-sBxcrkH1.js} +2 -2
- package/build/server/chunks/{ChatMessage-C3zhSEqG.js.map → ChatMessage-sBxcrkH1.js.map} +1 -1
- package/build/server/chunks/{Navbar-BcinocU9.js → Navbar-DocCJCkJ.js} +3 -3
- package/build/server/chunks/{Navbar-BcinocU9.js.map → Navbar-DocCJCkJ.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Bb7vzt_Z.js → _page.svelte-BW1I5ypa.js} +5 -5
- package/build/server/chunks/{_page.svelte-Bb7vzt_Z.js.map → _page.svelte-BW1I5ypa.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DJfYktUM.js → _page.svelte-BY9Xi4AF.js} +9 -9
- package/build/server/chunks/_page.svelte-BY9Xi4AF.js.map +1 -0
- package/build/server/chunks/{_page.svelte-lgQ0Kbg5.js → _page.svelte-BjO6HPPf.js} +3 -3
- package/build/server/chunks/{_page.svelte-lgQ0Kbg5.js.map → _page.svelte-BjO6HPPf.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BVDl6JeB.js → _page.svelte-BwkM4u_N.js} +5 -5
- package/build/server/chunks/{_page.svelte-BVDl6JeB.js.map → _page.svelte-BwkM4u_N.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BvrVz6_-.js → _page.svelte-MZeeV3UU.js} +6 -6
- package/build/server/chunks/{_page.svelte-BvrVz6_-.js.map → _page.svelte-MZeeV3UU.js.map} +1 -1
- package/build/server/chunks/{_server.ts-fAYxIyIR.js → _server.ts-00h626-G.js} +7 -7
- package/build/server/chunks/{_server.ts-fAYxIyIR.js.map → _server.ts-00h626-G.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ZyzQPXeQ.js → _server.ts-2U69xsqn.js} +6 -6
- package/build/server/chunks/_server.ts-2U69xsqn.js.map +1 -0
- package/build/server/chunks/{_server.ts-Ck827FB_.js → _server.ts-8dbeS-B9.js} +5 -5
- package/build/server/chunks/{_server.ts-Ck827FB_.js.map → _server.ts-8dbeS-B9.js.map} +1 -1
- package/build/server/chunks/{_server.ts-xSzkBuVc.js → _server.ts-B0-1jdCf.js} +5 -5
- package/build/server/chunks/_server.ts-B0-1jdCf.js.map +1 -0
- package/build/server/chunks/{_server.ts-CJBakoFV.js → _server.ts-B0USMUoE.js} +5 -5
- package/build/server/chunks/{_server.ts-CJBakoFV.js.map → _server.ts-B0USMUoE.js.map} +1 -1
- package/build/server/chunks/{_server.ts-91I7ynkH.js → _server.ts-B0Zn6ksk.js} +2 -2
- package/build/server/chunks/{_server.ts-91I7ynkH.js.map → _server.ts-B0Zn6ksk.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C2h6Okpv.js → _server.ts-B2ePIe7k.js} +5 -5
- package/build/server/chunks/{_server.ts-C2h6Okpv.js.map → _server.ts-B2ePIe7k.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CUH3naAY.js → _server.ts-B5mSiQLP.js} +6 -6
- package/build/server/chunks/{_server.ts-CUH3naAY.js.map → _server.ts-B5mSiQLP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BI2C6qUe.js → _server.ts-B6fdoTeE.js} +15 -7
- package/build/server/chunks/_server.ts-B6fdoTeE.js.map +1 -0
- package/build/server/chunks/{_server.ts-kfLUsZiO.js → _server.ts-B6kClDcC.js} +5 -5
- package/build/server/chunks/{_server.ts-kfLUsZiO.js.map → _server.ts-B6kClDcC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DafQt9jy.js → _server.ts-B8O9kJIV.js} +5 -5
- package/build/server/chunks/{_server.ts-DafQt9jy.js.map → _server.ts-B8O9kJIV.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CyyWfC2T.js → _server.ts-BNXbXpJ7.js} +5 -5
- package/build/server/chunks/{_server.ts-CyyWfC2T.js.map → _server.ts-BNXbXpJ7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-p06G7x-b.js → _server.ts-BRMEdAL7.js} +5 -5
- package/build/server/chunks/{_server.ts-p06G7x-b.js.map → _server.ts-BRMEdAL7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CrxxAVPm.js → _server.ts-BS4JFPG5.js} +2 -2
- package/build/server/chunks/_server.ts-BS4JFPG5.js.map +1 -0
- package/build/server/chunks/{_server.ts-DrOcARFE.js → _server.ts-BT_5f2pb.js} +5 -5
- package/build/server/chunks/{_server.ts-DrOcARFE.js.map → _server.ts-BT_5f2pb.js.map} +1 -1
- package/build/server/chunks/{_server.ts-GQs26Eo5.js → _server.ts-BTkI0MYh.js} +5 -5
- package/build/server/chunks/{_server.ts-GQs26Eo5.js.map → _server.ts-BTkI0MYh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-bPaUU6cX.js → _server.ts-BYY93Gcc.js} +5 -5
- package/build/server/chunks/{_server.ts-bPaUU6cX.js.map → _server.ts-BYY93Gcc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BCMUj81G.js → _server.ts-BYntUWuo.js} +6 -6
- package/build/server/chunks/{_server.ts-BCMUj81G.js.map → _server.ts-BYntUWuo.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CgeiAKdV.js → _server.ts-BbArt_tL.js} +5 -5
- package/build/server/chunks/{_server.ts-CgeiAKdV.js.map → _server.ts-BbArt_tL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DWan6n03.js → _server.ts-BbHE4obG.js} +5 -5
- package/build/server/chunks/{_server.ts-DWan6n03.js.map → _server.ts-BbHE4obG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-64CJ3e0t.js → _server.ts-Bd3yJr4m.js} +5 -5
- package/build/server/chunks/_server.ts-Bd3yJr4m.js.map +1 -0
- package/build/server/chunks/{_server.ts-CxsLly54.js → _server.ts-Bi-lppMP.js} +5 -5
- package/build/server/chunks/_server.ts-Bi-lppMP.js.map +1 -0
- package/build/server/chunks/{_server.ts-CIndR_iz.js → _server.ts-Bk8_1LiE.js} +5 -5
- package/build/server/chunks/_server.ts-Bk8_1LiE.js.map +1 -0
- package/build/server/chunks/{_server.ts-DNWOks8X.js → _server.ts-Bo6s1ApS.js} +2 -2
- package/build/server/chunks/{_server.ts-DNWOks8X.js.map → _server.ts-Bo6s1ApS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BM0luqg_.js → _server.ts-ByQUGvJ2.js} +7 -7
- package/build/server/chunks/{_server.ts-BM0luqg_.js.map → _server.ts-ByQUGvJ2.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BBecKdll.js → _server.ts-BygTeTVH.js} +5 -5
- package/build/server/chunks/{_server.ts-BBecKdll.js.map → _server.ts-BygTeTVH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Ba9XjYRd.js → _server.ts-C3bsXngt.js} +5 -5
- package/build/server/chunks/_server.ts-C3bsXngt.js.map +1 -0
- package/build/server/chunks/{_server.ts-C7Y7eqdw.js → _server.ts-CBPnXtls.js} +5 -5
- package/build/server/chunks/{_server.ts-C7Y7eqdw.js.map → _server.ts-CBPnXtls.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bw9PMVxW.js → _server.ts-CCP8qBay.js} +5 -5
- package/build/server/chunks/{_server.ts-Bw9PMVxW.js.map → _server.ts-CCP8qBay.js.map} +1 -1
- package/build/server/chunks/{_server.ts-VQhKGldS.js → _server.ts-CLZTQAem.js} +4 -4
- package/build/server/chunks/{_server.ts-VQhKGldS.js.map → _server.ts-CLZTQAem.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BGcrE6M7.js → _server.ts-CMC-D6G8.js} +5 -5
- package/build/server/chunks/_server.ts-CMC-D6G8.js.map +1 -0
- package/build/server/chunks/{_server.ts-BITp3a_v.js → _server.ts-CP-vg4Mu.js} +5 -5
- package/build/server/chunks/{_server.ts-BITp3a_v.js.map → _server.ts-CP-vg4Mu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CFm_Hd2O.js → _server.ts-CPhe1fct.js} +7 -7
- package/build/server/chunks/_server.ts-CPhe1fct.js.map +1 -0
- package/build/server/chunks/{_server.ts-CU7VZJ6f.js → _server.ts-CQ9c5VQq.js} +7 -7
- package/build/server/chunks/{_server.ts-CU7VZJ6f.js.map → _server.ts-CQ9c5VQq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DxBcS53H.js → _server.ts-CTGWKDqf.js} +5 -5
- package/build/server/chunks/_server.ts-CTGWKDqf.js.map +1 -0
- package/build/server/chunks/{_server.ts-vQaP8yat.js → _server.ts-CV72vnaf.js} +6 -6
- package/build/server/chunks/{_server.ts-vQaP8yat.js.map → _server.ts-CV72vnaf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DBbsu7xm.js → _server.ts-CVuztMSL.js} +5 -5
- package/build/server/chunks/{_server.ts-DBbsu7xm.js.map → _server.ts-CVuztMSL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BhoSTBK-.js → _server.ts-CVxVsVXt.js} +24 -10
- package/build/server/chunks/_server.ts-CVxVsVXt.js.map +1 -0
- package/build/server/chunks/{_server.ts-B8SaErJq.js → _server.ts-CX3Pbgq3.js} +5 -5
- package/build/server/chunks/_server.ts-CX3Pbgq3.js.map +1 -0
- package/build/server/chunks/{_server.ts-CWTds10O.js → _server.ts-CaJXmvRh.js} +6 -6
- package/build/server/chunks/{_server.ts-CWTds10O.js.map → _server.ts-CaJXmvRh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D58CNDu8.js → _server.ts-Cc5hNlzC.js} +2 -2
- package/build/server/chunks/{_server.ts-D58CNDu8.js.map → _server.ts-Cc5hNlzC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DPCcS7yj.js → _server.ts-ChWPLbia.js} +5 -5
- package/build/server/chunks/_server.ts-ChWPLbia.js.map +1 -0
- package/build/server/chunks/{_server.ts-CsEwDImR.js → _server.ts-CpyY-cWr.js} +5 -5
- package/build/server/chunks/{_server.ts-CsEwDImR.js.map → _server.ts-CpyY-cWr.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cs62GxYE.js → _server.ts-CsVvCVw7.js} +5 -5
- package/build/server/chunks/_server.ts-CsVvCVw7.js.map +1 -0
- package/build/server/chunks/{_server.ts-DhDSn7j7.js → _server.ts-CuYxH3uM.js} +5 -5
- package/build/server/chunks/_server.ts-CuYxH3uM.js.map +1 -0
- package/build/server/chunks/{_server.ts-BCzxvSLS.js → _server.ts-D69kt8gW.js} +6 -6
- package/build/server/chunks/{_server.ts-BCzxvSLS.js.map → _server.ts-D69kt8gW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-LkEnfz4f.js → _server.ts-D6gXnT0S.js} +6 -6
- package/build/server/chunks/{_server.ts-LkEnfz4f.js.map → _server.ts-D6gXnT0S.js.map} +1 -1
- package/build/server/chunks/{_server.ts-c-7O7nSF.js → _server.ts-DC_Vh8E6.js} +5 -5
- package/build/server/chunks/{_server.ts-c-7O7nSF.js.map → _server.ts-DC_Vh8E6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CNFp71jg.js → _server.ts-DDpDu1Zf.js} +5 -5
- package/build/server/chunks/{_server.ts-CNFp71jg.js.map → _server.ts-DDpDu1Zf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BNWXdf7z.js → _server.ts-DEwkX3ls.js} +6 -6
- package/build/server/chunks/{_server.ts-BNWXdf7z.js.map → _server.ts-DEwkX3ls.js.map} +1 -1
- package/build/server/chunks/{_server.ts-hTPh1NnS.js → _server.ts-DGS3HL5L.js} +5 -5
- package/build/server/chunks/{_server.ts-hTPh1NnS.js.map → _server.ts-DGS3HL5L.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Mg95_8F-.js → _server.ts-DGWQtatZ.js} +5 -5
- package/build/server/chunks/{_server.ts-Mg95_8F-.js.map → _server.ts-DGWQtatZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dm0PNurt.js → _server.ts-DHBcE-xZ.js} +6 -6
- package/build/server/chunks/{_server.ts-Dm0PNurt.js.map → _server.ts-DHBcE-xZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-NrXaVOq8.js → _server.ts-DJX0LiE-.js} +7 -7
- package/build/server/chunks/_server.ts-DJX0LiE-.js.map +1 -0
- package/build/server/chunks/{_server.ts-u1wafOIS.js → _server.ts-DL0R4W6K.js} +5 -5
- package/build/server/chunks/{_server.ts-u1wafOIS.js.map → _server.ts-DL0R4W6K.js.map} +1 -1
- package/build/server/chunks/{_server.ts-M-fzAyjj.js → _server.ts-DLgRTupQ.js} +5 -5
- package/build/server/chunks/_server.ts-DLgRTupQ.js.map +1 -0
- package/build/server/chunks/{_server.ts-B0L3seRh.js → _server.ts-DLtfdvdM.js} +5 -5
- package/build/server/chunks/{_server.ts-B0L3seRh.js.map → _server.ts-DLtfdvdM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BmlWOD93.js → _server.ts-DM3isq5U.js} +6 -6
- package/build/server/chunks/{_server.ts-BmlWOD93.js.map → _server.ts-DM3isq5U.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DJuecwBg.js → _server.ts-DMHPUxEu.js} +5 -5
- package/build/server/chunks/{_server.ts-DJuecwBg.js.map → _server.ts-DMHPUxEu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-GZ5EYJAh.js → _server.ts-DPEInT5Z.js} +5 -5
- package/build/server/chunks/{_server.ts-GZ5EYJAh.js.map → _server.ts-DPEInT5Z.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BtkOMkr7.js → _server.ts-DStYEikA.js} +5 -5
- package/build/server/chunks/{_server.ts-BtkOMkr7.js.map → _server.ts-DStYEikA.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DpeFN0xU.js → _server.ts-DTM2mODf.js} +5 -5
- package/build/server/chunks/{_server.ts-DpeFN0xU.js.map → _server.ts-DTM2mODf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-z-6hnUCv.js → _server.ts-DccTW04Z.js} +5 -5
- package/build/server/chunks/{_server.ts-z-6hnUCv.js.map → _server.ts-DccTW04Z.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cz7ADgFl.js → _server.ts-Ddq07WNJ.js} +5 -5
- package/build/server/chunks/{_server.ts-Cz7ADgFl.js.map → _server.ts-Ddq07WNJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dv-WpTLz.js → _server.ts-DfNcqz8C.js} +5 -5
- package/build/server/chunks/{_server.ts-Dv-WpTLz.js.map → _server.ts-DfNcqz8C.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DO8wnB3g.js → _server.ts-DjMVgo8F.js} +5 -5
- package/build/server/chunks/{_server.ts-DO8wnB3g.js.map → _server.ts-DjMVgo8F.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DbI6rEYt.js → _server.ts-DkPleuhw.js} +7 -7
- package/build/server/chunks/{_server.ts-DbI6rEYt.js.map → _server.ts-DkPleuhw.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DtftyqNM.js → _server.ts-DoZLeC7k.js} +5 -5
- package/build/server/chunks/{_server.ts-DtftyqNM.js.map → _server.ts-DoZLeC7k.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BQZjbMf8.js → _server.ts-DoltyIQF.js} +5 -5
- package/build/server/chunks/{_server.ts-BQZjbMf8.js.map → _server.ts-DoltyIQF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Daz7JGpW.js → _server.ts-DsJ0wRlK.js} +8 -8
- package/build/server/chunks/{_server.ts-Daz7JGpW.js.map → _server.ts-DsJ0wRlK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BdpBv_pL.js → _server.ts-DurWW9F4.js} +5 -5
- package/build/server/chunks/{_server.ts-BdpBv_pL.js.map → _server.ts-DurWW9F4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-LLv_O4kj.js → _server.ts-KVlAwfa7.js} +6 -6
- package/build/server/chunks/{_server.ts-LLv_O4kj.js.map → _server.ts-KVlAwfa7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DSJbBXMK.js → _server.ts-Nx5G7kN_.js} +5 -5
- package/build/server/chunks/{_server.ts-DSJbBXMK.js.map → _server.ts-Nx5G7kN_.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ByX2JplS.js → _server.ts-OaY_Oi6x.js} +5 -5
- package/build/server/chunks/_server.ts-OaY_Oi6x.js.map +1 -0
- package/build/server/chunks/{_server.ts-xeuXigqn.js → _server.ts-SF6pSx63.js} +5 -5
- package/build/server/chunks/{_server.ts-xeuXigqn.js.map → _server.ts-SF6pSx63.js.map} +1 -1
- package/build/server/chunks/{_server.ts-VUY0ZQed.js → _server.ts-SOuORDIo.js} +5 -5
- package/build/server/chunks/{_server.ts-VUY0ZQed.js.map → _server.ts-SOuORDIo.js.map} +1 -1
- package/build/server/chunks/{_server.ts-nzuxBifp.js → _server.ts-ZnjMekBF.js} +5 -5
- package/build/server/chunks/{_server.ts-nzuxBifp.js.map → _server.ts-ZnjMekBF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CkIJ4wAj.js → _server.ts-dfDPdIru.js} +5 -5
- package/build/server/chunks/{_server.ts-CkIJ4wAj.js.map → _server.ts-dfDPdIru.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CkJZABtl.js → _server.ts-f8-Db9lI.js} +5 -5
- package/build/server/chunks/{_server.ts-CkJZABtl.js.map → _server.ts-f8-Db9lI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Yzrl5mD-.js → _server.ts-fM6Gkpfd.js} +6 -6
- package/build/server/chunks/{_server.ts-Yzrl5mD-.js.map → _server.ts-fM6Gkpfd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-VW0g_Tvb.js → _server.ts-ib6n7JpR.js} +5 -5
- package/build/server/chunks/{_server.ts-VW0g_Tvb.js.map → _server.ts-ib6n7JpR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B22aQonK.js → _server.ts-sBc-WN6M.js} +2 -2
- package/build/server/chunks/{_server.ts-B22aQonK.js.map → _server.ts-sBc-WN6M.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BHlzEfZF.js → _server.ts-t98jwIra.js} +4 -4
- package/build/server/chunks/_server.ts-t98jwIra.js.map +1 -0
- package/build/server/chunks/{_server.ts-KhkI1RGi.js → _server.ts-w0HFBqit.js} +6 -6
- package/build/server/chunks/{_server.ts-KhkI1RGi.js.map → _server.ts-w0HFBqit.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BpUM4_Zi.js → _server.ts-z3FqDVpm.js} +5 -5
- package/build/server/chunks/{_server.ts-BpUM4_Zi.js.map → _server.ts-z3FqDVpm.js.map} +1 -1
- package/build/server/chunks/{addon-helpers-66VnIGag.js → addon-helpers-Bo4hdZTj.js} +3 -3
- package/build/server/chunks/addon-helpers-Bo4hdZTj.js.map +1 -0
- package/build/server/chunks/{akm-CWrixfEU.js → akm-DbPcENjV.js} +2 -2
- package/build/server/chunks/{akm-CWrixfEU.js.map → akm-DbPcENjV.js.map} +1 -1
- package/build/server/chunks/{catalog-COqzRW3r.js → catalog--Wa5WAM4.js} +5 -5
- package/build/server/chunks/{catalog-COqzRW3r.js.map → catalog--Wa5WAM4.js.map} +1 -1
- package/build/server/chunks/{client-BsbnGrZJ.js → client-BILypdph.js} +2 -2
- package/build/server/chunks/{client-BsbnGrZJ.js.map → client-BILypdph.js.map} +1 -1
- package/build/server/chunks/{config-Db8mj1nW.js → config-CfZrAmt4.js} +2 -2
- package/build/server/chunks/{config-Db8mj1nW.js.map → config-CfZrAmt4.js.map} +1 -1
- package/build/server/chunks/{docker-D0cbFh2g.js → docker-C_kgiGOO.js} +2 -2
- package/build/server/chunks/{docker-D0cbFh2g.js.map → docker-C_kgiGOO.js.map} +1 -1
- package/build/server/chunks/{endpoints-CSJcyuQ5.js → endpoints-DNux-fut.js} +2 -2
- package/build/server/chunks/{endpoints-CSJcyuQ5.js.map → endpoints-DNux-fut.js.map} +1 -1
- package/build/server/chunks/{environment-CTDQmO1c.js → environment-Doz0aMGk.js} +2 -2
- package/build/server/chunks/{environment-CTDQmO1c.js.map → environment-Doz0aMGk.js.map} +1 -1
- package/build/server/chunks/{error.svelte-z9fDkMtQ.js → error.svelte-ESC3aLu5.js} +4 -4
- package/build/server/chunks/{error.svelte-z9fDkMtQ.js.map → error.svelte-ESC3aLu5.js.map} +1 -1
- package/build/server/chunks/{helpers-7s-OT4v_.js → helpers-CIHSEiCi.js} +3 -3
- package/build/server/chunks/{helpers-7s-OT4v_.js.map → helpers-CIHSEiCi.js.map} +1 -1
- package/build/server/chunks/{hooks.server-DFXp6Fpb.js → hooks.server-SolNV84_.js} +7 -7
- package/build/server/chunks/hooks.server-SolNV84_.js.map +1 -0
- package/build/server/chunks/{http-BWePsoTg.js → http-29NeXi8J.js} +2 -2
- package/build/server/chunks/{http-BWePsoTg.js.map → http-29NeXi8J.js.map} +1 -1
- package/build/server/chunks/{internal-U63OU4kM.js → internal-AjT2L6Re.js} +3 -3
- package/build/server/chunks/{internal-U63OU4kM.js.map → internal-AjT2L6Re.js.map} +1 -1
- package/build/server/chunks/{migration-status-xL4GH9I1.js → migration-status-eArABSVL.js} +2 -2
- package/build/server/chunks/{migration-status-xL4GH9I1.js.map → migration-status-eArABSVL.js.map} +1 -1
- package/build/server/chunks/{session-cookie-CjB6mIOV.js → session-cookie-5PNazqrm.js} +2 -2
- package/build/server/chunks/{session-cookie-CjB6mIOV.js.map → session-cookie-5PNazqrm.js.map} +1 -1
- package/build/server/chunks/{setup-deploy-BxEUM8fd.js → setup-deploy-pyw7oUsn.js} +2 -2
- package/build/server/chunks/{setup-deploy-BxEUM8fd.js.map → setup-deploy-pyw7oUsn.js.map} +1 -1
- package/build/server/chunks/{src-DtWMUJLN.js → src-C5kkVuFB.js} +19 -12
- package/build/server/chunks/src-C5kkVuFB.js.map +1 -0
- package/build/server/chunks/{state-B9HoCQnp.js → state-BAMdGxdT.js} +2 -2
- package/build/server/chunks/{state-B9HoCQnp.js.map → state-BAMdGxdT.js.map} +1 -1
- package/build/server/chunks/{state2-BdbHTMvo.js → state2-BVeJ-USX.js} +2 -2
- package/build/server/chunks/{state2-BdbHTMvo.js.map → state2-BVeJ-USX.js.map} +1 -1
- package/build/server/index.js +2 -2
- package/build/server/manifest.js +93 -93
- package/build/server/manifest.js.map +1 -1
- package/package.json +2 -2
- package/build/client/_app/immutable/chunks/B7Tzub6z.js.br +0 -0
- package/build/client/_app/immutable/chunks/B7Tzub6z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BJvGvX8w.js.br +0 -0
- package/build/client/_app/immutable/chunks/BJvGvX8w.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cob61iTa.js +0 -1
- package/build/client/_app/immutable/chunks/Cob61iTa.js.br +0 -2
- package/build/client/_app/immutable/chunks/Cob61iTa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CwrbcpZa.js.br +0 -0
- package/build/client/_app/immutable/chunks/CwrbcpZa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DF0a4TzS.js.br +0 -0
- package/build/client/_app/immutable/chunks/DF0a4TzS.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BKfeVXCZ.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BKfeVXCZ.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BXYu_Ydh.js +0 -1
- package/build/client/_app/immutable/entry/start.BXYu_Ydh.js.br +0 -1
- package/build/client/_app/immutable/entry/start.BXYu_Ydh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DmI_S0q4.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DmI_S0q4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BHriocBq.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BHriocBq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.BAEivWeB.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BAEivWeB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BbQyuQdv.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BbQyuQdv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.gUDOE-wS.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.gUDOE-wS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CzwJhXsi.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CzwJhXsi.js.gz +0 -0
- package/build/server/chunks/1-CpEwLT5m.js +0 -9
- package/build/server/chunks/10-Cn2Dy7hl.js.map +0 -1
- package/build/server/chunks/4-DeEbyG9L.js +0 -9
- package/build/server/chunks/7-C2UdjZEe.js +0 -9
- package/build/server/chunks/_page.svelte-DJfYktUM.js.map +0 -1
- package/build/server/chunks/_server.ts-64CJ3e0t.js.map +0 -1
- package/build/server/chunks/_server.ts-B8SaErJq.js.map +0 -1
- package/build/server/chunks/_server.ts-BGcrE6M7.js.map +0 -1
- package/build/server/chunks/_server.ts-BHlzEfZF.js.map +0 -1
- package/build/server/chunks/_server.ts-BI2C6qUe.js.map +0 -1
- package/build/server/chunks/_server.ts-Ba9XjYRd.js.map +0 -1
- package/build/server/chunks/_server.ts-BhoSTBK-.js.map +0 -1
- package/build/server/chunks/_server.ts-ByX2JplS.js.map +0 -1
- package/build/server/chunks/_server.ts-CFm_Hd2O.js.map +0 -1
- package/build/server/chunks/_server.ts-CIndR_iz.js.map +0 -1
- package/build/server/chunks/_server.ts-CrxxAVPm.js.map +0 -1
- package/build/server/chunks/_server.ts-Cs62GxYE.js.map +0 -1
- package/build/server/chunks/_server.ts-CxsLly54.js.map +0 -1
- package/build/server/chunks/_server.ts-DPCcS7yj.js.map +0 -1
- package/build/server/chunks/_server.ts-DhDSn7j7.js.map +0 -1
- package/build/server/chunks/_server.ts-DxBcS53H.js.map +0 -1
- package/build/server/chunks/_server.ts-M-fzAyjj.js.map +0 -1
- package/build/server/chunks/_server.ts-NrXaVOq8.js.map +0 -1
- package/build/server/chunks/_server.ts-ZyzQPXeQ.js.map +0 -1
- package/build/server/chunks/_server.ts-xSzkBuVc.js.map +0 -1
- package/build/server/chunks/addon-helpers-66VnIGag.js.map +0 -1
- package/build/server/chunks/hooks.server-DFXp6Fpb.js.map +0 -1
- package/build/server/chunks/src-DtWMUJLN.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,I as c,J as l,K as u,L as d,M as f,N as p,P as m,Q as h,R as g,T as _,W as v,X as y,Y as b,Z as x,_ as S,a as C,c as w,ct as T,d as E,dt as D,et as O,f as k,ft as A,g as j,h as M,it as N,j as P,k as F,l as I,m as L,mt as R,n as z,nt as B,o as V,p as H,r as ee,s as te,st as U,tt as W,u as G,x as ne,y as K,z as q}from"../chunks/BBI__kVO.js";import{l as re,n as J}from"../chunks/BJvGvX8w.js";import"../chunks/xihTtKlq.js";import{A as ie,B as ae,C as Y,D as X,E as Z,F as oe,G as se,H as ce,I as le,J as ue,K as de,M as fe,N as pe,O as me,P as he,Q as ge,R as _e,S as ve,T as ye,U as be,V as xe,W as Se,X as Ce,Y as we,Z as Te,_t as Ee,a as De,b as Oe,bt as ke,ct as Ae,d as Q,dt as je,et as Me,f as Ne,ft as Pe,g as Fe,h as Ie,ht as Le,j as Re,k as ze,lt as Be,m as Ve,nt as He,o as Ue,ot as We,p as Ge,q as Ke,st as qe,tt as Je,u as Ye,ut as Xe,vt as Ze,w as Qe,x as $e,z as et}from"../chunks/CgKtEGfl.js";import"../chunks/Cob61iTa.js";import{a as tt,d as nt,f as rt,h as it,i as at,l as ot,m as st,p as ct,t as lt,u as ut,v as dt}from"../chunks/DF0a4TzS.js";import{t as $}from"../chunks/Oz5B_hgH.js";import{n as ft,t as pt}from"../chunks/CwrbcpZa.js";import{a as mt,i as ht,o as gt,s as _t}from"../chunks/Buy0D9D-.js";var vt=p(`<button role="tab"> </button>`),yt=p(`<button role="tab"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></svg> </button>`),bt=p(`<div class="subtab-row svelte-7673iv"><div class="tabs svelte-7673iv" role="tablist"></div></div>`),xt=p(`<nav class="nav-shell svelte-7673iv" aria-label="Admin sections"><div class="section-strip svelte-7673iv" role="tablist" aria-label="Sections"></div> <!></nav>`);function St(r,i){T(i,!0);let o={overview:`<rect x="3" y="3" width="7" height="7" /><rect x="14" y="3" width="7" height="7" /><rect x="14" y="14" width="7" height="7" /><rect x="3" y="14" width="7" height="7" />`,containers:`<rect x="2" y="2" width="20" height="8" rx="2" ry="2" /><rect x="2" y="14" width="20" height="8" rx="2" ry="2" /><line x1="6" y1="6" x2="6.01" y2="6" /><line x1="6" y1="18" x2="6.01" y2="18" />`,logs:`<polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" />`,connections:`<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />`,akm:`<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />`,assistant:`<path d="M12 2a4 4 0 0 1 4 4v2h1a3 3 0 0 1 3 3v6a5 5 0 0 1-5 5H9a5 5 0 0 1-5-5v-6a3 3 0 0 1 3-3h1V6a4 4 0 0 1 4-4z" /><path d="M9 8h6" /><circle cx="9" cy="14" r="1" /><circle cx="15" cy="14" r="1" /><path d="M9 18c1 .8 2 .8 3 .8s2 0 3-.8" />`,"host-sharing":`<circle cx="18" cy="5" r="3" /><circle cx="6" cy="12" r="3" /><circle cx="18" cy="19" r="3" /><line x1="8.59" y1="13.51" x2="15.42" y2="17.49" /><line x1="15.41" y1="6.51" x2="8.59" y2="10.49" />`,activity:`<path d="M3 12h4l2-5 4 10 2-5h6" />`,voice:`<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z" /><path d="M19 10v2a7 7 0 0 1-14 0v-2" /><line x1="12" y1="19" x2="12" y2="23" /><line x1="8" y1="23" x2="16" y2="23" />`,addons:`<path d="M12 2L2 7l10 5 10-5-10-5z" /><path d="M2 17l10 5 10-5" /><path d="M2 12l10 5 10-5" />`,automations:`<circle cx="12" cy="12" r="10" /><polyline points="12 6 12 12 16 14" />`,secrets:`<rect x="3" y="11" width="18" height="11" rx="2" ry="2" /><path d="M7 11V7a5 5 0 0 1 10 0v4" />`,updates:`<polyline points="8 17 12 21 16 17" /><line x1="12" y1="12" x2="12" y2="21" /><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29" />`},c=[{id:`health`,label:`Health`,tabs:[{id:`overview`,label:`Overview`,icon:o.overview},{id:`activity`,label:`Activity`,icon:o.activity},{id:`containers`,label:`Systems`,icon:o.containers},{id:`logs`,label:`Journal`,icon:o.logs},{id:`updates`,label:`Check-up`,icon:o.updates}]},{id:`mind`,label:`Mind`,tabs:[{id:`connections`,label:`AI Providers`,icon:o.connections}]},{id:`voice`,label:`Voice`,tabs:[{id:`voice`,label:`Voice`,icon:o.voice}]},{id:`routines`,label:`Routines`,tabs:[{id:`automations`,label:`Automations`,icon:o.automations}]},{id:`capabilities`,label:`Capabilities`,tabs:[{id:`addons`,label:`Add-ons`,icon:o.addons}]},{id:`knowledge`,label:`Knowledge`,tabs:[{id:`akm`,label:`Memory`,icon:o.akm},{id:`assistant`,label:`Assistant`,icon:o.assistant},{id:`secrets`,label:`Secrets`,icon:o.secrets},{id:`host-sharing`,label:`Sharing`,icon:o[`host-sharing`]}]}],l=N(()=>c.find(e=>e.tabs.some(e=>e.id===i.active))??c[0]);function u(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.currentTarget,n=Array.from(t.parentElement?.querySelectorAll(`[role="tab"]`)??[]),r=n.indexOf(t);r!==-1&&n[e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length]?.focus()}function f(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.currentTarget,n=Array.from(t.parentElement?.querySelectorAll(`[role="tab"]`)??[]),r=n.indexOf(t);r!==-1&&n[e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length]?.focus()}function p(e){i.onSelect(e.tabs[0].id)}var m=xt(),h=x(m);a(h,21,()=>c,e=>e.id,(e,r)=>{var i=vt();let a;var o=x(i,!0);A(i),s(()=>{a=K(i,1,`section-tab svelte-7673iv`,null,a,{"section-tab-active":n(l).id===n(r).id}),k(i,`aria-selected`,n(l).id===n(r).id),t(o,n(r).label)}),d(`click`,i,()=>p(n(r))),d(`keydown`,i,u),P(e,i)}),A(h);var g=e(h,2),v=r=>{var o=bt(),c=x(o);a(c,21,()=>n(l).tabs,e=>e.id,(r,a)=>{var o=yt();let c;var l=x(o);_(l,()=>n(a).icon,!0),A(l);var u=e(l);A(o),s(()=>{c=K(o,1,`tab svelte-7673iv`,null,c,{"tab-active":i.active===n(a).id}),k(o,`aria-selected`,i.active===n(a).id),t(u,` ${n(a).label??``}`)}),d(`click`,o,()=>i.onSelect(n(a).id)),d(`keydown`,o,f),P(r,o)}),A(c),A(o),s(()=>k(c,`aria-label`,`${n(l).label??``} tabs`)),P(r,o)};F(g,e=>{n(l).tabs.length>1&&e(v)}),A(m),P(r,m),U()}c([`click`,`keydown`]);var Ct=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>`),wt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>`),Tt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>`),Et=p(`<button class="btn btn-secondary">View containers</button>`),Dt=p(`<section role="status" aria-live="polite"><span class="hero-icon svelte-10n23hu" aria-hidden="true"><!></span> <div class="hero-text svelte-10n23hu"><h2 class="hero-title svelte-10n23hu"> </h2> <p class="hero-detail svelte-10n23hu"> </p></div> <div class="hero-actions svelte-10n23hu"><button class="btn btn-secondary"> </button> <!> <button class="btn btn-secondary"> </button></div></section>`);function Ot(n,r){T(r,!0);var i=Dt(),a=x(i),o=x(a),c=e=>{P(e,Ct())},l=e=>{P(e,wt())},u=e=>{P(e,Tt())};F(o,e=>{r.status===`warning`?e(c):r.status===`ok`?e(l,1):e(u,-1)}),A(a);var f=e(a,2),p=x(f),m=x(p,!0);A(p);var h=e(p,2),g=x(h,!0);A(h),A(f);var _=e(f,2),v=x(_),y=x(v,!0);A(v);var b=e(v,2),S=e=>{var t=Et();d(`click`,t,()=>r.onNavigate(`containers`)),P(e,t)};F(b,e=>{r.status===`warning`&&e(S)});var C=e(b,2),w=x(C,!0);A(C),A(_),A(i),s(()=>{K(i,1,`hero hero--${r.status??``}`,`svelte-10n23hu`),t(m,r.title),t(g,r.detail),v.disabled=r.healthLoading,t(y,r.healthLoading?`Checking…`:`Re-check`),C.disabled=r.anyDangerousLoading||!r.tokenStored,t(w,r.applyLoading?`Applying…`:`Apply config & restart`)}),d(`click`,v,function(...e){r.onCheckHealth?.apply(this,e)}),d(`click`,C,function(...e){r.onApplyChanges?.apply(this,e)}),P(n,i),U()}c([`click`]);var kt=p(`<section><div class="output-header svelte-10sij3c"><h3 class="svelte-10sij3c">Operation output</h3> <button class="btn-ghost" aria-label="Dismiss"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div> <pre class="output-code svelte-10sij3c"> </pre></section>`);function At(n,r){var i=f(),a=h(i),o=n=>{var i=kt(),a=x(i),o=e(x(a),2);A(a);var c=e(a,2),l=x(c,!0);A(c),A(i),s(()=>{K(i,1,`output-section output-section--${r.operationResultType??``}`,`svelte-10sij3c`),t(l,r.operationResult)}),d(`click`,o,function(...e){r.onDismissResult?.apply(this,e)}),P(n,i)};F(a,e=>{r.operationResult&&e(o)}),P(n,i)}c([`click`]);var jt=p(`<span class="tile-metric tile-metric--icon svelte-19hpfg" aria-hidden="true"><!></span>`),Mt=p(`<span class="tile-metric-sub svelte-19hpfg"> </span>`),Nt=p(` <!>`,1),Pt=p(`<span class="tile-metric svelte-19hpfg"><!></span>`),Ft=p(`<button class="tile svelte-19hpfg"><!> <span class="tile-label svelte-19hpfg"> </span></button>`);function It(n,i){let a=C(i,`value`,3,null),c=C(i,`sub`,3,null),l=C(i,`loaded`,3,!0);var u=Ft(),f=x(u),p=e=>{var t=jt();r(x(t),()=>i.icon),A(t),P(e,t)},m=n=>{var r=Pt(),i=x(r),u=n=>{var r=Nt(),i=h(r,!0),o=e(i),l=e=>{var n=Mt(),r=x(n,!0);A(n),s(()=>t(r,c())),P(e,n)};F(o,e=>{c()&&e(l)}),s(()=>t(i,a())),P(n,r)},d=e=>{P(e,o(`—`))};F(i,e=>{l()?e(u):e(d,-1)}),A(r),P(n,r)};F(f,e=>{i.icon?e(p):e(m,-1)});var g=e(f,2),_=x(g,!0);A(g),A(u),s(()=>t(_,i.label)),d(`click`,u,function(...e){i.onClick?.apply(this,e)}),P(n,u)}c([`click`]);var Lt=p(`<div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Task failure rate</span></div>`),Rt=p(`<div class="akm-metrics svelte-dcgqe1"><div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Indexed assets</span></div> <div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> <span class="akm-num-sub svelte-dcgqe1"> </span></span> <span class="akm-cap svelte-dcgqe1">Health checks passing</span></div> <div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Semantic search</span></div> <!></div>`),zt=p(`<p class="akm-unavailable svelte-dcgqe1">Metrics unavailable — the akm CLI isn't reachable from the admin host.</p>`),Bt=p(`<button class="akm-card svelte-dcgqe1" aria-label="AKM health — open Knowledge settings"><div class="akm-head svelte-dcgqe1"><span class="akm-title svelte-dcgqe1">AKM runtime health</span> <span> </span></div> <!></button>`);function Vt(n,r){T(r,!0);var i=Bt(),a=x(i),o=e(x(a),2),c=x(o,!0);A(o),A(a);var l=e(a,2),u=n=>{var i=Rt(),a=x(i),o=x(a),c=x(o,!0);A(o),D(2),A(a);var l=e(a,2),u=x(l),d=x(u,!0),f=e(d),p=x(f);A(f),A(u),D(2),A(l);var m=e(l,2),h=x(m),g=x(h,!0);A(h),D(2),A(m);var _=e(m,2),v=e=>{var n=Lt(),i=x(n),a=x(i);A(i),D(2),A(n),s(e=>t(a,`${e??``}%`),[()=>Math.round(r.akm.metrics.taskFailRate*100)]),P(e,n)};F(_,e=>{r.akm.metrics&&typeof r.akm.metrics.taskFailRate==`number`&&e(v)}),A(i),s(e=>{t(c,e),t(d,r.akm.checks.pass),t(p,`/${r.checkTotal??``}`),t(g,r.akm.index?.hasEmbeddings?`On`:`Off`)},[()=>r.akm.index?.entryCount?.toLocaleString()??`—`]),P(n,i)},f=e=>{P(e,zt())};F(l,e=>{r.akm&&r.akm.available?e(u):e(f,-1)}),A(i),s(()=>{K(o,1,`badge ${r.badge.cls??``}`,`svelte-dcgqe1`),t(c,r.badge.label)}),d(`click`,i,()=>r.onNavigate(`akm`)),P(n,i),U()}c([`click`]);var Ht=p(`<div class="shortcut-grid svelte-8y2vdf"><button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">AI Providers</span> <span class="shortcut-desc svelte-8y2vdf">Models & provider credentials</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Knowledge</span> <span class="shortcut-desc svelte-8y2vdf">Assistant memory & behavior</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Voice</span> <span class="shortcut-desc svelte-8y2vdf">Speech-to-text & text-to-speech</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Portals & add-ons</span> <span class="shortcut-desc svelte-8y2vdf">Discord, Slack, API & more</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Secrets</span> <span class="shortcut-desc svelte-8y2vdf">Stack & portal credentials</span></button> <a class="shortcut svelte-8y2vdf" href="/setup?rerun=1"><span class="shortcut-name svelte-8y2vdf">Re-run setup</span> <span class="shortcut-desc svelte-8y2vdf">Walk through the setup wizard again</span></a></div>`);function Ut(t,n){T(n,!0);var r=Ht(),i=x(r),a=e(i,2),o=e(a,2),s=e(o,2),c=e(s,2);D(2),A(r),d(`click`,i,()=>n.onNavigate(`connections`)),d(`click`,a,()=>n.onNavigate(`akm`)),d(`click`,o,()=>n.onNavigate(`voice`)),d(`click`,s,()=>n.onNavigate(`addons`)),d(`click`,c,()=>n.onNavigate(`secrets`)),P(t,r),U()}c([`click`]);var Wt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>`),Gt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path></svg>`),Kt=p(`<!> <!> <div class="tile-grid svelte-xz862u"><!> <!> <!></div> <h3 class="section-heading svelte-xz862u">Knowledge base (AKM)</h3> <!> <h3 class="section-heading svelte-xz862u">Configure</h3> <!>`,1);function qt(t,r){T(r,!0);let i=B(null);ee(()=>{at.load(),ie().then(e=>{W(i,e,!0)}).catch(()=>{W(i,{available:!1},!0)})});let a=N(()=>{if(!n(i)||!n(i).available)return{label:`Unavailable`,cls:`badge-neutral`};let e=n(i).status;return e!==`ok`&&e!==`warn`&&e!==`fail`&&(e=n(i).checks.fail>0?`fail`:n(i).checks.warn>0?`warn`:`ok`),e===`ok`?{label:`Healthy`,cls:`badge-success`}:e===`warn`?{label:`Warnings`,cls:`badge-warning`}:{label:`Issues`,cls:`badge-danger`}}),o=N(()=>n(i)&&n(i).available?n(i).checks.pass+n(i).checks.warn+n(i).checks.fail:0);N(()=>r.automationsData?.automations.length??0),N(()=>r.automationsData?.automations.filter(e=>e.enabled).length??0);let s=N(()=>r.managedServices.length>0?r.managedServices:[...r.mergedServices.keys()]),c=N(()=>{if(n(s).length===0)return null;let e=n(s).filter(e=>r.mergedServices.get(e)===`running`).length;return{total:n(s).length,running:e}}),l=N(()=>n(s).filter(e=>r.mergedServices.get(e)!==`running`)),u=N(()=>{if(!n(c))return{status:`unknown`,title:`Checking services…`,detail:`Fetching the latest status from Docker.`};if(n(c).running===n(c).total&&n(c).total>0)return{status:`ok`,title:`All systems operational`,detail:`${n(c).total} of ${n(c).total} services are running normally.`};let e=n(c).total-n(c).running,t=n(l).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(`, `);return{status:`warning`,title:`${e} of ${n(c).total} services not running`,detail:t?`Not running: ${t}.`:`One or more services need attention.`}});var d=Kt(),f=h(d),p=e=>{Ot(e,{get status(){return n(u).status},get title(){return n(u).title},get detail(){return n(u).detail},get healthLoading(){return r.healthLoading},get applyLoading(){return r.applyLoading},get anyDangerousLoading(){return r.anyDangerousLoading},get tokenStored(){return r.tokenStored},get onCheckHealth(){return r.onCheckHealth},get onApplyChanges(){return r.onApplyChanges},get onNavigate(){return r.onNavigate}})};F(f,e=>{n(u).status!==`ok`&&e(p)});var m=e(f,2);At(m,{get operationResult(){return r.operationResult},get operationResultType(){return r.operationResultType},get onDismissResult(){return r.onDismissResult}});var g=e(m,2),_=x(g);{let e=N(()=>n(c)?.running),t=N(()=>n(c)?`/${n(c).total}`:null),i=N(()=>!!n(c));It(_,{label:`Services running`,onClick:()=>r.onNavigate(`containers`),get value(){return n(e)},get sub(){return n(t)},get loaded(){return n(i)}})}var v=e(_,2);It(v,{label:`View logs`,onClick:()=>r.onNavigate(`logs`),icon:e=>{P(e,Wt())},$$slots:{icon:!0}}),It(e(v,2),{label:`Check for updates`,onClick:()=>r.onNavigate(`updates`),icon:e=>{P(e,Gt())},$$slots:{icon:!0}}),A(g);var y=e(g,4);Vt(y,{get akm(){return n(i)},get badge(){return n(a)},get checkTotal(){return n(o)},get onNavigate(){return r.onNavigate}}),Ut(e(y,4),{get onNavigate(){return r.onNavigate}}),P(t,d),U()}function Jt(e){return e?/^v?\d+\.\d+\.\d+(?:[-+].*)?$/.test(e.trim()):!1}function Yt(e){return e.replace(/^v/,``).split(`+`)[0].includes(`-`)}function Xt(e){return(e??``).trim().replace(/^v/,``)}function Zt(e){return Jt(e)?Yt(e)?`prerelease`:`stable`:`unknown`}function Qt(e,t){let n=e=>{let t=e.trim().replace(/^v/,``).split(`+`)[0],n=t.indexOf(`-`),r=n===-1?t:t.slice(0,n),i=n===-1?null:t.slice(n+1),a=r.split(`.`).map(Number);return[a[0]??0,a[1]??0,a[2]??0,i]},r=(e,t)=>{let n=e.split(`.`),r=t.split(`.`);for(let e=0;e<Math.max(n.length,r.length);e++){if(e>=n.length)return-1;if(e>=r.length)return 1;let t=Number(n[e]),i=Number(r[e]),a=!isNaN(t),o=!isNaN(i);if(a&&o){if(t!==i)return t>i?1:-1}else if(a!==o)return a?-1:1;else if(n[e]!==r[e])return n[e]>r[e]?1:-1}return 0},[i,a,o,s]=n(e),[c,l,u,d]=n(t);return i===c?a===l?o===u?s===null&&d!==null?1:s!==null&&d===null?-1:s!==null&&d!==null?r(s,d):0:o>u?1:-1:a>l?1:-1:i>c?1:-1}function $t(e,t){return!Jt(e)||!Jt(t)?`unknown`:Qt(t,e)>0?`update`:`current`}function en(e,t){let n=Jt(e)?Yt(e):!0,r=t.filter(e=>Jt(e.version)&&(n||!e.prerelease));return r.length===0?null:r.reduce((e,t)=>Qt(t.version,e.version)>0?t:e).version}var tn=p(`<p class="channel-indicator svelte-7mkeya">You're on the <strong class="svelte-7mkeya"> </strong> channel. <!></p>`),nn=p(`<!> Checking…`,1),rn=m(`<svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-7mkeya"><path d="M23 4v6h-6" class="svelte-7mkeya"></path><path d="M1 20v-6h6" class="svelte-7mkeya"></path><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" class="svelte-7mkeya"></path></svg> Check for updates`,1),an=p(`<div class="secret-notice svelte-7mkeya" role="status"><div class="secret-notice-text svelte-7mkeya"><p class="secret-notice-title svelte-7mkeya">Secret-looking values were removed from stack.env</p> <p class="svelte-7mkeya"> <strong class="svelte-7mkeya">Connections</strong> tab (or as a secret) so your provider keeps working.</p></div> <button class="btn btn-sm btn-secondary svelte-7mkeya">Dismiss</button></div>`),on=p(`<p class="stuck-notice-error svelte-7mkeya" role="alert"> </p>`),sn=p(`<!> Clearing…`,1),cn=p(`<div class="stuck-notice svelte-7mkeya" role="status"><div class="stuck-notice-text svelte-7mkeya"><p class="stuck-notice-title svelte-7mkeya">An operation seems stuck</p> <p class="svelte-7mkeya">A previous install or update didn't finish cleanly and left a lock behind. It would
|
|
1
|
+
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,I as c,J as l,K as u,L as d,M as f,N as p,P as m,Q as h,R as g,T as _,W as v,X as y,Y as b,Z as x,_ as S,a as C,c as w,ct as T,d as E,dt as D,et as O,f as k,ft as A,g as j,h as M,it as N,j as P,k as F,l as I,m as L,mt as R,n as z,nt as B,o as V,p as H,r as ee,s as te,st as U,tt as W,u as G,x as ne,y as K,z as q}from"../chunks/BBI__kVO.js";import{l as re,n as J}from"../chunks/DQDnMiRB.js";import"../chunks/xihTtKlq.js";import{A as ie,B as ae,C as Y,D as X,E as Z,F as oe,G as se,H as ce,I as le,J as ue,K as de,M as fe,N as pe,O as me,P as he,Q as ge,R as _e,S as ve,T as ye,U as be,V as xe,W as Se,X as Ce,Y as we,Z as Te,_t as Ee,a as De,b as Oe,bt as ke,ct as Ae,d as Q,dt as je,et as Me,f as Ne,ft as Pe,g as Fe,h as Ie,ht as Le,j as Re,k as ze,lt as Be,m as Ve,nt as He,o as Ue,ot as We,p as Ge,q as Ke,st as qe,tt as Je,u as Ye,ut as Xe,vt as Ze,w as Qe,x as $e,z as et}from"../chunks/CgKtEGfl.js";import"../chunks/CwsyZWHi.js";import{a as tt,d as nt,f as rt,h as it,i as at,l as ot,m as st,p as ct,t as lt,u as ut,v as dt}from"../chunks/CRSbY4Kh.js";import{t as $}from"../chunks/Oz5B_hgH.js";import{n as ft,t as pt}from"../chunks/B-mBBr5-.js";import{a as mt,i as ht,o as gt,s as _t}from"../chunks/Buy0D9D-.js";var vt=p(`<button role="tab"> </button>`),yt=p(`<button role="tab"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></svg> </button>`),bt=p(`<div class="subtab-row svelte-7673iv"><div class="tabs svelte-7673iv" role="tablist"></div></div>`),xt=p(`<nav class="nav-shell svelte-7673iv" aria-label="Admin sections"><div class="section-strip svelte-7673iv" role="tablist" aria-label="Sections"></div> <!></nav>`);function St(r,i){T(i,!0);let o={overview:`<rect x="3" y="3" width="7" height="7" /><rect x="14" y="3" width="7" height="7" /><rect x="14" y="14" width="7" height="7" /><rect x="3" y="14" width="7" height="7" />`,containers:`<rect x="2" y="2" width="20" height="8" rx="2" ry="2" /><rect x="2" y="14" width="20" height="8" rx="2" ry="2" /><line x1="6" y1="6" x2="6.01" y2="6" /><line x1="6" y1="18" x2="6.01" y2="18" />`,logs:`<polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" />`,connections:`<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />`,akm:`<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />`,assistant:`<path d="M12 2a4 4 0 0 1 4 4v2h1a3 3 0 0 1 3 3v6a5 5 0 0 1-5 5H9a5 5 0 0 1-5-5v-6a3 3 0 0 1 3-3h1V6a4 4 0 0 1 4-4z" /><path d="M9 8h6" /><circle cx="9" cy="14" r="1" /><circle cx="15" cy="14" r="1" /><path d="M9 18c1 .8 2 .8 3 .8s2 0 3-.8" />`,"host-sharing":`<circle cx="18" cy="5" r="3" /><circle cx="6" cy="12" r="3" /><circle cx="18" cy="19" r="3" /><line x1="8.59" y1="13.51" x2="15.42" y2="17.49" /><line x1="15.41" y1="6.51" x2="8.59" y2="10.49" />`,activity:`<path d="M3 12h4l2-5 4 10 2-5h6" />`,voice:`<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z" /><path d="M19 10v2a7 7 0 0 1-14 0v-2" /><line x1="12" y1="19" x2="12" y2="23" /><line x1="8" y1="23" x2="16" y2="23" />`,addons:`<path d="M12 2L2 7l10 5 10-5-10-5z" /><path d="M2 17l10 5 10-5" /><path d="M2 12l10 5 10-5" />`,automations:`<circle cx="12" cy="12" r="10" /><polyline points="12 6 12 12 16 14" />`,secrets:`<rect x="3" y="11" width="18" height="11" rx="2" ry="2" /><path d="M7 11V7a5 5 0 0 1 10 0v4" />`,updates:`<polyline points="8 17 12 21 16 17" /><line x1="12" y1="12" x2="12" y2="21" /><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29" />`},c=[{id:`health`,label:`Health`,tabs:[{id:`overview`,label:`Overview`,icon:o.overview},{id:`activity`,label:`Activity`,icon:o.activity},{id:`containers`,label:`Systems`,icon:o.containers},{id:`logs`,label:`Journal`,icon:o.logs},{id:`updates`,label:`Check-up`,icon:o.updates}]},{id:`mind`,label:`Mind`,tabs:[{id:`connections`,label:`AI Providers`,icon:o.connections}]},{id:`voice`,label:`Voice`,tabs:[{id:`voice`,label:`Voice`,icon:o.voice}]},{id:`routines`,label:`Routines`,tabs:[{id:`automations`,label:`Automations`,icon:o.automations}]},{id:`capabilities`,label:`Capabilities`,tabs:[{id:`addons`,label:`Add-ons`,icon:o.addons}]},{id:`knowledge`,label:`Knowledge`,tabs:[{id:`akm`,label:`Memory`,icon:o.akm},{id:`assistant`,label:`Assistant`,icon:o.assistant},{id:`secrets`,label:`Secrets`,icon:o.secrets},{id:`host-sharing`,label:`Sharing`,icon:o[`host-sharing`]}]}],l=N(()=>c.find(e=>e.tabs.some(e=>e.id===i.active))??c[0]);function u(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.currentTarget,n=Array.from(t.parentElement?.querySelectorAll(`[role="tab"]`)??[]),r=n.indexOf(t);r!==-1&&n[e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length]?.focus()}function f(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.currentTarget,n=Array.from(t.parentElement?.querySelectorAll(`[role="tab"]`)??[]),r=n.indexOf(t);r!==-1&&n[e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length]?.focus()}function p(e){i.onSelect(e.tabs[0].id)}var m=xt(),h=x(m);a(h,21,()=>c,e=>e.id,(e,r)=>{var i=vt();let a;var o=x(i,!0);A(i),s(()=>{a=K(i,1,`section-tab svelte-7673iv`,null,a,{"section-tab-active":n(l).id===n(r).id}),k(i,`aria-selected`,n(l).id===n(r).id),t(o,n(r).label)}),d(`click`,i,()=>p(n(r))),d(`keydown`,i,u),P(e,i)}),A(h);var g=e(h,2),v=r=>{var o=bt(),c=x(o);a(c,21,()=>n(l).tabs,e=>e.id,(r,a)=>{var o=yt();let c;var l=x(o);_(l,()=>n(a).icon,!0),A(l);var u=e(l);A(o),s(()=>{c=K(o,1,`tab svelte-7673iv`,null,c,{"tab-active":i.active===n(a).id}),k(o,`aria-selected`,i.active===n(a).id),t(u,` ${n(a).label??``}`)}),d(`click`,o,()=>i.onSelect(n(a).id)),d(`keydown`,o,f),P(r,o)}),A(c),A(o),s(()=>k(c,`aria-label`,`${n(l).label??``} tabs`)),P(r,o)};F(g,e=>{n(l).tabs.length>1&&e(v)}),A(m),P(r,m),U()}c([`click`,`keydown`]);var Ct=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>`),wt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>`),Tt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>`),Et=p(`<button class="btn btn-secondary">View containers</button>`),Dt=p(`<section role="status" aria-live="polite"><span class="hero-icon svelte-10n23hu" aria-hidden="true"><!></span> <div class="hero-text svelte-10n23hu"><h2 class="hero-title svelte-10n23hu"> </h2> <p class="hero-detail svelte-10n23hu"> </p></div> <div class="hero-actions svelte-10n23hu"><button class="btn btn-secondary"> </button> <!> <button class="btn btn-secondary"> </button></div></section>`);function Ot(n,r){T(r,!0);var i=Dt(),a=x(i),o=x(a),c=e=>{P(e,Ct())},l=e=>{P(e,wt())},u=e=>{P(e,Tt())};F(o,e=>{r.status===`warning`?e(c):r.status===`ok`?e(l,1):e(u,-1)}),A(a);var f=e(a,2),p=x(f),m=x(p,!0);A(p);var h=e(p,2),g=x(h,!0);A(h),A(f);var _=e(f,2),v=x(_),y=x(v,!0);A(v);var b=e(v,2),S=e=>{var t=Et();d(`click`,t,()=>r.onNavigate(`containers`)),P(e,t)};F(b,e=>{r.status===`warning`&&e(S)});var C=e(b,2),w=x(C,!0);A(C),A(_),A(i),s(()=>{K(i,1,`hero hero--${r.status??``}`,`svelte-10n23hu`),t(m,r.title),t(g,r.detail),v.disabled=r.healthLoading,t(y,r.healthLoading?`Checking…`:`Re-check`),C.disabled=r.anyDangerousLoading||!r.tokenStored,t(w,r.applyLoading?`Applying…`:`Apply config & restart`)}),d(`click`,v,function(...e){r.onCheckHealth?.apply(this,e)}),d(`click`,C,function(...e){r.onApplyChanges?.apply(this,e)}),P(n,i),U()}c([`click`]);var kt=p(`<section><div class="output-header svelte-10sij3c"><h3 class="svelte-10sij3c">Operation output</h3> <button class="btn-ghost" aria-label="Dismiss"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div> <pre class="output-code svelte-10sij3c"> </pre></section>`);function At(n,r){var i=f(),a=h(i),o=n=>{var i=kt(),a=x(i),o=e(x(a),2);A(a);var c=e(a,2),l=x(c,!0);A(c),A(i),s(()=>{K(i,1,`output-section output-section--${r.operationResultType??``}`,`svelte-10sij3c`),t(l,r.operationResult)}),d(`click`,o,function(...e){r.onDismissResult?.apply(this,e)}),P(n,i)};F(a,e=>{r.operationResult&&e(o)}),P(n,i)}c([`click`]);var jt=p(`<span class="tile-metric tile-metric--icon svelte-19hpfg" aria-hidden="true"><!></span>`),Mt=p(`<span class="tile-metric-sub svelte-19hpfg"> </span>`),Nt=p(` <!>`,1),Pt=p(`<span class="tile-metric svelte-19hpfg"><!></span>`),Ft=p(`<button class="tile svelte-19hpfg"><!> <span class="tile-label svelte-19hpfg"> </span></button>`);function It(n,i){let a=C(i,`value`,3,null),c=C(i,`sub`,3,null),l=C(i,`loaded`,3,!0);var u=Ft(),f=x(u),p=e=>{var t=jt();r(x(t),()=>i.icon),A(t),P(e,t)},m=n=>{var r=Pt(),i=x(r),u=n=>{var r=Nt(),i=h(r,!0),o=e(i),l=e=>{var n=Mt(),r=x(n,!0);A(n),s(()=>t(r,c())),P(e,n)};F(o,e=>{c()&&e(l)}),s(()=>t(i,a())),P(n,r)},d=e=>{P(e,o(`—`))};F(i,e=>{l()?e(u):e(d,-1)}),A(r),P(n,r)};F(f,e=>{i.icon?e(p):e(m,-1)});var g=e(f,2),_=x(g,!0);A(g),A(u),s(()=>t(_,i.label)),d(`click`,u,function(...e){i.onClick?.apply(this,e)}),P(n,u)}c([`click`]);var Lt=p(`<div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Task failure rate</span></div>`),Rt=p(`<div class="akm-metrics svelte-dcgqe1"><div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Indexed assets</span></div> <div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> <span class="akm-num-sub svelte-dcgqe1"> </span></span> <span class="akm-cap svelte-dcgqe1">Health checks passing</span></div> <div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Semantic search</span></div> <!></div>`),zt=p(`<p class="akm-unavailable svelte-dcgqe1">Metrics unavailable — the akm CLI isn't reachable from the admin host.</p>`),Bt=p(`<button class="akm-card svelte-dcgqe1" aria-label="AKM health — open Knowledge settings"><div class="akm-head svelte-dcgqe1"><span class="akm-title svelte-dcgqe1">AKM runtime health</span> <span> </span></div> <!></button>`);function Vt(n,r){T(r,!0);var i=Bt(),a=x(i),o=e(x(a),2),c=x(o,!0);A(o),A(a);var l=e(a,2),u=n=>{var i=Rt(),a=x(i),o=x(a),c=x(o,!0);A(o),D(2),A(a);var l=e(a,2),u=x(l),d=x(u,!0),f=e(d),p=x(f);A(f),A(u),D(2),A(l);var m=e(l,2),h=x(m),g=x(h,!0);A(h),D(2),A(m);var _=e(m,2),v=e=>{var n=Lt(),i=x(n),a=x(i);A(i),D(2),A(n),s(e=>t(a,`${e??``}%`),[()=>Math.round(r.akm.metrics.taskFailRate*100)]),P(e,n)};F(_,e=>{r.akm.metrics&&typeof r.akm.metrics.taskFailRate==`number`&&e(v)}),A(i),s(e=>{t(c,e),t(d,r.akm.checks.pass),t(p,`/${r.checkTotal??``}`),t(g,r.akm.index?.hasEmbeddings?`On`:`Off`)},[()=>r.akm.index?.entryCount?.toLocaleString()??`—`]),P(n,i)},f=e=>{P(e,zt())};F(l,e=>{r.akm&&r.akm.available?e(u):e(f,-1)}),A(i),s(()=>{K(o,1,`badge ${r.badge.cls??``}`,`svelte-dcgqe1`),t(c,r.badge.label)}),d(`click`,i,()=>r.onNavigate(`akm`)),P(n,i),U()}c([`click`]);var Ht=p(`<div class="shortcut-grid svelte-8y2vdf"><button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">AI Providers</span> <span class="shortcut-desc svelte-8y2vdf">Models & provider credentials</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Knowledge</span> <span class="shortcut-desc svelte-8y2vdf">Assistant memory & behavior</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Voice</span> <span class="shortcut-desc svelte-8y2vdf">Speech-to-text & text-to-speech</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Portals & add-ons</span> <span class="shortcut-desc svelte-8y2vdf">Discord, Slack, API & more</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Secrets</span> <span class="shortcut-desc svelte-8y2vdf">Stack & portal credentials</span></button> <a class="shortcut svelte-8y2vdf" href="/setup?rerun=1"><span class="shortcut-name svelte-8y2vdf">Re-run setup</span> <span class="shortcut-desc svelte-8y2vdf">Walk through the setup wizard again</span></a></div>`);function Ut(t,n){T(n,!0);var r=Ht(),i=x(r),a=e(i,2),o=e(a,2),s=e(o,2),c=e(s,2);D(2),A(r),d(`click`,i,()=>n.onNavigate(`connections`)),d(`click`,a,()=>n.onNavigate(`akm`)),d(`click`,o,()=>n.onNavigate(`voice`)),d(`click`,s,()=>n.onNavigate(`addons`)),d(`click`,c,()=>n.onNavigate(`secrets`)),P(t,r),U()}c([`click`]);var Wt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>`),Gt=m(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path></svg>`),Kt=p(`<!> <!> <div class="tile-grid svelte-xz862u"><!> <!> <!></div> <h3 class="section-heading svelte-xz862u">Knowledge base (AKM)</h3> <!> <h3 class="section-heading svelte-xz862u">Configure</h3> <!>`,1);function qt(t,r){T(r,!0);let i=B(null);ee(()=>{at.load(),ie().then(e=>{W(i,e,!0)}).catch(()=>{W(i,{available:!1},!0)})});let a=N(()=>{if(!n(i)||!n(i).available)return{label:`Unavailable`,cls:`badge-neutral`};let e=n(i).status;return e!==`ok`&&e!==`warn`&&e!==`fail`&&(e=n(i).checks.fail>0?`fail`:n(i).checks.warn>0?`warn`:`ok`),e===`ok`?{label:`Healthy`,cls:`badge-success`}:e===`warn`?{label:`Warnings`,cls:`badge-warning`}:{label:`Issues`,cls:`badge-danger`}}),o=N(()=>n(i)&&n(i).available?n(i).checks.pass+n(i).checks.warn+n(i).checks.fail:0);N(()=>r.automationsData?.automations.length??0),N(()=>r.automationsData?.automations.filter(e=>e.enabled).length??0);let s=N(()=>r.managedServices.length>0?r.managedServices:[...r.mergedServices.keys()]),c=N(()=>{if(n(s).length===0)return null;let e=n(s).filter(e=>r.mergedServices.get(e)===`running`).length;return{total:n(s).length,running:e}}),l=N(()=>n(s).filter(e=>r.mergedServices.get(e)!==`running`)),u=N(()=>{if(!n(c))return{status:`unknown`,title:`Checking services…`,detail:`Fetching the latest status from Docker.`};if(n(c).running===n(c).total&&n(c).total>0)return{status:`ok`,title:`All systems operational`,detail:`${n(c).total} of ${n(c).total} services are running normally.`};let e=n(c).total-n(c).running,t=n(l).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(`, `);return{status:`warning`,title:`${e} of ${n(c).total} services not running`,detail:t?`Not running: ${t}.`:`One or more services need attention.`}});var d=Kt(),f=h(d),p=e=>{Ot(e,{get status(){return n(u).status},get title(){return n(u).title},get detail(){return n(u).detail},get healthLoading(){return r.healthLoading},get applyLoading(){return r.applyLoading},get anyDangerousLoading(){return r.anyDangerousLoading},get tokenStored(){return r.tokenStored},get onCheckHealth(){return r.onCheckHealth},get onApplyChanges(){return r.onApplyChanges},get onNavigate(){return r.onNavigate}})};F(f,e=>{n(u).status!==`ok`&&e(p)});var m=e(f,2);At(m,{get operationResult(){return r.operationResult},get operationResultType(){return r.operationResultType},get onDismissResult(){return r.onDismissResult}});var g=e(m,2),_=x(g);{let e=N(()=>n(c)?.running),t=N(()=>n(c)?`/${n(c).total}`:null),i=N(()=>!!n(c));It(_,{label:`Services running`,onClick:()=>r.onNavigate(`containers`),get value(){return n(e)},get sub(){return n(t)},get loaded(){return n(i)}})}var v=e(_,2);It(v,{label:`View logs`,onClick:()=>r.onNavigate(`logs`),icon:e=>{P(e,Wt())},$$slots:{icon:!0}}),It(e(v,2),{label:`Check for updates`,onClick:()=>r.onNavigate(`updates`),icon:e=>{P(e,Gt())},$$slots:{icon:!0}}),A(g);var y=e(g,4);Vt(y,{get akm(){return n(i)},get badge(){return n(a)},get checkTotal(){return n(o)},get onNavigate(){return r.onNavigate}}),Ut(e(y,4),{get onNavigate(){return r.onNavigate}}),P(t,d),U()}function Jt(e){return e?/^v?\d+\.\d+\.\d+(?:[-+].*)?$/.test(e.trim()):!1}function Yt(e){return e.replace(/^v/,``).split(`+`)[0].includes(`-`)}function Xt(e){return(e??``).trim().replace(/^v/,``)}function Zt(e){return Jt(e)?Yt(e)?`prerelease`:`stable`:`unknown`}function Qt(e,t){let n=e=>{let t=e.trim().replace(/^v/,``).split(`+`)[0],n=t.indexOf(`-`),r=n===-1?t:t.slice(0,n),i=n===-1?null:t.slice(n+1),a=r.split(`.`).map(Number);return[a[0]??0,a[1]??0,a[2]??0,i]},r=(e,t)=>{let n=e.split(`.`),r=t.split(`.`);for(let e=0;e<Math.max(n.length,r.length);e++){if(e>=n.length)return-1;if(e>=r.length)return 1;let t=Number(n[e]),i=Number(r[e]),a=!isNaN(t),o=!isNaN(i);if(a&&o){if(t!==i)return t>i?1:-1}else if(a!==o)return a?-1:1;else if(n[e]!==r[e])return n[e]>r[e]?1:-1}return 0},[i,a,o,s]=n(e),[c,l,u,d]=n(t);return i===c?a===l?o===u?s===null&&d!==null?1:s!==null&&d===null?-1:s!==null&&d!==null?r(s,d):0:o>u?1:-1:a>l?1:-1:i>c?1:-1}function $t(e,t){return!Jt(e)||!Jt(t)?`unknown`:Qt(t,e)>0?`update`:`current`}function en(e,t){let n=Jt(e)?Yt(e):!0,r=t.filter(e=>Jt(e.version)&&(n||!e.prerelease));return r.length===0?null:r.reduce((e,t)=>Qt(t.version,e.version)>0?t:e).version}var tn=p(`<p class="channel-indicator svelte-7mkeya">You're on the <strong class="svelte-7mkeya"> </strong> channel. <!></p>`),nn=p(`<!> Checking…`,1),rn=m(`<svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-7mkeya"><path d="M23 4v6h-6" class="svelte-7mkeya"></path><path d="M1 20v-6h6" class="svelte-7mkeya"></path><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" class="svelte-7mkeya"></path></svg> Check for updates`,1),an=p(`<div class="secret-notice svelte-7mkeya" role="status"><div class="secret-notice-text svelte-7mkeya"><p class="secret-notice-title svelte-7mkeya">Secret-looking values were removed from stack.env</p> <p class="svelte-7mkeya"> <strong class="svelte-7mkeya">Connections</strong> tab (or as a secret) so your provider keeps working.</p></div> <button class="btn btn-sm btn-secondary svelte-7mkeya">Dismiss</button></div>`),on=p(`<p class="stuck-notice-error svelte-7mkeya" role="alert"> </p>`),sn=p(`<!> Clearing…`,1),cn=p(`<div class="stuck-notice svelte-7mkeya" role="status"><div class="stuck-notice-text svelte-7mkeya"><p class="stuck-notice-title svelte-7mkeya">An operation seems stuck</p> <p class="svelte-7mkeya">A previous install or update didn't finish cleanly and left a lock behind. It would
|
|
2
2
|
clear itself automatically after 30 minutes — or you can clear it now to run another
|
|
3
3
|
update. Nothing else is changed.</p> <!></div> <button class="btn btn-sm btn-primary svelte-7mkeya"><!></button></div>`),ln=p(`<div class="stuck-notice stuck-notice-ok svelte-7mkeya" role="status"><div class="stuck-notice-text svelte-7mkeya"><p class="stuck-notice-title svelte-7mkeya">Cleared</p> <p class="svelte-7mkeya">The stuck operation was cleared. You can run an update again.</p></div></div>`),un=p(`<h3 id="update-primary-title" class="update-title svelte-7mkeya"> </h3> <p class="update-desc svelte-7mkeya">Brings every stack service up to the version of OpenPalm you're running. Your settings
|
|
4
4
|
are backed up first, then your assistant restarts — offline for about a minute. Your data is kept.</p>`,1),dn=p(`<h3 id="update-primary-title" class="update-title svelte-7mkeya">You're up to date</h3> <p class="update-desc svelte-7mkeya"> </p>`,1),fn=p(`<a target="_blank" rel="noopener noreferrer" class="svelte-7mkeya">Download it</a>.`,1),pn=p(`<p class="update-harness-note svelte-7mkeya" role="status">A new version of the OpenPalm app is available — this one updates by <strong class="svelte-7mkeya">re-downloading the app</strong>,
|
|
5
5
|
not in place. <!></p>`),mn=p(`<!> Updating…`,1),hn=p(`<span class="status-emoji svelte-7mkeya" role="img"> </span>`),gn=p(`<!> Updating…`,1),_n=p(`<button class="btn btn-sm btn-secondary version-action svelte-7mkeya"><!></button>`),vn=p(`<div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya"> </dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code> </code> <!></span> <!></dd></div>`),yn=p(`<span class="status-emoji svelte-7mkeya" role="img"> </span>`),bn=p(`<a class="btn btn-sm btn-secondary version-action svelte-7mkeya" target="_blank" rel="noopener noreferrer"> </a>`),xn=p(`<span class="status-emoji svelte-7mkeya" role="img"> </span>`),Sn=p(`<span class="version-action-note svelte-7mkeya" role="status"><!> Admin interface updated — reconnecting…</span>`),Cn=p(`<button class="btn btn-sm btn-primary svelte-7mkeya">Restart app</button>`),wn=p(`<span class="version-action-note svelte-7mkeya">Downloaded. <!></span>`),Tn=p(`<!> Downloading…`,1),En=p(`<button class="btn btn-sm btn-secondary version-action svelte-7mkeya"><!></button>`),Dn=p(`<button class="btn btn-sm btn-secondary svelte-7mkeya">Prune…</button>`),On=p(`<p class="backups-empty svelte-7mkeya"><!> Loading backups…</p>`),kn=p(`<p class="backups-error svelte-7mkeya" role="alert"> </p>`),An=p(`<p class="backups-empty svelte-7mkeya">No backups yet — one is created the first time you update.</p>`),jn=p(`<li class="backups-item svelte-7mkeya"><span class="backups-item-name svelte-7mkeya"> </span> <span class="backups-item-meta svelte-7mkeya"> </span></li>`),Mn=p(`<p class="backups-summary svelte-7mkeya"> </p> <ul class="backups-list svelte-7mkeya"></ul>`,1),Nn=p(`<!> Deleting…`,1),Pn=p(`<div class="prune-prompt svelte-7mkeya" role="alertdialog" aria-label="Confirm prune backups"><p class="prune-prompt-title svelte-7mkeya">Delete older backups?</p> <p class="svelte-7mkeya">Keep the newest <input class="prune-keep-input svelte-7mkeya" type="number" min="0" aria-label="Number of newest backups to keep"/> and permanently delete the rest. This cannot be undone.</p> <div class="prune-actions svelte-7mkeya"><button class="btn btn-sm btn-danger svelte-7mkeya"><!></button> <button class="btn btn-sm btn-secondary svelte-7mkeya">Cancel</button></div></div>`),Fn=p(`<div class="version-select-skeleton svelte-7mkeya"></div>`),In=p(`<option class="svelte-7mkeya"> </option>`),Ln=p(`<select id="stack-version-select" class="version-select svelte-7mkeya" aria-label="OpenPalm version to install"><option class="svelte-7mkeya">latest</option><!></select>`),Rn=p(`<input id="stack-version-select" class="version-input svelte-7mkeya" type="text" aria-label="OpenPalm version to install" placeholder="e.g. 0.11.0 or latest"/>`),zn=p(`<!> Checking…`,1),Bn=p(`<!> Installing…`,1),Vn=p(`<p class="migrate-preview-empty svelte-7mkeya">Nothing — your files are already compatible. Only the images and version are updated.</p>`),Hn=p(`<li class="svelte-7mkeya"> </li>`),Un=p(`<ul class="migrate-preview-list svelte-7mkeya"></ul> <p class="version-hint svelte-7mkeya">These are copy-only, backup-first changes. Nothing is deleted. Your settings are backed up before anything is written.</p>`,1),Wn=p(`<p class="migrate-preview-note svelte-7mkeya"> </p>`),Gn=p(`<div class="migrate-preview svelte-7mkeya" role="status"><p class="migrate-preview-title svelte-7mkeya"> </p> <!> <!></div>`),Kn=p(`<!> Downgrading…`,1),qn=p(`<div class="downgrade-warning svelte-7mkeya" role="alertdialog" aria-label="Confirm downgrade"><p class="downgrade-warning-title svelte-7mkeya">This is a downgrade.</p> <p class="svelte-7mkeya"> </p> <div class="downgrade-actions svelte-7mkeya"><button class="btn btn-sm btn-secondary svelte-7mkeya">Cancel</button> <button class="btn btn-sm btn-danger svelte-7mkeya"><!></button></div></div>`),Jn=p(`<div class="version-select-skeleton svelte-7mkeya"></div>`),Yn=p(`<option class="svelte-7mkeya"> </option>`),Xn=p(`<select id="ui-version-select" class="version-select svelte-7mkeya" aria-label="Admin interface version to download"></select>`),Zn=p(`<input id="ui-version-select" class="version-input svelte-7mkeya" type="text" aria-label="Admin interface version to download" placeholder="e.g. 0.11.0-beta.7"/>`),Qn=p(`<!> Downloading…`,1),$n=p(`<div class="version-restart-prompt svelte-7mkeya" role="status"><!> Admin interface updated — reconnecting…</div>`),er=p(`<div class="version-restart-prompt svelte-7mkeya">Admin interface updated. <button class="btn btn-sm btn-primary svelte-7mkeya">Restart app</button></div>`),tr=p(`<p class="version-hint svelte-7mkeya">Downloads and replaces the admin interface. Takes effect after restart.</p>`),nr=p(`<label class="desktop-toggle svelte-7mkeya"><input type="checkbox" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Notify when the assistant replies or errors while the app is in the background.</span></label> <label class="desktop-toggle desktop-toggle--nested svelte-7mkeya"><input type="checkbox" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Include reply preview in the notification body.</span></label> <p class="version-hint svelte-7mkeya">Reply previews stay off by default because desktop notifications can persist outside the app.</p>`,1),rr=p(`<label class="desktop-toggle svelte-7mkeya"><input type="checkbox" disabled="" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Notify when the assistant replies or errors while the app is in the background.</span></label> <label class="desktop-toggle desktop-toggle--nested svelte-7mkeya"><input type="checkbox" disabled="" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Include reply preview in the notification body.</span></label> <p class="version-hint svelte-7mkeya">Desktop notifications are available in the OpenPalm desktop app.</p>`,1),ir=p(`<div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="ui-version-select">Admin interface version</label> <div class="version-input-row svelte-7mkeya"><!> <button class="btn btn-sm btn-secondary svelte-7mkeya"><!></button></div> <!></div> <div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><div class="version-label svelte-7mkeya">Launch on login</div> <label class="desktop-toggle svelte-7mkeya"><input type="checkbox" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Start OpenPalm automatically when you sign in on this device.</span></label> <p class="version-hint svelte-7mkeya"><!></p></div> <div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><div class="version-label svelte-7mkeya">Desktop notifications</div> <!></div>`,1),ar=p(`<div class="panel svelte-7mkeya" role="tabpanel"><div class="panel-header svelte-7mkeya"><div class="svelte-7mkeya"><h2 class="svelte-7mkeya">Check-up</h2> <p class="panel-subtitle svelte-7mkeya">Keep OpenPalm up to date. An update backs up your settings first, then briefly restarts your assistant.</p> <!></div> <button class="btn btn-sm btn-secondary refresh-releases svelte-7mkeya" title="Check GitHub for newer versions"><!></button></div> <p class="status-live svelte-7mkeya" role="status" aria-live="polite"> </p> <!> <!> <div class="panel-body svelte-7mkeya"><section aria-labelledby="update-primary-title"><div class="update-card-text svelte-7mkeya"><!> <!></div> <button class="btn btn-primary update-go svelte-7mkeya"><!></button></section> <div class="versions-group svelte-7mkeya" aria-labelledby="versions-platform-title"><h3 id="versions-platform-title" class="versions-group-title svelte-7mkeya"> <span class="versions-group-sub svelte-7mkeya">control plane</span></h3></div> <dl class="versions svelte-7mkeya"><div class="versions-subhead svelte-7mkeya"><dt class="svelte-7mkeya">Services</dt><dd class="svelte-7mkeya"></dd></div> <!> <div class="versions-subhead svelte-7mkeya"><dt class="svelte-7mkeya">App</dt><dd class="svelte-7mkeya"></dd></div> <div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">OpenPalm App</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code> </code> <!></span> <!></dd></div> <div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">Admin interface</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code> </code> <!></span> <!></dd></div></dl> <section class="backups-section svelte-7mkeya" aria-labelledby="backups-title"><div class="backups-header svelte-7mkeya"><h3 id="backups-title" class="backups-title svelte-7mkeya">Backups</h3> <!></div> <p class="backups-desc svelte-7mkeya">Each update copies your settings here first. To restore one, point OpenPalm at
|
|
6
6
|
the snapshot directory below (or run <code class="svelte-7mkeya">openpalm rollback</code> for the last update).
|
|
7
7
|
Nothing is ever deleted automatically.</p> <!> <!></section> <details class="advanced svelte-7mkeya"><summary class="svelte-7mkeya">Advanced options</summary> <div class="advanced-body svelte-7mkeya"><div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="stack-version-select">Install a specific version</label> <p class="version-running-note svelte-7mkeya">Install an exact version — e.g. to roll back, or to pin to a specific tested release.
|
|
8
|
-
The list shows versions up to your current control plane <!>.</p> <div class="version-input-row svelte-7mkeya"><!> <button class="btn btn-sm btn-secondary version-preview-btn svelte-7mkeya"><!></button> <button class="btn btn-sm btn-secondary svelte-7mkeya"><!></button></div> <p class="version-hint svelte-7mkeya">Explicit version control: installs the chosen version and restarts services (about a minute offline). Use this to roll back or pin a release.</p> <!> <!></div> <!></div></details></div></div>`);function or(r,c){T(c,!0);let l=C(c,`services`,19,()=>[]),u=C(c,`harnessUpdateAvailable`,3,!1),p=C(c,`platformVersion`,3,``),m=C(c,`migratePreviewLoading`,3,!1),g=C(c,`migratePreview`,3,null),_=C(c,`downgradePrompt`,3,null);function v(e){let t=[];return e.distTag?t.push(e.distTag):e.prerelease&&t.push(`pre-release`),t.length?`${e.version} (${t.join(`, `)})`:e.version}let y=`https://github.com/itlackey/openpalm/releases`,b=N(()=>c.releases.map(e=>({version:e.tag,prerelease:e.prerelease}))),w=N(()=>c.uiVersions.map(e=>({version:e.version,prerelease:e.prerelease})));function O(e){return!Jt(e)||!Jt(p())?`unknown`:Qt(e,p())<0?`update`:`current`}let M=N(()=>l().map(e=>({...e,status:O(e.version)}))),I=N(()=>n(M).find(e=>e.id===`assistant`)?.version??c.currentImageTag),R=N(()=>n(M).some(e=>e.status===`update`)),z=N(()=>c.electronLatestVersion??en(c.electronVersion,n(b))),V=N(()=>c.inElectron?$t(c.electronVersion,n(z)):`unknown`),te=N(()=>c.electronLatestUrl??(n(z)?`${y}/tag/v${n(z)}`:y)),ne=N(()=>en(c.uiVersion,n(w))),q=N(()=>$t(c.uiVersion,n(ne))),re=N(()=>Zt(p())),J=B(!1),ie=B(!1),Y=B(!1),X=B(!1),Z=B(!1),se=B(null),ce=B(!1),le=B(``),ue=B(null),de=B(!1),fe=B(null),pe=B(null),me=B(!1),he=B(``),ge=B(!1);ee(()=>{W(J,ot(),!0),W(ie,ut(),!0),Oe(),ye(),be(),_e()});async function _e(){try{W(pe,await ae(),!0)}catch{W(pe,null)}}async function ve(){W(me,!0),W(he,``);try{W(ge,(await Ie()).removed,!0),await _e()}catch(e){W(he,e instanceof Error?e.message:String(e),!0),await _e()}finally{W(me,!1)}}async function ye(){W(ce,!0),W(le,``);try{W(se,await oe(),!0)}catch(e){W(le,e instanceof Error?e.message:String(e),!0)}finally{W(ce,!1)}}async function be(){try{W(fe,(await Se()).notice,!0)}catch{W(fe,null)}}async function xe(){W(fe,null);try{await Qe()}catch{}}function Ce(){W(ue,n(se)&&n(se).count>1?n(se).count-1:0,!0)}function we(){W(ue,null)}async function Te(){if(n(ue)!==null){W(de,!0);try{await Me(n(ue)),W(ue,null),await ye()}catch(e){W(le,e instanceof Error?e.message:String(e),!0)}finally{W(de,!1)}}}function Ee(e){if(!Number.isFinite(e))return`—`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10||r===0?0:1)} ${t[r]}`}function De(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString()}async function Oe(){let e=await window.openpalm?.launchOnLoginStatus?.();e&&(W(Y,e.supported,!0),W(X,e.enabled,!0))}async function ke(e){let t=e.currentTarget.checked;if(!window.openpalm?.setLaunchOnLogin){W(X,!1);return}W(Z,!0);try{let e=await window.openpalm.setLaunchOnLogin(t);W(Y,e.supported,!0),W(X,e.enabled,!0)}finally{W(Z,!1)}}function Ae(e){return e===`current`?`✅`:e===`update`?`⬆️`:``}function Q(e){return e===`current`?`Up to date`:e===`update`?`Update available`:`Update status unknown`}let je=N(()=>c.upgradeLoading?`Updating OpenPalm to the latest version…`:c.tagChangeLoading?`Installing the selected version and restarting…`:c.uiDownloadLoading?`Downloading the admin interface…`:c.releasesLoading||c.uiVersionsLoading?`Checking for updates…`:``);var Ne=ar(),Pe=x(Ne),Fe=x(Pe),Le=e(x(Fe),4),Re=r=>{var i=tn(),a=e(x(i)),c=x(a,!0);A(a);var l=e(a,2),u=e=>{P(e,o(`Prereleases get new features early and may be less stable.`))},d=e=>{P(e,o(`You'll only be offered stable releases.`))};F(l,e=>{n(re)===`prerelease`?e(u):e(d,-1)}),A(i),s(()=>t(c,n(re)===`prerelease`?`prerelease`:`stable`)),P(r,i)};F(Le,e=>{n(re)!==`unknown`&&e(Re)}),A(Fe);var ze=e(Fe,2),Be=x(ze),Ve=e=>{var t=nn();$(h(t),{}),D(),P(e,t)},He=e=>{var t=rn();D(),P(e,t)};F(Be,e=>{c.releasesLoading||c.uiVersionsLoading?e(Ve):e(He,-1)}),A(ze),A(Pe);var Ue=e(Pe,2),We=x(Ue,!0);A(Ue);var Ge=e(Ue,2),Ke=r=>{var i=an(),a=x(i),o=e(x(a),2),c=x(o);D(2),A(o),A(a);var l=e(a,2);A(i),s(e=>t(c,`${e??``} ${n(fe).keys.length===1?`was`:`were`} removed
|
|
8
|
+
The list shows versions up to your current control plane <!>.</p> <div class="version-input-row svelte-7mkeya"><!> <button class="btn btn-sm btn-secondary version-preview-btn svelte-7mkeya"><!></button> <button class="btn btn-sm btn-secondary svelte-7mkeya"><!></button></div> <p class="version-hint svelte-7mkeya">Explicit version control: installs the chosen version and restarts services (about a minute offline). Use this to roll back or pin a release.</p> <!> <!></div> <!></div></details></div></div>`);function or(r,c){T(c,!0);let l=C(c,`services`,19,()=>[]),u=C(c,`harnessUpdateAvailable`,3,!1),p=C(c,`platformVersion`,3,``),m=C(c,`migratePreviewLoading`,3,!1),g=C(c,`migratePreview`,3,null),_=C(c,`downgradePrompt`,3,null);function v(e){let t=[];return e.distTag?t.push(e.distTag):e.prerelease&&t.push(`pre-release`),t.length?`${e.version} (${t.join(`, `)})`:e.version}let y=`https://github.com/itlackey/openpalm/releases`,b=N(()=>c.releases.filter(e=>e.hasElectronBuild).map(e=>({version:e.tag,prerelease:e.prerelease}))),w=N(()=>c.uiVersions.map(e=>({version:e.version,prerelease:e.prerelease})));function O(e){return!Jt(e)||!Jt(p())?`unknown`:Qt(e,p())<0?`update`:`current`}let M=N(()=>l().map(e=>({...e,status:O(e.version)}))),I=N(()=>n(M).find(e=>e.id===`assistant`)?.version??c.currentImageTag),R=N(()=>n(M).some(e=>e.status===`update`)),z=N(()=>c.electronLatestVersion??en(c.electronVersion,n(b))),V=N(()=>c.inElectron?$t(c.electronVersion,n(z)):`unknown`),te=N(()=>c.electronLatestUrl??(n(z)?`${y}/tag/v${n(z)}`:y)),ne=N(()=>en(c.uiVersion,n(w))),q=N(()=>$t(c.uiVersion,n(ne))),re=N(()=>Zt(p())),J=B(!1),ie=B(!1),Y=B(!1),X=B(!1),Z=B(!1),se=B(null),ce=B(!1),le=B(``),ue=B(null),de=B(!1),fe=B(null),pe=B(null),me=B(!1),he=B(``),ge=B(!1);ee(()=>{W(J,ot(),!0),W(ie,ut(),!0),Oe(),ye(),be(),_e()});async function _e(){try{W(pe,await ae(),!0)}catch{W(pe,null)}}async function ve(){W(me,!0),W(he,``);try{W(ge,(await Ie()).removed,!0),await _e()}catch(e){W(he,e instanceof Error?e.message:String(e),!0),await _e()}finally{W(me,!1)}}async function ye(){W(ce,!0),W(le,``);try{W(se,await oe(),!0)}catch(e){W(le,e instanceof Error?e.message:String(e),!0)}finally{W(ce,!1)}}async function be(){try{W(fe,(await Se()).notice,!0)}catch{W(fe,null)}}async function xe(){W(fe,null);try{await Qe()}catch{}}function Ce(){W(ue,n(se)&&n(se).count>1?n(se).count-1:0,!0)}function we(){W(ue,null)}async function Te(){if(n(ue)!==null){W(de,!0);try{await Me(n(ue)),W(ue,null),await ye()}catch(e){W(le,e instanceof Error?e.message:String(e),!0)}finally{W(de,!1)}}}function Ee(e){if(!Number.isFinite(e))return`—`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10||r===0?0:1)} ${t[r]}`}function De(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString()}async function Oe(){let e=await window.openpalm?.launchOnLoginStatus?.();e&&(W(Y,e.supported,!0),W(X,e.enabled,!0))}async function ke(e){let t=e.currentTarget.checked;if(!window.openpalm?.setLaunchOnLogin){W(X,!1);return}W(Z,!0);try{let e=await window.openpalm.setLaunchOnLogin(t);W(Y,e.supported,!0),W(X,e.enabled,!0)}finally{W(Z,!1)}}function Ae(e){return e===`current`?`✅`:e===`update`?`⬆️`:``}function Q(e){return e===`current`?`Up to date`:e===`update`?`Update available`:`Update status unknown`}let je=N(()=>c.upgradeLoading?`Updating OpenPalm to the latest version…`:c.tagChangeLoading?`Installing the selected version and restarting…`:c.uiDownloadLoading?`Downloading the admin interface…`:c.releasesLoading||c.uiVersionsLoading?`Checking for updates…`:``);var Ne=ar(),Pe=x(Ne),Fe=x(Pe),Le=e(x(Fe),4),Re=r=>{var i=tn(),a=e(x(i)),c=x(a,!0);A(a);var l=e(a,2),u=e=>{P(e,o(`Prereleases get new features early and may be less stable.`))},d=e=>{P(e,o(`You'll only be offered stable releases.`))};F(l,e=>{n(re)===`prerelease`?e(u):e(d,-1)}),A(i),s(()=>t(c,n(re)===`prerelease`?`prerelease`:`stable`)),P(r,i)};F(Le,e=>{n(re)!==`unknown`&&e(Re)}),A(Fe);var ze=e(Fe,2),Be=x(ze),Ve=e=>{var t=nn();$(h(t),{}),D(),P(e,t)},He=e=>{var t=rn();D(),P(e,t)};F(Be,e=>{c.releasesLoading||c.uiVersionsLoading?e(Ve):e(He,-1)}),A(ze),A(Pe);var Ue=e(Pe,2),We=x(Ue,!0);A(Ue);var Ge=e(Ue,2),Ke=r=>{var i=an(),a=x(i),o=e(x(a),2),c=x(o);D(2),A(o),A(a);var l=e(a,2);A(i),s(e=>t(c,`${e??``} ${n(fe).keys.length===1?`was`:`were`} removed
|
|
9
9
|
because secrets don't belong in stack.env. Re-add ${n(fe).keys.length===1?`it`:`them`}
|
|
10
10
|
via the `),[()=>n(fe).keys.join(`, `)]),d(`click`,l,xe),P(r,i)};F(Ge,e=>{n(fe)&&e(Ke)});var qe=e(Ge,2),Je=r=>{var i=cn(),a=x(i),c=e(x(a),4),l=e=>{var r=on(),i=x(r,!0);A(r),s(()=>t(i,n(he))),P(e,r)};F(c,e=>{n(he)&&e(l)}),A(a);var u=e(a,2),f=x(u),p=e=>{var t=sn();$(h(t),{}),D(),P(e,t)},m=e=>{P(e,o(`Clear it`))};F(f,e=>{n(me)?e(p):e(m,-1)}),A(u),A(i),s(()=>{u.disabled=n(me),k(u,`aria-busy`,n(me))}),d(`click`,u,ve),P(r,i)},Ye=e=>{P(e,ln())};F(qe,e=>{n(pe)?.present&&n(pe).stale?e(Je):n(ge)&&e(Ye,1)});var Xe=e(qe,2),Ze=x(Xe);let $e;var et=x(Ze),tt=x(et),it=e=>{var r=un(),i=h(r),a=x(i);A(i),D(2),s((e,n)=>t(a,`Your services are on ${e??``} — update to ${n??``}`),[()=>Xt(n(I))||`—`,()=>Xt(p())||`the latest version`]),P(e,r)},at=n=>{var r=dn(),i=e(h(r),2),a=x(i);A(i),s(e=>t(a,`Every service matches OpenPalm ${e??``}.
|
|
11
11
|
An update backs up your settings first, then briefly restarts your assistant.`),[()=>Xt(p())||`the current version`]),P(n,r)};F(tt,e=>{n(R)?e(it):e(at,-1)});var st=e(tt,2),ct=t=>{var n=pn(),r=e(x(n),3),i=e=>{var t=fn(),n=h(t);D(),s(()=>k(n,`href`,c.electronLatestUrl)),P(e,t)},a=e=>{P(e,o(`Download the latest release to update.`))};F(r,e=>{c.inElectron&&c.electronLatestUrl?e(i):e(a,-1)}),A(n),P(t,n)};F(st,e=>{u()&&e(ct)}),A(et);var lt=e(et,2),dt=x(lt),ft=e=>{var t=mn();$(h(t),{}),D(),P(e,t)},pt=e=>{P(e,o(`Update now`))},mt=e=>{P(e,o(`Check & update`))};F(dt,e=>{c.upgradeLoading?e(ft):n(R)?e(pt,1):e(mt,-1)}),A(lt),A(Ze);var ht=e(Ze,2),gt=x(ht),_t=x(gt);D(),A(gt),A(ht);var vt=e(ht,2),yt=e(x(vt),2);a(yt,17,()=>n(M),e=>e.id,(r,i)=>{var a=vn(),l=x(a),u=x(l,!0);A(l);var f=e(l,2),m=x(f),g=x(m),_=x(g,!0);A(g);var v=e(g,2),y=e=>{var r=hn(),a=x(r,!0);A(r),s((e,n,i)=>{k(r,`aria-label`,e),k(r,`title`,n),t(a,i)},[()=>Q(n(i).status),()=>Q(n(i).status),()=>Ae(n(i).status)]),P(e,r)},b=N(()=>Ae(n(i).status));F(v,e=>{n(b)&&e(y)}),A(m);var S=e(m,2),C=e=>{var n=_n(),r=x(n),i=e=>{var t=gn();$(h(t),{}),D(),P(e,t)},a=e=>{var n=o();s(e=>t(n,`Update to ${e??``}`),[()=>Xt(p())]),P(e,n)};F(r,e=>{c.upgradeLoading?e(i):e(a,-1)}),A(n),s(()=>{n.disabled=c.anyDangerousLoading||!c.tokenStored,k(n,`aria-busy`,c.upgradeLoading)}),d(`click`,n,function(...e){c.onUpgradeStack?.apply(this,e)}),P(e,n)};F(S,e=>{n(i).status===`update`&&e(C)}),A(f),A(a),s(e=>{t(u,n(i).label),K(g,1,`version-value status-${n(i).status??``}`,`svelte-7mkeya`),t(_,e)},[()=>Xt(n(i).version)||`—`]),P(r,a)});var bt=e(yt,4),xt=e(x(bt),2),St=x(xt),Ct=x(St),wt=x(Ct,!0);A(Ct);var Tt=e(Ct,2),Et=e=>{var r=yn(),i=x(r,!0);A(r),s((e,n,a)=>{k(r,`aria-label`,e),k(r,`title`,n),t(i,a)},[()=>Q(n(V)),()=>Q(n(V)),()=>Ae(n(V))]),P(e,r)},Dt=N(()=>Ae(n(V)));F(Tt,e=>{n(Dt)&&e(Et)}),A(St);var Ot=e(St,2),kt=e=>{var r=bn(),i=x(r);A(r),s(e=>{k(r,`href`,n(te)),t(i,`Download ${e??``}`)},[()=>Xt(n(z))]),P(e,r)};F(Ot,e=>{n(V)===`update`&&e(kt)}),A(xt),A(bt);var At=e(bt,2),jt=e(x(At),2),Mt=x(jt),Nt=x(Mt),Pt=x(Nt,!0);A(Nt);var Ft=e(Nt,2),It=e=>{var r=xn(),i=x(r,!0);A(r),s((e,n,a)=>{k(r,`aria-label`,e),k(r,`title`,n),t(i,a)},[()=>Q(n(q)),()=>Q(n(q)),()=>Ae(n(q))]),P(e,r)},Lt=N(()=>Ae(n(q)));F(Ft,e=>{n(Lt)&&e(It)}),A(Mt);var Rt=e(Mt,2),zt=r=>{var i=f(),a=h(i),l=e=>{var t=Sn();$(x(t),{}),D(),A(t),P(e,t)},u=t=>{var n=wn(),r=e(x(n)),i=e=>{var t=Cn();d(`click`,t,function(...e){c.onRestartApp?.apply(this,e)}),P(e,t)},a=e=>{P(e,o(`Restart OpenPalm to apply.`))};F(r,e=>{c.inElectron?e(i):e(a,-1)}),A(n),P(t,n)},p=e=>{var r=En(),i=x(r),a=e=>{var t=Tn();$(h(t),{}),D(),P(e,t)},l=e=>{var r=o();s(e=>t(r,`Download ${e??``}`),[()=>Xt(n(ne))]),P(e,r)};F(i,e=>{c.uiDownloadLoading?e(a):e(l,-1)}),A(r),s(()=>{r.disabled=c.uiDownloadLoading||!n(ne),k(r,`aria-busy`,c.uiDownloadLoading)}),d(`click`,r,()=>{n(ne)&&c.onDownloadUiVersion(n(ne))}),P(e,r)};F(a,e=>{c.uiDownloadRestarting?e(l):c.uiDownloadReady?e(u,1):e(p,-1)}),P(r,i)};F(Rt,e=>{n(q)===`update`&&e(zt)}),A(jt),A(At),A(vt);var Bt=e(vt,2),Vt=x(Bt),Ht=e(x(Vt),2),Ut=e=>{var t=Dn();s(()=>t.disabled=n(de)||n(ce)),d(`click`,t,Ce),P(e,t)};F(Ht,e=>{n(se)&&n(se).count>0&&e(Ut)}),A(Vt);var Wt=e(Vt,4),Gt=e=>{var t=On();$(x(t),{}),D(),A(t),P(e,t)},Kt=e=>{var r=kn(),i=x(r);A(r),s(()=>t(i,`Couldn't load backups: ${n(le)??``}`)),P(e,r)},qt=e=>{P(e,An())},Yt=r=>{var i=Mn(),o=h(i),c=x(o);A(o);var l=e(o,2);a(l,21,()=>n(se).backups,e=>e.path,(r,i)=>{var a=jn(),o=x(a),c=x(o,!0);A(o);var l=e(o,2),u=x(l);A(l),A(a),s((e,r)=>{k(o,`title`,n(i).path),t(c,n(i).name),t(u,`${e??``} · ${r??``}`)},[()=>Ee(n(i).sizeBytes),()=>De(n(i).createdAt)]),P(r,a)}),A(l),s((e,r)=>t(c,`${n(se).count??``} ${n(se).count===1?`backup`:`backups`} ·
|
|
@@ -131,4 +131,4 @@ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\
|
|
|
131
131
|
personal AKM stash on this machine (<code>~/akm</code>). Each side keeps its own
|
|
132
132
|
primary stash, database, and cache — only the knowledge files are shared, as a
|
|
133
133
|
writable secondary source. Your files' ownership and primary stash are never changed.</p> <p class="hs-restart svelte-fv9i73">⚠ Changes take effect after the next stack restart.</p> <!></section>`),Ff=p(`<div class="panel" role="tabpanel"><div class="panel-header svelte-fv9i73"><h2 class="svelte-fv9i73">Host knowledge sharing</h2></div> <div class="panel-body"><!></div></div>`);function If(r,i){T(i,!0);let a=B(null),o=B(!0),c=B(!1),l=B(!0);async function u(){W(o,!0);try{W(a,await et(),!0)}catch{W(a,null)}finally{W(o,!1)}}async function f(){if(!n(c)){W(c,!0);try{if(n(a)?.sharing.enabled)W(a,await Y(),!0),Q.push(`success`,`Host AKM sharing disabled. Restart the stack to apply.`);else{let e=await Z({writable:!0,importProfiles:n(l)});W(a,e,!0);let t=e.profilesImported?.length?` Imported: ${e.profilesImported.join(`, `)}.`:``;Q.push(`success`,`Host AKM sharing enabled.${t} Takes effect on the assistant's next AKM run / stack restart.`)}}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to update host AKM sharing.`)}finally{W(c,!1)}}}async function p(){if(!n(c)){W(c,!0);try{let e=await Z({writable:!0,importProfiles:!0});W(a,e,!0);let t=e.profilesImported?.length?e.profilesImported.join(`, `):`none`;Q.push(`success`,`Re-imported host profiles: ${t}.`)}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to re-import host profiles.`)}finally{W(c,!1)}}}ee(()=>{i.tokenStored&&u()});var m=Ff(),h=e(x(m),2),g=x(h),_=e=>{var t=Df();$(x(t),{}),D(),A(t),P(e,t)},v=e=>{P(e,Of())},y=r=>{var o=Pf(),u=e(x(o),4),m=e=>{P(e,kf())},h=r=>{var o=Nf(),u=x(o),m=e(x(u),2),h=x(m),g=x(h,!0);A(h);var _=e(h,2),v=e=>{var r=Af(),i=x(r,!0);A(r),s(()=>t(i,n(a).sharing.hostStashPath)),P(e,r)};F(_,e=>{n(a).sharing.hostStashPath&&e(v)}),A(m),A(u);var y=e(u,2),b=e=>{var t=jf(),r=x(t),i=x(r);E(i),D(),A(r),A(t),s(()=>i.disabled=n(c)),w(i,()=>n(l),e=>W(l,e)),P(e,t)};F(y,e=>{n(a).sharing.enabled||e(b)});var S=e(y,2),C=x(S),T=x(C),O=e=>{$(e,{})};F(T,e=>{n(c)&&e(O)});var k=e(T);A(C);var j=e(C,2),M=e=>{var t=Mf();s(()=>t.disabled=n(c)||!i.tokenStored),d(`click`,t,()=>void p()),P(e,t)};F(j,e=>{n(a).sharing.enabled&&e(M)}),A(S),A(o),s(()=>{K(h,1,`badge ${n(a).sharing.enabled?`badge-enabled`:`badge-disabled`}`),t(g,n(a).sharing.enabled?`Enabled`:`Disabled`),C.disabled=n(c)||!i.tokenStored,t(k,` ${n(a).sharing.enabled?`Disable host sharing`:`Enable host sharing`}`)}),d(`click`,C,()=>void f()),P(r,o)};F(u,e=>{n(a).sharing.available?e(h,-1):e(m)}),A(o),P(r,o)};F(g,e=>{n(o)?e(_):n(a)===null?e(v,1):e(y,-1)}),A(h),A(m),P(r,m),U()}c([`click`]);var Lf=p(`<span class="engine-subtitle svelte-1e5u5jo"> </span>`),Rf=p(`<span> </span>`),zf=p(`<span class="badge badge-recommended">Recommended</span>`),Bf=p(`<option> </option>`),Vf=p(`<select class="form-input"><option>— default —</option><!></select>`),Hf=p(`<input class="form-input" autocomplete="off"/>`),Uf=p(`<span class="field-hint svelte-1e5u5jo"> </span>`),Wf=p(`<div class="form-field"><label class="form-label"> </label> <!> <!></div>`),Gf=p(`<div class="engine-config svelte-1e5u5jo"></div>`),Kf=p(`<button type="button" role="radio"><div class="engine-body svelte-1e5u5jo"><span class="engine-name svelte-1e5u5jo"> </span> <span class="engine-desc svelte-1e5u5jo"> </span> <!> <!></div> <!></button> <!>`,1),qf=p(`<div class="engine-list svelte-1e5u5jo" role="radiogroup"></div>`);function Jf(r,i){T(i,!0);let o=N(()=>i.engineOptions??(i.kind===`tts`?_t:mt)),c=N(()=>i.engineConfigs??(i.kind===`tts`?gt:ht)),l=N(()=>i.hiddenEngines?n(o).filter(e=>!i.hiddenEngines.has(e.id)):n(o));function u(e){if(i.disabledEngines?.[e]?.disabled)return;let t=n(c)[e],r=new Set(t?.fields.map(e=>e.key)),a={engine:e,provider:t?.provider,...r.has(`baseURL`)&&i.value.baseURL?{baseURL:i.value.baseURL}:{},...r.has(`model`)&&i.value.model?{model:i.value.model}:{},...r.has(`voice`)&&i.value.voice?{voice:i.value.voice}:{},...r.has(`language`)&&i.value.language?{language:i.value.language}:{},...r.has(`apiKey`)&&i.value.apiKey?{apiKey:i.value.apiKey}:{}};i.onchange(a)}function f(e,t){let n={...i.value};t?n[e]=t:delete n[e],i.onchange(n)}var p=qf();a(p,21,()=>n(l),e=>e.id,(r,o)=>{let l=N(()=>i.value.engine===n(o).id),p=N(()=>n(c)[n(o).id]),m=N(()=>i.disabledEngines?.[n(o).id]),g=N(()=>n(m)?.disabled??!1);var _=Kf(),v=h(_);let y;var b=x(v),C=x(b),w=x(C,!0);A(C);var T=e(C,2),D=x(T,!0);A(T);var O=e(T,2),M=e=>{var r=Lf(),i=x(r,!0);A(r),s(()=>t(i,n(m).reason)),P(e,r)};F(O,e=>{n(g)&&n(m)?.reason&&e(M)});var I=e(O,2),R=e=>{var n=Rf();let r;var a=x(n,!0);A(n),s(()=>{r=K(n,1,`engine-reachability svelte-1e5u5jo`,null,r,{"engine-reachability--ok":i.reachable.remoteReachable}),t(a,i.reachable.remoteReachable?`● Endpoint reachable`:`○ Endpoint not reachable`)}),P(e,n)};F(I,e=>{n(o).id===(i.reachabilityEngineId??(i.kind===`tts`?`openai-tts`:`openai-stt`))&&i.reachable?.remoteConfigured&&e(R)}),A(b);var z=e(b,2),B=e=>{P(e,zf())};F(z,e=>{n(o).recommended&&e(B)}),A(v);var V=e(v,2),H=r=>{var o=Gf();a(o,21,()=>n(p).fields,e=>e.key,(r,o)=>{var c=Wf(),l=x(c),u=x(l,!0);A(l);var p=e(l,2),m=r=>{var c=Vf(),l=x(c);l.value=l.__value=``,a(e(l),16,()=>n(o).options,e=>e,(e,n)=>{var r=Bf(),i=x(r,!0);A(r);var a={};s(()=>{t(i,n),a!==(a=n)&&(r.value=(r.__value=n)??``)}),P(e,r)}),A(c);var u;j(c),s(()=>{k(c,`id`,`voice-${i.kind??``}-${n(o).key??``}`),u!==(u=i.value[n(o).key]??``)&&(c.value=(c.__value=i.value[n(o).key]??``)??``,S(c,i.value[n(o).key]??``))}),d(`change`,c,e=>f(n(o).key,e.currentTarget.value)),P(r,c)},h=e=>{var t=Hf();E(t),s(()=>{k(t,`id`,`voice-${i.kind??``}-${n(o).key??``}`),k(t,`type`,n(o).key===`baseURL`?`url`:n(o).key===`apiKey`?`password`:`text`),L(t,i.value[n(o).key]??``),k(t,`placeholder`,n(o).placeholder??``),k(t,`spellcheck`,n(o).key===`baseURL`?!1:void 0)}),d(`input`,t,e=>f(n(o).key,e.currentTarget.value)),P(e,t)};F(p,e=>{n(o).options?e(m):e(h,-1)});var g=e(p,2),_=e=>{var r=Uf(),i=x(r,!0);A(r),s(()=>t(i,n(o).hint)),P(e,r)};F(g,e=>{n(o).hint&&e(_)}),A(c),s(()=>{k(l,`for`,`voice-${i.kind??``}-${n(o).key??``}`),t(u,n(o).label)}),P(r,c)}),A(o),P(r,o)};F(V,e=>{n(l)&&n(p)&&n(p).fields.length>0&&e(H)}),s(()=>{y=K(v,1,`engine-card svelte-1e5u5jo`,null,y,{"engine-card--selected":n(l),"engine-card--disabled":n(g)}),k(v,`aria-checked`,n(l)),v.disabled=n(g),t(w,n(o).name),t(D,n(o).desc)}),d(`click`,v,()=>u(n(o).id)),P(r,_)}),A(p),s(()=>k(p,`aria-label`,`${i.kind===`tts`?`Text-to-speech`:`Speech-to-text`} engine`)),P(r,p),U()}c([`click`,`change`,`input`]);var Yf=p(`<span class="test-result test-result--ok svelte-1b9l1t7" aria-live="polite"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Working</span>`),Xf=p(`<span class="test-result test-result--err svelte-1b9l1t7" aria-live="polite"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg> </span>`),Zf=p(`<div class="tts-extras svelte-1b9l1t7"><div class="test-voice-row svelte-1b9l1t7"><button type="button" class="btn btn-secondary btn-sm"><!> Test voice</button> <!></div> <label class="auto-speak-toggle svelte-1b9l1t7"><input type="checkbox" class="svelte-1b9l1t7"/> <span>Speak assistant replies aloud automatically</span></label></div>`),Qf=p(`<section class="engine-section svelte-1b9l1t7"><h3 class="engine-heading svelte-1b9l1t7">Text-to-Speech</h3> <p class="engine-subheading svelte-1b9l1t7">How your assistant speaks</p> <!> <!></section>`);function $f(n,r){T(r,!0);var i=Qf(),a=e(x(i),4);Jf(a,{kind:`tts`,get value(){return r.value},get onchange(){return r.onchange},get engineOptions(){return r.engineOptions},get engineConfigs(){return r.engineConfigs},get reachable(){return r.reachable},reachabilityEngineId:`remote`,get hiddenEngines(){return r.hiddenEngines}});var o=e(a,2),c=n=>{var i=Zf(),a=x(i),o=x(a),c=x(o),l=e=>{$(e,{size:12})};F(c,e=>{r.testingVoice&&e(l)}),D(),A(o);var u=e(o,2),f=e=>{P(e,Yf())},p=n=>{var i=Xf(),a=e(x(i));A(i),s(()=>t(a,` ${(r.testError||`Failed`)??``}`)),P(n,i)};F(u,e=>{r.testResult===`success`?e(f):r.testResult===`error`&&e(p,1)}),A(a);var m=e(a,2),h=x(m);E(h),D(2),A(m),A(i),s(()=>{o.disabled=r.testingVoice||r.busy,H(h,r.ttsAutoEnabled)}),d(`click`,o,()=>r.onTest()),d(`change`,h,e=>r.onAutoEnabledChange(e.currentTarget.checked)),P(n,i)};F(o,e=>{r.engineSelected&&e(c)}),A(i),P(n,i),U()}c([`click`,`change`]);var ep=p(`<section class="engine-section svelte-1qwlk8j"><h3 class="engine-heading svelte-1qwlk8j">Speech-to-Text</h3> <p class="engine-subheading svelte-1qwlk8j">How your assistant listens</p> <!></section>`);function tp(t,n){var r=ep();Jf(e(x(r),4),{kind:`stt`,get value(){return n.value},get onchange(){return n.onchange},get engineOptions(){return n.engineOptions},get engineConfigs(){return n.engineConfigs},get reachable(){return n.reachable},reachabilityEngineId:`remote`,get disabledEngines(){return n.disabledEngines},get hiddenEngines(){return n.hiddenEngines}}),A(r),P(t,r)}var np=p(`<p class="profile-single svelte-11ub9pr"> </p>`),rp=p(`<p class="profile-desc svelte-11ub9pr">Select the profile that matches your hardware. GPU profiles are auto-selected when available.</p>`),ip=p(`<option> </option>`),ap=p(`<span class="field-hint svelte-11ub9pr"> </span>`),op=p(`<span class="field-hint field-hint--warning svelte-11ub9pr"> </span>`),sp=p(`<!> <div class="form-field"><label class="form-label" for="voice-profile">Profile</label> <select id="voice-profile" class="form-input"></select> <!> <!></div>`,1);function cp(r,i){T(i,!0);let o=C(i,`showDescription`,7),c=N(()=>i.profiles.find(e=>e.id===i.selectedProfile)??i.profiles[0]);o(o()??!0);var l=f(),u=h(l),p=e=>{},m=e=>{var r=np(),i=x(r);A(r),s(()=>t(i,`Using ${n(c)?.label??n(c)?.id??`selected`??``}.`)),P(e,r)},g=r=>{var l=sp(),u=h(l),f=e=>{P(e,rp())};F(u,e=>{o()&&e(f)});var p=e(u,2),m=e(x(p),2);a(m,21,()=>i.profiles,e=>e.id,(e,r)=>{var i=ip(),a=x(i);A(i);var o={};s(()=>{i.disabled=n(r).available===!1,k(i,`title`,n(r).available===!1?n(r).reason??`Not available on this host`:void 0),t(a,`${n(r).label??n(r).id??``}${n(r).available===!1?` — unavailable`:``}`),o!==(o=n(r).id)&&(i.value=(i.__value=n(r).id)??``)}),P(e,i)}),A(m);var g;j(m);var _=e(m,2),v=e=>{var r=ap(),i=x(r);A(r),s(()=>t(i,`Requires: ${n(c).requires??``}`)),P(e,r)};F(_,e=>{n(c)?.requires&&e(v)});var y=e(_,2),b=e=>{var r=op(),i=x(r,!0);A(r),s(()=>t(i,n(c).reason??`This profile is not available on the current host.`)),P(e,r)};F(y,e=>{n(c)?.available===!1&&e(b)}),A(p),s(()=>{g!==(g=i.selectedProfile)&&(m.value=(m.__value=i.selectedProfile)??``,S(m,i.selectedProfile))}),d(`change`,m,e=>i.onchange(e.currentTarget.value)),P(r,l)};F(u,e=>{i.profiles.length===0?e(p):i.profiles.length===1?e(m,1):e(g,-1)}),P(r,l),U()}c([`change`]);var lp=p(`<section class="engine-section svelte-1r7l91t"><h3 class="engine-heading svelte-1r7l91t">Hardware profile</h3> <!></section>`);function up(t,n){var r=lp();cp(e(x(r),2),{get profiles(){return n.profiles},get selectedProfile(){return n.selectedProfile},get onchange(){return n.onchange}}),A(r),P(t,r)}var dp=p(`<div class="error-banner svelte-nokcxu"><span> </span></div>`),fp=p(`<div class="panel" role="tabpanel"><div class="panel-header svelte-nokcxu"><h2 class="svelte-nokcxu">Voice</h2> <div class="panel-header-actions svelte-nokcxu"><button class="btn btn-secondary btn-sm"><!> Refresh</button> <button class="btn btn-primary btn-sm"><!> Save</button></div></div> <!> <div class="panel-body svelte-nokcxu"><p class="section-desc svelte-nokcxu">Configure how the assistant listens and speaks. Choose an engine for each;
|
|
134
|
-
the in-app mic uses STT and the optional auto-speak toggle uses TTS.</p> <!> <!> <!></div></div>`);function pp(r,i){T(i,!0);let a=[{id:`openpalm-voice`,name:`OpenPalm Voice`,type:`local`,recommended:!0,desc:`Local Kokoro TTS + Whisper STT bundled together.`},{id:`remote`,name:`Remote (OpenAI-compatible)`,type:`cloud`,desc:`Point at any /v1/audio/speech endpoint (OpenAI, Kokoro, Piper, …).`},{id:`browser`,name:`Browser`,type:`builtin`,desc:`Web Speech API on this device. No setup, voice quality varies.`}],o=[{id:`openpalm-voice`,name:`OpenPalm Voice`,type:`local`,recommended:!0,desc:`Local Kokoro TTS + Whisper STT bundled together.`},{id:`remote`,name:`Remote (OpenAI-compatible)`,type:`cloud`,desc:`Point at any /v1/audio/transcriptions endpoint (Whisper, …).`},{id:`browser`,name:`Browser`,type:`builtin`,desc:`Web Speech API on this device. Chrome/Edge only on desktop.`}],c={"openpalm-voice":{id:`openpalm-voice`,fields:[]},remote:{id:`remote`,fields:[{key:`baseURL`,label:`Endpoint URL`,placeholder:`http://host.docker.internal:8880/v1`,hint:`OpenAI-compatible /v1/audio/speech endpoint.`},{key:`model`,label:`Model`,placeholder:`tts-1`},{key:`voice`,label:`Voice`,placeholder:`alloy`}]},browser:{id:`browser`,fields:[]}},l={"openpalm-voice":{id:`openpalm-voice`,fields:[]},remote:{id:`remote`,fields:[{key:`baseURL`,label:`Endpoint URL`,placeholder:`http://host.docker.internal:9000/v1`,hint:`OpenAI-compatible /v1/audio/transcriptions endpoint.`},{key:`model`,label:`Model`,placeholder:`whisper-1`},{key:`language`,label:`Language`,placeholder:`en`,hint:"A code like `en` or `fr`, or leave blank to detect."}]},browser:{id:`browser`,fields:[{key:`language`,label:`Language`,placeholder:`en-US`}]}},u=()=>({engine:``,baseURL:``,model:``,voice:``,language:``}),f=B(!1),p=B(!1),m=B(``),h=B(O(u())),g=B(O(u())),_=B(O({stt:{remoteConfigured:!1,remoteReachable:!1},tts:{remoteConfigured:!1,remoteReachable:!1}})),v=B(O([])),y=B(``),b=N(()=>n(h).engine===`openpalm-voice`||n(g).engine===`openpalm-voice`),S=B(!1),C=B(!1),w=B(!1),E=B(null),k=B(``);function j(e){return{engine:e.engine,...e.baseURL?{baseURL:e.baseURL}:{},...e.model?{model:e.model}:{},...e.voice?{voice:e.voice}:{},...e.language?{language:e.language}:{}}}function M(e){n(h).engine=e.engine||``,n(h).baseURL=e.baseURL??``,n(h).model=e.model??``,n(h).voice=e.voice??``}function I(e){n(g).engine=e.engine||``,n(g).baseURL=e.baseURL??``,n(g).model=e.model??``,n(g).language=e.language??``}let L=N(()=>{let e={};return n(S)&&Ye.browserSttUnsupportedReason&&(e.browser={disabled:!0,reason:Ye.browserSttUnsupportedReason}),e}),R=N(()=>n(C)?void 0:new Set([`browser`])),z=N(()=>n(S)?void 0:new Set([`browser`]));function V(e,t){return typeof e==`string`?e===`openpalm-voice`?`openpalm-voice`:e===`browser`||e===(t===`tts`?`browser-tts`:`browser-stt`)?`browser`:!e||e.startsWith(`skip-`)?``:`remote`:``}function H(e,t){let n=u();return!e||typeof e!=`object`?n:(n.engine=V(e.engine,t),typeof e.baseURL==`string`&&(n.baseURL=e.baseURL),typeof e.model==`string`&&(n.model=e.model),t===`tts`&&typeof e.voice==`string`&&(n.voice=e.voice),t===`stt`&&typeof e.language==`string`&&(n.language=e.language),n)}async function te(){W(f,!0),W(m,``);try{let e=await we();W(h,H(e.tts,`tts`),!0),W(g,H(e.stt,`stt`),!0);let t=e.availability;if(t&&W(_,t,!0),e.addon){W(v,e.addon.profiles??[],!0);let t=e=>!!e&&e.available!==!1,r=e.addon.selectedProfile??``,i=n(v).find(e=>e.id===r);if(t(i))W(y,r,!0);else{let e=n(v).find(e=>e.id===`addon.voice.cpu`&&t(e))??n(v).find(e=>e.default&&t(e))??n(v).find(e=>t(e));W(y,e?.id??``,!0),i&&e&&r!==e.id&&Q.push(`info`,`"${i.label??r}" profile isn't available on this host${i.reason?` (${i.reason})`:``}. Using "${e.label??e.id}" instead.`)}}}catch(e){W(m,e instanceof Error?e.message:`Failed to load voice settings.`,!0)}finally{W(f,!1)}}function G(e,t){if(!e.engine)return;let n={enabled:!0,engine:e.engine};return e.engine===`remote`?(e.baseURL&&(n.baseURL=e.baseURL),e.model&&(n.model=e.model),t===`tts`&&e.voice&&(n.voice=e.voice),t===`stt`&&e.language&&(n.language=e.language)):e.engine===`browser`&&t===`stt`&&e.language&&(n.language=e.language),n}async function ne(){W(p,!0),W(m,``);let e=n(h).engine===`openpalm-voice`||n(g).engine===`openpalm-voice`,t=null,r=null;e&&(t=Q.push(`info`,`Enabling voice addon…`,{sticky:!0}),r=setTimeout(()=>{t&&Q.push(`info`,`Starting voice addon — this may take a moment…`,{sticky:!0,replaceId:t})},1500));try{let i=await Pe({tts:G(n(h),`tts`),stt:G(n(g),`stt`),...n(b)&&n(y)?{profile:n(y)}:{}});if(r&&=(clearTimeout(r),null),e&&t){let e=i.voiceAddon;i.status===202&&e?(Q.push(`info`,e.message??`Voice image is downloading — this can take several minutes.`,{sticky:!0,replaceId:t}),K(t),t=null):i.ok&&e?Q.push(`success`,e.wasAlreadyEnabled?`Voice addon ready — let's chat!`:`Voice addon started, let's chat!`,{replaceId:t}):e?Q.push(`error`,e.error??`Voice addon failed to start.`,{replaceId:t}):Q.push(`success`,`Voice settings saved.`,{replaceId:t})}e||Q.push(`success`,`Voice settings saved.`),await te()}catch(n){r&&=(clearTimeout(r),null);let i=n instanceof Error?n.message:`Failed to save voice settings.`;W(m,i,!0),t?Q.push(`error`,i,{replaceId:t}):e&&Q.push(`error`,i)}finally{W(p,!1)}}async function K(e){let t=Date.now()+30*6e4,n=`pulling`;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,3e3));try{let t=(await we()).addon?.activeJob;if(!t){Q.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await te();return}if(t.state===`healthy`){Q.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await te();return}if(t.state===`error`){Q.push(`error`,t.error??`Voice addon failed to start.`,{replaceId:e}),await te();return}if(t.state!==n){n=t.state;let r=t.state===`starting`?`Voice container started — warming up models…`:`Voice image still downloading…`;Q.push(`info`,r,{sticky:!0,replaceId:e})}}catch{}}Q.push(`error`,`Voice addon is taking longer than 30 minutes. Check Docker logs for openpalm-voice.`,{replaceId:e}),await te()}async function q(){if(!n(w)){W(w,!0),W(E,null),W(k,``);try{Ye.errorMessage=``,await Ue(`Hello! Your voice is working.`),Ye.errorMessage?(W(E,`error`),W(k,Ye.errorMessage,!0)):W(E,`success`)}catch(e){W(E,`error`),W(k,e instanceof Error?e.message:`Voice test failed.`,!0)}finally{W(w,!1),setTimeout(()=>{W(E,null),W(k,``)},5e3)}}}ee(()=>{W(S,`SpeechRecognition`in window||`webkitSpeechRecognition`in window,!0),W(C,`speechSynthesis`in window),i.tokenStored&&te()});var re=fp(),J=x(re),ie=e(x(J),2),ae=x(ie),Y=x(ae),X=e=>{$(e,{size:12})};F(Y,e=>{n(f)&&e(X)}),D(),A(ae);var Z=e(ae,2),oe=x(Z),se=e=>{$(e,{size:12})};F(oe,e=>{n(p)&&e(se)}),D(),A(Z),A(ie),A(J);var ce=e(J,2),le=e=>{var r=dp(),i=x(r),a=x(i,!0);A(i),A(r),s(()=>t(a,n(m))),P(e,r)};F(ce,e=>{n(m)&&e(le)});var ue=e(ce,2),de=e(x(ue),2);{let e=N(()=>j(n(h))),t=N(()=>!!n(h).engine),r=N(()=>n(p)||n(f));$f(de,{get value(){return n(e)},onchange:M,get engineOptions(){return a},get engineConfigs(){return c},get reachable(){return n(_).tts},get hiddenEngines(){return n(R)},get engineSelected(){return n(t)},get ttsAutoEnabled(){return Ye.ttsAutoEnabled},onAutoEnabledChange:e=>De(e),get testingVoice(){return n(w)},get testResult(){return n(E)},get testError(){return n(k)},onTest:()=>void q(),get busy(){return n(r)}})}var fe=e(de,2);{let e=N(()=>j(n(g)));tp(fe,{get value(){return n(e)},onchange:I,get engineOptions(){return o},get engineConfigs(){return l},get reachable(){return n(_).stt},get disabledEngines(){return n(L)},get hiddenEngines(){return n(z)}})}var pe=e(fe,2),me=e=>{up(e,{get profiles(){return n(v)},get selectedProfile(){return n(y)},onchange:e=>W(y,e,!0)})};F(pe,e=>{n(b)&&n(v).length>0&&e(me)}),A(ue),A(re),s(()=>{ae.disabled=n(f)||n(p)||!i.tokenStored,Z.disabled=n(f)||n(p)||!i.tokenStored}),d(`click`,ae,()=>void te()),d(`click`,Z,()=>void ne()),P(r,re),U()}c([`click`]);var mp=p(`<div class="update-banner svelte-1jef3w8" role="status"><span class="update-banner-text svelte-1jef3w8"> </span> <button class="update-banner-action svelte-1jef3w8">Review it</button></div>`),hp=p(`<!> <!> <!> <main class="svelte-1jef3w8"><!> <!></main>`,1);function gp(r,i){T(i,!0);let a=B(null),o=B(null),c=B(!1),l=B(!1),u=B(!1),f=B(!1),p=B(!1),m=B(``),g=B(`info`),_=B(null),b=B(``),S=B(null),C=B(null),w=B(``),E=B(null),D=B(`overview`),k=B(!1),j=B(``),M=B(O([])),I=B(!1),L=B(null),R=B(null),V=B(null),H=B(!1),te=B(!1),G=B(!1),K=B(null),q=B(null),ie=B(!1),ae=B(!1),Y=B(!1),X=B(`latest`),Z=B(``),oe=B(O([])),se=B(!1),ce=B(``),de=B(O([])),fe=B(!1),pe=N(()=>Jt(n(ce))&&n(M).some(e=>Jt(e.version)&&Qt(e.version,n(ce))<0)),me=null;function ve(){be(),me=setInterval(()=>{n(_)&&De()},1e4)}function be(){me!==null&&(clearInterval(me),me=null)}z(()=>{be()});let Se=N(()=>n(l)||n(u)),Ce=N(()=>{if(!n(_))return new Map;let e=new Map;if(n(_).containers)for(let[t,r]of Object.entries(n(_).containers))e.set(t,r);if(n(_).dockerContainers)for(let t of n(_).dockerContainers)e.set(t.Service,t.State);return e}),we=N(()=>{if(!n(_))return[];let e=new Map;if(n(_).containers)for(let[t,r]of Object.entries(n(_).containers))e.set(t,{id:t,service:t,state:r,docker:null});if(n(_).dockerContainers)for(let t of n(_).dockerContainers){let n=e.get(t.Service);n?(n.state=t.State,n.docker=t,n.id=t.ID):e.set(t.Service,{id:t.ID,service:t.Service||t.Name,state:t.State,docker:t})}return[...e.values()].sort((e,t)=>e.state===`running`&&t.state!==`running`?-1:e.state!==`running`&&t.state===`running`?1:e.service.localeCompare(t.service))});function Te(){J(`/login?redirectTo=%2Fadmin`)}async function Ee(){W(c,!0);try{let e=await _e();W(a,e.admin,!0),W(o,e.guardian,!0)}catch(e){console.warn(`[page] Health check failed:`,e),W(a,{status:`error`,service:`admin`},!0),W(o,{status:`error`,service:`guardian`},!0)}W(c,!1)}async function De(){W(f,!0),W(b,``);try{W(_,await le(),!0)}catch(e){W(_,null);let t=e;t.status===401?(W(b,`Invalid password.`),Te()):W(b,`Failed to load containers: ${t.message??e}`)}W(f,!1),n(_)&&W(S,dt(Date.now()),!0)}async function Oe(){W(p,!0),W(w,``);try{W(C,await he(),!0)}catch(e){W(C,null);let t=e;t.status===401?(W(w,`Invalid password.`),Te()):W(w,`Failed to load automations: ${t.message??e}`)}W(p,!1)}async function Ae(){try{let e=await ue();W(j,e.imageTag,!0),W(M,e.services,!0),W(I,e.inElectron,!0),W(L,e.electronVersion,!0),W(R,e.electronLatestVersion,!0),W(V,e.electronLatestUrl,!0),W(H,e.harnessUpdateAvailable,!0),W(ce,e.platformVersion,!0)}catch{}}async function Q(){W(se,!0),W(fe,!0);try{let[e,t]=await Promise.all([xe(),Ke()]);if(W(oe,e.releases,!0),e.platformVersion&&W(ce,e.platformVersion,!0),W(de,t.versions,!0),!n(Z)){let e=t.versions.find(e=>e.distTag===`next`||e.distTag===`latest`)??t.versions[0];e&&W(Z,e.version,!0)}}catch{}W(se,!1),W(fe,!1)}async function je(){if(!n(Se)){W(l,!0);try{let e=await Ge();if(e.overallSuccess)W(m,e.restarted.length>0?`Changes applied successfully. Restarted: ${e.restarted.join(`, `)}.`:`Changes applied successfully.`,!0),W(g,`success`);else if(e.failed.length>0){let t=e.failed.map(e=>`${e.service}: ${e.reason}`).join(`; `),n=e.restarted.length>0?` (other services restarted: ${e.restarted.join(`, `)})`:``;W(m,`Apply failed for ${e.failed.length} service(s): ${t}${n}`),W(g,`error`)}else e.dockerAvailable?(W(m,`Apply failed: ${e.error??`unknown error`}`),W(g,`error`)):(W(m,`Config written, but Docker is unavailable — services were not restarted.`),W(g,`error`))}catch(e){let t=e;t.status===401?Te():(W(m,`Error applying changes: ${t.message??e}`),W(g,`error`))}W(l,!1)}}async function Me(){if(!n(Se)){W(u,!0);try{let e=await ke();W(m,`Upgrade complete (image: ${e.imageTag}). ${e.assetsUpdated.length} asset(s) updated, ${e.restarted.length} service(s) restarted.`),W(g,`success`)}catch(e){let t=e;t.status===401?Te():(W(m,`Error upgrading stack: ${t.message??e}`),W(g,`error`))}W(u,!1)}}async function Pe(e,t=!1){if(!n(te)){W(te,!0);try{let n=await Le(e,{confirmDowngrade:t});W(j,n.imageTag,!0),W(X,n.imageTag,!0),W(m,`Image tag set to ${n.imageTag}. Restarted: ${n.restarted.join(`, `)||`none`}.`),W(g,`success`),W(q,null),W(K,null)}catch(t){t instanceof Ne?W(q,{tag:e,currentVersion:t.currentVersion,targetVersion:t.targetVersion,message:t.message},!0):(W(m,`Failed to apply image tag: ${t.message??t}`),W(g,`error`))}W(te,!1)}}async function Ie(e){if(!n(G)){W(G,!0),W(K,null);try{let t=await ge(e);W(K,{targetVersion:t.targetVersion,applied:t.applied,lines:t.lines,notes:t.notes},!0)}catch(e){W(m,`Failed to preview changes: ${e.message??e}`),W(g,`error`)}W(G,!1)}}function Re(){n(q)&&Pe(n(q).tag,!0)}function ze(){W(q,null)}async function Be(e){if(!n(ie)){W(ie,!0),W(ae,!1),W(Y,!1);try{let t=await ye(e);W(Z,e,!0),W(ae,!0),t.restarting&&(W(Y,!0),Ve())}catch(e){W(m,`Failed to download UI version: ${e.message??e}`),W(g,`error`)}W(ie,!1)}}async function Ve(){let e=Date.now()+3e4;for(await new Promise(e=>setTimeout(e,1500));Date.now()<e;){try{let e=await fetch(`/health`,{signal:AbortSignal.timeout(1e3)});if(e.ok||e.status===401){window.location.reload();return}}catch{}await new Promise(e=>setTimeout(e,750))}W(Y,!1)}function He(){window.openpalm?.restart?.()}async function Ue(e,t){try{await Fe(e,t),await De()}catch(e){let t=e;t.status===401?Te():W(b,`Action failed: ${t.message??e}`)}}function We(e){W(E,n(E)===e?null:e,!0)}let qe=N(()=>{if(!n(_))return[];let e=new Set;if(n(_).containers)for(let t of Object.keys(n(_).containers))e.add(t);if(n(_).dockerContainers)for(let t of n(_).dockerContainers)t.Service&&e.add(t.Service);return[...e].sort()});async function Ye(){W(k,!0);try{await Je(),await De()}catch(e){let t=e;t.status===401?Te():W(b,`Pull failed: ${t.message??e}`)}finally{W(k,!1)}}function Xe(e){W(D,e,!0),e===`containers`&&!n(_)&&De(),e===`automations`&&!n(C)&&Oe()}function Ze(){Te()}ee(()=>{ve(),Ee(),De(),Oe(),Ae(),Q()});var Qe=hp();ne(`1jef3w8`,e=>{v(()=>{y.title=`OpenPalm Console`})});var $e=h(Qe);lt($e,{});var et=e($e,2),tt=r=>{var i=mp(),a=x(i),o=x(a);A(a);var c=e(a,2);A(i),s(e=>t(o,`An update is ready${e??``}.`),[()=>n(ce)?` — OpenPalm ${Xt(n(ce))}`:``]),d(`click`,c,()=>Xe(`updates`)),P(r,i)};F(et,e=>{n(pe)&&n(D)!==`updates`&&e(tt)});var nt=e(et,2);St(nt,{get active(){return n(D)},onSelect:Xe});var rt=e(nt,2),it=x(rt),at=e=>{{let t=N(()=>n(_)?.managedServices??[]);qt(e,{get adminHealth(){return n(a)},get operationResult(){return n(m)},get operationResultType(){return n(g)},tokenStored:!0,get healthLoading(){return n(c)},get applyLoading(){return n(l)},get anyDangerousLoading(){return n(Se)},get automationsData(){return n(C)},get mergedServices(){return n(Ce)},get managedServices(){return n(t)},onCheckHealth:Ee,onApplyChanges:je,onDismissResult:()=>{W(m,``),W(g,`info`)},onNavigate:Xe})}},ot=e=>{or(e,{get currentImageTag(){return n(j)},get services(){return n(M)},get selectedImageTag(){return n(X)},get tagChangeLoading(){return n(te)},get anyDangerousLoading(){return n(Se)},tokenStored:!0,get upgradeLoading(){return n(u)},get inElectron(){return n(I)},get electronVersion(){return n(L)},get electronLatestVersion(){return n(R)},get electronLatestUrl(){return n(V)},get harnessUpdateAvailable(){return n(H)},get uiVersion(){return re},get uiVersions(){return n(de)},get uiVersionsLoading(){return n(fe)},get selectedUiTag(){return n(Z)},get uiDownloadLoading(){return n(ie)},get uiDownloadReady(){return n(ae)},get uiDownloadRestarting(){return n(Y)},get releases(){return n(oe)},get releasesLoading(){return n(se)},get platformVersion(){return n(ce)},get migratePreviewLoading(){return n(G)},get migratePreview(){return n(K)},get downgradePrompt(){return n(q)},onSetImageTag:e=>Pe(e),onPreviewMigration:Ie,onConfirmDowngrade:Re,onCancelDowngrade:ze,onSelectedImageTagChange:e=>{W(X,e,!0),W(K,null),W(q,null)},onUpgradeStack:Me,onSelectedUiTagChange:e=>{W(Z,e,!0)},onDownloadUiVersion:Be,onRestartApp:He,onRefreshReleases:Q})},st=e=>{Pr(e,{onAuthError:Ze,onNavigate:Xe})},ct=e=>{yi(e,{get containerData(){return n(_)},get serviceEntries(){return n(we)},get loading(){return n(f)},get error(){return n(b)},tokenStored:!0,get selectedContainerId(){return n(E)},onToggleContainer:We,onStart:e=>Ue(`start`,e),onStop:e=>Ue(`stop`,e),onRestart:e=>Ue(`restart`,e),onRefresh:De,onPullImages:Ye,get lastUpdated(){return n(S)},get pullLoading(){return n(k)}})},ut=e=>{sl(e,{get data(){return n(C)},get loading(){return n(p)},get error(){return n(w)},tokenStored:!0,onRefresh:Oe})},$=e=>{dd(e,{})},ft=e=>{_u(e,{})},pt=e=>{Wu(e,{tokenStored:!0})},mt=e=>{Bu(e,{tokenStored:!0})};F(it,e=>{n(D)===`overview`?e(at):n(D)===`updates`?e(ot,1):n(D)===`addons`?e(st,2):n(D)===`containers`?e(ct,3):n(D)===`automations`?e(ut,4):n(D)===`activity`?e($,5):n(D)===`connections`?e(ft,6):n(D)===`assistant`?e(pt,7):n(D)===`secrets`&&e(mt,8)});var ht=e(it,2),gt=e=>{pp(e,{tokenStored:!0})},_t=e=>{Ef(e,{tokenStored:!0})},vt=e=>{If(e,{tokenStored:!0})},yt=e=>{{let t=N(()=>n(C)?.automations.map(e=>e.name)??[]);Nu(e,{tokenStored:!0,get services(){return n(qe)},get automations(){return n(t)}})}};F(ht,e=>{n(D)===`voice`?e(gt):n(D)===`akm`?e(_t,1):n(D)===`host-sharing`?e(vt,2):n(D)===`logs`&&e(yt,3)}),A(rt),P(r,Qe),U()}c([`click`]);export{gp as component};
|
|
134
|
+
the in-app mic uses STT and the optional auto-speak toggle uses TTS.</p> <!> <!> <!></div></div>`);function pp(r,i){T(i,!0);let a=[{id:`openpalm-voice`,name:`OpenPalm Voice`,type:`local`,recommended:!0,desc:`Local Kokoro TTS + Whisper STT bundled together.`},{id:`remote`,name:`Remote (OpenAI-compatible)`,type:`cloud`,desc:`Point at any /v1/audio/speech endpoint (OpenAI, Kokoro, Piper, …).`},{id:`browser`,name:`Browser`,type:`builtin`,desc:`Web Speech API on this device. No setup, voice quality varies.`}],o=[{id:`openpalm-voice`,name:`OpenPalm Voice`,type:`local`,recommended:!0,desc:`Local Kokoro TTS + Whisper STT bundled together.`},{id:`remote`,name:`Remote (OpenAI-compatible)`,type:`cloud`,desc:`Point at any /v1/audio/transcriptions endpoint (Whisper, …).`},{id:`browser`,name:`Browser`,type:`builtin`,desc:`Web Speech API on this device. Chrome/Edge only on desktop.`}],c={"openpalm-voice":{id:`openpalm-voice`,fields:[]},remote:{id:`remote`,fields:[{key:`baseURL`,label:`Endpoint URL`,placeholder:`http://host.docker.internal:8880/v1`,hint:`OpenAI-compatible /v1/audio/speech endpoint.`},{key:`model`,label:`Model`,placeholder:`tts-1`},{key:`voice`,label:`Voice`,placeholder:`alloy`}]},browser:{id:`browser`,fields:[]}},l={"openpalm-voice":{id:`openpalm-voice`,fields:[]},remote:{id:`remote`,fields:[{key:`baseURL`,label:`Endpoint URL`,placeholder:`http://host.docker.internal:9000/v1`,hint:`OpenAI-compatible /v1/audio/transcriptions endpoint.`},{key:`model`,label:`Model`,placeholder:`whisper-1`},{key:`language`,label:`Language`,placeholder:`en`,hint:"A code like `en` or `fr`, or leave blank to detect."}]},browser:{id:`browser`,fields:[{key:`language`,label:`Language`,placeholder:`en-US`}]}},u=()=>({engine:``,baseURL:``,model:``,voice:``,language:``}),f=B(!1),p=B(!1),m=B(``),h=B(O(u())),g=B(O(u())),_=B(O({stt:{remoteConfigured:!1,remoteReachable:!1},tts:{remoteConfigured:!1,remoteReachable:!1}})),v=B(O([])),y=B(``),b=N(()=>n(h).engine===`openpalm-voice`||n(g).engine===`openpalm-voice`),S=B(!1),C=B(!1),w=B(!1),E=B(null),k=B(``);function j(e){return{engine:e.engine,...e.baseURL?{baseURL:e.baseURL}:{},...e.model?{model:e.model}:{},...e.voice?{voice:e.voice}:{},...e.language?{language:e.language}:{}}}function M(e){n(h).engine=e.engine||``,n(h).baseURL=e.baseURL??``,n(h).model=e.model??``,n(h).voice=e.voice??``}function I(e){n(g).engine=e.engine||``,n(g).baseURL=e.baseURL??``,n(g).model=e.model??``,n(g).language=e.language??``}let L=N(()=>{let e={};return n(S)&&Ye.browserSttUnsupportedReason&&(e.browser={disabled:!0,reason:Ye.browserSttUnsupportedReason}),e}),R=N(()=>n(C)?void 0:new Set([`browser`])),z=N(()=>n(S)?void 0:new Set([`browser`]));function V(e,t){return typeof e==`string`?e===`openpalm-voice`?`openpalm-voice`:e===`browser`||e===(t===`tts`?`browser-tts`:`browser-stt`)?`browser`:!e||e.startsWith(`skip-`)?``:`remote`:``}function H(e,t){let n=u();return!e||typeof e!=`object`?n:(n.engine=V(e.engine,t),typeof e.baseURL==`string`&&(n.baseURL=e.baseURL),typeof e.model==`string`&&(n.model=e.model),t===`tts`&&typeof e.voice==`string`&&(n.voice=e.voice),t===`stt`&&typeof e.language==`string`&&(n.language=e.language),n)}async function te(){W(f,!0),W(m,``);try{let e=await we();W(h,H(e.tts,`tts`),!0),W(g,H(e.stt,`stt`),!0);let t=e.availability;if(t&&W(_,t,!0),e.addon){W(v,e.addon.profiles??[],!0);let t=e=>!!e&&e.available!==!1,r=e.addon.selectedProfile??``,i=n(v).find(e=>e.id===r);if(t(i))W(y,r,!0);else{let e=n(v).find(e=>e.id===`addon.voice.cpu`&&t(e))??n(v).find(e=>e.default&&t(e))??n(v).find(e=>t(e));W(y,e?.id??``,!0),i&&e&&r!==e.id&&Q.push(`info`,`"${i.label??r}" profile isn't available on this host${i.reason?` (${i.reason})`:``}. Using "${e.label??e.id}" instead.`)}}}catch(e){W(m,e instanceof Error?e.message:`Failed to load voice settings.`,!0)}finally{W(f,!1)}}function G(e,t){if(!e.engine)return;let n={enabled:!0,engine:e.engine};return e.engine===`remote`?(e.baseURL&&(n.baseURL=e.baseURL),e.model&&(n.model=e.model),t===`tts`&&e.voice&&(n.voice=e.voice),t===`stt`&&e.language&&(n.language=e.language)):e.engine===`browser`&&t===`stt`&&e.language&&(n.language=e.language),n}async function ne(){W(p,!0),W(m,``);let e=n(h).engine===`openpalm-voice`||n(g).engine===`openpalm-voice`,t=null,r=null;e&&(t=Q.push(`info`,`Enabling voice addon…`,{sticky:!0}),r=setTimeout(()=>{t&&Q.push(`info`,`Starting voice addon — this may take a moment…`,{sticky:!0,replaceId:t})},1500));try{let i=await Pe({tts:G(n(h),`tts`),stt:G(n(g),`stt`),...n(b)&&n(y)?{profile:n(y)}:{}});if(r&&=(clearTimeout(r),null),e&&t){let e=i.voiceAddon;i.status===202&&e?(Q.push(`info`,e.message??`Voice image is downloading — this can take several minutes.`,{sticky:!0,replaceId:t}),K(t),t=null):i.ok&&e?Q.push(`success`,e.wasAlreadyEnabled?`Voice addon ready — let's chat!`:`Voice addon started, let's chat!`,{replaceId:t}):e?Q.push(`error`,e.error??`Voice addon failed to start.`,{replaceId:t}):Q.push(`success`,`Voice settings saved.`,{replaceId:t})}e||Q.push(`success`,`Voice settings saved.`),await te()}catch(n){r&&=(clearTimeout(r),null);let i=n instanceof Error?n.message:`Failed to save voice settings.`;W(m,i,!0),t?Q.push(`error`,i,{replaceId:t}):e&&Q.push(`error`,i)}finally{W(p,!1)}}async function K(e){let t=Date.now()+30*6e4,n=`pulling`;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,3e3));try{let t=(await we()).addon?.activeJob;if(!t){Q.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await te();return}if(t.state===`healthy`){Q.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await te();return}if(t.state===`error`){Q.push(`error`,t.error??`Voice addon failed to start.`,{replaceId:e}),await te();return}if(t.state!==n){n=t.state;let r=t.state===`starting`?`Voice container started — warming up models…`:`Voice image still downloading…`;Q.push(`info`,r,{sticky:!0,replaceId:e})}}catch{}}Q.push(`error`,`Voice addon is taking longer than 30 minutes. Check Docker logs for openpalm-voice.`,{replaceId:e}),await te()}async function q(){if(!n(w)){W(w,!0),W(E,null),W(k,``);try{Ye.errorMessage=``,await Ue(`Hello! Your voice is working.`),Ye.errorMessage?(W(E,`error`),W(k,Ye.errorMessage,!0)):W(E,`success`)}catch(e){W(E,`error`),W(k,e instanceof Error?e.message:`Voice test failed.`,!0)}finally{W(w,!1),setTimeout(()=>{W(E,null),W(k,``)},5e3)}}}ee(()=>{W(S,`SpeechRecognition`in window||`webkitSpeechRecognition`in window,!0),W(C,`speechSynthesis`in window),i.tokenStored&&te()});var re=fp(),J=x(re),ie=e(x(J),2),ae=x(ie),Y=x(ae),X=e=>{$(e,{size:12})};F(Y,e=>{n(f)&&e(X)}),D(),A(ae);var Z=e(ae,2),oe=x(Z),se=e=>{$(e,{size:12})};F(oe,e=>{n(p)&&e(se)}),D(),A(Z),A(ie),A(J);var ce=e(J,2),le=e=>{var r=dp(),i=x(r),a=x(i,!0);A(i),A(r),s(()=>t(a,n(m))),P(e,r)};F(ce,e=>{n(m)&&e(le)});var ue=e(ce,2),de=e(x(ue),2);{let e=N(()=>j(n(h))),t=N(()=>!!n(h).engine),r=N(()=>n(p)||n(f));$f(de,{get value(){return n(e)},onchange:M,get engineOptions(){return a},get engineConfigs(){return c},get reachable(){return n(_).tts},get hiddenEngines(){return n(R)},get engineSelected(){return n(t)},get ttsAutoEnabled(){return Ye.ttsAutoEnabled},onAutoEnabledChange:e=>De(e),get testingVoice(){return n(w)},get testResult(){return n(E)},get testError(){return n(k)},onTest:()=>void q(),get busy(){return n(r)}})}var fe=e(de,2);{let e=N(()=>j(n(g)));tp(fe,{get value(){return n(e)},onchange:I,get engineOptions(){return o},get engineConfigs(){return l},get reachable(){return n(_).stt},get disabledEngines(){return n(L)},get hiddenEngines(){return n(z)}})}var pe=e(fe,2),me=e=>{up(e,{get profiles(){return n(v)},get selectedProfile(){return n(y)},onchange:e=>W(y,e,!0)})};F(pe,e=>{n(b)&&n(v).length>0&&e(me)}),A(ue),A(re),s(()=>{ae.disabled=n(f)||n(p)||!i.tokenStored,Z.disabled=n(f)||n(p)||!i.tokenStored}),d(`click`,ae,()=>void te()),d(`click`,Z,()=>void ne()),P(r,re),U()}c([`click`]);var mp=p(`<div class="update-banner svelte-1jef3w8" role="status"><span class="update-banner-text svelte-1jef3w8"> </span> <button class="update-banner-action svelte-1jef3w8">Review it</button></div>`),hp=p(`<!> <!> <!> <main class="svelte-1jef3w8"><!> <!></main>`,1);function gp(r,i){T(i,!0);let a=B(null),o=B(null),c=B(!1),l=B(!1),u=B(!1),f=B(!1),p=B(!1),m=B(``),g=B(`info`),_=B(null),b=B(``),S=B(null),C=B(null),w=B(``),E=B(null),D=B(`overview`),k=B(!1),j=B(``),M=B(O([])),I=B(!1),L=B(null),R=B(null),V=B(null),H=B(!1),te=B(!1),G=B(!1),K=B(null),q=B(null),ie=B(!1),ae=B(!1),Y=B(!1),X=B(`latest`),Z=B(``),oe=B(O([])),se=B(!1),ce=B(``),de=B(null),fe=B(O([])),pe=B(!1),me=N(()=>n(de)!==null&&Jt(n(de))&&n(M).some(e=>Jt(e.version)&&Qt(e.version,n(de))<0)),ve=null;function be(){Se(),ve=setInterval(()=>{n(_)&&Oe()},1e4)}function Se(){ve!==null&&(clearInterval(ve),ve=null)}z(()=>{Se()});let Ce=N(()=>n(l)||n(u)),we=N(()=>{if(!n(_))return new Map;let e=new Map;if(n(_).containers)for(let[t,r]of Object.entries(n(_).containers))e.set(t,r);if(n(_).dockerContainers)for(let t of n(_).dockerContainers)e.set(t.Service,t.State);return e}),Te=N(()=>{if(!n(_))return[];let e=new Map;if(n(_).containers)for(let[t,r]of Object.entries(n(_).containers))e.set(t,{id:t,service:t,state:r,docker:null});if(n(_).dockerContainers)for(let t of n(_).dockerContainers){let n=e.get(t.Service);n?(n.state=t.State,n.docker=t,n.id=t.ID):e.set(t.Service,{id:t.ID,service:t.Service||t.Name,state:t.State,docker:t})}return[...e.values()].sort((e,t)=>e.state===`running`&&t.state!==`running`?-1:e.state!==`running`&&t.state===`running`?1:e.service.localeCompare(t.service))});function Ee(){J(`/login?redirectTo=%2Fadmin`)}async function De(){W(c,!0);try{let e=await _e();W(a,e.admin,!0),W(o,e.guardian,!0)}catch(e){console.warn(`[page] Health check failed:`,e),W(a,{status:`error`,service:`admin`},!0),W(o,{status:`error`,service:`guardian`},!0)}W(c,!1)}async function Oe(){W(f,!0),W(b,``);try{W(_,await le(),!0)}catch(e){W(_,null);let t=e;t.status===401?(W(b,`Invalid password.`),Ee()):W(b,`Failed to load containers: ${t.message??e}`)}W(f,!1),n(_)&&W(S,dt(Date.now()),!0)}async function Ae(){W(p,!0),W(w,``);try{W(C,await he(),!0)}catch(e){W(C,null);let t=e;t.status===401?(W(w,`Invalid password.`),Ee()):W(w,`Failed to load automations: ${t.message??e}`)}W(p,!1)}async function Q(){try{let e=await ue();W(j,e.imageTag,!0),W(M,e.services,!0),W(I,e.inElectron,!0),W(L,e.electronVersion,!0),W(R,e.electronLatestVersion,!0),W(V,e.electronLatestUrl,!0),W(H,e.harnessUpdateAvailable,!0),W(ce,e.platformVersion,!0),W(de,e.latestImageTag??null,!0)}catch{}}async function je(){W(se,!0),W(pe,!0);try{let[e,t]=await Promise.all([xe(),Ke()]);if(W(oe,e.releases,!0),e.platformVersion&&W(ce,e.platformVersion,!0),W(fe,t.versions,!0),!n(Z)){let e=t.versions.find(e=>e.distTag===`next`||e.distTag===`latest`)??t.versions[0];e&&W(Z,e.version,!0)}}catch{}W(se,!1),W(pe,!1)}async function Me(){if(!n(Ce)){W(l,!0);try{let e=await Ge();if(e.overallSuccess)W(m,e.restarted.length>0?`Changes applied successfully. Restarted: ${e.restarted.join(`, `)}.`:`Changes applied successfully.`,!0),W(g,`success`);else if(e.failed.length>0){let t=e.failed.map(e=>`${e.service}: ${e.reason}`).join(`; `),n=e.restarted.length>0?` (other services restarted: ${e.restarted.join(`, `)})`:``;W(m,`Apply failed for ${e.failed.length} service(s): ${t}${n}`),W(g,`error`)}else e.dockerAvailable?(W(m,`Apply failed: ${e.error??`unknown error`}`),W(g,`error`)):(W(m,`Config written, but Docker is unavailable — services were not restarted.`),W(g,`error`))}catch(e){let t=e;t.status===401?Ee():(W(m,`Error applying changes: ${t.message??e}`),W(g,`error`))}W(l,!1)}}async function Pe(){if(!n(Ce)){W(u,!0);try{let e=await ke();W(m,`Upgrade complete (image: ${e.imageTag}). ${e.assetsUpdated.length} asset(s) updated, ${e.restarted.length} service(s) restarted.`),W(g,`success`)}catch(e){let t=e;t.status===401?Ee():(W(m,`Error upgrading stack: ${t.message??e}`),W(g,`error`))}W(u,!1)}}async function Ie(e,t=!1){if(!n(te)){W(te,!0);try{let n=await Le(e,{confirmDowngrade:t});W(j,n.imageTag,!0),W(X,n.imageTag,!0),W(m,`Image tag set to ${n.imageTag}. Restarted: ${n.restarted.join(`, `)||`none`}.`),W(g,`success`),W(q,null),W(K,null)}catch(t){t instanceof Ne?W(q,{tag:e,currentVersion:t.currentVersion,targetVersion:t.targetVersion,message:t.message},!0):(W(m,`Failed to apply image tag: ${t.message??t}`),W(g,`error`))}W(te,!1)}}async function Re(e){if(!n(G)){W(G,!0),W(K,null);try{let t=await ge(e);W(K,{targetVersion:t.targetVersion,applied:t.applied,lines:t.lines,notes:t.notes},!0)}catch(e){W(m,`Failed to preview changes: ${e.message??e}`),W(g,`error`)}W(G,!1)}}function ze(){n(q)&&Ie(n(q).tag,!0)}function Be(){W(q,null)}async function Ve(e){if(!n(ie)){W(ie,!0),W(ae,!1),W(Y,!1);try{let t=await ye(e);W(Z,e,!0),W(ae,!0),t.restarting&&(W(Y,!0),He())}catch(e){W(m,`Failed to download UI version: ${e.message??e}`),W(g,`error`)}W(ie,!1)}}async function He(){let e=Date.now()+3e4;for(await new Promise(e=>setTimeout(e,1500));Date.now()<e;){try{let e=await fetch(`/health`,{signal:AbortSignal.timeout(1e3)});if(e.ok||e.status===401){window.location.reload();return}}catch{}await new Promise(e=>setTimeout(e,750))}W(Y,!1)}function Ue(){window.openpalm?.restart?.()}async function We(e,t){try{await Fe(e,t),await Oe()}catch(e){let t=e;t.status===401?Ee():W(b,`Action failed: ${t.message??e}`)}}function qe(e){W(E,n(E)===e?null:e,!0)}let Ye=N(()=>{if(!n(_))return[];let e=new Set;if(n(_).containers)for(let t of Object.keys(n(_).containers))e.add(t);if(n(_).dockerContainers)for(let t of n(_).dockerContainers)t.Service&&e.add(t.Service);return[...e].sort()});async function Xe(){W(k,!0);try{await Je(),await Oe()}catch(e){let t=e;t.status===401?Ee():W(b,`Pull failed: ${t.message??e}`)}finally{W(k,!1)}}function Ze(e){W(D,e,!0),e===`containers`&&!n(_)&&Oe(),e===`automations`&&!n(C)&&Ae()}function Qe(){Ee()}ee(()=>{be(),De(),Oe(),Ae(),Q(),je()});var $e=hp();ne(`1jef3w8`,e=>{v(()=>{y.title=`OpenPalm Console`})});var et=h($e);lt(et,{});var tt=e(et,2),nt=r=>{var i=mp(),a=x(i),o=x(a);A(a);var c=e(a,2);A(i),s(e=>t(o,`An update is ready${e??``}.`),[()=>n(ce)?` — OpenPalm ${Xt(n(ce))}`:``]),d(`click`,c,()=>Ze(`updates`)),P(r,i)};F(tt,e=>{n(me)&&n(D)!==`updates`&&e(nt)});var rt=e(tt,2);St(rt,{get active(){return n(D)},onSelect:Ze});var it=e(rt,2),at=x(it),ot=e=>{{let t=N(()=>n(_)?.managedServices??[]);qt(e,{get adminHealth(){return n(a)},get operationResult(){return n(m)},get operationResultType(){return n(g)},tokenStored:!0,get healthLoading(){return n(c)},get applyLoading(){return n(l)},get anyDangerousLoading(){return n(Ce)},get automationsData(){return n(C)},get mergedServices(){return n(we)},get managedServices(){return n(t)},onCheckHealth:De,onApplyChanges:Me,onDismissResult:()=>{W(m,``),W(g,`info`)},onNavigate:Ze})}},st=e=>{or(e,{get currentImageTag(){return n(j)},get services(){return n(M)},get selectedImageTag(){return n(X)},get tagChangeLoading(){return n(te)},get anyDangerousLoading(){return n(Ce)},tokenStored:!0,get upgradeLoading(){return n(u)},get inElectron(){return n(I)},get electronVersion(){return n(L)},get electronLatestVersion(){return n(R)},get electronLatestUrl(){return n(V)},get harnessUpdateAvailable(){return n(H)},get uiVersion(){return re},get uiVersions(){return n(fe)},get uiVersionsLoading(){return n(pe)},get selectedUiTag(){return n(Z)},get uiDownloadLoading(){return n(ie)},get uiDownloadReady(){return n(ae)},get uiDownloadRestarting(){return n(Y)},get releases(){return n(oe)},get releasesLoading(){return n(se)},get platformVersion(){return n(ce)},get migratePreviewLoading(){return n(G)},get migratePreview(){return n(K)},get downgradePrompt(){return n(q)},onSetImageTag:e=>Ie(e),onPreviewMigration:Re,onConfirmDowngrade:ze,onCancelDowngrade:Be,onSelectedImageTagChange:e=>{W(X,e,!0),W(K,null),W(q,null)},onUpgradeStack:Pe,onSelectedUiTagChange:e=>{W(Z,e,!0)},onDownloadUiVersion:Ve,onRestartApp:Ue,onRefreshReleases:je})},ct=e=>{Pr(e,{onAuthError:Qe,onNavigate:Ze})},ut=e=>{yi(e,{get containerData(){return n(_)},get serviceEntries(){return n(Te)},get loading(){return n(f)},get error(){return n(b)},tokenStored:!0,get selectedContainerId(){return n(E)},onToggleContainer:qe,onStart:e=>We(`start`,e),onStop:e=>We(`stop`,e),onRestart:e=>We(`restart`,e),onRefresh:Oe,onPullImages:Xe,get lastUpdated(){return n(S)},get pullLoading(){return n(k)}})},$=e=>{sl(e,{get data(){return n(C)},get loading(){return n(p)},get error(){return n(w)},tokenStored:!0,onRefresh:Ae})},ft=e=>{dd(e,{})},pt=e=>{_u(e,{})},mt=e=>{Wu(e,{tokenStored:!0})},ht=e=>{Bu(e,{tokenStored:!0})};F(at,e=>{n(D)===`overview`?e(ot):n(D)===`updates`?e(st,1):n(D)===`addons`?e(ct,2):n(D)===`containers`?e(ut,3):n(D)===`automations`?e($,4):n(D)===`activity`?e(ft,5):n(D)===`connections`?e(pt,6):n(D)===`assistant`?e(mt,7):n(D)===`secrets`&&e(ht,8)});var gt=e(at,2),_t=e=>{pp(e,{tokenStored:!0})},vt=e=>{Ef(e,{tokenStored:!0})},yt=e=>{If(e,{tokenStored:!0})},bt=e=>{{let t=N(()=>n(C)?.automations.map(e=>e.name)??[]);Nu(e,{tokenStored:!0,get services(){return n(Ye)},get automations(){return n(t)}})}};F(gt,e=>{n(D)===`voice`?e(_t):n(D)===`akm`?e(vt,1):n(D)===`host-sharing`?e(yt,2):n(D)===`logs`&&e(bt,3)}),A(it),P(r,$e),U()}c([`click`]);export{gp as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,E as r,G as i,I as a,L as o,N as s,Q as c,R as l,W as u,X as d,Z as f,c as p,ct as m,d as h,dt as g,f as _,ft as v,it as y,j as b,k as x,nt as S,r as C,st as w,tt as T,u as E,x as D,y as O}from"../chunks/BBI__kVO.js";import"../chunks/xihTtKlq.js";import{_ as k,y as A,yt as j}from"../chunks/CgKtEGfl.js";import{i as M,t as N}from"../chunks/
|
|
1
|
+
import{$ as e,A as t,B as n,E as r,G as i,I as a,L as o,N as s,Q as c,R as l,W as u,X as d,Z as f,c as p,ct as m,d as h,dt as g,f as _,ft as v,it as y,j as b,k as x,nt as S,r as C,st as w,tt as T,u as E,x as D,y as O}from"../chunks/BBI__kVO.js";import"../chunks/xihTtKlq.js";import{_ as k,y as A,yt as j}from"../chunks/CgKtEGfl.js";import{i as M,t as N}from"../chunks/CRSbY4Kh.js";var P=s(`<div class="alert error svelte-m7qpzt" role="alert"> </div>`),F=s(`<span class="badge default svelte-m7qpzt">Default</span>`),ee=s(`<span class="badge active svelte-m7qpzt">Active</span>`),te=s(`<span class="badge password svelte-m7qpzt" title="Server password configured">🔒</span>`),ne=s(`<button type="button" class="btn btn-primary btn-sm">Use this</button>`),re=s(`<button type="button" class="btn btn-secondary btn-sm">Edit</button> <button type="button" class="btn btn-danger btn-sm svelte-m7qpzt"> </button>`,1),ie=s(`<article><div class="endpoint-main svelte-m7qpzt"><div class="endpoint-title svelte-m7qpzt"><span class="endpoint-label svelte-m7qpzt"> </span> <!> <!> <!></div> <div class="endpoint-url svelte-m7qpzt"> </div></div> <div class="endpoint-actions svelte-m7qpzt"><!> <!></div></article>`),I=s(`<button type="button" class="btn btn-primary">+ Add endpoint</button>`),L=s(`<small class="rotate-hint svelte-m7qpzt"><strong class="svelte-m7qpzt">Rotating this password?</strong> OpenCode reads <code class="svelte-m7qpzt">OPENCODE_SERVER_PASSWORD</code> from its env at startup, so
|
|
2
2
|
rotation is a two-step process: <ol class="svelte-m7qpzt"><li>On the remote host: update <code class="svelte-m7qpzt">OP_OPENCODE_PASSWORD</code> in <code class="svelte-m7qpzt">stack.env</code> and restart the <code class="svelte-m7qpzt">assistant</code> container.</li> <li>Paste the new value here and save.</li></ol></small>`),ae=s(`<label class="field-inline svelte-m7qpzt"><input type="checkbox"/> <span>Clear stored password</span></label>`),oe=s(`<div class="alert error svelte-m7qpzt" role="alert"> </div>`),se=s(`<form class="endpoint-form svelte-m7qpzt"><h2 class="svelte-m7qpzt"> </h2> <label class="field svelte-m7qpzt"><span class="svelte-m7qpzt">Label</span> <input type="text" placeholder="e.g. Home server" required="" autocomplete="off" class="svelte-m7qpzt"/></label> <label class="field svelte-m7qpzt"><span class="svelte-m7qpzt">URL</span> <input type="url" placeholder="http://10.0.0.5:3800" required="" autocomplete="off" class="svelte-m7qpzt"/> <small class="svelte-m7qpzt">The host:port where the remote OpenPalm assistant (OpenCode) is reachable.</small></label> <label class="field svelte-m7qpzt"><span class="svelte-m7qpzt">Server password (optional)</span> <input type="password" autocomplete="new-password" class="svelte-m7qpzt"/> <small class="svelte-m7qpzt">Forwarded as HTTP Basic auth. Only required if the remote OpenCode was started with <code class="svelte-m7qpzt">OPENCODE_SERVER_PASSWORD</code>.</small> <!></label> <!> <!> <div class="form-actions svelte-m7qpzt"><button type="submit" class="btn btn-primary"> </button> <button type="button" class="btn btn-secondary">Cancel</button></div></form>`),ce=s(`<!> <main class="page svelte-m7qpzt"><header class="page-header svelte-m7qpzt"><h1 class="svelte-m7qpzt">Assistant Endpoints</h1> <p class="lede svelte-m7qpzt">Connect to local or remote OpenPalm assistants. The <strong>Default</strong> entry comes
|
|
3
3
|
from the environment (set by the launcher) and cannot be deleted. Add more endpoints to
|
|
4
4
|
switch between stacks at any time.</p></header> <!> <section class="endpoints-list svelte-m7qpzt" aria-label="Configured endpoints"></section> <!></main>`,1);function R(a,s){m(s,!0);let R=S(`idle`),z=S(null),B=S(``),V=S(``),H=S(``),U=S(!1),W=S(!1),G=S(``),K=S(null),le=y(()=>M.endpoints),q=y(()=>M.active);C(()=>{M.load(!0)});function ue(){T(R,`add`),T(z,null),T(B,``),T(V,``),T(H,``),T(U,!1),T(G,``)}function de(e){T(R,`edit`),T(z,e.id,!0),T(B,e.label,!0),T(V,e.url,!0),T(H,``),T(U,!1),T(G,``)}function fe(){T(R,`idle`),T(G,``)}async function pe(e){if(e.preventDefault(),n(W))return;let t=n(B).trim(),r=n(V).trim();if(!t||!r){T(G,`Label and URL are required.`);return}T(W,!0),T(G,``);try{if(n(R)===`add`)await k({label:t,url:r,...n(H)?{password:n(H)}:{}});else if(n(R)===`edit`&&n(z)){let e={label:t,url:r};n(U)?e.password=null:n(H)&&(e.password=n(H)),await j(n(z),e)}await M.load(!0),T(R,`idle`)}catch(e){T(G,e.message??`Save failed.`,!0)}finally{T(W,!1)}}async function me(e){try{await M.activate(e)}catch{}}async function he(e){if(!e.isDefault&&confirm(`Remove endpoint "${e.label}"?`)){T(K,e.id,!0);try{await A(e.id),await M.load(!0)}catch(e){M.error=e.message??`Delete failed.`}finally{T(K,null)}}}var J=ce();D(`m7qpzt`,e=>{u(()=>{d.title=`Assistant Endpoints — OpenPalm`})});var Y=c(J);N(Y,{});var X=e(Y,2),Z=e(f(X),2),ge=e=>{var n=P(),r=f(n,!0);v(n),i(()=>t(r,M.error)),b(e,n)};x(Z,e=>{M.error&&e(ge)});var Q=e(Z,2);r(Q,21,()=>n(le),e=>e.id,(r,a)=>{var s=ie();let l;var u=f(s),d=f(u),p=f(d),m=f(p,!0);v(p);var h=e(p,2),g=e=>{b(e,F())};x(h,e=>{n(a).isDefault&&e(g)});var _=e(h,2),y=e=>{b(e,ee())};x(_,e=>{n(a).id===n(q)?.id&&e(y)});var S=e(_,2),C=e=>{b(e,te())};x(S,e=>{n(a).hasPassword&&e(C)}),v(d);var w=e(d,2),T=f(w,!0);v(w),v(u);var E=e(u,2),D=f(E),k=e=>{var t=ne();o(`click`,t,()=>me(n(a).id)),b(e,t)};x(D,e=>{n(a).id!==n(q)?.id&&e(k)});var A=e(D,2),j=r=>{var s=re(),l=c(s),u=e(l,2),d=f(u,!0);v(u),i(()=>{u.disabled=n(K)===n(a).id,t(d,n(K)===n(a).id?`Removing…`:`Remove`)}),o(`click`,l,()=>de(n(a))),o(`click`,u,()=>he(n(a))),b(r,s)};x(A,e=>{n(a).isDefault||e(j)}),v(E),v(s),i(()=>{l=O(s,1,`endpoint-card svelte-m7qpzt`,null,l,{active:n(a).id===n(q)?.id}),t(m,n(a).label),t(T,n(a).url)}),b(r,s)}),v(Q);var $=e(Q,2),_e=e=>{var t=I();o(`click`,t,ue),b(e,t)},ve=r=>{var a=se(),s=f(a),c=f(s,!0);v(s);var u=e(s,2),d=e(f(u),2);h(d),v(u);var m=e(u,2),y=e(f(m),2);h(y),g(2),v(m);var S=e(m,2),C=e(f(S),2);h(C);var w=e(C,4),D=e=>{b(e,L())};x(w,e=>{n(R)===`edit`&&e(D)}),v(S);var O=e(S,2),k=e=>{var t=ae(),r=f(t);h(r),g(2),v(t),p(r,()=>n(U),e=>T(U,e)),b(e,t)};x(O,e=>{n(R)===`edit`&&e(k)});var A=e(O,2),j=e=>{var r=oe(),a=f(r,!0);v(r),i(()=>t(a,n(G))),b(e,r)};x(A,e=>{n(G)&&e(j)});var M=e(A,2),N=f(M),P=f(N,!0);v(N);var F=e(N,2);v(M),v(a),i(()=>{t(c,n(R)===`add`?`Add endpoint`:`Edit endpoint`),_(C,`placeholder`,n(R)===`edit`?`Leave blank to keep current`:``),N.disabled=n(W),t(P,n(W)?`Saving…`:`Save`),F.disabled=n(W)}),l(`submit`,a,pe),E(d,()=>n(B),e=>T(B,e)),E(y,()=>n(V),e=>T(V,e)),E(C,()=>n(H),e=>T(H,e)),o(`click`,F,fe),b(r,a)};x($,e=>{n(R)===`idle`?e(_e):e(ve,-1)}),v(X),b(a,J),w()}a([`click`]);export{R as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,G as r,I as i,K as a,L as o,M as s,N as c,O as l,Q as u,W as d,X as f,Z as p,ct as m,f as h,ft as g,it as _,j as v,k as y,nt as b,r as x,rt as S,st as C,tt as w,x as T}from"../chunks/BBI__kVO.js";import"../chunks/xihTtKlq.js";import{t as E}from"../chunks/
|
|
1
|
+
import{$ as e,A as t,B as n,G as r,I as i,K as a,L as o,M as s,N as c,O as l,Q as u,W as d,X as f,Z as p,ct as m,f as h,ft as g,it as _,j as v,k as y,nt as b,r as x,rt as S,st as C,tt as w,x as T}from"../chunks/BBI__kVO.js";import"../chunks/xihTtKlq.js";import{t as E}from"../chunks/QZhQ9jgL.js";import{i as D,o as O,t as k}from"../chunks/CRSbY4Kh.js";var A=c(`<iframe class="opencode-frame svelte-1z0msvj" title="OpenCode — Advanced Chat" allow="clipboard-read; clipboard-write; microphone"></iframe>`),j=c(`<p class="status-line svelte-1z0msvj"> </p>`),M=c(`<h2 class="svelte-1z0msvj"> </h2> <p class="svelte-1z0msvj">The connection looks dead or its session expired. Reconnect to try again, or pick a different assistant from the switcher above.</p> <button class="btn btn-primary btn-lg svelte-1z0msvj"> </button>`,1),N=c(`<div class="advanced-status svelte-1z0msvj" aria-live="polite"><!></div>`),P=c(`<!> <div class="advanced-layout svelte-1z0msvj"><!></div>`,1);function F(i,c){m(c,!0);let F=_(()=>D.active),I=_(()=>E.url.searchParams.get(`session`)),L=b(``),R=b(`checking`),z=b(!1),B=b(0),V=0;async function H(){let e=++V;w(R,`checking`);let t=n(F)?.url??`http://127.0.0.1:3800`;try{let r=await fetch(`/proxy/assistant/`,{headers:{accept:`text/html`}});if(e!==V)return;if(!r.ok){w(R,`dead`);return}let i=t;if(n(I)){let r=await fetch(`/proxy/assistant/session/${encodeURIComponent(n(I))}`,{headers:{accept:`application/json`}});if(e!==V)return;if(r.ok){let a=await r.json().catch(()=>null);if(e!==V)return;i=O(t,n(I),a?.directory)}}w(L,i,!0),w(R,`ready`)}catch{if(e!==V)return;w(R,`dead`)}}async function U(){if(!n(z)){w(z,!0);try{await D.load(!0),await H(),n(R)===`ready`&&S(B)}finally{w(z,!1)}}}a(()=>{n(F)?.id&&(n(I),H())}),x(()=>(document.documentElement.classList.add(`chat-locked`),document.body.classList.add(`chat-locked`),D.load(),()=>{document.documentElement.classList.remove(`chat-locked`),document.body.classList.remove(`chat-locked`)}));var W=P();T(`1z0msvj`,e=>{d(()=>{f.title=`Advanced Chat — OpenPalm`})});var G=u(W);k(G,{});var K=e(G,2),q=p(K),J=e=>{var t=s();l(u(t),()=>n(B),e=>{var t=A();r(()=>h(t,`src`,n(L))),v(e,t)}),v(e,t)},Y=i=>{var a=N(),s=p(a),c=e=>{var i=j(),a=p(i);g(i),r(()=>t(a,`Connecting to ${n(F)?.label??`your assistant`??``}…`)),v(e,i)},l=i=>{var a=M(),s=u(a),c=p(s);g(s);var l=e(s,4),d=p(l,!0);g(l),r(()=>{t(c,`Can’t reach ${n(F)?.label??`your assistant`??``}`),l.disabled=n(z),t(d,n(z)?`Reconnecting…`:`Reconnect`)}),o(`click`,l,U),v(i,a)};y(s,e=>{n(R)===`checking`?e(c):e(l,-1)}),g(a),r(()=>h(a,`role`,n(R)===`dead`?`alert`:`status`)),v(i,a)};y(q,e=>{n(R)===`ready`?e(J):e(Y,-1)}),g(K),v(i,W),C()}i([`click`]);export{F as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,E as r,G as i,I as a,K as o,L as s,N as c,P as l,Q as u,W as d,X as f,Y as p,Z as m,a as h,ct as g,d as _,dt as v,f as y,ft as b,it as x,j as S,k as C,m as w,nt as T,r as E,s as D,st as O,tt as k,u as A,x as j,y as M}from"../chunks/BBI__kVO.js";import{n as N}from"../chunks/
|
|
1
|
+
import{$ as e,A as t,B as n,E as r,G as i,I as a,K as o,L as s,N as c,P as l,Q as u,W as d,X as f,Y as p,Z as m,a as h,ct as g,d as _,dt as v,f as y,ft as b,it as x,j as S,k as C,m as w,nt as T,r as E,s as D,st as O,tt as k,u as A,x as j,y as M}from"../chunks/BBI__kVO.js";import{n as N}from"../chunks/DQDnMiRB.js";import"../chunks/xihTtKlq.js";import{$ as P}from"../chunks/CgKtEGfl.js";import{t as F}from"../chunks/QZhQ9jgL.js";import"../chunks/CwsyZWHi.js";import{_ as I,c as L,g as R,i as z,n as ee,r as te,s as ne,t as re}from"../chunks/CRSbY4Kh.js";import{t as ie}from"../chunks/Oz5B_hgH.js";import{n as ae,t as oe}from"../chunks/B-mBBr5-.js";var se=e=>{S(e,ce())},ce=l(`<svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5v14"></path><path d="M5 12h14"></path></svg>`);function B(e,t){g(t,!0);let r=x(()=>(F.url?.pathname??``)===`/chat`||(F.url?.pathname??``).startsWith(`/chat/`)),i=T(!1);async function a(){if(!n(i)){k(i,!0);try{n(r)?await L.startNewSession():await N(`/chat?new=1`)}finally{k(i,!1)}}}I(e,{get icon(){return se},ariaLabel:`Start a new chat`,title:`New chat`,get disabled(){return n(i)},onclick:a}),O()}var V=c(`<!> <span>Sending...</span>`,1),H=c(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg> <span> </span>`,1),U=c(`<div class="chat-input-row svelte-j7h4bp"><div class="input-area svelte-j7h4bp"><!> <textarea id="chat-input" rows="1" aria-label="Message input" class="svelte-j7h4bp"></textarea> <button class="btn btn-primary send-btn svelte-j7h4bp" type="button"><!></button></div></div>`);function le(r,a){g(a,!0);let o=h(a,`questionPending`,3,!1),c=T(``),l=T(void 0),d=x(()=>a.sending&&!o()),f=x(()=>o()?`Answer`:`Send`);function _(e){e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),w())}function w(){let e=n(c).trim();!e||n(d)||(a.onSend(e),k(c,``),n(l)&&(n(l).style.height=`auto`))}function E(){n(l)&&(n(l).style.height=`auto`,n(l).style.height=`${n(l).scrollHeight}px`)}var j=U(),M=m(j),N=m(M);B(N,{});var P=e(N,2);p(P),D(P,e=>k(l,e),()=>n(l));var F=e(P,2),I=m(F),L=e=>{var t=V();ie(u(t),{}),v(2),S(e,t)},R=r=>{var a=H(),o=e(u(a),2),s=m(o,!0);b(o),i(()=>t(s,n(f))),S(r,a)};C(I,e=>{a.sending&&!o()?e(L):e(R,-1)}),b(F),b(M),b(j),i(e=>{y(P,`placeholder`,o()?`Answer the assistant… (Enter to send, Shift+Enter for newline)`:`Send a message… (Enter to send, Shift+Enter for newline)`),P.disabled=n(d),F.disabled=e,y(F,`aria-label`,o()?`Send answer`:`Send message`)},[()=>n(d)||!n(c).trim()]),s(`keydown`,P,_),s(`input`,P,E),A(P,()=>n(c),e=>k(c,e)),s(`click`,F,w),S(r,j),O()}a([`keydown`,`input`,`click`]);var ue=c(`<div class="session-loading svelte-23dtxz" aria-live="polite"><!> <span class="svelte-23dtxz">Loading messages…</span></div>`),de=c(`<div class="empty-state svelte-23dtxz"><p class="svelte-23dtxz">No messages yet. Send something to begin.</p></div>`),fe=c(`<p class="typing-text typing-text-streaming svelte-23dtxz"> </p>`),pe=c(`<span class="typing-indicator svelte-23dtxz" aria-hidden="true"><span class="typing-dot svelte-23dtxz"></span> <span class="typing-dot svelte-23dtxz"></span> <span class="typing-dot svelte-23dtxz"></span></span>`),me=c(`<div class="typing-state-row svelte-23dtxz"><span class="typing-text svelte-23dtxz"> </span> <!></div>`),he=c(`<p class="live-card-message svelte-23dtxz"> </p>`),ge=c(`<div class="svelte-23dtxz"><span class="live-card-label svelte-23dtxz">Requested now</span> <code class="live-card-code svelte-23dtxz"> </code></div>`),_e=c(`<div class="svelte-23dtxz"><span class="live-card-label svelte-23dtxz">Saved if always allowed</span> <code class="live-card-code svelte-23dtxz"> </code></div>`),ve=c(`<p class="live-card-message svelte-23dtxz"> </p>`),ye=c(`<div class="live-card permission-card svelte-23dtxz" role="group" aria-label="Permission request"><div class="live-card-header svelte-23dtxz"><span class="live-card-kicker svelte-23dtxz">Permission request</span> <span class="live-card-title svelte-23dtxz"> </span></div> <!> <!> <!> <!> <div class="live-card-actions svelte-23dtxz"><button class="btn btn-primary btn-sm svelte-23dtxz" type="button"> </button> <button class="btn btn-secondary btn-sm svelte-23dtxz" type="button"> </button> <button class="btn btn-danger btn-sm svelte-23dtxz" type="button"> </button></div></div>`),be=c(`<span class="live-card-title svelte-23dtxz"> </span>`),xe=c(`<span class="live-card-title svelte-23dtxz"> </span>`),Se=c(`<span class="question-option-description svelte-23dtxz"> </span>`),Ce=c(`<button class="btn btn-secondary btn-sm question-option svelte-23dtxz" type="button"><span class="svelte-23dtxz"> </span> <!></button>`),we=c(`<div class="question-options svelte-23dtxz"></div>`),Te=c(`<p class="live-card-question svelte-23dtxz"> </p> <!> <p class="live-card-hint svelte-23dtxz">Use the composer below to send a custom answer.</p>`,1),Ee=c(`<span class="live-card-label svelte-23dtxz"> </span>`),De=c(`<span class="question-option-description svelte-23dtxz"> </span>`),Oe=c(`<button type="button"><span class="svelte-23dtxz"> </span> <!></button>`),ke=c(`<div class="question-options svelte-23dtxz"></div>`),Ae=c(`<div class="multi-question-item svelte-23dtxz"><!> <p class="live-card-question svelte-23dtxz"> </p> <!> <input class="question-input svelte-23dtxz" type="text" placeholder="Type an answer" aria-required="true"/></div>`),je=c(`<div class="multi-question-list svelte-23dtxz"></div>`),Me=c(`<code class="live-card-code svelte-23dtxz"> </code>`),Ne=c(`<p class="live-card-message svelte-23dtxz"> </p>`),Pe=c(`<button class="btn btn-primary btn-sm svelte-23dtxz" type="button">Submit answers</button>`),Fe=c(`<div class="live-card question-card svelte-23dtxz" role="group" aria-label="Assistant question"><div class="live-card-header svelte-23dtxz"><span class="live-card-kicker svelte-23dtxz">Assistant question</span> <!></div> <!> <!> <!> <div class="live-card-actions svelte-23dtxz"><!> <button class="btn btn-secondary btn-sm svelte-23dtxz" type="button">Can't answer</button></div></div>`),Ie=c(`<div class="typing-message svelte-23dtxz" aria-live="polite"><div class="typing-bubble svelte-23dtxz"><!> <!> <!> <!></div> <span class="typing-meta svelte-23dtxz">Assistant</span></div>`),Le=c(`<div class="chat-error-banner svelte-23dtxz" role="alert"><span class="svelte-23dtxz"> </span> <button class="reconnect-btn svelte-23dtxz" type="button">Reconnect</button> <button class="dismiss-btn svelte-23dtxz" type="button" aria-label="Dismiss error">×</button></div>`),Re=c(`<!> <div class="chat-shell svelte-23dtxz"><div class="chat-layout svelte-23dtxz"><section class="messages-area svelte-23dtxz" aria-label="Chat history"><header class="chat-intro svelte-23dtxz" aria-label="Chat overview"><div class="chat-intro-copy svelte-23dtxz"><div class="chat-intro-eyebrow svelte-23dtxz">OpenPalm chat</div> <h1 class="svelte-23dtxz">Talk to your assistant</h1> <p class="svelte-23dtxz">You're chatting with <strong class="svelte-23dtxz"> </strong> in <strong class="svelte-23dtxz"> </strong>.
|
|
2
2
|
Ask for help in plain language and review the live output below.</p></div></header> <!> <!> <!> <div aria-hidden="true" class="svelte-23dtxz"></div></section> <!> <!></div> <aside class="chat-side svelte-23dtxz" aria-label="Assistant and sessions"><section class="panel side-panel svelte-23dtxz"><div class="panel-header side-panel-header svelte-23dtxz"><div class="svelte-23dtxz"><div class="chat-side-eyebrow svelte-23dtxz">Connection</div> <h2 class="svelte-23dtxz">Assistant</h2></div></div> <div class="panel-body side-panel-body svelte-23dtxz"><!></div></section> <section class="panel side-panel side-sessions svelte-23dtxz"><div class="panel-header side-panel-header svelte-23dtxz"><div class="svelte-23dtxz"><div class="chat-side-eyebrow svelte-23dtxz">History</div> <h2 class="svelte-23dtxz">Sessions</h2></div></div> <div class="panel-body side-panel-body side-panel-body--sessions svelte-23dtxz"><!></div></section></aside></div>`,1);function W(a,c){g(c,!0);let l=T(void 0),p=x(()=>L.entriesLoading),h=x(()=>L.byEndpoint.get(L.activeEndpointId)?.sessionsLoading??!1),A=x(()=>z.active?.label??`Assistant`),I=x(()=>(L.byEndpoint.get(L.activeEndpointId)?.sessions.find(e=>e.id===L.activeSessionId))?.title?.trim()||`New session`);async function se(){L.error=``,await L.loadSessions(),await L.onEndpointChanged(z.activeId)}async function ce(e){await L.send(e)}let B=T(null);async function V(e){k(B,e,!0);try{await L.answerPermission(e)}finally{k(B,null)}}async function H(e){await L.answerQuestion(e)}function U(e,t){L.setQuestionAnswer(e,t.currentTarget.value)}async function W(){await L.answerQuestion()}async function ze(){await L.rejectQuestion()}function Be(){queueMicrotask(()=>{n(l)?.scrollIntoView({behavior:`smooth`})})}let G=``,K=``;o(()=>{let e=L.entries.at(-1);if(e?.type===`divider`?e.label:e?.type===`note`?e.text:e?.type===`tool-group`?e.toolStates[0]?.title:e?.text,!e&&!n(p)&&!n(h)&&!L.sending)return;let t=L.pendingPermission?.requestID??``,r=L.pendingQuestion?.requestID??``,i=t!==G,a=r!==K;L.pendingAssistantText,L.pendingToolStates.length,i&&(G=t),a&&(K=r),(e||n(p)||n(h)||L.sending||i||a)&&Be()});function Ve(){return L.pendingPermission?`Assistant paused for approval`:L.pendingQuestion?`Assistant is waiting for your answer`:L.pendingAssistantText?`Assistant is responding`:`Assistant is typing`}function He(e,t=160){return e.length>t?`${e.slice(0,t-1)}…`:e}o(()=>{if(!(typeof document>`u`))return document.documentElement.classList.add(`chat-locked`),document.body.classList.add(`chat-locked`),()=>{document.documentElement.classList.remove(`chat-locked`),document.body.classList.remove(`chat-locked`)}}),o(()=>{let e=!1;function t(){e||document.visibilityState!==`visible`||(async()=>{!await P()&&!e&&(L.error=`Assistant is not reachable. Try reconnecting.`)})()}return document.addEventListener(`visibilitychange`,t),()=>{e=!0,document.removeEventListener(`visibilitychange`,t)}}),E(()=>{(async()=>{try{R.init();let e=F.url.searchParams.get(`session`);if(R.enabled){await N(ne(e),{replaceState:!0});return}await z.load(),await L.onEndpointChanged(z.activeId),e&&await L.openSession(e),F.url.searchParams.get(`new`)===`1`&&(await L.startNewSession(),await N(`/chat`,{replaceState:!0}))}catch{L.error=`Unable to reach the assistant.`}})()});var Ue=Re();j(`23dtxz`,e=>{d(()=>{f.title=`Chat — OpenPalm`})});var We=u(Ue);re(We,{});var Ge=e(We,2),q=m(Ge),J=m(q),Y=m(J),Ke=m(Y),qe=e(m(Ke),4),X=e(m(qe)),Je=m(X,!0);b(X);var Ye=e(X,2),Xe=m(Ye,!0);b(Ye),v(),b(qe),b(Ke),b(Y);var Ze=e(Y,2),Qe=e=>{var t=ue();ie(m(t),{}),v(2),b(t),S(e,t)},$e=e=>{S(e,de())};C(Ze,e=>{n(h)||n(p)?e(Qe):L.entries.length===0&&e($e,1)});var Z=e(Ze,2);r(Z,17,()=>L.entries,e=>e.id,(e,t)=>{oe(e,{get entry(){return n(t)}})});var et=e(Z,2),tt=a=>{var o=Ie(),c=m(o),l=m(c),d=e=>{var n=fe(),r=m(n,!0);b(n),i(()=>t(r,L.pendingAssistantText)),S(e,n)},f=n=>{var r=me(),a=m(r),o=m(a,!0);b(a);var s=e(a,2),c=e=>{S(e,pe())};C(s,e=>{!L.pendingPermission&&!L.pendingQuestion&&e(c)}),b(r),i(e=>t(o,e),[()=>Ve()]),S(n,r)};C(l,e=>{L.pendingAssistantText?e(d):e(f,-1)});var p=e(l,2),h=e=>{{let t=x(()=>!!L.pendingPermission||!!L.pendingQuestion);ae(e,{get items(){return L.pendingToolStates},get muted(){return n(t)},bordered:!0,ariaLabel:`Assistant tool activity`})}};C(p,e=>{L.pendingToolStates.length>0&&e(h)});var g=e(p,2),T=r=>{var a=ye(),o=m(a),c=e(m(o),2),l=m(c,!0);b(c),b(o);var u=e(o,2),d=e=>{var n=he(),r=m(n,!0);b(n),i(e=>t(r,e),[()=>He(L.pendingPermission.detail)]),S(e,n)};C(u,e=>{L.pendingPermission.detail&&e(d)});var f=e(u,2),p=n=>{var r=ge(),a=e(m(r),2),o=m(a,!0);b(a),b(r),i(e=>t(o,e),[()=>L.pendingPermission.patterns.join(`, `)]),S(n,r)};C(f,e=>{L.pendingPermission.patterns.length>0&&e(p)});var h=e(f,2),g=n=>{var r=_e(),a=e(m(r),2),o=m(a,!0);b(a),b(r),i(e=>t(o,e),[()=>L.pendingPermission.always.join(`, `)]),S(n,r)};C(h,e=>{L.pendingPermission.always.length>0&&e(g)});var _=e(h,2),v=e=>{var n=ve(),r=m(n,!0);b(n),i(()=>t(r,L.pendingPermission.message)),S(e,n)};C(_,e=>{L.pendingPermission.message&&e(v)});var y=e(_,2),x=m(y),w=m(x,!0);b(x);var T=e(x,2),E=m(T,!0);b(T);var D=e(T,2),O=m(D,!0);b(D),b(y),b(a),i(()=>{t(l,L.pendingPermission.permission),x.disabled=L.pendingPermission.status===`submitting`||L.pendingPermission.status===`resolved`,t(w,n(B)===`once`?`Sending…`:`Allow this once`),T.disabled=L.pendingPermission.status===`submitting`||L.pendingPermission.status===`resolved`,t(E,n(B)===`always`?`Sending…`:`Always allow matches`),D.disabled=L.pendingPermission.status===`submitting`||L.pendingPermission.status===`resolved`,t(O,n(B)===`reject`?`Sending…`:`Deny request`)}),s(`click`,x,()=>void V(`once`)),s(`click`,T,()=>void V(`always`)),s(`click`,D,()=>void V(`reject`)),S(r,a)};C(g,e=>{L.pendingPermission&&e(T)});var E=e(g,2),D=a=>{var o=Fe(),c=m(o),l=e(m(c),2),d=e=>{var n=be(),r=m(n,!0);b(n),i(()=>t(r,L.pendingQuestion.questions[0].header)),S(e,n)},f=e=>{var n=xe(),r=m(n);b(n),i(()=>t(r,`${L.pendingQuestion.questions.length??``} answers required`)),S(e,n)};C(l,e=>{L.pendingQuestion.questions.length===1&&L.pendingQuestion.questions[0]?.header?e(d):L.pendingQuestion.questions.length>1&&e(f,1)}),b(c);var p=e(c,2),h=a=>{var o=Te(),c=u(o),l=m(c,!0);b(c);var d=e(c,2),f=a=>{var o=we();r(o,23,()=>L.pendingQuestion.questions[0].options,(e,t)=>`${L.pendingQuestion.requestID}:${t}`,(r,a)=>{var o=Ce(),c=m(o),l=m(c,!0);b(c);var u=e(c,2),d=e=>{var r=Se(),o=m(r,!0);b(r),i(()=>t(o,n(a).description)),S(e,r)};C(u,e=>{n(a).description&&e(d)}),b(o),i(()=>{o.disabled=L.pendingQuestion.status===`submitting`||L.pendingQuestion.status===`answered`||L.pendingQuestion.status===`rejected`,t(l,n(a).label)}),s(`click`,o,()=>void H(n(a).label)),S(r,o)}),b(o),S(a,o)};C(d,e=>{L.pendingQuestion.questions[0].options.length>0&&e(f)}),v(2),i(()=>t(l,L.pendingQuestion.questions[0].question)),S(a,o)},g=a=>{var o=je();r(o,23,()=>L.pendingQuestion.questions,(e,t)=>`${L.pendingQuestion.requestID}:question:${t}`,(a,o,c)=>{var l=Ae(),u=m(l),d=e=>{var r=Ee(),a=m(r,!0);b(r),i(()=>t(a,n(o).header)),S(e,r)};C(u,e=>{n(o).header&&e(d)});var f=e(u,2),p=m(f,!0);b(f);var h=e(f,2),g=a=>{var l=ke();r(l,23,()=>n(o).options,(e,t)=>`${L.pendingQuestion.requestID}:${n(c)}:${t}`,(r,a)=>{var o=Oe();let l;var u=m(o),d=m(u,!0);b(u);var f=e(u,2),p=e=>{var r=De(),o=m(r,!0);b(r),i(()=>t(o,n(a).description)),S(e,r)};C(f,e=>{n(a).description&&e(p)}),b(o),i(()=>{l=M(o,1,`btn btn-secondary btn-sm question-option svelte-23dtxz`,null,l,{"selected-option":L.pendingQuestion.answers[n(c)]===n(a).label}),o.disabled=L.pendingQuestion.status===`submitting`||L.pendingQuestion.status===`answered`||L.pendingQuestion.status===`rejected`,t(d,n(a).label)}),s(`click`,o,()=>L.setQuestionAnswer(n(c),n(a).label)),S(r,o)}),b(l),S(a,l)};C(h,e=>{n(o).options.length>0&&e(g)});var v=e(h,2);_(v),b(l),i(()=>{t(p,n(o).question),w(v,L.pendingQuestion.answers[n(c)]),y(v,`aria-invalid`,L.pendingQuestion.status===`error`?!L.pendingQuestion.answers[n(c)]:void 0),v.disabled=L.pendingQuestion.status===`submitting`||L.pendingQuestion.status===`answered`||L.pendingQuestion.status===`rejected`}),s(`input`,v,e=>U(n(c),e)),S(a,l)}),b(o),S(a,o)};C(p,e=>{L.pendingQuestion.questions.length===1&&L.pendingQuestion.questions[0]?e(h):e(g,-1)});var T=e(p,2),E=e=>{var n=Me(),r=m(n,!0);b(n),i(e=>t(r,e),[()=>L.pendingQuestion.answers.filter(Boolean).join(` | `)]),S(e,n)},D=x(()=>L.pendingQuestion.answers.some(e=>e));C(T,e=>{n(D)&&e(E)});var O=e(T,2),k=e=>{var n=Ne(),r=m(n,!0);b(n),i(()=>t(r,L.pendingQuestion.message)),S(e,n)};C(O,e=>{L.pendingQuestion.message&&e(k)});var A=e(O,2),j=m(A),N=e=>{var t=Pe();i(()=>t.disabled=L.pendingQuestion.status===`submitting`||L.pendingQuestion.status===`answered`||L.pendingQuestion.status===`rejected`),s(`click`,t,()=>void W()),S(e,t)};C(j,e=>{L.pendingQuestion.questions.length>1&&e(N)});var P=e(j,2);b(A),b(o),i(()=>P.disabled=L.pendingQuestion.status===`submitting`||L.pendingQuestion.status===`answered`||L.pendingQuestion.status===`rejected`),s(`click`,P,()=>void ze()),S(a,o)};C(E,e=>{L.pendingQuestion&&e(D)}),b(c),v(2),b(o),i(e=>y(o,`aria-label`,e),[()=>Ve()]),S(a,o)};C(et,e=>{L.sending&&e(tt)}),D(e(et,2),e=>k(l,e),()=>n(l)),b(J);var nt=e(J,2),rt=n=>{var r=Le(),a=m(r),o=m(a,!0);b(a);var c=e(a,2),l=e(c,2);b(r),i(()=>t(o,L.error)),s(`click`,c,se),s(`click`,l,()=>{L.error=``}),S(n,r)};C(nt,e=>{L.error&&e(rt)});var it=e(nt,2);{let e=x(()=>!!L.pendingQuestion&&L.pendingQuestion.questions.length===1);le(it,{get sending(){return L.sending},get questionPending(){return n(e)},onSend:ce})}b(q);var at=e(q,2),Q=m(at),ot=e(m(Q),2);te(m(ot),{}),b(ot),b(Q);var st=e(Q,2),$=e(m(st),2);ee(m($),{}),b($),b(st),b(at),b(Ge),i(()=>{t(Je,n(A)),t(Xe,n(I))}),S(a,Ue),O()}a([`click`,`input`]);export{W as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,G as r,I as i,L as a,N as o,P as s,R as c,W as l,X as u,Z as d,ct as f,d as p,dt as m,f as h,ft as g,j as _,k as v,nt as y,s as b,st as x,tt as S,u as C,x as w}from"../chunks/BBI__kVO.js";import{n as T}from"../chunks/
|
|
1
|
+
import{$ as e,A as t,B as n,G as r,I as i,L as a,N as o,P as s,R as c,W as l,X as u,Z as d,ct as f,d as p,dt as m,f as h,ft as g,j as _,k as v,nt as y,s as b,st as x,tt as S,u as C,x as w}from"../chunks/BBI__kVO.js";import{n as T}from"../chunks/DQDnMiRB.js";import"../chunks/xihTtKlq.js";import"../chunks/CwsyZWHi.js";import{t as E}from"../chunks/Oz5B_hgH.js";var D=s(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94"></path><path d="M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19"></path><line x1="1" y1="1" x2="23" y2="23"></line><path d="M14.12 14.12a3 3 0 1 1-4.24-4.24"></path></svg>`),O=s(`<svg aria-hidden="true" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>`),k=o(`<p class="auth-error svelte-zhbyfn" role="alert"> </p>`),A=o(`<main class="auth-gate svelte-zhbyfn" aria-label="Admin login gate"><section class="auth-card svelte-zhbyfn"><div class="auth-brand svelte-zhbyfn"><span class="brand-icon svelte-zhbyfn"><img src="/logo-128.png" alt="OpenPalm Logo" class="svelte-zhbyfn"/></span> <div><h1 class="svelte-zhbyfn">OpenPalm Console</h1> <p class="svelte-zhbyfn">Enter your admin password to unlock the control plane.</p></div></div> <form class="auth-form svelte-zhbyfn"><label for="admin-token" class="svelte-zhbyfn">Admin Password</label> <input type="text" name="username" autocomplete="username" value="admin" class="sr-only svelte-zhbyfn" tabindex="-1" aria-hidden="true"/> <div class="token-input-wrapper svelte-zhbyfn"><input id="admin-token" name="admin-token" placeholder="Enter admin password" autocomplete="current-password" class="svelte-zhbyfn"/> <button type="button" class="btn-toggle svelte-zhbyfn"><!></button></div> <!> <button class="btn btn-primary" type="submit"><!> Unlock Console</button></form></section></main>`);function j(i,o){f(o,!0);let s=y(``),l=y(!1),u=y(void 0);async function w(e){e.preventDefault();let t=n(s).trim();if(!t||o.loading){n(u)?.focus();return}await o.onSuccess(t)||(n(u)?.focus(),n(u)?.select())}var T=A(),j=d(T),M=e(d(j),2),N=e(e(d(M),2),2),P=d(N);p(P),b(P,e=>S(u,e),()=>n(u));var F=e(P,2),I=d(F),L=e=>{_(e,D())},R=e=>{_(e,O())};v(I,e=>{n(l)?e(L):e(R,-1)}),g(F),g(N);var z=e(N,2),B=e=>{var n=k(),i=d(n,!0);g(n),r(()=>t(i,o.error)),_(e,n)};v(z,e=>{o.error&&e(B)});var V=e(z,2),H=d(V),U=e=>{E(e,{})};v(H,e=>{o.loading&&e(U)}),m(),g(V),g(M),g(j),g(T),r(e=>{h(P,`type`,n(l)?`text`:`password`),h(F,`aria-label`,n(l)?`Hide token`:`Show token`),V.disabled=e},[()=>o.loading||!n(s).trim()]),c(`submit`,M,w),C(P,()=>n(s),e=>S(s,e)),a(`click`,F,()=>S(l,!n(l))),_(i,T),x()}i([`click`]);function M(e,t){f(t,!0);let r=y(!1),i=y(``);async function a(e){if(n(r))return!1;let a=t.data.redirectTo||`/chat`;S(r,!0),S(i,``);try{let t=await fetch(`/admin/auth/login`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({password:e}),credentials:`include`});return t.ok?(await T(a),!0):(S(i,t.status===503?`Admin password is not configured yet. Complete setup first.`:`Invalid password.`,!0),!1)}catch{return S(i,`Unable to reach admin API.`),!1}finally{S(r,!1)}}w(`1x05zx6`,e=>{l(()=>{u.title=`Sign in — OpenPalm`})}),j(e,{onSuccess:a,get loading(){return n(r)},get error(){return n(i)}}),x()}export{M as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.12.
|
|
1
|
+
{"version":"0.12.6"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
� �{"version":"0.12.
|
|
1
|
+
� �{"version":"0.12.6"}
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const index = 1;
|
|
2
|
+
let component_cache;
|
|
3
|
+
const component = async () => component_cache ??= (await import('./error.svelte-ESC3aLu5.js')).default;
|
|
4
|
+
const imports = ["_app/immutable/nodes/1.CsV7DNn1.js","_app/immutable/chunks/BBI__kVO.js","_app/immutable/chunks/QZhQ9jgL.js","_app/immutable/chunks/DQDnMiRB.js","_app/immutable/chunks/CymRgjIC.js","_app/immutable/chunks/xihTtKlq.js"];
|
|
5
|
+
const stylesheets = [];
|
|
6
|
+
const fonts = [];
|
|
7
|
+
|
|
8
|
+
export { component, fonts, imports, index, stylesheets };
|
|
9
|
+
//# sourceMappingURL=1-tqcyjyYn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1-
|
|
1
|
+
{"version":3,"file":"1-tqcyjyYn.js","sources":["../../../.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.CsV7DNn1.js\",\"_app/immutable/chunks/BBI__kVO.js\",\"_app/immutable/chunks/QZhQ9jgL.js\",\"_app/immutable/chunks/DQDnMiRB.js\",\"_app/immutable/chunks/CymRgjIC.js\",\"_app/immutable/chunks/xihTtKlq.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACpO,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { q as classifyLocalInstall,
|
|
2
|
-
import { g as getState } from './state-
|
|
3
|
-
import { b as listRemoteStatuses } from './endpoints-
|
|
4
|
-
import { d as detectMigration } from './migration-status-
|
|
1
|
+
import { q as classifyLocalInstall, v as composePs, m as buildComposeOptions, L as deriveLaunchStatus, S as detectRuntime, N as deriveLocalStackState } from './src-C5kkVuFB.js';
|
|
2
|
+
import { g as getState } from './state-BAMdGxdT.js';
|
|
3
|
+
import { b as listRemoteStatuses } from './endpoints-DNux-fut.js';
|
|
4
|
+
import { d as detectMigration } from './migration-status-eArABSVL.js';
|
|
5
5
|
import './chunk-CLZ62Ad-.js';
|
|
6
6
|
import 'node:module';
|
|
7
7
|
import './provider-constants-DPrj3yBX.js';
|
|
@@ -70,4 +70,4 @@ const stylesheets = ["_app/immutable/assets/10.C4zN9dGC.css"];
|
|
|
70
70
|
const fonts = [];
|
|
71
71
|
|
|
72
72
|
export { component, fonts, imports, index, _page_server_ts as server, server_id, stylesheets };
|
|
73
|
-
//# sourceMappingURL=10-
|
|
73
|
+
//# sourceMappingURL=10-ClWWC_db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"10-ClWWC_db.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/splash/_page.server.ts.js","../../../.svelte-kit/adapter-node/nodes/10.js"],"sourcesContent":["import { $ as deriveLocalStackState, L as buildComposeOptions, Q as deriveLaunchStatus, Z as classifyLocalInstall, et as detectRuntime, ot as composePs } from \"../../../chunks/src.js\";\nimport { t as getState } from \"../../../chunks/state.js\";\nimport { a as listRemoteStatuses } from \"../../../chunks/endpoints.js\";\nimport { t as detectMigration } from \"../../../chunks/migration-status.js\";\n//#region src/routes/splash/+page.server.ts\nfunction parseComposePsServices(stdout) {\n\treturn stdout.split(\"\\n\").map((line) => line.trim()).filter(Boolean).flatMap((line) => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line);\n\t\t\treturn [{\n\t\t\t\tservice: String(parsed.Service ?? parsed.Name ?? \"\"),\n\t\t\t\tstate: String(parsed.State ?? \"\"),\n\t\t\t\thealth: String(parsed.Health ?? \"\")\n\t\t\t}];\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t});\n}\nasync function load() {\n\tconst state = getState();\n\tconst installState = classifyLocalInstall(state.stackDir);\n\tconst composeResult = await composePs(buildComposeOptions(state));\n\treturn {\n\t\tlaunchStatus: deriveLaunchStatus({\n\t\t\tlocal: {\n\t\t\t\tstate: deriveLocalStackState(installState, composeResult.ok ? parseComposePsServices(composeResult.stdout) : []),\n\t\t\t\truntime: installState === \"not_installed\" ? await detectRuntime() : void 0,\n\t\t\t\tdetail: { installState }\n\t\t\t},\n\t\t\tremotes: await listRemoteStatuses()\n\t\t}),\n\t\tmigration: detectMigration(state.homeDir)\n\t};\n}\n//#endregion\nexport { load };\n","import * as server from '../entries/pages/splash/_page.server.ts.js';\n\nexport const index = 10;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/splash/_page.svelte.js')).default;\nexport { server };\nexport const server_id = \"src/routes/splash/+page.server.ts\";\nexport const imports = [\"_app/immutable/nodes/10.BzTAm6YU.js\",\"_app/immutable/chunks/BBI__kVO.js\",\"_app/immutable/chunks/xihTtKlq.js\"];\nexport const stylesheets = [\"_app/immutable/assets/10.C4zN9dGC.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AACA,SAAS,sBAAsB,CAAC,MAAM,EAAE;AACxC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACxF,EAAE,IAAI;AACN,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,GAAG,OAAO,CAAC;AACX,IAAI,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACxD,IAAI,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AACrC,IAAI,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;AACtC,IAAI,CAAC;AACL,EAAE,CAAC,CAAC,MAAM;AACV,GAAG,OAAO,EAAE;AACZ,EAAE;AACF,CAAC,CAAC,CAAC;AACH;AACA,eAAe,IAAI,GAAG;AACtB,CAAC,MAAM,KAAK,GAAG,QAAQ,EAAE;AACzB,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC1D,CAAC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC,OAAO;AACR,EAAE,YAAY,EAAE,kBAAkB,CAAC;AACnC,GAAG,KAAK,EAAE;AACV,IAAI,KAAK,EAAE,qBAAqB,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,GAAG,sBAAsB,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACpH,IAAI,OAAO,EAAE,YAAY,KAAK,eAAe,GAAG,MAAM,aAAa,EAAE,GAAG,MAAM;AAC9E,IAAI,MAAM,EAAE,EAAE,YAAY;AAC1B,IAAI;AACJ,GAAG,OAAO,EAAE,MAAM,kBAAkB;AACpC,GAAG,CAAC;AACJ,EAAE,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO;AAC1C,EAAE;AACF;;;;;;;AChCY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAyC,CAAC,EAAE;AAEvG,MAAC,SAAS,GAAG;AACb,MAAC,OAAO,GAAG,CAAC,qCAAqC,CAAC,mCAAmC,CAAC,mCAAmC;AACzH,MAAC,WAAW,GAAG,CAAC,uCAAuC;AACvD,MAAC,KAAK,GAAG;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const index = 4;
|
|
2
|
+
let component_cache;
|
|
3
|
+
const component = async () => component_cache ??= (await import('./_page.svelte-BY9Xi4AF.js')).default;
|
|
4
|
+
const imports = ["_app/immutable/nodes/4.KMrAUs2s.js","_app/immutable/chunks/BBI__kVO.js","_app/immutable/chunks/DQDnMiRB.js","_app/immutable/chunks/CymRgjIC.js","_app/immutable/chunks/CwsyZWHi.js","_app/immutable/chunks/B-mBBr5-.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/CRSbY4Kh.js","_app/immutable/chunks/QZhQ9jgL.js","_app/immutable/chunks/CgKtEGfl.js","_app/immutable/chunks/Oz5B_hgH.js","_app/immutable/chunks/Buy0D9D-.js"];
|
|
5
|
+
const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/Navbar.CjL-3tw0.css","_app/immutable/assets/ChatMessage.Ctff5YI9.css","_app/immutable/assets/4.DImH8cdy.css"];
|
|
6
|
+
const fonts = [];
|
|
7
|
+
|
|
8
|
+
export { component, fonts, imports, index, stylesheets };
|
|
9
|
+
//# sourceMappingURL=4-D45BCCjA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"4-
|
|
1
|
+
{"version":3,"file":"4-D45BCCjA.js","sources":["../../../.svelte-kit/adapter-node/nodes/4.js"],"sourcesContent":["\n\nexport const index = 4;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/admin/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/4.KMrAUs2s.js\",\"_app/immutable/chunks/BBI__kVO.js\",\"_app/immutable/chunks/DQDnMiRB.js\",\"_app/immutable/chunks/CymRgjIC.js\",\"_app/immutable/chunks/CwsyZWHi.js\",\"_app/immutable/chunks/B-mBBr5-.js\",\"_app/immutable/chunks/xihTtKlq.js\",\"_app/immutable/chunks/CRSbY4Kh.js\",\"_app/immutable/chunks/QZhQ9jgL.js\",\"_app/immutable/chunks/CgKtEGfl.js\",\"_app/immutable/chunks/Oz5B_hgH.js\",\"_app/immutable/chunks/Buy0D9D-.js\"];\nexport const stylesheets = [\"_app/immutable/assets/Spinner.BtzHSsat.css\",\"_app/immutable/assets/Navbar.CjL-3tw0.css\",\"_app/immutable/assets/ChatMessage.Ctff5YI9.css\",\"_app/immutable/assets/4.DImH8cdy.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAwC,CAAC,EAAE;AACtG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5b,MAAC,WAAW,GAAG,CAAC,4CAA4C,CAAC,2CAA2C,CAAC,gDAAgD,CAAC,sCAAsC;AAChM,MAAC,KAAK,GAAG;;;;"}
|