@juspay/shooter 1.4.0 → 1.6.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 +15 -1
- package/README.md +132 -36
- package/bin/shooter.cjs +98 -29
- package/build/client/_app/immutable/assets/2.Dk9NfqnS.css +1 -0
- package/build/client/_app/immutable/assets/2.Dk9NfqnS.css.br +0 -0
- package/build/client/_app/immutable/assets/2.Dk9NfqnS.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.DHxQoulp.css +1 -0
- package/build/client/_app/immutable/assets/3.DHxQoulp.css.br +0 -0
- package/build/client/_app/immutable/assets/3.DHxQoulp.css.gz +0 -0
- package/build/client/_app/immutable/assets/{3.DGDHCVnW.css → 4.D5l1JxgO.css} +1 -1
- package/build/client/_app/immutable/assets/4.D5l1JxgO.css.br +0 -0
- package/build/client/_app/immutable/assets/4.D5l1JxgO.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.C5qz-NeI.css +1 -0
- package/build/client/_app/immutable/assets/5.C5qz-NeI.css.br +0 -0
- package/build/client/_app/immutable/assets/5.C5qz-NeI.css.gz +0 -0
- package/build/client/_app/immutable/chunks/1mEchsPO.js +1 -0
- package/build/client/_app/immutable/chunks/1mEchsPO.js.br +0 -0
- package/build/client/_app/immutable/chunks/1mEchsPO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B7X-vhXI.js +1 -0
- package/build/client/_app/immutable/chunks/B7X-vhXI.js.br +0 -0
- package/build/client/_app/immutable/chunks/B7X-vhXI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BRkqKgVG.js +1 -0
- package/build/client/_app/immutable/chunks/BRkqKgVG.js.br +0 -0
- package/build/client/_app/immutable/chunks/BRkqKgVG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BfJ-f-Tu.js +1 -0
- package/build/client/_app/immutable/chunks/BfJ-f-Tu.js.br +2 -0
- package/build/client/_app/immutable/chunks/BfJ-f-Tu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGMJxf7r.js +1 -0
- package/build/client/_app/immutable/chunks/CGMJxf7r.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGMJxf7r.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CZHsSL_X.js → CJFjKwJ7.js} +1 -1
- package/build/client/_app/immutable/chunks/CJFjKwJ7.js.br +0 -0
- package/build/client/_app/immutable/chunks/CJFjKwJ7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CNH2HlKj.js +20 -0
- package/build/client/_app/immutable/chunks/CNH2HlKj.js.br +0 -0
- package/build/client/_app/immutable/chunks/CNH2HlKj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CR6bkGJW.js +6 -0
- package/build/client/_app/immutable/chunks/CR6bkGJW.js.br +0 -0
- package/build/client/_app/immutable/chunks/CR6bkGJW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CVtJ6yRM.js +1 -0
- package/build/client/_app/immutable/chunks/CVtJ6yRM.js.br +0 -0
- package/build/client/_app/immutable/chunks/CVtJ6yRM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CSoRdFvv.js → CaiJSUi3.js} +1 -1
- package/build/client/_app/immutable/chunks/CaiJSUi3.js.br +0 -0
- package/build/client/_app/immutable/chunks/CaiJSUi3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DjsDGxCa.js → CmczWE_d.js} +4 -4
- package/build/client/_app/immutable/chunks/CmczWE_d.js.br +0 -0
- package/build/client/_app/immutable/chunks/CmczWE_d.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CDVSripB.js → CqfYvnci.js} +1 -1
- package/build/client/_app/immutable/chunks/CqfYvnci.js.br +0 -0
- package/build/client/_app/immutable/chunks/CqfYvnci.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CsgHjHGZ.js +1 -0
- package/build/client/_app/immutable/chunks/CsgHjHGZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CsgHjHGZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{UJOiqIYE.js → CtrCjGZT.js} +1 -1
- package/build/client/_app/immutable/chunks/CtrCjGZT.js.br +0 -0
- package/build/client/_app/immutable/chunks/CtrCjGZT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DDiOVAd8.js +61 -0
- package/build/client/_app/immutable/chunks/DDiOVAd8.js.br +0 -0
- package/build/client/_app/immutable/chunks/DDiOVAd8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVl0sebP.js +2 -0
- package/build/client/_app/immutable/chunks/DVl0sebP.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVl0sebP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/EhLZwqfu.js +3 -0
- package/build/client/_app/immutable/chunks/EhLZwqfu.js.br +0 -0
- package/build/client/_app/immutable/chunks/EhLZwqfu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/gQJcRhou.js +1 -0
- package/build/client/_app/immutable/chunks/gQJcRhou.js.br +0 -0
- package/build/client/_app/immutable/chunks/gQJcRhou.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pRcLbE0d.js +1 -0
- package/build/client/_app/immutable/chunks/pRcLbE0d.js.br +0 -0
- package/build/client/_app/immutable/chunks/pRcLbE0d.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CF4lQ45j.js → y_g-KC7l.js} +1 -1
- package/build/client/_app/immutable/chunks/y_g-KC7l.js.br +0 -0
- package/build/client/_app/immutable/chunks/y_g-KC7l.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.zJvbFXsj.js +2 -0
- package/build/client/_app/immutable/entry/app.zJvbFXsj.js.br +0 -0
- package/build/client/_app/immutable/entry/app.zJvbFXsj.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B2Jf5iFd.js +1 -0
- package/build/client/_app/immutable/entry/start.B2Jf5iFd.js.br +2 -0
- package/build/client/_app/immutable/entry/start.B2Jf5iFd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.B_E4j3MX.js +1 -0
- package/build/client/_app/immutable/nodes/0.B_E4j3MX.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.B_E4j3MX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.B0oFqb8X.js +1 -0
- package/build/client/_app/immutable/nodes/1.B0oFqb8X.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.B0oFqb8X.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Bqul0XyM.js +13 -0
- package/build/client/_app/immutable/nodes/2.Bqul0XyM.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Bqul0XyM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CTqUQKSN.js +9 -0
- package/build/client/_app/immutable/nodes/3.CTqUQKSN.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CTqUQKSN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.B_pbOZoD.js +4 -0
- package/build/client/_app/immutable/nodes/4.B_pbOZoD.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.B_pbOZoD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CdLPNo5-.js +1 -0
- package/build/client/_app/immutable/nodes/5.CdLPNo5-.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CdLPNo5-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BvjUfHnH.js +1 -0
- package/build/client/_app/immutable/nodes/6.BvjUfHnH.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BvjUfHnH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.g3R-QfIW.js → 7.5K7Od8ba.js} +3 -3
- package/build/client/_app/immutable/nodes/7.5K7Od8ba.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.5K7Od8ba.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Bs1DrW0_.js +2 -0
- package/build/client/_app/immutable/nodes/8.Bs1DrW0_.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Bs1DrW0_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.1fMlGdqv.js +2 -0
- package/build/client/_app/immutable/nodes/9.1fMlGdqv.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.1fMlGdqv.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/0-e1fgD9Mi.js +23 -0
- package/build/server/chunks/0-e1fgD9Mi.js.map +1 -0
- package/build/server/chunks/1-D2_XVthm.js +9 -0
- package/build/server/chunks/{1-BV7u1xGo.js.map → 1-D2_XVthm.js.map} +1 -1
- package/build/server/chunks/2-DADX86JZ.js +21 -0
- package/build/server/chunks/2-DADX86JZ.js.map +1 -0
- package/build/server/chunks/3-CHacdiCg.js +21 -0
- package/build/server/chunks/3-CHacdiCg.js.map +1 -0
- package/build/server/chunks/4-0UE_6Ep-.js +23 -0
- package/build/server/chunks/4-0UE_6Ep-.js.map +1 -0
- package/build/server/chunks/5-BBIP1PzX.js +24 -0
- package/build/server/chunks/5-BBIP1PzX.js.map +1 -0
- package/build/server/chunks/6-CWLNQu6F.js +9 -0
- package/build/server/chunks/6-CWLNQu6F.js.map +1 -0
- package/build/server/chunks/7-DmQ3B8uy.js +9 -0
- package/build/server/chunks/7-DmQ3B8uy.js.map +1 -0
- package/build/server/chunks/8-CnFVjQtZ.js +9 -0
- package/build/server/chunks/8-CnFVjQtZ.js.map +1 -0
- package/build/server/chunks/9-Dw7-P6aF.js +9 -0
- package/build/server/chunks/9-Dw7-P6aF.js.map +1 -0
- package/build/server/chunks/{Button-Cs1aE6ka.js → Button-WKgiLWZI.js} +4 -9
- package/build/server/chunks/Button-WKgiLWZI.js.map +1 -0
- package/build/server/chunks/{EmptyState-DDFH1K8g.js → EmptyState-BUBqASsp.js} +3 -3
- package/build/server/chunks/{EmptyState-DDFH1K8g.js.map → EmptyState-BUBqASsp.js.map} +1 -1
- package/build/server/chunks/{Icon-CEUrotA6.js → Icon-BNBAg85a.js} +3 -3
- package/build/server/chunks/Icon-BNBAg85a.js.map +1 -0
- package/build/server/chunks/{Shimmer-DB8W1zt6.js → Shimmer-C4uBVwxz.js} +2 -2
- package/build/server/chunks/{Shimmer-DB8W1zt6.js.map → Shimmer-C4uBVwxz.js.map} +1 -1
- package/build/server/chunks/{_error.svelte-uCOJNxvr.js → _error.svelte-DkIwmECt.js} +5 -5
- package/build/server/chunks/{_error.svelte-uCOJNxvr.js.map → _error.svelte-DkIwmECt.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-CtWmEJwe.js → _layout.svelte-DllETxmJ.js} +13 -7
- package/build/server/chunks/_layout.svelte-DllETxmJ.js.map +1 -0
- package/build/server/chunks/_page.svelte-BZSdLKE_.js +118 -0
- package/build/server/chunks/_page.svelte-BZSdLKE_.js.map +1 -0
- package/build/server/chunks/{_page.svelte-CxWcQ0Am.js → _page.svelte-Cmuco1mC.js} +84 -199
- package/build/server/chunks/_page.svelte-Cmuco1mC.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BgevQjq1.js → _page.svelte-Co5sF7W-.js} +12 -11
- package/build/server/chunks/{_page.svelte-BgevQjq1.js.map → _page.svelte-Co5sF7W-.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DO4oa_LY.js → _page.svelte-CpL3R-VI.js} +8 -8
- package/build/server/chunks/{_page.svelte-DO4oa_LY.js.map → _page.svelte-CpL3R-VI.js.map} +1 -1
- package/build/server/chunks/_page.svelte-DDSzYLUs.js +137 -0
- package/build/server/chunks/_page.svelte-DDSzYLUs.js.map +1 -0
- package/build/server/chunks/_page.svelte-JIkgFUFf.js +26 -0
- package/build/server/chunks/_page.svelte-JIkgFUFf.js.map +1 -0
- package/build/server/chunks/{_page.svelte-CVq6tRb3.js → _page.svelte-Y9-O5a5w.js} +10 -9
- package/build/server/chunks/_page.svelte-Y9-O5a5w.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BcZaKdX9.js → _page.svelte-fcX09N4d.js} +9 -9
- package/build/server/chunks/{_page.svelte-BcZaKdX9.js.map → _page.svelte-fcX09N4d.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DYpJImqd.js → _server.ts-0Xr2fWaq.js} +9 -5
- package/build/server/chunks/_server.ts-0Xr2fWaq.js.map +1 -0
- package/build/server/chunks/{_server.ts-CTpcLUH8.js → _server.ts-2ixC-X3K.js} +20 -5
- package/build/server/chunks/_server.ts-2ixC-X3K.js.map +1 -0
- package/build/server/chunks/{_server.ts-CAxsWKvS.js → _server.ts-40c_epk8.js} +20 -4
- package/build/server/chunks/_server.ts-40c_epk8.js.map +1 -0
- package/build/server/chunks/{_server.ts-WhTJBEJy.js → _server.ts-A9_tRR-K.js} +5 -4
- package/build/server/chunks/{_server.ts-WhTJBEJy.js.map → _server.ts-A9_tRR-K.js.map} +1 -1
- package/build/server/chunks/_server.ts-BRAzC6W1.js +98 -0
- package/build/server/chunks/_server.ts-BRAzC6W1.js.map +1 -0
- package/build/server/chunks/{_server.ts-DB_Kg97c.js → _server.ts-BScvgttw.js} +24 -4
- package/build/server/chunks/_server.ts-BScvgttw.js.map +1 -0
- package/build/server/chunks/{_server.ts-Ch-6iOHp.js → _server.ts-B__YN2kX.js} +121 -87
- package/build/server/chunks/_server.ts-B__YN2kX.js.map +1 -0
- package/build/server/chunks/{_server.ts-tSpgyl1D.js → _server.ts-Bjbr7glm.js} +4 -3
- package/build/server/chunks/_server.ts-Bjbr7glm.js.map +1 -0
- package/build/server/chunks/{_server.ts-COu0vNpd.js → _server.ts-BrqaMMAa.js} +7 -6
- package/build/server/chunks/_server.ts-BrqaMMAa.js.map +1 -0
- package/build/server/chunks/{_server.ts-vekTmWAx.js → _server.ts-BuYyCrnF.js} +6 -4
- package/build/server/chunks/_server.ts-BuYyCrnF.js.map +1 -0
- package/build/server/chunks/{_server.ts-Deok2y88.js → _server.ts-ByIrRtCx.js} +132 -76
- package/build/server/chunks/_server.ts-ByIrRtCx.js.map +1 -0
- package/build/server/chunks/{_server.ts-DYvb9ijZ.js → _server.ts-ByPExYfO.js} +4 -3
- package/build/server/chunks/{_server.ts-DYvb9ijZ.js.map → _server.ts-ByPExYfO.js.map} +1 -1
- package/build/server/chunks/_server.ts-CjpQ10xh.js +123 -0
- package/build/server/chunks/_server.ts-CjpQ10xh.js.map +1 -0
- package/build/server/chunks/_server.ts-CyjDrcZN.js +21 -0
- package/build/server/chunks/_server.ts-CyjDrcZN.js.map +1 -0
- package/build/server/chunks/{_server.ts-DV8zTCF9.js → _server.ts-DOGUMzPx.js} +4 -3
- package/build/server/chunks/{_server.ts-DV8zTCF9.js.map → _server.ts-DOGUMzPx.js.map} +1 -1
- package/build/server/chunks/_server.ts-DZvfyuNj.js +15 -0
- package/build/server/chunks/_server.ts-DZvfyuNj.js.map +1 -0
- package/build/server/chunks/{_server.ts-XzT2UHM1.js → _server.ts-DkPPTUPo.js} +4 -3
- package/build/server/chunks/{_server.ts-XzT2UHM1.js.map → _server.ts-DkPPTUPo.js.map} +1 -1
- package/build/server/chunks/{auth-DeCdZ83n.js → auth-DuunT7Cg.js} +2 -2
- package/build/server/chunks/{auth-DeCdZ83n.js.map → auth-DuunT7Cg.js.map} +1 -1
- package/build/server/chunks/{client-BdGHe_hY.js → client-DRtPDkMh.js} +4 -4
- package/build/server/chunks/{client-BdGHe_hY.js.map → client-DRtPDkMh.js.map} +1 -1
- package/build/server/chunks/client2-bqqmu0b7.js +7 -0
- package/build/server/chunks/{client2-CCBGA-2V.js.map → client2-bqqmu0b7.js.map} +1 -1
- package/build/server/chunks/close-BGlLztTb.js +192 -0
- package/build/server/chunks/close-BGlLztTb.js.map +1 -0
- package/build/server/chunks/events-handler-Dm1mNPQP.js +20 -0
- package/build/server/chunks/events-handler-Dm1mNPQP.js.map +1 -0
- package/build/server/chunks/html-FW6Ia4bL.js +8 -0
- package/build/server/chunks/html-FW6Ia4bL.js.map +1 -0
- package/build/server/chunks/{shared-server-sSGG17Df.js → index-CoD1IJuy.js} +2 -11
- package/build/server/chunks/index-CoD1IJuy.js.map +1 -0
- package/build/server/chunks/{index-DwaY1cAm.js → index-DP9bWJrR.js} +2 -2
- package/build/server/chunks/{index-DwaY1cAm.js.map → index-DP9bWJrR.js.map} +1 -1
- package/build/server/chunks/{index-server-CrDaL06Y.js → index-server-BUmV4MIG.js} +2 -2
- package/build/server/chunks/index-server-BUmV4MIG.js.map +1 -0
- package/build/server/chunks/index-server2-BJrT0wnA.js +5 -0
- package/build/server/chunks/index-server2-BJrT0wnA.js.map +1 -0
- package/build/server/chunks/{index2-CgclKpUj.js → index2-D5Y19GKR.js} +2 -2
- package/build/server/chunks/index2-D5Y19GKR.js.map +1 -0
- package/build/server/chunks/{library-apns-BqJbvSKh.js → library-apns-Cf-E-DhM.js} +5 -2
- package/build/server/chunks/library-apns-Cf-E-DhM.js.map +1 -0
- package/build/server/chunks/providers-DtstoHQ0.js +17 -0
- package/build/server/chunks/providers-DtstoHQ0.js.map +1 -0
- package/build/server/chunks/{pty-manager-BQVB7IVj.js → pty-manager-TyMUpDA9.js} +41 -9
- package/build/server/chunks/pty-manager-TyMUpDA9.js.map +1 -0
- package/build/server/chunks/{root-DDSnEAZv.js → root-CATOR_0t.js} +2 -2
- package/build/server/chunks/root-CATOR_0t.js.map +1 -0
- package/build/server/chunks/shared-server-DaWdgxVh.js +11 -0
- package/build/server/chunks/shared-server-DaWdgxVh.js.map +1 -0
- package/build/server/chunks/{state.svelte-hBbXlUak.js → state.svelte-CftllyvC.js} +3 -3
- package/build/server/chunks/state.svelte-CftllyvC.js.map +1 -0
- package/build/server/chunks/{stores-DHNzYNpX.js → stores-BjL57aOK.js} +4 -4
- package/build/server/chunks/{stores-DHNzYNpX.js.map → stores-BjL57aOK.js.map} +1 -1
- package/build/server/index.js +173 -6
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +53 -30
- package/build/server/manifest.js.map +1 -1
- package/package.json +28 -7
- package/scripts/dev.mjs +361 -0
- package/scripts/install.sh +133 -73
- package/scripts/{fix-generated-types.sh → postgen-types.sh} +2 -2
- package/scripts/setup.cjs +440 -244
- package/scripts/vercel-env-commands.sh +3 -3
- package/server.ts +3 -3
- package/src/app.html +163 -0
- package/src/lib/modules/client/activity/ActivityFeed.svelte +279 -0
- package/src/lib/modules/client/activity/index.ts +8 -0
- package/src/lib/modules/client/activity/store.svelte.ts +478 -0
- package/src/lib/modules/client/activity/summarizer.ts +224 -0
- package/src/lib/modules/client/common/Card.svelte +2 -9
- package/src/lib/modules/client/common/EmptyState.svelte +2 -20
- package/src/lib/modules/client/common/Icon.svelte +3 -7
- package/src/lib/modules/client/common/StatusBadge.svelte +2 -4
- package/src/lib/modules/client/common/config-guard.ts +22 -2
- package/src/lib/modules/client/common/index.ts +1 -1
- package/src/lib/modules/client/common/time.ts +27 -9
- package/src/lib/modules/client/dashboard/DashboardCard.svelte +374 -0
- package/src/lib/modules/client/dashboard/DashboardView.svelte +66 -0
- package/src/lib/modules/client/dashboard/index.ts +12 -0
- package/src/lib/modules/client/dashboard/store.svelte.ts +663 -0
- package/src/lib/modules/client/dashboard/summarizer.ts +205 -0
- package/src/lib/modules/client/neurolink/fetch-proxy.ts +70 -0
- package/src/lib/modules/client/neurolink/provider-config.ts +111 -0
- package/src/lib/modules/client/terminal/ChatView.svelte +46 -43
- package/src/lib/modules/client/terminal/CommandPalette.svelte +3 -12
- package/src/lib/modules/client/terminal/ConnectionStatus.svelte +3 -6
- package/src/lib/modules/client/terminal/LaunchSheet.svelte +10 -21
- package/src/lib/modules/client/terminal/QuickKeys.svelte +4 -11
- package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +3 -6
- package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +5 -7
- package/src/lib/modules/client/terminal/xterm-wrapper.ts +27 -47
- package/src/lib/modules/server/apn/library-apns.ts +6 -3
- package/src/lib/modules/server/apn/notification-history.ts +2 -2
- package/src/lib/modules/server/apn/notification-sessions.ts +1 -3
- package/src/lib/modules/server/apn/pending-requests.ts +1 -1
- package/src/lib/modules/server/apn/types.ts +2 -52
- package/src/lib/modules/server/cli/index.ts +1 -30
- package/src/lib/modules/server/cli/runner.ts +7 -15
- package/src/lib/modules/server/fcm/fcm-service.ts +2 -2
- package/src/lib/modules/server/sessions/jsonl-parser.ts +97 -42
- package/src/lib/modules/server/sessions/jsonl-reader.ts +69 -60
- package/src/lib/modules/server/sessions/opencode-reader.ts +1 -1
- package/src/lib/modules/server/sessions/process-detector.ts +72 -31
- package/src/lib/modules/server/sessions/types.ts +2 -42
- package/src/lib/modules/server/terminal/holder-client.ts +11 -35
- package/src/lib/modules/server/terminal/opencode-watcher.ts +16 -24
- package/src/lib/modules/server/terminal/pty-manager.ts +40 -45
- package/src/lib/modules/server/terminal/session-watcher.ts +15 -17
- package/src/lib/modules/server/terminal/terminal-store.ts +1 -1
- package/src/lib/modules/server/ws/events-handler.ts +1 -16
- package/src/lib/modules/server/ws/keepalive.ts +1 -5
- package/src/lib/modules/server/ws/server.ts +1 -1
- package/src/lib/modules/server/ws/session-handler.ts +20 -86
- package/src/lib/modules/server/ws/terminal-handler.ts +28 -51
- package/src/lib/modules/server/ws/ticket-store.ts +1 -1
- package/src/lib/modules/shared/providers.ts +21 -0
- package/src/lib/types/activity.ts +18 -0
- package/src/lib/types/apn.ts +43 -0
- package/src/lib/types/cli.ts +39 -0
- package/src/lib/types/common.ts +39 -0
- package/src/lib/types/dashboard.ts +4 -0
- package/src/lib/types/generated/Client.ts +1656 -0
- package/src/{generated/types → lib/types/generated}/WsProtocol.ts +344 -2
- package/src/lib/types/index.ts +28 -0
- package/src/lib/types/neurolink.ts +4 -0
- package/src/lib/types/server.ts +93 -0
- package/src/lib/types/sessions.ts +59 -0
- package/src/lib/types/terminal-client.ts +132 -0
- package/src/lib/types/ws.ts +161 -0
- package/src/routes/+error.svelte +7 -2
- package/src/routes/+layout.server.ts +9 -0
- package/src/routes/+layout.svelte +36 -7
- package/src/routes/+page.server.ts +7 -0
- package/src/routes/+page.svelte +85 -35
- package/src/routes/activity/+page.server.ts +7 -0
- package/src/routes/activity/+page.svelte +58 -0
- package/src/routes/api/health/+server.ts +32 -19
- package/src/routes/api/neurolink-proxy/+server.ts +136 -0
- package/src/routes/api/notify/+server.ts +159 -84
- package/src/routes/api/sessions/+server.ts +1 -1
- package/src/routes/api/sessions/connect/+server.ts +10 -6
- package/src/routes/api/terminals/+server.ts +20 -1
- package/src/routes/api/terminals/[id]/+server.ts +16 -2
- package/src/routes/api/webhook/+server.ts +5 -33
- package/src/routes/api/ws-ticket/+server.ts +4 -4
- package/src/routes/config/+page.server.ts +9 -0
- package/src/routes/config/+page.svelte +118 -25
- package/src/routes/neurolink/+page.server.ts +10 -0
- package/src/routes/neurolink/+page.svelte +331 -0
- package/src/routes/project/+page.svelte +17 -12
- package/src/routes/session/[id]/+page.svelte +146 -62
- package/src/routes/terminals/+page.svelte +2 -2
- package/src/routes/terminals/[id]/+page.svelte +99 -88
- package/svelte.config.js +1 -3
- package/tsconfig.json +1 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css +0 -1
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.br +0 -1
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.DGDHCVnW.css.br +0 -0
- package/build/client/_app/immutable/assets/3.DGDHCVnW.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B5NAKyil.js +0 -20
- package/build/client/_app/immutable/chunks/B5NAKyil.js.br +0 -0
- package/build/client/_app/immutable/chunks/B5NAKyil.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B8XegpSE.js +0 -1
- package/build/client/_app/immutable/chunks/B8XegpSE.js.br +0 -0
- package/build/client/_app/immutable/chunks/B8XegpSE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B8zoBsv3.js +0 -6
- package/build/client/_app/immutable/chunks/B8zoBsv3.js.br +0 -0
- package/build/client/_app/immutable/chunks/B8zoBsv3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BN1NjBrw.js +0 -1
- package/build/client/_app/immutable/chunks/BN1NjBrw.js.br +0 -0
- package/build/client/_app/immutable/chunks/BN1NjBrw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BOYo8yTr.js +0 -1
- package/build/client/_app/immutable/chunks/BOYo8yTr.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOYo8yTr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bu1aqm5j.js +0 -1
- package/build/client/_app/immutable/chunks/Bu1aqm5j.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bu1aqm5j.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDVSripB.js.br +0 -0
- package/build/client/_app/immutable/chunks/CDVSripB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CF4lQ45j.js.br +0 -0
- package/build/client/_app/immutable/chunks/CF4lQ45j.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CQjSATpv.js +0 -61
- package/build/client/_app/immutable/chunks/CQjSATpv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CQjSATpv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CSoRdFvv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CSoRdFvv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CZHsSL_X.js.br +0 -0
- package/build/client/_app/immutable/chunks/CZHsSL_X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js +0 -1
- package/build/client/_app/immutable/chunks/DSU1n5N_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVkn4r72.js +0 -1
- package/build/client/_app/immutable/chunks/DVkn4r72.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVkn4r72.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjsDGxCa.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjsDGxCa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UJOiqIYE.js.br +0 -0
- package/build/client/_app/immutable/chunks/UJOiqIYE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/r0JawsZc.js +0 -2
- package/build/client/_app/immutable/chunks/r0JawsZc.js.br +0 -0
- package/build/client/_app/immutable/chunks/r0JawsZc.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DwWiuoEC.js +0 -2
- package/build/client/_app/immutable/entry/app.DwWiuoEC.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DwWiuoEC.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DG8BMhrh.js +0 -1
- package/build/client/_app/immutable/entry/start.DG8BMhrh.js.br +0 -0
- package/build/client/_app/immutable/entry/start.DG8BMhrh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.ejabgzDQ.js +0 -1
- package/build/client/_app/immutable/nodes/0.ejabgzDQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.ejabgzDQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BFK7Ubrr.js +0 -1
- package/build/client/_app/immutable/nodes/1.BFK7Ubrr.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BFK7Ubrr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DV3saFiY.js +0 -1
- package/build/client/_app/immutable/nodes/2.DV3saFiY.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DV3saFiY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.3yohCM25.js +0 -3
- package/build/client/_app/immutable/nodes/3.3yohCM25.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.3yohCM25.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.D6NIf10D.js +0 -1
- package/build/client/_app/immutable/nodes/4.D6NIf10D.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.D6NIf10D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.g3R-QfIW.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.g3R-QfIW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DSpd_nYK.js +0 -2
- package/build/client/_app/immutable/nodes/6.DSpd_nYK.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DSpd_nYK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.F9WBFTz2.js +0 -2
- package/build/client/_app/immutable/nodes/7.F9WBFTz2.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.F9WBFTz2.js.gz +0 -0
- package/build/server/chunks/0-ePgrkfG9.js +0 -9
- package/build/server/chunks/0-ePgrkfG9.js.map +0 -1
- package/build/server/chunks/1-BV7u1xGo.js +0 -9
- package/build/server/chunks/2-3p1kyvjQ.js +0 -9
- package/build/server/chunks/2-3p1kyvjQ.js.map +0 -1
- package/build/server/chunks/3-Ck7ewhOX.js +0 -9
- package/build/server/chunks/3-Ck7ewhOX.js.map +0 -1
- package/build/server/chunks/4-ChFYfo_S.js +0 -9
- package/build/server/chunks/4-ChFYfo_S.js.map +0 -1
- package/build/server/chunks/5-q-tQLBBu.js +0 -9
- package/build/server/chunks/5-q-tQLBBu.js.map +0 -1
- package/build/server/chunks/6-BIaAbm8b.js +0 -9
- package/build/server/chunks/6-BIaAbm8b.js.map +0 -1
- package/build/server/chunks/7--TmbCgrH.js +0 -9
- package/build/server/chunks/7--TmbCgrH.js.map +0 -1
- package/build/server/chunks/Button-Cs1aE6ka.js.map +0 -1
- package/build/server/chunks/Icon-CEUrotA6.js.map +0 -1
- package/build/server/chunks/_layout.svelte-CtWmEJwe.js.map +0 -1
- package/build/server/chunks/_page.svelte-BdYynOck.js +0 -85
- package/build/server/chunks/_page.svelte-BdYynOck.js.map +0 -1
- package/build/server/chunks/_page.svelte-CVq6tRb3.js.map +0 -1
- package/build/server/chunks/_page.svelte-CxWcQ0Am.js.map +0 -1
- package/build/server/chunks/_server.ts-BStnNIcq.js +0 -34
- package/build/server/chunks/_server.ts-BStnNIcq.js.map +0 -1
- package/build/server/chunks/_server.ts-CAxsWKvS.js.map +0 -1
- package/build/server/chunks/_server.ts-COu0vNpd.js.map +0 -1
- package/build/server/chunks/_server.ts-CTpcLUH8.js.map +0 -1
- package/build/server/chunks/_server.ts-Cf84YIaW.js +0 -25
- package/build/server/chunks/_server.ts-Cf84YIaW.js.map +0 -1
- package/build/server/chunks/_server.ts-Ch-6iOHp.js.map +0 -1
- package/build/server/chunks/_server.ts-CtH0dhUp.js +0 -71
- package/build/server/chunks/_server.ts-CtH0dhUp.js.map +0 -1
- package/build/server/chunks/_server.ts-DB_Kg97c.js.map +0 -1
- package/build/server/chunks/_server.ts-DYpJImqd.js.map +0 -1
- package/build/server/chunks/_server.ts-Deok2y88.js.map +0 -1
- package/build/server/chunks/_server.ts-tSpgyl1D.js.map +0 -1
- package/build/server/chunks/_server.ts-vekTmWAx.js.map +0 -1
- package/build/server/chunks/client2-CCBGA-2V.js +0 -7
- package/build/server/chunks/index-server-CrDaL06Y.js.map +0 -1
- package/build/server/chunks/index2-CgclKpUj.js.map +0 -1
- package/build/server/chunks/library-apns-BqJbvSKh.js.map +0 -1
- package/build/server/chunks/pty-manager-BQVB7IVj.js.map +0 -1
- package/build/server/chunks/root-DDSnEAZv.js.map +0 -1
- package/build/server/chunks/shared-server-sSGG17Df.js.map +0 -1
- package/build/server/chunks/state.svelte-hBbXlUak.js.map +0 -1
- package/src/generated/types/Client.ts +0 -589
- package/src/lib/types/config.ts +0 -1
- /package/build/client/_app/immutable/assets/{4.BFUut--w.css → 6.BFUut--w.css} +0 -0
- /package/build/client/_app/immutable/assets/{4.BFUut--w.css.br → 6.BFUut--w.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{4.BFUut--w.css.gz → 6.BFUut--w.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{5.BTOx7yt7.css → 7.BTOx7yt7.css} +0 -0
- /package/build/client/_app/immutable/assets/{5.BTOx7yt7.css.br → 7.BTOx7yt7.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{5.BTOx7yt7.css.gz → 7.BTOx7yt7.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{6.eZGZN-BF.css → 8.eZGZN-BF.css} +0 -0
- /package/build/client/_app/immutable/assets/{6.eZGZN-BF.css.br → 8.eZGZN-BF.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{6.eZGZN-BF.css.gz → 8.eZGZN-BF.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{7.DwS5ZHBh.css → 9.DwS5ZHBh.css} +0 -0
- /package/build/client/_app/immutable/assets/{7.DwS5ZHBh.css.br → 9.DwS5ZHBh.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{7.DwS5ZHBh.css.gz → 9.DwS5ZHBh.css.gz} +0 -0
- /package/src/{generated/types → lib/types/generated}/API.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/APN.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/CLI.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/Config.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/Holder.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/JWT.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/Notification.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/OpenCode.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/Sessions.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/Terminal.ts +0 -0
- /package/src/{generated/types → lib/types/generated}/index.ts +0 -0
|
@@ -29,9 +29,9 @@ echo "vercel env add APNS_BUNDLE_ID"
|
|
|
29
29
|
echo "# Enter: YOUR_BUNDLE_ID_HERE (from .env file)"
|
|
30
30
|
echo ""
|
|
31
31
|
|
|
32
|
-
echo "# 5. APNs Private Key
|
|
33
|
-
echo "vercel env add
|
|
34
|
-
echo "# Enter:
|
|
32
|
+
echo "# 5. APNs Private Key"
|
|
33
|
+
echo "vercel env add APNS_KEY"
|
|
34
|
+
echo "# Enter: YOUR_APNS_KEY_HERE (.p8 file contents, including BEGIN/END PRIVATE KEY lines)"
|
|
35
35
|
echo ""
|
|
36
36
|
|
|
37
37
|
echo "# 6. Device Token (Optional)"
|
package/server.ts
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
// Load .env before any other imports so all modules see populated process.env.
|
|
6
6
|
import './src/lib/env.js';
|
|
7
7
|
|
|
8
|
+
import type { ConversationMessage } from '$lib/types';
|
|
9
|
+
|
|
8
10
|
import { existsSync } from 'fs';
|
|
9
11
|
import { createServer, type Server } from 'http';
|
|
10
12
|
import { dirname, join } from 'path';
|
|
11
13
|
import { fileURLToPath } from 'url';
|
|
12
14
|
import { type WebSocket, WebSocketServer } from 'ws';
|
|
13
15
|
|
|
14
|
-
import type { ConversationMessage } from './src/lib/modules/server/sessions/types.js';
|
|
15
|
-
|
|
16
16
|
// ── Build guard ─────────────────────────────────────────────────────────
|
|
17
17
|
// Fail fast with a clear message instead of a cryptic ERR_MODULE_NOT_FOUND.
|
|
18
18
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -87,7 +87,7 @@ const sessionWatcherAdapter = {
|
|
|
87
87
|
|
|
88
88
|
if (!process.env.API_KEY) {
|
|
89
89
|
console.warn(
|
|
90
|
-
`\n⚠ WARNING: API_KEY is not set. Authenticated API routes will return 401.\n Run 'shooter setup' to configure, or set API_KEY in your environment.\n
|
|
90
|
+
`\n⚠ WARNING: API_KEY is not set. Authenticated API routes will return 401.\n Run 'shooter setup' to configure, or set API_KEY in your environment.\n`
|
|
91
91
|
);
|
|
92
92
|
}
|
|
93
93
|
|
package/src/app.html
CHANGED
|
@@ -20,6 +20,169 @@
|
|
|
20
20
|
%sveltekit.head%
|
|
21
21
|
</head>
|
|
22
22
|
<body data-sveltekit-preload-data="hover">
|
|
23
|
+
<script>
|
|
24
|
+
// Global shims for NeuroLink browser SDK — must run before any module code
|
|
25
|
+
(function () {
|
|
26
|
+
var noop = function () {};
|
|
27
|
+
if (typeof globalThis.process === 'undefined') {
|
|
28
|
+
var p = {
|
|
29
|
+
env: {},
|
|
30
|
+
version: 'v24.0.0',
|
|
31
|
+
platform: 'browser',
|
|
32
|
+
argv: [],
|
|
33
|
+
pid: 1,
|
|
34
|
+
cwd: function () {
|
|
35
|
+
return '/';
|
|
36
|
+
},
|
|
37
|
+
exit: noop,
|
|
38
|
+
on: function () {
|
|
39
|
+
return p;
|
|
40
|
+
},
|
|
41
|
+
off: function () {
|
|
42
|
+
return p;
|
|
43
|
+
},
|
|
44
|
+
once: function () {
|
|
45
|
+
return p;
|
|
46
|
+
},
|
|
47
|
+
emit: function () {
|
|
48
|
+
return false;
|
|
49
|
+
},
|
|
50
|
+
removeListener: function () {
|
|
51
|
+
return p;
|
|
52
|
+
},
|
|
53
|
+
addListener: function () {
|
|
54
|
+
return p;
|
|
55
|
+
},
|
|
56
|
+
stdout: {
|
|
57
|
+
write: function () {
|
|
58
|
+
return true;
|
|
59
|
+
},
|
|
60
|
+
on: noop,
|
|
61
|
+
},
|
|
62
|
+
stderr: {
|
|
63
|
+
write: function () {
|
|
64
|
+
return true;
|
|
65
|
+
},
|
|
66
|
+
on: noop,
|
|
67
|
+
},
|
|
68
|
+
stdin: { on: noop },
|
|
69
|
+
nextTick: function (fn) {
|
|
70
|
+
setTimeout(fn, 0);
|
|
71
|
+
},
|
|
72
|
+
hrtime: Object.assign(
|
|
73
|
+
function (t) {
|
|
74
|
+
var n = performance.now() * 1e6;
|
|
75
|
+
var s = Math.floor(n / 1e9);
|
|
76
|
+
var ns = Math.floor(n % 1e9);
|
|
77
|
+
if (!t) return [s, ns];
|
|
78
|
+
var ds = s - t[0];
|
|
79
|
+
var dns = ns - t[1];
|
|
80
|
+
if (dns < 0) {
|
|
81
|
+
ds -= 1;
|
|
82
|
+
dns += 1e9;
|
|
83
|
+
}
|
|
84
|
+
return [ds, dns];
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
bigint: function () {
|
|
88
|
+
return BigInt(Math.floor(performance.now() * 1e6));
|
|
89
|
+
},
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
memoryUsage: function () {
|
|
93
|
+
return { rss: 0, heapTotal: 0, heapUsed: 0, external: 0, arrayBuffers: 0 };
|
|
94
|
+
},
|
|
95
|
+
cpuUsage: function () {
|
|
96
|
+
return { user: 0, system: 0 };
|
|
97
|
+
},
|
|
98
|
+
versions: { browser: '1.0.0', node: '24.0.0', v8: '0', modules: '0' },
|
|
99
|
+
release: { name: 'browser' },
|
|
100
|
+
uptime: function () {
|
|
101
|
+
return performance.now() / 1000;
|
|
102
|
+
},
|
|
103
|
+
title: 'browser',
|
|
104
|
+
execPath: '/',
|
|
105
|
+
execArgv: [],
|
|
106
|
+
features: {},
|
|
107
|
+
config: {},
|
|
108
|
+
kill: noop,
|
|
109
|
+
abort: noop,
|
|
110
|
+
};
|
|
111
|
+
globalThis.process = new Proxy(p, {
|
|
112
|
+
get: function (t, k) {
|
|
113
|
+
return k in t ? t[k] : noop;
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (typeof globalThis.Buffer === 'undefined') {
|
|
118
|
+
function B() {}
|
|
119
|
+
B.from = function (d, e) {
|
|
120
|
+
if (typeof d === 'string') {
|
|
121
|
+
if (e === 'base64') {
|
|
122
|
+
var b = atob(d);
|
|
123
|
+
var u = new Uint8Array(b.length);
|
|
124
|
+
for (var i = 0; i < b.length; i++) u[i] = b.charCodeAt(i);
|
|
125
|
+
return u;
|
|
126
|
+
}
|
|
127
|
+
return new TextEncoder().encode(d);
|
|
128
|
+
}
|
|
129
|
+
return new Uint8Array(d);
|
|
130
|
+
};
|
|
131
|
+
B.alloc = function (n) {
|
|
132
|
+
return new Uint8Array(n);
|
|
133
|
+
};
|
|
134
|
+
B.isBuffer = function (o) {
|
|
135
|
+
return o instanceof Uint8Array;
|
|
136
|
+
};
|
|
137
|
+
B.concat = function (l) {
|
|
138
|
+
var t = 0;
|
|
139
|
+
for (var i = 0; i < l.length; i++) t += l[i].length;
|
|
140
|
+
var r = new Uint8Array(t);
|
|
141
|
+
var o = 0;
|
|
142
|
+
for (var i = 0; i < l.length; i++) {
|
|
143
|
+
r.set(l[i], o);
|
|
144
|
+
o += l[i].length;
|
|
145
|
+
}
|
|
146
|
+
return r;
|
|
147
|
+
};
|
|
148
|
+
B.byteLength = function (s) {
|
|
149
|
+
return new TextEncoder().encode(s).length;
|
|
150
|
+
};
|
|
151
|
+
globalThis.Buffer = B;
|
|
152
|
+
}
|
|
153
|
+
if (typeof globalThis.global === 'undefined') globalThis.global = globalThis;
|
|
154
|
+
var oST = globalThis.setTimeout.bind(globalThis),
|
|
155
|
+
oSI = globalThis.setInterval.bind(globalThis),
|
|
156
|
+
oCT = globalThis.clearTimeout.bind(globalThis),
|
|
157
|
+
oCI = globalThis.clearInterval.bind(globalThis);
|
|
158
|
+
function wT(id) {
|
|
159
|
+
return {
|
|
160
|
+
valueOf: function () {
|
|
161
|
+
return id;
|
|
162
|
+
},
|
|
163
|
+
ref: function () {
|
|
164
|
+
return this;
|
|
165
|
+
},
|
|
166
|
+
unref: function () {
|
|
167
|
+
return this;
|
|
168
|
+
},
|
|
169
|
+
_id: id,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
globalThis.setTimeout = function () {
|
|
173
|
+
return wT(oST.apply(null, arguments));
|
|
174
|
+
};
|
|
175
|
+
globalThis.setInterval = function () {
|
|
176
|
+
return wT(oSI.apply(null, arguments));
|
|
177
|
+
};
|
|
178
|
+
globalThis.clearTimeout = function (t) {
|
|
179
|
+
oCT(t && t._id !== undefined ? t._id : t);
|
|
180
|
+
};
|
|
181
|
+
globalThis.clearInterval = function (t) {
|
|
182
|
+
oCI(t && t._id !== undefined ? t._id : t);
|
|
183
|
+
};
|
|
184
|
+
})();
|
|
185
|
+
</script>
|
|
23
186
|
<div style="display: contents">%sveltekit.body%</div>
|
|
24
187
|
</body>
|
|
25
188
|
</html>
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { formatRelativeTime, getApiKey } from '$lib/modules/client/common';
|
|
3
|
+
import { Banner, Button } from '@juspay/svelte-ui-components';
|
|
4
|
+
import { onDestroy, onMount } from 'svelte';
|
|
5
|
+
import { SvelteMap, SvelteSet } from 'svelte/reactivity';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
connect,
|
|
9
|
+
disconnect,
|
|
10
|
+
getEvents,
|
|
11
|
+
getSummaries,
|
|
12
|
+
isAiAvailable,
|
|
13
|
+
isConnected,
|
|
14
|
+
isSummarizing,
|
|
15
|
+
} from './store.svelte';
|
|
16
|
+
|
|
17
|
+
let showRaw = $state(false);
|
|
18
|
+
|
|
19
|
+
async function getTicket(): Promise<string> {
|
|
20
|
+
const apiKey = getApiKey();
|
|
21
|
+
if (!apiKey) {
|
|
22
|
+
throw new Error('No API key configured');
|
|
23
|
+
}
|
|
24
|
+
const res = await fetch('/api/ws-ticket', {
|
|
25
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
26
|
+
method: 'POST',
|
|
27
|
+
});
|
|
28
|
+
if (!res.ok) {
|
|
29
|
+
throw new Error('Failed to get WS ticket');
|
|
30
|
+
}
|
|
31
|
+
const data = (await res.json()) as { ticket: string };
|
|
32
|
+
return data.ticket;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
onMount(() => {
|
|
36
|
+
void connect(getTicket);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
onDestroy(() => {
|
|
40
|
+
disconnect();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const summaries = $derived(getSummaries());
|
|
44
|
+
const events = $derived(getEvents());
|
|
45
|
+
const connected = $derived(isConnected());
|
|
46
|
+
const aiReady = $derived(isAiAvailable());
|
|
47
|
+
const summarizing = $derived(isSummarizing());
|
|
48
|
+
const unsummarizedCount = $derived(events.filter((e) => !e.summarized).length);
|
|
49
|
+
|
|
50
|
+
// Get unique session count for status display
|
|
51
|
+
const activeSessionCount = $derived.by(() => {
|
|
52
|
+
const sessionIds = new SvelteSet<string>();
|
|
53
|
+
for (const e of events) {
|
|
54
|
+
if (e.sessionId) {
|
|
55
|
+
sessionIds.add(e.sessionId);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return sessionIds.size;
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Group summaries by projectName
|
|
62
|
+
const projectGroups = $derived.by(() => {
|
|
63
|
+
const groups = new SvelteMap<string, { name: string; summaries: typeof summaries }>();
|
|
64
|
+
for (const s of [...summaries].reverse()) {
|
|
65
|
+
const name = s.projectName || 'Unknown';
|
|
66
|
+
if (!groups.has(name)) {
|
|
67
|
+
groups.set(name, { name, summaries: [] });
|
|
68
|
+
}
|
|
69
|
+
const group = groups.get(name);
|
|
70
|
+
if (group) {
|
|
71
|
+
group.summaries.push(s);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return Array.from(groups.values());
|
|
75
|
+
});
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<div class="feed">
|
|
79
|
+
<header>
|
|
80
|
+
<h2>Activity</h2>
|
|
81
|
+
<span class="status" class:live={connected}>
|
|
82
|
+
{connected ? `● Watching ${activeSessionCount} sessions` : '○ No active sessions'}
|
|
83
|
+
</span>
|
|
84
|
+
{#if summarizing}
|
|
85
|
+
<span class="summarizing">Summarizing...</span>
|
|
86
|
+
{/if}
|
|
87
|
+
</header>
|
|
88
|
+
|
|
89
|
+
{#if !aiReady}
|
|
90
|
+
<Banner
|
|
91
|
+
text="AI summaries unavailable — configure a provider to enable"
|
|
92
|
+
classes="banner-warning"
|
|
93
|
+
/>
|
|
94
|
+
{/if}
|
|
95
|
+
|
|
96
|
+
<div class="entries">
|
|
97
|
+
{#if summaries.length === 0 && events.length === 0}
|
|
98
|
+
<p class="empty">
|
|
99
|
+
No recent activity. Summaries will appear here when Claude Code sessions are active on this
|
|
100
|
+
machine.
|
|
101
|
+
</p>
|
|
102
|
+
{/if}
|
|
103
|
+
|
|
104
|
+
{#each projectGroups as group (group.name)}
|
|
105
|
+
<div class="project-group">
|
|
106
|
+
<h3 class="project-name">{group.name}</h3>
|
|
107
|
+
{#each group.summaries as summary (summary.id)}
|
|
108
|
+
<div class="summary-card">
|
|
109
|
+
<time>{formatRelativeTime(summary.timestamp)}</time>
|
|
110
|
+
<p>{summary.text}</p>
|
|
111
|
+
<span class="event-count">{summary.eventIds.length} events</span>
|
|
112
|
+
</div>
|
|
113
|
+
{/each}
|
|
114
|
+
</div>
|
|
115
|
+
{/each}
|
|
116
|
+
|
|
117
|
+
{#if unsummarizedCount > 0}
|
|
118
|
+
<div class="pending">
|
|
119
|
+
<span>{unsummarizedCount} events pending summary...</span>
|
|
120
|
+
</div>
|
|
121
|
+
{/if}
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<Button
|
|
125
|
+
classes="btn-ghost raw-toggle"
|
|
126
|
+
onclick={(): void => {
|
|
127
|
+
showRaw = !showRaw;
|
|
128
|
+
}}
|
|
129
|
+
>
|
|
130
|
+
{showRaw ? '▾' : '▸'} Raw events ({events.length})
|
|
131
|
+
</Button>
|
|
132
|
+
|
|
133
|
+
{#if showRaw}
|
|
134
|
+
<div class="raw-events">
|
|
135
|
+
{#each [...events].reverse().slice(0, 50) as event (event.id)}
|
|
136
|
+
<div class="raw-event" class:summarized={event.summarized}>
|
|
137
|
+
<time>{formatRelativeTime(event.timestamp)}</time>
|
|
138
|
+
<span class="project">{event.projectName || 'Unknown'}</span>
|
|
139
|
+
<span class="type">{event.type}</span>
|
|
140
|
+
{#if event.data.tool}
|
|
141
|
+
<span class="tool">{event.data.tool}</span>
|
|
142
|
+
{/if}
|
|
143
|
+
{#if event.data.filePath}
|
|
144
|
+
<code class="file-path">{(event.data.filePath as string).slice(0, 80)}</code>
|
|
145
|
+
{/if}
|
|
146
|
+
{#if event.data.command}
|
|
147
|
+
<code>{(event.data.command as string).slice(0, 60)}</code>
|
|
148
|
+
{/if}
|
|
149
|
+
</div>
|
|
150
|
+
{/each}
|
|
151
|
+
</div>
|
|
152
|
+
{/if}
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<style>
|
|
156
|
+
.feed {
|
|
157
|
+
display: flex;
|
|
158
|
+
flex-direction: column;
|
|
159
|
+
height: 100%;
|
|
160
|
+
}
|
|
161
|
+
header {
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: var(--space-2);
|
|
165
|
+
padding: var(--space-3) 0;
|
|
166
|
+
}
|
|
167
|
+
h2 {
|
|
168
|
+
margin: 0;
|
|
169
|
+
font-size: var(--text-lg);
|
|
170
|
+
}
|
|
171
|
+
.status {
|
|
172
|
+
font-size: var(--text-xs);
|
|
173
|
+
color: var(--text-tertiary);
|
|
174
|
+
}
|
|
175
|
+
.status.live {
|
|
176
|
+
color: var(--ds-green-700);
|
|
177
|
+
}
|
|
178
|
+
.summarizing {
|
|
179
|
+
font-size: var(--text-xs);
|
|
180
|
+
color: var(--ds-amber-700);
|
|
181
|
+
}
|
|
182
|
+
.entries {
|
|
183
|
+
flex: 1;
|
|
184
|
+
overflow-y: auto;
|
|
185
|
+
}
|
|
186
|
+
.empty {
|
|
187
|
+
color: var(--text-tertiary);
|
|
188
|
+
font-size: var(--text-sm);
|
|
189
|
+
}
|
|
190
|
+
.summary-card {
|
|
191
|
+
padding: var(--space-2) var(--space-3);
|
|
192
|
+
margin-bottom: var(--space-2);
|
|
193
|
+
background: var(--component-bg);
|
|
194
|
+
border-radius: var(--radius-md);
|
|
195
|
+
border-left: 3px solid var(--ds-green-700);
|
|
196
|
+
}
|
|
197
|
+
.summary-card time {
|
|
198
|
+
font-size: var(--text-xs);
|
|
199
|
+
color: var(--text-tertiary);
|
|
200
|
+
}
|
|
201
|
+
.summary-card p {
|
|
202
|
+
margin: var(--space-1) 0 2px;
|
|
203
|
+
font-size: var(--text-sm);
|
|
204
|
+
line-height: var(--leading-normal);
|
|
205
|
+
}
|
|
206
|
+
.event-count {
|
|
207
|
+
font-size: var(--text-xs);
|
|
208
|
+
color: var(--text-tertiary);
|
|
209
|
+
}
|
|
210
|
+
.pending {
|
|
211
|
+
padding: var(--space-2) var(--space-3);
|
|
212
|
+
font-size: var(--text-xs);
|
|
213
|
+
color: var(--ds-amber-700);
|
|
214
|
+
}
|
|
215
|
+
:global(.raw-toggle) {
|
|
216
|
+
--button-color: transparent;
|
|
217
|
+
--button-text-color: var(--text-tertiary);
|
|
218
|
+
--button-hover-color: transparent;
|
|
219
|
+
--button-hover-text-color: var(--text-secondary);
|
|
220
|
+
--button-font-family: var(--font-mono);
|
|
221
|
+
--button-font-size: var(--text-xs);
|
|
222
|
+
--button-padding: var(--space-2) 0;
|
|
223
|
+
text-align: left;
|
|
224
|
+
}
|
|
225
|
+
.raw-events {
|
|
226
|
+
font-size: var(--text-xs);
|
|
227
|
+
max-height: 200px;
|
|
228
|
+
overflow-y: auto;
|
|
229
|
+
}
|
|
230
|
+
.raw-event {
|
|
231
|
+
display: flex;
|
|
232
|
+
gap: var(--space-2);
|
|
233
|
+
padding: 2px 0;
|
|
234
|
+
opacity: 1;
|
|
235
|
+
}
|
|
236
|
+
.raw-event.summarized {
|
|
237
|
+
opacity: 0.5;
|
|
238
|
+
}
|
|
239
|
+
.raw-event time {
|
|
240
|
+
color: var(--text-tertiary);
|
|
241
|
+
min-width: 60px;
|
|
242
|
+
}
|
|
243
|
+
.raw-event .project {
|
|
244
|
+
color: var(--text-tertiary);
|
|
245
|
+
min-width: 80px;
|
|
246
|
+
max-width: 120px;
|
|
247
|
+
overflow: hidden;
|
|
248
|
+
text-overflow: ellipsis;
|
|
249
|
+
white-space: nowrap;
|
|
250
|
+
}
|
|
251
|
+
.type {
|
|
252
|
+
color: var(--ds-blue-700);
|
|
253
|
+
}
|
|
254
|
+
.project-group {
|
|
255
|
+
margin-bottom: var(--space-4);
|
|
256
|
+
}
|
|
257
|
+
.project-name {
|
|
258
|
+
margin: 0 0 var(--space-2) 0;
|
|
259
|
+
font-size: var(--text-xs);
|
|
260
|
+
font-weight: 600;
|
|
261
|
+
color: var(--text-tertiary);
|
|
262
|
+
text-transform: uppercase;
|
|
263
|
+
letter-spacing: 0.5px;
|
|
264
|
+
}
|
|
265
|
+
.tool {
|
|
266
|
+
color: var(--ds-green-700);
|
|
267
|
+
}
|
|
268
|
+
.file-path {
|
|
269
|
+
color: var(--ds-amber-700);
|
|
270
|
+
max-width: 200px;
|
|
271
|
+
overflow: hidden;
|
|
272
|
+
text-overflow: ellipsis;
|
|
273
|
+
white-space: nowrap;
|
|
274
|
+
}
|
|
275
|
+
code {
|
|
276
|
+
color: var(--text-tertiary);
|
|
277
|
+
font-size: var(--text-xs);
|
|
278
|
+
}
|
|
279
|
+
</style>
|