@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 @@
|
|
|
1
|
+
{"version":3,"file":"pty-manager-C0FhBiVq.js","sources":["../../../.svelte-kit/adapter-node/chunks/pty-manager.js"],"sourcesContent":["import { fork } from \"child_process\";\nimport { randomBytes } from \"crypto\";\nimport * as fs from \"fs\";\nimport { existsSync, readFileSync, unlinkSync, readdirSync, statSync } from \"fs\";\nimport * as path from \"path\";\nimport path__default from \"path\";\nimport { fileURLToPath } from \"url\";\nimport * as net from \"net\";\nimport Database from \"better-sqlite3\";\nimport { watch } from \"chokidar\";\nimport { p as parseJsonlText } from \"./jsonl-parser.js\";\nclass HolderClient {\n connected = false;\n pid = 0;\n activityCb = null;\n cwdCb = null;\n disconnectCb = null;\n exitCb = null;\n lineBuf = \"\";\n outputCb = null;\n socket = null;\n /**\n * Connect to a holder process via its Unix domain socket.\n * Resolves once the initial `info` and `scrollback` handshake messages\n * have been received.\n */\n connect(socketPath) {\n return new Promise((resolve, reject) => {\n let settled = false;\n let info = null;\n let scrollback = \"\";\n const pendingMessages = [];\n const socket = net.createConnection(socketPath);\n this.socket = socket;\n socket.setEncoding(\"utf8\");\n socket.on(\"connect\", () => {\n this.connected = true;\n });\n socket.on(\"data\", (chunk) => {\n this.lineBuf += chunk;\n const lines = this.lineBuf.split(\"\\n\");\n this.lineBuf = lines.pop();\n for (const line of lines) {\n if (line.length === 0) {\n continue;\n }\n let msg;\n try {\n msg = JSON.parse(line);\n } catch {\n continue;\n }\n if (!settled) {\n if (msg.type === \"info\") {\n info = { exitCode: msg.exitCode, exited: msg.exited, pid: msg.pid };\n this.pid = msg.pid;\n } else if (msg.type === \"scrollback\") {\n scrollback = msg.data;\n } else {\n pendingMessages.push(msg);\n }\n if (info !== null) {\n const settle = () => {\n if (settled) return;\n settled = true;\n resolve({\n exitCode: info.exitCode,\n exited: info.exited,\n pid: info.pid,\n scrollback\n });\n const queued = [...pendingMessages];\n pendingMessages.length = 0;\n setTimeout(() => {\n for (const pending of queued) {\n this.handleMessage(pending);\n }\n }, 0);\n };\n if (msg.type === \"scrollback\" || info.exited) {\n settle();\n } else if (msg.type === \"info\") {\n setTimeout(settle, 100);\n }\n }\n } else {\n this.handleMessage(msg);\n }\n }\n });\n socket.on(\"error\", (err) => {\n if (!settled) {\n settled = true;\n this.connected = false;\n this.socket = null;\n reject(err);\n }\n });\n socket.on(\"close\", () => {\n const wasConnected = this.connected;\n this.connected = false;\n this.socket = null;\n this.lineBuf = \"\";\n if (!settled) {\n settled = true;\n reject(new Error(\"Socket closed before handshake completed\"));\n return;\n }\n if (wasConnected && this.disconnectCb) {\n this.disconnectCb();\n }\n });\n });\n }\n /** Gracefully disconnect from the holder (does NOT kill the holder). */\n disconnect() {\n this.connected = false;\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n this.lineBuf = \"\";\n }\n /** Send a signal to the PTY process (default SIGTERM). */\n kill(signal) {\n const msg = { type: \"kill\" };\n if (signal) {\n msg.signal = signal;\n }\n this.send(msg);\n }\n /** Register callback for activity state changes. */\n onActivity(cb) {\n this.activityCb = cb;\n }\n /** Register callback for CWD changes. */\n onCwd(cb) {\n this.cwdCb = cb;\n }\n /** Register callback for unexpected disconnect from holder. */\n onDisconnect(cb) {\n this.disconnectCb = cb;\n }\n /** Register callback for PTY exit. */\n onExit(cb) {\n this.exitCb = cb;\n }\n /** Register callback for PTY output data. */\n onOutput(cb) {\n this.outputCb = cb;\n }\n /** Resize the PTY. */\n resize(cols, rows) {\n this.send({ cols, rows, type: \"resize\" });\n }\n /** Write data to the PTY stdin. */\n write(data) {\n this.send({ data, type: \"input\" });\n }\n // ── Private Helpers ────────────────────────────────────────────────\n /** Dispatch a post-handshake message from the holder. */\n handleMessage(msg) {\n switch (msg.type) {\n case \"activity\":\n if (this.activityCb) {\n this.activityCb(msg.active);\n }\n break;\n case \"cwd\":\n if (this.cwdCb) {\n this.cwdCb(msg.path);\n }\n break;\n case \"exit\":\n if (this.exitCb) {\n this.exitCb(msg.code);\n }\n break;\n case \"output\":\n if (this.outputCb) {\n this.outputCb(msg.data);\n }\n break;\n }\n }\n /** Send an ndjson message to the holder. */\n send(msg) {\n if (!this.socket || !this.connected) {\n return;\n }\n this.socket.write(`${JSON.stringify(msg)}\n`);\n }\n}\nconst OPENCODE_DB_PATH = (() => {\n if (process.platform === \"darwin\") {\n return path.join(process.env.HOME || \"\", \"Library\", \"Application Support\", \"opencode\", \"opencode.db\");\n }\n const xdgData = process.env.XDG_DATA_HOME || path.join(process.env.HOME || \"\", \".local\", \"share\");\n return path.join(xdgData, \"opencode\", \"opencode.db\");\n})();\nconst POLL_INTERVAL_MS = 2e3;\nconst SQLITE_MAX_PARAMS = 500;\nfunction toMillis(timestamp) {\n return timestamp < 1e12 ? timestamp * 1e3 : timestamp;\n}\nclass OpenCodeWatcher {\n watchers = /* @__PURE__ */ new Map();\n /**\n * Find the most recent non-archived OpenCode session that matches\n * the given working directory. Checks session.directory equals or\n * starts with `cwd`.\n *\n * Returns the session ID or null if none found.\n */\n findSessionId(cwd, createdAfter) {\n const db = openDb();\n if (!db) {\n return null;\n }\n try {\n const timeFilter = createdAfter ? Math.min(createdAfter, Math.floor(createdAfter / 1e3)) : 0;\n const row = db.prepare(\n `\n\t\t\t\tSELECT id\n\t\t\t\tFROM session\n\t\t\t\tWHERE (time_archived IS NULL OR time_archived = 0)\n\t\t\t\t AND (directory = ? OR directory LIKE ? || '/%')\n\t\t\t\t AND time_updated > ?\n\t\t\t\tORDER BY time_updated DESC\n\t\t\t\tLIMIT 1\n\t\t\t`\n ).get(cwd, cwd, timeFilter);\n return row?.id ?? null;\n } catch (error) {\n console.error(\"[opencode-watcher] Failed to find session:\", error);\n return null;\n } finally {\n db.close();\n }\n }\n /**\n * Read all messages and parts for a session from SQLite, converting\n * them to ConversationMessage format.\n */\n getHistory(sessionId) {\n const db = openDb();\n if (!db) {\n return [];\n }\n try {\n const messages = db.prepare(\n `\n\t\t\t\tSELECT id, session_id, time_created, time_updated, data\n\t\t\t\tFROM message\n\t\t\t\tWHERE session_id = ?\n\t\t\t\tORDER BY time_created ASC\n\t\t\t`\n ).all(sessionId);\n if (messages.length === 0) {\n return [];\n }\n const messageIds = messages.map((m) => m.id);\n const parts = batchInQuery(\n db,\n `SELECT id, message_id, session_id, time_created, time_updated, data\n\t\t\t\tFROM part\n\t\t\t\tWHERE message_id IN (__PLACEHOLDERS__)\n\t\t\t\tORDER BY time_created ASC`,\n messageIds\n );\n const partsByMessage = /* @__PURE__ */ new Map();\n for (const part of parts) {\n if (!partsByMessage.has(part.message_id)) {\n partsByMessage.set(part.message_id, []);\n }\n partsByMessage.get(part.message_id).push(part);\n }\n return this.buildMessages(messages, partsByMessage);\n } catch (error) {\n console.error(\"[opencode-watcher] Failed to read history:\", error);\n return [];\n } finally {\n db.close();\n }\n }\n /**\n * Stop watching a specific session. If a callback is provided, only that\n * subscriber is removed — the interval keeps running while other subscribers\n * remain. If no callback is provided, all subscribers and the interval are\n * cleared (backward compat).\n */\n stop(sessionId, callback) {\n const state = this.watchers.get(sessionId);\n if (!state) {\n return;\n }\n if (callback) {\n state.callbacks.delete(callback);\n console.log(\n `[opencode-watcher] Removed subscriber from session: ${sessionId} (remaining=${state.callbacks.size})`\n );\n if (state.callbacks.size > 0) {\n return;\n }\n }\n clearInterval(state.intervalHandle);\n this.watchers.delete(sessionId);\n console.log(`[opencode-watcher] Stopped watching session: ${sessionId}`);\n }\n /**\n * Stop all active watchers.\n */\n stopAll() {\n for (const [sessionId] of this.watchers) {\n this.stop(sessionId);\n }\n }\n /**\n * Start polling the SQLite DB every 2 seconds for new messages/parts\n * in the given session. Converts new data to ConversationMessage\n * format and invokes the callback.\n */\n watch(sessionId, callback) {\n const existing = this.watchers.get(sessionId);\n if (existing) {\n existing.callbacks.add(callback);\n console.log(\n `[opencode-watcher] Added subscriber to session: ${sessionId} (total=${existing.callbacks.size})`\n );\n return;\n }\n const { emittedMessageIds, emittedPartIds, lastMessageTime, lastPartTime } = this.getHighWaterMarks(sessionId);\n const intervalHandle = setInterval(() => {\n this.poll(sessionId);\n }, POLL_INTERVAL_MS);\n const state = {\n callbacks: /* @__PURE__ */ new Set([callback]),\n emittedMessageIds,\n emittedPartIds,\n intervalHandle,\n lastMessageTime,\n lastPartTime,\n sessionId\n };\n this.watchers.set(sessionId, state);\n console.log(\n `[opencode-watcher] Watching session: ${sessionId} (lastMsg=${lastMessageTime}, lastPart=${lastPartTime})`\n );\n }\n // ── Private Helpers ────────────────────────────────────────────────\n /**\n * Convert OpenCode messages + their parts into ConversationMessage\n * objects for consumption by the session handler.\n */\n buildMessages(messages, partsByMessage) {\n const result = [];\n for (const msg of messages) {\n let msgData = {};\n try {\n msgData = JSON.parse(msg.data);\n } catch {\n continue;\n }\n const role = msgData.role === \"user\" ? \"user\" : \"assistant\";\n const msgParts = partsByMessage.get(msg.id) || [];\n const parts = [];\n for (const part of msgParts) {\n let partData;\n try {\n partData = JSON.parse(part.data);\n } catch {\n continue;\n }\n const converted = convertPartToMessagePart(partData);\n if (converted) {\n parts.push(converted);\n }\n }\n if (parts.length === 0) {\n console.debug(`[opencode-watcher] Skipping message ${msg.id} (no usable parts)`);\n continue;\n }\n result.push({\n id: msg.id,\n parts,\n role,\n timestamp: new Date(toMillis(msg.time_created)).toISOString()\n });\n }\n return result;\n }\n /**\n * Scan existing messages/parts to determine the starting high-water\n * marks for time-based polling. Also collects the set of already-seen\n * message IDs so we do not re-emit them.\n */\n getHighWaterMarks(sessionId) {\n const db = openDb();\n if (!db) {\n return { emittedMessageIds: /* @__PURE__ */ new Set(), emittedPartIds: /* @__PURE__ */ new Set(), lastMessageTime: 0, lastPartTime: 0 };\n }\n try {\n const msgRow = db.prepare(\n `\n\t\t\t\tSELECT MAX(time_created) as maxTime\n\t\t\t\tFROM message\n\t\t\t\tWHERE session_id = ?\n\t\t\t`\n ).get(sessionId);\n const partRow = db.prepare(\n `\n\t\t\t\tSELECT MAX(time_updated) as maxTime\n\t\t\t\tFROM part\n\t\t\t\tWHERE session_id = ?\n\t\t\t`\n ).get(sessionId);\n const existingIds = db.prepare(\n `\n\t\t\t\tSELECT id FROM message WHERE session_id = ?\n\t\t\t`\n ).all(sessionId);\n const emittedMessageIds = new Set(existingIds.map((r) => r.id));\n const existingPartIds = db.prepare(\n `\n\t\t\t\tSELECT id FROM part WHERE session_id = ?\n\t\t\t`\n ).all(sessionId);\n const emittedPartIds = new Set(existingPartIds.map((r) => r.id));\n return {\n emittedMessageIds,\n emittedPartIds,\n lastMessageTime: msgRow?.maxTime ?? 0,\n lastPartTime: partRow?.maxTime ?? 0\n };\n } catch (error) {\n console.error(\"[opencode-watcher] Failed to get high-water marks:\", error);\n return { emittedMessageIds: /* @__PURE__ */ new Set(), emittedPartIds: /* @__PURE__ */ new Set(), lastMessageTime: 0, lastPartTime: 0 };\n } finally {\n db.close();\n }\n }\n /**\n * Single poll iteration. Opens the DB, queries for new messages and\n * updated parts, converts them to ConversationMessage[], and invokes\n * the watcher callbacks.\n */\n poll(sessionId) {\n const state = this.watchers.get(sessionId);\n if (!state) {\n return;\n }\n const db = openDb();\n if (!db) {\n return;\n }\n try {\n const results = [];\n const newMessages = db.prepare(\n `\n\t\t\t\tSELECT id, session_id, time_created, time_updated, data\n\t\t\t\tFROM message\n\t\t\t\tWHERE session_id = ? AND time_created > ?\n\t\t\t\tORDER BY time_created ASC\n\t\t\t`\n ).all(sessionId, state.lastMessageTime);\n if (newMessages.length > 0) {\n const dedupedMessages = newMessages.filter(\n (m) => !state.emittedMessageIds.has(m.id)\n );\n if (dedupedMessages.length > 0) {\n const newMsgIds = dedupedMessages.map((m) => m.id);\n const newParts = batchInQuery(\n db,\n `SELECT id, message_id, session_id, time_created, time_updated, data\n\t\t\t\t\t\tFROM part\n\t\t\t\t\t\tWHERE message_id IN (__PLACEHOLDERS__)\n\t\t\t\t\t\tORDER BY time_created ASC`,\n newMsgIds\n );\n const partsByMessage = /* @__PURE__ */ new Map();\n for (const part of newParts) {\n if (!partsByMessage.has(part.message_id)) {\n partsByMessage.set(part.message_id, []);\n }\n partsByMessage.get(part.message_id).push(part);\n }\n const newEntries = this.buildMessages(dedupedMessages, partsByMessage);\n results.push(...newEntries);\n for (const part of newParts) {\n if (part.time_updated > state.lastPartTime) {\n state.lastPartTime = part.time_updated;\n }\n state.emittedPartIds.add(part.id);\n }\n }\n for (const msg of newMessages) {\n if (msg.time_created > state.lastMessageTime) {\n state.lastMessageTime = msg.time_created;\n }\n state.emittedMessageIds.add(msg.id);\n }\n }\n const updatedParts = db.prepare(\n `\n\t\t\t\tSELECT id, message_id, session_id, time_created, time_updated, data\n\t\t\t\tFROM part\n\t\t\t\tWHERE session_id = ? AND time_updated > ?\n\t\t\t\tORDER BY time_created ASC\n\t\t\t`\n ).all(sessionId, state.lastPartTime);\n if (updatedParts.length > 0) {\n const newMsgIdSet = new Set(newMessages.map((m) => m.id));\n const newParts = updatedParts.filter(\n (p) => !newMsgIdSet.has(p.message_id) && !state.emittedPartIds.has(p.id)\n );\n if (newParts.length > 0) {\n const partsByMessage = /* @__PURE__ */ new Map();\n for (const part of newParts) {\n if (!partsByMessage.has(part.message_id)) {\n partsByMessage.set(part.message_id, []);\n }\n partsByMessage.get(part.message_id).push(part);\n }\n const affectedMsgIds = [...partsByMessage.keys()];\n const affectedMessages = batchInQuery(\n db,\n `SELECT id, session_id, time_created, time_updated, data\n\t\t\t\t\t\tFROM message\n\t\t\t\t\t\tWHERE id IN (__PLACEHOLDERS__)\n\t\t\t\t\t\tORDER BY time_created ASC`,\n affectedMsgIds\n );\n const updatedEntries = this.buildMessages(affectedMessages, partsByMessage);\n results.push(...updatedEntries);\n for (const part of newParts) {\n state.emittedPartIds.add(part.id);\n }\n }\n for (const part of updatedParts) {\n if (part.time_updated > state.lastPartTime) {\n state.lastPartTime = part.time_updated;\n }\n }\n }\n if (results.length > 0) {\n for (const cb of state.callbacks) {\n try {\n cb(results);\n } catch (cbError) {\n console.error(\"[opencode-watcher] Callback error:\", cbError);\n }\n }\n }\n } catch (error) {\n console.error(\"[opencode-watcher] Poll error:\", error);\n } finally {\n db.close();\n }\n }\n}\nfunction batchInQuery(db, sql, ids) {\n if (ids.length === 0) return [];\n const results = [];\n for (let i = 0; i < ids.length; i += SQLITE_MAX_PARAMS) {\n const chunk = ids.slice(i, i + SQLITE_MAX_PARAMS);\n const placeholders = chunk.map(() => \"?\").join(\",\");\n const query = sql.replace(\"__PLACEHOLDERS__\", placeholders);\n const rows = db.prepare(query).all(...chunk);\n results.push(...rows);\n }\n return results;\n}\nfunction convertPartToMessagePart(data) {\n switch (data.type) {\n case \"reasoning\":\n return { content: data.text || \"\", type: \"thinking\" };\n case \"text\":\n return { content: data.text || \"\", type: \"text\" };\n case \"tool\":\n return {\n id: data.callID || data.id || \"\",\n input: data.state?.input || {},\n toolName: data.tool || \"Unknown\",\n type: \"tool_use\"\n };\n default:\n return null;\n }\n}\nfunction openDb() {\n if (!fs.existsSync(OPENCODE_DB_PATH)) {\n return null;\n }\n try {\n return new Database(OPENCODE_DB_PATH, { readonly: true });\n } catch {\n return null;\n }\n}\nconst OW_GLOBAL_KEY = \"__shooter_opencode_watcher\";\nconst openCodeWatcher = globalThis[OW_GLOBAL_KEY] || new OpenCodeWatcher();\nglobalThis[OW_GLOBAL_KEY] = openCodeWatcher;\npath.join(process.env.HOME || \"\", \".claude\", \"projects\");\nclass SessionWatcher {\n // Track assistant turns that span multiple JSONL lines, keyed by filePath\n assistantTurnsPerFile = /* @__PURE__ */ new Map();\n // Buffer for incomplete trailing lines (no terminating newline yet)\n lineBufferPerFile = /* @__PURE__ */ new Map();\n // Track message index per file for generating fallback IDs\n messageIndexPerFile = /* @__PURE__ */ new Map();\n watchedFiles = /* @__PURE__ */ new Map();\n /**\n * Read all entries from a JSONL file from the beginning.\n * Used for catch-up replay when a new client connects mid-session.\n */\n getHistory(filePath) {\n if (!fs.existsSync(filePath)) {\n return [];\n }\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const assistantTurns = /* @__PURE__ */ new Map();\n const messages = parseJsonlText(raw, assistantTurns, 0);\n for (const [msgId, turn] of assistantTurns) {\n if (turn.parts.length > 0) {\n messages.push({\n id: msgId,\n parts: turn.parts,\n role: \"assistant\",\n timestamp: turn.timestamp\n });\n }\n }\n return messages;\n } catch (error) {\n console.error(`[session-watcher] Failed to read history for ${filePath}:`, error);\n return [];\n }\n }\n /**\n * Get raw JSONL entries from a session file (unparsed objects).\n */\n getRawEntries(filePath) {\n if (!fs.existsSync(filePath)) {\n return [];\n }\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const entries = [];\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n try {\n entries.push(JSON.parse(trimmed));\n } catch {\n }\n }\n return entries;\n } catch (error) {\n console.error(`[session-watcher] Failed to read raw entries for ${filePath}:`, error);\n return [];\n }\n }\n /**\n * Stop watching a specific file and clean up resources.\n */\n stop(filePath) {\n const watched = this.watchedFiles.get(filePath);\n if (!watched) {\n return;\n }\n watched.watcher.close();\n this.watchedFiles.delete(filePath);\n this.assistantTurnsPerFile.delete(filePath);\n this.messageIndexPerFile.delete(filePath);\n this.lineBufferPerFile.delete(filePath);\n console.log(`[session-watcher] Stopped watching: ${filePath}`);\n }\n /**\n * Stop watching all files and clean up all resources.\n */\n stopAll() {\n for (const [filePath] of this.watchedFiles) {\n this.stop(filePath);\n }\n }\n /**\n * Subscribe to new JSONL entries for a file. If the file is not yet\n * being watched, starts watching it. Returns an unsubscribe function\n * that removes the callback (and stops the watcher when no subscribers\n * remain). Matches the multi-subscriber pattern used by OpenCodeWatcher.\n */\n subscribe(filePath, onNewEntries) {\n const existing = this.watchedFiles.get(filePath);\n if (existing) {\n existing.callbacks.add(onNewEntries);\n console.log(\n `[session-watcher] Added subscriber to: ${filePath} (total=${existing.callbacks.size})`\n );\n return () => {\n existing.callbacks.delete(onNewEntries);\n console.log(\n `[session-watcher] Removed subscriber from: ${filePath} (remaining=${existing.callbacks.size})`\n );\n if (existing.callbacks.size === 0) {\n this.stop(filePath);\n }\n };\n }\n const initialOffset = fs.existsSync(filePath) ? fs.statSync(filePath).size : 0;\n this.assistantTurnsPerFile.set(filePath, /* @__PURE__ */ new Map());\n this.messageIndexPerFile.set(filePath, 0);\n this.lineBufferPerFile.set(filePath, \"\");\n const watcher = watch(filePath, {\n // Debounce rapid successive writes\n awaitWriteFinish: {\n pollInterval: 100,\n stabilityThreshold: 200\n },\n // Don't emit 'add' event on initial scan — we handle catch-up via getHistory\n ignoreInitial: true,\n // Use polling as a fallback for network filesystems\n usePolling: false\n });\n const watched = {\n callbacks: /* @__PURE__ */ new Set([onNewEntries]),\n filePath,\n offset: initialOffset,\n watcher\n };\n watcher.on(\"change\", () => {\n this.readNewEntries(watched);\n });\n watcher.on(\"add\", () => {\n this.readNewEntries(watched);\n });\n watcher.on(\"error\", (error) => {\n console.error(`[session-watcher] Error watching ${filePath}:`, error);\n });\n this.watchedFiles.set(filePath, watched);\n console.log(`[session-watcher] Watching: ${filePath} (offset: ${initialOffset})`);\n return () => {\n watched.callbacks.delete(onNewEntries);\n console.log(\n `[session-watcher] Removed subscriber from: ${filePath} (remaining=${watched.callbacks.size})`\n );\n if (watched.callbacks.size === 0) {\n this.stop(filePath);\n }\n };\n }\n /**\n * Start watching a JSONL file for new entries (legacy API).\n * Delegates to subscribe() internally. Callers that need to\n * unsubscribe should use subscribe() directly instead.\n */\n watch(filePath, onNewEntries) {\n this.subscribe(filePath, onNewEntries);\n }\n /**\n * Read bytes appended since last offset, parse new JSONL lines,\n * and invoke the callback with any new messages.\n */\n readNewEntries(watched) {\n const { filePath } = watched;\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch {\n return;\n }\n const currentSize = stat.size;\n if (currentSize <= watched.offset) {\n if (currentSize < watched.offset) {\n console.warn(`[session-watcher] File truncated, resetting offset: ${filePath}`);\n watched.offset = 0;\n this.assistantTurnsPerFile.set(filePath, /* @__PURE__ */ new Map());\n this.messageIndexPerFile.set(filePath, 0);\n this.lineBufferPerFile.set(filePath, \"\");\n }\n return;\n }\n const fd = fs.openSync(filePath, \"r\");\n try {\n const bytesToRead = currentSize - watched.offset;\n const buffer = Buffer.alloc(bytesToRead);\n fs.readSync(fd, buffer, 0, bytesToRead, watched.offset);\n watched.offset = currentSize;\n const chunk = buffer.toString(\"utf-8\");\n const previousBuffer = this.lineBufferPerFile.get(filePath) || \"\";\n const combined = previousBuffer + chunk;\n const segments = combined.split(\"\\n\");\n if (!combined.endsWith(\"\\n\")) {\n this.lineBufferPerFile.set(filePath, segments.pop() || \"\");\n } else {\n this.lineBufferPerFile.set(filePath, \"\");\n if (segments.length > 0 && segments[segments.length - 1] === \"\") {\n segments.pop();\n }\n }\n const completeLines = segments.filter((line) => line.trim());\n if (completeLines.length === 0) {\n return;\n }\n const assistantTurns = this.assistantTurnsPerFile.get(filePath) || /* @__PURE__ */ new Map();\n const startIndex = this.messageIndexPerFile.get(filePath) || 0;\n const newText = completeLines.join(\"\\n\");\n const newMessages = parseJsonlText(newText, assistantTurns, startIndex);\n this.messageIndexPerFile.set(filePath, startIndex + completeLines.length);\n if (newMessages.length > 0) {\n for (const cb of watched.callbacks) {\n try {\n cb(newMessages);\n } catch (cbError) {\n console.error(\"[session-watcher] Callback error:\", cbError);\n }\n }\n }\n } finally {\n fs.closeSync(fd);\n }\n }\n}\nconst SW_GLOBAL_KEY = \"__shooter_session_watcher\";\nconst sessionWatcher = globalThis[SW_GLOBAL_KEY] || new SessionWatcher();\nglobalThis[SW_GLOBAL_KEY] = sessionWatcher;\nconst DB_DIR = path.join(process.env.HOME || \"\", \".shooter\");\nconst DB_PATH = path.join(DB_DIR, \"shooter.db\");\nconst COLUMNS = [\n \"id\",\n \"command\",\n \"args\",\n \"cwd\",\n \"cols\",\n \"rows\",\n \"pid\",\n \"holder_pid\",\n \"socket_path\",\n \"session_file\",\n \"opencode_session_id\",\n \"status\",\n \"exit_code\",\n \"created_at\",\n \"exited_at\"\n];\nfunction rowToRecord(row) {\n return {\n args: row.args,\n cols: row.cols,\n command: row.command,\n createdAt: row.created_at,\n cwd: row.cwd,\n exitCode: row.exit_code ?? null,\n exitedAt: row.exited_at ?? null,\n holderPid: row.holder_pid ?? null,\n id: row.id,\n opencodeSessionId: row.opencode_session_id ?? null,\n pid: row.pid ?? null,\n rows: row.rows,\n sessionFile: row.session_file ?? null,\n socketPath: row.socket_path ?? null,\n status: row.status\n };\n}\nconst CAMEL_TO_SNAKE = {\n createdAt: \"created_at\",\n exitCode: \"exit_code\",\n exitedAt: \"exited_at\",\n holderPid: \"holder_pid\",\n opencodeSessionId: \"opencode_session_id\",\n sessionFile: \"session_file\",\n socketPath: \"socket_path\"\n};\nclass TerminalStore {\n db;\n constructor() {\n fs.mkdirSync(DB_DIR, { recursive: true });\n this.db = new Database(DB_PATH);\n this.db.pragma(\"journal_mode = WAL\");\n this.db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS terminals (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcommand TEXT NOT NULL,\n\t\t\t\targs TEXT NOT NULL DEFAULT '[]',\n\t\t\t\tcwd TEXT NOT NULL,\n\t\t\t\tcols INTEGER NOT NULL DEFAULT 80,\n\t\t\t\trows INTEGER NOT NULL DEFAULT 24,\n\t\t\t\tpid INTEGER,\n\t\t\t\tholder_pid INTEGER,\n\t\t\t\tsocket_path TEXT,\n\t\t\t\tsession_file TEXT,\n\t\t\t\topencode_session_id TEXT,\n\t\t\t\tstatus TEXT NOT NULL DEFAULT 'running',\n\t\t\t\texit_code INTEGER,\n\t\t\t\tcreated_at TEXT NOT NULL,\n\t\t\t\texited_at TEXT\n\t\t\t)\n\t\t`);\n }\n deleteOlderThan(ms) {\n const cutoff = new Date(Date.now() - ms).toISOString();\n const result = this.db.prepare(\n \"DELETE FROM terminals WHERE status IN ('exited', 'orphaned') AND COALESCE(exited_at, created_at) < ?\"\n ).run(cutoff);\n return result.changes;\n }\n get(id) {\n const row = this.db.prepare(\"SELECT * FROM terminals WHERE id = ?\").get(id);\n return row ? rowToRecord(row) : null;\n }\n insert(terminal) {\n const placeholders = COLUMNS.map(() => \"?\").join(\", \");\n const stmt = this.db.prepare(\n `INSERT INTO terminals (${COLUMNS.join(\", \")}) VALUES (${placeholders})`\n );\n stmt.run(\n terminal.id,\n terminal.command,\n terminal.args,\n terminal.cwd,\n terminal.cols,\n terminal.rows,\n terminal.pid,\n terminal.holderPid,\n terminal.socketPath,\n terminal.sessionFile,\n terminal.opencodeSessionId,\n terminal.status,\n terminal.exitCode,\n terminal.createdAt,\n terminal.exitedAt\n );\n }\n listAll() {\n const rows = this.db.prepare(\"SELECT * FROM terminals ORDER BY created_at DESC\").all();\n return rows.map(rowToRecord);\n }\n listRunning() {\n const rows = this.db.prepare(\"SELECT * FROM terminals WHERE status = 'running' ORDER BY created_at DESC\").all();\n return rows.map(rowToRecord);\n }\n markExited(id, exitCode) {\n this.db.prepare(\n \"UPDATE terminals SET status = 'exited', exit_code = ?, exited_at = ? WHERE id = ?\"\n ).run(exitCode, (/* @__PURE__ */ new Date()).toISOString(), id);\n }\n markOrphaned(id) {\n this.db.prepare(\"UPDATE terminals SET status = 'orphaned' WHERE id = ?\").run(id);\n }\n update(id, fields) {\n const entries = Object.entries(fields).filter(([key]) => key !== \"id\");\n if (entries.length === 0) {\n return;\n }\n const sets = entries.map(([key]) => `${toSnake(key)} = ?`).join(\", \");\n const values = entries.map(([, val]) => val ?? null);\n this.db.prepare(`UPDATE terminals SET ${sets} WHERE id = ?`).run(...values, id);\n }\n}\nfunction toSnake(key) {\n return CAMEL_TO_SNAKE[key] || key;\n}\nconst TS_GLOBAL_KEY = \"__shooter_terminal_store\";\nconst terminalStore = globalThis[TS_GLOBAL_KEY] || new TerminalStore();\nglobalThis[TS_GLOBAL_KEY] = terminalStore;\nconst MAX_SCROLLBACK_BYTES = 512 * 1024;\nconst MAX_OUTPUT_BUFFER_BYTES = 1024 * 1024;\nconst SCROLLBACK_CHUNK_SIZE = 50 * 1024;\nconst CLEANUP_INTERVAL_MS = 5 * 60 * 1e3;\nconst EXITED_TTL_MS = 60 * 60 * 1e3;\nconst MAX_EXITED_TERMINALS = 10;\nconst SIGKILL_DELAY_MS = 5e3;\nconst HOLDER_READY_TIMEOUT_MS = 5e3;\nconst DB_CLEANUP_TTL_MS = 24 * 60 * 60 * 1e3;\nconst __filename$1 = fileURLToPath(import.meta.url);\nconst __dirname$1 = path__default.dirname(__filename$1);\nclass PtyManager {\n cleanupTimer = null;\n terminals = /* @__PURE__ */ new Map();\n constructor() {\n this.cleanupTimer = setInterval(() => {\n this.cleanup();\n }, CLEANUP_INTERVAL_MS);\n }\n // -----------------------------------------------------------------------\n // create — now async: forks a holder process, connects via HolderClient,\n // persists to SQLite\n // -----------------------------------------------------------------------\n attach(id, ws) {\n const terminal = this.terminals.get(id);\n if (!terminal) {\n return false;\n }\n terminal.clients.add(ws);\n terminal.outputBuffers.set(ws, { data: [], size: 0 });\n this.sendScrollback(terminal, ws);\n return true;\n }\n // -----------------------------------------------------------------------\n // reconnectAll — recover persisted terminals on server startup\n // -----------------------------------------------------------------------\n cleanup() {\n const now = Date.now();\n const exited = [];\n for (const [id, terminal] of this.terminals) {\n if (terminal.status !== \"exited\") {\n continue;\n }\n const exitTime = terminal.exitedAt?.getTime() ?? terminal.createdAt.getTime();\n if (now - exitTime > EXITED_TTL_MS) {\n this.evict(id);\n continue;\n }\n exited.push({ exitedAt: exitTime, id });\n }\n if (exited.length > MAX_EXITED_TERMINALS) {\n exited.sort((a, b) => a.exitedAt - b.exitedAt);\n const toEvict = exited.slice(0, exited.length - MAX_EXITED_TERMINALS);\n for (const { id } of toEvict) {\n this.evict(id);\n }\n }\n try {\n const deleted = terminalStore.deleteOlderThan(DB_CLEANUP_TTL_MS);\n if (deleted > 0) {\n console.log(`[pty-manager] Cleaned up ${deleted} old terminal record(s) from SQLite`);\n }\n } catch {\n }\n }\n // -----------------------------------------------------------------------\n // disconnectAll — graceful shutdown: disconnect clients, keep holders alive\n // -----------------------------------------------------------------------\n async create(command, args, cwd, cols, rows) {\n const id = randomBytes(4).toString(\"hex\");\n const socketPath = `/tmp/shooter-term-${id}.sock`;\n const holderScript = resolveHolderPath();\n const holderArgs = [id, socketPath, cwd, String(cols), String(rows), command, ...args];\n const holder = fork(holderScript, holderArgs, {\n detached: true,\n stdio: [\"ignore\", \"ignore\", \"ignore\", \"ipc\"]\n });\n holder.unref();\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n holder.kill();\n reject(new Error(\"Holder ready timeout\"));\n }, HOLDER_READY_TIMEOUT_MS);\n holder.on(\"message\", (msg) => {\n if (msg.type === \"ready\") {\n clearTimeout(timeout);\n holder.disconnect();\n resolve();\n }\n });\n holder.on(\"error\", (err) => {\n clearTimeout(timeout);\n reject(new Error(`Holder process error: ${err.message}`));\n });\n holder.on(\"exit\", (code) => {\n clearTimeout(timeout);\n reject(new Error(`Holder process exited with code ${code} before ready`));\n });\n });\n const holderPid = holder.pid;\n const client = new HolderClient();\n const connectResult = await client.connect(socketPath);\n const now = /* @__PURE__ */ new Date();\n const terminal = {\n args,\n clients: /* @__PURE__ */ new Set(),\n cols,\n command,\n createdAt: now,\n cwd,\n currentCwd: null,\n exitCode: connectResult.exitCode,\n exitedAt: null,\n holderPid,\n id,\n isActive: false,\n openCodeNoopCb: null,\n openCodeSessionId: null,\n outputBuffers: /* @__PURE__ */ new Map(),\n pid: connectResult.pid,\n pollTimer: null,\n pty: client,\n rows,\n scrollback: connectResult.scrollback,\n sessionFile: null,\n socketPath,\n status: connectResult.exited ? \"exited\" : \"running\",\n watcherOffset: 0\n };\n this.wireHolderCallbacks(client, terminal);\n terminalStore.insert({\n args: JSON.stringify(args),\n cols,\n command,\n createdAt: now.toISOString(),\n cwd,\n exitCode: null,\n exitedAt: null,\n holderPid,\n id,\n opencodeSessionId: null,\n pid: connectResult.pid,\n rows,\n sessionFile: null,\n socketPath,\n status: \"running\"\n });\n this.startSessionDiscovery(terminal);\n this.terminals.set(id, terminal);\n return terminal;\n }\n // -----------------------------------------------------------------------\n // get\n // -----------------------------------------------------------------------\n destroy() {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n for (const [id, terminal] of this.terminals) {\n if (terminal.pollTimer) {\n clearInterval(terminal.pollTimer);\n terminal.pollTimer = null;\n }\n if (terminal.status === \"running\") {\n try {\n terminal.pty.kill(\"SIGTERM\");\n } catch {\n }\n try {\n process.kill(terminal.holderPid, \"SIGKILL\");\n } catch {\n }\n }\n terminal.pty.disconnect();\n for (const ws of terminal.clients) {\n try {\n ws.close();\n } catch {\n }\n }\n this.terminals.delete(id);\n }\n }\n // -----------------------------------------------------------------------\n // list — running first, then recently exited, each group sorted by\n // createdAt descending\n // -----------------------------------------------------------------------\n detach(id, ws) {\n const terminal = this.terminals.get(id);\n if (!terminal) {\n return false;\n }\n terminal.clients.delete(ws);\n terminal.outputBuffers.delete(ws);\n return true;\n }\n // -----------------------------------------------------------------------\n // kill — route through holder: SIGTERM, then SIGKILL after 5 s\n // -----------------------------------------------------------------------\n disconnectAll() {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n for (const [, terminal] of this.terminals) {\n if (terminal.pollTimer) {\n clearInterval(terminal.pollTimer);\n terminal.pollTimer = null;\n }\n terminal.pty.disconnect();\n for (const ws of terminal.clients) {\n try {\n ws.close();\n } catch {\n }\n }\n terminal.clients.clear();\n terminal.outputBuffers.clear();\n }\n this.terminals.clear();\n }\n // -----------------------------------------------------------------------\n // remove — remove an exited terminal from the map\n // -----------------------------------------------------------------------\n get(id) {\n return this.terminals.get(id) ?? null;\n }\n // -----------------------------------------------------------------------\n // resize\n // -----------------------------------------------------------------------\n getScrollback(id) {\n const terminal = this.terminals.get(id);\n if (!terminal) {\n return null;\n }\n return terminal.scrollback;\n }\n // -----------------------------------------------------------------------\n // attach — register a WebSocket client and replay scrollback\n // -----------------------------------------------------------------------\n kill(id) {\n const terminal = this.terminals.get(id);\n if (!terminal) {\n return false;\n }\n if (terminal.status === \"exited\") {\n return true;\n }\n try {\n terminal.pty.kill(\"SIGTERM\");\n } catch {\n terminal.status = \"exited\";\n terminal.exitedAt = /* @__PURE__ */ new Date();\n terminalStore.markExited(id, null);\n return true;\n }\n setTimeout(() => {\n if (terminal.status === \"running\") {\n try {\n terminal.pty.kill(\"SIGKILL\");\n } catch {\n }\n terminal.status = \"exited\";\n terminal.exitedAt = terminal.exitedAt ?? /* @__PURE__ */ new Date();\n terminalStore.markExited(id, null);\n }\n }, SIGKILL_DELAY_MS);\n return true;\n }\n // -----------------------------------------------------------------------\n // detach — remove a WebSocket client\n // -----------------------------------------------------------------------\n list() {\n const all = Array.from(this.terminals.values());\n const running = all.filter((t) => t.status === \"running\").sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n const exited = all.filter((t) => t.status === \"exited\").sort((a, b) => {\n const aTime = a.exitedAt?.getTime() ?? a.createdAt.getTime();\n const bTime = b.exitedAt?.getTime() ?? b.createdAt.getTime();\n return bTime - aTime;\n });\n return [...running, ...exited];\n }\n // -----------------------------------------------------------------------\n // getScrollback — return raw scrollback data for replay\n // -----------------------------------------------------------------------\n async reconnectAll() {\n const running = terminalStore.listRunning();\n if (running.length === 0) {\n console.log(\"[pty-manager] No persisted terminals to reconnect\");\n return;\n }\n console.log(`[pty-manager] Reconnecting to ${running.length} persisted terminal(s)...`);\n for (const record of running) {\n try {\n await this.reconnectOne(record);\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n console.warn(`[pty-manager] Failed to reconnect terminal ${record.id}: ${errMsg}`);\n this.handleReconnectFailure(record);\n }\n }\n }\n // -----------------------------------------------------------------------\n // cleanup — evict exited terminals older than 1 hour, cap at 10 exited;\n // also clean up old SQLite records\n // -----------------------------------------------------------------------\n remove(id) {\n const terminal = this.terminals.get(id);\n if (!terminal) {\n return false;\n }\n if (terminal.status === \"running\") {\n return false;\n }\n this.evict(id);\n return true;\n }\n // -----------------------------------------------------------------------\n // destroy — emergency forced kill (kills holder processes too)\n // -----------------------------------------------------------------------\n resize(id, cols, rows) {\n const terminal = this.terminals.get(id);\n if (!terminal || terminal.status === \"exited\") {\n return false;\n }\n try {\n terminal.pty.resize(cols, rows);\n terminal.cols = cols;\n terminal.rows = rows;\n return true;\n } catch {\n return false;\n }\n }\n // -----------------------------------------------------------------------\n // Private: reconnectOne — reconnect to a single persisted terminal\n // -----------------------------------------------------------------------\n appendScrollback(terminal, data) {\n terminal.scrollback += data;\n if (Buffer.byteLength(terminal.scrollback, \"utf8\") > MAX_SCROLLBACK_BYTES) {\n const mid = Math.floor(terminal.scrollback.length / 2);\n const newlineIdx = terminal.scrollback.indexOf(\"\\n\", mid);\n if (newlineIdx !== -1) {\n terminal.scrollback = terminal.scrollback.slice(newlineIdx + 1);\n } else {\n terminal.scrollback = terminal.scrollback.slice(mid);\n }\n }\n }\n // -----------------------------------------------------------------------\n // Private: handleReconnectFailure — handle failed reconnection\n // -----------------------------------------------------------------------\n broadcastOutput(terminal, data) {\n const msg = JSON.stringify({ data, type: \"output\" });\n for (const ws of terminal.clients) {\n if (ws.bufferedAmount > MAX_OUTPUT_BUFFER_BYTES) {\n this.safeSend(ws, JSON.stringify({ bytes: data.length, type: \"output-dropped\" }));\n continue;\n }\n const buffer = terminal.outputBuffers.get(ws);\n if (!buffer) {\n continue;\n }\n const msgSize = Buffer.byteLength(msg, \"utf8\");\n if (buffer.size + msgSize > MAX_OUTPUT_BUFFER_BYTES) {\n let droppedBytes = 0;\n while (buffer.size + msgSize > MAX_OUTPUT_BUFFER_BYTES && buffer.data.length > 0) {\n const dropped = buffer.data.shift();\n if (dropped) {\n const droppedSize = Buffer.byteLength(dropped, \"utf8\");\n buffer.size -= droppedSize;\n droppedBytes += droppedSize;\n }\n }\n if (droppedBytes > 0) {\n const dropMsg = JSON.stringify({\n bytes: droppedBytes,\n type: \"output-dropped\"\n });\n this.safeSend(ws, dropMsg);\n }\n }\n buffer.data.push(msg);\n buffer.size += msgSize;\n this.flushOutputBuffer(ws, buffer);\n }\n }\n // -----------------------------------------------------------------------\n // Private: startSessionDiscovery — polling for session files\n // -----------------------------------------------------------------------\n /** Evict a terminal, freeing all resources. */\n evict(id) {\n const terminal = this.terminals.get(id);\n if (!terminal) {\n return;\n }\n if (terminal.pollTimer) {\n clearInterval(terminal.pollTimer);\n terminal.pollTimer = null;\n }\n if (terminal.openCodeSessionId && terminal.openCodeNoopCb) {\n openCodeWatcher.stop(terminal.openCodeSessionId, terminal.openCodeNoopCb);\n terminal.openCodeNoopCb = null;\n }\n terminal.pty.disconnect();\n for (const ws of terminal.clients) {\n try {\n ws.close();\n } catch {\n }\n }\n terminal.clients.clear();\n terminal.outputBuffers.clear();\n terminal.scrollback = \"\";\n this.terminals.delete(id);\n }\n // -----------------------------------------------------------------------\n // Private: appendScrollback — append to cached scrollback string,\n // trim from midpoint when cap exceeded\n // -----------------------------------------------------------------------\n /** Attempt to flush buffered messages to a WebSocket client. */\n flushOutputBuffer(ws, buffer) {\n while (buffer.data.length > 0) {\n const msg = buffer.data[0];\n if (!this.safeSend(ws, msg)) {\n break;\n }\n buffer.data.shift();\n buffer.size -= Buffer.byteLength(msg, \"utf8\");\n }\n }\n // -----------------------------------------------------------------------\n // Private: broadcastOutput — send output to all connected WS clients\n // with backpressure management\n // -----------------------------------------------------------------------\n handleReconnectFailure(record) {\n if (record.holderPid) {\n try {\n process.kill(record.holderPid, 0);\n console.warn(\n `[pty-manager] Holder PID ${record.holderPid} alive but socket dead for ${record.id}`\n );\n } catch {\n }\n }\n if (record.socketPath) {\n const exitFilePath = `${record.socketPath}.exit`;\n if (existsSync(exitFilePath)) {\n try {\n const exitData = JSON.parse(readFileSync(exitFilePath, \"utf8\"));\n unlinkSync(exitFilePath);\n terminalStore.markExited(record.id, exitData.code);\n console.log(\n `[pty-manager] Terminal ${record.id} exited while disconnected (code=${exitData.code})`\n );\n return;\n } catch {\n }\n }\n }\n terminalStore.markOrphaned(record.id);\n console.log(`[pty-manager] Marked terminal ${record.id} as orphaned`);\n }\n async reconnectOne(record) {\n if (!record.socketPath) {\n throw new Error(\"No socket path stored\");\n }\n const exitFilePath = `${record.socketPath}.exit`;\n if (existsSync(exitFilePath)) {\n try {\n const exitData = JSON.parse(readFileSync(exitFilePath, \"utf8\"));\n unlinkSync(exitFilePath);\n terminalStore.markExited(record.id, exitData.code);\n console.log(\n `[pty-manager] Terminal ${record.id} exited while disconnected (code=${exitData.code})`\n );\n return;\n } catch {\n }\n }\n const client = new HolderClient();\n const connectResult = await client.connect(record.socketPath);\n let parsedArgs = [];\n try {\n parsedArgs = JSON.parse(record.args);\n } catch {\n }\n const terminal = {\n args: parsedArgs,\n clients: /* @__PURE__ */ new Set(),\n cols: record.cols,\n command: record.command,\n createdAt: new Date(record.createdAt),\n currentCwd: null,\n cwd: record.cwd,\n exitCode: connectResult.exitCode,\n exitedAt: record.exitedAt ? new Date(record.exitedAt) : null,\n holderPid: record.holderPid ?? 0,\n id: record.id,\n isActive: false,\n openCodeNoopCb: null,\n openCodeSessionId: record.opencodeSessionId ?? null,\n outputBuffers: /* @__PURE__ */ new Map(),\n pid: connectResult.pid,\n pollTimer: null,\n pty: client,\n rows: record.rows,\n scrollback: connectResult.scrollback,\n sessionFile: record.sessionFile ?? null,\n socketPath: record.socketPath,\n status: connectResult.exited ? \"exited\" : \"running\",\n watcherOffset: 0\n };\n if (connectResult.exited) {\n terminal.exitedAt = terminal.exitedAt ?? /* @__PURE__ */ new Date();\n terminalStore.markExited(record.id, connectResult.exitCode);\n }\n this.wireHolderCallbacks(client, terminal);\n if (terminal.sessionFile) ;\n if (terminal.openCodeSessionId) {\n const noopCb = () => {\n };\n terminal.openCodeNoopCb = noopCb;\n openCodeWatcher.watch(terminal.openCodeSessionId, noopCb);\n }\n if (!terminal.sessionFile && !terminal.openCodeSessionId && terminal.status === \"running\") {\n this.startSessionDiscovery(terminal);\n }\n if (record.pid !== connectResult.pid) {\n terminalStore.update(record.id, { pid: connectResult.pid });\n }\n this.terminals.set(record.id, terminal);\n console.log(\n `[pty-manager] Reconnected terminal ${record.id} (pid=${connectResult.pid}, holder=${record.holderPid}, status=${terminal.status})`\n );\n }\n /** Wire up all HolderClient callbacks (activity, CWD, output, exit, disconnect). */\n wireHolderCallbacks(client, terminal) {\n client.onActivity((active) => {\n terminal.isActive = active;\n const msg = JSON.stringify({ active, type: \"activity\" });\n for (const ws of terminal.clients) {\n this.safeSend(ws, msg);\n }\n });\n client.onCwd((path2) => {\n terminal.currentCwd = path2;\n const msg = JSON.stringify({ path: path2, type: \"cwd\" });\n for (const ws of terminal.clients) {\n this.safeSend(ws, msg);\n }\n });\n client.onOutput((data) => {\n this.appendScrollback(terminal, data);\n this.broadcastOutput(terminal, data);\n });\n client.onExit((exitCode) => {\n terminal.status = \"exited\";\n terminal.exitCode = exitCode;\n terminal.exitedAt = /* @__PURE__ */ new Date();\n terminalStore.markExited(terminal.id, exitCode);\n const exitMsg = JSON.stringify({\n code: exitCode,\n signal: null,\n type: \"exit\"\n });\n for (const ws of terminal.clients) {\n this.safeSend(ws, exitMsg);\n }\n });\n client.onDisconnect(() => {\n if (terminal.status === \"running\") {\n console.warn(`[pty-manager] Holder disconnected unexpectedly for terminal ${terminal.id}`);\n terminal.status = \"exited\";\n terminal.exitedAt = /* @__PURE__ */ new Date();\n terminalStore.markOrphaned(terminal.id);\n }\n });\n }\n /** Safely send a message to a WebSocket, returning false on failure. */\n safeSend(ws, msg) {\n try {\n if (ws.readyState !== 1) {\n return false;\n }\n ws.send(msg);\n return true;\n } catch {\n return false;\n }\n }\n /** Send cached scrollback data to a newly connected client in 50 KB chunks. */\n async sendScrollback(terminal, ws) {\n const fullData = terminal.scrollback;\n if (fullData.length === 0) {\n return;\n }\n const totalBytes = Buffer.byteLength(fullData, \"utf8\");\n const totalChunks = Math.ceil(totalBytes / SCROLLBACK_CHUNK_SIZE);\n if (totalChunks <= 1) {\n const msg = JSON.stringify({\n chunk: 1,\n data: fullData,\n total: 1,\n type: \"scrollback\"\n });\n this.safeSend(ws, msg);\n return;\n }\n const buf = Buffer.from(fullData, \"utf8\");\n let offset = 0;\n let chunkIndex = 1;\n while (offset < buf.length) {\n if (ws.bufferedAmount > SCROLLBACK_CHUNK_SIZE * 2) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n const end = Math.min(offset + SCROLLBACK_CHUNK_SIZE, buf.length);\n const chunkData = buf.subarray(offset, end).toString(\"utf8\");\n const msg = JSON.stringify({\n chunk: chunkIndex,\n data: chunkData,\n total: totalChunks,\n type: \"scrollback\"\n });\n this.safeSend(ws, msg);\n offset = end;\n chunkIndex++;\n }\n }\n startSessionDiscovery(terminal) {\n const { command, cwd, id } = terminal;\n if (command === \"claude\") {\n const projectDir = path__default.join(\n process.env.HOME || \"\",\n \".claude\",\n \"projects\",\n cwd.replace(/\\//g, \"-\")\n );\n const launchTime = terminal.createdAt.getTime();\n terminal.pollTimer = setInterval(() => {\n if (terminal.status === \"exited\" || terminal.sessionFile) {\n if (terminal.pollTimer) {\n clearInterval(terminal.pollTimer);\n terminal.pollTimer = null;\n }\n if (terminal.sessionFile) ;\n return;\n }\n try {\n if (!existsSync(projectDir)) {\n return;\n }\n const files = readdirSync(projectDir).filter((f) => f.endsWith(\".jsonl\")).map((f) => {\n const stat = statSync(path__default.join(projectDir, f));\n return {\n birthtime: stat.birthtimeMs,\n fullPath: path__default.join(projectDir, f),\n mtime: stat.mtimeMs,\n name: f\n };\n }).filter((f) => f.birthtime > launchTime).sort((a, b) => b.birthtime - a.birthtime);\n if (files.length > 0) {\n terminal.sessionFile = files[0].fullPath;\n if (terminal.pollTimer) {\n clearInterval(terminal.pollTimer);\n terminal.pollTimer = null;\n }\n terminalStore.update(id, { sessionFile: terminal.sessionFile });\n }\n } catch {\n }\n }, 1500);\n setTimeout(() => {\n if (terminal.pollTimer) {\n clearInterval(terminal.pollTimer);\n terminal.pollTimer = null;\n }\n }, 5 * 60 * 1e3);\n }\n if (command === \"opencode\") {\n const launchTime = terminal.createdAt.getTime();\n const pollInterval = setInterval(() => {\n if (terminal.status === \"exited\" || terminal.openCodeSessionId) {\n clearInterval(pollInterval);\n if (terminal.openCodeSessionId) {\n const noopCb = () => {\n };\n terminal.openCodeNoopCb = noopCb;\n openCodeWatcher.watch(terminal.openCodeSessionId, noopCb);\n }\n return;\n }\n const sessionId = openCodeWatcher.findSessionId(cwd, launchTime);\n if (sessionId) {\n terminal.openCodeSessionId = sessionId;\n clearInterval(pollInterval);\n const noopCb = () => {\n };\n terminal.openCodeNoopCb = noopCb;\n openCodeWatcher.watch(sessionId, noopCb);\n terminalStore.update(id, { opencodeSessionId: sessionId });\n }\n }, 2e3);\n terminal.pollTimer = pollInterval;\n setTimeout(() => {\n clearInterval(pollInterval);\n terminal.pollTimer = null;\n }, 5 * 60 * 1e3);\n }\n }\n}\nfunction resolveHolderPath() {\n if (process.env.SHOOTER_HOLDER_PATH) {\n return process.env.SHOOTER_HOLDER_PATH;\n }\n const colocated = path__default.join(__dirname$1, \"pty-holder.cjs\");\n if (existsSync(colocated)) {\n return colocated;\n }\n return path__default.resolve(__dirname$1, \"..\", \"..\", \"pty-holder.cjs\");\n}\nconst PTY_GLOBAL_KEY = \"__shooter_pty_manager\";\nconst ptyManager = globalThis[PTY_GLOBAL_KEY] || new PtyManager();\nglobalThis[PTY_GLOBAL_KEY] = ptyManager;\nexport {\n ptyManager as p\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/** @import { StandardSchemaV1 } from '@standard-schema/spec' */
|
|
2
|
+
|
|
3
|
+
class HttpError {
|
|
4
|
+
/**
|
|
5
|
+
* @param {number} status
|
|
6
|
+
* @param {{message: string} extends App.Error ? (App.Error | string | undefined) : App.Error} body
|
|
7
|
+
*/
|
|
8
|
+
constructor(status, body) {
|
|
9
|
+
this.status = status;
|
|
10
|
+
if (typeof body === 'string') {
|
|
11
|
+
this.body = { message: body };
|
|
12
|
+
} else if (body) {
|
|
13
|
+
this.body = body;
|
|
14
|
+
} else {
|
|
15
|
+
this.body = { message: `Error: ${status}` };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
toString() {
|
|
20
|
+
return JSON.stringify(this.body);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class Redirect {
|
|
25
|
+
/**
|
|
26
|
+
* @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308} status
|
|
27
|
+
* @param {string} location
|
|
28
|
+
*/
|
|
29
|
+
constructor(status, location) {
|
|
30
|
+
this.status = status;
|
|
31
|
+
this.location = location;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* An error that was thrown from within the SvelteKit runtime that is not fatal and doesn't result in a 500, such as a 404.
|
|
37
|
+
* `SvelteKitError` goes through `handleError`.
|
|
38
|
+
* @extends Error
|
|
39
|
+
*/
|
|
40
|
+
class SvelteKitError extends Error {
|
|
41
|
+
/**
|
|
42
|
+
* @param {number} status
|
|
43
|
+
* @param {string} text
|
|
44
|
+
* @param {string} message
|
|
45
|
+
*/
|
|
46
|
+
constructor(status, text, message) {
|
|
47
|
+
super(message);
|
|
48
|
+
this.status = status;
|
|
49
|
+
this.text = text;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @template [T=undefined]
|
|
55
|
+
*/
|
|
56
|
+
class ActionFailure {
|
|
57
|
+
/**
|
|
58
|
+
* @param {number} status
|
|
59
|
+
* @param {T} data
|
|
60
|
+
*/
|
|
61
|
+
constructor(status, data) {
|
|
62
|
+
this.status = status;
|
|
63
|
+
this.data = data;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const text_encoder = new TextEncoder();
|
|
68
|
+
new TextDecoder();
|
|
69
|
+
|
|
70
|
+
/** @import { StandardSchemaV1 } from '@standard-schema/spec' */
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// TODO 3.0: remove these types as they are not used anymore (we can't remove them yet because that would be a breaking change)
|
|
74
|
+
/**
|
|
75
|
+
* @template {number} TNumber
|
|
76
|
+
* @template {any[]} [TArray=[]]
|
|
77
|
+
* @typedef {TNumber extends TArray['length'] ? TArray[number] : LessThan<TNumber, [...TArray, TArray['length']]>} LessThan
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @template {number} TStart
|
|
82
|
+
* @template {number} TEnd
|
|
83
|
+
* @typedef {Exclude<TEnd | LessThan<TEnd>, LessThan<TStart>>} NumericRange
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
// Keep the status codes as `number` because restricting to certain numbers makes it unnecessarily hard to use compared to the benefits
|
|
87
|
+
// (we have runtime errors already to check for invalid codes). Also see https://github.com/sveltejs/kit/issues/11780
|
|
88
|
+
|
|
89
|
+
// we have to repeat the JSDoc because the display for function overloads is broken
|
|
90
|
+
// see https://github.com/microsoft/TypeScript/issues/55056
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Throws an error with a HTTP status code and an optional message.
|
|
94
|
+
* When called during request handling, this will cause SvelteKit to
|
|
95
|
+
* return an error response without invoking `handleError`.
|
|
96
|
+
* Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it.
|
|
97
|
+
* @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.
|
|
98
|
+
* @param {App.Error} body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property.
|
|
99
|
+
* @overload
|
|
100
|
+
* @param {number} status
|
|
101
|
+
* @param {App.Error} body
|
|
102
|
+
* @return {never}
|
|
103
|
+
* @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.
|
|
104
|
+
* @throws {Error} If the provided status is invalid (not between 400 and 599).
|
|
105
|
+
*/
|
|
106
|
+
/**
|
|
107
|
+
* Throws an error with a HTTP status code and an optional message.
|
|
108
|
+
* When called during request handling, this will cause SvelteKit to
|
|
109
|
+
* return an error response without invoking `handleError`.
|
|
110
|
+
* Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it.
|
|
111
|
+
* @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.
|
|
112
|
+
* @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} [body] An object that conforms to the App.Error type. If a string is passed, it will be used as the message property.
|
|
113
|
+
* @overload
|
|
114
|
+
* @param {number} status
|
|
115
|
+
* @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} [body]
|
|
116
|
+
* @return {never}
|
|
117
|
+
* @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.
|
|
118
|
+
* @throws {Error} If the provided status is invalid (not between 400 and 599).
|
|
119
|
+
*/
|
|
120
|
+
/**
|
|
121
|
+
* Throws an error with a HTTP status code and an optional message.
|
|
122
|
+
* When called during request handling, this will cause SvelteKit to
|
|
123
|
+
* return an error response without invoking `handleError`.
|
|
124
|
+
* Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it.
|
|
125
|
+
* @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.
|
|
126
|
+
* @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property.
|
|
127
|
+
* @return {never}
|
|
128
|
+
* @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.
|
|
129
|
+
* @throws {Error} If the provided status is invalid (not between 400 and 599).
|
|
130
|
+
*/
|
|
131
|
+
function error(status, body) {
|
|
132
|
+
if ((isNaN(status) || status < 400 || status > 599)) {
|
|
133
|
+
throw new Error(`HTTP error status codes must be between 400 and 599 — ${status} is invalid`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
throw new HttpError(status, body);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Create a JSON `Response` object from the supplied data.
|
|
141
|
+
* @param {any} data The value that will be serialized as JSON.
|
|
142
|
+
* @param {ResponseInit} [init] Options such as `status` and `headers` that will be added to the response. `Content-Type: application/json` and `Content-Length` headers will be added automatically.
|
|
143
|
+
*/
|
|
144
|
+
function json(data, init) {
|
|
145
|
+
// TODO deprecate this in favour of `Response.json` when it's
|
|
146
|
+
// more widely supported
|
|
147
|
+
const body = JSON.stringify(data);
|
|
148
|
+
|
|
149
|
+
// we can't just do `text(JSON.stringify(data), init)` because
|
|
150
|
+
// it will set a default `content-type` header. duplicated code
|
|
151
|
+
// means less duplicated work
|
|
152
|
+
const headers = new Headers(init?.headers);
|
|
153
|
+
if (!headers.has('content-length')) {
|
|
154
|
+
headers.set('content-length', text_encoder.encode(body).byteLength.toString());
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (!headers.has('content-type')) {
|
|
158
|
+
headers.set('content-type', 'application/json');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return new Response(body, {
|
|
162
|
+
...init,
|
|
163
|
+
headers
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Create a `Response` object from the supplied body.
|
|
169
|
+
* @param {string} body The value that will be used as-is.
|
|
170
|
+
* @param {ResponseInit} [init] Options such as `status` and `headers` that will be added to the response. A `Content-Length` header will be added automatically.
|
|
171
|
+
*/
|
|
172
|
+
function text(body, init) {
|
|
173
|
+
const headers = new Headers(init?.headers);
|
|
174
|
+
if (!headers.has('content-length')) {
|
|
175
|
+
const encoded = text_encoder.encode(body);
|
|
176
|
+
headers.set('content-length', encoded.byteLength.toString());
|
|
177
|
+
return new Response(encoded, {
|
|
178
|
+
...init,
|
|
179
|
+
headers
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return new Response(body, {
|
|
184
|
+
...init,
|
|
185
|
+
headers
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
let private_env = {};
|
|
190
|
+
let public_env = {};
|
|
191
|
+
let fix_stack_trace = (error) => error?.stack;
|
|
192
|
+
function set_private_env(environment) {
|
|
193
|
+
private_env = environment;
|
|
194
|
+
}
|
|
195
|
+
function set_public_env(environment) {
|
|
196
|
+
public_env = environment;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export { ActionFailure as A, HttpError as H, Redirect as R, SvelteKitError as S, set_public_env as a, private_env as b, error as e, fix_stack_trace as f, json as j, public_env as p, set_private_env as s, text as t };
|
|
200
|
+
//# sourceMappingURL=shared-server-BDY8jh20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-server-BDY8jh20.js","sources":["../../../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/exports/internal/index.js","../../../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/utils.js","../../../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/exports/index.js","../../../.svelte-kit/adapter-node/chunks/shared-server.js"],"sourcesContent":["/** @import { StandardSchemaV1 } from '@standard-schema/spec' */\n\nexport class HttpError {\n\t/**\n\t * @param {number} status\n\t * @param {{message: string} extends App.Error ? (App.Error | string | undefined) : App.Error} body\n\t */\n\tconstructor(status, body) {\n\t\tthis.status = status;\n\t\tif (typeof body === 'string') {\n\t\t\tthis.body = { message: body };\n\t\t} else if (body) {\n\t\t\tthis.body = body;\n\t\t} else {\n\t\t\tthis.body = { message: `Error: ${status}` };\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this.body);\n\t}\n}\n\nexport class Redirect {\n\t/**\n\t * @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308} status\n\t * @param {string} location\n\t */\n\tconstructor(status, location) {\n\t\tthis.status = status;\n\t\tthis.location = location;\n\t}\n}\n\n/**\n * An error that was thrown from within the SvelteKit runtime that is not fatal and doesn't result in a 500, such as a 404.\n * `SvelteKitError` goes through `handleError`.\n * @extends Error\n */\nexport class SvelteKitError extends Error {\n\t/**\n\t * @param {number} status\n\t * @param {string} text\n\t * @param {string} message\n\t */\n\tconstructor(status, text, message) {\n\t\tsuper(message);\n\t\tthis.status = status;\n\t\tthis.text = text;\n\t}\n}\n\n/**\n * @template [T=undefined]\n */\nexport class ActionFailure {\n\t/**\n\t * @param {number} status\n\t * @param {T} data\n\t */\n\tconstructor(status, data) {\n\t\tthis.status = status;\n\t\tthis.data = data;\n\t}\n}\n\n/**\n * Error thrown when form validation fails imperatively\n */\nexport class ValidationError extends Error {\n\t/**\n\t * @param {StandardSchemaV1.Issue[]} issues\n\t */\n\tconstructor(issues) {\n\t\tsuper('Validation failed');\n\t\tthis.name = 'ValidationError';\n\t\tthis.issues = issues;\n\t}\n}\n\nexport { init_remote_functions } from './remote-functions.js';\n","import { BROWSER } from 'esm-env';\n\nexport const text_encoder = new TextEncoder();\nexport const text_decoder = new TextDecoder();\n\n/**\n * Like node's path.relative, but without using node\n * @param {string} from\n * @param {string} to\n */\nexport function get_relative_path(from, to) {\n\tconst from_parts = from.split(/[/\\\\]/);\n\tconst to_parts = to.split(/[/\\\\]/);\n\tfrom_parts.pop(); // get dirname\n\n\twhile (from_parts[0] === to_parts[0]) {\n\t\tfrom_parts.shift();\n\t\tto_parts.shift();\n\t}\n\n\tlet i = from_parts.length;\n\twhile (i--) from_parts[i] = '..';\n\n\treturn from_parts.concat(to_parts).join('/');\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nexport function base64_encode(bytes) {\n\t// Using `Buffer` is faster than iterating\n\tif (!BROWSER && globalThis.Buffer) {\n\t\treturn globalThis.Buffer.from(bytes).toString('base64');\n\t}\n\n\tlet binary = '';\n\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbinary += String.fromCharCode(bytes[i]);\n\t}\n\n\treturn btoa(binary);\n}\n\n/**\n * @param {string} encoded\n * @returns {Uint8Array}\n */\nexport function base64_decode(encoded) {\n\t// Using `Buffer` is faster than iterating\n\tif (!BROWSER && globalThis.Buffer) {\n\t\tconst buffer = globalThis.Buffer.from(encoded, 'base64');\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\n\treturn bytes;\n}\n","/** @import { StandardSchemaV1 } from '@standard-schema/spec' */\n\nimport { HttpError, Redirect, ActionFailure, ValidationError } from './internal/index.js';\nimport { BROWSER, DEV } from 'esm-env';\nimport {\n\tadd_data_suffix,\n\tadd_resolution_suffix,\n\thas_data_suffix,\n\thas_resolution_suffix,\n\tstrip_data_suffix,\n\tstrip_resolution_suffix\n} from '../runtime/pathname.js';\nimport { text_encoder } from '../runtime/utils.js';\n\nexport { VERSION } from '../version.js';\n\n// TODO 3.0: remove these types as they are not used anymore (we can't remove them yet because that would be a breaking change)\n/**\n * @template {number} TNumber\n * @template {any[]} [TArray=[]]\n * @typedef {TNumber extends TArray['length'] ? TArray[number] : LessThan<TNumber, [...TArray, TArray['length']]>} LessThan\n */\n\n/**\n * @template {number} TStart\n * @template {number} TEnd\n * @typedef {Exclude<TEnd | LessThan<TEnd>, LessThan<TStart>>} NumericRange\n */\n\n// Keep the status codes as `number` because restricting to certain numbers makes it unnecessarily hard to use compared to the benefits\n// (we have runtime errors already to check for invalid codes). Also see https://github.com/sveltejs/kit/issues/11780\n\n// we have to repeat the JSDoc because the display for function overloads is broken\n// see https://github.com/microsoft/TypeScript/issues/55056\n\n/**\n * Throws an error with a HTTP status code and an optional message.\n * When called during request handling, this will cause SvelteKit to\n * return an error response without invoking `handleError`.\n * Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it.\n * @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.\n * @param {App.Error} body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property.\n * @overload\n * @param {number} status\n * @param {App.Error} body\n * @return {never}\n * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.\n * @throws {Error} If the provided status is invalid (not between 400 and 599).\n */\n/**\n * Throws an error with a HTTP status code and an optional message.\n * When called during request handling, this will cause SvelteKit to\n * return an error response without invoking `handleError`.\n * Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it.\n * @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.\n * @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} [body] An object that conforms to the App.Error type. If a string is passed, it will be used as the message property.\n * @overload\n * @param {number} status\n * @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} [body]\n * @return {never}\n * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.\n * @throws {Error} If the provided status is invalid (not between 400 and 599).\n */\n/**\n * Throws an error with a HTTP status code and an optional message.\n * When called during request handling, this will cause SvelteKit to\n * return an error response without invoking `handleError`.\n * Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it.\n * @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.\n * @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property.\n * @return {never}\n * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.\n * @throws {Error} If the provided status is invalid (not between 400 and 599).\n */\nexport function error(status, body) {\n\tif ((!BROWSER || DEV) && (isNaN(status) || status < 400 || status > 599)) {\n\t\tthrow new Error(`HTTP error status codes must be between 400 and 599 — ${status} is invalid`);\n\t}\n\n\tthrow new HttpError(status, body);\n}\n\n/**\n * Checks whether this is an error thrown by {@link error}.\n * @template {number} T\n * @param {unknown} e\n * @param {T} [status] The status to filter for.\n * @return {e is (HttpError & { status: T extends undefined ? never : T })}\n */\nexport function isHttpError(e, status) {\n\tif (!(e instanceof HttpError)) return false;\n\treturn !status || e.status === status;\n}\n\n/**\n * Redirect a request. When called during request handling, SvelteKit will return a redirect response.\n * Make sure you're not catching the thrown redirect, which would prevent SvelteKit from handling it.\n *\n * Most common status codes:\n * * `303 See Other`: redirect as a GET request (often used after a form POST request)\n * * `307 Temporary Redirect`: redirect will keep the request method\n * * `308 Permanent Redirect`: redirect will keep the request method, SEO will be transferred to the new page\n *\n * [See all redirect status codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages)\n *\n * @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | ({} & number)} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages). Must be in the range 300-308.\n * @param {string | URL} location The location to redirect to.\n * @throws {Redirect} This error instructs SvelteKit to redirect to the specified location.\n * @throws {Error} If the provided status is invalid.\n * @return {never}\n */\nexport function redirect(status, location) {\n\tif ((!BROWSER || DEV) && (isNaN(status) || status < 300 || status > 308)) {\n\t\tthrow new Error('Invalid status code');\n\t}\n\n\tthrow new Redirect(\n\t\t// @ts-ignore\n\t\tstatus,\n\t\tlocation.toString()\n\t);\n}\n\n/**\n * Checks whether this is a redirect thrown by {@link redirect}.\n * @param {unknown} e The object to check.\n * @return {e is Redirect}\n */\nexport function isRedirect(e) {\n\treturn e instanceof Redirect;\n}\n\n/**\n * Create a JSON `Response` object from the supplied data.\n * @param {any} data The value that will be serialized as JSON.\n * @param {ResponseInit} [init] Options such as `status` and `headers` that will be added to the response. `Content-Type: application/json` and `Content-Length` headers will be added automatically.\n */\nexport function json(data, init) {\n\t// TODO deprecate this in favour of `Response.json` when it's\n\t// more widely supported\n\tconst body = JSON.stringify(data);\n\n\t// we can't just do `text(JSON.stringify(data), init)` because\n\t// it will set a default `content-type` header. duplicated code\n\t// means less duplicated work\n\tconst headers = new Headers(init?.headers);\n\tif (!headers.has('content-length')) {\n\t\theaders.set('content-length', text_encoder.encode(body).byteLength.toString());\n\t}\n\n\tif (!headers.has('content-type')) {\n\t\theaders.set('content-type', 'application/json');\n\t}\n\n\treturn new Response(body, {\n\t\t...init,\n\t\theaders\n\t});\n}\n\n/**\n * Create a `Response` object from the supplied body.\n * @param {string} body The value that will be used as-is.\n * @param {ResponseInit} [init] Options such as `status` and `headers` that will be added to the response. A `Content-Length` header will be added automatically.\n */\nexport function text(body, init) {\n\tconst headers = new Headers(init?.headers);\n\tif (!headers.has('content-length')) {\n\t\tconst encoded = text_encoder.encode(body);\n\t\theaders.set('content-length', encoded.byteLength.toString());\n\t\treturn new Response(encoded, {\n\t\t\t...init,\n\t\t\theaders\n\t\t});\n\t}\n\n\treturn new Response(body, {\n\t\t...init,\n\t\theaders\n\t});\n}\n\n/**\n * Create an `ActionFailure` object. Call when form submission fails.\n * @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.\n * @overload\n * @param {number} status\n * @returns {import('./public.js').ActionFailure<undefined>}\n */\n/**\n * Create an `ActionFailure` object. Call when form submission fails.\n * @template [T=undefined]\n * @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599.\n * @param {T} data Data associated with the failure (e.g. validation errors)\n * @overload\n * @param {number} status\n * @param {T} data\n * @returns {import('./public.js').ActionFailure<T>}\n */\n/**\n * Create an `ActionFailure` object. Call when form submission fails.\n * @param {number} status\n * @param {any} [data]\n * @returns {import('./public.js').ActionFailure<any>}\n */\nexport function fail(status, data) {\n\t// @ts-expect-error unique symbol missing\n\treturn new ActionFailure(status, data);\n}\n\n/**\n * Checks whether this is an action failure thrown by {@link fail}.\n * @param {unknown} e The object to check.\n * @return {e is import('./public.js').ActionFailure}\n */\nexport function isActionFailure(e) {\n\treturn e instanceof ActionFailure;\n}\n\n/**\n * Use this to throw a validation error to imperatively fail form validation.\n * Can be used in combination with `issue` passed to form actions to create field-specific issues.\n *\n * @example\n * ```ts\n * import { invalid } from '@sveltejs/kit';\n * import { form } from '$app/server';\n * import { tryLogin } from '$lib/server/auth';\n * import * as v from 'valibot';\n *\n * export const login = form(\n * v.object({ name: v.string(), _password: v.string() }),\n * async ({ name, _password }) => {\n * const success = tryLogin(name, _password);\n * if (!success) {\n * invalid('Incorrect username or password');\n * }\n *\n * // ...\n * }\n * );\n * ```\n * @param {...(StandardSchemaV1.Issue | string)} issues\n * @returns {never}\n * @since 2.47.3\n */\nexport function invalid(...issues) {\n\tthrow new ValidationError(\n\t\tissues.map((issue) => (typeof issue === 'string' ? { message: issue } : issue))\n\t);\n}\n\n/**\n * Checks whether this is an validation error thrown by {@link invalid}.\n * @param {unknown} e The object to check.\n * @return {e is import('./public.js').ActionFailure}\n * @since 2.47.3\n */\nexport function isValidationError(e) {\n\treturn e instanceof ValidationError;\n}\n\n/**\n * Strips possible SvelteKit-internal suffixes and trailing slashes from the URL pathname.\n * Returns the normalized URL as well as a method for adding the potential suffix back\n * based on a new pathname (possibly including search) or URL.\n * ```js\n * import { normalizeUrl } from '@sveltejs/kit';\n *\n * const { url, denormalize } = normalizeUrl('/blog/post/__data.json');\n * console.log(url.pathname); // /blog/post\n * console.log(denormalize('/blog/post/a')); // /blog/post/a/__data.json\n * ```\n * @param {URL | string} url\n * @returns {{ url: URL, wasNormalized: boolean, denormalize: (url?: string | URL) => URL }}\n * @since 2.18.0\n */\nexport function normalizeUrl(url) {\n\turl = new URL(url, 'http://internal');\n\n\tconst is_route_resolution = has_resolution_suffix(url.pathname);\n\tconst is_data_request = has_data_suffix(url.pathname);\n\tconst has_trailing_slash = url.pathname !== '/' && url.pathname.endsWith('/');\n\n\tif (is_route_resolution) {\n\t\turl.pathname = strip_resolution_suffix(url.pathname);\n\t} else if (is_data_request) {\n\t\turl.pathname = strip_data_suffix(url.pathname);\n\t} else if (has_trailing_slash) {\n\t\turl.pathname = url.pathname.slice(0, -1);\n\t}\n\n\treturn {\n\t\turl,\n\t\twasNormalized: is_data_request || is_route_resolution || has_trailing_slash,\n\t\tdenormalize: (new_url = url) => {\n\t\t\tnew_url = new URL(new_url, url);\n\t\t\tif (is_route_resolution) {\n\t\t\t\tnew_url.pathname = add_resolution_suffix(new_url.pathname);\n\t\t\t} else if (is_data_request) {\n\t\t\t\tnew_url.pathname = add_data_suffix(new_url.pathname);\n\t\t\t} else if (has_trailing_slash && !new_url.pathname.endsWith('/')) {\n\t\t\t\tnew_url.pathname += '/';\n\t\t\t}\n\t\t\treturn new_url;\n\t\t}\n\t};\n}\n","let private_env = {};\nlet public_env = {};\nlet fix_stack_trace = (error) => error?.stack;\nfunction set_private_env(environment) {\n private_env = environment;\n}\nfunction set_public_env(environment) {\n public_env = environment;\n}\nexport {\n set_public_env as a,\n private_env as b,\n fix_stack_trace as f,\n public_env as p,\n set_private_env as s\n};\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { aK as getContext } from './exports-CJ0Q5XmL.js';
|
|
2
|
+
import './client-CxCatAKr.js';
|
|
3
|
+
|
|
4
|
+
const getStores = () => {
|
|
5
|
+
const stores$1 = getContext("__svelte__");
|
|
6
|
+
return {
|
|
7
|
+
/** @type {typeof page} */
|
|
8
|
+
page: {
|
|
9
|
+
subscribe: stores$1.page.subscribe
|
|
10
|
+
},
|
|
11
|
+
/** @type {typeof navigating} */
|
|
12
|
+
navigating: {
|
|
13
|
+
subscribe: stores$1.navigating.subscribe
|
|
14
|
+
},
|
|
15
|
+
/** @type {typeof updated} */
|
|
16
|
+
updated: stores$1.updated
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
const page = {
|
|
20
|
+
subscribe(fn) {
|
|
21
|
+
const store = get_store("page");
|
|
22
|
+
return store.subscribe(fn);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
function get_store(name) {
|
|
26
|
+
try {
|
|
27
|
+
return getStores()[name];
|
|
28
|
+
} catch {
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Cannot subscribe to '${name}' store on the server outside of a Svelte component, as it is bound to the current request via component context. This prevents state from leaking between users.For more information, see https://svelte.dev/docs/kit/state-management#avoid-shared-state-on-the-server`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { page as p };
|
|
36
|
+
//# sourceMappingURL=stores-D0HorpgL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores-D0HorpgL.js","sources":["../../../.svelte-kit/adapter-node/chunks/stores.js"],"sourcesContent":["import { ag as getContext } from \"./index.js\";\nimport \"clsx\";\nimport \"./client.js\";\nconst getStores = () => {\n const stores$1 = getContext(\"__svelte__\");\n return {\n /** @type {typeof page} */\n page: {\n subscribe: stores$1.page.subscribe\n },\n /** @type {typeof navigating} */\n navigating: {\n subscribe: stores$1.navigating.subscribe\n },\n /** @type {typeof updated} */\n updated: stores$1.updated\n };\n};\nconst page = {\n subscribe(fn) {\n const store = get_store(\"page\");\n return store.subscribe(fn);\n }\n};\nfunction get_store(name) {\n try {\n return getStores()[name];\n } catch {\n throw new Error(\n `Cannot subscribe to '${name}' store on the server outside of a Svelte component, as it is bound to the current request via component context. This prevents state from leaking between users.For more information, see https://svelte.dev/docs/kit/state-management#avoid-shared-state-on-the-server`\n );\n }\n}\nexport {\n page as p\n};\n"],"names":[],"mappings":";;;AAGA,MAAM,SAAS,GAAG,MAAM;AACxB,EAAE,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC;AAC3C,EAAE,OAAO;AACT;AACA,IAAI,IAAI,EAAE;AACV,MAAM,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,UAAU,EAAE;AAChB,MAAM,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC;AACrC,KAAK;AACL;AACA,IAAI,OAAO,EAAE,QAAQ,CAAC;AACtB,GAAG;AACH,CAAC;AACI,MAAC,IAAI,GAAG;AACb,EAAE,SAAS,CAAC,EAAE,EAAE;AAChB,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;AACnC,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AAC9B,EAAE;AACF;AACA,SAAS,SAAS,CAAC,IAAI,EAAE;AACzB,EAAE,IAAI;AACN,IAAI,OAAO,SAAS,EAAE,CAAC,IAAI,CAAC;AAC5B,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,wQAAwQ;AAC3S,KAAK;AACL,EAAE;AACF;;;;"}
|