@juspay/shooter 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/_app/immutable/assets/{0.NV8k8wxG.css → 0.BwNtE8TX.css} +1 -1
- package/build/client/_app/immutable/assets/0.BwNtE8TX.css.br +0 -0
- package/build/client/_app/immutable/assets/{0.NV8k8wxG.css.gz → 0.BwNtE8TX.css.gz} +0 -0
- package/build/client/_app/immutable/assets/8.BYgAX7hR.css +1 -0
- package/build/client/_app/immutable/assets/8.BYgAX7hR.css.br +0 -0
- package/build/client/_app/immutable/assets/8.BYgAX7hR.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.DV6pZunn.css +1 -0
- package/build/client/_app/immutable/assets/9.DV6pZunn.css.br +0 -0
- package/build/client/_app/immutable/assets/9.DV6pZunn.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{DZQMsHM5.js → 2rBV5OkJ.js} +1 -1
- package/build/client/_app/immutable/chunks/2rBV5OkJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/2rBV5OkJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B9WQy_3X.js → BB2l8o4X.js} +1 -1
- package/build/client/_app/immutable/chunks/BB2l8o4X.js.br +0 -0
- package/build/client/_app/immutable/chunks/BB2l8o4X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cg3dlX05.js → BPDiEZo0.js} +2 -2
- package/build/client/_app/immutable/chunks/BPDiEZo0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BPDiEZo0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C_9BZILB.js → BcpydfqI.js} +1 -1
- package/build/client/_app/immutable/chunks/BcpydfqI.js.br +0 -0
- package/build/client/_app/immutable/chunks/BcpydfqI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{nWG9RHyB.js → BcqA7eKM.js} +2 -2
- package/build/client/_app/immutable/chunks/BcqA7eKM.js.br +0 -0
- package/build/client/_app/immutable/chunks/BcqA7eKM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BRqaaL5D.js → BvmdJful.js} +1 -1
- package/build/client/_app/immutable/chunks/BvmdJful.js.br +0 -0
- package/build/client/_app/immutable/chunks/BvmdJful.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C5VOyQCG.js → ClIPTXf3.js} +1 -1
- package/build/client/_app/immutable/chunks/ClIPTXf3.js.br +0 -0
- package/build/client/_app/immutable/chunks/ClIPTXf3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{8lO1IL7u.js → DA4Zt9Me.js} +1 -1
- package/build/client/_app/immutable/chunks/DA4Zt9Me.js.br +0 -0
- package/build/client/_app/immutable/chunks/{8lO1IL7u.js.gz → DA4Zt9Me.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/{DJvX78LW.js → DCDL_9ys.js} +1 -1
- package/build/client/_app/immutable/chunks/DCDL_9ys.js.br +0 -0
- package/build/client/_app/immutable/chunks/DCDL_9ys.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DYuMZGL5.js → DWmC0QM7.js} +1 -1
- package/build/client/_app/immutable/chunks/DWmC0QM7.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWmC0QM7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DZvnhU_8.js → ZS5XYDx_.js} +2 -2
- package/build/client/_app/immutable/chunks/ZS5XYDx_.js.br +0 -0
- package/build/client/_app/immutable/chunks/ZS5XYDx_.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.D4TXlu7A.js +2 -0
- package/build/client/_app/immutable/entry/app.D4TXlu7A.js.br +0 -0
- package/build/client/_app/immutable/entry/app.D4TXlu7A.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BBQhtURO.js +1 -0
- package/build/client/_app/immutable/entry/start.BBQhtURO.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BBQhtURO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.1zylwAPT.js +10 -0
- package/build/client/_app/immutable/nodes/0.1zylwAPT.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.1zylwAPT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.C4eFlqSB.js → 1.BVnLUSs-.js} +1 -1
- package/build/client/_app/immutable/nodes/1.BVnLUSs-.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BVnLUSs-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.Bs362gyb.js → 10.D1wl2wPX.js} +2 -2
- package/build/client/_app/immutable/nodes/10.D1wl2wPX.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.D1wl2wPX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.Cf7_3uqT.js → 11.C18nMGmp.js} +1 -1
- package/build/client/_app/immutable/nodes/11.C18nMGmp.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.C18nMGmp.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.CdC092Za.js → 2.D1Mm0DUX.js} +2 -2
- package/build/client/_app/immutable/nodes/2.D1Mm0DUX.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.D1Mm0DUX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.Dhf4ZWW0.js → 3.Wfz3TcJd.js} +3 -3
- package/build/client/_app/immutable/nodes/3.Wfz3TcJd.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Wfz3TcJd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.BSVqdrrD.js → 4.CBX9A3ka.js} +2 -2
- package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.Cfj35gpY.js → 5.DIVKuZc9.js} +1 -1
- package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.B3SEB_li.js → 6.DtZAEPXb.js} +1 -1
- package/build/client/_app/immutable/nodes/6.DtZAEPXb.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DtZAEPXb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.DV8cJ1lX.js → 7.MfBRh32I.js} +1 -1
- package/build/client/_app/immutable/nodes/7.MfBRh32I.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.MfBRh32I.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.DVE6LnOC.js +1 -0
- package/build/client/_app/immutable/nodes/8.DVE6LnOC.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DVE6LnOC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.BCel5OqI.js +2 -0
- package/build/client/_app/immutable/nodes/9.BCel5OqI.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BCel5OqI.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-Cd7jY0a7.js → 0-DJqyZZTr.js} +4 -4
- package/build/server/chunks/{0-Cd7jY0a7.js.map → 0-DJqyZZTr.js.map} +1 -1
- package/build/server/chunks/1-2YUVen1F.js +9 -0
- package/build/server/chunks/{1-C4BOGoJY.js.map → 1-2YUVen1F.js.map} +1 -1
- package/build/server/chunks/10-D1X7LB3v.js +9 -0
- package/build/server/chunks/10-D1X7LB3v.js.map +1 -0
- package/build/server/chunks/11-qXSPdF5j.js +9 -0
- package/build/server/chunks/11-qXSPdF5j.js.map +1 -0
- package/build/server/chunks/{2-Ba0mNwJ6.js → 2-BD7kj1mt.js} +3 -3
- package/build/server/chunks/{2-Ba0mNwJ6.js.map → 2-BD7kj1mt.js.map} +1 -1
- package/build/server/chunks/{3-Pg8t1uJU.js → 3-oNjv-BhZ.js} +3 -3
- package/build/server/chunks/{3-Pg8t1uJU.js.map → 3-oNjv-BhZ.js.map} +1 -1
- package/build/server/chunks/{4-BtYdKCVW.js → 4-Bb5VFhsO.js} +3 -3
- package/build/server/chunks/{4-BtYdKCVW.js.map → 4-Bb5VFhsO.js.map} +1 -1
- package/build/server/chunks/{5-CvJK3PiH.js → 5-oNoWuIsn.js} +3 -3
- package/build/server/chunks/{5-CvJK3PiH.js.map → 5-oNoWuIsn.js.map} +1 -1
- package/build/server/chunks/6-DRJGUqHG.js +9 -0
- package/build/server/chunks/{6-D8xbnTSo.js.map → 6-DRJGUqHG.js.map} +1 -1
- package/build/server/chunks/7-_giJiu0L.js +9 -0
- package/build/server/chunks/{7-CkVK06S0.js.map → 7-_giJiu0L.js.map} +1 -1
- package/build/server/chunks/8-zvWAVNT5.js +9 -0
- package/build/server/chunks/8-zvWAVNT5.js.map +1 -0
- package/build/server/chunks/9-DVyDL445.js +9 -0
- package/build/server/chunks/9-DVyDL445.js.map +1 -0
- package/build/server/chunks/Banner-BgaAs1rs.js +90 -0
- package/build/server/chunks/Banner-BgaAs1rs.js.map +1 -0
- package/build/server/chunks/{Button-B5dU-ntz.js → Button-D0hZ7JYt.js} +2 -2
- package/build/server/chunks/Button-D0hZ7JYt.js.map +1 -0
- package/build/server/chunks/{Icon-C7Ml3GX6.js → Icon-D0GBnDcs.js} +3 -3
- package/build/server/chunks/Icon-D0GBnDcs.js.map +1 -0
- package/build/server/chunks/{Input-CPGO0sbS.js → Input-OmIiydSx.js} +2 -2
- package/build/server/chunks/Input-OmIiydSx.js.map +1 -0
- package/build/server/chunks/{Pill-CcrtCejm.js → Pill-4xJ-VhAA.js} +3 -3
- package/build/server/chunks/Pill-4xJ-VhAA.js.map +1 -0
- package/build/server/chunks/{Shimmer-C5jkvGr1.js → Shimmer-Dw2uvTC1.js} +2 -2
- package/build/server/chunks/Shimmer-Dw2uvTC1.js.map +1 -0
- package/build/server/chunks/{_error.svelte-CSIxs-ab.js → _error.svelte-CZnkxeLr.js} +8 -8
- package/build/server/chunks/{_error.svelte-CSIxs-ab.js.map → _error.svelte-CZnkxeLr.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-noB4j-v2.js → _layout.svelte-DfgNGGiM.js} +16 -11
- package/build/server/chunks/_layout.svelte-DfgNGGiM.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DnTpPnPR.js → _page.svelte-BLo2v_8E.js} +7 -88
- package/build/server/chunks/_page.svelte-BLo2v_8E.js.map +1 -0
- package/build/server/chunks/_page.svelte-BTlfUsBp.js +43 -0
- package/build/server/chunks/_page.svelte-BTlfUsBp.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C60lAagP.js → _page.svelte-BUBLUSGo.js} +8 -8
- package/build/server/chunks/_page.svelte-BUBLUSGo.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BV0XyYJZ.js → _page.svelte-BX2FMgSg.js} +4 -4
- package/build/server/chunks/{_page.svelte-BV0XyYJZ.js.map → _page.svelte-BX2FMgSg.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BUkm2304.js → _page.svelte-C7B0qdrC.js} +5 -5
- package/build/server/chunks/{_page.svelte-BUkm2304.js.map → _page.svelte-C7B0qdrC.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Dmg-RFCg.js → _page.svelte-CE7COWnF.js} +7 -7
- package/build/server/chunks/{_page.svelte-Dmg-RFCg.js.map → _page.svelte-CE7COWnF.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BfB8maoc.js → _page.svelte-CWsjjd4l.js} +9 -9
- package/build/server/chunks/{_page.svelte-BfB8maoc.js.map → _page.svelte-CWsjjd4l.js.map} +1 -1
- package/build/server/chunks/_page.svelte-D5S2hkBk.js +104 -0
- package/build/server/chunks/_page.svelte-D5S2hkBk.js.map +1 -0
- package/build/server/chunks/{_page.svelte-B6qyh-K-.js → _page.svelte-D_Ey8QRG.js} +11 -11
- package/build/server/chunks/{_page.svelte-B6qyh-K-.js.map → _page.svelte-D_Ey8QRG.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DuzZr5dA.js → _page.svelte-tBuIq8Pg.js} +11 -11
- package/build/server/chunks/{_page.svelte-DuzZr5dA.js.map → _page.svelte-tBuIq8Pg.js.map} +1 -1
- package/build/server/chunks/_server.ts-BaaY7Z9D.js +77 -0
- package/build/server/chunks/_server.ts-BaaY7Z9D.js.map +1 -0
- package/build/server/chunks/{_server.ts-Bu3s5hfv.js → _server.ts-Bi0Oe4PF.js} +6 -3
- package/build/server/chunks/_server.ts-Bi0Oe4PF.js.map +1 -0
- package/build/server/chunks/_server.ts-C0317RBD.js +57 -0
- package/build/server/chunks/_server.ts-C0317RBD.js.map +1 -0
- package/build/server/chunks/{_server.ts-CwAjt91u.js → _server.ts-CRVNEOd2.js} +5 -3
- package/build/server/chunks/{_server.ts-CwAjt91u.js.map → _server.ts-CRVNEOd2.js.map} +1 -1
- package/build/server/chunks/_server.ts-CVPZOpiv.js +23 -0
- package/build/server/chunks/_server.ts-CVPZOpiv.js.map +1 -0
- package/build/server/chunks/{_server.ts-CyjDrcZN.js → _server.ts-C_OOUqsd.js} +9 -1
- package/build/server/chunks/_server.ts-C_OOUqsd.js.map +1 -0
- package/build/server/chunks/{_server.ts-DZgfQKiH.js → _server.ts-D9ir7u24.js} +2 -2
- package/build/server/chunks/{_server.ts-DZgfQKiH.js.map → _server.ts-D9ir7u24.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DZ5naqSL.js → _server.ts-DMm0hBP4.js} +5 -1
- package/build/server/chunks/_server.ts-DMm0hBP4.js.map +1 -0
- package/build/server/chunks/{_server.ts-DZP2lhaY.js → _server.ts-DhJx0DLr.js} +6 -3
- package/build/server/chunks/_server.ts-DhJx0DLr.js.map +1 -0
- package/build/server/chunks/_server.ts-DkZX_O9a.js +39 -0
- package/build/server/chunks/_server.ts-DkZX_O9a.js.map +1 -0
- package/build/server/chunks/{_server.ts-BA_uWcPw.js → _server.ts-DxT9IlZF.js} +5 -3
- package/build/server/chunks/_server.ts-DxT9IlZF.js.map +1 -0
- package/build/server/chunks/_server.ts-Mttr0-Sl.js +48 -0
- package/build/server/chunks/_server.ts-Mttr0-Sl.js.map +1 -0
- package/build/server/chunks/_server.ts-jtqWDWcf.js +45 -0
- package/build/server/chunks/_server.ts-jtqWDWcf.js.map +1 -0
- package/build/server/chunks/{cache-Me3zUAaD.js → cache-BlMaDsHi.js} +2 -2
- package/build/server/chunks/{cache-Me3zUAaD.js.map → cache-BlMaDsHi.js.map} +1 -1
- package/build/server/chunks/{client-CfNnl32g.js → client-Ds1brw-8.js} +4 -4
- package/build/server/chunks/{client-CfNnl32g.js.map → client-Ds1brw-8.js.map} +1 -1
- package/build/server/chunks/client2-DngLdcUc.js +7 -0
- package/build/server/chunks/{client2-DDP30_vY.js.map → client2-DngLdcUc.js.map} +1 -1
- package/build/server/chunks/coordinator-DMU_ADXf.js +530 -0
- package/build/server/chunks/coordinator-DMU_ADXf.js.map +1 -0
- package/build/server/chunks/{index-CJrGuxuM.js → index-CoYB03g7.js} +2 -2
- package/build/server/chunks/{index-CJrGuxuM.js.map → index-CoYB03g7.js.map} +1 -1
- package/build/server/chunks/{index-server--49oHtA0.js → index-server-Bq3cnK69.js} +2 -2
- package/build/server/chunks/{index-server--49oHtA0.js.map → index-server-Bq3cnK69.js.map} +1 -1
- package/build/server/chunks/{index2-MY7PXeAc.js → index2-dSGQ9Eaa.js} +2 -2
- package/build/server/chunks/{index2-MY7PXeAc.js.map → index2-dSGQ9Eaa.js.map} +1 -1
- package/build/server/chunks/{pty-manager-DmNSCKAr.js → pty-manager-41h3IK8K.js} +2 -1
- package/build/server/chunks/pty-manager-41h3IK8K.js.map +1 -0
- package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -1
- package/build/server/chunks/{registry-Kcw2UCMv.js → registry-D4J_CuzW.js} +2 -2
- package/build/server/chunks/registry-D4J_CuzW.js.map +1 -0
- package/build/server/chunks/{root-xvQIR1Bt.js → root-D4IoFC8F.js} +2 -2
- package/build/server/chunks/root-D4IoFC8F.js.map +1 -0
- package/build/server/chunks/{state.svelte-RCtlkrNH.js → state.svelte-CmHqngc_.js} +3 -3
- package/build/server/chunks/{state.svelte-RCtlkrNH.js.map → state.svelte-CmHqngc_.js.map} +1 -1
- package/build/server/chunks/{stores-C-LqoonT.js → stores-CRYxfF0o.js} +4 -4
- package/build/server/chunks/stores-CRYxfF0o.js.map +1 -0
- package/build/server/chunks/super-session-handler-DPyxFgmz.js +22 -0
- package/build/server/chunks/super-session-handler-DPyxFgmz.js.map +1 -0
- package/build/server/index.js +4 -4
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +78 -20
- package/build/server/manifest.js.map +1 -1
- package/package.json +2 -2
- package/scripts/e2e-all-features.sh +41 -2
- package/server.ts +25 -0
- package/src/lib/modules/server/sos/coordinator.ts +492 -0
- package/src/lib/modules/server/sos/policy-gate.ts +56 -0
- package/src/lib/modules/server/sos/relay-store.ts +159 -0
- package/src/lib/modules/server/terminal/pty-input.ts +37 -0
- package/src/lib/modules/server/ws/server.ts +6 -1
- package/src/lib/modules/server/ws/session-handler.ts +6 -1
- package/src/lib/modules/server/ws/super-session-handler.ts +200 -0
- package/src/lib/types/index.ts +2 -1
- package/src/lib/types/sos.ts +134 -0
- package/src/routes/+layout.svelte +9 -2
- package/src/routes/api/sos/+server.ts +36 -0
- package/src/routes/api/sos/[id]/+server.ts +55 -0
- package/src/routes/api/sos/[id]/inject/+server.ts +44 -0
- package/src/routes/api/sos/[id]/members/+server.ts +47 -0
- package/src/routes/api/sos/[id]/members/[mid]/+server.ts +17 -0
- package/src/routes/api/sos/[id]/rules/+server.ts +85 -0
- package/src/routes/sos/+page.svelte +195 -0
- package/src/routes/sos/[id]/+page.svelte +677 -0
- package/build/client/_app/immutable/assets/0.NV8k8wxG.css.br +0 -0
- package/build/client/_app/immutable/chunks/8lO1IL7u.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9WQy_3X.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9WQy_3X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BRqaaL5D.js.br +0 -0
- package/build/client/_app/immutable/chunks/BRqaaL5D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C5VOyQCG.js.br +0 -0
- package/build/client/_app/immutable/chunks/C5VOyQCG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C_9BZILB.js.br +0 -0
- package/build/client/_app/immutable/chunks/C_9BZILB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cg3dlX05.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cg3dlX05.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJvX78LW.js.br +0 -0
- package/build/client/_app/immutable/chunks/DJvX78LW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DYuMZGL5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYuMZGL5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DZQMsHM5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DZQMsHM5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DZvnhU_8.js.br +0 -0
- package/build/client/_app/immutable/chunks/DZvnhU_8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/nWG9RHyB.js.br +0 -0
- package/build/client/_app/immutable/chunks/nWG9RHyB.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.f46Ko1hu.js +0 -2
- package/build/client/_app/immutable/entry/app.f46Ko1hu.js.br +0 -0
- package/build/client/_app/immutable/entry/app.f46Ko1hu.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BVDjNnXt.js +0 -1
- package/build/client/_app/immutable/entry/start.BVDjNnXt.js.br +0 -2
- package/build/client/_app/immutable/entry/start.BVDjNnXt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D_9EwVmq.js +0 -7
- package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CdC092Za.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CdC092Za.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.B3SEB_li.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.B3SEB_li.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Bs362gyb.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Bs362gyb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.gz +0 -0
- package/build/server/chunks/1-C4BOGoJY.js +0 -9
- package/build/server/chunks/6-D8xbnTSo.js +0 -9
- package/build/server/chunks/7-CkVK06S0.js +0 -9
- package/build/server/chunks/8-C8qVhrds.js +0 -9
- package/build/server/chunks/8-C8qVhrds.js.map +0 -1
- package/build/server/chunks/9-fL5zqN0T.js +0 -9
- package/build/server/chunks/9-fL5zqN0T.js.map +0 -1
- package/build/server/chunks/Button-B5dU-ntz.js.map +0 -1
- package/build/server/chunks/Icon-C7Ml3GX6.js.map +0 -1
- package/build/server/chunks/Input-CPGO0sbS.js.map +0 -1
- package/build/server/chunks/Pill-CcrtCejm.js.map +0 -1
- package/build/server/chunks/Shimmer-C5jkvGr1.js.map +0 -1
- package/build/server/chunks/_layout.svelte-noB4j-v2.js.map +0 -1
- package/build/server/chunks/_page.svelte-C60lAagP.js.map +0 -1
- package/build/server/chunks/_page.svelte-DnTpPnPR.js.map +0 -1
- package/build/server/chunks/_server.ts-BA_uWcPw.js.map +0 -1
- package/build/server/chunks/_server.ts-Bu3s5hfv.js.map +0 -1
- package/build/server/chunks/_server.ts-CyjDrcZN.js.map +0 -1
- package/build/server/chunks/_server.ts-DZ5naqSL.js.map +0 -1
- package/build/server/chunks/_server.ts-DZP2lhaY.js.map +0 -1
- package/build/server/chunks/client2-DDP30_vY.js +0 -7
- package/build/server/chunks/pty-manager-DmNSCKAr.js.map +0 -1
- package/build/server/chunks/registry-Kcw2UCMv.js.map +0 -1
- package/build/server/chunks/root-xvQIR1Bt.js.map +0 -1
- package/build/server/chunks/stores-C-LqoonT.js.map +0 -1
- /package/build/client/_app/immutable/assets/{8.BhoBXADL.css → 10.BhoBXADL.css} +0 -0
- /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.br → 10.BhoBXADL.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.gz → 10.BhoBXADL.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{9.v5KA95xm.css → 11.v5KA95xm.css} +0 -0
- /package/build/client/_app/immutable/assets/{9.v5KA95xm.css.br → 11.v5KA95xm.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{9.v5KA95xm.css.gz → 11.v5KA95xm.css.gz} +0 -0
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import { randomBytes } from 'crypto';
|
|
2
|
+
import Database from 'better-sqlite3';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
|
|
7
|
+
function evaluateRelayRule(rules, fromMemberId, text) {
|
|
8
|
+
const ordered = [...rules].sort((a, b) => a.priority - b.priority);
|
|
9
|
+
for (const rule of ordered) {
|
|
10
|
+
if (rule.fromMemberId !== "ANY" && rule.fromMemberId !== fromMemberId) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
if (rule.toMemberId === fromMemberId) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (!matchesPattern(text, rule.matchPattern)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
return rule;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function isValidRoutingRule(rule) {
|
|
24
|
+
return rule.toMemberId !== "ANY" && rule.fromMemberId !== rule.toMemberId;
|
|
25
|
+
}
|
|
26
|
+
function matchesPattern(text, pattern) {
|
|
27
|
+
if (!pattern) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return text.toLowerCase().includes(pattern.toLowerCase());
|
|
31
|
+
}
|
|
32
|
+
const DB_DIR = path.join(os.homedir(), ".shooter");
|
|
33
|
+
const DB_PATH = path.join(DB_DIR, "shooter.db");
|
|
34
|
+
class RelayStore {
|
|
35
|
+
db;
|
|
36
|
+
constructor() {
|
|
37
|
+
fs.mkdirSync(DB_DIR, { recursive: true });
|
|
38
|
+
this.db = new Database(DB_PATH);
|
|
39
|
+
this.db.pragma("journal_mode = WAL");
|
|
40
|
+
this.db.exec(`
|
|
41
|
+
CREATE TABLE IF NOT EXISTS super_sessions (
|
|
42
|
+
id TEXT PRIMARY KEY,
|
|
43
|
+
label TEXT NOT NULL,
|
|
44
|
+
routing_rules TEXT NOT NULL DEFAULT '[]',
|
|
45
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
46
|
+
created_at TEXT NOT NULL
|
|
47
|
+
);
|
|
48
|
+
CREATE TABLE IF NOT EXISTS sos_sessions (
|
|
49
|
+
id TEXT PRIMARY KEY,
|
|
50
|
+
super_session_id TEXT NOT NULL,
|
|
51
|
+
session_key TEXT NOT NULL,
|
|
52
|
+
terminal_id TEXT,
|
|
53
|
+
provider TEXT NOT NULL,
|
|
54
|
+
capability TEXT NOT NULL DEFAULT '',
|
|
55
|
+
status TEXT NOT NULL DEFAULT 'Idle',
|
|
56
|
+
registered_at TEXT NOT NULL
|
|
57
|
+
);
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_sos_sessions_super ON sos_sessions(super_session_id);
|
|
59
|
+
`);
|
|
60
|
+
}
|
|
61
|
+
addMember(superSessionId, member) {
|
|
62
|
+
this.db.prepare(
|
|
63
|
+
`INSERT OR REPLACE INTO sos_sessions
|
|
64
|
+
(id, super_session_id, session_key, terminal_id, provider, capability, status, registered_at)
|
|
65
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`
|
|
66
|
+
).run(
|
|
67
|
+
member.id,
|
|
68
|
+
superSessionId,
|
|
69
|
+
member.sessionKey,
|
|
70
|
+
member.terminalId,
|
|
71
|
+
member.provider,
|
|
72
|
+
member.capability,
|
|
73
|
+
member.status,
|
|
74
|
+
member.registeredAt
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
createSuperSession(session) {
|
|
78
|
+
this.db.prepare(
|
|
79
|
+
`INSERT OR REPLACE INTO super_sessions (id, label, routing_rules, status, created_at)
|
|
80
|
+
VALUES (?, ?, ?, ?, ?)`
|
|
81
|
+
).run(
|
|
82
|
+
session.id,
|
|
83
|
+
session.label,
|
|
84
|
+
JSON.stringify(session.routingRules),
|
|
85
|
+
session.status,
|
|
86
|
+
session.createdAt
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
deleteSuperSession(id) {
|
|
90
|
+
const tx = this.db.transaction((sid) => {
|
|
91
|
+
this.db.prepare("DELETE FROM sos_sessions WHERE super_session_id = ?").run(sid);
|
|
92
|
+
this.db.prepare("DELETE FROM super_sessions WHERE id = ?").run(sid);
|
|
93
|
+
});
|
|
94
|
+
tx(id);
|
|
95
|
+
}
|
|
96
|
+
/** Rebuild every persisted super-session (members included, transcript empty). */
|
|
97
|
+
loadAll() {
|
|
98
|
+
const rows = this.db.prepare("SELECT * FROM super_sessions").all();
|
|
99
|
+
return rows.map((row) => {
|
|
100
|
+
const id = row.id;
|
|
101
|
+
const memberRows = this.db.prepare("SELECT * FROM sos_sessions WHERE super_session_id = ? ORDER BY registered_at").all(id);
|
|
102
|
+
return {
|
|
103
|
+
createdAt: row.created_at,
|
|
104
|
+
id,
|
|
105
|
+
label: row.label,
|
|
106
|
+
members: memberRows.map(rowToMember),
|
|
107
|
+
routingRules: safeParseRules(row.routing_rules),
|
|
108
|
+
status: row.status,
|
|
109
|
+
transcript: []
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
removeMember(memberId) {
|
|
114
|
+
this.db.prepare("DELETE FROM sos_sessions WHERE id = ?").run(memberId);
|
|
115
|
+
}
|
|
116
|
+
updateMemberStatus(memberId, status) {
|
|
117
|
+
this.db.prepare("UPDATE sos_sessions SET status = ? WHERE id = ?").run(status, memberId);
|
|
118
|
+
}
|
|
119
|
+
updateSuperSessionStatus(id, status) {
|
|
120
|
+
this.db.prepare("UPDATE super_sessions SET status = ? WHERE id = ?").run(status, id);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function rowToMember(row) {
|
|
124
|
+
return {
|
|
125
|
+
capability: row.capability ?? "",
|
|
126
|
+
id: row.id,
|
|
127
|
+
provider: row.provider,
|
|
128
|
+
registeredAt: row.registered_at,
|
|
129
|
+
sessionKey: row.session_key,
|
|
130
|
+
status: row.status,
|
|
131
|
+
terminalId: row.terminal_id ?? null
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function safeParseRules(raw) {
|
|
135
|
+
if (typeof raw !== "string") {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
const parsed = JSON.parse(raw);
|
|
140
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
141
|
+
} catch {
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const RS_GLOBAL_KEY = "__shooter_relay_store";
|
|
146
|
+
const relayStore = globalThis[RS_GLOBAL_KEY] || new RelayStore();
|
|
147
|
+
globalThis[RS_GLOBAL_KEY] = relayStore;
|
|
148
|
+
const MAX_TRANSCRIPT = 500;
|
|
149
|
+
const MAX_LABEL_LEN = 200;
|
|
150
|
+
const RELAY_COOLDOWN_MS = 5e3;
|
|
151
|
+
const ESCALATE_TIMEOUT_MS = 12e4;
|
|
152
|
+
const MAX_RELAY_TEXT = 10240;
|
|
153
|
+
class SuperSessionCoordinator {
|
|
154
|
+
injector = null;
|
|
155
|
+
runtimes = /* @__PURE__ */ new Map();
|
|
156
|
+
watcher = null;
|
|
157
|
+
/**
|
|
158
|
+
* Add a member to a super-session: persist it, replay its history into the
|
|
159
|
+
* merged transcript, and subscribe for live updates. Returns the new member,
|
|
160
|
+
* or null if the super-session does not exist.
|
|
161
|
+
*/
|
|
162
|
+
addMember(superSessionId, spec) {
|
|
163
|
+
const rt = this.runtimes.get(superSessionId);
|
|
164
|
+
if (!rt) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
const member = {
|
|
168
|
+
capability: spec.capability ?? "",
|
|
169
|
+
id: randomBytes(8).toString("hex"),
|
|
170
|
+
provider: spec.provider,
|
|
171
|
+
registeredAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
172
|
+
sessionKey: spec.sessionKey,
|
|
173
|
+
status: "Idle",
|
|
174
|
+
terminalId: spec.terminalId ?? null
|
|
175
|
+
};
|
|
176
|
+
rt.session.members.push(member);
|
|
177
|
+
relayStore.addMember(superSessionId, member);
|
|
178
|
+
this.subscribeMember(rt, member);
|
|
179
|
+
this.emit(rt, { member, type: "sos-member-added" });
|
|
180
|
+
return member;
|
|
181
|
+
}
|
|
182
|
+
/** Human approves an escalated relay: inject it now, then resolve. */
|
|
183
|
+
approveRelay(superSessionId, relayId) {
|
|
184
|
+
const rt = this.runtimes.get(superSessionId);
|
|
185
|
+
const pending = rt?.pending.get(relayId);
|
|
186
|
+
if (!rt || !pending) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const result = this.doRelay(rt, pending.toMemberId, pending.text);
|
|
190
|
+
if (!result.ok) {
|
|
191
|
+
this.emit(rt, { message: result.error ?? "Injection failed", type: "sos-error" });
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
this.resolvePending(rt, relayId, "approved");
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
createSuperSession(label) {
|
|
198
|
+
const session = {
|
|
199
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
200
|
+
id: randomBytes(8).toString("hex"),
|
|
201
|
+
label: label.slice(0, MAX_LABEL_LEN),
|
|
202
|
+
members: [],
|
|
203
|
+
routingRules: [],
|
|
204
|
+
status: "active",
|
|
205
|
+
transcript: []
|
|
206
|
+
};
|
|
207
|
+
relayStore.createSuperSession(session);
|
|
208
|
+
this.runtimes.set(session.id, {
|
|
209
|
+
cooldowns: /* @__PURE__ */ new Map(),
|
|
210
|
+
listeners: /* @__PURE__ */ new Set(),
|
|
211
|
+
pending: /* @__PURE__ */ new Map(),
|
|
212
|
+
session,
|
|
213
|
+
unsubscribes: /* @__PURE__ */ new Map()
|
|
214
|
+
});
|
|
215
|
+
return session;
|
|
216
|
+
}
|
|
217
|
+
deleteSuperSession(id) {
|
|
218
|
+
const rt = this.runtimes.get(id);
|
|
219
|
+
if (!rt) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
for (const unsub of rt.unsubscribes.values()) {
|
|
223
|
+
unsub();
|
|
224
|
+
}
|
|
225
|
+
rt.unsubscribes.clear();
|
|
226
|
+
for (const p of rt.pending.values()) {
|
|
227
|
+
if (p.timer) {
|
|
228
|
+
clearTimeout(p.timer);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
rt.pending.clear();
|
|
232
|
+
relayStore.deleteSuperSession(id);
|
|
233
|
+
this.runtimes.delete(id);
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
/** Human denies an escalated relay: drop it. */
|
|
237
|
+
denyRelay(superSessionId, relayId) {
|
|
238
|
+
const rt = this.runtimes.get(superSessionId);
|
|
239
|
+
if (!rt?.pending.has(relayId)) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
this.resolvePending(rt, relayId, "denied");
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
getRoutingRules(superSessionId) {
|
|
246
|
+
return this.runtimes.get(superSessionId)?.session.routingRules ?? null;
|
|
247
|
+
}
|
|
248
|
+
getSuperSession(id) {
|
|
249
|
+
return this.runtimes.get(id)?.session;
|
|
250
|
+
}
|
|
251
|
+
listSuperSessions() {
|
|
252
|
+
return [...this.runtimes.values()].map((rt) => rt.session);
|
|
253
|
+
}
|
|
254
|
+
/** Rebuild persisted super-sessions and re-subscribe members. Call once on boot. */
|
|
255
|
+
reconnectAll() {
|
|
256
|
+
for (const rt of this.runtimes.values()) {
|
|
257
|
+
for (const unsub of rt.unsubscribes.values()) {
|
|
258
|
+
unsub();
|
|
259
|
+
}
|
|
260
|
+
for (const p of rt.pending.values()) {
|
|
261
|
+
if (p.timer) {
|
|
262
|
+
clearTimeout(p.timer);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
this.runtimes.clear();
|
|
267
|
+
for (const session of relayStore.loadAll()) {
|
|
268
|
+
const rt = {
|
|
269
|
+
cooldowns: /* @__PURE__ */ new Map(),
|
|
270
|
+
listeners: /* @__PURE__ */ new Set(),
|
|
271
|
+
pending: /* @__PURE__ */ new Map(),
|
|
272
|
+
session: { ...session, transcript: [] },
|
|
273
|
+
unsubscribes: /* @__PURE__ */ new Map()
|
|
274
|
+
};
|
|
275
|
+
this.runtimes.set(session.id, rt);
|
|
276
|
+
for (const member of rt.session.members) {
|
|
277
|
+
this.subscribeMember(rt, member);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Human-driven relay: inject text into a member's Shooter-owned terminal and
|
|
283
|
+
* record it as a relayed entry in the transcript. Returns an error string on
|
|
284
|
+
* failure, or null on success.
|
|
285
|
+
*/
|
|
286
|
+
relayForward(superSessionId, toMemberId, text) {
|
|
287
|
+
const rt = this.runtimes.get(superSessionId);
|
|
288
|
+
if (!rt) {
|
|
289
|
+
return "Super-session not found";
|
|
290
|
+
}
|
|
291
|
+
const member = rt.session.members.find((m) => m.id === toMemberId);
|
|
292
|
+
if (!member) {
|
|
293
|
+
return "Target member not found";
|
|
294
|
+
}
|
|
295
|
+
if (!member.terminalId) {
|
|
296
|
+
return "Target member has no Shooter-owned terminal (cannot inject into an observed session)";
|
|
297
|
+
}
|
|
298
|
+
if (!this.injector) {
|
|
299
|
+
return "Injector not configured";
|
|
300
|
+
}
|
|
301
|
+
const result = this.doRelay(rt, toMemberId, text);
|
|
302
|
+
return result.ok ? null : result.error ?? "Injection failed";
|
|
303
|
+
}
|
|
304
|
+
removeMember(superSessionId, memberId) {
|
|
305
|
+
const rt = this.runtimes.get(superSessionId);
|
|
306
|
+
if (!rt) {
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
const idx = rt.session.members.findIndex((m) => m.id === memberId);
|
|
310
|
+
if (idx === -1) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
rt.unsubscribes.get(memberId)?.();
|
|
314
|
+
rt.unsubscribes.delete(memberId);
|
|
315
|
+
rt.session.members.splice(idx, 1);
|
|
316
|
+
relayStore.removeMember(memberId);
|
|
317
|
+
this.emit(rt, { memberId, type: "sos-member-removed" });
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
/** Inject the relay function (server.ts owns PtyManager). */
|
|
321
|
+
setInjector(injector) {
|
|
322
|
+
this.injector = injector;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Replace a super-session's routing rules (Phase 2). Rejects self-relay rules.
|
|
326
|
+
* Returns an error string on invalid input, or null on success.
|
|
327
|
+
*/
|
|
328
|
+
setRoutingRules(superSessionId, rules) {
|
|
329
|
+
const rt = this.runtimes.get(superSessionId);
|
|
330
|
+
if (!rt) {
|
|
331
|
+
return "Super-session not found";
|
|
332
|
+
}
|
|
333
|
+
for (const rule of rules) {
|
|
334
|
+
if (!isValidRoutingRule(rule)) {
|
|
335
|
+
return `Invalid rule ${rule.id}: a rule may not relay a member to itself or to ANY`;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
rt.session.routingRules = rules;
|
|
339
|
+
relayStore.createSuperSession(rt.session);
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
/** Update a super-session's lifecycle status. Returns false if unknown id. */
|
|
343
|
+
setStatus(id, status) {
|
|
344
|
+
const rt = this.runtimes.get(id);
|
|
345
|
+
if (!rt) {
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
rt.session.status = status;
|
|
349
|
+
relayStore.updateSuperSessionStatus(id, status);
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
/** Inject the session-watcher adapter (same one the WS session handler uses). */
|
|
353
|
+
setWatcher(watcher) {
|
|
354
|
+
this.watcher = watcher;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Register a WS listener for a super-session and replay the current merged
|
|
358
|
+
* transcript to it. Returns an unsubscribe function, or null if unknown id.
|
|
359
|
+
*/
|
|
360
|
+
subscribe(superSessionId, listener) {
|
|
361
|
+
const rt = this.runtimes.get(superSessionId);
|
|
362
|
+
if (!rt) {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
rt.listeners.add(listener);
|
|
366
|
+
listener({ entries: [...rt.session.transcript], type: "sos-history" });
|
|
367
|
+
return () => {
|
|
368
|
+
rt.listeners.delete(listener);
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
appendEntry(rt, entry) {
|
|
372
|
+
rt.session.transcript.push(entry);
|
|
373
|
+
if (rt.session.transcript.length > MAX_TRANSCRIPT) {
|
|
374
|
+
rt.session.transcript.splice(0, rt.session.transcript.length - MAX_TRANSCRIPT);
|
|
375
|
+
}
|
|
376
|
+
this.emit(rt, { entry, type: "sos-message" });
|
|
377
|
+
}
|
|
378
|
+
/** Run Tier-1 routing for one new message and dispatch the matched action. */
|
|
379
|
+
applyPolicy(rt, fromMemberId, text) {
|
|
380
|
+
if (!text) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
const rule = evaluateRelayRule(rt.session.routingRules, fromMemberId, text);
|
|
384
|
+
if (!rule) {
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
if (rule.action === "relay") {
|
|
388
|
+
this.autoRelay(rt, fromMemberId, rule.toMemberId, text);
|
|
389
|
+
} else if (rule.action === "escalate") {
|
|
390
|
+
this.escalate(rt, fromMemberId, rule.toMemberId, text);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/** Rule-driven relay, suppressed by the per-pair cooldown. */
|
|
394
|
+
autoRelay(rt, fromMemberId, toMemberId, text) {
|
|
395
|
+
const key = `${fromMemberId}:${toMemberId}`;
|
|
396
|
+
const now = Date.now();
|
|
397
|
+
if (now - (rt.cooldowns.get(key) ?? 0) < RELAY_COOLDOWN_MS) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
rt.cooldowns.set(key, now);
|
|
401
|
+
this.doRelay(rt, toMemberId, text);
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Inject text into a member's terminal and record a relayed transcript entry
|
|
405
|
+
* (relayed=true is the primary loop guard). Shared by manual + auto relay.
|
|
406
|
+
*/
|
|
407
|
+
doRelay(rt, toMemberId, text) {
|
|
408
|
+
const member = rt.session.members.find((m) => m.id === toMemberId);
|
|
409
|
+
if (!member) {
|
|
410
|
+
return { error: "Target member not found", ok: false };
|
|
411
|
+
}
|
|
412
|
+
if (!member.terminalId) {
|
|
413
|
+
return {
|
|
414
|
+
error: "Target member has no Shooter-owned terminal (cannot inject into an observed session)",
|
|
415
|
+
ok: false
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
if (!this.injector) {
|
|
419
|
+
return { error: "Injector not configured", ok: false };
|
|
420
|
+
}
|
|
421
|
+
const capped = text.length > MAX_RELAY_TEXT ? text.slice(0, MAX_RELAY_TEXT) : text;
|
|
422
|
+
const result = this.injector(member.terminalId, capped);
|
|
423
|
+
if (!result.ok) {
|
|
424
|
+
return { error: result.error ?? "Injection failed", ok: false };
|
|
425
|
+
}
|
|
426
|
+
this.appendEntry(rt, {
|
|
427
|
+
memberId: toMemberId,
|
|
428
|
+
message: {
|
|
429
|
+
id: `relay-${randomBytes(6).toString("hex")}`,
|
|
430
|
+
parts: [{ content: capped, type: "text" }],
|
|
431
|
+
role: "user",
|
|
432
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
433
|
+
},
|
|
434
|
+
provider: member.provider,
|
|
435
|
+
relayed: true
|
|
436
|
+
});
|
|
437
|
+
return { ok: true };
|
|
438
|
+
}
|
|
439
|
+
emit(rt, msg) {
|
|
440
|
+
for (const listener of rt.listeners) {
|
|
441
|
+
try {
|
|
442
|
+
listener(msg);
|
|
443
|
+
} catch (err) {
|
|
444
|
+
console.error("[sos] listener error:", err);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/** Queue an escalated relay for human approval and notify listeners. */
|
|
449
|
+
escalate(rt, fromMemberId, toMemberId, text) {
|
|
450
|
+
const relayId = randomBytes(8).toString("hex");
|
|
451
|
+
const expiresAt = new Date(Date.now() + ESCALATE_TIMEOUT_MS).toISOString();
|
|
452
|
+
const timer = setTimeout(() => {
|
|
453
|
+
this.resolvePending(rt, relayId, "expired");
|
|
454
|
+
}, ESCALATE_TIMEOUT_MS);
|
|
455
|
+
if (typeof timer.unref === "function") {
|
|
456
|
+
timer.unref();
|
|
457
|
+
}
|
|
458
|
+
rt.pending.set(relayId, {
|
|
459
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
460
|
+
expiresAt,
|
|
461
|
+
fromMemberId,
|
|
462
|
+
id: relayId,
|
|
463
|
+
text,
|
|
464
|
+
timer,
|
|
465
|
+
toMemberId
|
|
466
|
+
});
|
|
467
|
+
this.emit(rt, {
|
|
468
|
+
expiresAt,
|
|
469
|
+
fromMemberId,
|
|
470
|
+
preview: text.slice(0, 200),
|
|
471
|
+
relayId,
|
|
472
|
+
toMemberId,
|
|
473
|
+
type: "sos-relay-pending"
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
resolvePending(rt, relayId, decision) {
|
|
477
|
+
const pending = rt.pending.get(relayId);
|
|
478
|
+
if (!pending) {
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
if (pending.timer) {
|
|
482
|
+
clearTimeout(pending.timer);
|
|
483
|
+
}
|
|
484
|
+
rt.pending.delete(relayId);
|
|
485
|
+
this.emit(rt, { decision, relayId, type: "sos-relay-resolved" });
|
|
486
|
+
}
|
|
487
|
+
/** Replay history + subscribe a single member to the merged transcript. */
|
|
488
|
+
subscribeMember(rt, member) {
|
|
489
|
+
if (!this.watcher) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
try {
|
|
493
|
+
for (const message of this.watcher.getHistory(member.sessionKey)) {
|
|
494
|
+
this.appendEntry(rt, {
|
|
495
|
+
memberId: member.id,
|
|
496
|
+
message,
|
|
497
|
+
provider: member.provider,
|
|
498
|
+
relayed: false
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
} catch (err) {
|
|
502
|
+
console.error(`[sos] history replay failed for ${member.sessionKey}:`, err);
|
|
503
|
+
}
|
|
504
|
+
try {
|
|
505
|
+
const unsub = this.watcher.subscribe(member.sessionKey, (messages) => {
|
|
506
|
+
for (const message of messages) {
|
|
507
|
+
this.appendEntry(rt, {
|
|
508
|
+
memberId: member.id,
|
|
509
|
+
message,
|
|
510
|
+
provider: member.provider,
|
|
511
|
+
relayed: false
|
|
512
|
+
});
|
|
513
|
+
this.applyPolicy(rt, member.id, textOf(message));
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
rt.unsubscribes.set(member.id, unsub);
|
|
517
|
+
} catch (err) {
|
|
518
|
+
console.error(`[sos] subscribe failed for ${member.sessionKey}:`, err);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
function textOf(message) {
|
|
523
|
+
return message.parts.filter((p) => p.type === "text").map((p) => p.type === "text" ? p.content : "").join(" ").trim();
|
|
524
|
+
}
|
|
525
|
+
const SC_GLOBAL_KEY = "__shooter_sos_coordinator";
|
|
526
|
+
const sosCoordinator = globalThis[SC_GLOBAL_KEY] || new SuperSessionCoordinator();
|
|
527
|
+
globalThis[SC_GLOBAL_KEY] = sosCoordinator;
|
|
528
|
+
|
|
529
|
+
export { sosCoordinator as s };
|
|
530
|
+
//# sourceMappingURL=coordinator-DMU_ADXf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator-DMU_ADXf.js","sources":["../../../.svelte-kit/adapter-node/chunks/coordinator.js"],"sourcesContent":["import { randomBytes } from \"crypto\";\nimport Database from \"better-sqlite3\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nfunction evaluateRelayRule(rules, fromMemberId, text) {\n const ordered = [...rules].sort((a, b) => a.priority - b.priority);\n for (const rule of ordered) {\n if (rule.fromMemberId !== \"ANY\" && rule.fromMemberId !== fromMemberId) {\n continue;\n }\n if (rule.toMemberId === fromMemberId) {\n continue;\n }\n if (!matchesPattern(text, rule.matchPattern)) {\n continue;\n }\n return rule;\n }\n return null;\n}\nfunction isValidRoutingRule(rule) {\n return rule.toMemberId !== \"ANY\" && rule.fromMemberId !== rule.toMemberId;\n}\nfunction matchesPattern(text, pattern) {\n if (!pattern) {\n return true;\n }\n return text.toLowerCase().includes(pattern.toLowerCase());\n}\nconst DB_DIR = path.join(os.homedir(), \".shooter\");\nconst DB_PATH = path.join(DB_DIR, \"shooter.db\");\nclass RelayStore {\n db;\n constructor() {\n fs.mkdirSync(DB_DIR, { recursive: true });\n this.db = new Database(DB_PATH);\n this.db.pragma(\"journal_mode = WAL\");\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS super_sessions (\n id TEXT PRIMARY KEY,\n label TEXT NOT NULL,\n routing_rules TEXT NOT NULL DEFAULT '[]',\n status TEXT NOT NULL DEFAULT 'active',\n created_at TEXT NOT NULL\n );\n CREATE TABLE IF NOT EXISTS sos_sessions (\n id TEXT PRIMARY KEY,\n super_session_id TEXT NOT NULL,\n session_key TEXT NOT NULL,\n terminal_id TEXT,\n provider TEXT NOT NULL,\n capability TEXT NOT NULL DEFAULT '',\n status TEXT NOT NULL DEFAULT 'Idle',\n registered_at TEXT NOT NULL\n );\n CREATE INDEX IF NOT EXISTS idx_sos_sessions_super ON sos_sessions(super_session_id);\n `);\n }\n addMember(superSessionId, member) {\n this.db.prepare(\n `INSERT OR REPLACE INTO sos_sessions\n (id, super_session_id, session_key, terminal_id, provider, capability, status, registered_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`\n ).run(\n member.id,\n superSessionId,\n member.sessionKey,\n member.terminalId,\n member.provider,\n member.capability,\n member.status,\n member.registeredAt\n );\n }\n createSuperSession(session) {\n this.db.prepare(\n `INSERT OR REPLACE INTO super_sessions (id, label, routing_rules, status, created_at)\n VALUES (?, ?, ?, ?, ?)`\n ).run(\n session.id,\n session.label,\n JSON.stringify(session.routingRules),\n session.status,\n session.createdAt\n );\n }\n deleteSuperSession(id) {\n const tx = this.db.transaction((sid) => {\n this.db.prepare(\"DELETE FROM sos_sessions WHERE super_session_id = ?\").run(sid);\n this.db.prepare(\"DELETE FROM super_sessions WHERE id = ?\").run(sid);\n });\n tx(id);\n }\n /** Rebuild every persisted super-session (members included, transcript empty). */\n loadAll() {\n const rows = this.db.prepare(\"SELECT * FROM super_sessions\").all();\n return rows.map((row) => {\n const id = row.id;\n const memberRows = this.db.prepare(\"SELECT * FROM sos_sessions WHERE super_session_id = ? ORDER BY registered_at\").all(id);\n return {\n createdAt: row.created_at,\n id,\n label: row.label,\n members: memberRows.map(rowToMember),\n routingRules: safeParseRules(row.routing_rules),\n status: row.status,\n transcript: []\n };\n });\n }\n removeMember(memberId) {\n this.db.prepare(\"DELETE FROM sos_sessions WHERE id = ?\").run(memberId);\n }\n updateMemberStatus(memberId, status) {\n this.db.prepare(\"UPDATE sos_sessions SET status = ? WHERE id = ?\").run(status, memberId);\n }\n updateSuperSessionStatus(id, status) {\n this.db.prepare(\"UPDATE super_sessions SET status = ? WHERE id = ?\").run(status, id);\n }\n}\nfunction rowToMember(row) {\n return {\n capability: row.capability ?? \"\",\n id: row.id,\n provider: row.provider,\n registeredAt: row.registered_at,\n sessionKey: row.session_key,\n status: row.status,\n terminalId: row.terminal_id ?? null\n };\n}\nfunction safeParseRules(raw) {\n if (typeof raw !== \"string\") {\n return [];\n }\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\nconst RS_GLOBAL_KEY = \"__shooter_relay_store\";\nconst relayStore = globalThis[RS_GLOBAL_KEY] || new RelayStore();\nglobalThis[RS_GLOBAL_KEY] = relayStore;\nconst MAX_TRANSCRIPT = 500;\nconst MAX_LABEL_LEN = 200;\nconst RELAY_COOLDOWN_MS = 5e3;\nconst ESCALATE_TIMEOUT_MS = 12e4;\nconst MAX_RELAY_TEXT = 10240;\nclass SuperSessionCoordinator {\n injector = null;\n runtimes = /* @__PURE__ */ new Map();\n watcher = null;\n /**\n * Add a member to a super-session: persist it, replay its history into the\n * merged transcript, and subscribe for live updates. Returns the new member,\n * or null if the super-session does not exist.\n */\n addMember(superSessionId, spec) {\n const rt = this.runtimes.get(superSessionId);\n if (!rt) {\n return null;\n }\n const member = {\n capability: spec.capability ?? \"\",\n id: randomBytes(8).toString(\"hex\"),\n provider: spec.provider,\n registeredAt: (/* @__PURE__ */ new Date()).toISOString(),\n sessionKey: spec.sessionKey,\n status: \"Idle\",\n terminalId: spec.terminalId ?? null\n };\n rt.session.members.push(member);\n relayStore.addMember(superSessionId, member);\n this.subscribeMember(rt, member);\n this.emit(rt, { member, type: \"sos-member-added\" });\n return member;\n }\n /** Human approves an escalated relay: inject it now, then resolve. */\n approveRelay(superSessionId, relayId) {\n const rt = this.runtimes.get(superSessionId);\n const pending = rt?.pending.get(relayId);\n if (!rt || !pending) {\n return false;\n }\n const result = this.doRelay(rt, pending.toMemberId, pending.text);\n if (!result.ok) {\n this.emit(rt, { message: result.error ?? \"Injection failed\", type: \"sos-error\" });\n return false;\n }\n this.resolvePending(rt, relayId, \"approved\");\n return true;\n }\n createSuperSession(label) {\n const session = {\n createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n id: randomBytes(8).toString(\"hex\"),\n label: label.slice(0, MAX_LABEL_LEN),\n members: [],\n routingRules: [],\n status: \"active\",\n transcript: []\n };\n relayStore.createSuperSession(session);\n this.runtimes.set(session.id, {\n cooldowns: /* @__PURE__ */ new Map(),\n listeners: /* @__PURE__ */ new Set(),\n pending: /* @__PURE__ */ new Map(),\n session,\n unsubscribes: /* @__PURE__ */ new Map()\n });\n return session;\n }\n deleteSuperSession(id) {\n const rt = this.runtimes.get(id);\n if (!rt) {\n return false;\n }\n for (const unsub of rt.unsubscribes.values()) {\n unsub();\n }\n rt.unsubscribes.clear();\n for (const p of rt.pending.values()) {\n if (p.timer) {\n clearTimeout(p.timer);\n }\n }\n rt.pending.clear();\n relayStore.deleteSuperSession(id);\n this.runtimes.delete(id);\n return true;\n }\n /** Human denies an escalated relay: drop it. */\n denyRelay(superSessionId, relayId) {\n const rt = this.runtimes.get(superSessionId);\n if (!rt?.pending.has(relayId)) {\n return false;\n }\n this.resolvePending(rt, relayId, \"denied\");\n return true;\n }\n getRoutingRules(superSessionId) {\n return this.runtimes.get(superSessionId)?.session.routingRules ?? null;\n }\n getSuperSession(id) {\n return this.runtimes.get(id)?.session;\n }\n listSuperSessions() {\n return [...this.runtimes.values()].map((rt) => rt.session);\n }\n /** Rebuild persisted super-sessions and re-subscribe members. Call once on boot. */\n reconnectAll() {\n for (const rt of this.runtimes.values()) {\n for (const unsub of rt.unsubscribes.values()) {\n unsub();\n }\n for (const p of rt.pending.values()) {\n if (p.timer) {\n clearTimeout(p.timer);\n }\n }\n }\n this.runtimes.clear();\n for (const session of relayStore.loadAll()) {\n const rt = {\n cooldowns: /* @__PURE__ */ new Map(),\n listeners: /* @__PURE__ */ new Set(),\n pending: /* @__PURE__ */ new Map(),\n session: { ...session, transcript: [] },\n unsubscribes: /* @__PURE__ */ new Map()\n };\n this.runtimes.set(session.id, rt);\n for (const member of rt.session.members) {\n this.subscribeMember(rt, member);\n }\n }\n }\n /**\n * Human-driven relay: inject text into a member's Shooter-owned terminal and\n * record it as a relayed entry in the transcript. Returns an error string on\n * failure, or null on success.\n */\n relayForward(superSessionId, toMemberId, text) {\n const rt = this.runtimes.get(superSessionId);\n if (!rt) {\n return \"Super-session not found\";\n }\n const member = rt.session.members.find((m) => m.id === toMemberId);\n if (!member) {\n return \"Target member not found\";\n }\n if (!member.terminalId) {\n return \"Target member has no Shooter-owned terminal (cannot inject into an observed session)\";\n }\n if (!this.injector) {\n return \"Injector not configured\";\n }\n const result = this.doRelay(rt, toMemberId, text);\n return result.ok ? null : result.error ?? \"Injection failed\";\n }\n removeMember(superSessionId, memberId) {\n const rt = this.runtimes.get(superSessionId);\n if (!rt) {\n return false;\n }\n const idx = rt.session.members.findIndex((m) => m.id === memberId);\n if (idx === -1) {\n return false;\n }\n rt.unsubscribes.get(memberId)?.();\n rt.unsubscribes.delete(memberId);\n rt.session.members.splice(idx, 1);\n relayStore.removeMember(memberId);\n this.emit(rt, { memberId, type: \"sos-member-removed\" });\n return true;\n }\n /** Inject the relay function (server.ts owns PtyManager). */\n setInjector(injector) {\n this.injector = injector;\n }\n /**\n * Replace a super-session's routing rules (Phase 2). Rejects self-relay rules.\n * Returns an error string on invalid input, or null on success.\n */\n setRoutingRules(superSessionId, rules) {\n const rt = this.runtimes.get(superSessionId);\n if (!rt) {\n return \"Super-session not found\";\n }\n for (const rule of rules) {\n if (!isValidRoutingRule(rule)) {\n return `Invalid rule ${rule.id}: a rule may not relay a member to itself or to ANY`;\n }\n }\n rt.session.routingRules = rules;\n relayStore.createSuperSession(rt.session);\n return null;\n }\n /** Update a super-session's lifecycle status. Returns false if unknown id. */\n setStatus(id, status) {\n const rt = this.runtimes.get(id);\n if (!rt) {\n return false;\n }\n rt.session.status = status;\n relayStore.updateSuperSessionStatus(id, status);\n return true;\n }\n /** Inject the session-watcher adapter (same one the WS session handler uses). */\n setWatcher(watcher) {\n this.watcher = watcher;\n }\n /**\n * Register a WS listener for a super-session and replay the current merged\n * transcript to it. Returns an unsubscribe function, or null if unknown id.\n */\n subscribe(superSessionId, listener) {\n const rt = this.runtimes.get(superSessionId);\n if (!rt) {\n return null;\n }\n rt.listeners.add(listener);\n listener({ entries: [...rt.session.transcript], type: \"sos-history\" });\n return () => {\n rt.listeners.delete(listener);\n };\n }\n appendEntry(rt, entry) {\n rt.session.transcript.push(entry);\n if (rt.session.transcript.length > MAX_TRANSCRIPT) {\n rt.session.transcript.splice(0, rt.session.transcript.length - MAX_TRANSCRIPT);\n }\n this.emit(rt, { entry, type: \"sos-message\" });\n }\n /** Run Tier-1 routing for one new message and dispatch the matched action. */\n applyPolicy(rt, fromMemberId, text) {\n if (!text) {\n return;\n }\n const rule = evaluateRelayRule(rt.session.routingRules, fromMemberId, text);\n if (!rule) {\n return;\n }\n if (rule.action === \"relay\") {\n this.autoRelay(rt, fromMemberId, rule.toMemberId, text);\n } else if (rule.action === \"escalate\") {\n this.escalate(rt, fromMemberId, rule.toMemberId, text);\n }\n }\n /** Rule-driven relay, suppressed by the per-pair cooldown. */\n autoRelay(rt, fromMemberId, toMemberId, text) {\n const key = `${fromMemberId}:${toMemberId}`;\n const now = Date.now();\n if (now - (rt.cooldowns.get(key) ?? 0) < RELAY_COOLDOWN_MS) {\n return;\n }\n rt.cooldowns.set(key, now);\n this.doRelay(rt, toMemberId, text);\n }\n /**\n * Inject text into a member's terminal and record a relayed transcript entry\n * (relayed=true is the primary loop guard). Shared by manual + auto relay.\n */\n doRelay(rt, toMemberId, text) {\n const member = rt.session.members.find((m) => m.id === toMemberId);\n if (!member) {\n return { error: \"Target member not found\", ok: false };\n }\n if (!member.terminalId) {\n return {\n error: \"Target member has no Shooter-owned terminal (cannot inject into an observed session)\",\n ok: false\n };\n }\n if (!this.injector) {\n return { error: \"Injector not configured\", ok: false };\n }\n const capped = text.length > MAX_RELAY_TEXT ? text.slice(0, MAX_RELAY_TEXT) : text;\n const result = this.injector(member.terminalId, capped);\n if (!result.ok) {\n return { error: result.error ?? \"Injection failed\", ok: false };\n }\n this.appendEntry(rt, {\n memberId: toMemberId,\n message: {\n id: `relay-${randomBytes(6).toString(\"hex\")}`,\n parts: [{ content: capped, type: \"text\" }],\n role: \"user\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n provider: member.provider,\n relayed: true\n });\n return { ok: true };\n }\n emit(rt, msg) {\n for (const listener of rt.listeners) {\n try {\n listener(msg);\n } catch (err) {\n console.error(\"[sos] listener error:\", err);\n }\n }\n }\n /** Queue an escalated relay for human approval and notify listeners. */\n escalate(rt, fromMemberId, toMemberId, text) {\n const relayId = randomBytes(8).toString(\"hex\");\n const expiresAt = new Date(Date.now() + ESCALATE_TIMEOUT_MS).toISOString();\n const timer = setTimeout(() => {\n this.resolvePending(rt, relayId, \"expired\");\n }, ESCALATE_TIMEOUT_MS);\n if (typeof timer.unref === \"function\") {\n timer.unref();\n }\n rt.pending.set(relayId, {\n createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n expiresAt,\n fromMemberId,\n id: relayId,\n text,\n timer,\n toMemberId\n });\n this.emit(rt, {\n expiresAt,\n fromMemberId,\n preview: text.slice(0, 200),\n relayId,\n toMemberId,\n type: \"sos-relay-pending\"\n });\n }\n resolvePending(rt, relayId, decision) {\n const pending = rt.pending.get(relayId);\n if (!pending) {\n return;\n }\n if (pending.timer) {\n clearTimeout(pending.timer);\n }\n rt.pending.delete(relayId);\n this.emit(rt, { decision, relayId, type: \"sos-relay-resolved\" });\n }\n /** Replay history + subscribe a single member to the merged transcript. */\n subscribeMember(rt, member) {\n if (!this.watcher) {\n return;\n }\n try {\n for (const message of this.watcher.getHistory(member.sessionKey)) {\n this.appendEntry(rt, {\n memberId: member.id,\n message,\n provider: member.provider,\n relayed: false\n });\n }\n } catch (err) {\n console.error(`[sos] history replay failed for ${member.sessionKey}:`, err);\n }\n try {\n const unsub = this.watcher.subscribe(member.sessionKey, (messages) => {\n for (const message of messages) {\n this.appendEntry(rt, {\n memberId: member.id,\n message,\n provider: member.provider,\n relayed: false\n });\n this.applyPolicy(rt, member.id, textOf(message));\n }\n });\n rt.unsubscribes.set(member.id, unsub);\n } catch (err) {\n console.error(`[sos] subscribe failed for ${member.sessionKey}:`, err);\n }\n }\n}\nfunction textOf(message) {\n return message.parts.filter((p) => p.type === \"text\").map((p) => p.type === \"text\" ? p.content : \"\").join(\" \").trim();\n}\nconst SC_GLOBAL_KEY = \"__shooter_sos_coordinator\";\nconst sosCoordinator = globalThis[SC_GLOBAL_KEY] || new SuperSessionCoordinator();\nglobalThis[SC_GLOBAL_KEY] = sosCoordinator;\nexport {\n sosCoordinator as s\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -3822,5 +3822,5 @@ function derived(fn) {
|
|
|
3822
3822
|
};
|
|
3823
3823
|
}
|
|
3824
3824
|
|
|
3825
|
-
export {
|
|
3826
|
-
//# sourceMappingURL=index-
|
|
3825
|
+
export { set_component_context as $, hydration_mismatch as A, component_root as B, COMMENT_NODE as C, DevalueError as D, create_text as E, array_from as F, is_passive_event as G, HOLE as H, set_active_reaction as I, set_active_effect as J, active_reaction as K, LEGACY_PROPS as L, MAX_ARRAY_INDEX as M, NAN as N, active_effect as O, POSITIVE_INFINITY as P, setContext as Q, BOUNDARY_EFFECT as R, SPARSE as S, block as T, UNDEFINED as U, branch as V, queue_micro_task as W, pause_effect as X, current_batch as Y, move_effect as Z, defer_effect as _, NEGATIVE_INFINITY as a, Batch as a0, handle_error as a1, component_context as a2, internal_set as a3, destroy_effect as a4, invoke_error_boundary as a5, derived as a6, effect_tracking as a7, render_effect as a8, HYDRATION_END as a9, clsx as aA, HYDRATION_START_ELSE as aa, svelte_boundary_reset_onerror as ab, source as ac, untrack as ad, increment as ae, HYDRATION_START_FAILED as af, svelte_boundary_reset_noop as ag, push$1 as ah, pop$1 as ai, EFFECT_TRANSPARENT as aj, EFFECT_PRESERVED as ak, noop as al, safe_not_equal as am, stringify as an, store_get as ao, attr_class as ap, unsubscribe_stores as aq, getContext as ar, attr as as, bind_props as at, escape_html as au, spread_props as av, head as aw, ensure_array_like as ax, ssr_context as ay, attr_style as az, NEGATIVE_ZERO as b, is_valid_array_index as c, is_primitive as d, is_plain_object as e, enumerable_symbols as f, get_type as g, stringify_string as h, is_valid_array_len as i, browser as j, set as k, get as l, flushSync as m, define_property as n, mutable_source as o, init_operations as p, get_first_child as q, render as r, stringify_key as s, HYDRATION_START as t, uneval as u, valid_array_indices as v, get_next_sibling as w, HYDRATION_ERROR as x, hydration_failed as y, clear_text_content as z };
|
|
3826
|
+
//# sourceMappingURL=index-CoYB03g7.js.map
|