@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
package/scripts/setup.cjs
CHANGED
|
@@ -10,7 +10,6 @@ const crypto = require('crypto');
|
|
|
10
10
|
const fs = require('fs');
|
|
11
11
|
const path = require('path');
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
// ── ANSI helpers ─────────────────────────────────────────────────────
|
|
15
14
|
const C = {
|
|
16
15
|
reset: '\x1b[0m',
|
|
@@ -52,10 +51,28 @@ function escapeForDoubleQuotedShell(s) {
|
|
|
52
51
|
return s.replace(/[\\"$`]/g, '\\$&');
|
|
53
52
|
}
|
|
54
53
|
|
|
55
|
-
// ──
|
|
56
|
-
// Produces a
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
// ── API key generator ────────────────────────────────────────────────
|
|
55
|
+
// Produces a readable key: <machinename><4 random hex chars>
|
|
56
|
+
// e.g. "sachinsharma567f"
|
|
57
|
+
// Easy to recognise, type, and remember — still unique per install.
|
|
58
|
+
function generateApiKey() {
|
|
59
|
+
const os = require('os');
|
|
60
|
+
// Take only the letters-only leading portion of the hostname — strips
|
|
61
|
+
// device serial suffixes like HCW39CV9MH which always contain digits.
|
|
62
|
+
const name =
|
|
63
|
+
os
|
|
64
|
+
.hostname()
|
|
65
|
+
.toLowerCase()
|
|
66
|
+
.replace(/\.local$/, '') // strip macOS .local suffix
|
|
67
|
+
.replace(/[^a-z0-9]/g, ' ') // turn separators into spaces
|
|
68
|
+
.trim()
|
|
69
|
+
.split(' ')
|
|
70
|
+
.filter((p) => /^[a-z]+$/.test(p)) // keep only pure-letter segments
|
|
71
|
+
.join('')
|
|
72
|
+
.slice(0, 20) || 'shooter';
|
|
73
|
+
|
|
74
|
+
const suffix = crypto.randomBytes(16).toString('hex'); // 128 bits of entropy
|
|
75
|
+
return `${name}-${suffix}`;
|
|
59
76
|
}
|
|
60
77
|
|
|
61
78
|
// ── Globals ──────────────────────────────────────────────────────────
|
|
@@ -67,6 +84,52 @@ const PUSH_MODE = process.argv.includes('--push');
|
|
|
67
84
|
|
|
68
85
|
let rl; // readline interface — created in main()
|
|
69
86
|
|
|
87
|
+
// ── AI Provider Registry ─────────────────────────────────────────────
|
|
88
|
+
const PROVIDER_REGISTRY = [
|
|
89
|
+
{
|
|
90
|
+
envKeys: ['GOOGLE_AI_API_KEY'],
|
|
91
|
+
hint: 'Get free at https://aistudio.google.com/apikey',
|
|
92
|
+
id: 'google-ai',
|
|
93
|
+
label: 'Google AI (Gemini)',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
envKeys: ['ANTHROPIC_API_KEY'],
|
|
97
|
+
hint: 'Get at https://console.anthropic.com',
|
|
98
|
+
id: 'anthropic',
|
|
99
|
+
label: 'Anthropic (Claude)',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
envKeys: ['OPENAI_API_KEY'],
|
|
103
|
+
hint: 'Get at https://platform.openai.com/api-keys',
|
|
104
|
+
id: 'openai',
|
|
105
|
+
label: 'OpenAI (GPT)',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
envKeys: ['MISTRAL_API_KEY'],
|
|
109
|
+
hint: 'Get at https://console.mistral.ai',
|
|
110
|
+
id: 'mistral',
|
|
111
|
+
label: 'Mistral',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
extraKeys: ['LITELLM_MODEL'],
|
|
115
|
+
envKeys: ['LITELLM_API_KEY', 'LITELLM_BASE_URL'],
|
|
116
|
+
hint: 'Local OpenAI-compatible proxy',
|
|
117
|
+
id: 'litellm',
|
|
118
|
+
label: 'LiteLLM (local)',
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
|
|
122
|
+
const AI_ENV_KEYS = [
|
|
123
|
+
'ANTHROPIC_API_KEY',
|
|
124
|
+
'GOOGLE_AI_API_KEY',
|
|
125
|
+
'LITELLM_API_KEY',
|
|
126
|
+
'LITELLM_BASE_URL',
|
|
127
|
+
'LITELLM_MODEL',
|
|
128
|
+
'MISTRAL_API_KEY',
|
|
129
|
+
'NEUROLINK_PROVIDER',
|
|
130
|
+
'OPENAI_API_KEY',
|
|
131
|
+
];
|
|
132
|
+
|
|
70
133
|
// ── Auto-incrementing step counter ──────────────────────────────────
|
|
71
134
|
let _stepNum = 0;
|
|
72
135
|
let _totalSteps = 5;
|
|
@@ -200,6 +263,83 @@ function validateEmail(email) {
|
|
|
200
263
|
return null;
|
|
201
264
|
}
|
|
202
265
|
|
|
266
|
+
// ── Collect AI Provider Config ───────────────────────────────────────
|
|
267
|
+
async function collectAIConfig(config) {
|
|
268
|
+
step('AI-Powered Features (Optional)');
|
|
269
|
+
console.log('');
|
|
270
|
+
console.log(' Shooter uses NeuroLink to generate AI summaries of your coding sessions.');
|
|
271
|
+
console.log(' You can configure one or more AI providers.');
|
|
272
|
+
console.log('');
|
|
273
|
+
|
|
274
|
+
if (AUTO_MODE) {
|
|
275
|
+
console.log(dim(' Skipping AI provider configuration in --auto mode.'));
|
|
276
|
+
console.log('');
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const wantAI = await confirm('Configure AI providers?');
|
|
281
|
+
if (!wantAI) {
|
|
282
|
+
console.log(' Skipped — summaries will use basic text fallback.');
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
console.log('');
|
|
287
|
+
console.log(' Available providers:');
|
|
288
|
+
PROVIDER_REGISTRY.forEach((p, i) => {
|
|
289
|
+
console.log(` ${i + 1}. ${p.label}`);
|
|
290
|
+
});
|
|
291
|
+
console.log(` ${PROVIDER_REGISTRY.length + 1}. Skip`);
|
|
292
|
+
console.log('');
|
|
293
|
+
|
|
294
|
+
let configureMore = true;
|
|
295
|
+
while (configureMore) {
|
|
296
|
+
const choice = await askRequired(
|
|
297
|
+
`Choose provider (1-${PROVIDER_REGISTRY.length + 1})`,
|
|
298
|
+
(val) => {
|
|
299
|
+
const n = parseInt(val, 10);
|
|
300
|
+
return n >= 1 && n <= PROVIDER_REGISTRY.length + 1
|
|
301
|
+
? null
|
|
302
|
+
: `Enter a number 1-${PROVIDER_REGISTRY.length + 1}`;
|
|
303
|
+
}
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
const idx = parseInt(choice, 10) - 1;
|
|
307
|
+
if (idx >= PROVIDER_REGISTRY.length) {
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const provider = PROVIDER_REGISTRY[idx];
|
|
312
|
+
console.log(` ${provider.hint}`);
|
|
313
|
+
|
|
314
|
+
for (const envKey of provider.envKeys) {
|
|
315
|
+
const value = await askRequired(`${envKey}`, (val) =>
|
|
316
|
+
val.length > 10 ? null : 'Key seems too short'
|
|
317
|
+
);
|
|
318
|
+
config[envKey] = value;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Extra optional keys (e.g., LITELLM_MODEL)
|
|
322
|
+
if (provider.extraKeys) {
|
|
323
|
+
for (const envKey of provider.extraKeys) {
|
|
324
|
+
const value = await ask(`${envKey} (Enter to skip)`);
|
|
325
|
+
if (value) {
|
|
326
|
+
config[envKey] = value;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Set as preferred provider if first one configured
|
|
332
|
+
if (!config.NEUROLINK_PROVIDER) {
|
|
333
|
+
config.NEUROLINK_PROVIDER = provider.id;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
console.log(` ✓ ${provider.label} configured`);
|
|
337
|
+
console.log('');
|
|
338
|
+
|
|
339
|
+
configureMore = await confirm('Configure another provider?');
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
203
343
|
// ── Collect configuration ────────────────────────────────────────────
|
|
204
344
|
|
|
205
345
|
// ── Collect push notification config (separate flow) ────────────────
|
|
@@ -214,13 +354,10 @@ async function collectPushConfig(config) {
|
|
|
214
354
|
|
|
215
355
|
// APNs key (.p8) — accept file path or pasted content, with retry on invalid input
|
|
216
356
|
async function askForP8Key() {
|
|
217
|
-
const apnsKeyInput = await askRequired(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
);
|
|
357
|
+
const apnsKeyInput = await askRequired(` APNS_KEY (.p8 file path or paste key): `, (val) => {
|
|
358
|
+
if (!val) return 'APNs key is required.';
|
|
359
|
+
return null;
|
|
360
|
+
});
|
|
224
361
|
|
|
225
362
|
let key;
|
|
226
363
|
|
|
@@ -239,7 +376,9 @@ async function collectPushConfig(config) {
|
|
|
239
376
|
} else {
|
|
240
377
|
// Might be a partial path or multiline paste — try multiline
|
|
241
378
|
console.log(yellow(' Input does not look like a file path or key.'));
|
|
242
|
-
console.log(
|
|
379
|
+
console.log(
|
|
380
|
+
dim(' Paste the full .p8 key contents (press Enter on empty line to finish):')
|
|
381
|
+
);
|
|
243
382
|
const lines = [apnsKeyInput];
|
|
244
383
|
while (true) {
|
|
245
384
|
const line = await ask('');
|
|
@@ -325,7 +464,9 @@ async function collectPushConfig(config) {
|
|
|
325
464
|
}
|
|
326
465
|
|
|
327
466
|
if (!config.fcmPrivateKey.includes('BEGIN')) {
|
|
328
|
-
console.log(
|
|
467
|
+
console.log(
|
|
468
|
+
yellow(' Warning: Key does not look like a PEM private key. Continuing anyway.')
|
|
469
|
+
);
|
|
329
470
|
}
|
|
330
471
|
console.log('');
|
|
331
472
|
|
|
@@ -339,6 +480,25 @@ async function collectPushConfig(config) {
|
|
|
339
480
|
console.log('');
|
|
340
481
|
}
|
|
341
482
|
|
|
483
|
+
// ── Load existing AI config from .env (preserve during re-run) ──────────
|
|
484
|
+
|
|
485
|
+
function loadExistingAIConfig(config) {
|
|
486
|
+
if (!fs.existsSync(DOT_ENV_PATH)) return;
|
|
487
|
+
const existing = fs.readFileSync(DOT_ENV_PATH, 'utf-8');
|
|
488
|
+
|
|
489
|
+
const get = (key) => {
|
|
490
|
+
const m = existing.match(new RegExp(`^${key}=["']?(.+?)["']?$`, 'm'));
|
|
491
|
+
return m ? m[1] : '';
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
for (const key of AI_ENV_KEYS) {
|
|
495
|
+
const value = get(key);
|
|
496
|
+
if (value) {
|
|
497
|
+
config[key] = value;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
342
502
|
// ── Load existing push config from .env (preserve during non-push setup) ──
|
|
343
503
|
|
|
344
504
|
function loadExistingPushConfig(config) {
|
|
@@ -408,20 +568,29 @@ async function collectConfig() {
|
|
|
408
568
|
const maskedKey = mask(config.apiKey);
|
|
409
569
|
console.log(green(` Existing API key preserved: ${maskedKey}`));
|
|
410
570
|
loadExistingPushConfig(config);
|
|
571
|
+
loadExistingAIConfig(config); // Load existing AI config in auto mode
|
|
411
572
|
if (config.wantIos || config.wantAndroid) {
|
|
412
573
|
console.log(green(' Existing push config preserved.'));
|
|
413
574
|
} else {
|
|
414
|
-
console.log(
|
|
575
|
+
console.log(
|
|
576
|
+
dim(' Push notifications not configured (add later with "shooter setup --push")')
|
|
577
|
+
);
|
|
578
|
+
}
|
|
579
|
+
if (config.NEUROLINK_PROVIDER) {
|
|
580
|
+
console.log(green(' Existing AI config preserved.'));
|
|
581
|
+
} else {
|
|
582
|
+
console.log(dim(' AI providers not configured (add later with "shooter setup")'));
|
|
415
583
|
}
|
|
416
584
|
console.log('');
|
|
417
585
|
return config;
|
|
418
586
|
}
|
|
419
587
|
}
|
|
420
588
|
|
|
421
|
-
config.apiKey =
|
|
589
|
+
config.apiKey = generateApiKey(); // Changed to generateApiKey()
|
|
422
590
|
const maskedKey = mask(config.apiKey);
|
|
423
591
|
console.log(green(` API key generated: ${maskedKey}`));
|
|
424
592
|
console.log(dim(' Push notifications not configured (add later with "shooter setup --push")'));
|
|
593
|
+
console.log(dim(' AI providers not configured (add later with "shooter setup")'));
|
|
425
594
|
console.log('');
|
|
426
595
|
return config;
|
|
427
596
|
}
|
|
@@ -432,7 +601,7 @@ async function collectConfig() {
|
|
|
432
601
|
if (apiKeyAnswer) {
|
|
433
602
|
config.apiKey = apiKeyAnswer;
|
|
434
603
|
} else {
|
|
435
|
-
config.apiKey =
|
|
604
|
+
config.apiKey = generateApiKey(); // Changed to generateApiKey()
|
|
436
605
|
const maskedKey = mask(config.apiKey);
|
|
437
606
|
console.log(green(` Generated API key: ${maskedKey}`));
|
|
438
607
|
console.log(dim(' (Saved to ~/.shooter/.env)'));
|
|
@@ -460,6 +629,10 @@ async function collectConfig() {
|
|
|
460
629
|
console.log('');
|
|
461
630
|
}
|
|
462
631
|
|
|
632
|
+
// ── AI Providers ───────────────────────────────────────────────────
|
|
633
|
+
loadExistingAIConfig(config);
|
|
634
|
+
await collectAIConfig(config);
|
|
635
|
+
|
|
463
636
|
return config;
|
|
464
637
|
}
|
|
465
638
|
|
|
@@ -471,7 +644,7 @@ function buildEnvContent(config) {
|
|
|
471
644
|
`# ${new Date().toISOString()}`,
|
|
472
645
|
'',
|
|
473
646
|
'# Authentication',
|
|
474
|
-
`API_KEY
|
|
647
|
+
`API_KEY=${config.apiKey}`,
|
|
475
648
|
'',
|
|
476
649
|
];
|
|
477
650
|
|
|
@@ -531,6 +704,17 @@ function buildEnvContent(config) {
|
|
|
531
704
|
}
|
|
532
705
|
lines.push('');
|
|
533
706
|
|
|
707
|
+
// AI / NeuroLink — preserve existing AI keys across re-runs
|
|
708
|
+
lines.push('# AI / NeuroLink');
|
|
709
|
+
for (const key of AI_ENV_KEYS) {
|
|
710
|
+
if (config[key]) {
|
|
711
|
+
lines.push(`${key}=${config[key]}`);
|
|
712
|
+
} else {
|
|
713
|
+
lines.push(`# ${key}=`);
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
lines.push('');
|
|
717
|
+
|
|
534
718
|
// Server
|
|
535
719
|
lines.push('# Server');
|
|
536
720
|
lines.push('# PORT=54007');
|
|
@@ -605,9 +789,9 @@ async function main() {
|
|
|
605
789
|
rl.close();
|
|
606
790
|
});
|
|
607
791
|
|
|
608
|
-
// Reset step counter; push mode adds one extra step
|
|
792
|
+
// Reset step counter; push mode adds one extra step, AI step adds another
|
|
609
793
|
_stepNum = 0;
|
|
610
|
-
_totalSteps =
|
|
794
|
+
_totalSteps = AUTO_MODE ? 5 : PUSH_MODE ? 7 : 6;
|
|
611
795
|
|
|
612
796
|
printBanner();
|
|
613
797
|
|
|
@@ -641,14 +825,19 @@ async function main() {
|
|
|
641
825
|
if (!cloudflaredAvailable) {
|
|
642
826
|
console.log(yellow(' cloudflared not found.'));
|
|
643
827
|
console.log(dim(' Install it to get a public URL for your phone:'));
|
|
644
|
-
console.log(
|
|
828
|
+
console.log(
|
|
829
|
+
dim(
|
|
830
|
+
' https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/'
|
|
831
|
+
)
|
|
832
|
+
);
|
|
645
833
|
console.log('');
|
|
646
834
|
console.log(dim(' Once installed, run:'));
|
|
647
835
|
console.log(cyan(' cloudflared tunnel --url http://localhost:54007'));
|
|
648
836
|
console.log('');
|
|
649
837
|
} else {
|
|
650
838
|
const port = process.env.PORT || 54007;
|
|
651
|
-
const startTunnel =
|
|
839
|
+
const startTunnel =
|
|
840
|
+
AUTO_MODE || (await confirm(' Start a Cloudflare Tunnel now to get your public URL?'));
|
|
652
841
|
if (startTunnel) {
|
|
653
842
|
console.log(dim('\n Starting tunnel... (this may take a few seconds)\n'));
|
|
654
843
|
await new Promise((resolve) => {
|
|
@@ -665,7 +854,11 @@ async function main() {
|
|
|
665
854
|
console.log(green(' Tunnel URL (use this on your phone):'));
|
|
666
855
|
console.log(`\n ${C.bold}${C.cyan}${match[0]}${C.reset}\n`);
|
|
667
856
|
console.log(dim(' Keep this terminal session open to maintain the tunnel.'));
|
|
668
|
-
console.log(
|
|
857
|
+
console.log(
|
|
858
|
+
dim(
|
|
859
|
+
' For a persistent tunnel, see: https://developers.cloudflare.com/cloudflare-one/'
|
|
860
|
+
)
|
|
861
|
+
);
|
|
669
862
|
console.log('');
|
|
670
863
|
resolve();
|
|
671
864
|
}
|
|
@@ -722,7 +915,9 @@ async function main() {
|
|
|
722
915
|
if (!config.wantIos && !config.wantAndroid) {
|
|
723
916
|
console.log(bold(' Optional add-ons:'));
|
|
724
917
|
console.log(` ${dim('Push notifications:')} ${cyan('shooter setup --push')}`);
|
|
725
|
-
console.log(
|
|
918
|
+
console.log(
|
|
919
|
+
` ${dim('Cloudflare Tunnel:')} ${cyan('shooter start')} ${dim('(auto-starts tunnel)')}`
|
|
920
|
+
);
|
|
726
921
|
console.log('');
|
|
727
922
|
} else {
|
|
728
923
|
const platforms = [];
|
|
@@ -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>
|