@juspay/shooter 1.18.0 → 1.20.0
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/client/_app/immutable/assets/{0.NV8k8wxG.css → 0.BwNtE8TX.css} +1 -1
- package/build/client/_app/immutable/assets/0.BwNtE8TX.css.br +0 -0
- package/build/client/_app/immutable/assets/{0.NV8k8wxG.css.gz → 0.BwNtE8TX.css.gz} +0 -0
- package/build/client/_app/immutable/assets/11.F10lvwyh.css +1 -0
- package/build/client/_app/immutable/assets/11.F10lvwyh.css.br +0 -0
- package/build/client/_app/immutable/assets/11.F10lvwyh.css.gz +0 -0
- package/build/client/_app/immutable/assets/8.BYgAX7hR.css +1 -0
- package/build/client/_app/immutable/assets/8.BYgAX7hR.css.br +0 -0
- package/build/client/_app/immutable/assets/8.BYgAX7hR.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.DV6pZunn.css +1 -0
- package/build/client/_app/immutable/assets/9.DV6pZunn.css.br +0 -0
- package/build/client/_app/immutable/assets/9.DV6pZunn.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{DZQMsHM5.js → 2rBV5OkJ.js} +1 -1
- package/build/client/_app/immutable/chunks/2rBV5OkJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/2rBV5OkJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B9WQy_3X.js → BB2l8o4X.js} +1 -1
- package/build/client/_app/immutable/chunks/BB2l8o4X.js.br +0 -0
- package/build/client/_app/immutable/chunks/BB2l8o4X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cg3dlX05.js → BPDiEZo0.js} +2 -2
- package/build/client/_app/immutable/chunks/BPDiEZo0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BPDiEZo0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C_9BZILB.js → BcpydfqI.js} +1 -1
- package/build/client/_app/immutable/chunks/BcpydfqI.js.br +0 -0
- package/build/client/_app/immutable/chunks/BcpydfqI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BRqaaL5D.js → BvmdJful.js} +1 -1
- package/build/client/_app/immutable/chunks/BvmdJful.js.br +0 -0
- package/build/client/_app/immutable/chunks/BvmdJful.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C_YNQL8b.js +3 -0
- package/build/client/_app/immutable/chunks/C_YNQL8b.js.br +0 -0
- package/build/client/_app/immutable/chunks/C_YNQL8b.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C5VOyQCG.js → ClIPTXf3.js} +1 -1
- package/build/client/_app/immutable/chunks/ClIPTXf3.js.br +0 -0
- package/build/client/_app/immutable/chunks/ClIPTXf3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{8lO1IL7u.js → DIZ3Qst5.js} +1 -1
- package/build/client/_app/immutable/chunks/DIZ3Qst5.js.br +0 -0
- package/build/client/_app/immutable/chunks/{8lO1IL7u.js.gz → DIZ3Qst5.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/{DJvX78LW.js → DT4H19pV.js} +1 -1
- package/build/client/_app/immutable/chunks/DT4H19pV.js.br +0 -0
- package/build/client/_app/immutable/chunks/DT4H19pV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DYuMZGL5.js → DWmC0QM7.js} +1 -1
- package/build/client/_app/immutable/chunks/DWmC0QM7.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWmC0QM7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/J5-Cr5oR.js +6 -0
- package/build/client/_app/immutable/chunks/J5-Cr5oR.js.br +0 -0
- package/build/client/_app/immutable/chunks/J5-Cr5oR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DZvnhU_8.js → ZS5XYDx_.js} +2 -2
- package/build/client/_app/immutable/chunks/ZS5XYDx_.js.br +0 -0
- package/build/client/_app/immutable/chunks/ZS5XYDx_.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.Bd-DfeJi.js +2 -0
- package/build/client/_app/immutable/entry/app.Bd-DfeJi.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Bd-DfeJi.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.evvp4tX7.js +1 -0
- package/build/client/_app/immutable/entry/start.evvp4tX7.js.br +2 -0
- package/build/client/_app/immutable/entry/start.evvp4tX7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Bl-1LQWM.js +10 -0
- package/build/client/_app/immutable/nodes/0.Bl-1LQWM.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Bl-1LQWM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.C4eFlqSB.js → 1.DT4dq6Ay.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DT4dq6Ay.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DT4dq6Ay.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.Bs362gyb.js → 10.CF7RGXpe.js} +2 -2
- package/build/client/_app/immutable/nodes/10.CF7RGXpe.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.CF7RGXpe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.BV_G7yLI.js +2 -0
- package/build/client/_app/immutable/nodes/11.BV_G7yLI.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BV_G7yLI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.CdC092Za.js → 2.DcRhsjYp.js} +2 -2
- package/build/client/_app/immutable/nodes/2.DcRhsjYp.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DcRhsjYp.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.Dhf4ZWW0.js → 3.0MMe3oxR.js} +3 -3
- package/build/client/_app/immutable/nodes/3.0MMe3oxR.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.0MMe3oxR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.BSVqdrrD.js → 4.CBX9A3ka.js} +2 -2
- package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.Cfj35gpY.js → 5.DIVKuZc9.js} +1 -1
- package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.B3SEB_li.js → 6.ComiWlV6.js} +1 -1
- package/build/client/_app/immutable/nodes/6.ComiWlV6.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.ComiWlV6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.DV8cJ1lX.js → 7.vkPx1kVP.js} +1 -1
- package/build/client/_app/immutable/nodes/7.vkPx1kVP.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.vkPx1kVP.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Bmr3sWbS.js +1 -0
- package/build/client/_app/immutable/nodes/8.Bmr3sWbS.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Bmr3sWbS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CAJucyeI.js +2 -0
- package/build/client/_app/immutable/nodes/9.CAJucyeI.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CAJucyeI.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-Cd7jY0a7.js → 0-DDGB6CRT.js} +4 -4
- package/build/server/chunks/{0-Cd7jY0a7.js.map → 0-DDGB6CRT.js.map} +1 -1
- package/build/server/chunks/1-DEjonQXD.js +9 -0
- package/build/server/chunks/{1-C4BOGoJY.js.map → 1-DEjonQXD.js.map} +1 -1
- package/build/server/chunks/10-BK1kiiiw.js +9 -0
- package/build/server/chunks/10-BK1kiiiw.js.map +1 -0
- package/build/server/chunks/11-CJPjkEF3.js +9 -0
- package/build/server/chunks/11-CJPjkEF3.js.map +1 -0
- package/build/server/chunks/{2-Ba0mNwJ6.js → 2-RLnhlWh5.js} +3 -3
- package/build/server/chunks/{2-Ba0mNwJ6.js.map → 2-RLnhlWh5.js.map} +1 -1
- package/build/server/chunks/{3-Pg8t1uJU.js → 3-Dd4pJBqZ.js} +3 -3
- package/build/server/chunks/{3-Pg8t1uJU.js.map → 3-Dd4pJBqZ.js.map} +1 -1
- package/build/server/chunks/{4-BtYdKCVW.js → 4-Bb5VFhsO.js} +3 -3
- package/build/server/chunks/{4-BtYdKCVW.js.map → 4-Bb5VFhsO.js.map} +1 -1
- package/build/server/chunks/{5-CvJK3PiH.js → 5-oNoWuIsn.js} +3 -3
- package/build/server/chunks/{5-CvJK3PiH.js.map → 5-oNoWuIsn.js.map} +1 -1
- package/build/server/chunks/6-DdRMnKNa.js +9 -0
- package/build/server/chunks/{6-D8xbnTSo.js.map → 6-DdRMnKNa.js.map} +1 -1
- package/build/server/chunks/7-vLOMMetm.js +9 -0
- package/build/server/chunks/{7-CkVK06S0.js.map → 7-vLOMMetm.js.map} +1 -1
- package/build/server/chunks/8-rJyiQLFs.js +9 -0
- package/build/server/chunks/8-rJyiQLFs.js.map +1 -0
- package/build/server/chunks/9-CVSNNYED.js +9 -0
- package/build/server/chunks/9-CVSNNYED.js.map +1 -0
- package/build/server/chunks/Banner-BgaAs1rs.js +90 -0
- package/build/server/chunks/Banner-BgaAs1rs.js.map +1 -0
- package/build/server/chunks/{Button-B5dU-ntz.js → Button-D0hZ7JYt.js} +2 -2
- package/build/server/chunks/Button-D0hZ7JYt.js.map +1 -0
- package/build/server/chunks/{Icon-C7Ml3GX6.js → Icon-D0GBnDcs.js} +3 -3
- package/build/server/chunks/Icon-D0GBnDcs.js.map +1 -0
- package/build/server/chunks/{Input-CPGO0sbS.js → Input-OmIiydSx.js} +2 -2
- package/build/server/chunks/Input-OmIiydSx.js.map +1 -0
- package/build/server/chunks/{Pill-CcrtCejm.js → Pill-4xJ-VhAA.js} +3 -3
- package/build/server/chunks/Pill-4xJ-VhAA.js.map +1 -0
- package/build/server/chunks/{Shimmer-C5jkvGr1.js → Shimmer-Dw2uvTC1.js} +2 -2
- package/build/server/chunks/Shimmer-Dw2uvTC1.js.map +1 -0
- package/build/server/chunks/{_error.svelte-CSIxs-ab.js → _error.svelte-CZnkxeLr.js} +8 -8
- package/build/server/chunks/_error.svelte-CZnkxeLr.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-noB4j-v2.js → _layout.svelte-DfgNGGiM.js} +16 -11
- package/build/server/chunks/_layout.svelte-DfgNGGiM.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DnTpPnPR.js → _page.svelte-BLo2v_8E.js} +7 -88
- package/build/server/chunks/_page.svelte-BLo2v_8E.js.map +1 -0
- package/build/server/chunks/_page.svelte-BTlfUsBp.js +43 -0
- package/build/server/chunks/_page.svelte-BTlfUsBp.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BV0XyYJZ.js → _page.svelte-BX2FMgSg.js} +4 -4
- package/build/server/chunks/_page.svelte-BX2FMgSg.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BUkm2304.js → _page.svelte-C7B0qdrC.js} +5 -5
- package/build/server/chunks/_page.svelte-C7B0qdrC.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Dmg-RFCg.js → _page.svelte-CE7COWnF.js} +7 -7
- package/build/server/chunks/_page.svelte-CE7COWnF.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BfB8maoc.js → _page.svelte-CWsjjd4l.js} +9 -9
- package/build/server/chunks/_page.svelte-CWsjjd4l.js.map +1 -0
- package/build/server/chunks/_page.svelte-D5S2hkBk.js +104 -0
- package/build/server/chunks/_page.svelte-D5S2hkBk.js.map +1 -0
- package/build/server/chunks/{_page.svelte-B6qyh-K-.js → _page.svelte-D_Ey8QRG.js} +11 -11
- package/build/server/chunks/_page.svelte-D_Ey8QRG.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C60lAagP.js → _page.svelte-dabsQl9c.js} +210 -9
- package/build/server/chunks/_page.svelte-dabsQl9c.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DuzZr5dA.js → _page.svelte-tBuIq8Pg.js} +11 -11
- package/build/server/chunks/_page.svelte-tBuIq8Pg.js.map +1 -0
- package/build/server/chunks/{_server.ts-CyjDrcZN.js → _server.ts-AnBXfZXh.js} +10 -2
- package/build/server/chunks/_server.ts-AnBXfZXh.js.map +1 -0
- package/build/server/chunks/_server.ts-B-evHL2q.js +13 -0
- package/build/server/chunks/_server.ts-B-evHL2q.js.map +1 -0
- package/build/server/chunks/_server.ts-B2wIgsW4.js +95 -0
- package/build/server/chunks/_server.ts-B2wIgsW4.js.map +1 -0
- package/build/server/chunks/_server.ts-BaaY7Z9D.js +77 -0
- package/build/server/chunks/_server.ts-BaaY7Z9D.js.map +1 -0
- package/build/server/chunks/_server.ts-C0317RBD.js +57 -0
- package/build/server/chunks/_server.ts-C0317RBD.js.map +1 -0
- package/build/server/chunks/{_server.ts-Bu3s5hfv.js → _server.ts-CJGyN8mw.js} +18 -10
- package/build/server/chunks/_server.ts-CJGyN8mw.js.map +1 -0
- package/build/server/chunks/_server.ts-CVPZOpiv.js +23 -0
- package/build/server/chunks/_server.ts-CVPZOpiv.js.map +1 -0
- package/build/server/chunks/{_server.ts-DZgfQKiH.js → _server.ts-D9ir7u24.js} +2 -2
- package/build/server/chunks/{_server.ts-DZgfQKiH.js.map → _server.ts-D9ir7u24.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DZP2lhaY.js → _server.ts-DEx9-epI.js} +20 -8
- package/build/server/chunks/_server.ts-DEx9-epI.js.map +1 -0
- package/build/server/chunks/{_server.ts-BA_uWcPw.js → _server.ts-DKNIsQeH.js} +6 -4
- package/build/server/chunks/_server.ts-DKNIsQeH.js.map +1 -0
- package/build/server/chunks/_server.ts-DkZX_O9a.js +39 -0
- package/build/server/chunks/_server.ts-DkZX_O9a.js.map +1 -0
- package/build/server/chunks/_server.ts-DpRr0Tfh.js +68 -0
- package/build/server/chunks/_server.ts-DpRr0Tfh.js.map +1 -0
- package/build/server/chunks/{_server.ts-CwAjt91u.js → _server.ts-Dz9Jd9Jh.js} +6 -4
- package/build/server/chunks/{_server.ts-CwAjt91u.js.map → _server.ts-Dz9Jd9Jh.js.map} +1 -1
- package/build/server/chunks/_server.ts-Mttr0-Sl.js +48 -0
- package/build/server/chunks/_server.ts-Mttr0-Sl.js.map +1 -0
- package/build/server/chunks/{_server.ts-Bjbr7glm.js → _server.ts-QN-Bo5ql.js} +12 -5
- package/build/server/chunks/_server.ts-QN-Bo5ql.js.map +1 -0
- package/build/server/chunks/{_server.ts-BrqaMMAa.js → _server.ts-W6i3EnGX.js} +29 -6
- package/build/server/chunks/_server.ts-W6i3EnGX.js.map +1 -0
- package/build/server/chunks/{_server.ts-DZ5naqSL.js → _server.ts-bk_EeAdY.js} +6 -2
- package/build/server/chunks/_server.ts-bk_EeAdY.js.map +1 -0
- package/build/server/chunks/_server.ts-jtqWDWcf.js +45 -0
- package/build/server/chunks/_server.ts-jtqWDWcf.js.map +1 -0
- package/build/server/chunks/{cache-Me3zUAaD.js → cache-BlMaDsHi.js} +2 -2
- package/build/server/chunks/cache-BlMaDsHi.js.map +1 -0
- package/build/server/chunks/{client-CfNnl32g.js → client-Ds1brw-8.js} +4 -4
- package/build/server/chunks/{client-CfNnl32g.js.map → client-Ds1brw-8.js.map} +1 -1
- package/build/server/chunks/client2-DngLdcUc.js +7 -0
- package/build/server/chunks/{client2-DDP30_vY.js.map → client2-DngLdcUc.js.map} +1 -1
- package/build/server/chunks/coordinator-DMU_ADXf.js +530 -0
- package/build/server/chunks/coordinator-DMU_ADXf.js.map +1 -0
- package/build/server/chunks/guest-registry-t0-7Zv5q.js +39 -0
- package/build/server/chunks/guest-registry-t0-7Zv5q.js.map +1 -0
- package/build/server/chunks/{index-CJrGuxuM.js → index-CoYB03g7.js} +2 -2
- package/build/server/chunks/{index-CJrGuxuM.js.map → index-CoYB03g7.js.map} +1 -1
- package/build/server/chunks/{index-server--49oHtA0.js → index-server-Bq3cnK69.js} +2 -2
- package/build/server/chunks/{index-server--49oHtA0.js.map → index-server-Bq3cnK69.js.map} +1 -1
- package/build/server/chunks/{index2-MY7PXeAc.js → index2-dSGQ9Eaa.js} +2 -2
- package/build/server/chunks/{index2-MY7PXeAc.js.map → index2-dSGQ9Eaa.js.map} +1 -1
- package/build/server/chunks/{pty-manager-DmNSCKAr.js → pty-manager-CkZNoW1t.js} +7 -2
- package/build/server/chunks/pty-manager-CkZNoW1t.js.map +1 -0
- package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -1
- package/build/server/chunks/{registry-Kcw2UCMv.js → registry-D4J_CuzW.js} +2 -2
- package/build/server/chunks/registry-D4J_CuzW.js.map +1 -0
- package/build/server/chunks/{root-xvQIR1Bt.js → root-D4IoFC8F.js} +2 -2
- package/build/server/chunks/root-D4IoFC8F.js.map +1 -0
- package/build/server/chunks/share-auth-BS7JuiHf.js +27 -0
- package/build/server/chunks/share-auth-BS7JuiHf.js.map +1 -0
- package/build/server/chunks/share-store-B9jMpVg0.js +127 -0
- package/build/server/chunks/share-store-B9jMpVg0.js.map +1 -0
- package/build/server/chunks/{state.svelte-RCtlkrNH.js → state.svelte-CmHqngc_.js} +3 -3
- package/build/server/chunks/{state.svelte-RCtlkrNH.js.map → state.svelte-CmHqngc_.js.map} +1 -1
- package/build/server/chunks/{stores-C-LqoonT.js → stores-CRYxfF0o.js} +4 -4
- package/build/server/chunks/stores-CRYxfF0o.js.map +1 -0
- package/build/server/chunks/super-session-handler-DPyxFgmz.js +22 -0
- package/build/server/chunks/super-session-handler-DPyxFgmz.js.map +1 -0
- package/build/server/index.js +4 -4
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +101 -22
- package/build/server/manifest.js.map +1 -1
- package/package.json +2 -2
- package/scripts/e2e-all-features.sh +41 -2
- package/server.ts +33 -3
- package/src/lib/modules/client/terminal/ShareGate.svelte +96 -0
- package/src/lib/modules/client/terminal/ShareSheet.svelte +395 -0
- package/src/lib/modules/client/terminal/xterm-wrapper.ts +19 -2
- package/src/lib/modules/server/sos/coordinator.ts +492 -0
- package/src/lib/modules/server/sos/policy-gate.ts +56 -0
- package/src/lib/modules/server/sos/relay-store.ts +159 -0
- package/src/lib/modules/server/terminal/pty-input.ts +37 -0
- package/src/lib/modules/server/terminal/pty-manager.ts +6 -0
- package/src/lib/modules/server/terminal/share-auth.ts +37 -0
- package/src/lib/modules/server/terminal/share-store.ts +172 -0
- package/src/lib/modules/server/ws/guest-registry.ts +49 -0
- package/src/lib/modules/server/ws/server.ts +28 -4
- package/src/lib/modules/server/ws/session-handler.ts +24 -5
- package/src/lib/modules/server/ws/super-session-handler.ts +200 -0
- package/src/lib/modules/server/ws/terminal-handler.ts +21 -2
- package/src/lib/modules/server/ws/ticket-store.ts +18 -10
- package/src/lib/types/generated/Client.ts +25 -1
- package/src/lib/types/generated/Share.ts +404 -0
- package/src/lib/types/generated/WsProtocol.ts +73 -2
- package/src/lib/types/generated/index.ts +1 -0
- package/src/lib/types/index.ts +2 -1
- package/src/lib/types/sos.ts +134 -0
- package/src/lib/types/terminal-client.ts +19 -2
- package/src/lib/types/ws.ts +1 -0
- package/src/routes/+layout.svelte +9 -2
- package/src/routes/api/sos/+server.ts +36 -0
- package/src/routes/api/sos/[id]/+server.ts +55 -0
- package/src/routes/api/sos/[id]/inject/+server.ts +44 -0
- package/src/routes/api/sos/[id]/members/+server.ts +47 -0
- package/src/routes/api/sos/[id]/members/[mid]/+server.ts +17 -0
- package/src/routes/api/sos/[id]/rules/+server.ts +85 -0
- package/src/routes/api/terminals/[id]/+server.ts +14 -3
- package/src/routes/api/terminals/[id]/paste-image/+server.ts +8 -4
- package/src/routes/api/terminals/[id]/resize/+server.ts +8 -4
- package/src/routes/api/terminals/[id]/share/+server.ts +98 -0
- package/src/routes/api/terminals/[id]/share/auth/+server.ts +81 -0
- package/src/routes/api/terminals/[id]/share/status/+server.ts +11 -0
- package/src/routes/api/ws-ticket/+server.ts +26 -5
- package/src/routes/sos/+page.svelte +195 -0
- package/src/routes/sos/[id]/+page.svelte +677 -0
- package/src/routes/terminals/[id]/+page.svelte +184 -43
- package/build/client/_app/immutable/assets/0.NV8k8wxG.css.br +0 -0
- package/build/client/_app/immutable/assets/9.v5KA95xm.css +0 -1
- package/build/client/_app/immutable/assets/9.v5KA95xm.css.br +0 -0
- package/build/client/_app/immutable/assets/9.v5KA95xm.css.gz +0 -0
- package/build/client/_app/immutable/chunks/8lO1IL7u.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9WQy_3X.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9WQy_3X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BRqaaL5D.js.br +0 -0
- package/build/client/_app/immutable/chunks/BRqaaL5D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C5VOyQCG.js.br +0 -0
- package/build/client/_app/immutable/chunks/C5VOyQCG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CR6bkGJW.js +0 -6
- package/build/client/_app/immutable/chunks/CR6bkGJW.js.br +0 -0
- package/build/client/_app/immutable/chunks/CR6bkGJW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C_9BZILB.js.br +0 -0
- package/build/client/_app/immutable/chunks/C_9BZILB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cg3dlX05.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cg3dlX05.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJvX78LW.js.br +0 -0
- package/build/client/_app/immutable/chunks/DJvX78LW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DYuMZGL5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYuMZGL5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DZQMsHM5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DZQMsHM5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DZvnhU_8.js.br +0 -0
- package/build/client/_app/immutable/chunks/DZvnhU_8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/nWG9RHyB.js +0 -3
- package/build/client/_app/immutable/chunks/nWG9RHyB.js.br +0 -0
- package/build/client/_app/immutable/chunks/nWG9RHyB.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.f46Ko1hu.js +0 -2
- package/build/client/_app/immutable/entry/app.f46Ko1hu.js.br +0 -0
- package/build/client/_app/immutable/entry/app.f46Ko1hu.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BVDjNnXt.js +0 -1
- package/build/client/_app/immutable/entry/start.BVDjNnXt.js.br +0 -2
- package/build/client/_app/immutable/entry/start.BVDjNnXt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D_9EwVmq.js +0 -7
- package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CdC092Za.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CdC092Za.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.B3SEB_li.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.B3SEB_li.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Bs362gyb.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Bs362gyb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js +0 -2
- package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.gz +0 -0
- package/build/server/chunks/1-C4BOGoJY.js +0 -9
- package/build/server/chunks/6-D8xbnTSo.js +0 -9
- package/build/server/chunks/7-CkVK06S0.js +0 -9
- package/build/server/chunks/8-C8qVhrds.js +0 -9
- package/build/server/chunks/8-C8qVhrds.js.map +0 -1
- package/build/server/chunks/9-fL5zqN0T.js +0 -9
- package/build/server/chunks/9-fL5zqN0T.js.map +0 -1
- package/build/server/chunks/Button-B5dU-ntz.js.map +0 -1
- package/build/server/chunks/Icon-C7Ml3GX6.js.map +0 -1
- package/build/server/chunks/Input-CPGO0sbS.js.map +0 -1
- package/build/server/chunks/Pill-CcrtCejm.js.map +0 -1
- package/build/server/chunks/Shimmer-C5jkvGr1.js.map +0 -1
- package/build/server/chunks/_error.svelte-CSIxs-ab.js.map +0 -1
- package/build/server/chunks/_layout.svelte-noB4j-v2.js.map +0 -1
- package/build/server/chunks/_page.svelte-B6qyh-K-.js.map +0 -1
- package/build/server/chunks/_page.svelte-BUkm2304.js.map +0 -1
- package/build/server/chunks/_page.svelte-BV0XyYJZ.js.map +0 -1
- package/build/server/chunks/_page.svelte-BfB8maoc.js.map +0 -1
- package/build/server/chunks/_page.svelte-C60lAagP.js.map +0 -1
- package/build/server/chunks/_page.svelte-Dmg-RFCg.js.map +0 -1
- package/build/server/chunks/_page.svelte-DnTpPnPR.js.map +0 -1
- package/build/server/chunks/_page.svelte-DuzZr5dA.js.map +0 -1
- package/build/server/chunks/_server.ts-BA_uWcPw.js.map +0 -1
- package/build/server/chunks/_server.ts-Bjbr7glm.js.map +0 -1
- package/build/server/chunks/_server.ts-BrqaMMAa.js.map +0 -1
- package/build/server/chunks/_server.ts-Bu3s5hfv.js.map +0 -1
- package/build/server/chunks/_server.ts-CyjDrcZN.js.map +0 -1
- package/build/server/chunks/_server.ts-DZ5naqSL.js.map +0 -1
- package/build/server/chunks/_server.ts-DZP2lhaY.js.map +0 -1
- package/build/server/chunks/cache-Me3zUAaD.js.map +0 -1
- package/build/server/chunks/client2-DDP30_vY.js +0 -7
- package/build/server/chunks/events-handler-Dm1mNPQP.js +0 -20
- package/build/server/chunks/events-handler-Dm1mNPQP.js.map +0 -1
- package/build/server/chunks/pty-manager-DmNSCKAr.js.map +0 -1
- package/build/server/chunks/registry-Kcw2UCMv.js.map +0 -1
- package/build/server/chunks/root-xvQIR1Bt.js.map +0 -1
- package/build/server/chunks/stores-C-LqoonT.js.map +0 -1
- /package/build/client/_app/immutable/assets/{8.BhoBXADL.css → 10.BhoBXADL.css} +0 -0
- /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.br → 10.BhoBXADL.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.gz → 10.BhoBXADL.css.gz} +0 -0
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
import type {
|
|
3
3
|
ConversationMessage,
|
|
4
4
|
MessagePart,
|
|
5
|
+
ShareAuthResponse,
|
|
6
|
+
ShareMode,
|
|
7
|
+
ShareStatusResponse,
|
|
5
8
|
ShooterConfig,
|
|
6
9
|
TerminalDetailView,
|
|
7
10
|
ToolUsePart,
|
|
@@ -17,6 +20,8 @@
|
|
|
17
20
|
import ConnectionStatus from '$lib/modules/client/terminal/ConnectionStatus.svelte';
|
|
18
21
|
import { createShortcutManager } from '$lib/modules/client/terminal/keyboard-shortcuts';
|
|
19
22
|
import QuickKeys from '$lib/modules/client/terminal/QuickKeys.svelte';
|
|
23
|
+
import ShareGate from '$lib/modules/client/terminal/ShareGate.svelte';
|
|
24
|
+
import ShareSheet from '$lib/modules/client/terminal/ShareSheet.svelte';
|
|
20
25
|
import ShortcutsHelp from '$lib/modules/client/terminal/ShortcutsHelp.svelte';
|
|
21
26
|
import {
|
|
22
27
|
Button,
|
|
@@ -46,6 +51,10 @@
|
|
|
46
51
|
let inputText = $state('');
|
|
47
52
|
let chatMessages = $state<ConversationMessage[]>([]);
|
|
48
53
|
let chatSessionEnded = $state(false);
|
|
54
|
+
let authMode = $state<'guest' | 'owner' | null>(null);
|
|
55
|
+
let guestMode = $state<null | ShareMode>(null);
|
|
56
|
+
let shareGateVisible = $state(false);
|
|
57
|
+
let shareSheetOpen = $state(false);
|
|
49
58
|
|
|
50
59
|
// DOM references
|
|
51
60
|
let termContainer = $state<HTMLDivElement | null>(null);
|
|
@@ -80,6 +89,11 @@
|
|
|
80
89
|
);
|
|
81
90
|
const tabActiveIndex = $derived(viewMode === 'raw' ? 0 : 1);
|
|
82
91
|
const displayCwd = $derived(shortenPath(currentCwd || terminal?.cwd || ''));
|
|
92
|
+
const isOwner = $derived(authMode === 'owner');
|
|
93
|
+
const viewOnly = $derived(authMode === 'guest' && guestMode === 'view');
|
|
94
|
+
const shareUrl = $derived(
|
|
95
|
+
typeof window !== 'undefined' ? `${window.location.origin}/terminals/${terminalId}` : ''
|
|
96
|
+
);
|
|
83
97
|
const paletteCommands = $derived.by((): { action: () => void; label: string }[] => {
|
|
84
98
|
const cmds: { action: () => void; label: string }[] = [
|
|
85
99
|
{ action: (): void => void goto('/'), label: 'Go to Home' },
|
|
@@ -92,7 +106,7 @@
|
|
|
92
106
|
label: 'Show keyboard shortcuts',
|
|
93
107
|
},
|
|
94
108
|
];
|
|
95
|
-
if (isRunning) {
|
|
109
|
+
if (isRunning && isOwner) {
|
|
96
110
|
cmds.push({ action: (): void => void killTerminal(), label: 'Kill terminal' });
|
|
97
111
|
}
|
|
98
112
|
return cmds;
|
|
@@ -142,6 +156,47 @@
|
|
|
142
156
|
}
|
|
143
157
|
}
|
|
144
158
|
|
|
159
|
+
// ------- Guest share tokens -------
|
|
160
|
+
|
|
161
|
+
const SHARE_TOKENS_KEY = 'shooter_share_tokens';
|
|
162
|
+
|
|
163
|
+
function getShareToken(): null | string {
|
|
164
|
+
const id = terminalId;
|
|
165
|
+
if (!id) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
const raw = localStorage.getItem(SHARE_TOKENS_KEY);
|
|
170
|
+
if (!raw) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
const map = JSON.parse(raw) as Record<string, string>;
|
|
174
|
+
return typeof map[id] === 'string' ? map[id] : null;
|
|
175
|
+
} catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function storeShareToken(token: string): void {
|
|
181
|
+
const id = terminalId;
|
|
182
|
+
if (!id) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
let map: Record<string, string> = {};
|
|
186
|
+
try {
|
|
187
|
+
map = JSON.parse(localStorage.getItem(SHARE_TOKENS_KEY) ?? '{}') as Record<string, string>;
|
|
188
|
+
} catch {
|
|
189
|
+
// Corrupt entry — start fresh.
|
|
190
|
+
}
|
|
191
|
+
map[id] = token;
|
|
192
|
+
localStorage.setItem(SHARE_TOKENS_KEY, JSON.stringify(map));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Bearer for API calls: the owner's API key, or this terminal's guest token. */
|
|
196
|
+
function getBearer(): null | string {
|
|
197
|
+
return getConfig()?.apiKey ?? getShareToken();
|
|
198
|
+
}
|
|
199
|
+
|
|
145
200
|
// ------- API calls -------
|
|
146
201
|
|
|
147
202
|
async function fetchTerminal(): Promise<void> {
|
|
@@ -150,36 +205,92 @@
|
|
|
150
205
|
}
|
|
151
206
|
|
|
152
207
|
const config = getConfig();
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
208
|
+
const bearer = config?.apiKey ?? getShareToken();
|
|
209
|
+
if (!bearer) {
|
|
210
|
+
await checkShareAccess();
|
|
156
211
|
return;
|
|
157
212
|
}
|
|
158
213
|
|
|
159
214
|
try {
|
|
160
215
|
const res = await fetch(`/api/terminals/${terminalId}`, {
|
|
161
|
-
headers: { Authorization: `Bearer ${
|
|
216
|
+
headers: { Authorization: `Bearer ${bearer}` },
|
|
162
217
|
});
|
|
218
|
+
if (res.status === 401 && !config) {
|
|
219
|
+
// Stale/revoked guest token — fall back to the password gate.
|
|
220
|
+
await checkShareAccess();
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
163
223
|
if (!res.ok) {
|
|
164
224
|
error = res.status === 404 ? 'Terminal not found' : 'Failed to load terminal';
|
|
165
225
|
loading = false;
|
|
166
226
|
return;
|
|
167
227
|
}
|
|
168
228
|
terminal = (await res.json()) as TerminalDetailView;
|
|
229
|
+
if (config) {
|
|
230
|
+
authMode = 'owner';
|
|
231
|
+
} else {
|
|
232
|
+
authMode = 'guest';
|
|
233
|
+
guestMode = terminal.shareMode ?? 'view';
|
|
234
|
+
}
|
|
169
235
|
} catch {
|
|
170
236
|
error = 'Failed to connect to server';
|
|
171
237
|
}
|
|
172
238
|
loading = false;
|
|
173
239
|
}
|
|
174
240
|
|
|
241
|
+
async function checkShareAccess(): Promise<void> {
|
|
242
|
+
try {
|
|
243
|
+
const res = await fetch(`/api/terminals/${terminalId}/share/status`);
|
|
244
|
+
if (res.ok) {
|
|
245
|
+
const data = (await res.json()) as ShareStatusResponse;
|
|
246
|
+
if (data.shared) {
|
|
247
|
+
shareGateVisible = true;
|
|
248
|
+
loading = false;
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
} catch {
|
|
253
|
+
// Fall through to the configuration error.
|
|
254
|
+
}
|
|
255
|
+
error = 'No configuration found. Please configure settings first.';
|
|
256
|
+
loading = false;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
async function submitSharePassword(password: string): Promise<null | string> {
|
|
260
|
+
try {
|
|
261
|
+
const res = await fetch(`/api/terminals/${terminalId}/share/auth`, {
|
|
262
|
+
body: JSON.stringify({ password }),
|
|
263
|
+
headers: { 'Content-Type': 'application/json' },
|
|
264
|
+
method: 'POST',
|
|
265
|
+
});
|
|
266
|
+
if (res.status === 429) {
|
|
267
|
+
return 'Too many attempts — try again in a minute.';
|
|
268
|
+
}
|
|
269
|
+
if (!res.ok) {
|
|
270
|
+
return 'Incorrect password.';
|
|
271
|
+
}
|
|
272
|
+
const data = (await res.json()) as ShareAuthResponse;
|
|
273
|
+
storeShareToken(data.token);
|
|
274
|
+
shareGateVisible = false;
|
|
275
|
+
loading = true;
|
|
276
|
+
await fetchTerminal();
|
|
277
|
+
if (terminal && !error) {
|
|
278
|
+
initViews();
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
} catch {
|
|
282
|
+
return 'Failed to reach the server.';
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
175
286
|
async function getWsTicket(): Promise<null | string> {
|
|
176
|
-
const
|
|
177
|
-
if (!
|
|
287
|
+
const bearer = getBearer();
|
|
288
|
+
if (!bearer) {
|
|
178
289
|
return null;
|
|
179
290
|
}
|
|
180
291
|
try {
|
|
181
292
|
const res = await fetch('/api/ws-ticket', {
|
|
182
|
-
headers: { Authorization: `Bearer ${
|
|
293
|
+
headers: { Authorization: `Bearer ${bearer}` },
|
|
183
294
|
method: 'POST',
|
|
184
295
|
});
|
|
185
296
|
if (!res.ok) {
|
|
@@ -269,10 +380,12 @@
|
|
|
269
380
|
}
|
|
270
381
|
|
|
271
382
|
const instance = await createTerminal({
|
|
272
|
-
apiKey:
|
|
383
|
+
apiKey: getBearer() ?? undefined,
|
|
273
384
|
container: termContainer,
|
|
274
385
|
fontSize: window.innerWidth < 768 ? 12 : 14,
|
|
275
386
|
getTicket,
|
|
387
|
+
initialCols: terminal.cols ?? undefined,
|
|
388
|
+
initialRows: terminal.rows ?? undefined,
|
|
276
389
|
onActivity: (active: boolean) => {
|
|
277
390
|
if (!disposed) {
|
|
278
391
|
isActive = active;
|
|
@@ -304,6 +417,7 @@
|
|
|
304
417
|
rawConnectionStatus = 'connected';
|
|
305
418
|
}
|
|
306
419
|
},
|
|
420
|
+
readOnly: viewOnly,
|
|
307
421
|
terminalId,
|
|
308
422
|
wsUrl,
|
|
309
423
|
});
|
|
@@ -606,23 +720,7 @@
|
|
|
606
720
|
|
|
607
721
|
// ------- Lifecycle -------
|
|
608
722
|
|
|
609
|
-
|
|
610
|
-
await fetchTerminal();
|
|
611
|
-
if (disposed) {
|
|
612
|
-
return;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
// Set up keyboard shortcuts
|
|
616
|
-
shortcutManager = createShortcutManager({
|
|
617
|
-
onHelp: () => {
|
|
618
|
-
showShortcutsHelp = !showShortcutsHelp;
|
|
619
|
-
},
|
|
620
|
-
});
|
|
621
|
-
|
|
622
|
-
if (!terminal || error) {
|
|
623
|
-
return;
|
|
624
|
-
}
|
|
625
|
-
|
|
723
|
+
function initViews(): void {
|
|
626
724
|
// Default view: Chat on mobile for AI sessions, Raw on desktop
|
|
627
725
|
if (isAI && window.innerWidth < 768) {
|
|
628
726
|
viewMode = 'chat';
|
|
@@ -640,6 +738,26 @@
|
|
|
640
738
|
void connectSessionWs();
|
|
641
739
|
chatInitialized = true;
|
|
642
740
|
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
onMount(async () => {
|
|
744
|
+
await fetchTerminal();
|
|
745
|
+
if (disposed) {
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
// Set up keyboard shortcuts
|
|
750
|
+
shortcutManager = createShortcutManager({
|
|
751
|
+
onHelp: () => {
|
|
752
|
+
showShortcutsHelp = !showShortcutsHelp;
|
|
753
|
+
},
|
|
754
|
+
});
|
|
755
|
+
|
|
756
|
+
if (!terminal || error) {
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
initViews();
|
|
643
761
|
});
|
|
644
762
|
|
|
645
763
|
onDestroy(() => {
|
|
@@ -664,6 +782,10 @@
|
|
|
664
782
|
<div class="skeleton" style="width: 100%; height: 100%;"></div>
|
|
665
783
|
</div>
|
|
666
784
|
</div>
|
|
785
|
+
{:else if shareGateVisible}
|
|
786
|
+
<div class="term-page">
|
|
787
|
+
<ShareGate onSubmit={submitSharePassword} />
|
|
788
|
+
</div>
|
|
667
789
|
{:else if error}
|
|
668
790
|
<main class="main">
|
|
669
791
|
<div class="session-back-row">
|
|
@@ -681,7 +803,9 @@
|
|
|
681
803
|
<!-- Top Bar -->
|
|
682
804
|
<div class="term-topbar">
|
|
683
805
|
<div class="term-topbar-left">
|
|
684
|
-
|
|
806
|
+
{#if isOwner}
|
|
807
|
+
<a href="/terminals" class="term-back" aria-label="Back to terminals">←</a>
|
|
808
|
+
{/if}
|
|
685
809
|
<span class="term-command-name">{commandName}</span>
|
|
686
810
|
<Pill text={badgeLabel} classes={badgeClass} />
|
|
687
811
|
{#if isRunning}
|
|
@@ -695,7 +819,7 @@
|
|
|
695
819
|
</Tooltip>
|
|
696
820
|
{/if}
|
|
697
821
|
<ConnectionStatus status={connectionStatus} onretry={handleRetry} />
|
|
698
|
-
{#if isAI && (terminal as TerminalDetailView & { sessionFile?: string })?.sessionFile}
|
|
822
|
+
{#if isOwner && isAI && (terminal as TerminalDetailView & { sessionFile?: string })?.sessionFile}
|
|
699
823
|
{@const sessionFile =
|
|
700
824
|
(terminal as TerminalDetailView & { sessionFile?: string }).sessionFile ?? ''}
|
|
701
825
|
<a
|
|
@@ -729,22 +853,31 @@
|
|
|
729
853
|
ariaLabel="Keyboard shortcuts"
|
|
730
854
|
/>
|
|
731
855
|
|
|
732
|
-
{#if
|
|
733
|
-
<Button
|
|
734
|
-
classes="btn-danger btn-sm"
|
|
735
|
-
onclick={killTerminal}
|
|
736
|
-
disabled={killing}
|
|
737
|
-
showLoader={killing}
|
|
738
|
-
text="Kill"
|
|
739
|
-
/>
|
|
740
|
-
{:else}
|
|
856
|
+
{#if isOwner}
|
|
741
857
|
<Button
|
|
742
858
|
classes="btn-secondary btn-sm"
|
|
743
|
-
onclick={
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
text="
|
|
859
|
+
onclick={(): void => {
|
|
860
|
+
shareSheetOpen = true;
|
|
861
|
+
}}
|
|
862
|
+
text="Share"
|
|
747
863
|
/>
|
|
864
|
+
{#if isRunning}
|
|
865
|
+
<Button
|
|
866
|
+
classes="btn-danger btn-sm"
|
|
867
|
+
onclick={killTerminal}
|
|
868
|
+
disabled={killing}
|
|
869
|
+
showLoader={killing}
|
|
870
|
+
text="Kill"
|
|
871
|
+
/>
|
|
872
|
+
{:else}
|
|
873
|
+
<Button
|
|
874
|
+
classes="btn-secondary btn-sm"
|
|
875
|
+
onclick={removeTerminal}
|
|
876
|
+
disabled={removing}
|
|
877
|
+
showLoader={removing}
|
|
878
|
+
text="Remove"
|
|
879
|
+
/>
|
|
880
|
+
{/if}
|
|
748
881
|
{/if}
|
|
749
882
|
</div>
|
|
750
883
|
</div>
|
|
@@ -759,7 +892,7 @@
|
|
|
759
892
|
></div>
|
|
760
893
|
|
|
761
894
|
<!-- Raw Input Bar + Quick Keys -->
|
|
762
|
-
{#if isRunning && viewMode === 'raw'}
|
|
895
|
+
{#if isRunning && viewMode === 'raw' && !viewOnly}
|
|
763
896
|
<div class="term-input-area">
|
|
764
897
|
<QuickKeys onKey={handleQuickKey} />
|
|
765
898
|
<div class="term-input-bar">
|
|
@@ -788,7 +921,7 @@
|
|
|
788
921
|
messages={chatMessages}
|
|
789
922
|
connectionState={connectionStatus}
|
|
790
923
|
sessionEnded={chatSessionEnded}
|
|
791
|
-
showInput={isRunning}
|
|
924
|
+
showInput={isRunning && !viewOnly}
|
|
792
925
|
onSendInput={handleChatSendInput}
|
|
793
926
|
onCancel={handleChatCancel}
|
|
794
927
|
/>
|
|
@@ -815,6 +948,14 @@
|
|
|
815
948
|
showShortcutsHelp = false;
|
|
816
949
|
}}
|
|
817
950
|
/>
|
|
951
|
+
<ShareSheet
|
|
952
|
+
open={shareSheetOpen}
|
|
953
|
+
terminalId={terminalId ?? ''}
|
|
954
|
+
{shareUrl}
|
|
955
|
+
onClose={(): void => {
|
|
956
|
+
shareSheetOpen = false;
|
|
957
|
+
}}
|
|
958
|
+
/>
|
|
818
959
|
<CommandPalette
|
|
819
960
|
bind:open={showCommandPalette}
|
|
820
961
|
commands={paletteCommands}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.command-palette{--command-menu-overlay-background: rgba(0, 0, 0, .5);--command-menu-background: var(--component-bg);--command-menu-border: 1px solid var(--border);--command-menu-border-radius: var(--radius-lg);--command-menu-width: 500px;--command-menu-max-width: 90vw;--command-menu-input-color: var(--text-primary);--command-menu-input-placeholder-color: var(--text-tertiary);--command-menu-input-font-family: var(--font-mono);--command-menu-separator-color: var(--border);--command-menu-item-color: var(--text-secondary);--command-menu-item-active-background: var(--component-bg-hover);--command-menu-item-active-color: var(--text-primary);--command-menu-empty-color: var(--text-tertiary);--command-menu-z-index: 1001}.connection-status.svelte-1cg9pai{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;line-height:1;flex-shrink:0}.connection-status.connected.svelte-1cg9pai{color:var(--ds-green-700)}.connection-status.reconnecting.svelte-1cg9pai{color:var(--ds-amber-900)}.connection-status.disconnected.svelte-1cg9pai{color:var(--ds-red-900)}.conn-dot.svelte-1cg9pai{width:8px;height:8px;border-radius:50%;flex-shrink:0}.conn-dot.connected.svelte-1cg9pai{background:var(--ds-green-700)}.conn-dot.reconnecting.svelte-1cg9pai{background:var(--ds-amber-700);animation:pulse-dot 1.5s ease-in-out infinite}.conn-dot.disconnected.svelte-1cg9pai{background:var(--ds-red-700)}.status-label.svelte-1cg9pai{white-space:nowrap}.btn-retry{--button-height: auto;--button-padding: 2px 8px;--button-font-size: 12px;--button-border: 1px solid currentColor;--button-text-color: inherit;margin-left:2px}@media(max-width:480px){.status-label.svelte-1cg9pai{display:none}}.quick-keys.svelte-64qat5{display:flex;overflow-x:auto;gap:6px;padding:var(--space-2) var(--space-3);scrollbar-width:none;-webkit-overflow-scrolling:touch;flex-shrink:0}.quick-keys.svelte-64qat5::-webkit-scrollbar{display:none}.btn-quick-key{--button-color: var(--ds-gray-200);--button-text-color: var(--ds-gray-700);--button-border: 1px solid var(--ds-gray-400);--button-hover-color: var(--ds-gray-300);--button-hover-text-color: var(--text-primary);--button-hover-border: 1px solid var(--ds-gray-400);--button-height: 44px;--button-padding: 0 var(--space-3);--button-border-radius: var(--radius-md);--button-font-family: var(--font-mono);--button-font-size: var(--text-xs);min-width:52px;flex-shrink:0;white-space:nowrap;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.shortcuts-modal{--modal-content-background-color: var(--component-bg);--modal-border-radius: var(--radius-lg);--modal-header-background-color: var(--component-bg);--modal-header-padding: var(--space-4) var(--space-5);--modal-header-border-bottom: 1px solid var(--border);--header-text-size: var(--text-lg);--modal-header-text-weight: 600;--background-color: rgba(0, 0, 0, .5);--modal-z-index: 1000}.shortcuts-modal .modal-content{max-width:420px;width:90vw;min-width:320px}.shortcuts-list.svelte-1u7lstk{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4) var(--space-5)}.shortcut-row.svelte-1u7lstk{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) 0}.shortcut-desc.svelte-1u7lstk{font-size:var(--text-sm);color:var(--text-secondary)}.shortcut-kbd{--keyboard-input-key-color: var(--text-primary);--keyboard-input-key-background: var(--ds-gray-200);--keyboard-input-key-border: 1px solid var(--ds-gray-400);--keyboard-input-key-box-shadow: 0 1px 0 var(--ds-gray-400);--keyboard-input-font-family: var(--font-mono);--keyboard-input-font-size: var(--text-xs)}.term-page.svelte-1tubujq{display:flex;flex-direction:column;height:calc(100vh - var(--header-height) - 64px);height:calc(100dvh - var(--header-height) - 64px);overflow:hidden;background:var(--ds-background-200)}.term-topbar.svelte-1tubujq{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-2) var(--space-4);background:var(--ds-background-100);border-bottom:1px solid var(--border);flex-shrink:0;min-height:48px}.term-topbar-left.svelte-1tubujq{display:flex;align-items:center;gap:var(--space-2);min-width:0;overflow:hidden}.term-topbar-right.svelte-1tubujq{display:flex;align-items:center;gap:var(--space-3);flex-shrink:1}.term-back.svelte-1tubujq{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:var(--radius-md);background:transparent;color:var(--text-secondary);text-decoration:none;font-size:18px;transition:background var(--transition-fast),color var(--transition-fast);flex-shrink:0}.term-back.svelte-1tubujq:hover{background:var(--ds-gray-alpha-100);color:var(--text-primary)}.term-command-name.svelte-1tubujq{font-family:var(--font-mono);font-size:var(--text-base);font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.term-tabs{--tabs-bar-border-bottom: none;--tabs-bar-background: var(--ds-gray-200);--tabs-bar-padding: 2px;--tabs-item-padding: 6px 12px;--tabs-item-font-size: var(--text-xs);--tabs-indicator-height: 0;--tabs-active-color: var(--text-primary);--tabs-item-color: var(--text-tertiary);border-radius:var(--radius-md);border:1px solid var(--ds-gray-400);overflow:hidden}.term-shortcuts-btn{--button-height: 28px;--button-width: 28px;--button-padding: 0;--button-border-radius: var(--radius-sm);--button-border: 1px solid var(--border);--button-color: transparent;--button-text-color: var(--text-tertiary);--button-font-size: 14px;--button-font-weight: 600;--button-hover-color: var(--component-bg-hover);--button-hover-text-color: var(--text-primary);flex-shrink:0}.term-cwd.svelte-1tubujq{font-family:var(--font-mono);font-size:11px;color:var(--text-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.term-session-link.svelte-1tubujq{font-size:11px;font-weight:500;color:var(--ds-blue-900);text-decoration:none;white-space:nowrap;padding:2px 8px;border-radius:var(--radius-sm);border:1px solid var(--ds-blue-400);transition:background var(--transition-fast),color var(--transition-fast)}.term-session-link.svelte-1tubujq:hover{background:var(--ds-blue-100);color:var(--ds-blue-1000)}.activity-dot.svelte-1tubujq{width:8px;height:8px;border-radius:50%;flex-shrink:0}.activity-active.svelte-1tubujq{background:var(--ds-green-500);animation:activity-pulse .6s ease-in-out infinite}.activity-idle.svelte-1tubujq{background:var(--ds-gray-600)}.term-body.svelte-1tubujq{flex:1;flex-direction:column;min-height:0;overflow:hidden;padding:var(--space-1);background:var(--ds-background-200, #0a0a0f)}.term-body.svelte-1tubujq .xterm{height:100%}.term-body.svelte-1tubujq .xterm-viewport{overflow-y:auto!important}.term-body-loading.svelte-1tubujq{flex:1;padding:var(--space-4);min-height:200px}.term-chat-body.svelte-1tubujq{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.term-input-area.svelte-1tubujq{flex-shrink:0;background:var(--ds-background-100);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom,0px)}.term-input-bar.svelte-1tubujq{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3)}.term-input-field{--input-container-margin: 0;--input-height: 44px;flex:1}.btn-send{--button-height: 44px;--button-width: 44px;--button-padding: 0;--button-font-size: 18px;flex-shrink:0}.term-exited-bar.svelte-1tubujq{display:flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);padding-bottom:calc(var(--space-2) + env(safe-area-inset-bottom,0px));background:var(--ds-gray-200);border-top:1px solid var(--border);font-size:var(--text-sm);color:var(--text-tertiary);flex-shrink:0}@media(max-width:768px){.term-topbar.svelte-1tubujq{padding:var(--space-2) var(--space-3);gap:var(--space-2)}.term-command-name.svelte-1tubujq{font-size:var(--text-sm);max-width:100px}}@media(max-width:480px){.term-topbar.svelte-1tubujq{min-height:44px;padding:var(--space-1) var(--space-2)}.term-command-name.svelte-1tubujq{max-width:80px;text-overflow:ellipsis}.term-topbar-right.svelte-1tubujq{flex-shrink:1}}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../assets/xterm.DFuMZ0ql.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as u}from"./PPVm8Dsz.js";async function D(e){const{Terminal:m}=await u(async()=>{const{Terminal:t}=await import("./BTGVxaYV.js").then(i=>i.x);return{Terminal:t}},[],import.meta.url),{FitAddon:h}=await u(async()=>{const{FitAddon:t}=await import("./BlxrFPDK.js").then(i=>i.a);return{FitAddon:t}},[],import.meta.url),{WebLinksAddon:S}=await u(async()=>{const{WebLinksAddon:t}=await import("./DLu6yJIZ.js").then(i=>i.a);return{WebLinksAddon:t}},[],import.meta.url);await u(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url);const d=new h,n=new m({allowTransparency:!0,cursorBlink:!0,cursorStyle:"block",fontFamily:"'SF Mono', 'Fira Code', 'Cascadia Code', 'Menlo', monospace",fontSize:e.fontSize||14,theme:{background:"#0a0a0f",black:"#0a0a0f",blue:"#3b82f6",brightBlack:"#64748b",brightBlue:"#60a5fa",brightCyan:"#67e8f9",brightGreen:"#4ade80",brightMagenta:"#c4b5fd",brightRed:"#f87171",brightWhite:"#f8fafc",brightYellow:"#fbbf24",cursor:"#e2e8f0",cursorAccent:"#0a0a0f",cyan:"#38bdf8",foreground:"#e2e8f0",green:"#22c55e",magenta:"#a78bfa",red:"#ef4444",selectionBackground:"rgba(99, 102, 241, 0.3)",white:"#e2e8f0",yellow:"#f59e0b"}});n.loadAddon(d),n.loadAddon(new S),n.open(e.container),d.fit();const _=new Set(["f","g","h","j","n","o","p","q","s","t","u","w"]);n.attachCustomKeyEventHandler(t=>{const i=t.key.toLowerCase();return t.metaKey?i==="c"||i==="v"?!0:!_.has(i):!0});let f=null;if(e.terminalId&&e.apiKey){const t=e.terminalId,i=e.apiKey;f=r=>{(async()=>{try{if(!r.clipboardData)return;const g=Array.from(r.clipboardData.items).find(b=>b.type.startsWith("image/"));if(!g)return;const w=g.getAsFile();if(!w)return;r.preventDefault();const l=new FileReader,O=await new Promise((b,A)=>{l.onload=()=>{b(l.result)},l.onerror=A,l.readAsDataURL(w)});(await fetch(`/api/terminals/${t}/paste-image`,{body:JSON.stringify({image:O}),headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json"},method:"POST"})).ok&&a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({data:"",type:"input"}))}catch{}})()},e.container.addEventListener("paste",f)}let a=null,c=null,o=1e3,s=!1;async function y(){if(s)return;let t;try{t=await e.getTicket()}catch{s||(e.onDisconnect?.(),c=setTimeout(()=>{o=Math.min(o*2,3e4),y()},o));return}s||(a=new WebSocket(`${e.wsUrl}?ticket=${t}`),a.onopen=()=>{o=1e3,e.onReconnect?.()},a.onmessage=i=>{const r=JSON.parse(i.data);r.type==="output"||r.type==="scrollback"?n.write(r.data??""):r.type==="exit"?(n.write(`\r
|
|
3
|
-
\x1B[90m[Process exited with code ${String(r.code)}]\x1B[0m\r
|
|
4
|
-
`),s=!0,c&&clearTimeout(c),e.onExit?.(r.code??0)):r.type==="output-dropped"?n.write(`\r
|
|
5
|
-
\x1B[33m[${String(r.bytes)} bytes dropped]\x1B[0m\r
|
|
6
|
-
`):r.type==="activity"?e.onActivity?.(r.active??!1):r.type==="cwd"&&e.onCwd?.(r.path??"")},a.onclose=()=>{s||(e.onDisconnect?.(),c=setTimeout(()=>{o=Math.min(o*2,3e4),y()},o))})}y(),n.onData(t=>{a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({data:t,type:"input"}))});const p=new ResizeObserver(()=>{!e.container.offsetWidth||!e.container.offsetHeight||(d.fit(),a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({cols:n.cols,rows:n.rows,type:"resize"})))});p.observe(e.container);function k(){s=!0,c&&clearTimeout(c),f&&e.container.removeEventListener("paste",f),p.disconnect(),a?.close(),n.dispose()}function v(t){a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({data:t,type:"input"}))}return{dispose:k,fitAddon:d,sendInput:v,term:n}}function N(e,m){e.readyState===WebSocket.OPEN&&e.send(JSON.stringify({signal:m,type:"signal"}))}export{D as createTerminal,N as sendSignal};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{bv as Te,v as Ve,s as j,g as P,b as N,P as oe,bw as At}from"./DYuMZGL5.js";class pe{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Le{constructor(t,n){this.status=t,this.location=n}}class je extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function Et(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function kt(e){return e.split("%25").map(decodeURI).join("%25")}function Rt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function ye({href:e}){return e.split("#")[0]}function St(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;const It=new TextDecoder;function Ut(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}const Tt=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&z.delete(Pe(e)),Tt(e,t));const z=new Map;function Lt(e,t){const n=Pe(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:a,...s}=JSON.parse(r.textContent);const o=r.getAttribute("data-ttl");return o&&z.set(n,{body:a,init:s,ttl:1e3*Number(o)}),r.getAttribute("data-b64")!==null&&(a=Ut(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function jt(e,t,n){if(z.size>0){const r=Pe(e,n),a=z.get(r);if(a){if(performance.now()<a.ttl&&["default","force-cache","only-if-cached",void 0].includes(n?.cache))return new Response(a.body,a.init);z.delete(r)}}return window.fetch(t,n)}function Pe(e,t){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){const a=[];t.headers&&a.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&a.push(t.body),r+=`[data-hash="${St(...a)}"]`}return r}const Pt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Nt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${xt(e).map(r=>{const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(a)return t.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(s)return t.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const o=r.split(/\[(.+?)\](?!\])/);return"/"+o.map((i,l)=>{if(l%2){if(i.startsWith("x+"))return ve(String.fromCharCode(parseInt(i.slice(2),16)));if(i.startsWith("u+"))return ve(String.fromCharCode(...i.slice(2).split("-").map(g=>parseInt(g,16))));const u=Pt.exec(i),[,d,p,h,f]=u;return t.push({name:h,matcher:f,optional:!!d,rest:!!p,chained:p?l===1&&o[0]==="":!1}),p?"([^]*?)":d?"([^/]*)?":"([^/]+?)"}return ve(i)}).join("")}).join("")}/?$`),params:t}}function Ot(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function xt(e){return e.slice(1).split("/").filter(Ot)}function Ct(e,t,n){const r={},a=e.slice(1),s=a.filter(c=>c!==void 0);let o=0;for(let c=0;c<t.length;c+=1){const i=t[c];let l=a[c-o];if(i.chained&&i.rest&&o&&(l=a.slice(c-o,c+1).filter(u=>u).join("/"),o=0),l===void 0)if(i.rest)l="";else continue;if(!i.matcher||n[i.matcher](l)){r[i.name]=l;const u=t[c+1],d=a[c+1];u&&!u.rest&&u.optional&&d&&i.chained&&(o=0),!u&&!d&&Object.keys(r).length===s.length&&(o=0);continue}if(i.optional&&i.chained){o++;continue}return}if(!o)return r}function ve(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Dt({nodes:e,server_loads:t,dictionary:n,matchers:r}){const a=new Set(t);return Object.entries(n).map(([c,[i,l,u]])=>{const{pattern:d,params:p}=Nt(c),h={id:c,exec:f=>{const g=d.exec(f);if(g)return Ct(g,p,r)},errors:[1,...u||[]].map(f=>e[f]),layouts:[0,...l||[]].map(o),leaf:s(i)};return h.errors.length=h.layouts.length=Math.max(h.errors.length,h.layouts.length),h});function s(c){const i=c<0;return i&&(c=~c),[i,e[c]]}function o(c){return c===void 0?c:[a.has(c),e[c]]}}function Qe(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function qe(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const U=globalThis.__sveltekit_1jhhj7f?.base??"",$t=globalThis.__sveltekit_1jhhj7f?.assets??U??"",Bt="1780830864274",et="sveltekit:snapshot",tt="sveltekit:scroll",nt="sveltekit:states",Ft="sveltekit:pageurl",q="sveltekit:history",Q="sveltekit:navigation",B={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},re=location.origin;function Ne(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function M(){return{x:pageXOffset,y:pageYOffset}}function V(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ye={...B,"":B.hover};function rt(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function at(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=rt(e)}}function Ee(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const c=location.hash.split("#")[1]||"/";r.hash=`#${c}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||_e(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),o=r?.origin===re&&e.hasAttribute("download");return{url:r,external:s,target:a,download:o}}function se(e){let t=null,n=null,r=null,a=null,s=null,o=null,c=e;for(;c&&c!==document.documentElement;)r===null&&(r=V(c,"preload-code")),a===null&&(a=V(c,"preload-data")),t===null&&(t=V(c,"keepfocus")),n===null&&(n=V(c,"noscroll")),s===null&&(s=V(c,"reload")),o===null&&(o=V(c,"replacestate")),c=rt(c);function i(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ye[r??"off"],preload_data:Ye[a??"off"],keepfocus:i(t),noscroll:i(n),reload:i(s),replace_state:i(o)}}function Ge(e){const t=Te(e);let n=!0;function r(){n=!0,t.update(o=>o)}function a(o){n=!1,t.set(o)}function s(o){let c;return t.subscribe(i=>{(c===void 0||n&&i!==c)&&o(c=i)})}return{notify:r,set:a,subscribe:s}}const ot={v:()=>{}};function Mt(){const{set:e,subscribe:t}=Te(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${$t}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const o=(await a.json()).version!==Bt;return o&&(e(!0),ot.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:t,check:r}}function _e(e,t,n){return e.origin!==re||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Pn(e){}const Vt=-1,qt=-2,Yt=-3,Gt=-4,Kt=-5,Wt=-6,Ht=-7,st=2**32-1,ke=st-1;function Xt(e){return!(!Number.isInteger(e)||e<0||e>ke)}function zt(e){return!(!Number.isInteger(e)||e<0||e>st)}function Jt(e){return Uint8Array.fromBase64(e).buffer}function Zt(e){return Uint8Array.from(Buffer.from(e,"base64")).buffer}function Qt(e){const t=atob(e),n=t.length,r=new Uint8Array(n);for(let a=0;a<n;a++)r[a]=t.charCodeAt(a);return r.buffer}const en=typeof Uint8Array.fromBase64=="function",tn=typeof process=="object"&&process.versions?.node!==void 0,nn=en?Jt:tn?Zt:Qt;function rn(e,t){if(typeof e=="number")return s(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);let a=null;function s(o,c=!1){if(o===Vt)return;if(o===Yt)return NaN;if(o===Gt)return 1/0;if(o===Kt)return-1/0;if(o===Wt)return-0;if(c||typeof o!="number")throw new Error("Invalid input");if(o in r)return r[o];const i=n[o];if(!i||typeof i!="object")r[o]=i;else if(Array.isArray(i))if(typeof i[0]=="string"){const l=i[0],u=t&&Object.hasOwn(t,l)?t[l]:void 0;if(u){let d=i[1];if(typeof d!="number"&&(d=n.push(i[1])-1),a??=new Set,a.has(d))throw new Error("Invalid circular reference");return a.add(d),r[o]=u(s(d)),a.delete(d),r[o]}switch(l){case"Date":r[o]=new Date(i[1]);break;case"Set":const d=new Set;r[o]=d;for(let f=1;f<i.length;f+=1)d.add(s(i[f]));break;case"Map":const p=new Map;r[o]=p;for(let f=1;f<i.length;f+=2)p.set(s(i[f]),s(i[f+1]));break;case"RegExp":r[o]=new RegExp(i[1],i[2]);break;case"Object":{const f=i[1];if(typeof n[f]=="object"&&n[f][0]!=="BigInt")throw new Error("Invalid input");r[o]=Object(s(f));break}case"BigInt":r[o]=BigInt(i[1]);break;case"null":const h=Object.create(null);r[o]=h;for(let f=1;f<i.length;f+=2){if(i[f]==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");h[i[f]]=s(i[f+1])}break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Float16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":case"DataView":{if(n[i[1]][0]!=="ArrayBuffer")throw new Error("Invalid data");const f=globalThis[l],g=s(i[1]);r[o]=i[2]!==void 0?new f(g,i[2],i[3]):new f(g);break}case"ArrayBuffer":{const f=i[1];if(typeof f!="string")throw new Error("Invalid ArrayBuffer encoding");const g=nn(f);r[o]=g;break}case"Temporal.Duration":case"Temporal.Instant":case"Temporal.PlainDate":case"Temporal.PlainTime":case"Temporal.PlainDateTime":case"Temporal.PlainMonthDay":case"Temporal.PlainYearMonth":case"Temporal.ZonedDateTime":{const f=l.slice(9);r[o]=Temporal[f].from(i[1]);break}case"URL":{const f=new URL(i[1]);r[o]=f;break}case"URLSearchParams":{const f=new URLSearchParams(i[1]);r[o]=f;break}default:throw new Error(`Unknown type ${l}`)}}else if(i[0]===Ht){const l=i[1];if(!zt(l))throw new Error("Invalid input");const u=[];r[o]=u,u[ke]=void 0,delete u[ke];for(let d=2;d<i.length;d+=2){const p=i[d];if(!Xt(p)||p>=l)throw new Error("Invalid input");u[p]=s(i[d+1])}u.length=l}else{const l=new Array(i.length);r[o]=l;for(let u=0;u<i.length;u+=1){const d=i[u];d!==qt&&(l[u]=s(d))}}else{const l={};r[o]=l;for(const u of Object.keys(i)){if(u==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");const d=i[u];l[u]=s(d)}}return r[o]}return s(0)}const it=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...it];const an=new Set([...it]);[...an];function on(e){return e.filter(t=>t!=null)}const sn="x-sveltekit-invalidated",cn="x-sveltekit-trailing-slash";function ie(e){return e instanceof pe||e instanceof je?e.status:500}function ln(e){return e instanceof je?e.text:"Internal Error"}let S,ee,be;const fn=Ve.toString().includes("$$")||/function \w+\(\) \{\}/.test(Ve.toString()),Ke="a:";fn?(S={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Ke)},ee={current:null},be={current:!1}):(S=new class{#e=j({});get data(){return P(this.#e)}set data(t){N(this.#e,t)}#t=j(null);get form(){return P(this.#t)}set form(t){N(this.#t,t)}#n=j(null);get error(){return P(this.#n)}set error(t){N(this.#n,t)}#r=j({});get params(){return P(this.#r)}set params(t){N(this.#r,t)}#a=j({id:null});get route(){return P(this.#a)}set route(t){N(this.#a,t)}#o=j({});get state(){return P(this.#o)}set state(t){N(this.#o,t)}#s=j(-1);get status(){return P(this.#s)}set status(t){N(this.#s,t)}#i=j(new URL(Ke));get url(){return P(this.#i)}set url(t){N(this.#i,t)}},ee=new class{#e=j(null);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},be=new class{#e=j(!1);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},ot.v=()=>be.current=!0);function un(e){Object.assign(S,e)}const dn="/__data.json",hn=".html__data.json";function pn(e){return e.endsWith(".html")?e.replace(/\.html$/,hn):e.replace(/\/$/,"")+dn}const _n=new Set(["icon","shortcut icon","apple-touch-icon"]);let H=null;const D=Qe(tt)??{},te=Qe(et)??{},C={url:Ge({}),page:Ge({}),navigating:Te(null),updated:Mt()};function Oe(e){D[e]=M()}function gn(e,t){let n=e+1;for(;D[n];)delete D[n],n+=1;for(n=t+1;te[n];)delete te[n],n+=1}function K(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(()=>{})}async function ct(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(U||"/");e&&await e.update()}}function We(){}let xe,Re,ce,x,Se,A;const le=[],fe=[];let L=null;function Ie(){L?.fork?.then(e=>e?.discard()),L=null}const ae=new Map,lt=new Set,mn=new Set,J=new Set;let w={branch:[],error:null,url:null},Ce=!1,ue=!1,He=!0,ne=!1,X=!1,ft=!1,De=!1,ut,R,I,F;const Z=new Set,Xe=new Map;async function Cn(e,t,n){globalThis.__sveltekit_1jhhj7f?.data&&globalThis.__sveltekit_1jhhj7f.data,document.URL!==location.href&&(location.href=location.href),A=e,await e.hooks.init?.(),xe=Dt(e),x=document.documentElement,Se=t,Re=e.nodes[0],ce=e.nodes[1],Re(),ce(),R=history.state?.[q],I=history.state?.[Q],R||(R=I=Date.now(),history.replaceState({...history.state,[q]:R,[Q]:I},""));const r=D[R];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await Un(Se,n)):(await Y({type:"enter",url:Ne(A.hash?Ln(new URL(location.href)):location.href),replace_state:!0}),a()),In()}function wn(){le.length=0,De=!1}function dt(e){fe.some(t=>t?.snapshot)&&(te[e]=fe.map(t=>t?.snapshot?.capture()))}function ht(e){te[e]?.forEach((t,n)=>{fe[n]?.snapshot?.restore(t)})}function ze(){Oe(R),qe(tt,D),dt(I),qe(et,te)}async function pt(e,t,n,r){let a;t.invalidateAll&&Ie(),await Y({type:"goto",url:Ne(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(De=!0,a=[...Xe.keys()]),t.invalidate&&t.invalidate.forEach(Sn)}}),t.invalidateAll&&oe().then(oe).then(()=>{Xe.forEach(({resource:s},o)=>{a?.includes(o)&&s.refresh?.()})})}async function yn(e){if(e.id!==L?.id){Ie();const t={};Z.add(t),L={id:e.id,token:t,promise:gt({...e,preload:t}).then(n=>(Z.delete(t),n.type==="loaded"&&n.state.error&&Ie(),n)),fork:null}}return L.promise}async function Ae(e){const t=(await me(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(n=>n[1]()))}async function _t(e,t,n){const r={params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)};w={...e.state,nav:r};const a=document.querySelector("style[data-sveltekit]");if(a&&a.remove(),Object.assign(S,e.props.page),ut=new A.root({target:t,props:{...e.props,stores:C,components:fe},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),ht(I),n){const s={from:null,to:{...r,scroll:D[R]??M()},willUnload:!1,type:"enter",complete:Promise.resolve()};J.forEach(o=>o(s))}ue=!0}async function de({url:e,params:t,branch:n,errors:r,status:a,error:s,route:o,form:c}){let i="never";if(U&&(e.pathname===U||e.pathname===U+"/"))i="always";else for(const f of n)f?.slash!==void 0&&(i=f.slash);e.pathname=Et(e.pathname,i),e.search=e.search;const l={type:"loaded",state:{url:e,params:t,branch:n,error:s,route:o},props:{constructors:on(n).map(f=>f.node.component),page:Me(S)}};c!==void 0&&(l.props.form=c);let u={},d=!S,p=0;for(let f=0;f<Math.max(n.length,w.branch.length);f+=1){const g=n[f],b=w.branch[f];g?.data!==b?.data&&(d=!0),g&&(u={...u,...g.data},d&&(l.props[`data_${p}`]=u),p+=1)}return(!w.url||e.href!==w.url.href||w.error!==s||c!==void 0&&c!==S.form||d)&&(l.props.page={error:s,params:t,route:{id:o?.id??null},state:{},status:a,url:new URL(e),form:c??null,data:d?u:S.data}),l}async function $e({loader:e,parent:t,url:n,params:r,route:a,server_data_node:s}){let o=null;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},i=await e();return{node:i,loader:e,server:s,universal:i.universal?.load?{type:"data",data:o,uses:c}:null,data:o??s?.data??null,slash:i.universal?.trailingSlash??s?.slash}}function vn(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=ue?jt(r,a.href,t):Lt(r,t);return{resolved:a,promise:s}}function Je(e,t,n,r,a,s){if(De)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const o of a.search_params)if(r.has(o))return!0;for(const o of a.params)if(s[o]!==w.params[o])return!0;for(const o of a.dependencies)if(le.some(c=>c(new URL(o))))return!0;return!1}function Be(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function bn(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(o=>s.includes(o))&&s.every(o=>a.includes(o))&&n.delete(r)}return n}function Ze({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Me(S),constructors:[]}}}async function gt({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if(L?.id===e)return Z.delete(L.token),L.promise;const{errors:o,layouts:c,leaf:i}=a,l=[...c,i];o.forEach(m=>m?.().catch(()=>{})),l.forEach(m=>m?.[1]().catch(()=>{}));let u=null;const d=w.url?e!==he(w.url):!1,p=w.route?a.id!==w.route.id:!1,h=bn(w.url,n);let f=!1;{const m=l.map((y,E)=>{const k=w.branch[E],v=!!y?.[0]&&(k?.loader!==y[1]||Je(f,p,d,h,k.server?.uses,r));return v&&(f=!0),v});if(m.some(Boolean)){try{u=await yt(n,m)}catch(y){const E=await G(y,{url:n,params:r,route:{id:e}});return Z.has(s)?Ze({error:E,url:n,params:r,route:a}):ge({status:ie(y),error:E,url:n,route:a})}if(u.type==="redirect")return u}}const g=u?.nodes;let b=!1;const _=l.map(async(m,y)=>{if(!m)return;const E=w.branch[y],k=g?.[y];if((!k||k.type==="skip")&&m[1]===E?.loader&&!Je(b,p,d,h,E.universal?.uses,r))return E;if(b=!0,k?.type==="error")throw k;return $e({loader:m[1],url:n,params:r,route:a,parent:async()=>{const O={};for(let $=0;$<y;$+=1)Object.assign(O,(await _[$])?.data);return O},server_data_node:Be(k===void 0&&m[0]?{type:"skip"}:k??null,m[0]?E?.server:void 0)})});for(const m of _)m.catch(()=>{});const T=[];for(let m=0;m<l.length;m+=1)if(l[m])try{T.push(await _[m])}catch(y){if(y instanceof Le)return{type:"redirect",location:y.location};if(Z.has(s))return Ze({error:await G(y,{params:r,url:n,route:{id:a.id}}),url:n,params:r,route:a});let E=ie(y),k;if(g?.includes(y))E=y.status??E,k=y.error;else if(y instanceof pe)k=y.body;else{if(await C.updated.check())return await ct(),await K(n);k=await G(y,{params:r,url:n,route:{id:a.id}})}const v=await An(m,T,o);return v?de({url:n,params:r,branch:T.slice(0,v.idx).concat(v.node),errors:o,status:E,error:k,route:a}):await wt(n,{id:a.id},k,E)}else T.push(void 0);return de({url:n,params:r,branch:T,errors:o,status:200,error:null,route:a,form:t?void 0:null})}async function An(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)r-=1;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function ge({status:e,error:t,url:n,route:r}){const a={};let s=null;if(A.server_loads[0]===0)try{const c=await yt(n,[!0]);if(c.type!=="data"||c.nodes[0]&&c.nodes[0].type!=="data")throw 0;s=c.nodes[0]??null}catch{(n.origin!==re||n.pathname!==location.pathname||Ce)&&await K(n)}try{const o=await $e({loader:Re,url:n,params:a,route:r,parent:()=>Promise.resolve({}),server_data_node:Be(s)}),c={node:await ce(),loader:ce,universal:null,server:null,data:null};return de({url:n,params:a,branch:[o,c],status:e,error:t,errors:[],route:null})}catch(o){if(o instanceof Le)return pt(new URL(o.location,location.href),{},0);throw o}}async function En(e){const t=e.href;if(ae.has(t))return ae.get(t);let n;try{const r=(async()=>{let a=await A.hooks.reroute({url:new URL(e),fetch:async(s,o)=>vn(s,o,e).promise})??e;if(typeof a=="string"){const s=new URL(e);A.hash?s.hash=a:s.pathname=a,a=s}return a})();ae.set(t,r),n=await r}catch{ae.delete(t);return}return n}async function me(e,t){if(e&&!_e(e,U,A.hash)){const n=await En(e);if(!n)return;const r=kn(n);for(const a of xe){const s=a.exec(r);if(s)return{id:he(e),invalidating:t,route:a,params:Rt(s),url:e}}}}function kn(e){return kt(A.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(U.length))||"/"}function he(e){return(A.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function mt({url:e,type:t,intent:n,delta:r,event:a,scroll:s}){let o=!1;const c=Fe(w,n,e,t,s??null);r!==void 0&&(c.navigation.delta=r),a!==void 0&&(c.navigation.event=a);const i={...c.navigation,cancel:()=>{o=!0,c.reject(new Error("navigation cancelled"))}};return ne||lt.forEach(l=>l(i)),o?null:c}async function Y({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:o={},redirect_count:c=0,nav_token:i={},accept:l=We,block:u=We,event:d}){const p=F;F=i;const h=await me(t,!1),f=e==="enter"?Fe(w,h,t,e):mt({url:t,type:e,delta:n?.delta,intent:h,scroll:n?.scroll,event:d});if(!f){u(),F===i&&(F=p);return}const g=R,b=I;l(),ne=!0,ue&&f.navigation.type!=="enter"&&C.navigating.set(ee.current=f.navigation);let _=h&&await gt(h);if(!_){if(_e(t,U,A.hash))return await K(t,s);_=await wt(t,{id:null},await G(new je(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,s)}if(t=h?.url||t,F!==i)return f.reject(new Error("navigation aborted")),!1;if(_.type==="redirect"){if(c<20){await Y({type:e,url:new URL(_.location,t),popped:n,keepfocus:r,noscroll:a,replace_state:s,state:o,redirect_count:c+1,nav_token:i}),f.fulfil(void 0);return}_=await ge({status:500,error:await G(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else _.props.page.status>=400&&await C.updated.check()&&(await ct(),await K(t,s));if(wn(),Oe(g),dt(b),_.props.page.url.pathname!==t.pathname&&(t.pathname=_.props.page.url.pathname),o=n?n.state:o,!n){const v=s?0:1,O={[q]:R+=v,[Q]:I+=v,[nt]:o};(s?history.replaceState:history.pushState).call(history,O,"",t),s||gn(R,I)}const T=h&&L?.id===h.id?L.fork:null;L=null,_.props.page.state=o;let m;if(ue){const v=(await Promise.all(Array.from(mn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(v.length>0){let W=function(){v.forEach(we=>{J.delete(we)})};v.push(W),v.forEach(we=>{J.add(we)})}const O=f.navigation.to;w={..._.state,nav:{params:O.params,route:O.route,url:O.url}},_.props.page&&(_.props.page.url=t);const $=T&&await T;$?m=$.commit():(H=null,ut.$set(_.props),H&&Object.assign(_.props.page,H),un(_.props.page),m=At?.()),ft=!0}else await _t(_,Se,!1);const{activeElement:y}=document;await m,await oe(),await oe();let E=null;if(He){const v=n?n.scroll:a?M():null;v?scrollTo(v.x,v.y):(E=t.hash&&document.getElementById(bt(t)))?E.scrollIntoView():scrollTo(0,0)}const k=document.activeElement!==y&&document.activeElement!==document.body;!r&&!k&&Tn(t,!E),He=!0,_.props.page&&(H&&Object.assign(_.props.page,H),Object.assign(S,_.props.page)),ne=!1,e==="popstate"&&ht(I),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=M()),J.forEach(v=>v(f.navigation)),C.navigating.set(ee.current=null)}async function wt(e,t,n,r,a){return e.origin===re&&e.pathname===location.pathname&&!Ce?await ge({status:r,error:n,url:e,route:t}):await K(e,a)}function Rn(){let e,t={element:void 0,href:void 0},n;x.addEventListener("mousemove",c=>{const i=c.target;clearTimeout(e),e=setTimeout(()=>{s(i,B.hover)},20)});function r(c){c.defaultPrevented||s(c.composedPath()[0],B.tap)}x.addEventListener("mousedown",r),x.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(c=>{for(const i of c)i.isIntersecting&&(Ae(new URL(i.target.href)),a.unobserve(i.target))},{threshold:0});async function s(c,i){const l=at(c,x),u=l===t.element&&l?.href===t.href&&i>=n;if(!l||u)return;const{url:d,external:p,download:h}=Ee(l,U,A.hash);if(p||h)return;const f=se(l),g=d&&he(w.url)===he(d);if(!(f.reload||g))if(i<=f.preload_data){t={element:l,href:l.href},n=B.tap;const b=await me(d,!1);if(!b)return;yn(b)}else i<=f.preload_code&&(t={element:l,href:l.href},n=i,Ae(d))}function o(){a.disconnect();for(const c of x.querySelectorAll("a")){const{url:i,external:l,download:u}=Ee(c,U,A.hash);if(l||u)continue;const d=se(c);d.reload||(d.preload_code===B.viewport&&a.observe(c),d.preload_code===B.eager&&Ae(i))}}J.add(o),o()}function G(e,t){if(e instanceof pe)return e.body;const n=ie(e),r=ln(e);return A.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Dn(e,t={}){return e=new URL(Ne(e)),e.origin!==re?Promise.reject(new Error("goto: invalid URL")):pt(e,t,0)}function Sn(e){if(typeof e=="function")le.push(e);else{const{href:t}=new URL(e,location.href);le.push(n=>n.href===t)}}function In(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(ze(),!ne){const r=Fe(w,void 0,null,"leave"),a={...r.navigation,cancel:()=>{n=!0,r.reject(new Error("navigation cancelled"))}};lt.forEach(s=>s(a))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&ze()}),navigator.connection?.saveData||Rn(),x.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=at(t.composedPath()[0],x);if(!n)return;const{url:r,external:a,target:s,download:o}=Ee(n,U,A.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const c=se(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[l,u]=(A.hash?r.hash.replace(/^#/,""):r.href).split("#"),d=l===ye(location);if(a||c.reload&&(!d||!u)){mt({url:r,type:"link",event:t})?ne=!0:t.preventDefault();return}if(u!==void 0&&d){const[,p]=w.url.href.split("#");if(p===u){if(t.preventDefault(),u===""||u==="top"&&n.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const h=n.ownerDocument.getElementById(decodeURIComponent(u));h&&(h.scrollIntoView(),h.focus())}return}if(X=!0,Oe(R),e(r),!c.replace_state)return;X=!1}t.preventDefault(),await new Promise(p=>{requestAnimationFrame(()=>{setTimeout(p,0)}),setTimeout(p,100)}),await Y({type:"link",url:r,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??r.href===location.href,event:t})}),x.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if((r?.formTarget||n.target)==="_blank"||(r?.formMethod||n.method)!=="get")return;const o=new URL(r?.hasAttribute("formaction")&&r?.formAction||n.action);if(_e(o,U,!1))return;const c=t.target,i=se(c);if(i.reload)return;t.preventDefault(),t.stopPropagation();const l=new FormData(c,r);o.search=new URLSearchParams(l).toString(),Y({type:"form",url:o,keepfocus:i.keepfocus,noscroll:i.noscroll,replace_state:i.replace_state??o.href===location.href,event:t})}),addEventListener("popstate",async t=>{if(!Ue){if(t.state?.[q]){const n=t.state[q];if(F={},n===R)return;const r=D[n],a=t.state[nt]??{},s=new URL(t.state[Ft]??location.href),o=t.state[Q],c=w.url?ye(location)===ye(w.url):!1;if(o===I&&(ft||c)){a!==S.state&&(S.state=a),e(s),D[R]=M(),r&&scrollTo(r.x,r.y),R=n;return}const l=n-R;await Y({type:"popstate",url:s,popped:{state:a,scroll:r,delta:l},accept:()=>{R=n,I=o},block:()=>{history.go(-l)},nav_token:F,event:t})}else if(!X){const n=new URL(location.href);e(n),A.hash&&location.reload()}}}),addEventListener("hashchange",()=>{X&&(X=!1,history.replaceState({...history.state,[q]:++R,[Q]:I},"",location.href))});for(const t of document.querySelectorAll("link"))_n.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&C.navigating.set(ee.current=null)});function e(t){w.url=S.url=t,C.page.set(Me(S)),C.page.notify()}}async function Un(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:o,data:c,form:i}){Ce=!0;const l=new URL(location.href);let u;({params:a={},route:s={id:null}}=await me(l,!1)||{}),u=xe.find(({id:h})=>h===s.id);let d,p=!0;try{const h=r.map(async(g,b)=>{const _=c[b];return _?.uses&&(_.uses=vt(_.uses)),$e({loader:A.nodes[g],url:l,params:a,route:s,parent:async()=>{const T={};for(let m=0;m<b;m+=1)Object.assign(T,(await h[m]).data);return T},server_data_node:Be(_)})}),f=await Promise.all(h);if(u){const g=u.layouts;for(let b=0;b<g.length;b++)g[b]||f.splice(b,0,void 0)}d=await de({url:l,params:a,branch:f,status:t,error:n,errors:u?.errors,form:i,route:u??null})}catch(h){if(h instanceof Le){await K(new URL(h.location,location.href));return}d=await ge({status:ie(h),error:await G(h,{url:l,params:a,route:s}),url:l,route:s}),e.textContent="",p=!1}d.props.page&&(d.props.page.state={}),await _t(d,e,p)}async function yt(e,t){const n=new URL(e);n.pathname=pn(e.pathname),e.pathname.endsWith("/")&&n.searchParams.append(cn,"1"),n.searchParams.append(sn,t.map(s=>s?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let s;throw a.headers.get("content-type")?.includes("application/json")?s=await a.json():a.status===404?s="Not Found":a.status===500&&(s="Internal Error"),new pe(a.status,s)}return new Promise(async s=>{const o=new Map,c=a.body.getReader();function i(u){return rn(u,{...A.decoders,Promise:d=>new Promise((p,h)=>{o.set(d,{fulfil:p,reject:h})})})}let l="";for(;;){const{done:u,value:d}=await c.read();if(u&&!l)break;for(l+=!d&&l?`
|
|
2
|
-
`:It.decode(d,{stream:!0});;){const p=l.indexOf(`
|
|
3
|
-
`);if(p===-1)break;const h=JSON.parse(l.slice(0,p));if(l=l.slice(p+1),h.type==="redirect")return s(h);if(h.type==="data")h.nodes?.forEach(f=>{f?.type==="data"&&(f.uses=vt(f.uses),f.data=i(f.data))}),s(h);else if(h.type==="chunk"){const{id:f,data:g,error:b}=h,_=o.get(f);o.delete(f),b?_.reject(i(b)):_.fulfil(i(g))}}}})}function vt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}let Ue=!1;function Tn(e,t=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const r=bt(e);if(r&&document.getElementById(r)){const{x:s,y:o}=M();setTimeout(()=>{const c=history.state;Ue=!0,location.replace(new URL(`#${r}`,location.href)),history.replaceState(c,"",e),t&&scrollTo(s,o),Ue=!1})}else{const s=document.body,o=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),o!==null?s.setAttribute("tabindex",o):s.removeAttribute("tabindex")}const a=getSelection();if(a&&a.type!=="None"){const s=[];for(let o=0;o<a.rangeCount;o+=1)s.push(a.getRangeAt(o));setTimeout(()=>{if(a.rangeCount===s.length){for(let o=0;o<a.rangeCount;o+=1){const c=s[o],i=a.getRangeAt(o);if(c.commonAncestorContainer!==i.commonAncestorContainer||c.startContainer!==i.startContainer||c.endContainer!==i.endContainer||c.startOffset!==i.startOffset||c.endOffset!==i.endOffset)return}a.removeAllRanges()}})}}}function Fe(e,t,n,r,a=null){let s,o;const c=new Promise((l,u)=>{s=l,o=u});return c.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:M()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:a},willUnload:!t,type:r,complete:c},fulfil:s,reject:o}}function Me(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Ln(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function bt(e){let t;if(A.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Cn as a,Dn as g,Pn as l,S as p,C as s};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.D_9EwVmq.js","../chunks/Cg3dlX05.js","../chunks/DYuMZGL5.js","../chunks/DZvnhU_8.js","../assets/ColorPicker.CV4IKef4.css","../chunks/nWG9RHyB.js","../chunks/DJvX78LW.js","../chunks/Bn-6X1BO.js","../chunks/CG453M9q.js","../chunks/CSjf4fBs.js","../assets/0.NV8k8wxG.css","../nodes/1.C4eFlqSB.js","../chunks/DZQMsHM5.js","../assets/1.B_AnTlN1.css","../nodes/2.CdC092Za.js","../chunks/BRqaaL5D.js","../chunks/xs1Xl3_e.js","../chunks/gQJcRhou.js","../chunks/BDcFu3l7.js","../chunks/BLszSzTT.js","../chunks/C_9BZILB.js","../chunks/CRkG7oE4.js","../chunks/pRcLbE0d.js","../chunks/C5VOyQCG.js","../assets/2.DjiwkLqE.css","../nodes/3.Dhf4ZWW0.js","../assets/3.DHxQoulp.css","../nodes/4.BSVqdrrD.js","../chunks/DzuS5Nbr.js","../assets/4.D4EDSN4H.css","../nodes/5.Cfj35gpY.js","../assets/5.C5qz-NeI.css","../nodes/6.B3SEB_li.js","../chunks/8lO1IL7u.js","../chunks/BdtLzPpO.js","../assets/6.DzV0p3l-.css","../nodes/7.DV8cJ1lX.js","../chunks/B9WQy_3X.js","../assets/ChatView.Bnlg-oAF.css","../assets/7.CEbRAOOf.css","../nodes/8.Bs362gyb.js","../assets/8.BhoBXADL.css","../nodes/9.Cf7_3uqT.js","../chunks/PPVm8Dsz.js","../assets/9.v5KA95xm.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_}from"../chunks/PPVm8Dsz.js";import{j as V,Q as H,f as Q,R as U,S as W,T as X,m as q,l as j,U as z,n as J,b,V as K,g as u,W as Z,X as $,Y as tt,p as et,E as rt,F as at,v as st,P as ot,A as R,d as nt,w as it,s as O,c as ct,r as _t,t as ut,x as p}from"../chunks/DYuMZGL5.js";import{B as mt,k as dt,m as lt,u as ft,p as T,i as A,a as v,j as x,f as k,g as D,t as ht,s as vt}from"../chunks/Cg3dlX05.js";function I(s,t,a){var n;V&&(n=J,H());var o=new mt(s);Q(()=>{var e=t()??null;if(V){var r=W(n),c=r===z,P=e!==null;if(c!==P){var g=X();q(g),o.anchor=g,j(!1),o.ensure(e,e&&(f=>a(f,e))),j(!0);return}}o.ensure(e,e&&(f=>a(f,e)))},U)}function gt(s){return class extends Et{constructor(t){super({component:s,...t})}}}class Et{#e;#t;constructor(t){var a=new Map,n=(e,r)=>{var c=tt(r,!1,!1);return a.set(e,c),c};const o=new Proxy({...t.props||{},$$events:{}},{get(e,r){return u(a.get(r)??n(r,Reflect.get(e,r)))},has(e,r){return r===K?!0:(u(a.get(r)??n(r,Reflect.get(e,r))),Reflect.has(e,r))},set(e,r,c){return b(a.get(r)??n(r,c),c),Reflect.set(e,r,c)}});this.#t=(t.hydrate?dt:lt)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError}),(!t?.props?.$$host||t.sync===!1)&&Z(),this.#e=o.$$events;for(const e of Object.keys(this.#t))e==="$set"||e==="$destroy"||e==="$on"||$(this,e,{get(){return this.#t[e]},set(r){this.#t[e]=r},enumerable:!0});this.#t.$set=e=>{Object.assign(o,e)},this.#t.$destroy=()=>{ft(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const n=(...o)=>a.call(this,...o);return this.#e[t].push(n),()=>{this.#e[t]=this.#e[t].filter(o=>o!==n)}}$destroy(){this.#t.$destroy()}}const xt={};var yt=k('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),Rt=k("<!> <!>",1);function bt(s,t){et(t,!0);let a=T(t,"components",23,()=>[]),n=T(t,"data_0",3,null),o=T(t,"data_1",3,null);rt(()=>t.stores.page.set(t.page)),at(()=>{t.stores,t.page,t.constructors,a(),t.form,n(),o(),t.stores.page.notify()});let e=O(!1),r=O(!1),c=O(null);st(()=>{const i=t.stores.page.subscribe(()=>{u(e)&&(b(r,!0),ot().then(()=>{b(c,document.title||"untitled page",!0)}))});return b(e,!0),i});const P=p(()=>t.constructors[1]);var g=Rt(),f=R(g);{var S=i=>{const m=p(()=>t.constructors[0]);var d=x(),E=R(d);I(E,()=>u(m),(l,h)=>{D(h(l,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(y,Ot)=>{var L=x(),N=R(L);I(N,()=>u(P),(Y,B)=>{D(B(Y,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),G=>a()[1]=G,()=>a()?.[1])}),v(y,L)},$$slots:{default:!0}}),y=>a()[0]=y,()=>a()?.[0])}),v(i,d)},C=i=>{const m=p(()=>t.constructors[0]);var d=x(),E=R(d);I(E,()=>u(m),(l,h)=>{D(h(l,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),y=>a()[0]=y,()=>a()?.[0])}),v(i,d)};A(f,i=>{t.constructors[1]?i(S):i(C,-1)})}var F=nt(f,2);{var M=i=>{var m=yt(),d=ct(m);{var E=l=>{var h=ht();ut(()=>vt(h,u(c))),v(l,h)};A(d,l=>{u(r)&&l(E)})}_t(m),v(i,m)};A(F,i=>{u(e)&&i(M)})}v(s,g),it()}const Dt=gt(bt),It=[()=>_(()=>import("../nodes/0.D_9EwVmq.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]),import.meta.url),()=>_(()=>import("../nodes/1.C4eFlqSB.js"),__vite__mapDeps([11,1,2,12,5,6,3,4,13]),import.meta.url),()=>_(()=>import("../nodes/2.CdC092Za.js"),__vite__mapDeps([14,1,2,3,4,12,5,7,15,8,16,17,18,19,20,21,22,23,24]),import.meta.url),()=>_(()=>import("../nodes/3.Dhf4ZWW0.js"),__vite__mapDeps([25,1,2,12,5,3,4,17,18,19,20,21,22,26]),import.meta.url),()=>_(()=>import("../nodes/4.BSVqdrrD.js"),__vite__mapDeps([27,1,2,3,4,12,28,17,18,22,29]),import.meta.url),()=>_(()=>import("../nodes/5.Cfj35gpY.js"),__vite__mapDeps([30,1,2,3,4,21,17,18,22,31]),import.meta.url),()=>_(()=>import("../nodes/6.B3SEB_li.js"),__vite__mapDeps([32,1,2,3,4,12,5,33,28,7,15,16,17,18,34,19,23,35]),import.meta.url),()=>_(()=>import("../nodes/7.DV8cJ1lX.js"),__vite__mapDeps([36,1,2,12,3,4,33,5,16,18,34,37,20,38,39]),import.meta.url),()=>_(()=>import("../nodes/8.Bs362gyb.js"),__vite__mapDeps([40,1,2,3,4,12,5,15,8,9,16,17,18,34,23,41]),import.meta.url),()=>_(()=>import("../nodes/9.Cf7_3uqT.js"),__vite__mapDeps([42,43,1,2,12,3,4,5,6,28,18,34,37,20,38,23,44]),import.meta.url)],Lt=[0],Vt={"/":[-3],"/activity":[-4],"/config":[-5],"/neurolink":[-6],"/project":[6],"/session/[id]":[7],"/terminals":[8],"/terminals/[id]":[9]},w={handleError:(({error:s})=>{console.error(s)}),reroute:(()=>{}),transport:{}},Pt=Object.fromEntries(Object.entries(w.transport).map(([s,t])=>[s,t.decode])),jt=Object.fromEntries(Object.entries(w.transport).map(([s,t])=>[s,t.encode])),kt=!1,wt=(s,t)=>Pt[s](t);export{wt as decode,Pt as decoders,Vt as dictionary,jt as encoders,kt as hash,w as hooks,xt as matchers,It as nodes,Dt as root,Lt as server_loads};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as o,a as r}from"../chunks/nWG9RHyB.js";export{o as load_css,r as start};
|
|
Binary file
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{a as A,c as F,f as K,e as M}from"../chunks/Cg3dlX05.js";import{p as U,F as V,v as z,t as G,w as H,b as m,c as a,d as i,g as l,r as s,B as w,s as J,x as _}from"../chunks/DYuMZGL5.js";import{P as Q,B as X,a as Y,c as h,s as y}from"../chunks/DZvnhU_8.js";import{g as Z}from"../chunks/nWG9RHyB.js";import{p as tt}from"../chunks/DJvX78LW.js";import{B as et}from"../chunks/Bn-6X1BO.js";import{S as at}from"../chunks/CG453M9q.js";import{T as st}from"../chunks/CSjf4fBs.js";const rt=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<rect x="3" y="3" width="7" height="7"/>
|
|
3
|
-
<rect x="14" y="3" width="7" height="7"/>
|
|
4
|
-
<rect x="3" y="14" width="7" height="7"/>
|
|
5
|
-
<rect x="14" y="14" width="7" height="7"/>
|
|
6
|
-
</svg>
|
|
7
|
-
`;var nt=K('<div class="app"><header class="header"><div class="header-content"><a href="/" class="logo"><img src="/app-icon.png" alt="Shooter" class="logo-icon" width="24" height="24"/> <span class="logo-text">Shooter</span></a> <div class="nav-right svelte-12qhfyh"><!> <!></div></div></header> <div class="content-area svelte-12qhfyh"><!></div> <nav class="bottom-tabs svelte-12qhfyh"><div class="bottom-tabs-inner svelte-12qhfyh"><a href="/"><!> <span>Dashboard</span></a> <a href="/activity"><!> <span>Activity</span></a> <a href="/terminals"><!> <span>Terminals</span></a></div></nav></div>');function gt(D,r){U(r,!0);const n=()=>M(tt,"$page",O),[O,W]=F();V(()=>{if(r.data?.aiProviders&&(window.__aiProviders=r.data.aiProviders,r.data.neurolinkProvider)){const t=window.process;t?.env&&(t.env.NEUROLINK_PROVIDER=r.data.neurolinkProvider)}});let o=J("unknown");const j={degraded:"Degraded",error:"Offline",healthy:"Online",unknown:"Checking"},L={degraded:"pill-status-degraded",error:"pill-status-offline",healthy:"pill-status-online",unknown:"pill-status-unknown"};z(()=>{k();const t=setInterval(()=>{k()},3e4);return()=>{clearInterval(t)}});async function k(){try{const t=await fetch("/api/health");if(!t.ok){m(o,"error");return}const e=await t.json();m(o,e.status==="healthy"||e.status==="degraded"||e.status==="error"?e.status:"unknown",!0)}catch{m(o,"error")}}var d=nt(),u=a(d),b=a(u),S=i(a(b),2),x=a(S);{let t=_(()=>j[l(o)]||"Checking"),e=_(()=>L[l(o)]||"pill-status-unknown");Q(x,{get text(){return l(t)},get classes(){return l(e)}})}var R=i(x,2);{const t=f=>{h(f,{get svg(){return at},classes:"icon-18"})};let e=_(()=>n().url.pathname==="/config"?"btn-gear-active":"");X(R,{get classes(){return`btn-gear ${l(e)??""}`},onclick:()=>{Z("/config")},ariaLabel:"Settings",icon:t,$$slots:{icon:!0}})}s(S),s(b),s(u);var g=i(u,2),T=a(g);Y(T,()=>r.children),s(g);var P=i(g,2),q=a(P),c=a(q);let B;var E=a(c);h(E,{get svg(){return rt},classes:"icon-26"}),w(2),s(c);var v=i(c,2);let I;var N=a(v);h(N,{get svg(){return et},classes:"icon-26"}),w(2),s(v);var p=i(v,2);let C;var $=a(p);h($,{get svg(){return st},classes:"icon-26"}),w(2),s(p),s(q),s(P),s(d),G((t,e,f)=>{B=y(c,1,"tab-item svelte-12qhfyh",null,B,t),I=y(v,1,"tab-item svelte-12qhfyh",null,I,e),C=y(p,1,"tab-item svelte-12qhfyh",null,C,f)},[()=>({active:n().url.pathname==="/"||n().url.pathname.startsWith("/project")||n().url.pathname.startsWith("/session")}),()=>({active:n().url.pathname.startsWith("/activity")}),()=>({active:n().url.pathname.startsWith("/terminals")})]),A(D,d),H(),W()}export{gt as component};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|