@openpalm/ui 0.12.50 → 0.12.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/.openpalm-ui-version +1 -1
- package/build/client/_app/immutable/assets/{4.2S7Y5od3.css → 4.DKS7ivN-.css} +1 -1
- package/build/client/_app/immutable/assets/4.DKS7ivN-.css.br +0 -0
- package/build/client/_app/immutable/assets/4.DKS7ivN-.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.CcyzbXoG.css +1 -0
- package/build/client/_app/immutable/assets/7.CcyzbXoG.css.br +0 -0
- package/build/client/_app/immutable/assets/7.CcyzbXoG.css.gz +0 -0
- package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css +1 -0
- package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css.br +0 -0
- package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BDvA7M6l.js +1 -0
- package/build/client/_app/immutable/chunks/BDvA7M6l.js.br +0 -0
- package/build/client/_app/immutable/chunks/BDvA7M6l.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DsC4kR0j.js → BM4jJmEk.js} +1 -1
- package/build/client/_app/immutable/chunks/BM4jJmEk.js.br +0 -0
- package/build/client/_app/immutable/chunks/BM4jJmEk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C4c5Y6rY.js +5 -0
- package/build/client/_app/immutable/chunks/C4c5Y6rY.js.br +0 -0
- package/build/client/_app/immutable/chunks/C4c5Y6rY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C4j7gGnm.js +14 -0
- package/build/client/_app/immutable/chunks/C4j7gGnm.js.br +0 -0
- package/build/client/_app/immutable/chunks/C4j7gGnm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C7x_T9zu.js +3 -0
- package/build/client/_app/immutable/chunks/C7x_T9zu.js.br +0 -0
- package/build/client/_app/immutable/chunks/C7x_T9zu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoTCwfyJ.js +1 -0
- package/build/client/_app/immutable/chunks/DoTCwfyJ.js.br +2 -0
- package/build/client/_app/immutable/chunks/DoTCwfyJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{aCnE6_tC.js → DwEShcLP.js} +1 -1
- package/build/client/_app/immutable/chunks/DwEShcLP.js.br +0 -0
- package/build/client/_app/immutable/chunks/DwEShcLP.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BFdaM-OC.js → app.D5lUGJr1.js} +2 -2
- package/build/client/_app/immutable/entry/app.D5lUGJr1.js.br +0 -0
- package/build/client/_app/immutable/entry/app.D5lUGJr1.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CKoCEnYJ.js +1 -0
- package/build/client/_app/immutable/entry/start.CKoCEnYJ.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CKoCEnYJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.C-cj1xnK.js → 0.anwXhDvm.js} +1 -1
- package/build/client/_app/immutable/nodes/0.anwXhDvm.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.anwXhDvm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.KX3Ouskb.js → 1.DrRwtvKf.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.br +1 -0
- package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{10.DaI768ue.js → 10.BLqUjjTI.js} +1 -1
- package/build/client/_app/immutable/nodes/10.BLqUjjTI.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BLqUjjTI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.paHt3QH9.js +124 -0
- package/build/client/_app/immutable/nodes/4.paHt3QH9.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.paHt3QH9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.Cqj1Uy4b.js → 5.bKLnh085.js} +1 -1
- package/build/client/_app/immutable/nodes/5.bKLnh085.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.bKLnh085.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.CG5aMbsS.js → 6.DRi42KoD.js} +1 -1
- package/build/client/_app/immutable/nodes/6.DRi42KoD.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DRi42KoD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.BvgWYGnm.js +2 -0
- package/build/client/_app/immutable/nodes/7.BvgWYGnm.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.BvgWYGnm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.DPvOTkXF.js → 8.BKAKOw6V.js} +1 -1
- package/build/client/_app/immutable/nodes/8.BKAKOw6V.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BKAKOw6V.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.CGqEpaze.js → 9.DwWxN6-k.js} +1 -1
- package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.br +0 -0
- package/build/client/_app/immutable/nodes/{9.CGqEpaze.js.gz → 9.DwWxN6-k.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-BLQ3qoWN.js → 0-BiE1oF-J.js} +3 -3
- package/build/server/chunks/{0-BLQ3qoWN.js.map → 0-BiE1oF-J.js.map} +1 -1
- package/build/server/chunks/1-B-LNip7q.js +9 -0
- package/build/server/chunks/{1-CVrKLjbA.js.map → 1-B-LNip7q.js.map} +1 -1
- package/build/server/chunks/{10-Ce8EZ3XD.js → 10-CS2lFzh1.js} +6 -6
- package/build/server/chunks/{10-Ce8EZ3XD.js.map → 10-CS2lFzh1.js.map} +1 -1
- package/build/server/chunks/4-CliJOxWK.js +9 -0
- package/build/server/chunks/4-CliJOxWK.js.map +1 -0
- package/build/server/chunks/{5-BVHXxvQI.js → 5-DkkL3QsU.js} +3 -3
- package/build/server/chunks/{5-BVHXxvQI.js.map → 5-DkkL3QsU.js.map} +1 -1
- package/build/server/chunks/6-B6ZHxJZG.js +9 -0
- package/build/server/chunks/{6-__nfGbmK.js.map → 6-B6ZHxJZG.js.map} +1 -1
- package/build/server/chunks/7-CIl66k8R.js +9 -0
- package/build/server/chunks/7-CIl66k8R.js.map +1 -0
- package/build/server/chunks/{8-BZ3hpqr-.js → 8-Dbz3fLZs.js} +3 -3
- package/build/server/chunks/{8-BZ3hpqr-.js.map → 8-Dbz3fLZs.js.map} +1 -1
- package/build/server/chunks/{9-hjBfpj1A.js → 9-CnaXNk2w.js} +3 -3
- package/build/server/chunks/{9-hjBfpj1A.js.map → 9-CnaXNk2w.js.map} +1 -1
- package/build/server/chunks/{ChatMessage-6KR_zJHH.js → IconAlert-eLDsz7qz.js} +53 -172
- package/build/server/chunks/IconAlert-eLDsz7qz.js.map +1 -0
- package/build/server/chunks/{IconMic-D7z31i-c.js → IconMic-DMJf4zcn.js} +27 -2
- package/build/server/chunks/IconMic-DMJf4zcn.js.map +1 -0
- package/build/server/chunks/{Navbar-DUlMyfJm.js → Navbar-CbBudHU6.js} +6 -6
- package/build/server/chunks/{Navbar-DUlMyfJm.js.map → Navbar-CbBudHU6.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-CtPb7AoM.js → _layout.svelte-B5opDXuf.js} +2 -2
- package/build/server/chunks/{_layout.svelte-CtPb7AoM.js.map → _layout.svelte-B5opDXuf.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BNYhhZ7t.js → _page.svelte-1VhBiAl_.js} +157 -40
- package/build/server/chunks/_page.svelte-1VhBiAl_.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DZthwDry.js → _page.svelte-6gpwjZv0.js} +3 -3
- package/build/server/chunks/{_page.svelte-DZthwDry.js.map → _page.svelte-6gpwjZv0.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-tvMBqXuw.js → _page.svelte-Bd16jege.js} +3 -3
- package/build/server/chunks/{_page.svelte-tvMBqXuw.js.map → _page.svelte-Bd16jege.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Dxaw9uJe.js → _page.svelte-Boq5WJfs.js} +92 -16
- package/build/server/chunks/_page.svelte-Boq5WJfs.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C6EaFxLq.js → _page.svelte-DM-4V1_g.js} +8 -8
- package/build/server/chunks/{_page.svelte-C6EaFxLq.js.map → _page.svelte-DM-4V1_g.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BYdCbFxZ.js → _page.svelte-jdDbUptn.js} +8 -8
- package/build/server/chunks/{_page.svelte-BYdCbFxZ.js.map → _page.svelte-jdDbUptn.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DG-bVTzV.js → _page.svelte-yAnFAnHi.js} +2 -2
- package/build/server/chunks/{_page.svelte-DG-bVTzV.js.map → _page.svelte-yAnFAnHi.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DeZK1m8O.js → _server.ts-0x3ZsRoq.js} +7 -7
- package/build/server/chunks/{_server.ts-DeZK1m8O.js.map → _server.ts-0x3ZsRoq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BmWqHM7V.js → _server.ts-1fytrAUC.js} +5 -5
- package/build/server/chunks/{_server.ts-BmWqHM7V.js.map → _server.ts-1fytrAUC.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DZUVpKi8.js → _server.ts-2trnHYNR.js} +5 -5
- package/build/server/chunks/{_server.ts-DZUVpKi8.js.map → _server.ts-2trnHYNR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CbvVdN_e.js → _server.ts-3IGr8J7j.js} +5 -5
- package/build/server/chunks/{_server.ts-CbvVdN_e.js.map → _server.ts-3IGr8J7j.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dz0r-R97.js → _server.ts-4HApbECL.js} +5 -5
- package/build/server/chunks/{_server.ts-Dz0r-R97.js.map → _server.ts-4HApbECL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BaAFwTQE.js → _server.ts-4cGCnV5A.js} +6 -6
- package/build/server/chunks/{_server.ts-BaAFwTQE.js.map → _server.ts-4cGCnV5A.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DVF2wxOo.js → _server.ts-5mKh6tgD.js} +5 -5
- package/build/server/chunks/{_server.ts-DVF2wxOo.js.map → _server.ts-5mKh6tgD.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DPF3aMB-.js → _server.ts-B-gZIXCx.js} +5 -5
- package/build/server/chunks/{_server.ts-DPF3aMB-.js.map → _server.ts-B-gZIXCx.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DBQin7Nq.js → _server.ts-B1LApKwc.js} +5 -5
- package/build/server/chunks/{_server.ts-DBQin7Nq.js.map → _server.ts-B1LApKwc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Ds3z4PGJ.js → _server.ts-B5s8k9IW.js} +5 -5
- package/build/server/chunks/{_server.ts-Ds3z4PGJ.js.map → _server.ts-B5s8k9IW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D5GaGe4q.js → _server.ts-B7oDgVRm.js} +7 -7
- package/build/server/chunks/{_server.ts-D5GaGe4q.js.map → _server.ts-B7oDgVRm.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BJTHAeIZ.js → _server.ts-BA7OxoAM.js} +6 -6
- package/build/server/chunks/{_server.ts-BJTHAeIZ.js.map → _server.ts-BA7OxoAM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DVGWhcUO.js → _server.ts-BCqZP9mX.js} +7 -7
- package/build/server/chunks/{_server.ts-DVGWhcUO.js.map → _server.ts-BCqZP9mX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DHDXUYeD.js → _server.ts-BE9eO04W.js} +5 -5
- package/build/server/chunks/{_server.ts-DHDXUYeD.js.map → _server.ts-BE9eO04W.js.map} +1 -1
- package/build/server/chunks/{_server.ts-rmvy1g6m.js → _server.ts-BUf-IIIm.js} +5 -5
- package/build/server/chunks/{_server.ts-rmvy1g6m.js.map → _server.ts-BUf-IIIm.js.map} +1 -1
- package/build/server/chunks/{_server.ts-yfpXYRHf.js → _server.ts-BW13CurN.js} +5 -5
- package/build/server/chunks/{_server.ts-yfpXYRHf.js.map → _server.ts-BW13CurN.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DmLb4m64.js → _server.ts-BWh3c-xu.js} +5 -5
- package/build/server/chunks/{_server.ts-DmLb4m64.js.map → _server.ts-BWh3c-xu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CuqA65YO.js → _server.ts-BYDgL8Wh.js} +6 -6
- package/build/server/chunks/{_server.ts-CuqA65YO.js.map → _server.ts-BYDgL8Wh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CGpLph00.js → _server.ts-B_9-b1wk.js} +5 -5
- package/build/server/chunks/{_server.ts-CGpLph00.js.map → _server.ts-B_9-b1wk.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Cr48FbKi.js → _server.ts-Bbc4zzJy.js} +6 -6
- package/build/server/chunks/{_server.ts-Cr48FbKi.js.map → _server.ts-Bbc4zzJy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C2XqG-Q2.js → _server.ts-BhmHIGs6.js} +5 -5
- package/build/server/chunks/{_server.ts-C2XqG-Q2.js.map → _server.ts-BhmHIGs6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C9MzpQd4.js → _server.ts-BhuoSeRy.js} +5 -5
- package/build/server/chunks/{_server.ts-C9MzpQd4.js.map → _server.ts-BhuoSeRy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ByGXYk2l.js → _server.ts-BnL_ReBS.js} +4 -4
- package/build/server/chunks/{_server.ts-ByGXYk2l.js.map → _server.ts-BnL_ReBS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D0N4sB9X.js → _server.ts-BoOQ7F2z.js} +8 -8
- package/build/server/chunks/{_server.ts-D0N4sB9X.js.map → _server.ts-BoOQ7F2z.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DqPWs5R1.js → _server.ts-Bry3Z40C.js} +7 -7
- package/build/server/chunks/{_server.ts-DqPWs5R1.js.map → _server.ts-Bry3Z40C.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BwJrHUUB.js → _server.ts-BtVLVJf0.js} +6 -6
- package/build/server/chunks/{_server.ts-BwJrHUUB.js.map → _server.ts-BtVLVJf0.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DYv9BDaZ.js → _server.ts-BzISiSHa.js} +5 -5
- package/build/server/chunks/{_server.ts-DYv9BDaZ.js.map → _server.ts-BzISiSHa.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B4AANoeg.js → _server.ts-C7PeR-ll.js} +5 -5
- package/build/server/chunks/{_server.ts-B4AANoeg.js.map → _server.ts-C7PeR-ll.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DN4MrDts.js → _server.ts-C8NW6VWR.js} +6 -6
- package/build/server/chunks/{_server.ts-DN4MrDts.js.map → _server.ts-C8NW6VWR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Y75fVVpr.js → _server.ts-CF0aKxAL.js} +2 -2
- package/build/server/chunks/{_server.ts-Y75fVVpr.js.map → _server.ts-CF0aKxAL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CTqLfvnu.js → _server.ts-CH-OPdXJ.js} +5 -5
- package/build/server/chunks/{_server.ts-CTqLfvnu.js.map → _server.ts-CH-OPdXJ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BgYB-mao.js → _server.ts-CPsQ5aGi.js} +5 -5
- package/build/server/chunks/{_server.ts-BgYB-mao.js.map → _server.ts-CPsQ5aGi.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BOQtqfyz.js → _server.ts-CQ8JX5O7.js} +5 -5
- package/build/server/chunks/{_server.ts-BOQtqfyz.js.map → _server.ts-CQ8JX5O7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DdJ6JtrY.js → _server.ts-CQPRTbTX.js} +5 -5
- package/build/server/chunks/{_server.ts-DdJ6JtrY.js.map → _server.ts-CQPRTbTX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-IFkzxUJw.js → _server.ts-CTVpEmAc.js} +5 -5
- package/build/server/chunks/{_server.ts-IFkzxUJw.js.map → _server.ts-CTVpEmAc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C6Afnups.js → _server.ts-CWVi9VhR.js} +5 -5
- package/build/server/chunks/{_server.ts-C6Afnups.js.map → _server.ts-CWVi9VhR.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BeSZIZc7.js → _server.ts-CXQd0L0u.js} +2 -2
- package/build/server/chunks/{_server.ts-BeSZIZc7.js.map → _server.ts-CXQd0L0u.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BAebWsB3.js → _server.ts-Cgg_3L-k.js} +6 -6
- package/build/server/chunks/{_server.ts-BAebWsB3.js.map → _server.ts-Cgg_3L-k.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B63mNhnv.js → _server.ts-ChvbGMR6.js} +4 -4
- package/build/server/chunks/{_server.ts-B63mNhnv.js.map → _server.ts-ChvbGMR6.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CF1wRhsj.js → _server.ts-CnByyw9m.js} +2 -2
- package/build/server/chunks/{_server.ts-CF1wRhsj.js.map → _server.ts-CnByyw9m.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DFDjhrqJ.js → _server.ts-Ct_0qiMK.js} +6 -6
- package/build/server/chunks/{_server.ts-DFDjhrqJ.js.map → _server.ts-Ct_0qiMK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-TITk8Kne.js → _server.ts-Cu1u6Fq3.js} +5 -5
- package/build/server/chunks/{_server.ts-TITk8Kne.js.map → _server.ts-Cu1u6Fq3.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B5XmZ4Yc.js → _server.ts-Cuq4zRUh.js} +5 -5
- package/build/server/chunks/{_server.ts-B5XmZ4Yc.js.map → _server.ts-Cuq4zRUh.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BAERQjfu.js → _server.ts-Cx8pH99_.js} +5 -5
- package/build/server/chunks/{_server.ts-BAERQjfu.js.map → _server.ts-Cx8pH99_.js.map} +1 -1
- package/build/server/chunks/{_server.ts-ByyrlTLw.js → _server.ts-D-eORdC8.js} +6 -6
- package/build/server/chunks/{_server.ts-ByyrlTLw.js.map → _server.ts-D-eORdC8.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DNXIRmXr.js → _server.ts-D1cvo-nO.js} +5 -5
- package/build/server/chunks/{_server.ts-DNXIRmXr.js.map → _server.ts-D1cvo-nO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CnFqYcci.js → _server.ts-D4nuqQNX.js} +7 -7
- package/build/server/chunks/{_server.ts-CnFqYcci.js.map → _server.ts-D4nuqQNX.js.map} +1 -1
- package/build/server/chunks/{_server.ts-EVOFhq9N.js → _server.ts-D6aAJoCf.js} +5 -5
- package/build/server/chunks/{_server.ts-EVOFhq9N.js.map → _server.ts-D6aAJoCf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BtoFmiAP.js → _server.ts-D9PUEjiN.js} +5 -5
- package/build/server/chunks/{_server.ts-BtoFmiAP.js.map → _server.ts-D9PUEjiN.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CuYYPS6N.js → _server.ts-DAiD8z-P.js} +5 -5
- package/build/server/chunks/{_server.ts-CuYYPS6N.js.map → _server.ts-DAiD8z-P.js.map} +1 -1
- package/build/server/chunks/{_server.ts-xK5YGdBR.js → _server.ts-DDKL_uuS.js} +7 -7
- package/build/server/chunks/{_server.ts-xK5YGdBR.js.map → _server.ts-DDKL_uuS.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CC5bii6D.js → _server.ts-DGkgd0uc.js} +5 -5
- package/build/server/chunks/{_server.ts-CC5bii6D.js.map → _server.ts-DGkgd0uc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BtkQ0nbr.js → _server.ts-DHig-2Ii.js} +5 -5
- package/build/server/chunks/{_server.ts-BtkQ0nbr.js.map → _server.ts-DHig-2Ii.js.map} +1 -1
- package/build/server/chunks/{_server.ts-FTC-tgFz.js → _server.ts-DJdHVo2c.js} +5 -5
- package/build/server/chunks/{_server.ts-FTC-tgFz.js.map → _server.ts-DJdHVo2c.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BMvXBmzA.js → _server.ts-DLrsnGKc.js} +6 -6
- package/build/server/chunks/{_server.ts-BMvXBmzA.js.map → _server.ts-DLrsnGKc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DIeOLqyQ.js → _server.ts-DRYh6JJM.js} +5 -5
- package/build/server/chunks/{_server.ts-DIeOLqyQ.js.map → _server.ts-DRYh6JJM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CTwc4hbs.js → _server.ts-DUbqsB2y.js} +2 -2
- package/build/server/chunks/{_server.ts-CTwc4hbs.js.map → _server.ts-DUbqsB2y.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DxQNKsI_.js → _server.ts-DVRwJs1D.js} +5 -5
- package/build/server/chunks/{_server.ts-DxQNKsI_.js.map → _server.ts-DVRwJs1D.js.map} +1 -1
- package/build/server/chunks/{_server.ts-D58sAuTL.js → _server.ts-DYZ1SnMq.js} +5 -5
- package/build/server/chunks/{_server.ts-D58sAuTL.js.map → _server.ts-DYZ1SnMq.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Q-E1sg4x.js → _server.ts-DdpgDdUI.js} +5 -5
- package/build/server/chunks/{_server.ts-Q-E1sg4x.js.map → _server.ts-DdpgDdUI.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CNeu1Nsk.js → _server.ts-DhVR_dEn.js} +5 -5
- package/build/server/chunks/{_server.ts-CNeu1Nsk.js.map → _server.ts-DhVR_dEn.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BO-JdDjO.js → _server.ts-DorWUEnZ.js} +5 -5
- package/build/server/chunks/{_server.ts-BO-JdDjO.js.map → _server.ts-DorWUEnZ.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C4tg4iFm.js → _server.ts-DptdgCp1.js} +5 -5
- package/build/server/chunks/{_server.ts-C4tg4iFm.js.map → _server.ts-DptdgCp1.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BU0eUW3G.js → _server.ts-DyFhMY-d.js} +5 -5
- package/build/server/chunks/{_server.ts-BU0eUW3G.js.map → _server.ts-DyFhMY-d.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CNRGIyf0.js → _server.ts-FBHhAciM.js} +5 -5
- package/build/server/chunks/{_server.ts-CNRGIyf0.js.map → _server.ts-FBHhAciM.js.map} +1 -1
- package/build/server/chunks/{_server.ts-iORf1RrR.js → _server.ts-H0_rl9HF.js} +6 -6
- package/build/server/chunks/{_server.ts-iORf1RrR.js.map → _server.ts-H0_rl9HF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-rBEZAYpQ.js → _server.ts-MGCXhBlP.js} +5 -5
- package/build/server/chunks/{_server.ts-rBEZAYpQ.js.map → _server.ts-MGCXhBlP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DEH-K579.js → _server.ts-OXR06_zO.js} +2 -2
- package/build/server/chunks/{_server.ts-DEH-K579.js.map → _server.ts-OXR06_zO.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DTLI_nBN.js → _server.ts-QbGAW-It.js} +5 -5
- package/build/server/chunks/{_server.ts-DTLI_nBN.js.map → _server.ts-QbGAW-It.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dwh0tCGZ.js → _server.ts-TAvt1Rlb.js} +5 -5
- package/build/server/chunks/{_server.ts-Dwh0tCGZ.js.map → _server.ts-TAvt1Rlb.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BXL1W-kB.js → _server.ts-VXMfJF_F.js} +5 -5
- package/build/server/chunks/{_server.ts-BXL1W-kB.js.map → _server.ts-VXMfJF_F.js.map} +1 -1
- package/build/server/chunks/{_server.ts-eBK0_Hbz.js → _server.ts-XiInWDAF.js} +5 -5
- package/build/server/chunks/{_server.ts-eBK0_Hbz.js.map → _server.ts-XiInWDAF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BfNAQOYe.js → _server.ts-d08IyVdj.js} +6 -6
- package/build/server/chunks/{_server.ts-BfNAQOYe.js.map → _server.ts-d08IyVdj.js.map} +1 -1
- package/build/server/chunks/{_server.ts-g_vUepsn.js → _server.ts-dtw_InfP.js} +5 -5
- package/build/server/chunks/{_server.ts-g_vUepsn.js.map → _server.ts-dtw_InfP.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CB_BFb7e.js → _server.ts-eTP3NGlu.js} +5 -5
- package/build/server/chunks/{_server.ts-CB_BFb7e.js.map → _server.ts-eTP3NGlu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-C1cynJOZ.js → _server.ts-fm-L_1WH.js} +5 -5
- package/build/server/chunks/{_server.ts-C1cynJOZ.js.map → _server.ts-fm-L_1WH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B1hkm3X2.js → _server.ts-g5H0gdQB.js} +5 -5
- package/build/server/chunks/{_server.ts-B1hkm3X2.js.map → _server.ts-g5H0gdQB.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DtJDd_qD.js → _server.ts-gBvSTaRH.js} +5 -5
- package/build/server/chunks/{_server.ts-DtJDd_qD.js.map → _server.ts-gBvSTaRH.js.map} +1 -1
- package/build/server/chunks/{_server.ts-wXXPxMsg.js → _server.ts-lMB9A2Vx.js} +5 -5
- package/build/server/chunks/{_server.ts-wXXPxMsg.js.map → _server.ts-lMB9A2Vx.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dg4a0yw1.js → _server.ts-tww34LXr.js} +5 -5
- package/build/server/chunks/{_server.ts-Dg4a0yw1.js.map → _server.ts-tww34LXr.js.map} +1 -1
- package/build/server/chunks/{_server.ts-qx3jlXPK.js → _server.ts-xgg0Rj1C.js} +5 -5
- package/build/server/chunks/{_server.ts-qx3jlXPK.js.map → _server.ts-xgg0Rj1C.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B75mdbmi.js → _server.ts-yO3j4YDH.js} +5 -5
- package/build/server/chunks/{_server.ts-B75mdbmi.js.map → _server.ts-yO3j4YDH.js.map} +1 -1
- package/build/server/chunks/{addon-helpers-DpXntTl4.js → addon-helpers-DnZ1IPC7.js} +3 -3
- package/build/server/chunks/{addon-helpers-DpXntTl4.js.map → addon-helpers-DnZ1IPC7.js.map} +1 -1
- package/build/server/chunks/{akm-6CeMy4Ox.js → akm-BVM3F-FY.js} +2 -2
- package/build/server/chunks/{akm-6CeMy4Ox.js.map → akm-BVM3F-FY.js.map} +1 -1
- package/build/server/chunks/{catalog-DPsuf1zj.js → catalog-B_9Qf_Tj.js} +5 -5
- package/build/server/chunks/{catalog-DPsuf1zj.js.map → catalog-B_9Qf_Tj.js.map} +1 -1
- package/build/server/chunks/{client-ffdGZ3sp.js → client-CEfPhREO.js} +2 -2
- package/build/server/chunks/{client-ffdGZ3sp.js.map → client-CEfPhREO.js.map} +1 -1
- package/build/server/chunks/{config-Dqq9cLxx.js → config-VJ5wAdKd.js} +2 -2
- package/build/server/chunks/{config-Dqq9cLxx.js.map → config-VJ5wAdKd.js.map} +1 -1
- package/build/server/chunks/{docker-BSUpGiXy.js → docker-7rKo0FDm.js} +2 -2
- package/build/server/chunks/{docker-BSUpGiXy.js.map → docker-7rKo0FDm.js.map} +1 -1
- package/build/server/chunks/{endpoints-l4xlthcJ.js → endpoints-DUs5zmwI.js} +2 -2
- package/build/server/chunks/{endpoints-l4xlthcJ.js.map → endpoints-DUs5zmwI.js.map} +1 -1
- package/build/server/chunks/environment-DqfL567G.js.map +1 -1
- package/build/server/chunks/{error.svelte-B_Ffh5ZD.js → error.svelte-DXUxoirZ.js} +4 -4
- package/build/server/chunks/{error.svelte-B_Ffh5ZD.js.map → error.svelte-DXUxoirZ.js.map} +1 -1
- package/build/server/chunks/{helpers-BM-xWM7P.js → helpers-GEmeDI6e.js} +5 -6
- package/build/server/chunks/helpers-GEmeDI6e.js.map +1 -0
- package/build/server/chunks/{hooks.server-CP637JxQ.js → hooks.server-CwgeONEs.js} +6 -6
- package/build/server/chunks/hooks.server-CwgeONEs.js.map +1 -0
- package/build/server/chunks/{http-C4A6p54g.js → http-BzGcbSMh.js} +2 -2
- package/build/server/chunks/{http-C4A6p54g.js.map → http-BzGcbSMh.js.map} +1 -1
- package/build/server/chunks/{internal-Bt4slJwb.js → internal-CWT3-fy-.js} +3 -3
- package/build/server/chunks/{internal-Bt4slJwb.js.map → internal-CWT3-fy-.js.map} +1 -1
- package/build/server/chunks/{paths-C4UGwNn5.js → paths-D8yGDgAD.js} +2 -2
- package/build/server/chunks/{paths-C4UGwNn5.js.map → paths-D8yGDgAD.js.map} +1 -1
- package/build/server/chunks/{session-cookie-BKu1-pgJ.js → session-cookie-IMj1chTO.js} +2 -2
- package/build/server/chunks/{session-cookie-BKu1-pgJ.js.map → session-cookie-IMj1chTO.js.map} +1 -1
- package/build/server/chunks/{setup-deploy-BeHZenlf.js → setup-deploy-DhMA_slP.js} +2 -2
- package/build/server/chunks/{setup-deploy-BeHZenlf.js.map → setup-deploy-DhMA_slP.js.map} +1 -1
- package/build/server/chunks/{src-DiiTRPTT.js → src-DBYue8Tb.js} +2 -2
- package/build/server/chunks/{src-DiiTRPTT.js.map → src-DBYue8Tb.js.map} +1 -1
- package/build/server/chunks/{state-ClKZUXL6.js → state-Bpt5dC1X.js} +2 -2
- package/build/server/chunks/{state-ClKZUXL6.js.map → state-Bpt5dC1X.js.map} +1 -1
- package/build/server/chunks/{state2-3Dq4C83o.js → state2-D20PkMjF.js} +2 -2
- package/build/server/chunks/{state2-3Dq4C83o.js.map → state2-D20PkMjF.js.map} +1 -1
- package/build/server/chunks/{theme-state.svelte-DshW_ZYI.js → theme-state.svelte-DPdcwIRf.js} +240 -2
- package/build/server/chunks/theme-state.svelte-DPdcwIRf.js.map +1 -0
- package/build/server/index.js +1 -1
- package/build/server/manifest.js +92 -92
- package/build/server/manifest.js.map +1 -1
- package/package.json +2 -2
- package/build/client/_app/immutable/assets/4.2S7Y5od3.css.br +0 -0
- package/build/client/_app/immutable/assets/4.2S7Y5od3.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.2p9IYK2G.css +0 -1
- package/build/client/_app/immutable/assets/7.2p9IYK2G.css.br +0 -0
- package/build/client/_app/immutable/assets/7.2p9IYK2G.css.gz +0 -0
- package/build/client/_app/immutable/assets/ChatMessage.Bir85vV2.css +0 -1
- package/build/client/_app/immutable/assets/ChatMessage.Bir85vV2.css.br +0 -0
- package/build/client/_app/immutable/assets/ChatMessage.Bir85vV2.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BZAs55y_.js +0 -5
- package/build/client/_app/immutable/chunks/BZAs55y_.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZAs55y_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDBZFq_t.js +0 -3
- package/build/client/_app/immutable/chunks/CDBZFq_t.js.br +0 -0
- package/build/client/_app/immutable/chunks/CDBZFq_t.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CKVZpD28.js +0 -15
- package/build/client/_app/immutable/chunks/CKVZpD28.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKVZpD28.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DsC4kR0j.js.br +0 -0
- package/build/client/_app/immutable/chunks/DsC4kR0j.js.gz +0 -0
- package/build/client/_app/immutable/chunks/H2DLFDya.js +0 -1
- package/build/client/_app/immutable/chunks/H2DLFDya.js.br +0 -2
- package/build/client/_app/immutable/chunks/H2DLFDya.js.gz +0 -0
- package/build/client/_app/immutable/chunks/YN5ShA1l.js +0 -1
- package/build/client/_app/immutable/chunks/YN5ShA1l.js.br +0 -0
- package/build/client/_app/immutable/chunks/YN5ShA1l.js.gz +0 -0
- package/build/client/_app/immutable/chunks/aCnE6_tC.js.br +0 -0
- package/build/client/_app/immutable/chunks/aCnE6_tC.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BFdaM-OC.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BFdaM-OC.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DhXDSrhM.js +0 -1
- package/build/client/_app/immutable/entry/start.DhXDSrhM.js.br +0 -1
- package/build/client/_app/immutable/entry/start.DhXDSrhM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.C-cj1xnK.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.C-cj1xnK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.KX3Ouskb.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.KX3Ouskb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.DaI768ue.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.DaI768ue.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BDopUiq2.js +0 -123
- package/build/client/_app/immutable/nodes/4.BDopUiq2.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BDopUiq2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Cqj1Uy4b.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Cqj1Uy4b.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CG5aMbsS.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CG5aMbsS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.C7GW-yrC.js +0 -1
- package/build/client/_app/immutable/nodes/7.C7GW-yrC.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.C7GW-yrC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.DPvOTkXF.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DPvOTkXF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CGqEpaze.js.br +0 -0
- package/build/server/chunks/1-CVrKLjbA.js +0 -9
- package/build/server/chunks/4-D-_xIXLF.js +0 -9
- package/build/server/chunks/4-D-_xIXLF.js.map +0 -1
- package/build/server/chunks/6-__nfGbmK.js +0 -9
- package/build/server/chunks/7-B0qs4G8k.js +0 -9
- package/build/server/chunks/7-B0qs4G8k.js.map +0 -1
- package/build/server/chunks/ChatMessage-6KR_zJHH.js.map +0 -1
- package/build/server/chunks/IconMic-D7z31i-c.js.map +0 -1
- package/build/server/chunks/_page.svelte-BNYhhZ7t.js.map +0 -1
- package/build/server/chunks/_page.svelte-Dxaw9uJe.js.map +0 -1
- package/build/server/chunks/helpers-BM-xWM7P.js.map +0 -1
- package/build/server/chunks/hooks.server-CP637JxQ.js.map +0 -1
- package/build/server/chunks/theme-state.svelte-DshW_ZYI.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers-BM-xWM7P.js","sources":["../../../.svelte-kit/adapter-node/chunks/helpers.js"],"sourcesContent":["import { Yt as readSecret, _t as createOpenCodeClient, cn as resolveOpenPalmHome, n as isRemoteSetupAllowed } from \"./src.js\";\nimport { r as getActiveEndpoint } from \"./endpoints.js\";\nimport { createHash, createHmac, timingSafeEqual } from \"node:crypto\";\n//#region src/lib/server/session-store.ts\n/**\n* Stateless signed session tokens.\n*\n* Token format: `<expiresAt>.<hmac-sha256-hex>`\n* expiresAt — unix ms timestamp when the session expires\n* signature — HMAC-SHA256(expiresAt, login password)\n*\n* Tokens are self-validating: the server holds no per-session state and\n* sessions survive UI server restarts. Signing with the login password means\n* a password change invalidates all existing sessions — correct behaviour.\n*\n* The signing secret is resolved exactly like login verification\n* (`getUiLoginPassword`): `process.env.OP_UI_LOGIN_PASSWORD` first, then the\n* on-disk stack secret. When NEITHER exists, minting throws and validation\n* fails closed — there is deliberately no fallback secret, because a constant\n* key would let anyone forge an admin token. Reading the file per call also\n* means tokens minted right after the setup wizard writes the password are\n* signed with the real secret, without waiting for a process restart.\n*\n* Logout semantics (known trade-off of stateless tokens): logout revokes the\n* single token the browser presented (in-memory list, cleared on restart) and\n* clears the cookie. Earlier tokens issued to the same browser by sliding\n* renewal remain cryptographically valid until they expire — logout is\n* \"forget my cookie\", not \"kill every credential ever issued\". A real\n* kill-switch is changing the login password, which invalidates everything.\n*/\n/** Session lifetime for both the token expiry and the cookie Max-Age. 14 days. */\nvar SESSION_TTL_MS = 12096e5;\n/** Cookie Max-Age in seconds (Set-Cookie uses seconds, not ms). */\nvar SESSION_TTL_SECONDS = SESSION_TTL_MS / 1e3;\nvar _revoked = /* @__PURE__ */ new Set();\nvar _testOverrides = /* @__PURE__ */ new Set();\n/**\n* Read the operator UI login password from the host environment or the\n* file-based stack secret (`knowledge/secrets/op_ui_login_password`).\n*\n* This is the single source of truth for the password — login verification\n* (helpers.ts) and token signing below both use it, so they can never\n* disagree about whether a password exists. Returns \"\" when neither source\n* has a value (first boot, before the wizard runs).\n*/\nfunction getUiLoginPassword() {\n\tconst envValue = process.env.OP_UI_LOGIN_PASSWORD;\n\tif (envValue) return envValue;\n\treturn readSecret(resolveOpenPalmHome(), \"op_ui_login_password\")?.trimEnd() ?? \"\";\n}\n/** Sign `expiresAt` with the login password. Returns null when no password is configured. */\nfunction signToken(expiresAt) {\n\tconst secret = getUiLoginPassword();\n\tif (!secret) return null;\n\treturn createHmac(\"sha256\", secret).update(String(expiresAt)).digest(\"hex\");\n}\n/**\n* Mint a new signed session token with a 14-day TTL.\n* Place the result in the `op_session` cookie.\n* Throws when no login password is configured — callers must verify a\n* password exists (they all do: login/session/setup-complete check first).\n*/\nfunction createSession() {\n\tconst expiresAt = Date.now() + SESSION_TTL_MS;\n\tconst sig = signToken(expiresAt);\n\tif (sig === null) throw new Error(\"Cannot mint a session: no UI login password is configured.\");\n\treturn `${expiresAt}.${sig}`;\n}\n/**\n* Return true iff `token` is a valid, non-expired, non-revoked session.\n*/\nfunction validateSession(token) {\n\tif (!token) return false;\n\tif (_testOverrides.has(token)) return true;\n\tif (_revoked.has(token)) return false;\n\tconst dot = token.lastIndexOf(\".\");\n\tif (dot < 0) return false;\n\tconst expiresAt = Number(token.slice(0, dot));\n\tif (!Number.isFinite(expiresAt) || Date.now() >= expiresAt) return false;\n\tconst sig = token.slice(dot + 1);\n\tconst expected = signToken(expiresAt);\n\tif (expected === null) return false;\n\tif (sig.length !== expected.length) return false;\n\treturn timingSafeEqual(Buffer.from(sig), Buffer.from(expected));\n}\n/**\n* Sliding renewal: validate the old token, return a new one with a fresh\n* 14-day TTL, or return false if the old token is invalid/expired.\n* The caller must place the returned token in the `op_session` cookie.\n*/\nfunction touchSession(token) {\n\tif (!validateSession(token)) return false;\n\treturn createSession();\n}\n/**\n* Revoke a token (logout). The browser cookie must also be cleared by the caller.\n* The revocation list survives until the next server restart. Entries whose\n* embedded expiry has passed are pruned on each call — an expired token fails\n* validation anyway, so keeping it listed is pure memory growth.\n*/\nfunction invalidateSession(token) {\n\tconst now = Date.now();\n\tfor (const revoked of _revoked) {\n\t\tconst expiresAt = Number(revoked.slice(0, revoked.lastIndexOf(\".\")));\n\t\tif (!Number.isFinite(expiresAt) || expiresAt <= now) _revoked.delete(revoked);\n\t}\n\t_revoked.add(token);\n}\n//#endregion\n//#region src/lib/server/helpers.ts\n/**\n* Lazy OpenCode client bound to the currently active endpoint. The client is\n* recreated whenever the active endpoint URL changes so user switches in the\n* UI take effect on the next call.\n*/\nvar _openCodeClient;\nvar _openCodeClientUrl;\nfunction getOpenCodeClient() {\n\tconst { url } = getActiveEndpoint();\n\tif (!_openCodeClient || url !== _openCodeClientUrl) {\n\t\t_openCodeClient = createOpenCodeClient({ baseUrl: url });\n\t\t_openCodeClientUrl = url;\n\t}\n\treturn _openCodeClient;\n}\nfunction safeTokenCompare(a, b) {\n\tif (typeof a !== \"string\" || typeof b !== \"string\") return false;\n\tif (!a || !b) return false;\n\treturn timingSafeEqual(createHash(\"sha256\").update(a).digest(), createHash(\"sha256\").update(b).digest());\n}\n/** Standard JSON response with request ID header */\nfunction jsonResponse(status, body, requestId = \"\") {\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...requestId ? { \"x-request-id\": requestId } : {}\n\t\t}\n\t});\n}\n/** Standard error envelope */\nfunction errorResponse(status, error, message, details = {}, requestId = \"\") {\n\treturn jsonResponse(status, {\n\t\terror,\n\t\tmessage,\n\t\tdetails,\n\t\trequestId\n\t}, requestId);\n}\n/** Extract or generate request ID */\nfunction getRequestId(event) {\n\treturn event.request.headers.get(\"x-request-id\") || crypto.randomUUID();\n}\n/**\n* Extract raw session token from the `op_session` cookie.\n*\n* Phase 2 of the auth/proxy refactor (docs/technical/auth-and-proxy-refactor-plan.md)\n* removed the legacy `x-admin-token` / `Authorization: Bearer` header fallbacks.\n* The cookie is HttpOnly + SameSite=Strict and is the ONLY credential the browser\n* holds; XSS cannot read it and out-of-process callers must obtain a session via\n* `POST /admin/auth/login` (or `/session`) and present the cookie on subsequent\n* requests.\n*/\nfunction extractToken(event) {\n\tconst match = (event.request.headers.get(\"cookie\") ?? \"\").match(/(?:^|;\\s*)op_session=([^;]+)/);\n\tif (match) return match[1];\n\treturn \"\";\n}\n/** Check admin auth — returns error Response or null if OK */\nfunction requireAdmin(event, requestId) {\n\tif (!getUiLoginPassword()) return errorResponse(503, \"admin_not_configured\", \"OP_UI_LOGIN_PASSWORD has not been set. Complete setup first.\", {}, requestId);\n\tif (!validateSession(extractToken(event))) return errorResponse(401, \"unauthorized\", \"Missing or invalid credentials\", {}, requestId);\n\treturn null;\n}\n/**\n* Identify caller by the presented `op_session` cookie.\n*\n* Returns \"admin\" when the cookie holds a valid session token.\n*/\nfunction identifyCallerByToken(event) {\n\tif (!getUiLoginPassword()) return null;\n\tif (validateSession(extractToken(event))) return \"admin\";\n\treturn null;\n}\n/** Parse JSON body safely — returns discriminated result with error type */\nasync function parseJsonBody(request, maxBytes = 1048576) {\n\ttry {\n\t\tconst contentLength = request.headers.get(\"content-length\");\n\t\tif (contentLength && parseInt(contentLength, 10) > maxBytes) return { error: \"too_large\" };\n\t\treturn { data: await request.json() };\n\t} catch (e) {\n\t\tconsole.warn(\"[helpers] Failed to parse JSON request body\", e);\n\t\treturn { error: \"invalid_json\" };\n\t}\n}\n/** Convert a ParseJsonBodyError to an appropriate HTTP error response */\nfunction jsonBodyError(err, requestId) {\n\tif (err.error === \"too_large\") return errorResponse(413, \"too_large\", \"Request body too large\", {}, requestId);\n\treturn errorResponse(400, \"invalid_json\", \"Request body must be valid JSON\", {}, requestId);\n}\n/**\n* Auth + JSON body wrapper for admin POST/DELETE handlers.\n*\n* Replaces the 4-line boilerplate copy-pasted across 30+ routes:\n* const requestId = getRequestId(event);\n* const authError = requireAdmin(event, requestId);\n* if (authError) return authError;\n* const result = await parseJsonBody(event.request);\n* if ('error' in result) return jsonBodyError(result, requestId);\n*\n* Use for routes that need both auth and a JSON body. For auth-only or\n* GET routes, call `requireAdmin` directly.\n*/\nasync function withAdminBody(event, handler) {\n\tconst requestId = getRequestId(event);\n\tconst originError = checkOriginHeader(event.request, UI_PORT);\n\tif (originError) return originError;\n\tconst authError = requireAdmin(event, requestId);\n\tif (authError) return authError;\n\tconst result = await parseJsonBody(event.request);\n\tif (\"error\" in result) return jsonBodyError(result, requestId);\n\treturn handler({\n\t\trequestId,\n\t\tbody: result.data\n\t});\n}\n/**\n* Reject requests whose Host header does not match localhost or 127.0.0.1\n* on the configured admin port.\n*\n* @param request Incoming Request (or SvelteKit RequestEvent.request)\n* @param port The port this server is bound to (e.g. 3880 or 8100)\n* @returns A 400 Response if the host is rejected; null if allowed\n*/\n/**\n* True for loopback hostnames on ANY port. DNS-rebinding protection only cares\n* that the hostname is loopback — the port is whatever the client used, which\n* differs from the server's port when reached through an SSH tunnel\n* (`ssh -L 5880:localhost:3880` → Host: localhost:5880).\n*/\nfunction isLoopbackHost(hostHeader) {\n\tconst normalized = hostHeader.trim().replace(/\\.$/, \"\");\n\tlet hostname;\n\ttry {\n\t\thostname = new URL(`http://${normalized}`).hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n\t} catch {\n\t\treturn false;\n\t}\n\treturn hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname === \"::1\";\n}\nfunction checkHostHeader(request, _port) {\n\tconst host = request.headers.get(\"host\") ?? \"\";\n\tif (isLoopbackHost(host) || isRemoteSetupAllowed()) return null;\n\treturn new Response(JSON.stringify({\n\t\terror: \"invalid_host\",\n\t\thost: host.trim().replace(/\\.$/, \"\"),\n\t\tmessage: \"Request rejected: Host header does not match allowed hosts. The UI binds to loopback (127.0.0.1) only; reach it via localhost or an SSH tunnel/reverse proxy, or set OP_ALLOW_REMOTE_SETUP=1 to allow remote access.\"\n\t}), {\n\t\tstatus: 400,\n\t\theaders: { \"content-type\": \"application/json\" }\n\t});\n}\n/**\n* Reject POST/PUT/DELETE requests whose Origin header does not match\n* localhost or 127.0.0.1. Requests with no Origin (non-browser clients)\n* are always allowed.\n*\n* @param request Incoming Request\n* @param port The port this server is bound to\n* @returns A 403 Response if the origin is rejected; null if allowed\n*/\nfunction checkOriginHeader(request, _port) {\n\tconst method = request.method.toUpperCase();\n\tif (method === \"GET\" || method === \"HEAD\" || method === \"OPTIONS\") return null;\n\tconst origin = request.headers.get(\"origin\");\n\tif (!origin) return null;\n\ttry {\n\t\tconst u = new URL(origin);\n\t\tif (isLoopbackHost(u.host)) return null;\n\t\tif (isRemoteSetupAllowed() && u.host === (request.headers.get(\"host\") ?? \"\").trim()) return null;\n\t} catch {}\n\treturn new Response(JSON.stringify({\n\t\terror: \"forbidden_origin\",\n\t\torigin\n\t}), {\n\t\tstatus: 403,\n\t\theaders: { \"content-type\": \"application/json\" }\n\t});\n}\nvar UI_PORT = Number(process.env.PORT ?? 3880);\n//#endregion\nexport { invalidateSession as _, getOpenCodeClient as a, jsonBodyError as c, requireAdmin as d, safeTokenCompare as f, getUiLoginPassword as g, createSession as h, errorResponse as i, jsonResponse as l, SESSION_TTL_SECONDS as m, checkHostHeader as n, getRequestId as o, withAdminBody as p, checkOriginHeader as r, identifyCallerByToken as s, UI_PORT as t, parseJsonBody as u, touchSession as v };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.server-CP637JxQ.js","sources":["../../../.svelte-kit/adapter-node/entries/hooks.server.js"],"sourcesContent":["import { i as redirect } from \"../chunks/exports.js\";\nimport { G as deriveLaunchStatus, K as deriveLocalStackState, P as buildComposeOptions, W as classifyLocalInstall, Wt as readStackRuntimeEnv, Yt as readSecret, cn as resolveOpenPalmHome, et as composePs, ft as isSetupComplete, n as isRemoteSetupAllowed, pn as createLogger, q as detectRuntime, t as collectBindAddressWarnings } from \"../chunks/src.js\";\nimport { t as getState } from \"../chunks/state.js\";\nimport { a as listRemoteStatuses } from \"../chunks/endpoints.js\";\nimport { n as checkHostHeader, r as checkOriginHeader, s as identifyCallerByToken, t as UI_PORT, v as touchSession } from \"../chunks/helpers.js\";\nimport { r as sessionCookieHeader, t as SESSION_COOKIE_NAME } from \"../chunks/session-cookie.js\";\nimport { t as computeFeatureFlags } from \"../chunks/features.js\";\n//#region src/hooks.server.ts\nvar logger = createLogger(\"admin\");\nvar startupApplyDone = false;\nvar setupCompleteMemo = false;\nvar localStatusCache = null;\n/** Test-only: clear the 5s launch-routing cache so each test resolves fresh. */\nfunction _resetLaunchCache() {\n\tlocalStatusCache = null;\n}\nfunction loadProcessEnv() {\n\tif (startupApplyDone) return;\n\tstartupApplyDone = true;\n\tfor (const line of collectBindAddressWarnings(process.env)) logger.warn(line);\n\ttry {\n\t\tconst state = getState();\n\t\tif (!process.env.OP_UI_LOGIN_PASSWORD) {\n\t\t\tconst pw = readSecret(state.homeDir, \"op_ui_login_password\");\n\t\t\tif (pw) process.env.OP_UI_LOGIN_PASSWORD = pw.trimEnd();\n\t\t}\n\t\tconst stackVars = readStackRuntimeEnv(state.homeDir);\n\t\tfor (const [k, v] of Object.entries(stackVars)) if (v && !process.env[k]) process.env[k] = v;\n\t} catch (err) {\n\t\tlogger.error(\"process env load failed\", { error: String(err) });\n\t}\n}\nloadProcessEnv();\nvar SETUP_PATHS = [\n\t\"/setup\",\n\t\"/api/setup\",\n\t\"/health\",\n\t\"/guardian/health\"\n];\nfunction isLocalhostAddress(ip) {\n\treturn ip === \"127.0.0.1\" || ip === \"::1\" || ip === \"::ffff:127.0.0.1\";\n}\nfunction parseComposePsServices(stdout) {\n\tconst services = [];\n\tfor (const line of stdout.split(\"\\n\")) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(trimmed);\n\t\t\tservices.push({\n\t\t\t\tservice: String(parsed.Service ?? parsed.Name ?? \"\"),\n\t\t\t\tstate: String(parsed.State ?? \"\"),\n\t\t\t\thealth: String(parsed.Health ?? \"\")\n\t\t\t});\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t}\n\treturn services;\n}\nasync function resolveLaunchRouting() {\n\tif (localStatusCache && localStatusCache.expiresAt > Date.now()) return localStatusCache.value;\n\tconst state = getState();\n\tconst installState = classifyLocalInstall(state.stackDir, state.homeDir);\n\tconst composeResult = await composePs(buildComposeOptions(state));\n\tconst value = {\n\t\tinstallState,\n\t\tlaunch: deriveLaunchStatus({\n\t\t\tlocal: {\n\t\t\t\tstate: deriveLocalStackState(installState, composeResult.ok ? parseComposePsServices(composeResult.stdout) : []),\n\t\t\t\truntime: installState === \"not_installed\" ? await detectRuntime() : void 0,\n\t\t\t\tdetail: { installState }\n\t\t\t},\n\t\t\tremotes: await listRemoteStatuses()\n\t\t})\n\t};\n\tlocalStatusCache = {\n\t\tvalue,\n\t\texpiresAt: Date.now() + 5e3\n\t};\n\treturn value;\n}\nvar handle = async ({ event, resolve }) => {\n\tconst hostError = checkHostHeader(event.request, UI_PORT);\n\tif (hostError) return hostError;\n\tconst originError = checkOriginHeader(event.request, UI_PORT);\n\tif (originError) return originError;\n\tconst path = event.url.pathname;\n\tif (path.startsWith(\"/admin\") && !computeFeatureFlags().admin) redirect(302, \"/chat\");\n\tconst isSetupPath = SETUP_PATHS.some((p) => path === p || path.startsWith(p + \"/\"));\n\tconst setupComplete = setupCompleteMemo || isSetupComplete(resolveOpenPalmHome());\n\tif (setupComplete) setupCompleteMemo = true;\n\tif (isSetupPath && !setupComplete && !isRemoteSetupAllowed()) {\n\t\tif (!isLocalhostAddress(event.getClientAddress())) return new Response(JSON.stringify({\n\t\t\terror: \"setup_localhost_only\",\n\t\t\tmessage: \"Setup is only accessible from the host machine until installation is complete.\"\n\t\t}), {\n\t\t\tstatus: 403,\n\t\t\theaders: { \"content-type\": \"application/json\" }\n\t\t});\n\t}\n\tif (!isSetupPath) {\n\t\tconst { installState, launch } = await resolveLaunchRouting();\n\t\tconst desiredPath = installState === \"setup_incomplete\" && launch.local.state === \"running\" ? \"/splash\" : launch.recommendedRoute === \"chat\" ? \"/chat\" : \"/splash\";\n\t\tconst usageRoute = path.startsWith(\"/chat\") || path.startsWith(\"/advanced\");\n\t\tconst exempt = path.startsWith(\"/api/\") || path.startsWith(\"/proxy/\") || path.startsWith(\"/login\") || path.startsWith(\"/health\") || path.startsWith(\"/guardian/health\") || path.startsWith(\"/admin\") || path.startsWith(\"/splash\") || usageRoute;\n\t\tif (path === \"/\" || path !== desiredPath && !exempt) redirect(302, desiredPath);\n\t}\n\tevent.locals.role = identifyCallerByToken(event);\n\tlet renewedCookie = null;\n\tif (event.locals.role === \"admin\") {\n\t\tconst match = (event.request.headers.get(\"cookie\") ?? \"\").match(new RegExp(`(?:^|;\\\\s*)${SESSION_COOKIE_NAME}=([^;]+)`));\n\t\tconst renewed = match ? touchSession(match[1]) : false;\n\t\tif (renewed) renewedCookie = sessionCookieHeader(renewed, event.request);\n\t}\n\tconst isAuthPath = path === \"/login\" || path.startsWith(\"/login/\");\n\tif (event.request.method === \"GET\" && (event.request.headers.get(\"accept\") ?? \"\").includes(\"text/html\") && !event.locals.role && !isSetupPath && !isAuthPath) {\n\t\tconst redirectTo = path + event.url.search;\n\t\tredirect(302, `/login?redirectTo=${encodeURIComponent(redirectTo)}`);\n\t}\n\tconst response = await resolve(event);\n\tif (renewedCookie) {\n\t\tif (!(response.headers.get(\"set-cookie\") ?? \"\").includes(`op_session=`)) response.headers.append(\"set-cookie\", renewedCookie);\n\t}\n\tresponse.headers.set(\"X-Frame-Options\", path === \"/admin/akm/health-report\" ? \"SAMEORIGIN\" : \"DENY\");\n\tresponse.headers.set(\"X-Content-Type-Options\", \"nosniff\");\n\tresponse.headers.set(\"Referrer-Policy\", \"no-referrer\");\n\treturn response;\n};\n//#endregion\nexport { _resetLaunchCache, handle };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-state.svelte-DshW_ZYI.js","sources":["../../../.svelte-kit/adapter-node/chunks/theme-state.svelte.js"],"sourcesContent":["import \"./dev.js\";\n//#region src/lib/voice/media-recorder.ts\nvar PREFERRED_MIME_TYPES = [\"audio/webm;codecs=opus\", \"audio/webm\"];\nfunction pickMimeType() {\n\tconst MR = globalThis.MediaRecorder;\n\tif (!MR || typeof MR.isTypeSupported !== \"function\") return void 0;\n\tfor (const t of PREFERRED_MIME_TYPES) if (MR.isTypeSupported(t)) return t;\n}\nasync function startRecording() {\n\tif (typeof window === \"undefined\") throw new Error(\"Recording is only available in the browser.\");\n\tif (typeof MediaRecorder === \"undefined\") throw new Error(\"Recording is not supported in this browser.\");\n\tif (!navigator?.mediaDevices?.getUserMedia) throw new Error(\"Recording is not supported in this browser.\");\n\tlet stream;\n\ttry {\n\t\tstream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\t} catch (err) {\n\t\tconst name = err?.name ?? \"\";\n\t\tif (name === \"NotAllowedError\" || name === \"SecurityError\") throw new Error(\"Microphone access denied. Open System Settings → Privacy & Security → Microphone and enable OpenPalm, then restart the app.\", { cause: err });\n\t\tif (name === \"NotFoundError\" || name === \"OverconstrainedError\") throw new Error(\"No microphone was found. Plug in a microphone and try again.\", { cause: err });\n\t\tthrow new Error(`Microphone error: ${err?.message ?? String(err)}`, { cause: err });\n\t}\n\tconst mimeType = pickMimeType();\n\tconst recorder = mimeType ? new MediaRecorder(stream, { mimeType }) : new MediaRecorder(stream);\n\tconst chunks = [];\n\trecorder.addEventListener(\"dataavailable\", (ev) => {\n\t\tconst data = ev.data;\n\t\tif (data && data.size > 0) chunks.push(data);\n\t});\n\tlet stopped = false;\n\tlet cancelled = false;\n\tlet stopResolve = null;\n\tlet stopReject = null;\n\tfunction releaseTracks() {\n\t\tfor (const track of stream.getTracks()) try {\n\t\t\ttrack.stop();\n\t\t} catch {}\n\t}\n\trecorder.addEventListener(\"stop\", () => {\n\t\treleaseTracks();\n\t\tif (cancelled) return;\n\t\tconst blob = new Blob(chunks, { type: recorder.mimeType || mimeType || \"audio/webm\" });\n\t\tstopResolve?.(blob);\n\t});\n\trecorder.addEventListener(\"error\", (ev) => {\n\t\treleaseTracks();\n\t\tconst err = ev?.error ?? /* @__PURE__ */ new Error(\"Recorder error\");\n\t\tstopReject?.(err);\n\t});\n\trecorder.start();\n\treturn {\n\t\tstop() {\n\t\t\tif (stopped) return Promise.reject(/* @__PURE__ */ new Error(\"Recorder already stopped\"));\n\t\t\tstopped = true;\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tstopResolve = resolve;\n\t\t\t\tstopReject = reject;\n\t\t\t\ttry {\n\t\t\t\t\tif (recorder.state !== \"inactive\") recorder.stop();\n\t\t\t\t} catch (err) {\n\t\t\t\t\treleaseTracks();\n\t\t\t\t\treject(err);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tcancel() {\n\t\t\tif (stopped) return;\n\t\t\tstopped = true;\n\t\t\tcancelled = true;\n\t\t\ttry {\n\t\t\t\tif (recorder.state !== \"inactive\") recorder.stop();\n\t\t\t} catch {}\n\t\t\treleaseTracks();\n\t\t}\n\t};\n}\n//#endregion\n//#region src/lib/chat/tool-strip.ts\nfunction valueToText(value) {\n\tif (typeof value === \"string\") return value;\n\tif (value == null) return \"\";\n\tif (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch {\n\t\treturn \"\";\n\t}\n}\nfunction firstText(...values) {\n\tfor (const value of values) {\n\t\tconst text = valueToText(value);\n\t\tif (text) return text;\n\t}\n\treturn \"\";\n}\nfunction toolStripEntryFromSessionPart(part, fallbackId) {\n\tif (part.type !== \"tool\" && !part.state) return null;\n\tconst status = part.state?.status ?? \"running\";\n\treturn {\n\t\tid: part.callID ?? part.id ?? fallbackId,\n\t\tkind: \"tool\",\n\t\ttool: part.tool ?? \"tool\",\n\t\tstatus,\n\t\ttitle: part.state?.title ?? part.tool ?? \"tool\",\n\t\tdetail: firstText(part.state?.input, part.state?.metadata, part.state?.progress, part.state?.output),\n\t\toutput: valueToText(part.state?.output),\n\t\terror: part.state?.error ?? \"\",\n\t\tupdatedAt: Date.now()\n\t};\n}\n//#endregion\n//#region src/lib/api.ts\nvar apiBase = \"\";\nfunction buildHeaders() {\n\treturn {\n\t\t\"x-request-id\": crypto.randomUUID(),\n\t\t\"x-requested-by\": \"ui\"\n\t};\n}\nasync function request(method, path, body) {\n\tconst headers = {\n\t\t...body !== void 0 ? { \"content-type\": \"application/json\" } : {},\n\t\t...buildHeaders()\n\t};\n\treturn fetch(`${apiBase}${path}`, {\n\t\tmethod,\n\t\theaders,\n\t\tcredentials: \"include\",\n\t\t...body !== void 0 ? { body: JSON.stringify(body) } : {}\n\t});\n}\nasync function readErrorMessage(res, fallback = `Request failed (HTTP ${res.status})`) {\n\tif ((res.headers.get(\"content-type\") ?? \"\").includes(\"application/json\")) {\n\t\tconst data = await res.clone().json().catch((e) => {\n\t\t\tconsole.warn(\"[api] Failed to parse JSON error response:\", e);\n\t\t\treturn null;\n\t\t});\n\t\tif (data && typeof data.message === \"string\" && data.message.length > 0) return data.message;\n\t\tif (data && typeof data.error === \"string\" && data.error.length > 0) return data.error;\n\t}\n\treturn await res.text().catch((e) => {\n\t\tconsole.warn(\"[api] Failed to read error response text:\", e);\n\t\treturn \"\";\n\t}) || fallback;\n}\n/** Throw on 401; throw readErrorMessage on non-OK. Returns the response. */\nasync function requireOk(res, fallback) {\n\tif (res.status === 401) throw Object.assign(/* @__PURE__ */ new Error(\"Sign-in required.\"), { status: 401 });\n\tif (!res.ok) throw Object.assign(new Error(await readErrorMessage(res, fallback)), { status: res.status });\n\treturn res;\n}\nasync function fetchHealth() {\n\tconst [adminRes, guardianRes] = await Promise.all([request(\"GET\", \"/health\"), request(\"GET\", \"/guardian/health\").catch((e) => {\n\t\tconsole.warn(\"[api] Guardian health check failed:\", e);\n\t\treturn null;\n\t})]);\n\tconst admin = await adminRes.json();\n\tlet guardian = null;\n\tif (guardianRes) try {\n\t\tguardian = await guardianRes.json();\n\t} catch (e) {\n\t\tconsole.warn(\"[api] Failed to parse guardian health response:\", e);\n\t\tguardian = {\n\t\t\tstatus: \"unavailable\",\n\t\t\tservice: \"guardian\"\n\t\t};\n\t}\n\treturn {\n\t\tadmin,\n\t\tguardian\n\t};\n}\nasync function fetchContainers() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/containers/list\"))).json();\n}\nasync function containerAction(action, containerId) {\n\tawait requireOk(await request(\"POST\", {\n\t\tstart: \"/admin/containers/up\",\n\t\tstop: \"/admin/containers/down\",\n\t\trestart: \"/admin/containers/restart\"\n\t}[action], { service: containerId }));\n}\nasync function fetchVersions() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/versions\"))).json();\n}\nasync function fetchBackups() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/backups\"))).json();\n}\nasync function fetchSecretStripNotice() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/secret-notice\"))).json();\n}\nasync function fetchInstallLockStatus() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/unlock\"))).json();\n}\nasync function fetchAutomations() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/automations\"))).json();\n}\nasync function fetchServiceLogs(options) {\n\tconst params = new URLSearchParams();\n\tif (options?.service) params.set(\"service\", options.service);\n\tif (options?.tail) params.set(\"tail\", String(options.tail));\n\tif (options?.since) params.set(\"since\", options.since);\n\tconst qs = params.toString();\n\treturn await (await requireOk(await request(\"GET\", `/admin/logs${qs ? `?${qs}` : \"\"}`))).json();\n}\nasync function fetchAddons() {\n\treturn (await (await requireOk(await request(\"GET\", \"/admin/addons\"))).json()).addons;\n}\nasync function fetchSecretFiles() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/secrets\"))).json();\n}\nasync function fetchSecretFile(name) {\n\treturn await (await requireOk(await request(\"GET\", `/admin/secrets/${encodeURIComponent(name)}`))).json();\n}\nasync function saveTaskFile(name, content) {\n\treturn await (await requireOk(await request(\"PUT\", `/admin/automations/${encodeURIComponent(name)}/file`, { content }))).json();\n}\nasync function fetchVoiceConfig() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/voice\"))).json();\n}\n/**\n* POST a recorded audio Blob to /api/transcribe.\n*\n* Goes through the SvelteKit server-side proxy (cookie-auth) which\n* forwards to the configured STT_BASE_URL. Returns the transcript text.\n*/\nasync function transcribeAudio(blob, opts) {\n\tconst form = new FormData();\n\tform.append(\"audio\", blob, \"recording.webm\");\n\tif (opts?.language) form.append(\"language\", opts.language);\n\tif (opts?.prompt) form.append(\"prompt\", opts.prompt);\n\tconst data = await (await requireOk(await fetch(\"/api/transcribe\", {\n\t\tmethod: \"POST\",\n\t\theaders: buildHeaders(),\n\t\tcredentials: \"include\",\n\t\tbody: form\n\t}))).json();\n\treturn typeof data.text === \"string\" ? data.text : \"\";\n}\nasync function fetchAkmConfig() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/akm\"))).json();\n}\nasync function detectAkmEmbedding() {\n\treturn await (await requireOk(await request(\"POST\", \"/admin/akm/embedding/detect\", {}))).json();\n}\nasync function testAkmEmbedding(settings) {\n\treturn await (await requireOk(await request(\"POST\", \"/admin/akm/embedding/test\", settings))).json();\n}\nasync function fetchAssistantSettings() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/assistant\"))).json();\n}\nasync function fetchAkmHealth() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/akm/health\"))).json();\n}\nasync function fetchAkmKnowledgeStats() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/akm/stats\"))).json();\n}\nasync function fetchHostAkmSharing() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/akm/host-sharing\"))).json();\n}\nasync function pullImages() {\n\tawait requireOk(await request(\"POST\", \"/admin/containers/pull\", {}));\n}\nasync function fetchEndpoints() {\n\treturn await (await requireOk(await request(\"GET\", \"/admin/endpoints\"))).json();\n}\nasync function setActiveEndpoint(id) {\n\treturn await (await requireOk(await request(\"POST\", \"/admin/endpoints/active\", { id }))).json();\n}\n/**\n* Create a new OpenCode session via the SvelteKit broker.\n*\n* Only `/proxy/assistant/*` is reachable from the browser. The active\n* OpenCode instance is selected server-side via the connection switcher.\n*/\nasync function createSession() {\n\treturn await (await requireOk(await request(\"POST\", `/proxy/assistant/session`, {}))).json();\n}\n/**\n* List sessions on the active OpenCode endpoint.\n*\n* OpenCode returns `Array<Session>` with no ordering guarantee; we sort\n* desc by `time.updated` here so consumers can rely on it. See\n* docs/technical/multi-endpoint-session-ux.md §2.\n*/\nasync function listSessions() {\n\tconst summaries = (await (await requireOk(await request(\"GET\", \"/proxy/assistant/session\"))).json()).map((s) => ({\n\t\tid: s.id,\n\t\ttitle: s.title ?? \"\",\n\t\tcreatedAt: s.time?.created ?? 0,\n\t\tupdatedAt: s.time?.updated ?? s.time?.created ?? 0\n\t}));\n\tsummaries.sort((a, b) => b.updatedAt - a.updatedAt);\n\treturn summaries;\n}\n/**\n* Fetch the messages for a session and map them to UI `ChatEntry`s.\n*\n* Tool parts are grouped into the assistant turn that follows them (attached\n* as `toolStates` on the `ChatMessage`). If tool parts appear with no\n* following assistant text in the same OpenCode message they are emitted as a\n* single `ChatToolGroup` entry — never as N separate entries.\n*\n* Skips non-text, non-tool parts (files, reasoning, etc.). Empty-text\n* messages with no tool activity are dropped.\n*/\nasync function getSessionMessages(sessionId) {\n\tconst rows = await (await requireOk(await request(\"GET\", `/proxy/assistant/session/${encodeURIComponent(sessionId)}/message`))).json();\n\tconst messages = [];\n\tfor (const row of rows) {\n\t\tconst timestamp = row.info.time?.created ?? Date.now();\n\t\tlet textBuffer = \"\";\n\t\tlet textIndex = 0;\n\t\tconst pendingToolStates = [];\n\t\tconst flushText = () => {\n\t\t\tconst text = textBuffer.trim();\n\t\t\ttextBuffer = \"\";\n\t\t\tif (!text && pendingToolStates.length === 0) return;\n\t\t\tif (text) {\n\t\t\t\tconst entry = {\n\t\t\t\t\tid: textIndex === 0 ? row.info.id : `${row.info.id}:text:${textIndex}`,\n\t\t\t\t\trole: row.info.role,\n\t\t\t\t\ttext,\n\t\t\t\t\ttimestamp\n\t\t\t\t};\n\t\t\t\tif (pendingToolStates.length > 0) {\n\t\t\t\t\tentry.toolStates = [...pendingToolStates];\n\t\t\t\t\tpendingToolStates.length = 0;\n\t\t\t\t}\n\t\t\t\tmessages.push(entry);\n\t\t\t\ttextIndex += 1;\n\t\t\t} else if (pendingToolStates.length > 0) {\n\t\t\t\tconst group = {\n\t\t\t\t\tid: `${row.info.id}:tools:${textIndex}`,\n\t\t\t\t\ttype: \"tool-group\",\n\t\t\t\t\ttoolStates: [...pendingToolStates],\n\t\t\t\t\ttimestamp\n\t\t\t\t};\n\t\t\t\tpendingToolStates.length = 0;\n\t\t\t\tmessages.push(group);\n\t\t\t\ttextIndex += 1;\n\t\t\t}\n\t\t};\n\t\trow.parts.forEach((part, index) => {\n\t\t\tif (part.type === \"text\" && part.text) {\n\t\t\t\ttextBuffer += part.text;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (part.type === \"tool\" || part.state) {\n\t\t\t\tconst toolState = toolStripEntryFromSessionPart(part, `${row.info.id}:${index}`);\n\t\t\t\tif (!toolState) return;\n\t\t\t\tpendingToolStates.push(toolState);\n\t\t\t}\n\t\t});\n\t\tflushText();\n\t}\n\treturn messages;\n}\n/**\n* Send a message to an existing OpenCode session via the SvelteKit broker.\n* Uses direct fetch with a 150s AbortSignal timeout — OpenCode responses\n* can take 30–120s.\n*/\nasync function sendChatMessage(sessionId, text) {\n\tconst res = await fetch(`/proxy/assistant/session/${encodeURIComponent(sessionId)}/message`, {\n\t\tmethod: \"POST\",\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...buildHeaders()\n\t\t},\n\t\tcredentials: \"include\",\n\t\tbody: JSON.stringify({ parts: [{\n\t\t\ttype: \"text\",\n\t\t\ttext\n\t\t}] }),\n\t\tsignal: AbortSignal.timeout(15e4)\n\t});\n\tif (res.status === 401) throw Object.assign(/* @__PURE__ */ new Error(\"Sign-in required.\"), { status: 401 });\n\tif (!res.ok) {\n\t\tconst msg = await readErrorMessage(res);\n\t\tthrow Object.assign(new Error(msg), { status: res.status });\n\t}\n\treturn await res.json();\n}\nasync function startChatMessageTurn(sessionId, text) {\n\tconst res = await fetch(`/proxy/assistant/session/${encodeURIComponent(sessionId)}/message`, {\n\t\tmethod: \"POST\",\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...buildHeaders()\n\t\t},\n\t\tcredentials: \"include\",\n\t\tbody: JSON.stringify({ parts: [{\n\t\t\ttype: \"text\",\n\t\t\ttext\n\t\t}] }),\n\t\tsignal: AbortSignal.timeout(15e4)\n\t});\n\tif (res.status === 401) throw Object.assign(/* @__PURE__ */ new Error(\"Sign-in required.\"), { status: 401 });\n\tif (!res.ok) {\n\t\tconst msg = await readErrorMessage(res);\n\t\tthrow Object.assign(new Error(msg), { status: res.status });\n\t}\n}\nasync function replyChatPermission(requestId, reply) {\n\tawait (await requireOk(await request(\"POST\", `/proxy/assistant/permission/${encodeURIComponent(requestId)}/reply`, { reply }))).text().catch(() => \"\");\n}\nasync function replyChatQuestion(requestId, answers) {\n\tawait (await requireOk(await request(\"POST\", `/proxy/assistant/question/${encodeURIComponent(requestId)}/reply`, { answers }))).text().catch(() => \"\");\n}\nasync function rejectChatQuestion(requestId) {\n\tawait (await requireOk(await request(\"POST\", `/proxy/assistant/question/${encodeURIComponent(requestId)}/reject`, {}))).text().catch(() => \"\");\n}\n/**\n* Probe whether the assistant broker is reachable.\n* Returns true if the probe succeeds within 3s.\n*/\nasync function probeChatBackend() {\n\ttry {\n\t\treturn (await fetch(`/proxy/assistant/provider`, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildHeaders(),\n\t\t\tcredentials: \"include\",\n\t\t\tsignal: AbortSignal.timeout(3e3)\n\t\t})).ok;\n\t} catch {\n\t\treturn false;\n\t}\n}\n//#endregion\n//#region src/lib/notifications.svelte.ts\nvar DEFAULT_TIMEOUTS = {\n\tinfo: 4e3,\n\tsuccess: 5e3,\n\terror: 8e3\n};\nvar Notifications = class {\n\ttoasts = [];\n\ttimers = /* @__PURE__ */ new Map();\n\tpush(kind, message, opts = {}) {\n\t\tconst id = opts.replaceId ?? (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto ? crypto.randomUUID() : `t-${Date.now()}-${Math.random().toString(36).slice(2)}`);\n\t\tconst ttlMs = opts.sticky ? null : opts.ttlMs ?? DEFAULT_TIMEOUTS[kind];\n\t\tconst toast = {\n\t\t\tid,\n\t\t\tkind,\n\t\t\tmessage,\n\t\t\tttlMs\n\t\t};\n\t\tconst existingTimer = this.timers.get(id);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t\tthis.timers.delete(id);\n\t\t}\n\t\tconst existingIdx = this.toasts.findIndex((t) => t.id === id);\n\t\tif (existingIdx >= 0) {\n\t\t\tconst next = [...this.toasts];\n\t\t\tnext[existingIdx] = toast;\n\t\t\tthis.toasts = next;\n\t\t} else this.toasts = [...this.toasts, toast];\n\t\tif (ttlMs !== null) {\n\t\t\tconst timer = setTimeout(() => this.dismiss(id), ttlMs);\n\t\t\tthis.timers.set(id, timer);\n\t\t}\n\t\treturn id;\n\t}\n\tdismiss(id) {\n\t\tconst timer = this.timers.get(id);\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\tthis.timers.delete(id);\n\t\t}\n\t\tthis.toasts = this.toasts.filter((t) => t.id !== id);\n\t}\n\tclear() {\n\t\tfor (const timer of this.timers.values()) clearTimeout(timer);\n\t\tthis.timers.clear();\n\t\tthis.toasts = [];\n\t}\n};\nvar notifications = new Notifications();\n//#endregion\n//#region src/lib/voice/voice-state.svelte.ts\nvar MAX_RECORDING_MS = 6e4;\nvar VoiceState = class {\n\tstatus = \"idle\";\n\t/** True when the configured STT engine is actually usable from this browser. */\n\tsttSupported = false;\n\tttsSupported = false;\n\terrorMessage = \"\";\n\t/** Partial transcript text while browser STT is mid-utterance. Cleared on stop/error. */\n\tinterimTranscript = \"\";\n\t/** Active engine resolved from /admin/voice. */\n\tsttEngine = \"disabled\";\n\tttsEngine = \"disabled\";\n\t/** Optional language hint (forwarded to /api/transcribe). */\n\tsttLanguage = \"\";\n\t/** Global toggle: when true, assistant chat replies are spoken automatically. */\n\tttsAutoEnabled = false;\n\t/**\n\t* True when an audio.play() was rejected by the browser's autoplay\n\t* policy and we have a pending utterance waiting for a user gesture.\n\t* The chat UI renders a small \"click to resume\" banner; clicking it\n\t* calls resumeAutoplay() to actually play.\n\t*/\n\tautoplayBlocked = false;\n\t/**\n\t* Set when the configured STT engine is technically present in the\n\t* window but known to fail at runtime on this UA (e.g. iOS Safari\n\t* exposes SpeechRecognition but `start()` immediately errors with\n\t* `service-not-allowed`). The Voice settings tab uses this to hide or\n\t* disable the Browser STT card with the reason as a tooltip.\n\t*/\n\tbrowserSttUnsupportedReason = \"\";\n};\nvar voiceState = new VoiceState();\nvar TTS_AUTO_STORAGE_KEY = \"openpalm.tts.auto\";\nvar activeRecording = null;\nvar activeRecognition = null;\nvar recordingTimeout = null;\nvar activeOnResult = null;\n/** Resolve the SpeechRecognition constructor (Chrome prefixes it). */\nfunction getSpeechRecognitionCtor() {\n\tif (typeof window === \"undefined\") return void 0;\n\treturn window.SpeechRecognition ?? window.webkitSpeechRecognition ?? void 0;\n}\n/**\n* iOS Safari (and all WebKit-based browsers on iOS — Chrome/Edge/Firefox\n* on iOS are required by Apple to use WebKit) exposes SpeechRecognition\n* but `start()` immediately fires `error: service-not-allowed`. Detect\n* the UA up front so the picker can hide the Browser STT card rather\n* than let the user click a mic that silently does nothing.\n*\n* `MSStream` excludes old IE on Windows Phone, which used to spoof iPad\n* in the UA; harmless on modern browsers (always undefined).\n*/\nfunction isIosSafari() {\n\tif (typeof navigator === \"undefined\") return false;\n\tconst ua = navigator.userAgent ?? \"\";\n\tconst isIos = /iPad|iPhone|iPod/.test(ua);\n\tconst msStream = window.MSStream;\n\treturn isIos && !msStream;\n}\nfunction isMediaRecorderSupported() {\n\tif (typeof window === \"undefined\") return false;\n\tif (typeof MediaRecorder === \"undefined\") return false;\n\tif (!navigator?.mediaDevices?.getUserMedia) return false;\n\treturn true;\n}\nfunction resolveEngineSupport(engine) {\n\tswitch (engine) {\n\t\tcase \"browser\":\n\t\t\tif (voiceState.browserSttUnsupportedReason) return false;\n\t\t\treturn Boolean(getSpeechRecognitionCtor());\n\t\tcase \"remote\":\n\t\tcase \"openpalm-voice\": return isMediaRecorderSupported();\n\t\tdefault: return false;\n\t}\n}\nfunction normalizeEngine(raw) {\n\tif (raw === \"browser\" || raw === \"browser-stt\") return \"browser\";\n\tif (raw === \"openpalm-voice\") return \"openpalm-voice\";\n\tif (raw && !raw.startsWith(\"skip-\")) return \"remote\";\n\treturn \"disabled\";\n}\n/**\n* Probe browser capabilities and resolve which STT engine is active.\n* Must be called from onMount or $effect (client-side only).\n*/\nasync function initVoice() {\n\tconst browserTts = typeof window !== \"undefined\" && \"speechSynthesis\" in window;\n\tif (typeof window !== \"undefined\") try {\n\t\tvoiceState.ttsAutoEnabled = window.localStorage.getItem(TTS_AUTO_STORAGE_KEY) === \"1\";\n\t} catch {}\n\ttry {\n\t\tconst cfg = await fetchVoiceConfig();\n\t\tconst stt = cfg.stt ?? {};\n\t\tconst tts = cfg.tts ?? {};\n\t\tconst rawSttEngine = typeof stt.engine === \"string\" ? stt.engine : \"\";\n\t\tconst rawTtsEngine = typeof tts.engine === \"string\" ? tts.engine : \"\";\n\t\tvoiceState.sttLanguage = typeof stt.language === \"string\" ? stt.language : \"\";\n\t\tvoiceState.sttEngine = normalizeEngine(rawSttEngine);\n\t\tvoiceState.ttsEngine = normalizeEngine(rawTtsEngine);\n\t} catch {\n\t\tvoiceState.sttEngine = \"disabled\";\n\t\tvoiceState.ttsEngine = \"disabled\";\n\t}\n\tvoiceState.ttsSupported = voiceState.ttsEngine === \"openpalm-voice\" || voiceState.ttsEngine === \"remote\" || voiceState.ttsEngine === \"browser\" && browserTts;\n\tif (isIosSafari() && getSpeechRecognitionCtor()) {\n\t\tvoiceState.browserSttUnsupportedReason = \"iOS Safari does not support Web Speech recognition\";\n\t\tif (voiceState.sttEngine === \"browser\") voiceState.sttEngine = \"disabled\";\n\t} else voiceState.browserSttUnsupportedReason = \"\";\n\tif (voiceState.sttEngine === \"disabled\" && getSpeechRecognitionCtor() && !voiceState.browserSttUnsupportedReason) voiceState.sttEngine = \"browser\";\n\tif (voiceState.ttsEngine === \"disabled\" && browserTts) {\n\t\tvoiceState.ttsEngine = \"browser\";\n\t\tvoiceState.ttsSupported = true;\n\t}\n\tvoiceState.sttSupported = resolveEngineSupport(voiceState.sttEngine);\n}\n/**\n* Begin speech recognition. Transcript is delivered to `onResult`.\n* Calling while already listening is a no-op.\n*/\nfunction startListening(onResult) {\n\tif (voiceState.status === \"recording\" || voiceState.status === \"transcribing\") return;\n\tif (!voiceState.sttSupported || voiceState.sttEngine === \"disabled\") {\n\t\tvoiceState.errorMessage = \"Speech recognition is not available.\";\n\t\treturn;\n\t}\n\tvoiceState.errorMessage = \"\";\n\tactiveOnResult = onResult;\n\tif (voiceState.sttEngine === \"browser\") {\n\t\tstartBrowserRecognition(onResult);\n\t\treturn;\n\t}\n\tstartRemoteRecording();\n}\nfunction startBrowserRecognition(onResult) {\n\tconst SR = getSpeechRecognitionCtor();\n\tif (!SR) {\n\t\tvoiceState.errorMessage = \"Speech recognition is not supported in this browser.\";\n\t\treturn;\n\t}\n\tconst instance = new SR();\n\tactiveRecognition = instance;\n\tinstance.lang = voiceState.sttLanguage || navigator?.language || \"en-US\";\n\tinstance.interimResults = true;\n\tinstance.maxAlternatives = 1;\n\tinstance.continuous = false;\n\tlet finalAccumulated = \"\";\n\tinstance.onresult = (event) => {\n\t\tlet interim = \"\";\n\t\tfor (let i = event.resultIndex; i < event.results.length; i++) {\n\t\t\tconst result = event.results[i];\n\t\t\tif (result.isFinal) finalAccumulated += result[0]?.transcript ?? \"\";\n\t\t\telse interim += result[0]?.transcript ?? \"\";\n\t\t}\n\t\tvoiceState.interimTranscript = finalAccumulated + interim;\n\t};\n\tinstance.onerror = (event) => {\n\t\tif (activeRecognition !== instance) return;\n\t\tconst error = event.error ?? \"\";\n\t\tif (error === \"no-speech\" || error === \"aborted\") {} else if (error === \"not-allowed\") voiceState.errorMessage = \"Microphone access denied.\";\n\t\telse voiceState.errorMessage = `Speech error: ${error}`;\n\t\tvoiceState.interimTranscript = \"\";\n\t\tvoiceState.status = \"idle\";\n\t\tactiveRecognition = null;\n\t\tactiveOnResult = null;\n\t};\n\tinstance.onend = () => {\n\t\tif (activeRecognition !== instance) return;\n\t\tif (finalAccumulated.trim() && onResult) onResult(finalAccumulated.trim());\n\t\tvoiceState.interimTranscript = \"\";\n\t\tvoiceState.status = \"idle\";\n\t\tactiveRecognition = null;\n\t\tactiveOnResult = null;\n\t};\n\ttry {\n\t\tinstance.start();\n\t\tvoiceState.status = \"recording\";\n\t} catch {\n\t\tvoiceState.errorMessage = \"Failed to start speech recognition.\";\n\t\tvoiceState.status = \"idle\";\n\t\tactiveRecognition = null;\n\t\tactiveOnResult = null;\n\t}\n}\nasync function startRemoteRecording() {\n\tlet session;\n\ttry {\n\t\tsession = await startRecording();\n\t} catch (err) {\n\t\tvoiceState.errorMessage = err instanceof Error ? err.message : \"Failed to start recording.\";\n\t\tvoiceState.status = \"idle\";\n\t\tactiveOnResult = null;\n\t\treturn;\n\t}\n\tactiveRecording = session;\n\tvoiceState.status = \"recording\";\n\trecordingTimeout = setTimeout(() => {\n\t\tfinalizeRecording();\n\t}, MAX_RECORDING_MS);\n}\nasync function finalizeRecording() {\n\tconst session = activeRecording;\n\tconst onResult = activeOnResult;\n\tif (!session) return;\n\tactiveRecording = null;\n\tactiveOnResult = null;\n\tif (recordingTimeout) {\n\t\tclearTimeout(recordingTimeout);\n\t\trecordingTimeout = null;\n\t}\n\tvoiceState.status = \"transcribing\";\n\tlet blob;\n\ttry {\n\t\tblob = await session.stop();\n\t} catch (err) {\n\t\tvoiceState.errorMessage = err instanceof Error ? err.message : \"Recording failed.\";\n\t\tvoiceState.status = \"idle\";\n\t\treturn;\n\t}\n\tif (blob.size === 0) {\n\t\tvoiceState.status = \"idle\";\n\t\treturn;\n\t}\n\ttry {\n\t\tconst trimmed = (await transcribeAudio(blob, { language: voiceState.sttLanguage || void 0 })).trim();\n\t\tif (trimmed && onResult) onResult(trimmed);\n\t} catch (err) {\n\t\tvoiceState.errorMessage = err instanceof Error ? err.message : \"Transcription failed.\";\n\t} finally {\n\t\tvoiceState.status = \"idle\";\n\t}\n}\n/** Stop the active recording session (whichever engine). */\nfunction stopListening() {\n\tif (activeRecognition) {\n\t\ttry {\n\t\t\tactiveRecognition.stop();\n\t\t} catch {}\n\t\treturn;\n\t}\n\tif (activeRecording) finalizeRecording();\n}\nvar activeAudio = null;\nvar activeAudioUrl = null;\nvar SPEAK_QUEUE_MAX = 3;\nvar speakQueue = [];\nvar overflowNoticed = false;\nvar pendingAutoplayAudio = null;\nvar pendingAutoplayUrl = null;\nfunction teardownActiveAudio() {\n\tif (activeAudio) {\n\t\tactiveAudio.onerror = null;\n\t\tactiveAudio.onended = null;\n\t\ttry {\n\t\t\tactiveAudio.pause();\n\t\t} catch {}\n\t\tactiveAudio.src = \"\";\n\t\tactiveAudio = null;\n\t}\n\tif (activeAudioUrl) {\n\t\tURL.revokeObjectURL(activeAudioUrl);\n\t\tactiveAudioUrl = null;\n\t}\n}\nfunction teardownPendingAutoplay() {\n\tif (pendingAutoplayAudio) {\n\t\tpendingAutoplayAudio.onerror = null;\n\t\tpendingAutoplayAudio.onended = null;\n\t\ttry {\n\t\t\tpendingAutoplayAudio.pause();\n\t\t} catch {}\n\t\tpendingAutoplayAudio.src = \"\";\n\t\tpendingAutoplayAudio = null;\n\t}\n\tif (pendingAutoplayUrl) {\n\t\tURL.revokeObjectURL(pendingAutoplayUrl);\n\t\tpendingAutoplayUrl = null;\n\t}\n\tvoiceState.autoplayBlocked = false;\n}\n/**\n* Read text aloud. Tries server-side TTS via /api/speak first (when the\n* configured engine is openpalm-voice or remote); falls back to browser\n* speech synthesis. Silent no-op if neither path is available.\n*\n* If a previous utterance is still playing, queues this one (FIFO, cap 3)\n* instead of cutting it off mid-sentence.\n*/\nasync function speakText(text, options) {\n\tif (typeof window === \"undefined\" || !text.trim()) return;\n\tif (voiceState.status === \"speaking\") {\n\t\tspeakQueue.push({\n\t\t\ttext,\n\t\t\toptions\n\t\t});\n\t\tlet dropped = 0;\n\t\twhile (speakQueue.length > SPEAK_QUEUE_MAX) {\n\t\t\tspeakQueue.shift();\n\t\t\tdropped += 1;\n\t\t}\n\t\tif (dropped > 0 && !overflowNoticed) {\n\t\t\toverflowNoticed = true;\n\t\t\tnotifications.push(\"info\", `Skipped ${dropped} spoken ${dropped === 1 ? \"reply\" : \"replies\"} — too much overlap. Lower the auto-speak chat rate.`);\n\t\t}\n\t\treturn;\n\t}\n\tawait playOne(text, options);\n}\n/** Internal: actually trigger the audio for one text chunk. */\nasync function playOne(text, options) {\n\tif (typeof window === \"undefined\" || !text.trim()) return;\n\tteardownPendingAutoplay();\n\tteardownActiveAudio();\n\tif (\"speechSynthesis\" in window) window.speechSynthesis.cancel();\n\tvoiceState.errorMessage = \"\";\n\tconst engine = voiceState.ttsEngine;\n\tconst useServer = engine === \"openpalm-voice\" || engine === \"remote\";\n\tif (useServer) {\n\t\tlet res;\n\t\ttry {\n\t\t\tres = await fetch(\"/api/speak\", {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\ttext,\n\t\t\t\t\t...options?.mode && options.mode !== \"plain\" ? { mode: options.mode } : {},\n\t\t\t\t\t...options?.userText ? { userText: options.userText } : {},\n\t\t\t\t\t...options?.assistantText ? { assistantText: options.assistantText } : {}\n\t\t\t\t})\n\t\t\t});\n\t\t} catch {}\n\t\tif (res && res.ok && res.headers.get(\"content-type\")?.startsWith(\"audio/\")) {\n\t\t\tconst blob = await res.blob();\n\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\tconst audio = new Audio(url);\n\t\t\tactiveAudio = audio;\n\t\t\tactiveAudioUrl = url;\n\t\t\taudio.onended = () => {\n\t\t\t\tvoiceState.status = \"idle\";\n\t\t\t\tteardownActiveAudio();\n\t\t\t\tconst next = speakQueue.shift();\n\t\t\t\tif (next) playOne(next.text, next.options);\n\t\t\t\telse overflowNoticed = false;\n\t\t\t};\n\t\t\taudio.onerror = () => {\n\t\t\t\tvoiceState.status = \"idle\";\n\t\t\t\tvoiceState.errorMessage = \"Audio playback failed.\";\n\t\t\t\tteardownActiveAudio();\n\t\t\t\tconst next = speakQueue.shift();\n\t\t\t\tif (next) playOne(next.text, next.options);\n\t\t\t\telse overflowNoticed = false;\n\t\t\t};\n\t\t\tvoiceState.status = \"speaking\";\n\t\t\ttry {\n\t\t\t\tawait audio.play();\n\t\t\t} catch {\n\t\t\t\tvoiceState.status = \"idle\";\n\t\t\t\tpendingAutoplayAudio = audio;\n\t\t\t\tpendingAutoplayUrl = url;\n\t\t\t\tactiveAudio = null;\n\t\t\t\tactiveAudioUrl = null;\n\t\t\t\tvoiceState.autoplayBlocked = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (res && !res.ok) voiceState.errorMessage = await extractSpeakError(res);\n\t}\n\tif (!(\"speechSynthesis\" in window)) return;\n\tif (useServer) voiceState.errorMessage = \"\";\n\tconst utterance = new SpeechSynthesisUtterance(text);\n\tutterance.onstart = () => {\n\t\tvoiceState.status = \"speaking\";\n\t};\n\tutterance.onend = () => {\n\t\tvoiceState.status = \"idle\";\n\t\tconst next = speakQueue.shift();\n\t\tif (next) playOne(next.text, next.options);\n\t\telse overflowNoticed = false;\n\t};\n\tutterance.onerror = () => {\n\t\tvoiceState.status = \"idle\";\n\t\tconst next = speakQueue.shift();\n\t\tif (next) playOne(next.text, next.options);\n\t\telse overflowNoticed = false;\n\t};\n\twindow.speechSynthesis.speak(utterance);\n}\n/**\n* Convert a non-OK /api/speak response into a human-readable string.\n* Recognises the two common shapes the route returns; falls back to a\n* generic message keyed off the HTTP status.\n*/\nasync function extractSpeakError(res) {\n\tlet code;\n\ttry {\n\t\tconst data = await res.clone().json();\n\t\tif (typeof data.error === \"string\") code = data.error;\n\t} catch {}\n\tif (code === \"tts_not_configured\") return \"TTS is not configured.\";\n\tif (code === \"upstream_error\" || res.status === 502 || res.status === 503) return \"Voice engine is warming up — try again in a moment.\";\n\treturn `TTS failed (HTTP ${res.status}).`;\n}\n/** Cancel speech synthesis. Drops the entire queue. */\nfunction stopSpeaking() {\n\tspeakQueue.length = 0;\n\toverflowNoticed = false;\n\tteardownPendingAutoplay();\n\tteardownActiveAudio();\n\tif (typeof window !== \"undefined\" && \"speechSynthesis\" in window) window.speechSynthesis.cancel();\n\tvoiceState.status = \"idle\";\n}\n/**\n* Tear down per-component voice resources on unmount. Only cancels\n* any in-flight recording / recognition.\n*\n* Deliberately does NOT cancel `speechSynthesis` — that queue is a\n* window-level singleton and the user's auto-TTS toggle is persistent,\n* so a page navigation must not interrupt the assistant mid-utterance.\n* Explicit user actions (logout, mic click, toggle off) call\n* `stopSpeaking` directly.\n*/\nfunction destroyVoice() {\n\tif (recordingTimeout) {\n\t\tclearTimeout(recordingTimeout);\n\t\trecordingTimeout = null;\n\t}\n\tif (activeRecording) {\n\t\ttry {\n\t\t\tactiveRecording.cancel();\n\t\t} catch {}\n\t\tactiveRecording = null;\n\t}\n\tif (activeRecognition) {\n\t\ttry {\n\t\t\tactiveRecognition.stop();\n\t\t} catch {}\n\t\tactiveRecognition = null;\n\t}\n\tactiveOnResult = null;\n\tvoiceState.interimTranscript = \"\";\n\tvoiceState.status = \"idle\";\n}\n//#endregion\n//#region src/lib/theme-state.svelte.ts\nvar THEME_STORAGE_KEY = \"openpalm.theme\";\nvar THEME_ATTR = \"data-theme\";\nvar DARK_THEME_COLOR = \"#161c22\";\nvar LIGHT_THEME_COLOR = \"#f9fafb\";\nfunction isThemePreference(value) {\n\treturn value === \"light\" || value === \"dark\" || value === \"system\";\n}\nvar ThemeService = class {\n\tpreference = \"system\";\n\tresolved = \"light\";\n\tinitialized = false;\n\t#mediaQuery = null;\n\t#mediaChangeHandler = () => {\n\t\tif (this.preference !== \"system\") return;\n\t\tthis.resolved = this.#resolvePreference(\"system\");\n\t\tthis.#applyResolvedTheme();\n\t};\n\tinit() {\n\t\tif (typeof window === \"undefined\" || this.initialized) return;\n\t\tthis.preference = this.#readStoredPreference();\n\t\tthis.resolved = this.#resolvePreference(this.preference);\n\t\tthis.#subscribeToSystemTheme();\n\t\tthis.#applyResolvedTheme();\n\t\tthis.initialized = true;\n\t}\n\tsetPreference(preference) {\n\t\tthis.preference = preference;\n\t\tthis.resolved = this.#resolvePreference(preference);\n\t\tthis.#writeStoredPreference(preference);\n\t\tthis.#applyResolvedTheme();\n\t}\n\ttoggle() {\n\t\tconst next = this.preference === \"system\" ? \"light\" : this.preference === \"light\" ? \"dark\" : \"system\";\n\t\tthis.setPreference(next);\n\t}\n\tdispose() {\n\t\tif (this.#mediaQuery) if (typeof this.#mediaQuery.removeEventListener === \"function\") this.#mediaQuery.removeEventListener(\"change\", this.#mediaChangeHandler);\n\t\telse this.#mediaQuery.removeListener(this.#mediaChangeHandler);\n\t\tthis.#mediaQuery = null;\n\t\tthis.initialized = false;\n\t}\n\t#readStoredPreference() {\n\t\tif (typeof window === \"undefined\") return \"system\";\n\t\ttry {\n\t\t\tconst stored = window.localStorage.getItem(THEME_STORAGE_KEY);\n\t\t\treturn isThemePreference(stored) ? stored : \"system\";\n\t\t} catch {\n\t\t\treturn \"system\";\n\t\t}\n\t}\n\t#writeStoredPreference(preference) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\twindow.localStorage.setItem(THEME_STORAGE_KEY, preference);\n\t\t} catch {}\n\t}\n\t#resolvePreference(preference) {\n\t\tif (preference === \"light\" || preference === \"dark\") return preference;\n\t\tif (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return \"light\";\n\t\treturn window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n\t}\n\t#subscribeToSystemTheme() {\n\t\tif (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n\t\tconst nextQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\t\tif (this.#mediaQuery === nextQuery) return;\n\t\tif (this.#mediaQuery) if (typeof this.#mediaQuery.removeEventListener === \"function\") this.#mediaQuery.removeEventListener(\"change\", this.#mediaChangeHandler);\n\t\telse this.#mediaQuery.removeListener(this.#mediaChangeHandler);\n\t\tthis.#mediaQuery = nextQuery;\n\t\tif (typeof nextQuery.addEventListener === \"function\") nextQuery.addEventListener(\"change\", this.#mediaChangeHandler);\n\t\telse nextQuery.addListener(this.#mediaChangeHandler);\n\t}\n\t#applyResolvedTheme() {\n\t\tif (typeof document === \"undefined\") return;\n\t\tconst root = document.documentElement;\n\t\troot.setAttribute(THEME_ATTR, this.resolved);\n\t\troot.style.colorScheme = this.resolved;\n\t\tconst themeColorMeta = document.querySelector(\"meta[name=\\\"theme-color\\\"]\");\n\t\tif (themeColorMeta) themeColorMeta.content = this.resolved === \"dark\" ? DARK_THEME_COLOR : LIGHT_THEME_COLOR;\n\t\tconst colorSchemeMeta = document.querySelector(\"meta[name=\\\"color-scheme\\\"]\");\n\t\tif (colorSchemeMeta) colorSchemeMeta.content = this.resolved;\n\t}\n};\nvar themeService = new ThemeService();\n//#endregion\nexport { fetchVersions as A, sendChatMessage as B, fetchHealth as C, fetchSecretFiles as D, fetchSecretFile as E, pullImages as F, startChatMessageTurn as H, rejectChatQuestion as I, replyChatPermission as L, getSessionMessages as M, listSessions as N, fetchSecretStripNotice as O, probeChatBackend as P, replyChatQuestion as R, fetchEndpoints as S, fetchInstallLockStatus as T, testAkmEmbedding as U, setActiveEndpoint as V, fetchAkmKnowledgeStats as _, startListening as a, fetchBackups as b, voiceState as c, containerAction as d, createSession as f, fetchAkmHealth as g, fetchAkmConfig as h, speakText as i, fetchVoiceConfig as j, fetchServiceLogs as k, notifications as l, fetchAddons as m, destroyVoice as n, stopListening as o, detectAkmEmbedding as p, initVoice as r, stopSpeaking as s, themeService as t, buildHeaders as u, fetchAssistantSettings as v, fetchHostAkmSharing as w, fetchContainers as x, fetchAutomations as y, saveTaskFile as z };\n"],"names":[],"mappings":"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"}
|