@openpalm/ui 0.11.0-rc.2 → 0.11.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/.openpalm-ui-version +1 -1
- package/build/client/_app/immutable/assets/0.BoT18krG.css +1 -0
- package/build/client/_app/immutable/assets/0.BoT18krG.css.br +0 -0
- package/build/client/_app/immutable/assets/0.BoT18krG.css.gz +0 -0
- package/build/client/_app/immutable/assets/AuthGate.DKS99Rrq.css +1 -0
- package/build/client/_app/immutable/assets/AuthGate.DKS99Rrq.css.br +0 -0
- package/build/client/_app/immutable/assets/AuthGate.DKS99Rrq.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{ak2ISc8B.js → BH5NAaCV.js} +1 -1
- package/build/client/_app/immutable/chunks/BH5NAaCV.js.br +0 -0
- package/build/client/_app/immutable/chunks/BH5NAaCV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CF3TKiGr.js +5 -0
- package/build/client/_app/immutable/chunks/CF3TKiGr.js.br +0 -0
- package/build/client/_app/immutable/chunks/CF3TKiGr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DXseS2Vw.js +1 -0
- package/build/client/_app/immutable/chunks/DXseS2Vw.js.br +0 -0
- package/build/client/_app/immutable/chunks/DXseS2Vw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CzXGhlNF.js → DtBQ-3uX.js} +1 -1
- package/build/client/_app/immutable/chunks/DtBQ-3uX.js.br +0 -0
- package/build/client/_app/immutable/chunks/DtBQ-3uX.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.C_eSlUyi.js → app.D0MBBfeD.js} +2 -2
- package/build/client/_app/immutable/entry/app.D0MBBfeD.js.br +0 -0
- package/build/client/_app/immutable/entry/app.D0MBBfeD.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CG9MKItr.js +1 -0
- package/build/client/_app/immutable/entry/start.CG9MKItr.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CG9MKItr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.C-6HAZZl.js +1 -0
- package/build/client/_app/immutable/nodes/0.C-6HAZZl.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.C-6HAZZl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.qjZsjpWC.js → 1.BL-nh2RB.js} +1 -1
- package/build/client/_app/immutable/nodes/1.BL-nh2RB.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BL-nh2RB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DVARHw9M.js +19 -0
- package/build/client/_app/immutable/nodes/4.DVARHw9M.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DVARHw9M.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.ChSoAFFd.js → 5.BqSl_ppl.js} +1 -1
- package/build/client/_app/immutable/nodes/5.BqSl_ppl.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BqSl_ppl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.BRG0vYmH.js → 6.75q8hd55.js} +1 -1
- package/build/client/_app/immutable/nodes/6.75q8hd55.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.75q8hd55.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.BVvy1f_p.js → 7.CJwMJZue.js} +1 -1
- package/build/client/_app/immutable/nodes/7.CJwMJZue.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CJwMJZue.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-Dk6RRhi2.js → 0-BSfigTUQ.js} +4 -4
- package/build/server/chunks/{0-Dk6RRhi2.js.map → 0-BSfigTUQ.js.map} +1 -1
- package/build/server/chunks/1-CMQKOdKD.js +9 -0
- package/build/server/chunks/{1-CWcY3PRs.js.map → 1-CMQKOdKD.js.map} +1 -1
- package/build/server/chunks/4-DLPu7Zn2.js +9 -0
- package/build/server/chunks/{4-DeAt_mYc.js.map → 4-DLPu7Zn2.js.map} +1 -1
- package/build/server/chunks/5-D2qJw2oW.js +9 -0
- package/build/server/chunks/{5-qTXiNPEM.js.map → 5-D2qJw2oW.js.map} +1 -1
- package/build/server/chunks/6-Dtj1x2xS.js +9 -0
- package/build/server/chunks/{6-C444Mr69.js.map → 6-Dtj1x2xS.js.map} +1 -1
- package/build/server/chunks/7-DmB_gD85.js +9 -0
- package/build/server/chunks/{7-Dg_sVly5.js.map → 7-DmB_gD85.js.map} +1 -1
- package/build/server/chunks/{AuthGate-keg7G6rX.js → AuthGate-DCzipUOa.js} +23 -4
- package/build/server/chunks/AuthGate-DCzipUOa.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-BNWepgTx.js → _layout.svelte-CWc5uRoo.js} +11 -9
- package/build/server/chunks/{_layout.svelte-BNWepgTx.js.map → _layout.svelte-CWc5uRoo.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CtX_8pMq.js → _page.svelte-B9uFpwlC.js} +6 -6
- package/build/server/chunks/{_page.svelte-CtX_8pMq.js.map → _page.svelte-B9uFpwlC.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BiKY57wg.js → _page.svelte-CLlVK06N.js} +32 -18
- package/build/server/chunks/_page.svelte-CLlVK06N.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DwMiUmq6.js → _page.svelte-CXnzFLVM.js} +6 -6
- package/build/server/chunks/{_page.svelte-DwMiUmq6.js.map → _page.svelte-CXnzFLVM.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BdYSYjmj.js → _page.svelte-D6iSQwSa.js} +6 -6
- package/build/server/chunks/{_page.svelte-BdYSYjmj.js.map → _page.svelte-D6iSQwSa.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DwXd92Ow.js → _server.ts--lBTTJTc.js} +5 -5
- package/build/server/chunks/{_server.ts-DwXd92Ow.js.map → _server.ts--lBTTJTc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-l_HoZ2_I.js → _server.ts-3Q27Je1p.js} +4 -4
- package/build/server/chunks/{_server.ts-l_HoZ2_I.js.map → _server.ts-3Q27Je1p.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DsEzCr9k.js → _server.ts-4KkJ4SW0.js} +4 -4
- package/build/server/chunks/{_server.ts-DsEzCr9k.js.map → _server.ts-4KkJ4SW0.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CHVs0yya.js → _server.ts-8W7d7SoL.js} +4 -4
- package/build/server/chunks/{_server.ts-CHVs0yya.js.map → _server.ts-8W7d7SoL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CGqrfNlv.js → _server.ts-9rxck4Bq.js} +4 -4
- package/build/server/chunks/{_server.ts-CGqrfNlv.js.map → _server.ts-9rxck4Bq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-WbY7XmtT.js → _server.ts-B0Fde1SO.js} +6 -6
- package/build/server/chunks/{_server.ts-WbY7XmtT.js.map → _server.ts-B0Fde1SO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BEeaI665.js → _server.ts-B1F39kvX.js} +4 -4
- package/build/server/chunks/{_server.ts-BEeaI665.js.map → _server.ts-B1F39kvX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-0FuXkx70.js → _server.ts-B3IxKvYj.js} +4 -4
- package/build/server/chunks/{_server.ts-0FuXkx70.js.map → _server.ts-B3IxKvYj.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CWwgmo8z.js → _server.ts-BDRe9Abk.js} +2 -2
- package/build/server/chunks/{_server.ts-CWwgmo8z.js.map → _server.ts-BDRe9Abk.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CS73tiTY.js → _server.ts-BG1Q5Cg7.js} +4 -4
- package/build/server/chunks/{_server.ts-CS73tiTY.js.map → _server.ts-BG1Q5Cg7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Ci-q0BiD.js → _server.ts-BGOf6ZAe.js} +4 -4
- package/build/server/chunks/{_server.ts-Ci-q0BiD.js.map → _server.ts-BGOf6ZAe.js.map} +1 -1
- package/build/server/chunks/{_server.ts-JItoNB1Z.js → _server.ts-BGo79CrH.js} +5 -6
- package/build/server/chunks/_server.ts-BGo79CrH.js.map +1 -0
- package/build/server/chunks/{_server.ts-ByyRcwFy.js → _server.ts-BHY6pU_t.js} +4 -4
- package/build/server/chunks/{_server.ts-ByyRcwFy.js.map → _server.ts-BHY6pU_t.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BDBJ6fxs.js → _server.ts-BKUT0g1w.js} +4 -4
- package/build/server/chunks/{_server.ts-BDBJ6fxs.js.map → _server.ts-BKUT0g1w.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CGwYZUuw.js → _server.ts-BMxPCfPF.js} +4 -4
- package/build/server/chunks/{_server.ts-CGwYZUuw.js.map → _server.ts-BMxPCfPF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DffjWMNC.js → _server.ts-BOZ6j_Dh.js} +4 -4
- package/build/server/chunks/{_server.ts-DffjWMNC.js.map → _server.ts-BOZ6j_Dh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BdnJF23z.js → _server.ts-BOZd9IEG.js} +4 -4
- package/build/server/chunks/{_server.ts-BdnJF23z.js.map → _server.ts-BOZd9IEG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CD6LeslU.js → _server.ts-BQIKbZE5.js} +4 -4
- package/build/server/chunks/{_server.ts-CD6LeslU.js.map → _server.ts-BQIKbZE5.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BjiyoKWK.js → _server.ts-BQuqaIiA.js} +4 -4
- package/build/server/chunks/{_server.ts-BjiyoKWK.js.map → _server.ts-BQuqaIiA.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Di-8UJYw.js → _server.ts-BR50MxK6.js} +4 -4
- package/build/server/chunks/{_server.ts-Di-8UJYw.js.map → _server.ts-BR50MxK6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bq2dkWvj.js → _server.ts-BX6vXBw6.js} +4 -4
- package/build/server/chunks/{_server.ts-Bq2dkWvj.js.map → _server.ts-BX6vXBw6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-KpT_vKKo.js → _server.ts-BY8Bwuii.js} +5 -5
- package/build/server/chunks/{_server.ts-KpT_vKKo.js.map → _server.ts-BY8Bwuii.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D1cb1hmF.js → _server.ts-BZ-j5EzC.js} +4 -4
- package/build/server/chunks/{_server.ts-D1cb1hmF.js.map → _server.ts-BZ-j5EzC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Yy0BWsSd.js → _server.ts-BaVWFrdS.js} +4 -4
- package/build/server/chunks/{_server.ts-Yy0BWsSd.js.map → _server.ts-BaVWFrdS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BnEeEd9g.js → _server.ts-BbgQGbyq.js} +4 -4
- package/build/server/chunks/{_server.ts-BnEeEd9g.js.map → _server.ts-BbgQGbyq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Br16AqpO.js → _server.ts-BgsLpMRV.js} +6 -6
- package/build/server/chunks/{_server.ts-Br16AqpO.js.map → _server.ts-BgsLpMRV.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DXNJ2LJu.js → _server.ts-BgvH4tTI.js} +4 -4
- package/build/server/chunks/{_server.ts-DXNJ2LJu.js.map → _server.ts-BgvH4tTI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Btbzy89u.js → _server.ts-BmanVk6i.js} +2 -2
- package/build/server/chunks/{_server.ts-Btbzy89u.js.map → _server.ts-BmanVk6i.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C_kseo_y.js → _server.ts-ByWgyQWs.js} +4 -4
- package/build/server/chunks/{_server.ts-C_kseo_y.js.map → _server.ts-ByWgyQWs.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bhh33s6N.js → _server.ts-C-Elv1Q4.js} +2 -2
- package/build/server/chunks/{_server.ts-Bhh33s6N.js.map → _server.ts-C-Elv1Q4.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BxPYakCb.js → _server.ts-C2ePDxiK.js} +2 -2
- package/build/server/chunks/{_server.ts-BxPYakCb.js.map → _server.ts-C2ePDxiK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D33gvU5B.js → _server.ts-C5dSIi-F.js} +5 -5
- package/build/server/chunks/{_server.ts-D33gvU5B.js.map → _server.ts-C5dSIi-F.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BudQlGOx.js → _server.ts-CMXy3OdG.js} +4 -4
- package/build/server/chunks/{_server.ts-BudQlGOx.js.map → _server.ts-CMXy3OdG.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CMEY6oQe.js → _server.ts-CQL1JlrR.js} +4 -4
- package/build/server/chunks/{_server.ts-CMEY6oQe.js.map → _server.ts-CQL1JlrR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C7rtn3mH.js → _server.ts-CT_87l-n.js} +4 -4
- package/build/server/chunks/{_server.ts-C7rtn3mH.js.map → _server.ts-CT_87l-n.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BM4QuGQf.js → _server.ts-CUJncs7u.js} +4 -4
- package/build/server/chunks/{_server.ts-BM4QuGQf.js.map → _server.ts-CUJncs7u.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DHXmcRrP.js → _server.ts-CUYnnr4e.js} +4 -4
- package/build/server/chunks/{_server.ts-DHXmcRrP.js.map → _server.ts-CUYnnr4e.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D-UAqhor.js → _server.ts-CXxVw4DS.js} +4 -4
- package/build/server/chunks/{_server.ts-D-UAqhor.js.map → _server.ts-CXxVw4DS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DwjjO7L5.js → _server.ts-CZNebjxj.js} +4 -4
- package/build/server/chunks/{_server.ts-DwjjO7L5.js.map → _server.ts-CZNebjxj.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CyFZ9OZQ.js → _server.ts-CZtZD9XA.js} +4 -4
- package/build/server/chunks/{_server.ts-CyFZ9OZQ.js.map → _server.ts-CZtZD9XA.js.map} +1 -1
- package/build/server/chunks/{_server.ts-HxcM6xQA.js → _server.ts-CjD_N1lk.js} +4 -4
- package/build/server/chunks/{_server.ts-HxcM6xQA.js.map → _server.ts-CjD_N1lk.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BiSuK8jN.js → _server.ts-CqaBfyP8.js} +2 -2
- package/build/server/chunks/{_server.ts-BiSuK8jN.js.map → _server.ts-CqaBfyP8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B0N2Nj7L.js → _server.ts-Cx5w0uV8.js} +4 -4
- package/build/server/chunks/{_server.ts-B0N2Nj7L.js.map → _server.ts-Cx5w0uV8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-b9yNYKW6.js → _server.ts-D0VWz3Eu.js} +4 -4
- package/build/server/chunks/{_server.ts-b9yNYKW6.js.map → _server.ts-D0VWz3Eu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-hMTx0DC3.js → _server.ts-D79sBzeS.js} +4 -4
- package/build/server/chunks/{_server.ts-hMTx0DC3.js.map → _server.ts-D79sBzeS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DQxY-pHZ.js → _server.ts-DDw-3STN.js} +4 -4
- package/build/server/chunks/{_server.ts-DQxY-pHZ.js.map → _server.ts-DDw-3STN.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CboRRTK1.js → _server.ts-DG8rrhwk.js} +5 -5
- package/build/server/chunks/{_server.ts-CboRRTK1.js.map → _server.ts-DG8rrhwk.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BV-6Mum8.js → _server.ts-DHvirvMi.js} +4 -4
- package/build/server/chunks/{_server.ts-BV-6Mum8.js.map → _server.ts-DHvirvMi.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DyEbcQS0.js → _server.ts-DQFt8uqd.js} +4 -4
- package/build/server/chunks/{_server.ts-DyEbcQS0.js.map → _server.ts-DQFt8uqd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cbk-UThV.js → _server.ts-DRITlKJZ.js} +5 -5
- package/build/server/chunks/{_server.ts-Cbk-UThV.js.map → _server.ts-DRITlKJZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DDwiNChJ.js → _server.ts-DUIcweGe.js} +4 -4
- package/build/server/chunks/{_server.ts-DDwiNChJ.js.map → _server.ts-DUIcweGe.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cy36-qGT.js → _server.ts-DVcfUcfK.js} +4 -4
- package/build/server/chunks/{_server.ts-Cy36-qGT.js.map → _server.ts-DVcfUcfK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dbly1Fe-.js → _server.ts-DXZGlkbn.js} +5 -5
- package/build/server/chunks/{_server.ts-Dbly1Fe-.js.map → _server.ts-DXZGlkbn.js.map} +1 -1
- package/build/server/chunks/{_server.ts-5Q0J3F4-.js → _server.ts-DXkkp8dY.js} +4 -4
- package/build/server/chunks/{_server.ts-5Q0J3F4-.js.map → _server.ts-DXkkp8dY.js.map} +1 -1
- package/build/server/chunks/{_server.ts-uWfb47S6.js → _server.ts-DfGAcelA.js} +6 -6
- package/build/server/chunks/{_server.ts-uWfb47S6.js.map → _server.ts-DfGAcelA.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CDlWxA5S.js → _server.ts-DhZYsdNy.js} +4 -4
- package/build/server/chunks/{_server.ts-CDlWxA5S.js.map → _server.ts-DhZYsdNy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C88qd-ju.js → _server.ts-DlAVNe3N.js} +3 -3
- package/build/server/chunks/{_server.ts-C88qd-ju.js.map → _server.ts-DlAVNe3N.js.map} +1 -1
- package/build/server/chunks/{_server.ts-cwRl-tZ-.js → _server.ts-DtxwCTTn.js} +4 -4
- package/build/server/chunks/{_server.ts-cwRl-tZ-.js.map → _server.ts-DtxwCTTn.js.map} +1 -1
- package/build/server/chunks/_server.ts-E0fukP1O.js +82 -0
- package/build/server/chunks/_server.ts-E0fukP1O.js.map +1 -0
- package/build/server/chunks/{_server.ts-CXzZeGlQ.js → _server.ts-EQcQPIxU.js} +4 -4
- package/build/server/chunks/{_server.ts-CXzZeGlQ.js.map → _server.ts-EQcQPIxU.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cn7ahHlk.js → _server.ts-GPzYT0sb.js} +4 -4
- package/build/server/chunks/{_server.ts-Cn7ahHlk.js.map → _server.ts-GPzYT0sb.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CgD8-EFl.js → _server.ts-I35XVwCd.js} +5 -5
- package/build/server/chunks/{_server.ts-CgD8-EFl.js.map → _server.ts-I35XVwCd.js.map} +1 -1
- package/build/server/chunks/{_server.ts-AQe1PIYE.js → _server.ts-PxpDZztC.js} +4 -4
- package/build/server/chunks/{_server.ts-AQe1PIYE.js.map → _server.ts-PxpDZztC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-AJk0xBLJ.js → _server.ts-RXSRu6ve.js} +4 -4
- package/build/server/chunks/{_server.ts-AJk0xBLJ.js.map → _server.ts-RXSRu6ve.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DEnxvwcJ.js → _server.ts-Z9Mn2O3V.js} +4 -4
- package/build/server/chunks/{_server.ts-DEnxvwcJ.js.map → _server.ts-Z9Mn2O3V.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BsZrddQT.js → _server.ts-aEcRsOln.js} +6 -6
- package/build/server/chunks/{_server.ts-BsZrddQT.js.map → _server.ts-aEcRsOln.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bfy4RFhe.js → _server.ts-g6AfW6Yv.js} +4 -4
- package/build/server/chunks/{_server.ts-Bfy4RFhe.js.map → _server.ts-g6AfW6Yv.js.map} +1 -1
- package/build/server/chunks/{_server.ts-bAJXjaCc.js → _server.ts-kjqHYD8N.js} +4 -4
- package/build/server/chunks/{_server.ts-bAJXjaCc.js.map → _server.ts-kjqHYD8N.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BSIZMZVn.js → _server.ts-lKesIiS8.js} +4 -4
- package/build/server/chunks/{_server.ts-BSIZMZVn.js.map → _server.ts-lKesIiS8.js.map} +1 -1
- package/build/server/chunks/{addon-helpers-Bnj3aKJ2.js → addon-helpers-8efgpHMX.js} +2 -2
- package/build/server/chunks/{addon-helpers-Bnj3aKJ2.js.map → addon-helpers-8efgpHMX.js.map} +1 -1
- package/build/server/chunks/{config-CEYPfvQh.js → config-1dyh_9h4.js} +2 -2
- package/build/server/chunks/{config-CEYPfvQh.js.map → config-1dyh_9h4.js.map} +1 -1
- package/build/server/chunks/{docker-sGFTjRfy.js → docker-DggffvOl.js} +2 -2
- package/build/server/chunks/{docker-sGFTjRfy.js.map → docker-DggffvOl.js.map} +1 -1
- package/build/server/chunks/{endpoints-L7Wjvq44.js → endpoints-kaPFORka.js} +2 -2
- package/build/server/chunks/{endpoints-L7Wjvq44.js.map → endpoints-kaPFORka.js.map} +1 -1
- package/build/server/chunks/{environment-BnT49Gi3.js → environment-9I43EDnv.js} +2 -2
- package/build/server/chunks/{environment-BnT49Gi3.js.map → environment-9I43EDnv.js.map} +1 -1
- package/build/server/chunks/{error.svelte-PJnhZZCy.js → error.svelte-BhAtOJnJ.js} +3 -3
- package/build/server/chunks/{error.svelte-PJnhZZCy.js.map → error.svelte-BhAtOJnJ.js.map} +1 -1
- package/build/server/chunks/{helpers-5jd3ccud.js → helpers-B8h4zchW.js} +3 -3
- package/build/server/chunks/{helpers-5jd3ccud.js.map → helpers-B8h4zchW.js.map} +1 -1
- package/build/server/chunks/{hooks.server-Al9-eO5K.js → hooks.server-DERyGNuF.js} +4 -4
- package/build/server/chunks/{hooks.server-Al9-eO5K.js.map → hooks.server-DERyGNuF.js.map} +1 -1
- package/build/server/chunks/{http-D5xo_m60.js → http-8UL6GfDM.js} +2 -2
- package/build/server/chunks/{http-D5xo_m60.js.map → http-8UL6GfDM.js.map} +1 -1
- package/build/server/chunks/{internal-CJBOAkaQ.js → internal-CGO6-n-l.js} +4 -4
- package/build/server/chunks/{internal-CJBOAkaQ.js.map → internal-CGO6-n-l.js.map} +1 -1
- package/build/server/chunks/{setup-deploy-UKTSVAC0.js → setup-deploy-M7it9qqu.js} +2 -2
- package/build/server/chunks/{setup-deploy-UKTSVAC0.js.map → setup-deploy-M7it9qqu.js.map} +1 -1
- package/build/server/chunks/{src-FpMyngcw.js → src-BsgfqG_-.js} +24 -9
- package/build/server/chunks/src-BsgfqG_-.js.map +1 -0
- package/build/server/chunks/{state-BI-lJPhE.js → state-CxWVaiQ-.js} +2 -2
- package/build/server/chunks/{state-BI-lJPhE.js.map → state-CxWVaiQ-.js.map} +1 -1
- package/build/server/chunks/{voice-state.svelte-CQp8u0bn.js → theme-state.svelte-wqhXqgCA.js} +100 -2
- package/build/server/chunks/theme-state.svelte-wqhXqgCA.js.map +1 -0
- package/build/server/index.js +2 -2
- package/build/server/manifest.js +82 -75
- package/build/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/build/client/_app/immutable/assets/0.BK7X4bPu.css +0 -1
- package/build/client/_app/immutable/assets/0.BK7X4bPu.css.br +0 -0
- package/build/client/_app/immutable/assets/0.BK7X4bPu.css.gz +0 -0
- package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css +0 -1
- package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css.br +0 -0
- package/build/client/_app/immutable/assets/AuthGate.BtJV-xXj.css.gz +0 -0
- package/build/client/_app/immutable/chunks/C8qMxft1.js +0 -1
- package/build/client/_app/immutable/chunks/C8qMxft1.js.br +0 -0
- package/build/client/_app/immutable/chunks/C8qMxft1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CzXGhlNF.js.br +0 -0
- package/build/client/_app/immutable/chunks/CzXGhlNF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DYskO3Sk.js +0 -5
- package/build/client/_app/immutable/chunks/DYskO3Sk.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYskO3Sk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ak2ISc8B.js.br +0 -0
- package/build/client/_app/immutable/chunks/ak2ISc8B.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.C_eSlUyi.js.br +0 -0
- package/build/client/_app/immutable/entry/app.C_eSlUyi.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BAta_Cih.js +0 -1
- package/build/client/_app/immutable/entry/start.BAta_Cih.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BAta_Cih.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Bi_of0So.js +0 -1
- package/build/client/_app/immutable/nodes/0.Bi_of0So.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Bi_of0So.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.qjZsjpWC.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.qjZsjpWC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BYtA2xx-.js +0 -19
- package/build/client/_app/immutable/nodes/4.BYtA2xx-.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BYtA2xx-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.ChSoAFFd.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.ChSoAFFd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BRG0vYmH.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BRG0vYmH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.BVvy1f_p.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.BVvy1f_p.js.gz +0 -0
- package/build/server/chunks/1-CWcY3PRs.js +0 -9
- package/build/server/chunks/4-DeAt_mYc.js +0 -9
- package/build/server/chunks/5-qTXiNPEM.js +0 -9
- package/build/server/chunks/6-C444Mr69.js +0 -9
- package/build/server/chunks/7-Dg_sVly5.js +0 -9
- package/build/server/chunks/AuthGate-keg7G6rX.js.map +0 -1
- package/build/server/chunks/_page.svelte-BiKY57wg.js.map +0 -1
- package/build/server/chunks/_server.ts-JItoNB1Z.js.map +0 -1
- package/build/server/chunks/src-FpMyngcw.js.map +0 -1
- package/build/server/chunks/voice-state.svelte-CQp8u0bn.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{A as e,B as t,D as n,E as r,G as i,I as a,J as o,K as s,M as c,N as l,O as u,P as d,Q as f,T as p,V as m,W as h,X as g,Y as _,Z as v,c as y,ct as b,d as x,et as S,f as C,g as w,h as T,it as E,j as D,k as O,l as k,m as A,n as j,p as M,q as N,r as P,rt as F,s as I,st as L,u as R,v as z,w as B,y as V}from"../chunks/BwTF6U35.js";import"../chunks/xihTtKlq.js";import{$ as H,A as U,C as W,D as G,E as K,F as q,G as J,H as ee,I as te,K as ne,L as re,M as ie,N as Y,P as ae,R as oe,S as se,T as ce,U as le,W as ue,X as de,Z as fe,a as pe,b as me,d as X,f as he,j as ge,k as _e,m as ve,o as ye,p as be,q as xe,u as Se,v as Ce,w as we,x as Z,y as Q}from"../chunks/DXseS2Vw.js";import{n as $,r as Te,t as Ee}from"../chunks/CF3TKiGr.js";import{n as De,t as Oe}from"../chunks/Cb_i8bV9.js";var ke=e(`<div class="tabs svelte-1wwzsr0" role="tablist"><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"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg> Overview</button> <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"><path d="M12 2L2 7l10 5 10-5-10-5z"></path><path d="M2 17l10 5 10-5"></path><path d="M2 12l10 5 10-5"></path></svg> Addons</button> <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"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> Automations</button> <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"><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><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg> Connections</button> <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"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg> Secrets</button> <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"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line></svg> Voice</button> <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"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg> Knowledge</button> <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"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg> Containers</button> <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"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg> Logs</button></div>`);function Ae(e,t){E(t,!0);function n(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);if(r===-1)return;let i;i=e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length,n[i]?.focus()}var r=ke(),i=N(r);let a;var o=_(i,2);let s;var c=_(o,2);let l;var f=_(c,2);let p;var h=_(f,2);let g;var v=_(h,2);let y;var S=_(v,2);let C;var w=_(S,2);let T;var D=_(w,2);let O;b(r),m(()=>{a=z(i,1,`tab svelte-1wwzsr0`,null,a,{"tab-active":t.active===`overview`}),x(i,`aria-selected`,t.active===`overview`),s=z(o,1,`tab svelte-1wwzsr0`,null,s,{"tab-active":t.active===`addons`}),x(o,`aria-selected`,t.active===`addons`),l=z(c,1,`tab svelte-1wwzsr0`,null,l,{"tab-active":t.active===`automations`}),x(c,`aria-selected`,t.active===`automations`),p=z(f,1,`tab svelte-1wwzsr0`,null,p,{"tab-active":t.active===`connections`}),x(f,`aria-selected`,t.active===`connections`),g=z(h,1,`tab svelte-1wwzsr0`,null,g,{"tab-active":t.active===`secrets`}),x(h,`aria-selected`,t.active===`secrets`),y=z(v,1,`tab svelte-1wwzsr0`,null,y,{"tab-active":t.active===`voice`}),x(v,`aria-selected`,t.active===`voice`),C=z(S,1,`tab svelte-1wwzsr0`,null,C,{"tab-active":t.active===`akm`}),x(S,`aria-selected`,t.active===`akm`),T=z(w,1,`tab svelte-1wwzsr0`,null,T,{"tab-active":t.active===`containers`}),x(w,`aria-selected`,t.active===`containers`),O=z(D,1,`tab svelte-1wwzsr0`,null,O,{"tab-active":t.active===`logs`}),x(D,`aria-selected`,t.active===`logs`)}),d(`click`,i,()=>t.onSelect(`overview`)),d(`keydown`,i,n),d(`click`,o,()=>t.onSelect(`addons`)),d(`keydown`,o,n),d(`click`,c,()=>t.onSelect(`automations`)),d(`keydown`,c,n),d(`click`,f,()=>t.onSelect(`connections`)),d(`keydown`,f,n),d(`click`,h,()=>t.onSelect(`secrets`)),d(`keydown`,h,n),d(`click`,v,()=>t.onSelect(`voice`)),d(`keydown`,v,n),d(`click`,S,()=>t.onSelect(`akm`)),d(`keydown`,S,n),d(`click`,w,()=>t.onSelect(`containers`)),d(`keydown`,w,n),d(`click`,D,()=>t.onSelect(`logs`)),d(`keydown`,D,n),u(e,r),F()}l([`click`,`keydown`]);var je=e(`<section><div class="output-header svelte-1ob1zsm"><h3 class="svelte-1ob1zsm">Operation Output</h3> <button class="btn-ghost svelte-1ob1zsm" 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" class="svelte-1ob1zsm"><line x1="18" y1="6" x2="6" y2="18" class="svelte-1ob1zsm"></line><line x1="6" y1="6" x2="18" y2="18" class="svelte-1ob1zsm"></line></svg></button></div> <pre class="output-code svelte-1ob1zsm"> </pre></section>`),Me=e(`<span class="spinner svelte-1ob1zsm"></span>`),Ne=D(`<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" class="svelte-1ob1zsm"><path d="M22 12h-4l-3 9L9 3l-3 9H2" class="svelte-1ob1zsm"></path></svg>`),Pe=e(`<span class="spinner svelte-1ob1zsm"></span>`),Fe=D(`<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" class="svelte-1ob1zsm"><polyline points="16 16 12 12 8 16" class="svelte-1ob1zsm"></polyline><line x1="12" y1="12" x2="12" y2="21" class="svelte-1ob1zsm"></line><path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3" class="svelte-1ob1zsm"></path></svg>`),Ie=e(`<span> </span>`),Le=e(`<span class="badge badge-idle svelte-1ob1zsm">Unknown</span>`),Re=e(`<span class="badge badge-success svelte-1ob1zsm">Running</span>`),ze=e(`<span class="badge badge-danger svelte-1ob1zsm">Stopped</span>`),Be=e(`<span class="badge badge-idle svelte-1ob1zsm">Unknown</span>`),Ve=e(`<span class="badge badge-success svelte-1ob1zsm"> </span>`),He=e(`<span class="badge badge-warning svelte-1ob1zsm"> </span>`),Ue=e(`<span class="badge badge-danger svelte-1ob1zsm"> </span>`),We=e(`<span class="badge badge-idle svelte-1ob1zsm">Unknown</span>`),Ge=e(`<span class="badge badge-success svelte-1ob1zsm">Connected</span>`),Ke=e(`<span class="badge badge-danger svelte-1ob1zsm">Disconnected</span>`),qe=e(`<span class="badge badge-idle svelte-1ob1zsm">Unknown</span>`),Je=e(`<span class="info-mono svelte-1ob1zsm"> </span>`),Ye=e(`<span class="badge badge-idle svelte-1ob1zsm">Loading</span>`),Xe=e(`<div class="version-select-skeleton svelte-1ob1zsm"></div>`),Ze=e(`<option class="svelte-1ob1zsm"> </option>`),Qe=e(`<select class="version-select svelte-1ob1zsm"><option class="svelte-1ob1zsm">latest</option><!></select>`),$e=e(`<input class="version-input svelte-1ob1zsm" type="text" placeholder="e.g. 0.11.0 or latest"/>`),et=e(`<span class="spinner spinner-sm svelte-1ob1zsm"></span> Applying…`,1),tt=e(`<span class="spinner spinner-sm svelte-1ob1zsm"></span> Upgrading…`,1),nt=e(`<div class="version-select-skeleton svelte-1ob1zsm"></div>`),rt=e(`<option class="svelte-1ob1zsm"> </option>`),it=e(`<select class="version-select svelte-1ob1zsm"></select>`),at=e(`<input class="version-input svelte-1ob1zsm" type="text" placeholder="e.g. 0.11.0-beta.7"/>`),ot=e(`<span class="spinner spinner-sm svelte-1ob1zsm"></span> Downloading…`,1),st=e(`<div class="version-restart-prompt svelte-1ob1zsm">UI updated. <button class="btn btn-sm btn-primary svelte-1ob1zsm">Restart App</button></div>`),ct=e(`<p class="version-hint svelte-1ob1zsm">Downloads and replaces the UI from GitHub. Takes effect on restart.</p>`),lt=e(`<div class="version-section svelte-1ob1zsm"><div class="version-input-row svelte-1ob1zsm"><!> <button class="btn btn-sm svelte-1ob1zsm"><!></button></div> <!></div>`),ut=e(`<div role="status" aria-live="polite"><span class="health-dot svelte-1ob1zsm"></span> <span class="health-msg svelte-1ob1zsm"> </span></div> <!> <div class="panel-grid svelte-1ob1zsm" role="tabpanel"><div class="panel svelte-1ob1zsm"><div class="panel-header svelte-1ob1zsm"><h2 class="svelte-1ob1zsm">Quick Actions</h2></div> <div class="panel-body svelte-1ob1zsm"><div class="action-list svelte-1ob1zsm"><button class="action-item svelte-1ob1zsm"><span class="action-icon action-icon--blue svelte-1ob1zsm"><!></span> <div class="action-content svelte-1ob1zsm"><span class="action-title svelte-1ob1zsm">Health Check</span> <span class="action-desc svelte-1ob1zsm">Verify admin and guardian services are reachable</span></div> <span class="action-arrow svelte-1ob1zsm"><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" class="svelte-1ob1zsm"><polyline points="9 18 15 12 9 6" class="svelte-1ob1zsm"></polyline></svg></span></button> <button class="action-item svelte-1ob1zsm"><span class="action-icon action-icon--blue svelte-1ob1zsm"><!></span> <div class="action-content svelte-1ob1zsm"><span class="action-title svelte-1ob1zsm">Apply Config + Restart</span> <span class="action-desc svelte-1ob1zsm">Update configuration and restart running services</span> <span class="action-hint svelte-1ob1zsm">Restarts services with updated compose config.</span></div> <span class="action-arrow svelte-1ob1zsm"><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" class="svelte-1ob1zsm"><polyline points="9 18 15 12 9 6" class="svelte-1ob1zsm"></polyline></svg></span></button> <a class="action-item svelte-1ob1zsm" href="/setup?rerun=1"><span class="action-icon action-icon--purple svelte-1ob1zsm"><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" class="svelte-1ob1zsm"><circle cx="12" cy="12" r="3" class="svelte-1ob1zsm"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14" class="svelte-1ob1zsm"></path></svg></span> <div class="action-content svelte-1ob1zsm"><span class="action-title svelte-1ob1zsm">Update Settings</span> <span class="action-desc svelte-1ob1zsm">Re-run setup wizard to change providers, channels, or options</span></div> <span class="action-arrow svelte-1ob1zsm"><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" class="svelte-1ob1zsm"><polyline points="9 18 15 12 9 6" class="svelte-1ob1zsm"></polyline></svg></span></a> <a class="action-item svelte-1ob1zsm" href="/advanced"><span class="action-icon action-icon--blue svelte-1ob1zsm"><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" class="svelte-1ob1zsm"><rect x="3" y="3" width="18" height="18" rx="2" ry="2" class="svelte-1ob1zsm"></rect><path d="M9 9h6v6H9z" class="svelte-1ob1zsm"></path></svg></span> <div class="action-content svelte-1ob1zsm"><span class="action-title svelte-1ob1zsm">Advanced Chat (OpenCode)</span> <span class="action-desc svelte-1ob1zsm">Open the full OpenCode UI embedded in OpenPalm — host machine only</span></div> <span class="action-arrow svelte-1ob1zsm"><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" class="svelte-1ob1zsm"><polyline points="9 18 15 12 9 6" class="svelte-1ob1zsm"></polyline></svg></span></a></div></div></div> <div class="panel svelte-1ob1zsm"><div class="panel-header svelte-1ob1zsm"><h2 class="svelte-1ob1zsm">System Information</h2></div> <div class="panel-body svelte-1ob1zsm"><div class="info-grid svelte-1ob1zsm"><div class="info-item svelte-1ob1zsm"><span class="info-label svelte-1ob1zsm">Admin API</span> <span class="info-value svelte-1ob1zsm"><!></span></div> <div class="info-item svelte-1ob1zsm"><span class="info-label svelte-1ob1zsm">Guardian</span> <span class="info-value svelte-1ob1zsm"><!></span></div> <div class="info-item svelte-1ob1zsm"><span class="info-label svelte-1ob1zsm">Containers</span> <span class="info-value svelte-1ob1zsm"><!></span></div> <div class="info-item svelte-1ob1zsm"><span class="info-label svelte-1ob1zsm">Assistant</span> <span class="info-value svelte-1ob1zsm"><!></span></div> <div class="info-item svelte-1ob1zsm"><span class="info-label svelte-1ob1zsm">Automations</span> <span class="info-value svelte-1ob1zsm"><!></span></div></div></div></div> <div class="panel svelte-1ob1zsm"><div class="panel-header svelte-1ob1zsm"><h2 class="svelte-1ob1zsm">Version Management</h2></div> <div class="panel-body svelte-1ob1zsm"><div class="version-section svelte-1ob1zsm"><div class="version-row svelte-1ob1zsm"><span class="version-label svelte-1ob1zsm">Stack images</span> <code class="version-value version-value--active svelte-1ob1zsm"> </code></div> <div class="version-input-row svelte-1ob1zsm"><!> <button class="btn btn-sm svelte-1ob1zsm"><!></button></div> <p class="version-hint svelte-1ob1zsm">Pulls the selected images and restarts services.</p></div> <div class="version-divider svelte-1ob1zsm"></div> <div class="version-section svelte-1ob1zsm"><div class="version-row svelte-1ob1zsm"><span class="version-label svelte-1ob1zsm">Upgrade Stack</span></div> <div class="version-input-row svelte-1ob1zsm"><button class="btn btn-sm btn-warning svelte-1ob1zsm"><!></button></div> <p class="version-hint svelte-1ob1zsm">Downloads the latest assets, pulls images, and restarts services. Backs up current config first.</p></div> <div class="version-divider svelte-1ob1zsm"></div> <!></div></div></div>`,1);function dt(e,t){E(t,!0),P(()=>{Te.load()});function i(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 s=S(()=>t.automationsData?.automations.length??0),l=S(()=>t.automationsData?.automations.filter(e=>e.enabled).length??0),f=S(()=>t.mergedServices.size===0?null:{total:t.mergedServices.size,running:[...t.mergedServices.values()].filter(e=>e===`running`).length}),p=S(()=>{let e=t.mergedServices.get(`guardian`);return e===`running`?`running`:e===`stopped`||e===`exited`||e===`created`||e?`stopped`:`unknown`}),h=S(()=>{let e=t.mergedServices.get(`assistant`);return e===`running`?`connected`:e===`stopped`||e===`exited`||e===`created`||e?`disconnected`:`unknown`}),g=S(()=>a(f)?a(f).running===a(f).total&&a(f).total>0?{status:`ok`,message:`All ${a(f).total} services running`}:{status:`warning`,message:`${a(f).total-a(f).running} of ${a(f).total} services not running — check the Containers tab`}:{status:`unknown`,message:`Checking services…`});var v=ut(),y=o(v),x=_(N(y),2),C=N(x,!0);b(x),b(y);var D=_(y,2),k=e=>{var r=je(),i=N(r),a=_(N(i),2);b(i);var o=_(i,2),s=N(o,!0);b(o),b(r),m(()=>{z(r,1,`output-section output-section--${t.operationResultType??``}`,`svelte-1ob1zsm`),n(s,t.operationResult)}),d(`click`,a,function(...e){t.onDismissResult?.apply(this,e)}),u(e,r)};r(D,e=>{t.operationResult&&e(k)});var A=_(D,2),j=N(A),I=_(N(j),2),V=N(I),H=N(V),U=N(H),W=N(U),G=e=>{u(e,Me())},K=e=>{u(e,Ne())};r(W,e=>{t.healthLoading?e(G):e(K,-1)}),b(U),L(4),b(H);var q=_(H,2),J=N(q),ee=N(J),te=e=>{u(e,Pe())},ne=e=>{u(e,Fe())};r(ee,e=>{t.applyLoading?e(te):e(ne,-1)}),b(J),L(4),b(q),L(4),b(V),b(I),b(j);var re=_(j,2),ie=_(N(re),2),Y=N(ie),ae=N(Y),oe=_(N(ae),2),se=N(oe),ce=e=>{var r=Ie();let i;var a=N(r,!0);b(r),m(()=>{i=z(r,1,`badge svelte-1ob1zsm`,null,i,{"badge-success":t.adminHealth.status===`ok`,"badge-danger":t.adminHealth.status!==`ok`}),n(a,t.adminHealth.status)}),u(e,r)},le=e=>{u(e,Le())};r(se,e=>{t.adminHealth?e(ce):e(le,-1)}),b(oe),b(ae);var ue=_(ae,2),de=_(N(ue),2),fe=N(de),pe=e=>{u(e,Re())},me=e=>{u(e,ze())},X=e=>{u(e,Be())};r(fe,e=>{a(p)===`running`?e(pe):a(p)===`stopped`?e(me,1):e(X,-1)}),b(de),b(ue);var he=_(ue,2),ge=_(N(he),2),_e=N(ge),ve=e=>{var t=O(),i=o(t),s=e=>{var t=Ve(),r=N(t);b(t),m(()=>n(r,`${a(f).running??``} / ${a(f).total??``} running`)),u(e,t)},c=e=>{var t=He(),r=N(t);b(t),m(()=>n(r,`${a(f).running??``} / ${a(f).total??``} running`)),u(e,t)},l=e=>{var t=Ue(),r=N(t);b(t),m(()=>n(r,`0 / ${a(f).total??``} running`)),u(e,t)};r(i,e=>{a(f).running===a(f).total?e(s):a(f).running>0?e(c,1):e(l,-1)}),u(e,t)},ye=e=>{u(e,We())};r(_e,e=>{a(f)?e(ve):e(ye,-1)}),b(ge),b(he);var be=_(he,2),xe=_(N(be),2),Se=N(xe),Ce=e=>{u(e,Ge())},we=e=>{u(e,Ke())},Z=e=>{u(e,qe())};r(Se,e=>{a(h)===`connected`?e(Ce):a(h)===`disconnected`?e(we,1):e(Z,-1)}),b(xe),b(be);var Q=_(be,2),$=_(N(Q),2),Ee=N($),De=e=>{var t=Je(),r=N(t);b(t),m(()=>n(r,`${a(l)??``} active / ${a(s)??``} total`)),u(e,t)},Oe=e=>{u(e,Ye())};r(Ee,e=>{t.automationsData?e(De):e(Oe,-1)}),b($),b(Q),b(Y),b(ie),b(re);var ke=_(re,2),Ae=_(N(ke),2),dt=N(Ae),ft=N(dt),pt=_(N(ft),2),mt=N(pt,!0);b(pt),b(ft);var ht=_(ft,2),gt=N(ht),_t=e=>{u(e,Xe())},vt=e=>{var r=Qe(),i=N(r);i.value=i.__value=`latest`,B(_(i),17,()=>t.releases,e=>e.tag,(e,t)=>{var r=Ze(),i=N(r);b(r);var o={};m(()=>{n(i,`${a(t).tag??``}${a(t).prerelease?` (pre-release)`:``}`),o!==(o=a(t).tag)&&(r.value=(r.__value=a(t).tag)??``)}),u(e,r)}),b(r);var o;T(r),m(()=>{r.disabled=t.tagChangeLoading||t.anyDangerousLoading,o!==(o=t.selectedImageTag)&&(r.value=(r.__value=t.selectedImageTag)??``,w(r,t.selectedImageTag))}),d(`change`,r,e=>t.onSelectedImageTagChange(e.currentTarget.value)),u(e,r)},yt=e=>{var n=$e();R(n),m(()=>{M(n,t.selectedImageTag),n.disabled=t.tagChangeLoading||t.anyDangerousLoading}),d(`input`,n,e=>t.onSelectedImageTagChange(e.currentTarget.value)),u(e,n)};r(gt,e=>{t.releasesLoading?e(_t):t.releases.length>0?e(vt,1):e(yt,-1)});var bt=_(gt,2),xt=N(bt),St=e=>{var t=et();L(),u(e,t)},Ct=e=>{u(e,c(`Pull & Restart`))};r(xt,e=>{t.tagChangeLoading?e(St):e(Ct,-1)}),b(bt),b(ht),L(2),b(dt);var wt=_(dt,4),Tt=_(N(wt),2),Et=N(Tt),Dt=N(Et),Ot=e=>{var t=tt();L(),u(e,t)},kt=e=>{u(e,c(`Upgrade to Latest`))};r(Dt,e=>{t.upgradeLoading?e(Ot):e(kt,-1)}),b(Et),b(Tt),L(2),b(wt);var At=_(wt,4),jt=e=>{var o=lt(),s=N(o),l=N(s),f=e=>{u(e,nt())},p=e=>{var r=it();B(r,21,()=>t.uiVersions,e=>e.version,(e,t)=>{var r=rt(),o=N(r,!0);b(r);var s={};m(e=>{n(o,e),s!==(s=a(t).version)&&(r.value=(r.__value=a(t).version)??``)},[()=>i(a(t))]),u(e,r)}),b(r);var o;T(r),m(()=>{r.disabled=t.uiDownloadLoading,o!==(o=t.selectedUiTag)&&(r.value=(r.__value=t.selectedUiTag)??``,w(r,t.selectedUiTag))}),d(`change`,r,e=>t.onSelectedUiTagChange(e.currentTarget.value)),u(e,r)},h=e=>{var n=at();R(n),m(()=>{M(n,t.selectedUiTag),n.disabled=t.uiDownloadLoading}),d(`input`,n,e=>t.onSelectedUiTagChange(e.currentTarget.value)),u(e,n)};r(l,e=>{t.uiVersionsLoading?e(f):t.uiVersions.length>0?e(p,1):e(h,-1)});var g=_(l,2),v=N(g),y=e=>{var t=ot();L(),u(e,t)},x=e=>{u(e,c(`Download`))};r(v,e=>{t.uiDownloadLoading?e(y):e(x,-1)}),b(g),b(s);var S=_(s,2),C=e=>{var n=st(),r=_(N(n));b(n),d(`click`,r,function(...e){t.onRestartApp?.apply(this,e)}),u(e,n)},E=e=>{u(e,ct())};r(S,e=>{t.uiDownloadReady?e(C):e(E,-1)}),b(o),m(e=>g.disabled=e,[()=>!t.selectedUiTag.trim()||t.uiDownloadLoading]),d(`click`,g,()=>{t.selectedUiTag.trim()&&t.onDownloadUiVersion(t.selectedUiTag.trim())}),u(e,o)};r(At,e=>{t.inElectron&&e(jt)}),b(Ae),b(ke),b(A),m(e=>{z(y,1,`health-summary health-summary--${a(g).status??``}`,`svelte-1ob1zsm`),n(C,a(g).message),H.disabled=t.healthLoading,q.disabled=t.anyDangerousLoading||!t.tokenStored,n(mt,t.currentImageTag||`—`),bt.disabled=e,Et.disabled=t.anyDangerousLoading||!t.tokenStored},[()=>!t.selectedImageTag.trim()||t.tagChangeLoading||t.anyDangerousLoading]),d(`click`,H,function(...e){t.onCheckHealth?.apply(this,e)}),d(`click`,q,function(...e){t.onApplyChanges?.apply(this,e)}),d(`click`,bt,()=>{t.selectedImageTag.trim()&&t.onSetImageTag(t.selectedImageTag.trim())}),d(`click`,Et,function(...e){t.onUpgradeStack?.apply(this,e)}),u(e,v),F()}l([`click`,`change`,`input`]);var ft=e(`<span class="spinner"></span>`),pt=e(`<div class="loading-state"><span class="spinner"></span> <span>Loading addons...</span></div>`),mt=e(`<div class="error-state svelte-faz2je"><span> </span> <button class="btn btn-secondary btn-sm">Retry</button></div>`),ht=e(`<div class="empty-state"><svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5z"></path><path d="M2 17l10 5 10-5"></path><path d="M2 12l10 5 10-5"></path></svg> <p>No addons found in registry/addons/.</p></div>`),gt=e(`<span class="spinner"></span>`),_t=e(`<div class="creds-loading svelte-faz2je"><span class="spinner"></span> Loading credentials...</div>`),vt=e(`<p class="creds-empty svelte-faz2je">This addon has no configurable env vars (compose overlay only).</p>`),yt=e(`<span class="creds-tag svelte-faz2je">sensitive</span>`),bt=e(`<span class="creds-tag creds-tag--set svelte-faz2je">set</span>`),xt=e(`<p class="creds-desc svelte-faz2je"> </p>`),St=e(`<div class="creds-row svelte-faz2je"><label class="creds-label svelte-faz2je"><code class="svelte-faz2je"> </code> <!> <!></label> <!> <input class="form-input svelte-faz2je" autocomplete="off"/></div>`),Ct=e(`<span class="spinner"></span>`),wt=e(`<p class="creds-hint svelte-faz2je">Values are written to <code>knowledge/env/stack.env</code> and read by the addon container on next recreate.</p> <!> <div class="creds-actions svelte-faz2je"><button class="btn btn-primary btn-sm"><!> Save</button></div>`,1),Tt=e(`<div class="addon-creds svelte-faz2je"><!></div>`),Et=e(`<div class="addon-row svelte-faz2je"><span class="addon-col addon-col--name addon-name svelte-faz2je"> </span> <span class="addon-col addon-col--status svelte-faz2je"><span> </span></span> <span class="addon-col addon-col--actions svelte-faz2je"><button class="btn btn-sm btn-ghost"> </button> <button><!></button></span></div> <!>`,1),Dt=e(`<div class="addon-table svelte-faz2je"><div class="addon-table-header svelte-faz2je"><span class="addon-col addon-col--name svelte-faz2je">Addon</span> <span class="addon-col addon-col--status svelte-faz2je">Status</span> <span class="addon-col addon-col--actions svelte-faz2je"></span></div> <!></div>`),Ot=e(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Addons</h2> <p class="panel-subtitle">Optional features you can enable or disable. Credentials are written to the stack config and applied when the addon container restarts.</p></div> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div> <div class="panel-body panel-body--flush"><!></div></div>`);function kt(e,t){E(t,!0);let i=f(g([])),s=f(!1),l=f(``),p=f(null),h=f(null),y=g({}),S=g({}),C=f(null),w=f(null);async function T(){v(s,!0),v(l,``);try{v(i,await we(),!0)}catch(e){let n=e instanceof Error?e.message:String(e);if(n.includes(`401`)||n.includes(`403`)){t.onAuthError();return}v(l,n,!0)}finally{v(s,!1)}}async function D(e,n){v(p,e,!0);try{await fe(e,n),await T()}catch(e){let n=e instanceof Error?e.message:String(e);if(n.includes(`401`)||n.includes(`403`)){t.onAuthError();return}v(l,n,!0)}finally{v(p,null)}}async function O(e){if(a(h)===e){v(h,null);return}if(v(h,e,!0),!y[e]){v(C,e,!0);try{let t=await W(e);y[e]=t;let n={};for(let e of t)n[e.key]=e.sensitive?``:e.value;S[e]=n}catch(e){let n=e instanceof Error?e.message:String(e);if(n.includes(`401`)||n.includes(`403`)){t.onAuthError();return}X.push(`error`,`Could not load credentials: ${n}`)}finally{v(C,null)}}}async function A(e){v(w,e,!0);try{let t=y[e]??[],n=new Set(t.filter(e=>e.sensitive).map(e=>e.key)),r={},i=S[e]??{};for(let[e,t]of Object.entries(i))n.has(e)&&t===``||(r[e]=t);if(Object.keys(r).length===0){X.push(`error`,`Nothing to save.`);return}let{updated:a}=await le(e,r);X.push(`success`,`Saved ${a.length} field(s). Recreate the addon container to apply.`);let o=await W(e);y[e]=o;let s={...i};for(let e of o)e.sensitive&&(s[e.key]=``);S[e]=s}catch(e){let n=e instanceof Error?e.message:String(e);if(n.includes(`401`)||n.includes(`403`)){t.onAuthError();return}X.push(`error`,`Save failed: ${n}`)}finally{v(w,null)}}P(()=>{T()});var j=Ot(),M=N(j),I=_(N(M),2),V=N(I),H=e=>{u(e,ft())};r(V,e=>{a(s)&&e(H)}),L(),b(I),b(M);var U=_(M,2),G=N(U),K=e=>{u(e,pt())},q=e=>{var t=mt(),r=N(t),i=N(r,!0);b(r);var o=_(r,2);b(t),m(()=>n(i,a(l))),d(`click`,o,()=>T()),u(e,t)},J=e=>{u(e,ht())},ee=e=>{var t=Dt();B(_(N(t),2),17,()=>a(i),e=>e.name,(e,t)=>{var i=Et(),s=o(i),l=N(s),f=N(l,!0);b(l);var g=_(l,2),v=N(g);let T;var E=N(v,!0);b(v),b(g);var j=_(g,2),M=N(j),P=N(M,!0);b(M);var F=_(M,2);let I;var V=N(F),H=e=>{u(e,gt())},U=e=>{var r=c();m(()=>n(r,a(t).enabled?`Disable`:`Enable`)),u(e,r)};r(V,e=>{a(p)===a(t).name?e(H):e(U,-1)}),b(F),b(j),b(s);var W=_(s,2),G=e=>{var i=Tt(),s=N(i),c=e=>{u(e,_t())},l=e=>{u(e,vt())},f=e=>{var i=wt(),s=_(o(i),2);B(s,17,()=>y[a(t).name]??[],e=>e.key,(e,i)=>{var o=St(),s=N(o),c=N(s),l=N(c,!0);b(c);var d=_(c,2),f=e=>{u(e,yt())};r(d,e=>{a(i).sensitive&&e(f)});var p=_(d,2),h=e=>{u(e,bt())};r(p,e=>{a(i).sensitive&&a(i).set&&e(h)}),b(s);var g=_(s,2),v=e=>{var t=xt(),r=N(t,!0);b(t),m(()=>n(r,a(i).description)),u(e,t)};r(g,e=>{a(i).description&&e(v)});var y=_(g,2);R(y),b(o),m(()=>{x(s,`for`,`cred-${a(t).name??``}-${a(i).key??``}`),n(l,a(i).key),x(y,`id`,`cred-${a(t).name??``}-${a(i).key??``}`),x(y,`type`,a(i).sensitive?`password`:`text`),x(y,`placeholder`,a(i).sensitive&&a(i).set?`••••••• (leave empty to keep current)`:a(i).default)}),k(y,()=>S[a(t).name][a(i).key],e=>S[a(t).name][a(i).key]=e),u(e,o)});var c=_(s,2),l=N(c),f=N(l),p=e=>{u(e,Ct())};r(f,e=>{a(w)===a(t).name&&e(p)}),L(),b(l),b(c),m(()=>l.disabled=a(w)===a(t).name),d(`click`,l,()=>void A(a(t).name)),u(e,i)};r(s,e=>{a(C)===a(t).name?e(c):(y[a(t).name]?.length??0)===0?e(l,1):e(f,-1)}),b(i),u(e,i)};r(W,e=>{a(h)===a(t).name&&e(G)}),m(()=>{n(f,a(t).name),T=z(v,1,`badge`,null,T,{"badge-enabled":a(t).enabled,"badge-disabled":!a(t).enabled}),n(E,a(t).enabled?`enabled`:`disabled`),M.disabled=!a(t).available,x(M,`aria-expanded`,a(h)===a(t).name),n(P,a(h)===a(t).name?`Hide`:`Credentials`),I=z(F,1,`btn btn-sm`,null,I,{"btn-danger":a(t).enabled,"btn-outline":!a(t).enabled}),F.disabled=a(p)===a(t).name||!a(t).available}),d(`click`,M,()=>void O(a(t).name)),d(`click`,F,()=>D(a(t).name,!a(t).enabled)),u(e,i)}),b(t),u(e,t)};r(G,e=>{a(s)&&a(i).length===0?e(K):a(l)?e(q,1):a(i).length===0?e(J,2):e(ee,-1)}),b(U),b(j),m(()=>I.disabled=a(s)),d(`click`,I,()=>T()),u(e,j),F()}l([`click`]);var At=e(`<span class="last-updated svelte-ocbovv"> </span>`),jt=e(`<span class="spinner"></span>`),Mt=e(`<span class="spinner"></span>`),Nt=e(`<span class="ct-not-created svelte-ocbovv">--</span>`),Pt=e(`<span class="tag-badge svelte-ocbovv"> </span>`),Ft=e(`<span class="ct-not-created svelte-ocbovv">--</span>`),It=e(`<span class="detail-mono detail-digest svelte-ocbovv"> </span>`),Lt=e(`<div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Image Name</span> <span class="detail-value detail-mono svelte-ocbovv"> </span></div> <div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Tag / Digest</span> <span class="detail-value svelte-ocbovv"><span class="tag-badge tag-badge--lg svelte-ocbovv"> </span> <!></span></div>`,1),Rt=e(`<div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Health</span> <span class="detail-value svelte-ocbovv"><span> </span></span></div>`),zt=e(`<div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Ports</span> <span class="detail-value detail-mono svelte-ocbovv"> </span></div>`),Bt=e(`<div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Uptime</span> <span class="detail-value svelte-ocbovv"> </span></div>`),Vt=e(`<div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Created</span> <span class="detail-value svelte-ocbovv"> </span></div>`),Ht=e(`<div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Project</span> <span class="detail-value detail-mono svelte-ocbovv"> </span></div>`),Ut=e(`<div class="detail-grid svelte-ocbovv"><div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Container ID</span> <span class="detail-value detail-mono svelte-ocbovv"> </span></div> <div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Name</span> <span class="detail-value detail-mono svelte-ocbovv"> </span></div> <div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Image</span> <span class="detail-value detail-mono svelte-ocbovv"> </span></div> <!> <div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">State</span> <span class="detail-value svelte-ocbovv"><span> </span></span></div> <div class="detail-item svelte-ocbovv"><span class="detail-label svelte-ocbovv">Status</span> <span class="detail-value svelte-ocbovv"> </span></div> <!> <!> <!> <!> <!></div>`),Wt=e(`<div class="detail-not-created svelte-ocbovv"><p class="svelte-ocbovv">Container has not been created yet. Use <strong>Start</strong> to create and start it.</p></div>`),Gt=e(`<div role="status"> </div>`),Kt=e(`<div class="confirm-bar svelte-ocbovv" role="alert"><span class="confirm-text svelte-ocbovv"> <strong> </strong>?</span> <div class="confirm-actions svelte-ocbovv"><button class="btn btn-danger btn-sm">Confirm</button> <button class="btn btn-secondary btn-sm">Cancel</button></div></div>`),qt=e(`<span class="spinner-inline svelte-ocbovv"></span>`),Jt=e(`<button class="btn btn-primary btn-sm"><!> Start</button>`),Yt=e(`<span class="spinner-inline svelte-ocbovv"></span>`),Xt=e(`<span class="spinner-inline svelte-ocbovv"></span>`),Zt=e(`<span class="spinner-inline svelte-ocbovv"></span>`),Qt=e(`<button class="btn btn-secondary btn-sm"><!> Start</button> <button class="btn btn-danger btn-sm"><!> Stop</button> <button class="btn btn-secondary btn-sm"><!> Restart</button>`,1),$t=e(`<div class="detail-actions svelte-ocbovv"><!></div>`),en=e(`<div class="container-detail svelte-ocbovv"><!> <!> <!></div>`),tn=e(`<button class="container-table-row container-table-row--clickable svelte-ocbovv"><span class="ct-col ct-col--name svelte-ocbovv"><span></span> <span class="ct-service-name svelte-ocbovv"> </span></span> <span class="ct-col ct-col--image ct-mono svelte-ocbovv"><!></span> <span class="ct-col ct-col--tag svelte-ocbovv"><!></span> <span class="ct-col ct-col--status svelte-ocbovv"><span> </span></span> <span class="ct-col ct-col--actions svelte-ocbovv"><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"><polyline points="6 9 12 15 18 9"></polyline></svg></span></button> <!>`,1),nn=e(`<div class="container-table svelte-ocbovv"><div class="container-table-header svelte-ocbovv"><span class="ct-col ct-col--name svelte-ocbovv">Container</span> <span class="ct-col ct-col--image svelte-ocbovv">Image</span> <span class="ct-col ct-col--tag svelte-ocbovv">Tag</span> <span class="ct-col ct-col--status svelte-ocbovv">Status</span> <span class="ct-col ct-col--actions svelte-ocbovv"></span></div> <!></div>`),rn=e(`<p>Loading container status...</p>`),an=e(`<p class="text-danger svelte-ocbovv"> </p> <button class="btn btn-secondary btn-sm svelte-ocbovv">Try Again</button>`,1),on=e(`<p>Docker is not available on this host.</p> <p class="hint svelte-ocbovv">Ensure Docker is running and the admin service has access to the Docker socket.</p>`,1),sn=e(`<p>No containers found. Services may not be installed yet.</p>`),cn=e(`<div class="empty-state svelte-ocbovv"><svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg> <!></div>`),ln=e(`<div class="panel" role="tabpanel"><div class="panel-header"><h2>Container Status</h2> <div class="panel-header-actions"><!> <button class="btn btn-secondary btn-sm"><!> Pull Images</button> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <div class="panel-body panel-body--flush"><!></div></div>`);function un(e,t){E(t,!0);let i=S(()=>t.serviceEntries.length>0),s=g({});function l(e){let t=e.indexOf(`@`),n=t>-1?e.slice(0,t):e,r=n.lastIndexOf(`:`);return r>-1?{name:n.slice(0,r),tag:n.slice(r+1)}:{name:n,tag:`latest`}}function f(e){return e===`running`?`success`:e===`exited`||e===`dead`||e===`stopped`?`danger`:e===`restarting`||e===`paused`?`warning`:`idle`}function p(e){return s[e]||(s[e]={inFlight:null,confirm:null,feedback:null}),s[e]}function h(e,t,n){n.stopPropagation(),p(e).confirm=t}function v(e,t){t.stopPropagation(),p(e).confirm=null}async function y(e,n,r,i){i.stopPropagation();let a=p(e);a.confirm=null,a.inFlight=r,a.feedback=null;try{r===`start`?t.onStart(n):r===`stop`?t.onStop(n):t.onRestart(n),a.feedback={type:`success`,message:`${r.charAt(0).toUpperCase()+r.slice(1)} initiated`}}catch(e){a.feedback={type:`error`,message:`${r} failed: ${e instanceof Error?e.message:e}`}}a.inFlight=null,setTimeout(()=>{a.feedback=null},3e3)}var C=ln(),w=N(C),T=_(N(w),2),D=N(T),O=e=>{var r=At(),i=N(r);b(r),m(()=>n(i,`Updated ${t.lastUpdated??``}`)),u(e,r)};r(D,e=>{t.lastUpdated&&e(O)});var k=_(D,2),A=N(k),j=e=>{u(e,jt())};r(A,e=>{t.pullLoading&&e(j)}),L(),b(k);var M=_(k,2),P=N(M),I=e=>{u(e,Mt())};r(P,e=>{t.loading&&e(I)}),L(),b(M),b(T),b(w);var R=_(w,2),V=N(R),H=e=>{var i=nn();B(_(N(i),2),17,()=>t.serviceEntries,e=>e.id,(e,i)=>{let p=S(()=>t.selectedContainerId===a(i).id),g=S(()=>s[a(i).id]?.inFlight??null),C=S(()=>s[a(i).id]?.confirm??null),w=S(()=>s[a(i).id]?.feedback??null),T=S(()=>a(i).docker?l(a(i).docker.Image):null),E=S(()=>a(g)!==null),D=S(()=>!a(i).docker);var O=tn(),k=o(O),A=N(k),j=N(A),M=_(j,2),P=N(M,!0);b(M),b(A);var F=_(A,2),I=N(F),R=e=>{var t=c();m(()=>n(t,a(T).name)),u(e,t)},B=e=>{u(e,Nt())};r(I,e=>{a(T)?e(R):e(B,-1)}),b(F);var V=_(F,2),H=N(V),U=e=>{var t=Pt(),r=N(t,!0);b(t),m(()=>n(r,a(T).tag)),u(e,t)},W=e=>{u(e,Ft())};r(H,e=>{a(T)?e(U):e(W,-1)}),b(V);var G=_(V,2),K=N(G),q=N(K,!0);b(K),b(G);var J=_(G,2),ee=N(J);let te;b(J),b(k);var ne=_(k,2),re=e=>{var t=en(),s=N(t),c=e=>{let t=S(()=>a(i).docker);var s=Ut(),c=N(s),l=_(N(c),2),d=N(l,!0);b(l),b(c);var p=_(c,2),h=_(N(p),2),g=N(h,!0);b(h),b(p);var v=_(p,2),y=_(N(v),2),x=N(y,!0);b(y),b(v);var C=_(v,2),w=e=>{var i=Lt(),s=o(i),c=_(N(s),2),l=N(c,!0);b(c),b(s);var d=_(s,2),f=_(N(d),2),p=N(f),h=N(p,!0);b(p);var g=_(p,2),v=e=>{var r=It(),i=N(r);b(r),m(e=>n(i,`${e??``}...`),[()=>a(t).Image.split(`@`)[1]?.slice(0,19)]),u(e,r)},y=S(()=>a(t).Image.includes(`@`));r(g,e=>{a(y)&&e(v)}),b(f),b(d),m(()=>{n(l,a(T).name),n(h,a(T).tag)}),u(e,i)};r(C,e=>{a(T)&&e(w)});var E=_(C,2),D=_(N(E),2),O=N(D),k=N(O,!0);b(O),b(D),b(E);var A=_(E,2),j=_(N(A),2),M=N(j,!0);b(j),b(A);var P=_(A,2),F=e=>{var r=Rt(),i=_(N(r),2),o=N(i);let s;var c=N(o,!0);b(o),b(i),b(r),m(e=>{s=z(o,1,`badge`,null,s,e),n(c,a(t).Health)},[()=>({"badge-success":a(t).Health===`healthy`,"badge-warning":a(t).Health===`starting`,"badge-danger":a(t).Health===`unhealthy`,"badge-idle":![`healthy`,`starting`,`unhealthy`].includes(a(t).Health)})]),u(e,r)};r(P,e=>{a(t).Health&&e(F)});var I=_(P,2),L=e=>{var r=zt(),i=_(N(r),2),o=N(i,!0);b(i),b(r),m(()=>n(o,a(t).Ports)),u(e,r)};r(I,e=>{a(t).Ports&&e(L)});var R=_(I,2),B=e=>{var r=Bt(),i=_(N(r),2),o=N(i,!0);b(i),b(r),m(()=>n(o,a(t).RunningFor)),u(e,r)};r(R,e=>{a(t).RunningFor&&e(B)});var V=_(R,2),H=e=>{var r=Vt(),i=_(N(r),2),o=N(i,!0);b(i),b(r),m(()=>n(o,a(t).CreatedAt)),u(e,r)};r(V,e=>{a(t).CreatedAt&&e(H)});var U=_(V,2),W=e=>{var r=Ht(),i=_(N(r),2),o=N(i,!0);b(i),b(r),m(()=>n(o,a(t).Project)),u(e,r)};r(U,e=>{a(t).Project&&e(W)}),b(s),m(e=>{n(d,a(t).ID),n(g,a(t).Name||a(t).Names),n(x,a(t).Image),z(O,1,`badge badge-${e??``}`,`svelte-ocbovv`),n(k,a(t).State),n(M,a(t).Status)},[()=>f(a(t).State)]),u(e,s)},l=e=>{u(e,Wt())};r(s,e=>{a(i).docker?e(c):e(l,-1)});var p=_(s,2),x=e=>{var t=Gt(),r=N(t,!0);b(t),m(()=>{z(t,1,`action-feedback action-feedback--${a(w).type??``}`,`svelte-ocbovv`),n(r,a(w).message)}),u(e,t)};r(p,e=>{a(w)&&e(x)});var O=_(p,2),k=e=>{var t=Kt(),r=N(t),o=N(r),s=_(o),c=N(s,!0);b(s),L(),b(r);var l=_(r,2),f=N(l),p=_(f,2);b(l),b(t),m(e=>{n(o,`${e??``} `),n(c,a(i).service)},[()=>a(C).charAt(0).toUpperCase()+a(C).slice(1)]),d(`click`,f,e=>y(a(i).id,a(i).service,a(C),e)),d(`click`,p,e=>v(a(i).id,e)),u(e,t)},A=e=>{var t=$t(),n=N(t),s=e=>{var t=Jt(),n=N(t),o=e=>{u(e,qt())};r(n,e=>{a(g)===`start`&&e(o)}),L(),b(t),m(()=>t.disabled=a(E)),d(`click`,t,e=>h(a(i).id,`start`,e)),u(e,t)},c=e=>{var t=Qt(),n=o(t),s=N(n),c=e=>{u(e,Yt())};r(s,e=>{a(g)===`start`&&e(c)}),L(),b(n);var l=_(n,2),f=N(l),p=e=>{u(e,Xt())};r(f,e=>{a(g)===`stop`&&e(p)}),L(),b(l);var v=_(l,2),y=N(v),x=e=>{u(e,Zt())};r(y,e=>{a(g)===`restart`&&e(x)}),L(),b(v),m(()=>{n.disabled=a(E),l.disabled=a(E),v.disabled=a(E)}),d(`click`,n,e=>h(a(i).id,`start`,e)),d(`click`,l,e=>h(a(i).id,`stop`,e)),d(`click`,v,e=>h(a(i).id,`restart`,e)),u(e,t)};r(n,e=>{a(D)?e(s):e(c,-1)}),b(t),u(e,t)};r(O,e=>{a(C)?e(k):e(A,-1)}),b(t),u(e,t)};r(ne,e=>{a(p)&&e(re)}),m((e,t)=>{x(k,`aria-expanded`,a(p)),z(j,1,`ct-indicator ct-indicator--${e??``}`,`svelte-ocbovv`),n(P,a(i).service),z(K,1,`badge badge-${t??``}`,`svelte-ocbovv`),n(q,a(i).state),te=z(ee,0,`svelte-ocbovv`,null,te,{"ct-chevron-open":a(p)})},[()=>f(a(i).state),()=>f(a(i).state)]),d(`click`,k,()=>t.onToggleContainer(a(i).id)),u(e,O)}),b(i),u(e,i)},U=e=>{var i=cn(),a=_(N(i),2),s=e=>{u(e,rn())},c=e=>{var r=an(),i=o(r),a=N(i,!0);b(i);var s=_(i,2);m(()=>{n(a,t.error),s.disabled=!t.tokenStored}),d(`click`,s,function(...e){t.onRefresh?.apply(this,e)}),u(e,r)},l=e=>{var t=on();L(2),u(e,t)},f=e=>{u(e,sn())};r(a,e=>{t.loading?e(s):t.error?e(c,1):t.containerData&&!t.containerData.dockerAvailable?e(l,2):e(f,-1)}),b(i),u(e,i)};r(V,e=>{a(i)?e(H):e(U,-1)}),b(R),b(C),m(()=>{k.disabled=t.pullLoading||!t.tokenStored,M.disabled=t.loading||!t.tokenStored}),d(`click`,k,function(...e){t.onPullImages?.apply(this,e)}),d(`click`,M,function(...e){t.onRefresh?.apply(this,e)}),u(e,C),F()}l([`click`]);var dn=e(`<span class="spinner"></span>`),fn=e(`<span class="spinner"></span>`),pn=e(`<div class="task-editor svelte-1uqcxu1"><div class="task-editor-head svelte-1uqcxu1"><span class="task-editor-name svelte-1uqcxu1"> </span> <span class="task-editor-hint svelte-1uqcxu1">Raw akm task file (YAML) — set <code>enabled</code>, <code>schedule</code>, <code>command</code>, etc.</span></div> <textarea class="task-editor-area svelte-1uqcxu1" spellcheck="false" rows="14"></textarea> <div class="task-editor-actions svelte-1uqcxu1"><button class="btn btn-secondary btn-sm">Cancel</button> <button class="btn btn-primary btn-sm"><!> Save</button></div></div>`),mn=e(`<div class="automation-desc svelte-1uqcxu1"> </div>`),hn=e(`<span class="meta-item schedule-friendly svelte-1uqcxu1"> </span>`),gn=e(`<span class="meta-item svelte-1uqcxu1"><code class="svelte-1uqcxu1"> </code></span> <span class="meta-item meta-tz svelte-1uqcxu1"> </span>`,1),_n=e(`<div class="automation-card svelte-1uqcxu1"><div class="automation-row svelte-1uqcxu1"><div class="automation-main svelte-1uqcxu1"><div class="automation-name svelte-1uqcxu1"> <span> </span> <span class="badge badge-type svelte-1uqcxu1"> </span></div> <!></div> <div class="automation-meta svelte-1uqcxu1"><!></div></div> <div class="automation-footer svelte-1uqcxu1"><span class="automation-file svelte-1uqcxu1"> </span> <div class="automation-actions svelte-1uqcxu1"><button class="btn btn-ghost btn-sm">Edit</button> <button class="btn btn-ghost btn-sm">Delete</button></div></div></div>`),vn=e(`<div class="automation-list svelte-1uqcxu1"></div>`),yn=e(`<p>Loading automations...</p>`),bn=e(`<p class="text-danger svelte-1uqcxu1"> </p> <button class="btn btn-secondary btn-sm svelte-1uqcxu1">Try Again</button>`,1),xn=e(`<p>No automations configured.</p> <p class="empty-state-hint svelte-1uqcxu1">Drop <code class="svelte-1uqcxu1">.md</code> task files into <code class="svelte-1uqcxu1">~/.openpalm/knowledge/tasks/</code>, or install via <code class="svelte-1uqcxu1">akm</code>.</p>`,1),Sn=e(`<div class="empty-state svelte-1uqcxu1"><svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> <!></div>`),Cn=e(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Automations</h2> <p class="panel-subtitle">Scheduled tasks read from <code>~/.openpalm/knowledge/tasks/</code>. Add or edit task files there to manage automations — changes take effect on refresh.</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm">New task</button> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <!> <div class="panel-body"><!></div></div>`);function wn(e,t){E(t,!0);let s=S(()=>t.data!==null&&Array.isArray(t.data.automations)&&t.data.automations.length>0),c=f(null),l=f(``),h=f(!1);async function g(e){if(!a(h)){v(h,!0);try{v(c,e,!0),v(l,(await q(e)).content,!0)}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to read task file.`),v(c,null)}finally{v(h,!1)}}}function y(){let e=(prompt(`New task file name (.yml):`,`my-task.yml`)??``).trim();e&&(v(c,e,!0),v(l,`schedule: '0 9 * * *'
|
|
2
|
+
enabled: false
|
|
3
|
+
description:
|
|
4
|
+
command:
|
|
5
|
+
- sh
|
|
6
|
+
- -c
|
|
7
|
+
- echo hello
|
|
8
|
+
`))}function C(){v(c,null),v(l,``)}async function w(){if(!(!a(c)||a(h))){v(h,!0);try{await ne(a(c),a(l)),X.push(`success`,`Saved ${a(c)}. Refreshing…`),C(),t.onRefresh()}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to save task file.`)}finally{v(h,!1)}}}async function T(e){if(!(a(h)||!confirm(`Delete task file "${e}"?`))){v(h,!0);try{await Q(e),X.push(`success`,`Deleted ${e}.`),a(c)===e&&C(),t.onRefresh()}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to delete task file.`)}finally{v(h,!1)}}}let D={"* * * * *":`Every minute`,"*/5 * * * *":`Every 5 minutes`,"*/15 * * * *":`Every 15 minutes`,"0 * * * *":`Every hour`,"0 0 * * *":`Daily at midnight`,"0 8 * * *":`Daily at 8 AM`,"0 0 * * 0":`Weekly (Sunday midnight)`,"0 3 * * 0":`Weekly (Sunday 3 AM)`,"0 4 * * 0":`Weekly (Sunday 4 AM)`};function O(e){let t=D[e];return t?{label:t,cron:e}:null}var A=Cn(),j=N(A),M=_(N(j),2),P=N(M),I=_(P,2),R=N(I),V=e=>{u(e,dn())};r(R,e=>{t.loading&&e(V)}),L(),b(I),b(M),b(j);var H=_(j,2),U=e=>{var t=pn(),o=N(t),s=N(o),f=N(s,!0);b(s),L(2),b(o);var p=_(o,2);i(p);var g=_(p,2),y=N(g),x=_(y,2),S=N(x),T=e=>{u(e,fn())};r(S,e=>{a(h)&&e(T)}),L(),b(x),b(g),b(t),m(()=>{n(f,a(c)),p.disabled=a(h),y.disabled=a(h),x.disabled=a(h)}),k(p,()=>a(l),e=>v(l,e)),d(`click`,y,C),d(`click`,x,()=>void w()),u(e,t)};r(H,e=>{a(c)&&e(U)});var W=_(H,2),G=N(W),K=e=>{var i=vn();B(i,21,()=>t.data.automations,p,(e,i)=>{let s=S(()=>O(a(i).schedule));var c=_n(),l=N(c),f=N(l),p=N(f),v=N(p),y=_(v);let C;var w=N(y,!0);b(y);var E=_(y,2),D=N(E,!0);b(E),b(p);var k=_(p,2),A=e=>{var t=mn(),r=N(t,!0);b(t),m(()=>n(r,a(i).description)),u(e,t)};r(k,e=>{a(i).description&&e(A)}),b(f);var j=_(f,2),M=N(j),P=e=>{var t=hn(),r=N(t,!0);b(t),m(()=>n(r,a(s).label)),u(e,t)},F=e=>{var t=gn(),r=o(t),s=N(r),c=N(s,!0);b(s),b(r);var l=_(r,2),d=N(l,!0);b(l),m(()=>{n(c,a(i).schedule),n(d,a(i).timezone)}),u(e,t)};r(M,e=>{a(s)?.cron?e(P):e(F,-1)}),b(j),b(l);var I=_(l,2),L=N(I),R=N(L,!0);b(L);var B=_(L,2),V=N(B),H=_(V,2);b(B),b(I),b(c),m(()=>{n(v,`${a(i).name??``} `),C=z(y,1,`badge`,null,C,{"badge-enabled":a(i).enabled,"badge-disabled":!a(i).enabled}),n(w,a(i).enabled?`enabled`:`disabled`),n(D,a(i).action.type),n(R,a(i).fileName),V.disabled=a(h)||!t.tokenStored,H.disabled=a(h)||!t.tokenStored,x(H,`aria-label`,`Delete ${a(i).fileName??``}`)}),d(`click`,V,()=>void g(a(i).fileName)),d(`click`,H,()=>void T(a(i).fileName)),u(e,c)}),b(i),u(e,i)},J=e=>{var i=Sn(),a=_(N(i),2),s=e=>{u(e,yn())},c=e=>{var r=bn(),i=o(r),a=N(i,!0);b(i);var s=_(i,2);m(()=>n(a,t.error)),d(`click`,s,function(...e){t.onRefresh?.apply(this,e)}),u(e,r)},l=e=>{var t=xn();L(2),u(e,t)};r(a,e=>{t.loading?e(s):t.error?e(c,1):e(l,-1)}),b(i),u(e,i)};r(G,e=>{a(s)&&t.data?e(K):e(J,-1)}),b(W),b(A),m(()=>{P.disabled=a(h)||!t.tokenStored,I.disabled=t.loading||!t.tokenStored}),d(`click`,P,y),d(`click`,I,function(...e){t.onRefresh?.apply(this,e)}),u(e,A),F()}l([`click`]);var Tn=e(`<div class="empty svelte-1ykz2x6"> </div>`),En=e(`<span class="provider-meta svelte-1ykz2x6"> </span>`),Dn=e(`<button type="button" class="provider-pick svelte-1ykz2x6"><span class="provider-name svelte-1ykz2x6"> </span> <!></button>`),On=e(`<!> <button type="button" class="provider-pick provider-pick--custom svelte-1ykz2x6"><span class="provider-name svelte-1ykz2x6">Custom provider</span> <span class="provider-meta svelte-1ykz2x6">OpenAI-compatible</span></button>`,1),kn=e(`<div class="sheet-overlay" role="presentation"></div> <div class="sheet" role="dialog" aria-modal="true" aria-labelledby="add-provider-title"><header class="sheet-header"><h2 class="sheet-title" id="add-provider-title">Add provider</h2> <button type="button" class="sheet-close" aria-label="Close">×</button></header> <div class="sheet-search svelte-1ykz2x6"><input type="search" class="form-input" placeholder="Search providers…" autocomplete="off"/></div> <div class="sheet-body sheet-body--list svelte-1ykz2x6"><!></div></div>`,1);function An(e,t){E(t,!0);let i=f(``),s=S(()=>{let e=a(i).trim().toLowerCase();return e?t.providers.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)):t.providers});var c=kn(),l=o(c),p=_(l,2),g=N(p),y=_(N(g),2);b(g);var x=_(g,2),C=N(x);R(C),h(C,!0),b(x);var w=_(x,2),T=N(w),D=e=>{var t=Tn(),r=N(t);b(t),m(()=>n(r,`No providers match "${a(i)??``}".`)),u(e,t)},O=e=>{var i=On(),c=o(i);B(c,17,()=>a(s),e=>e.id,(e,i)=>{var o=Dn(),s=N(o),c=N(s,!0);b(s);var l=_(s,2),f=e=>{var t=En(),r=N(t);b(t),m(()=>n(r,`${a(i).modelCount??``} models`)),u(e,t)};r(l,e=>{a(i).modelCount>0&&e(f)}),b(o),m(()=>n(c,a(i).name)),d(`click`,o,()=>t.onselect(a(i))),u(e,o)}),d(`click`,_(c,2),function(...e){t.oncustom?.apply(this,e)}),u(e,i)};r(T,e=>{a(s).length===0&&a(i)?e(D):e(O,-1)}),b(w),b(p),d(`click`,l,function(...e){t.onclose?.apply(this,e)}),d(`click`,y,function(...e){t.onclose?.apply(this,e)}),k(C,()=>a(i),e=>v(i,e)),u(e,c),F()}l([`click`]);var jn=e(`<button type="button" class="sheet-header-back" aria-label="Back">←</button>`),Mn=e(`<div class="feedback feedback--error"><span> </span></div>`),Nn=e(`<button type="button" class="auth-method-card svelte-1bnolke"><span class="method-label svelte-1bnolke"> </span> <span class="method-type svelte-1bnolke"> </span></button>`),Pn=e(`<p class="field-hint"> </p> <div class="auth-method-group svelte-1bnolke"></div>`,1),Fn=e(`<p class="field-hint"> </p> <div class="form-field"><label class="form-label" for="connect-apikey"> </label> <input id="connect-apikey" type="password" class="form-input" placeholder="API key" autocomplete="off"/></div>`,1),In=e(`<p class="field-hint">Visit <a target="_blank" rel="noopener" class="text-link">this link</a> </p> <div class="form-field"><label class="form-label" for="connect-code"> </label> <input id="connect-code" type="text" class="form-input" placeholder="Authorization code" autocomplete="off"/></div>`,1),Ln=e(`<p class="field-hint"> </p>`),Rn=e(`<p class="field-hint">Open <a target="_blank" rel="noopener" class="text-link"> </a> to continue.</p>`),zn=e(`<!> <!> <p class="field-hint"><span class="spinner"></span> Waiting for sign-in to complete…</p>`,1),Bn=e(`<span class="spinner"></span>`),Vn=e(`<footer class="sheet-footer"><button type="button" class="btn btn-primary"><!> Continue</button></footer>`),Hn=e(`<div class="sheet-overlay" role="presentation"></div> <div class="sheet" role="dialog" aria-modal="true" aria-labelledby="connect-sheet-title"><header class="sheet-header"><!> <h2 class="sheet-title" id="connect-sheet-title"> </h2> <button type="button" class="sheet-close" aria-label="Close">×</button></header> <div class="sheet-body"><!> <!></div> <!></div>`,1);function Un(e,t){E(t,!0);let i=S(()=>t.provider.authMethods.filter(e=>!e.label.toLowerCase().includes(`headless`))),s=f(g(c(t.provider)));function c(e){let t=e.authMethods.filter(e=>!e.label.toLowerCase().includes(`headless`));return t.length===0?`api-form`:t.length===1?t[0].type===`oauth`?`oauth-code`:`api-form`:`method-picker`}let l=f(null),p=f(``),h=f(``),y=f(null),C=f(null),w=f(!1),T=f(null),D;function O(){D?.abort(),D=void 0}j(O);let A=S(()=>a(s)===`method-picker`?`Connect ${t.provider.name}`:a(l)?`Login with ${a(l).label}`:`Connect ${t.provider.name}`),M=S(()=>a(s)!==`method-picker`&&a(i).length>1);function P(e){v(l,e,!0),v(p,``),v(h,``),v(y,null),v(C,null),v(T,null),e.type===`oauth`?z(e):v(s,`api-form`)}function I(){O(),v(l,null),v(p,``),v(h,``),v(y,null),v(C,null),v(T,null),v(w,!1),v(s,`method-picker`)}async function z(e){v(w,!0),v(T,null);try{let n=await(await fetch(`/admin/providers/oauth/start`,{method:`POST`,headers:{...be(),"content-type":`application/json`},body:JSON.stringify({providerId:t.provider.id,methodIndex:String(e.index)})})).json();if(!n.ok||!n.oauth){v(T,n.message??`OAuth start failed.`,!0),v(s,`method-picker`);return}if(v(y,n.oauth.url,!0),v(C,n.oauth.instructions??null,!0),window.open(n.oauth.url,`_blank`,`noopener`),n.oauth.mode===`auto`){v(s,`oauth-auto`),D=new AbortController;let e=n.oauth.providerId,t=n.oauth.methodIndex;fetch(`/admin/providers/oauth/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{...be(),"content-type":`application/json`},body:JSON.stringify({method:t}),signal:D.signal}).then(e=>{a(s)===`oauth-auto`&&(e.ok?U(`Signed in successfully.`):(v(T,`Sign-in failed (${e.status}). Try again.`),v(s,`method-picker`)))}).catch(e=>{a(s)===`oauth-auto`&&(e instanceof DOMException&&e.name===`AbortError`||(v(T,e instanceof Error?e.message:`Authorization failed.`,!0),v(s,`method-picker`)))})}else v(s,`oauth-code`)}catch(e){v(T,e instanceof Error?e.message:`OAuth start failed.`,!0),v(s,`method-picker`)}finally{v(w,!1)}}async function V(){if(!a(p).trim()){v(T,`Enter an API key.`);return}v(w,!0),v(T,null);try{let e=await fetch(`/admin/opencode/providers/${encodeURIComponent(t.provider.id)}/auth`,{method:`POST`,headers:{...be(),"content-type":`application/json`},body:JSON.stringify({mode:`api_key`,apiKey:a(p).trim()})});if(!e.ok){v(T,(await e.json().catch(()=>({}))).message??`Save failed (${e.status})`,!0);return}U(`API key saved.`)}catch(e){v(T,e instanceof Error?e.message:`Request failed.`,!0)}finally{v(w,!1)}}async function H(){if(!a(l)||!a(h).trim()){v(T,`Paste the authorization code.`);return}v(w,!0),v(T,null);try{let e=await fetch(`/admin/providers/oauth/finish`,{method:`POST`,headers:{...be(),"content-type":`application/json`},body:JSON.stringify({providerId:t.provider.id,methodIndex:a(l).index,code:a(h).trim()})});if(!e.ok){v(T,(await e.json().catch(()=>({}))).message??`Submission failed (${e.status})`,!0);return}U(`Signed in successfully.`)}catch(e){v(T,e instanceof Error?e.message:`Request failed.`,!0)}finally{v(w,!1)}}function U(e){t.onaction?.({ok:!0,message:e,selectedProviderId:t.provider.id})}function W(e){e.key===`Enter`&&(a(s)===`api-form`?V():a(s)===`oauth-code`&&H())}var G=Hn(),K=o(G),q=_(K,2),J=N(q),ee=N(J),te=e=>{var t=jn();d(`click`,t,I),u(e,t)};r(ee,e=>{a(M)&&e(te)});var ne=_(ee,2),re=N(ne,!0);b(ne);var ie=_(ne,2);b(J);var Y=_(J,2),ae=N(Y),oe=e=>{var t=Mn(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(T))),u(e,t)};r(ae,e=>{a(T)&&e(oe)});var se=_(ae,2),ce=e=>{var r=Pn(),s=o(r),c=N(s);b(s);var l=_(s,2);B(l,21,()=>a(i),e=>e.index,(e,t)=>{var r=Nn(),i=N(r),o=N(i,!0);b(i);var s=_(i,2),c=N(s,!0);b(s),b(r),m(()=>{n(o,a(t).label),n(c,a(t).type===`oauth`?`Browser sign-in`:`API key`)}),d(`click`,r,()=>P(a(t))),u(e,r)}),b(l),m(()=>n(c,`Select login method for ${t.provider.name??``}.`)),u(e,r)},le=e=>{var r=Fn(),i=o(r),s=N(i);b(i);var c=_(i,2),l=N(c),f=N(l);b(l);var h=_(l,2);R(h),b(c),m(()=>{n(s,`Enter your ${t.provider.name??``} API key to connect your account and use ${t.provider.name??``} models in OpenCode.`),n(f,`${t.provider.name??``} API key`),h.disabled=a(w)}),d(`keydown`,h,W),k(h,()=>a(p),e=>v(p,e)),u(e,r)},ue=e=>{var r=In(),i=o(r),s=_(N(i)),c=_(s);b(i);var f=_(i,2),p=N(f),g=N(p);b(p);var S=_(p,2);R(S),b(f),m(()=>{x(s,`href`,a(y)??`#`),n(c,` to collect your authorization code to connect your account and use ${t.provider.name??``} models in OpenCode.`),n(g,`${a(l)?.label??`OAuth`??``} authorization code`),S.disabled=a(w)}),d(`keydown`,S,W),k(S,()=>a(h),e=>v(h,e)),u(e,r)},de=e=>{var t=zn(),i=o(t),s=e=>{var t=Ln(),r=N(t,!0);b(t),m(()=>n(r,a(C))),u(e,t)};r(i,e=>{a(C)&&e(s)});var c=_(i,2),l=e=>{var t=Rn(),r=_(N(t)),i=N(r,!0);b(r),L(),b(t),m(()=>{x(r,`href`,a(y)),n(i,a(y))}),u(e,t)};r(c,e=>{a(y)&&e(l)}),L(2),u(e,t)};r(se,e=>{a(s)===`method-picker`?e(ce):a(s)===`api-form`?e(le,1):a(s)===`oauth-code`?e(ue,2):a(s)===`oauth-auto`&&e(de,3)}),b(Y);var fe=_(Y,2),pe=e=>{var t=Vn(),n=N(t),i=N(n),o=e=>{u(e,Bn())};r(i,e=>{a(w)&&e(o)}),L(),b(n),b(t),m(()=>n.disabled=a(w)),d(`click`,n,()=>a(s)===`api-form`?void V():void H()),u(e,t)};r(fe,e=>{(a(s)===`api-form`||a(s)===`oauth-code`)&&e(pe)}),b(q),m(()=>n(re,a(A))),d(`click`,K,function(...e){t.onclose?.apply(this,e)}),d(`click`,ie,function(...e){t.onclose?.apply(this,e)}),u(e,G),F()}l([`click`,`keydown`]);var Wn=e(`<div class="feedback feedback--error"><span> </span></div>`),Gn=e(`<span class="spinner"></span>`),Kn=e(`<div class="sheet-overlay" role="presentation"></div> <div class="sheet" role="dialog" aria-modal="true" aria-labelledby="custom-sheet-title"><header class="sheet-header"><h2 class="sheet-title" id="custom-sheet-title">Add custom provider</h2> <button type="button" class="sheet-close" aria-label="Close">×</button></header> <div class="sheet-body"><p class="field-hint">Register an OpenAI-compatible provider by base URL. Models are auto-discovered on first connection.</p> <!> <div class="form-stack svelte-1btkq49"><div class="form-field"><label class="form-label" for="custom-id">Provider ID</label> <input id="custom-id" type="text" class="form-input" placeholder="my-provider" autocomplete="off"/></div> <div class="form-field"><label class="form-label" for="custom-name">Display name</label> <input id="custom-name" type="text" class="form-input" placeholder="My Provider" autocomplete="off"/></div> <div class="form-field"><label class="form-label" for="custom-url">Base URL</label> <input id="custom-url" type="url" class="form-input" placeholder="https://example.com/v1" autocomplete="off"/></div> <div class="form-field"><label class="form-label" for="custom-key">API key <span class="optional svelte-1btkq49">(optional)</span></label> <input id="custom-key" type="password" class="form-input" placeholder="API key" autocomplete="off"/></div></div></div> <footer class="sheet-footer"><button type="button" class="btn btn-primary"><!> Continue</button></footer></div>`,1);function qn(e,t){E(t,!0);let i=f(``),s=f(``),c=f(``),l=f(``),p=f(!1),h=f(null);async function g(){let e=a(i).trim(),n=a(s).trim(),r=a(c).trim();if(!e||!n||!r){v(h,`ID, display name, and base URL are required.`);return}v(p,!0),v(h,null);try{let i=await fetch(`/admin/providers/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{...be(),"content-type":`application/json`},body:JSON.stringify({kind:`register-custom`,displayName:n,baseURL:r,apiKey:a(l).trim()||void 0,modelsJson:`[]`,headersJson:`[]`,confirmOverwrite:`false`})}),o=await i.json();if(!i.ok||o.ok===!1){v(h,o.message??`Registration failed.`,!0);return}t.onaction?.(o)}catch(e){v(h,e instanceof Error?e.message:`Request failed.`,!0)}finally{v(p,!1)}}function y(e){e.key===`Enter`&&!a(p)&&g()}var x=Kn(),S=o(x),C=_(S,2),w=N(C),T=_(N(w),2);b(w);var D=_(w,2),O=_(N(D),2),A=e=>{var t=Wn(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(h))),u(e,t)};r(O,e=>{a(h)&&e(A)});var j=_(O,2),M=N(j),P=_(N(M),2);R(P),b(M);var I=_(M,2),z=_(N(I),2);R(z),b(I);var B=_(I,2),V=_(N(B),2);R(V),b(B);var H=_(B,2),U=_(N(H),2);R(U),b(H),b(j),b(D);var W=_(D,2),G=N(W),K=N(G),q=e=>{u(e,Gn())};r(K,e=>{a(p)&&e(q)}),L(),b(G),b(W),b(C),m(()=>{P.disabled=a(p),z.disabled=a(p),V.disabled=a(p),U.disabled=a(p),G.disabled=a(p)}),d(`click`,S,function(...e){t.onclose?.apply(this,e)}),d(`click`,T,function(...e){t.onclose?.apply(this,e)}),d(`keydown`,P,y),k(P,()=>a(i),e=>v(i,e)),d(`keydown`,z,y),k(z,()=>a(s),e=>v(s,e)),d(`keydown`,V,y),k(V,()=>a(c),e=>v(c,e)),d(`keydown`,U,y),k(U,()=>a(l),e=>v(l,e)),d(`click`,G,()=>void g()),u(e,x),F()}l([`click`,`keydown`]);var Jn=e(`<li class="svelte-15y8pah">Activated in OpenCode: <strong> </strong></li>`),Yn=e(`<li class="svelte-15y8pah">Skipped (already configured): <strong> </strong></li>`),Xn=e(`<li class="svelte-15y8pah"><span class="muted svelte-15y8pah"> </span></li>`),Zn=e(`<div class="feedback feedback--success"><span>Import complete.</span></div> <ul class="result-list svelte-15y8pah"><li class="svelte-15y8pah">Providers imported: <strong> </strong></li> <li class="svelte-15y8pah">Credentials imported: <strong> </strong></li> <!> <!> <!></ul>`,1),Qn=e(`<li class="svelte-15y8pah"><code class="svelte-15y8pah"> </code> <span class="muted svelte-15y8pah"> </span></li>`),$n=e(`<li class="svelte-15y8pah"><code class="svelte-15y8pah"> </code> <span class="muted svelte-15y8pah"> </span></li>`),er=e(`<div class="feedback feedback--error"><span> </span></div>`),tr=e(`<p class="field-hint">We found an OpenCode installation on this host:</p> <ul class="result-list svelte-15y8pah"><!> <!></ul> <p class="field-hint">Importing will copy provider settings and stored credentials into OP_HOME and
|
|
9
|
+
activate them in the running assistant. Existing OP_HOME credentials are
|
|
10
|
+
preserved on conflict.</p> <!>`,1),nr=e(`<button type="button" class="btn btn-primary">Done</button>`),rr=e(`<span class="spinner"></span>`),ir=e(`<button type="button" class="btn btn-primary"><!> Import</button>`),ar=e(`<div class="sheet-overlay" role="presentation"></div> <div class="sheet" role="dialog" aria-modal="true" aria-labelledby="import-sheet-title"><header class="sheet-header"><h2 class="sheet-title" id="import-sheet-title">Import from host OpenCode</h2> <button type="button" class="sheet-close" aria-label="Close">×</button></header> <div class="sheet-body"><!></div> <footer class="sheet-footer"><!></footer></div>`,1);function or(e,t){E(t,!0);let i=f(!1),s=f(null),c=f(null);async function l(){v(i,!0),v(s,null);try{let e=await fetch(`/admin/providers/import-host`,{method:`POST`,headers:be()}),t=await e.json();if(!e.ok){v(s,t.message??`Import failed (${e.status})`,!0);return}v(c,t,!0)}catch(e){v(s,e instanceof Error?e.message:`Import failed.`,!0)}finally{v(i,!1)}}var p=ar(),h=o(p),g=_(h,2),y=N(g),x=_(N(y),2);b(y);var S=_(y,2),C=N(S),w=e=>{var t=Zn(),i=_(o(t),2),s=N(i),l=_(N(s)),d=N(l,!0);b(l),b(s);var f=_(s,2),p=_(N(f)),h=N(p,!0);b(p),b(f);var g=_(f,2),v=e=>{var t=Jn(),r=_(N(t)),i=N(r,!0);b(r),b(t),m(()=>n(i,a(c).livePushed)),u(e,t)};r(g,e=>{a(c).livePushed!==void 0&&e(v)});var y=_(g,2),x=e=>{var t=Yn(),r=_(N(t)),i=N(r,!0);b(r),b(t),m(e=>n(i,e),[()=>a(c).conflicts.join(`, `)]),u(e,t)};r(y,e=>{a(c).conflicts.length>0&&e(x)});var S=_(y,2),C=e=>{var t=Xn(),r=N(t),i=N(r);b(r),b(t),m(e=>n(i,`Live update failed for: ${e??``}.
|
|
11
|
+
These will activate on next OpenCode restart.`),[()=>a(c).livePushFailed.join(`, `)]),u(e,t)};r(S,e=>{a(c).livePushFailed&&a(c).livePushFailed.length>0&&e(C)}),b(i),m(()=>{n(d,a(c).imported.providers),n(h,a(c).imported.credentials)}),u(e,t)},T=e=>{var i=tr(),c=_(o(i),2),l=N(c),d=e=>{var r=Qn(),i=N(r),a=N(i,!0);b(i);var o=_(i,2),s=N(o);b(o),b(r),m(()=>{n(a,t.configPath),n(s,`(${t.providerCount??``} provider${t.providerCount===1?``:`s`})`)}),u(e,r)};r(l,e=>{t.configPath&&e(d)});var f=_(l,2),p=e=>{var r=$n(),i=N(r),a=N(i,!0);b(i);var o=_(i,2),s=N(o);b(o),b(r),m(()=>{n(a,t.authPath),n(s,`(${t.credentialCount??``} credential${t.credentialCount===1?``:`s`})`)}),u(e,r)};r(f,e=>{t.authPath&&e(p)}),b(c);var h=_(c,4),g=e=>{var t=er(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(s))),u(e,t)};r(h,e=>{a(s)&&e(g)}),u(e,i)};r(C,e=>{a(c)?e(w):e(T,-1)}),b(S);var D=_(S,2),O=N(D),k=e=>{var n=nr();d(`click`,n,function(...e){t.onimported?.apply(this,e)}),u(e,n)},A=e=>{var t=ir(),n=N(t),o=e=>{u(e,rr())};r(n,e=>{a(i)&&e(o)}),L(),b(t),m(()=>t.disabled=a(i)),d(`click`,t,()=>void l()),u(e,t)};r(O,e=>{a(c)?e(k):e(A,-1)}),b(D),b(g),d(`click`,h,()=>a(c)?t.onimported?.():t.oncancel?.()),d(`click`,x,function(...e){t.oncancel?.apply(this,e)}),u(e,p),F()}l([`click`]);var sr=e(`<span class="spinner"></span>`),cr=e(`<div class="feedback feedback--error inline svelte-1tqmczc"><span> </span> <button class="btn-dismiss" type="button" aria-label="Dismiss">×</button></div>`),lr=e(`<div class="empty-state"><p>The assistant (OpenCode server) is not reachable. Start the assistant container and refresh.</p></div>`),ur=e(`<div class="loading-state"><span class="spinner"></span> <span>Loading providers…</span></div>`),dr=e(`<div class="empty-state"><p>No providers connected yet.</p> <p class="empty-hint svelte-1tqmczc">Click <strong>Add provider</strong> above to sign in to one.</p></div>`),fr=e(`<option> </option>`),pr=e(`<optgroup></optgroup>`),mr=e(`<option> </option>`),hr=e(`<optgroup></optgroup>`),gr=e(`<p class="model-error svelte-1tqmczc"> </p>`),_r=e(`<span class="spinner"></span>`),vr=e(`<div class="provider-row svelte-1tqmczc"><div class="provider-id svelte-1tqmczc"><span class="provider-name svelte-1tqmczc"> </span> <span class="badge badge-connected"> </span></div> <button class="btn btn-outline btn-sm"><!> Disconnect</button></div>`),yr=e(`<div class="model-defaults svelte-1tqmczc"><div class="model-field svelte-1tqmczc"><label class="form-label" for="default-model">Default model</label> <select id="default-model" class="form-input"><option>— OpenCode default —</option><!></select></div> <div class="model-field svelte-1tqmczc"><label class="form-label" for="small-model">Small model</label> <select id="small-model" class="form-input"><option>— OpenCode default —</option><!></select></div> <!></div> <!>`,1),br=e(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Connections</h2> <p class="panel-subtitle">Sign in to AI providers. Credentials are stored in OpenCode's auth.json.</p></div> <div class="panel-header-actions"><button type="button" class="btn btn-secondary btn-sm">Import from host</button> <button type="button" class="btn btn-primary btn-sm">Add provider</button> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <!> <div class="panel-body panel-body--flush"><!></div></div> <!> <!> <!> <!>`,1);function xr(e,t){E(t,!0);let i=f(g({available:!1,providers:[],defaultModels:{},allowlistActive:!1,providerCountLabel:``,stats:{total:0,connected:0,configured:0,disabled:0}})),s=f(!0),c=f(null);async function l(){v(s,!0);try{let e=await fetch(`/admin/providers`,{headers:be()});e.ok&&(v(i,await e.json(),!0),v(y,a(i).currentModel??``,!0),v(C,a(i).currentSmallModel??``,!0))}catch{}finally{v(s,!1)}}P(()=>{l()});let p=S(()=>a(i).providers.filter(e=>e.connected)),h=S(()=>a(i).providers.filter(e=>!e.connected)),y=f(``),C=f(``),w=f(null);async function T(e,t){v(w,null);try{let n=await fetch(`/admin/opencode/model`,{method:`POST`,headers:{...be(),"content-type":`application/json`},body:JSON.stringify({[e]:t||null})});n.ok||v(w,(await n.json().catch(()=>({}))).message??`Save failed (${n.status})`,!0)}catch(e){v(w,e instanceof Error?e.message:`Request failed.`,!0)}}let D=f(!1),k=f(null),j=f(!1),M=f(null),I={env:`env`,api:`api key`,oauth:`oauth`,config:`config`,custom:`custom`};function R(e){return e.credentialType?I[e.credentialType]:``}function z(e){v(D,!1),v(k,e,!0)}function V(){v(D,!1),v(j,!0)}function H(){v(k,null),v(j,!1),l()}async function U(e){if(confirm(`Disconnect ${e.name}? Stored credentials will be removed.`)){v(M,e.id,!0),v(c,null);try{let t=await fetch(`/admin/opencode/providers/${encodeURIComponent(e.id)}/auth`,{method:`DELETE`,headers:be()});t.ok?l():v(c,(await t.json().catch(()=>({}))).message??`Disconnect failed (${t.status})`,!0)}catch(e){v(c,e instanceof Error?e.message:`Request failed.`,!0)}finally{v(M,null)}}}let W=f(null),G=f(!1);async function K(){try{let e=await fetch(`/admin/providers/host-status`,{headers:be()});e.ok&&v(W,await e.json(),!0)}catch{}}P(()=>{K()});function q(){v(G,!1),l(),K()}var J=br(),ee=o(J),te=N(ee),ne=_(N(te),2),re=N(ne),ie=_(re,2),Y=_(ie,2),ae=N(Y),oe=e=>{u(e,sr())};r(ae,e=>{a(s)&&e(oe)}),L(),b(Y),b(ne),b(te);var se=_(te,2),ce=e=>{var t=cr(),r=N(t),i=N(r,!0);b(r);var o=_(r,2);b(t),m(()=>n(i,a(c))),d(`click`,o,()=>v(c,null)),u(e,t)};r(se,e=>{a(c)&&e(ce)});var le=_(se,2),ue=N(le),de=e=>{u(e,lr())},fe=e=>{u(e,ur())},pe=e=>{u(e,dr())},me=e=>{var t=yr(),i=o(t),s=N(i),c=_(N(s),2),l=N(c);l.value=l.__value=``,B(_(l),17,()=>a(p),e=>e.id,(e,t)=>{var i=O(),s=o(i),c=e=>{var r=pr();B(r,21,()=>a(t).models,e=>e.id,(e,r)=>{var i=fr(),o=N(i,!0);b(i);var s={};m(()=>{n(o,a(r).name||a(r).id),s!==(s=`${a(t).id??``}/${a(r).id??``}`)&&(i.value=i.__value=`${a(t).id??``}/${a(r).id??``}`)}),u(e,i)}),b(r),m(()=>x(r,`label`,a(t).name)),u(e,r)};r(s,e=>{a(t).models.length>0&&e(c)}),u(e,i)}),b(c),b(s);var f=_(s,2),h=_(N(f),2),g=N(h);g.value=g.__value=``,B(_(g),17,()=>a(p),e=>e.id,(e,t)=>{var i=O(),s=o(i),c=e=>{var r=hr();B(r,21,()=>a(t).models,e=>e.id,(e,r)=>{var i=mr(),o=N(i,!0);b(i);var s={};m(()=>{n(o,a(r).name||a(r).id),s!==(s=`${a(t).id??``}/${a(r).id??``}`)&&(i.value=i.__value=`${a(t).id??``}/${a(r).id??``}`)}),u(e,i)}),b(r),m(()=>x(r,`label`,a(t).name)),u(e,r)};r(s,e=>{a(t).models.length>0&&e(c)}),u(e,i)}),b(h),b(f);var S=_(f,2),E=e=>{var t=gr(),r=N(t,!0);b(t),m(()=>n(r,a(w))),u(e,t)};r(S,e=>{a(w)&&e(E)}),b(i),B(_(i,2),17,()=>a(p),e=>e.id,(e,t)=>{var i=vr(),o=N(i),s=N(o),c=N(s,!0);b(s);var l=_(s,2),f=N(l,!0);b(l),b(o);var p=_(o,2),h=N(p),g=e=>{u(e,_r())};r(h,e=>{a(M)===a(t).id&&e(g)}),L(),b(p),b(i),m(e=>{n(c,a(t).name),n(f,e),p.disabled=a(M)===a(t).id},[()=>R(a(t))]),d(`click`,p,()=>void U(a(t))),u(e,i)}),d(`change`,c,e=>void T(`model`,e.currentTarget.value)),A(c,()=>a(y),e=>v(y,e)),d(`change`,h,e=>void T(`small_model`,e.currentTarget.value)),A(h,()=>a(C),e=>v(C,e)),u(e,t)};r(ue,e=>{!a(i).available&&!a(s)?e(de):a(s)&&a(i).providers.length===0?e(fe,1):a(p).length===0?e(pe,2):e(me,-1)}),b(le),b(ee);var X=_(ee,2),he=e=>{An(e,{get providers(){return a(h)},onselect:z,oncustom:V,onclose:()=>{v(D,!1)}})};r(X,e=>{a(D)&&e(he)});var ge=_(X,2),_e=e=>{Un(e,{get provider(){return a(k)},onaction:H,onclose:()=>{v(k,null)}})};r(ge,e=>{a(k)&&e(_e)});var ve=_(ge,2),ye=e=>{qn(e,{onaction:H,onclose:()=>{v(j,!1)}})};r(ve,e=>{a(j)&&e(ye)});var xe=_(ve,2),Se=e=>{or(e,{get providerCount(){return a(W).providerCount},get credentialCount(){return a(W).credentialCount},get configPath(){return a(W).configPath},get authPath(){return a(W).authPath},onimported:q,oncancel:()=>{v(G,!1)}})};r(xe,e=>{a(G)&&a(W)&&e(Se)}),m(()=>{re.disabled=!a(W)?.detected,x(re,`title`,a(W)?.detected?`Import ${a(W).providerCount} providers from host OpenCode`:`No host OpenCode installation detected`),Y.disabled=a(s)}),d(`click`,re,()=>{v(G,!0)}),d(`click`,ie,()=>{v(D,!0)}),d(`click`,Y,()=>void l()),u(e,J),F()}l([`click`,`change`]);var Sr=e(`<span class="spinner"></span>`),Cr=e(`<option> </option>`),wr=e(`<span class="spinner"></span>`),Tr=e(`<div class="error-banner svelte-s1vlr2"><span> </span></div>`),Er=e(`<pre class="log-output svelte-s1vlr2"> </pre>`),Dr=e(`<p>No log output — the container may not be running or has no recent output.</p>`),Or=e(`<p>Select a service and click "Load Logs" to view container output.</p>`),kr=e(`<div class="empty-state"><svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line></svg> <!></div>`),Ar=e(`<div class="panel" role="tabpanel"><div class="panel-header"><h2>Service Logs</h2> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"> </button> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <div class="controls svelte-s1vlr2"><div class="control-group svelte-s1vlr2"><label for="log-service" class="control-label svelte-s1vlr2">Service</label> <select id="log-service" class="control-input svelte-s1vlr2"><option>All services</option><!></select></div> <div class="control-group svelte-s1vlr2"><label for="log-tail" class="control-label svelte-s1vlr2">Lines</label> <select id="log-tail" class="control-input svelte-s1vlr2"><option>50</option><option>100</option><option>250</option><option>500</option><option>1000</option></select></div> <div class="control-group control-group--toggle svelte-s1vlr2"><label class="toggle-label svelte-s1vlr2"><input type="checkbox" class="svelte-s1vlr2"/> <span>Auto-scroll</span></label></div> <button class="btn btn-primary btn-sm"><!> Load Logs</button></div> <div class="panel-body panel-body--flush"><!> <!></div></div>`);function jr(e,t){E(t,!0);let i=f(``),o=f(!1),s=f(!1),c=f(``),l=f(``),h=f(100),g=f(!0),x=f(!1),S=f(void 0);async function C(){v(s,!0),v(c,``);try{let e=await ae({service:a(l)||void 0,tail:a(h)});e.ok?(v(i,e.logs,!0),v(o,!0),a(g)&&a(S)&&requestAnimationFrame(()=>{a(S)&&(a(S).scrollTop=a(S).scrollHeight)})):v(c,e.error??`Failed to fetch logs.`,!0)}catch(e){v(c,e instanceof Error?e.message:`Failed to fetch logs.`,!0)}finally{v(s,!1)}}async function w(){a(i)&&(await navigator.clipboard.writeText(a(i)),v(x,!0),setTimeout(()=>{v(x,!1)},2e3))}P(()=>{t.tokenStored&&C()});var T=Ar(),D=N(T),O=_(N(D),2),k=N(O),j=N(k,!0);b(k);var M=_(k,2),z=N(M),V=e=>{u(e,Sr())};r(z,e=>{a(s)&&e(V)}),L(),b(M),b(O),b(D);var H=_(D,2),U=N(H),W=_(N(U),2),G=N(W);G.value=G.__value=``,B(_(G),17,()=>t.services,p,(e,t)=>{var r=Cr(),i=N(r,!0);b(r);var o={};m(()=>{n(i,a(t)),o!==(o=a(t))&&(r.value=(r.__value=a(t))??``)}),u(e,r)}),b(W),b(U);var K=_(U,2),q=_(N(K),2),J=N(q);J.value=J.__value=50;var ee=_(J);ee.value=ee.__value=100;var te=_(ee);te.value=te.__value=250;var ne=_(te);ne.value=ne.__value=500;var re=_(ne);re.value=re.__value=1e3,b(q),b(K);var ie=_(K,2),Y=N(ie),oe=N(Y);R(oe),L(2),b(Y),b(ie);var se=_(ie,2),ce=N(se),le=e=>{u(e,wr())};r(ce,e=>{a(s)&&e(le)}),L(),b(se),b(H);var ue=_(H,2),de=N(ue),fe=e=>{var t=Tr(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(c))),u(e,t)};r(de,e=>{a(c)&&e(fe)});var pe=_(de,2),me=e=>{var t=Er(),r=N(t,!0);b(t),I(t,e=>v(S,e),()=>a(S)),m(()=>n(r,a(i))),u(e,t)},X=e=>{var t=kr(),n=_(N(t),2),i=e=>{u(e,Dr())},s=e=>{u(e,Or())};r(n,e=>{a(o)?e(i):e(s,-1)}),b(t),u(e,t)};r(pe,e=>{a(i)?e(me):a(s)||e(X,1)}),b(ue),b(T),m(()=>{k.disabled=!a(i),n(j,a(x)?`Copied!`:`Copy`),M.disabled=a(s)||!t.tokenStored,se.disabled=a(s)||!t.tokenStored}),d(`click`,k,()=>void w()),d(`click`,M,()=>void C()),d(`change`,W,()=>void C()),A(W,()=>a(l),e=>v(l,e)),d(`change`,q,()=>void C()),A(q,()=>a(h),e=>v(h,e)),y(oe,()=>a(g),e=>v(g,e)),d(`click`,se,()=>void C()),u(e,T),F()}l([`click`,`change`]);var Mr=e(`<span class="spinner"></span>`),Nr=e(`<div class="error-banner svelte-1levcw0"><span> </span></div>`),Pr=e(`<p class="empty-note svelte-1levcw0">No secret files found.</p>`),Fr=e(`<div><button class="secret-name svelte-1levcw0"><span class="mono svelte-1levcw0"> </span> <span class="secret-size svelte-1levcw0"> </span></button> <button class="btn btn-ghost btn-sm">✕</button></div>`),Ir=e(`<span class="spinner"></span>`),Lr=e(`<div class="editor-head svelte-1levcw0"><span class="mono svelte-1levcw0"> </span> <label class="reveal-toggle svelte-1levcw0"><input type="checkbox"/> Reveal</label></div> <textarea spellcheck="false" rows="16"></textarea> <div class="editor-actions svelte-1levcw0"><button class="btn btn-secondary btn-sm">Close</button> <button class="btn btn-primary btn-sm"><!> Save</button></div>`,1),Rr=e(`<p class="empty-note svelte-1levcw0">Select a file to view or edit its contents.</p>`),zr=e(`<div class="panel" role="tabpanel"><div class="panel-header svelte-1levcw0"><h2>Secrets</h2> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <p class="section-note svelte-1levcw0">Files in the assistant's secrets directory (<code>/stash/secrets</code> → <code>knowledge/secrets</code>). These are mounted into the assistant and granted to
|
|
12
|
+
services via Docker secrets. Files are stored 0600. Editing here changes the live
|
|
13
|
+
file — restart affected services to pick up changes.</p> <!> <div class="secrets-layout svelte-1levcw0"><div class="secrets-list svelte-1levcw0"><!> <!> <div class="new-secret svelte-1levcw0"><input class="control-input" type="text" spellcheck="false" placeholder="new-file-name"/> <button class="btn btn-secondary btn-sm">Add</button></div></div> <div class="secrets-editor svelte-1levcw0"><!></div></div></div>`);function Br(e,t){E(t,!0);let s=f(!1),c=f(!1),l=f(``),p=f(g([])),h=f(null),S=f(``),C=f(!1),w=f(``);function T(e){return e<1024?`${e} B`:`${(e/1024).toFixed(1)} KB`}async function D(){v(s,!0),v(l,``);try{v(p,(await Y()).files,!0)}catch(e){v(l,e instanceof Error?e.message:`Failed to list secret files.`,!0)}finally{v(s,!1)}}async function O(e){if(!a(c)){v(c,!0),v(l,``);try{let t=await ie(e);v(h,t.name,!0),v(S,t.value,!0),v(C,!1)}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to read file.`)}finally{v(c,!1)}}}function A(){v(h,null),v(S,``),v(C,!1)}async function j(){if(!(!a(h)||a(c))){v(c,!0);try{await J(a(h),a(S)),X.push(`success`,`Saved ${a(h)}.`),await D()}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to save file.`)}finally{v(c,!1)}}}async function M(e){if(!a(c)&&confirm(`Delete secret file "${e}"? This cannot be undone.`)){v(c,!0);try{await Ce(e),X.push(`success`,`Deleted ${e}.`),a(h)===e&&A(),await D()}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to delete file.`)}finally{v(c,!1)}}}async function I(){let e=a(w).trim();if(!(!e||a(c))){v(c,!0);try{await J(e,``),X.push(`success`,`Created ${e}.`),v(w,``),await D(),await O(e)}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to create file.`)}finally{v(c,!1)}}}P(()=>{t.tokenStored&&D()});var V=zr(),H=N(V),U=_(N(H),2),W=N(U),G=N(W),K=e=>{u(e,Mr())};r(G,e=>{a(s)&&e(K)}),L(),b(W),b(U),b(H);var q=_(H,4),ee=e=>{var t=Nr(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(l))),u(e,t)};r(q,e=>{a(l)&&e(ee)});var te=_(q,2),ne=N(te),re=N(ne),ae=e=>{u(e,Pr())};r(re,e=>{a(p).length===0&&!a(s)&&e(ae)});var oe=_(re,2);B(oe,17,()=>a(p),e=>e.name,(e,t)=>{var r=Fr(),i=N(r),o=N(i),s=N(o,!0);b(o);var l=_(o,2),f=N(l,!0);b(l),b(i);var p=_(i,2);b(r),m(e=>{z(r,1,`secret-row ${a(h)===a(t).name?`active`:``}`,`svelte-1levcw0`),i.disabled=a(c),x(i,`aria-label`,`Edit ${a(t).name??``}`),n(s,a(t).name),n(f,e),p.disabled=a(c),x(p,`aria-label`,`Delete ${a(t).name??``}`)},[()=>T(a(t).size)]),d(`click`,i,()=>void O(a(t).name)),d(`click`,p,()=>void M(a(t).name)),u(e,r)});var se=_(oe,2),ce=N(se);R(ce);var le=_(ce,2);b(se),b(ne);var ue=_(ne,2),de=N(ue),fe=e=>{var t=Lr(),s=o(t),l=N(s),f=N(l,!0);b(l);var p=_(l,2),g=N(p);R(g),L(),b(p),b(s);var x=_(s,2);i(x);var w=_(x,2),T=N(w),E=_(T,2),D=N(E),O=e=>{u(e,Ir())};r(D,e=>{a(c)&&e(O)}),L(),b(E),b(w),m(()=>{n(f,a(h)),z(x,1,`control-input editor-area ${a(C)?``:`masked`}`,`svelte-1levcw0`),x.disabled=a(c),T.disabled=a(c),E.disabled=a(c)}),y(g,()=>a(C),e=>v(C,e)),k(x,()=>a(S),e=>v(S,e)),d(`click`,T,A),d(`click`,E,()=>void j()),u(e,t)},pe=e=>{u(e,Rr())};r(de,e=>{a(h)?e(fe):e(pe,-1)}),b(ue),b(te),b(V),m(e=>{W.disabled=a(s)||a(c)||!t.tokenStored,ce.disabled=a(c),le.disabled=e},[()=>a(c)||!a(w).trim()]),d(`click`,W,()=>void D()),k(ce,()=>a(w),e=>v(w,e)),d(`click`,le,()=>void I()),u(e,V),F()}l([`click`]);var Vr=e(`<option></option>`),Hr=e(`<span class="spinner svelte-1844cb2"></span>`),Ur=e(`<span class="spinner svelte-1844cb2"></span>`),Wr=e(`<div class="error-banner svelte-1844cb2"><span> </span></div>`),Gr=e(`<p class="empty-note svelte-1844cb2">No LLM profiles configured — add one below.</p>`),Kr=e(`<span class="badge badge--default svelte-1844cb2">Default</span>`),qr=e(`<button class="btn btn-sm">Set Default</button>`),Jr=e(`<div class="profile-row svelte-1844cb2"><span class="profile-row-name svelte-1844cb2"> </span> <!> <div class="profile-row-actions svelte-1844cb2"><!> <button class="btn btn-sm">Edit</button> <button class="btn btn-sm btn-danger">Remove</button></div></div>`),Yr=e(`<div class="profile-list svelte-1844cb2"></div>`),Xr=e(`<p class="empty-note svelte-1844cb2">No agent profiles defined.</p>`),Zr=e(`<span class="badge badge--default svelte-1844cb2">Default</span>`),Qr=e(`<button class="btn btn-sm">Set Default</button>`),$r=e(`<div class="profile-row svelte-1844cb2"><span class="profile-row-name svelte-1844cb2"> </span> <span class="badge svelte-1844cb2"> </span> <!> <div class="profile-row-actions svelte-1844cb2"><!> <button class="btn btn-sm">Edit</button> <button class="btn btn-sm btn-danger">Remove</button></div></div>`),ei=e(`<div class="profile-list svelte-1844cb2"></div>`),ti=e(`<p class="empty-note svelte-1844cb2">No improve profiles defined — add one below.</p>`),ni=e(`<span class="profile-row-desc svelte-1844cb2"> </span>`),ri=e(`<span class="badge badge--default svelte-1844cb2">Default</span>`),ii=e(`<button class="btn btn-sm">Set Default</button>`),ai=e(`<div class="profile-row svelte-1844cb2"><span class="profile-row-name svelte-1844cb2"> </span> <!> <!> <div class="profile-row-actions svelte-1844cb2"><!> <button class="btn btn-sm">Edit</button> <button class="btn btn-sm btn-danger">Remove</button></div></div>`),oi=e(`<div class="profile-list svelte-1844cb2"></div>`),si=e(`<p class="section-note svelte-1844cb2"><span class="badge badge--off svelte-1844cb2">Not detected</span> No personal AKM was found on this host (<code>~/.config/akm/config.json</code>).
|
|
14
|
+
Run <code>akm init</code> on this machine to enable sharing.</p>`),ci=e(`<code class="host-akm-path svelte-1844cb2"> </code>`),li=e(`<div class="control-group control-group--wide svelte-1844cb2"><label class="control-label control-label--checkbox svelte-1844cb2"><input type="checkbox"/> Also import host LLM/agent profiles (read-only snapshot)</label></div>`),ui=e(`<span class="spinner svelte-1844cb2"></span>`),di=e(`<button class="btn btn-secondary btn-sm">Re-import host profiles</button>`),fi=e(`<div class="controls controls--grid svelte-1844cb2"><div class="control-group control-group--wide svelte-1844cb2"><span class="control-label svelte-1844cb2">Status</span> <div class="host-akm-status svelte-1844cb2"><span> </span> <!></div></div> <!> <div class="control-group control-group--wide host-akm-actions svelte-1844cb2"><button><!> </button> <!></div></div>`),pi=e(`<section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">Host AKM Sharing</h3> <p class="section-note svelte-1844cb2">Let the assistant read (and, on explicit request, contribute back to) your
|
|
15
|
+
personal AKM stash on this machine (<code>~/akm</code>). Each side keeps its own
|
|
16
|
+
primary stash, database, and cache — only the knowledge files are shared, as a
|
|
17
|
+
writable secondary source. Your files' ownership and primary stash are never
|
|
18
|
+
changed. Changes take effect after the next stack restart.</p> <!></section>`),mi=e(`<div class="controls controls--grid svelte-1844cb2"><div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-name">Profile Name</label> <input id="d-llm-name" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="e.g. default"/></div> <div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-endpoint">Endpoint</label> <input id="d-llm-endpoint" class="control-input svelte-1844cb2" type="url" spellcheck="false" placeholder="https://api.openai.com/v1/chat/completions"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-model">Model</label> <input id="d-llm-model" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="gpt-4o-mini"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-provider">Provider (label)</label> <input id="d-llm-provider" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="openai"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-apikey">API Key</label> <div class="input-with-toggle svelte-1844cb2"><input id="d-llm-apikey" class="control-input svelte-1844cb2" spellcheck="false"/> <button type="button" class="btn-icon svelte-1844cb2"> </button></div></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-temperature">Temperature (0–2)</label> <input id="d-llm-temperature" class="control-input control-input--narrow svelte-1844cb2" type="number" min="0" max="2" step="0.1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-maxtokens">Max tokens</label> <input id="d-llm-maxtokens" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-timeout">Timeout (ms)</label> <input id="d-llm-timeout" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-concurrency">Concurrency</label> <input id="d-llm-concurrency" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-contextlength">Context length</label> <input id="d-llm-contextlength" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-llm-judgemodel">Judge model</label> <input id="d-llm-judgemodel" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="gpt-4o"/></div></div> <label class="toggle-row svelte-1844cb2" style="margin-top: var(--space-4)"><input type="checkbox" class="svelte-1844cb2"/> <span class="toggle-label svelte-1844cb2">Supports JSON schema</span> <span class="toggle-hint svelte-1844cb2">Use response_format: json_schema for structured output</span></label> <label class="toggle-row svelte-1844cb2"><input type="checkbox" class="svelte-1844cb2"/> <span class="toggle-label svelte-1844cb2">Structured output capability</span> <span class="toggle-hint svelte-1844cb2">capabilities.structuredOutput — model reliably returns valid structured JSON</span></label> <label class="toggle-row svelte-1844cb2"><input type="checkbox" class="svelte-1844cb2"/> <span class="toggle-label svelte-1844cb2">Enable thinking</span> <span class="toggle-hint svelte-1844cb2">Allow extended/thinking tokens for reasoning models</span></label> <div class="control-group control-group--wide svelte-1844cb2" style="margin-top: var(--space-4)"><label class="control-label svelte-1844cb2" for="d-llm-extra">Extra params (JSON)</label> <textarea id="d-llm-extra" class="control-input svelte-1844cb2" rows="3" spellcheck="false"></textarea> <span class="feat-hint svelte-1844cb2">Merged into the provider request body. Must be a JSON object.</span></div>`,1),hi=e(`<div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-agent-bin">Binary</label> <input id="d-agent-bin" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="opencode"/></div> <div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-agent-args">Extra args (space-separated)</label> <input id="d-agent-args" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="run --model gpt-4o"/></div>`,1),gi=e(`<div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-agent-model">Model</label> <input id="d-agent-model" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="anthropic/claude-sonnet-4-5"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-agent-workspace">Workspace</label> <input id="d-agent-workspace" class="control-input svelte-1844cb2" type="text" spellcheck="false"/></div>`,1),_i=e(`<div class="controls controls--grid svelte-1844cb2"><div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-agent-name">Profile Name</label> <input id="d-agent-name" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="e.g. opencode"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-agent-platform">Platform</label> <select id="d-agent-platform" class="control-input svelte-1844cb2"><option>opencode</option><option>claude</option><option>opencode-sdk</option></select></div> <!></div>`),vi=e(`<label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Quality gate</span> <select class="control-input svelte-1844cb2"><option>Default</option><option>Enabled</option><option>Disabled</option></select></label>`),yi=e(`<label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Contradiction detection</span> <select class="control-input svelte-1844cb2"><option>Default</option><option>Enabled</option><option>Disabled</option></select></label>`),bi=e(`<label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Default since</span> <input class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="e.g. 7d, 2026-01-01"/></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Max total chars</span> <input class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Max chunk size (1–50)</span> <input class="control-input control-input--narrow svelte-1844cb2" type="number" min="1" max="50"/></label>`,1),xi=e(`<label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Apply mode</span> <select class="control-input svelte-1844cb2"><option>Default</option><option>Queue</option><option>Promote</option></select></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Policy</span> <input class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="policy name/ref"/></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Max accepts per run</span> <input class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Max diff lines</span> <input class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></label> <label class="adv-field adv-field--check svelte-1844cb2"><input type="checkbox"/> <span class="svelte-1844cb2">Reject empty diffs</span></label> <div class="adv-field adv-field--wide svelte-1844cb2"><span class="adv-sublabel svelte-1844cb2">Judgment (overrides for the accept/reject decision)</span> <div class="proc-adv-grid svelte-1844cb2"><label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Mode</span> <select class="control-input svelte-1844cb2"><option>Default</option><option>LLM</option><option>Agent</option><option>SDK</option></select></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Profile</span> <input class="control-input svelte-1844cb2" type="text" spellcheck="false" list="llm-profiles-list"/></label> <label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Timeout (ms)</span> <input class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></label></div></div>`,1),Si=e(`<div class="proc-card svelte-1844cb2"><div class="proc-head svelte-1844cb2"><input type="checkbox" class="svelte-1844cb2"/> <div class="proc-name svelte-1844cb2"><span class="feat-name svelte-1844cb2"> </span><span class="feat-hint svelte-1844cb2"> </span></div> <select class="control-input svelte-1844cb2"><option>Default mode</option><option>LLM (direct call)</option><option>Agent (subprocess)</option><option>SDK (programmatic)</option></select> <input class="control-input svelte-1844cb2" type="text" spellcheck="false" list="llm-profiles-list" placeholder="— default profile —"/> <input class="control-input control-input--narrow svelte-1844cb2" type="number" min="1" placeholder="timeout ms"/></div> <details class="proc-adv svelte-1844cb2"><summary class="svelte-1844cb2">Advanced</summary> <div class="proc-adv-grid svelte-1844cb2"><label class="adv-field svelte-1844cb2"><span class="svelte-1844cb2">Allowed types (comma-separated)</span> <input class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="skill, knowledge, …"/></label> <!> <!> <!> <!></div></details></div>`),Ci=e(`<div class="controls controls--grid svelte-1844cb2"><div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-name">Profile Name</label> <input id="d-imp-name" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="e.g. default"/></div> <div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-desc">Description</label> <input id="d-imp-desc" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="Optional description"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-limit">Max proposals per run</label> <input id="d-imp-limit" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1" max="100"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-autoacc">Auto-accept threshold (0 = manual)</label> <input id="d-imp-autoacc" class="control-input control-input--narrow svelte-1844cb2" type="number" min="0" max="1" step="0.05"/></div></div> <div class="proc-list svelte-1844cb2"></div> <div class="controls controls--grid svelte-1844cb2"><div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-sync">Git sync after run</label> <select id="d-imp-sync" class="control-input svelte-1844cb2"><option>Default</option><option>Enabled</option><option>Disabled</option></select></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-syncpush">Push to remote</label> <select id="d-imp-syncpush" class="control-input svelte-1844cb2"><option>Default</option><option>Enabled</option><option>Disabled</option></select></div> <div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="d-imp-syncmsg">Commit message</label> <input id="d-imp-syncmsg" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="Optional commit message"/></div></div>`,1),wi=e(`<div class="drawer-scrim svelte-1844cb2" role="presentation"></div> <div class="drawer svelte-1844cb2" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1844cb2"><h3 class="drawer-title svelte-1844cb2"><!></h3> <button class="drawer-close svelte-1844cb2" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1844cb2"><!></div> <div class="drawer-footer svelte-1844cb2"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`,1),Ti=e(`<datalist id="llm-profiles-list"></datalist> <div class="panel" role="tabpanel"><div class="panel-header svelte-1844cb2"><h2 class="svelte-1844cb2">Knowledge</h2> <div class="panel-header-actions svelte-1844cb2"><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-1844cb2"><section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">LLM Profiles</h3> <p class="section-note svelte-1844cb2">Named connection configs your improve pipeline can reference. Add one per LLM service you want AKM to use.</p> <!> <button class="btn btn-secondary btn-sm">+ Add LLM Profile</button></section> <section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">Agent Profiles</h3> <p class="section-note svelte-1844cb2">Named runner configs for pipeline steps that spawn a subprocess (opencode or claude CLI).</p> <!> <button class="btn btn-secondary btn-sm">+ Add Agent Profile</button></section> <section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">Improve Profiles</h3> <p class="section-note svelte-1844cb2">Named configurations for <code>akm improve</code>. Each profile defines which processes run and which LLM/agent they use.</p> <!> <button class="btn btn-secondary btn-sm">+ Add Improve Profile</button></section> <section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">Embedding Connection</h3> <p class="section-note svelte-1844cb2">Vector embedding provider for semantic search. Leave Endpoint and Model blank to use built-in local embeddings.</p> <div class="controls controls--grid svelte-1844cb2"><div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embEndpoint">Endpoint</label> <input id="embEndpoint" class="control-input svelte-1844cb2" type="url" spellcheck="false" placeholder="https://api.openai.com/v1/embeddings"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embModel">Model</label> <input id="embModel" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="text-embedding-3-small"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embProvider">Provider (label)</label> <input id="embProvider" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="openai"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embApiKey">API Key</label> <div class="input-with-toggle svelte-1844cb2"><input id="embApiKey" class="control-input svelte-1844cb2" spellcheck="false"/> <button type="button" class="btn-icon svelte-1844cb2"> </button></div></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embDimension">Dimensions</label> <input id="embDimension" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embLocalModel">Local model</label> <input id="embLocalModel" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="Xenova/bge-small-en-v1.5"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embBatchSize">Batch size</label> <input id="embBatchSize" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embChunkSize">Chunk size (chars)</label> <input id="embChunkSize" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embContextLength">Context length</label> <input id="embContextLength" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="embOllamaNumCtx">Ollama num_ctx</label> <input id="embOllamaNumCtx" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1"/></div></div></section> <section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">Behavior</h3> <div class="controls controls--grid svelte-1844cb2"><div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="semanticSearch">Semantic search</label> <select id="semanticSearch" class="control-input svelte-1844cb2"><option>Auto (vector index when available)</option><option>Off (keyword only)</option></select></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="outputFormat">Output format</label> <select id="outputFormat" class="control-input svelte-1844cb2"><option>JSON</option><option>YAML</option><option>Text</option></select></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="outputDetail">Output detail</label> <select id="outputDetail" class="control-input svelte-1844cb2"><option>Brief</option><option>Normal</option><option>Full</option></select></div></div></section> <section class="config-section svelte-1844cb2"><h3 class="section-title svelte-1844cb2">Advanced</h3> <p class="section-note svelte-1844cb2">Global tuning beyond per-profile settings. Leave blank to use akm defaults.</p> <div class="controls controls--grid svelte-1844cb2"><div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-halflife">Utility decay half-life (days)</label> <input id="adv-halflife" class="control-input control-input--narrow svelte-1844cb2" type="number" min="0.1" step="0.1" placeholder="default"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-fbboost">Feedback stability boost (≥1)</label> <input id="adv-fbboost" class="control-input control-input--narrow svelte-1844cb2" type="number" min="1" step="0.1" placeholder="default"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-eventret">Event retention (days)</label> <input id="adv-eventret" class="control-input control-input--narrow svelte-1844cb2" type="number" min="0" placeholder="default"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-minscore">Search min score</label> <input id="adv-minscore" class="control-input control-input--narrow svelte-1844cb2" type="number" min="0" step="0.01" placeholder="default"/></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-rerank">Curate rerank</label> <select id="adv-rerank" class="control-input svelte-1844cb2"><option>Default</option><option>Enabled</option><option>Disabled</option></select></div> <div class="control-group svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-reqreason">Feedback requires reason</label> <select id="adv-reqreason" class="control-input svelte-1844cb2"><option>Default</option><option>Required</option><option>Optional</option></select></div> <div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-failmodes">Allowed feedback failure modes (comma-separated)</label> <input id="adv-failmodes" class="control-input svelte-1844cb2" type="text" spellcheck="false" placeholder="e.g. outdated, incorrect, irrelevant"/></div> <div class="control-group control-group--wide svelte-1844cb2"><label class="control-label svelte-1844cb2" for="adv-index">Index config (JSON, per-pass)</label> <textarea id="adv-index" class="control-input svelte-1844cb2" rows="4" spellcheck="false"></textarea> <span class="section-note svelte-1844cb2">Advanced per-pass indexing options (enrichment, graphExtraction, metadataEnhance, stalenessDetection). Must be a JSON object.</span></div></div></section> <!></div> <!></div>`,1);function Ei(e,t){E(t,!0);let s=f(!1),l=f(!1),h=f(``),C=f(null),w=f(!1),T=f(!0);async function D(){try{v(C,await U(),!0)}catch{v(C,null)}}async function O(){if(!a(w)){v(w,!0);try{if(a(C)?.sharing.enabled)v(C,await me(),!0),X.push(`success`,`Host AKM sharing disabled. Restart the stack to apply.`);else{let e=await se({writable:!0,importProfiles:a(T)});v(C,e,!0);let t=e.profilesImported?.length?` Imported: ${e.profilesImported.join(`, `)}.`:``;X.push(`success`,`Host AKM sharing enabled.${t} Takes effect on the assistant's next AKM run / stack restart.`),a(T)&&await Ke()}}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to update host AKM sharing.`)}finally{v(w,!1)}}}async function j(){if(!a(w)){v(w,!0);try{let e=await se({writable:!0,importProfiles:!0});v(C,e,!0);let t=e.profilesImported?.length?e.profilesImported.join(`, `):`none`;X.push(`success`,`Re-imported host profiles: ${t}.`),await Ke()}catch(e){X.push(`error`,e instanceof Error?e.message:`Failed to re-import host profiles.`)}finally{v(w,!1)}}}let M=[`reflect`,`distill`,`consolidate`,`validation`,`memoryInference`,`graphExtraction`,`extract`,`triage`],I={reflect:`Propose stash updates via self-reflection`,distill:`Quality-judge and distill feedback`,consolidate:`Deduplicate and merge overlapping memories`,validation:`Third-model confidence and staleness scoring`,memoryInference:`Derive structured memories from pending files`,graphExtraction:`Extract entities and relations for graph search`,extract:`Read session logs and queue insight proposals`,triage:`Auto-review and accept/promote queued proposals`},V=f(g([])),H=f(``),W=f(g([])),G=f(``),K=f(g([])),q=f(``),J=f(``),ee=f(``),te=f(``),ne=f(``),re=f(!1),ie=f(1536),Y=f(``),ae=f(``),oe=f(``),le=f(``),de=f(``),fe=f(`auto`),pe=f(`json`),he=f(`brief`),ge=f(``),_e=f(``),ve=f(``),ye=f(``),be=f(``),xe=f(``),Se=f(``),Ce=f(``),we=f(null),Z=f(null),Q=f(null),$=f(null),Te=S(()=>a(V).map(e=>e.name).filter(e=>e));function Ee(e){if(typeof e==`number`)return isNaN(e)?void 0:e;let t=parseFloat(e);return e.trim()===``||isNaN(t)?void 0:t}function De(e){if(typeof e==`number`)return isNaN(e)?void 0:Math.trunc(e);let t=parseInt(e,10);return e.trim()===``||isNaN(t)?void 0:t}function Oe(){return{id:crypto.randomUUID(),name:``,endpoint:``,model:``,provider:``,apiKey:``,showApiKey:!1,temperature:``,maxTokens:``,timeoutMs:``,concurrency:``,contextLength:``,judgeModel:``,supportsJsonSchema:!1,enableThinking:!1,structuredOutput:!1,extraParams:``}}function ke(){return{id:crypto.randomUUID(),name:``,platform:`opencode`,bin:``,args:``,workspace:``,model:``}}let Ae={reflect:!0,distill:!0,consolidate:!1,validation:!1,memoryInference:!0,graphExtraction:!0,extract:!0,triage:!1};function je(e){return{enabled:e,mode:``,profile:``,timeoutMs:``,allowedTypes:``,qualityGate:``,contradictionDetection:``,defaultSince:``,maxTotalChars:``,maxChunkSize:``,applyMode:``,policy:``,maxAcceptsPerRun:``,maxDiffLines:``,rejectEmpty:!1,judgment:{mode:``,profile:``,timeoutMs:``},rest:{}}}function Me(){let e={};for(let t of M)e[t]=je(Ae[t]);return{id:crypto.randomUUID(),name:``,description:``,limit:25,autoAccept:0,processes:e,syncEnabled:``,syncPush:``,syncMessage:``}}let Ne=e=>typeof e==`object`&&e&&`enabled`in e?e.enabled?`on`:`off`:``,Pe=new Set([`enabled`,`mode`,`profile`,`timeoutMs`,`allowedTypes`,`qualityGate`,`contradictionDetection`,`defaultSince`,`maxTotalChars`,`maxChunkSize`,`applyMode`,`policy`,`maxAcceptsPerRun`,`maxDiffLines`,`rejectEmpty`,`judgment`]);function Fe(e,t){let n=je(t);if(typeof e==`boolean`)return n.enabled=e,n;if(typeof e!=`object`||!e||Array.isArray(e))return n;let r=e;if(typeof r.enabled==`boolean`&&(n.enabled=r.enabled),n.mode=r.mode??``,n.profile=r.profile??``,n.timeoutMs=r.timeoutMs==null?``:String(r.timeoutMs),n.allowedTypes=Array.isArray(r.allowedTypes)?r.allowedTypes.join(`, `):``,n.qualityGate=Ne(r.qualityGate),n.contradictionDetection=Ne(r.contradictionDetection),n.defaultSince=r.defaultSince??``,n.maxTotalChars=r.maxTotalChars==null?``:String(r.maxTotalChars),n.maxChunkSize=r.maxChunkSize==null?``:String(r.maxChunkSize),n.applyMode=r.applyMode??``,n.policy=r.policy??``,n.maxAcceptsPerRun=r.maxAcceptsPerRun==null?``:String(r.maxAcceptsPerRun),n.maxDiffLines=r.maxDiffLines==null?``:String(r.maxDiffLines),n.rejectEmpty=r.rejectEmpty===!0,typeof r.judgment==`object`&&r.judgment!==null){let e=r.judgment;n.judgment={mode:e.mode??``,profile:e.profile??``,timeoutMs:e.timeoutMs==null?``:String(e.timeoutMs)}}for(let[e,t]of Object.entries(r))Pe.has(e)||(n.rest[e]=t);return n}function Ie(e){let t={...e.rest,enabled:e.enabled};e.mode&&(t.mode=e.mode),e.profile&&(t.profile=e.profile),e.timeoutMs!==``&&(t.timeoutMs=parseInt(e.timeoutMs,10));let n=e.allowedTypes.split(`,`).map(e=>e.trim()).filter(Boolean);n.length&&(t.allowedTypes=n),e.qualityGate&&(t.qualityGate={enabled:e.qualityGate===`on`}),e.contradictionDetection&&(t.contradictionDetection={enabled:e.contradictionDetection===`on`}),e.defaultSince&&(t.defaultSince=e.defaultSince);let r=De(e.maxTotalChars);r!==void 0&&(t.maxTotalChars=r);let i=De(e.maxChunkSize);i!==void 0&&(t.maxChunkSize=i),e.applyMode&&(t.applyMode=e.applyMode),e.policy&&(t.policy=e.policy);let a=De(e.maxAcceptsPerRun);a!==void 0&&(t.maxAcceptsPerRun=a);let o=De(e.maxDiffLines);o!==void 0&&(t.maxDiffLines=o),e.rejectEmpty&&(t.rejectEmpty=!0);let s={};return e.judgment.mode&&(s.mode=e.judgment.mode),e.judgment.profile&&(s.profile=e.judgment.profile),e.judgment.timeoutMs!==``&&(s.timeoutMs=parseInt(e.judgment.timeoutMs,10)),Object.keys(s).length&&(t.judgment=s),t}function Le(e){return{endpoint:e.endpoint??``,model:e.model??``,provider:e.provider??``,apiKey:e.apiKey??``,showApiKey:!1,temperature:e.temperature==null?``:String(e.temperature),maxTokens:e.maxTokens==null?``:String(e.maxTokens),timeoutMs:e.timeoutMs==null?``:String(e.timeoutMs),concurrency:e.concurrency==null?``:String(e.concurrency),contextLength:e.contextLength==null?``:String(e.contextLength),judgeModel:e.judgeModel??``,supportsJsonSchema:e.supportsJsonSchema??!1,enableThinking:e.enableThinking??!1,structuredOutput:e.capabilities?.structuredOutput??!1,extraParams:e.extraParams&&typeof e.extraParams==`object`?JSON.stringify(e.extraParams,null,2):``}}function Re(e){let t={endpoint:e.endpoint,model:e.model};e.provider&&(t.provider=e.provider),e.apiKey&&(t.apiKey=e.apiKey);let n=Ee(e.temperature);n!==void 0&&(t.temperature=n);let r=De(e.maxTokens);r!==void 0&&(t.maxTokens=r);let i=De(e.timeoutMs);i!==void 0&&(t.timeoutMs=i);let a=De(e.concurrency);a!==void 0&&(t.concurrency=a);let o=De(e.contextLength);if(o!==void 0&&(t.contextLength=o),e.judgeModel&&(t.judgeModel=e.judgeModel),e.supportsJsonSchema&&(t.supportsJsonSchema=!0),e.enableThinking&&(t.enableThinking=!0),e.structuredOutput&&(t.capabilities={structuredOutput:!0}),e.extraParams.trim()){let n;try{n=JSON.parse(e.extraParams)}catch{throw Error(`LLM profile "${e.name}": extraParams must be valid JSON`)}if(typeof n!=`object`||!n||Array.isArray(n))throw Error(`LLM profile "${e.name}": extraParams must be a JSON object`);t.extraParams=n}return t}function ze(e,t){let n=t.processes??{},r={};for(let e of M)r[e]=Fe(n[e],Ae[e]);let i=t.sync;return{id:crypto.randomUUID(),name:e,description:t.description??``,limit:typeof t.limit==`number`?t.limit:25,autoAccept:typeof t.autoAccept==`number`?t.autoAccept:0,processes:r,syncEnabled:Ne(i?{enabled:i.enabled}:void 0),syncPush:Ne(i?{enabled:i.push}:void 0),syncMessage:i?.message??``}}function Be(e){v(Z,{...e},!0),v(we,`llm`)}function Ve(e){v(Q,{...e},!0),v(we,`agent`)}function He(e){let t={};for(let n of M){let r=e.processes[n];t[n]={...r,judgment:{...r.judgment},rest:{...r.rest}}}v($,{...e,processes:t},!0),v(we,`improve`)}function Ue(){if(a(we)===`llm`&&a(Z)){let e={...a(Z)},t=a(V).findIndex(t=>t.id===e.id),n=t>=0?a(V)[t].name:``;v(V,t>=0?a(V).map((n,r)=>r===t?e:n):[...a(V),e],!0),a(H)===n&&v(H,e.name,!0)}else if(a(we)===`agent`&&a(Q)){let e={...a(Q)},t=a(W).findIndex(t=>t.id===e.id),n=t>=0?a(W)[t].name:``;v(W,t>=0?a(W).map((n,r)=>r===t?e:n):[...a(W),e],!0),a(G)===n&&v(G,e.name,!0)}else if(a(we)===`improve`&&a($)){let e={...a($),processes:{...a($).processes}},t=a(K).findIndex(t=>t.id===e.id),n=t>=0?a(K)[t].name:``;v(K,t>=0?a(K).map((n,r)=>r===t?e:n):[...a(K),e],!0),a(q)===n&&v(q,e.name,!0)}We()}function We(){v(we,null),v(Z,null),v(Q,null),v($,null)}function Ge(e,t){if(e===`llm`){let e=a(V).find(e=>e.id===t)?.name??``;a(H)===e&&v(H,``),v(V,a(V).filter(e=>e.id!==t),!0)}else if(e===`agent`){let e=a(W).find(e=>e.id===t)?.name??``;a(G)===e&&v(G,``),v(W,a(W).filter(e=>e.id!==t),!0)}else{let e=a(K).find(e=>e.id===t)?.name??``;a(q)===e&&v(q,``),v(K,a(K).filter(e=>e.id!==t),!0)}a(we)===e&&We()}async function Ke(){v(s,!0),v(h,``);try{let{config:e}=await ce(),t=e.profiles,n=t?.llm;v(V,n?Object.entries(n).map(([e,t])=>({id:crypto.randomUUID(),name:e,...Le(t)})):[],!0);let r=t?.agent;v(W,r?Object.entries(r).map(([e,t])=>{let n=t;return{id:crypto.randomUUID(),name:e,platform:n.platform??`opencode`,bin:n.bin??``,args:Array.isArray(n.args)?n.args.join(` `):``,workspace:n.workspace??``,model:n.model??``}}):[],!0);let i=t?.improve;v(K,i?Object.entries(i).map(([e,t])=>ze(e,t)):[],!0);let a=e.defaults;v(H,a?.llm??``,!0),v(G,a?.agent??``,!0),v(q,a?.improve??``,!0);let o=e.embedding;v(J,o?.endpoint??``,!0),v(ee,o?.model??``,!0),v(te,o?.provider??``,!0),v(ne,o?.apiKey??``,!0),v(ie,typeof o?.dimension==`number`?o.dimension:1536,!0),v(Y,o?.localModel??``,!0),v(ae,o?.batchSize==null?``:String(o.batchSize),!0),v(oe,o?.chunkSize==null?``:String(o.chunkSize),!0),v(le,o?.contextLength==null?``:String(o.contextLength),!0);let s=o?.ollamaOptions;v(de,s?.num_ctx==null?``:String(s.num_ctx),!0),v(fe,e.semanticSearchMode??`auto`,!0);let c=e.output;v(pe,c?.format??`json`,!0),v(he,c?.detail??`brief`,!0);let l=e=>typeof e==`number`?String(e):``,u=e=>e&&typeof e==`object`&&`enabled`in e?e.enabled?`on`:`off`:``,d=e.improve,f=d?.utilityDecay;v(ge,l(f?.halfLifeDays),!0),v(_e,l(f?.feedbackStabilityBoost),!0),v(ve,l(d?.eventRetentionDays),!0);let p=e.search;v(ye,l(p?.minScore),!0),v(be,u(p?.curateRerank),!0);let m=e.feedback;v(xe,typeof m?.requireReason==`boolean`?m.requireReason?`on`:`off`:``,!0),v(Se,Array.isArray(m?.allowedFailureModes)?m.allowedFailureModes.join(`, `):``,!0),v(Ce,e.index&&typeof e.index==`object`?JSON.stringify(e.index,null,2):``,!0)}catch(e){v(h,e instanceof Error?e.message:`Failed to load AKM config.`,!0)}finally{v(s,!1)}}async function qe(){v(l,!0),v(h,``);try{let e={};for(let t of a(V))t.name.trim()&&(e[t.name.trim()]=Re(t));let t={};for(let e of a(W)){if(!e.name.trim())continue;let n={platform:e.platform};e.bin&&(n.bin=e.bin),e.args&&(n.args=e.args.split(/\s+/).filter(Boolean)),e.workspace&&(n.workspace=e.workspace),e.model&&(n.model=e.model),t[e.name.trim()]=n}let n={};for(let e of a(K)){if(!e.name.trim())continue;let t={};for(let n of M)t[n]=Ie(e.processes[n]);let r={limit:e.limit,processes:t};e.description&&(r.description=e.description),e.autoAccept>0&&(r.autoAccept=e.autoAccept);let i={};e.syncEnabled&&(i.enabled=e.syncEnabled===`on`),e.syncPush&&(i.push=e.syncPush===`on`),e.syncMessage.trim()&&(i.message=e.syncMessage.trim()),Object.keys(i).length&&(r.sync=i),n[e.name.trim()]=r}let r={endpoint:a(J),model:a(ee),dimension:a(ie)};a(te)&&(r.provider=a(te)),a(ne)&&(r.apiKey=a(ne)),a(Y)&&(r.localModel=a(Y));let i=De(a(ae));i!==void 0&&(r.batchSize=i);let o=De(a(oe));o!==void 0&&(r.chunkSize=o);let s=De(a(le));s!==void 0&&(r.contextLength=s);let c=De(a(de));c!==void 0&&(r.ollamaOptions={num_ctx:c});let l={};a(H)&&(l.llm=a(H)),a(G)&&(l.agent=a(G)),a(q)&&(l.improve=a(q));let u={},d={},f=Ee(a(ge));f!==void 0&&(d.halfLifeDays=f);let p=Ee(a(_e));p!==void 0&&(d.feedbackStabilityBoost=p),Object.keys(d).length&&(u.utilityDecay=d);let m=Ee(a(ve));m!==void 0&&(u.eventRetentionDays=m);let h={},g=Ee(a(ye));g!==void 0&&(h.minScore=g),a(be)&&(h.curateRerank={enabled:a(be)===`on`});let _={};a(xe)&&(_.requireReason=a(xe)===`on`);let v=a(Se).split(`,`).map(e=>e.trim()).filter(Boolean);v.length&&(_.allowedFailureModes=v);let y;if(a(Ce).trim()){let e;try{e=JSON.parse(a(Ce))}catch{throw Error(`Index config must be valid JSON`)}if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Index config must be a JSON object keyed by pass name`);y=e}await ue({profiles:{llm:e,agent:t,improve:n},defaults:l,embedding:r,semanticSearchMode:a(fe),output:{format:a(pe),detail:a(he)},...Object.keys(u).length?{improve:u}:{},...Object.keys(h).length?{search:h}:{},...Object.keys(_).length?{feedback:_}:{},...y===void 0?{}:{index:y}}),X.push(`success`,`AKM config saved.`)}catch(e){let t=e instanceof Error?e.message:`Failed to save AKM config.`;X.push(`error`,t)}finally{v(l,!1)}}P(()=>{t.tokenStored&&(Ke(),D())});var Je=Ti(),Ye=o(Je);B(Ye,21,()=>a(Te),p,(e,t)=>{var n=Vr(),r={};m(()=>{r!==(r=a(t))&&(n.value=(n.__value=a(t))??``)}),u(e,n)}),b(Ye);var Xe=_(Ye,2),Ze=N(Xe),Qe=_(N(Ze),2),$e=N(Qe),et=N($e),tt=e=>{u(e,Hr())};r(et,e=>{a(s)&&e(tt)}),L(),b($e);var nt=_($e,2),rt=N(nt),it=e=>{u(e,Ur())};r(rt,e=>{a(l)&&e(it)}),L(),b(nt),b(Qe),b(Ze);var at=_(Ze,2),ot=e=>{var t=Wr(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(h))),u(e,t)};r(at,e=>{a(h)&&e(ot)});var st=_(at,2),ct=N(st),lt=_(N(ct),4),ut=e=>{u(e,Gr())},dt=e=>{var t=Yr();B(t,21,()=>a(V),e=>e.id,(e,t)=>{var i=Jr(),o=N(i),c=N(o,!0);b(o);var f=_(o,2),p=e=>{u(e,Kr())};r(f,e=>{a(H)===a(t).name&&a(t).name&&e(p)});var h=_(f,2),g=N(h),y=e=>{var n=qr();m(()=>n.disabled=a(s)||a(l)),d(`click`,n,()=>{v(H,a(t).name,!0)}),u(e,n)};r(g,e=>{a(t).name&&a(H)!==a(t).name&&e(y)});var x=_(g,2),S=_(x,2);b(h),b(i),m(()=>{n(c,a(t).name||`(unnamed)`),x.disabled=a(s)||a(l),S.disabled=a(s)||a(l)}),d(`click`,x,()=>Be(a(t))),d(`click`,S,()=>Ge(`llm`,a(t).id)),u(e,i)}),b(t),u(e,t)};r(lt,e=>{a(V).length===0?e(ut):e(dt,-1)});var ft=_(lt,2);b(ct);var pt=_(ct,2),mt=_(N(pt),4),ht=e=>{u(e,Xr())},gt=e=>{var t=ei();B(t,21,()=>a(W),e=>e.id,(e,t)=>{var i=$r(),o=N(i),c=N(o,!0);b(o);var f=_(o,2),p=N(f,!0);b(f);var h=_(f,2),g=e=>{u(e,Zr())};r(h,e=>{a(G)===a(t).name&&a(t).name&&e(g)});var y=_(h,2),x=N(y),S=e=>{var n=Qr();m(()=>n.disabled=a(s)||a(l)),d(`click`,n,()=>{v(G,a(t).name,!0)}),u(e,n)};r(x,e=>{a(t).name&&a(G)!==a(t).name&&e(S)});var C=_(x,2),w=_(C,2);b(y),b(i),m(()=>{n(c,a(t).name||`(unnamed)`),n(p,a(t).platform),C.disabled=a(s)||a(l),w.disabled=a(s)||a(l)}),d(`click`,C,()=>Ve(a(t))),d(`click`,w,()=>Ge(`agent`,a(t).id)),u(e,i)}),b(t),u(e,t)};r(mt,e=>{a(W).length===0?e(ht):e(gt,-1)});var _t=_(mt,2);b(pt);var vt=_(pt,2),yt=_(N(vt),4),bt=e=>{u(e,ti())},xt=e=>{var t=oi();B(t,21,()=>a(K),e=>e.id,(e,t)=>{var i=ai(),o=N(i),c=N(o,!0);b(o);var f=_(o,2),p=e=>{var r=ni(),i=N(r,!0);b(r),m(()=>n(i,a(t).description)),u(e,r)};r(f,e=>{a(t).description&&e(p)});var h=_(f,2),g=e=>{u(e,ri())};r(h,e=>{a(q)===a(t).name&&a(t).name&&e(g)});var y=_(h,2),x=N(y),S=e=>{var n=ii();m(()=>n.disabled=a(s)||a(l)),d(`click`,n,()=>{v(q,a(t).name,!0)}),u(e,n)};r(x,e=>{a(t).name&&a(q)!==a(t).name&&e(S)});var C=_(x,2),w=_(C,2);b(y),b(i),m(()=>{n(c,a(t).name||`(unnamed)`),C.disabled=a(s)||a(l),w.disabled=a(s)||a(l)}),d(`click`,C,()=>He(a(t))),d(`click`,w,()=>Ge(`improve`,a(t).id)),u(e,i)}),b(t),u(e,t)};r(yt,e=>{a(K).length===0?e(bt):e(xt,-1)});var St=_(yt,2);b(vt);var Ct=_(vt,2),wt=_(N(Ct),4),Tt=N(wt),Et=_(N(Tt),2);R(Et),b(Tt);var Dt=_(Tt,2),Ot=_(N(Dt),2);R(Ot),b(Dt);var kt=_(Dt,2),At=_(N(kt),2);R(At),b(kt);var jt=_(kt,2),Mt=_(N(jt),2),Nt=N(Mt);R(Nt),x(Nt,`placeholder`,"${AKM_EMBED_API_KEY}");var Pt=_(Nt,2),Ft=N(Pt,!0);b(Pt),b(Mt),b(jt);var It=_(jt,2),Lt=_(N(It),2);R(Lt),b(It);var Rt=_(It,2),zt=_(N(Rt),2);R(zt),b(Rt);var Bt=_(Rt,2),Vt=_(N(Bt),2);R(Vt),b(Bt);var Ht=_(Bt,2),Ut=_(N(Ht),2);R(Ut),b(Ht);var Wt=_(Ht,2),Gt=_(N(Wt),2);R(Gt),b(Wt);var Kt=_(Wt,2),qt=_(N(Kt),2);R(qt),b(Kt),b(wt),b(Ct);var Jt=_(Ct,2),Yt=_(N(Jt),2),Xt=N(Yt),Zt=_(N(Xt),2),Qt=N(Zt);Qt.value=Qt.__value=`auto`;var $t=_(Qt);$t.value=$t.__value=`off`,b(Zt),b(Xt);var en=_(Xt,2),tn=_(N(en),2),nn=N(tn);nn.value=nn.__value=`json`;var rn=_(nn);rn.value=rn.__value=`yaml`;var an=_(rn);an.value=an.__value=`text`,b(tn),b(en);var on=_(en,2),sn=_(N(on),2),cn=N(sn);cn.value=cn.__value=`brief`;var ln=_(cn);ln.value=ln.__value=`normal`;var un=_(ln);un.value=un.__value=`full`,b(sn),b(on),b(Yt),b(Jt);var dn=_(Jt,2),fn=_(N(dn),4),pn=N(fn),mn=_(N(pn),2);R(mn),b(pn);var hn=_(pn,2),gn=_(N(hn),2);R(gn),b(hn);var _n=_(hn,2),vn=_(N(_n),2);R(vn),b(_n);var yn=_(_n,2),bn=_(N(yn),2);R(bn),b(yn);var xn=_(yn,2),Sn=_(N(xn),2),Cn=N(Sn);Cn.value=Cn.__value=``;var wn=_(Cn);wn.value=wn.__value=`on`;var Tn=_(wn);Tn.value=Tn.__value=`off`,b(Sn),b(xn);var En=_(xn,2),Dn=_(N(En),2),On=N(Dn);On.value=On.__value=``;var kn=_(On);kn.value=kn.__value=`on`;var An=_(kn);An.value=An.__value=`off`,b(Dn),b(En);var jn=_(En,2),Mn=_(N(jn),2);R(Mn),b(jn);var Nn=_(jn,2),Pn=_(N(Nn),2);i(Pn),x(Pn,`placeholder`,`{ "enrichment": { "llm": false } }`),L(2),b(Nn),b(fn),b(dn);var Fn=_(dn,2),In=e=>{var i=pi(),o=_(N(i),4),s=e=>{u(e,si())},c=e=>{var i=fi(),o=N(i),s=_(N(o),2),c=N(s),l=N(c,!0);b(c);var f=_(c,2),p=e=>{var t=ci(),r=N(t,!0);b(t),m(()=>n(r,a(C).sharing.hostStashPath)),u(e,t)};r(f,e=>{a(C).sharing.hostStashPath&&e(p)}),b(s),b(o);var h=_(o,2),g=e=>{var t=li(),n=N(t),r=N(n);R(r),L(),b(n),b(t),m(()=>r.disabled=a(w)),y(r,()=>a(T),e=>v(T,e)),u(e,t)};r(h,e=>{a(C).sharing.enabled||e(g)});var x=_(h,2),S=N(x),E=N(S),D=e=>{u(e,ui())};r(E,e=>{a(w)&&e(D)});var k=_(E);b(S);var A=_(S,2),M=e=>{var n=di();m(()=>n.disabled=a(w)||!t.tokenStored),d(`click`,n,()=>void j()),u(e,n)};r(A,e=>{a(C).sharing.enabled&&e(M)}),b(x),b(i),m(()=>{z(c,1,`badge ${a(C).sharing.enabled?`badge--on`:`badge--off`}`,`svelte-1844cb2`),n(l,a(C).sharing.enabled?`Enabled`:`Disabled`),z(S,1,`btn ${a(C).sharing.enabled?`btn-secondary`:`btn-primary`} btn-sm`),S.disabled=a(w)||!t.tokenStored,n(k,` ${a(C).sharing.enabled?`Disable host sharing`:`Enable host sharing`}`)}),d(`click`,S,()=>void O()),u(e,i)};r(o,e=>{a(C).sharing.available?e(c,-1):e(s)}),b(i),u(e,i)};r(Fn,e=>{a(C)&&e(In)}),b(st);var Ln=_(st,2),Rn=e=>{var t=wi(),s=o(t),l=_(s,2),f=N(l),p=N(f),h=N(p),g=e=>{u(e,c(`LLM Profile`))},v=e=>{u(e,c(`Agent Profile`))},C=e=>{u(e,c(`Improve Profile`))};r(h,e=>{a(we)===`llm`?e(g):a(we)===`agent`?e(v,1):e(C,-1)}),b(p);var w=_(p,2);b(f);var T=_(f,2),E=N(T),D=e=>{var t=mi(),r=o(t),s=N(r),c=_(N(s),2);R(c),b(s);var l=_(s,2),f=_(N(l),2);R(f),b(l);var p=_(l,2),h=_(N(p),2);R(h),b(p);var g=_(p,2),v=_(N(g),2);R(v),b(g);var S=_(g,2),C=_(N(S),2),w=N(C);R(w),x(w,`placeholder`,"${AKM_LLM_API_KEY}");var T=_(w,2),E=N(T,!0);b(T),b(C),b(S);var D=_(S,2),O=_(N(D),2);R(O),b(D);var A=_(D,2),j=_(N(A),2);R(j),b(A);var M=_(A,2),P=_(N(M),2);R(P),b(M);var F=_(M,2),I=_(N(F),2);R(I),b(F);var z=_(F,2),B=_(N(z),2);R(B),b(z);var V=_(z,2),H=_(N(V),2);R(H),b(V),b(r);var U=_(r,2),W=N(U);R(W),L(4),b(U);var G=_(U,2),K=N(G);R(K),L(4),b(G);var q=_(G,2),J=N(q);R(J),L(4),b(q);var ee=_(q,2),te=_(N(ee),2);i(te),x(te,`placeholder`,`{ "top_p": 0.9 }`),L(2),b(ee),m(()=>{x(w,`type`,a(Z).showApiKey?`text`:`password`),x(T,`aria-label`,a(Z).showApiKey?`Hide`:`Show`),n(E,a(Z).showApiKey?`Hide`:`Show`)}),k(c,()=>a(Z).name,e=>a(Z).name=e),k(f,()=>a(Z).endpoint,e=>a(Z).endpoint=e),k(h,()=>a(Z).model,e=>a(Z).model=e),k(v,()=>a(Z).provider,e=>a(Z).provider=e),k(w,()=>a(Z).apiKey,e=>a(Z).apiKey=e),d(`click`,T,()=>{a(Z)&&(a(Z).showApiKey=!a(Z).showApiKey)}),k(O,()=>a(Z).temperature,e=>a(Z).temperature=e),k(j,()=>a(Z).maxTokens,e=>a(Z).maxTokens=e),k(P,()=>a(Z).timeoutMs,e=>a(Z).timeoutMs=e),k(I,()=>a(Z).concurrency,e=>a(Z).concurrency=e),k(B,()=>a(Z).contextLength,e=>a(Z).contextLength=e),k(H,()=>a(Z).judgeModel,e=>a(Z).judgeModel=e),y(W,()=>a(Z).supportsJsonSchema,e=>a(Z).supportsJsonSchema=e),y(K,()=>a(Z).structuredOutput,e=>a(Z).structuredOutput=e),y(J,()=>a(Z).enableThinking,e=>a(Z).enableThinking=e),k(te,()=>a(Z).extraParams,e=>a(Z).extraParams=e),u(e,t)},O=e=>{var t=_i(),n=N(t),i=_(N(n),2);R(i),b(n);var s=_(n,2),c=_(N(s),2),l=N(c);l.value=l.__value=`opencode`;var d=_(l);d.value=d.__value=`claude`;var f=_(d);f.value=f.__value=`opencode-sdk`,b(c),b(s);var p=_(s,2),m=e=>{var t=hi(),n=o(t),r=_(N(n),2);R(r),b(n);var i=_(n,2),s=_(N(i),2);R(s),b(i),k(r,()=>a(Q).bin,e=>a(Q).bin=e),k(s,()=>a(Q).args,e=>a(Q).args=e),u(e,t)},h=e=>{var t=gi(),n=o(t),r=_(N(n),2);R(r),b(n);var i=_(n,2),s=_(N(i),2);R(s),x(s,`placeholder`,"${PWD}"),b(i),k(r,()=>a(Q).model,e=>a(Q).model=e),k(s,()=>a(Q).workspace,e=>a(Q).workspace=e),u(e,t)};r(p,e=>{a(Q).platform===`opencode-sdk`?e(h,-1):e(m)}),b(t),k(i,()=>a(Q).name,e=>a(Q).name=e),A(c,()=>a(Q).platform,e=>a(Q).platform=e),u(e,t)},j=e=>{var t=Ci(),i=o(t),s=N(i),c=_(N(s),2);R(c),b(s);var l=_(s,2),d=_(N(l),2);R(d),b(l);var f=_(l,2),p=_(N(f),2);R(p),b(f);var h=_(f,2),g=_(N(h),2);R(g),b(h),b(i);var v=_(i,2);B(v,20,()=>M,e=>e,(e,t)=>{let i=S(()=>a($).processes[t]);var s=Si(),c=N(s),l=N(c);R(l);var d=_(l,2),f=N(d),p=N(f,!0);b(f);var h=_(f),g=N(h,!0);b(h),b(d);var v=_(d,2),C=N(v);C.value=C.__value=``;var w=_(C);w.value=w.__value=`llm`;var T=_(w);T.value=T.__value=`agent`;var E=_(T);E.value=E.__value=`sdk`,b(v);var D=_(v,2);R(D);var O=_(D,2);R(O),b(c);var j=_(c,2),M=_(N(j),2),P=N(M),F=_(N(P),2);R(F),b(P);var z=_(P,2),B=e=>{var t=vi(),n=_(N(t),2),r=N(n);r.value=r.__value=``;var o=_(r);o.value=o.__value=`on`;var s=_(o);s.value=s.__value=`off`,b(n),b(t),A(n,()=>a(i).qualityGate,e=>a(i).qualityGate=e),u(e,t)};r(z,e=>{(t===`reflect`||t===`distill`)&&e(B)});var V=_(z,2),H=e=>{var t=yi(),n=_(N(t),2),r=N(n);r.value=r.__value=``;var o=_(r);o.value=o.__value=`on`;var s=_(o);s.value=s.__value=`off`,b(n),b(t),A(n,()=>a(i).contradictionDetection,e=>a(i).contradictionDetection=e),u(e,t)};r(V,e=>{t===`consolidate`&&e(H)});var U=_(V,2),W=e=>{var t=bi(),n=o(t),r=_(N(n),2);R(r),b(n);var s=_(n,2),c=_(N(s),2);R(c),b(s);var l=_(s,2),d=_(N(l),2);R(d),b(l),k(r,()=>a(i).defaultSince,e=>a(i).defaultSince=e),k(c,()=>a(i).maxTotalChars,e=>a(i).maxTotalChars=e),k(d,()=>a(i).maxChunkSize,e=>a(i).maxChunkSize=e),u(e,t)};r(U,e=>{t===`extract`&&e(W)});var G=_(U,2),K=e=>{var t=xi(),n=o(t),r=_(N(n),2),s=N(r);s.value=s.__value=``;var c=_(s);c.value=c.__value=`queue`;var l=_(c);l.value=l.__value=`promote`,b(r),b(n);var d=_(n,2),f=_(N(d),2);R(f),b(d);var p=_(d,2),m=_(N(p),2);R(m),b(p);var h=_(p,2),g=_(N(h),2);R(g),b(h);var v=_(h,2),x=N(v);R(x),L(2),b(v);var S=_(v,2),C=_(N(S),2),w=N(C),T=_(N(w),2),E=N(T);E.value=E.__value=``;var D=_(E);D.value=D.__value=`llm`;var O=_(D);O.value=O.__value=`agent`;var j=_(O);j.value=j.__value=`sdk`,b(T),b(w);var M=_(w,2),P=_(N(M),2);R(P),b(M);var F=_(M,2),I=_(N(F),2);R(I),b(F),b(C),b(S),A(r,()=>a(i).applyMode,e=>a(i).applyMode=e),k(f,()=>a(i).policy,e=>a(i).policy=e),k(m,()=>a(i).maxAcceptsPerRun,e=>a(i).maxAcceptsPerRun=e),k(g,()=>a(i).maxDiffLines,e=>a(i).maxDiffLines=e),y(x,()=>a(i).rejectEmpty,e=>a(i).rejectEmpty=e),A(T,()=>a(i).judgment.mode,e=>a(i).judgment.mode=e),k(P,()=>a(i).judgment.profile,e=>a(i).judgment.profile=e),k(I,()=>a(i).judgment.timeoutMs,e=>a(i).judgment.timeoutMs=e),u(e,t)};r(G,e=>{t===`triage`&&e(K)}),b(M),b(j),b(s),m(()=>{x(l,`aria-label`,`${t??``} enabled`),n(p,t),n(g,I[t]),x(v,`aria-label`,`${t??``} mode`),x(D,`aria-label`,`${t??``} profile`),x(O,`aria-label`,`${t??``} timeout`)}),y(l,()=>a(i).enabled,e=>a(i).enabled=e),A(v,()=>a(i).mode,e=>a(i).mode=e),k(D,()=>a(i).profile,e=>a(i).profile=e),k(O,()=>a(i).timeoutMs,e=>a(i).timeoutMs=e),k(F,()=>a(i).allowedTypes,e=>a(i).allowedTypes=e),u(e,s)}),b(v);var C=_(v,2),w=N(C),T=_(N(w),2),E=N(T);E.value=E.__value=``;var D=_(E);D.value=D.__value=`on`;var O=_(D);O.value=O.__value=`off`,b(T),b(w);var j=_(w,2),P=_(N(j),2),F=N(P);F.value=F.__value=``;var z=_(F);z.value=z.__value=`on`;var V=_(z);V.value=V.__value=`off`,b(P),b(j);var H=_(j,2),U=_(N(H),2);R(U),b(H),b(C),k(c,()=>a($).name,e=>a($).name=e),k(d,()=>a($).description,e=>a($).description=e),k(p,()=>a($).limit,e=>a($).limit=e),k(g,()=>a($).autoAccept,e=>a($).autoAccept=e),A(T,()=>a($).syncEnabled,e=>a($).syncEnabled=e),A(P,()=>a($).syncPush,e=>a($).syncPush=e),k(U,()=>a($).syncMessage,e=>a($).syncMessage=e),u(e,t)};r(E,e=>{a(we)===`llm`&&a(Z)?e(D):a(we)===`agent`&&a(Q)?e(O,1):a(we)===`improve`&&a($)&&e(j,2)}),b(T);var P=_(T,2),F=N(P),z=_(F,2);b(P),b(l),d(`click`,s,We),d(`click`,w,We),d(`click`,F,We),d(`click`,z,Ue),u(e,t)};r(Ln,e=>{a(we)!==null&&e(Rn)}),b(Xe),m(()=>{$e.disabled=a(s)||a(l)||!t.tokenStored,nt.disabled=a(s)||a(l)||!t.tokenStored,ft.disabled=a(s)||a(l),_t.disabled=a(s)||a(l),St.disabled=a(s)||a(l),Et.disabled=a(s)||a(l),Ot.disabled=a(s)||a(l),At.disabled=a(s)||a(l),x(Nt,`type`,a(re)?`text`:`password`),Nt.disabled=a(s)||a(l),x(Pt,`aria-label`,a(re)?`Hide API key`:`Show API key`),n(Ft,a(re)?`Hide`:`Show`),Lt.disabled=a(s)||a(l),zt.disabled=a(s)||a(l),Vt.disabled=a(s)||a(l),Ut.disabled=a(s)||a(l),Gt.disabled=a(s)||a(l),qt.disabled=a(s)||a(l),Zt.disabled=a(s)||a(l),tn.disabled=a(s)||a(l),sn.disabled=a(s)||a(l),mn.disabled=a(s)||a(l),gn.disabled=a(s)||a(l),vn.disabled=a(s)||a(l),bn.disabled=a(s)||a(l),Sn.disabled=a(s)||a(l),Dn.disabled=a(s)||a(l),Mn.disabled=a(s)||a(l),Pn.disabled=a(s)||a(l)}),d(`click`,$e,()=>void Ke()),d(`click`,nt,()=>void qe()),d(`click`,ft,()=>{v(Z,Oe(),!0),v(we,`llm`)}),d(`click`,_t,()=>{v(Q,ke(),!0),v(we,`agent`)}),d(`click`,St,()=>{v($,Me(),!0),v(we,`improve`)}),k(Et,()=>a(J),e=>v(J,e)),k(Ot,()=>a(ee),e=>v(ee,e)),k(At,()=>a(te),e=>v(te,e)),k(Nt,()=>a(ne),e=>v(ne,e)),d(`click`,Pt,()=>{v(re,!a(re))}),k(Lt,()=>a(ie),e=>v(ie,e)),k(zt,()=>a(Y),e=>v(Y,e)),k(Vt,()=>a(ae),e=>v(ae,e)),k(Ut,()=>a(oe),e=>v(oe,e)),k(Gt,()=>a(le),e=>v(le,e)),k(qt,()=>a(de),e=>v(de,e)),A(Zt,()=>a(fe),e=>v(fe,e)),A(tn,()=>a(pe),e=>v(pe,e)),A(sn,()=>a(he),e=>v(he,e)),k(mn,()=>a(ge),e=>v(ge,e)),k(gn,()=>a(_e),e=>v(_e,e)),k(vn,()=>a(ve),e=>v(ve,e)),k(bn,()=>a(ye),e=>v(ye,e)),A(Sn,()=>a(be),e=>v(be,e)),A(Dn,()=>a(xe),e=>v(xe,e)),k(Mn,()=>a(Se),e=>v(Se,e)),k(Pn,()=>a(Ce),e=>v(Ce,e)),u(e,Je),F()}l([`click`]);var Di=e(`<span class="spinner svelte-1iuj2un"></span>`),Oi=e(`<span class="spinner svelte-1iuj2un"></span>`),ki=e(`<div class="error-banner svelte-1iuj2un"><span> </span></div>`),Ai=e(`<span class="spinner svelte-1iuj2un"></span>`),ji=e(`<span class="test-result test-result--ok svelte-1iuj2un" 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>`),Mi=e(`<span class="test-result test-result--err svelte-1iuj2un" 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>`),Ni=e(`<div class="tts-extras svelte-1iuj2un"><div class="test-voice-row svelte-1iuj2un"><button type="button" class="btn btn-secondary btn-sm"><!> Test voice</button> <!></div> <label class="auto-speak-toggle svelte-1iuj2un"><input type="checkbox" class="svelte-1iuj2un"/> <span>Speak assistant replies aloud automatically</span></label></div>`),Pi=e(`<section class="engine-section svelte-1iuj2un"><h3 class="engine-heading svelte-1iuj2un">Hardware profile</h3> <!></section>`),Fi=e(`<div class="panel" role="tabpanel"><div class="panel-header svelte-1iuj2un"><h2 class="svelte-1iuj2un">Voice</h2> <div class="panel-header-actions svelte-1iuj2un"><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-1iuj2un"><p class="section-desc svelte-1iuj2un">Configure how the assistant listens and speaks. Choose an engine for each;
|
|
19
|
+
the in-app mic uses STT and the optional auto-speak toggle uses TTS.</p> <section class="engine-section svelte-1iuj2un"><h3 class="engine-heading svelte-1iuj2un">Text-to-Speech</h3> <p class="engine-subheading svelte-1iuj2un">How your assistant speaks</p> <!> <!></section> <section class="engine-section svelte-1iuj2un"><h3 class="engine-heading svelte-1iuj2un">Speech-to-Text</h3> <p class="engine-subheading svelte-1iuj2un">How your assistant listens</p> <!></section> <!></div></div>`);function Ii(e,t){E(t,!0);let i=[{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.`}],s={"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:[]}},c={"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`}]}},l=()=>({engine:``,baseURL:``,model:``,voice:``,language:``}),p=f(!1),h=f(!1),y=f(``),x=f(g(l())),w=f(g(l())),T=f(g({stt:{remoteConfigured:!1,remoteReachable:!1},tts:{remoteConfigured:!1,remoteReachable:!1}})),D=f(g([])),O=f(``),k=S(()=>a(x).engine===`openpalm-voice`||a(w).engine===`openpalm-voice`),A=f(!1),j=f(!1),M=f(!1),I=f(null),z=f(``);function B(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 V(e){a(x).engine=e.engine||``,a(x).baseURL=e.baseURL??``,a(x).model=e.model??``,a(x).voice=e.voice??``}function H(e){a(w).engine=e.engine||``,a(w).baseURL=e.baseURL??``,a(w).model=e.model??``,a(w).language=e.language??``}let U=S(()=>{let e={};return a(A)&&Se.browserSttUnsupportedReason&&(e.browser={disabled:!0,reason:Se.browserSttUnsupportedReason}),e}),W=S(()=>a(j)?void 0:new Set([`browser`])),G=S(()=>a(A)?void 0:new Set([`browser`]));function K(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 q(e,t){let n=l();return!e||typeof e!=`object`?n:(n.engine=K(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 J(){v(p,!0),v(y,``);try{let e=await oe();v(x,q(e.tts,`tts`),!0),v(w,q(e.stt,`stt`),!0);let t=e.availability;if(t&&v(T,t,!0),e.addon){v(D,e.addon.profiles??[],!0);let t=e=>!!e&&e.available!==!1,n=e.addon.selectedProfile??``,r=a(D).find(e=>e.id===n);if(t(r))v(O,n,!0);else{let e=a(D).find(e=>e.id===`addon.voice.cpu`&&t(e))??a(D).find(e=>e.default&&t(e))??a(D).find(e=>t(e));v(O,e?.id??``,!0),r&&e&&n!==e.id&&X.push(`info`,`"${r.label??n}" profile isn't available on this host${r.reason?` (${r.reason})`:``}. Using "${e.label??e.id}" instead.`)}}}catch(e){v(y,e instanceof Error?e.message:`Failed to load voice settings.`,!0)}finally{v(p,!1)}}function ee(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 te(){v(h,!0),v(y,``);let e=a(x).engine===`openpalm-voice`||a(w).engine===`openpalm-voice`,t=null,n=null;e&&(t=X.push(`info`,`Enabling voice addon…`,{sticky:!0}),n=setTimeout(()=>{t&&X.push(`info`,`Starting voice addon — this may take a moment…`,{sticky:!0,replaceId:t})},1500));try{let r=await xe({tts:ee(a(x),`tts`),stt:ee(a(w),`stt`),...a(k)&&a(O)?{profile:a(O)}:{}});if(n&&=(clearTimeout(n),null),e&&t){let e=r.voiceAddon;r.status===202&&e?(X.push(`info`,e.message??`Voice image is downloading — this can take several minutes.`,{sticky:!0,replaceId:t}),ne(t),t=null):r.ok&&e?X.push(`success`,e.wasAlreadyEnabled?`Voice addon ready — let's chat!`:`Voice addon started, let's chat!`,{replaceId:t}):e?X.push(`error`,e.error??`Voice addon failed to start.`,{replaceId:t}):X.push(`success`,`Voice settings saved.`,{replaceId:t})}e||X.push(`success`,`Voice settings saved.`),await J()}catch(r){n&&=(clearTimeout(n),null);let i=r instanceof Error?r.message:`Failed to save voice settings.`;v(y,i,!0),t?X.push(`error`,i,{replaceId:t}):e&&X.push(`error`,i)}finally{v(h,!1)}}async function ne(e){let t=Date.now()+30*6e4,n=`pulling`;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,3e3));try{let t=(await oe()).addon?.activeJob;if(!t){X.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await J();return}if(t.state===`healthy`){X.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await J();return}if(t.state===`error`){X.push(`error`,t.error??`Voice addon failed to start.`,{replaceId:e}),await J();return}if(t.state!==n){n=t.state;let r=t.state===`starting`?`Voice container started — warming up models…`:`Voice image still downloading…`;X.push(`info`,r,{sticky:!0,replaceId:e})}}catch{}}X.push(`error`,`Voice addon is taking longer than 30 minutes. Check Docker logs for openpalm-voice.`,{replaceId:e}),await J()}async function re(){if(!a(M)){v(M,!0),v(I,null),v(z,``);try{Se.errorMessage=``,await ye(`Hello! Your voice is working.`),Se.errorMessage?(v(I,`error`),v(z,Se.errorMessage,!0)):v(I,`success`)}catch(e){v(I,`error`),v(z,e instanceof Error?e.message:`Voice test failed.`,!0)}finally{v(M,!1),setTimeout(()=>{v(I,null),v(z,``)},5e3)}}}P(()=>{v(A,`SpeechRecognition`in window||`webkitSpeechRecognition`in window,!0),v(j,`speechSynthesis`in window),t.tokenStored&&J()});var ie=Fi(),Y=N(ie),ae=_(N(Y),2),se=N(ae),ce=N(se),le=e=>{u(e,Di())};r(ce,e=>{a(p)&&e(le)}),L(),b(se);var ue=_(se,2),de=N(ue),fe=e=>{u(e,Oi())};r(de,e=>{a(h)&&e(fe)}),L(),b(ue),b(ae),b(Y);var me=_(Y,2),he=e=>{var t=ki(),r=N(t),i=N(r,!0);b(r),b(t),m(()=>n(i,a(y))),u(e,t)};r(me,e=>{a(y)&&e(he)});var ge=_(me,2),_e=_(N(ge),2),ve=_(N(_e),4);{let e=S(()=>B(a(x)));De(ve,{kind:`tts`,get value(){return a(e)},onchange:V,get engineOptions(){return i},get engineConfigs(){return s},get reachable(){return a(T).tts},reachabilityEngineId:`remote`,get hiddenEngines(){return a(W)}})}var be=_(ve,2),Ce=e=>{var t=Ni(),i=N(t),o=N(i),s=N(o),c=e=>{u(e,Ai())};r(s,e=>{a(M)&&e(c)}),L(),b(o);var l=_(o,2),f=e=>{u(e,ji())},g=e=>{var t=Mi(),r=_(N(t));b(t),m(()=>n(r,` ${(a(z)||`Failed`)??``}`)),u(e,t)};r(l,e=>{a(I)===`success`?e(f):a(I)===`error`&&e(g,1)}),b(i);var v=_(i,2),y=N(v);R(y),L(2),b(v),b(t),m(()=>{o.disabled=a(M)||a(h)||a(p),C(y,Se.ttsAutoEnabled)}),d(`click`,o,()=>void re()),d(`change`,y,e=>pe(e.currentTarget.checked)),u(e,t)};r(be,e=>{a(x).engine&&e(Ce)}),b(_e);var we=_(_e,2),Z=_(N(we),4);{let e=S(()=>B(a(w)));De(Z,{kind:`stt`,get value(){return a(e)},onchange:H,get engineOptions(){return o},get engineConfigs(){return c},get reachable(){return a(T).stt},reachabilityEngineId:`remote`,get disabledEngines(){return a(U)},get hiddenEngines(){return a(G)}})}b(we);var Q=_(we,2),$=e=>{var t=Pi();Oe(_(N(t),2),{get profiles(){return a(D)},get selectedProfile(){return a(O)},onchange:e=>v(O,e,!0)}),b(t),u(e,t)};r(Q,e=>{a(k)&&a(D).length>0&&e($)}),b(ge),b(ie),m(()=>{se.disabled=a(p)||a(h)||!t.tokenStored,ue.disabled=a(p)||a(h)||!t.tokenStored}),d(`click`,se,()=>void J()),d(`click`,ue,()=>void te()),u(e,ie),F()}l([`click`,`change`]);var Li=e(`<!> <main class="svelte-1jef3w8"><!> <!> <!></main>`,1);function Ri(e,n){E(n,!0);let i=f(!0),c=f(!1),l=f(``),d=f(null),p=f(null),m=f(``),h=f(!1),y=f(!1),x=f(!1),C=f(!1),w=f(!1),T=f(``),D=f(`info`),k=f(null),A=f(``),M=f(null),I=f(null),L=f(``),R=f(null),z=f(`overview`),B=f(!1),U=f(``),W=f(!1),q=f(!1),J=f(!1),ne=f(!1),ie=f(`latest`),Y=f(``),ae=f(g([])),oe=f(!1),se=f(g([])),ce=f(!1),le=null;function ue(){fe(),le=setInterval(()=>{!a(i)&&a(k)&&Se()},1e4)}function fe(){le!==null&&(clearInterval(le),le=null)}j(()=>{fe()});let pe=S(()=>a(y)||a(x)),me=S(()=>{if(!a(k))return new Map;let e=new Map;if(a(k).containers)for(let[t,n]of Object.entries(a(k).containers))e.set(t,n);if(a(k).dockerContainers)for(let t of a(k).dockerContainers)e.set(t.Service,t.State);return e}),X=S(()=>{if(!a(k))return[];let e=new Map;if(a(k).containers)for(let[t,n]of Object.entries(a(k).containers))e.set(t,{id:t,service:t,state:n,docker:null});if(a(k).dockerContainers)for(let t of a(k).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 ye(){v(i,!0),v(l,`Invalid password.`),v(m,`Invalid password.`)}async function be(e){if(a(c))return!1;v(c,!0),v(l,``);try{return(await fetch(`/admin/auth/login`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({password:e}),credentials:`include`})).ok?(v(i,!1),v(l,``),v(m,``),ue(),await xe(),Se(),Ce(),we(),Q(),!0):(ye(),!1)}catch(e){return console.warn(`[page] Auth failed:`,e),v(l,`Unable to reach admin API.`),!1}finally{v(c,!1)}}async function xe(){v(h,!0);try{let e=await _e();v(d,e.admin,!0),v(p,e.guardian,!0)}catch(e){console.warn(`[page] Health check failed:`,e),v(d,{status:`error`,service:`admin`},!0),v(p,{status:`error`,service:`guardian`},!0)}v(h,!1)}async function Se(){v(C,!0),v(A,``);try{v(k,await G(),!0)}catch(e){v(k,null);let t=e;t.status===401?(v(A,`Invalid password.`),ye()):v(A,`Failed to load containers: ${t.message??e}`)}v(C,!1),a(k)&&v(M,new Date().toLocaleTimeString(),!0)}async function Ce(){v(w,!0),v(L,``);try{v(I,await K(),!0)}catch(e){v(I,null);let t=e;t.status===401?(v(L,`Invalid password.`),ye()):v(L,`Failed to load automations: ${t.message??e}`)}v(w,!1)}async function we(){try{let e=await re();v(U,e.imageTag,!0),v(W,e.inElectron,!0)}catch{}}async function Q(){v(oe,!0),v(ce,!0);try{let[e,t]=await Promise.all([ge(),te()]);if(v(ae,e.releases,!0),v(se,t.versions,!0),!a(Y)){let e=t.versions.find(e=>e.distTag===`next`||e.distTag===`latest`)??t.versions[0];e&&v(Y,e.version,!0)}}catch{}v(oe,!1),v(ce,!1)}async function Te(){if(!a(pe)){v(y,!0);try{let e=await he();if(e.overallSuccess)v(T,e.restarted.length>0?`Changes applied successfully. Restarted: ${e.restarted.join(`, `)}.`:`Changes applied successfully.`,!0),v(D,`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(`, `)})`:``;v(T,`Apply failed for ${e.failed.length} service(s): ${t}${n}`),v(D,`error`)}else e.dockerAvailable?(v(T,`Apply failed: ${e.error??`unknown error`}`),v(D,`error`)):(v(T,`Config written, but Docker is unavailable — services were not restarted.`),v(D,`error`))}catch(e){let t=e;t.status===401?ye():(v(T,`Error applying changes: ${t.message??e}`),v(D,`error`))}v(y,!1)}}async function De(){if(!a(pe)){v(x,!0);try{let e=await H();v(T,`Upgrade complete (image: ${e.imageTag}). ${e.assetsUpdated.length} asset(s) updated, ${e.restarted.length} service(s) restarted.`),v(D,`success`)}catch(e){let t=e;t.status===401?ye():(v(T,`Error upgrading stack: ${t.message??e}`),v(D,`error`))}v(x,!1)}}async function Oe(e){if(!a(q)){v(q,!0);try{let t=await de(e);v(U,t.imageTag,!0),v(ie,t.imageTag,!0),v(T,`Image tag set to ${t.imageTag}. Restarted: ${t.restarted.join(`, `)||`none`}.`),v(D,`success`)}catch(e){v(T,`Failed to apply image tag: ${e.message??e}`),v(D,`error`)}v(q,!1)}}async function ke(e){if(!a(J)){v(J,!0),v(ne,!1);try{await Z(e),v(Y,e,!0),v(ne,!0)}catch(e){v(T,`Failed to download UI version: ${e.message??e}`),v(D,`error`)}v(J,!1)}}function je(){window.openpalm?.restart?.()}async function Me(e,t){try{await ve(e,t),await Se()}catch(e){let t=e;t.status===401?ye():v(A,`Action failed: ${t.message??e}`)}}function Ne(e){v(R,a(R)===e?null:e,!0)}let Pe=S(()=>{if(!a(k))return[];let e=new Set;if(a(k).containers)for(let t of Object.keys(a(k).containers))e.add(t);if(a(k).dockerContainers)for(let t of a(k).dockerContainers)t.Service&&e.add(t.Service);return[...e].sort()});async function Fe(){v(B,!0);try{await ee(),await Se()}catch(e){let t=e;t.status===401?ye():v(A,`Pull failed: ${t.message??e}`)}finally{v(B,!1)}}function Ie(e){v(z,e,!0),e===`containers`&&!a(k)&&Se(),e===`automations`&&!a(I)&&Ce()}function Le(){ye()}P(()=>{(async()=>{v(c,!0);try{let e=await fetch(`/admin/health`,{credentials:`include`});if(e.status===401||e.status===503){v(i,!0),v(c,!1);return}v(i,!1),v(l,``),v(m,``),ue(),xe(),Se(),Ce(),we(),Q()}catch(e){console.warn(`[page] Session probe on mount failed:`,e),v(i,!0),v(l,`Unable to reach admin API.`)}finally{v(c,!1)}})()});var Re=O();V(`1jef3w8`,e=>{t(()=>{s.title=`OpenPalm Console`})});var ze=o(Re),Be=e=>{Ee(e,{onSuccess:be,get loading(){return a(c)},get error(){return a(l)}})},Ve=e=>{var t=Li(),n=o(t);$(n,{});var i=_(n,2),s=N(i);Ae(s,{get active(){return a(z)},onSelect:Ie});var c=_(s,2),l=e=>{dt(e,{get adminHealth(){return a(d)},get operationResult(){return a(T)},get operationResultType(){return a(D)},tokenStored:!0,get healthLoading(){return a(h)},get applyLoading(){return a(y)},get upgradeLoading(){return a(x)},get anyDangerousLoading(){return a(pe)},get automationsData(){return a(I)},get mergedServices(){return a(me)},get currentImageTag(){return a(U)},get tagChangeLoading(){return a(q)},get uiDownloadLoading(){return a(J)},get uiDownloadReady(){return a(ne)},get inElectron(){return a(W)},get selectedImageTag(){return a(ie)},get selectedUiTag(){return a(Y)},get releases(){return a(ae)},get releasesLoading(){return a(oe)},get uiVersions(){return a(se)},get uiVersionsLoading(){return a(ce)},onCheckHealth:xe,onApplyChanges:Te,onUpgradeStack:De,onDismissResult:()=>{v(T,``),v(D,`info`)},onSetImageTag:Oe,onDownloadUiVersion:ke,onRestartApp:je,onSelectedImageTagChange:e=>{v(ie,e,!0)},onSelectedUiTagChange:e=>{v(Y,e,!0)}})},f=e=>{kt(e,{onAuthError:Le})},p=e=>{un(e,{get containerData(){return a(k)},get serviceEntries(){return a(X)},get loading(){return a(C)},get error(){return a(A)},tokenStored:!0,get selectedContainerId(){return a(R)},onToggleContainer:Ne,onStart:e=>Me(`start`,e),onStop:e=>Me(`stop`,e),onRestart:e=>Me(`restart`,e),onRefresh:Se,onPullImages:Fe,get lastUpdated(){return a(M)},get pullLoading(){return a(B)}})},m=e=>{wn(e,{get data(){return a(I)},get loading(){return a(w)},get error(){return a(L)},tokenStored:!0,onRefresh:Ce})},g=e=>{xr(e,{})},S=e=>{Br(e,{tokenStored:!0})};r(c,e=>{a(z)===`overview`?e(l):a(z)===`addons`?e(f,1):a(z)===`containers`?e(p,2):a(z)===`automations`?e(m,3):a(z)===`connections`?e(g,4):a(z)===`secrets`&&e(S,5)});var E=_(c,2),O=e=>{Ii(e,{tokenStored:!0})},j=e=>{Ei(e,{tokenStored:!0})},P=e=>{jr(e,{tokenStored:!0,get services(){return a(Pe)}})};r(E,e=>{a(z)===`voice`?e(O):a(z)===`akm`?e(j,1):a(z)===`logs`&&e(P,2)}),b(i),u(e,t)};r(ze,e=>{a(i)?e(Be):e(Ve,-1)}),u(e,Re),F()}export{Ri as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A as e,B as t,D as n,E as r,F as i,I as a,J as o,K as s,N as c,O as l,P as u,Q as d,V as f,Y as p,Z as m,c as h,ct as g,d as _,et as v,it as y,k as b,l as x,q as S,r as C,rt as w,st as T,u as E,v as D,w as O,y as k}from"../chunks/BwTF6U35.js";import"../chunks/xihTtKlq.js";import{
|
|
1
|
+
import{A as e,B as t,D as n,E as r,F as i,I as a,J as o,K as s,N as c,O as l,P as u,Q as d,V as f,Y as p,Z as m,c as h,ct as g,d as _,et as v,it as y,k as b,l as x,q as S,r as C,rt as w,st as T,u as E,v as D,w as O,y as k}from"../chunks/BwTF6U35.js";import"../chunks/xihTtKlq.js";import{Q as A,_ as j,h as M}from"../chunks/DXseS2Vw.js";import{n as N,r as P,t as F}from"../chunks/CF3TKiGr.js";var ee=e(`<div class="alert error svelte-m7qpzt" role="alert"> </div>`),te=e(`<span class="badge default svelte-m7qpzt">Default</span>`),I=e(`<span class="badge active svelte-m7qpzt">Active</span>`),L=e(`<span class="badge password svelte-m7qpzt" title="Server password configured">🔒</span>`),R=e(`<button type="button" class="btn btn-primary btn-sm">Use this</button>`),ne=e(`<button type="button" class="btn btn-secondary btn-sm">Edit</button> <button type="button" class="btn btn-danger btn-sm svelte-m7qpzt"> </button>`,1),re=e(`<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>`),ie=e(`<button type="button" class="btn btn-primary">+ Add endpoint</button>`),ae=e(`<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>`),oe=e(`<label class="field-inline svelte-m7qpzt"><input type="checkbox"/> <span>Clear stored password</span></label>`),se=e(`<div class="alert error svelte-m7qpzt" role="alert"> </div>`),ce=e(`<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>`),le=e(`<!> <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 z(e,c){y(c,!0);let z=d(!0),B=d(!1),V=d(``),H=d(`idle`),U=d(null),W=d(``),G=d(``),K=d(``),q=d(!1),J=d(!1),Y=d(``),X=d(null),ue=v(()=>P.endpoints),Z=v(()=>P.active);async function de(e){if(a(B))return!1;m(B,!0),m(V,``);try{return(await fetch(`/admin/auth/login`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({password:e}),credentials:`include`})).ok?(m(z,!1),await P.load(!0),!0):(m(V,`Invalid password.`),!1)}catch{return m(V,`Unable to reach admin API.`),!1}finally{m(B,!1)}}C(()=>{(async()=>{m(B,!0);try{let e=await fetch(`/admin/health`,{credentials:`include`});if(e.status===401||e.status===503){m(z,!0);return}m(z,!1),await P.load(!0)}catch{m(V,`Unable to reach admin API.`)}finally{m(B,!1)}})()});function fe(){m(H,`add`),m(U,null),m(W,``),m(G,``),m(K,``),m(q,!1),m(Y,``)}function pe(e){m(H,`edit`),m(U,e.id,!0),m(W,e.label,!0),m(G,e.url,!0),m(K,``),m(q,!1),m(Y,``)}function me(){m(H,`idle`),m(Y,``)}async function Q(e){if(e.preventDefault(),a(J))return;let t=a(W).trim(),n=a(G).trim();if(!t||!n){m(Y,`Label and URL are required.`);return}m(J,!0),m(Y,``);try{if(a(H)===`add`)await M({label:t,url:n,...a(K)?{password:a(K)}:{}});else if(a(H)===`edit`&&a(U)){let e={label:t,url:n};a(q)?e.password=null:a(K)&&(e.password=a(K)),await A(a(U),e)}await P.load(!0),m(H,`idle`)}catch(e){m(Y,e.message??`Save failed.`,!0)}finally{m(J,!1)}}async function he(e){try{await P.activate(e)}catch{}}async function ge(e){if(!e.isDefault&&confirm(`Remove endpoint "${e.label}"?`)){m(X,e.id,!0);try{await j(e.id),await P.load(!0)}catch(e){P.error=e.message??`Delete failed.`}finally{m(X,null)}}}var $=b();k(`m7qpzt`,e=>{t(()=>{s.title=`Assistant Endpoints — OpenPalm`})});var _e=o($),ve=e=>{F(e,{onSuccess:de,get loading(){return a(B)},get error(){return a(V)}})},ye=e=>{var t=le(),s=o(t);N(s,{});var c=p(s,2),d=p(S(c),2),v=e=>{var t=ee(),r=S(t,!0);g(t),f(()=>n(r,P.error)),l(e,t)};r(d,e=>{P.error&&e(v)});var y=p(d,2);O(y,21,()=>a(ue),e=>e.id,(e,t)=>{var i=re();let s;var c=S(i),d=S(c),m=S(d),h=S(m,!0);g(m);var _=p(m,2),v=e=>{l(e,te())};r(_,e=>{a(t).isDefault&&e(v)});var y=p(_,2),b=e=>{l(e,I())};r(y,e=>{a(t).id===a(Z)?.id&&e(b)});var x=p(y,2),C=e=>{l(e,L())};r(x,e=>{a(t).hasPassword&&e(C)}),g(d);var w=p(d,2),T=S(w,!0);g(w),g(c);var E=p(c,2),O=S(E),k=e=>{var n=R();u(`click`,n,()=>he(a(t).id)),l(e,n)};r(O,e=>{a(t).id!==a(Z)?.id&&e(k)});var A=p(O,2),j=e=>{var r=ne(),i=o(r),s=p(i,2),c=S(s,!0);g(s),f(()=>{s.disabled=a(X)===a(t).id,n(c,a(X)===a(t).id?`Removing…`:`Remove`)}),u(`click`,i,()=>pe(a(t))),u(`click`,s,()=>ge(a(t))),l(e,r)};r(A,e=>{a(t).isDefault||e(j)}),g(E),g(i),f(()=>{s=D(i,1,`endpoint-card svelte-m7qpzt`,null,s,{active:a(t).id===a(Z)?.id}),n(h,a(t).label),n(T,a(t).url)}),l(e,i)}),g(y);var b=p(y,2),C=e=>{var t=ie();u(`click`,t,fe),l(e,t)},w=e=>{var t=ce(),o=S(t),s=S(o,!0);g(o);var c=p(o,2),d=p(S(c),2);E(d),g(c);var v=p(c,2),y=p(S(v),2);E(y),T(2),g(v);var b=p(v,2),C=p(S(b),2);E(C);var w=p(C,4),D=e=>{l(e,ae())};r(w,e=>{a(H)===`edit`&&e(D)}),g(b);var O=p(b,2),k=e=>{var t=oe(),n=S(t);E(n),T(2),g(t),h(n,()=>a(q),e=>m(q,e)),l(e,t)};r(O,e=>{a(H)===`edit`&&e(k)});var A=p(O,2),j=e=>{var t=se(),r=S(t,!0);g(t),f(()=>n(r,a(Y))),l(e,t)};r(A,e=>{a(Y)&&e(j)});var M=p(A,2),N=S(M),P=S(N,!0);g(N);var F=p(N,2);g(M),g(t),f(()=>{n(s,a(H)===`add`?`Add endpoint`:`Edit endpoint`),_(C,`placeholder`,a(H)===`edit`?`Leave blank to keep current`:``),N.disabled=a(J),n(P,a(J)?`Saving…`:`Save`),F.disabled=a(J)}),i(`submit`,t,Q),x(d,()=>a(W),e=>m(W,e)),x(y,()=>a(G),e=>m(G,e)),x(C,()=>a(K),e=>m(K,e)),u(`click`,F,me),l(e,t)};r(b,e=>{a(H)===`idle`?e(C):e(w,-1)}),g(c),l(e,t)};r(_e,e=>{a(z)?e(ve):e(ye,-1)}),l(e,$),w()}c([`click`]);export{z as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,B as t,E as n,I as r,J as i,K as a,O as o,Q as s,V as c,Y as l,Z as u,ct as d,d as f,et as p,it as m,k as h,q as g,r as _,rt as v,y}from"../chunks/BwTF6U35.js";import"../chunks/xihTtKlq.js";import{n as b,r as x,t as S}from"../chunks/
|
|
1
|
+
import{A as e,B as t,E as n,I as r,J as i,K as a,O as o,Q as s,V as c,Y as l,Z as u,ct as d,d as f,et as p,it as m,k as h,q as g,r as _,rt as v,y}from"../chunks/BwTF6U35.js";import"../chunks/xihTtKlq.js";import{n as b,r as x,t as S}from"../chunks/CF3TKiGr.js";var C=e(`<!> <div class="advanced-layout svelte-1z0msvj"><iframe class="opencode-frame svelte-1z0msvj" title="OpenCode — Advanced Chat" allow="clipboard-read; clipboard-write; microphone"></iframe></div>`,1);function w(e,w){m(w,!0);let T=s(!0),E=s(!1),D=s(``),O=p(()=>x.active?.url??`http://localhost:3800`);_(()=>{(async()=>{u(E,!0);try{let e=await fetch(`/admin/health`,{credentials:`include`});if(e.status===401||e.status===503){u(T,!0);return}u(T,!1),await x.load()}catch{u(T,!0),u(D,`Unable to reach admin API.`)}finally{u(E,!1)}})()});async function k(e){if(r(E))return!1;u(E,!0),u(D,``);try{return(await fetch(`/admin/auth/login`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({password:e}),credentials:`include`})).ok?(u(T,!1),u(D,``),await x.load(),!0):(u(T,!0),u(D,`Invalid password.`),!1)}catch{return u(T,!0),u(D,`Could not reach the server.`),!1}finally{u(E,!1)}}var A=h();y(`1z0msvj`,e=>{t(()=>{a.title=`Advanced Chat — OpenPalm`})});var j=i(A),M=e=>{S(e,{onSuccess:k,get loading(){return r(E)},get error(){return r(D)}})},N=e=>{var t=C(),n=i(t);b(n,{});var a=l(n,2),s=g(a);d(a),c(()=>f(s,`src`,r(O))),o(e,t)};n(j,e=>{r(T)?e(M):e(N,-1)}),o(e,A),v()}export{w as component};
|
|
Binary file
|
|
Binary file
|