@openpalm/ui 0.12.52 → 0.13.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/.openpalm-ui-version +1 -1
- package/build/client/_app/immutable/assets/0.CNWpIzQn.css +1 -0
- package/build/client/_app/immutable/assets/0.CNWpIzQn.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CNWpIzQn.css.gz +0 -0
- package/build/client/_app/immutable/assets/10.vLP66eby.css +1 -0
- package/build/client/_app/immutable/assets/10.vLP66eby.css.br +0 -0
- package/build/client/_app/immutable/assets/10.vLP66eby.css.gz +0 -0
- package/build/client/_app/immutable/assets/11.BF9IcRAW.css +1 -0
- package/build/client/_app/immutable/assets/11.BF9IcRAW.css.br +0 -0
- package/build/client/_app/immutable/assets/11.BF9IcRAW.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.CTNuT1CQ.css +1 -0
- package/build/client/_app/immutable/assets/5.CTNuT1CQ.css.br +0 -0
- package/build/client/_app/immutable/assets/5.CTNuT1CQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.D_kTgQ70.css +1 -0
- package/build/client/_app/immutable/assets/6.D_kTgQ70.css.br +0 -0
- package/build/client/_app/immutable/assets/6.D_kTgQ70.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.CEu3B1cr.css +1 -0
- package/build/client/_app/immutable/assets/7.CEu3B1cr.css.br +0 -0
- package/build/client/_app/immutable/assets/7.CEu3B1cr.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.B0-fGtW-.css +1 -0
- package/build/client/_app/immutable/assets/9.B0-fGtW-.css.br +0 -0
- package/build/client/_app/immutable/assets/9.B0-fGtW-.css.gz +0 -0
- package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css +1 -0
- package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css.br +0 -0
- package/build/client/_app/immutable/assets/ChatNavbar.C7LJB8r7.css.gz +0 -0
- package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css +1 -0
- package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css.br +0 -0
- package/build/client/_app/immutable/assets/Drawer.C9zcL24P.css.gz +0 -0
- package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css +1 -0
- package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css.br +0 -0
- package/build/client/_app/immutable/assets/IconActivity.BdXOPwBm.css.gz +0 -0
- package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css +1 -0
- package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css.br +2 -0
- package/build/client/_app/immutable/assets/Spinner.DfNgj4dl.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BDK50g8a.js +1 -0
- package/build/client/_app/immutable/chunks/BDK50g8a.js.br +0 -0
- package/build/client/_app/immutable/chunks/BDK50g8a.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BLc6D58Y.js +3 -0
- package/build/client/_app/immutable/chunks/BLc6D58Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/BLc6D58Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BMyudKzg.js +1 -0
- package/build/client/_app/immutable/chunks/BMyudKzg.js.br +0 -0
- package/build/client/_app/immutable/chunks/BMyudKzg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BNkLu9ey.js +3 -0
- package/build/client/_app/immutable/chunks/BNkLu9ey.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNkLu9ey.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BkqRukKX.js +1 -0
- package/build/client/_app/immutable/chunks/BkqRukKX.js.br +2 -0
- package/build/client/_app/immutable/chunks/BkqRukKX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BzIvC31O.js +3 -0
- package/build/client/_app/immutable/chunks/BzIvC31O.js.br +0 -0
- package/build/client/_app/immutable/chunks/BzIvC31O.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CUa5ff3d.js +1 -0
- package/build/client/_app/immutable/chunks/CUa5ff3d.js.br +0 -0
- package/build/client/_app/immutable/chunks/CUa5ff3d.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CvItGqWG.js +1 -0
- package/build/client/_app/immutable/chunks/CvItGqWG.js.br +0 -0
- package/build/client/_app/immutable/chunks/CvItGqWG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D1nSxXur.js +5 -0
- package/build/client/_app/immutable/chunks/D1nSxXur.js.br +0 -0
- package/build/client/_app/immutable/chunks/D1nSxXur.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5FtEngX.js +1 -0
- package/build/client/_app/immutable/chunks/D5FtEngX.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5FtEngX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DIM-KrDw.js +1 -0
- package/build/client/_app/immutable/chunks/DIM-KrDw.js.br +0 -0
- package/build/client/_app/immutable/chunks/DIM-KrDw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Db8xkqW6.js +1 -0
- package/build/client/_app/immutable/chunks/Db8xkqW6.js.br +0 -0
- package/build/client/_app/immutable/chunks/Db8xkqW6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DfZbBavE.js +1 -0
- package/build/client/_app/immutable/chunks/DfZbBavE.js.br +1 -0
- package/build/client/_app/immutable/chunks/DfZbBavE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DmFbAjwW.js +1 -0
- package/build/client/_app/immutable/chunks/DmFbAjwW.js.br +3 -0
- package/build/client/_app/immutable/chunks/DmFbAjwW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/NR-JVJz-.js +1 -0
- package/build/client/_app/immutable/chunks/NR-JVJz-.js.br +0 -0
- package/build/client/_app/immutable/chunks/NR-JVJz-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/R6GPcDBF.js +14 -0
- package/build/client/_app/immutable/chunks/R6GPcDBF.js.br +0 -0
- package/build/client/_app/immutable/chunks/R6GPcDBF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/SXdvPq3_.js +1 -0
- package/build/client/_app/immutable/chunks/SXdvPq3_.js.br +0 -0
- package/build/client/_app/immutable/chunks/SXdvPq3_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/c0lkYAgh.js +5 -0
- package/build/client/_app/immutable/chunks/c0lkYAgh.js.br +0 -0
- package/build/client/_app/immutable/chunks/c0lkYAgh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/hSjQday7.js +1 -0
- package/build/client/_app/immutable/chunks/hSjQday7.js.br +0 -0
- package/build/client/_app/immutable/chunks/hSjQday7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/mG6HnNbi.js +1 -0
- package/build/client/_app/immutable/chunks/mG6HnNbi.js.br +0 -0
- package/build/client/_app/immutable/chunks/mG6HnNbi.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.ByeYK7_P.js +2 -0
- package/build/client/_app/immutable/entry/app.ByeYK7_P.js.br +0 -0
- package/build/client/_app/immutable/entry/app.ByeYK7_P.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.kykyp6T0.js +1 -0
- package/build/client/_app/immutable/entry/start.kykyp6T0.js.br +1 -0
- package/build/client/_app/immutable/entry/start.kykyp6T0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CLEDwEKf.js +1 -0
- package/build/client/_app/immutable/nodes/0.CLEDwEKf.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CLEDwEKf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DOwkg43h.js +1 -0
- package/build/client/_app/immutable/nodes/1.DOwkg43h.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DOwkg43h.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.Cs6atPP0.js +1 -0
- package/build/client/_app/immutable/nodes/10.Cs6atPP0.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.Cs6atPP0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.D1ux0xRH.js +6 -0
- package/build/client/_app/immutable/nodes/11.D1ux0xRH.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D1ux0xRH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.C-PzaHZx.js +1 -0
- package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.C-PzaHZx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.26Z_fr6N.js +1 -0
- package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.26Z_fr6N.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.vRThg0Ke.js +1 -0
- package/build/client/_app/immutable/nodes/4.vRThg0Ke.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.vRThg0Ke.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.y3u2P8a-.js +2 -0
- package/build/client/_app/immutable/nodes/5.y3u2P8a-.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.y3u2P8a-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.Vtev5Cm4.js +2 -0
- package/build/client/_app/immutable/nodes/6.Vtev5Cm4.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Vtev5Cm4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DQ9bZrdN.js +4 -0
- package/build/client/_app/immutable/nodes/7.DQ9bZrdN.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DQ9bZrdN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.NHp_bSVx.js +1 -0
- package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.NHp_bSVx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.2IPaJ-1P.js +126 -0
- package/build/client/_app/immutable/nodes/9.2IPaJ-1P.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.2IPaJ-1P.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +1 -2
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/0-D6JYWBmc.js +43 -0
- package/build/server/chunks/0-D6JYWBmc.js.map +1 -0
- package/build/server/chunks/1-QFaO6yhK.js +9 -0
- package/build/server/chunks/1-QFaO6yhK.js.map +1 -0
- package/build/server/chunks/10-BHQuL7xa.js +35 -0
- package/build/server/chunks/10-BHQuL7xa.js.map +1 -0
- package/build/server/chunks/11-nYH7HWHs.js +9 -0
- package/build/server/chunks/11-nYH7HWHs.js.map +1 -0
- package/build/server/chunks/2-CQSBaE_w.js +9 -0
- package/build/server/chunks/2-CQSBaE_w.js.map +1 -0
- package/build/server/chunks/3-DflhJGSw.js +58 -0
- package/build/server/chunks/3-DflhJGSw.js.map +1 -0
- package/build/server/chunks/4-dgm3mFwb.js +9 -0
- package/build/server/chunks/4-dgm3mFwb.js.map +1 -0
- package/build/server/chunks/5-_ostMB1h.js +9 -0
- package/build/server/chunks/5-_ostMB1h.js.map +1 -0
- package/build/server/chunks/6-Bz787Ixu.js +9 -0
- package/build/server/chunks/6-Bz787Ixu.js.map +1 -0
- package/build/server/chunks/7-Cs4tQiJY.js +9 -0
- package/build/server/chunks/7-Cs4tQiJY.js.map +1 -0
- package/build/server/chunks/8-DiHmrGkL.js +30 -0
- package/build/server/chunks/8-DiHmrGkL.js.map +1 -0
- package/build/server/chunks/9-DPtmsJHR.js +42 -0
- package/build/server/chunks/9-DPtmsJHR.js.map +1 -0
- package/build/server/chunks/ChatNavbar-ZxJwQIGL.js +243 -0
- package/build/server/chunks/ChatNavbar-ZxJwQIGL.js.map +1 -0
- package/build/server/chunks/IconActivity-BVrMC8FH.js +5486 -0
- package/build/server/chunks/IconActivity-BVrMC8FH.js.map +1 -0
- package/build/server/chunks/IconAgent-DeBWj6Gr.js +16 -0
- package/build/server/chunks/IconAgent-DeBWj6Gr.js.map +1 -0
- package/build/server/chunks/IconDone-CHBJ36xT.js +10 -0
- package/build/server/chunks/IconDone-CHBJ36xT.js.map +1 -0
- package/build/server/chunks/IconInfo-DA5uGQyP.js +10 -0
- package/build/server/chunks/IconInfo-DA5uGQyP.js.map +1 -0
- package/build/server/chunks/IconLock-Bz5zHCBQ.js +10 -0
- package/build/server/chunks/IconLock-Bz5zHCBQ.js.map +1 -0
- package/build/server/chunks/IconLogo-BRmPVDI_.js +10 -0
- package/build/server/chunks/IconLogo-BRmPVDI_.js.map +1 -0
- package/build/server/chunks/IconMic-BbjkE_nG.js +18 -0
- package/build/server/chunks/IconMic-BbjkE_nG.js.map +1 -0
- package/build/server/chunks/IconServer-ByAeszv0.js +180 -0
- package/build/server/chunks/IconServer-ByAeszv0.js.map +1 -0
- package/build/server/chunks/IconStop-DFbhUtaJ.js +1122 -0
- package/build/server/chunks/IconStop-DFbhUtaJ.js.map +1 -0
- package/build/server/chunks/_helpers-CafYq-UD.js +74 -0
- package/build/server/chunks/_helpers-CafYq-UD.js.map +1 -0
- package/build/server/chunks/_layout.svelte-DFMW9sdO.js +65 -0
- package/build/server/chunks/_layout.svelte-DFMW9sdO.js.map +1 -0
- package/build/server/chunks/_page.svelte-BLGF_oAz.js +92 -0
- package/build/server/chunks/_page.svelte-BLGF_oAz.js.map +1 -0
- package/build/server/chunks/_page.svelte-CKJNzmVG.js +530 -0
- package/build/server/chunks/_page.svelte-CKJNzmVG.js.map +1 -0
- package/build/server/chunks/_page.svelte-CborsVrn.js +2425 -0
- package/build/server/chunks/_page.svelte-CborsVrn.js.map +1 -0
- package/build/server/chunks/_page.svelte-CknIT-b6.js +24 -0
- package/build/server/chunks/_page.svelte-CknIT-b6.js.map +1 -0
- package/build/server/chunks/_page.svelte-Cz3JYioD.js +82 -0
- package/build/server/chunks/_page.svelte-Cz3JYioD.js.map +1 -0
- package/build/server/chunks/_page.svelte-DDFJprLE.js +47 -0
- package/build/server/chunks/_page.svelte-DDFJprLE.js.map +1 -0
- package/build/server/chunks/_page.svelte-DojSR6TL.js +3500 -0
- package/build/server/chunks/_page.svelte-DojSR6TL.js.map +1 -0
- package/build/server/chunks/_page.svelte-Du3fWBth.js +5 -0
- package/build/server/chunks/_page.svelte-Du3fWBth.js.map +1 -0
- package/build/server/chunks/_server.ts-1VKTjr08.js +71 -0
- package/build/server/chunks/_server.ts-1VKTjr08.js.map +1 -0
- package/build/server/chunks/_server.ts-1Vco45Qu.js +58 -0
- package/build/server/chunks/_server.ts-1Vco45Qu.js.map +1 -0
- package/build/server/chunks/_server.ts-4SFWMa3H.js +49 -0
- package/build/server/chunks/_server.ts-4SFWMa3H.js.map +1 -0
- package/build/server/chunks/_server.ts-4eT-crTl.js +66 -0
- package/build/server/chunks/_server.ts-4eT-crTl.js.map +1 -0
- package/build/server/chunks/_server.ts-9TnX_Hfn.js +41 -0
- package/build/server/chunks/_server.ts-9TnX_Hfn.js.map +1 -0
- package/build/server/chunks/_server.ts-B0jGXHG1.js +38 -0
- package/build/server/chunks/_server.ts-B0jGXHG1.js.map +1 -0
- package/build/server/chunks/_server.ts-B46NQmKl.js +45 -0
- package/build/server/chunks/_server.ts-B46NQmKl.js.map +1 -0
- package/build/server/chunks/_server.ts-B7jtS1rc.js +42 -0
- package/build/server/chunks/_server.ts-B7jtS1rc.js.map +1 -0
- package/build/server/chunks/_server.ts-B8p1cZWN.js +77 -0
- package/build/server/chunks/_server.ts-B8p1cZWN.js.map +1 -0
- package/build/server/chunks/_server.ts-B9GH6f46.js +45 -0
- package/build/server/chunks/_server.ts-B9GH6f46.js.map +1 -0
- package/build/server/chunks/_server.ts-BFOoXmaJ.js +88 -0
- package/build/server/chunks/_server.ts-BFOoXmaJ.js.map +1 -0
- package/build/server/chunks/_server.ts-BG50sNod.js +94 -0
- package/build/server/chunks/_server.ts-BG50sNod.js.map +1 -0
- package/build/server/chunks/_server.ts-BG89__4Y.js +48 -0
- package/build/server/chunks/_server.ts-BG89__4Y.js.map +1 -0
- package/build/server/chunks/_server.ts-BI2IrCte.js +44 -0
- package/build/server/chunks/_server.ts-BI2IrCte.js.map +1 -0
- package/build/server/chunks/_server.ts-BLxV2y7p.js +70 -0
- package/build/server/chunks/_server.ts-BLxV2y7p.js.map +1 -0
- package/build/server/chunks/_server.ts-BRiu2AFG.js +89 -0
- package/build/server/chunks/_server.ts-BRiu2AFG.js.map +1 -0
- package/build/server/chunks/_server.ts-BUE0dmBz.js +58 -0
- package/build/server/chunks/_server.ts-BUE0dmBz.js.map +1 -0
- package/build/server/chunks/_server.ts-BV6i7XBr.js +92 -0
- package/build/server/chunks/_server.ts-BV6i7XBr.js.map +1 -0
- package/build/server/chunks/_server.ts-BYUzlpfe.js +172 -0
- package/build/server/chunks/_server.ts-BYUzlpfe.js.map +1 -0
- package/build/server/chunks/_server.ts-B_R9VtOW.js +152 -0
- package/build/server/chunks/_server.ts-B_R9VtOW.js.map +1 -0
- package/build/server/chunks/_server.ts-Bbtu4jaC.js +205 -0
- package/build/server/chunks/_server.ts-Bbtu4jaC.js.map +1 -0
- package/build/server/chunks/_server.ts-BeCTOV2T.js +57 -0
- package/build/server/chunks/_server.ts-BeCTOV2T.js.map +1 -0
- package/build/server/chunks/_server.ts-Bfkzx4ao.js +248 -0
- package/build/server/chunks/_server.ts-Bfkzx4ao.js.map +1 -0
- package/build/server/chunks/_server.ts-Bj17GHeW.js +44 -0
- package/build/server/chunks/_server.ts-Bj17GHeW.js.map +1 -0
- package/build/server/chunks/_server.ts-BjEVNsPT.js +50 -0
- package/build/server/chunks/_server.ts-BjEVNsPT.js.map +1 -0
- package/build/server/chunks/_server.ts-Bu-Ie_Mc.js +96 -0
- package/build/server/chunks/_server.ts-Bu-Ie_Mc.js.map +1 -0
- package/build/server/chunks/_server.ts-BvwD-tU2.js +49 -0
- package/build/server/chunks/_server.ts-BvwD-tU2.js.map +1 -0
- package/build/server/chunks/_server.ts-C0Zlu5Xy.js +107 -0
- package/build/server/chunks/_server.ts-C0Zlu5Xy.js.map +1 -0
- package/build/server/chunks/_server.ts-C1k-QptM.js +68 -0
- package/build/server/chunks/_server.ts-C1k-QptM.js.map +1 -0
- package/build/server/chunks/_server.ts-C43E5b3d.js +521 -0
- package/build/server/chunks/_server.ts-C43E5b3d.js.map +1 -0
- package/build/server/chunks/_server.ts-C5NMGLvR.js +68 -0
- package/build/server/chunks/_server.ts-C5NMGLvR.js.map +1 -0
- package/build/server/chunks/_server.ts-C7uAOfo3.js +94 -0
- package/build/server/chunks/_server.ts-C7uAOfo3.js.map +1 -0
- package/build/server/chunks/_server.ts-C7wn5VUY.js +111 -0
- package/build/server/chunks/_server.ts-C7wn5VUY.js.map +1 -0
- package/build/server/chunks/_server.ts-CFz_IeN4.js +56 -0
- package/build/server/chunks/_server.ts-CFz_IeN4.js.map +1 -0
- package/build/server/chunks/_server.ts-CHuyT9rF.js +69 -0
- package/build/server/chunks/_server.ts-CHuyT9rF.js.map +1 -0
- package/build/server/chunks/_server.ts-CKcFu8B-.js +171 -0
- package/build/server/chunks/_server.ts-CKcFu8B-.js.map +1 -0
- package/build/server/chunks/_server.ts-CMwOXeFC.js +80 -0
- package/build/server/chunks/_server.ts-CMwOXeFC.js.map +1 -0
- package/build/server/chunks/_server.ts-CP02aPdv.js +64 -0
- package/build/server/chunks/_server.ts-CP02aPdv.js.map +1 -0
- package/build/server/chunks/_server.ts-CQIXn8xb.js +64 -0
- package/build/server/chunks/_server.ts-CQIXn8xb.js.map +1 -0
- package/build/server/chunks/_server.ts-CTKwaXm1.js +93 -0
- package/build/server/chunks/_server.ts-CTKwaXm1.js.map +1 -0
- package/build/server/chunks/_server.ts-CUPbFKq2.js +106 -0
- package/build/server/chunks/_server.ts-CUPbFKq2.js.map +1 -0
- package/build/server/chunks/_server.ts-CXt9azl0.js +105 -0
- package/build/server/chunks/_server.ts-CXt9azl0.js.map +1 -0
- package/build/server/chunks/_server.ts-CYY3W2qh.js +715 -0
- package/build/server/chunks/_server.ts-CYY3W2qh.js.map +1 -0
- package/build/server/chunks/_server.ts-C_qRsJI2.js +68 -0
- package/build/server/chunks/_server.ts-C_qRsJI2.js.map +1 -0
- package/build/server/chunks/_server.ts-CbkJG3Yk.js +72 -0
- package/build/server/chunks/_server.ts-CbkJG3Yk.js.map +1 -0
- package/build/server/chunks/_server.ts-Cg_4-N8w.js +34 -0
- package/build/server/chunks/_server.ts-Cg_4-N8w.js.map +1 -0
- package/build/server/chunks/_server.ts-Chf0EFLa.js +60 -0
- package/build/server/chunks/_server.ts-Chf0EFLa.js.map +1 -0
- package/build/server/chunks/_server.ts-Ci1n4eQ3.js +52 -0
- package/build/server/chunks/_server.ts-Ci1n4eQ3.js.map +1 -0
- package/build/server/chunks/_server.ts-ClO4pSRG.js +51 -0
- package/build/server/chunks/_server.ts-ClO4pSRG.js.map +1 -0
- package/build/server/chunks/_server.ts-Cp6d9DIG.js +103 -0
- package/build/server/chunks/_server.ts-Cp6d9DIG.js.map +1 -0
- package/build/server/chunks/_server.ts-CtiJiKFW.js +58 -0
- package/build/server/chunks/_server.ts-CtiJiKFW.js.map +1 -0
- package/build/server/chunks/_server.ts-CtsLQpY2.js +19 -0
- package/build/server/chunks/_server.ts-CtsLQpY2.js.map +1 -0
- package/build/server/chunks/_server.ts-CyzJdUdD.js +88 -0
- package/build/server/chunks/_server.ts-CyzJdUdD.js.map +1 -0
- package/build/server/chunks/_server.ts-D1mP7Ux6.js +173 -0
- package/build/server/chunks/_server.ts-D1mP7Ux6.js.map +1 -0
- package/build/server/chunks/_server.ts-D2dBUHv-.js +61 -0
- package/build/server/chunks/_server.ts-D2dBUHv-.js.map +1 -0
- package/build/server/chunks/_server.ts-D81J9NzU.js +44 -0
- package/build/server/chunks/_server.ts-D81J9NzU.js.map +1 -0
- package/build/server/chunks/_server.ts-DJFB76Z4.js +36 -0
- package/build/server/chunks/_server.ts-DJFB76Z4.js.map +1 -0
- package/build/server/chunks/_server.ts-DJxUVpVr.js +55 -0
- package/build/server/chunks/_server.ts-DJxUVpVr.js.map +1 -0
- package/build/server/chunks/_server.ts-DK409rto.js +45 -0
- package/build/server/chunks/_server.ts-DK409rto.js.map +1 -0
- package/build/server/chunks/_server.ts-DPw-9Fvz.js +88 -0
- package/build/server/chunks/_server.ts-DPw-9Fvz.js.map +1 -0
- package/build/server/chunks/_server.ts-DTOMs2Oo.js +57 -0
- package/build/server/chunks/_server.ts-DTOMs2Oo.js.map +1 -0
- package/build/server/chunks/_server.ts-DVXK2VD6.js +60 -0
- package/build/server/chunks/_server.ts-DVXK2VD6.js.map +1 -0
- package/build/server/chunks/_server.ts-DW3mRh_v.js +72 -0
- package/build/server/chunks/_server.ts-DW3mRh_v.js.map +1 -0
- package/build/server/chunks/_server.ts-Db2X5ulY.js +41 -0
- package/build/server/chunks/_server.ts-Db2X5ulY.js.map +1 -0
- package/build/server/chunks/_server.ts-DhfQc2ah.js +134 -0
- package/build/server/chunks/_server.ts-DhfQc2ah.js.map +1 -0
- package/build/server/chunks/_server.ts-DjFDthjg.js +44 -0
- package/build/server/chunks/_server.ts-DjFDthjg.js.map +1 -0
- package/build/server/chunks/_server.ts-Dk7RL-D7.js +61 -0
- package/build/server/chunks/_server.ts-Dk7RL-D7.js.map +1 -0
- package/build/server/chunks/_server.ts-DrHEkbDq.js +84 -0
- package/build/server/chunks/_server.ts-DrHEkbDq.js.map +1 -0
- package/build/server/chunks/_server.ts-DvKpBV-Y.js +42 -0
- package/build/server/chunks/_server.ts-DvKpBV-Y.js.map +1 -0
- package/build/server/chunks/_server.ts-FhE6fUSD.js +40 -0
- package/build/server/chunks/_server.ts-FhE6fUSD.js.map +1 -0
- package/build/server/chunks/_server.ts-GuptvcVQ.js +49 -0
- package/build/server/chunks/_server.ts-GuptvcVQ.js.map +1 -0
- package/build/server/chunks/_server.ts-HN1FxysS.js +68 -0
- package/build/server/chunks/_server.ts-HN1FxysS.js.map +1 -0
- package/build/server/chunks/_server.ts-HlB5nMY9.js +149 -0
- package/build/server/chunks/_server.ts-HlB5nMY9.js.map +1 -0
- package/build/server/chunks/_server.ts-MvwnQkPT.js +49 -0
- package/build/server/chunks/_server.ts-MvwnQkPT.js.map +1 -0
- package/build/server/chunks/_server.ts-Q1zB1kiD.js +87 -0
- package/build/server/chunks/_server.ts-Q1zB1kiD.js.map +1 -0
- package/build/server/chunks/_server.ts-Rv6Qmjnm.js +65 -0
- package/build/server/chunks/_server.ts-Rv6Qmjnm.js.map +1 -0
- package/build/server/chunks/_server.ts-S90K5IJI.js +57 -0
- package/build/server/chunks/_server.ts-S90K5IJI.js.map +1 -0
- package/build/server/chunks/_server.ts-Y4JoeA12.js +141 -0
- package/build/server/chunks/_server.ts-Y4JoeA12.js.map +1 -0
- package/build/server/chunks/_server.ts-at5EQV31.js +162 -0
- package/build/server/chunks/_server.ts-at5EQV31.js.map +1 -0
- package/build/server/chunks/_server.ts-c64R3qMS.js +112 -0
- package/build/server/chunks/_server.ts-c64R3qMS.js.map +1 -0
- package/build/server/chunks/_server.ts-nasuSdo-.js +80 -0
- package/build/server/chunks/_server.ts-nasuSdo-.js.map +1 -0
- package/build/server/chunks/_server.ts-rPbq-4rb.js +87 -0
- package/build/server/chunks/_server.ts-rPbq-4rb.js.map +1 -0
- package/build/server/chunks/_server.ts-tchYVZRL.js +166 -0
- package/build/server/chunks/_server.ts-tchYVZRL.js.map +1 -0
- package/build/server/chunks/_server.ts-uqxkiRQ1.js +38 -0
- package/build/server/chunks/_server.ts-uqxkiRQ1.js.map +1 -0
- package/build/server/chunks/_server.ts-y3HSMNEG.js +56 -0
- package/build/server/chunks/_server.ts-y3HSMNEG.js.map +1 -0
- package/build/server/chunks/_server.ts-y7XlQItn.js +58 -0
- package/build/server/chunks/_server.ts-y7XlQItn.js.map +1 -0
- package/build/server/chunks/addon-helpers-Cpj40OF3.js +51 -0
- package/build/server/chunks/addon-helpers-Cpj40OF3.js.map +1 -0
- package/build/server/chunks/akm-D8uSJNzt.js +151 -0
- package/build/server/chunks/akm-D8uSJNzt.js.map +1 -0
- package/build/server/chunks/catalog-C9ClLZ62.js +217 -0
- package/build/server/chunks/catalog-C9ClLZ62.js.map +1 -0
- package/build/server/chunks/client-utk4T8Jl.js +202 -0
- package/build/server/chunks/client-utk4T8Jl.js.map +1 -0
- package/build/server/chunks/compose-args2-cix5m26E.js +26 -0
- package/build/server/chunks/compose-args2-cix5m26E.js.map +1 -0
- package/build/server/chunks/config-BV78mCrh.js +121 -0
- package/build/server/chunks/config-BV78mCrh.js.map +1 -0
- package/build/server/chunks/connections-api-CpQ5k7QC.js +34 -0
- package/build/server/chunks/connections-api-CpQ5k7QC.js.map +1 -0
- package/build/server/chunks/constants-B7J5DDaI.js +298 -0
- package/build/server/chunks/constants-B7J5DDaI.js.map +1 -0
- package/build/server/chunks/docker2-DqIy9JYf.js +26 -0
- package/build/server/chunks/docker2-DqIy9JYf.js.map +1 -0
- package/build/server/chunks/docker3-DvrSgFLt.js +20 -0
- package/build/server/chunks/docker3-DvrSgFLt.js.map +1 -0
- package/build/server/chunks/endpoints-CU3ehglV.js +377 -0
- package/build/server/chunks/endpoints-CU3ehglV.js.map +1 -0
- package/build/server/chunks/environment-BYp8JQYM.js +38 -0
- package/build/server/chunks/environment-BYp8JQYM.js.map +1 -0
- package/build/server/chunks/error.svelte-B9DQG_Wh.js +18 -0
- package/build/server/chunks/error.svelte-B9DQG_Wh.js.map +1 -0
- package/build/server/chunks/exports-CcmcYU0M.js +124 -0
- package/build/server/chunks/exports-CcmcYU0M.js.map +1 -0
- package/build/server/chunks/exports2-BjzhbhYA.js +691 -0
- package/build/server/chunks/exports2-BjzhbhYA.js.map +1 -0
- package/build/server/chunks/features-DLGlNjZX.js +116 -0
- package/build/server/chunks/features-DLGlNjZX.js.map +1 -0
- package/build/server/chunks/format-date-gcou_Av8.js +950 -0
- package/build/server/chunks/format-date-gcou_Av8.js.map +1 -0
- package/build/server/chunks/helpers-7BvhniSt.js +320 -0
- package/build/server/chunks/helpers-7BvhniSt.js.map +1 -0
- package/build/server/chunks/hooks.server-CwIkB_d8.js +115 -0
- package/build/server/chunks/hooks.server-CwIkB_d8.js.map +1 -0
- package/build/server/chunks/http-D0qKwTqb.js +31 -0
- package/build/server/chunks/http-D0qKwTqb.js.map +1 -0
- package/build/server/chunks/internal-CVxYC2gp.js +915 -0
- package/build/server/chunks/internal-CVxYC2gp.js.map +1 -0
- package/build/server/chunks/landing-BAWznbys.js +95 -0
- package/build/server/chunks/landing-BAWznbys.js.map +1 -0
- package/build/server/chunks/paths-lkOb-n87.js +17 -0
- package/build/server/chunks/paths-lkOb-n87.js.map +1 -0
- package/build/server/chunks/provider-constants-1s1k8kbj.js +68 -0
- package/build/server/chunks/provider-constants-1s1k8kbj.js.map +1 -0
- package/build/server/chunks/runtime-context.svelte-FZapSP7A.js +24 -0
- package/build/server/chunks/runtime-context.svelte-FZapSP7A.js.map +1 -0
- package/build/server/chunks/session-cookie-WuIYBiMY.js +74 -0
- package/build/server/chunks/session-cookie-WuIYBiMY.js.map +1 -0
- package/build/server/chunks/setup-deploy-DaMn6d6g.js +75 -0
- package/build/server/chunks/setup-deploy-DaMn6d6g.js.map +1 -0
- package/build/server/chunks/speakable-text-BflxDDdY.js +65 -0
- package/build/server/chunks/speakable-text-BflxDDdY.js.map +1 -0
- package/build/server/chunks/src-CS2sSYOR.js +17213 -0
- package/build/server/chunks/src-CS2sSYOR.js.map +1 -0
- package/build/server/chunks/state-BRh7vs9j.js +24 -0
- package/build/server/chunks/state-BRh7vs9j.js.map +1 -0
- package/build/server/chunks/state2-COVNCCTq.js +62 -0
- package/build/server/chunks/state2-COVNCCTq.js.map +1 -0
- package/build/server/chunks/utils-OXHIhUb5.js +150 -0
- package/build/server/chunks/utils-OXHIhUb5.js.map +1 -0
- package/build/server/chunks/voice-state.svelte-bOoc1Vo0.js +1214 -0
- package/build/server/chunks/voice-state.svelte-bOoc1Vo0.js.map +1 -0
- package/build/server/index.js +33 -33
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +272 -243
- package/build/server/manifest.js.map +1 -1
- package/package.json +3 -2
- package/build/client/_app/immutable/assets/0.C-UsFwN5.css +0 -1
- package/build/client/_app/immutable/assets/0.C-UsFwN5.css.br +0 -0
- package/build/client/_app/immutable/assets/0.C-UsFwN5.css.gz +0 -0
- package/build/client/_app/immutable/assets/10.p7qpuBHR.css +0 -1
- package/build/client/_app/immutable/assets/10.p7qpuBHR.css.br +0 -2
- package/build/client/_app/immutable/assets/10.p7qpuBHR.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.DKS7ivN-.css +0 -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/5.B9kVBENv.css +0 -1
- package/build/client/_app/immutable/assets/5.B9kVBENv.css.br +0 -0
- package/build/client/_app/immutable/assets/5.B9kVBENv.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.CcyzbXoG.css +0 -1
- 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/8.DdhLOSFx.css +0 -1
- package/build/client/_app/immutable/assets/8.DdhLOSFx.css.br +0 -0
- package/build/client/_app/immutable/assets/8.DdhLOSFx.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.4QFZFijM.css +0 -1
- package/build/client/_app/immutable/assets/9.4QFZFijM.css.br +0 -0
- package/build/client/_app/immutable/assets/9.4QFZFijM.css.gz +0 -0
- package/build/client/_app/immutable/assets/IconClock.CudG-UM6.css +0 -1
- 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/assets/Navbar.D3rckLpW.css +0 -1
- package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css.br +0 -0
- package/build/client/_app/immutable/assets/Navbar.D3rckLpW.css.gz +0 -0
- package/build/client/_app/immutable/assets/Spinner.CCwieGti.css +0 -1
- package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.br +0 -0
- package/build/client/_app/immutable/assets/Spinner.CCwieGti.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B6a5LPQe.js +0 -3
- package/build/client/_app/immutable/chunks/B6a5LPQe.js.br +0 -0
- package/build/client/_app/immutable/chunks/B6a5LPQe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BDvA7M6l.js +0 -1
- 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/BFVV1YJb.js +0 -1
- package/build/client/_app/immutable/chunks/BFVV1YJb.js.br +0 -0
- package/build/client/_app/immutable/chunks/BFVV1YJb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BM4jJmEk.js +0 -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/BeDFZ0w6.js +0 -1
- package/build/client/_app/immutable/chunks/BeDFZ0w6.js.br +0 -0
- package/build/client/_app/immutable/chunks/BeDFZ0w6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BiuKIdz2.js +0 -1
- package/build/client/_app/immutable/chunks/BiuKIdz2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BiuKIdz2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C4c5Y6rY.js +0 -5
- 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 +0 -14
- 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 +0 -3
- 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/C8Qdq8nY.js +0 -1
- package/build/client/_app/immutable/chunks/C8Qdq8nY.js.br +0 -0
- package/build/client/_app/immutable/chunks/C8Qdq8nY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DI0CI0UJ.js +0 -1
- package/build/client/_app/immutable/chunks/DI0CI0UJ.js.br +0 -2
- package/build/client/_app/immutable/chunks/DI0CI0UJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DWwJdNrB.js +0 -1
- package/build/client/_app/immutable/chunks/DWwJdNrB.js.br +0 -1
- package/build/client/_app/immutable/chunks/DWwJdNrB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoTCwfyJ.js +0 -1
- package/build/client/_app/immutable/chunks/DoTCwfyJ.js.br +0 -2
- package/build/client/_app/immutable/chunks/DoTCwfyJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DwEShcLP.js +0 -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/chunks/HbvxHNCX.js +0 -1
- package/build/client/_app/immutable/chunks/HbvxHNCX.js.br +0 -0
- package/build/client/_app/immutable/chunks/HbvxHNCX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/jopA0ZFl.js +0 -1
- package/build/client/_app/immutable/chunks/jopA0ZFl.js.br +0 -0
- package/build/client/_app/immutable/chunks/jopA0ZFl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/mVxTG_mC.js +0 -1
- package/build/client/_app/immutable/chunks/mVxTG_mC.js.br +0 -3
- package/build/client/_app/immutable/chunks/mVxTG_mC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/zMaWNBEE.js +0 -1
- package/build/client/_app/immutable/chunks/zMaWNBEE.js.br +0 -0
- package/build/client/_app/immutable/chunks/zMaWNBEE.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.D5lUGJr1.js +0 -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 +0 -1
- 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.anwXhDvm.js +0 -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.DrRwtvKf.js +0 -1
- package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.br +0 -1
- package/build/client/_app/immutable/nodes/1.DrRwtvKf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BLqUjjTI.js +0 -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/2.Di1bEoG2.js +0 -1
- package/build/client/_app/immutable/nodes/2.Di1bEoG2.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Di1bEoG2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DNLsgB0V.js +0 -1
- package/build/client/_app/immutable/nodes/3.DNLsgB0V.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DNLsgB0V.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.paHt3QH9.js +0 -124
- 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.bKLnh085.js +0 -4
- 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.DRi42KoD.js +0 -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 +0 -2
- 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.BKAKOw6V.js +0 -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.DwWxN6-k.js +0 -6
- package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DwWxN6-k.js.gz +0 -0
- package/build/server/chunks/0-BiE1oF-J.js +0 -22
- package/build/server/chunks/0-BiE1oF-J.js.map +0 -1
- package/build/server/chunks/1-B-LNip7q.js +0 -9
- package/build/server/chunks/1-B-LNip7q.js.map +0 -1
- package/build/server/chunks/10-CS2lFzh1.js +0 -69
- package/build/server/chunks/10-CS2lFzh1.js.map +0 -1
- package/build/server/chunks/2-BcxV9Utx.js +0 -9
- package/build/server/chunks/2-BcxV9Utx.js.map +0 -1
- package/build/server/chunks/3-EodZ49YI.js +0 -23
- package/build/server/chunks/3-EodZ49YI.js.map +0 -1
- package/build/server/chunks/4-CliJOxWK.js +0 -9
- package/build/server/chunks/4-CliJOxWK.js.map +0 -1
- package/build/server/chunks/5-DkkL3QsU.js +0 -9
- package/build/server/chunks/5-DkkL3QsU.js.map +0 -1
- package/build/server/chunks/6-B6ZHxJZG.js +0 -9
- package/build/server/chunks/6-B6ZHxJZG.js.map +0 -1
- package/build/server/chunks/7-CIl66k8R.js +0 -9
- package/build/server/chunks/7-CIl66k8R.js.map +0 -1
- package/build/server/chunks/8-Dbz3fLZs.js +0 -35
- package/build/server/chunks/8-Dbz3fLZs.js.map +0 -1
- package/build/server/chunks/9-CnaXNk2w.js +0 -9
- package/build/server/chunks/9-CnaXNk2w.js.map +0 -1
- package/build/server/chunks/IconAlert-eLDsz7qz.js +0 -5496
- package/build/server/chunks/IconAlert-eLDsz7qz.js.map +0 -1
- package/build/server/chunks/IconDone-YB1DYJFs.js +0 -10
- package/build/server/chunks/IconDone-YB1DYJFs.js.map +0 -1
- package/build/server/chunks/IconInfo-yYiI9uGe.js +0 -10
- package/build/server/chunks/IconInfo-yYiI9uGe.js.map +0 -1
- package/build/server/chunks/IconLock-DHiqGiiZ.js +0 -10
- package/build/server/chunks/IconLock-DHiqGiiZ.js.map +0 -1
- package/build/server/chunks/IconLogo-Iv-7q8aY.js +0 -10
- package/build/server/chunks/IconLogo-Iv-7q8aY.js.map +0 -1
- package/build/server/chunks/IconMic-DMJf4zcn.js +0 -1295
- package/build/server/chunks/IconMic-DMJf4zcn.js.map +0 -1
- package/build/server/chunks/Navbar-CbBudHU6.js +0 -403
- package/build/server/chunks/Navbar-CbBudHU6.js.map +0 -1
- package/build/server/chunks/Spinner-jfNKSy3m.js +0 -12
- package/build/server/chunks/Spinner-jfNKSy3m.js.map +0 -1
- package/build/server/chunks/_helpers-B_lb4-jB.js +0 -74
- package/build/server/chunks/_helpers-B_lb4-jB.js.map +0 -1
- package/build/server/chunks/_layout.svelte-B5opDXuf.js +0 -66
- package/build/server/chunks/_layout.svelte-B5opDXuf.js.map +0 -1
- package/build/server/chunks/_page.svelte-1VhBiAl_.js +0 -385
- package/build/server/chunks/_page.svelte-1VhBiAl_.js.map +0 -1
- package/build/server/chunks/_page.svelte-6gpwjZv0.js +0 -122
- package/build/server/chunks/_page.svelte-6gpwjZv0.js.map +0 -1
- package/build/server/chunks/_page.svelte-Bd16jege.js +0 -47
- package/build/server/chunks/_page.svelte-Bd16jege.js.map +0 -1
- package/build/server/chunks/_page.svelte-Boq5WJfs.js +0 -3289
- package/build/server/chunks/_page.svelte-Boq5WJfs.js.map +0 -1
- package/build/server/chunks/_page.svelte-DM-4V1_g.js +0 -79
- package/build/server/chunks/_page.svelte-DM-4V1_g.js.map +0 -1
- package/build/server/chunks/_page.svelte-jdDbUptn.js +0 -89
- package/build/server/chunks/_page.svelte-jdDbUptn.js.map +0 -1
- package/build/server/chunks/_page.svelte-yAnFAnHi.js +0 -74
- package/build/server/chunks/_page.svelte-yAnFAnHi.js.map +0 -1
- package/build/server/chunks/_server.ts-0x3ZsRoq.js +0 -41
- package/build/server/chunks/_server.ts-0x3ZsRoq.js.map +0 -1
- package/build/server/chunks/_server.ts-1fytrAUC.js +0 -105
- package/build/server/chunks/_server.ts-1fytrAUC.js.map +0 -1
- package/build/server/chunks/_server.ts-2trnHYNR.js +0 -103
- package/build/server/chunks/_server.ts-2trnHYNR.js.map +0 -1
- package/build/server/chunks/_server.ts-33LuQvHu.js +0 -19
- package/build/server/chunks/_server.ts-33LuQvHu.js.map +0 -1
- package/build/server/chunks/_server.ts-3IGr8J7j.js +0 -103
- package/build/server/chunks/_server.ts-3IGr8J7j.js.map +0 -1
- package/build/server/chunks/_server.ts-4HApbECL.js +0 -49
- package/build/server/chunks/_server.ts-4HApbECL.js.map +0 -1
- package/build/server/chunks/_server.ts-4cGCnV5A.js +0 -172
- package/build/server/chunks/_server.ts-4cGCnV5A.js.map +0 -1
- package/build/server/chunks/_server.ts-5mKh6tgD.js +0 -56
- package/build/server/chunks/_server.ts-5mKh6tgD.js.map +0 -1
- package/build/server/chunks/_server.ts-B-gZIXCx.js +0 -120
- package/build/server/chunks/_server.ts-B-gZIXCx.js.map +0 -1
- package/build/server/chunks/_server.ts-B1LApKwc.js +0 -48
- package/build/server/chunks/_server.ts-B1LApKwc.js.map +0 -1
- package/build/server/chunks/_server.ts-B5s8k9IW.js +0 -53
- package/build/server/chunks/_server.ts-B5s8k9IW.js.map +0 -1
- package/build/server/chunks/_server.ts-B7oDgVRm.js +0 -208
- package/build/server/chunks/_server.ts-B7oDgVRm.js.map +0 -1
- package/build/server/chunks/_server.ts-BA7OxoAM.js +0 -69
- package/build/server/chunks/_server.ts-BA7OxoAM.js.map +0 -1
- package/build/server/chunks/_server.ts-BCqZP9mX.js +0 -94
- package/build/server/chunks/_server.ts-BCqZP9mX.js.map +0 -1
- package/build/server/chunks/_server.ts-BE9eO04W.js +0 -100
- package/build/server/chunks/_server.ts-BE9eO04W.js.map +0 -1
- package/build/server/chunks/_server.ts-BL9qmwrJ.js +0 -152
- package/build/server/chunks/_server.ts-BL9qmwrJ.js.map +0 -1
- package/build/server/chunks/_server.ts-BUf-IIIm.js +0 -85
- package/build/server/chunks/_server.ts-BUf-IIIm.js.map +0 -1
- package/build/server/chunks/_server.ts-BW13CurN.js +0 -43
- package/build/server/chunks/_server.ts-BW13CurN.js.map +0 -1
- package/build/server/chunks/_server.ts-BWh3c-xu.js +0 -44
- package/build/server/chunks/_server.ts-BWh3c-xu.js.map +0 -1
- package/build/server/chunks/_server.ts-BYDgL8Wh.js +0 -68
- package/build/server/chunks/_server.ts-BYDgL8Wh.js.map +0 -1
- package/build/server/chunks/_server.ts-B_9-b1wk.js +0 -82
- package/build/server/chunks/_server.ts-B_9-b1wk.js.map +0 -1
- package/build/server/chunks/_server.ts-Bbc4zzJy.js +0 -39
- package/build/server/chunks/_server.ts-Bbc4zzJy.js.map +0 -1
- package/build/server/chunks/_server.ts-BhmHIGs6.js +0 -45
- package/build/server/chunks/_server.ts-BhmHIGs6.js.map +0 -1
- package/build/server/chunks/_server.ts-BhuoSeRy.js +0 -64
- package/build/server/chunks/_server.ts-BhuoSeRy.js.map +0 -1
- package/build/server/chunks/_server.ts-BnL_ReBS.js +0 -50
- package/build/server/chunks/_server.ts-BnL_ReBS.js.map +0 -1
- package/build/server/chunks/_server.ts-BoOQ7F2z.js +0 -40
- package/build/server/chunks/_server.ts-BoOQ7F2z.js.map +0 -1
- package/build/server/chunks/_server.ts-Bry3Z40C.js +0 -160
- package/build/server/chunks/_server.ts-Bry3Z40C.js.map +0 -1
- package/build/server/chunks/_server.ts-BtVLVJf0.js +0 -80
- package/build/server/chunks/_server.ts-BtVLVJf0.js.map +0 -1
- package/build/server/chunks/_server.ts-BzISiSHa.js +0 -57
- package/build/server/chunks/_server.ts-BzISiSHa.js.map +0 -1
- package/build/server/chunks/_server.ts-C7PeR-ll.js +0 -112
- package/build/server/chunks/_server.ts-C7PeR-ll.js.map +0 -1
- package/build/server/chunks/_server.ts-C8NW6VWR.js +0 -55
- package/build/server/chunks/_server.ts-C8NW6VWR.js.map +0 -1
- package/build/server/chunks/_server.ts-CF0aKxAL.js +0 -59
- package/build/server/chunks/_server.ts-CF0aKxAL.js.map +0 -1
- package/build/server/chunks/_server.ts-CH-OPdXJ.js +0 -56
- package/build/server/chunks/_server.ts-CH-OPdXJ.js.map +0 -1
- package/build/server/chunks/_server.ts-CPsQ5aGi.js +0 -79
- package/build/server/chunks/_server.ts-CPsQ5aGi.js.map +0 -1
- package/build/server/chunks/_server.ts-CQ8JX5O7.js +0 -89
- package/build/server/chunks/_server.ts-CQ8JX5O7.js.map +0 -1
- package/build/server/chunks/_server.ts-CQPRTbTX.js +0 -63
- package/build/server/chunks/_server.ts-CQPRTbTX.js.map +0 -1
- package/build/server/chunks/_server.ts-CTVpEmAc.js +0 -517
- package/build/server/chunks/_server.ts-CTVpEmAc.js.map +0 -1
- package/build/server/chunks/_server.ts-CWVi9VhR.js +0 -76
- package/build/server/chunks/_server.ts-CWVi9VhR.js.map +0 -1
- package/build/server/chunks/_server.ts-CXQd0L0u.js +0 -57
- package/build/server/chunks/_server.ts-CXQd0L0u.js.map +0 -1
- package/build/server/chunks/_server.ts-Cgg_3L-k.js +0 -44
- package/build/server/chunks/_server.ts-Cgg_3L-k.js.map +0 -1
- package/build/server/chunks/_server.ts-ChvbGMR6.js +0 -50
- package/build/server/chunks/_server.ts-ChvbGMR6.js.map +0 -1
- package/build/server/chunks/_server.ts-CnByyw9m.js +0 -35
- package/build/server/chunks/_server.ts-CnByyw9m.js.map +0 -1
- package/build/server/chunks/_server.ts-Ct_0qiMK.js +0 -76
- package/build/server/chunks/_server.ts-Ct_0qiMK.js.map +0 -1
- package/build/server/chunks/_server.ts-Cu1u6Fq3.js +0 -244
- package/build/server/chunks/_server.ts-Cu1u6Fq3.js.map +0 -1
- package/build/server/chunks/_server.ts-Cuq4zRUh.js +0 -66
- package/build/server/chunks/_server.ts-Cuq4zRUh.js.map +0 -1
- package/build/server/chunks/_server.ts-Cx8pH99_.js +0 -43
- package/build/server/chunks/_server.ts-Cx8pH99_.js.map +0 -1
- package/build/server/chunks/_server.ts-D-eORdC8.js +0 -57
- package/build/server/chunks/_server.ts-D-eORdC8.js.map +0 -1
- package/build/server/chunks/_server.ts-D1cvo-nO.js +0 -55
- package/build/server/chunks/_server.ts-D1cvo-nO.js.map +0 -1
- package/build/server/chunks/_server.ts-D4nuqQNX.js +0 -85
- package/build/server/chunks/_server.ts-D4nuqQNX.js.map +0 -1
- package/build/server/chunks/_server.ts-D6aAJoCf.js +0 -70
- package/build/server/chunks/_server.ts-D6aAJoCf.js.map +0 -1
- package/build/server/chunks/_server.ts-D9PUEjiN.js +0 -47
- package/build/server/chunks/_server.ts-D9PUEjiN.js.map +0 -1
- package/build/server/chunks/_server.ts-DAiD8z-P.js +0 -47
- package/build/server/chunks/_server.ts-DAiD8z-P.js.map +0 -1
- package/build/server/chunks/_server.ts-DDKL_uuS.js +0 -203
- package/build/server/chunks/_server.ts-DDKL_uuS.js.map +0 -1
- package/build/server/chunks/_server.ts-DGkgd0uc.js +0 -166
- package/build/server/chunks/_server.ts-DGkgd0uc.js.map +0 -1
- package/build/server/chunks/_server.ts-DHig-2Ii.js +0 -58
- package/build/server/chunks/_server.ts-DHig-2Ii.js.map +0 -1
- package/build/server/chunks/_server.ts-DJdHVo2c.js +0 -36
- package/build/server/chunks/_server.ts-DJdHVo2c.js.map +0 -1
- package/build/server/chunks/_server.ts-DLrsnGKc.js +0 -64
- package/build/server/chunks/_server.ts-DLrsnGKc.js.map +0 -1
- package/build/server/chunks/_server.ts-DRYh6JJM.js +0 -36
- package/build/server/chunks/_server.ts-DRYh6JJM.js.map +0 -1
- package/build/server/chunks/_server.ts-DUbqsB2y.js +0 -43
- package/build/server/chunks/_server.ts-DUbqsB2y.js.map +0 -1
- package/build/server/chunks/_server.ts-DVRwJs1D.js +0 -89
- package/build/server/chunks/_server.ts-DVRwJs1D.js.map +0 -1
- package/build/server/chunks/_server.ts-DYZ1SnMq.js +0 -44
- package/build/server/chunks/_server.ts-DYZ1SnMq.js.map +0 -1
- package/build/server/chunks/_server.ts-DdpgDdUI.js +0 -59
- package/build/server/chunks/_server.ts-DdpgDdUI.js.map +0 -1
- package/build/server/chunks/_server.ts-DhVR_dEn.js +0 -67
- package/build/server/chunks/_server.ts-DhVR_dEn.js.map +0 -1
- package/build/server/chunks/_server.ts-DorWUEnZ.js +0 -762
- package/build/server/chunks/_server.ts-DorWUEnZ.js.map +0 -1
- package/build/server/chunks/_server.ts-DptdgCp1.js +0 -92
- package/build/server/chunks/_server.ts-DptdgCp1.js.map +0 -1
- package/build/server/chunks/_server.ts-DyFhMY-d.js +0 -84
- package/build/server/chunks/_server.ts-DyFhMY-d.js.map +0 -1
- package/build/server/chunks/_server.ts-FBHhAciM.js +0 -149
- package/build/server/chunks/_server.ts-FBHhAciM.js.map +0 -1
- package/build/server/chunks/_server.ts-H0_rl9HF.js +0 -66
- package/build/server/chunks/_server.ts-H0_rl9HF.js.map +0 -1
- package/build/server/chunks/_server.ts-MGCXhBlP.js +0 -52
- package/build/server/chunks/_server.ts-MGCXhBlP.js.map +0 -1
- package/build/server/chunks/_server.ts-OXR06_zO.js +0 -167
- package/build/server/chunks/_server.ts-OXR06_zO.js.map +0 -1
- package/build/server/chunks/_server.ts-QbGAW-It.js +0 -58
- package/build/server/chunks/_server.ts-QbGAW-It.js.map +0 -1
- package/build/server/chunks/_server.ts-TAvt1Rlb.js +0 -57
- package/build/server/chunks/_server.ts-TAvt1Rlb.js.map +0 -1
- package/build/server/chunks/_server.ts-VXMfJF_F.js +0 -62
- package/build/server/chunks/_server.ts-VXMfJF_F.js.map +0 -1
- package/build/server/chunks/_server.ts-XiInWDAF.js +0 -82
- package/build/server/chunks/_server.ts-XiInWDAF.js.map +0 -1
- package/build/server/chunks/_server.ts-d08IyVdj.js +0 -54
- package/build/server/chunks/_server.ts-d08IyVdj.js.map +0 -1
- package/build/server/chunks/_server.ts-dtw_InfP.js +0 -36
- package/build/server/chunks/_server.ts-dtw_InfP.js.map +0 -1
- package/build/server/chunks/_server.ts-eTP3NGlu.js +0 -49
- package/build/server/chunks/_server.ts-eTP3NGlu.js.map +0 -1
- package/build/server/chunks/_server.ts-fm-L_1WH.js +0 -56
- package/build/server/chunks/_server.ts-fm-L_1WH.js.map +0 -1
- package/build/server/chunks/_server.ts-g5H0gdQB.js +0 -70
- package/build/server/chunks/_server.ts-g5H0gdQB.js.map +0 -1
- package/build/server/chunks/_server.ts-gBvSTaRH.js +0 -78
- package/build/server/chunks/_server.ts-gBvSTaRH.js.map +0 -1
- package/build/server/chunks/_server.ts-lMB9A2Vx.js +0 -92
- package/build/server/chunks/_server.ts-lMB9A2Vx.js.map +0 -1
- package/build/server/chunks/_server.ts-tww34LXr.js +0 -42
- package/build/server/chunks/_server.ts-tww34LXr.js.map +0 -1
- package/build/server/chunks/_server.ts-xgg0Rj1C.js +0 -129
- package/build/server/chunks/_server.ts-xgg0Rj1C.js.map +0 -1
- package/build/server/chunks/_server.ts-yO3j4YDH.js +0 -169
- package/build/server/chunks/_server.ts-yO3j4YDH.js.map +0 -1
- package/build/server/chunks/addon-helpers-DnZ1IPC7.js +0 -51
- package/build/server/chunks/addon-helpers-DnZ1IPC7.js.map +0 -1
- package/build/server/chunks/akm-BVM3F-FY.js +0 -151
- package/build/server/chunks/akm-BVM3F-FY.js.map +0 -1
- package/build/server/chunks/catalog-B_9Qf_Tj.js +0 -217
- package/build/server/chunks/catalog-B_9Qf_Tj.js.map +0 -1
- package/build/server/chunks/client-CEfPhREO.js +0 -202
- package/build/server/chunks/client-CEfPhREO.js.map +0 -1
- package/build/server/chunks/config-VJ5wAdKd.js +0 -121
- package/build/server/chunks/config-VJ5wAdKd.js.map +0 -1
- package/build/server/chunks/dist-DOFcG0Zp.js +0 -6617
- package/build/server/chunks/dist-DOFcG0Zp.js.map +0 -1
- package/build/server/chunks/docker-7rKo0FDm.js +0 -20
- package/build/server/chunks/docker-7rKo0FDm.js.map +0 -1
- package/build/server/chunks/endpoints-DUs5zmwI.js +0 -358
- package/build/server/chunks/endpoints-DUs5zmwI.js.map +0 -1
- package/build/server/chunks/environment-DqfL567G.js +0 -38
- package/build/server/chunks/environment-DqfL567G.js.map +0 -1
- package/build/server/chunks/error.svelte-DXUxoirZ.js +0 -18
- package/build/server/chunks/error.svelte-DXUxoirZ.js.map +0 -1
- package/build/server/chunks/exports-D1quPX8S.js +0 -124
- package/build/server/chunks/exports-D1quPX8S.js.map +0 -1
- package/build/server/chunks/exports2-DECEtwH0.js +0 -691
- package/build/server/chunks/exports2-DECEtwH0.js.map +0 -1
- package/build/server/chunks/features-h0rPqe2e.js +0 -15
- package/build/server/chunks/features-h0rPqe2e.js.map +0 -1
- package/build/server/chunks/features.svelte-DsfDrPnq.js +0 -11
- package/build/server/chunks/features.svelte-DsfDrPnq.js.map +0 -1
- package/build/server/chunks/helpers-GEmeDI6e.js +0 -293
- package/build/server/chunks/helpers-GEmeDI6e.js.map +0 -1
- package/build/server/chunks/hooks.server-CwgeONEs.js +0 -155
- package/build/server/chunks/hooks.server-CwgeONEs.js.map +0 -1
- package/build/server/chunks/http-BzGcbSMh.js +0 -31
- package/build/server/chunks/http-BzGcbSMh.js.map +0 -1
- package/build/server/chunks/internal-CWT3-fy-.js +0 -915
- package/build/server/chunks/internal-CWT3-fy-.js.map +0 -1
- package/build/server/chunks/paths-D8yGDgAD.js +0 -17
- package/build/server/chunks/paths-D8yGDgAD.js.map +0 -1
- package/build/server/chunks/provider-constants-DPrj3yBX.js +0 -63
- package/build/server/chunks/provider-constants-DPrj3yBX.js.map +0 -1
- package/build/server/chunks/session-cookie-IMj1chTO.js +0 -74
- package/build/server/chunks/session-cookie-IMj1chTO.js.map +0 -1
- package/build/server/chunks/setup-deploy-DhMA_slP.js +0 -75
- package/build/server/chunks/setup-deploy-DhMA_slP.js.map +0 -1
- package/build/server/chunks/src-DBYue8Tb.js +0 -9682
- package/build/server/chunks/src-DBYue8Tb.js.map +0 -1
- package/build/server/chunks/state-Bpt5dC1X.js +0 -24
- package/build/server/chunks/state-Bpt5dC1X.js.map +0 -1
- package/build/server/chunks/state2-D20PkMjF.js +0 -62
- package/build/server/chunks/state2-D20PkMjF.js.map +0 -1
- package/build/server/chunks/theme-state.svelte-DPdcwIRf.js +0 -837
- package/build/server/chunks/theme-state.svelte-DPdcwIRf.js.map +0 -1
- package/build/server/chunks/utils-BSRjJDrZ.js +0 -150
- package/build/server/chunks/utils-BSRjJDrZ.js.map +0 -1
- /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css → 4.BXlLAfIE.css} +0 -0
- /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css.br → 4.BXlLAfIE.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{6.BXlLAfIE.css.gz → 4.BXlLAfIE.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{IconSoundOn.BsTA83Hx.css → IconStop.BsTA83Hx.css} +0 -0
- /package/build/client/_app/immutable/assets/{IconSoundOn.BsTA83Hx.css.br → IconStop.BsTA83Hx.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{IconSoundOn.BsTA83Hx.css.gz → IconStop.BsTA83Hx.css.gz} +0 -0
|
@@ -0,0 +1,1122 @@
|
|
|
1
|
+
import { p as derived, d as attr, e as attr_class, a9 as stringify, s as escape_html, q as ensure_array_like } from './dev-D85DamNs.js';
|
|
2
|
+
import 'node:module';
|
|
3
|
+
import { v as voiceState, s as speakText, i as stopSpeaking } from './voice-state.svelte-bOoc1Vo0.js';
|
|
4
|
+
import { S as SvelteMap, v as isUserFacingTool, J as subscribeSessionEvents, y as notifyAssistantReply, A as partSnapshotType, l as extractTextDelta, m as extractToolUpdate, k as extractStepUpdate, i as extractPermissionAsk, j as extractQuestionAsk, t as isSessionError, u as isTurnEnd, w as listSessions, s as getSessionMessages, f as createSession, H as startChatMessageTurn, G as sendChatMessage, x as notifyAssistantError, e as abortChatTurn, E as replyChatPermission, F as replyChatQuestion, C as rejectChatQuestion, p as formatDateTime, q as formatRelativeTime, h as endpointsService, B as registerActivationGuard, z as onConnectionActivated } from './format-date-gcou_Av8.js';
|
|
5
|
+
import { S as Spinner } from './IconMic-BbjkE_nG.js';
|
|
6
|
+
|
|
7
|
+
//#region src/lib/advanced-mode-state.svelte.ts
|
|
8
|
+
var ADVANCED_MODE_STORAGE_KEY = "openpalm.chat.advanced";
|
|
9
|
+
var AdvancedModeService = class {
|
|
10
|
+
enabled = false;
|
|
11
|
+
initialized = false;
|
|
12
|
+
init() {
|
|
13
|
+
if (typeof window === "undefined" || this.initialized) return;
|
|
14
|
+
this.enabled = this.#readStoredPreference();
|
|
15
|
+
this.initialized = true;
|
|
16
|
+
}
|
|
17
|
+
setEnabled(value) {
|
|
18
|
+
this.enabled = value;
|
|
19
|
+
this.#writeStoredPreference(value);
|
|
20
|
+
}
|
|
21
|
+
toggle() {
|
|
22
|
+
const next = !this.enabled;
|
|
23
|
+
this.setEnabled(next);
|
|
24
|
+
return next;
|
|
25
|
+
}
|
|
26
|
+
preferredChatPath() {
|
|
27
|
+
return this.enabled ? "/advanced" : "/chat";
|
|
28
|
+
}
|
|
29
|
+
#readStoredPreference() {
|
|
30
|
+
if (typeof window === "undefined") return false;
|
|
31
|
+
try {
|
|
32
|
+
return window.localStorage.getItem(ADVANCED_MODE_STORAGE_KEY) === "1";
|
|
33
|
+
} catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
#writeStoredPreference(value) {
|
|
38
|
+
if (typeof window === "undefined") return;
|
|
39
|
+
try {
|
|
40
|
+
window.localStorage.setItem(ADVANCED_MODE_STORAGE_KEY, value ? "1" : "0");
|
|
41
|
+
} catch {}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var advancedModeService = new AdvancedModeService();
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/lib/voice/earcon.ts
|
|
47
|
+
/**
|
|
48
|
+
* Earcon feedback — a short two-tone blip acknowledging a sent message,
|
|
49
|
+
* replacing the old spoken ack phrases. Pure WebAudio: no asset files and
|
|
50
|
+
* no TTS engine required, so the ack works wherever audio output exists.
|
|
51
|
+
*
|
|
52
|
+
* playAck runs inside the send-click user gesture, which also primes the
|
|
53
|
+
* browser's autoplay policy for the TTS audio that follows.
|
|
54
|
+
*
|
|
55
|
+
* Only access browser APIs (window, AudioContext) from playAck — never at
|
|
56
|
+
* module top level — for SSR safety.
|
|
57
|
+
*/
|
|
58
|
+
var ctx = null;
|
|
59
|
+
/** One sine tone with a fast-attack / fast-decay gain envelope. */
|
|
60
|
+
function tone(context, frequency, startAt, durationS) {
|
|
61
|
+
const osc = context.createOscillator();
|
|
62
|
+
const gain = context.createGain();
|
|
63
|
+
osc.type = "sine";
|
|
64
|
+
osc.frequency.value = frequency;
|
|
65
|
+
gain.gain.setValueAtTime(0, startAt);
|
|
66
|
+
gain.gain.linearRampToValueAtTime(.08, startAt + .005);
|
|
67
|
+
gain.gain.linearRampToValueAtTime(0, startAt + durationS);
|
|
68
|
+
osc.connect(gain);
|
|
69
|
+
gain.connect(context.destination);
|
|
70
|
+
osc.start(startAt);
|
|
71
|
+
osc.stop(startAt + durationS + .01);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Play the "message sent" ack: two quick ascending sine tones, total under
|
|
75
|
+
* 200ms. All failures are swallowed — the ack is best-effort feedback and
|
|
76
|
+
* must never surface an error or block the send path.
|
|
77
|
+
*/
|
|
78
|
+
function playAck() {
|
|
79
|
+
if (typeof window === "undefined") return;
|
|
80
|
+
try {
|
|
81
|
+
if (!ctx) {
|
|
82
|
+
const Ctor = window.AudioContext ?? window.webkitAudioContext;
|
|
83
|
+
if (!Ctor) return;
|
|
84
|
+
ctx = new Ctor();
|
|
85
|
+
}
|
|
86
|
+
if (ctx.state === "suspended") ctx.resume().catch(() => {});
|
|
87
|
+
const now = ctx.currentTime;
|
|
88
|
+
tone(ctx, 880, now, .06);
|
|
89
|
+
tone(ctx, 1320, now + .07, .08);
|
|
90
|
+
} catch {}
|
|
91
|
+
}
|
|
92
|
+
//#endregion
|
|
93
|
+
//#region src/lib/voice/sentence-stream.ts
|
|
94
|
+
/**
|
|
95
|
+
* Incremental sentence chunker for streamed TTS. As the assistant reply
|
|
96
|
+
* streams in, the chat layer calls `extractSpeakableChunks` with the whole
|
|
97
|
+
* accumulated buffer plus the offset it has already spoken up to; each
|
|
98
|
+
* returned chunk is a complete sentence (or merged run of short sentences)
|
|
99
|
+
* that can be handed to the speak queue immediately, so audio starts within
|
|
100
|
+
* one sentence of the reply instead of after the full turn.
|
|
101
|
+
*
|
|
102
|
+
* Pure and dependency-free like speakable-text.ts — markdown stripping is
|
|
103
|
+
* NOT done here (playOne applies toSpeakableText per chunk).
|
|
104
|
+
*
|
|
105
|
+
* Known limitations (accepted for v1): abbreviations outside the short
|
|
106
|
+
* guard list below and initials cut early because they look like sentence
|
|
107
|
+
* ends; a decimal split across two deltas ("3." then "14") cuts mid-number
|
|
108
|
+
* when whitespace happens to follow the dot. Both cost a short pause in the
|
|
109
|
+
* audio, never lost text.
|
|
110
|
+
*/
|
|
111
|
+
/**
|
|
112
|
+
* Chunks shorter than this merge forward into the following sentence — a
|
|
113
|
+
* one-word utterance per TTS request wastes a round trip and sounds choppy.
|
|
114
|
+
*/
|
|
115
|
+
var MIN_CHUNK_CHARS = 25;
|
|
116
|
+
/**
|
|
117
|
+
* Best-effort abbreviation guard: a period straight after one of these
|
|
118
|
+
* tokens is almost never a sentence end ("Dr. Smith", "e.g. this"), so the
|
|
119
|
+
* chunker skips the cut. Deliberately short — a missing abbreviation only
|
|
120
|
+
* costs an early cut (short audio pause), a false positive only merges two
|
|
121
|
+
* sentences into one chunk. Matched case-insensitively.
|
|
122
|
+
*/
|
|
123
|
+
var ABBREVIATIONS = new Set([
|
|
124
|
+
"dr",
|
|
125
|
+
"mr",
|
|
126
|
+
"mrs",
|
|
127
|
+
"ms",
|
|
128
|
+
"prof",
|
|
129
|
+
"st",
|
|
130
|
+
"vs",
|
|
131
|
+
"etc",
|
|
132
|
+
"e.g",
|
|
133
|
+
"i.e",
|
|
134
|
+
"approx"
|
|
135
|
+
]);
|
|
136
|
+
/**
|
|
137
|
+
* Abbreviations matched case-SENSITIVELY: lowercase "no" is an ordinary word
|
|
138
|
+
* that legitimately ends sentences ("the answer is no."), while "No. 5" is
|
|
139
|
+
* the numero abbreviation.
|
|
140
|
+
*/
|
|
141
|
+
var CASED_ABBREVIATIONS = new Set(["No"]);
|
|
142
|
+
/**
|
|
143
|
+
* True when the token immediately before the period at `periodIndex` is a
|
|
144
|
+
* known abbreviation. The token is scanned back over letters and interior
|
|
145
|
+
* periods so multi-part abbreviations ("e.g.", "i.e.") match at their final
|
|
146
|
+
* period (their interior periods are never cut candidates — no whitespace
|
|
147
|
+
* follows them).
|
|
148
|
+
*/
|
|
149
|
+
function endsWithAbbreviation(buffer, periodIndex) {
|
|
150
|
+
let start = periodIndex;
|
|
151
|
+
while (start > 0 && /[a-zA-Z.]/.test(buffer[start - 1])) start -= 1;
|
|
152
|
+
const token = buffer.slice(start, periodIndex);
|
|
153
|
+
if (!token) return false;
|
|
154
|
+
return ABBREVIATIONS.has(token.toLowerCase()) || CASED_ABBREVIATIONS.has(token);
|
|
155
|
+
}
|
|
156
|
+
function extractSpeakableChunks(buffer, offset) {
|
|
157
|
+
const chunks = [];
|
|
158
|
+
let nextOffset = offset;
|
|
159
|
+
let chunkStart = offset;
|
|
160
|
+
let inFence = false;
|
|
161
|
+
let i = 0;
|
|
162
|
+
while (i < buffer.length) {
|
|
163
|
+
if (buffer.startsWith("```", i)) {
|
|
164
|
+
inFence = !inFence;
|
|
165
|
+
i += 3;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (i < offset || inFence) {
|
|
169
|
+
i += 1;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
let cut = -1;
|
|
173
|
+
const ch = buffer[i];
|
|
174
|
+
if ((ch === "." || ch === "!" || ch === "?") && i + 1 < buffer.length && /\s/.test(buffer[i + 1])) {
|
|
175
|
+
if (ch !== "." || !endsWithAbbreviation(buffer, i)) cut = i + 1;
|
|
176
|
+
} else if (ch === "\n" && buffer[i + 1] === "\n") cut = i + 2;
|
|
177
|
+
if (cut !== -1) {
|
|
178
|
+
const candidate = buffer.slice(chunkStart, cut).trim();
|
|
179
|
+
if (candidate.length >= MIN_CHUNK_CHARS) {
|
|
180
|
+
chunks.push(candidate);
|
|
181
|
+
chunkStart = cut;
|
|
182
|
+
nextOffset = cut;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
i += 1;
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
chunks,
|
|
189
|
+
nextOffset
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
//#endregion
|
|
193
|
+
//#region src/lib/chat/assistant-error.ts
|
|
194
|
+
/**
|
|
195
|
+
* Map an unknown thrown value to a user-facing string.
|
|
196
|
+
*
|
|
197
|
+
* - 503 / 502 -> "Assistant is not reachable." (+ " Try reconnecting." when
|
|
198
|
+
* `reconnectHint` is set).
|
|
199
|
+
* - 401 -> "Sign-in required."
|
|
200
|
+
* - otherwise -> the error's own `message`, falling back to `fallback`.
|
|
201
|
+
*/
|
|
202
|
+
function mapAssistantError(e, opts = {}) {
|
|
203
|
+
const { fallback = "Something went wrong.", reconnectHint = false } = opts;
|
|
204
|
+
const err = e ?? {};
|
|
205
|
+
if (err.status === 503 || err.status === 502) return reconnectHint ? "Assistant is not reachable. Try reconnecting." : "Assistant is not reachable.";
|
|
206
|
+
if (err.status === 401) return "Sign-in required.";
|
|
207
|
+
return err.message ?? fallback;
|
|
208
|
+
}
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/lib/chat/chat-state.svelte.ts
|
|
211
|
+
var STREAM_TURN_TIMEOUT_MS = 15e4;
|
|
212
|
+
function emptyEndpointState() {
|
|
213
|
+
return {
|
|
214
|
+
sessions: [],
|
|
215
|
+
sessionsLoaded: false,
|
|
216
|
+
sessionsLoading: false,
|
|
217
|
+
sessionsError: "",
|
|
218
|
+
activeSessionId: null
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
var ChatService = class {
|
|
222
|
+
/**
|
|
223
|
+
* Per-endpoint session cache. Reassigned on every mutation so Svelte 5
|
|
224
|
+
* picks up the change. Never mutate the existing Map in place.
|
|
225
|
+
*/
|
|
226
|
+
byEndpoint = new SvelteMap();
|
|
227
|
+
/**
|
|
228
|
+
* Mirrored from `endpointsService.activeId` via `onEndpointChanged()`
|
|
229
|
+
* so the chat layer doesn't have to import the endpoint store.
|
|
230
|
+
*/
|
|
231
|
+
activeEndpointId = "default";
|
|
232
|
+
/** Messages for the currently rendered session only. */
|
|
233
|
+
entries = [];
|
|
234
|
+
entriesLoading = false;
|
|
235
|
+
sending = false;
|
|
236
|
+
error = "";
|
|
237
|
+
/**
|
|
238
|
+
* Text of the most recent send() call that failed before reaching the
|
|
239
|
+
* assistant. Cleared at the start of every send() (success or not) so it
|
|
240
|
+
* only ever reflects the latest failure. Drives the error banner's retry
|
|
241
|
+
* button.
|
|
242
|
+
*/
|
|
243
|
+
lastFailedText = "";
|
|
244
|
+
pendingAssistantText = "";
|
|
245
|
+
pendingToolStates = [];
|
|
246
|
+
pendingPermission = null;
|
|
247
|
+
pendingQuestion = null;
|
|
248
|
+
/**
|
|
249
|
+
* Set true while the SSE event stream is connected. Surfaced by the
|
|
250
|
+
* SessionPicker as a tiny green/gray dot so the operator can see at a
|
|
251
|
+
* glance whether live updates are flowing.
|
|
252
|
+
*/
|
|
253
|
+
liveConnected = false;
|
|
254
|
+
/**
|
|
255
|
+
* Active SSE subscription handle. Reassigned on every endpoint switch.
|
|
256
|
+
* Plain field (not `$state`) — only the chat service touches it.
|
|
257
|
+
*/
|
|
258
|
+
_unsubscribeEvents = null;
|
|
259
|
+
_pendingTurn = null;
|
|
260
|
+
#activeSessionId = derived(() => this.byEndpoint.get(this.activeEndpointId)?.activeSessionId ?? null);
|
|
261
|
+
get activeSessionId() {
|
|
262
|
+
return this.#activeSessionId();
|
|
263
|
+
}
|
|
264
|
+
set activeSessionId($$value) {
|
|
265
|
+
return this.#activeSessionId($$value);
|
|
266
|
+
}
|
|
267
|
+
#toolLog = derived(() => {
|
|
268
|
+
const seen = {};
|
|
269
|
+
const out = [];
|
|
270
|
+
const push = (states, turnKey) => {
|
|
271
|
+
if (!states) return;
|
|
272
|
+
for (const tool of states) {
|
|
273
|
+
if (seen[tool.id]) continue;
|
|
274
|
+
if (!isUserFacingTool(tool)) continue;
|
|
275
|
+
seen[tool.id] = true;
|
|
276
|
+
out.push({
|
|
277
|
+
...tool,
|
|
278
|
+
turnKey
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
for (const entry of this.entries) push(entry.toolStates, entry.id);
|
|
283
|
+
push(this.pendingToolStates, "pending");
|
|
284
|
+
return out;
|
|
285
|
+
});
|
|
286
|
+
get toolLog() {
|
|
287
|
+
return this.#toolLog();
|
|
288
|
+
}
|
|
289
|
+
set toolLog($$value) {
|
|
290
|
+
return this.#toolLog($$value);
|
|
291
|
+
}
|
|
292
|
+
setEndpointState(id, patch) {
|
|
293
|
+
const next = {
|
|
294
|
+
...this.byEndpoint.get(id) ?? emptyEndpointState(),
|
|
295
|
+
...patch
|
|
296
|
+
};
|
|
297
|
+
this.byEndpoint = new SvelteMap(this.byEndpoint).set(id, next);
|
|
298
|
+
return next;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Handle an endpoint switch: load sessions, restore prior or pick
|
|
302
|
+
* newest, fetch messages. Mid-generation switches are blocked.
|
|
303
|
+
*/
|
|
304
|
+
async onEndpointChanged(id) {
|
|
305
|
+
if (this.sending) {
|
|
306
|
+
this.error = "Wait for the current reply to finish before switching.";
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
this.activeEndpointId = id;
|
|
310
|
+
this.entries = [];
|
|
311
|
+
this.error = "";
|
|
312
|
+
await this.loadSessions();
|
|
313
|
+
const state = this.byEndpoint.get(id) ?? emptyEndpointState();
|
|
314
|
+
const sessions = state.sessions ?? [];
|
|
315
|
+
const previous = state.activeSessionId;
|
|
316
|
+
let nextSessionId = null;
|
|
317
|
+
if (previous && sessions.some((s) => s.id === previous)) nextSessionId = previous;
|
|
318
|
+
else if (sessions.length > 0) nextSessionId = sessions[0].id;
|
|
319
|
+
if (nextSessionId !== state.activeSessionId) this.setEndpointState(id, { activeSessionId: nextSessionId });
|
|
320
|
+
if (nextSessionId) await this.openSession(nextSessionId);
|
|
321
|
+
this._resubscribeEvents();
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Tear down any prior SSE subscription and open a new one. Handlers
|
|
325
|
+
* dispatch session.created / updated / deleted into the per-endpoint
|
|
326
|
+
* cache, mirroring out-of-band changes (CLI, other clients).
|
|
327
|
+
*/
|
|
328
|
+
_resubscribeEvents() {
|
|
329
|
+
if (this._unsubscribeEvents) {
|
|
330
|
+
try {
|
|
331
|
+
this._unsubscribeEvents();
|
|
332
|
+
} catch (err) {
|
|
333
|
+
console.warn("[chat] failed to unsubscribe from previous event stream", err);
|
|
334
|
+
}
|
|
335
|
+
this._unsubscribeEvents = null;
|
|
336
|
+
}
|
|
337
|
+
this.liveConnected = false;
|
|
338
|
+
this._unsubscribeEvents = subscribeSessionEvents({
|
|
339
|
+
onCreated: (id) => {
|
|
340
|
+
this._onSessionCreated(id);
|
|
341
|
+
},
|
|
342
|
+
onUpdated: (id, info) => {
|
|
343
|
+
this._onSessionUpdated(id, info);
|
|
344
|
+
},
|
|
345
|
+
onDeleted: (id) => {
|
|
346
|
+
this._onSessionDeleted(id);
|
|
347
|
+
},
|
|
348
|
+
onEvent: (event) => {
|
|
349
|
+
this._onLiveEvent(event);
|
|
350
|
+
},
|
|
351
|
+
onConnect: () => {
|
|
352
|
+
this.liveConnected = true;
|
|
353
|
+
},
|
|
354
|
+
onDisconnect: () => {
|
|
355
|
+
this.liveConnected = false;
|
|
356
|
+
if (this._pendingTurn) this._failPendingTurn(/* @__PURE__ */ new Error("Assistant event stream disconnected."));
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
_toRawEvent(event) {
|
|
361
|
+
return {
|
|
362
|
+
type: event.type,
|
|
363
|
+
properties: event.properties ?? {}
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
_upsertPendingToolState(update) {
|
|
367
|
+
const id = update.callID || `${update.tool}:${this.pendingToolStates.length}`;
|
|
368
|
+
const next = {
|
|
369
|
+
id,
|
|
370
|
+
kind: "tool",
|
|
371
|
+
tool: update.tool,
|
|
372
|
+
status: update.status,
|
|
373
|
+
title: update.title ?? update.tool,
|
|
374
|
+
detail: update.detail ?? "",
|
|
375
|
+
output: update.output ?? "",
|
|
376
|
+
error: update.error ?? "",
|
|
377
|
+
updatedAt: Date.now()
|
|
378
|
+
};
|
|
379
|
+
if (!this.pendingToolStates.find((item) => item.id === id)) {
|
|
380
|
+
this.pendingToolStates = [...this.pendingToolStates, next];
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
this.pendingToolStates = this.pendingToolStates.map((item) => item.id === id ? {
|
|
384
|
+
...item,
|
|
385
|
+
...next
|
|
386
|
+
} : item);
|
|
387
|
+
}
|
|
388
|
+
_upsertPendingStepState(update) {
|
|
389
|
+
const next = {
|
|
390
|
+
id: update.id,
|
|
391
|
+
kind: "step",
|
|
392
|
+
tool: "step",
|
|
393
|
+
status: update.status,
|
|
394
|
+
title: update.title,
|
|
395
|
+
detail: update.detail ?? "",
|
|
396
|
+
output: "",
|
|
397
|
+
error: "",
|
|
398
|
+
updatedAt: Date.now()
|
|
399
|
+
};
|
|
400
|
+
if (!this.pendingToolStates.find((item) => item.id === update.id)) {
|
|
401
|
+
this.pendingToolStates = [...this.pendingToolStates, next];
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
this.pendingToolStates = this.pendingToolStates.map((item) => item.id === update.id ? {
|
|
405
|
+
...item,
|
|
406
|
+
...next
|
|
407
|
+
} : item);
|
|
408
|
+
}
|
|
409
|
+
_resetPendingRenderState() {
|
|
410
|
+
this.pendingAssistantText = "";
|
|
411
|
+
this.pendingToolStates = [];
|
|
412
|
+
this.pendingPermission = null;
|
|
413
|
+
this.pendingQuestion = null;
|
|
414
|
+
}
|
|
415
|
+
_appendAssistantReply(text, toolStates) {
|
|
416
|
+
const assistantEntry = {
|
|
417
|
+
id: crypto.randomUUID(),
|
|
418
|
+
role: "assistant",
|
|
419
|
+
text,
|
|
420
|
+
timestamp: Date.now(),
|
|
421
|
+
...toolStates && toolStates.length > 0 ? { toolStates: [...toolStates] } : {}
|
|
422
|
+
};
|
|
423
|
+
this.entries = [...this.entries, assistantEntry];
|
|
424
|
+
}
|
|
425
|
+
_clearPendingTurn() {
|
|
426
|
+
const pending = this._pendingTurn;
|
|
427
|
+
if (!pending) return null;
|
|
428
|
+
clearTimeout(pending.timeout);
|
|
429
|
+
this._pendingTurn = null;
|
|
430
|
+
return pending;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Speak `text` via auto-TTS iff the browser supports it and the operator
|
|
434
|
+
* has enabled auto-speak. Single guard for spoken replies so the
|
|
435
|
+
* `ttsSupported && ttsAutoEnabled` check lives in one place.
|
|
436
|
+
*/
|
|
437
|
+
maybeSpeak(text) {
|
|
438
|
+
if (!voiceState.ttsSupported || !voiceState.ttsAutoEnabled) return;
|
|
439
|
+
speakText(text);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Finalize a completed turn: append the assistant reply (with any captured
|
|
443
|
+
* tool activity), clear the pending render state, bump the session to the
|
|
444
|
+
* top, auto-speak the reply, and fire the reply notification. Shared by the
|
|
445
|
+
* streaming (`_finishPendingTurn`) and non-streaming (`send`) paths so the
|
|
446
|
+
* sequence — including the answered-question note preservation — exists once.
|
|
447
|
+
*/
|
|
448
|
+
finalizeTurn(args) {
|
|
449
|
+
const raw = args.replyText ?? this.pendingAssistantText;
|
|
450
|
+
const text = raw.trim() || "(no response)";
|
|
451
|
+
if (this.pendingQuestion?.status === "answered" && this.pendingQuestion.message) {
|
|
452
|
+
const questionNote = {
|
|
453
|
+
id: crypto.randomUUID(),
|
|
454
|
+
type: "note",
|
|
455
|
+
label: "Question answered",
|
|
456
|
+
text: this.pendingQuestion.message,
|
|
457
|
+
timestamp: Date.now()
|
|
458
|
+
};
|
|
459
|
+
this.entries = [...this.entries, questionNote];
|
|
460
|
+
}
|
|
461
|
+
const capturedToolStates = this.pendingToolStates.length > 0 ? [...this.pendingToolStates] : void 0;
|
|
462
|
+
this._appendAssistantReply(text, capturedToolStates);
|
|
463
|
+
this._resetPendingRenderState();
|
|
464
|
+
this._bumpSession(args.sessionId);
|
|
465
|
+
if (text !== "(no response)" && !args.suppressSpeech) {
|
|
466
|
+
const remainder = raw.slice(args.spokenOffset ?? 0).trim();
|
|
467
|
+
if (remainder) this.maybeSpeak(remainder);
|
|
468
|
+
}
|
|
469
|
+
notifyAssistantReply(text === "(no response)" ? "" : text);
|
|
470
|
+
}
|
|
471
|
+
_finishPendingTurn(replyText) {
|
|
472
|
+
const pending = this._clearPendingTurn();
|
|
473
|
+
if (!pending) return;
|
|
474
|
+
this.finalizeTurn({
|
|
475
|
+
sessionId: pending.sessionId,
|
|
476
|
+
replyText,
|
|
477
|
+
spokenOffset: pending.spokenOffset
|
|
478
|
+
});
|
|
479
|
+
pending.resolve();
|
|
480
|
+
}
|
|
481
|
+
_failPendingTurn(error) {
|
|
482
|
+
const pending = this._clearPendingTurn();
|
|
483
|
+
if (!pending) return;
|
|
484
|
+
this._resetPendingRenderState();
|
|
485
|
+
pending.reject(error);
|
|
486
|
+
}
|
|
487
|
+
_bumpSession(sessionId) {
|
|
488
|
+
const endpointId = this.activeEndpointId;
|
|
489
|
+
const prev = this.byEndpoint.get(endpointId);
|
|
490
|
+
if (!prev) return;
|
|
491
|
+
const now = Date.now();
|
|
492
|
+
const existing = prev.sessions.find((s) => s.id === sessionId);
|
|
493
|
+
const updated = existing ? {
|
|
494
|
+
...existing,
|
|
495
|
+
updatedAt: now
|
|
496
|
+
} : {
|
|
497
|
+
id: sessionId,
|
|
498
|
+
title: "",
|
|
499
|
+
createdAt: now,
|
|
500
|
+
updatedAt: now
|
|
501
|
+
};
|
|
502
|
+
const rest = prev.sessions.filter((s) => s.id !== sessionId);
|
|
503
|
+
this.setEndpointState(endpointId, { sessions: [updated, ...rest] });
|
|
504
|
+
}
|
|
505
|
+
_onLiveEvent(event) {
|
|
506
|
+
const pending = this._pendingTurn;
|
|
507
|
+
if (!pending) return;
|
|
508
|
+
const raw = this._toRawEvent(event);
|
|
509
|
+
if (pending.endpointId !== this.activeEndpointId) return;
|
|
510
|
+
const snapshot = partSnapshotType(raw);
|
|
511
|
+
if (snapshot?.type === "reasoning") pending.reasoningPartIds.add(snapshot.partID);
|
|
512
|
+
const textDelta = extractTextDelta(raw, pending.sessionId, pending.reasoningPartIds);
|
|
513
|
+
if (textDelta) {
|
|
514
|
+
this.pendingAssistantText += textDelta;
|
|
515
|
+
if (voiceState.ttsSupported && voiceState.ttsAutoEnabled) {
|
|
516
|
+
const { chunks, nextOffset } = extractSpeakableChunks(this.pendingAssistantText, pending.spokenOffset);
|
|
517
|
+
for (const chunk of chunks) speakText(chunk);
|
|
518
|
+
pending.spokenOffset = nextOffset;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
const toolUpdate = extractToolUpdate(raw, pending.sessionId);
|
|
522
|
+
if (toolUpdate) this._upsertPendingToolState(toolUpdate);
|
|
523
|
+
const stepUpdate = extractStepUpdate(raw, pending.sessionId);
|
|
524
|
+
if (stepUpdate) this._upsertPendingStepState(stepUpdate);
|
|
525
|
+
const permissionAsk = extractPermissionAsk(raw, pending.sessionId);
|
|
526
|
+
if (permissionAsk) this.pendingPermission = {
|
|
527
|
+
...permissionAsk,
|
|
528
|
+
status: "pending",
|
|
529
|
+
decision: "",
|
|
530
|
+
message: ""
|
|
531
|
+
};
|
|
532
|
+
const questionAsk = extractQuestionAsk(raw, pending.sessionId);
|
|
533
|
+
if (questionAsk) this.pendingQuestion = {
|
|
534
|
+
...questionAsk,
|
|
535
|
+
status: "pending",
|
|
536
|
+
answers: questionAsk.questions.map(() => ""),
|
|
537
|
+
message: ""
|
|
538
|
+
};
|
|
539
|
+
if (isSessionError(raw, pending.sessionId)) {
|
|
540
|
+
this._failPendingTurn(/* @__PURE__ */ new Error("Assistant session ended unexpectedly."));
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
if (isTurnEnd(raw, pending.sessionId)) this._finishPendingTurn();
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* A session was created out-of-band — prepend to the active endpoint's
|
|
547
|
+
* list if not already known. Do not auto-switch to it: the user owns
|
|
548
|
+
* navigation.
|
|
549
|
+
*/
|
|
550
|
+
_onSessionCreated(sessionId) {
|
|
551
|
+
const endpointId = this.activeEndpointId;
|
|
552
|
+
const prev = this.byEndpoint.get(endpointId) ?? emptyEndpointState();
|
|
553
|
+
if (prev.sessions.some((s) => s.id === sessionId)) return;
|
|
554
|
+
const now = Date.now();
|
|
555
|
+
const summary = {
|
|
556
|
+
id: sessionId,
|
|
557
|
+
title: "",
|
|
558
|
+
createdAt: now,
|
|
559
|
+
updatedAt: now
|
|
560
|
+
};
|
|
561
|
+
this.setEndpointState(endpointId, {
|
|
562
|
+
sessions: [summary, ...prev.sessions],
|
|
563
|
+
sessionsLoaded: true
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* A session was touched out-of-band — patch its updatedAt (and title if
|
|
568
|
+
* the event carries one) and re-sort. Do NOT refetch messages: if the
|
|
569
|
+
* user is viewing this session, leave the in-memory entries alone for
|
|
570
|
+
* v1. A follow-up phase can reconcile message deltas via the assistant
|
|
571
|
+
* event stream.
|
|
572
|
+
*/
|
|
573
|
+
_onSessionUpdated(sessionId, info) {
|
|
574
|
+
const endpointId = this.activeEndpointId;
|
|
575
|
+
const prev = this.byEndpoint.get(endpointId);
|
|
576
|
+
if (!prev) return;
|
|
577
|
+
const idx = prev.sessions.findIndex((s) => s.id === sessionId);
|
|
578
|
+
if (idx === -1) {
|
|
579
|
+
this._onSessionCreated(sessionId);
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
const existing = prev.sessions[idx];
|
|
583
|
+
const sessions = [{
|
|
584
|
+
...existing,
|
|
585
|
+
title: info?.title ?? existing.title,
|
|
586
|
+
updatedAt: info?.updatedAt ?? Date.now()
|
|
587
|
+
}, ...prev.sessions.filter((s) => s.id !== sessionId)];
|
|
588
|
+
sessions.sort((a, b) => b.updatedAt - a.updatedAt);
|
|
589
|
+
this.setEndpointState(endpointId, { sessions });
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* A session was deleted out-of-band. Remove it from the list; if it was
|
|
593
|
+
* the active session, fall back to the newest remaining session (or
|
|
594
|
+
* null) and reload its messages.
|
|
595
|
+
*/
|
|
596
|
+
async _onSessionDeleted(sessionId) {
|
|
597
|
+
const endpointId = this.activeEndpointId;
|
|
598
|
+
const prev = this.byEndpoint.get(endpointId);
|
|
599
|
+
if (!prev) return;
|
|
600
|
+
if (!prev.sessions.some((s) => s.id === sessionId)) return;
|
|
601
|
+
const sessions = prev.sessions.filter((s) => s.id !== sessionId);
|
|
602
|
+
const wasActive = prev.activeSessionId === sessionId;
|
|
603
|
+
const nextActive = wasActive ? sessions[0]?.id ?? null : prev.activeSessionId;
|
|
604
|
+
this.setEndpointState(endpointId, {
|
|
605
|
+
sessions,
|
|
606
|
+
activeSessionId: nextActive
|
|
607
|
+
});
|
|
608
|
+
if (wasActive) {
|
|
609
|
+
this.entries = [];
|
|
610
|
+
if (nextActive) await this.openSession(nextActive);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
/** Mark sessions as stale so the next onEndpointChanged call re-fetches. */
|
|
614
|
+
invalidateSessions(id) {
|
|
615
|
+
this.setEndpointState(id, { sessionsLoaded: false });
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* Sync the active session cursor without loading messages. Used by the
|
|
619
|
+
* advanced-mode page to keep the chat layer's cursor in step with what is
|
|
620
|
+
* displayed in the embedded OpenCode iframe.
|
|
621
|
+
*/
|
|
622
|
+
setActiveSessionId(sessionId) {
|
|
623
|
+
this.setEndpointState(this.activeEndpointId, { activeSessionId: sessionId });
|
|
624
|
+
}
|
|
625
|
+
/** Fetch the session list for the active endpoint. */
|
|
626
|
+
async loadSessions() {
|
|
627
|
+
const id = this.activeEndpointId;
|
|
628
|
+
this.setEndpointState(id, {
|
|
629
|
+
sessionsLoading: true,
|
|
630
|
+
sessionsError: ""
|
|
631
|
+
});
|
|
632
|
+
try {
|
|
633
|
+
const sessions = await listSessions();
|
|
634
|
+
this.setEndpointState(id, {
|
|
635
|
+
sessions,
|
|
636
|
+
sessionsLoaded: true,
|
|
637
|
+
sessionsLoading: false,
|
|
638
|
+
sessionsError: ""
|
|
639
|
+
});
|
|
640
|
+
} catch (e) {
|
|
641
|
+
this.setEndpointState(id, {
|
|
642
|
+
sessionsLoading: false,
|
|
643
|
+
sessionsError: mapAssistantError(e, { fallback: "Failed to load sessions." })
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
/** Select a session and render its messages. */
|
|
648
|
+
async openSession(sessionId) {
|
|
649
|
+
if (this.sending) {
|
|
650
|
+
this.error = "Wait for the current reply to finish before switching.";
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
const endpointId = this.activeEndpointId;
|
|
654
|
+
this.setEndpointState(endpointId, { activeSessionId: sessionId });
|
|
655
|
+
this.entries = [];
|
|
656
|
+
this._resetPendingRenderState();
|
|
657
|
+
this.entriesLoading = true;
|
|
658
|
+
this.error = "";
|
|
659
|
+
try {
|
|
660
|
+
const messages = await getSessionMessages(sessionId);
|
|
661
|
+
if (this.activeEndpointId === endpointId && this.byEndpoint.get(endpointId)?.activeSessionId === sessionId) this.entries = messages;
|
|
662
|
+
} catch (e) {
|
|
663
|
+
this.error = mapAssistantError(e, {
|
|
664
|
+
fallback: "Failed to load messages.",
|
|
665
|
+
reconnectHint: true
|
|
666
|
+
});
|
|
667
|
+
} finally {
|
|
668
|
+
this.entriesLoading = false;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/** Create a new session on the active endpoint and select it. */
|
|
672
|
+
async startNewSession() {
|
|
673
|
+
if (this.sending) {
|
|
674
|
+
this.error = "Wait for the current reply to finish before switching.";
|
|
675
|
+
return null;
|
|
676
|
+
}
|
|
677
|
+
const endpointId = this.activeEndpointId;
|
|
678
|
+
this.error = "";
|
|
679
|
+
try {
|
|
680
|
+
const { id } = await createSession();
|
|
681
|
+
const now = Date.now();
|
|
682
|
+
const summary = {
|
|
683
|
+
id,
|
|
684
|
+
title: "",
|
|
685
|
+
createdAt: now,
|
|
686
|
+
updatedAt: now
|
|
687
|
+
};
|
|
688
|
+
const prev = this.byEndpoint.get(endpointId) ?? emptyEndpointState();
|
|
689
|
+
this.setEndpointState(endpointId, {
|
|
690
|
+
sessions: [summary, ...prev.sessions.filter((s) => s.id !== id)],
|
|
691
|
+
sessionsLoaded: true,
|
|
692
|
+
activeSessionId: id
|
|
693
|
+
});
|
|
694
|
+
this.entries = [];
|
|
695
|
+
this._resetPendingRenderState();
|
|
696
|
+
return id;
|
|
697
|
+
} catch (e) {
|
|
698
|
+
const err = e;
|
|
699
|
+
this.error = `Failed to start session: ${err.message ?? "unknown error"}`;
|
|
700
|
+
return null;
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* Send a message in the active session. If none is active, create one
|
|
705
|
+
* first (matches the "zero sessions" empty-state flow).
|
|
706
|
+
*/
|
|
707
|
+
async send(text) {
|
|
708
|
+
const trimmed = text.trim();
|
|
709
|
+
if (!trimmed) return;
|
|
710
|
+
this.lastFailedText = "";
|
|
711
|
+
if (this.pendingQuestion && this.pendingQuestion.questions.length === 1 && this.sending) {
|
|
712
|
+
await this.answerQuestion(trimmed);
|
|
713
|
+
return;
|
|
714
|
+
}
|
|
715
|
+
if (this.pendingQuestion && this.sending) {
|
|
716
|
+
this.pendingQuestion = {
|
|
717
|
+
...this.pendingQuestion,
|
|
718
|
+
status: "error",
|
|
719
|
+
message: "This question has multiple parts and must be answered with the provided controls."
|
|
720
|
+
};
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
if (this.sending) return;
|
|
724
|
+
let sessionId = this.activeSessionId;
|
|
725
|
+
if (!sessionId) {
|
|
726
|
+
sessionId = await this.startNewSession();
|
|
727
|
+
if (!sessionId) return;
|
|
728
|
+
}
|
|
729
|
+
const userEntry = {
|
|
730
|
+
id: crypto.randomUUID(),
|
|
731
|
+
role: "user",
|
|
732
|
+
text: trimmed,
|
|
733
|
+
timestamp: Date.now()
|
|
734
|
+
};
|
|
735
|
+
this.entries = [...this.entries, userEntry];
|
|
736
|
+
this._resetPendingRenderState();
|
|
737
|
+
this.error = "";
|
|
738
|
+
this.sending = true;
|
|
739
|
+
if (voiceState.ttsAutoEnabled) playAck();
|
|
740
|
+
try {
|
|
741
|
+
if (this._unsubscribeEvents && this.liveConnected) await new Promise((resolve, reject) => {
|
|
742
|
+
const timeout = setTimeout(() => {
|
|
743
|
+
this._failPendingTurn(/* @__PURE__ */ new Error("Timed out waiting for the assistant response."));
|
|
744
|
+
}, STREAM_TURN_TIMEOUT_MS);
|
|
745
|
+
this._pendingTurn = {
|
|
746
|
+
endpointId: this.activeEndpointId,
|
|
747
|
+
sessionId,
|
|
748
|
+
spokenOffset: 0,
|
|
749
|
+
reasoningPartIds: /* @__PURE__ */ new Set(),
|
|
750
|
+
resolve,
|
|
751
|
+
reject,
|
|
752
|
+
timeout
|
|
753
|
+
};
|
|
754
|
+
startChatMessageTurn(sessionId, trimmed).catch((error) => {
|
|
755
|
+
this._failPendingTurn(error instanceof Error ? error : new Error(String(error)));
|
|
756
|
+
});
|
|
757
|
+
});
|
|
758
|
+
else {
|
|
759
|
+
const replyText = (await sendChatMessage(sessionId, trimmed)).parts.filter((p) => p.type === "text" && p.text).map((p) => p.text ?? "").join("");
|
|
760
|
+
this.finalizeTurn({
|
|
761
|
+
sessionId,
|
|
762
|
+
replyText
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
} catch (e) {
|
|
766
|
+
this._resetPendingRenderState();
|
|
767
|
+
this.entries = this.entries.filter((entry) => entry.id !== userEntry.id);
|
|
768
|
+
this.lastFailedText = trimmed;
|
|
769
|
+
const status = e?.status;
|
|
770
|
+
if (status === 503 || status === 502) this.setEndpointState(this.activeEndpointId, { activeSessionId: null });
|
|
771
|
+
this.error = mapAssistantError(e, {
|
|
772
|
+
fallback: "Message failed.",
|
|
773
|
+
reconnectHint: true
|
|
774
|
+
});
|
|
775
|
+
notifyAssistantError();
|
|
776
|
+
} finally {
|
|
777
|
+
this.sending = false;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
/**
|
|
781
|
+
* Conversation-mode entry point — barge-in aware. The composer's submit
|
|
782
|
+
* path keeps calling send() directly (no-op while sending unless a
|
|
783
|
+
* question is pending); a spoken utterance must never be silently dropped
|
|
784
|
+
* by that guard. If a reply is mid-generation, stop it first — stopTurn()
|
|
785
|
+
* halts TTS and finalizes the partial text unspoken — then send the
|
|
786
|
+
* utterance. When a question is pending, send() already routes the text
|
|
787
|
+
* as the answer, so no stop is needed.
|
|
788
|
+
*/
|
|
789
|
+
async sendUtterance(text) {
|
|
790
|
+
const trimmed = text.trim();
|
|
791
|
+
if (!trimmed) return;
|
|
792
|
+
if (this.sending && !this.pendingQuestion) {
|
|
793
|
+
await this.stopTurn();
|
|
794
|
+
for (let i = 0; this.sending && i < 20; i++) await new Promise((resolve) => setTimeout(resolve, 10));
|
|
795
|
+
if (this.sending) {
|
|
796
|
+
this.lastFailedText = trimmed;
|
|
797
|
+
this.error = "The assistant is still finishing the previous reply — use retry to send your message.";
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
await this.send(trimmed);
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Stop the in-flight turn. No-op if nothing is sending. The upstream abort
|
|
805
|
+
* is best-effort — OpenCode may have already finished or the endpoint may
|
|
806
|
+
* be unreachable — the turn is always finished locally regardless so the
|
|
807
|
+
* UI never gets stuck waiting on `sending`.
|
|
808
|
+
*
|
|
809
|
+
* Clearing `_pendingTurn` before resolving is what makes a late SSE
|
|
810
|
+
* turn-end for the aborted turn a no-op: `_onLiveEvent` bails out as soon
|
|
811
|
+
* as `_pendingTurn` is null.
|
|
812
|
+
*/
|
|
813
|
+
async stopTurn() {
|
|
814
|
+
if (!this.sending) return;
|
|
815
|
+
const sessionId = this.activeSessionId;
|
|
816
|
+
if (sessionId) try {
|
|
817
|
+
await abortChatTurn(sessionId);
|
|
818
|
+
} catch {}
|
|
819
|
+
stopSpeaking();
|
|
820
|
+
const pending = this._clearPendingTurn();
|
|
821
|
+
if (this.pendingAssistantText) this.finalizeTurn({
|
|
822
|
+
sessionId: pending?.sessionId ?? sessionId ?? "",
|
|
823
|
+
suppressSpeech: true
|
|
824
|
+
});
|
|
825
|
+
else {
|
|
826
|
+
this._resetPendingRenderState();
|
|
827
|
+
const stoppedNote = {
|
|
828
|
+
id: crypto.randomUUID(),
|
|
829
|
+
type: "note",
|
|
830
|
+
label: "Stopped",
|
|
831
|
+
text: "Stopped.",
|
|
832
|
+
timestamp: Date.now()
|
|
833
|
+
};
|
|
834
|
+
this.entries = [...this.entries, stoppedNote];
|
|
835
|
+
}
|
|
836
|
+
pending?.resolve();
|
|
837
|
+
}
|
|
838
|
+
async answerPermission(reply) {
|
|
839
|
+
if (!this.pendingPermission || this.pendingPermission.status === "submitting") return;
|
|
840
|
+
const current = this.pendingPermission;
|
|
841
|
+
this.pendingPermission = {
|
|
842
|
+
...current,
|
|
843
|
+
status: "submitting",
|
|
844
|
+
decision: reply,
|
|
845
|
+
message: ""
|
|
846
|
+
};
|
|
847
|
+
try {
|
|
848
|
+
await replyChatPermission(current.requestID, reply);
|
|
849
|
+
this.pendingPermission = {
|
|
850
|
+
...current,
|
|
851
|
+
status: "resolved",
|
|
852
|
+
decision: reply,
|
|
853
|
+
message: reply === "once" ? `Allowed ${current.permission} once. Waiting for the assistant to continue...` : reply === "always" ? `Always allowed future matching ${current.permission} requests.` : `Denied ${current.permission}. Waiting for the assistant to continue...`
|
|
854
|
+
};
|
|
855
|
+
} catch (error) {
|
|
856
|
+
const message = error instanceof Error ? error.message : "Failed to record permission reply.";
|
|
857
|
+
this.pendingPermission = {
|
|
858
|
+
...current,
|
|
859
|
+
status: "error",
|
|
860
|
+
decision: reply,
|
|
861
|
+
message
|
|
862
|
+
};
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
setQuestionAnswer(index, answer) {
|
|
866
|
+
if (!this.pendingQuestion) return;
|
|
867
|
+
if (index < 0 || index >= this.pendingQuestion.questions.length) return;
|
|
868
|
+
const answers = [...this.pendingQuestion.answers];
|
|
869
|
+
answers[index] = answer;
|
|
870
|
+
this.pendingQuestion = {
|
|
871
|
+
...this.pendingQuestion,
|
|
872
|
+
answers,
|
|
873
|
+
message: ""
|
|
874
|
+
};
|
|
875
|
+
}
|
|
876
|
+
async answerQuestion(answer) {
|
|
877
|
+
if (!this.pendingQuestion || this.pendingQuestion.status === "submitting") return;
|
|
878
|
+
const current = this.pendingQuestion;
|
|
879
|
+
const answers = current.questions.length === 1 && typeof answer === "string" ? [answer.trim()] : current.answers.map((item) => item.trim());
|
|
880
|
+
if (answers.some((item) => !item)) {
|
|
881
|
+
this.pendingQuestion = {
|
|
882
|
+
...current,
|
|
883
|
+
status: "error",
|
|
884
|
+
message: "Answer every question before submitting."
|
|
885
|
+
};
|
|
886
|
+
return;
|
|
887
|
+
}
|
|
888
|
+
this.pendingQuestion = {
|
|
889
|
+
...current,
|
|
890
|
+
status: "submitting",
|
|
891
|
+
answers,
|
|
892
|
+
message: ""
|
|
893
|
+
};
|
|
894
|
+
try {
|
|
895
|
+
await replyChatQuestion(current.requestID, answers.map((item) => [item]));
|
|
896
|
+
this.pendingQuestion = {
|
|
897
|
+
...current,
|
|
898
|
+
status: "answered",
|
|
899
|
+
answers,
|
|
900
|
+
message: "Answer sent."
|
|
901
|
+
};
|
|
902
|
+
} catch (error) {
|
|
903
|
+
const message = error instanceof Error ? error.message : "Failed to send answer.";
|
|
904
|
+
this.pendingQuestion = {
|
|
905
|
+
...current,
|
|
906
|
+
status: "error",
|
|
907
|
+
answers,
|
|
908
|
+
message
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
async rejectQuestion() {
|
|
913
|
+
if (!this.pendingQuestion || this.pendingQuestion.status === "submitting") return;
|
|
914
|
+
const current = this.pendingQuestion;
|
|
915
|
+
this.pendingQuestion = {
|
|
916
|
+
...current,
|
|
917
|
+
status: "submitting",
|
|
918
|
+
message: ""
|
|
919
|
+
};
|
|
920
|
+
try {
|
|
921
|
+
await rejectChatQuestion(current.requestID);
|
|
922
|
+
this.pendingQuestion = {
|
|
923
|
+
...current,
|
|
924
|
+
status: "rejected",
|
|
925
|
+
message: "Question declined."
|
|
926
|
+
};
|
|
927
|
+
} catch (error) {
|
|
928
|
+
const message = error instanceof Error ? error.message : "Failed to reject question.";
|
|
929
|
+
this.pendingQuestion = {
|
|
930
|
+
...current,
|
|
931
|
+
status: "error",
|
|
932
|
+
message
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
reset() {
|
|
937
|
+
stopSpeaking();
|
|
938
|
+
this._clearPendingTurn();
|
|
939
|
+
this.entries = [];
|
|
940
|
+
this.error = "";
|
|
941
|
+
this.lastFailedText = "";
|
|
942
|
+
this._resetPendingRenderState();
|
|
943
|
+
this.byEndpoint = new SvelteMap();
|
|
944
|
+
if (this._unsubscribeEvents) {
|
|
945
|
+
try {
|
|
946
|
+
this._unsubscribeEvents();
|
|
947
|
+
} catch (err) {
|
|
948
|
+
console.warn("[chat] failed to unsubscribe from event stream during reset", err);
|
|
949
|
+
}
|
|
950
|
+
this._unsubscribeEvents = null;
|
|
951
|
+
}
|
|
952
|
+
this.liveConnected = false;
|
|
953
|
+
}
|
|
954
|
+
};
|
|
955
|
+
var chat = new ChatService();
|
|
956
|
+
registerActivationGuard(() => chat.sending ? "Wait for the current reply to finish before switching." : null);
|
|
957
|
+
onConnectionActivated((id) => chat.onEndpointChanged(id));
|
|
958
|
+
//#endregion
|
|
959
|
+
//#region src/lib/chat/navigation.ts
|
|
960
|
+
function encodeWorkspacePath(path) {
|
|
961
|
+
const bytes = new TextEncoder().encode(path);
|
|
962
|
+
let binary = "";
|
|
963
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
964
|
+
return btoa(binary).replace(/=+$/g, "");
|
|
965
|
+
}
|
|
966
|
+
function currentChatSessionId() {
|
|
967
|
+
return chat.activeSessionId;
|
|
968
|
+
}
|
|
969
|
+
function buildAdvancedPath(sessionId) {
|
|
970
|
+
const params = new URLSearchParams();
|
|
971
|
+
if (sessionId) params.set("session", sessionId);
|
|
972
|
+
const query = params.toString();
|
|
973
|
+
return query ? `/advanced?${query}` : "/advanced";
|
|
974
|
+
}
|
|
975
|
+
function buildChatPath(sessionId, options) {
|
|
976
|
+
const params = new URLSearchParams();
|
|
977
|
+
if (sessionId) params.set("session", sessionId);
|
|
978
|
+
const query = params.toString();
|
|
979
|
+
return query ? `/chat?${query}` : "/chat";
|
|
980
|
+
}
|
|
981
|
+
/**
|
|
982
|
+
* Build the OpenCode web-UI deep link to a specific session. OpenCode scopes its
|
|
983
|
+
* session list by directory, so the route is `/<base64(directory)>/session/<id>`
|
|
984
|
+
* and the `directory` MUST be the workspace the session actually lives in —
|
|
985
|
+
* resolve it from the session record (`session.directory`), never hardcode it.
|
|
986
|
+
* Without a session id or directory, fall back to the base URL (OpenCode opens
|
|
987
|
+
* its default view) so we never deep-link a session the embedded app can't find.
|
|
988
|
+
*/
|
|
989
|
+
function buildAdvancedIframeUrl(baseUrl, sessionId, directory) {
|
|
990
|
+
if (!sessionId || !directory) return baseUrl;
|
|
991
|
+
return `${baseUrl.replace(/\/$/, "")}/${encodeWorkspacePath(directory)}/session/${encodeURIComponent(sessionId)}`;
|
|
992
|
+
}
|
|
993
|
+
//#endregion
|
|
994
|
+
//#region ../ui-kit/src/lib/components/icons/IconAdvanced.svelte
|
|
995
|
+
function IconAdvanced($$renderer, $$props) {
|
|
996
|
+
let { size = 20, class: className = "" } = $$props;
|
|
997
|
+
$$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><path d="M4 17l4-4-4-4"></path><path d="M12 17h8"></path></svg>`);
|
|
998
|
+
}
|
|
999
|
+
//#endregion
|
|
1000
|
+
//#region src/lib/assistant-endpoint.ts
|
|
1001
|
+
function isLocalAssistantUrl(url) {
|
|
1002
|
+
if (!url) return true;
|
|
1003
|
+
try {
|
|
1004
|
+
const host = new URL(url).hostname;
|
|
1005
|
+
return host === "localhost" || host === "127.0.0.1" || host === "::1" || host === "host.docker.internal";
|
|
1006
|
+
} catch {
|
|
1007
|
+
return true;
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
//#endregion
|
|
1011
|
+
//#region src/lib/session-title.ts
|
|
1012
|
+
var DEFAULT_TITLE_RE = /^New session - (\d{4}-\d{2}-\d{2}T[0-9:.]+Z?)$/;
|
|
1013
|
+
/** Resolve a session's display title. */
|
|
1014
|
+
function resolveSessionTitle(title) {
|
|
1015
|
+
const trimmed = (title ?? "").trim();
|
|
1016
|
+
if (!trimmed) return "Untitled session";
|
|
1017
|
+
const match = DEFAULT_TITLE_RE.exec(trimmed);
|
|
1018
|
+
if (match) {
|
|
1019
|
+
const ts = Date.parse(match[1]);
|
|
1020
|
+
if (!Number.isNaN(ts)) return formatDateTime(ts);
|
|
1021
|
+
}
|
|
1022
|
+
return trimmed;
|
|
1023
|
+
}
|
|
1024
|
+
//#endregion
|
|
1025
|
+
//#region src/lib/components/chat/SessionTitle.svelte
|
|
1026
|
+
function SessionTitle($$renderer, $$props) {
|
|
1027
|
+
$$renderer.component(($$renderer) => {
|
|
1028
|
+
let { title } = $$props;
|
|
1029
|
+
const display = derived(() => resolveSessionTitle(title));
|
|
1030
|
+
$$renderer.push(`<!---->${escape_html(display())}`);
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1033
|
+
//#endregion
|
|
1034
|
+
//#region src/lib/components/chat/SessionList.svelte
|
|
1035
|
+
function SessionList($$renderer, $$props) {
|
|
1036
|
+
$$renderer.component(($$renderer) => {
|
|
1037
|
+
/** Called after a session is opened or started (e.g. to close the drawer). */
|
|
1038
|
+
/** Hide the internal new-session button (use when the parent already provides one). */
|
|
1039
|
+
let { onChosen, hideNewBtn = false } = $$props;
|
|
1040
|
+
const SESSION_LIST_CAP = 50;
|
|
1041
|
+
const active = derived(() => endpointsService.active);
|
|
1042
|
+
const endpointState = derived(() => active() ? chat.byEndpoint.get(active().id) ?? null : null);
|
|
1043
|
+
const sessions = derived(() => endpointState()?.sessions ?? []);
|
|
1044
|
+
const loading = derived(() => endpointState()?.sessionsLoading ?? false);
|
|
1045
|
+
const error = derived(() => endpointState()?.sessionsError ?? "");
|
|
1046
|
+
const activeSessionId = derived(() => chat.activeSessionId);
|
|
1047
|
+
const visibleSessions = derived(() => sessions().slice(0, SESSION_LIST_CAP));
|
|
1048
|
+
const overflowCount = derived(() => Math.max(0, sessions().length - SESSION_LIST_CAP));
|
|
1049
|
+
$$renderer.push(`<div class="session-body svelte-1o6rxhb">`);
|
|
1050
|
+
if (chat.sending) {
|
|
1051
|
+
$$renderer.push("<!--[0-->");
|
|
1052
|
+
$$renderer.push(`<div class="notice svelte-1o6rxhb">Wait for the current reply to finish before switching.</div>`);
|
|
1053
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1054
|
+
$$renderer.push(`<!--]--> `);
|
|
1055
|
+
if (!endpointState() || loading()) {
|
|
1056
|
+
$$renderer.push("<!--[0-->");
|
|
1057
|
+
$$renderer.push(`<div class="empty svelte-1o6rxhb">`);
|
|
1058
|
+
Spinner($$renderer, { size: 12 });
|
|
1059
|
+
$$renderer.push(`<!----><span>Loading sessions…</span></div>`);
|
|
1060
|
+
} else if (error()) {
|
|
1061
|
+
$$renderer.push("<!--[1-->");
|
|
1062
|
+
$$renderer.push(`<div class="list-error svelte-1o6rxhb"><span class="svelte-1o6rxhb">${escape_html(error())}</span> <button type="button" class="retry-btn svelte-1o6rxhb">Retry</button></div>`);
|
|
1063
|
+
} else if (sessions().length === 0) {
|
|
1064
|
+
$$renderer.push("<!--[2-->");
|
|
1065
|
+
$$renderer.push(`<div class="empty svelte-1o6rxhb">No sessions yet. Start the first one.</div>`);
|
|
1066
|
+
} else {
|
|
1067
|
+
$$renderer.push("<!--[-1-->");
|
|
1068
|
+
$$renderer.push(`<div class="session-list svelte-1o6rxhb" role="group" aria-label="Sessions"><!--[-->`);
|
|
1069
|
+
const each_array = ensure_array_like(visibleSessions());
|
|
1070
|
+
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
|
1071
|
+
let s = each_array[$$index];
|
|
1072
|
+
$$renderer.push(`<button type="button"${attr_class("list-item session-item svelte-1o6rxhb", void 0, { "active": s.id === activeSessionId() })}${attr("aria-current", s.id === activeSessionId() ? "true" : void 0)}${attr("disabled", chat.sending, true)}${attr("title", formatDateTime(s.updatedAt))}><span class="item-text svelte-1o6rxhb"><span class="item-label svelte-1o6rxhb">`);
|
|
1073
|
+
SessionTitle($$renderer, { title: s.title });
|
|
1074
|
+
$$renderer.push(`<!---->`);
|
|
1075
|
+
if (s.id === activeSessionId()) {
|
|
1076
|
+
$$renderer.push("<!--[0-->");
|
|
1077
|
+
$$renderer.push(`<span class="sr-only svelte-1o6rxhb">(current)</span>`);
|
|
1078
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1079
|
+
$$renderer.push(`<!--]--></span> <span class="item-meta svelte-1o6rxhb">${escape_html(formatRelativeTime(s.updatedAt))}</span></span></button>`);
|
|
1080
|
+
}
|
|
1081
|
+
$$renderer.push(`<!--]--></div> `);
|
|
1082
|
+
if (overflowCount() > 0) {
|
|
1083
|
+
$$renderer.push("<!--[0-->");
|
|
1084
|
+
$$renderer.push(`<button type="button" class="show-all svelte-1o6rxhb">Show all (${escape_html(overflowCount())} more)</button>`);
|
|
1085
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1086
|
+
$$renderer.push(`<!--]-->`);
|
|
1087
|
+
}
|
|
1088
|
+
$$renderer.push(`<!--]--> `);
|
|
1089
|
+
if (!hideNewBtn) {
|
|
1090
|
+
$$renderer.push("<!--[0-->");
|
|
1091
|
+
$$renderer.push(`<div class="divider svelte-1o6rxhb"></div> <button type="button" class="list-item new-btn svelte-1o6rxhb"${attr("disabled", chat.sending, true)}><span class="check svelte-1o6rxhb" aria-hidden="true">+</span> <span class="item-text svelte-1o6rxhb"><span class="item-label svelte-1o6rxhb">New session</span></span></button>`);
|
|
1092
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1093
|
+
$$renderer.push(`<!--]--></div>`);
|
|
1094
|
+
});
|
|
1095
|
+
}
|
|
1096
|
+
//#endregion
|
|
1097
|
+
//#region ../ui-kit/src/lib/components/icons/IconConversations.svelte
|
|
1098
|
+
function IconConversations($$renderer, $$props) {
|
|
1099
|
+
let { size = 20, class: className = "" } = $$props;
|
|
1100
|
+
$$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><path d="M4 7h16" opacity="0.9"></path><path d="M4 12h11" opacity="0.65"></path><path d="M4 17h7.5" opacity="0.5"></path></svg>`);
|
|
1101
|
+
}
|
|
1102
|
+
//#endregion
|
|
1103
|
+
//#region ../ui-kit/src/lib/components/icons/IconSoundOff.svelte
|
|
1104
|
+
function IconSoundOff($$renderer, $$props) {
|
|
1105
|
+
let { size = 20, class: className = "" } = $$props;
|
|
1106
|
+
$$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line></svg>`);
|
|
1107
|
+
}
|
|
1108
|
+
//#endregion
|
|
1109
|
+
//#region ../ui-kit/src/lib/components/icons/IconSoundOn.svelte
|
|
1110
|
+
function IconSoundOn($$renderer, $$props) {
|
|
1111
|
+
let { size = 20, class: className = "" } = $$props;
|
|
1112
|
+
$$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr_class(`s-icon ${stringify(className)}`)}><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path><path d="M19.07 4.93a10 10 0 0 1 0 14.14"></path></svg>`);
|
|
1113
|
+
}
|
|
1114
|
+
//#endregion
|
|
1115
|
+
//#region ../ui-kit/src/lib/components/icons/IconStop.svelte
|
|
1116
|
+
function IconStop($$renderer, $$props) {
|
|
1117
|
+
let { size = 20, class: className = "" } = $$props;
|
|
1118
|
+
$$renderer.push(`<svg aria-hidden="true"${attr("width", size)}${attr("height", size)} viewBox="0 0 24 24"${attr_class(`s-icon ${stringify(className)}`)}><rect fill="currentColor" stroke="none" x="7" y="7" width="10" height="10" rx="1.4"></rect></svg>`);
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
export { IconAdvanced as I, SessionList as S, IconConversations as a, IconSoundOff as b, IconSoundOn as c, IconStop as d, advancedModeService as e, buildAdvancedIframeUrl as f, buildAdvancedPath as g, buildChatPath as h, chat as i, currentChatSessionId as j, isLocalAssistantUrl as k, resolveSessionTitle as r };
|
|
1122
|
+
//# sourceMappingURL=IconStop-DFbhUtaJ.js.map
|