@juspay/shooter 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -20
- package/bin/shooter.cjs +68 -17
- 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/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/{CiF38mQq.js → Dc_Gg2H6.js} +1 -1
- package/build/client/_app/immutable/chunks/Dc_Gg2H6.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dc_Gg2H6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CRbaG9cv.js → DlnAjkg1.js} +1 -1
- package/build/client/_app/immutable/chunks/DlnAjkg1.js.br +0 -0
- package/build/client/_app/immutable/chunks/{CRbaG9cv.js.gz → DlnAjkg1.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/YKoRJzXZ.js +3 -0
- package/build/client/_app/immutable/chunks/YKoRJzXZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/YKoRJzXZ.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/entry/app.CFPgQOa8.js +2 -0
- package/build/client/_app/immutable/entry/app.CFPgQOa8.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CFPgQOa8.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BnJOVqhI.js +1 -0
- package/build/client/_app/immutable/entry/start.BnJOVqhI.js.br +2 -0
- package/build/client/_app/immutable/entry/start.BnJOVqhI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DR-BBF5r.js +1 -0
- package/build/client/_app/immutable/nodes/0.DR-BBF5r.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DR-BBF5r.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.CNm6rAwf.js +1 -0
- package/build/client/_app/immutable/nodes/1.CNm6rAwf.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.CNm6rAwf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B08usYzr.js +13 -0
- package/build/client/_app/immutable/nodes/2.B08usYzr.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B08usYzr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CsY6J5HS.js +9 -0
- package/build/client/_app/immutable/nodes/3.CsY6J5HS.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CsY6J5HS.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.CbQQ3FtZ.js +1 -0
- package/build/client/_app/immutable/nodes/6.CbQQ3FtZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CbQQ3FtZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.DIkXVP4q.js → 7.CCKgiNNk.js} +3 -3
- package/build/client/_app/immutable/nodes/7.CCKgiNNk.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CCKgiNNk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.C7AaheUD.js +2 -0
- package/build/client/_app/immutable/nodes/8.C7AaheUD.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.C7AaheUD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DfL9kMC4.js +2 -0
- package/build/client/_app/immutable/nodes/9.DfL9kMC4.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DfL9kMC4.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-DC2VLooL.js +23 -0
- package/build/server/chunks/0-DC2VLooL.js.map +1 -0
- package/build/server/chunks/1-XJaf8Jvf.js +9 -0
- package/build/server/chunks/{1-D0N7vVhH.js.map → 1-XJaf8Jvf.js.map} +1 -1
- package/build/server/chunks/2-D4Cx-1QL.js +21 -0
- package/build/server/chunks/2-D4Cx-1QL.js.map +1 -0
- package/build/server/chunks/3-CVhIEP-u.js +21 -0
- package/build/server/chunks/3-CVhIEP-u.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-QFSbzRMP.js +9 -0
- package/build/server/chunks/6-QFSbzRMP.js.map +1 -0
- package/build/server/chunks/7-CZ_YGjMV.js +9 -0
- package/build/server/chunks/7-CZ_YGjMV.js.map +1 -0
- package/build/server/chunks/8-Xe2Rugb4.js +9 -0
- package/build/server/chunks/8-Xe2Rugb4.js.map +1 -0
- package/build/server/chunks/9-IwHpC4SO.js +9 -0
- package/build/server/chunks/9-IwHpC4SO.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-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-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/{_server.ts-Deok2y88.js → _server.ts-Ds_SUGC3.js} +184 -90
- package/build/server/chunks/_server.ts-Ds_SUGC3.js.map +1 -0
- package/build/server/chunks/{_server.ts-Ch-6iOHp.js → _server.ts-G8OeADGj.js} +141 -89
- package/build/server/chunks/_server.ts-G8OeADGj.js.map +1 -0
- 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 +24 -6
- package/scripts/dev.mjs +361 -0
- package/scripts/install.sh +11 -3
- package/scripts/{fix-generated-types.sh → postgen-types.sh} +2 -2
- package/scripts/setup.cjs +219 -24
- 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 +144 -76
- 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 +190 -87
- 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/BIaXC2t9.js +0 -1
- package/build/client/_app/immutable/chunks/BIaXC2t9.js.br +0 -0
- package/build/client/_app/immutable/chunks/BIaXC2t9.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/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/CRbaG9cv.js.br +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/CiF38mQq.js.br +0 -0
- package/build/client/_app/immutable/chunks/CiF38mQq.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.CU7KVZja.js +0 -2
- package/build/client/_app/immutable/entry/app.CU7KVZja.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CU7KVZja.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.RAMZY19t.js +0 -1
- package/build/client/_app/immutable/entry/start.RAMZY19t.js.br +0 -2
- package/build/client/_app/immutable/entry/start.RAMZY19t.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Bi3XYMSu.js +0 -1
- package/build/client/_app/immutable/nodes/0.Bi3XYMSu.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Bi3XYMSu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DTmfBFmm.js +0 -1
- package/build/client/_app/immutable/nodes/1.DTmfBFmm.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DTmfBFmm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Cm269yzt.js +0 -1
- package/build/client/_app/immutable/nodes/2.Cm269yzt.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Cm269yzt.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.C25c5hMg.js +0 -1
- package/build/client/_app/immutable/nodes/4.C25c5hMg.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.C25c5hMg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.DIkXVP4q.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DIkXVP4q.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BPL-HzUX.js +0 -2
- package/build/client/_app/immutable/nodes/6.BPL-HzUX.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BPL-HzUX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.IgEqce53.js +0 -2
- package/build/client/_app/immutable/nodes/7.IgEqce53.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.IgEqce53.js.gz +0 -0
- package/build/server/chunks/0-DiORznXb.js +0 -9
- package/build/server/chunks/0-DiORznXb.js.map +0 -1
- package/build/server/chunks/1-D0N7vVhH.js +0 -9
- package/build/server/chunks/2-DfSav7a7.js +0 -9
- package/build/server/chunks/2-DfSav7a7.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-DV5MZUz_.js +0 -9
- package/build/server/chunks/4-DV5MZUz_.js.map +0 -1
- package/build/server/chunks/5-DJhoAjb0.js +0 -9
- package/build/server/chunks/5-DJhoAjb0.js.map +0 -1
- package/build/server/chunks/6-Cp8CzYbr.js +0 -9
- package/build/server/chunks/6-Cp8CzYbr.js.map +0 -1
- package/build/server/chunks/7-BA4xzUj3.js +0 -9
- package/build/server/chunks/7-BA4xzUj3.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
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type { CreateTerminalResponse } from '$
|
|
2
|
+
import type { CreateTerminalResponse, LaunchSheetProps, Preset } from '$lib/types';
|
|
3
3
|
|
|
4
4
|
import { Banner, Button, Choicebox, Input, Select } from '@juspay/svelte-ui-components';
|
|
5
5
|
import { onMount } from 'svelte';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
apiKey: string;
|
|
9
|
-
onClose: () => void;
|
|
10
|
-
onLaunch: (response: CreateTerminalResponse) => void;
|
|
11
|
-
open: boolean;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface Preset {
|
|
15
|
-
args: string[];
|
|
16
|
-
command: string;
|
|
17
|
-
label: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const { apiKey, onClose, onLaunch, open }: Props = $props();
|
|
7
|
+
const { apiKey, onClose, onLaunch, open }: LaunchSheetProps = $props();
|
|
21
8
|
|
|
22
9
|
const presets: Preset[] = [
|
|
23
10
|
{ args: [], command: 'claude', label: 'Claude Code' },
|
|
@@ -45,7 +32,7 @@
|
|
|
45
32
|
if (!response.ok) {
|
|
46
33
|
return;
|
|
47
34
|
}
|
|
48
|
-
const data
|
|
35
|
+
const data = (await response.json()) as { projects: { fullPath: string }[] };
|
|
49
36
|
const paths = data.projects
|
|
50
37
|
.map((p) => p.fullPath)
|
|
51
38
|
.filter((p): p is string => typeof p === 'string' && p.length > 0);
|
|
@@ -104,12 +91,14 @@
|
|
|
104
91
|
});
|
|
105
92
|
|
|
106
93
|
if (!response.ok) {
|
|
107
|
-
const data = await response.json().catch(() => ({}))
|
|
108
|
-
launchError =
|
|
94
|
+
const data = (await response.json().catch(() => ({}))) as Record<string, unknown>;
|
|
95
|
+
launchError =
|
|
96
|
+
(typeof data.error === 'string' ? data.error : '') ||
|
|
97
|
+
`Failed to launch (${response.status})`;
|
|
109
98
|
return;
|
|
110
99
|
}
|
|
111
100
|
|
|
112
|
-
const result
|
|
101
|
+
const result = (await response.json()) as CreateTerminalResponse;
|
|
113
102
|
onLaunch(result);
|
|
114
103
|
} catch {
|
|
115
104
|
launchError = 'Network error — is the server running?';
|
|
@@ -152,7 +141,7 @@
|
|
|
152
141
|
<Choicebox
|
|
153
142
|
mode="radio"
|
|
154
143
|
selected={selectedPreset === i}
|
|
155
|
-
onclick={() => {
|
|
144
|
+
onclick={(): void => {
|
|
156
145
|
selectPreset(i);
|
|
157
146
|
}}
|
|
158
147
|
classes="preset-choice"
|
|
@@ -171,7 +160,7 @@
|
|
|
171
160
|
: [{ id: '', label: 'No recent projects' }]}
|
|
172
161
|
value={selectedCwd ? [selectedCwd] : projectPaths.length > 0 ? [projectPaths[0]] : ['']}
|
|
173
162
|
placeholder="Select a project"
|
|
174
|
-
onchange={(value) => {
|
|
163
|
+
onchange={(value: string[]): void => {
|
|
175
164
|
selectedCwd = value[0] || '';
|
|
176
165
|
}}
|
|
177
166
|
classes="launch-select"
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
interface Props {
|
|
5
|
-
onKey: (key: string) => void;
|
|
6
|
-
}
|
|
2
|
+
import type { QuickKey, QuickKeysProps } from '$lib/types';
|
|
7
3
|
|
|
8
|
-
|
|
9
|
-
escape: string;
|
|
10
|
-
label: string;
|
|
11
|
-
}
|
|
4
|
+
import { Button } from '@juspay/svelte-ui-components';
|
|
12
5
|
|
|
13
|
-
const { onKey }:
|
|
6
|
+
const { onKey }: QuickKeysProps = $props();
|
|
14
7
|
|
|
15
8
|
const keys: QuickKey[] = [
|
|
16
9
|
{ escape: '\x03', label: 'Ctrl+C' },
|
|
@@ -27,7 +20,7 @@
|
|
|
27
20
|
{#each keys as k (k.label)}
|
|
28
21
|
<Button
|
|
29
22
|
classes="btn-quick-key"
|
|
30
|
-
onclick={() => {
|
|
23
|
+
onclick={(): void => {
|
|
31
24
|
onKey(k.escape);
|
|
32
25
|
}}
|
|
33
26
|
text={k.label}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { ShortcutsHelpProps } from '$lib/types';
|
|
3
|
+
|
|
2
4
|
import { KeyboardInput, Modal } from '@juspay/svelte-ui-components';
|
|
3
5
|
|
|
4
6
|
import { getShortcutList } from './keyboard-shortcuts';
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
onClose: () => void;
|
|
8
|
-
open: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const { onClose, open }: Props = $props();
|
|
8
|
+
const { onClose, open }: ShortcutsHelpProps = $props();
|
|
12
9
|
const shortcuts = getShortcutList();
|
|
13
10
|
</script>
|
|
14
11
|
|
|
@@ -5,17 +5,15 @@
|
|
|
5
5
|
* Uses capture-phase window keydown to intercept before xterm.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import type { ShortcutManagerOptions } from '$lib/types';
|
|
9
|
+
|
|
8
10
|
export const isMac =
|
|
9
11
|
typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent);
|
|
10
12
|
|
|
11
13
|
export const modLabel = isMac ? '⌘' : 'Ctrl';
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function createShortcutManager(options: ShortcutManagerOptions) {
|
|
18
|
-
function handler(e: KeyboardEvent) {
|
|
15
|
+
export function createShortcutManager(options: ShortcutManagerOptions): { destroy: () => void } {
|
|
16
|
+
function handler(e: KeyboardEvent): void {
|
|
19
17
|
const mod = isMac ? e.metaKey : e.ctrlKey;
|
|
20
18
|
if (!mod) {
|
|
21
19
|
return;
|
|
@@ -38,7 +36,7 @@ export function createShortcutManager(options: ShortcutManagerOptions) {
|
|
|
38
36
|
window.addEventListener('keydown', handler, true); // capture phase
|
|
39
37
|
|
|
40
38
|
return {
|
|
41
|
-
destroy() {
|
|
39
|
+
destroy(): void {
|
|
42
40
|
window.removeEventListener('keydown', handler, true);
|
|
43
41
|
},
|
|
44
42
|
};
|
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
// IMPORTANT: This module must NEVER be imported at module top level in a Svelte component.
|
|
2
2
|
// Always call createTerminal() inside onMount() only.
|
|
3
3
|
|
|
4
|
-
import type {
|
|
5
|
-
import type { Terminal } from '@xterm/xterm';
|
|
6
|
-
|
|
7
|
-
interface TerminalInstance {
|
|
8
|
-
dispose: () => void;
|
|
9
|
-
fitAddon: FitAddon | null;
|
|
10
|
-
sendInput: (data: string) => void;
|
|
11
|
-
term: Terminal;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface TerminalOptions {
|
|
15
|
-
apiKey?: string;
|
|
16
|
-
container: HTMLElement;
|
|
17
|
-
fontSize?: number;
|
|
18
|
-
getTicket: () => Promise<string>;
|
|
19
|
-
onActivity?: (active: boolean) => void;
|
|
20
|
-
onCwd?: (path: string) => void;
|
|
21
|
-
onDisconnect?: () => void;
|
|
22
|
-
onExit?: (code: number) => void;
|
|
23
|
-
onReconnect?: () => void;
|
|
24
|
-
terminalId?: string;
|
|
25
|
-
wsUrl: string;
|
|
26
|
-
}
|
|
4
|
+
import type { TerminalInstance, TerminalOptions, WsTerminalInboundMessage } from '$lib/types';
|
|
27
5
|
|
|
28
6
|
export async function createTerminal(options: TerminalOptions): Promise<TerminalInstance> {
|
|
29
7
|
// Dynamic imports — only loaded client-side
|
|
@@ -97,8 +75,8 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
97
75
|
const pasteTermId = options.terminalId;
|
|
98
76
|
const pasteApiKey = options.apiKey;
|
|
99
77
|
|
|
100
|
-
pasteListener = (e: ClipboardEvent) => {
|
|
101
|
-
void (async () => {
|
|
78
|
+
pasteListener = (e: ClipboardEvent): void => {
|
|
79
|
+
void (async (): Promise<void> => {
|
|
102
80
|
try {
|
|
103
81
|
if (!e.clipboardData) {
|
|
104
82
|
return;
|
|
@@ -117,13 +95,15 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
117
95
|
|
|
118
96
|
// Read image as base64
|
|
119
97
|
const reader = new FileReader();
|
|
120
|
-
const base64 = await new Promise<string>(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
98
|
+
const base64 = await new Promise<string>(
|
|
99
|
+
(resolve, reject: (reason?: unknown) => void) => {
|
|
100
|
+
reader.onload = (): void => {
|
|
101
|
+
resolve(reader.result as string);
|
|
102
|
+
};
|
|
103
|
+
reader.onerror = reject;
|
|
104
|
+
reader.readAsDataURL(blob);
|
|
105
|
+
}
|
|
106
|
+
);
|
|
127
107
|
|
|
128
108
|
// Upload to server
|
|
129
109
|
const res = await fetch(`/api/terminals/${pasteTermId}/paste-image`, {
|
|
@@ -154,7 +134,7 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
154
134
|
let reconnectDelay = 1000;
|
|
155
135
|
let disposed = false;
|
|
156
136
|
|
|
157
|
-
async function connect() {
|
|
137
|
+
async function connect(): Promise<void> {
|
|
158
138
|
if (disposed) {
|
|
159
139
|
return;
|
|
160
140
|
}
|
|
@@ -180,35 +160,35 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
180
160
|
|
|
181
161
|
ws = new WebSocket(`${options.wsUrl}?ticket=${ticket}`);
|
|
182
162
|
|
|
183
|
-
ws.onopen = () => {
|
|
163
|
+
ws.onopen = (): void => {
|
|
184
164
|
reconnectDelay = 1000; // Reset backoff
|
|
185
165
|
options.onReconnect?.();
|
|
186
166
|
};
|
|
187
167
|
|
|
188
|
-
ws.onmessage = (event) => {
|
|
189
|
-
const msg = JSON.parse(event.data);
|
|
168
|
+
ws.onmessage = (event: MessageEvent): void => {
|
|
169
|
+
const msg = JSON.parse(event.data as string) as WsTerminalInboundMessage;
|
|
190
170
|
if (msg.type === 'output') {
|
|
191
|
-
term.write(msg.data);
|
|
171
|
+
term.write(msg.data ?? '');
|
|
192
172
|
} else if (msg.type === 'scrollback') {
|
|
193
|
-
term.write(msg.data);
|
|
173
|
+
term.write(msg.data ?? '');
|
|
194
174
|
} else if (msg.type === 'exit') {
|
|
195
|
-
term.write(`\r\n\x1b[90m[Process exited with code ${msg.code}]\x1b[0m\r\n`);
|
|
175
|
+
term.write(`\r\n\x1b[90m[Process exited with code ${String(msg.code)}]\x1b[0m\r\n`);
|
|
196
176
|
// Process exited — stop reconnection and notify parent
|
|
197
177
|
disposed = true;
|
|
198
178
|
if (reconnectTimer) {
|
|
199
179
|
clearTimeout(reconnectTimer);
|
|
200
180
|
}
|
|
201
|
-
options.onExit?.(msg.code);
|
|
181
|
+
options.onExit?.(msg.code ?? 0);
|
|
202
182
|
} else if (msg.type === 'output-dropped') {
|
|
203
|
-
term.write(`\r\n\x1b[33m[${msg.bytes} bytes dropped]\x1b[0m\r\n`);
|
|
183
|
+
term.write(`\r\n\x1b[33m[${String(msg.bytes)} bytes dropped]\x1b[0m\r\n`);
|
|
204
184
|
} else if (msg.type === 'activity') {
|
|
205
|
-
options.onActivity?.(msg.active);
|
|
185
|
+
options.onActivity?.(msg.active ?? false);
|
|
206
186
|
} else if (msg.type === 'cwd') {
|
|
207
|
-
options.onCwd?.(msg.path);
|
|
187
|
+
options.onCwd?.(msg.path ?? '');
|
|
208
188
|
}
|
|
209
189
|
};
|
|
210
190
|
|
|
211
|
-
ws.onclose = () => {
|
|
191
|
+
ws.onclose = (): void => {
|
|
212
192
|
if (disposed) {
|
|
213
193
|
return;
|
|
214
194
|
}
|
|
@@ -231,7 +211,7 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
231
211
|
});
|
|
232
212
|
|
|
233
213
|
// Handle resize — skip when container is hidden (display:none → size 0)
|
|
234
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
214
|
+
const resizeObserver = new ResizeObserver((): void => {
|
|
235
215
|
if (!options.container.offsetWidth || !options.container.offsetHeight) {
|
|
236
216
|
return;
|
|
237
217
|
}
|
|
@@ -242,7 +222,7 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
242
222
|
});
|
|
243
223
|
resizeObserver.observe(options.container);
|
|
244
224
|
|
|
245
|
-
function dispose() {
|
|
225
|
+
function dispose(): void {
|
|
246
226
|
disposed = true;
|
|
247
227
|
if (reconnectTimer) {
|
|
248
228
|
clearTimeout(reconnectTimer);
|
|
@@ -255,7 +235,7 @@ export async function createTerminal(options: TerminalOptions): Promise<Terminal
|
|
|
255
235
|
term.dispose();
|
|
256
236
|
}
|
|
257
237
|
|
|
258
|
-
function sendInput(data: string) {
|
|
238
|
+
function sendInput(data: string): void {
|
|
259
239
|
if (ws?.readyState === WebSocket.OPEN) {
|
|
260
240
|
ws.send(JSON.stringify({ data, type: 'input' }));
|
|
261
241
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import type { LibraryResult as APNsLibraryResult, NotificationPayload } from '$lib/types';
|
|
2
|
+
|
|
1
3
|
import { env } from '$env/dynamic/private';
|
|
2
4
|
// APNs service using proven library instead of manual implementation
|
|
3
5
|
import apn from '@parse/node-apn';
|
|
4
6
|
|
|
5
|
-
import type { LibraryResult as APNsLibraryResult, NotificationPayload } from './types';
|
|
6
|
-
|
|
7
7
|
import { toErrorMessage } from '../utils/error';
|
|
8
8
|
|
|
9
9
|
export class LibraryAPNsService {
|
|
@@ -79,7 +79,10 @@ export class LibraryAPNsService {
|
|
|
79
79
|
|
|
80
80
|
notification.badge = payload.badge ?? 1;
|
|
81
81
|
notification.sound = payload.sound ?? 'default';
|
|
82
|
-
|
|
82
|
+
if (!this.bundleId) {
|
|
83
|
+
throw new Error('APNs bundleId is required but was not configured');
|
|
84
|
+
}
|
|
85
|
+
notification.topic = this.bundleId;
|
|
83
86
|
|
|
84
87
|
if (payload.category) {
|
|
85
88
|
notification.aps.category = payload.category;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// In-memory notification history store.
|
|
2
2
|
// Same pattern as pending-requests.ts — suitable for single-instance deployments.
|
|
3
3
|
|
|
4
|
-
export type { NotificationRecord } from '$
|
|
5
|
-
import type { NotificationRecord } from '$
|
|
4
|
+
export type { NotificationRecord } from '$lib/types';
|
|
5
|
+
import type { NotificationRecord } from '$lib/types';
|
|
6
6
|
|
|
7
7
|
const MAX_HISTORY = 100;
|
|
8
8
|
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Session } from '$lib/types';
|
|
2
2
|
|
|
3
3
|
import { getNotifications, type NotificationRecord } from './notification-history';
|
|
4
4
|
|
|
5
|
-
export type Session = NotificationSession;
|
|
6
|
-
|
|
7
5
|
const SESSION_GAP_MS = 30 * 60 * 1000; // 30 min gap = new session
|
|
8
6
|
const ACTIVE_THRESHOLD_MS = 5 * 60 * 1000; // active if last event < 5 min ago
|
|
9
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Shared in-memory store for pending permission requests.
|
|
2
2
|
// Used by /api/notify (creates entries) and /api/response (reads/updates).
|
|
3
3
|
|
|
4
|
-
import type { PendingRequest } from '$
|
|
4
|
+
import type { PendingRequest } from '$lib/types';
|
|
5
5
|
|
|
6
6
|
export type { PendingRequest };
|
|
7
7
|
|
|
@@ -1,52 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
ErrorData,
|
|
4
|
-
LibraryFailedItem,
|
|
5
|
-
LibrarySentItem,
|
|
6
|
-
RawResponse,
|
|
7
|
-
SentDetail,
|
|
8
|
-
} from '$generated/types';
|
|
9
|
-
|
|
10
|
-
// Composite types built from generated primitives. These use arrays and
|
|
11
|
-
// union constructs that type-crafter does not emit, so they stay as local
|
|
12
|
-
// definitions.
|
|
13
|
-
|
|
14
|
-
export interface LibraryResult {
|
|
15
|
-
failed: LibraryFailedItem[];
|
|
16
|
-
sent: LibrarySentItem[];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface NotificationPayload {
|
|
20
|
-
badge: null | number;
|
|
21
|
-
body: null | string;
|
|
22
|
-
category?: null | string;
|
|
23
|
-
data: null | Record<string, unknown>;
|
|
24
|
-
message: null | string;
|
|
25
|
-
sound: null | string;
|
|
26
|
-
title: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface NotificationResult {
|
|
30
|
-
apnsId: null | string;
|
|
31
|
-
details: null | SentDetail[];
|
|
32
|
-
error: ErrorData | null | string;
|
|
33
|
-
errorData: ErrorData | null;
|
|
34
|
-
errors: APNsError[] | null;
|
|
35
|
-
failed: number;
|
|
36
|
-
headers: null | Record<string, unknown>;
|
|
37
|
-
response: null | RawResponse;
|
|
38
|
-
responseBody: null | string;
|
|
39
|
-
sent: number;
|
|
40
|
-
status: null | number;
|
|
41
|
-
statusCode: null | number;
|
|
42
|
-
success: boolean;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export type {
|
|
46
|
-
APNsError as Error,
|
|
47
|
-
ErrorData,
|
|
48
|
-
LibraryFailedItem,
|
|
49
|
-
LibrarySentItem,
|
|
50
|
-
RawResponse,
|
|
51
|
-
SentDetail,
|
|
52
|
-
};
|
|
1
|
+
// All APNs composite types have been moved to $lib/types/apn.ts.
|
|
2
|
+
// Import from '$lib/types' instead of this file.
|
|
@@ -1,35 +1,6 @@
|
|
|
1
|
-
import type { Options as CLIOptions } from '$
|
|
1
|
+
import type { CLICommand, Options as CLIOptions, CLIResult } from '$lib/types';
|
|
2
2
|
|
|
3
3
|
export { CLIRunner, createRunner, sleep } from './runner';
|
|
4
|
-
export type { ExitCallback, OutputCallback } from './runner';
|
|
5
|
-
|
|
6
|
-
// Types generated by type-crafter
|
|
7
|
-
export type { CLIOptions };
|
|
8
|
-
|
|
9
|
-
// Types defined in YAML spec (cli.yaml) but not generated by type-crafter
|
|
10
|
-
// because they contain $ref or array constructs.
|
|
11
|
-
// TODO: Remove once type-crafter supports these constructs.
|
|
12
|
-
export interface CLICommand {
|
|
13
|
-
args: string[];
|
|
14
|
-
name: string;
|
|
15
|
-
options: CLIOptions;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface CLIResult {
|
|
19
|
-
error: null | string;
|
|
20
|
-
exitCode: number;
|
|
21
|
-
output: null | string;
|
|
22
|
-
success: boolean;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface CLIRunnerConfig {
|
|
26
|
-
args: null | string[];
|
|
27
|
-
cols: null | number;
|
|
28
|
-
command: string;
|
|
29
|
-
cwd: null | string;
|
|
30
|
-
rows: null | number;
|
|
31
|
-
useLoginShell: boolean | null;
|
|
32
|
-
}
|
|
33
4
|
|
|
34
5
|
const DEFAULT_OPTIONS: CLIOptions = {
|
|
35
6
|
dryRun: false,
|
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import type {
|
|
2
|
+
CLIRunnerConfig,
|
|
3
|
+
ExitCallback,
|
|
4
|
+
CLIRunnerInternalConfig as InternalConfig,
|
|
5
|
+
OutputCallback,
|
|
6
|
+
} from '$lib/types';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
args: string[];
|
|
10
|
-
cols: number;
|
|
11
|
-
command: string;
|
|
12
|
-
cwd: string;
|
|
13
|
-
env: NodeJS.ProcessEnv;
|
|
14
|
-
rows: number;
|
|
15
|
-
useLoginShell: boolean;
|
|
16
|
-
}
|
|
8
|
+
import pty, { type IPty } from 'node-pty';
|
|
17
9
|
|
|
18
10
|
export class CLIRunner {
|
|
19
11
|
private config: InternalConfig;
|