@juspay/shooter 1.0.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/.claude/hooks/notifier.cjs +1431 -0
- package/.claude/settings.json +162 -0
- package/README.md +515 -0
- package/bin/shooter.cjs +141 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css +1 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css +1 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.br +1 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css +1 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css +1 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.br +0 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css +1 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.br +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css +1 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css.br +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css +1 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.br +0 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.gz +0 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css +1 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.br +0 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +1 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.br +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.gz +0 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css +1 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.br +0 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js +56 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js +9 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js.br +0 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js +1 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js.br +0 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js +1 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js +1 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js +1 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js +1 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js.br +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js +6 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js +11 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js.br +0 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js +1 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js.br +0 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js +1 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js +1 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js +126 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js +1 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js.br +0 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js +1 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js.br +0 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js +2 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js.br +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js +1 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js.br +0 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js +1 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js +2 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js.br +0 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js +1 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js +1 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js +1 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js +1 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js +3 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js +1 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js +1 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js +2 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js +2 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.gz +0 -0
- package/build/client/_app/version.json +1 -0
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/app-icon.png +0 -0
- package/build/client/apple-touch-icon.png +0 -0
- package/build/client/favicon.png +0 -0
- package/build/client/favicon.svg +10 -0
- package/build/client/favicon.svg.br +0 -0
- package/build/client/favicon.svg.gz +0 -0
- package/build/client/manifest.webmanifest +1 -0
- package/build/client/pwa-192x192.png +0 -0
- package/build/client/pwa-512x512.png +0 -0
- package/build/client/registerSW.js +1 -0
- package/build/client/registerSW.js.br +0 -0
- package/build/client/registerSW.js.gz +0 -0
- package/build/client/sw.js +222 -0
- package/build/client/sw.js.br +0 -0
- package/build/client/sw.js.gz +0 -0
- package/build/client/workbox-5119daf5.js +3395 -0
- package/build/client/workbox-5119daf5.js.br +0 -0
- package/build/client/workbox-5119daf5.js.gz +0 -0
- package/build/env.js +94 -0
- package/build/handler.js +1494 -0
- package/build/index.js +345 -0
- package/build/pty-holder.cjs +510 -0
- package/build/server/chunks/0-q2IUp76Y.js +9 -0
- package/build/server/chunks/0-q2IUp76Y.js.map +1 -0
- package/build/server/chunks/1-CU50G5wZ.js +9 -0
- package/build/server/chunks/1-CU50G5wZ.js.map +1 -0
- package/build/server/chunks/2-D01t9s8T.js +9 -0
- package/build/server/chunks/2-D01t9s8T.js.map +1 -0
- package/build/server/chunks/3-5PUQ04wC.js +9 -0
- package/build/server/chunks/3-5PUQ04wC.js.map +1 -0
- package/build/server/chunks/4-e7gywnSG.js +9 -0
- package/build/server/chunks/4-e7gywnSG.js.map +1 -0
- package/build/server/chunks/5-CA1SA6KZ.js +9 -0
- package/build/server/chunks/5-CA1SA6KZ.js.map +1 -0
- package/build/server/chunks/6-71H221sV.js +9 -0
- package/build/server/chunks/6-71H221sV.js.map +1 -0
- package/build/server/chunks/7-Bo-vmdyz.js +9 -0
- package/build/server/chunks/7-Bo-vmdyz.js.map +1 -0
- package/build/server/chunks/_layout.svelte-SFHOxs74.js +132 -0
- package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +1 -0
- package/build/server/chunks/_page.svelte-B4w-2wD-.js +120 -0
- package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +1 -0
- package/build/server/chunks/_page.svelte-B_qAXjkh.js +213 -0
- package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +1 -0
- package/build/server/chunks/_page.svelte-CsF1_TRG.js +50 -0
- package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +1 -0
- package/build/server/chunks/_page.svelte-DJC6U-P0.js +68 -0
- package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +1 -0
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js +407 -0
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +1 -0
- package/build/server/chunks/_page.svelte-LbhhjP21.js +148 -0
- package/build/server/chunks/_page.svelte-LbhhjP21.js.map +1 -0
- package/build/server/chunks/_server.ts-BL2FGb5Z.js +387 -0
- package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +1 -0
- package/build/server/chunks/_server.ts-BgdjBZco.js +47 -0
- package/build/server/chunks/_server.ts-BgdjBZco.js.map +1 -0
- package/build/server/chunks/_server.ts-BihKSdj_.js +59 -0
- package/build/server/chunks/_server.ts-BihKSdj_.js.map +1 -0
- package/build/server/chunks/_server.ts-BjOJsoy4.js +63 -0
- package/build/server/chunks/_server.ts-BjOJsoy4.js.map +1 -0
- package/build/server/chunks/_server.ts-C29xzfaw.js +77 -0
- package/build/server/chunks/_server.ts-C29xzfaw.js.map +1 -0
- package/build/server/chunks/_server.ts-CPa6DgIt.js +71 -0
- package/build/server/chunks/_server.ts-CPa6DgIt.js.map +1 -0
- package/build/server/chunks/_server.ts-CbDRDIoP.js +36 -0
- package/build/server/chunks/_server.ts-CbDRDIoP.js.map +1 -0
- package/build/server/chunks/_server.ts-Cl1OEWL4.js +54 -0
- package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +1 -0
- package/build/server/chunks/_server.ts-ColfDHW8.js +60 -0
- package/build/server/chunks/_server.ts-ColfDHW8.js.map +1 -0
- package/build/server/chunks/_server.ts-Cv_OrRuL.js +494 -0
- package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +1 -0
- package/build/server/chunks/_server.ts-D4MNi4cD.js +25 -0
- package/build/server/chunks/_server.ts-D4MNi4cD.js.map +1 -0
- package/build/server/chunks/_server.ts-DRVbgm6k.js +125 -0
- package/build/server/chunks/_server.ts-DRVbgm6k.js.map +1 -0
- package/build/server/chunks/_server.ts-DfajWaqh.js +39 -0
- package/build/server/chunks/_server.ts-DfajWaqh.js.map +1 -0
- package/build/server/chunks/_server.ts-y9-WYDMa.js +35 -0
- package/build/server/chunks/_server.ts-y9-WYDMa.js.map +1 -0
- package/build/server/chunks/auth-CEgFis71.js +32 -0
- package/build/server/chunks/auth-CEgFis71.js.map +1 -0
- package/build/server/chunks/client-CxCatAKr.js +255 -0
- package/build/server/chunks/client-CxCatAKr.js.map +1 -0
- package/build/server/chunks/error.svelte-BqdwMWdK.js +26 -0
- package/build/server/chunks/error.svelte-BqdwMWdK.js.map +1 -0
- package/build/server/chunks/exports-CJ0Q5XmL.js +4081 -0
- package/build/server/chunks/exports-CJ0Q5XmL.js.map +1 -0
- package/build/server/chunks/index2-DAxIoAO-.js +36 -0
- package/build/server/chunks/index2-DAxIoAO-.js.map +1 -0
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +137 -0
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +1 -0
- package/build/server/chunks/library-apns-BHxLmuIx.js +104 -0
- package/build/server/chunks/library-apns-BHxLmuIx.js.map +1 -0
- package/build/server/chunks/markdown-Bxrl3cCF.js +1241 -0
- package/build/server/chunks/markdown-Bxrl3cCF.js.map +1 -0
- package/build/server/chunks/pending-requests-D8UiTw7L.js +44 -0
- package/build/server/chunks/pending-requests-D8UiTw7L.js.map +1 -0
- package/build/server/chunks/pty-manager-C0FhBiVq.js +1697 -0
- package/build/server/chunks/pty-manager-C0FhBiVq.js.map +1 -0
- package/build/server/chunks/shared-server-BDY8jh20.js +200 -0
- package/build/server/chunks/shared-server-BDY8jh20.js.map +1 -0
- package/build/server/chunks/stores-D0HorpgL.js +36 -0
- package/build/server/chunks/stores-D0HorpgL.js.map +1 -0
- package/build/server/index.js +6466 -0
- package/build/server/index.js.map +1 -0
- package/build/server/manifest.js +184 -0
- package/build/server/manifest.js.map +1 -0
- package/build/shims.js +32 -0
- package/package.json +94 -0
- package/scripts/clipboard-shims/wl-paste +48 -0
- package/scripts/clipboard-shims/xclip +31 -0
- package/scripts/install.sh +477 -0
- package/scripts/setup-node-pty.sh +63 -0
- package/scripts/setup.cjs +571 -0
- package/scripts/test-runner.ts +243 -0
- package/scripts/vercel-env-commands.sh +60 -0
- package/server.ts +139 -0
- package/src/app.css +1835 -0
- package/src/app.d.ts +31 -0
- package/src/app.html +24 -0
- package/src/generated/types/APN.ts +305 -0
- package/src/generated/types/CLI.ts +52 -0
- package/src/generated/types/JWT.ts +92 -0
- package/src/generated/types/Terminal.ts +2736 -0
- package/src/generated/types/index.ts +6 -0
- package/src/lib/assets/icons/alert-triangle.svg +5 -0
- package/src/lib/assets/icons/bell.svg +4 -0
- package/src/lib/assets/icons/check-circle.svg +4 -0
- package/src/lib/assets/icons/file.svg +4 -0
- package/src/lib/assets/icons/folder.svg +3 -0
- package/src/lib/assets/icons/play.svg +3 -0
- package/src/lib/assets/icons/refresh.svg +4 -0
- package/src/lib/assets/icons/settings.svg +4 -0
- package/src/lib/assets/icons/terminal.svg +1 -0
- package/src/lib/assets/icons/tool.svg +3 -0
- package/src/lib/assets/icons/x-circle.svg +5 -0
- package/src/lib/modules/client/common/Card.svelte +26 -0
- package/src/lib/modules/client/common/EmptyState.svelte +36 -0
- package/src/lib/modules/client/common/Icon.svelte +61 -0
- package/src/lib/modules/client/common/StatusBadge.svelte +38 -0
- package/src/lib/modules/client/common/cache.ts +31 -0
- package/src/lib/modules/client/common/config-guard.ts +18 -0
- package/src/lib/modules/client/common/index.ts +12 -0
- package/src/lib/modules/client/common/markdown.ts +23 -0
- package/src/lib/modules/client/common/native-bridge.ts +50 -0
- package/src/lib/modules/client/common/time.ts +22 -0
- package/src/lib/modules/client/common/tool-title.ts +28 -0
- package/src/lib/modules/client/terminal/ChatView.svelte +400 -0
- package/src/lib/modules/client/terminal/CommandPalette.svelte +60 -0
- package/src/lib/modules/client/terminal/ConnectionStatus.svelte +99 -0
- package/src/lib/modules/client/terminal/LaunchSheet.svelte +294 -0
- package/src/lib/modules/client/terminal/QuickKeys.svelte +71 -0
- package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +79 -0
- package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +70 -0
- package/src/lib/modules/client/terminal/xterm-wrapper.ts +243 -0
- package/src/lib/modules/server/apn/library-apns.ts +137 -0
- package/src/lib/modules/server/apn/notification-history.ts +35 -0
- package/src/lib/modules/server/apn/notification-sessions.ts +117 -0
- package/src/lib/modules/server/apn/pending-requests.ts +65 -0
- package/src/lib/modules/server/apn/types.ts +51 -0
- package/src/lib/modules/server/auth.ts +34 -0
- package/src/lib/modules/server/cli/index.ts +79 -0
- package/src/lib/modules/server/cli/runner.ts +162 -0
- package/src/lib/modules/server/fcm/fcm-service.ts +72 -0
- package/src/lib/modules/server/sessions/jsonl-parser.ts +197 -0
- package/src/lib/modules/server/sessions/jsonl-reader.ts +301 -0
- package/src/lib/modules/server/sessions/opencode-reader.ts +264 -0
- package/src/lib/modules/server/sessions/types.ts +53 -0
- package/src/lib/modules/server/terminal/holder-client.ts +273 -0
- package/src/lib/modules/server/terminal/opencode-watcher.ts +661 -0
- package/src/lib/modules/server/terminal/pty-holder.cjs +510 -0
- package/src/lib/modules/server/terminal/pty-manager.ts +1012 -0
- package/src/lib/modules/server/terminal/session-watcher.ts +320 -0
- package/src/lib/modules/server/terminal/terminal-store.ts +198 -0
- package/src/lib/modules/server/ws/events-handler.ts +73 -0
- package/src/lib/modules/server/ws/keepalive.ts +108 -0
- package/src/lib/modules/server/ws/server.ts +93 -0
- package/src/lib/modules/server/ws/session-handler.ts +462 -0
- package/src/lib/modules/server/ws/terminal-handler.ts +197 -0
- package/src/lib/modules/server/ws/ticket-store.ts +58 -0
- package/src/lib/theme.css +529 -0
- package/src/lib/types/config.ts +6 -0
- package/src/routes/+layout.svelte +218 -0
- package/src/routes/+page.svelte +261 -0
- package/src/routes/api/debug/+server.ts +33 -0
- package/src/routes/api/device-token/+server.ts +85 -0
- package/src/routes/api/health/+server.ts +100 -0
- package/src/routes/api/notify/+server.ts +418 -0
- package/src/routes/api/qr-config/+server.ts +45 -0
- package/src/routes/api/response/+server.ts +73 -0
- package/src/routes/api/sessions/+server.ts +120 -0
- package/src/routes/api/terminals/+server.ts +141 -0
- package/src/routes/api/terminals/[id]/+server.ts +75 -0
- package/src/routes/api/terminals/[id]/paste-image/+server.ts +61 -0
- package/src/routes/api/terminals/[id]/resize/+server.ts +60 -0
- package/src/routes/api/webhook/+server.ts +42 -0
- package/src/routes/api/ws-status/+server.ts +23 -0
- package/src/routes/api/ws-ticket/+server.ts +86 -0
- package/src/routes/config/+page.svelte +600 -0
- package/src/routes/project/+page.svelte +274 -0
- package/src/routes/session/[id]/+page.svelte +434 -0
- package/src/routes/terminals/+page.svelte +618 -0
- package/src/routes/terminals/[id]/+page.svelte +968 -0
- package/svelte.config.js +18 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.CzkdvJ7j.js","../chunks/RpcNruLP.js","../chunks/BNJphC1q.js","../chunks/Dkkpz_4D.js","../chunks/CgCpWzEA.js","../assets/markdown.B0b5w2tq.css","../chunks/CtQ8EED1.js","../chunks/a-St0Zwo.js","../assets/0.CM9Hl6d-.css","../nodes/1.MG1QhfrI.js","../chunks/bo70OQUZ.js","../nodes/2.B4MlOSh6.js","../chunks/DoczjQhA.js","../chunks/Bvk7mfPM.js","../chunks/DERQCisl.js","../chunks/CGLrx-H5.js","../assets/2.CAShZ7lQ.css","../nodes/3.DIwYkjDn.js","../assets/3.C0uFg0IS.css","../nodes/4.D-cIe70D.js","../assets/4.cJuCkJKZ.css","../nodes/5.D7zPRe3L.js","../chunks/DKrg8TQs.js","../assets/ChatView.CsdBAOKx.css","../assets/5.DRjApZQW.css","../nodes/6.BB7QE48r.js","../chunks/CAokzuPQ.js","../assets/6.AraZrY8I.css","../nodes/7.D8mqsrZG.js","../chunks/PPVm8Dsz.js","../assets/7.BCJ1IuMx.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as d}from"../chunks/PPVm8Dsz.js";import{h as J,Z as Q,d as U,_ as W,z as b,L as X,u as m,a0 as $,a1 as tt,a2 as et,p as rt,K as at,M as st,t as v,k as R,m as ot,Y as nt,G as O,x as P,q as g,B as it,r as ct,w as mt,E as _t,F as I,I as ut}from"../chunks/BNJphC1q.js";import{j as dt,m as lt,u as ft,c as ht,l as vt,a as p,d as T,b as C,f as M,t as gt,e as pt}from"../chunks/RpcNruLP.js";import{c as yt}from"../chunks/CAokzuPQ.js";import{B as Et,p as w,i as x,c as A,w as Pt}from"../chunks/CgCpWzEA.js";function L(o,t,n){J&&Q();var a=new Et(o);U(()=>{var s=t()??null;a.ensure(s,s&&(e=>n(e,s)))},W)}function bt(o){return class extends Rt{constructor(t){super({component:o,...t})}}}class Rt{#e;#t;constructor(t){var n=new Map,a=(e,r)=>{var _=et(r,!1,!1);return n.set(e,_),_};const s=new Proxy({...t.props||{},$$events:{}},{get(e,r){return m(n.get(r)??a(r,Reflect.get(e,r)))},has(e,r){return r===X?!0:(m(n.get(r)??a(r,Reflect.get(e,r))),Reflect.has(e,r))},set(e,r,_){return b(n.get(r)??a(r,_),_),Reflect.set(e,r,_)}});this.#t=(t.hydrate?dt:lt)(t.component,{target:t.target,anchor:t.anchor,props:s,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&$(),this.#e=s.$$events;for(const e of Object.keys(this.#t))e==="$set"||e==="$destroy"||e==="$on"||tt(this,e,{get(){return this.#t[e]},set(r){this.#t[e]=r},enumerable:!0});this.#t.$set=e=>{Object.assign(s,e)},this.#t.$destroy=()=>{ft(this.#t)}}$set(t){this.#t.$set(t)}$on(t,n){this.#e[t]=this.#e[t]||[];const a=(...s)=>n.call(this,...s);return this.#e[t].push(a),()=>{this.#e[t]=this.#e[t].filter(s=>s!==a)}}$destroy(){this.#t.$destroy()}}const Dt={};c[I]=".svelte-kit/generated/root.svelte";var Ot=C(M('<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>'),c[I],[[63,1]]),Tt=C(M("<!> <!>",1),c[I],[]);function c(o,t){ht(new.target),rt(t,!0,c);var n=yt(t);let a=w(t,"components",23,()=>[]),s=w(t,"data_0",3,null),e=w(t,"data_1",3,null);at(()=>t.stores.page.set(t.page)),st(()=>{t.stores,t.page,t.constructors,a(),t.form,s(),e(),t.stores.page.notify()});let r=v(R(!1),"mounted"),_=v(R(!1),"navigated"),k=v(R(null),"title");ot(()=>{const i=t.stores.page.subscribe(()=>{m(r)&&(b(_,!0),nt().then(()=>{b(k,document.title||"untitled page",!0)}))});return b(r,!0),i});const S=v(O(()=>t.constructors[1]),"Pyramid_1");var B={...vt()},j=Tt(),D=P(j);{var N=i=>{const u=v(O(()=>t.constructors[0]),"Pyramid_0");m(u);var l=T(),y=P(l);g(()=>L(y,()=>m(u),(f,h)=>{A(h(f,{get data(){return s()},get form(){return t.form},get params(){return t.page.params},children:Pt(c,(E,xt)=>{var V=T(),z=P(V);g(()=>L(z,()=>m(S),(K,Z)=>{A(Z(K,{get data(){return e()},get form(){return t.form},get params(){return t.page.params}}),H=>n.mutation("components",["components",1],a()[1]=H,52,32),()=>a()?.[1])}),"component",c,52,10,{componentTag:"Pyramid_1"}),p(E,V)}),$$slots:{default:!0}}),E=>n.mutation("components",["components",0],a()[0]=E,50,29),()=>a()?.[0])}),"component",c,50,7,{componentTag:"Pyramid_0"}),p(i,l)},G=i=>{const u=v(O(()=>t.constructors[0]),"Pyramid_0");m(u);var l=T(),y=P(l);g(()=>L(y,()=>m(u),(f,h)=>{A(h(f,{get data(){return s()},get form(){return t.form},get params(){return t.page.params}}),E=>n.mutation("components",["components",0],a()[0]=E,58,23),()=>a()?.[0])}),"component",c,58,1,{componentTag:"Pyramid_0"}),p(i,l)};g(()=>x(D,i=>{t.constructors[1]?i(N):i(G,!1)}),"if",c,47,0)}var Y=it(D,2);{var q=i=>{var u=Ot(),l=mt(u);{var y=f=>{var h=gt();ut(()=>pt(h,m(k))),p(f,h)};g(()=>x(l,f=>{m(_)&&f(y)}),"if",c,64,2)}_t(u),p(i,u)};g(()=>x(Y,i=>{m(r)&&i(q)}),"if",c,62,0)}return p(o,j),ct(B)}const Vt=bt(c),Ct=[()=>d(()=>import("../nodes/0.CzkdvJ7j.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url),()=>d(()=>import("../nodes/1.MG1QhfrI.js"),__vite__mapDeps([9,1,2,10,6]),import.meta.url),()=>d(()=>import("../nodes/2.B4MlOSh6.js"),__vite__mapDeps([11,1,2,3,4,5,12,6,13,14,15,16]),import.meta.url),()=>d(()=>import("../nodes/3.DIwYkjDn.js"),__vite__mapDeps([17,1,2,3,4,5,12,6,14,18]),import.meta.url),()=>d(()=>import("../nodes/4.D-cIe70D.js"),__vite__mapDeps([19,1,2,3,4,5,12,10,6,13,14,15,20]),import.meta.url),()=>d(()=>import("../nodes/5.D7zPRe3L.js"),__vite__mapDeps([21,1,2,4,12,3,5,10,6,13,22,23,24]),import.meta.url),()=>d(()=>import("../nodes/6.BB7QE48r.js"),__vite__mapDeps([25,1,2,3,4,5,12,6,13,14,15,26,27]),import.meta.url),()=>d(()=>import("../nodes/7.D8mqsrZG.js"),__vite__mapDeps([28,29,1,2,4,12,3,5,6,7,22,23,26,30]),import.meta.url)],Mt=[],Ft={"/":[2],"/config":[3],"/project":[4],"/session/[id]":[5],"/terminals":[6],"/terminals/[id]":[7]},F={handleError:(({error:o})=>{console.error(o)}),reroute:(()=>{}),transport:{}},wt=Object.fromEntries(Object.entries(F.transport).map(([o,t])=>[o,t.decode])),St=Object.fromEntries(Object.entries(F.transport).map(([o,t])=>[o,t.encode])),Bt=!1,Nt=(o,t)=>wt[o](t);export{Nt as decode,wt as decoders,Ft as dictionary,St as encoders,Bt as hash,F as hooks,Dt as matchers,Ct as nodes,Vt as root,Mt as server_loads};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{l as o,a as r}from"../chunks/CtQ8EED1.js";export{o as load_css,r as start};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as L,l as N,a as B,b as I,f as P,g as D}from"../chunks/RpcNruLP.js";import{p as J,t as K,m as O,q as h,I as Q,r as R,F as u,k as U,A as S,z as d,v as n,w as s,B as l,u as q,E as r,G as X}from"../chunks/BNJphC1q.js";import{f as Y,v as Z,B as aa,g as A}from"../chunks/Dkkpz_4D.js";import{w as ta,s as ea,a as sa,v as ra,b as oa}from"../chunks/CgCpWzEA.js";import{g as na}from"../chunks/CtQ8EED1.js";import{p as j}from"../chunks/a-St0Zwo.js";e[u]="src/routes/+layout.svelte";var la=I(D('<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>'),e[u],[[59,12,[[60,14],[61,14]]]]),ia=I(P('<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="/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg> <span>Projects</span></a> <a href="/terminals"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg> <span>Terminals</span></a></div></nav></div>'),e[u],[[42,0,[[44,2,[[45,4,[[46,6,[[47,8],[48,8]]],[51,6]]]]],[70,2],[75,2,[[76,4,[[77,6,[[82,8,[[83,10]]],[85,8]]],[87,6,[[92,8,[[93,10],[94,10]]],[96,8]]]]]]]]]]);function e(M,g){L(new.target),J(g,!0,e);const o=()=>(ra(j,"page"),oa(j,"$page",z)),[z,C]=ea();let i=K(U("unknown"),"systemStatus");O(()=>{m();const a=setInterval(()=>{m()},3e4);return()=>{clearInterval(a)}});async function m(){try{const a=(await S(fetch("/api/health")))();if(!a.ok){d(i,"error");return}const t=(await S(a.json()))();d(i,n(t.status,"healthy")||n(t.status,"degraded")||n(t.status,"error")?t.status:"unknown",!0)}catch{d(i,"error")}}var E={...N()},c=ia(),v=s(c),f=s(v),_=l(s(f),2),y=s(_);h(()=>Y(y,{get status(){return q(i)}}),"component",e,52,8,{componentTag:"StatusBadge"});var H=l(y,2);{const a=ta(e,function(F){Z(...arguments);var G=la();B(F,G)});let t=X(()=>n(o().url.pathname,"/config")?"btn-gear-active":"");h(()=>aa(H,{get classes(){return`btn-gear ${q(t)??""}`},onclick:()=>na("/config"),"aria-label":"Settings",children:a,$$slots:{default:!0}}),"component",e,53,8,{componentTag:"Button"})}r(_),r(f),r(v);var p=l(v,2),T=s(p);h(()=>sa(T,()=>g.children),"render",e,71,4),r(p);var k=l(p,2),w=s(k),b=s(w);let $;var V=l(b,2);let x;r(w),r(k),r(c),Q((a,t)=>{$=A(b,1,"tab-item svelte-12qhfyh",null,$,a),x=A(V,1,"tab-item svelte-12qhfyh",null,x,t)},[()=>({active:n(o().url.pathname,"/")||o().url.pathname.startsWith("/project")||o().url.pathname.startsWith("/session")}),()=>({active:o().url.pathname.startsWith("/terminals")})]),B(M,c);var W=R(E);return C(),W}export{e as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as x,l as k,a as y,b as E,f as j,e as i}from"../chunks/RpcNruLP.js";import{c as w,K as F,M as _,N as I,O as u,P as M,u as h,Q as N,R as $,T as A,p as B,x as K,I as L,r as O,F as b,w as m,E as d,B as P}from"../chunks/BNJphC1q.js";import{p as v}from"../chunks/bo70OQUZ.js";function Q(r=!1){const t=w,e=t.l.u;if(!e)return;let o=()=>N(t.s);if(r){let s=0,a={};const n=$(()=>{let l=!1;const c=t.s;for(const f in c)c[f]!==a[f]&&(a[f]=c[f],l=!0);return l&&s++,s});o=()=>h(n)}e.b.length&&F(()=>{g(t,o),u(e.b)}),_(()=>{const s=I(()=>e.m.map(M));return()=>{for(const a of s)typeof a=="function"&&a()}}),e.a.length&&_(()=>{g(t,o),u(e.a)})}function g(r,t){if(r.l.s)for(const e of r.l.s)h(e);t()}A();p[b]="node_modules/.pnpm/@sveltejs+kit@2.50.2_@opentelemetry+api@1.9.0_@sveltejs+vite-plugin-svelte@6.2.4_svelte_dbb9063aed31ae8d16f5355c7cb92042/node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte";var R=E(j("<h1> </h1> <p> </p>",1),p[b],[[5,0],[6,0]]);function p(r,t){x(new.target),B(t,!1,p);var e={...k()};Q();var o=R(),s=K(o),a=m(s,!0);d(s);var n=P(s,2),l=m(n,!0);return d(n),L(()=>{i(a,v.status),i(l,v.error?.message)}),y(r,o),O(e)}export{p as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as ke,l as Ee,a as p,b as g,f as _,d as W,e as $}from"../chunks/RpcNruLP.js";import{p as Pe,t as I,k as T,l as $e,m as je,n as we,q as r,r as Me,u as t,v as b,F as u,w as n,x as j,y as Ae,z as c,A as w,B as m,D as Be,$ as Le,E as o,G as Ne,I as Oe}from"../chunks/BNJphC1q.js";import{B as z,v as Re,I as Ke,l as qe,e as X,i as ze,S as Fe,E as Y,a as De,P as Ge,s as Je}from"../chunks/Dkkpz_4D.js";import{w as ee,i as M}from"../chunks/CgCpWzEA.js";import{h as Ve}from"../chunks/DoczjQhA.js";import{g as Ze}from"../chunks/CtQ8EED1.js";import{s as He,g as Qe}from"../chunks/Bvk7mfPM.js";import{i as Ue}from"../chunks/DERQCisl.js";import{f as We}from"../chunks/CGLrx-H5.js";e[u]="src/routes/+page.svelte";var Xe=g(_('<meta name="description" content="Claude Code sessions across all projects"/>'),e[u],[[141,2]]),Ye=g(_("<!> Refresh",1),e[u],[]),et=g(_('<div class="loading-container"></div>'),e[u],[[163,4]]),tt=g(_('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <div class="session-card-subtitle"> </div></div> <!></div> <div class="session-stats"><span><strong> </strong> </span></div></a>'),e[u],[[185,8,[[186,10,[[187,12,[[188,14],[189,14]]]]],[193,10,[[194,12,[[194,18]]]]]]]]),st=g(_('<div style="text-align: center; padding: 1rem;"><!></div>'),e[u],[[200,6]]),at=g(_('<div class="projects-container svelte-1uha8ag"></div> <!>',1),e[u],[[183,4]]),ot=g(_('<main class="main"><div class="page-header svelte-1uha8ag"><div class="page-header-content svelte-1uha8ag"><div><h1 class="page-title svelte-1uha8ag">Projects</h1> <p class="page-description svelte-1uha8ag">Claude Code sessions across all projects</p></div> <div class="page-actions svelte-1uha8ag"><!></div></div></div> <!></main>'),e[u],[[144,0,[[145,2,[[146,4,[[147,6,[[148,8],[149,8]]],[151,6]]]]]]]]);function e(te,se){ke(new.target),Pe(se,!0,e);const ae=3e4,oe=20;let i=I(T($e([])),"projects"),h=I(T(!1),"loading"),A=!1,y=I(T(null),"config"),k=null,F=I(T(!1),"hasMore"),D=I(T(0),"currentOffset");je(()=>{re();const s=Qe("shooter_projects");s&&(c(i,s,!0),c(h,!1)),E(),k=setInterval(()=>{t(y)?.apiKey&&E()},ae)}),we(()=>{k&&(clearInterval(k),k=null)});function re(){try{const s=localStorage.getItem("shooter_config");if(s){const a=JSON.parse(s);Ue(a)?c(y,a,!0):(localStorage.removeItem("shooter_config"),c(y,null))}}catch{}}async function E(s=!1){if(!t(y)?.apiKey||A)return;A=!0,b(t(i).length,0)&&c(h,!0);const a=s?t(D):0;try{const l=(await w(fetch(`/api/sessions?limit=${oe}&offset=${a}`,{headers:{Authorization:`Bearer ${t(y).apiKey}`}})))();if(!l.ok)return;const v=(await w(l.json()))();s?c(i,[...t(i),...v.projects],!0):c(i,v.projects,!0),c(D,t(i).length,!0),c(F,b(v.total,void 0,!1)?t(i).length<v.total:!1,!0),He("shooter_projects",t(i))}catch(l){console.error(...qe("error","Failed to fetch sessions:",l))}finally{c(h,!1),A=!1}}async function ne(){(await w(E(!0)))()}async function ie(){c(h,!0),sessionStorage.removeItem("shooter_projects"),(await w(E()))()}function le(){Ze("/config")}function ce(){return t(i).reduce((s,a)=>s+a.sessionCount,0)}var de={...Ee()},B=ot();Ve("1uha8ag",s=>{var a=Xe();Be(()=>{Le.title="Projects - Shooter"}),p(s,a)});var L=n(B),G=n(L),J=m(n(G),2),ve=n(J);{const s=ee(e,function(a){Re(...arguments);var l=Ye(),v=j(l);r(()=>Ke(v,{name:"refresh",size:14}),"component",e,154,12,{componentTag:"Icon"}),Ae(),p(a,l)});r(()=>z(ve,{classes:"btn-secondary",onclick:ie,get disabled(){return t(h)},children:s,$$slots:{default:!0}}),"component",e,152,8,{componentTag:"Button"})}o(J),o(G),o(L);var fe=m(L,2);{var pe=s=>{var a=et();r(()=>X(a,20,()=>Array(5),ze,(l,v)=>{r(()=>Fe(l,{classes:"shimmer-card"}),"component",e,165,8,{componentTag:"Shimmer"})}),"each",e,164,6),o(a),p(s,a)},ue=s=>{var a=W(),l=j(a);{var v=S=>{r(()=>Y(S,{icon:"settings",title:"Configuration Required",description:"Set up your API credentials to start tracking sessions",children:ee(e,(P,V)=>{r(()=>z(P,{classes:"btn-primary",onclick:le,text:"Configure Settings"}),"component",e,174,6,{componentTag:"Button"})}),$$slots:{default:!0}}),"component",e,169,4,{componentTag:"EmptyState"})},me=S=>{var P=W(),V=j(P);{var ge=C=>{r(()=>Y(C,{icon:"bell",title:"No sessions yet",description:"Claude Code sessions will appear here once JSONL files are found"}),"component",e,177,4,{componentTag:"EmptyState"})},_e=C=>{var Z=at(),N=j(Z);De(()=>t(i),f=>f.id),r(()=>X(N,21,()=>t(i),f=>f.id,(f,d)=>{var x=tt(),O=n(x),R=n(O),K=n(R),Se=n(K,!0);o(K);var H=m(K,2),Ce=n(H,!0);o(H),o(R);var xe=m(R,2);{let be=Ne(()=>We(t(d).lastModified));r(()=>Ge(xe,{get text(){return t(be)},classes:"pill-session-time"}),"component",e,191,12,{componentTag:"Pill"})}o(O);var Q=m(O,2),U=n(Q),q=n(U),Ie=n(q,!0);o(q);var Te=m(q);o(U),o(Q),o(x),Oe(()=>{Je(x,"href",`/project?id=${t(d).id??""}`),$(Se,t(d).name),$(Ce,t(d).fullPath),$(Ie,t(d).sessionCount),$(Te,` ${b(t(d).sessionCount,1)?"session":"sessions"}`)}),p(f,x)}),"each",e,184,6),o(N);var he=m(N,2);{var ye=f=>{var d=st(),x=n(d);r(()=>z(x,{classes:"btn-secondary",onclick:ne,text:"Load More"}),"component",e,201,8,{componentTag:"Button"}),o(d),p(f,d)};r(()=>M(he,f=>{t(F)&&f(ye)}),"if",e,199,4)}p(C,Z)};r(()=>M(V,C=>{b(ce(),0)?C(ge):C(_e,!1)},!0),"if",e,176,2)}p(S,P)};r(()=>M(l,S=>{t(y)?.apiKey?S(me,!1):S(v)},!0),"if",e,168,2)}p(s,a)};r(()=>M(fe,s=>{t(h)&&b(t(i).length,0)?s(pe):s(ue,!1)}),"if",e,162,2)}return o(B),p(te,B),Me(de)}export{e as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{c as Le,l as Oe,a as d,e as Se,d as we,b as m,f as h}from"../chunks/RpcNruLP.js";import{p as Ee,t as p,m as Je,q as s,r as ze,k as g,D as Fe,x as R,z as e,u as t,B as v,G as _,w as S,E as w,I as ce,F as f,y as Ge,A as B,v as Q,$ as Me}from"../chunks/BNJphC1q.js";import{C as H,c as le,B as F,d as je,s as We,v as be,I as Te,b as Ye}from"../chunks/Dkkpz_4D.js";import{w as L,i as K}from"../chunks/CgCpWzEA.js";import{h as Ze}from"../chunks/DoczjQhA.js";import"../chunks/CtQ8EED1.js";import{i as He}from"../chunks/DERQCisl.js";function ke(){return typeof window>"u"?null:typeof window.ShooterBridge?.scanner?.scan=="function"?()=>window.ShooterBridge.scanner.scan():typeof window.ShooterNativeBridge?.scanner?.scan=="function"?()=>window.ShooterNativeBridge.scanner.scan():null}function Ce(){return ke()!==null}async function Ve(){const G=ke();if(!G)throw new Error("Scanner not available");return G()}a[f]="src/routes/config/+page.svelte";var Xe=m(h('<meta name="description" content="Configure notification system settings"/>'),a[f],[[295,2]]),et=m(h("<!> <!> <!>",1),a[f],[]),tt=m(h("<!> Test Connection",1),a[f],[]),rt=m(h(`<p class="qr-description svelte-1gp6n77">Scan the QR code shown on your server's settings page to auto-configure
|
|
2
|
+
the connection.</p> <!>`,1),a[f],[[385,14]]),nt=m(h('<p class="qr-server-url svelte-1gp6n77">Server: <code class="svelte-1gp6n77"> </code></p>'),a[f],[[401,18,[[402,28]]]]),at=m(h('<div class="qr-container svelte-1gp6n77"><img alt="QR code for mobile app pairing" class="qr-image svelte-1gp6n77"/></div> <p class="qr-hint svelte-1gp6n77">Scan this QR code with the Shooter iOS or Android app to connect.</p> <!>',1),a[f],[[394,16,[[395,18]]],[397,16]]),ot=m(h('<div class="qr-placeholder svelte-1gp6n77"><p class="qr-loading-text svelte-1gp6n77">Generating QR code...</p></div>'),a[f],[[406,16,[[407,18]]]]),st=m(h('<p class="qr-error svelte-1gp6n77"> </p>'),a[f],[[410,16]]),it=m(h(`<p class="qr-description svelte-1gp6n77">Generate a QR code containing your server URL and API key. Your mobile app can scan
|
|
3
|
+
it to auto-configure the connection.</p>`),a[f],[[412,16]]),ct=m(h("<!> <!>",1),a[f],[]),lt=m(h('<div class="qr-section svelte-1gp6n77"><!></div>'),a[f],[[383,10]]),dt=m(h('<p class="danger-description svelte-1gp6n77">Clear all saved configuration data from this device.</p> <!>',1),a[f],[[425,10]]),pt=m(h('<main class="main"><div class="settings-container svelte-1gp6n77"><div class="page-header svelte-1gp6n77"><h1 class="page-title svelte-1gp6n77">Settings</h1> <p class="page-description svelte-1gp6n77">Configure your API credentials and notification preferences</p></div> <div class="settings-grid svelte-1gp6n77"><section class="settings-section svelte-1gp6n77"><!> <!> <div class="button-group svelte-1gp6n77"><!> <!></div></section> <aside class="settings-sidebar svelte-1gp6n77"><!> <!> <!></aside></div></div></main>'),a[f],[[298,0,[[299,2,[[300,4,[[301,6],[302,6]]],[305,4,[[306,6,[[346,8]]],[369,6]]]]]]]]);function a(G,$e){Le(new.target),Ee($e,!0,a);let T=p(g(""),"serverUrl"),i=p(g(""),"apiKey"),b=p(g(""),"deviceToken"),l=p(g(""),"result"),C=p(g(!1),"loading"),c=p(g(""),"statusType"),V=p(g(!1),"isNativeApp"),M=p(g(""),"qrDataUrl"),X=p(g(""),"qrServerUrl"),j=p(g(!1),"qrLoading"),N=p(g(""),"qrError"),D=p(g(!1),"canScan"),Ie=p(g(!1),"bridgeCheckDone"),W=p(g(!1),"scanLoading");async function Ue(){if(!t(i).trim()){e(N,"Save an API key first to generate a QR code");return}e(j,!0),e(N,"");try{const r=(await B(fetch("/api/qr-config",{headers:{Authorization:`Bearer ${t(i).trim()}`}})))();if(!r.ok){const o=(await B(r.json()))();e(N,o.error||"Failed to generate QR code",!0);return}const n=(await B(r.json()))();e(M,n.dataUrl,!0),e(X,n.serverUrl,!0)}catch(r){e(N,`Network error: ${r.message}`)}finally{e(j,!1)}}async function qe(){e(W,!0),e(l,""),e(c,"");try{const r=(await B(Ve()))();try{const n=JSON.parse(r);Q(typeof n.serverUrl,"string")&&n.serverUrl&&e(T,n.serverUrl,!0),Q(typeof n.apiKey,"string")&&n.apiKey&&e(i,n.apiKey,!0),(await B(de()))(),e(l,"Configuration updated from QR code"),e(c,"success")}catch{e(l,"Invalid QR code data"),e(c,"error")}}catch(r){const n=r;Q(n.message,"cancelled",!1)&&(e(l,`Scanner error: ${n.message}`),e(c,"error"))}finally{e(W,!1)}}function ee(){return Q(typeof window,"undefined",!1)&&"ShooterBridge"in window?window.ShooterBridge:null}function te(){return window.location.origin}Je(()=>{{try{e(T,te(),!0);const n=localStorage.getItem("shooter_config");if(n){const o=JSON.parse(n);He(o)?(o.apiKey&&e(i,o.apiKey,!0),o.deviceToken&&e(b,o.deviceToken,!0),o.serverUrl&&e(T,o.serverUrl,!0)):localStorage.removeItem("shooter_config")}}catch{}const r=ee();if(r){e(V,!0);try{const n=JSON.parse(r.getConfig());n.serverUrl&&!t(T)&&e(T,n.serverUrl,!0),n.apiKey&&e(i,n.apiKey,!0);const o=r.getFcmToken();o&&e(b,o,!0)}catch{}}if(e(D,Ce(),!0),e(Ie,!0),!t(D)){const n=setInterval(()=>{e(D,Ce(),!0),t(D)&&clearInterval(n)},200);setTimeout(()=>clearInterval(n),3e3)}}});async function de(){e(C,!0),e(l,""),e(c,"");try{const r=t(T).trim().replace(/\/+$/,"");localStorage.setItem("shooter_config",JSON.stringify({apiKey:t(i).trim(),deviceToken:t(b).trim(),lastUpdated:Date.now(),serverUrl:r||te()}));const n=ee();n&&n.saveConfig(JSON.stringify({serverUrl:r||te(),apiKey:t(i).trim()})),(await B(fetch("/api/health")))().ok?(e(l,"Configuration saved successfully"),e(c,"success")):(e(l,"Configuration saved but system health check failed"),e(c,"warning"))}catch(r){e(l,`Configuration failed: ${r.message}`),e(c,"error")}e(C,!1)}async function Re(){if(!t(i).trim()){e(l,"API key is required for testing"),e(c,"error");return}e(C,!0),e(l,""),e(c,"");try{const r={data:{source:"config-test",timestamp:Date.now()},message:`Configuration test at ${new Date().toLocaleTimeString()}`,title:"Configuration Test"};t(b).trim()&&(r.deviceToken=t(b).trim());const n=(await B(fetch("/api/notify",{body:JSON.stringify(r),headers:{Authorization:`Bearer ${t(i)}`,"Content-Type":"application/json"},method:"POST"})))(),o=(await B(n.json()))();n.ok?(e(l,"Test notification sent successfully"),e(c,"success")):(e(l,`Test failed: ${o.error||"Unknown error"}`),e(c,"error"))}catch(r){e(l,`Network error: ${r.message}`),e(c,"error")}e(C,!1)}function Be(){{localStorage.removeItem("shooter_config"),e(T,Q(typeof window,"undefined",!1)?window.location.origin:"",!0),e(i,""),e(b,""),e(l,"Configuration cleared"),e(c,"success");const r=ee();r&&r.saveConfig(JSON.stringify({serverUrl:"",apiKey:""}))}}var xe={...Oe()},re=pt();Ze("1gp6n77",r=>{var n=Xe();Fe(()=>{Me.title="Settings - Shooter"}),d(r,n)});var pe=S(re),ge=v(S(pe),2),ne=S(ge),ve=S(ne);s(()=>H(ve,{title:"Server Configuration",description:"Configure server connection and credentials",children:L(a,(r,n)=>{var o=et(),u=R(o);s(()=>le(u,{name:"serverUrl",label:"Server URL",dataType:"text",placeholder:"https://shooter.breezehq.dev",infoMessage:"Base URL of your Shooter server. Apps will reload with this URL on next launch.",get value(){return t(T)},set value(y){e(T,y,!0)}}),"component",a,308,10,{componentTag:"Input"});var k=v(u,2);s(()=>le(k,{name:"apiKey",label:"API Key",dataType:"password",placeholder:"Enter your API key",infoMessage:"Required for sending notifications",get value(){return t(i)},set value(y){e(i,y,!0)}}),"component",a,317,10,{componentTag:"Input"});var O=v(k,2);{let y=_(()=>t(V)?"Waiting for token...":"64-character hex string"),$=_(()=>t(V)&&t(b)?"Auto-detected from app":"Device token from app registration");s(()=>le(O,{name:"deviceToken",label:"Device Token",dataType:"text",get placeholder(){return t(y)},get infoMessage(){return t($)},classes:"input-mono",get value(){return t(b)},set value(x){e(b,x,!0)}}),"component",a,326,10,{componentTag:"Input"})}d(r,o)}),$$slots:{default:!0}}),"component",a,307,8,{componentTag:"Card"});var fe=v(ve,2);{var Ae=r=>{const n=p(_(()=>Q(t(c),"success")?"check-circle":Q(t(c),"error")?"x-circle":"alert-triangle"),"bannerIcon");t(n);{const o=L(a,function(k){be(...arguments),s(()=>Te(k,{get name(){return t(n)},size:16}),"component",a,341,14,{componentTag:"Icon"})});let u=_(()=>t(c)||"info");s(()=>Ye(r,{get text(){return t(l)},get classes(){return`banner-${t(u)??""}`},icon:o,$$slots:{icon:!0}}),"component",a,339,10,{componentTag:"Banner"})}};s(()=>K(fe,r=>{t(l)&&r(Ae)}),"if",a,337,8)}var ue=v(fe,2),me=S(ue);{const r=L(a,function(o){be(...arguments);var u=tt(),k=R(u);{var O=y=>{s(()=>Te(y,{name:"play",size:14}),"component",a,354,16,{componentTag:"Icon"})};s(()=>K(k,y=>{t(C)||y(O)}),"if",a,353,14)}Ge(),d(o,u)});let n=_(()=>t(C)||!t(i).trim());s(()=>F(me,{classes:"btn-secondary",onclick:Re,get disabled(){return t(n)},children:r,$$slots:{default:!0}}),"component",a,347,10,{componentTag:"Button"})}var Qe=v(me,2);{let r=_(()=>t(C)||!t(i).trim());s(()=>F(Qe,{classes:"btn-primary",onclick:de,get disabled(){return t(r)},get showLoader(){return t(C)},text:"Save Changes"}),"component",a,359,10,{componentTag:"Button"})}w(ue),w(ne);var he=v(ne,2),ye=S(he);s(()=>H(ye,{title:"Setup Guide",children:L(a,(r,n)=>{{let o=_(()=>t(i).trim()&&t(b).trim()?2:t(i).trim()?1:0);s(()=>je(r,{steps:[{label:"Get API Key"},{label:"Find Device Token"},{label:"Test Connection"}],get currentStepIndex(){return t(o)},classes:"setup-stepper"}),"component",a,371,10,{componentTag:"Stepper"})}}),$$slots:{default:!0}}),"component",a,370,8,{componentTag:"Card"});var _e=v(ye,2);{let r=_(()=>t(D)?"Scan a QR code to connect":"Scan to connect your mobile app");s(()=>H(_e,{title:"Mobile App Setup",get description(){return t(r)},children:L(a,(n,o)=>{var u=lt(),k=S(u);{var O=$=>{var x=rt(),Y=v(R(x),2);{let ae=_(()=>t(W)?"Scanning...":"Scan QR Code");s(()=>F(Y,{classes:"btn-secondary btn-sm",onclick:qe,get disabled(){return t(W)},get text(){return t(ae)}}),"component",a,389,14,{componentTag:"Button"})}d($,x)},y=$=>{var x=ct(),Y=R(x);{var ae=I=>{var A=at(),E=R(A),oe=S(E);w(E);var se=v(E,4);{var U=q=>{var J=nt(),Z=v(S(J)),ie=S(Z,!0);w(Z),w(J),ce(()=>Se(ie,t(X))),d(q,J)};s(()=>K(se,q=>{t(X)&&q(U)}),"if",a,400,16)}ce(()=>We(oe,"src",t(M))),d(I,A)},Ne=I=>{var A=we(),E=R(A);{var oe=U=>{var q=ot();d(U,q)},se=U=>{var q=we(),J=R(q);{var Z=P=>{var z=st(),Pe=S(z,!0);w(z),ce(()=>Se(Pe,t(N))),d(P,z)},ie=P=>{var z=it();d(P,z)};s(()=>K(J,P=>{t(N)?P(Z):P(ie,!1)},!0),"if",a,409,14)}d(U,q)};s(()=>K(E,U=>{t(j)?U(oe):U(se,!1)},!0),"if",a,405,14)}d(I,A)};s(()=>K(Y,I=>{t(M)?I(ae):I(Ne,!1)}),"if",a,393,14)}var De=v(Y,2);{let I=_(()=>t(j)||!t(i).trim()),A=_(()=>t(M)?"Regenerate QR Code":"Generate QR Code");s(()=>F(De,{classes:"btn-secondary btn-sm",onclick:Ue,get disabled(){return t(I)},get text(){return t(A)}}),"component",a,417,14,{componentTag:"Button"})}d($,x)};s(()=>K(k,$=>{t(D)?$(O):$(y,!1)}),"if",a,384,12)}w(u),d(n,u)}),$$slots:{default:!0}}),"component",a,382,8,{componentTag:"Card"})}var Ke=v(_e,2);return s(()=>H(Ke,{title:"Danger Zone",children:L(a,(r,n)=>{var o=dt(),u=v(R(o),2);s(()=>F(u,{classes:"btn-danger btn-sm",onclick:Be,text:"Clear Configuration"}),"component",a,426,10,{componentTag:"Button"}),d(r,o)}),$$slots:{default:!0}}),"component",a,424,8,{componentTag:"Card"}),w(he),w(ge),w(pe),w(re),d(G,re),ze(xe)}export{a as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as Je,l as Ue,a as m,b as f,f as u,d as Ve,e as S}from"../chunks/RpcNruLP.js";import{p as Ze,t as P,m as He,n as Qe,q as s,r as We,k as D,G as M,J as Xe,u as e,F as p,w as n,z as v,A as X,v as Y,$ as Ye,B as d,E as r,x as A,y as ie,I as ee}from"../chunks/BNJphC1q.js";import{l as ea,S as ce,e as le,i as aa,E as de,v as ta,I as sa,B as ve,a as ra,P as F,s as oa}from"../chunks/Dkkpz_4D.js";import{i as k,w as na}from"../chunks/CgCpWzEA.js";import{h as ia}from"../chunks/DoczjQhA.js";import{p as ca}from"../chunks/bo70OQUZ.js";import{g as la,s as da}from"../chunks/Bvk7mfPM.js";import{i as va}from"../chunks/DERQCisl.js";import{f as ma}from"../chunks/CGLrx-H5.js";a[p]="src/routes/project/+page.svelte";var pa=f(u('<meta name="description" content="Project sessions sorted by latest update"/>'),a[p],[[163,2]]),fa=f(u('<div class="loading-container"><!> <!></div>'),a[p],[[168,4]]),ua=f(u('<div class="project-back-row svelte-urn6fi"><a href="/" class="back-link"><span class="back-arrow">←</span> Back to Projects</a></div> <!>',1),a[p],[[175,4,[[176,6,[[177,8]]]]]]),_a=f(u("<!> Refresh",1),a[p],[]),ha=f(u('<div class="session-card-subtitle"> </div>'),a[p],[[218,18]]),ga=f(u('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <!></div> <!></div> <div class="session-stats"><span><strong> </strong> messages</span> <!> <!></div> <div class="session-duration"> </div></a>'),a[p],[[213,10,[[214,12,[[215,14,[[216,16]]]]],[223,12,[[224,14,[[224,20]]]]],[234,12]]]]),ya=f(u('<div style="text-align: center; padding: 1rem;"><!></div>'),a[p],[[239,8]]),ja=f(u('<div class="sessions-container svelte-urn6fi"></div> <!>',1),a[p],[[211,6]]),ba=f(u('<div class="chat-session-header"><div class="chat-session-header-top svelte-urn6fi"><a href="/" class="back-link">← Back to Projects</a> <!></div> <h1 class="chat-session-title"> </h1> <div class="chat-session-meta"><span class="session-card-subtitle"> </span> <span> </span></div></div> <!>',1),a[p],[[187,4,[[188,6,[[189,8]]],[197,6],[198,6,[[199,8],[200,8]]]]]]),Sa=f(u('<main class="main"><!></main>'),a[p],[[166,0]]);function a(me,pe){Je(new.target),Ze(pe,!0,a);const fe=15e3,R=20;let i=P(D(null),"project"),h=P(D(!0),"loading"),C=P(D(null),"config"),L=null,x=P(D(R),"visibleCount");const j=P(M(()=>ca.url.searchParams.get("id")||""),"projectId"),ae=P(M(()=>e(i)?e(i).sessions.slice(0,e(x)):[]),"visibleSessions"),ue=P(M(()=>e(i)?e(x)<e(i).sessions.length:!1),"hasMore");He(()=>{_e();const t=la(`shooter_project_${e(j)}`);t&&(v(i,t,!0),v(h,!1)),setTimeout(()=>{q()},50),L=setInterval(()=>{e(C)?.apiKey&&e(j)&&q()},fe)}),Qe(()=>{L&&(clearInterval(L),L=null)});function _e(){try{const t=localStorage.getItem("shooter_config");if(t){const c=JSON.parse(t);va(c)?v(C,c,!0):(localStorage.removeItem("shooter_config"),v(C,null))}}catch{}}async function q(){if(!e(C)?.apiKey||!e(j)){v(h,!1);return}e(i)||v(h,!0);try{const t=(await X(fetch("/api/sessions",{headers:{Authorization:`Bearer ${e(C).apiKey}`}})))();if(!t.ok){v(h,!1);return}const g=(await X(t.json()))().projects.find($=>Y($.id,e(j)))||null;v(i,g,!0),g&&da(`shooter_project_${e(j)}`,g)}catch(t){console.error(...ea("error","Failed to fetch project:",t))}finally{v(h,!1)}}async function he(){v(h,!0),sessionStorage.removeItem(`shooter_project_${e(j)}`),v(x,R),(await X(q()))()}function ge(){v(x,e(x)+R)}function ye(t){return new Date(t).toLocaleDateString("en-US",{day:"numeric",hour:"2-digit",minute:"2-digit",month:"short"})}function je(t,c){return t.length<=c?t:`${t.slice(0,c).trimEnd()}...`}var be={...Ue()},z=Sa();ia("urn6fi",t=>{var c=pa();Xe(()=>{Ye.title=`${(e(i)?.name||"Project")??""} - Shooter`}),m(t,c)});var Se=n(z);{var Pe=t=>{var c=fa(),g=n(c);s(()=>ce(g,{classes:"shimmer-header"}),"component",a,169,6,{componentTag:"Shimmer"});var $=d(g,2);s(()=>le($,16,()=>Array(4),aa,(K,b)=>{s(()=>ce(K,{classes:"shimmer-card"}),"component",a,171,8,{componentTag:"Shimmer"})}),"each",a,170,6),r(c),m(t,c)},ke=t=>{var c=Ve(),g=A(c);{var $=b=>{var w=ua(),E=d(A(w),2);s(()=>de(E,{icon:"alert-triangle",title:"Project Not Found",description:"The requested project could not be found."}),"component",a,181,4,{componentTag:"EmptyState"}),m(b,w)},K=b=>{var w=ba(),E=A(w),O=n(E),xe=d(n(O),2);{const y=na(a,function(N){ta(...arguments);var T=_a(),U=A(T);s(()=>sa(U,{name:"refresh",size:14}),"component",a,192,12,{componentTag:"Icon"}),ie(),m(N,T)});s(()=>ve(xe,{classes:"btn-secondary",onclick:he,get disabled(){return e(h)},children:y,$$slots:{default:!0}}),"component",a,190,8,{componentTag:"Button"})}r(O);var G=d(O,2),Te=n(G,!0);r(G);var te=d(G,2),J=n(te),Ie=n(J,!0);r(J);var se=d(J,2),Ce=n(se);r(se),r(te),r(E);var $e=d(E,2);{var we=y=>{s(()=>de(y,{icon:"bell",title:"No sessions yet",description:"Sessions for this project will appear here"}),"component",a,205,6,{componentTag:"EmptyState"})},Ee=y=>{var N=ja(),T=A(N);ra(()=>e(ae),_=>_.id),s(()=>le(T,21,()=>e(ae),_=>_.id,(_,l)=>{var I=ga(),B=n(I),V=n(B),Z=n(V),Me=n(Z,!0);r(Z);var Ae=d(Z,2);{var Le=o=>{var W=ha(),Oe=n(W,!0);r(W),ee(Ge=>S(Oe,Ge),[()=>je(e(l).summary,80)]),m(o,W)};s(()=>k(Ae,o=>{e(l).summary&&o(Le)}),"if",a,217,16)}r(V);var Ne=d(V,2);{let o=M(()=>ma(e(l).modified));s(()=>F(Ne,{get text(){return e(o)},classes:"pill-session-time"}),"component",a,221,14,{componentTag:"Pill"})}r(B);var H=d(B,2),Q=n(H),re=n(Q),De=n(re,!0);r(re),ie(),r(Q);var oe=d(Q,2);{var Fe=o=>{s(()=>F(o,{get text(){return`🌿 ${e(l).gitBranch??""}`},classes:"pill-git-branch"}),"component",a,226,16,{componentTag:"Pill"})};s(()=>k(oe,o=>{e(l).gitBranch&&o(Fe)}),"if",a,225,14)}var Re=d(oe,2);{var qe=o=>{s(()=>F(o,{text:"OpenCode",classes:"pill-source-opencode"}),"component",a,229,16,{componentTag:"Pill"})},ze=o=>{s(()=>F(o,{text:"Claude Code",classes:"pill-source-claude"}),"component",a,231,16,{componentTag:"Pill"})};s(()=>k(Re,o=>{Y(e(l).source,"opencode")?o(qe):o(ze,!1)}),"if",a,228,14)}r(H);var ne=d(H,2),Ke=n(ne);r(ne),r(I),ee(o=>{oa(I,"href",`/session/${e(l).id??""}?project=${e(j)??""}`),S(Me,e(l).title),S(De,e(l).messageCount),S(Ke,`Created ${o??""}`)},[()=>ye(e(l).created)]),m(_,I)}),"each",a,212,8),r(T);var U=d(T,2);{var Be=_=>{var l=ya(),I=n(l);{let B=M(()=>`Load More (${e(i).sessions.length-e(x)} remaining)`);s(()=>ve(I,{classes:"btn-secondary",onclick:ge,get text(){return e(B)}}),"component",a,240,10,{componentTag:"Button"})}r(l),m(_,l)};s(()=>k(U,_=>{e(ue)&&_(Be)}),"if",a,238,6)}m(y,N)};s(()=>k($e,y=>{Y(e(i).sessions.length,0)?y(we):y(Ee,!1)}),"if",a,204,4)}ee(()=>{S(Te,e(i).name),S(Ie,e(i).fullPath),S(Ce,`${e(i).sessionCount??""} sessions`)}),m(b,w)};s(()=>k(g,b=>{e(i)?b(K,!1):b($)},!0),"if",a,174,2)}m(t,c)};s(()=>k(Se,t=>{e(h)&&!e(i)?t(Pe):t(ke,!1)}),"if",a,167,2)}return r(z),m(me,z),We(be)}export{a as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as Fe,l as Ve,a as g,b as I,f as T,d as L,e as U}from"../chunks/RpcNruLP.js";import{p as Ke,t as y,k as x,l as Ge,m as He,q as i,r as Qe,G as te,J as Xe,u as e,v as l,F as _,w as u,z as t,$ as Ye,B as d,E as f,x as A,A as J,I as Ze}from"../chunks/BNJphC1q.js";import{i as k}from"../chunks/CgCpWzEA.js";import{h as es}from"../chunks/DoczjQhA.js";import{S as C,l as ss,E as ts,s as as,P as ns,b as os}from"../chunks/Dkkpz_4D.js";import{p as ae}from"../chunks/bo70OQUZ.js";import{g as rs,s as is}from"../chunks/Bvk7mfPM.js";import{C as cs}from"../chunks/DKrg8TQs.js";a[_]="src/routes/session/[id]/+page.svelte";var ls=I(T('<meta name="description" content="Session conversation view"/>'),a[_],[[314,2]]),ms=I(T('<div class="loading-container"><!> <div class="chat-container"><!> <!> <!> <!> <!></div></div>'),a[_],[[319,4,[[321,6]]]]),ds=I(T('<div class="session-back-row svelte-1a2wdfb"><a href="/" class="back-link"><span class="back-arrow">←</span> Back</a></div> <!>',1),a[_],[[330,4,[[331,6,[[332,8]]]]]]),ps=I(T('<span class="connection-status connected"><span class="connection-status-dot"></span></span>'),a[_],[[345,14,[[346,16]]]]),vs=I(T('<span class="connection-status reconnecting"><span class="connection-status-dot"></span></span>'),a[_],[[349,14,[[350,16]]]]),us=I(T('<span class="connection-status disconnected"><span class="connection-status-dot"></span></span>'),a[_],[[353,14,[[354,16]]]]),fs=I(T('<div class="live-connection-row svelte-1a2wdfb"><!></div>'),a[_],[[343,10]]),gs=I(T('<div class="chat-session-header"><div class="chat-session-header-top svelte-1a2wdfb"><a class="back-link">← Back to Project</a> <!></div> <div class="chat-session-title-row svelte-1a2wdfb"><h1 class="chat-session-title"> </h1> <!></div> <div class="chat-session-meta"><span class="chat-session-meta-item"> </span> <span class="chat-session-meta-item"> </span> <span class="chat-session-meta-item"> </span> <span class="chat-session-meta-item"> </span></div> <!></div> <div class="session-chat-container svelte-1a2wdfb"><!></div>',1),a[_],[[339,4,[[340,6,[[341,8]]],[360,6,[[361,8]]],[366,6,[[367,8],[368,8],[369,8],[370,8]]]]],[378,4]]),hs=I(T('<main class="main session-page-main svelte-1a2wdfb"><!></main>'),a[_],[[317,0]]);function a(ve,ue){Fe(new.target),Ke(ue,!0,a);let w=y(x(null),"session"),c=y(x(Ge([])),"messages"),P=y(x(!0),"loading"),D=y(x(null),"error"),b=y(x(!1),"isSessionActive"),p=y(x("idle"),"connectionState"),S=y(x(null),"ws"),W=0,N=null;const ne=y(te(()=>ae.params.id),"sessionId"),oe=y(te(()=>ae.url.searchParams.get("project")||""),"projectId");function fe(n){const s=new Date(n.modified).getTime(),o=Date.now()-300*1e3;return s>o}let re=0;function B(){return re++,`ws-msg-${Date.now()}-${re}`}function ge(n){let s;try{s=JSON.parse(n.data)}catch{return}if(l(s.type,"message")){const o={id:B(),parts:s.content||[],role:s.role||"assistant",timestamp:s.timestamp||new Date().toISOString()};t(c,[...e(c),o],!0)}else if(l(s.type,"tool-use")){const o={id:s.id||B(),input:s.input||{},toolName:s.name||"Unknown",type:"tool_use"};ie(o)}else if(l(s.type,"tool-result")){const o={id:B(),parts:[{isError:s.isError||!1,output:s.output||"",toolUseId:s.id||"",type:"tool_result"}],role:"system",timestamp:new Date().toISOString()};t(c,[...e(c),o],!0)}else if(l(s.type,"thinking")){const o={content:s.text||"",type:"thinking"};ie(o)}else if(l(s.type,"error")){const o={id:B(),parts:[{content:s.text||s.message||"Unknown error",type:"text"}],role:"system",timestamp:new Date().toISOString()};t(c,[...e(c),o],!0)}else l(s.type,"permission-requested")?console.log(...ss("log","[session] Permission requested:",s)):l(s.type,"session-end")&&(t(b,!1),t(p,"disconnected"),e(S)&&(e(S).close(),t(S,null)))}function ie(n){const s=e(c).length>0?e(c)[e(c).length-1]:null;if(l(s?.role,"assistant")){const o=[...s.parts,n],h={...s,parts:o};t(c,[...e(c).slice(0,-1),h],!0)}else{const o={id:B(),parts:[n],role:"assistant",timestamp:new Date().toISOString()};t(c,[...e(c),o],!0)}}async function ce(){if(!e(b))return;const n=localStorage.getItem("shooter_config");if(!n)return;const s=JSON.parse(n);t(p,"connecting");try{const o=(await J(fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${s.apiKey}`},method:"POST"})))();if(!o.ok){t(p,"disconnected");return}const{ticket:h}=(await J(o.json()))(),v=`${l(window.location.protocol,"https:")?"wss:":"ws:"}//${window.location.host}/ws/session/${e(ne)}?ticket=${h}`,r=new WebSocket(v);r.onopen=()=>{t(p,"connected"),t(S,r,!0),W=0},r.onmessage=ge,r.onclose=()=>{t(p,"disconnected"),t(S,null),e(b)&&W<5&&(W++,N=window.setTimeout(()=>{ce()},2e3))},r.onerror=()=>{t(p,"disconnected"),t(S,null)}}catch{t(p,"disconnected")}}function he(n){return new Date(n).toLocaleDateString([],{day:"numeric",month:"short",year:"numeric"})}function _e(n){return n.split("/").slice(-2).join("/")}async function we(){l(e(c).length,0)&&t(P,!0);try{const n=localStorage.getItem("shooter_config");if(!n){t(D,"No configuration found. Please configure settings first."),t(P,!1);return}const s=JSON.parse(n),o=e(ne)||"",h=e(oe)||"",$=h?`id=${encodeURIComponent(o)}&project=${encodeURIComponent(h)}`:`id=${encodeURIComponent(o)}`,v=(await J(fetch(`/api/sessions?${$}`,{headers:{Authorization:`Bearer ${s.apiKey}`}})))();if(!v.ok){t(D,"Session not found"),t(P,!1);return}const r=(await J(v.json()))();t(w,r.session,!0),t(c,(r.messages||[]).reverse(),!0),is(`shooter_session_${o}`,{messages:r.messages||[],session:r.session}),r.session&&(t(b,fe(r.session),!0),e(b)&&ce())}catch{t(D,"Failed to load session")}t(P,!1)}He(()=>{const n=rs(`shooter_session_${ae.params.id}`);return n&&(t(w,n.session,!0),t(c,(n.messages||[]).reverse(),!0),t(P,!1)),we(),()=>{N&&(clearTimeout(N),N=null),e(S)&&(e(S).close(),t(S,null))}});var be={...Ve()},z=hs();es("1a2wdfb",n=>{var s=ls();Xe(()=>{Ye.title=`${(e(w)?.title||"Session")??""} - Shooter`}),g(n,s)});var Se=u(z);{var ye=n=>{var s=ms(),o=u(s);i(()=>C(o,{classes:"shimmer-header"}),"component",a,320,6,{componentTag:"Shimmer"});var h=d(o,2),$=u(h);i(()=>C($,{classes:"shimmer-bubble shimmer-bubble-user"}),"component",a,322,8,{componentTag:"Shimmer"});var v=d($,2);i(()=>C(v,{classes:"shimmer-bubble shimmer-bubble-assistant"}),"component",a,323,8,{componentTag:"Shimmer"});var r=d(v,2);i(()=>C(r,{classes:"shimmer-bubble shimmer-bubble-user-short"}),"component",a,324,8,{componentTag:"Shimmer"});var M=d(r,2);i(()=>C(M,{classes:"shimmer-bubble shimmer-bubble-assistant-wide"}),"component",a,325,8,{componentTag:"Shimmer"});var F=d(M,2);i(()=>C(F,{classes:"shimmer-bubble shimmer-bubble-assistant-short"}),"component",a,326,8,{componentTag:"Shimmer"}),f(h),f(s),g(n,s)},ke=n=>{var s=L(),o=A(s);{var h=v=>{var r=ds(),M=d(A(r),2);i(()=>ts(M,{icon:"alert-triangle",title:"Error",get description(){return e(D)}}),"component",a,336,4,{componentTag:"EmptyState"}),g(v,r)},$=v=>{var r=L(),M=A(r);{var F=V=>{var le=gs(),K=A(le),G=u(K),me=u(G),Ie=d(me,2);{var Te=m=>{var O=fs(),Oe=u(O);{var Ue=E=>{var R=ps();g(E,R)},Ne=E=>{var R=L(),Re=A(R);{var qe=j=>{var q=vs();g(j,q)},Le=j=>{var q=L(),Je=A(q);{var We=se=>{var ze=us();g(se,ze)};i(()=>k(Je,se=>{l(e(p),"disconnected")&&se(We)},!0),"if",a,352,12)}g(j,q)};i(()=>k(Re,j=>{l(e(p),"connecting")?j(qe):j(Le,!1)},!0),"if",a,348,12)}g(E,R)};i(()=>k(Oe,E=>{l(e(p),"connected")?E(Ue):E(Ne,!1)}),"if",a,344,12)}f(O),g(m,O)};i(()=>k(Ie,m=>{(e(b)||l(e(p),"connected")||l(e(p),"connecting"))&&m(Te)}),"if",a,342,8)}f(G);var H=d(G,2),Q=u(H),$e=u(Q,!0);f(Q);var xe=d(Q,2);{var Pe=m=>{i(()=>ns(m,{text:"LIVE",classes:"pill-live"}),"component",a,363,10,{componentTag:"Pill"})};i(()=>k(xe,m=>{e(b)&&m(Pe)}),"if",a,362,8)}f(H);var X=d(H,2),Y=u(X),Me=u(Y);f(Y);var Z=d(Y,2),Ee=u(Z);f(Z);var ee=d(Z,2),je=u(ee);f(ee);var de=d(ee,2),Ae=u(de);f(de),f(X);var Ce=d(X,2);{var De=m=>{i(()=>os(m,{text:"Live updates paused",classes:"banner-warning"}),"component",a,373,8,{componentTag:"Banner"})};i(()=>k(Ce,m=>{l(e(p),"disconnected")&&e(b)&&m(De)}),"if",a,372,6)}f(K);var pe=d(K,2),Be=u(pe);{let m=te(()=>!e(b));i(()=>cs(Be,{get messages(){return e(c)},get connectionState(){return e(p)},showInput:!1,get sessionEnded(){return e(m)}}),"component",a,379,6,{componentTag:"ChatView"})}f(pe),Ze((m,O)=>{as(me,"href",`/project?id=${e(oe)??""}`),U($e,e(w).title),U(Me,`📁 ${m??""}`),U(Ee,`🌿 ${e(w).gitBranch??""}`),U(je,`💬 ${e(w).messageCount??""} messages`),U(Ae,`📅 ${O??""}`)},[()=>_e(e(w).projectPath),()=>he(e(w).created)]),g(V,le)};i(()=>k(M,V=>{e(w)&&V(F)},!0),"if",a,337,2)}g(v,r)};i(()=>k(o,v=>{e(D)?v(h):v($,!1)},!0),"if",a,329,2)}g(n,s)};i(()=>k(Se,n=>{e(P)&&l(e(c).length,0)?n(ye):n(ke,!1)}),"if",a,318,2)}return f(z),g(ve,z),Qe(be)}export{a as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as it,l as lt,t as ht,e as O,a as u,b,f as x,d as Ue}from"../chunks/RpcNruLP.js";import{p as ct,t as w,k as E,l as pt,m as dt,A as q,v as S,z as c,u as e,w as r,B as l,q as n,G as I,y as Le,I as te,E as s,r as ut,F as f,n as gt,x as Ae,D as _t,$ as wt}from"../chunks/BNJphC1q.js";import{v as Pe,a as Ve,e as ke,h as bt,j as xt,c as Xe,B as le,b as Tt,k as et,I as yt,l as tt,i as $t,S as Ct,E as at,P as Ge,T as nt,s as st,g as St,m as At}from"../chunks/Dkkpz_4D.js";import{p as Lt,w as F,i as R}from"../chunks/CgCpWzEA.js";import{h as Pt}from"../chunks/DoczjQhA.js";import{g as rt}from"../chunks/CtQ8EED1.js";import{s as ot,g as kt}from"../chunks/Bvk7mfPM.js";import{i as Et}from"../chunks/DERQCisl.js";import{f as Qe}from"../chunks/CGLrx-H5.js";import{c as It}from"../chunks/CAokzuPQ.js";v[f]="src/lib/modules/client/terminal/LaunchSheet.svelte";var Bt=b(x('<div class="section svelte-plslui"><!></div>'),v[f],[[178,8]]),jt=b(x('<div class="launch-form svelte-plslui"><div class="section svelte-plslui"><span class="section-label svelte-plslui">Quick Launch</span> <div class="preset-grid svelte-plslui"></div></div> <div class="section svelte-plslui"><span class="section-label svelte-plslui">Working Directory</span> <!> <div class="custom-cwd-group svelte-plslui"><!></div></div> <!> <!> <!></div>'),v[f],[[140,4,[[141,6,[[142,8],[143,8]]],[157,6,[[158,8],[166,8]]]]]]);function v(Ee,K){it(new.target),ct(K,!0,v);var Ie=It(K);let H=Lt(K,"open",15);const Q=[{args:[],command:"claude",label:"Claude Code"},{args:[],command:"opencode",label:"OpenCode"},{args:[],command:"zsh",label:"Shell / zsh"},{args:[],command:"bash",label:"Bash"}];let V=w(E(0),"selectedPreset"),m=w(E(""),"customCommand"),T=w(E(pt([])),"projectPaths"),A=w(E(""),"selectedCwd"),y=w(E(""),"customCwd"),B=w(E(!1),"launching"),J=w(E(""),"launchError");dt(()=>{_e()});async function _e(){try{const _=(await q(fetch("/api/sessions?limit=50&offset=0",{headers:{Authorization:`Bearer ${K.apiKey}`}})))();if(!_.ok)return;const j=(await q(_.json()))().projects.map($=>$.fullPath).filter($=>S(typeof $,"string")&&$.length>0);c(T,[...new Set(j)],!0),e(T).length>0&&!e(A)&&c(A,e(T)[0],!0)}catch{}}function Be(_){c(V,_,!0)}function Z(){return S(Q[e(V)].command,"")}function je(){return Z()?e(m).trim().split(/\s+/)[0]||"":Q[e(V)].command}function Ne(){return Z()?e(m).trim().split(/\s+/).slice(1):Q[e(V)].args}function ae(){const _=e(y).trim();return _||(e(A)?e(A):"/tmp")}async function we(){const _=je();if(_){c(B,!0),c(J,"");try{const L=(await q(fetch("/api/terminals",{body:JSON.stringify({args:Ne(),command:_,cwd:ae()||void 0}),headers:{Authorization:`Bearer ${K.apiKey}`,"Content-Type":"application/json"},method:"POST"})))();if(!L.ok){const $=(await q(L.json().catch(()=>({}))))();c(J,$.error||`Failed to launch (${L.status})`,!0);return}const j=(await q(L.json()))();K.onLaunch(j)}catch{c(J,"Network error — is the server running?")}finally{c(B,!1)}}}var Oe={...lt()};{const _=F(v,function(L){Pe(...arguments);var j=jt(),$=r(j),be=l(r($),2);Ve(()=>Q,p=>p.label),n(()=>ke(be,23,()=>Q,p=>p.label,(p,P,k)=>{{let ue=I(()=>S(e(V),e(k)));n(()=>bt(p,{mode:"radio",get selected(){return e(ue)},onclick:()=>Be(e(k)),classes:"preset-choice",children:F(v,(ze,We)=>{Le();var $e=ht();te(()=>O($e,e(P).label)),u(ze,$e)}),$$slots:{default:!0}}),"component",v,145,12,{componentTag:"Choicebox"})}}),"each",v,144,10),s(be),s($);var ne=l($,2),ce=l(r(ne),2);{let p=I(()=>e(T).length>0?e(T).map(k=>({id:k,label:k})):[{id:"",label:"No recent projects"}]),P=I(()=>e(A)?[e(A)]:e(T).length>0?[e(T)[0]]:[""]);n(()=>xt(ce,{get items(){return e(p)},get value(){return e(P)},placeholder:"Select a project",onchange:k=>{c(A,k[0]||"",!0)},classes:"launch-select"}),"component",v,159,8,{componentTag:"Select"})}var xe=l(ce,2),Ke=r(xe);n(()=>Xe(Ke,{label:"Or enter a custom path",dataType:"text",placeholder:"/path/to/project",classes:"input-mono launch-input",get value(){return e(y)},set value(p){c(y,p,!0)}}),"component",v,167,10,{componentTag:"Input"}),s(xe),s(ne);var pe=l(ne,2);{var de=p=>{var P=Bt(),k=r(P);n(()=>Xe(k,{label:"Custom Command",dataType:"text",placeholder:"e.g. node server.js",classes:"input-mono launch-input",get value(){return e(m)},set value(ue){c(m,ue,!0)}}),"component",v,179,10,{componentTag:"Input"}),s(P),u(p,P)};n(()=>R(pe,p=>{Z()&&p(de)}),"if",v,177,6)}var se=l(pe,2);{let p=I(()=>e(B)||(Z()?!e(m).trim():!1)),P=I(()=>e(B)?"Launching...":"Launch Terminal");n(()=>le(se,{classes:"btn-launch",get disabled(){return e(p)},onclick:we,get showLoader(){return e(B)},get text(){return e(P)}}),"component",v,189,6,{componentTag:"Button"})}var Te=l(se,2);{var ye=p=>{n(()=>Tt(p,{get text(){return e(J)},classes:"banner-error launch-error-banner"}),"component",v,198,8,{componentTag:"Banner"})};n(()=>R(Te,p=>{e(J)&&p(ye)}),"if",v,197,6)}s(j),u(L,j)});Ie.binding("open",et,H),n(()=>et(Ee,{title:"New Terminal",side:"bottom",get onclose(){return K.onClose},classes:"launch-sheet",get open(){return H()},set open(L){H(L)},content:_,$$slots:{content:!0}}),"component",v,132,0,{componentTag:"Sheet"})}return ut(Oe)}a[f]="src/routes/terminals/+page.svelte";var Nt=b(x('<meta name="description" content="Active terminal sessions on this machine" class="svelte-1ewpmn2"/>'),a[f],[[231,2]]),Ot=b(x("<!> Refresh",1),a[f],[]),Kt=b(x('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),a[f],[[250,12]]),zt=b(x('<div class="loading-container svelte-1ewpmn2"></div>'),a[f],[[259,4]]),Dt=b(x('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),a[f],[[280,10]]),Mt=b(x('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),a[f],[[304,14]]),Ft=b(x('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),a[f],[[310,12,[[311,14]]]]),Rt=b(x('<a class="terminal-card svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-running svelte-1ewpmn2"><span></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!></div> <span class="terminal-time svelte-1ewpmn2"> </span></div> <div class="terminal-card-meta svelte-1ewpmn2"><!> <span class="terminal-pid svelte-1ewpmn2"> </span></div> <!></a>'),a[f],[[290,8,[[291,10,[[292,12,[[293,14,[[294,16]]],[296,14]]],[299,12]]],[302,10,[[306,12]]]]]]),qt=b(x('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),a[f],[[348,14]]),Ht=b(x('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),a[f],[[353,12,[[354,14]]]]),Jt=b(x('<a class="terminal-card terminal-card-exited svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-exited svelte-1ewpmn2"><span class="status-dot-static svelte-1ewpmn2"></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!> <!></div> <div class="terminal-card-right svelte-1ewpmn2"><span class="terminal-time svelte-1ewpmn2"> </span> <!></div></div> <div class="terminal-card-meta svelte-1ewpmn2"><!></div> <!></a>'),a[f],[[320,8,[[321,10,[[322,12,[[323,14,[[324,16]]],[326,14]]],[332,12,[[333,14]]]]],[346,10]]]]),Zt=b(x('<div class="terminals-container svelte-1ewpmn2"><!> <!></div>'),a[f],[[286,4]]),Gt=b(x('<main class="main svelte-1ewpmn2"><div class="page-header svelte-1ewpmn2"><div class="page-header-content svelte-1ewpmn2"><div class="svelte-1ewpmn2"><h1 class="page-title svelte-1ewpmn2">Terminals</h1> <p class="page-description svelte-1ewpmn2">Active terminal sessions on this machine</p></div> <div class="page-actions svelte-1ewpmn2"><!> <!></div></div></div> <!></main> <!>',1),a[f],[[234,0,[[235,2,[[236,4,[[237,6,[[238,8],[239,8]]],[241,6]]]]]]]]);function a(Ee,K){it(new.target),ct(K,!0,a);const Ie=1e4,H="shooter_terminals",Q=["claude","opencode"],V=["zsh","bash","sh","fish"];let m=w(E(pt([])),"terminals"),T=w(E(!1),"loading"),A=!1,y=w(E(null),"config"),B=null;const J=w(I(()=>e(m).filter(t=>S(t.status,"running"))),"runningTerminals"),_e=w(I(()=>e(m).filter(t=>S(t.status,"exited"))),"exitedTerminals");dt(()=>{Be();const t=kt(H,1e4);t&&(c(m,t,!0),c(T,!1)),Z(),B=setInterval(()=>{e(y)?.apiKey&&Z()},Ie)}),gt(()=>{B&&(clearInterval(B),B=null)});function Be(){try{const t=localStorage.getItem("shooter_config");if(t){const o=JSON.parse(t);Et(o)?c(y,o,!0):(localStorage.removeItem("shooter_config"),c(y,null))}}catch{}}async function Z(){if(!(!e(y)?.apiKey||A)){A=!0,S(e(m).length,0)&&c(T,!0);try{const t=(await q(fetch("/api/terminals",{headers:{Authorization:`Bearer ${e(y).apiKey}`}})))();if(!t.ok)return;const o=(await q(t.json()))();c(m,o.terminals,!0),ot(H,e(m))}catch(t){console.error(...tt("error","Failed to fetch terminals:",t))}finally{c(T,!1),A=!1}}}async function je(){c(T,!0),sessionStorage.removeItem(H),(await q(Z()))()}function Ne(){rt("/config")}let ae=w(E(!1),"showLaunchSheet");function we(){c(ae,!0)}function Oe(){c(ae,!1)}function _(t){c(ae,!1),rt(`/terminals/${t.id}`)}function L(t){const o=t.split("/").pop()||t;return Q.includes(o)?"ai":(V.includes(o),"shell")}function j(t){if(S(t.status,"exited"))return{class:"pill-badge-ended",label:"ENDED"};const o=L(t.command);return S(o,"ai")?{class:"pill-badge-ai",label:"AI"}:{class:"pill-badge-shell",label:"SHELL"}}function $(t,o=40){if(t.length<=o)return t;const h=t.split("/");return h.length<=3?t:`${h[0]}/.../${h.slice(-2).join("/")}`}function be(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g,"").replace(/[\x00-\x1f]/g,"").trim()}function ne(t,o=80){if(!t)return"";const z=be(t).trim().split(`
|
|
2
|
+
`).filter(G=>G.trim()),me=z[z.length-1]||"";return me.length<=o?me:`${me.slice(0,o)}...`}function ce(t){return t.split("/").pop()||t}async function xe(t,o){if(t.preventDefault(),t.stopPropagation(),!!e(y)?.apiKey)try{(await q(fetch(`/api/terminals/${o}`,{method:"DELETE",headers:{Authorization:`Bearer ${e(y).apiKey}`}})))().ok&&(c(m,e(m).filter(z=>S(z.id,o,!1)),!0),ot(H,e(m)))}catch(h){console.error(...tt("error","Failed to remove terminal:",h))}}var Ke={...lt()},pe=Gt();Pt("1ewpmn2",t=>{var o=Nt();_t(()=>{wt.title="Terminals - Shooter"}),u(t,o)});var de=Ae(pe),se=r(de),Te=r(se),ye=l(r(Te),2),p=r(ye);{const t=F(a,function(o){Pe(...arguments);var h=Ot(),z=Ae(h);n(()=>yt(z,{name:"refresh",size:14}),"component",a,244,12,{componentTag:"Icon"}),Le(),u(o,h)});n(()=>le(p,{classes:"btn-secondary",onclick:je,get disabled(){return e(T)},children:t,$$slots:{default:!0}}),"component",a,242,8,{componentTag:"Button"})}var P=l(p,2);{const t=F(a,function(o){Pe(...arguments);var h=Kt();Le(),u(o,h)});n(()=>le(P,{classes:"btn-primary",onclick:we,children:t,$$slots:{default:!0}}),"component",a,248,8,{componentTag:"Button"})}s(ye),s(Te),s(se);var k=l(se,2);{var ue=t=>{var o=zt();n(()=>ke(o,20,()=>Array(4),$t,(h,z)=>{n(()=>Ct(h,{classes:"shimmer-card"}),"component",a,261,8,{componentTag:"Shimmer"})}),"each",a,260,6),s(o),u(t,o)},ze=t=>{var o=Ue(),h=Ae(o);{var z=G=>{n(()=>at(G,{icon:"settings",title:"Configuration Required",description:"Set up your API credentials to view terminal sessions",children:F(a,(Ce,Ye)=>{n(()=>le(Ce,{classes:"btn-primary",onclick:Ne,text:"Configure Settings"}),"component",a,270,6,{componentTag:"Button"})}),$$slots:{default:!0}}),"component",a,265,4,{componentTag:"EmptyState"})},me=G=>{var Ce=Ue(),Ye=Ae(Ce);{var mt=re=>{n(()=>at(re,{icon:"terminal",title:"No terminals",description:"Launch a new terminal session to get started. Terminal sessions will appear here once created.",children:F(a,(ve,De)=>{{const Me=F(a,function(C){Pe(...arguments);var i=Dt();Le(),u(C,i)});n(()=>le(ve,{classes:"btn-primary",onclick:we,children:Me,$$slots:{default:!0}}),"component",a,278,6,{componentTag:"Button"})}}),$$slots:{default:!0}}),"component",a,273,4,{componentTag:"EmptyState"})},vt=re=>{var ve=Zt(),De=r(ve);Ve(()=>e(J),C=>C.id),n(()=>ke(De,17,()=>e(J),C=>C.id,(C,i)=>{const W=w(I(()=>j(e(i))),"badge");e(W);var D=Rt(),Y=r(D),U=r(Y),X=r(U),Fe=r(X);s(X);var oe=l(X,2),Re=r(oe,!0);s(oe);var qe=l(oe,2);n(()=>Ge(qe,{get text(){return e(W).label},get classes(){return e(W).class}}),"component",a,297,14,{componentTag:"Pill"}),s(U);var fe=l(U,2),he=r(fe,!0);s(fe),s(Y);var ge=l(Y,2),Se=r(ge);{let d=I(()=>e(i).currentCwd||e(i).cwd);n(()=>nt(Se,{get text(){return e(d)},position:"bottom",children:F(a,(g,N)=>{var M=Mt(),ee=r(M,!0);s(M),te(ft=>O(ee,ft),[()=>$(e(i).currentCwd||e(i).cwd)]),u(g,M)}),$$slots:{default:!0}}),"component",a,303,12,{componentTag:"Tooltip"})}var ie=l(Se,2),He=r(ie);s(ie),s(ge);var Je=l(ge,2);{var Ze=d=>{var g=Ft(),N=r(g),M=r(N,!0);s(N),s(g),te(ee=>O(M,ee),[()=>ne(e(i).lastOutput)]),u(d,g)};n(()=>R(Je,d=>{e(i).lastOutput&&d(Ze)}),"if",a,309,10)}s(D),te((d,g)=>{st(D,"href",`/terminals/${e(i).id??""}`),St(Fe,1,At(e(i).isActive?"status-dot-active":"status-dot-idle"),"svelte-1ewpmn2"),O(Re,d),O(he,g),O(He,`PID ${e(i).pid??""}`)},[()=>ce(e(i).command),()=>Qe(e(i).createdAt)]),u(C,D)}),"each",a,288,6);var Me=l(De,2);Ve(()=>e(_e),C=>C.id),n(()=>ke(Me,17,()=>e(_e),C=>C.id,(C,i)=>{const W=w(I(()=>j(e(i))),"badge");e(W);var D=Jt(),Y=r(D),U=r(Y),X=l(r(U),2),Fe=r(X,!0);s(X);var oe=l(X,2);n(()=>Ge(oe,{get text(){return e(W).label},get classes(){return e(W).class}}),"component",a,327,14,{componentTag:"Pill"});var Re=l(oe,2);{var qe=d=>{{let g=I(()=>S(e(i).exitCode,0,!1)?"pill-exit-error":"pill-exit-ok");n(()=>Ge(d,{get text(){return`exit ${e(i).exitCode??""}`},get classes(){return e(g)}}),"component",a,329,16,{componentTag:"Pill"})}};n(()=>R(Re,d=>{S(e(i).exitCode,null,!1)&&d(qe)}),"if",a,328,14)}s(U);var fe=l(U,2),he=r(fe),ge=r(he,!0);s(he);var Se=l(he,2);n(()=>le(Se,{classes:"btn-ghost btn-sm btn-remove",onclick:d=>xe(d,e(i).id),text:"×"}),"component",a,338,14,{componentTag:"Button"}),s(fe),s(Y);var ie=l(Y,2),He=r(ie);n(()=>nt(He,{get text(){return e(i).cwd},position:"bottom",children:F(a,(d,g)=>{var N=qt(),M=r(N,!0);s(N),te(ee=>O(M,ee),[()=>$(e(i).cwd)]),u(d,N)}),$$slots:{default:!0}}),"component",a,347,12,{componentTag:"Tooltip"}),s(ie);var Je=l(ie,2);{var Ze=d=>{var g=Ht(),N=r(g),M=r(N,!0);s(N),s(g),te(ee=>O(M,ee),[()=>ne(e(i).lastOutput)]),u(d,g)};n(()=>R(Je,d=>{e(i).lastOutput&&d(Ze)}),"if",a,352,10)}s(D),te((d,g)=>{st(D,"href",`/terminals/${e(i).id??""}`),O(Fe,d),O(ge,g)},[()=>ce(e(i).command),()=>e(i).exitedAt?Qe(e(i).exitedAt):Qe(e(i).createdAt)]),u(C,D)}),"each",a,318,6),s(ve),u(re,ve)};n(()=>R(Ye,re=>{S(e(m).length,0)?re(mt):re(vt,!1)},!0),"if",a,272,2)}u(G,Ce)};n(()=>R(h,G=>{e(y)?.apiKey?G(me,!1):G(z)},!0),"if",a,264,2)}u(t,o)};n(()=>R(k,t=>{e(T)&&S(e(m).length,0)?t(ue):t(ze,!1)}),"if",a,258,2)}s(de);var We=l(de,2);{var $e=t=>{n(()=>v(t,{get open(){return e(ae)},get apiKey(){return e(y).apiKey},onClose:Oe,onLaunch:_}),"component",a,364,2,{componentTag:"LaunchSheet"})};n(()=>R(We,t=>{e(y)?.apiKey&&t($e)}),"if",a,363,0)}return u(Ee,pe),ut(Ke)}export{a as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/Cjwk_cGO.js","../chunks/PPVm8Dsz.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as Re}from"../chunks/PPVm8Dsz.js";import{c as it,l as lt,e as ht,a as S,b as M,f as P,d as jt,h as We}from"../chunks/RpcNruLP.js";import{p as ct,t as u,G as I,v as a,w as q,B as m,E as y,q as r,I as ot,u as t,r as ut,F as h,x as gt,k as C,l as ze,m as Fe,n as He,J as Je,z as n,A as B,$ as Ue}from"../chunks/BNJphC1q.js";import{i as L,p as Qe,w as $t,s as Ge,v as Ve,b as Xe,c as Ze}from"../chunks/CgCpWzEA.js";import{h as Ye}from"../chunks/DoczjQhA.js";import{g as Kt,B as rt,p as ee,a as re,e as ie,v as tn,K as en,M as nn,l as an,E as sn,P as ne,s as on,q as ae,T as se,t as rn,c as ln}from"../chunks/Dkkpz_4D.js";import{g as st}from"../chunks/CtQ8EED1.js";import{p as oe}from"../chunks/a-St0Zwo.js";import{C as cn}from"../chunks/DKrg8TQs.js";import{c as un}from"../chunks/CAokzuPQ.js";Z[h]="src/lib/modules/client/terminal/ConnectionStatus.svelte";var dn=M(P('<div><span></span> <span class="status-label svelte-1cg9pai"> </span> <!></div>'),Z[h],[[20,0,[[21,2],[22,2]]]]);function Z(w,i){it(new.target),ct(i,!0,Z);const b=u(I(()=>a(i.status,"connected")?"Connected":a(i.status,"reconnecting")?"Reconnecting...":"Disconnected"),"label");var D={...lt()},x=dn();let E;var o=q(x),g=m(o,2),T=q(g,!0);y(g);var R=m(g,2);{var N=$=>{r(()=>rt($,{classes:"btn-ghost btn-sm btn-retry",get onclick(){return i.onretry},text:"Retry"}),"component",Z,24,4,{componentTag:"Button"})};r(()=>L(R,$=>{a(i.status,"disconnected")&&i.onretry&&$(N)}),"if",Z,23,2)}return y(x),ot(()=>{E=Kt(x,1,"connection-status svelte-1cg9pai",null,E,{reconnecting:a(i.status,"reconnecting"),disconnected:a(i.status,"disconnected"),connected:a(i.status,"connected")}),Kt(o,1,`status-dot ${i.status??""}`,"svelte-1cg9pai"),ht(T,t(b))}),S(w,x),ut(D)}const le=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.userAgent),At=le?"⌘":"Ctrl";function mn(){const w=document.activeElement;if(!w)return!1;const i=w.tagName;return!!(i==="INPUT"||i==="TEXTAREA"||w.isContentEditable||w.closest(".xterm"))}function pn(w){function i(b){if((le?b.metaKey:b.ctrlKey)&&!mn()&&b.key==="/"){b.preventDefault(),b.stopPropagation(),w.onHelp();return}}return window.addEventListener("keydown",i,!0),{destroy(){window.removeEventListener("keydown",i,!0)}}}function vn(){return[{description:"Command palette",keys:`${At}+K`},{description:"Keyboard shortcuts",keys:`${At}+/`}]}bt[h]="src/lib/modules/client/terminal/CommandPalette.svelte";function bt(w,i){it(new.target),ct(i,!0,bt);var b=un(i);let D=Qe(i,"open",15);const x=u(I(()=>i.commands.map((g,T)=>({label:g.label,value:String(T)}))),"items");function E(g){const T=parseInt(g.value,10);i.commands[T]&&i.commands[T].action()}var o={...lt()};return b.binding("open",ee,D),r(()=>ee(w,{get items(){return t(x)},placeholder:"Type a command...",emptyText:"No matching commands",onselect:E,get onclose(){return i.onClose},classes:"command-palette",get open(){return D()},set open(g){D(g)}}),"component",bt,32,0,{componentTag:"CommandMenu"}),ut(o)}Y[h]="src/lib/modules/client/terminal/QuickKeys.svelte";var fn=M(P('<div class="quick-keys svelte-64qat5" role="toolbar" aria-label="Quick terminal keys"></div>'),Y[h],[[26,0]]);function Y(w,i){it(new.target),ct(i,!0,Y);const b=[{escape:"",label:"Ctrl+C"},{escape:" ",label:"Tab"},{escape:"\x1B[A",label:"↑"},{escape:"\x1B[B",label:"↓"},{escape:"\x1B",label:"Esc"},{escape:"",label:"Ctrl+D"},{escape:"",label:"Ctrl+Z"}];var D={...lt()},x=fn();return re(()=>b,E=>E.label),r(()=>ie(x,21,()=>b,E=>E.label,(E,o)=>{r(()=>rt(E,{classes:"btn-quick-key",onclick:()=>{i.onKey(t(o).escape)},get text(){return t(o).label}}),"component",Y,28,4,{componentTag:"Button"})}),"each",Y,27,2),y(x),S(w,x),ut(D)}W[h]="src/lib/modules/client/terminal/ShortcutsHelp.svelte";var gn=M(P('<div class="shortcut-row svelte-1u7lstk"><span class="shortcut-desc svelte-1u7lstk"> </span> <!></div>'),W[h],[[23,10,[[24,12]]]]),hn=M(P('<div class="shortcuts-list svelte-1u7lstk"></div>'),W[h],[[21,6]]);function W(w,i){it(new.target),ct(i,!0,W);const b=vn();var D={...lt()},x=jt(),E=gt(x);{var o=g=>{{const T=$t(W,function(R){tn(...arguments);var N=hn();re(()=>b,$=>$.keys),r(()=>ie(N,21,()=>b,$=>$.keys,($,U)=>{var _=gn(),v=q(_),z=q(v,!0);y(v);var f=m(v,2);r(()=>en(f,{get keys(){return t(U).keys},classes:"shortcut-kbd"}),"component",W,25,12,{componentTag:"KeyboardInput"}),y(_),ot(()=>ht(z,t(U).description)),S($,_)}),"each",W,22,8),y(N),S(R,N)});r(()=>nn(g,{header:{text:"Keyboard Shortcuts"},get onoverlayClick(){return i.onClose},classes:"shortcuts-modal",content:T,$$slots:{content:!0}}),"component",W,15,2,{componentTag:"Modal"})}};r(()=>L(E,g=>{i.open&&g(o)}),"if",W,14,0)}return S(w,x),ut(D)}s[h]="src/routes/terminals/[id]/+page.svelte";var bn=M(P('<meta name="description" content="Interactive terminal session" class="svelte-1tubujq"/>'),s[h],[[565,2]]),yn=M(P('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="skeleton svelte-1tubujq" style="width: 120px; height: 20px;"></div></div> <div class="term-body-loading svelte-1tubujq"><div class="skeleton svelte-1tubujq" style="width: 100%; height: 100%;"></div></div></div>'),s[h],[[569,2,[[570,4,[[571,6]]],[573,4,[[574,6]]]]]]),wn=M(P('<main class="main svelte-1tubujq"><div class="session-back-row svelte-1tubujq"><a href="/terminals" class="back-link svelte-1tubujq"><span class="back-arrow svelte-1tubujq">←</span> Terminals</a></div> <!></main>'),s[h],[[578,2,[[579,4,[[580,6,[[581,8]]]]]]]]),_n=M(P("<span></span>"),s[h],[[597,12]]),kn=M(P('<span class="term-cwd svelte-1tubujq"> </span>'),s[h],[[602,12]]),Sn=M(P('<div class="term-input-area svelte-1tubujq"><!> <div class="term-input-bar svelte-1tubujq"><!> <!></div></div>'),s[h],[[653,6,[[655,8]]]]),xn=M(P('<div class="term-exited-bar svelte-1tubujq"><span class="svelte-1tubujq">Process exited</span> <!></div>'),s[h],[[687,6,[[688,8]]]]),Tn=M(P('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="term-topbar-left svelte-1tubujq"><a href="/terminals" class="term-back svelte-1tubujq" aria-label="Back to terminals">←</a> <span class="term-command-name svelte-1tubujq"> </span> <!> <!> <!> <!></div> <div class="term-topbar-right svelte-1tubujq"><!> <button class="term-shortcuts-btn svelte-1tubujq" type="button" aria-label="Keyboard shortcuts">?</button> <!></div></div> <div class="term-body svelte-1tubujq"></div> <!> <div class="term-chat-body svelte-1tubujq"><!></div> <!></div>'),s[h],[[588,2,[[590,4,[[591,6,[[592,8],[593,8]]],[608,6,[[618,8]]]]],[649,4],[674,4]]]]),Cn=M(P("<!> <!> <!>",1),s[h],[]);function s(w,i){it(new.target),ct(i,!0,s);const b=()=>(Ve(oe,"page"),Xe(oe,"$page",D)),[D,x]=Ge(),E=["claude","opencode"];let o=u(C(null),"terminal"),g=u(C(!0),"loading"),T=u(C(null),"error"),R=u(C(!1),"killing"),N=u(C(!1),"removing"),$=u(C(!1),"isActive"),U=u(C(null),"currentCwd"),_=u(C("raw"),"viewMode"),v=u(C("disconnected"),"connectionStatus"),z=u(C(""),"inputText"),f=u(C(ze([])),"chatMessages"),Mt=u(C(!1),"chatSessionEnded"),tt=u(C(null),"termContainer"),F=null,Pt=null,J=u(C(!1),"showShortcutsHelp"),yt=u(C(!1),"showCommandPalette"),j=null,k=!1;const et=u(I(()=>b().params.id),"terminalId"),dt=u(I(()=>t(o)?E.includes((t(o).command.split("/").pop()||"").toLowerCase()):!1),"isAI"),Q=u(I(()=>a(t(o)?.status,"running")),"isRunning"),Dt=u(I(()=>t(o)?.command.split("/").pop()||"terminal"),"commandName"),ce=u(I(()=>t(dt)?"AI":"SHELL"),"badgeLabel"),ue=u(I(()=>t(dt)?"pill-badge-ai":"pill-badge-shell"),"badgeClass"),de=["Raw","Chat"],me=u(I(()=>a(t(_),"raw")?0:1),"tabActiveIndex"),Nt=u(I(()=>ve(t(U)||t(o)?.cwd||"")),"displayCwd"),pe=u(I(()=>{const e=[{label:"Go to Home",action:()=>{st("/")}},{label:"Go to Terminals",action:()=>{st("/terminals")}},{label:"Go to Settings",action:()=>{st("/config")}},{label:"Show keyboard shortcuts",action:()=>{n(J,!0)}}];return t(Q)&&e.push({label:"Kill terminal",action:()=>{Lt()}}),e}),"paletteCommands");function ve(e){if(!e)return"";const l=(a(typeof window,"undefined",!1),"");let d=e;if(a(typeof navigator,"undefined",!1)){const p=e.split("/");(p.length>=3&&a(p[1],"Users")||p.length>=3&&a(p[1],"home"))&&(d="~/"+p.slice(3).join("/"))}if(d.length>30){const p=d.split("/");if(p.length>2)return".../"+p.slice(-2).join("/")}return d||l}function nt(){try{const e=localStorage.getItem("shooter_config");if(!e)return null;const l=JSON.parse(e);return a(typeof l?.apiKey,"string")&&l.apiKey?l:null}catch{return null}}async function fe(){const e=nt();if(!e){n(T,"No configuration found. Please configure settings first."),n(g,!1);return}try{const l=(await B(fetch(`/api/terminals/${t(et)}`,{headers:{Authorization:`Bearer ${e.apiKey}`}})))();if(!l.ok){n(T,a(l.status,404)?"Terminal not found":"Failed to load terminal",!0),n(g,!1);return}n(o,(await B(l.json()))(),!0)}catch{n(T,"Failed to connect to server")}n(g,!1)}async function Ot(){const e=nt();if(!e)return null;try{const l=(await B(fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${e.apiKey}`},method:"POST"})))();return l.ok?(await B(l.json()))().ticket:null}catch{return null}}async function Lt(){if(!t(o)||t(R))return;const e=nt();if(e){n(R,!0);try{(await B(fetch(`/api/terminals/${t(et)}`,{headers:{Authorization:`Bearer ${e.apiKey}`},method:"DELETE"})))().ok?st("/terminals"):n(R,!1)}catch{n(R,!1)}}}async function ge(){if(!t(o)||t(N))return;const e=nt();if(e){n(N,!0);try{(await B(fetch(`/api/terminals/${t(et)}`,{headers:{Authorization:`Bearer ${e.apiKey}`},method:"DELETE"})))().ok?st("/terminals"):n(N,!1)}catch{n(N,!1)}}}async function wt(){if(!t(tt)||!t(o)||k)return;const l=`${a(window.location.protocol,"https:")?"wss:":"ws:"}//${window.location.host}${t(o).ws}`,d=async()=>{const p=(await B(Ot()))();if(!p)throw new Error("Failed to obtain WebSocket ticket");return p};try{const{createTerminal:p}=(await B(Re(()=>import("../chunks/Cjwk_cGO.js"),__vite__mapDeps([0,1]),import.meta.url)))();if(k||!t(tt))return;const G=(await B(p({apiKey:nt()?.apiKey,container:t(tt),fontSize:window.innerWidth<768?12:14,getTicket:d,terminalId:t(et),onActivity:O=>{k||n($,O,!0)},onCwd:O=>{k||n(U,O,!0)},onDisconnect:()=>{k||n(v,"reconnecting")},onExit:O=>{!k&&t(o)&&(n(o,{...t(o),exitCode:O,exitedAt:new Date().toISOString(),status:"exited"},!0),n(v,"disconnected"))},onReconnect:()=>{k||n(v,"connected")},wsUrl:l})))();if(k){G.dispose();return}F=G,n(v,"connected")}catch(p){console.error(...an("error","Failed to initialize terminal:",p)),n(v,"disconnected")}}function Bt(){F&&(F.dispose(),F=null)}async function mt(){if(!t(o)||k)return;const e=(await B(Ot()))();if(!e||k||!t(o)){n(v,"disconnected");return}const d=`${a(window.location.protocol,"https:")?"wss:":"ws:"}//${window.location.host}${t(o).sessionWs}?ticket=${e}`;j=new WebSocket(d),j.onopen=()=>{k||(n(v,"connected"),j?.send(JSON.stringify({sessionId:t(et),type:"subscribe"})))},j.onmessage=p=>{if(!k)try{const G=JSON.parse(p.data);he(G)}catch{}},j.onclose=()=>{!k&&a(t(o)?.status,"running")&&(n(v,"reconnecting"),setTimeout(()=>{!k&&a(t(o)?.status,"running")&&mt()},2e3))},j.onerror=()=>{k||n(v,"disconnected")}}function he(e){if(a(e.type,"history")){const l=e.messages||[];n(f,l.map(d=>({id:d.id,parts:d.content,role:d.role,timestamp:d.timestamp})),!0)}else if(a(e.type,"message"))n(f,[...t(f),{id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:e.content||[],role:e.role||"assistant",timestamp:e.timestamp||new Date().toISOString()}],!0);else if(a(e.type,"tool-use"))n(f,[...t(f),{id:`tool-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[{id:e.id||`tool-${Date.now()}`,input:e.input||{},toolName:e.name,type:"tool_use"}],role:"assistant",timestamp:new Date().toISOString()}],!0);else if(a(e.type,"tool-result"))n(f,[...t(f),{id:`result-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[{isError:e.isError||!1,output:e.output||"",toolUseId:e.id,type:"tool_result"}],role:"system",timestamp:new Date().toISOString()}],!0);else if(a(e.type,"thinking")){const l={content:e.text||"",type:"thinking"},d=t(f).length>0?t(f)[t(f).length-1]:null;a(d?.role,"assistant")?n(f,[...t(f).slice(0,-1),{...d,parts:[...d.parts,l]}],!0):n(f,[...t(f),{id:`think-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[l],role:"assistant",timestamp:new Date().toISOString()}],!0)}else a(e.type,"error")?n(f,[...t(f),{id:`err-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[{content:e.message||"Unknown error",type:"text"}],role:"system",timestamp:new Date().toISOString()}],!0):a(e.type,"session-end")&&(n(Mt,!0),t(o)&&n(o,{...t(o),status:"exited"},!0))}function Rt(){j&&(j.onclose=null,j.close(),j=null)}function Wt(){t(z).trim()&&(F&&a(t(v),"connected")&&F.sendInput(`${t(z)}\r`),n(z,""))}function be(e){!e.trim()||a(j?.readyState,WebSocket.OPEN,!1)||j.send(JSON.stringify({text:e,type:"send-input"}))}function zt(){a(j?.readyState,WebSocket.OPEN)&&j.send(JSON.stringify({type:"cancel"}))}function ye(e){a(t(_),"raw")?F&&a(t(v),"connected")&&F.sendInput(e):a(t(_),"chat")&&a(e,"")&&zt()}function we(e){a(e.key,"Enter")&&(e.preventDefault(),Wt())}let pt=!1,vt=!1;function _e(e){a(e,t(_))||(n(_,e,!0),a(e,"raw")&&!pt?(requestAnimationFrame(()=>{wt()}),pt=!0):a(e,"chat")&&!vt&&(mt(),vt=!0))}function ke(){a(t(_),"raw")?(Bt(),n(v,"reconnecting"),wt(),pt=!0):(Rt(),n(v,"reconnecting"),mt(),vt=!0)}Fe(async()=>{(await B(fe()))(),Pt=pn({onHelp:()=>{n(J,!t(J))}}),!(!t(o)||t(T))&&(t(dt)&&window.innerWidth<768?n(_,"chat"):n(_,"raw"),a(t(_),"raw")?(requestAnimationFrame(()=>{wt()}),pt=!0):(mt(),vt=!0))}),He(()=>{k=!0,Bt(),Rt(),Pt?.destroy()});var Se={...lt()},Ft=Cn();Ye("1tubujq",e=>{var l=bn();Je(()=>{Ue.title=`${t(Dt)??""} - Terminal - Shooter`}),S(e,l)});var Ht=gt(Ft);{var xe=e=>{var l=yn();S(e,l)},Te=e=>{var l=jt(),d=gt(l);{var p=O=>{var V=wn(),_t=m(q(V),2);r(()=>sn(_t,{icon:"alert-triangle",title:"Error",get description(){return t(T)}}),"component",s,585,4,{componentTag:"EmptyState"}),y(V),S(O,V)},G=O=>{var V=jt(),_t=gt(V);{var qe=kt=>{var St=Tn(),xt=q(St),Tt=q(xt),Ct=m(q(Tt),2),Ee=q(Ct,!0);y(Ct);var Ut=m(Ct,2);r(()=>ne(Ut,{get text(){return t(ce)},get classes(){return t(ue)}}),"component",s,594,8,{componentTag:"Pill"});var Qt=m(Ut,2);{var je=c=>{{let K=I(()=>t($)?"Active":"Idle");r(()=>se(c,{get text(){return t(K)},position:"bottom",children:$t(s,(H,X)=>{var A=_n();ot(()=>Kt(A,1,`activity-dot ${t($)?"activity-active":"activity-idle"}`,"svelte-1tubujq")),S(H,A)}),$$slots:{default:!0}}),"component",s,596,10,{componentTag:"Tooltip"})}};r(()=>L(Qt,c=>{t(Q)&&c(je)}),"if",s,595,8)}var Gt=m(Qt,2);{var $e=c=>{{let K=I(()=>t(U)||t(o)?.cwd||"");r(()=>se(c,{get text(){return t(K)},position:"bottom",children:$t(s,(H,X)=>{var A=kn(),at=q(A,!0);y(A),ot(()=>ht(at,t(Nt))),S(H,A)}),$$slots:{default:!0}}),"component",s,601,10,{componentTag:"Tooltip"})}};r(()=>L(Gt,c=>{t(Nt)&&c($e)}),"if",s,600,8)}var Ke=m(Gt,2);r(()=>Z(Ke,{get status(){return t(v)},onretry:ke}),"component",s,605,8,{componentTag:"ConnectionStatus"}),y(Tt);var Vt=m(Tt,2),Xt=q(Vt);{var Ae=c=>{r(()=>rn(c,{get items(){return de},get activeIndex(){return t(me)},onchange:K=>_e(a(K,0)?"raw":"chat"),classes:"term-tabs"}),"component",s,610,10,{componentTag:"Tabs"})};r(()=>L(Xt,c=>{t(dt)&&c(Ae)}),"if",s,609,8)}var It=m(Xt,2);It.__click=()=>{n(J,!t(J))};var Me=m(It,2);{var Pe=c=>{r(()=>rt(c,{classes:"btn-danger btn-sm",onclick:Lt,get disabled(){return t(R)},get showLoader(){return t(R)},text:"Kill"}),"component",s,627,10,{componentTag:"Button"})},De=c=>{r(()=>rt(c,{classes:"btn-secondary btn-sm",onclick:ge,get disabled(){return t(N)},get showLoader(){return t(N)},text:"Remove"}),"component",s,635,10,{componentTag:"Button"})};r(()=>L(Me,c=>{t(Q)?c(Pe):c(De,!1)}),"if",s,626,8)}y(Vt),y(xt);var qt=m(xt,2);let Zt;Ze(qt,c=>n(tt,c),()=>t(tt));var Yt=m(qt,2);{var Ne=c=>{var K=Sn(),H=q(K);r(()=>Y(H,{onKey:ye}),"component",s,654,8,{componentTag:"QuickKeys"});var X=m(H,2),A=q(X);r(()=>ln(A,{dataType:"text",placeholder:"Type command...",classes:"input-mono term-input-field",onKeyDown:we,get value(){return t(z)},set value(Et){n(z,Et,!0)}}),"component",s,656,10,{componentTag:"Input"});var at=m(A,2);{let Et=I(()=>!t(z).trim());r(()=>rt(at,{classes:"btn-primary btn-send",onclick:Wt,get disabled(){return t(Et)},text:"↵"}),"component",s,663,10,{componentTag:"Button"})}y(X),y(K),S(c,K)};r(()=>L(Yt,c=>{t(Q)&&a(t(_),"raw")&&c(Ne)}),"if",s,652,4)}var ft=m(Yt,2);let te;var Oe=q(ft);r(()=>cn(Oe,{get messages(){return t(f)},get connectionState(){return t(v)},get sessionEnded(){return t(Mt)},get showInput(){return t(Q)},onSendInput:be,onCancel:zt}),"component",s,675,6,{componentTag:"ChatView"}),y(ft);var Le=m(ft,2);{var Be=c=>{var K=xn(),H=m(q(K),2);{var X=A=>{{let at=I(()=>a(t(o).exitCode,0,!1)?"pill-exit-error":"pill-exit-ok");r(()=>ne(A,{get text(){return`code ${t(o).exitCode??""}`},get classes(){return t(at)}}),"component",s,690,10,{componentTag:"Pill"})}};r(()=>L(H,A=>{a(t(o).exitCode,null,!1)&&A(X)}),"if",s,689,8)}y(K),S(c,K)};r(()=>L(Le,c=>{t(Q)||c(Be)}),"if",s,686,4)}y(St),ot(()=>{ht(Ee,t(Dt)),on(It,"title",`${At??""}+/ for shortcuts`),Zt=ae(qt,"",Zt,{display:a(t(_),"raw")?"flex":"none"}),te=ae(ft,"",te,{display:a(t(_),"chat")?"flex":"none"})}),S(kt,St)};r(()=>L(_t,kt=>{t(o)&&kt(qe)},!0),"if",s,587,0)}S(O,V)};r(()=>L(d,O=>{t(T)?O(p):O(G,!1)},!0),"if",s,577,0)}S(e,l)};r(()=>L(Ht,e=>{t(g)?e(xe):e(Te,!1)}),"if",s,568,0)}var Jt=m(Ht,2);r(()=>W(Jt,{get open(){return t(J)},onClose:()=>{n(J,!1)}}),"component",s,697,0,{componentTag:"ShortcutsHelp"});var Ce=m(Jt,2);r(()=>bt(Ce,{get commands(){return t(pe)},onClose:()=>{n(yt,!1)},get open(){return t(yt)},set open(e){n(yt,e,!0)}}),"component",s,698,0,{componentTag:"CommandPalette"}),S(w,Ft);var Ie=ut(Se);return x(),Ie}We(["click"]);export{s as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"1774431915522"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<rect width="32" height="32" rx="6" fill="#0a0a0a"/>
|
|
3
|
+
<circle cx="16" cy="16" r="10" fill="none" stroke="#22c55e" stroke-width="2"/>
|
|
4
|
+
<circle cx="16" cy="16" r="5" fill="none" stroke="#22c55e" stroke-width="1.5"/>
|
|
5
|
+
<circle cx="16" cy="16" r="1.5" fill="#22c55e"/>
|
|
6
|
+
<line x1="16" y1="2" x2="16" y2="8" stroke="#22c55e" stroke-width="1.5"/>
|
|
7
|
+
<line x1="16" y1="24" x2="16" y2="30" stroke="#22c55e" stroke-width="1.5"/>
|
|
8
|
+
<line x1="2" y1="16" x2="8" y2="16" stroke="#22c55e" stroke-width="1.5"/>
|
|
9
|
+
<line x1="24" y1="16" x2="30" y2="16" stroke="#22c55e" stroke-width="1.5"/>
|
|
10
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"Shooter","short_name":"Shooter","description":"Remote terminal and notification system for your system","start_url":"./","display":"standalone","background_color":"#0a0a0a","theme_color":"#0a0a0a","lang":"en","scope":"./","icons":[{"sizes":"192x192","src":"pwa-192x192.png","type":"image/png"},{"sizes":"512x512","src":"pwa-512x512.png","type":"image/png"},{"purpose":"maskable","sizes":"512x512","src":"pwa-512x512.png","type":"image/png"}]}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2018 Google Inc. All Rights Reserved.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
8
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
9
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
10
|
+
* See the License for the specific language governing permissions and
|
|
11
|
+
* limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// If the loader is already loaded, just stop.
|
|
15
|
+
if (!self.define) {
|
|
16
|
+
let registry = {};
|
|
17
|
+
|
|
18
|
+
// Used for `eval` and `importScripts` where we can't get script URL by other means.
|
|
19
|
+
// In both cases, it's safe to use a global var because those functions are synchronous.
|
|
20
|
+
let nextDefineUri;
|
|
21
|
+
|
|
22
|
+
const singleRequire = (uri, parentUri) => {
|
|
23
|
+
uri = new URL(uri + ".js", parentUri).href;
|
|
24
|
+
return registry[uri] || (
|
|
25
|
+
|
|
26
|
+
new Promise(resolve => {
|
|
27
|
+
if ("document" in self) {
|
|
28
|
+
const script = document.createElement("script");
|
|
29
|
+
script.src = uri;
|
|
30
|
+
script.onload = resolve;
|
|
31
|
+
document.head.appendChild(script);
|
|
32
|
+
} else {
|
|
33
|
+
nextDefineUri = uri;
|
|
34
|
+
importScripts(uri);
|
|
35
|
+
resolve();
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
.then(() => {
|
|
40
|
+
let promise = registry[uri];
|
|
41
|
+
if (!promise) {
|
|
42
|
+
throw new Error(`Module ${uri} didn’t register its module`);
|
|
43
|
+
}
|
|
44
|
+
return promise;
|
|
45
|
+
})
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
self.define = (depsNames, factory) => {
|
|
50
|
+
const uri = nextDefineUri || ("document" in self ? document.currentScript.src : "") || location.href;
|
|
51
|
+
if (registry[uri]) {
|
|
52
|
+
// Module is already loading or loaded.
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let exports = {};
|
|
56
|
+
const require = depUri => singleRequire(depUri, uri);
|
|
57
|
+
const specialDeps = {
|
|
58
|
+
module: { uri },
|
|
59
|
+
exports,
|
|
60
|
+
require
|
|
61
|
+
};
|
|
62
|
+
registry[uri] = Promise.all(depsNames.map(
|
|
63
|
+
depName => specialDeps[depName] || require(depName)
|
|
64
|
+
)).then(deps => {
|
|
65
|
+
factory(...deps);
|
|
66
|
+
return exports;
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
define(['./workbox-5119daf5'], (function (workbox) { 'use strict';
|
|
71
|
+
|
|
72
|
+
self.skipWaiting();
|
|
73
|
+
workbox.clientsClaim();
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The precacheAndRoute() method efficiently caches and responds to
|
|
77
|
+
* requests for URLs in the manifest.
|
|
78
|
+
* See https://goo.gl/S9QRab
|
|
79
|
+
*/
|
|
80
|
+
workbox.precacheAndRoute([{
|
|
81
|
+
"url": "registerSW.js",
|
|
82
|
+
"revision": "402b66900e731ca748771b6fc5e7a068"
|
|
83
|
+
}, {
|
|
84
|
+
"url": "pwa-512x512.png",
|
|
85
|
+
"revision": "ceca85fa69fb7746de28d02cb3518553"
|
|
86
|
+
}, {
|
|
87
|
+
"url": "pwa-192x192.png",
|
|
88
|
+
"revision": "eaf76a16b233e90759a44f1d7006e71e"
|
|
89
|
+
}, {
|
|
90
|
+
"url": "favicon.svg",
|
|
91
|
+
"revision": "2d9263269537e013ab55bf50ad94c91c"
|
|
92
|
+
}, {
|
|
93
|
+
"url": "favicon.png",
|
|
94
|
+
"revision": "b542d16bd43caeeba08fa360911ca4db"
|
|
95
|
+
}, {
|
|
96
|
+
"url": "apple-touch-icon.png",
|
|
97
|
+
"revision": "8b18e330cc9a719994b1cfca9df5e610"
|
|
98
|
+
}, {
|
|
99
|
+
"url": "app-icon.png",
|
|
100
|
+
"revision": "37ef3a57ac7594bcfd8b094a9f5c43f5"
|
|
101
|
+
}, {
|
|
102
|
+
"url": "_app/immutable/nodes/7.D8mqsrZG.js",
|
|
103
|
+
"revision": null
|
|
104
|
+
}, {
|
|
105
|
+
"url": "_app/immutable/nodes/6.BB7QE48r.js",
|
|
106
|
+
"revision": null
|
|
107
|
+
}, {
|
|
108
|
+
"url": "_app/immutable/nodes/5.D7zPRe3L.js",
|
|
109
|
+
"revision": null
|
|
110
|
+
}, {
|
|
111
|
+
"url": "_app/immutable/nodes/4.D-cIe70D.js",
|
|
112
|
+
"revision": null
|
|
113
|
+
}, {
|
|
114
|
+
"url": "_app/immutable/nodes/3.DIwYkjDn.js",
|
|
115
|
+
"revision": null
|
|
116
|
+
}, {
|
|
117
|
+
"url": "_app/immutable/nodes/2.B4MlOSh6.js",
|
|
118
|
+
"revision": null
|
|
119
|
+
}, {
|
|
120
|
+
"url": "_app/immutable/nodes/1.MG1QhfrI.js",
|
|
121
|
+
"revision": null
|
|
122
|
+
}, {
|
|
123
|
+
"url": "_app/immutable/nodes/0.CzkdvJ7j.js",
|
|
124
|
+
"revision": null
|
|
125
|
+
}, {
|
|
126
|
+
"url": "_app/immutable/entry/start.BntDNRMC.js",
|
|
127
|
+
"revision": null
|
|
128
|
+
}, {
|
|
129
|
+
"url": "_app/immutable/entry/app.QvGgdvTI.js",
|
|
130
|
+
"revision": null
|
|
131
|
+
}, {
|
|
132
|
+
"url": "_app/immutable/chunks/bo70OQUZ.js",
|
|
133
|
+
"revision": null
|
|
134
|
+
}, {
|
|
135
|
+
"url": "_app/immutable/chunks/a-St0Zwo.js",
|
|
136
|
+
"revision": null
|
|
137
|
+
}, {
|
|
138
|
+
"url": "_app/immutable/chunks/RpcNruLP.js",
|
|
139
|
+
"revision": null
|
|
140
|
+
}, {
|
|
141
|
+
"url": "_app/immutable/chunks/PPVm8Dsz.js",
|
|
142
|
+
"revision": null
|
|
143
|
+
}, {
|
|
144
|
+
"url": "_app/immutable/chunks/DoczjQhA.js",
|
|
145
|
+
"revision": null
|
|
146
|
+
}, {
|
|
147
|
+
"url": "_app/immutable/chunks/Dkkpz_4D.js",
|
|
148
|
+
"revision": null
|
|
149
|
+
}, {
|
|
150
|
+
"url": "_app/immutable/chunks/DLu6yJIZ.js",
|
|
151
|
+
"revision": null
|
|
152
|
+
}, {
|
|
153
|
+
"url": "_app/immutable/chunks/DKrg8TQs.js",
|
|
154
|
+
"revision": null
|
|
155
|
+
}, {
|
|
156
|
+
"url": "_app/immutable/chunks/DERQCisl.js",
|
|
157
|
+
"revision": null
|
|
158
|
+
}, {
|
|
159
|
+
"url": "_app/immutable/chunks/CtQ8EED1.js",
|
|
160
|
+
"revision": null
|
|
161
|
+
}, {
|
|
162
|
+
"url": "_app/immutable/chunks/Cjwk_cGO.js",
|
|
163
|
+
"revision": null
|
|
164
|
+
}, {
|
|
165
|
+
"url": "_app/immutable/chunks/CgCpWzEA.js",
|
|
166
|
+
"revision": null
|
|
167
|
+
}, {
|
|
168
|
+
"url": "_app/immutable/chunks/CGLrx-H5.js",
|
|
169
|
+
"revision": null
|
|
170
|
+
}, {
|
|
171
|
+
"url": "_app/immutable/chunks/CAokzuPQ.js",
|
|
172
|
+
"revision": null
|
|
173
|
+
}, {
|
|
174
|
+
"url": "_app/immutable/chunks/Bvk7mfPM.js",
|
|
175
|
+
"revision": null
|
|
176
|
+
}, {
|
|
177
|
+
"url": "_app/immutable/chunks/BlxrFPDK.js",
|
|
178
|
+
"revision": null
|
|
179
|
+
}, {
|
|
180
|
+
"url": "_app/immutable/chunks/BTGVxaYV.js",
|
|
181
|
+
"revision": null
|
|
182
|
+
}, {
|
|
183
|
+
"url": "_app/immutable/chunks/BNJphC1q.js",
|
|
184
|
+
"revision": null
|
|
185
|
+
}, {
|
|
186
|
+
"url": "_app/immutable/assets/xterm.DFuMZ0ql.css",
|
|
187
|
+
"revision": null
|
|
188
|
+
}, {
|
|
189
|
+
"url": "_app/immutable/assets/markdown.B0b5w2tq.css",
|
|
190
|
+
"revision": null
|
|
191
|
+
}, {
|
|
192
|
+
"url": "_app/immutable/assets/ChatView.CsdBAOKx.css",
|
|
193
|
+
"revision": null
|
|
194
|
+
}, {
|
|
195
|
+
"url": "_app/immutable/assets/7.BCJ1IuMx.css",
|
|
196
|
+
"revision": null
|
|
197
|
+
}, {
|
|
198
|
+
"url": "_app/immutable/assets/6.AraZrY8I.css",
|
|
199
|
+
"revision": null
|
|
200
|
+
}, {
|
|
201
|
+
"url": "_app/immutable/assets/5.DRjApZQW.css",
|
|
202
|
+
"revision": null
|
|
203
|
+
}, {
|
|
204
|
+
"url": "_app/immutable/assets/4.cJuCkJKZ.css",
|
|
205
|
+
"revision": null
|
|
206
|
+
}, {
|
|
207
|
+
"url": "_app/immutable/assets/3.C0uFg0IS.css",
|
|
208
|
+
"revision": null
|
|
209
|
+
}, {
|
|
210
|
+
"url": "_app/immutable/assets/2.CAShZ7lQ.css",
|
|
211
|
+
"revision": null
|
|
212
|
+
}, {
|
|
213
|
+
"url": "_app/immutable/assets/0.CM9Hl6d-.css",
|
|
214
|
+
"revision": null
|
|
215
|
+
}, {
|
|
216
|
+
"url": "manifest.webmanifest",
|
|
217
|
+
"revision": "a44928e4175d1d22ce46ce7c2888305f"
|
|
218
|
+
}], {});
|
|
219
|
+
workbox.cleanupOutdatedCaches();
|
|
220
|
+
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("/")));
|
|
221
|
+
|
|
222
|
+
}));
|
|
Binary file
|
|
Binary file
|