@juspay/shooter 1.17.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.
Files changed (342) hide show
  1. package/build/client/_app/immutable/assets/{0.B0O0vCnX.css → 0.BwNtE8TX.css} +1 -1
  2. package/build/client/_app/immutable/assets/0.BwNtE8TX.css.br +0 -0
  3. package/build/client/_app/immutable/assets/{0.B0O0vCnX.css.gz → 0.BwNtE8TX.css.gz} +0 -0
  4. package/build/client/_app/immutable/assets/8.BYgAX7hR.css +1 -0
  5. package/build/client/_app/immutable/assets/8.BYgAX7hR.css.br +0 -0
  6. package/build/client/_app/immutable/assets/8.BYgAX7hR.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/9.DV6pZunn.css +1 -0
  8. package/build/client/_app/immutable/assets/9.DV6pZunn.css.br +0 -0
  9. package/build/client/_app/immutable/assets/9.DV6pZunn.css.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{DZQMsHM5.js → 2rBV5OkJ.js} +1 -1
  11. package/build/client/_app/immutable/chunks/2rBV5OkJ.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/2rBV5OkJ.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/BB2l8o4X.js +1 -0
  14. package/build/client/_app/immutable/chunks/BB2l8o4X.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/BB2l8o4X.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/{Cg3dlX05.js → BPDiEZo0.js} +2 -2
  17. package/build/client/_app/immutable/chunks/BPDiEZo0.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/BPDiEZo0.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/{C_9BZILB.js → BcpydfqI.js} +1 -1
  20. package/build/client/_app/immutable/chunks/BcpydfqI.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/BcpydfqI.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/BcqA7eKM.js +3 -0
  23. package/build/client/_app/immutable/chunks/BcqA7eKM.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/BcqA7eKM.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/BdtLzPpO.js +1 -0
  26. package/build/client/_app/immutable/chunks/BdtLzPpO.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BdtLzPpO.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/{BRqaaL5D.js → BvmdJful.js} +1 -1
  29. package/build/client/_app/immutable/chunks/BvmdJful.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/BvmdJful.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/{C5VOyQCG.js → ClIPTXf3.js} +1 -1
  32. package/build/client/_app/immutable/chunks/ClIPTXf3.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/ClIPTXf3.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/{BctvtE4d.js → DA4Zt9Me.js} +1 -1
  35. package/build/client/_app/immutable/chunks/DA4Zt9Me.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/{BctvtE4d.js.gz → DA4Zt9Me.js.gz} +0 -0
  37. package/build/client/_app/immutable/chunks/{CjfxuHdN.js → DCDL_9ys.js} +1 -1
  38. package/build/client/_app/immutable/chunks/DCDL_9ys.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/DCDL_9ys.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/{DYuMZGL5.js → DWmC0QM7.js} +1 -1
  41. package/build/client/_app/immutable/chunks/DWmC0QM7.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/DWmC0QM7.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/{DZvnhU_8.js → ZS5XYDx_.js} +2 -2
  44. package/build/client/_app/immutable/chunks/ZS5XYDx_.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/ZS5XYDx_.js.gz +0 -0
  46. package/build/client/_app/immutable/entry/app.D4TXlu7A.js +2 -0
  47. package/build/client/_app/immutable/entry/app.D4TXlu7A.js.br +0 -0
  48. package/build/client/_app/immutable/entry/app.D4TXlu7A.js.gz +0 -0
  49. package/build/client/_app/immutable/entry/start.BBQhtURO.js +1 -0
  50. package/build/client/_app/immutable/entry/start.BBQhtURO.js.br +0 -0
  51. package/build/client/_app/immutable/entry/start.BBQhtURO.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/0.1zylwAPT.js +10 -0
  53. package/build/client/_app/immutable/nodes/0.1zylwAPT.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/0.1zylwAPT.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/{1.Fqso94b3.js → 1.BVnLUSs-.js} +1 -1
  56. package/build/client/_app/immutable/nodes/1.BVnLUSs-.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/1.BVnLUSs-.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{8.BjKgvSie.js → 10.D1wl2wPX.js} +2 -2
  59. package/build/client/_app/immutable/nodes/10.D1wl2wPX.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/10.D1wl2wPX.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/{9.BRT6HOXB.js → 11.C18nMGmp.js} +1 -1
  62. package/build/client/_app/immutable/nodes/11.C18nMGmp.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/11.C18nMGmp.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/{2.BusCVJWk.js → 2.D1Mm0DUX.js} +2 -2
  65. package/build/client/_app/immutable/nodes/2.D1Mm0DUX.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/2.D1Mm0DUX.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/{3.DUlpocIc.js → 3.Wfz3TcJd.js} +3 -3
  68. package/build/client/_app/immutable/nodes/3.Wfz3TcJd.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/3.Wfz3TcJd.js.gz +0 -0
  70. package/build/client/_app/immutable/nodes/{4.BSVqdrrD.js → 4.CBX9A3ka.js} +2 -2
  71. package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.br +0 -0
  72. package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.gz +0 -0
  73. package/build/client/_app/immutable/nodes/{5.Cfj35gpY.js → 5.DIVKuZc9.js} +1 -1
  74. package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.br +0 -0
  75. package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/{6.CG4eKRH0.js → 6.DtZAEPXb.js} +1 -1
  77. package/build/client/_app/immutable/nodes/6.DtZAEPXb.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/6.DtZAEPXb.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/{7.DHilxD1o.js → 7.MfBRh32I.js} +1 -1
  80. package/build/client/_app/immutable/nodes/7.MfBRh32I.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/7.MfBRh32I.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/8.DVE6LnOC.js +1 -0
  83. package/build/client/_app/immutable/nodes/8.DVE6LnOC.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/8.DVE6LnOC.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/9.BCel5OqI.js +2 -0
  86. package/build/client/_app/immutable/nodes/9.BCel5OqI.js.br +0 -0
  87. package/build/client/_app/immutable/nodes/9.BCel5OqI.js.gz +0 -0
  88. package/build/client/_app/version.json +1 -1
  89. package/build/client/_app/version.json.br +0 -0
  90. package/build/client/_app/version.json.gz +0 -0
  91. package/build/server/chunks/{0-BWFSL107.js → 0-DJqyZZTr.js} +4 -4
  92. package/build/server/chunks/{0-BWFSL107.js.map → 0-DJqyZZTr.js.map} +1 -1
  93. package/build/server/chunks/1-2YUVen1F.js +9 -0
  94. package/build/server/chunks/{1-Bw5KlAjL.js.map → 1-2YUVen1F.js.map} +1 -1
  95. package/build/server/chunks/10-D1X7LB3v.js +9 -0
  96. package/build/server/chunks/10-D1X7LB3v.js.map +1 -0
  97. package/build/server/chunks/11-qXSPdF5j.js +9 -0
  98. package/build/server/chunks/11-qXSPdF5j.js.map +1 -0
  99. package/build/server/chunks/{2-CQ3yYSVK.js → 2-BD7kj1mt.js} +3 -3
  100. package/build/server/chunks/{2-CQ3yYSVK.js.map → 2-BD7kj1mt.js.map} +1 -1
  101. package/build/server/chunks/{3-DZ4H9hPs.js → 3-oNjv-BhZ.js} +3 -3
  102. package/build/server/chunks/{3-DZ4H9hPs.js.map → 3-oNjv-BhZ.js.map} +1 -1
  103. package/build/server/chunks/{4-BtYdKCVW.js → 4-Bb5VFhsO.js} +3 -3
  104. package/build/server/chunks/{4-BtYdKCVW.js.map → 4-Bb5VFhsO.js.map} +1 -1
  105. package/build/server/chunks/{5-CvJK3PiH.js → 5-oNoWuIsn.js} +3 -3
  106. package/build/server/chunks/{5-CvJK3PiH.js.map → 5-oNoWuIsn.js.map} +1 -1
  107. package/build/server/chunks/6-DRJGUqHG.js +9 -0
  108. package/build/server/chunks/{6-BZ0enR6b.js.map → 6-DRJGUqHG.js.map} +1 -1
  109. package/build/server/chunks/7-_giJiu0L.js +9 -0
  110. package/build/server/chunks/{7-Lg8imTZn.js.map → 7-_giJiu0L.js.map} +1 -1
  111. package/build/server/chunks/8-zvWAVNT5.js +9 -0
  112. package/build/server/chunks/8-zvWAVNT5.js.map +1 -0
  113. package/build/server/chunks/9-DVyDL445.js +9 -0
  114. package/build/server/chunks/9-DVyDL445.js.map +1 -0
  115. package/build/server/chunks/Banner-BgaAs1rs.js +90 -0
  116. package/build/server/chunks/Banner-BgaAs1rs.js.map +1 -0
  117. package/build/server/chunks/{Button-B5dU-ntz.js → Button-D0hZ7JYt.js} +2 -2
  118. package/build/server/chunks/Button-D0hZ7JYt.js.map +1 -0
  119. package/build/server/chunks/{Icon-C7Ml3GX6.js → Icon-D0GBnDcs.js} +3 -3
  120. package/build/server/chunks/Icon-D0GBnDcs.js.map +1 -0
  121. package/build/server/chunks/{Input-CPGO0sbS.js → Input-OmIiydSx.js} +2 -2
  122. package/build/server/chunks/Input-OmIiydSx.js.map +1 -0
  123. package/build/server/chunks/{Pill-CcrtCejm.js → Pill-4xJ-VhAA.js} +3 -3
  124. package/build/server/chunks/Pill-4xJ-VhAA.js.map +1 -0
  125. package/build/server/chunks/{Shimmer-C5jkvGr1.js → Shimmer-Dw2uvTC1.js} +2 -2
  126. package/build/server/chunks/Shimmer-Dw2uvTC1.js.map +1 -0
  127. package/build/server/chunks/{_error.svelte-CSIxs-ab.js → _error.svelte-CZnkxeLr.js} +8 -8
  128. package/build/server/chunks/{_error.svelte-CSIxs-ab.js.map → _error.svelte-CZnkxeLr.js.map} +1 -1
  129. package/build/server/chunks/{_layout.svelte-noB4j-v2.js → _layout.svelte-DfgNGGiM.js} +16 -11
  130. package/build/server/chunks/_layout.svelte-DfgNGGiM.js.map +1 -0
  131. package/build/server/chunks/{_page.svelte-DnTpPnPR.js → _page.svelte-BLo2v_8E.js} +7 -88
  132. package/build/server/chunks/_page.svelte-BLo2v_8E.js.map +1 -0
  133. package/build/server/chunks/_page.svelte-BTlfUsBp.js +43 -0
  134. package/build/server/chunks/_page.svelte-BTlfUsBp.js.map +1 -0
  135. package/build/server/chunks/{_page.svelte-C60lAagP.js → _page.svelte-BUBLUSGo.js} +8 -8
  136. package/build/server/chunks/_page.svelte-BUBLUSGo.js.map +1 -0
  137. package/build/server/chunks/{_page.svelte-BV0XyYJZ.js → _page.svelte-BX2FMgSg.js} +4 -4
  138. package/build/server/chunks/{_page.svelte-BV0XyYJZ.js.map → _page.svelte-BX2FMgSg.js.map} +1 -1
  139. package/build/server/chunks/{_page.svelte-BUkm2304.js → _page.svelte-C7B0qdrC.js} +5 -5
  140. package/build/server/chunks/{_page.svelte-BUkm2304.js.map → _page.svelte-C7B0qdrC.js.map} +1 -1
  141. package/build/server/chunks/{_page.svelte-Dmg-RFCg.js → _page.svelte-CE7COWnF.js} +7 -7
  142. package/build/server/chunks/{_page.svelte-Dmg-RFCg.js.map → _page.svelte-CE7COWnF.js.map} +1 -1
  143. package/build/server/chunks/{_page.svelte-BfB8maoc.js → _page.svelte-CWsjjd4l.js} +9 -9
  144. package/build/server/chunks/{_page.svelte-BfB8maoc.js.map → _page.svelte-CWsjjd4l.js.map} +1 -1
  145. package/build/server/chunks/_page.svelte-D5S2hkBk.js +104 -0
  146. package/build/server/chunks/_page.svelte-D5S2hkBk.js.map +1 -0
  147. package/build/server/chunks/{_page.svelte-B6qyh-K-.js → _page.svelte-D_Ey8QRG.js} +11 -11
  148. package/build/server/chunks/{_page.svelte-B6qyh-K-.js.map → _page.svelte-D_Ey8QRG.js.map} +1 -1
  149. package/build/server/chunks/{_page.svelte-DuzZr5dA.js → _page.svelte-tBuIq8Pg.js} +11 -11
  150. package/build/server/chunks/{_page.svelte-DuzZr5dA.js.map → _page.svelte-tBuIq8Pg.js.map} +1 -1
  151. package/build/server/chunks/_server.ts-BaaY7Z9D.js +77 -0
  152. package/build/server/chunks/_server.ts-BaaY7Z9D.js.map +1 -0
  153. package/build/server/chunks/{_server.ts-5wx4ZppI.js → _server.ts-Bi0Oe4PF.js} +7 -4
  154. package/build/server/chunks/_server.ts-Bi0Oe4PF.js.map +1 -0
  155. package/build/server/chunks/_server.ts-C0317RBD.js +57 -0
  156. package/build/server/chunks/_server.ts-C0317RBD.js.map +1 -0
  157. package/build/server/chunks/{_server.ts-CKXVBbwb.js → _server.ts-CRVNEOd2.js} +10 -8
  158. package/build/server/chunks/_server.ts-CRVNEOd2.js.map +1 -0
  159. package/build/server/chunks/_server.ts-CVPZOpiv.js +23 -0
  160. package/build/server/chunks/_server.ts-CVPZOpiv.js.map +1 -0
  161. package/build/server/chunks/{_server.ts-CyjDrcZN.js → _server.ts-C_OOUqsd.js} +9 -1
  162. package/build/server/chunks/_server.ts-C_OOUqsd.js.map +1 -0
  163. package/build/server/chunks/{_server.ts-BMMTS86y.js → _server.ts-D9ir7u24.js} +3 -4
  164. package/build/server/chunks/{_server.ts-BMMTS86y.js.map → _server.ts-D9ir7u24.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-DZ5naqSL.js → _server.ts-DMm0hBP4.js} +5 -1
  166. package/build/server/chunks/_server.ts-DMm0hBP4.js.map +1 -0
  167. package/build/server/chunks/{_server.ts-CgHc1Zpx.js → _server.ts-DhJx0DLr.js} +7 -4
  168. package/build/server/chunks/_server.ts-DhJx0DLr.js.map +1 -0
  169. package/build/server/chunks/_server.ts-DkZX_O9a.js +39 -0
  170. package/build/server/chunks/_server.ts-DkZX_O9a.js.map +1 -0
  171. package/build/server/chunks/{_server.ts-B1z0q6qZ.js → _server.ts-DxT9IlZF.js} +6 -5
  172. package/build/server/chunks/_server.ts-DxT9IlZF.js.map +1 -0
  173. package/build/server/chunks/{_server.ts-Bt7EAfjo.js → _server.ts-MbnroWEF.js} +25 -48
  174. package/build/server/chunks/_server.ts-MbnroWEF.js.map +1 -0
  175. package/build/server/chunks/_server.ts-Mttr0-Sl.js +48 -0
  176. package/build/server/chunks/_server.ts-Mttr0-Sl.js.map +1 -0
  177. package/build/server/chunks/_server.ts-jtqWDWcf.js +45 -0
  178. package/build/server/chunks/_server.ts-jtqWDWcf.js.map +1 -0
  179. package/build/server/chunks/{cache-Me3zUAaD.js → cache-BlMaDsHi.js} +2 -2
  180. package/build/server/chunks/{cache-Me3zUAaD.js.map → cache-BlMaDsHi.js.map} +1 -1
  181. package/build/server/chunks/{client-CfNnl32g.js → client-Ds1brw-8.js} +4 -4
  182. package/build/server/chunks/{client-CfNnl32g.js.map → client-Ds1brw-8.js.map} +1 -1
  183. package/build/server/chunks/client2-DngLdcUc.js +7 -0
  184. package/build/server/chunks/{client2-DDP30_vY.js.map → client2-DngLdcUc.js.map} +1 -1
  185. package/build/server/chunks/coordinator-DMU_ADXf.js +530 -0
  186. package/build/server/chunks/coordinator-DMU_ADXf.js.map +1 -0
  187. package/build/server/chunks/{index-CJrGuxuM.js → index-CoYB03g7.js} +2 -2
  188. package/build/server/chunks/{index-CJrGuxuM.js.map → index-CoYB03g7.js.map} +1 -1
  189. package/build/server/chunks/{index-server--49oHtA0.js → index-server-Bq3cnK69.js} +2 -2
  190. package/build/server/chunks/{index-server--49oHtA0.js.map → index-server-Bq3cnK69.js.map} +1 -1
  191. package/build/server/chunks/{index2-MY7PXeAc.js → index2-dSGQ9Eaa.js} +2 -2
  192. package/build/server/chunks/{index2-MY7PXeAc.js.map → index2-dSGQ9Eaa.js.map} +1 -1
  193. package/build/server/chunks/{pty-manager-RmhVe2Ez.js → pty-manager-41h3IK8K.js} +100 -2
  194. package/build/server/chunks/pty-manager-41h3IK8K.js.map +1 -0
  195. package/build/server/chunks/qwen-reader-DGfUbKaJ.js +2112 -0
  196. package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -0
  197. package/build/server/chunks/{registry-DzJj2E6I.js → registry-D4J_CuzW.js} +56 -24
  198. package/build/server/chunks/registry-D4J_CuzW.js.map +1 -0
  199. package/build/server/chunks/{root-xvQIR1Bt.js → root-D4IoFC8F.js} +2 -2
  200. package/build/server/chunks/root-D4IoFC8F.js.map +1 -0
  201. package/build/server/chunks/{state.svelte-RCtlkrNH.js → state.svelte-CmHqngc_.js} +3 -3
  202. package/build/server/chunks/{state.svelte-RCtlkrNH.js.map → state.svelte-CmHqngc_.js.map} +1 -1
  203. package/build/server/chunks/{stores-C-LqoonT.js → stores-CRYxfF0o.js} +4 -4
  204. package/build/server/chunks/stores-CRYxfF0o.js.map +1 -0
  205. package/build/server/chunks/super-session-handler-DPyxFgmz.js +22 -0
  206. package/build/server/chunks/super-session-handler-DPyxFgmz.js.map +1 -0
  207. package/build/server/index.js +4 -4
  208. package/build/server/index.js.map +1 -1
  209. package/build/server/manifest.js +79 -21
  210. package/build/server/manifest.js.map +1 -1
  211. package/package.json +2 -2
  212. package/scripts/e2e-all-features.sh +204 -0
  213. package/scripts/e2e-cross-terminal.sh +168 -0
  214. package/server.ts +37 -0
  215. package/src/lib/modules/client/common/provider.ts +0 -2
  216. package/src/lib/modules/client/terminal/ChatView.svelte +9 -2
  217. package/src/lib/modules/client/terminal/LaunchSheet.svelte +3 -0
  218. package/src/lib/modules/server/sessions/amp-reader.ts +439 -0
  219. package/src/lib/modules/server/sessions/copilot-reader.ts +542 -0
  220. package/src/lib/modules/server/sessions/cursor-reader.ts +634 -0
  221. package/src/lib/modules/server/sessions/gemini-reader.ts +48 -25
  222. package/src/lib/modules/server/sessions/opencode-reader.ts +13 -12
  223. package/src/lib/modules/server/sessions/process-detector.ts +37 -60
  224. package/src/lib/modules/server/sessions/provider-paths.ts +173 -0
  225. package/src/lib/modules/server/sessions/qwen-reader.ts +41 -15
  226. package/src/lib/modules/server/sessions/registry.ts +55 -14
  227. package/src/lib/modules/server/sos/coordinator.ts +492 -0
  228. package/src/lib/modules/server/sos/policy-gate.ts +56 -0
  229. package/src/lib/modules/server/sos/relay-store.ts +159 -0
  230. package/src/lib/modules/server/terminal/generic-session-watcher.ts +163 -0
  231. package/src/lib/modules/server/terminal/pty-input.ts +37 -0
  232. package/src/lib/modules/server/terminal/pty-manager.ts +51 -0
  233. package/src/lib/modules/server/ws/server.ts +6 -1
  234. package/src/lib/modules/server/ws/session-handler.ts +17 -2
  235. package/src/lib/modules/server/ws/super-session-handler.ts +200 -0
  236. package/src/lib/theme.css +1 -2
  237. package/src/lib/types/generated/Sessions.ts +1 -4
  238. package/src/lib/types/index.ts +2 -1
  239. package/src/lib/types/server.ts +23 -6
  240. package/src/lib/types/sessions.ts +1 -10
  241. package/src/lib/types/sos.ts +134 -0
  242. package/src/routes/+layout.svelte +9 -2
  243. package/src/routes/api/sessions/connect/+server.ts +7 -3
  244. package/src/routes/api/sos/+server.ts +36 -0
  245. package/src/routes/api/sos/[id]/+server.ts +55 -0
  246. package/src/routes/api/sos/[id]/inject/+server.ts +44 -0
  247. package/src/routes/api/sos/[id]/members/+server.ts +47 -0
  248. package/src/routes/api/sos/[id]/members/[mid]/+server.ts +17 -0
  249. package/src/routes/api/sos/[id]/rules/+server.ts +85 -0
  250. package/src/routes/sos/+page.svelte +195 -0
  251. package/src/routes/sos/[id]/+page.svelte +677 -0
  252. package/build/client/_app/immutable/assets/0.B0O0vCnX.css.br +0 -0
  253. package/build/client/_app/immutable/chunks/BRqaaL5D.js.br +0 -0
  254. package/build/client/_app/immutable/chunks/BRqaaL5D.js.gz +0 -0
  255. package/build/client/_app/immutable/chunks/BctvtE4d.js.br +0 -0
  256. package/build/client/_app/immutable/chunks/BxFShcQO.js +0 -1
  257. package/build/client/_app/immutable/chunks/BxFShcQO.js.br +0 -0
  258. package/build/client/_app/immutable/chunks/BxFShcQO.js.gz +0 -0
  259. package/build/client/_app/immutable/chunks/ByzqAuXw.js +0 -3
  260. package/build/client/_app/immutable/chunks/ByzqAuXw.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/ByzqAuXw.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/C5VOyQCG.js.br +0 -0
  263. package/build/client/_app/immutable/chunks/C5VOyQCG.js.gz +0 -0
  264. package/build/client/_app/immutable/chunks/C_9BZILB.js.br +0 -0
  265. package/build/client/_app/immutable/chunks/C_9BZILB.js.gz +0 -0
  266. package/build/client/_app/immutable/chunks/Cg3dlX05.js.br +0 -0
  267. package/build/client/_app/immutable/chunks/Cg3dlX05.js.gz +0 -0
  268. package/build/client/_app/immutable/chunks/CjfxuHdN.js.br +0 -0
  269. package/build/client/_app/immutable/chunks/CjfxuHdN.js.gz +0 -0
  270. package/build/client/_app/immutable/chunks/DYuMZGL5.js.br +0 -0
  271. package/build/client/_app/immutable/chunks/DYuMZGL5.js.gz +0 -0
  272. package/build/client/_app/immutable/chunks/DZQMsHM5.js.br +0 -0
  273. package/build/client/_app/immutable/chunks/DZQMsHM5.js.gz +0 -0
  274. package/build/client/_app/immutable/chunks/DZvnhU_8.js.br +0 -0
  275. package/build/client/_app/immutable/chunks/DZvnhU_8.js.gz +0 -0
  276. package/build/client/_app/immutable/chunks/Pw0jDB7M.js +0 -1
  277. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.br +0 -0
  278. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.gz +0 -0
  279. package/build/client/_app/immutable/entry/app.CNaTe-zm.js +0 -2
  280. package/build/client/_app/immutable/entry/app.CNaTe-zm.js.br +0 -0
  281. package/build/client/_app/immutable/entry/app.CNaTe-zm.js.gz +0 -0
  282. package/build/client/_app/immutable/entry/start.hxYnjcDu.js +0 -1
  283. package/build/client/_app/immutable/entry/start.hxYnjcDu.js.br +0 -0
  284. package/build/client/_app/immutable/entry/start.hxYnjcDu.js.gz +0 -0
  285. package/build/client/_app/immutable/nodes/0.C3ELOf4c.js +0 -7
  286. package/build/client/_app/immutable/nodes/0.C3ELOf4c.js.br +0 -0
  287. package/build/client/_app/immutable/nodes/0.C3ELOf4c.js.gz +0 -0
  288. package/build/client/_app/immutable/nodes/1.Fqso94b3.js.br +0 -0
  289. package/build/client/_app/immutable/nodes/1.Fqso94b3.js.gz +0 -0
  290. package/build/client/_app/immutable/nodes/2.BusCVJWk.js.br +0 -0
  291. package/build/client/_app/immutable/nodes/2.BusCVJWk.js.gz +0 -0
  292. package/build/client/_app/immutable/nodes/3.DUlpocIc.js.br +0 -0
  293. package/build/client/_app/immutable/nodes/3.DUlpocIc.js.gz +0 -0
  294. package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.br +0 -0
  295. package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.gz +0 -0
  296. package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.br +0 -0
  297. package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.gz +0 -0
  298. package/build/client/_app/immutable/nodes/6.CG4eKRH0.js.br +0 -0
  299. package/build/client/_app/immutable/nodes/6.CG4eKRH0.js.gz +0 -0
  300. package/build/client/_app/immutable/nodes/7.DHilxD1o.js.br +0 -0
  301. package/build/client/_app/immutable/nodes/7.DHilxD1o.js.gz +0 -0
  302. package/build/client/_app/immutable/nodes/8.BjKgvSie.js.br +0 -0
  303. package/build/client/_app/immutable/nodes/8.BjKgvSie.js.gz +0 -0
  304. package/build/client/_app/immutable/nodes/9.BRT6HOXB.js.br +0 -0
  305. package/build/client/_app/immutable/nodes/9.BRT6HOXB.js.gz +0 -0
  306. package/build/server/chunks/1-Bw5KlAjL.js +0 -9
  307. package/build/server/chunks/6-BZ0enR6b.js +0 -9
  308. package/build/server/chunks/7-Lg8imTZn.js +0 -9
  309. package/build/server/chunks/8-DKs4yOL7.js +0 -9
  310. package/build/server/chunks/8-DKs4yOL7.js.map +0 -1
  311. package/build/server/chunks/9-UNmpUWDY.js +0 -9
  312. package/build/server/chunks/9-UNmpUWDY.js.map +0 -1
  313. package/build/server/chunks/Button-B5dU-ntz.js.map +0 -1
  314. package/build/server/chunks/Icon-C7Ml3GX6.js.map +0 -1
  315. package/build/server/chunks/Input-CPGO0sbS.js.map +0 -1
  316. package/build/server/chunks/Pill-CcrtCejm.js.map +0 -1
  317. package/build/server/chunks/Shimmer-C5jkvGr1.js.map +0 -1
  318. package/build/server/chunks/_layout.svelte-noB4j-v2.js.map +0 -1
  319. package/build/server/chunks/_page.svelte-C60lAagP.js.map +0 -1
  320. package/build/server/chunks/_page.svelte-DnTpPnPR.js.map +0 -1
  321. package/build/server/chunks/_server.ts-5wx4ZppI.js.map +0 -1
  322. package/build/server/chunks/_server.ts-B1z0q6qZ.js.map +0 -1
  323. package/build/server/chunks/_server.ts-Bt7EAfjo.js.map +0 -1
  324. package/build/server/chunks/_server.ts-CKXVBbwb.js.map +0 -1
  325. package/build/server/chunks/_server.ts-CgHc1Zpx.js.map +0 -1
  326. package/build/server/chunks/_server.ts-CyjDrcZN.js.map +0 -1
  327. package/build/server/chunks/_server.ts-DZ5naqSL.js.map +0 -1
  328. package/build/server/chunks/client2-DDP30_vY.js +0 -7
  329. package/build/server/chunks/opencode-db-path-BwaPufWf.js +0 -411
  330. package/build/server/chunks/opencode-db-path-BwaPufWf.js.map +0 -1
  331. package/build/server/chunks/pty-manager-RmhVe2Ez.js.map +0 -1
  332. package/build/server/chunks/qwen-reader-2fTFuC_D.js +0 -622
  333. package/build/server/chunks/qwen-reader-2fTFuC_D.js.map +0 -1
  334. package/build/server/chunks/registry-DzJj2E6I.js.map +0 -1
  335. package/build/server/chunks/root-xvQIR1Bt.js.map +0 -1
  336. package/build/server/chunks/stores-C-LqoonT.js.map +0 -1
  337. /package/build/client/_app/immutable/assets/{8.BhoBXADL.css → 10.BhoBXADL.css} +0 -0
  338. /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.br → 10.BhoBXADL.css.br} +0 -0
  339. /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.gz → 10.BhoBXADL.css.gz} +0 -0
  340. /package/build/client/_app/immutable/assets/{9.v5KA95xm.css → 11.v5KA95xm.css} +0 -0
  341. /package/build/client/_app/immutable/assets/{9.v5KA95xm.css.br → 11.v5KA95xm.css.br} +0 -0
  342. /package/build/client/_app/immutable/assets/{9.v5KA95xm.css.gz → 11.v5KA95xm.css.gz} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cache-Me3zUAaD.js","sources":["../../../.svelte-kit/adapter-node/chunks/cache.js"],"sourcesContent":["import { b as attr_class, e as escape_html, s as stringify } from \"./index.js\";\n/* empty css */\nfunction EmptyState($$renderer, $$props) {\n let { title, description, icon, children, classes } = $$props;\n $$renderer.push(`<div${attr_class(`empty-state ${stringify(classes ?? \"\")}`, \"svelte-1elsu8i\")}>`);\n if (typeof icon === \"function\") {\n $$renderer.push(\"<!--[0-->\");\n $$renderer.push(`<div class=\"empty-state-icon svelte-1elsu8i\">`);\n icon($$renderer);\n $$renderer.push(`<!----></div>`);\n } else {\n $$renderer.push(\"<!--[-1-->\");\n }\n $$renderer.push(`<!--]--> <div class=\"empty-state-title svelte-1elsu8i\">${escape_html(title)}</div> <div class=\"empty-state-description svelte-1elsu8i\">${escape_html(description)}</div> `);\n if (typeof children === \"function\") {\n $$renderer.push(\"<!--[0-->\");\n $$renderer.push(`<div class=\"empty-state-actions svelte-1elsu8i\">`);\n children($$renderer);\n $$renderer.push(`<!----></div>`);\n } else {\n $$renderer.push(\"<!--[-1-->\");\n }\n $$renderer.push(`<!--]--></div>`);\n}\nconst RefreshSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <path d=\"M23 4v6h-6M1 20v-6h6\"/>\\n <path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"/>\\n</svg>\\n';\nfunction clearCache(key) {\n try {\n sessionStorage.removeItem(key);\n } catch {\n }\n}\nexport {\n EmptyState as E,\n RefreshSvg as R,\n clearCache as c\n};\n"],"names":[],"mappings":";;AACA;AACA,SAAS,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE;AACzC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO;AAC/D,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,EAAE,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAClC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,6CAA6C,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,UAAU,CAAC;AACpB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;AACpC,EAAE,CAAC,MAAM;AACT,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC,EAAE;AACF,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,uDAAuD,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,2DAA2D,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;AAC9L,EAAE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACtC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,gDAAgD,CAAC,CAAC;AACvE,IAAI,QAAQ,CAAC,UAAU,CAAC;AACxB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;AACpC,EAAE,CAAC,MAAM;AACT,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC,EAAE;AACF,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACnC;AACK,MAAC,UAAU,GAAG;AACnB,SAAS,UAAU,CAAC,GAAG,EAAE;AACzB,EAAE,IAAI;AACN,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;AAClC,EAAE,CAAC,CAAC,MAAM;AACV,EAAE;AACF;;;;"}
1
+ {"version":3,"file":"cache-BlMaDsHi.js","sources":["../../../.svelte-kit/adapter-node/chunks/cache.js"],"sourcesContent":["import { b as attr_class, e as escape_html, s as stringify } from \"./index.js\";\n/* empty css */\nfunction EmptyState($$renderer, $$props) {\n let { title, description, icon, children, classes } = $$props;\n $$renderer.push(`<div${attr_class(`empty-state ${stringify(classes ?? \"\")}`, \"svelte-1elsu8i\")}>`);\n if (typeof icon === \"function\") {\n $$renderer.push(\"<!--[0-->\");\n $$renderer.push(`<div class=\"empty-state-icon svelte-1elsu8i\">`);\n icon($$renderer);\n $$renderer.push(`<!----></div>`);\n } else {\n $$renderer.push(\"<!--[-1-->\");\n }\n $$renderer.push(`<!--]--> <div class=\"empty-state-title svelte-1elsu8i\">${escape_html(title)}</div> <div class=\"empty-state-description svelte-1elsu8i\">${escape_html(description)}</div> `);\n if (typeof children === \"function\") {\n $$renderer.push(\"<!--[0-->\");\n $$renderer.push(`<div class=\"empty-state-actions svelte-1elsu8i\">`);\n children($$renderer);\n $$renderer.push(`<!----></div>`);\n } else {\n $$renderer.push(\"<!--[-1-->\");\n }\n $$renderer.push(`<!--]--></div>`);\n}\nconst RefreshSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n <path d=\"M23 4v6h-6M1 20v-6h6\"/>\\n <path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"/>\\n</svg>\\n';\nfunction clearCache(key) {\n try {\n sessionStorage.removeItem(key);\n } catch {\n }\n}\nexport {\n EmptyState as E,\n RefreshSvg as R,\n clearCache as c\n};\n"],"names":[],"mappings":";;AACA;AACA,SAAS,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE;AACzC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO;AAC/D,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,EAAE,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAClC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,6CAA6C,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,UAAU,CAAC;AACpB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;AACpC,EAAE,CAAC,MAAM;AACT,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC,EAAE;AACF,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,uDAAuD,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,2DAA2D,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;AAC9L,EAAE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACtC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,gDAAgD,CAAC,CAAC;AACvE,IAAI,QAAQ,CAAC,UAAU,CAAC;AACxB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;AACpC,EAAE,CAAC,MAAM;AACT,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC,EAAE;AACF,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACnC;AACK,MAAC,UAAU,GAAG;AACnB,SAAS,UAAU,CAAC,GAAG,EAAE;AACzB,EAAE,IAAI;AACN,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;AAClC,EAAE,CAAC,CAAC,MAAM;AACV,EAAE;AACF;;;;"}
@@ -1,6 +1,6 @@
1
- import './root-xvQIR1Bt.js';
2
- import { w as writable } from './index2-MY7PXeAc.js';
3
- import './state.svelte-RCtlkrNH.js';
1
+ import './root-D4IoFC8F.js';
2
+ import { w as writable } from './index2-dSGQ9Eaa.js';
3
+ import './state.svelte-CmHqngc_.js';
4
4
 
5
5
  function create_updated_store() {
6
6
  const { set, subscribe } = writable(false);
@@ -22,4 +22,4 @@ function goto(url, opts = {}) {
22
22
  }
23
23
 
24
24
  export { goto as g, stores as s };
25
- //# sourceMappingURL=client-CfNnl32g.js.map
25
+ //# sourceMappingURL=client-Ds1brw-8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-CfNnl32g.js","sources":["../../../.svelte-kit/adapter-node/chunks/client.js"],"sourcesContent":["import \"@sveltejs/kit/internal\";\nimport \"./exports.js\";\nimport \"./utils2.js\";\nimport { w as writable } from \"./index2.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"./root.js\";\nimport \"./state.svelte.js\";\nfunction create_updated_store() {\n const { set, subscribe } = writable(false);\n {\n return {\n subscribe,\n // eslint-disable-next-line @typescript-eslint/require-await\n check: async () => false\n };\n }\n}\nconst stores = {\n updated: /* @__PURE__ */ create_updated_store()\n};\nfunction goto(url, opts = {}) {\n {\n throw new Error(\"Cannot call goto(...) on the server\");\n }\n}\nexport {\n goto as g,\n stores as s\n};\n"],"names":[],"mappings":";;;;AAOA,SAAS,oBAAoB,GAAG;AAChC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5C,EAAE;AACF,IAAI,OAAO;AACX,MAAM,SAAS;AACf;AACA,MAAM,KAAK,EAAE,YAAY;AACzB,KAAK;AACL,EAAE;AACF;AACK,MAAC,MAAM,GAAG;AACf,EAAE,OAAO,kBAAkB,oBAAoB;AAC/C;AACA,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9B,EAAE;AACF,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;AAC1D,EAAE;AACF;;;;"}
1
+ {"version":3,"file":"client-Ds1brw-8.js","sources":["../../../.svelte-kit/adapter-node/chunks/client.js"],"sourcesContent":["import \"@sveltejs/kit/internal\";\nimport \"./exports.js\";\nimport \"./utils2.js\";\nimport { w as writable } from \"./index2.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"./root.js\";\nimport \"./state.svelte.js\";\nfunction create_updated_store() {\n const { set, subscribe } = writable(false);\n {\n return {\n subscribe,\n // eslint-disable-next-line @typescript-eslint/require-await\n check: async () => false\n };\n }\n}\nconst stores = {\n updated: /* @__PURE__ */ create_updated_store()\n};\nfunction goto(url, opts = {}) {\n {\n throw new Error(\"Cannot call goto(...) on the server\");\n }\n}\nexport {\n goto as g,\n stores as s\n};\n"],"names":[],"mappings":";;;;AAOA,SAAS,oBAAoB,GAAG;AAChC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5C,EAAE;AACF,IAAI,OAAO;AACX,MAAM,SAAS;AACf;AACA,MAAM,KAAK,EAAE,YAAY;AACzB,KAAK;AACL,EAAE;AACF;AACK,MAAC,MAAM,GAAG;AACf,EAAE,OAAO,kBAAkB,oBAAoB;AAC/C;AACA,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9B,EAAE;AACF,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;AAC1D,EAAE;AACF;;;;"}
@@ -0,0 +1,7 @@
1
+ import './state.svelte-CmHqngc_.js';
2
+ import { s as stores } from './client-Ds1brw-8.js';
3
+
4
+ ({
5
+ check: stores.updated.check
6
+ });
7
+ //# sourceMappingURL=client2-DngLdcUc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client2-DDP30_vY.js","sources":["../../../.svelte-kit/adapter-node/chunks/client2.js"],"sourcesContent":["import \"./state.svelte.js\";\nimport { s as stores } from \"./client.js\";\n({\n check: stores.updated.check\n});\n"],"names":[],"mappings":";;;AAEA,CAAC;AACD,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"client2-DngLdcUc.js","sources":["../../../.svelte-kit/adapter-node/chunks/client2.js"],"sourcesContent":["import \"./state.svelte.js\";\nimport { s as stores } from \"./client.js\";\n({\n check: stores.updated.check\n});\n"],"names":[],"mappings":";;;AAEA,CAAC;AACD,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -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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"}