@openpalm/ui 0.11.0-rc.11 → 0.11.0-rc.13
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.nenI9xO9.css +1 -0
- package/build/client/_app/immutable/assets/0.nenI9xO9.css.br +0 -0
- package/build/client/_app/immutable/assets/0.nenI9xO9.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.j3F-W7h_.css +1 -0
- package/build/client/_app/immutable/assets/4.j3F-W7h_.css.br +0 -0
- package/build/client/_app/immutable/assets/4.j3F-W7h_.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.CzC8JVIO.css +1 -0
- package/build/client/_app/immutable/assets/7.CzC8JVIO.css.br +0 -0
- package/build/client/_app/immutable/assets/7.CzC8JVIO.css.gz +0 -0
- package/build/client/_app/immutable/assets/8.cpz_TytB.css +1 -0
- package/build/client/_app/immutable/assets/8.cpz_TytB.css.br +0 -0
- package/build/client/_app/immutable/assets/8.cpz_TytB.css.gz +0 -0
- package/build/client/_app/immutable/assets/AuthGate._tqG1OIX.css +1 -0
- package/build/client/_app/immutable/assets/AuthGate._tqG1OIX.css.br +0 -0
- package/build/client/_app/immutable/assets/AuthGate._tqG1OIX.css.gz +0 -0
- package/build/client/_app/immutable/assets/ModeSwitch.DVIv_V4C.css +1 -0
- package/build/client/_app/immutable/assets/ModeSwitch.DVIv_V4C.css.br +0 -0
- package/build/client/_app/immutable/assets/ModeSwitch.DVIv_V4C.css.gz +0 -0
- package/build/client/_app/immutable/assets/Spinner.BtzHSsat.css +1 -0
- package/build/client/_app/immutable/assets/Spinner.BtzHSsat.css.br +2 -0
- package/build/client/_app/immutable/assets/Spinner.BtzHSsat.css.gz +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css +1 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css.br +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0swOyi-5.js +3 -0
- package/build/client/_app/immutable/chunks/0swOyi-5.js.br +0 -0
- package/build/client/_app/immutable/chunks/0swOyi-5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B1uQvvlv.js +5 -0
- package/build/client/_app/immutable/chunks/B1uQvvlv.js.br +0 -0
- package/build/client/_app/immutable/chunks/B1uQvvlv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DpdFx-ph.js → BBdT9Cjm.js} +1 -1
- package/build/client/_app/immutable/chunks/BBdT9Cjm.js.br +0 -0
- package/build/client/_app/immutable/chunks/BBdT9Cjm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BxZ6a55y.js → BPh8tqAg.js} +1 -1
- package/build/client/_app/immutable/chunks/BPh8tqAg.js.br +2 -0
- package/build/client/_app/immutable/chunks/BPh8tqAg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQ0vnNWj.js +1 -0
- package/build/client/_app/immutable/chunks/BQ0vnNWj.js.br +1 -0
- package/build/client/_app/immutable/chunks/BQ0vnNWj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CJkMgfFh.js → BQrb5YOM.js} +1 -1
- package/build/client/_app/immutable/chunks/BQrb5YOM.js.br +0 -0
- package/build/client/_app/immutable/chunks/BQrb5YOM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bmfn2m9N.js +1 -0
- package/build/client/_app/immutable/chunks/Bmfn2m9N.js.br +1 -0
- package/build/client/_app/immutable/chunks/Bmfn2m9N.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CrcMJfbz.js +1 -0
- package/build/client/_app/immutable/chunks/CrcMJfbz.js.br +0 -0
- package/build/client/_app/immutable/chunks/CrcMJfbz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/E7W0MQkU.js +1 -0
- package/build/client/_app/immutable/chunks/E7W0MQkU.js.br +0 -0
- package/build/client/_app/immutable/chunks/E7W0MQkU.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.9wfmQKXa.js +2 -0
- package/build/client/_app/immutable/entry/app.9wfmQKXa.js.br +0 -0
- package/build/client/_app/immutable/entry/app.9wfmQKXa.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BzWuQgSn.js +1 -0
- package/build/client/_app/immutable/entry/start.BzWuQgSn.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BzWuQgSn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DxAGOZgx.js +1 -0
- package/build/client/_app/immutable/nodes/0.DxAGOZgx.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DxAGOZgx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.B-z3blIe.js +1 -0
- package/build/client/_app/immutable/nodes/1.B-z3blIe.js.br +1 -0
- package/build/client/_app/immutable/nodes/1.B-z3blIe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B-8ehRO1.js +1 -0
- package/build/client/_app/immutable/nodes/2.B-8ehRO1.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B-8ehRO1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DHPuQEyR.js +1 -0
- package/build/client/_app/immutable/nodes/3.DHPuQEyR.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DHPuQEyR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DOO_QIq1.js +18 -0
- package/build/client/_app/immutable/nodes/4.DOO_QIq1.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DOO_QIq1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.BrAtimvQ.js +4 -0
- package/build/client/_app/immutable/nodes/5.BrAtimvQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BrAtimvQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CDpI1TrW.js +1 -0
- package/build/client/_app/immutable/nodes/6.CDpI1TrW.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CDpI1TrW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.fFA0e6kz.js → 7.B5KYnWwU.js} +7 -7
- package/build/client/_app/immutable/nodes/7.B5KYnWwU.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.B5KYnWwU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.2jRmEBBC.js +2 -0
- package/build/client/_app/immutable/nodes/8.2jRmEBBC.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.2jRmEBBC.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +1 -1
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/0-CP9GcQBP.js +9 -0
- package/build/server/chunks/{0-TTdZdv8o.js.map → 0-CP9GcQBP.js.map} +1 -1
- package/build/server/chunks/1-BDxTrwG3.js +9 -0
- package/build/server/chunks/{1-BhLqDyOn.js.map → 1-BDxTrwG3.js.map} +1 -1
- package/build/server/chunks/2-DQWoUtW1.js +9 -0
- package/build/server/chunks/{2-C2y4ydWU.js.map → 2-DQWoUtW1.js.map} +1 -1
- package/build/server/chunks/{3-BgeGdVvT.js → 3-gylRjzeN.js} +2 -2
- package/build/server/chunks/{3-BgeGdVvT.js.map → 3-gylRjzeN.js.map} +1 -1
- package/build/server/chunks/4-CBgm4iSo.js +9 -0
- package/build/server/chunks/4-CBgm4iSo.js.map +1 -0
- package/build/server/chunks/5-CD1fuYOe.js +9 -0
- package/build/server/chunks/5-CD1fuYOe.js.map +1 -0
- package/build/server/chunks/6-B6tmbcQ8.js +9 -0
- package/build/server/chunks/6-B6tmbcQ8.js.map +1 -0
- package/build/server/chunks/7-m4KLf_Gx.js +9 -0
- package/build/server/chunks/7-m4KLf_Gx.js.map +1 -0
- package/build/server/chunks/8-CmPpxrjv.js +9 -0
- package/build/server/chunks/8-CmPpxrjv.js.map +1 -0
- package/build/server/chunks/{AuthGate-C3ZisQbA.js → AuthGate-BcB49fE5.js} +44 -41
- package/build/server/chunks/AuthGate-BcB49fE5.js.map +1 -0
- package/build/server/chunks/ModeSwitch-D26evPMy.js +15 -0
- package/build/server/chunks/ModeSwitch-D26evPMy.js.map +1 -0
- package/build/server/chunks/Spinner-Bk6e83RX.js +12 -0
- package/build/server/chunks/Spinner-Bk6e83RX.js.map +1 -0
- package/build/server/chunks/VoiceProfileSelector-CbOV_v5A.js +306 -0
- package/build/server/chunks/VoiceProfileSelector-CbOV_v5A.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-B93aaRP_.js → _layout.svelte-BV7A7zff.js} +2 -2
- package/build/server/chunks/{_layout.svelte-B93aaRP_.js.map → _layout.svelte-BV7A7zff.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-CcloHuB_.js → _layout.svelte-C8ggVfth.js} +8 -8
- package/build/server/chunks/_layout.svelte-C8ggVfth.js.map +1 -0
- package/build/server/chunks/_page.svelte-CEjRvc8B.js +2579 -0
- package/build/server/chunks/_page.svelte-CEjRvc8B.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C6H2En_w.js → _page.svelte-Cy4kcLwu.js} +7 -6
- package/build/server/chunks/{_page.svelte-C6H2En_w.js.map → _page.svelte-Cy4kcLwu.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-D0gMlmzQ.js → _page.svelte-DLAHj-kk.js} +6 -14
- package/build/server/chunks/_page.svelte-DLAHj-kk.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DA9eUO0x.js → _page.svelte-DrWHHwCU.js} +8 -7
- package/build/server/chunks/{_page.svelte-DA9eUO0x.js.map → _page.svelte-DrWHHwCU.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Arw4vnr_.js → _page.svelte-WWZsjJuR.js} +25 -22
- package/build/server/chunks/_page.svelte-WWZsjJuR.js.map +1 -0
- package/build/server/chunks/{dev-DjANv7AF.js → dev-B6xUe35c.js} +23 -2
- package/build/server/chunks/{dev-DjANv7AF.js.map → dev-B6xUe35c.js.map} +1 -1
- package/build/server/chunks/{error.svelte-CEMlYvrw.js → error.svelte-CcHm-30A.js} +4 -4
- package/build/server/chunks/{error.svelte-CEMlYvrw.js.map → error.svelte-CcHm-30A.js.map} +1 -1
- package/build/server/chunks/{internal-CStLdOSk.js → internal-B08Y9iTe.js} +3 -3
- package/build/server/chunks/{internal-CStLdOSk.js.map → internal-B08Y9iTe.js.map} +1 -1
- package/build/server/chunks/{state-BCMZi_P3.js → state-CFHLgqLs.js} +3 -3
- package/build/server/chunks/{state-BCMZi_P3.js.map → state-CFHLgqLs.js.map} +1 -1
- package/build/server/chunks/{theme-state.svelte-PtPMmKGN.js → theme-state.svelte-y-mfJax7.js} +9 -2
- package/build/server/chunks/theme-state.svelte-y-mfJax7.js.map +1 -0
- package/build/server/index.js +2 -2
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +10 -10
- package/build/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/build/client/_app/immutable/assets/0.p3iHeEvq.css +0 -1
- package/build/client/_app/immutable/assets/0.p3iHeEvq.css.br +0 -0
- package/build/client/_app/immutable/assets/0.p3iHeEvq.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.DhrSl6jB.css +0 -1
- package/build/client/_app/immutable/assets/4.DhrSl6jB.css.br +0 -0
- package/build/client/_app/immutable/assets/4.DhrSl6jB.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.Cucah5cY.css +0 -1
- package/build/client/_app/immutable/assets/7.Cucah5cY.css.br +0 -0
- package/build/client/_app/immutable/assets/7.Cucah5cY.css.gz +0 -0
- package/build/client/_app/immutable/assets/8.DjrHy5wu.css +0 -1
- package/build/client/_app/immutable/assets/8.DjrHy5wu.css.br +0 -0
- package/build/client/_app/immutable/assets/8.DjrHy5wu.css.gz +0 -0
- package/build/client/_app/immutable/assets/AuthGate.B8fOC_pJ.css +0 -1
- package/build/client/_app/immutable/assets/AuthGate.B8fOC_pJ.css.br +0 -0
- package/build/client/_app/immutable/assets/AuthGate.B8fOC_pJ.css.gz +0 -0
- package/build/client/_app/immutable/assets/ModeSwitch.RmRIDur-.css +0 -1
- package/build/client/_app/immutable/assets/ModeSwitch.RmRIDur-.css.br +0 -0
- package/build/client/_app/immutable/assets/ModeSwitch.RmRIDur-.css.gz +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.CM_o2XIa.css +0 -1
- package/build/client/_app/immutable/assets/VoiceProfileSelector.CM_o2XIa.css.br +0 -0
- package/build/client/_app/immutable/assets/VoiceProfileSelector.CM_o2XIa.css.gz +0 -0
- package/build/client/_app/immutable/chunks/7rWcSIlt.js +0 -1
- package/build/client/_app/immutable/chunks/7rWcSIlt.js.br +0 -0
- package/build/client/_app/immutable/chunks/7rWcSIlt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B7ArSvo1.js +0 -1
- package/build/client/_app/immutable/chunks/B7ArSvo1.js.br +0 -0
- package/build/client/_app/immutable/chunks/B7ArSvo1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BwTF6U35.js +0 -3
- package/build/client/_app/immutable/chunks/BwTF6U35.js.br +0 -0
- package/build/client/_app/immutable/chunks/BwTF6U35.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BxZ6a55y.js.br +0 -0
- package/build/client/_app/immutable/chunks/BxZ6a55y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CJkMgfFh.js.br +0 -0
- package/build/client/_app/immutable/chunks/CJkMgfFh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CaNTMSit.js +0 -5
- package/build/client/_app/immutable/chunks/CaNTMSit.js.br +0 -0
- package/build/client/_app/immutable/chunks/CaNTMSit.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DpdFx-ph.js.br +0 -0
- package/build/client/_app/immutable/chunks/DpdFx-ph.js.gz +0 -0
- package/build/client/_app/immutable/chunks/os2NZ37U.js +0 -1
- package/build/client/_app/immutable/chunks/os2NZ37U.js.br +0 -1
- package/build/client/_app/immutable/chunks/os2NZ37U.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CzMd4RbT.js +0 -2
- package/build/client/_app/immutable/entry/app.CzMd4RbT.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CzMd4RbT.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.QaKTVCwD.js +0 -1
- package/build/client/_app/immutable/entry/start.QaKTVCwD.js.br +0 -0
- package/build/client/_app/immutable/entry/start.QaKTVCwD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BUaVTC13.js +0 -1
- package/build/client/_app/immutable/nodes/0.BUaVTC13.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BUaVTC13.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.D9TRUzbv.js +0 -1
- package/build/client/_app/immutable/nodes/1.D9TRUzbv.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.D9TRUzbv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.ojh8oE7F.js +0 -1
- package/build/client/_app/immutable/nodes/2.ojh8oE7F.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.ojh8oE7F.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js +0 -1
- package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DeAC3yVJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.5fL8qHix.js +0 -18
- package/build/client/_app/immutable/nodes/4.5fL8qHix.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.5fL8qHix.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.DAAeB39N.js +0 -4
- package/build/client/_app/immutable/nodes/5.DAAeB39N.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DAAeB39N.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CmMKgobq.js +0 -1
- package/build/client/_app/immutable/nodes/6.CmMKgobq.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CmMKgobq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.fFA0e6kz.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.fFA0e6kz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Rc3xcFgu.js +0 -2
- package/build/client/_app/immutable/nodes/8.Rc3xcFgu.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Rc3xcFgu.js.gz +0 -0
- package/build/server/chunks/0-TTdZdv8o.js +0 -9
- package/build/server/chunks/1-BhLqDyOn.js +0 -9
- package/build/server/chunks/2-C2y4ydWU.js +0 -9
- package/build/server/chunks/4-D6mAJO8F.js +0 -9
- package/build/server/chunks/4-D6mAJO8F.js.map +0 -1
- package/build/server/chunks/5-D5Apamdo.js +0 -9
- package/build/server/chunks/5-D5Apamdo.js.map +0 -1
- package/build/server/chunks/6-aCBWYjjQ.js +0 -9
- package/build/server/chunks/6-aCBWYjjQ.js.map +0 -1
- package/build/server/chunks/7-NlChqFlW.js +0 -9
- package/build/server/chunks/7-NlChqFlW.js.map +0 -1
- package/build/server/chunks/8-EJHw3wqt.js +0 -9
- package/build/server/chunks/8-EJHw3wqt.js.map +0 -1
- package/build/server/chunks/AuthGate-C3ZisQbA.js.map +0 -1
- package/build/server/chunks/ModeSwitch-B9a33ugm.js +0 -15
- package/build/server/chunks/ModeSwitch-B9a33ugm.js.map +0 -1
- package/build/server/chunks/_layout.svelte-CcloHuB_.js.map +0 -1
- package/build/server/chunks/_page.svelte-4WHOZ298.js +0 -408
- package/build/server/chunks/_page.svelte-4WHOZ298.js.map +0 -1
- package/build/server/chunks/_page.svelte-Arw4vnr_.js.map +0 -1
- package/build/server/chunks/_page.svelte-D0gMlmzQ.js.map +0 -1
- package/build/server/chunks/theme-state.svelte-PtPMmKGN.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_page.svelte-4WHOZ298.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/admin/_page.svelte.js"],"sourcesContent":["import { H as escape_html, V as attr, a as derived, d as html, i as bind_props, n as attr_class, o as ensure_array_like, s as head, u as stringify } from \"../../../chunks/dev.js\";\nimport { n as onDestroy } from \"../../../chunks/index-server.js\";\nimport { A as pullImages, E as fetchVersions, N as setStackVersion, P as upgradeStack, S as fetchSecretFile, T as fetchUiVersions, _ as fetchContainers, c as applyChanges, f as downloadUiVersion, g as fetchAutomations, l as buildHeaders, o as voiceState, s as notifications, u as containerAction, w as fetchServiceLogs, x as fetchReleases, y as fetchHealth } from \"../../../chunks/theme-state.svelte.js\";\nimport { n as Navbar, r as endpointsService, t as AuthGate } from \"../../../chunks/AuthGate.js\";\nimport { n as VoiceEngineSelector, t as VoiceProfileSelector } from \"../../../chunks/VoiceProfileSelector.js\";\n//#region src/lib/components/TabBar.svelte\nfunction TabBar($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { active, onSelect } = $$props;\n\t\tconst ICONS = {\n\t\t\toverview: `<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" /><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" /><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" /><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" />`,\n\t\t\tcontainers: `<rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" /><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" /><line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" /><line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />`,\n\t\t\tlogs: `<polyline points=\"4 17 10 11 4 5\" /><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />`,\n\t\t\tconnections: `<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" /><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />`,\n\t\t\takm: `<path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" /><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />`,\n\t\t\t\"host-sharing\": `<circle cx=\"18\" cy=\"5\" r=\"3\" /><circle cx=\"6\" cy=\"12\" r=\"3\" /><circle cx=\"18\" cy=\"19\" r=\"3\" /><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\" /><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\" />`,\n\t\t\tvoice: `<path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" /><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" /><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" /><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />`,\n\t\t\taddons: `<path d=\"M12 2L2 7l10 5 10-5-10-5z\" /><path d=\"M2 17l10 5 10-5\" /><path d=\"M2 12l10 5 10-5\" />`,\n\t\t\tautomations: `<circle cx=\"12\" cy=\"12\" r=\"10\" /><polyline points=\"12 6 12 12 16 14\" />`,\n\t\t\tsecrets: `<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" /><path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />`,\n\t\t\tupdates: `<polyline points=\"8 17 12 21 16 17\" /><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" /><path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\" />`\n\t\t};\n\t\tconst SECTIONS = [\n\t\t\t{\n\t\t\t\tid: \"health\",\n\t\t\t\tlabel: \"Health\",\n\t\t\t\ttabs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"overview\",\n\t\t\t\t\t\tlabel: \"Overview\",\n\t\t\t\t\t\ticon: ICONS.overview\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"containers\",\n\t\t\t\t\t\tlabel: \"Containers\",\n\t\t\t\t\t\ticon: ICONS.containers\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"logs\",\n\t\t\t\t\t\tlabel: \"Logs\",\n\t\t\t\t\t\ticon: ICONS.logs\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"updates\",\n\t\t\t\t\t\tlabel: \"Updates\",\n\t\t\t\t\t\ticon: ICONS.updates\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"knowledge\",\n\t\t\t\tlabel: \"Knowledge\",\n\t\t\t\ttabs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"akm\",\n\t\t\t\t\t\tlabel: \"Memory\",\n\t\t\t\t\t\ticon: ICONS.akm\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"host-sharing\",\n\t\t\t\t\t\tlabel: \"Host Sharing\",\n\t\t\t\t\t\ticon: ICONS[\"host-sharing\"]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"secrets\",\n\t\t\t\t\t\tlabel: \"Secrets\",\n\t\t\t\t\t\ticon: ICONS.secrets\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"voice\",\n\t\t\t\tlabel: \"Voice\",\n\t\t\t\ttabs: [{\n\t\t\t\t\tid: \"voice\",\n\t\t\t\t\tlabel: \"Voice\",\n\t\t\t\t\ticon: ICONS.voice\n\t\t\t\t}]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"mind\",\n\t\t\t\tlabel: \"Mind\",\n\t\t\t\ttabs: [{\n\t\t\t\t\tid: \"connections\",\n\t\t\t\t\tlabel: \"AI Providers\",\n\t\t\t\t\ticon: ICONS.connections\n\t\t\t\t}]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"capabilities\",\n\t\t\t\tlabel: \"Capabilities\",\n\t\t\t\ttabs: [{\n\t\t\t\t\tid: \"addons\",\n\t\t\t\t\tlabel: \"Add-ons\",\n\t\t\t\t\ticon: ICONS.addons\n\t\t\t\t}, {\n\t\t\t\t\tid: \"automations\",\n\t\t\t\t\tlabel: \"Automations\",\n\t\t\t\t\ticon: ICONS.automations\n\t\t\t\t}]\n\t\t\t}\n\t\t];\n\t\tlet activeSection = derived(() => SECTIONS.find((s) => s.tabs.some((t) => t.id === active)) ?? SECTIONS[0]);\n\t\t$$renderer.push(`<nav class=\"nav-shell svelte-1wwzsr0\" aria-label=\"Admin sections\"><div class=\"section-strip svelte-1wwzsr0\" role=\"tablist\" aria-label=\"Sections\"><!--[-->`);\n\t\tconst each_array = ensure_array_like(SECTIONS);\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet section = each_array[$$index];\n\t\t\t$$renderer.push(`<button${attr_class(\"section-tab svelte-1wwzsr0\", void 0, { \"section-tab-active\": activeSection().id === section.id })} role=\"tab\"${attr(\"aria-selected\", activeSection().id === section.id)}>${escape_html(section.label)}</button>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div> `);\n\t\tif (activeSection().tabs.length > 1) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"subtab-row svelte-1wwzsr0\"><div class=\"tabs svelte-1wwzsr0\" role=\"tablist\"${attr(\"aria-label\", `${stringify(activeSection().label)} tabs`)}><!--[-->`);\n\t\t\tconst each_array_1 = ensure_array_like(activeSection().tabs);\n\t\t\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\tlet tab = each_array_1[$$index_1];\n\t\t\t\t$$renderer.push(`<button${attr_class(\"tab svelte-1wwzsr0\", void 0, { \"tab-active\": active === tab.id })} role=\"tab\"${attr(\"aria-selected\", active === tab.id)}><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\">${html(tab.icon)}</svg> ${escape_html(tab.label)}</button>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></nav>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/AdminScopeBar.svelte\nfunction AdminScopeBar($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tconst active = derived(() => endpointsService.active);\n\t\tconst remote = derived(() => {\n\t\t\tconst url = active()?.url ?? \"\";\n\t\t\tif (!url) return null;\n\t\t\ttry {\n\t\t\t\tconst host = new URL(url).hostname;\n\t\t\t\treturn host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\" || host === \"host.docker.internal\" ? null : active()?.label ?? host;\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t\t$$renderer.push(`<div${attr_class(\"scope-bar svelte-zyzzee\", void 0, { \"scope-bar--remote\": remote() })}><span class=\"scope-main svelte-zyzzee\"><svg class=\"scope-icon svelte-zyzzee\" 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\"></rect><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"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> <span class=\"scope-text svelte-zyzzee\">Managing <strong class=\"svelte-zyzzee\">this OpenPalm</strong> on this machine <span class=\"scope-local svelte-zyzzee\">(local)</span></span></span> `);\n\t\tif (remote()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"scope-remote svelte-zyzzee\" title=\"You're chatting with a remote assistant. Its settings are managed on that machine.\">Chatting with <strong class=\"svelte-zyzzee\">${escape_html(remote())}</strong> (remote) — managed there, not here</span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/OverviewTab.svelte\nfunction OverviewTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { adminHealth, operationResult, operationResultType, tokenStored, healthLoading, applyLoading, anyDangerousLoading, automationsData, mergedServices, onCheckHealth, onApplyChanges, onDismissResult, onNavigate } = $$props;\n\t\tlet akmBadge = derived(() => {\n\t\t\treturn {\n\t\t\t\tlabel: \"Unavailable\",\n\t\t\t\tcls: \"badge-neutral\"\n\t\t\t};\n\t\t});\n\t\tderived(() => 0);\n\t\tlet automationCount = derived(() => automationsData?.automations.length ?? 0);\n\t\tlet enabledAutomationCount = derived(() => automationsData?.automations.filter((a) => a.enabled).length ?? 0);\n\t\tlet containerCounts = derived(() => {\n\t\t\tif (mergedServices.size === 0) return null;\n\t\t\treturn {\n\t\t\t\ttotal: mergedServices.size,\n\t\t\t\trunning: [...mergedServices.values()].filter((s) => s === \"running\").length\n\t\t\t};\n\t\t});\n\t\tlet downServices = derived(() => {\n\t\t\tconst out = [];\n\t\t\tfor (const [name, status] of mergedServices) if (status !== \"running\") out.push(name);\n\t\t\treturn out;\n\t\t});\n\t\tlet health = derived(() => {\n\t\t\tif (!containerCounts()) return {\n\t\t\t\tstatus: \"unknown\",\n\t\t\t\ttitle: \"Checking services…\",\n\t\t\t\tdetail: \"Fetching the latest status from Docker.\"\n\t\t\t};\n\t\t\tif (containerCounts().running === containerCounts().total && containerCounts().total > 0) return {\n\t\t\t\tstatus: \"ok\",\n\t\t\t\ttitle: \"All systems operational\",\n\t\t\t\tdetail: `${containerCounts().total} of ${containerCounts().total} services are running normally.`\n\t\t\t};\n\t\t\tconst down = containerCounts().total - containerCounts().running;\n\t\t\tconst names = downServices().map((n) => n.charAt(0).toUpperCase() + n.slice(1)).join(\", \");\n\t\t\treturn {\n\t\t\t\tstatus: \"warning\",\n\t\t\t\ttitle: `${down} of ${containerCounts().total} services not running`,\n\t\t\t\tdetail: names ? `Not running: ${names}.` : \"One or more services need attention.\"\n\t\t\t};\n\t\t});\n\t\t$$renderer.push(`<section${attr_class(`hero hero--${stringify(health().status)}`, \"svelte-1ob1zsm\")} role=\"status\" aria-live=\"polite\"><span class=\"hero-icon svelte-1ob1zsm\" aria-hidden=\"true\">`);\n\t\tif (health().status === \"warning\") {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line></svg>`);\n\t\t} else if (health().status === \"ok\") {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path><polyline points=\"22 4 12 14.01 9 11.01\"></polyline></svg>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></span> <div class=\"hero-text svelte-1ob1zsm\"><h2 class=\"hero-title svelte-1ob1zsm\">${escape_html(health().title)}</h2> <p class=\"hero-detail svelte-1ob1zsm\">${escape_html(health().detail)}</p></div> <div class=\"hero-actions svelte-1ob1zsm\"><button class=\"btn btn-secondary\"${attr(\"disabled\", healthLoading, true)}>${escape_html(healthLoading ? \"Checking…\" : \"Re-check\")}</button> `);\n\t\tif (health().status === \"warning\") {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<button class=\"btn btn-secondary\">View containers</button>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-secondary\"${attr(\"disabled\", anyDangerousLoading || !tokenStored, true)}>${escape_html(applyLoading ? \"Applying…\" : \"Apply config & restart\")}</button></div></section> `);\n\t\tif (operationResult) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<section${attr_class(`output-section output-section--${stringify(operationResultType)}`, \"svelte-1ob1zsm\")}><div class=\"output-header svelte-1ob1zsm\"><h3 class=\"svelte-1ob1zsm\">Operation output</h3> <button class=\"btn-ghost\" aria-label=\"Dismiss\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg></button></div> <pre class=\"output-code svelte-1ob1zsm\">${escape_html(operationResult)}</pre></section>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"tile-grid svelte-1ob1zsm\"><button class=\"tile svelte-1ob1zsm\"><span class=\"tile-metric svelte-1ob1zsm\">`);\n\t\tif (containerCounts()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`${escape_html(containerCounts().running)}<span class=\"tile-metric-sub svelte-1ob1zsm\">/${escape_html(containerCounts().total)}</span>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`—`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></span> <span class=\"tile-label svelte-1ob1zsm\">Services running</span></button> <button class=\"tile svelte-1ob1zsm\"><span class=\"tile-metric svelte-1ob1zsm\">`);\n\t\tif (automationsData) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`${escape_html(enabledAutomationCount())}<span class=\"tile-metric-sub svelte-1ob1zsm\">/${escape_html(automationCount())}</span>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`—`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></span> <span class=\"tile-label svelte-1ob1zsm\">Automations active</span></button> <button class=\"tile svelte-1ob1zsm\"><span class=\"tile-metric tile-metric--icon svelte-1ob1zsm\" aria-hidden=\"true\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 17 10 11 4 5\"></polyline><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line></svg></span> <span class=\"tile-label svelte-1ob1zsm\">View logs</span></button> <button class=\"tile svelte-1ob1zsm\"><span class=\"tile-metric tile-metric--icon svelte-1ob1zsm\" aria-hidden=\"true\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"8 17 12 21 16 17\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\"></path></svg></span> <span class=\"tile-label svelte-1ob1zsm\">Check for updates</span></button></div> <h3 class=\"section-heading svelte-1ob1zsm\">Knowledge base (AKM)</h3> <button class=\"akm-card svelte-1ob1zsm\" aria-label=\"AKM health — open Knowledge settings\"><div class=\"akm-head svelte-1ob1zsm\"><span class=\"akm-title svelte-1ob1zsm\">AKM runtime health</span> <span${attr_class(`badge ${stringify(akmBadge().cls)}`, \"svelte-1ob1zsm\")}>${escape_html(akmBadge().label)}</span></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<p class=\"akm-unavailable svelte-1ob1zsm\">Metrics unavailable — the akm CLI isn't reachable from the admin host.</p>`);\n\t\t$$renderer.push(`<!--]--></button> <h3 class=\"section-heading svelte-1ob1zsm\">Configure</h3> <div class=\"shortcut-grid svelte-1ob1zsm\"><button class=\"shortcut svelte-1ob1zsm\"><span class=\"shortcut-name svelte-1ob1zsm\">AI Providers</span> <span class=\"shortcut-desc svelte-1ob1zsm\">Models & provider credentials</span></button> <button class=\"shortcut svelte-1ob1zsm\"><span class=\"shortcut-name svelte-1ob1zsm\">Knowledge</span> <span class=\"shortcut-desc svelte-1ob1zsm\">Assistant memory & behavior</span></button> <button class=\"shortcut svelte-1ob1zsm\"><span class=\"shortcut-name svelte-1ob1zsm\">Voice</span> <span class=\"shortcut-desc svelte-1ob1zsm\">Speech-to-text & text-to-speech</span></button> <button class=\"shortcut svelte-1ob1zsm\"><span class=\"shortcut-name svelte-1ob1zsm\">Channels & add-ons</span> <span class=\"shortcut-desc svelte-1ob1zsm\">Discord, Slack, API & more</span></button> <button class=\"shortcut svelte-1ob1zsm\"><span class=\"shortcut-name svelte-1ob1zsm\">Secrets</span> <span class=\"shortcut-desc svelte-1ob1zsm\">Stack & channel credentials</span></button> <a class=\"shortcut svelte-1ob1zsm\" href=\"/setup?rerun=1\"><span class=\"shortcut-name svelte-1ob1zsm\">Re-run setup</span> <span class=\"shortcut-desc svelte-1ob1zsm\">Walk through the setup wizard again</span></a></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/UpdatesTab.svelte\nfunction UpdatesTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { currentImageTag, selectedImageTag, tagChangeLoading, anyDangerousLoading, tokenStored, upgradeLoading, inElectron, uiVersions, uiVersionsLoading, selectedUiTag, uiDownloadLoading, uiDownloadReady, releases, releasesLoading, onSetImageTag, onSelectedImageTagChange, onUpgradeStack, onSelectedUiTagChange, onDownloadUiVersion, onRestartApp } = $$props;\n\t\tfunction uiVersionLabel(v) {\n\t\t\tconst tags = [];\n\t\t\tif (v.distTag) tags.push(v.distTag);\n\t\t\telse if (v.prerelease) tags.push(\"pre-release\");\n\t\t\treturn tags.length ? `${v.version} (${tags.join(\", \")})` : v.version;\n\t\t}\n\t\t$$renderer.push(`<div class=\"panel svelte-qhqqsr\" role=\"tabpanel\"><div class=\"panel-header svelte-qhqqsr\"><div class=\"svelte-qhqqsr\"><h2 class=\"svelte-qhqqsr\">Updates</h2> <p class=\"panel-subtitle svelte-qhqqsr\">Pull new stack images, upgrade to the latest release, and update the UI.</p></div></div> <div class=\"panel-body svelte-qhqqsr\"><div class=\"version-section svelte-qhqqsr\"><div class=\"version-row svelte-qhqqsr\"><span class=\"version-label svelte-qhqqsr\">Stack images</span> <code class=\"version-value svelte-qhqqsr\">${escape_html(currentImageTag || \"—\")}</code></div> <div class=\"version-input-row svelte-qhqqsr\">`);\n\t\tif (releasesLoading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"version-select-skeleton svelte-qhqqsr\"></div>`);\n\t\t} else if (releases.length > 0) {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.select({\n\t\t\t\tclass: \"version-select\",\n\t\t\t\tvalue: selectedImageTag,\n\t\t\t\tonchange: (e) => onSelectedImageTagChange(e.currentTarget.value),\n\t\t\t\tdisabled: tagChangeLoading || anyDangerousLoading\n\t\t\t}, ($$renderer) => {\n\t\t\t\t$$renderer.option({\n\t\t\t\t\tvalue: \"latest\",\n\t\t\t\t\tclass: \"\"\n\t\t\t\t}, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`latest`);\n\t\t\t\t}, \"svelte-qhqqsr\");\n\t\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\t\tconst each_array = ensure_array_like(releases);\n\t\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\t\tlet r = each_array[$$index];\n\t\t\t\t\t$$renderer.option({\n\t\t\t\t\t\tvalue: r.tag,\n\t\t\t\t\t\tclass: \"\"\n\t\t\t\t\t}, ($$renderer) => {\n\t\t\t\t\t\t$$renderer.push(`${escape_html(r.tag)}${escape_html(r.prerelease ? \" (pre-release)\" : \"\")}`);\n\t\t\t\t\t}, \"svelte-qhqqsr\");\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t}, \"svelte-qhqqsr\");\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<input class=\"version-input svelte-qhqqsr\" type=\"text\" placeholder=\"e.g. 0.11.0 or latest\"${attr(\"value\", selectedImageTag)}${attr(\"disabled\", tagChangeLoading || anyDangerousLoading, true)}/>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-sm btn-primary svelte-qhqqsr\"${attr(\"disabled\", !selectedImageTag.trim() || tagChangeLoading || anyDangerousLoading, true)}>`);\n\t\tif (tagChangeLoading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner spinner-sm svelte-qhqqsr\"></span> Applying…`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`Pull & Restart`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></button></div> <p class=\"version-hint svelte-qhqqsr\">Pulls the selected images and restarts services.</p></div> <div class=\"version-divider svelte-qhqqsr\"></div> <div class=\"version-section svelte-qhqqsr\"><div class=\"version-row svelte-qhqqsr\"><span class=\"version-label svelte-qhqqsr\">Upgrade Stack</span></div> <div class=\"version-input-row svelte-qhqqsr\"><button class=\"btn btn-sm btn-secondary svelte-qhqqsr\"${attr(\"disabled\", anyDangerousLoading || !tokenStored, true)}>`);\n\t\tif (upgradeLoading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner spinner-sm svelte-qhqqsr\"></span> Upgrading…`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`Upgrade to Latest`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></button></div> <p class=\"version-hint svelte-qhqqsr\">Downloads the latest assets, pulls images, and restarts services. Backs up current config first.</p></div> `);\n\t\tif (inElectron) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"version-divider svelte-qhqqsr\"></div> <div class=\"version-section svelte-qhqqsr\"><div class=\"version-row svelte-qhqqsr\"><span class=\"version-label svelte-qhqqsr\">UI Version</span></div> <div class=\"version-input-row svelte-qhqqsr\">`);\n\t\t\tif (uiVersionsLoading) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"version-select-skeleton svelte-qhqqsr\"></div>`);\n\t\t\t} else if (uiVersions.length > 0) {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\t$$renderer.select({\n\t\t\t\t\tclass: \"version-select\",\n\t\t\t\t\tvalue: selectedUiTag,\n\t\t\t\t\tonchange: (e) => onSelectedUiTagChange(e.currentTarget.value),\n\t\t\t\t\tdisabled: uiDownloadLoading\n\t\t\t\t}, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\t\t\tconst each_array_1 = ensure_array_like(uiVersions);\n\t\t\t\t\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\t\t\tlet v = each_array_1[$$index_1];\n\t\t\t\t\t\t$$renderer.option({\n\t\t\t\t\t\t\tvalue: v.version,\n\t\t\t\t\t\t\tclass: \"\"\n\t\t\t\t\t\t}, ($$renderer) => {\n\t\t\t\t\t\t\t$$renderer.push(`${escape_html(uiVersionLabel(v))}`);\n\t\t\t\t\t\t}, \"svelte-qhqqsr\");\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t}, \"svelte-qhqqsr\");\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<input class=\"version-input svelte-qhqqsr\" type=\"text\" placeholder=\"e.g. 0.11.0-beta.7\"${attr(\"value\", selectedUiTag)}${attr(\"disabled\", uiDownloadLoading, true)}/>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-sm svelte-qhqqsr\"${attr(\"disabled\", !selectedUiTag.trim() || uiDownloadLoading, true)}>`);\n\t\t\tif (uiDownloadLoading) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<span class=\"spinner spinner-sm svelte-qhqqsr\"></span> Downloading…`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`Download`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></button></div> `);\n\t\t\tif (uiDownloadReady) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"version-restart-prompt svelte-qhqqsr\">UI updated. <button class=\"btn btn-sm btn-primary svelte-qhqqsr\">Restart App</button></div>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<p class=\"version-hint svelte-qhqqsr\">Downloads and replaces the UI from GitHub. Takes effect on restart.</p>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/SecretSelect.svelte\nfunction SecretSelect($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Selected secret NAME (bindable). */\n\t\t/** Stable id for the <select>, for an external <label for>. */\n\t\t/** Called whenever the selection changes (including after quick-add). */\n\t\tlet { value = \"\", id = \"secret-select\", onChange } = $$props;\n\t\tlet names = [];\n\t\tlet loading = true;\n\t\tlet adding = false;\n\t\tfunction onSelectChange(e) {\n\t\t\tvalue = e.currentTarget.value;\n\t\t\tonChange?.(value);\n\t\t}\n\t\t$$renderer.push(`<div class=\"secret-select svelte-6kjkzk\"><div class=\"ss-row svelte-6kjkzk\">`);\n\t\t$$renderer.select({\n\t\t\tid,\n\t\t\tclass: \"form-input ss-select\",\n\t\t\tvalue,\n\t\t\tonchange: onSelectChange,\n\t\t\tdisabled: loading\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.option({ value: \"\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`${escape_html(\"Loading secrets…\")}`);\n\t\t\t});\n\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\tconst each_array = ensure_array_like(names);\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet name = each_array[$$index];\n\t\t\t\t$$renderer.option({ value: name }, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`${escape_html(name)}`);\n\t\t\t\t});\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}, \"svelte-6kjkzk\");\n\t\t$$renderer.push(` <button type=\"button\" class=\"btn btn-secondary ss-add-btn svelte-6kjkzk\"${attr(\"disabled\", adding, true)}><svg aria-hidden=\"true\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svelte-6kjkzk\"><path d=\"M12 5v14\"></path><path d=\"M5 12h14\"></path></svg> <span class=\"ss-add-label svelte-6kjkzk\">New</span></button></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div>`);\n\t\tbind_props($$props, { value });\n\t});\n}\n//#endregion\n//#region src/lib/components/AddonsTab.svelte\nfunction AddonsTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { onAuthError, onNavigate } = $$props;\n\t\tconst ADDON_ACRONYMS = {\n\t\t\tapi: \"API\",\n\t\t\tssh: \"SSH\",\n\t\t\tui: \"UI\"\n\t\t};\n\t\tfunction formatAddonName(name) {\n\t\t\treturn name.split(/[-_]/).filter(Boolean).map((w) => ADDON_ACRONYMS[w.toLowerCase()] ?? w.charAt(0).toUpperCase() + w.slice(1)).join(\" \");\n\t\t}\n\t\tlet addons = [];\n\t\tlet loading = false;\n\t\tlet actionLoading = null;\n\t\tlet expanded = null;\n\t\tlet credFields = {};\n\t\tlet credValues = {};\n\t\tlet credSecretRef = {};\n\t\tlet credLoading = null;\n\t\tlet credSaving = null;\n\t\tasync function onSecretChosen(addonName, key, secretName) {\n\t\t\tif (!secretName) {\n\t\t\t\tcredValues[addonName][key] = \"\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { value } = await fetchSecretFile(secretName);\n\t\t\t\tcredValues[addonName][key] = value;\n\t\t\t} catch (err) {\n\t\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\t\tnotifications.push(\"error\", `Could not read secret: ${msg}`);\n\t\t\t}\n\t\t}\n\t\tlet $$settled = true;\n\t\tlet $$inner_renderer;\n\t\tfunction $$render_inner($$renderer) {\n\t\t\t$$renderer.push(`<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\"${attr(\"disabled\", loading, true)}>`);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> Refresh</button></div> <div class=\"panel-body panel-body--flush\">`);\n\t\t\tif (addons.length === 0) {\n\t\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t\t$$renderer.push(`<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>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<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> <!--[-->`);\n\t\t\t\tconst each_array = ensure_array_like(addons);\n\t\t\t\tfor (let $$index_1 = 0, $$length = each_array.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\t\tlet addon = each_array[$$index_1];\n\t\t\t\t\t$$renderer.push(`<div class=\"addon-row svelte-faz2je\"><span class=\"addon-col addon-col--name addon-name svelte-faz2je\"${attr(\"title\", addon.name)}>${escape_html(formatAddonName(addon.name))}</span> <span class=\"addon-col addon-col--status svelte-faz2je\"><span${attr_class(\"badge\", void 0, {\n\t\t\t\t\t\t\"badge-enabled\": addon.enabled,\n\t\t\t\t\t\t\"badge-disabled\": !addon.enabled\n\t\t\t\t\t})}>${escape_html(addon.enabled ? \"Enabled\" : \"Disabled\")}</span></span> <span class=\"addon-col addon-col--actions svelte-faz2je\">`);\n\t\t\t\t\tif (addon.name === \"voice\" && addon.enabled) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-sm btn-secondary\" aria-label=\"Configure Voice addon settings\">Configure</button>`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-sm btn-secondary\"${attr(\"disabled\", !addon.available, true)}${attr(\"aria-expanded\", expanded === addon.name)}>${escape_html(expanded === addon.name ? \"Hide\" : \"Credentials\")}</button>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]--> <button${attr_class(\"btn btn-sm\", void 0, {\n\t\t\t\t\t\t\"btn-danger\": addon.enabled,\n\t\t\t\t\t\t\"btn-outline\": !addon.enabled\n\t\t\t\t\t})}${attr(\"disabled\", actionLoading === addon.name || !addon.available, true)}>`);\n\t\t\t\t\tif (actionLoading === addon.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`${escape_html(addon.enabled ? \"Disable\" : \"Enable\")}`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]--></button></span></div> `);\n\t\t\t\t\tif (expanded === addon.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<div class=\"addon-creds svelte-faz2je\">`);\n\t\t\t\t\t\tif (credLoading === addon.name) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"creds-loading svelte-faz2je\"><span class=\"spinner\"></span> Loading credentials...</div>`);\n\t\t\t\t\t\t} else if ((credFields[addon.name]?.length ?? 0) === 0) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<p class=\"creds-empty svelte-faz2je\">This addon has no configurable env vars (compose overlay only).</p>`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<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> <!--[-->`);\n\t\t\t\t\t\t\tconst each_array_1 = ensure_array_like(credFields[addon.name] ?? []);\n\t\t\t\t\t\t\tfor (let $$index = 0, $$length = each_array_1.length; $$index < $$length; $$index++) {\n\t\t\t\t\t\t\t\tlet field = each_array_1[$$index];\n\t\t\t\t\t\t\t\t$$renderer.push(`<div class=\"creds-row svelte-faz2je\"><label class=\"creds-label svelte-faz2je\"${attr(\"for\", `cred-${stringify(addon.name)}-${stringify(field.key)}`)}><code class=\"svelte-faz2je\">${escape_html(field.key)}</code> `);\n\t\t\t\t\t\t\t\tif (field.sensitive) {\n\t\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"creds-tag svelte-faz2je\">sensitive</span>`);\n\t\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\t\t\t\tif (field.sensitive && field.set) {\n\t\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"creds-tag creds-tag--set svelte-faz2je\">set</span>`);\n\t\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<!--]--></label> `);\n\t\t\t\t\t\t\t\tif (field.description) {\n\t\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t\t$$renderer.push(`<p class=\"creds-desc svelte-faz2je\">${escape_html(field.description)}</p>`);\n\t\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\t\t\t\tif (field.sensitive) {\n\t\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t\tSecretSelect($$renderer, {\n\t\t\t\t\t\t\t\t\t\tid: `cred-${stringify(addon.name)}-${stringify(field.key)}`,\n\t\t\t\t\t\t\t\t\t\tonChange: (secretName) => void onSecretChosen(addon.name, field.key, secretName),\n\t\t\t\t\t\t\t\t\t\tget value() {\n\t\t\t\t\t\t\t\t\t\t\treturn credSecretRef[addon.name][field.key];\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tset value($$value) {\n\t\t\t\t\t\t\t\t\t\t\tcredSecretRef[addon.name][field.key] = $$value;\n\t\t\t\t\t\t\t\t\t\t\t$$settled = false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t$$renderer.push(`<!----> `);\n\t\t\t\t\t\t\t\t\tif (field.set) {\n\t\t\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t\t\t$$renderer.push(`<p class=\"creds-desc svelte-faz2je\">A value is already set — choose a secret to replace it.</p>`);\n\t\t\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t\t\t$$renderer.push(`<input${attr(\"id\", `cred-${stringify(addon.name)}-${stringify(field.key)}`)} type=\"text\" class=\"form-input svelte-faz2je\"${attr(\"placeholder\", field.default)}${attr(\"value\", credValues[addon.name][field.key])} autocomplete=\"off\"/>`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--> <div class=\"creds-actions svelte-faz2je\"><button class=\"btn btn-primary btn-sm\"${attr(\"disabled\", credSaving === addon.name, true)}>`);\n\t\t\t\t\t\t\tif (credSaving === addon.name) {\n\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--> Save</button></div>`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div></div>`);\n\t\t}\n\t\tdo {\n\t\t\t$$settled = true;\n\t\t\t$$inner_renderer = $$renderer.copy();\n\t\t\t$$render_inner($$inner_renderer);\n\t\t} while (!$$settled);\n\t\t$$renderer.subsume($$inner_renderer);\n\t});\n}\n//#endregion\n//#region src/lib/components/ContainersTab.svelte\nfunction ContainersTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { containerData, serviceEntries, loading, error, tokenStored, selectedContainerId, onToggleContainer, onStart, onStop, onRestart, onRefresh, onPullImages, lastUpdated, pullLoading } = $$props;\n\t\tlet hasEntries = derived(() => serviceEntries.length > 0);\n\t\tlet rowState = {};\n\t\tfunction parseImageTag(image) {\n\t\t\tconst atIdx = image.indexOf(\"@\");\n\t\t\tconst base = atIdx > -1 ? image.slice(0, atIdx) : image;\n\t\t\tconst colonIdx = base.lastIndexOf(\":\");\n\t\t\tif (colonIdx > -1) return {\n\t\t\t\tname: base.slice(0, colonIdx),\n\t\t\t\ttag: base.slice(colonIdx + 1)\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tname: base,\n\t\t\t\ttag: \"latest\"\n\t\t\t};\n\t\t}\n\t\tfunction containerStatusColor(state) {\n\t\t\tif (state === \"running\") return \"success\";\n\t\t\tif (state === \"exited\" || state === \"dead\" || state === \"stopped\") return \"danger\";\n\t\t\tif (state === \"restarting\" || state === \"paused\") return \"warning\";\n\t\t\treturn \"idle\";\n\t\t}\n\t\tfunction fmtState(s) {\n\t\t\tif (!s) return s ?? \"\";\n\t\t\treturn s.charAt(0).toUpperCase() + s.slice(1);\n\t\t}\n\t\t$$renderer.push(`<div class=\"panel\" role=\"tabpanel\"><div class=\"panel-header\"><h2>Container Status</h2> <div class=\"panel-header-actions\">`);\n\t\tif (lastUpdated) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"last-updated svelte-ocbovv\">Updated ${escape_html(lastUpdated)}</span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", pullLoading || !tokenStored, true)}>`);\n\t\tif (pullLoading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Pull Images</button> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", loading || !tokenStored, true)}>`);\n\t\tif (loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Refresh</button></div></div> <div class=\"panel-body panel-body--flush\">`);\n\t\tif (hasEntries()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<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> <!--[-->`);\n\t\t\tconst each_array = ensure_array_like(serviceEntries);\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet entry = each_array[$$index];\n\t\t\t\tconst selected = selectedContainerId === entry.id;\n\t\t\t\tconst entryActionInFlight = rowState[entry.id]?.inFlight ?? null;\n\t\t\t\tconst entryConfirmAction = rowState[entry.id]?.confirm ?? null;\n\t\t\t\tconst entryFeedback = rowState[entry.id]?.feedback ?? null;\n\t\t\t\tconst img = entry.docker ? parseImageTag(entry.docker.Image) : null;\n\t\t\t\tconst isAnyActionInFlight = entryActionInFlight !== null;\n\t\t\t\tconst isNotCreated = !entry.docker;\n\t\t\t\t$$renderer.push(`<button class=\"container-table-row container-table-row--clickable svelte-ocbovv\"${attr(\"aria-expanded\", selected)}><span class=\"ct-col ct-col--name svelte-ocbovv\"><span${attr_class(`ct-indicator ct-indicator--${stringify(containerStatusColor(entry.state))}`, \"svelte-ocbovv\")}></span> <span class=\"ct-service-name svelte-ocbovv\">${escape_html(entry.service)}</span></span> <span class=\"ct-col ct-col--image ct-mono svelte-ocbovv\">`);\n\t\t\t\tif (img) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`${escape_html(img.name)}`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"ct-not-created svelte-ocbovv\">--</span>`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></span> <span class=\"ct-col ct-col--tag svelte-ocbovv\">`);\n\t\t\t\tif (img) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"tag-badge svelte-ocbovv\">${escape_html(img.tag)}</span>`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"ct-not-created svelte-ocbovv\">--</span>`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></span> <span class=\"ct-col ct-col--status svelte-ocbovv\"><span${attr_class(`badge badge-${stringify(containerStatusColor(entry.state))}`, \"svelte-ocbovv\")}>${escape_html(fmtState(entry.state))}</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\"${attr_class(\"svelte-ocbovv\", void 0, { \"ct-chevron-open\": selected })}><polyline points=\"6 9 12 15 18 9\"></polyline></svg></span></button> `);\n\t\t\t\tif (selected) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`<div class=\"container-detail svelte-ocbovv\">`);\n\t\t\t\t\tif (entry.docker) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\tconst container = entry.docker;\n\t\t\t\t\t\t$$renderer.push(`<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\">${escape_html(container.ID)}</span></div> <div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Name</span> <span class=\"detail-value detail-mono svelte-ocbovv\">${escape_html(container.Name || container.Names)}</span></div> <div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Image</span> <span class=\"detail-value detail-mono svelte-ocbovv\">${escape_html(container.Image)}</span></div> `);\n\t\t\t\t\t\tif (img) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Image Name</span> <span class=\"detail-value detail-mono svelte-ocbovv\">${escape_html(img.name)}</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\">${escape_html(img.tag)}</span> `);\n\t\t\t\t\t\t\tif (container.Image.includes(\"@\")) {\n\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"detail-mono detail-digest svelte-ocbovv\">${escape_html(container.Image.split(\"@\")[1]?.slice(0, 19))}...</span>`);\n\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--></span></div>`);\n\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<!--]--> <div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">State</span> <span class=\"detail-value svelte-ocbovv\"><span${attr_class(`badge badge-${stringify(containerStatusColor(container.State))}`, \"svelte-ocbovv\")}>${escape_html(fmtState(container.State))}</span></span></div> <div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Status</span> <span class=\"detail-value svelte-ocbovv\">${escape_html(container.Status)}</span></div> `);\n\t\t\t\t\t\tif (container.Health) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Health</span> <span class=\"detail-value svelte-ocbovv\"><span${attr_class(\"badge\", void 0, {\n\t\t\t\t\t\t\t\t\"badge-success\": container.Health === \"healthy\",\n\t\t\t\t\t\t\t\t\"badge-warning\": container.Health === \"starting\",\n\t\t\t\t\t\t\t\t\"badge-danger\": container.Health === \"unhealthy\",\n\t\t\t\t\t\t\t\t\"badge-idle\": ![\n\t\t\t\t\t\t\t\t\t\"healthy\",\n\t\t\t\t\t\t\t\t\t\"starting\",\n\t\t\t\t\t\t\t\t\t\"unhealthy\"\n\t\t\t\t\t\t\t\t].includes(container.Health)\n\t\t\t\t\t\t\t})}>${escape_html(container.Health)}</span></span></div>`);\n\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\t\tif (container.Ports) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Ports</span> <span class=\"detail-value detail-mono svelte-ocbovv\">${escape_html(container.Ports)}</span></div>`);\n\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\t\tif (container.RunningFor) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Uptime</span> <span class=\"detail-value svelte-ocbovv\">${escape_html(container.RunningFor)}</span></div>`);\n\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\t\tif (container.CreatedAt) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Created</span> <span class=\"detail-value svelte-ocbovv\">${escape_html(container.CreatedAt)}</span></div>`);\n\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\t\tif (container.Project) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-item svelte-ocbovv\"><span class=\"detail-label svelte-ocbovv\">Project</span> <span class=\"detail-value detail-mono svelte-ocbovv\">${escape_html(container.Project)}</span></div>`);\n\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<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>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\tif (entryFeedback) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<div${attr_class(`action-feedback action-feedback--${stringify(entryFeedback.type)}`, \"svelte-ocbovv\")} role=\"status\">${escape_html(entryFeedback.message)}</div>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\tif (entryConfirmAction) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<div class=\"confirm-bar svelte-ocbovv\" role=\"alert\"><span class=\"confirm-text svelte-ocbovv\">${escape_html(entryConfirmAction.charAt(0).toUpperCase() + entryConfirmAction.slice(1))} <strong>${escape_html(entry.service)}</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>`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t$$renderer.push(`<div class=\"detail-actions svelte-ocbovv\">`);\n\t\t\t\t\t\tif (isNotCreated) {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-primary btn-sm\"${attr(\"disabled\", isAnyActionInFlight, true)}>`);\n\t\t\t\t\t\t\tif (entryActionInFlight === \"start\") {\n\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"spinner-inline svelte-ocbovv\"></span>`);\n\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--> Start</button>`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", isAnyActionInFlight, true)}>`);\n\t\t\t\t\t\t\tif (entryActionInFlight === \"start\") {\n\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"spinner-inline svelte-ocbovv\"></span>`);\n\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--> Start</button> <button class=\"btn btn-danger btn-sm\"${attr(\"disabled\", isAnyActionInFlight, true)}>`);\n\t\t\t\t\t\t\tif (entryActionInFlight === \"stop\") {\n\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"spinner-inline svelte-ocbovv\"></span>`);\n\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--> Stop</button> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", isAnyActionInFlight, true)}>`);\n\t\t\t\t\t\t\tif (entryActionInFlight === \"restart\") {\n\t\t\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t\t\t$$renderer.push(`<span class=\"spinner-inline svelte-ocbovv\"></span>`);\n\t\t\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t\t\t$$renderer.push(`<!--]--> Restart</button>`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<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> `);\n\t\t\tif (loading) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<p>Loading container status...</p>`);\n\t\t\t} else if (error) {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\t$$renderer.push(`<p class=\"text-danger svelte-ocbovv\">${escape_html(error)}</p> <button class=\"btn btn-secondary btn-sm svelte-ocbovv\"${attr(\"disabled\", !tokenStored, true)}>Try Again</button>`);\n\t\t\t} else if (containerData && !containerData.dockerAvailable) {\n\t\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t\t$$renderer.push(`<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>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<p>No containers found. Services may not be installed yet.</p>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/AutomationsTab.svelte\nfunction AutomationsTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { data, loading, error, tokenStored, onRefresh } = $$props;\n\t\tlet hasAutomations = derived(() => data !== null && Array.isArray(data.automations) && data.automations.length > 0);\n\t\t/** Reverse map: cron expression -> friendly label */\n\t\tconst CRON_TO_LABEL = {\n\t\t\t\"* * * * *\": \"Every minute\",\n\t\t\t\"*/5 * * * *\": \"Every 5 minutes\",\n\t\t\t\"*/15 * * * *\": \"Every 15 minutes\",\n\t\t\t\"0 * * * *\": \"Every hour\",\n\t\t\t\"0 0 * * *\": \"Daily at midnight\",\n\t\t\t\"0 8 * * *\": \"Daily at 8 AM\",\n\t\t\t\"0 0 * * 0\": \"Weekly (Sunday midnight)\",\n\t\t\t\"0 3 * * 0\": \"Weekly (Sunday 3 AM)\",\n\t\t\t\"0 4 * * 0\": \"Weekly (Sunday 4 AM)\"\n\t\t};\n\t\tfunction formatSchedule(cron) {\n\t\t\tconst friendly = CRON_TO_LABEL[cron];\n\t\t\tif (friendly) return {\n\t\t\t\tlabel: friendly,\n\t\t\t\tcron\n\t\t\t};\n\t\t\treturn null;\n\t\t}\n\t\t$$renderer.push(`<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\"${attr(\"disabled\", !tokenStored, true)}>New task</button> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", loading || !tokenStored, true)}>`);\n\t\tif (loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Refresh</button></div></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"panel-body\">`);\n\t\tif (hasAutomations() && data) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"automation-list svelte-1uqcxu1\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(data.automations);\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet automation = each_array[$$index];\n\t\t\t\tconst preset = formatSchedule(automation.schedule);\n\t\t\t\t$$renderer.push(`<div class=\"automation-card svelte-1uqcxu1\"><div class=\"automation-row svelte-1uqcxu1\"><div class=\"automation-main svelte-1uqcxu1\"><div class=\"automation-name svelte-1uqcxu1\">${escape_html(automation.name)} <span${attr_class(\"badge\", void 0, {\n\t\t\t\t\t\"badge-enabled\": automation.enabled,\n\t\t\t\t\t\"badge-disabled\": !automation.enabled\n\t\t\t\t})}>${escape_html(automation.enabled ? \"Enabled\" : \"Disabled\")}</span> <span class=\"badge badge-type svelte-1uqcxu1\">${escape_html(automation.action.type)}</span></div> `);\n\t\t\t\tif (automation.description) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`<div class=\"automation-desc svelte-1uqcxu1\">${escape_html(automation.description)}</div>`);\n\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--></div> <div class=\"automation-meta svelte-1uqcxu1\">`);\n\t\t\t\tif (preset?.cron) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"meta-item schedule-friendly svelte-1uqcxu1\">${escape_html(preset.label)}</span>`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"meta-item svelte-1uqcxu1\"><code class=\"svelte-1uqcxu1\">${escape_html(automation.schedule)}</code></span> <span class=\"meta-item meta-tz svelte-1uqcxu1\">${escape_html(automation.timezone)}</span>`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></div></div> <div class=\"automation-footer svelte-1uqcxu1\"><span class=\"automation-file svelte-1uqcxu1\">${escape_html(automation.fileName)}</span> <div class=\"automation-actions svelte-1uqcxu1\"><button class=\"btn btn-ghost btn-sm\"${attr(\"disabled\", !tokenStored, true)}>Edit</button> <button class=\"btn btn-ghost btn-sm\"${attr(\"disabled\", !tokenStored, true)}${attr(\"aria-label\", `Delete ${stringify(automation.fileName)}`)}>Delete</button></div></div></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<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> `);\n\t\t\tif (loading) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<p>Loading automations...</p>`);\n\t\t\t} else if (error) {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\t$$renderer.push(`<p class=\"text-danger svelte-1uqcxu1\">${escape_html(error)}</p> <button class=\"btn btn-secondary btn-sm svelte-1uqcxu1\">Try Again</button>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<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>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/providers/AddProviderSheet.svelte\nfunction AddProviderSheet($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { providers, onselect, oncustom, onclose } = $$props;\n\t\tlet query = \"\";\n\t\tconst filtered = derived(() => {\n\t\t\tconst q = query.trim().toLowerCase();\n\t\t\tif (!q) return providers;\n\t\t\treturn providers.filter((p) => p.name.toLowerCase().includes(q) || p.id.toLowerCase().includes(q));\n\t\t});\n\t\t$$renderer.push(`<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…\"${attr(\"value\", query)} autocomplete=\"off\" autofocus=\"\"/></div> <div class=\"sheet-body sheet-body--list svelte-1ykz2x6\">`);\n\t\tif (filtered().length === 0 && query);\n\t\telse {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\tconst each_array = ensure_array_like(filtered());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet p = each_array[$$index];\n\t\t\t\t$$renderer.push(`<button type=\"button\" class=\"provider-pick svelte-1ykz2x6\"><span class=\"provider-name svelte-1ykz2x6\">${escape_html(p.name)}</span> `);\n\t\t\t\tif (p.modelCount > 0) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"provider-meta svelte-1ykz2x6\">${escape_html(p.modelCount)} models</span>`);\n\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--></button>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <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>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/providers/ConnectSheet.svelte\nfunction ConnectSheet($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { provider, onaction, onclose } = $$props;\n\t\tconst methods = derived(() => provider.authMethods.filter((m) => !m.label.toLowerCase().includes(\"headless\")));\n\t\tlet step = initialStepFor(provider);\n\t\tfunction initialStepFor(p) {\n\t\t\tconst list = p.authMethods.filter((m) => !m.label.toLowerCase().includes(\"headless\"));\n\t\t\tif (list.length === 0) return \"api-form\";\n\t\t\tif (list.length === 1) return list[0].type === \"oauth\" ? \"oauth-code\" : \"api-form\";\n\t\t\treturn \"method-picker\";\n\t\t}\n\t\tlet apiKey = \"\";\n\t\tlet authCode = \"\";\n\t\tlet submitting = false;\n\t\tlet abortController;\n\t\tfunction stopPolling() {\n\t\t\tabortController?.abort();\n\t\t\tabortController = void 0;\n\t\t}\n\t\tonDestroy(stopPolling);\n\t\tconst title = derived(() => {\n\t\t\tif (step === \"method-picker\") return `Connect ${provider.name}`;\n\t\t\treturn `Connect ${provider.name}`;\n\t\t});\n\t\tconst canGoBack = derived(() => step !== \"method-picker\" && methods().length > 1);\n\t\t$$renderer.push(`<div class=\"sheet-overlay\" role=\"presentation\"></div> <div class=\"sheet\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"connect-sheet-title\"><header class=\"sheet-header\">`);\n\t\tif (canGoBack()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<button type=\"button\" class=\"sheet-header-back\" aria-label=\"Back\">←</button>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <h2 class=\"sheet-title\" id=\"connect-sheet-title\">${escape_html(title())}</h2> <button type=\"button\" class=\"sheet-close\" aria-label=\"Close\">×</button></header> <div class=\"sheet-body\">`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (step === \"method-picker\") {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<p class=\"field-hint\">Select login method for ${escape_html(provider.name)}.</p> <div class=\"auth-method-group svelte-1bnolke\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(methods());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet method = each_array[$$index];\n\t\t\t\t$$renderer.push(`<button type=\"button\" class=\"auth-method-card svelte-1bnolke\"><span class=\"method-label svelte-1bnolke\">${escape_html(method.label)}</span> <span class=\"method-type svelte-1bnolke\">${escape_html(method.type === \"oauth\" ? \"Browser sign-in\" : \"API key\")}</span></button>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else if (step === \"api-form\") {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<p class=\"field-hint\">Enter your ${escape_html(provider.name)} API key to connect your account and use ${escape_html(provider.name)} models in OpenCode.</p> <div class=\"form-field\"><label class=\"form-label\" for=\"connect-apikey\">${escape_html(provider.name)} API key</label> <input id=\"connect-apikey\" type=\"password\" class=\"form-input\" placeholder=\"API key\"${attr(\"value\", apiKey)}${attr(\"disabled\", submitting, true)} autocomplete=\"off\"/></div>`);\n\t\t} else if (step === \"oauth-code\") {\n\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t$$renderer.push(`<p class=\"field-hint\">Visit <a${attr(\"href\", \"#\")} target=\"_blank\" rel=\"noopener\" class=\"text-link\">this link</a> to collect your authorization code to connect your account and use ${escape_html(provider.name)} models in OpenCode.</p> <div class=\"form-field\"><label class=\"form-label\" for=\"connect-code\">${escape_html(\"OAuth\")} authorization code</label> <input id=\"connect-code\" type=\"text\" class=\"form-input\" placeholder=\"Authorization code\"${attr(\"value\", authCode)}${attr(\"disabled\", submitting, true)} autocomplete=\"off\"/></div>`);\n\t\t} else if (step === \"oauth-auto\") {\n\t\t\t$$renderer.push(\"<!--[3-->\");\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> <p class=\"field-hint\"><span class=\"spinner\"></span> Waiting for sign-in to complete…</p>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> `);\n\t\tif (step === \"api-form\" || step === \"oauth-code\") {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<footer class=\"sheet-footer\"><button type=\"button\" class=\"btn btn-primary\"${attr(\"disabled\", submitting, true)}>`);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> Continue</button></footer>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/providers/CustomProviderForm.svelte\nfunction CustomProviderForm($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { onaction, onclose } = $$props;\n\t\tlet id = \"\";\n\t\tlet displayName = \"\";\n\t\tlet baseURL = \"\";\n\t\tlet apiKey = \"\";\n\t\tlet submitting = false;\n\t\t$$renderer.push(`<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> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <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\"${attr(\"value\", id)}${attr(\"disabled\", submitting, true)} 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\"${attr(\"value\", displayName)}${attr(\"disabled\", submitting, true)} 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\"${attr(\"value\", baseURL)}${attr(\"disabled\", submitting, true)} 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\"${attr(\"value\", apiKey)}${attr(\"disabled\", submitting, true)} autocomplete=\"off\"/></div></div></div> <footer class=\"sheet-footer\"><button type=\"button\" class=\"btn btn-primary\"${attr(\"disabled\", submitting, true)}>`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Continue</button></footer></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/providers/HostImportModal.svelte\nfunction HostImportModal($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { providerCount, credentialCount, configPath, authPath, onimported, oncancel } = $$props;\n\t\tlet importing = false;\n\t\t$$renderer.push(`<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\">`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<p class=\"field-hint\">We found an OpenCode installation on this host:</p> <ul class=\"result-list svelte-15y8pah\">`);\n\t\tif (configPath) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<li class=\"svelte-15y8pah\"><code class=\"svelte-15y8pah\">${escape_html(configPath)}</code> <span class=\"muted svelte-15y8pah\">(${escape_html(providerCount)} provider${escape_html(providerCount !== 1 ? \"s\" : \"\")})</span></li>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (authPath) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<li class=\"svelte-15y8pah\"><code class=\"svelte-15y8pah\">${escape_html(authPath)}</code> <span class=\"muted svelte-15y8pah\">(${escape_html(credentialCount)} credential${escape_html(credentialCount !== 1 ? \"s\" : \"\")})</span></li>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></ul> <p class=\"field-hint\">Importing will copy provider settings and stored credentials into OP_HOME and\n\t\t\t\tactivate them in the running assistant. Existing OP_HOME credentials are\n\t\t\t\tpreserved on conflict.</p> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t\t$$renderer.push(`<!--]--></div> <footer class=\"sheet-footer\">`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<button type=\"button\" class=\"btn btn-primary\"${attr(\"disabled\", importing, true)}>`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Import</button>`);\n\t\t$$renderer.push(`<!--]--></footer></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/ProvidersPanel.svelte\nfunction ProvidersPanel($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet pageState = {\n\t\t\tavailable: false,\n\t\t\tproviders: [],\n\t\t\tdefaultModels: {},\n\t\t\tallowlistActive: false,\n\t\t\tproviderCountLabel: \"\",\n\t\t\tstats: {\n\t\t\t\ttotal: 0,\n\t\t\t\tconnected: 0,\n\t\t\t\tconfigured: 0,\n\t\t\t\tdisabled: 0\n\t\t\t}\n\t\t};\n\t\tlet loading = true;\n\t\tasync function load() {\n\t\t\tloading = true;\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(\"/admin/providers\", { headers: buildHeaders() });\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tpageState = await res.json();\n\t\t\t\t\tmainModelChoice = pageState.currentModel ?? \"\";\n\t\t\t\t\tsmallModelChoice = pageState.currentSmallModel ?? \"\";\n\t\t\t\t}\n\t\t\t} catch {} finally {\n\t\t\t\tloading = false;\n\t\t\t}\n\t\t}\n\t\tconst connected = derived(() => pageState.providers.filter((p) => p.connected));\n\t\tconst unconnected = derived(() => pageState.providers.filter((p) => !p.connected));\n\t\tlet mainModelChoice = \"\";\n\t\tlet smallModelChoice = \"\";\n\t\tlet modelSaveError = null;\n\t\tasync function saveModel(target, value) {\n\t\t\tmodelSaveError = null;\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(\"/admin/opencode/model\", {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t...buildHeaders(),\n\t\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({ [target]: value || null })\n\t\t\t\t});\n\t\t\t\tif (!res.ok) modelSaveError = (await res.json().catch(() => ({}))).message ?? `Save failed (${res.status})`;\n\t\t\t} catch (err) {\n\t\t\t\tmodelSaveError = err instanceof Error ? err.message : \"Request failed.\";\n\t\t\t}\n\t\t}\n\t\tlet showAddSheet = false;\n\t\tlet connectProvider = null;\n\t\tlet showCustomForm = false;\n\t\tlet disconnectingId = null;\n\t\tconst BADGE_LABEL = {\n\t\t\tenv: \"env\",\n\t\t\tapi: \"api key\",\n\t\t\toauth: \"oauth\",\n\t\t\tconfig: \"config\",\n\t\t\tcustom: \"custom\"\n\t\t};\n\t\tfunction authBadge(p) {\n\t\t\treturn p.credentialType ? BADGE_LABEL[p.credentialType] : \"\";\n\t\t}\n\t\tfunction pickProvider(p) {\n\t\t\tshowAddSheet = false;\n\t\t\tconnectProvider = p;\n\t\t}\n\t\tfunction pickCustom() {\n\t\t\tshowAddSheet = false;\n\t\t\tshowCustomForm = true;\n\t\t}\n\t\tfunction handleAfterAction() {\n\t\t\tconnectProvider = null;\n\t\t\tshowCustomForm = false;\n\t\t\tload();\n\t\t}\n\t\tlet hostStatus = null;\n\t\tlet showImportSheet = false;\n\t\tasync function loadHostStatus() {\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(\"/admin/providers/host-status\", { headers: buildHeaders() });\n\t\t\t\tif (res.ok) hostStatus = await res.json();\n\t\t\t} catch {}\n\t\t}\n\t\tfunction handleImportDone() {\n\t\t\tshowImportSheet = false;\n\t\t\tload();\n\t\t\tloadHostStatus();\n\t\t}\n\t\t$$renderer.push(`<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\"${attr(\"disabled\", !hostStatus?.detected, true)}${attr(\"title\", hostStatus?.detected ? `Import ${hostStatus.providerCount} providers from host OpenCode` : \"No host OpenCode installation detected\")}>Import from host</button> <button type=\"button\" class=\"btn btn-primary btn-sm\">Add provider</button> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", loading, true)}>`);\n\t\tif (loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Refresh</button></div></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"panel-body panel-body--flush\">`);\n\t\tif (!pageState.available && !loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<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\"><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><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg> <p>The assistant (OpenCode server) is not reachable. Start the assistant container and refresh.</p></div>`);\n\t\t} else if (loading && pageState.providers.length === 0) {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<div class=\"loading-state\"><span class=\"spinner\"></span> <span>Loading providers…</span></div>`);\n\t\t} else if (connected().length === 0) {\n\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t$$renderer.push(`<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 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"></path></svg> <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>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<div class=\"model-defaults svelte-1tqmczc\"><div class=\"model-field svelte-1tqmczc\"><label class=\"form-label\" for=\"default-model\">Default model</label> `);\n\t\t\t$$renderer.select({\n\t\t\t\tid: \"default-model\",\n\t\t\t\tclass: \"form-input\",\n\t\t\t\tvalue: mainModelChoice,\n\t\t\t\tonchange: (e) => void saveModel(\"model\", e.currentTarget.value)\n\t\t\t}, ($$renderer) => {\n\t\t\t\t$$renderer.option({ value: \"\" }, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`— OpenCode default —`);\n\t\t\t\t});\n\t\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\t\tconst each_array = ensure_array_like(connected());\n\t\t\t\tfor (let $$index_1 = 0, $$length = each_array.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\t\tlet p = each_array[$$index_1];\n\t\t\t\t\tif (p.models.length > 0) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<optgroup${attr(\"label\", p.name)}><!--[-->`);\n\t\t\t\t\t\tconst each_array_1 = ensure_array_like(p.models);\n\t\t\t\t\t\tfor (let $$index = 0, $$length = each_array_1.length; $$index < $$length; $$index++) {\n\t\t\t\t\t\t\tlet m = each_array_1[$$index];\n\t\t\t\t\t\t\t$$renderer.option({ value: `${stringify(p.id)}/${stringify(m.id)}` }, ($$renderer) => {\n\t\t\t\t\t\t\t\t$$renderer.push(`${escape_html(m.name || m.id)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$$renderer.push(`<!--]--></optgroup>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t});\n\t\t\t$$renderer.push(`</div> <div class=\"model-field svelte-1tqmczc\"><label class=\"form-label\" for=\"small-model\">Small model</label> `);\n\t\t\t$$renderer.select({\n\t\t\t\tid: \"small-model\",\n\t\t\t\tclass: \"form-input\",\n\t\t\t\tvalue: smallModelChoice,\n\t\t\t\tonchange: (e) => void saveModel(\"small_model\", e.currentTarget.value)\n\t\t\t}, ($$renderer) => {\n\t\t\t\t$$renderer.option({ value: \"\" }, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`— OpenCode default —`);\n\t\t\t\t});\n\t\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\t\tconst each_array_2 = ensure_array_like(connected());\n\t\t\t\tfor (let $$index_3 = 0, $$length = each_array_2.length; $$index_3 < $$length; $$index_3++) {\n\t\t\t\t\tlet p = each_array_2[$$index_3];\n\t\t\t\t\tif (p.models.length > 0) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<optgroup${attr(\"label\", p.name)}><!--[-->`);\n\t\t\t\t\t\tconst each_array_3 = ensure_array_like(p.models);\n\t\t\t\t\t\tfor (let $$index_2 = 0, $$length = each_array_3.length; $$index_2 < $$length; $$index_2++) {\n\t\t\t\t\t\t\tlet m = each_array_3[$$index_2];\n\t\t\t\t\t\t\t$$renderer.option({ value: `${stringify(p.id)}/${stringify(m.id)}` }, ($$renderer) => {\n\t\t\t\t\t\t\t\t$$renderer.push(`${escape_html(m.name || m.id)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$$renderer.push(`<!--]--></optgroup>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t});\n\t\t\t$$renderer.push(`</div> `);\n\t\t\tif (modelSaveError) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<p class=\"model-error svelte-1tqmczc\">${escape_html(modelSaveError)}</p>`);\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></div> <!--[-->`);\n\t\t\tconst each_array_4 = ensure_array_like(connected());\n\t\t\tfor (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {\n\t\t\t\tlet p = each_array_4[$$index_4];\n\t\t\t\t$$renderer.push(`<div class=\"provider-row svelte-1tqmczc\"><div class=\"provider-id svelte-1tqmczc\"><span class=\"provider-name svelte-1tqmczc\">${escape_html(p.name)}</span> <span class=\"badge badge-connected\">${escape_html(authBadge(p))}</span></div> <button class=\"btn btn-outline btn-sm\"${attr(\"disabled\", disconnectingId === p.id, true)}>`);\n\t\t\t\tif (disconnectingId === p.id) {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--> Disconnect</button></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div> `);\n\t\tif (showAddSheet) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tAddProviderSheet($$renderer, {\n\t\t\t\tproviders: unconnected(),\n\t\t\t\tonselect: pickProvider,\n\t\t\t\toncustom: pickCustom,\n\t\t\t\tonclose: () => {\n\t\t\t\t\tshowAddSheet = false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (connectProvider) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tConnectSheet($$renderer, {\n\t\t\t\tprovider: connectProvider,\n\t\t\t\tonaction: handleAfterAction,\n\t\t\t\tonclose: () => {\n\t\t\t\t\tconnectProvider = null;\n\t\t\t\t}\n\t\t\t});\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (showCustomForm) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tCustomProviderForm($$renderer, {\n\t\t\t\tonaction: handleAfterAction,\n\t\t\t\tonclose: () => {\n\t\t\t\t\tshowCustomForm = false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (showImportSheet && hostStatus) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tHostImportModal($$renderer, {\n\t\t\t\tproviderCount: hostStatus.providerCount,\n\t\t\t\tcredentialCount: hostStatus.credentialCount,\n\t\t\t\tconfigPath: hostStatus.configPath,\n\t\t\t\tauthPath: hostStatus.authPath,\n\t\t\t\tonimported: handleImportDone,\n\t\t\t\toncancel: () => {\n\t\t\t\t\tshowImportSheet = false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}\n//#endregion\n//#region src/lib/components/LogsTab.svelte\nfunction LogsTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { tokenStored, services } = $$props;\n\t\tlet logs = \"\";\n\t\tlet logsLoaded = false;\n\t\tlet loading = false;\n\t\tlet error = \"\";\n\t\tlet selectedService = \"\";\n\t\tlet tailLines = 100;\n\t\tlet autoScroll = true;\n\t\tasync function loadLogs() {\n\t\t\tloading = true;\n\t\t\terror = \"\";\n\t\t\ttry {\n\t\t\t\tconst result = await fetchServiceLogs({\n\t\t\t\t\tservice: void 0,\n\t\t\t\t\ttail: tailLines\n\t\t\t\t});\n\t\t\t\tif (result.ok) {\n\t\t\t\t\tlogs = result.logs;\n\t\t\t\t\tlogsLoaded = true;\n\t\t\t\t} else error = result.error ?? \"Failed to fetch logs.\";\n\t\t\t} catch (e) {\n\t\t\t\terror = e instanceof Error ? e.message : \"Failed to fetch logs.\";\n\t\t\t} finally {\n\t\t\t\tloading = false;\n\t\t\t}\n\t\t}\n\t\t$$renderer.push(`<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\"${attr(\"disabled\", !logs, true)}>${escape_html(\"Copy\")}</button> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", loading || !tokenStored, true)}>`);\n\t\tif (loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> 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> `);\n\t\t$$renderer.select({\n\t\t\tid: \"log-service\",\n\t\t\tclass: \"control-input\",\n\t\t\tvalue: selectedService,\n\t\t\tonchange: () => void loadLogs()\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.option({ value: \"\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`All services`);\n\t\t\t});\n\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\tconst each_array = ensure_array_like(services);\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet svc = each_array[$$index];\n\t\t\t\t$$renderer.option({ value: svc }, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`${escape_html(svc)}`);\n\t\t\t\t});\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}, \"svelte-s1vlr2\");\n\t\t$$renderer.push(`</div> <div class=\"control-group svelte-s1vlr2\"><label for=\"log-tail\" class=\"control-label svelte-s1vlr2\">Lines</label> `);\n\t\t$$renderer.select({\n\t\t\tid: \"log-tail\",\n\t\t\tclass: \"control-input\",\n\t\t\tvalue: tailLines,\n\t\t\tonchange: () => void loadLogs()\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.option({ value: 50 }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`50`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: 100 }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`100`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: 250 }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`250`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: 500 }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`500`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: 1e3 }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`1000`);\n\t\t\t});\n\t\t}, \"svelte-s1vlr2\");\n\t\t$$renderer.push(`</div> <div class=\"control-group control-group--toggle svelte-s1vlr2\"><label class=\"toggle-label svelte-s1vlr2\"><input type=\"checkbox\"${attr(\"checked\", autoScroll, true)} class=\"svelte-s1vlr2\"/> <span>Auto-scroll</span></label></div> <button class=\"btn btn-primary btn-sm\"${attr(\"disabled\", loading || !tokenStored, true)}>`);\n\t\tif (loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"spinner\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Load Logs</button></div> <div class=\"panel-body panel-body--flush\">`);\n\t\tif (error) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"error-banner svelte-s1vlr2\"><span>${escape_html(error)}</span></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (logs) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<pre class=\"log-output svelte-s1vlr2\">${escape_html(logs)}</pre>`);\n\t\t} else if (!loading) {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<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> `);\n\t\t\tif (logsLoaded) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<p>No log output — the container may not be running or has no recent output.</p>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<p>Select a service and click \"Load Logs\" to view container output.</p>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/SecretsTab.svelte\nfunction SecretsTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { tokenStored } = $$props;\n\t\tlet busy = false;\n\t\tlet files = [];\n\t\tlet selected = null;\n\t\tlet newName = \"\";\n\t\tfunction fmtSize(n) {\n\t\t\tif (n < 1024) return `${n} B`;\n\t\t\treturn `${(n / 1024).toFixed(1)} KB`;\n\t\t}\n\t\t$$renderer.push(`<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\"${attr(\"disabled\", !tokenStored, true)}>`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> 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\n services via Docker secrets. Files are stored 0600. Editing here changes the live\n file — restart affected services to pick up changes.</p> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"secrets-layout svelte-1levcw0\"><div class=\"secrets-list svelte-1levcw0\">`);\n\t\tif (files.length === 0 && true) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<p class=\"empty-note svelte-1levcw0\">No secret files found.</p>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <!--[-->`);\n\t\tconst each_array = ensure_array_like(files);\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet f = each_array[$$index];\n\t\t\t$$renderer.push(`<div${attr_class(`secret-row ${selected === f.name ? \"active\" : \"\"}`, \"svelte-1levcw0\")}><button class=\"secret-name svelte-1levcw0\"${attr(\"disabled\", busy, true)}${attr(\"aria-label\", `Edit ${stringify(f.name)}`)}><span class=\"mono svelte-1levcw0\">${escape_html(f.name)}</span> <span class=\"secret-size svelte-1levcw0\">${escape_html(fmtSize(f.size))}</span></button> <button class=\"btn btn-ghost btn-sm\"${attr(\"disabled\", busy, true)}${attr(\"aria-label\", `Delete ${stringify(f.name)}`)}>✕</button></div>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--> <div class=\"new-secret svelte-1levcw0\"><label class=\"new-secret-label svelte-1levcw0\" for=\"new-secret-name\">New secret file</label> <div class=\"new-secret-row svelte-1levcw0\"><input id=\"new-secret-name\" class=\"control-input\" type=\"text\" spellcheck=\"false\" placeholder=\"new-file-name\"${attr(\"value\", newName)}${attr(\"disabled\", busy, true)}/> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", !newName.trim(), true)}>Add</button></div></div></div> <div class=\"secrets-editor svelte-1levcw0\">`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<div class=\"editor-empty svelte-1levcw0\"><svg aria-hidden=\"true\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svelte-1levcw0\"><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> <p class=\"svelte-1levcw0\">Select a file to view or edit its contents.</p> <button class=\"btn btn-secondary btn-sm\">New secret</button></div>`);\n\t\t$$renderer.push(`<!--]--></div></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/PasswordInput.svelte\nfunction PasswordInput($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { value = \"\", id, placeholder, disabled = false } = $$props;\n\t\t$$renderer.push(`<div class=\"input-with-toggle svelte-5nno4j\"><input${attr(\"id\", id)} class=\"control-input svelte-5nno4j\"${attr(\"type\", \"password\")} spellcheck=\"false\" autocomplete=\"new-password\"${attr(\"placeholder\", placeholder)}${attr(\"value\", value)}${attr(\"disabled\", disabled, true)}/> <button type=\"button\" class=\"btn-icon svelte-5nno4j\"${attr(\"aria-label\", \"Show value\")}${attr(\"disabled\", disabled, true)}>${escape_html(\"Show\")}</button></div>`);\n\t\tbind_props($$props, { value });\n\t});\n}\n//#endregion\n//#region src/lib/components/akm/EmbeddingSection.svelte\nfunction EmbeddingSection($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { endpoint = \"\", model = \"\", provider = \"\", apiKey = \"\", dimension = 1536, localModel = \"\", batchSize = \"\", chunkSize = \"\", contextLength = \"\", ollamaNumCtx = \"\", disabled = false } = $$props;\n\t\tlet $$settled = true;\n\t\tlet $$inner_renderer;\n\t\tfunction $$render_inner($$renderer) {\n\t\t\t$$renderer.push(`<section class=\"config-section svelte-y5k1u8\"><h3 class=\"section-title svelte-y5k1u8\">Semantic search (embeddings)</h3> <p class=\"section-note svelte-y5k1u8\">Vector embedding provider for semantic search. Leave Endpoint and Model blank to use built-in local embeddings.</p> <div class=\"controls--grid svelte-y5k1u8\"><div class=\"control-group control-group--wide svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embEndpoint\">Endpoint</label> <input id=\"embEndpoint\" class=\"control-input svelte-y5k1u8\" type=\"url\" spellcheck=\"false\" placeholder=\"https://api.openai.com/v1/embeddings\"${attr(\"value\", endpoint)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embModel\">Model</label> <input id=\"embModel\" class=\"control-input svelte-y5k1u8\" type=\"text\" spellcheck=\"false\" placeholder=\"text-embedding-3-small\"${attr(\"value\", model)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embProvider\">Provider (label)</label> <input id=\"embProvider\" class=\"control-input svelte-y5k1u8\" type=\"text\" spellcheck=\"false\" placeholder=\"openai\"${attr(\"value\", provider)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embApiKey\">API Key</label> `);\n\t\t\tPasswordInput($$renderer, {\n\t\t\t\tid: \"embApiKey\",\n\t\t\t\tplaceholder: \"${AKM_EMBED_API_KEY}\",\n\t\t\t\tdisabled,\n\t\t\t\tget value() {\n\t\t\t\t\treturn apiKey;\n\t\t\t\t},\n\t\t\t\tset value($$value) {\n\t\t\t\t\tapiKey = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t$$renderer.push(`<!----></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embDimension\">Dimensions</label> <input id=\"embDimension\" class=\"control-input control-input--narrow svelte-y5k1u8\" type=\"number\" min=\"1\"${attr(\"value\", dimension)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embLocalModel\">Local model</label> <input id=\"embLocalModel\" class=\"control-input svelte-y5k1u8\" type=\"text\" spellcheck=\"false\" placeholder=\"Xenova/bge-small-en-v1.5\"${attr(\"value\", localModel)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embBatchSize\">Batch size</label> <input id=\"embBatchSize\" class=\"control-input control-input--narrow svelte-y5k1u8\" type=\"number\" min=\"1\"${attr(\"value\", batchSize)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embChunkSize\">Chunk size (chars)</label> <input id=\"embChunkSize\" class=\"control-input control-input--narrow svelte-y5k1u8\" type=\"number\" min=\"1\"${attr(\"value\", chunkSize)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embContextLength\">Context length</label> <input id=\"embContextLength\" class=\"control-input control-input--narrow svelte-y5k1u8\" type=\"number\" min=\"1\"${attr(\"value\", contextLength)}${attr(\"disabled\", disabled, true)}/></div> <div class=\"control-group svelte-y5k1u8\"><label class=\"control-label svelte-y5k1u8\" for=\"embOllamaNumCtx\">Ollama num_ctx</label> <input id=\"embOllamaNumCtx\" class=\"control-input control-input--narrow svelte-y5k1u8\" type=\"number\" min=\"1\"${attr(\"value\", ollamaNumCtx)}${attr(\"disabled\", disabled, true)}/></div></div></section>`);\n\t\t}\n\t\tdo {\n\t\t\t$$settled = true;\n\t\t\t$$inner_renderer = $$renderer.copy();\n\t\t\t$$render_inner($$inner_renderer);\n\t\t} while (!$$settled);\n\t\t$$renderer.subsume($$inner_renderer);\n\t\tbind_props($$props, {\n\t\t\tendpoint,\n\t\t\tmodel,\n\t\t\tprovider,\n\t\t\tapiKey,\n\t\t\tdimension,\n\t\t\tlocalModel,\n\t\t\tbatchSize,\n\t\t\tchunkSize,\n\t\t\tcontextLength,\n\t\t\tollamaNumCtx\n\t\t});\n\t});\n}\n//#endregion\n//#region src/lib/components/AkmTab.svelte\nfunction AkmTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { tokenStored } = $$props;\n\t\tlet saving = false;\n\t\tlet llmProfiles = [];\n\t\tlet defaultLlmProfile = \"\";\n\t\tlet agentProfiles = [];\n\t\tlet defaultAgentProfile = \"\";\n\t\tlet improveProfiles = [];\n\t\tlet defaultImproveProfile = \"\";\n\t\tlet embEndpoint = \"\";\n\t\tlet embModel = \"\";\n\t\tlet embProvider = \"\";\n\t\tlet embApiKey = \"\";\n\t\tlet embDimension = 1536;\n\t\tlet embLocalModel = \"\";\n\t\tlet embBatchSize = \"\";\n\t\tlet embChunkSize = \"\";\n\t\tlet embContextLength = \"\";\n\t\tlet embOllamaNumCtx = \"\";\n\t\tlet llmProfileNames = derived(() => llmProfiles.map((p) => p.name).filter((n) => n));\n\t\tnew Set([\n\t\t\t\"enabled\",\n\t\t\t\"mode\",\n\t\t\t\"profile\",\n\t\t\t\"timeoutMs\",\n\t\t\t\"allowedTypes\",\n\t\t\t\"qualityGate\",\n\t\t\t\"contradictionDetection\",\n\t\t\t\"defaultSince\",\n\t\t\t\"maxTotalChars\",\n\t\t\t\"maxChunkSize\",\n\t\t\t\"applyMode\",\n\t\t\t\"policy\",\n\t\t\t\"maxAcceptsPerRun\",\n\t\t\t\"maxDiffLines\",\n\t\t\t\"rejectEmpty\",\n\t\t\t\"judgment\"\n\t\t]);\n\t\tlet $$settled = true;\n\t\tlet $$inner_renderer;\n\t\tfunction $$render_inner($$renderer) {\n\t\t\t$$renderer.push(`<datalist id=\"llm-profiles-list\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(llmProfileNames());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet name = each_array[$$index];\n\t\t\t\t$$renderer.option({ value: name }, ($$renderer) => {});\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></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\"${attr(\"disabled\", !tokenStored, true)}>`);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> Refresh</button> <button class=\"btn btn-primary btn-sm\"${attr(\"disabled\", !tokenStored, true)}>`);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> Save</button></div></div> `);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> <div class=\"panel-body svelte-1844cb2\"><div class=\"k-tabs svelte-1844cb2\" role=\"tablist\" aria-label=\"Knowledge sections\"><button role=\"tab\"${attr_class(\"k-tab svelte-1844cb2\", void 0, { \"k-tab--active\": true })}${attr(\"aria-selected\", true)}>AI Services</button> <button role=\"tab\"${attr_class(\"k-tab svelte-1844cb2\", void 0, { \"k-tab--active\": false })}${attr(\"aria-selected\", false)}>Behavior</button></div> `);\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<p class=\"section-note section-note--lead svelte-1844cb2\">The AI services your assistant uses to build and search its memory — the language models that organize memories, the embedding provider for semantic search, and the maintenance pipeline.</p> <section class=\"config-section svelte-1844cb2\"><h3 class=\"section-title svelte-1844cb2\">Language models <span class=\"section-title-aka svelte-1844cb2\">akm LLM profiles</span></h3> <p class=\"section-note svelte-1844cb2\">The language models your assistant uses to organize and improve its memory. Add one per LLM service.</p> `);\n\t\t\tif (llmProfiles.length === 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"profile-empty svelte-1844cb2\"><svg aria-hidden=\"true\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svelte-1844cb2\"><ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"></ellipse><path d=\"M3 5v14c0 1.66 4.03 3 9 3s9-1.34 9-3V5\"></path><path d=\"M3 12c0 1.66 4.03 3 9 3s9-1.34 9-3\"></path></svg> <p class=\"empty-note svelte-1844cb2\">No LLM profiles configured — add one below.</p></div>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<div class=\"profile-list svelte-1844cb2\"><!--[-->`);\n\t\t\t\tconst each_array_1 = ensure_array_like(llmProfiles);\n\t\t\t\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\t\tlet p = each_array_1[$$index_1];\n\t\t\t\t\t$$renderer.push(`<div class=\"profile-row svelte-1844cb2\"><span class=\"profile-row-name svelte-1844cb2\">${escape_html(p.name || \"(unnamed)\")}</span> `);\n\t\t\t\t\tif (defaultLlmProfile === p.name && p.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<span class=\"badge badge--default svelte-1844cb2\">Default</span>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <div class=\"profile-row-actions svelte-1844cb2\">`);\n\t\t\t\t\tif (p.name && defaultLlmProfile !== p.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-sm\"${attr(\"disabled\", saving, true)}>Set Default</button>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-sm\"${attr(\"disabled\", saving, true)}>Edit</button> <button class=\"btn btn-sm btn-danger\"${attr(\"disabled\", saving, true)}>Remove</button></div></div>`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", saving, true)}>+ Add LLM Profile</button></section> <section class=\"config-section svelte-1844cb2\"><h3 class=\"section-title svelte-1844cb2\">Agent runners <span class=\"section-title-aka svelte-1844cb2\">akm agent profiles</span></h3> <p class=\"section-note svelte-1844cb2\">Runner configs for maintenance steps that spawn a subprocess (opencode or claude CLI).</p> `);\n\t\t\tif (agentProfiles.length === 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"profile-empty svelte-1844cb2\"><svg aria-hidden=\"true\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svelte-1844cb2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"></rect><path d=\"M8 21h8m-4-4v4\"></path><circle cx=\"12\" cy=\"10\" r=\"2\"></circle><path d=\"M9 10H7m10 0h-2\"></path></svg> <p class=\"empty-note svelte-1844cb2\">No agent profiles defined.</p></div>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<div class=\"profile-list svelte-1844cb2\"><!--[-->`);\n\t\t\t\tconst each_array_2 = ensure_array_like(agentProfiles);\n\t\t\t\tfor (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n\t\t\t\t\tlet p = each_array_2[$$index_2];\n\t\t\t\t\t$$renderer.push(`<div class=\"profile-row svelte-1844cb2\"><span class=\"profile-row-name svelte-1844cb2\">${escape_html(p.name || \"(unnamed)\")}</span> <span class=\"badge svelte-1844cb2\">${escape_html(p.platform)}</span> `);\n\t\t\t\t\tif (defaultAgentProfile === p.name && p.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<span class=\"badge badge--default svelte-1844cb2\">Default</span>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <div class=\"profile-row-actions svelte-1844cb2\">`);\n\t\t\t\t\tif (p.name && defaultAgentProfile !== p.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-sm\"${attr(\"disabled\", saving, true)}>Set Default</button>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-sm\"${attr(\"disabled\", saving, true)}>Edit</button> <button class=\"btn btn-sm btn-danger\"${attr(\"disabled\", saving, true)}>Remove</button></div></div>`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", saving, true)}>+ Add Agent Profile</button></section> <section class=\"config-section svelte-1844cb2\"><h3 class=\"section-title svelte-1844cb2\">Memory maintenance <span class=\"section-title-aka svelte-1844cb2\">akm improve</span></h3> <p class=\"section-note svelte-1844cb2\">Scheduled runs that distill, deduplicate, and improve stored memories. Each configuration picks which steps run and which language model they use — add a language model above first.</p> `);\n\t\t\tif (improveProfiles.length === 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"profile-empty svelte-1844cb2\"><svg aria-hidden=\"true\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"svelte-1844cb2\"><path d=\"M12 3c-1 2-2 3-3 4 1 3 3 5 3 8a6 6 0 0 1-6-6c0-3 2-5 3-6\"></path><path d=\"M17.5 3.5c.5 1.5.5 3-.5 4.5 1 1 2 2.5 2 4a4 4 0 0 1-4-4c0-2 1-3.5 2.5-4.5z\"></path></svg> <p class=\"empty-note svelte-1844cb2\">No improve profiles defined — add one below.</p></div>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<div class=\"profile-list svelte-1844cb2\"><!--[-->`);\n\t\t\t\tconst each_array_3 = ensure_array_like(improveProfiles);\n\t\t\t\tfor (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {\n\t\t\t\t\tlet ip = each_array_3[$$index_3];\n\t\t\t\t\t$$renderer.push(`<div class=\"profile-row svelte-1844cb2\"><span class=\"profile-row-name svelte-1844cb2\">${escape_html(ip.name || \"(unnamed)\")}</span> `);\n\t\t\t\t\tif (ip.description) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<span class=\"profile-row-desc svelte-1844cb2\">${escape_html(ip.description)}</span>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\tif (defaultImproveProfile === ip.name && ip.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<span class=\"badge badge--default svelte-1844cb2\">Default</span>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <div class=\"profile-row-actions svelte-1844cb2\">`);\n\t\t\t\t\tif (ip.name && defaultImproveProfile !== ip.name) {\n\t\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\t\t$$renderer.push(`<button class=\"btn btn-sm\"${attr(\"disabled\", saving, true)}>Set Default</button>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-sm\"${attr(\"disabled\", saving, true)}>Edit</button> <button class=\"btn btn-sm btn-danger\"${attr(\"disabled\", saving, true)}>Remove</button></div></div>`);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <button class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", saving, true)}>+ Add Improve Profile</button></section> `);\n\t\t\tEmbeddingSection($$renderer, {\n\t\t\t\tdisabled: saving,\n\t\t\t\tget endpoint() {\n\t\t\t\t\treturn embEndpoint;\n\t\t\t\t},\n\t\t\t\tset endpoint($$value) {\n\t\t\t\t\tembEndpoint = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget model() {\n\t\t\t\t\treturn embModel;\n\t\t\t\t},\n\t\t\t\tset model($$value) {\n\t\t\t\t\tembModel = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget provider() {\n\t\t\t\t\treturn embProvider;\n\t\t\t\t},\n\t\t\t\tset provider($$value) {\n\t\t\t\t\tembProvider = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget apiKey() {\n\t\t\t\t\treturn embApiKey;\n\t\t\t\t},\n\t\t\t\tset apiKey($$value) {\n\t\t\t\t\tembApiKey = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget dimension() {\n\t\t\t\t\treturn embDimension;\n\t\t\t\t},\n\t\t\t\tset dimension($$value) {\n\t\t\t\t\tembDimension = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget localModel() {\n\t\t\t\t\treturn embLocalModel;\n\t\t\t\t},\n\t\t\t\tset localModel($$value) {\n\t\t\t\t\tembLocalModel = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget batchSize() {\n\t\t\t\t\treturn embBatchSize;\n\t\t\t\t},\n\t\t\t\tset batchSize($$value) {\n\t\t\t\t\tembBatchSize = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget chunkSize() {\n\t\t\t\t\treturn embChunkSize;\n\t\t\t\t},\n\t\t\t\tset chunkSize($$value) {\n\t\t\t\t\tembChunkSize = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget contextLength() {\n\t\t\t\t\treturn embContextLength;\n\t\t\t\t},\n\t\t\t\tset contextLength($$value) {\n\t\t\t\t\tembContextLength = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t},\n\t\t\t\tget ollamaNumCtx() {\n\t\t\t\t\treturn embOllamaNumCtx;\n\t\t\t\t},\n\t\t\t\tset ollamaNumCtx($$value) {\n\t\t\t\t\tembOllamaNumCtx = $$value;\n\t\t\t\t\t$$settled = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t$$renderer.push(`<!---->`);\n\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></div> `);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t}\n\t\tdo {\n\t\t\t$$settled = true;\n\t\t\t$$inner_renderer = $$renderer.copy();\n\t\t\t$$render_inner($$inner_renderer);\n\t\t} while (!$$settled);\n\t\t$$renderer.subsume($$inner_renderer);\n\t});\n}\n//#endregion\n//#region src/lib/components/akm/HostSharingSection.svelte\nfunction HostSharingSection($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { tokenStored } = $$props;\n\t\t$$renderer.push(`<div class=\"panel\" role=\"tabpanel\"><div class=\"panel-header svelte-fv9i73\"><h2 class=\"svelte-fv9i73\">Host knowledge sharing</h2></div> <div class=\"panel-body\">`);\n\t\t$$renderer.push(\"<!--[0-->\");\n\t\t$$renderer.push(`<div class=\"hs-loading svelte-fv9i73\"><span class=\"spinner svelte-fv9i73\"></span> Checking host stash…</div>`);\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/VoiceTab.svelte\nfunction VoiceTab($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { tokenStored } = $$props;\n\t\tconst ADMIN_TTS_OPTIONS = [\n\t\t\t{\n\t\t\t\tid: \"openpalm-voice\",\n\t\t\t\tname: \"OpenPalm Voice\",\n\t\t\t\ttype: \"local\",\n\t\t\t\trecommended: true,\n\t\t\t\tdesc: \"Local Kokoro TTS + Whisper STT bundled together.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"remote\",\n\t\t\t\tname: \"Remote (OpenAI-compatible)\",\n\t\t\t\ttype: \"cloud\",\n\t\t\t\tdesc: \"Point at any /v1/audio/speech endpoint (OpenAI, Kokoro, Piper, …).\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"browser\",\n\t\t\t\tname: \"Browser\",\n\t\t\t\ttype: \"builtin\",\n\t\t\t\tdesc: \"Web Speech API on this device. No setup, voice quality varies.\"\n\t\t\t}\n\t\t];\n\t\tconst ADMIN_STT_OPTIONS = [\n\t\t\t{\n\t\t\t\tid: \"openpalm-voice\",\n\t\t\t\tname: \"OpenPalm Voice\",\n\t\t\t\ttype: \"local\",\n\t\t\t\trecommended: true,\n\t\t\t\tdesc: \"Local Kokoro TTS + Whisper STT bundled together.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"remote\",\n\t\t\t\tname: \"Remote (OpenAI-compatible)\",\n\t\t\t\ttype: \"cloud\",\n\t\t\t\tdesc: \"Point at any /v1/audio/transcriptions endpoint (Whisper, …).\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"browser\",\n\t\t\t\tname: \"Browser\",\n\t\t\t\ttype: \"builtin\",\n\t\t\t\tdesc: \"Web Speech API on this device. Chrome/Edge only on desktop.\"\n\t\t\t}\n\t\t];\n\t\tconst ADMIN_TTS_ENGINES = {\n\t\t\t\"openpalm-voice\": {\n\t\t\t\tid: \"openpalm-voice\",\n\t\t\t\tfields: []\n\t\t\t},\n\t\t\tremote: {\n\t\t\t\tid: \"remote\",\n\t\t\t\tfields: [\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"baseURL\",\n\t\t\t\t\t\tlabel: \"Endpoint URL\",\n\t\t\t\t\t\tplaceholder: \"http://host.docker.internal:8880/v1\",\n\t\t\t\t\t\thint: \"OpenAI-compatible /v1/audio/speech endpoint.\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"model\",\n\t\t\t\t\t\tlabel: \"Model\",\n\t\t\t\t\t\tplaceholder: \"tts-1\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"voice\",\n\t\t\t\t\t\tlabel: \"Voice\",\n\t\t\t\t\t\tplaceholder: \"alloy\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tbrowser: {\n\t\t\t\tid: \"browser\",\n\t\t\t\tfields: []\n\t\t\t}\n\t\t};\n\t\tconst ADMIN_STT_ENGINES = {\n\t\t\t\"openpalm-voice\": {\n\t\t\t\tid: \"openpalm-voice\",\n\t\t\t\tfields: []\n\t\t\t},\n\t\t\tremote: {\n\t\t\t\tid: \"remote\",\n\t\t\t\tfields: [\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"baseURL\",\n\t\t\t\t\t\tlabel: \"Endpoint URL\",\n\t\t\t\t\t\tplaceholder: \"http://host.docker.internal:9000/v1\",\n\t\t\t\t\t\thint: \"OpenAI-compatible /v1/audio/transcriptions endpoint.\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"model\",\n\t\t\t\t\t\tlabel: \"Model\",\n\t\t\t\t\t\tplaceholder: \"whisper-1\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"language\",\n\t\t\t\t\t\tlabel: \"Language\",\n\t\t\t\t\t\tplaceholder: \"en\",\n\t\t\t\t\t\thint: \"A code like `en` or `fr`, or leave blank to detect.\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tbrowser: {\n\t\t\t\tid: \"browser\",\n\t\t\t\tfields: [{\n\t\t\t\t\tkey: \"language\",\n\t\t\t\t\tlabel: \"Language\",\n\t\t\t\t\tplaceholder: \"en-US\"\n\t\t\t\t}]\n\t\t\t}\n\t\t};\n\t\tconst EMPTY_SECTION = () => ({\n\t\t\tengine: \"\",\n\t\t\tbaseURL: \"\",\n\t\t\tmodel: \"\",\n\t\t\tvoice: \"\",\n\t\t\tlanguage: \"\"\n\t\t});\n\t\tlet loading = false;\n\t\tlet tts = EMPTY_SECTION();\n\t\tlet stt = EMPTY_SECTION();\n\t\tlet availability = {\n\t\t\tstt: {\n\t\t\t\tremoteConfigured: false,\n\t\t\t\tremoteReachable: false\n\t\t\t},\n\t\t\ttts: {\n\t\t\t\tremoteConfigured: false,\n\t\t\t\tremoteReachable: false\n\t\t\t}\n\t\t};\n\t\tlet addonProfiles = [];\n\t\tlet selectedProfile = \"\";\n\t\tconst wantsOpenpalmVoice = derived(() => tts.engine === \"openpalm-voice\" || stt.engine === \"openpalm-voice\");\n\t\tfunction sectionToValue(s) {\n\t\t\treturn {\n\t\t\t\tengine: s.engine,\n\t\t\t\t...s.baseURL ? { baseURL: s.baseURL } : {},\n\t\t\t\t...s.model ? { model: s.model } : {},\n\t\t\t\t...s.voice ? { voice: s.voice } : {},\n\t\t\t\t...s.language ? { language: s.language } : {}\n\t\t\t};\n\t\t}\n\t\tfunction applyTtsChange(v) {\n\t\t\ttts.engine = v.engine || \"\";\n\t\t\ttts.baseURL = v.baseURL ?? \"\";\n\t\t\ttts.model = v.model ?? \"\";\n\t\t\ttts.voice = v.voice ?? \"\";\n\t\t}\n\t\tfunction applySttChange(v) {\n\t\t\tstt.engine = v.engine || \"\";\n\t\t\tstt.baseURL = v.baseURL ?? \"\";\n\t\t\tstt.model = v.model ?? \"\";\n\t\t\tstt.language = v.language ?? \"\";\n\t\t}\n\t\tconst sttDisabledEngines = derived(() => {\n\t\t\treturn {};\n\t\t});\n\t\tconst ttsHiddenEngines = derived(() => new Set([\"browser\"]));\n\t\tconst sttHiddenEngines = derived(() => new Set([\"browser\"]));\n\t\t$$renderer.push(`<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\"${attr(\"disabled\", !tokenStored, true)}>`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Refresh</button> <button class=\"btn btn-primary btn-sm\"${attr(\"disabled\", !tokenStored, true)}>`);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> Save</button></div></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"panel-body svelte-1iuj2un\"><p class=\"section-desc svelte-1iuj2un\">Configure how the assistant listens and speaks. Choose an engine for each;\n\t\t\tthe 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> `);\n\t\tVoiceEngineSelector($$renderer, {\n\t\t\tkind: \"tts\",\n\t\t\tvalue: sectionToValue(tts),\n\t\t\tonchange: applyTtsChange,\n\t\t\tengineOptions: ADMIN_TTS_OPTIONS,\n\t\t\tengineConfigs: ADMIN_TTS_ENGINES,\n\t\t\treachable: availability.tts,\n\t\t\treachabilityEngineId: \"remote\",\n\t\t\thiddenEngines: ttsHiddenEngines()\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tif (tts.engine) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"tts-extras svelte-1iuj2un\"><div class=\"test-voice-row svelte-1iuj2un\"><button type=\"button\" class=\"btn btn-secondary btn-sm\"${attr(\"disabled\", loading, true)}>`);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> Test voice</button> `);\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></div> <label class=\"auto-speak-toggle svelte-1iuj2un\"><input type=\"checkbox\"${attr(\"checked\", voiceState.ttsAutoEnabled, true)} class=\"svelte-1iuj2un\"/> <span>Speak assistant replies aloud automatically</span></label></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></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> `);\n\t\tVoiceEngineSelector($$renderer, {\n\t\t\tkind: \"stt\",\n\t\t\tvalue: sectionToValue(stt),\n\t\t\tonchange: applySttChange,\n\t\t\tengineOptions: ADMIN_STT_OPTIONS,\n\t\t\tengineConfigs: ADMIN_STT_ENGINES,\n\t\t\treachable: availability.stt,\n\t\t\treachabilityEngineId: \"remote\",\n\t\t\tdisabledEngines: sttDisabledEngines(),\n\t\t\thiddenEngines: sttHiddenEngines()\n\t\t});\n\t\t$$renderer.push(`<!----></section> `);\n\t\tif (wantsOpenpalmVoice() && addonProfiles.length > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<section class=\"engine-section svelte-1iuj2un\"><h3 class=\"engine-heading svelte-1iuj2un\">Hardware profile</h3> `);\n\t\t\tVoiceProfileSelector($$renderer, {\n\t\t\t\tprofiles: addonProfiles,\n\t\t\t\tselectedProfile,\n\t\t\t\tonchange: (id) => selectedProfile = id\n\t\t\t});\n\t\t\t$$renderer.push(`<!----></section>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div></div>`);\n\t});\n}\n//#endregion\n//#region src/routes/admin/+page.svelte\nfunction _page($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet authLocked = true;\n\t\tlet authLoading = false;\n\t\tlet authError = \"\";\n\t\tlet adminHealth = null;\n\t\tlet healthLoading = false;\n\t\tlet applyLoading = false;\n\t\tlet upgradeLoading = false;\n\t\tlet containersLoading = false;\n\t\tlet automationsLoading = false;\n\t\tlet operationResult = \"\";\n\t\tlet operationResultType = \"info\";\n\t\tlet containerData = null;\n\t\tlet containerError = \"\";\n\t\tlet containersLastUpdated = null;\n\t\tlet automationsData = null;\n\t\tlet automationsError = \"\";\n\t\tlet selectedContainerId = null;\n\t\tlet activeTab = \"overview\";\n\t\tlet pullLoading = false;\n\t\tlet currentImageTag = \"\";\n\t\tlet inElectron = false;\n\t\tlet tagChangeLoading = false;\n\t\tlet uiDownloadLoading = false;\n\t\tlet uiDownloadReady = false;\n\t\tlet selectedImageTag = \"latest\";\n\t\tlet selectedUiTag = \"\";\n\t\tlet releases = [];\n\t\tlet releasesLoading = false;\n\t\tlet uiVersions = [];\n\t\tlet uiVersionsLoading = false;\n\t\tconst POLL_INTERVAL_MS = 1e4;\n\t\tlet pollTimer = null;\n\t\tfunction startContainerPolling() {\n\t\t\tstopContainerPolling();\n\t\t\tpollTimer = setInterval(() => {\n\t\t\t\tif (!authLocked && containerData) loadContainers();\n\t\t\t}, POLL_INTERVAL_MS);\n\t\t}\n\t\tfunction stopContainerPolling() {\n\t\t\tif (pollTimer !== null) {\n\t\t\t\tclearInterval(pollTimer);\n\t\t\t\tpollTimer = null;\n\t\t\t}\n\t\t}\n\t\tonDestroy(() => {\n\t\t\tstopContainerPolling();\n\t\t});\n\t\tlet anyDangerousLoading = derived(() => applyLoading || upgradeLoading);\n\t\t/** Merged service → state map (used by OverviewTab for health indicators) */\n\t\tlet mergedServices = derived(() => {\n\t\t\tif (!containerData) return /* @__PURE__ */ new Map();\n\t\t\tconst merged = /* @__PURE__ */ new Map();\n\t\t\tif (containerData.containers) for (const [name, state] of Object.entries(containerData.containers)) merged.set(name, state);\n\t\t\tif (containerData.dockerContainers) for (const c of containerData.dockerContainers) merged.set(c.Service, c.State);\n\t\t\treturn merged;\n\t\t});\n\t\t/** Full merged ServiceEntry list (used by ContainersTab for detail rows) */\n\t\tlet serviceEntries = derived(() => {\n\t\t\tif (!containerData) return [];\n\t\t\tconst byService = /* @__PURE__ */ new Map();\n\t\t\tif (containerData.containers) for (const [name, state] of Object.entries(containerData.containers)) byService.set(name, {\n\t\t\t\tid: name,\n\t\t\t\tservice: name,\n\t\t\t\tstate,\n\t\t\t\tdocker: null\n\t\t\t});\n\t\t\tif (containerData.dockerContainers) for (const c of containerData.dockerContainers) {\n\t\t\t\tconst existing = byService.get(c.Service);\n\t\t\t\tif (existing) {\n\t\t\t\t\texisting.state = c.State;\n\t\t\t\t\texisting.docker = c;\n\t\t\t\t\texisting.id = c.ID;\n\t\t\t\t} else byService.set(c.Service, {\n\t\t\t\t\tid: c.ID,\n\t\t\t\t\tservice: c.Service || c.Name,\n\t\t\t\t\tstate: c.State,\n\t\t\t\t\tdocker: c\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn [...byService.values()].sort((a, b) => {\n\t\t\t\tif (a.state === \"running\" && b.state !== \"running\") return -1;\n\t\t\t\tif (a.state !== \"running\" && b.state === \"running\") return 1;\n\t\t\t\treturn a.service.localeCompare(b.service);\n\t\t\t});\n\t\t});\n\t\tfunction applyInvalidTokenState() {\n\t\t\tauthLocked = true;\n\t\t\tauthError = \"Invalid password.\";\n\t\t}\n\t\tasync function handleAuthSuccess(token) {\n\t\t\tif (authLoading) return false;\n\t\t\tauthLoading = true;\n\t\t\tauthError = \"\";\n\t\t\ttry {\n\t\t\t\tif (!(await fetch(\"/admin/auth/login\", {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t\tbody: JSON.stringify({ password: token }),\n\t\t\t\t\tcredentials: \"include\"\n\t\t\t\t})).ok) {\n\t\t\t\t\tapplyInvalidTokenState();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tauthLocked = false;\n\t\t\t\tauthError = \"\";\n\t\t\t\tstartContainerPolling();\n\t\t\t\tawait loadHealth();\n\t\t\t\tloadContainers();\n\t\t\t\tloadAutomations();\n\t\t\t\tloadVersions();\n\t\t\t\tloadReleases();\n\t\t\t\treturn true;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(\"[page] Auth failed:\", e);\n\t\t\t\tauthError = \"Unable to reach admin API.\";\n\t\t\t\treturn false;\n\t\t\t} finally {\n\t\t\t\tauthLoading = false;\n\t\t\t}\n\t\t}\n\t\tasync function loadHealth() {\n\t\t\thealthLoading = true;\n\t\t\ttry {\n\t\t\t\tconst health = await fetchHealth();\n\t\t\t\tadminHealth = health.admin;\n\t\t\t\thealth.guardian;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(\"[page] Health check failed:\", e);\n\t\t\t\tadminHealth = {\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\tservice: \"admin\"\n\t\t\t\t};\n\t\t\t}\n\t\t\thealthLoading = false;\n\t\t}\n\t\tasync function loadContainers() {\n\t\t\tcontainersLoading = true;\n\t\t\tcontainerError = \"\";\n\t\t\ttry {\n\t\t\t\tcontainerData = await fetchContainers();\n\t\t\t} catch (e) {\n\t\t\t\tcontainerData = null;\n\t\t\t\tconst err = e;\n\t\t\t\tif (err.status === 401) {\n\t\t\t\t\tcontainerError = \"Invalid password.\";\n\t\t\t\t\tapplyInvalidTokenState();\n\t\t\t\t} else containerError = `Failed to load containers: ${err.message ?? e}`;\n\t\t\t}\n\t\t\tcontainersLoading = false;\n\t\t\tif (containerData) containersLastUpdated = (/* @__PURE__ */ new Date()).toLocaleTimeString();\n\t\t}\n\t\tasync function loadAutomations() {\n\t\t\tautomationsLoading = true;\n\t\t\tautomationsError = \"\";\n\t\t\ttry {\n\t\t\t\tautomationsData = await fetchAutomations();\n\t\t\t} catch (e) {\n\t\t\t\tautomationsData = null;\n\t\t\t\tconst err = e;\n\t\t\t\tif (err.status === 401) {\n\t\t\t\t\tautomationsError = \"Invalid password.\";\n\t\t\t\t\tapplyInvalidTokenState();\n\t\t\t\t} else automationsError = `Failed to load automations: ${err.message ?? e}`;\n\t\t\t}\n\t\t\tautomationsLoading = false;\n\t\t}\n\t\tasync function loadVersions() {\n\t\t\ttry {\n\t\t\t\tconst data = await fetchVersions();\n\t\t\t\tcurrentImageTag = data.imageTag;\n\t\t\t\tinElectron = data.inElectron;\n\t\t\t} catch {}\n\t\t}\n\t\tasync function loadReleases() {\n\t\t\treleasesLoading = true;\n\t\t\tuiVersionsLoading = true;\n\t\t\ttry {\n\t\t\t\tconst [releaseData, uiData] = await Promise.all([fetchReleases(), fetchUiVersions()]);\n\t\t\t\treleases = releaseData.releases;\n\t\t\t\tuiVersions = uiData.versions;\n\t\t\t\tif (!selectedUiTag) {\n\t\t\t\t\tconst channelPick = uiData.versions.find((v) => v.distTag === \"next\" || v.distTag === \"latest\") ?? uiData.versions[0];\n\t\t\t\t\tif (channelPick) selectedUiTag = channelPick.version;\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\treleasesLoading = false;\n\t\t\tuiVersionsLoading = false;\n\t\t}\n\t\tasync function handleApplyChanges() {\n\t\t\tif (anyDangerousLoading()) return;\n\t\t\tapplyLoading = true;\n\t\t\ttry {\n\t\t\t\tconst result = await applyChanges();\n\t\t\t\tif (result.overallSuccess) {\n\t\t\t\t\toperationResult = result.restarted.length > 0 ? `Changes applied successfully. Restarted: ${result.restarted.join(\", \")}.` : \"Changes applied successfully.\";\n\t\t\t\t\toperationResultType = \"success\";\n\t\t\t\t} else if (result.failed.length > 0) {\n\t\t\t\t\tconst failures = result.failed.map((f) => `${f.service}: ${f.reason}`).join(\"; \");\n\t\t\t\t\tconst restartedNote = result.restarted.length > 0 ? ` (other services restarted: ${result.restarted.join(\", \")})` : \"\";\n\t\t\t\t\toperationResult = `Apply failed for ${result.failed.length} service(s): ${failures}${restartedNote}`;\n\t\t\t\t\toperationResultType = \"error\";\n\t\t\t\t} else if (!result.dockerAvailable) {\n\t\t\t\t\toperationResult = \"Config written, but Docker is unavailable — services were not restarted.\";\n\t\t\t\t\toperationResultType = \"error\";\n\t\t\t\t} else {\n\t\t\t\t\toperationResult = `Apply failed: ${result.error ?? \"unknown error\"}`;\n\t\t\t\t\toperationResultType = \"error\";\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e;\n\t\t\t\tif (err.status === 401) applyInvalidTokenState();\n\t\t\t\telse {\n\t\t\t\t\toperationResult = `Error applying changes: ${err.message ?? e}`;\n\t\t\t\t\toperationResultType = \"error\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tapplyLoading = false;\n\t\t}\n\t\tasync function handleUpgradeStack() {\n\t\t\tif (anyDangerousLoading()) return;\n\t\t\tupgradeLoading = true;\n\t\t\ttry {\n\t\t\t\tconst result = await upgradeStack();\n\t\t\t\toperationResult = `Upgrade complete (image: ${result.imageTag}). ${result.assetsUpdated.length} asset(s) updated, ${result.restarted.length} service(s) restarted.`;\n\t\t\t\toperationResultType = \"success\";\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e;\n\t\t\t\tif (err.status === 401) applyInvalidTokenState();\n\t\t\t\telse {\n\t\t\t\t\toperationResult = `Error upgrading stack: ${err.message ?? e}`;\n\t\t\t\t\toperationResultType = \"error\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tupgradeLoading = false;\n\t\t}\n\t\tasync function handleSetImageTag(tag) {\n\t\t\tif (tagChangeLoading) return;\n\t\t\ttagChangeLoading = true;\n\t\t\ttry {\n\t\t\t\tconst result = await setStackVersion(tag);\n\t\t\t\tcurrentImageTag = result.imageTag;\n\t\t\t\tselectedImageTag = result.imageTag;\n\t\t\t\toperationResult = `Image tag set to ${result.imageTag}. Restarted: ${result.restarted.join(\", \") || \"none\"}.`;\n\t\t\t\toperationResultType = \"success\";\n\t\t\t} catch (e) {\n\t\t\t\toperationResult = `Failed to apply image tag: ${e.message ?? e}`;\n\t\t\t\toperationResultType = \"error\";\n\t\t\t}\n\t\t\ttagChangeLoading = false;\n\t\t}\n\t\tasync function handleDownloadUiVersion(tag) {\n\t\t\tif (uiDownloadLoading) return;\n\t\t\tuiDownloadLoading = true;\n\t\t\tuiDownloadReady = false;\n\t\t\ttry {\n\t\t\t\tawait downloadUiVersion(tag);\n\t\t\t\tselectedUiTag = tag;\n\t\t\t\tuiDownloadReady = true;\n\t\t\t} catch (e) {\n\t\t\t\toperationResult = `Failed to download UI version: ${e.message ?? e}`;\n\t\t\t\toperationResultType = \"error\";\n\t\t\t}\n\t\t\tuiDownloadLoading = false;\n\t\t}\n\t\tfunction handleRestartApp() {\n\t\t\twindow.openpalm?.restart?.();\n\t\t}\n\t\tasync function handleContainerAction(action, containerId) {\n\t\t\ttry {\n\t\t\t\tawait containerAction(action, containerId);\n\t\t\t\tawait loadContainers();\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e;\n\t\t\t\tif (err.status === 401) applyInvalidTokenState();\n\t\t\t\telse containerError = `Action failed: ${err.message ?? e}`;\n\t\t\t}\n\t\t}\n\t\tfunction handleToggleContainer(id) {\n\t\t\tselectedContainerId = selectedContainerId === id ? null : id;\n\t\t}\n\t\t/** Derive service names from container data for the logs tab */\n\t\tlet serviceNames = derived(() => {\n\t\t\tif (!containerData) return [];\n\t\t\tconst names = /* @__PURE__ */ new Set();\n\t\t\tif (containerData.containers) for (const name of Object.keys(containerData.containers)) names.add(name);\n\t\t\tif (containerData.dockerContainers) {\n\t\t\t\tfor (const c of containerData.dockerContainers) if (c.Service) names.add(c.Service);\n\t\t\t}\n\t\t\treturn [...names].sort();\n\t\t});\n\t\tasync function handlePullImages() {\n\t\t\tpullLoading = true;\n\t\t\ttry {\n\t\t\t\tawait pullImages();\n\t\t\t\tawait loadContainers();\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e;\n\t\t\t\tif (err.status === 401) applyInvalidTokenState();\n\t\t\t\telse containerError = `Pull failed: ${err.message ?? e}`;\n\t\t\t} finally {\n\t\t\t\tpullLoading = false;\n\t\t\t}\n\t\t}\n\t\tfunction handleTabSelect(tab) {\n\t\t\tactiveTab = tab;\n\t\t\tif (tab === \"containers\" && !containerData) loadContainers();\n\t\t\tif (tab === \"automations\" && !automationsData) loadAutomations();\n\t\t}\n\t\tfunction handleComponentsAuthError() {\n\t\t\tapplyInvalidTokenState();\n\t\t}\n\t\thead(\"1jef3w8\", $$renderer, ($$renderer) => {\n\t\t\t$$renderer.title(($$renderer) => {\n\t\t\t\t$$renderer.push(`<title>OpenPalm Console</title>`);\n\t\t\t});\n\t\t});\n\t\tif (authLocked) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tAuthGate($$renderer, {\n\t\t\t\tonSuccess: handleAuthSuccess,\n\t\t\t\tloading: authLoading,\n\t\t\t\terror: authError\n\t\t\t});\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\tNavbar($$renderer, {});\n\t\t\t$$renderer.push(`<!----> <main class=\"svelte-1jef3w8\">`);\n\t\t\tTabBar($$renderer, {\n\t\t\t\tactive: activeTab,\n\t\t\t\tonSelect: handleTabSelect\n\t\t\t});\n\t\t\t$$renderer.push(`<!----> `);\n\t\t\tAdminScopeBar($$renderer, {});\n\t\t\t$$renderer.push(`<!----> `);\n\t\t\tif (activeTab === \"overview\") {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\tOverviewTab($$renderer, {\n\t\t\t\t\tadminHealth,\n\t\t\t\t\toperationResult,\n\t\t\t\t\toperationResultType,\n\t\t\t\t\ttokenStored: true,\n\t\t\t\t\thealthLoading,\n\t\t\t\t\tapplyLoading,\n\t\t\t\t\tanyDangerousLoading: anyDangerousLoading(),\n\t\t\t\t\tautomationsData,\n\t\t\t\t\tmergedServices: mergedServices(),\n\t\t\t\t\tonCheckHealth: loadHealth,\n\t\t\t\t\tonApplyChanges: handleApplyChanges,\n\t\t\t\t\tonDismissResult: () => {\n\t\t\t\t\t\toperationResult = \"\";\n\t\t\t\t\t\toperationResultType = \"info\";\n\t\t\t\t\t},\n\t\t\t\t\tonNavigate: handleTabSelect\n\t\t\t\t});\n\t\t\t} else if (activeTab === \"updates\") {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\tUpdatesTab($$renderer, {\n\t\t\t\t\tcurrentImageTag,\n\t\t\t\t\tselectedImageTag,\n\t\t\t\t\ttagChangeLoading,\n\t\t\t\t\tanyDangerousLoading: anyDangerousLoading(),\n\t\t\t\t\ttokenStored: true,\n\t\t\t\t\tupgradeLoading,\n\t\t\t\t\tinElectron,\n\t\t\t\t\tuiVersions,\n\t\t\t\t\tuiVersionsLoading,\n\t\t\t\t\tselectedUiTag,\n\t\t\t\t\tuiDownloadLoading,\n\t\t\t\t\tuiDownloadReady,\n\t\t\t\t\treleases,\n\t\t\t\t\treleasesLoading,\n\t\t\t\t\tonSetImageTag: handleSetImageTag,\n\t\t\t\t\tonSelectedImageTagChange: (t) => {\n\t\t\t\t\t\tselectedImageTag = t;\n\t\t\t\t\t},\n\t\t\t\t\tonUpgradeStack: handleUpgradeStack,\n\t\t\t\t\tonSelectedUiTagChange: (t) => {\n\t\t\t\t\t\tselectedUiTag = t;\n\t\t\t\t\t},\n\t\t\t\t\tonDownloadUiVersion: handleDownloadUiVersion,\n\t\t\t\t\tonRestartApp: handleRestartApp\n\t\t\t\t});\n\t\t\t} else if (activeTab === \"addons\") {\n\t\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t\tAddonsTab($$renderer, {\n\t\t\t\t\tonAuthError: handleComponentsAuthError,\n\t\t\t\t\tonNavigate: handleTabSelect\n\t\t\t\t});\n\t\t\t} else if (activeTab === \"containers\") {\n\t\t\t\t$$renderer.push(\"<!--[3-->\");\n\t\t\t\tContainersTab($$renderer, {\n\t\t\t\t\tcontainerData,\n\t\t\t\t\tserviceEntries: serviceEntries(),\n\t\t\t\t\tloading: containersLoading,\n\t\t\t\t\terror: containerError,\n\t\t\t\t\ttokenStored: true,\n\t\t\t\t\tselectedContainerId,\n\t\t\t\t\tonToggleContainer: handleToggleContainer,\n\t\t\t\t\tonStart: (id) => handleContainerAction(\"start\", id),\n\t\t\t\t\tonStop: (id) => handleContainerAction(\"stop\", id),\n\t\t\t\t\tonRestart: (id) => handleContainerAction(\"restart\", id),\n\t\t\t\t\tonRefresh: loadContainers,\n\t\t\t\t\tonPullImages: handlePullImages,\n\t\t\t\t\tlastUpdated: containersLastUpdated,\n\t\t\t\t\tpullLoading\n\t\t\t\t});\n\t\t\t} else if (activeTab === \"automations\") {\n\t\t\t\t$$renderer.push(\"<!--[4-->\");\n\t\t\t\tAutomationsTab($$renderer, {\n\t\t\t\t\tdata: automationsData,\n\t\t\t\t\tloading: automationsLoading,\n\t\t\t\t\terror: automationsError,\n\t\t\t\t\ttokenStored: true,\n\t\t\t\t\tonRefresh: loadAutomations\n\t\t\t\t});\n\t\t\t} else if (activeTab === \"connections\") {\n\t\t\t\t$$renderer.push(\"<!--[5-->\");\n\t\t\t\tProvidersPanel($$renderer, {});\n\t\t\t} else if (activeTab === \"secrets\") {\n\t\t\t\t$$renderer.push(\"<!--[6-->\");\n\t\t\t\tSecretsTab($$renderer, { tokenStored: true });\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\tif (activeTab === \"voice\") {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\tVoiceTab($$renderer, { tokenStored: true });\n\t\t\t} else if (activeTab === \"akm\") {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\tAkmTab($$renderer, { tokenStored: true });\n\t\t\t} else if (activeTab === \"host-sharing\") {\n\t\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t\tHostSharingSection($$renderer, { tokenStored: true });\n\t\t\t} else if (activeTab === \"logs\") {\n\t\t\t\t$$renderer.push(\"<!--[3-->\");\n\t\t\t\tLogsTab($$renderer, {\n\t\t\t\t\ttokenStored: true,\n\t\t\t\t\tservices: serviceNames()\n\t\t\t\t});\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></main>`);\n\t\t}\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}\n//#endregion\nexport { _page as default };\n"],"names":[],"mappings":"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"}
|