@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.
Files changed (305) hide show
  1. package/build/client/_app/immutable/assets/{0.NV8k8wxG.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.NV8k8wxG.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/{B9WQy_3X.js → BB2l8o4X.js} +1 -1
  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/{nWG9RHyB.js → BcqA7eKM.js} +2 -2
  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/{BRqaaL5D.js → BvmdJful.js} +1 -1
  26. package/build/client/_app/immutable/chunks/BvmdJful.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BvmdJful.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/{C5VOyQCG.js → ClIPTXf3.js} +1 -1
  29. package/build/client/_app/immutable/chunks/ClIPTXf3.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/ClIPTXf3.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/{8lO1IL7u.js → DA4Zt9Me.js} +1 -1
  32. package/build/client/_app/immutable/chunks/DA4Zt9Me.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/{8lO1IL7u.js.gz → DA4Zt9Me.js.gz} +0 -0
  34. package/build/client/_app/immutable/chunks/{DJvX78LW.js → DCDL_9ys.js} +1 -1
  35. package/build/client/_app/immutable/chunks/DCDL_9ys.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/DCDL_9ys.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/{DYuMZGL5.js → DWmC0QM7.js} +1 -1
  38. package/build/client/_app/immutable/chunks/DWmC0QM7.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/DWmC0QM7.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/{DZvnhU_8.js → ZS5XYDx_.js} +2 -2
  41. package/build/client/_app/immutable/chunks/ZS5XYDx_.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/ZS5XYDx_.js.gz +0 -0
  43. package/build/client/_app/immutable/entry/app.D4TXlu7A.js +2 -0
  44. package/build/client/_app/immutable/entry/app.D4TXlu7A.js.br +0 -0
  45. package/build/client/_app/immutable/entry/app.D4TXlu7A.js.gz +0 -0
  46. package/build/client/_app/immutable/entry/start.BBQhtURO.js +1 -0
  47. package/build/client/_app/immutable/entry/start.BBQhtURO.js.br +0 -0
  48. package/build/client/_app/immutable/entry/start.BBQhtURO.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/0.1zylwAPT.js +10 -0
  50. package/build/client/_app/immutable/nodes/0.1zylwAPT.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/0.1zylwAPT.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{1.C4eFlqSB.js → 1.BVnLUSs-.js} +1 -1
  53. package/build/client/_app/immutable/nodes/1.BVnLUSs-.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/1.BVnLUSs-.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/{8.Bs362gyb.js → 10.D1wl2wPX.js} +2 -2
  56. package/build/client/_app/immutable/nodes/10.D1wl2wPX.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/10.D1wl2wPX.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{9.Cf7_3uqT.js → 11.C18nMGmp.js} +1 -1
  59. package/build/client/_app/immutable/nodes/11.C18nMGmp.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/11.C18nMGmp.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/{2.CdC092Za.js → 2.D1Mm0DUX.js} +2 -2
  62. package/build/client/_app/immutable/nodes/2.D1Mm0DUX.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/2.D1Mm0DUX.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/{3.Dhf4ZWW0.js → 3.Wfz3TcJd.js} +3 -3
  65. package/build/client/_app/immutable/nodes/3.Wfz3TcJd.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/3.Wfz3TcJd.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/{4.BSVqdrrD.js → 4.CBX9A3ka.js} +2 -2
  68. package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/4.CBX9A3ka.js.gz +0 -0
  70. package/build/client/_app/immutable/nodes/{5.Cfj35gpY.js → 5.DIVKuZc9.js} +1 -1
  71. package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.br +0 -0
  72. package/build/client/_app/immutable/nodes/5.DIVKuZc9.js.gz +0 -0
  73. package/build/client/_app/immutable/nodes/{6.B3SEB_li.js → 6.DtZAEPXb.js} +1 -1
  74. package/build/client/_app/immutable/nodes/6.DtZAEPXb.js.br +0 -0
  75. package/build/client/_app/immutable/nodes/6.DtZAEPXb.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/{7.DV8cJ1lX.js → 7.MfBRh32I.js} +1 -1
  77. package/build/client/_app/immutable/nodes/7.MfBRh32I.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/7.MfBRh32I.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/8.DVE6LnOC.js +1 -0
  80. package/build/client/_app/immutable/nodes/8.DVE6LnOC.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/8.DVE6LnOC.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/9.BCel5OqI.js +2 -0
  83. package/build/client/_app/immutable/nodes/9.BCel5OqI.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/9.BCel5OqI.js.gz +0 -0
  85. package/build/client/_app/version.json +1 -1
  86. package/build/client/_app/version.json.br +0 -0
  87. package/build/client/_app/version.json.gz +0 -0
  88. package/build/server/chunks/{0-Cd7jY0a7.js → 0-DJqyZZTr.js} +4 -4
  89. package/build/server/chunks/{0-Cd7jY0a7.js.map → 0-DJqyZZTr.js.map} +1 -1
  90. package/build/server/chunks/1-2YUVen1F.js +9 -0
  91. package/build/server/chunks/{1-C4BOGoJY.js.map → 1-2YUVen1F.js.map} +1 -1
  92. package/build/server/chunks/10-D1X7LB3v.js +9 -0
  93. package/build/server/chunks/10-D1X7LB3v.js.map +1 -0
  94. package/build/server/chunks/11-qXSPdF5j.js +9 -0
  95. package/build/server/chunks/11-qXSPdF5j.js.map +1 -0
  96. package/build/server/chunks/{2-Ba0mNwJ6.js → 2-BD7kj1mt.js} +3 -3
  97. package/build/server/chunks/{2-Ba0mNwJ6.js.map → 2-BD7kj1mt.js.map} +1 -1
  98. package/build/server/chunks/{3-Pg8t1uJU.js → 3-oNjv-BhZ.js} +3 -3
  99. package/build/server/chunks/{3-Pg8t1uJU.js.map → 3-oNjv-BhZ.js.map} +1 -1
  100. package/build/server/chunks/{4-BtYdKCVW.js → 4-Bb5VFhsO.js} +3 -3
  101. package/build/server/chunks/{4-BtYdKCVW.js.map → 4-Bb5VFhsO.js.map} +1 -1
  102. package/build/server/chunks/{5-CvJK3PiH.js → 5-oNoWuIsn.js} +3 -3
  103. package/build/server/chunks/{5-CvJK3PiH.js.map → 5-oNoWuIsn.js.map} +1 -1
  104. package/build/server/chunks/6-DRJGUqHG.js +9 -0
  105. package/build/server/chunks/{6-D8xbnTSo.js.map → 6-DRJGUqHG.js.map} +1 -1
  106. package/build/server/chunks/7-_giJiu0L.js +9 -0
  107. package/build/server/chunks/{7-CkVK06S0.js.map → 7-_giJiu0L.js.map} +1 -1
  108. package/build/server/chunks/8-zvWAVNT5.js +9 -0
  109. package/build/server/chunks/8-zvWAVNT5.js.map +1 -0
  110. package/build/server/chunks/9-DVyDL445.js +9 -0
  111. package/build/server/chunks/9-DVyDL445.js.map +1 -0
  112. package/build/server/chunks/Banner-BgaAs1rs.js +90 -0
  113. package/build/server/chunks/Banner-BgaAs1rs.js.map +1 -0
  114. package/build/server/chunks/{Button-B5dU-ntz.js → Button-D0hZ7JYt.js} +2 -2
  115. package/build/server/chunks/Button-D0hZ7JYt.js.map +1 -0
  116. package/build/server/chunks/{Icon-C7Ml3GX6.js → Icon-D0GBnDcs.js} +3 -3
  117. package/build/server/chunks/Icon-D0GBnDcs.js.map +1 -0
  118. package/build/server/chunks/{Input-CPGO0sbS.js → Input-OmIiydSx.js} +2 -2
  119. package/build/server/chunks/Input-OmIiydSx.js.map +1 -0
  120. package/build/server/chunks/{Pill-CcrtCejm.js → Pill-4xJ-VhAA.js} +3 -3
  121. package/build/server/chunks/Pill-4xJ-VhAA.js.map +1 -0
  122. package/build/server/chunks/{Shimmer-C5jkvGr1.js → Shimmer-Dw2uvTC1.js} +2 -2
  123. package/build/server/chunks/Shimmer-Dw2uvTC1.js.map +1 -0
  124. package/build/server/chunks/{_error.svelte-CSIxs-ab.js → _error.svelte-CZnkxeLr.js} +8 -8
  125. package/build/server/chunks/{_error.svelte-CSIxs-ab.js.map → _error.svelte-CZnkxeLr.js.map} +1 -1
  126. package/build/server/chunks/{_layout.svelte-noB4j-v2.js → _layout.svelte-DfgNGGiM.js} +16 -11
  127. package/build/server/chunks/_layout.svelte-DfgNGGiM.js.map +1 -0
  128. package/build/server/chunks/{_page.svelte-DnTpPnPR.js → _page.svelte-BLo2v_8E.js} +7 -88
  129. package/build/server/chunks/_page.svelte-BLo2v_8E.js.map +1 -0
  130. package/build/server/chunks/_page.svelte-BTlfUsBp.js +43 -0
  131. package/build/server/chunks/_page.svelte-BTlfUsBp.js.map +1 -0
  132. package/build/server/chunks/{_page.svelte-C60lAagP.js → _page.svelte-BUBLUSGo.js} +8 -8
  133. package/build/server/chunks/_page.svelte-BUBLUSGo.js.map +1 -0
  134. package/build/server/chunks/{_page.svelte-BV0XyYJZ.js → _page.svelte-BX2FMgSg.js} +4 -4
  135. package/build/server/chunks/{_page.svelte-BV0XyYJZ.js.map → _page.svelte-BX2FMgSg.js.map} +1 -1
  136. package/build/server/chunks/{_page.svelte-BUkm2304.js → _page.svelte-C7B0qdrC.js} +5 -5
  137. package/build/server/chunks/{_page.svelte-BUkm2304.js.map → _page.svelte-C7B0qdrC.js.map} +1 -1
  138. package/build/server/chunks/{_page.svelte-Dmg-RFCg.js → _page.svelte-CE7COWnF.js} +7 -7
  139. package/build/server/chunks/{_page.svelte-Dmg-RFCg.js.map → _page.svelte-CE7COWnF.js.map} +1 -1
  140. package/build/server/chunks/{_page.svelte-BfB8maoc.js → _page.svelte-CWsjjd4l.js} +9 -9
  141. package/build/server/chunks/{_page.svelte-BfB8maoc.js.map → _page.svelte-CWsjjd4l.js.map} +1 -1
  142. package/build/server/chunks/_page.svelte-D5S2hkBk.js +104 -0
  143. package/build/server/chunks/_page.svelte-D5S2hkBk.js.map +1 -0
  144. package/build/server/chunks/{_page.svelte-B6qyh-K-.js → _page.svelte-D_Ey8QRG.js} +11 -11
  145. package/build/server/chunks/{_page.svelte-B6qyh-K-.js.map → _page.svelte-D_Ey8QRG.js.map} +1 -1
  146. package/build/server/chunks/{_page.svelte-DuzZr5dA.js → _page.svelte-tBuIq8Pg.js} +11 -11
  147. package/build/server/chunks/{_page.svelte-DuzZr5dA.js.map → _page.svelte-tBuIq8Pg.js.map} +1 -1
  148. package/build/server/chunks/_server.ts-BaaY7Z9D.js +77 -0
  149. package/build/server/chunks/_server.ts-BaaY7Z9D.js.map +1 -0
  150. package/build/server/chunks/{_server.ts-Bu3s5hfv.js → _server.ts-Bi0Oe4PF.js} +6 -3
  151. package/build/server/chunks/_server.ts-Bi0Oe4PF.js.map +1 -0
  152. package/build/server/chunks/_server.ts-C0317RBD.js +57 -0
  153. package/build/server/chunks/_server.ts-C0317RBD.js.map +1 -0
  154. package/build/server/chunks/{_server.ts-CwAjt91u.js → _server.ts-CRVNEOd2.js} +5 -3
  155. package/build/server/chunks/{_server.ts-CwAjt91u.js.map → _server.ts-CRVNEOd2.js.map} +1 -1
  156. package/build/server/chunks/_server.ts-CVPZOpiv.js +23 -0
  157. package/build/server/chunks/_server.ts-CVPZOpiv.js.map +1 -0
  158. package/build/server/chunks/{_server.ts-CyjDrcZN.js → _server.ts-C_OOUqsd.js} +9 -1
  159. package/build/server/chunks/_server.ts-C_OOUqsd.js.map +1 -0
  160. package/build/server/chunks/{_server.ts-DZgfQKiH.js → _server.ts-D9ir7u24.js} +2 -2
  161. package/build/server/chunks/{_server.ts-DZgfQKiH.js.map → _server.ts-D9ir7u24.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-DZ5naqSL.js → _server.ts-DMm0hBP4.js} +5 -1
  163. package/build/server/chunks/_server.ts-DMm0hBP4.js.map +1 -0
  164. package/build/server/chunks/{_server.ts-DZP2lhaY.js → _server.ts-DhJx0DLr.js} +6 -3
  165. package/build/server/chunks/_server.ts-DhJx0DLr.js.map +1 -0
  166. package/build/server/chunks/_server.ts-DkZX_O9a.js +39 -0
  167. package/build/server/chunks/_server.ts-DkZX_O9a.js.map +1 -0
  168. package/build/server/chunks/{_server.ts-BA_uWcPw.js → _server.ts-DxT9IlZF.js} +5 -3
  169. package/build/server/chunks/_server.ts-DxT9IlZF.js.map +1 -0
  170. package/build/server/chunks/_server.ts-Mttr0-Sl.js +48 -0
  171. package/build/server/chunks/_server.ts-Mttr0-Sl.js.map +1 -0
  172. package/build/server/chunks/_server.ts-jtqWDWcf.js +45 -0
  173. package/build/server/chunks/_server.ts-jtqWDWcf.js.map +1 -0
  174. package/build/server/chunks/{cache-Me3zUAaD.js → cache-BlMaDsHi.js} +2 -2
  175. package/build/server/chunks/{cache-Me3zUAaD.js.map → cache-BlMaDsHi.js.map} +1 -1
  176. package/build/server/chunks/{client-CfNnl32g.js → client-Ds1brw-8.js} +4 -4
  177. package/build/server/chunks/{client-CfNnl32g.js.map → client-Ds1brw-8.js.map} +1 -1
  178. package/build/server/chunks/client2-DngLdcUc.js +7 -0
  179. package/build/server/chunks/{client2-DDP30_vY.js.map → client2-DngLdcUc.js.map} +1 -1
  180. package/build/server/chunks/coordinator-DMU_ADXf.js +530 -0
  181. package/build/server/chunks/coordinator-DMU_ADXf.js.map +1 -0
  182. package/build/server/chunks/{index-CJrGuxuM.js → index-CoYB03g7.js} +2 -2
  183. package/build/server/chunks/{index-CJrGuxuM.js.map → index-CoYB03g7.js.map} +1 -1
  184. package/build/server/chunks/{index-server--49oHtA0.js → index-server-Bq3cnK69.js} +2 -2
  185. package/build/server/chunks/{index-server--49oHtA0.js.map → index-server-Bq3cnK69.js.map} +1 -1
  186. package/build/server/chunks/{index2-MY7PXeAc.js → index2-dSGQ9Eaa.js} +2 -2
  187. package/build/server/chunks/{index2-MY7PXeAc.js.map → index2-dSGQ9Eaa.js.map} +1 -1
  188. package/build/server/chunks/{pty-manager-DmNSCKAr.js → pty-manager-41h3IK8K.js} +2 -1
  189. package/build/server/chunks/pty-manager-41h3IK8K.js.map +1 -0
  190. package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -1
  191. package/build/server/chunks/{registry-Kcw2UCMv.js → registry-D4J_CuzW.js} +2 -2
  192. package/build/server/chunks/registry-D4J_CuzW.js.map +1 -0
  193. package/build/server/chunks/{root-xvQIR1Bt.js → root-D4IoFC8F.js} +2 -2
  194. package/build/server/chunks/root-D4IoFC8F.js.map +1 -0
  195. package/build/server/chunks/{state.svelte-RCtlkrNH.js → state.svelte-CmHqngc_.js} +3 -3
  196. package/build/server/chunks/{state.svelte-RCtlkrNH.js.map → state.svelte-CmHqngc_.js.map} +1 -1
  197. package/build/server/chunks/{stores-C-LqoonT.js → stores-CRYxfF0o.js} +4 -4
  198. package/build/server/chunks/stores-CRYxfF0o.js.map +1 -0
  199. package/build/server/chunks/super-session-handler-DPyxFgmz.js +22 -0
  200. package/build/server/chunks/super-session-handler-DPyxFgmz.js.map +1 -0
  201. package/build/server/index.js +4 -4
  202. package/build/server/index.js.map +1 -1
  203. package/build/server/manifest.js +78 -20
  204. package/build/server/manifest.js.map +1 -1
  205. package/package.json +2 -2
  206. package/scripts/e2e-all-features.sh +41 -2
  207. package/server.ts +25 -0
  208. package/src/lib/modules/server/sos/coordinator.ts +492 -0
  209. package/src/lib/modules/server/sos/policy-gate.ts +56 -0
  210. package/src/lib/modules/server/sos/relay-store.ts +159 -0
  211. package/src/lib/modules/server/terminal/pty-input.ts +37 -0
  212. package/src/lib/modules/server/ws/server.ts +6 -1
  213. package/src/lib/modules/server/ws/session-handler.ts +6 -1
  214. package/src/lib/modules/server/ws/super-session-handler.ts +200 -0
  215. package/src/lib/types/index.ts +2 -1
  216. package/src/lib/types/sos.ts +134 -0
  217. package/src/routes/+layout.svelte +9 -2
  218. package/src/routes/api/sos/+server.ts +36 -0
  219. package/src/routes/api/sos/[id]/+server.ts +55 -0
  220. package/src/routes/api/sos/[id]/inject/+server.ts +44 -0
  221. package/src/routes/api/sos/[id]/members/+server.ts +47 -0
  222. package/src/routes/api/sos/[id]/members/[mid]/+server.ts +17 -0
  223. package/src/routes/api/sos/[id]/rules/+server.ts +85 -0
  224. package/src/routes/sos/+page.svelte +195 -0
  225. package/src/routes/sos/[id]/+page.svelte +677 -0
  226. package/build/client/_app/immutable/assets/0.NV8k8wxG.css.br +0 -0
  227. package/build/client/_app/immutable/chunks/8lO1IL7u.js.br +0 -0
  228. package/build/client/_app/immutable/chunks/B9WQy_3X.js.br +0 -0
  229. package/build/client/_app/immutable/chunks/B9WQy_3X.js.gz +0 -0
  230. package/build/client/_app/immutable/chunks/BRqaaL5D.js.br +0 -0
  231. package/build/client/_app/immutable/chunks/BRqaaL5D.js.gz +0 -0
  232. package/build/client/_app/immutable/chunks/C5VOyQCG.js.br +0 -0
  233. package/build/client/_app/immutable/chunks/C5VOyQCG.js.gz +0 -0
  234. package/build/client/_app/immutable/chunks/C_9BZILB.js.br +0 -0
  235. package/build/client/_app/immutable/chunks/C_9BZILB.js.gz +0 -0
  236. package/build/client/_app/immutable/chunks/Cg3dlX05.js.br +0 -0
  237. package/build/client/_app/immutable/chunks/Cg3dlX05.js.gz +0 -0
  238. package/build/client/_app/immutable/chunks/DJvX78LW.js.br +0 -0
  239. package/build/client/_app/immutable/chunks/DJvX78LW.js.gz +0 -0
  240. package/build/client/_app/immutable/chunks/DYuMZGL5.js.br +0 -0
  241. package/build/client/_app/immutable/chunks/DYuMZGL5.js.gz +0 -0
  242. package/build/client/_app/immutable/chunks/DZQMsHM5.js.br +0 -0
  243. package/build/client/_app/immutable/chunks/DZQMsHM5.js.gz +0 -0
  244. package/build/client/_app/immutable/chunks/DZvnhU_8.js.br +0 -0
  245. package/build/client/_app/immutable/chunks/DZvnhU_8.js.gz +0 -0
  246. package/build/client/_app/immutable/chunks/nWG9RHyB.js.br +0 -0
  247. package/build/client/_app/immutable/chunks/nWG9RHyB.js.gz +0 -0
  248. package/build/client/_app/immutable/entry/app.f46Ko1hu.js +0 -2
  249. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.br +0 -0
  250. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.gz +0 -0
  251. package/build/client/_app/immutable/entry/start.BVDjNnXt.js +0 -1
  252. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.br +0 -2
  253. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.gz +0 -0
  254. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js +0 -7
  255. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.br +0 -0
  256. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.gz +0 -0
  257. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.br +0 -0
  258. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.gz +0 -0
  259. package/build/client/_app/immutable/nodes/2.CdC092Za.js.br +0 -0
  260. package/build/client/_app/immutable/nodes/2.CdC092Za.js.gz +0 -0
  261. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.br +0 -0
  262. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.gz +0 -0
  263. package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.br +0 -0
  264. package/build/client/_app/immutable/nodes/4.BSVqdrrD.js.gz +0 -0
  265. package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.br +0 -0
  266. package/build/client/_app/immutable/nodes/5.Cfj35gpY.js.gz +0 -0
  267. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.br +0 -0
  268. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.gz +0 -0
  269. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.br +0 -0
  270. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.gz +0 -0
  271. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.br +0 -0
  272. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.gz +0 -0
  273. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.br +0 -0
  274. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.gz +0 -0
  275. package/build/server/chunks/1-C4BOGoJY.js +0 -9
  276. package/build/server/chunks/6-D8xbnTSo.js +0 -9
  277. package/build/server/chunks/7-CkVK06S0.js +0 -9
  278. package/build/server/chunks/8-C8qVhrds.js +0 -9
  279. package/build/server/chunks/8-C8qVhrds.js.map +0 -1
  280. package/build/server/chunks/9-fL5zqN0T.js +0 -9
  281. package/build/server/chunks/9-fL5zqN0T.js.map +0 -1
  282. package/build/server/chunks/Button-B5dU-ntz.js.map +0 -1
  283. package/build/server/chunks/Icon-C7Ml3GX6.js.map +0 -1
  284. package/build/server/chunks/Input-CPGO0sbS.js.map +0 -1
  285. package/build/server/chunks/Pill-CcrtCejm.js.map +0 -1
  286. package/build/server/chunks/Shimmer-C5jkvGr1.js.map +0 -1
  287. package/build/server/chunks/_layout.svelte-noB4j-v2.js.map +0 -1
  288. package/build/server/chunks/_page.svelte-C60lAagP.js.map +0 -1
  289. package/build/server/chunks/_page.svelte-DnTpPnPR.js.map +0 -1
  290. package/build/server/chunks/_server.ts-BA_uWcPw.js.map +0 -1
  291. package/build/server/chunks/_server.ts-Bu3s5hfv.js.map +0 -1
  292. package/build/server/chunks/_server.ts-CyjDrcZN.js.map +0 -1
  293. package/build/server/chunks/_server.ts-DZ5naqSL.js.map +0 -1
  294. package/build/server/chunks/_server.ts-DZP2lhaY.js.map +0 -1
  295. package/build/server/chunks/client2-DDP30_vY.js +0 -7
  296. package/build/server/chunks/pty-manager-DmNSCKAr.js.map +0 -1
  297. package/build/server/chunks/registry-Kcw2UCMv.js.map +0 -1
  298. package/build/server/chunks/root-xvQIR1Bt.js.map +0 -1
  299. package/build/server/chunks/stores-C-LqoonT.js.map +0 -1
  300. /package/build/client/_app/immutable/assets/{8.BhoBXADL.css → 10.BhoBXADL.css} +0 -0
  301. /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.br → 10.BhoBXADL.css.br} +0 -0
  302. /package/build/client/_app/immutable/assets/{8.BhoBXADL.css.gz → 10.BhoBXADL.css.gz} +0 -0
  303. /package/build/client/_app/immutable/assets/{9.v5KA95xm.css → 11.v5KA95xm.css} +0 -0
  304. /package/build/client/_app/immutable/assets/{9.v5KA95xm.css.br → 11.v5KA95xm.css.br} +0 -0
  305. /package/build/client/_app/immutable/assets/{9.v5KA95xm.css.gz → 11.v5KA95xm.css.gz} +0 -0
@@ -0,0 +1,10 @@
1
+ import{a as U,e as V,f as F,c as G}from"../chunks/BPDiEZo0.js";import{p as H,E as J,v as Q,t as X,w as Y,b as y,c as e,d as n,g as l,r as a,B as u,s as Z,x as k}from"../chunks/DWmC0QM7.js";import{P as tt,B as et,a as at,c,s as g}from"../chunks/ZS5XYDx_.js";import{g as st}from"../chunks/BcqA7eKM.js";import{p as rt}from"../chunks/DCDL_9ys.js";import{B as nt}from"../chunks/Bn-6X1BO.js";import{S as ot}from"../chunks/CG453M9q.js";import{T as it}from"../chunks/CSjf4fBs.js";const lt=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
2
+ <rect x="3" y="3" width="7" height="7"/>
3
+ <rect x="14" y="3" width="7" height="7"/>
4
+ <rect x="3" y="14" width="7" height="7"/>
5
+ <rect x="14" y="14" width="7" height="7"/>
6
+ </svg>
7
+ `,ct=`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
8
+ <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>
9
+ </svg>
10
+ `;var vt=F('<div class="app"><header class="header"><div class="header-content"><a href="/" class="logo"><img src="/app-icon.png" alt="Shooter" class="logo-icon" width="24" height="24"/> <span class="logo-text">Shooter</span></a> <div class="nav-right svelte-12qhfyh"><!> <!></div></div></header> <div class="content-area svelte-12qhfyh"><!></div> <nav class="bottom-tabs svelte-12qhfyh"><div class="bottom-tabs-inner svelte-12qhfyh"><a href="/"><!> <span>Dashboard</span></a> <a href="/activity"><!> <span>Activity</span></a> <a href="/terminals"><!> <span>Terminals</span></a> <a href="/sos"><!> <span>SoS</span></a></div></nav></div>');function _t(D,o){H(o,!0);const r=()=>G(rt,"$page",O),[O,T]=V();J(()=>{if(o.data?.aiProviders&&(window.__aiProviders=o.data.aiProviders,o.data.neurolinkProvider)){const t=window.process;t?.env&&(t.env.NEUROLINK_PROVIDER=o.data.neurolinkProvider)}});let i=Z("unknown");const E={degraded:"Degraded",error:"Offline",healthy:"Online",unknown:"Checking"},L={degraded:"pill-status-degraded",error:"pill-status-offline",healthy:"pill-status-online",unknown:"pill-status-unknown"};Q(()=>{b();const t=setInterval(()=>{b()},3e4);return()=>{clearInterval(t)}});async function b(){try{const t=await fetch("/api/health");if(!t.ok){y(i,"error");return}const s=await t.json();y(i,s.status==="healthy"||s.status==="degraded"||s.status==="error"?s.status:"unknown",!0)}catch{y(i,"error")}}var p=vt(),f=e(p),S=e(f),x=n(e(S),2),q=e(x);{let t=k(()=>E[l(i)]||"Checking"),s=k(()=>L[l(i)]||"pill-status-unknown");tt(q,{get text(){return l(t)},get classes(){return l(s)}})}var R=n(q,2);{const t=_=>{c(_,{get svg(){return ot},classes:"icon-18"})};let s=k(()=>r().url.pathname==="/config"?"btn-gear-active":"");et(R,{get classes(){return`btn-gear ${l(s)??""}`},onclick:()=>{st("/config")},ariaLabel:"Settings",icon:t,$$slots:{icon:!0}})}a(x),a(S),a(f);var m=n(f,2),M=e(m);at(M,()=>o.children),a(m);var P=n(m,2),B=e(P),v=e(B);let C;var N=e(v);c(N,{get svg(){return lt},classes:"icon-26"}),u(2),a(v);var h=n(v,2);let I;var $=e(h);c($,{get svg(){return nt},classes:"icon-26"}),u(2),a(h);var d=n(h,2);let W;var z=e(d);c(z,{get svg(){return it},classes:"icon-26"}),u(2),a(d);var w=n(d,2);let j;var A=e(w);c(A,{get svg(){return ct},classes:"icon-26"}),u(2),a(w),a(B),a(P),a(p),X((t,s,_,K)=>{C=g(v,1,"tab-item svelte-12qhfyh",null,C,t),I=g(h,1,"tab-item svelte-12qhfyh",null,I,s),W=g(d,1,"tab-item svelte-12qhfyh",null,W,_),j=g(w,1,"tab-item svelte-12qhfyh",null,j,K)},[()=>({active:r().url.pathname==="/"||r().url.pathname.startsWith("/project")||r().url.pathname.startsWith("/session")}),()=>({active:r().url.pathname.startsWith("/activity")}),()=>({active:r().url.pathname.startsWith("/terminals")}),()=>({active:r().url.pathname.startsWith("/sos")})]),U(D,p),Y(),T()}export{_t as component};
@@ -1 +1 @@
1
- import{i as b,a as c,c as J,f as K,s as k,e as L,t as d}from"../chunks/Cg3dlX05.js";import{D as M,E as N,F as w,G as P,I as y,J as q,g as G,K as z,L as C,M as O,p as Q,t as j,w as R,c as f,d as g,N as U,$ as V,r as v}from"../chunks/DYuMZGL5.js";import{h as W}from"../chunks/DZQMsHM5.js";import{g as X}from"../chunks/nWG9RHyB.js";import{p as Y}from"../chunks/DJvX78LW.js";import{B as $}from"../chunks/DZvnhU_8.js";function Z(n=!1){const r=M,s=r.l.u;if(!s)return;let p=()=>z(r.s);if(n){let i=0,a={};const _=C(()=>{let l=!1;const m=r.s;for(const o in m)m[o]!==a[o]&&(a[o]=m[o],l=!0);return l&&i++,i});p=()=>G(_)}s.b.length&&N(()=>{B(r,p),y(s.b)}),w(()=>{const i=P(()=>s.m.map(q));return()=>{for(const a of i)typeof a=="function"&&a()}}),s.a.length&&w(()=>{B(r,p),y(s.a)})}function B(n,r){if(n.l.s)for(const s of n.l.s)G(s);r()}O();var ee=K('<main class="error-page svelte-1j96wlh"><div class="error-content svelte-1j96wlh"><div class="error-code svelte-1j96wlh"> </div> <h1 class="error-title svelte-1j96wlh"><!></h1> <p class="error-message svelte-1j96wlh"><!></p> <div class="error-actions svelte-1j96wlh"><!> <!></div></div></main>');function ie(n,r){Q(r,!1);const s=()=>L(Y,"$page",p),[p,i]=J();Z();var a=ee();W("1j96wlh",e=>{U(()=>{V.title="Error - Shooter"})});var _=f(a),l=f(_),m=f(l,!0);v(l);var o=g(l,2),E=f(o);{var S=e=>{var t=d("Page not found");c(e,t)},T=e=>{var t=d("Something went wrong");c(e,t)};b(E,e=>{s().status===404?e(S):e(T,-1)})}v(o);var u=g(o,2),A=f(u);{var D=e=>{var t=d();j(()=>k(t,s().error.message)),c(e,t)},F=e=>{var t=d("The page you're looking for doesn't exist or has been moved.");c(e,t)},H=e=>{var t=d("An unexpected error occurred. Try refreshing or going back.");c(e,t)};b(A,e=>{s().error?.message?e(D):s().status===404?e(F,1):e(H,-1)})}v(u);var h=g(u,2),x=f(h);$(x,{text:"Go Home",classes:"btn-primary",onclick:()=>{X("/")}});var I=g(x,2);$(I,{text:"Go Back",classes:"btn-secondary",onclick:()=>{history.back()}}),v(h),v(_),v(a),j(()=>k(m,s().status)),c(n,a),R(),i()}export{ie as component};
1
+ import{i as b,a as c,e as J,f as K,s as k,c as L,t as d}from"../chunks/BPDiEZo0.js";import{F as M,G as N,E as w,I as P,J as y,K as q,g as G,L as z,M as C,N as O,p as Q,t as j,w as R,c as f,d as g,D as U,$ as V,r as v}from"../chunks/DWmC0QM7.js";import{h as W}from"../chunks/2rBV5OkJ.js";import{g as X}from"../chunks/BcqA7eKM.js";import{p as Y}from"../chunks/DCDL_9ys.js";import{B as $}from"../chunks/ZS5XYDx_.js";function Z(n=!1){const r=M,s=r.l.u;if(!s)return;let p=()=>z(r.s);if(n){let i=0,a={};const _=C(()=>{let l=!1;const m=r.s;for(const o in m)m[o]!==a[o]&&(a[o]=m[o],l=!0);return l&&i++,i});p=()=>G(_)}s.b.length&&N(()=>{B(r,p),y(s.b)}),w(()=>{const i=P(()=>s.m.map(q));return()=>{for(const a of i)typeof a=="function"&&a()}}),s.a.length&&w(()=>{B(r,p),y(s.a)})}function B(n,r){if(n.l.s)for(const s of n.l.s)G(s);r()}O();var ee=K('<main class="error-page svelte-1j96wlh"><div class="error-content svelte-1j96wlh"><div class="error-code svelte-1j96wlh"> </div> <h1 class="error-title svelte-1j96wlh"><!></h1> <p class="error-message svelte-1j96wlh"><!></p> <div class="error-actions svelte-1j96wlh"><!> <!></div></div></main>');function ie(n,r){Q(r,!1);const s=()=>L(Y,"$page",p),[p,i]=J();Z();var a=ee();W("1j96wlh",e=>{U(()=>{V.title="Error - Shooter"})});var _=f(a),l=f(_),m=f(l,!0);v(l);var o=g(l,2),E=f(o);{var S=e=>{var t=d("Page not found");c(e,t)},T=e=>{var t=d("Something went wrong");c(e,t)};b(E,e=>{s().status===404?e(S):e(T,-1)})}v(o);var u=g(o,2),A=f(u);{var D=e=>{var t=d();j(()=>k(t,s().error.message)),c(e,t)},F=e=>{var t=d("The page you're looking for doesn't exist or has been moved.");c(e,t)},H=e=>{var t=d("An unexpected error occurred. Try refreshing or going back.");c(e,t)};b(A,e=>{s().error?.message?e(D):s().status===404?e(F,1):e(H,-1)})}v(u);var h=g(u,2),x=f(h);$(x,{text:"Go Home",classes:"btn-primary",onclick:()=>{X("/")}});var I=g(x,2);$(I,{text:"Go Back",classes:"btn-secondary",onclick:()=>{history.back()}}),v(h),v(_),v(a),j(()=>k(m,s().status)),c(n,a),R(),i()}export{ie as component};
@@ -1,2 +1,2 @@
1
- import{p as fe,j as Ve,i as H,a as _,s as M,f as b,t as We}from"../chunks/Cg3dlX05.js";import{p as ke,v as $e,A as _e,w as Me,b as i,c as n,r as s,t as K,g as e,s as P,x as C,q as Ke,d as c,B as he,y as Ye,N as Ue,$ as Xe}from"../chunks/DYuMZGL5.js";import{T as Pe,s as Le,d as le,S as et,e as ge,C as tt,f as at,I as st,B as ne,b as Be,c as Ae,i as rt,P as Ie,g as nt}from"../chunks/DZvnhU_8.js";import{h as lt}from"../chunks/DZQMsHM5.js";import{g as De}from"../chunks/nWG9RHyB.js";import{R as it,S as ot}from"../chunks/BRqaaL5D.js";import{S as ct}from"../chunks/CG453M9q.js";import{T as dt}from"../chunks/CSjf4fBs.js";import{c as ut,s as Ee,g as vt}from"../chunks/xs1Xl3_e.js";import{i as mt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{A as pt}from"../chunks/BdtLzPpO.js";import{E as Ne}from"../chunks/C5VOyQCG.js";var ft=b("<time> </time>"),ht=b("<time> </time>");function je(ie,d){ke(d,!0);let U=fe(d,"format",3,"long"),L=fe(d,"updateInterval",3,6e4),B=fe(d,"tooltip",3,!1),v=C(()=>d.date instanceof Date?d.date:new Date(d.date)),w=C(()=>e(v).toISOString()),O=C(()=>e(v).toLocaleString(d.locale,{dateStyle:"full",timeStyle:"short"})),x=P("");function h(){const S=Date.now(),f=e(v).getTime()-S,u=Math.abs(f),g=Math.round(u/1e3),J=Math.round(u/6e4),R=Math.round(u/36e5),z=Math.round(u/864e5),F=Math.round(u/6048e5),ee=Math.round(u/2592e6),Q=Math.round(u/31536e6),te=new Intl.RelativeTimeFormat(d.locale,{style:U()});let A,o;g<60?(A="second",o=g):J<60?(A="minute",o=J):R<24?(A="hour",o=R):z<7?(A="day",o=z):F<4?(A="week",o=F):ee<12?(A="month",o=ee):(A="year",o=Q);const E=f<0?-1:1;return te.format(E*o,A)}function D(){i(x,h(),!0)}$e(()=>{if(D(),L()>0){const S=setInterval(D,L());return()=>clearInterval(S)}});var X=Ve(),oe=_e(X);{var ce=S=>{Pe(S,{get text(){return e(O)},children:(m,f)=>{var u=ft(),g=n(u,!0);s(u),K(()=>{Le(u,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(u,"datetime",e(w)),le(u,"data-pw",typeof d.testId=="string"?d.testId:null),M(g,e(x))}),_(m,u)},$$slots:{default:!0}})},q=S=>{var m=ht(),f=n(m,!0);s(m),K(()=>{Le(m,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(m,"datetime",e(w)),le(m,"data-pw",typeof d.testId=="string"?d.testId:null),M(f,e(x))}),_(S,m)};H(oe,S=>{B()?S(ce):S(q,-1)})}_(ie,X),Me()}var gt=b('<div class="section svelte-plslui"><span class="section-label svelte-plslui">Quick Launch</span> <div class="preset-grid svelte-plslui"></div></div> <div class="section svelte-plslui"><span class="section-label svelte-plslui">Working Directory</span> <!> <div class="custom-cwd-group svelte-plslui"><!></div></div> <!> <!>',1);function _t(ie,d){ke(d,!0);let U=fe(d,"open",15,!1);const L=[{args:[],command:"claude",label:"Claude Code"},{args:[],command:"codex",label:"Codex"},{args:[],command:"gemini",label:"Gemini"},{args:[],command:"qwen",label:"Qwen"},{args:[],command:"cursor-agent",label:"Cursor"},{args:[],command:"copilot",label:"Copilot"},{args:[],command:"amp",label:"Amp"},{args:[],command:"opencode",label:"OpenCode"},{args:[],command:"zsh",label:"Shell / zsh"},{args:[],command:"bash",label:"Bash"}];let B=P(0),v=P(Ke([])),w=P(""),O=P(""),x=P(!1),h=P("");$e(()=>{D()});async function D(){try{const m=await fetch("/api/sessions?limit=50&offset=0",{headers:{Authorization:`Bearer ${d.apiKey}`}});if(!m.ok)return;const u=(await m.json()).projects.map(g=>g.fullPath).filter(g=>typeof g=="string"&&g.length>0);i(v,[...new Set(u)],!0),e(v).length>0&&!e(w)&&i(w,e(v)[0],!0)}catch{}}function X(m){i(B,m,!0)}function oe(){return L[e(B)].command}function ce(){return L[e(B)].args}function q(){const m=e(O).trim();return m||(e(w)?e(w):"/tmp")}async function S(){const m=oe();if(m){i(x,!0),i(h,"");try{const f=await fetch("/api/terminals",{body:JSON.stringify({args:ce(),command:m,cwd:q()||void 0}),headers:{Authorization:`Bearer ${d.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(!f.ok){const g=await f.json().catch(()=>({}));i(h,(typeof g.error=="string"?g.error:"")||`Failed to launch (${f.status})`,!0);return}const u=await f.json();d.onLaunch(u)}catch{i(h,"Network error — is the server running?")}finally{i(x,!1)}}}et(ie,{side:"bottom",title:"New Terminal",get onclose(){return d.onClose},classes:"launch-sheet",get open(){return U()},set open(f){U(f)},content:f=>{var u=gt(),g=_e(u),J=c(n(g),2);ge(J,23,()=>L,o=>o.label,(o,E,k)=>{{let de=C(()=>e(B)===e(k));tt(o,{mode:"radio",get selected(){return e(de)},onclick:()=>{X(e(k))},classes:"preset-choice",children:(ue,we)=>{he();var ve=We();K(()=>M(ve,e(E).label)),_(ue,ve)},$$slots:{default:!0}})}}),s(J),s(g);var R=c(g,2),z=c(n(R),2);{let o=C(()=>e(v).length>0?e(v).map(k=>({id:k,label:k})):[{id:"",label:"No recent projects"}]),E=C(()=>e(w)?[e(w)]:e(v).length>0?[e(v)[0]]:[""]);at(z,{get items(){return e(o)},get value(){return e(E)},placeholder:"Select a project",onchange:k=>{i(w,k[0]||"",!0)},classes:"launch-select"})}var F=c(z,2),ee=n(F);st(ee,{label:"Or enter a custom path",dataType:"text",placeholder:"/path/to/project",classes:"input-mono launch-input",get value(){return e(O)},set value(o){i(O,o,!0)}}),s(F),s(R);var Q=c(R,2);{let o=C(()=>e(x)?"Launching...":"Launch Terminal");ne(Q,{classes:"btn-launch",get disabled(){return e(x)},onclick:S,get showLoader(){return e(x)},get text(){return e(o)}})}var te=c(Q,2);{var A=o=>{Be(o,{get text(){return e(h)},classes:"banner-error launch-error-banner"})};H(te,o=>{e(h)&&o(A)})}_(f,u)},$$slots:{content:!0}}),Me()}var wt=b('<meta name="description" content="Active terminal sessions on this machine"/>'),bt=b("<!> Refresh",1),xt=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),yt=b('<div class="loading-container"></div>'),St=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),Ct=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Tt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),At=b('<a class="terminal-card svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-running svelte-1ewpmn2"><span></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!></div> <!></div> <div class="terminal-card-meta svelte-1ewpmn2"><!> <span class="terminal-pid svelte-1ewpmn2"> </span></div> <!></a>'),It=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Pt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),Lt=b('<a class="terminal-card terminal-card-exited svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-exited svelte-1ewpmn2"><span class="status-dot-static"></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!> <!></div> <div class="terminal-card-right svelte-1ewpmn2"><!> <!></div></div> <div class="terminal-card-meta svelte-1ewpmn2"><!></div> <!></a>'),kt=b('<div class="terminals-container svelte-1ewpmn2"><!> <!></div>'),$t=b('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Terminals</h1> <p class="page-description">Active terminal sessions on this machine</p></div> <div class="page-actions"><!> <!></div></div></div> <!> <!></main> <!>',1);function Jt(ie,d){ke(d,!0);const U=1e4,L="shooter_terminals",B=["zsh","bash","sh","fish"];let v=P(Ke([])),w=P(!1),O=!1,x=P(null),h=P(null),D=null;const X=C(()=>e(v).filter(t=>t.status==="running")),oe=C(()=>e(v).filter(t=>t.status==="exited"));$e(()=>{ce();const t=vt(L,1e4);t&&(i(v,t,!0),i(w,!1)),q(),D=setInterval(()=>{e(h)?.apiKey&&q()},U)}),Ye(()=>{D&&(clearInterval(D),D=null)});function ce(){try{const t=localStorage.getItem("shooter_config");if(t){const a=JSON.parse(t);mt(a)?i(h,a,!0):(localStorage.removeItem("shooter_config"),i(h,null))}}catch{}}async function q(){if(!(!e(h)?.apiKey||O)){O=!0,e(v).length===0&&i(w,!0);try{const a=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(!a.ok){i(x,`Failed to load terminals (HTTP ${a.status})`);return}i(x,null);const r=await a.json();i(v,r.terminals.map(y=>({...y,lastOutput:y.lastOutput??null})),!0),Ee(L,e(v))}catch(t){i(x,"Failed to load terminals"),console.error("Failed to fetch terminals:",t)}finally{i(w,!1),O=!1}}}async function S(){i(w,!0),ut(L),await q()}function m(){De("/config")}let f=P(!1);function u(){i(f,!0)}function g(){i(f,!1)}function J(t){i(f,!1),De(`/terminals/${t.id}`)}function R(t){const a=t.split("/").pop()||t;return pt.includes(a)?"ai":(B.includes(a),"shell")}function z(t){return t.status==="exited"?{class:"pill-badge-ended",label:"ENDED"}:R(t.command)==="ai"?{class:"pill-badge-ai",label:"AI"}:{class:"pill-badge-shell",label:"SHELL"}}function F(t,a=40){if(t.length<=a)return t;const r=t.split("/");return r.length<=3?t:`${r[0]}/.../${r.slice(-2).join("/")}`}function ee(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g,"").replace(/[\x00-\x1f]/g,"").trim()}function Q(t,a=80){if(!t)return"";const r=t.split(`
2
- `).map(T=>ee(T)).filter(T=>T.trim()),y=r[r.length-1]||"";return y.length<=a?y:`${y.slice(0,a)}...`}function te(t){return t.split("/").pop()||t}async function A(t,a){if(t.preventDefault(),t.stopPropagation(),!!e(h)?.apiKey)try{(await fetch(`/api/terminals/${a}`,{headers:{Authorization:`Bearer ${e(h).apiKey}`},method:"DELETE"})).ok&&(i(v,e(v).filter(y=>y.id!==a),!0),Ee(L,e(v)))}catch(r){console.error("Failed to remove terminal:",r)}}var o=$t();lt("1ewpmn2",t=>{var a=wt();Ue(()=>{Xe.title="Terminals - Shooter"}),_(t,a)});var E=_e(o),k=n(E),de=n(k),ue=c(n(de),2),we=n(ue);ne(we,{classes:"btn-secondary",onclick:S,get disabled(){return e(w)},children:(t,a)=>{var r=bt(),y=_e(r);Ae(y,{get svg(){return it},classes:"icon-14"}),he(),_(t,r)},$$slots:{default:!0}});var ve=c(we,2);ne(ve,{classes:"btn-primary",onclick:u,children:(t,a)=>{var r=xt();he(),_(t,r)},$$slots:{default:!0}}),s(ue),s(de),s(k);var Oe=c(k,2);{var Re=t=>{Be(t,{get text(){return e(x)},classes:"banner-error"})};H(Oe,t=>{e(x)&&t(Re)})}var ze=c(Oe,2);{var Fe=t=>{var a=yt();ge(a,20,()=>Array(4),rt,(r,y)=>{ot(r,{classes:"shimmer-card"})}),s(a),_(t,a)},He=t=>{Ne(t,{title:"Configuration Required",description:"Set up your API credentials to view terminal sessions",icon:r=>{Ae(r,{get svg(){return ct},classes:"icon-24"})},children:(r,y)=>{ne(r,{classes:"btn-primary",onclick:m,text:"Configure Settings"})}})},qe=t=>{Ne(t,{title:"No terminals",description:"Launch a new terminal session to get started. Terminal sessions will appear here once created.",icon:r=>{Ae(r,{get svg(){return dt},classes:"icon-24"})},children:(r,y)=>{ne(r,{classes:"btn-primary",onclick:u,children:(T,l)=>{var Z=St();he(),_(T,Z)},$$slots:{default:!0}})}})},Je=t=>{var a=kt(),r=n(a);ge(r,17,()=>e(X),T=>T.id,(T,l)=>{const Z=C(()=>z(e(l)));var N=At(),G=n(N),V=n(G),W=n(V),be=n(W);s(W);var ae=c(W,2),xe=n(ae,!0);s(ae);var ye=c(ae,2);Ie(ye,{get text(){return e(Z).label},get classes(){return e(Z).class}}),s(V);var me=c(V,2);je(me,{get date(){return e(l).createdAt},format:"narrow",classes:"terminal-time"}),s(G);var se=c(G,2),pe=n(se);{let p=C(()=>e(l).currentCwd||e(l).cwd);Pe(pe,{get text(){return e(p)},position:"bottom",children:(I,$)=>{var j=Ct(),Y=n(j,!0);s(j),K(Ge=>M(Y,Ge),[()=>F(e(l).currentCwd||e(l).cwd)]),_(I,j)},$$slots:{default:!0}})}var re=c(pe,2),Se=n(re);s(re),s(se);var Ce=c(se,2);{var Te=p=>{var I=Tt(),$=n(I),j=n($,!0);s($),s(I),K(Y=>M(j,Y),[()=>Q(e(l).lastOutput)]),_(p,I)};H(Ce,p=>{e(l).lastOutput&&p(Te)})}s(N),K(p=>{le(N,"href",`/terminals/${e(l).id??""}`),Le(be,1,nt(e(l).isActive?"status-dot-active":"status-dot-idle")),M(xe,p),M(Se,`PID ${e(l).pid??""}`)},[()=>te(e(l).command)]),_(T,N)});var y=c(r,2);ge(y,17,()=>e(oe),T=>T.id,(T,l)=>{const Z=C(()=>z(e(l)));var N=Lt(),G=n(N),V=n(G),W=c(n(V),2),be=n(W,!0);s(W);var ae=c(W,2);Ie(ae,{get text(){return e(Z).label},get classes(){return e(Z).class}});var xe=c(ae,2);{var ye=p=>{{let I=C(()=>e(l).exitCode!==0?"pill-exit-error":"pill-exit-ok");Ie(p,{get text(){return`exit ${e(l).exitCode??""}`},get classes(){return e(I)}})}};H(xe,p=>{e(l).exitCode!==null&&p(ye)})}s(V);var me=c(V,2),se=n(me);{let p=C(()=>e(l).exitedAt||e(l).createdAt);je(se,{get date(){return e(p)},format:"narrow",classes:"terminal-time"})}var pe=c(se,2);ne(pe,{classes:"btn-ghost btn-sm btn-remove",onclick:p=>{A(p,e(l).id)},text:"×"}),s(me),s(G);var re=c(G,2),Se=n(re);Pe(Se,{get text(){return e(l).cwd},position:"bottom",children:(p,I)=>{var $=It(),j=n($,!0);s($),K(Y=>M(j,Y),[()=>F(e(l).cwd)]),_(p,$)},$$slots:{default:!0}}),s(re);var Ce=c(re,2);{var Te=p=>{var I=Pt(),$=n(I),j=n($,!0);s($),s(I),K(Y=>M(j,Y),[()=>Q(e(l).lastOutput)]),_(p,I)};H(Ce,p=>{e(l).lastOutput&&p(Te)})}s(N),K(p=>{le(N,"href",`/terminals/${e(l).id??""}`),M(be,p)},[()=>te(e(l).command)]),_(T,N)}),s(a),_(t,a)};H(ze,t=>{e(w)&&e(v).length===0?t(Fe):e(h)?.apiKey?e(v).length===0?t(qe,2):t(Je,-1):t(He,1)})}s(E);var Qe=c(E,2);{var Ze=t=>{_t(t,{get apiKey(){return e(h).apiKey},onClose:g,onLaunch:J,get open(){return e(f)},set open(a){i(f,a,!0)}})};H(Qe,t=>{e(h)?.apiKey&&t(Ze)})}_(ie,o),Me()}export{Jt as component};
1
+ import{p as fe,j as Ve,i as H,a as _,s as D,f as b,t as We}from"../chunks/BPDiEZo0.js";import{p as ke,v as $e,A as _e,w as De,b as i,c as n,r as s,t as K,g as e,s as P,x as C,q as Ke,d as c,B as he,y as Ye,D as Ue,$ as Xe}from"../chunks/DWmC0QM7.js";import{T as Pe,s as Le,d as le,f as et,e as ge,C as tt,S as at,I as st,B as ne,b as Be,c as Ae,i as rt,P as Ie,g as nt}from"../chunks/ZS5XYDx_.js";import{h as lt}from"../chunks/2rBV5OkJ.js";import{g as Oe}from"../chunks/BcqA7eKM.js";import{R as it,S as ot}from"../chunks/BvmdJful.js";import{S as ct}from"../chunks/CG453M9q.js";import{T as dt}from"../chunks/CSjf4fBs.js";import{c as ut,s as Ee,g as vt}from"../chunks/xs1Xl3_e.js";import{i as mt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{A as pt}from"../chunks/BdtLzPpO.js";import{E as Ne}from"../chunks/ClIPTXf3.js";var ft=b("<time> </time>"),ht=b("<time> </time>");function je(ie,d){ke(d,!0);let U=fe(d,"format",3,"long"),L=fe(d,"updateInterval",3,6e4),B=fe(d,"tooltip",3,!1),v=C(()=>d.date instanceof Date?d.date:new Date(d.date)),w=C(()=>e(v).toISOString()),M=C(()=>e(v).toLocaleString(d.locale,{dateStyle:"full",timeStyle:"short"})),x=P("");function h(){const S=Date.now(),f=e(v).getTime()-S,u=Math.abs(f),g=Math.round(u/1e3),J=Math.round(u/6e4),R=Math.round(u/36e5),z=Math.round(u/864e5),F=Math.round(u/6048e5),ee=Math.round(u/2592e6),Q=Math.round(u/31536e6),te=new Intl.RelativeTimeFormat(d.locale,{style:U()});let A,o;g<60?(A="second",o=g):J<60?(A="minute",o=J):R<24?(A="hour",o=R):z<7?(A="day",o=z):F<4?(A="week",o=F):ee<12?(A="month",o=ee):(A="year",o=Q);const E=f<0?-1:1;return te.format(E*o,A)}function O(){i(x,h(),!0)}$e(()=>{if(O(),L()>0){const S=setInterval(O,L());return()=>clearInterval(S)}});var X=Ve(),oe=_e(X);{var ce=S=>{Pe(S,{get text(){return e(M)},children:(m,f)=>{var u=ft(),g=n(u,!0);s(u),K(()=>{Le(u,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(u,"datetime",e(w)),le(u,"data-pw",typeof d.testId=="string"?d.testId:null),D(g,e(x))}),_(m,u)},$$slots:{default:!0}})},q=S=>{var m=ht(),f=n(m,!0);s(m),K(()=>{Le(m,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(m,"datetime",e(w)),le(m,"data-pw",typeof d.testId=="string"?d.testId:null),D(f,e(x))}),_(S,m)};H(oe,S=>{B()?S(ce):S(q,-1)})}_(ie,X),De()}var gt=b('<div class="section svelte-plslui"><span class="section-label svelte-plslui">Quick Launch</span> <div class="preset-grid svelte-plslui"></div></div> <div class="section svelte-plslui"><span class="section-label svelte-plslui">Working Directory</span> <!> <div class="custom-cwd-group svelte-plslui"><!></div></div> <!> <!>',1);function _t(ie,d){ke(d,!0);let U=fe(d,"open",15,!1);const L=[{args:[],command:"claude",label:"Claude Code"},{args:[],command:"codex",label:"Codex"},{args:[],command:"gemini",label:"Gemini"},{args:[],command:"qwen",label:"Qwen"},{args:[],command:"cursor-agent",label:"Cursor"},{args:[],command:"copilot",label:"Copilot"},{args:[],command:"amp",label:"Amp"},{args:[],command:"opencode",label:"OpenCode"},{args:[],command:"zsh",label:"Shell / zsh"},{args:[],command:"bash",label:"Bash"}];let B=P(0),v=P(Ke([])),w=P(""),M=P(""),x=P(!1),h=P("");$e(()=>{O()});async function O(){try{const m=await fetch("/api/sessions?limit=50&offset=0",{headers:{Authorization:`Bearer ${d.apiKey}`}});if(!m.ok)return;const u=(await m.json()).projects.map(g=>g.fullPath).filter(g=>typeof g=="string"&&g.length>0);i(v,[...new Set(u)],!0),e(v).length>0&&!e(w)&&i(w,e(v)[0],!0)}catch{}}function X(m){i(B,m,!0)}function oe(){return L[e(B)].command}function ce(){return L[e(B)].args}function q(){const m=e(M).trim();return m||(e(w)?e(w):"/tmp")}async function S(){const m=oe();if(m){i(x,!0),i(h,"");try{const f=await fetch("/api/terminals",{body:JSON.stringify({args:ce(),command:m,cwd:q()||void 0}),headers:{Authorization:`Bearer ${d.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(!f.ok){const g=await f.json().catch(()=>({}));i(h,(typeof g.error=="string"?g.error:"")||`Failed to launch (${f.status})`,!0);return}const u=await f.json();d.onLaunch(u)}catch{i(h,"Network error — is the server running?")}finally{i(x,!1)}}}et(ie,{side:"bottom",title:"New Terminal",get onclose(){return d.onClose},classes:"launch-sheet",get open(){return U()},set open(f){U(f)},content:f=>{var u=gt(),g=_e(u),J=c(n(g),2);ge(J,23,()=>L,o=>o.label,(o,E,k)=>{{let de=C(()=>e(B)===e(k));tt(o,{mode:"radio",get selected(){return e(de)},onclick:()=>{X(e(k))},classes:"preset-choice",children:(ue,we)=>{he();var ve=We();K(()=>D(ve,e(E).label)),_(ue,ve)},$$slots:{default:!0}})}}),s(J),s(g);var R=c(g,2),z=c(n(R),2);{let o=C(()=>e(v).length>0?e(v).map(k=>({id:k,label:k})):[{id:"",label:"No recent projects"}]),E=C(()=>e(w)?[e(w)]:e(v).length>0?[e(v)[0]]:[""]);at(z,{get items(){return e(o)},get value(){return e(E)},placeholder:"Select a project",onchange:k=>{i(w,k[0]||"",!0)},classes:"launch-select"})}var F=c(z,2),ee=n(F);st(ee,{label:"Or enter a custom path",dataType:"text",placeholder:"/path/to/project",classes:"input-mono launch-input",get value(){return e(M)},set value(o){i(M,o,!0)}}),s(F),s(R);var Q=c(R,2);{let o=C(()=>e(x)?"Launching...":"Launch Terminal");ne(Q,{classes:"btn-launch",get disabled(){return e(x)},onclick:S,get showLoader(){return e(x)},get text(){return e(o)}})}var te=c(Q,2);{var A=o=>{Be(o,{get text(){return e(h)},classes:"banner-error launch-error-banner"})};H(te,o=>{e(h)&&o(A)})}_(f,u)},$$slots:{content:!0}}),De()}var wt=b('<meta name="description" content="Active terminal sessions on this machine"/>'),bt=b("<!> Refresh",1),xt=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),yt=b('<div class="loading-container"></div>'),St=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),Ct=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Tt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),At=b('<a class="terminal-card svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-running svelte-1ewpmn2"><span></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!></div> <!></div> <div class="terminal-card-meta svelte-1ewpmn2"><!> <span class="terminal-pid svelte-1ewpmn2"> </span></div> <!></a>'),It=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Pt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),Lt=b('<a class="terminal-card terminal-card-exited svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-exited svelte-1ewpmn2"><span class="status-dot-static"></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!> <!></div> <div class="terminal-card-right svelte-1ewpmn2"><!> <!></div></div> <div class="terminal-card-meta svelte-1ewpmn2"><!></div> <!></a>'),kt=b('<div class="terminals-container svelte-1ewpmn2"><!> <!></div>'),$t=b('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Terminals</h1> <p class="page-description">Active terminal sessions on this machine</p></div> <div class="page-actions"><!> <!></div></div></div> <!> <!></main> <!>',1);function Jt(ie,d){ke(d,!0);const U=1e4,L="shooter_terminals",B=["zsh","bash","sh","fish"];let v=P(Ke([])),w=P(!1),M=!1,x=P(null),h=P(null),O=null;const X=C(()=>e(v).filter(t=>t.status==="running")),oe=C(()=>e(v).filter(t=>t.status==="exited"));$e(()=>{ce();const t=vt(L,1e4);t&&(i(v,t,!0),i(w,!1)),q(),O=setInterval(()=>{e(h)?.apiKey&&q()},U)}),Ye(()=>{O&&(clearInterval(O),O=null)});function ce(){try{const t=localStorage.getItem("shooter_config");if(t){const a=JSON.parse(t);mt(a)?i(h,a,!0):(localStorage.removeItem("shooter_config"),i(h,null))}}catch{}}async function q(){if(!(!e(h)?.apiKey||M)){M=!0,e(v).length===0&&i(w,!0);try{const a=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(!a.ok){i(x,`Failed to load terminals (HTTP ${a.status})`);return}i(x,null);const r=await a.json();i(v,r.terminals.map(y=>({...y,lastOutput:y.lastOutput??null})),!0),Ee(L,e(v))}catch(t){i(x,"Failed to load terminals"),console.error("Failed to fetch terminals:",t)}finally{i(w,!1),M=!1}}}async function S(){i(w,!0),ut(L),await q()}function m(){Oe("/config")}let f=P(!1);function u(){i(f,!0)}function g(){i(f,!1)}function J(t){i(f,!1),Oe(`/terminals/${t.id}`)}function R(t){const a=t.split("/").pop()||t;return pt.includes(a)?"ai":(B.includes(a),"shell")}function z(t){return t.status==="exited"?{class:"pill-badge-ended",label:"ENDED"}:R(t.command)==="ai"?{class:"pill-badge-ai",label:"AI"}:{class:"pill-badge-shell",label:"SHELL"}}function F(t,a=40){if(t.length<=a)return t;const r=t.split("/");return r.length<=3?t:`${r[0]}/.../${r.slice(-2).join("/")}`}function ee(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g,"").replace(/[\x00-\x1f]/g,"").trim()}function Q(t,a=80){if(!t)return"";const r=t.split(`
2
+ `).map(T=>ee(T)).filter(T=>T.trim()),y=r[r.length-1]||"";return y.length<=a?y:`${y.slice(0,a)}...`}function te(t){return t.split("/").pop()||t}async function A(t,a){if(t.preventDefault(),t.stopPropagation(),!!e(h)?.apiKey)try{(await fetch(`/api/terminals/${a}`,{headers:{Authorization:`Bearer ${e(h).apiKey}`},method:"DELETE"})).ok&&(i(v,e(v).filter(y=>y.id!==a),!0),Ee(L,e(v)))}catch(r){console.error("Failed to remove terminal:",r)}}var o=$t();lt("1ewpmn2",t=>{var a=wt();Ue(()=>{Xe.title="Terminals - Shooter"}),_(t,a)});var E=_e(o),k=n(E),de=n(k),ue=c(n(de),2),we=n(ue);ne(we,{classes:"btn-secondary",onclick:S,get disabled(){return e(w)},children:(t,a)=>{var r=bt(),y=_e(r);Ae(y,{get svg(){return it},classes:"icon-14"}),he(),_(t,r)},$$slots:{default:!0}});var ve=c(we,2);ne(ve,{classes:"btn-primary",onclick:u,children:(t,a)=>{var r=xt();he(),_(t,r)},$$slots:{default:!0}}),s(ue),s(de),s(k);var Me=c(k,2);{var Re=t=>{Be(t,{get text(){return e(x)},classes:"banner-error"})};H(Me,t=>{e(x)&&t(Re)})}var ze=c(Me,2);{var Fe=t=>{var a=yt();ge(a,20,()=>Array(4),rt,(r,y)=>{ot(r,{classes:"shimmer-card"})}),s(a),_(t,a)},He=t=>{Ne(t,{title:"Configuration Required",description:"Set up your API credentials to view terminal sessions",icon:r=>{Ae(r,{get svg(){return ct},classes:"icon-24"})},children:(r,y)=>{ne(r,{classes:"btn-primary",onclick:m,text:"Configure Settings"})}})},qe=t=>{Ne(t,{title:"No terminals",description:"Launch a new terminal session to get started. Terminal sessions will appear here once created.",icon:r=>{Ae(r,{get svg(){return dt},classes:"icon-24"})},children:(r,y)=>{ne(r,{classes:"btn-primary",onclick:u,children:(T,l)=>{var Z=St();he(),_(T,Z)},$$slots:{default:!0}})}})},Je=t=>{var a=kt(),r=n(a);ge(r,17,()=>e(X),T=>T.id,(T,l)=>{const Z=C(()=>z(e(l)));var N=At(),G=n(N),V=n(G),W=n(V),be=n(W);s(W);var ae=c(W,2),xe=n(ae,!0);s(ae);var ye=c(ae,2);Ie(ye,{get text(){return e(Z).label},get classes(){return e(Z).class}}),s(V);var me=c(V,2);je(me,{get date(){return e(l).createdAt},format:"narrow",classes:"terminal-time"}),s(G);var se=c(G,2),pe=n(se);{let p=C(()=>e(l).currentCwd||e(l).cwd);Pe(pe,{get text(){return e(p)},position:"bottom",children:(I,$)=>{var j=Ct(),Y=n(j,!0);s(j),K(Ge=>D(Y,Ge),[()=>F(e(l).currentCwd||e(l).cwd)]),_(I,j)},$$slots:{default:!0}})}var re=c(pe,2),Se=n(re);s(re),s(se);var Ce=c(se,2);{var Te=p=>{var I=Tt(),$=n(I),j=n($,!0);s($),s(I),K(Y=>D(j,Y),[()=>Q(e(l).lastOutput)]),_(p,I)};H(Ce,p=>{e(l).lastOutput&&p(Te)})}s(N),K(p=>{le(N,"href",`/terminals/${e(l).id??""}`),Le(be,1,nt(e(l).isActive?"status-dot-active":"status-dot-idle")),D(xe,p),D(Se,`PID ${e(l).pid??""}`)},[()=>te(e(l).command)]),_(T,N)});var y=c(r,2);ge(y,17,()=>e(oe),T=>T.id,(T,l)=>{const Z=C(()=>z(e(l)));var N=Lt(),G=n(N),V=n(G),W=c(n(V),2),be=n(W,!0);s(W);var ae=c(W,2);Ie(ae,{get text(){return e(Z).label},get classes(){return e(Z).class}});var xe=c(ae,2);{var ye=p=>{{let I=C(()=>e(l).exitCode!==0?"pill-exit-error":"pill-exit-ok");Ie(p,{get text(){return`exit ${e(l).exitCode??""}`},get classes(){return e(I)}})}};H(xe,p=>{e(l).exitCode!==null&&p(ye)})}s(V);var me=c(V,2),se=n(me);{let p=C(()=>e(l).exitedAt||e(l).createdAt);je(se,{get date(){return e(p)},format:"narrow",classes:"terminal-time"})}var pe=c(se,2);ne(pe,{classes:"btn-ghost btn-sm btn-remove",onclick:p=>{A(p,e(l).id)},text:"×"}),s(me),s(G);var re=c(G,2),Se=n(re);Pe(Se,{get text(){return e(l).cwd},position:"bottom",children:(p,I)=>{var $=It(),j=n($,!0);s($),K(Y=>D(j,Y),[()=>F(e(l).cwd)]),_(p,$)},$$slots:{default:!0}}),s(re);var Ce=c(re,2);{var Te=p=>{var I=Pt(),$=n(I),j=n($,!0);s($),s(I),K(Y=>D(j,Y),[()=>Q(e(l).lastOutput)]),_(p,I)};H(Ce,p=>{e(l).lastOutput&&p(Te)})}s(N),K(p=>{le(N,"href",`/terminals/${e(l).id??""}`),D(be,p)},[()=>te(e(l).command)]),_(T,N)}),s(a),_(t,a)};H(ze,t=>{e(w)&&e(v).length===0?t(Fe):e(h)?.apiKey?e(v).length===0?t(qe,2):t(Je,-1):t(He,1)})}s(E);var Qe=c(E,2);{var Ze=t=>{_t(t,{get apiKey(){return e(h).apiKey},onClose:g,onLaunch:J,get open(){return e(f)},set open(a){i(f,a,!0)}})};H(Qe,t=>{e(h)?.apiKey&&t(Ze)})}_(ie,o),De()}export{Jt as component};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/CR6bkGJW.js","../chunks/PPVm8Dsz.js"])))=>i.map(i=>d[i]);
2
- import{_ as _e}from"../chunks/PPVm8Dsz.js";import{p as ke,i as M,s as at,a as S,f as x,j as Se,c as xe,e as Ce,g as $t}from"../chunks/Cg3dlX05.js";import{p as rt,w as ot,g as t,x as g,c as k,d as c,r as y,t as B,A as Wt,s as h,q as Ie,v as Te,y as Ee,z as je,b as n,$ as Ae}from"../chunks/DYuMZGL5.js";import{h as Ke}from"../chunks/DZQMsHM5.js";import{m as Me,s as dt,d as Ft,B as H,e as zt,M as qe,K as De,P as Nt,k as Ot,c as Pe,T as Rt,n as $e,I as Ne}from"../chunks/DZvnhU_8.js";import{g as Y}from"../chunks/nWG9RHyB.js";import{p as Oe}from"../chunks/DJvX78LW.js";import{A as Re}from"../chunks/DzuS5Nbr.js";import"../chunks/BDcFu3l7.js";import{A as Le}from"../chunks/BdtLzPpO.js";import{C as We}from"../chunks/B9WQy_3X.js";import{E as Fe}from"../chunks/C5VOyQCG.js";function ze(b,o){rt(o,!0);let w=ke(o,"open",15,!1);const u=g(()=>o.commands.map((s,d)=>({label:s.label,value:String(d)})));function T(s){const d=parseInt(s.value,10);o.commands[d]&&o.commands[d].action()}Me(b,{get items(){return t(u)},placeholder:"Type a command...",emptyText:"No matching commands",onselect:T,get onclose(){return o.onClose},classes:"command-palette",get open(){return w()},set open(s){w(s)}}),ot()}var Be=x('<div><span></span> <span class="status-label svelte-1cg9pai"> </span> <!></div>');function He(b,o){const w=g(()=>o.status==="connected"?"Connected":o.status==="reconnecting"?"Reconnecting...":"Disconnected");var u=Be();let T;var s=k(u),d=c(s,2),D=k(d,!0);y(d);var q=c(d,2);{var E=j=>{H(j,{classes:"btn-ghost btn-sm btn-retry",get onclick(){return o.onretry},text:"Retry"})};M(q,j=>{o.status==="disconnected"&&o.onretry&&j(E)})}y(u),B(()=>{T=dt(u,1,"connection-status svelte-1cg9pai",null,T,{reconnecting:o.status==="reconnecting",disconnected:o.status==="disconnected",connected:o.status==="connected"}),Ft(u,"aria-label",`Connection: ${o.status??""}`),dt(s,1,`conn-dot ${o.status??""}`,"svelte-1cg9pai"),at(D,t(w))}),S(b,u)}const Bt=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.userAgent),Lt=Bt?"⌘":"Ctrl";function Ue(b){function o(w){if((Bt?w.metaKey:w.ctrlKey)&&!Ge()&&w.key==="/"){w.preventDefault(),w.stopPropagation(),b.onHelp();return}}return window.addEventListener("keydown",o,!0),{destroy(){window.removeEventListener("keydown",o,!0)}}}function Je(){return[{description:"Command palette",keys:`${Lt}+K`},{description:"Keyboard shortcuts",keys:`${Lt}+/`}]}function Ge(){const b=document.activeElement;if(!b)return!1;const o=b.tagName;return!!(o==="INPUT"||o==="TEXTAREA"||b.isContentEditable||b.closest(".xterm"))}var Ve=x('<div class="quick-keys svelte-64qat5" role="toolbar" aria-label="Quick terminal keys"></div>');function Qe(b,o){rt(o,!0);const w=[{escape:"",label:"Ctrl+C"},{escape:" ",label:"Tab"},{escape:"\x1B[A",label:"↑"},{escape:"\x1B[B",label:"↓"},{escape:"\x1B",label:"Esc"},{escape:"",label:"Ctrl+D"},{escape:"",label:"Ctrl+Z"}];var u=Ve();zt(u,21,()=>w,T=>T.label,(T,s)=>{H(T,{classes:"btn-quick-key",onclick:()=>{o.onKey(t(s).escape)},get text(){return t(s).label}})}),y(u),S(b,u),ot()}var Xe=x('<div class="shortcut-row svelte-1u7lstk"><span class="shortcut-desc svelte-1u7lstk"> </span> <!></div>'),Ze=x('<div class="shortcuts-list svelte-1u7lstk"></div>');function Ye(b,o){rt(o,!0);const w=Je();var u=Se(),T=Wt(u);{var s=d=>{qe(d,{header:{text:"Keyboard Shortcuts"},get onoverlayClick(){return o.onClose},classes:"shortcuts-modal",content:q=>{var E=Ze();zt(E,21,()=>w,j=>j.keys,(j,F)=>{var f=Xe(),C=k(f),$=k(C,!0);y(C);var N=c(C,2);De(N,{get keys(){return t(F).keys},classes:"shortcut-kbd"}),y(f),B(()=>at($,t(F).description)),S(j,f)}),y(E),S(q,E)},$$slots:{content:!0}})};M(T,d=>{o.open&&d(s)})}S(b,u),ot()}var tn=x('<meta name="description" content="Interactive terminal session"/>'),en=x('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="skeleton" style="width: 120px; height: 20px;"></div></div> <div class="term-body-loading svelte-1tubujq"><div class="skeleton" style="width: 100%; height: 100%;"></div></div></div>'),nn=x('<main class="main"><div class="session-back-row"><a href="/terminals" class="back-link"><span class="back-arrow">&larr;</span> Terminals</a></div> <!></main>'),sn=x("<span></span>"),an=x('<span class="term-cwd svelte-1tubujq"> </span>'),rn=x('<a class="term-session-link svelte-1tubujq" title="View session history">Session</a>'),on=x('<div class="term-input-area svelte-1tubujq"><!> <div class="term-input-bar svelte-1tubujq"><!> <!></div></div>'),ln=x('<div class="term-exited-bar svelte-1tubujq"><span>Process exited</span> <!></div>'),cn=x('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="term-topbar-left svelte-1tubujq"><a href="/terminals" class="term-back svelte-1tubujq" aria-label="Back to terminals">&larr;</a> <span class="term-command-name svelte-1tubujq"> </span> <!> <!> <!> <!> <!></div> <div class="term-topbar-right svelte-1tubujq"><!> <!> <!></div></div> <div class="term-body svelte-1tubujq"></div> <!> <div class="term-chat-body svelte-1tubujq"><!></div> <!></div>'),un=x("<!> <!> <!>",1);function Sn(b,o){rt(o,!0);const w=()=>Ce(Oe,"$page",u),[u,T]=xe();let s=h(null),d=h(!0),D=h(null),q=h(!1),E=h(!1),j=h(!1),F=h(null),f=h("raw"),C=h("disconnected"),$=h("disconnected"),N=h(""),P=h(Ie([])),ft=h(!1),U=h(null),it=h(null),O=null,vt=null,L=h(!1),lt=h(!1),v=null,W=null,m=!1;const J=g(()=>w().params.id),G=g(()=>t(s)?Le.includes((t(s).command.split("/").pop()||"").toLowerCase()):!1),z=g(()=>t(s)?.status==="running"),mt=g(()=>t(s)?.command.split("/").pop()||"terminal"),Ht=g(()=>t(G)?"AI":"SHELL"),Ut=g(()=>t(G)?"pill-badge-ai":"pill-badge-shell"),Jt=["Raw","Chat"],pt=g(()=>t(f)==="raw"?t(C):t($)),Gt=g(()=>t(f)==="raw"?0:1),ht=g(()=>Qt(t(F)||t(s)?.cwd||"")),Vt=g(()=>{const e=[{action:()=>{Y("/")},label:"Go to Home"},{action:()=>{Y("/terminals")},label:"Go to Terminals"},{action:()=>{Y("/config")},label:"Go to Settings"},{action:()=>{n(L,!0)},label:"Show keyboard shortcuts"}];return t(z)&&e.push({action:()=>{yt()},label:"Kill terminal"}),e});function Qt(e){if(!e)return"";const a="";let r=e;if(typeof navigator<"u"){const l=e.split("/");l.length>=3&&l[1]==="Users"?r=`~/${l.slice(3).join("/")}`:l.length>=3&&l[1]==="home"&&(r=`~/${l.slice(3).join("/")}`)}if(r.length>30){const l=r.split("/");if(l.length>2)return`.../${l.slice(-2).join("/")}`}return r||a}function V(){try{const e=localStorage.getItem("shooter_config");if(!e)return null;const a=JSON.parse(e);return typeof a?.apiKey=="string"&&a.apiKey?a:null}catch{return null}}async function Xt(){const e=V();if(!e){n(D,"No configuration found. Please configure settings first."),n(d,!1);return}try{const a=await fetch(`/api/terminals/${t(J)}`,{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!a.ok){n(D,a.status===404?"Terminal not found":"Failed to load terminal",!0),n(d,!1);return}n(s,await a.json(),!0)}catch{n(D,"Failed to connect to server")}n(d,!1)}async function gt(){const e=V();if(!e)return null;try{const a=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${e.apiKey}`},method:"POST"});return a.ok?(await a.json()).ticket:null}catch{return null}}async function yt(){if(!t(s)||t(q))return;const e=V();if(e){n(q,!0);try{(await fetch(`/api/terminals/${t(J)}`,{headers:{Authorization:`Bearer ${e.apiKey}`},method:"DELETE"})).ok?Y("/terminals"):n(q,!1)}catch{n(q,!1)}}}async function Zt(){if(!t(s)||t(E))return;const e=V();if(e){n(E,!0);try{(await fetch(`/api/terminals/${t(J)}`,{headers:{Authorization:`Bearer ${e.apiKey}`},method:"DELETE"})).ok?Y("/terminals"):n(E,!1)}catch{n(E,!1)}}}async function ct(){if(!t(U)||!t(s)||m)return;const a=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${t(s).ws}`,r=async()=>{const l=await gt();if(!l)throw new Error("Failed to obtain WebSocket ticket");return l};try{const{createTerminal:l}=await _e(async()=>{const{createTerminal:A}=await import("../chunks/CR6bkGJW.js");return{createTerminal:A}},__vite__mapDeps([0,1]),import.meta.url);if(m||!t(U))return;const p=await l({apiKey:V()?.apiKey,container:t(U),fontSize:window.innerWidth<768?12:14,getTicket:r,onActivity:A=>{m||n(j,A,!0)},onCwd:A=>{m||n(F,A,!0)},onDisconnect:()=>{m||n(C,"reconnecting")},onExit:A=>{!m&&t(s)&&(n(s,{...t(s),exitCode:A,exitedAt:new Date().toISOString(),status:"exited"},!0),n(C,"disconnected"))},onReconnect:()=>{m||n(C,"connected")},terminalId:t(J),wsUrl:a});if(m){p.dispose();return}O=p,n(C,"connected")}catch(l){console.error("Failed to initialize terminal:",l),n(C,"disconnected")}}function bt(){O&&(O.dispose(),O=null)}async function tt(){if(!t(s)||m||v&&(v.readyState===WebSocket.OPEN||v.readyState===WebSocket.CONNECTING))return;const e=await gt();if(!e||m||!t(s)){n($,"disconnected");return}const r=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${t(s).sessionWs}?ticket=${e}`;v=new WebSocket(r),v.onopen=()=>{m||(n($,"connected"),v?.send(JSON.stringify({sessionId:t(J),type:"subscribe"})))},v.onmessage=l=>{if(!m)try{const p=JSON.parse(l.data);Yt(p)}catch{}},v.onclose=()=>{!m&&t(s)?.status==="running"&&(n($,"reconnecting"),W&&clearTimeout(W),W=setTimeout(()=>{W=null,!m&&t(s)?.status==="running"&&tt()},2e3))},v.onerror=()=>{m||n($,"disconnected")}}function Q(){return t(P)}function Yt(e){if(e.type==="history"){const a=e.messages||[];n(P,a.map(r=>({id:r.id,parts:r.content,role:r.role,timestamp:r.timestamp})),!0)}else if(e.type==="message"){const a=typeof e.role=="string"?e.role:"assistant",r=a==="user"?"user":a==="system"?"system":"assistant",l={id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:e.content||[],role:r,timestamp:(typeof e.timestamp=="string"?e.timestamp:"")||new Date().toISOString()};n(P,Q().concat(l),!0)}else if(e.type==="tool-use"){const a={id:e.id||`tool-${Date.now()}`,input:e.input||{},toolName:e.name,type:"tool_use"},r={id:`tool-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"assistant",timestamp:new Date().toISOString()};n(P,Q().concat(r),!0)}else if(e.type==="tool-result"){const a={isError:e.isError||!1,output:e.output||"",toolUseId:e.id,type:"tool_result"},r={id:`result-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"system",timestamp:new Date().toISOString()};n(P,Q().concat(r),!0)}else if(e.type==="thinking"){const a={content:e.text||"",type:"thinking"},r=Q(),l=r.length-1;if(l>=0&&r[l].role==="assistant"){const p=r[l],A={id:p.id,parts:p.parts.concat(a),role:p.role,timestamp:p.timestamp};n(P,[...r.slice(0,l),A],!0)}else{const p={id:`think-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"assistant",timestamp:new Date().toISOString()};n(P,r.concat(p),!0)}}else if(e.type==="error"){const a={content:e.message||"Unknown error",type:"text"},r={id:`err-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"system",timestamp:new Date().toISOString()};n(P,Q().concat(r),!0)}else e.type==="session-end"&&(n(ft,!0),t(s)&&n(s,{...t(s),status:"exited"},!0))}function wt(){W&&(clearTimeout(W),W=null),v&&(v.onclose=null,v.close(),v=null)}function _t(){t(N).trim()&&(O&&t(C)==="connected"&&O.sendInput(`${t(N)}\r`),n(N,""),t(it)?.focus())}function te(e){!e.trim()||v?.readyState!==WebSocket.OPEN||v.send(JSON.stringify({text:e,type:"send-input"}))}function kt(){v?.readyState===WebSocket.OPEN&&v.send(JSON.stringify({type:"cancel"}))}function ee(e){t(f)==="raw"?O&&t(C)==="connected"&&O.sendInput(e):t(f)==="chat"&&e===""&&kt()}function ne(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),_t())}let et=!1,nt=!1;function se(e){e!==t(f)&&(n(f,e,!0),e==="raw"&&!et?(requestAnimationFrame(()=>{ct()}),et=!0):e==="chat"&&!nt&&(tt(),nt=!0))}function ae(){t(f)==="raw"?(bt(),n(C,"reconnecting"),ct(),et=!0):(wt(),n($,"reconnecting"),tt(),nt=!0)}Te(async()=>{await Xt(),!m&&(vt=Ue({onHelp:()=>{n(L,!t(L))}}),!(!t(s)||t(D))&&(t(G)&&window.innerWidth<768?n(f,"chat"):n(f,"raw"),t(f)==="raw"?(requestAnimationFrame(()=>{ct()}),et=!0):(tt(),nt=!0)))}),Ee(()=>{m=!0,bt(),wt(),vt?.destroy()});var St=un();Ke("1tubujq",e=>{var a=tn();je(()=>{Ae.title=`${t(mt)??""} - Terminal - Shooter`}),S(e,a)});var xt=Wt(St);{var re=e=>{var a=en();S(e,a)},oe=e=>{var a=nn(),r=c(k(a),2);Fe(r,{title:"Error",get description(){return t(D)},icon:p=>{Pe(p,{get svg(){return Re},classes:"icon-24"})}}),y(a),S(e,a)},ie=e=>{var a=cn(),r=k(a),l=k(r),p=c(k(l),2),A=k(p,!0);y(p);var It=c(p,2);Nt(It,{get text(){return t(Ht)},get classes(){return t(Ut)}});var Tt=c(It,2);{var ce=i=>{{let _=g(()=>t(j)?"Active":"Idle");Rt(i,{get text(){return t(_)},position:"bottom",children:(K,R)=>{var I=sn();B(()=>dt(I,1,`activity-dot ${t(j)?"activity-active":"activity-idle"}`,"svelte-1tubujq")),S(K,I)},$$slots:{default:!0}})}};M(Tt,i=>{t(z)&&i(ce)})}var Et=c(Tt,2);{var ue=i=>{{let _=g(()=>t(F)||t(s)?.cwd||"");Rt(i,{get text(){return t(_)},position:"bottom",children:(K,R)=>{var I=an(),X=k(I,!0);y(I),B(()=>at(X,t(ht))),S(K,I)},$$slots:{default:!0}})}};M(Et,i=>{t(ht)&&i(ue)})}var jt=c(Et,2);He(jt,{get status(){return t(pt)},onretry:ae});var de=c(jt,2);{var fe=i=>{const _=g(()=>t(s).sessionFile??"");var K=rn();B(R=>Ft(K,"href",`/session/${R??""}`),[()=>t(_).split(/[\\/]/).pop()?.replace(".jsonl","")||""]),S(i,K)};M(de,i=>{t(G)&&t(s)?.sessionFile&&i(fe)})}y(l);var At=c(l,2),Kt=k(At);{var ve=i=>{$e(i,{get items(){return Jt},get activeIndex(){return t(Gt)},onchange:_=>{se(_===0?"raw":"chat")},classes:"term-tabs"})};M(Kt,i=>{t(G)&&i(ve)})}var Mt=c(Kt,2);H(Mt,{classes:"term-shortcuts-btn",onclick:()=>{n(L,!t(L))},text:"?",ariaLabel:"Keyboard shortcuts"});var me=c(Mt,2);{var pe=i=>{H(i,{classes:"btn-danger btn-sm",onclick:yt,get disabled(){return t(q)},get showLoader(){return t(q)},text:"Kill"})},he=i=>{H(i,{classes:"btn-secondary btn-sm",onclick:Zt,get disabled(){return t(E)},get showLoader(){return t(E)},text:"Remove"})};M(me,i=>{t(z)?i(pe):i(he,-1)})}y(At),y(r);var ut=c(r,2);let qt;$t(ut,i=>n(U,i),()=>t(U));var Dt=c(ut,2);{var ge=i=>{var _=on(),K=k(_);Qe(K,{onKey:ee});var R=c(K,2),I=k(R);$t(Ne(I,{dataType:"text",useTextArea:!0,placeholder:"Type command... (Shift+Enter for new line)",classes:"input-mono term-input-field",onKeyDown:ne,get value(){return t(N)},set value(Z){n(N,Z,!0)}}),Z=>n(it,Z,!0),()=>t(it));var X=c(I,2);{let Z=g(()=>!t(N).trim());H(X,{classes:"btn-primary btn-send",onclick:_t,get disabled(){return t(Z)},text:"↵"})}y(R),y(_),S(i,_)};M(Dt,i=>{t(z)&&t(f)==="raw"&&i(ge)})}var st=c(Dt,2);let Pt;var ye=k(st);We(ye,{get messages(){return t(P)},get connectionState(){return t(pt)},get sessionEnded(){return t(ft)},get showInput(){return t(z)},onSendInput:te,onCancel:kt}),y(st);var be=c(st,2);{var we=i=>{var _=ln(),K=c(k(_),2);{var R=I=>{{let X=g(()=>t(s).exitCode!==0?"pill-exit-error":"pill-exit-ok");Nt(I,{get text(){return`code ${t(s).exitCode??""}`},get classes(){return t(X)}})}};M(K,I=>{t(s).exitCode!==null&&I(R)})}y(_),S(i,_)};M(be,i=>{t(z)||i(we)})}y(a),B(()=>{at(A,t(mt)),qt=Ot(ut,"",qt,{display:t(f)==="raw"?"flex":"none"}),Pt=Ot(st,"",Pt,{display:t(f)==="chat"?"flex":"none"})}),S(e,a)};M(xt,e=>{t(d)?e(re):t(D)?e(oe,1):t(s)&&e(ie,2)})}var Ct=c(xt,2);Ye(Ct,{get open(){return t(L)},onClose:()=>{n(L,!1)}});var le=c(Ct,2);ze(le,{get commands(){return t(Vt)},onClose:()=>{n(lt,!1)},get open(){return t(lt)},set open(e){n(lt,e,!0)}}),S(b,St),ot(),T()}export{Sn as component};
2
+ import{_ as _e}from"../chunks/PPVm8Dsz.js";import{p as ke,i as M,s as at,a as S,f as x,j as Se,e as xe,c as Ce,g as $t}from"../chunks/BPDiEZo0.js";import{p as rt,w as ot,g as t,x as g,c as k,d as c,r as y,t as B,A as Wt,s as h,q as Ie,v as Te,y as Ee,z as je,b as n,$ as Ae}from"../chunks/DWmC0QM7.js";import{h as Ke}from"../chunks/2rBV5OkJ.js";import{m as Me,s as dt,d as Ft,B as H,e as zt,M as qe,K as De,P as Nt,k as Ot,c as Pe,T as Rt,n as $e,I as Ne}from"../chunks/ZS5XYDx_.js";import{g as Y}from"../chunks/BcqA7eKM.js";import{p as Oe}from"../chunks/DCDL_9ys.js";import{A as Re}from"../chunks/DzuS5Nbr.js";import"../chunks/BDcFu3l7.js";import{A as Le}from"../chunks/BdtLzPpO.js";import{C as We}from"../chunks/BB2l8o4X.js";import{E as Fe}from"../chunks/ClIPTXf3.js";function ze(b,o){rt(o,!0);let w=ke(o,"open",15,!1);const u=g(()=>o.commands.map((s,d)=>({label:s.label,value:String(d)})));function T(s){const d=parseInt(s.value,10);o.commands[d]&&o.commands[d].action()}Me(b,{get items(){return t(u)},placeholder:"Type a command...",emptyText:"No matching commands",onselect:T,get onclose(){return o.onClose},classes:"command-palette",get open(){return w()},set open(s){w(s)}}),ot()}var Be=x('<div><span></span> <span class="status-label svelte-1cg9pai"> </span> <!></div>');function He(b,o){const w=g(()=>o.status==="connected"?"Connected":o.status==="reconnecting"?"Reconnecting...":"Disconnected");var u=Be();let T;var s=k(u),d=c(s,2),D=k(d,!0);y(d);var q=c(d,2);{var E=j=>{H(j,{classes:"btn-ghost btn-sm btn-retry",get onclick(){return o.onretry},text:"Retry"})};M(q,j=>{o.status==="disconnected"&&o.onretry&&j(E)})}y(u),B(()=>{T=dt(u,1,"connection-status svelte-1cg9pai",null,T,{reconnecting:o.status==="reconnecting",disconnected:o.status==="disconnected",connected:o.status==="connected"}),Ft(u,"aria-label",`Connection: ${o.status??""}`),dt(s,1,`conn-dot ${o.status??""}`,"svelte-1cg9pai"),at(D,t(w))}),S(b,u)}const Bt=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.userAgent),Lt=Bt?"⌘":"Ctrl";function Ue(b){function o(w){if((Bt?w.metaKey:w.ctrlKey)&&!Ge()&&w.key==="/"){w.preventDefault(),w.stopPropagation(),b.onHelp();return}}return window.addEventListener("keydown",o,!0),{destroy(){window.removeEventListener("keydown",o,!0)}}}function Je(){return[{description:"Command palette",keys:`${Lt}+K`},{description:"Keyboard shortcuts",keys:`${Lt}+/`}]}function Ge(){const b=document.activeElement;if(!b)return!1;const o=b.tagName;return!!(o==="INPUT"||o==="TEXTAREA"||b.isContentEditable||b.closest(".xterm"))}var Ve=x('<div class="quick-keys svelte-64qat5" role="toolbar" aria-label="Quick terminal keys"></div>');function Qe(b,o){rt(o,!0);const w=[{escape:"",label:"Ctrl+C"},{escape:" ",label:"Tab"},{escape:"\x1B[A",label:"↑"},{escape:"\x1B[B",label:"↓"},{escape:"\x1B",label:"Esc"},{escape:"",label:"Ctrl+D"},{escape:"",label:"Ctrl+Z"}];var u=Ve();zt(u,21,()=>w,T=>T.label,(T,s)=>{H(T,{classes:"btn-quick-key",onclick:()=>{o.onKey(t(s).escape)},get text(){return t(s).label}})}),y(u),S(b,u),ot()}var Xe=x('<div class="shortcut-row svelte-1u7lstk"><span class="shortcut-desc svelte-1u7lstk"> </span> <!></div>'),Ze=x('<div class="shortcuts-list svelte-1u7lstk"></div>');function Ye(b,o){rt(o,!0);const w=Je();var u=Se(),T=Wt(u);{var s=d=>{qe(d,{header:{text:"Keyboard Shortcuts"},get onoverlayClick(){return o.onClose},classes:"shortcuts-modal",content:q=>{var E=Ze();zt(E,21,()=>w,j=>j.keys,(j,F)=>{var f=Xe(),C=k(f),$=k(C,!0);y(C);var N=c(C,2);De(N,{get keys(){return t(F).keys},classes:"shortcut-kbd"}),y(f),B(()=>at($,t(F).description)),S(j,f)}),y(E),S(q,E)},$$slots:{content:!0}})};M(T,d=>{o.open&&d(s)})}S(b,u),ot()}var tn=x('<meta name="description" content="Interactive terminal session"/>'),en=x('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="skeleton" style="width: 120px; height: 20px;"></div></div> <div class="term-body-loading svelte-1tubujq"><div class="skeleton" style="width: 100%; height: 100%;"></div></div></div>'),nn=x('<main class="main"><div class="session-back-row"><a href="/terminals" class="back-link"><span class="back-arrow">&larr;</span> Terminals</a></div> <!></main>'),sn=x("<span></span>"),an=x('<span class="term-cwd svelte-1tubujq"> </span>'),rn=x('<a class="term-session-link svelte-1tubujq" title="View session history">Session</a>'),on=x('<div class="term-input-area svelte-1tubujq"><!> <div class="term-input-bar svelte-1tubujq"><!> <!></div></div>'),ln=x('<div class="term-exited-bar svelte-1tubujq"><span>Process exited</span> <!></div>'),cn=x('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="term-topbar-left svelte-1tubujq"><a href="/terminals" class="term-back svelte-1tubujq" aria-label="Back to terminals">&larr;</a> <span class="term-command-name svelte-1tubujq"> </span> <!> <!> <!> <!> <!></div> <div class="term-topbar-right svelte-1tubujq"><!> <!> <!></div></div> <div class="term-body svelte-1tubujq"></div> <!> <div class="term-chat-body svelte-1tubujq"><!></div> <!></div>'),un=x("<!> <!> <!>",1);function Sn(b,o){rt(o,!0);const w=()=>Ce(Oe,"$page",u),[u,T]=xe();let s=h(null),d=h(!0),D=h(null),q=h(!1),E=h(!1),j=h(!1),F=h(null),f=h("raw"),C=h("disconnected"),$=h("disconnected"),N=h(""),P=h(Ie([])),ft=h(!1),U=h(null),it=h(null),O=null,vt=null,L=h(!1),lt=h(!1),v=null,W=null,m=!1;const J=g(()=>w().params.id),G=g(()=>t(s)?Le.includes((t(s).command.split("/").pop()||"").toLowerCase()):!1),z=g(()=>t(s)?.status==="running"),mt=g(()=>t(s)?.command.split("/").pop()||"terminal"),Ht=g(()=>t(G)?"AI":"SHELL"),Ut=g(()=>t(G)?"pill-badge-ai":"pill-badge-shell"),Jt=["Raw","Chat"],pt=g(()=>t(f)==="raw"?t(C):t($)),Gt=g(()=>t(f)==="raw"?0:1),ht=g(()=>Qt(t(F)||t(s)?.cwd||"")),Vt=g(()=>{const e=[{action:()=>{Y("/")},label:"Go to Home"},{action:()=>{Y("/terminals")},label:"Go to Terminals"},{action:()=>{Y("/config")},label:"Go to Settings"},{action:()=>{n(L,!0)},label:"Show keyboard shortcuts"}];return t(z)&&e.push({action:()=>{yt()},label:"Kill terminal"}),e});function Qt(e){if(!e)return"";const a="";let r=e;if(typeof navigator<"u"){const l=e.split("/");l.length>=3&&l[1]==="Users"?r=`~/${l.slice(3).join("/")}`:l.length>=3&&l[1]==="home"&&(r=`~/${l.slice(3).join("/")}`)}if(r.length>30){const l=r.split("/");if(l.length>2)return`.../${l.slice(-2).join("/")}`}return r||a}function V(){try{const e=localStorage.getItem("shooter_config");if(!e)return null;const a=JSON.parse(e);return typeof a?.apiKey=="string"&&a.apiKey?a:null}catch{return null}}async function Xt(){const e=V();if(!e){n(D,"No configuration found. Please configure settings first."),n(d,!1);return}try{const a=await fetch(`/api/terminals/${t(J)}`,{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!a.ok){n(D,a.status===404?"Terminal not found":"Failed to load terminal",!0),n(d,!1);return}n(s,await a.json(),!0)}catch{n(D,"Failed to connect to server")}n(d,!1)}async function gt(){const e=V();if(!e)return null;try{const a=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${e.apiKey}`},method:"POST"});return a.ok?(await a.json()).ticket:null}catch{return null}}async function yt(){if(!t(s)||t(q))return;const e=V();if(e){n(q,!0);try{(await fetch(`/api/terminals/${t(J)}`,{headers:{Authorization:`Bearer ${e.apiKey}`},method:"DELETE"})).ok?Y("/terminals"):n(q,!1)}catch{n(q,!1)}}}async function Zt(){if(!t(s)||t(E))return;const e=V();if(e){n(E,!0);try{(await fetch(`/api/terminals/${t(J)}`,{headers:{Authorization:`Bearer ${e.apiKey}`},method:"DELETE"})).ok?Y("/terminals"):n(E,!1)}catch{n(E,!1)}}}async function ct(){if(!t(U)||!t(s)||m)return;const a=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${t(s).ws}`,r=async()=>{const l=await gt();if(!l)throw new Error("Failed to obtain WebSocket ticket");return l};try{const{createTerminal:l}=await _e(async()=>{const{createTerminal:A}=await import("../chunks/CR6bkGJW.js");return{createTerminal:A}},__vite__mapDeps([0,1]),import.meta.url);if(m||!t(U))return;const p=await l({apiKey:V()?.apiKey,container:t(U),fontSize:window.innerWidth<768?12:14,getTicket:r,onActivity:A=>{m||n(j,A,!0)},onCwd:A=>{m||n(F,A,!0)},onDisconnect:()=>{m||n(C,"reconnecting")},onExit:A=>{!m&&t(s)&&(n(s,{...t(s),exitCode:A,exitedAt:new Date().toISOString(),status:"exited"},!0),n(C,"disconnected"))},onReconnect:()=>{m||n(C,"connected")},terminalId:t(J),wsUrl:a});if(m){p.dispose();return}O=p,n(C,"connected")}catch(l){console.error("Failed to initialize terminal:",l),n(C,"disconnected")}}function bt(){O&&(O.dispose(),O=null)}async function tt(){if(!t(s)||m||v&&(v.readyState===WebSocket.OPEN||v.readyState===WebSocket.CONNECTING))return;const e=await gt();if(!e||m||!t(s)){n($,"disconnected");return}const r=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${t(s).sessionWs}?ticket=${e}`;v=new WebSocket(r),v.onopen=()=>{m||(n($,"connected"),v?.send(JSON.stringify({sessionId:t(J),type:"subscribe"})))},v.onmessage=l=>{if(!m)try{const p=JSON.parse(l.data);Yt(p)}catch{}},v.onclose=()=>{!m&&t(s)?.status==="running"&&(n($,"reconnecting"),W&&clearTimeout(W),W=setTimeout(()=>{W=null,!m&&t(s)?.status==="running"&&tt()},2e3))},v.onerror=()=>{m||n($,"disconnected")}}function Q(){return t(P)}function Yt(e){if(e.type==="history"){const a=e.messages||[];n(P,a.map(r=>({id:r.id,parts:r.content,role:r.role,timestamp:r.timestamp})),!0)}else if(e.type==="message"){const a=typeof e.role=="string"?e.role:"assistant",r=a==="user"?"user":a==="system"?"system":"assistant",l={id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:e.content||[],role:r,timestamp:(typeof e.timestamp=="string"?e.timestamp:"")||new Date().toISOString()};n(P,Q().concat(l),!0)}else if(e.type==="tool-use"){const a={id:e.id||`tool-${Date.now()}`,input:e.input||{},toolName:e.name,type:"tool_use"},r={id:`tool-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"assistant",timestamp:new Date().toISOString()};n(P,Q().concat(r),!0)}else if(e.type==="tool-result"){const a={isError:e.isError||!1,output:e.output||"",toolUseId:e.id,type:"tool_result"},r={id:`result-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"system",timestamp:new Date().toISOString()};n(P,Q().concat(r),!0)}else if(e.type==="thinking"){const a={content:e.text||"",type:"thinking"},r=Q(),l=r.length-1;if(l>=0&&r[l].role==="assistant"){const p=r[l],A={id:p.id,parts:p.parts.concat(a),role:p.role,timestamp:p.timestamp};n(P,[...r.slice(0,l),A],!0)}else{const p={id:`think-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"assistant",timestamp:new Date().toISOString()};n(P,r.concat(p),!0)}}else if(e.type==="error"){const a={content:e.message||"Unknown error",type:"text"},r={id:`err-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[a],role:"system",timestamp:new Date().toISOString()};n(P,Q().concat(r),!0)}else e.type==="session-end"&&(n(ft,!0),t(s)&&n(s,{...t(s),status:"exited"},!0))}function wt(){W&&(clearTimeout(W),W=null),v&&(v.onclose=null,v.close(),v=null)}function _t(){t(N).trim()&&(O&&t(C)==="connected"&&O.sendInput(`${t(N)}\r`),n(N,""),t(it)?.focus())}function te(e){!e.trim()||v?.readyState!==WebSocket.OPEN||v.send(JSON.stringify({text:e,type:"send-input"}))}function kt(){v?.readyState===WebSocket.OPEN&&v.send(JSON.stringify({type:"cancel"}))}function ee(e){t(f)==="raw"?O&&t(C)==="connected"&&O.sendInput(e):t(f)==="chat"&&e===""&&kt()}function ne(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),_t())}let et=!1,nt=!1;function se(e){e!==t(f)&&(n(f,e,!0),e==="raw"&&!et?(requestAnimationFrame(()=>{ct()}),et=!0):e==="chat"&&!nt&&(tt(),nt=!0))}function ae(){t(f)==="raw"?(bt(),n(C,"reconnecting"),ct(),et=!0):(wt(),n($,"reconnecting"),tt(),nt=!0)}Te(async()=>{await Xt(),!m&&(vt=Ue({onHelp:()=>{n(L,!t(L))}}),!(!t(s)||t(D))&&(t(G)&&window.innerWidth<768?n(f,"chat"):n(f,"raw"),t(f)==="raw"?(requestAnimationFrame(()=>{ct()}),et=!0):(tt(),nt=!0)))}),Ee(()=>{m=!0,bt(),wt(),vt?.destroy()});var St=un();Ke("1tubujq",e=>{var a=tn();je(()=>{Ae.title=`${t(mt)??""} - Terminal - Shooter`}),S(e,a)});var xt=Wt(St);{var re=e=>{var a=en();S(e,a)},oe=e=>{var a=nn(),r=c(k(a),2);Fe(r,{title:"Error",get description(){return t(D)},icon:p=>{Pe(p,{get svg(){return Re},classes:"icon-24"})}}),y(a),S(e,a)},ie=e=>{var a=cn(),r=k(a),l=k(r),p=c(k(l),2),A=k(p,!0);y(p);var It=c(p,2);Nt(It,{get text(){return t(Ht)},get classes(){return t(Ut)}});var Tt=c(It,2);{var ce=i=>{{let _=g(()=>t(j)?"Active":"Idle");Rt(i,{get text(){return t(_)},position:"bottom",children:(K,R)=>{var I=sn();B(()=>dt(I,1,`activity-dot ${t(j)?"activity-active":"activity-idle"}`,"svelte-1tubujq")),S(K,I)},$$slots:{default:!0}})}};M(Tt,i=>{t(z)&&i(ce)})}var Et=c(Tt,2);{var ue=i=>{{let _=g(()=>t(F)||t(s)?.cwd||"");Rt(i,{get text(){return t(_)},position:"bottom",children:(K,R)=>{var I=an(),X=k(I,!0);y(I),B(()=>at(X,t(ht))),S(K,I)},$$slots:{default:!0}})}};M(Et,i=>{t(ht)&&i(ue)})}var jt=c(Et,2);He(jt,{get status(){return t(pt)},onretry:ae});var de=c(jt,2);{var fe=i=>{const _=g(()=>t(s).sessionFile??"");var K=rn();B(R=>Ft(K,"href",`/session/${R??""}`),[()=>t(_).split(/[\\/]/).pop()?.replace(".jsonl","")||""]),S(i,K)};M(de,i=>{t(G)&&t(s)?.sessionFile&&i(fe)})}y(l);var At=c(l,2),Kt=k(At);{var ve=i=>{$e(i,{get items(){return Jt},get activeIndex(){return t(Gt)},onchange:_=>{se(_===0?"raw":"chat")},classes:"term-tabs"})};M(Kt,i=>{t(G)&&i(ve)})}var Mt=c(Kt,2);H(Mt,{classes:"term-shortcuts-btn",onclick:()=>{n(L,!t(L))},text:"?",ariaLabel:"Keyboard shortcuts"});var me=c(Mt,2);{var pe=i=>{H(i,{classes:"btn-danger btn-sm",onclick:yt,get disabled(){return t(q)},get showLoader(){return t(q)},text:"Kill"})},he=i=>{H(i,{classes:"btn-secondary btn-sm",onclick:Zt,get disabled(){return t(E)},get showLoader(){return t(E)},text:"Remove"})};M(me,i=>{t(z)?i(pe):i(he,-1)})}y(At),y(r);var ut=c(r,2);let qt;$t(ut,i=>n(U,i),()=>t(U));var Dt=c(ut,2);{var ge=i=>{var _=on(),K=k(_);Qe(K,{onKey:ee});var R=c(K,2),I=k(R);$t(Ne(I,{dataType:"text",useTextArea:!0,placeholder:"Type command... (Shift+Enter for new line)",classes:"input-mono term-input-field",onKeyDown:ne,get value(){return t(N)},set value(Z){n(N,Z,!0)}}),Z=>n(it,Z,!0),()=>t(it));var X=c(I,2);{let Z=g(()=>!t(N).trim());H(X,{classes:"btn-primary btn-send",onclick:_t,get disabled(){return t(Z)},text:"↵"})}y(R),y(_),S(i,_)};M(Dt,i=>{t(z)&&t(f)==="raw"&&i(ge)})}var st=c(Dt,2);let Pt;var ye=k(st);We(ye,{get messages(){return t(P)},get connectionState(){return t(pt)},get sessionEnded(){return t(ft)},get showInput(){return t(z)},onSendInput:te,onCancel:kt}),y(st);var be=c(st,2);{var we=i=>{var _=ln(),K=c(k(_),2);{var R=I=>{{let X=g(()=>t(s).exitCode!==0?"pill-exit-error":"pill-exit-ok");Nt(I,{get text(){return`code ${t(s).exitCode??""}`},get classes(){return t(X)}})}};M(K,I=>{t(s).exitCode!==null&&I(R)})}y(_),S(i,_)};M(be,i=>{t(z)||i(we)})}y(a),B(()=>{at(A,t(mt)),qt=Ot(ut,"",qt,{display:t(f)==="raw"?"flex":"none"}),Pt=Ot(st,"",Pt,{display:t(f)==="chat"?"flex":"none"})}),S(e,a)};M(xt,e=>{t(d)?e(re):t(D)?e(oe,1):t(s)&&e(ie,2)})}var Ct=c(xt,2);Ye(Ct,{get open(){return t(L)},onClose:()=>{n(L,!1)}});var le=c(Ct,2);ze(le,{get commands(){return t(Vt)},onClose:()=>{n(lt,!1)},get open(){return t(lt)},set open(e){n(lt,e,!0)}}),S(b,St),ot(),T()}export{Sn as component};
@@ -1,4 +1,4 @@
1
- import{d as vt,i as D,s as C,b as Fe,a as h,f as p}from"../chunks/Cg3dlX05.js";import{p as ze,c,r as l,d as v,g as r,t as B,w as je,x as M,A as me,s as q,q as et,b as _,v as ft,y as gt,N as mt,$ as ht,B as Ge}from"../chunks/DYuMZGL5.js";import{P as tt,k as pt,d as Re,s as _t,g as St,e as de,j as Le,B as Te,c as De,b as yt,i as Ue}from"../chunks/DZvnhU_8.js";import{h as bt}from"../chunks/DZQMsHM5.js";import{g as Ve}from"../chunks/nWG9RHyB.js";import{B as wt}from"../chunks/Bn-6X1BO.js";import{R as Ct,S as We}from"../chunks/BRqaaL5D.js";import{S as xt}from"../chunks/CG453M9q.js";import{c as kt,s as At,g as Et}from"../chunks/xs1Xl3_e.js";import{i as Nt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as It}from"../chunks/BLszSzTT.js";import{S as Pt}from"../chunks/C_9BZILB.js";import{i as Tt,N as Dt}from"../chunks/CRkG7oE4.js";import{d as Ot}from"../chunks/pRcLbE0d.js";import{E as He}from"../chunks/C5VOyQCG.js";var Rt=p('<p class="goal-text svelte-1qbe2oo"> </p>'),zt=p('<span class="summarizing svelte-1qbe2oo">Analyzing…</span>'),jt=p('<span class="summary-text svelte-1qbe2oo"> </span>'),Lt=p('<span class="summary-fallback svelte-1qbe2oo"> </span>'),Mt=p('<span class="stat stat-error svelte-1qbe2oo"> </span>'),qt=p('<div class="card svelte-1qbe2oo" role="button" tabindex="0"><div class="card-header svelte-1qbe2oo"><span class="project-name svelte-1qbe2oo"> </span> <!></div> <!> <div class="summary-row svelte-1qbe2oo"><!></div> <div class="stats-row svelte-1qbe2oo"><span class="stat svelte-1qbe2oo"><span></span> </span> <span class="stat svelte-1qbe2oo"> </span> <!> <span class="stat stat-path svelte-1qbe2oo"> </span></div></div>');function Je(t,e){ze(e,!0);function s(d){const u=Math.floor(d/1e3);if(u<60)return`${u}s`;const i=Math.floor(u/60);return i<60?`${i}m ${u%60}s`:`${Math.floor(i/60)}h ${i%60}m`}function n(d){const u=d.replace(/\/$/,"").split("/");return u.length<=2?d:u.slice(-2).join("/")}const a=M(()=>e.card.status==="running"&&e.card.isActive?"var(--ds-green-700)":e.card.status==="running"?"var(--ds-blue-700)":e.card.status==="idle"?"var(--ds-amber-700)":e.card.status==="error"?"var(--ds-red-700)":"var(--ds-gray-600)"),o=M(()=>e.card.status==="running"&&e.card.isActive||e.card.status==="running"?"● Running":e.card.status==="idle"?"◎ Idle":e.card.status==="exited"?"○ Done":e.card.status==="error"?"✕ Error":e.card.status),S=M(()=>e.card.status==="running"&&e.card.isActive?"status-pill status-pill--running-active":e.card.status==="running"?"status-pill status-pill--running":e.card.status==="idle"?"status-pill status-pill--idle":e.card.status==="exited"?"status-pill status-pill--exited":e.card.status==="error"?"status-pill status-pill--error":"status-pill"),y=M(()=>e.card.toolCallCount===0?"Waiting for activity…":e.card.toolCallCount===1?"1 tool call so far":`${e.card.toolCallCount} tool calls so far`);function E(d){(d.key==="Enter"||d.key===" ")&&(d.key===" "&&d.preventDefault(),e.onclick?.())}var b=qt(),g=c(b),f=c(g),x=c(f,!0);l(f);var k=v(f,2);tt(k,{get text(){return r(o)},get classes(){return r(S)}}),l(g);var T=v(g,2);{var Se=d=>{var u=Rt(),i=c(u,!0);l(u),B(()=>C(i,e.card.goal)),h(d,u)};D(T,d=>{e.card.goal&&d(Se)})}var $=v(T,2),ye=c($);{var be=d=>{var u=zt();h(d,u)},ee=d=>{var u=jt(),i=c(u,!0);l(u),B(()=>C(i,e.card.summary)),h(d,u)},te=d=>{var u=Lt(),i=c(u,!0);l(u),B(()=>C(i,r(y))),h(d,u)};D(ye,d=>{e.card.isSummarizing?d(be):e.card.summary?d(ee,1):e.card.status==="running"&&d(te,2)})}l($);var W=v($,2),F=c(W),ae=c(F),we=v(ae);l(F);var se=v(F,2),Ce=c(se);l(se);var re=v(se,2);{var xe=d=>{var u=Mt(),i=c(u);l(u),B(()=>C(i,`${e.card.errorCount??""} errors`)),h(d,u)};D(re,d=>{e.card.errorCount>0&&d(xe)})}var oe=v(re,2),ke=c(oe,!0);l(oe),l(W),l(b),B((d,u)=>{pt(b,`--status-color: ${r(a)??""}`),Re(b,"aria-label",`Open ${e.card.projectName??""} session`),C(x,e.card.projectName),_t(ae,1,St(e.card.status==="running"&&e.card.isActive?"status-dot-active":"status-dot-static"),"svelte-1qbe2oo"),C(we,` ${d??""}`),C(Ce,`${e.card.toolCallCount??""} tools`),Re(oe,"title",e.card.cwd),C(ke,u)},[()=>s(e.card.duration),()=>n(e.card.cwd)]),Fe("click",b,function(...d){e.onclick?.apply(this,d)}),Fe("keydown",b,E),h(t,b),je()}vt(["click","keydown"]);var Bt=p('<div class="section svelte-14sxgtb"><h3 class="section-label svelte-14sxgtb">Active</h3> <!></div>'),Kt=p('<div class="section svelte-14sxgtb"><h3 class="section-label svelte-14sxgtb">Recent</h3> <!></div>'),Yt=p("<!> <!>",1);function Ft(t,e){ze(e,!0);const s=M(()=>e.cards.filter(g=>g.status==="running")),n=M(()=>e.cards.filter(g=>g.status!=="running"));function a(g){e.onCardClick?.(g)}var o=Yt(),S=me(o);{var y=g=>{var f=Bt(),x=v(c(f),2);de(x,17,()=>r(s),k=>k.terminalId,(k,T)=>{Je(k,{get card(){return r(T)},onclick:()=>{a(r(T))}})}),l(f),h(g,f)};D(S,g=>{r(s).length>0&&g(y)})}var E=v(S,2);{var b=g=>{var f=Kt(),x=v(c(f),2);de(x,17,()=>r(n),k=>k.terminalId,(k,T)=>{Je(k,{get card(){return r(T)},onclick:()=>{a(r(T))}})}),l(f),h(g,f)};D(E,g=>{r(n).length>0&&g(b)})}h(t,o),je()}const Gt=new Set(["agent-question","terminal-exited","tool-failed"]);let fe=null,ge=null,he=null;class Ut{async summarize(e){const s=this.chooseTone(e),n=s==="conversational"?this.buildConversationalPrompt(e):this.buildStatusReportPrompt(e);try{const a=await Vt();if(!a)return console.log("[SessionSummarizer] NeuroLink not available, using fallback."),{generatedAt:new Date().toISOString(),text:this.fallbackText(e),tone:s};const o=await a.generate({input:{text:n},...he?{model:he.model,provider:he.provider}:{}}),S=Ht(o.content??"").trim()||this.fallbackText(e);return{generatedAt:new Date().toISOString(),text:S,tone:s}}catch(a){return console.warn("[SessionSummarizer] summarize failed:",a instanceof Error?a.message:String(a)),{generatedAt:new Date().toISOString(),text:this.fallbackText(e),tone:s}}}buildConversationalPrompt(e){const s=e.goal??"unknown",n=e.recentEvents.map(a=>{const o=[a.type];return a.tool&&o.push(`tool=${a.tool}`),a.error&&o.push(`error=${a.error}`),a.command&&o.push(`command=${a.command}`),o.join(" ")}).join(", ");return`You are monitoring a coding session. Based on the context below, write ONE sentence (max 100 chars) describing what's happening in plain English. Be specific about what Claude did or is doing.
1
+ import{d as vt,i as T,s as C,b as Fe,a as h,f as p}from"../chunks/BPDiEZo0.js";import{p as ze,c,r as l,d as v,g as r,t as B,w as je,x as M,A as me,s as q,q as et,b as _,v as ft,y as gt,D as mt,$ as ht,B as Ge}from"../chunks/DWmC0QM7.js";import{P as tt,k as pt,d as Re,s as _t,g as St,e as de,j as Le,B as De,c as Te,b as yt,i as Ue}from"../chunks/ZS5XYDx_.js";import{h as bt}from"../chunks/2rBV5OkJ.js";import{g as Ve}from"../chunks/BcqA7eKM.js";import{B as wt}from"../chunks/Bn-6X1BO.js";import{R as Ct,S as We}from"../chunks/BvmdJful.js";import{S as xt}from"../chunks/CG453M9q.js";import{c as kt,s as At,g as Et}from"../chunks/xs1Xl3_e.js";import{i as Nt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as It}from"../chunks/BLszSzTT.js";import{S as Pt}from"../chunks/BcpydfqI.js";import{i as Dt,N as Tt}from"../chunks/CRkG7oE4.js";import{d as Ot}from"../chunks/pRcLbE0d.js";import{E as He}from"../chunks/ClIPTXf3.js";var Rt=p('<p class="goal-text svelte-1qbe2oo"> </p>'),zt=p('<span class="summarizing svelte-1qbe2oo">Analyzing…</span>'),jt=p('<span class="summary-text svelte-1qbe2oo"> </span>'),Lt=p('<span class="summary-fallback svelte-1qbe2oo"> </span>'),Mt=p('<span class="stat stat-error svelte-1qbe2oo"> </span>'),qt=p('<div class="card svelte-1qbe2oo" role="button" tabindex="0"><div class="card-header svelte-1qbe2oo"><span class="project-name svelte-1qbe2oo"> </span> <!></div> <!> <div class="summary-row svelte-1qbe2oo"><!></div> <div class="stats-row svelte-1qbe2oo"><span class="stat svelte-1qbe2oo"><span></span> </span> <span class="stat svelte-1qbe2oo"> </span> <!> <span class="stat stat-path svelte-1qbe2oo"> </span></div></div>');function Je(t,e){ze(e,!0);function s(d){const u=Math.floor(d/1e3);if(u<60)return`${u}s`;const i=Math.floor(u/60);return i<60?`${i}m ${u%60}s`:`${Math.floor(i/60)}h ${i%60}m`}function n(d){const u=d.replace(/\/$/,"").split("/");return u.length<=2?d:u.slice(-2).join("/")}const a=M(()=>e.card.status==="running"&&e.card.isActive?"var(--ds-green-700)":e.card.status==="running"?"var(--ds-blue-700)":e.card.status==="idle"?"var(--ds-amber-700)":e.card.status==="error"?"var(--ds-red-700)":"var(--ds-gray-600)"),o=M(()=>e.card.status==="running"&&e.card.isActive||e.card.status==="running"?"● Running":e.card.status==="idle"?"◎ Idle":e.card.status==="exited"?"○ Done":e.card.status==="error"?"✕ Error":e.card.status),S=M(()=>e.card.status==="running"&&e.card.isActive?"status-pill status-pill--running-active":e.card.status==="running"?"status-pill status-pill--running":e.card.status==="idle"?"status-pill status-pill--idle":e.card.status==="exited"?"status-pill status-pill--exited":e.card.status==="error"?"status-pill status-pill--error":"status-pill"),y=M(()=>e.card.toolCallCount===0?"Waiting for activity…":e.card.toolCallCount===1?"1 tool call so far":`${e.card.toolCallCount} tool calls so far`);function E(d){(d.key==="Enter"||d.key===" ")&&(d.key===" "&&d.preventDefault(),e.onclick?.())}var b=qt(),g=c(b),f=c(g),x=c(f,!0);l(f);var k=v(f,2);tt(k,{get text(){return r(o)},get classes(){return r(S)}}),l(g);var D=v(g,2);{var Se=d=>{var u=Rt(),i=c(u,!0);l(u),B(()=>C(i,e.card.goal)),h(d,u)};T(D,d=>{e.card.goal&&d(Se)})}var $=v(D,2),ye=c($);{var be=d=>{var u=zt();h(d,u)},ee=d=>{var u=jt(),i=c(u,!0);l(u),B(()=>C(i,e.card.summary)),h(d,u)},te=d=>{var u=Lt(),i=c(u,!0);l(u),B(()=>C(i,r(y))),h(d,u)};T(ye,d=>{e.card.isSummarizing?d(be):e.card.summary?d(ee,1):e.card.status==="running"&&d(te,2)})}l($);var W=v($,2),F=c(W),ae=c(F),we=v(ae);l(F);var se=v(F,2),Ce=c(se);l(se);var re=v(se,2);{var xe=d=>{var u=Mt(),i=c(u);l(u),B(()=>C(i,`${e.card.errorCount??""} errors`)),h(d,u)};T(re,d=>{e.card.errorCount>0&&d(xe)})}var oe=v(re,2),ke=c(oe,!0);l(oe),l(W),l(b),B((d,u)=>{pt(b,`--status-color: ${r(a)??""}`),Re(b,"aria-label",`Open ${e.card.projectName??""} session`),C(x,e.card.projectName),_t(ae,1,St(e.card.status==="running"&&e.card.isActive?"status-dot-active":"status-dot-static"),"svelte-1qbe2oo"),C(we,` ${d??""}`),C(Ce,`${e.card.toolCallCount??""} tools`),Re(oe,"title",e.card.cwd),C(ke,u)},[()=>s(e.card.duration),()=>n(e.card.cwd)]),Fe("click",b,function(...d){e.onclick?.apply(this,d)}),Fe("keydown",b,E),h(t,b),je()}vt(["click","keydown"]);var Bt=p('<div class="section svelte-14sxgtb"><h3 class="section-label svelte-14sxgtb">Active</h3> <!></div>'),Kt=p('<div class="section svelte-14sxgtb"><h3 class="section-label svelte-14sxgtb">Recent</h3> <!></div>'),Yt=p("<!> <!>",1);function Ft(t,e){ze(e,!0);const s=M(()=>e.cards.filter(g=>g.status==="running")),n=M(()=>e.cards.filter(g=>g.status!=="running"));function a(g){e.onCardClick?.(g)}var o=Yt(),S=me(o);{var y=g=>{var f=Bt(),x=v(c(f),2);de(x,17,()=>r(s),k=>k.terminalId,(k,D)=>{Je(k,{get card(){return r(D)},onclick:()=>{a(r(D))}})}),l(f),h(g,f)};T(S,g=>{r(s).length>0&&g(y)})}var E=v(S,2);{var b=g=>{var f=Kt(),x=v(c(f),2);de(x,17,()=>r(n),k=>k.terminalId,(k,D)=>{Je(k,{get card(){return r(D)},onclick:()=>{a(r(D))}})}),l(f),h(g,f)};T(E,g=>{r(n).length>0&&g(b)})}h(t,o),je()}const Gt=new Set(["agent-question","terminal-exited","tool-failed"]);let fe=null,ge=null,he=null;class Ut{async summarize(e){const s=this.chooseTone(e),n=s==="conversational"?this.buildConversationalPrompt(e):this.buildStatusReportPrompt(e);try{const a=await Vt();if(!a)return console.log("[SessionSummarizer] NeuroLink not available, using fallback."),{generatedAt:new Date().toISOString(),text:this.fallbackText(e),tone:s};const o=await a.generate({input:{text:n},...he?{model:he.model,provider:he.provider}:{}}),S=Ht(o.content??"").trim()||this.fallbackText(e);return{generatedAt:new Date().toISOString(),text:S,tone:s}}catch(a){return console.warn("[SessionSummarizer] summarize failed:",a instanceof Error?a.message:String(a)),{generatedAt:new Date().toISOString(),text:this.fallbackText(e),tone:s}}}buildConversationalPrompt(e){const s=e.goal??"unknown",n=e.recentEvents.map(a=>{const o=[a.type];return a.tool&&o.push(`tool=${a.tool}`),a.error&&o.push(`error=${a.error}`),a.command&&o.push(`command=${a.command}`),o.join(" ")}).join(", ");return`You are monitoring a coding session. Based on the context below, write ONE sentence (max 100 chars) describing what's happening in plain English. Be specific about what Claude did or is doing.
2
2
 
3
3
  Goal: ${s}
4
4
  Recent events: ${n}
@@ -10,4 +10,4 @@ One sentence only, no quotes, no markdown.`}buildStatusReportPrompt(e){return`Yo
10
10
  Recent tool calls: ${e.recentEvents.flatMap(n=>n.tool?[n.tool]:[]).join(", ")||"none"}
11
11
  Status: ${e.status}
12
12
 
13
- Short phrase only, no quotes.`}chooseTone(e){return e.status==="error"||e.errorCount>0||e.recentEvents.some(n=>Gt.has(n.type))?"conversational":"status-report"}fallbackText(e){const s=e.recentEvents.flatMap(a=>a.tool?[a.tool]:[]),n=[...new Set(s)];return n.length>0?`Running: ${n.join(", ")} (${e.toolCallCount} tools)`:`Status: ${e.status} — ${e.toolCallCount} tool calls`}}async function Vt(){if(ge)return ge;Tt();const e=(await Wt()).NeuroLink;if(!e)return null;const s=window.__aiProviders,n=window.process?.env?.NEUROLINK_PROVIDER,a=Ot(s,n);if(!a)return console.warn("[SessionSummarizer] No AI provider configured"),null;const o=window.process;return o?.env&&s&&(s["google-ai"]&&!o.env.GOOGLE_AI_API_KEY&&(o.env.GOOGLE_AI_API_KEY="proxy-via-server"),s.anthropic&&!o.env.ANTHROPIC_API_KEY&&(o.env.ANTHROPIC_API_KEY="proxy-via-server"),s.openai&&!o.env.OPENAI_API_KEY&&(o.env.OPENAI_API_KEY="proxy-via-server"),s.mistral&&!o.env.MISTRAL_API_KEY&&(o.env.MISTRAL_API_KEY="proxy-via-server")),ge=new e({provider:a.provider}),he=a,console.log(`[SessionSummarizer] Using provider: ${a.provider}/${a.model}`),ge}function Wt(){return fe||(fe=import(Dt).catch(t=>{throw console.warn("[SessionSummarizer] Failed to load NeuroLink SDK:",t),fe=null,t})),fe}function Ht(t){return typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):""}function Me(){return new Date(Date.now()).toISOString()}const Jt=100,Xt=15e3,Zt=3e4,at=2e3,Qt=3e4;let j=q(et([])),ce=q(!1),R=null,Z=null,Q=null,pe=at,$t=0,K="";const ve=new Le,Y=new Le,_e=new Pt;async function ea(t){K=t||ra(),K&&(await Qe(K),await rt(K),Z&&clearInterval(Z),Z=setInterval(()=>{Qe(K)},Xt))}function ta(){R&&(R.onclose=null,R.close(),R=null),Z&&(clearInterval(Z),Z=null),Q&&(clearTimeout(Q),Q=null);for(const[,t]of Y)t.onclose=null,t.close();Y.clear(),_e.clear(),ve.clear(),_(ce,!1),K=""}function aa(){const t=Date.now();return qe(r(j)).map(e=>{const s=Date.parse(e.createdAt),n=e.events.length>0?Date.parse(e.events[e.events.length-1].timestamp):0;return{...e,duration:t-s,goal:e.goal,isActive:n>0&&t-n<Zt,isSummarizing:e.isSummarizing,summary:e.summary}})}function Xe(t,e){const s=r(j).find(n=>n.terminalId===t);s&&(s.goal=e)}function sa(t,e){const s=r(j).find(n=>n.terminalId===t);s&&(s.summary=e,s.summaryUpdatedAt=Me(),s.isSummarizing=!1)}function X(t,e,s){const n={data:s,id:`evt-${++$t}`,summarized:!1,terminalId:t.terminalId,timestamp:s.timestamp??Me(),type:e},a=t.events.length>=Jt?[...t.events.slice(1),n]:[...t.events,n];t.events=a,t.eventCount+=1}function st(t){return t.split("/").filter(Boolean).pop()??t}function ue(t){const e=Y.get(t);e&&(e.onclose=null,e.close(),Y.delete(t))}async function rt(t){if(!(R&&R.readyState<=1))try{const e=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${t}`},method:"POST"});if(!e.ok){Oe(t);return}const{ticket:s}=await e.json(),n=window.location.origin.replace(/^http/,"ws");R=new WebSocket(`${n}/ws/events?ticket=${s}`),R.onopen=()=>{_(ce,!0),pe=at},R.onmessage=a=>{try{const o=JSON.parse(a.data);o&&typeof o=="object"&&oa(o)}catch{}},R.onclose=()=>{_(ce,!1),R=null,Oe(t)},R.onerror=()=>{_(ce,!1)}}catch{_(ce,!1),Oe(t)}}function Ze(t){let e="";return typeof t=="string"?e=t:Array.isArray(t)&&(e=t.find(n=>n.type==="text")?.content??""),e.slice(0,200).trim()}async function Qe(t){if(t)try{const e=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${t}`}});if(!e.ok)return;const n=(await e.json()).terminals??[];_(j,qe(ia(r(j),n)),!0)}catch{}}function ra(){try{const t=localStorage.getItem("shooter_config");if(!t)return"";const e=JSON.parse(t);if(e&&typeof e=="object"){const s=e;if(typeof s.apiKey=="string")return s.apiKey}}catch{}return""}function oa(t){const e=t.type;if(!e||e==="welcome")return;const s=t.terminalId??null;if(!s)return;const n=r(j).findIndex(S=>S.terminalId===s);if(n===-1)return;const a=r(j)[n];switch(e){case"agent-idle":case"agent-question":{a.status="idle",X(a,e,t);break}case"terminal-exited":{a.status="exited",a.exitedAt=t.exitedAt??Me(),X(a,e,t),ue(s),ve.delete(s);break}case"tool-completed":{X(a,e,t);break}case"tool-failed":{a.errorCount+=1,X(a,e,t);break}case"tool-started":{a.toolCallCount+=1,a.status="running",X(a,e,t);break}default:{X(a,e,t);break}}(e==="tool-failed"||e==="agent-question"||a.errorCount>=3||a.eventCount>0&&a.eventCount%20===0)&&!a.isSummarizing&&la(a),_(j,qe(r(j)),!0)}function na(t){return{command:t.command,createdAt:t.createdAt,cwd:t.cwd,errorCount:0,eventCount:0,events:[],exitedAt:t.exitedAt,goal:"",isSummarizing:!1,projectName:st(t.cwd),projectPath:t.cwd,status:ot(t.status),summary:"",summaryUpdatedAt:"",terminalId:t.id,toolCallCount:0}}function ot(t){return t==="running"?"running":t==="idle"?"idle":t==="exited"?"exited":"error"}function ia(t,e){const s=new Set(e.map(a=>a.id));for(const a of t)s.has(a.terminalId)||(ue(a.terminalId),ve.delete(a.terminalId));const n=new Le;for(const a of t)s.has(a.terminalId)&&n.set(a.terminalId,a);for(const a of e){const o=n.get(a.id);o?(o.command=a.command,o.cwd=a.cwd,o.projectName=st(a.cwd),o.projectPath=a.cwd,o.exitedAt=a.exitedAt,o.status!=="error"&&(o.status=ot(a.status)),o.goal||$e(a.id)):(n.set(a.id,na(a)),$e(a.id))}return Array.from(n.values())}async function $e(t){if(K&&!(Y.has(t)||_e.has(t))){_e.add(t),console.log(`[DashboardStore] Opening session socket for ${t}`);try{const e=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${K}`},method:"POST"});if(!e.ok){console.warn(`[DashboardStore] Failed to get WS ticket for ${t}:`,e.status);return}const{ticket:s}=await e.json(),a=`${window.location.origin.replace(/^http/,"ws")}/ws/session/${t}?ticket=${s}`;console.log(`[DashboardStore] Connecting session socket for ${t}`);const o=new WebSocket(a);Y.set(t,o),o.onopen=()=>{console.log(`[DashboardStore] Session socket opened for ${t}`)},o.onmessage=S=>{try{const y=JSON.parse(S.data);if(!y||typeof y!="object")return;const E=y,b=r(j).find(f=>f.terminalId===t),g=b?.goal&&b.goal.length>0;if(E.type==="history"){console.log(`[DashboardStore] Received history for ${t}, extracting goal...`);const f=E.messages;if(!Array.isArray(f)){console.warn(`[DashboardStore] No messages array in history for ${t}`);return}console.log(`[DashboardStore] Found ${f.length} messages, looking for first user message...`);for(const x of f)if(x.role==="user"){const k=Ze(x.content);console.log(`[DashboardStore] Extracted goal for ${t}: "${k.substring(0,50)}..."`),k&&Xe(t,k),ue(t);return}console.log(`[DashboardStore] No user message found in history for ${t}`);return}if(E.type==="message"&&E.role==="user"&&!g){const f=Ze(E.content);f&&(console.log(`[DashboardStore] Extracted goal from message for ${t}: "${f.substring(0,50)}..."`),Xe(t,f),ue(t));return}if(!g)return;ue(t)}catch(y){console.warn("[DashboardStore] Error processing session message:",y)}},o.onclose=()=>{console.log(`[DashboardStore] Session socket closed for ${t}`),Y.delete(t)},o.onerror=S=>{console.warn(`[DashboardStore] Session socket error for ${t}:`,S),Y.delete(t)}}catch(e){console.warn("[DashboardStore] Failed to open session socket:",e)}finally{_e.delete(t)}}}function Oe(t){Q||(Q=setTimeout(()=>{Q=null,rt(t)},pe),pe=Math.min(pe*2,Qt))}function qe(t){return[...t].sort((e,s)=>{const n={error:2,exited:3,idle:1,running:0},a=n[e.status],o=n[s.status];if(a!==o)return a-o;if(e.status!=="exited"&&s.status!=="exited")return s.createdAt.localeCompare(e.createdAt);const S=e.exitedAt??e.createdAt;return(s.exitedAt??s.createdAt).localeCompare(S)})}function la(t){t.isSummarizing=!0;let e=ve.get(t.terminalId);e||(e=new Ut,ve.set(t.terminalId,e));const s=t.events.slice(-10).map(a=>({command:typeof a.data.command=="string"?a.data.command:null,error:typeof a.data.error=="string"?a.data.error:null,tool:typeof a.data.tool=="string"?a.data.tool:null,type:a.type})),n={conversationExcerpt:t.goal??"",errorCount:t.errorCount,goal:t.goal,recentEvents:s,status:t.status,toolCallCount:t.toolCallCount};(async()=>{try{const a=await e.summarize(n);sa(t.terminalId,a.text)}catch(a){console.error(`[dashboard] Summarization failed for ${t.terminalId}:`,a)}finally{t.isSummarizing=!1}})()}var ca=p('<meta name="description" content="Active terminals and Claude Code sessions"/>'),da=p("<!> Refresh",1),ua=p('<div class="stat-chip stat-chip-active svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag">active</span></div>'),va=p('<div class="stats-bar svelte-1uha8ag"><div class="stat-chip svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag"> </span></div> <div class="stat-chip svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag"> </span></div> <!></div>'),fa=p('<div class="loading-container"></div>'),ga=p('<div class="dashboard-section svelte-1uha8ag"><!></div>'),ma=p('<div class="loading-container"></div>'),ha=p('<h3 class="section-label svelte-1uha8ag">Sessions</h3>'),pa=p('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <div class="session-card-subtitle"> </div></div> <!></div> <div class="session-stats"><span><strong> </strong> </span></div></a>'),_a=p('<div style="text-align: center; padding: 1rem;"><!></div>'),Sa=p('<!> <div class="projects-container svelte-1uha8ag"></div> <!>',1),ya=p("<!> <!>",1),ba=p('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Dashboard</h1> <p class="page-description">Active terminals and Claude Code sessions</p></div> <div class="page-actions"><!></div></div> <!></div> <!> <!></main>');function Ma(t,e){ze(e,!0);const s=1e4,n=20;let a=q(et([])),o=q(!1),S=!1,y=q(null),E=null,b=q(null),g=q(!1),f=q(0);const x=M(aa);ft(()=>{k();const i=Et("shooter_projects");i&&(_(a,i,!0),_(o,!1)),T(),E=setInterval(()=>{r(y)?.apiKey&&r(f)<=n&&T()},s)}),gt(()=>{E&&(clearInterval(E),E=null),ta()});function k(){try{const i=localStorage.getItem("shooter_config");if(i){const m=JSON.parse(i);Nt(m)?(_(y,m,!0),ea(r(y).apiKey)):(localStorage.removeItem("shooter_config"),_(y,null))}}catch{}}async function T(i=!1,m=!1){if(!r(y)?.apiKey||S)return;S=!0,r(a).length===0&&_(o,!0);const w=i?r(f):0;try{const G=await fetch(`${m?"/api/sessions?refresh=true&":"/api/sessions?"}limit=${n}&offset=${w}`,{headers:{Authorization:`Bearer ${r(y).apiKey}`}});if(!G.ok){_(b,`Failed to load projects (HTTP ${G.status})`);return}_(b,null);const L=await G.json();i?_(a,[...r(a),...L.projects],!0):_(a,L.projects,!0),_(f,r(a).length,!0),_(g,L.total!==void 0?r(a).length<L.total:!1,!0),At("shooter_projects",r(a))}catch(O){_(b,"Failed to load projects"),console.error("Failed to fetch sessions:",O)}finally{_(o,!1),S=!1}}async function Se(){await T(!0)}async function $(){_(o,!0),kt("shooter_projects"),await T(!1,!0)}function ye(){Ve("/config")}function be(i){Ve(`/terminals/${i}`)}function ee(){return r(a).reduce((i,m)=>i+m.sessionCount,0)}var te=ba();bt("1uha8ag",i=>{var m=ca();mt(()=>{ht.title="Dashboard - Shooter"}),h(i,m)});var W=c(te),F=c(W),ae=v(c(F),2),we=c(ae);Te(we,{classes:"btn-secondary",onclick:$,get disabled(){return r(o)},children:(i,m)=>{var w=da(),O=me(w);De(O,{get svg(){return Ct},classes:"icon-14"}),Ge(),h(i,w)},$$slots:{default:!0}}),l(ae),l(F);var se=v(F,2);{var Ce=i=>{var m=va(),w=c(m),O=c(w),G=c(O,!0);l(O);var L=v(O,2),Ae=c(L,!0);l(L),l(w);var ne=v(w,2),ie=c(ne),A=c(ie,!0);l(ie);var N=v(ie,2),z=c(N,!0);l(N),l(ne);var H=v(ne,2);{var le=U=>{var V=ua(),I=c(V),P=c(I,!0);l(I),Ge(2),l(V),B(()=>C(P,r(x).length)),h(U,V)};D(H,U=>{r(x).length>0&&U(le)})}l(m),B((U,V)=>{C(G,r(a).length),C(Ae,r(a).length===1?"project":"projects"),C(A,U),C(z,V)},[()=>ee(),()=>ee()===1?"session":"sessions"]),h(i,m)};D(se,i=>{r(a).length>0&&i(Ce)})}l(W);var re=v(W,2);{var xe=i=>{yt(i,{get text(){return r(b)},classes:"banner-error"})};D(re,i=>{r(b)&&i(xe)})}var oe=v(re,2);{var ke=i=>{var m=fa();de(m,20,()=>Array(3),Ue,(w,O)=>{We(w,{classes:"shimmer-card"})}),l(m),h(i,m)},d=i=>{He(i,{title:"Configuration Required",description:"Set up your API credentials to start tracking sessions",icon:w=>{De(w,{get svg(){return xt},classes:"icon-24"})},children:(w,O)=>{Te(w,{classes:"btn-primary",onclick:ye,text:"Configure Settings"})}})},u=i=>{var m=ya(),w=me(m);{var O=A=>{var N=ga(),z=c(N);Ft(z,{get cards(){return r(x)},onCardClick:H=>{be(H.terminalId)}}),l(N),h(A,N)};D(w,A=>{r(x).length>0&&A(O)})}var G=v(w,2);{var L=A=>{var N=ma();de(N,20,()=>Array(3),Ue,(z,H)=>{We(z,{classes:"shimmer-card"})}),l(N),h(A,N)},Ae=A=>{He(A,{title:"No sessions yet",description:"Claude Code sessions will appear here once JSONL files are found",icon:z=>{De(z,{get svg(){return wt},classes:"icon-24"})}})},ne=M(()=>ee()===0&&r(x).length===0),ie=A=>{var N=Sa(),z=me(N);{var H=I=>{var P=ha();h(I,P)};D(z,I=>{r(x).length>0&&I(H)})}var le=v(z,2);de(le,21,()=>r(a),I=>I.id,(I,P)=>{var J=pa(),Ee=c(J),Ne=c(Ee),Ie=c(Ne),nt=c(Ie,!0);l(Ie);var Be=v(Ie,2),it=c(Be,!0);l(Be),l(Ne);var lt=v(Ne,2);{let ut=M(()=>It(r(P).lastModified));tt(lt,{get text(){return`Last updated ${r(ut)??""}`},classes:"pill-session-time"})}l(Ee);var Ke=v(Ee,2),Ye=c(Ke),Pe=c(Ye),ct=c(Pe,!0);l(Pe);var dt=v(Pe);l(Ye),l(Ke),l(J),B(()=>{Re(J,"href",`/project?id=${r(P).id??""}`),C(nt,r(P).name),C(it,r(P).fullPath),C(ct,r(P).sessionCount),C(dt,` ${r(P).sessionCount===1?"session":"sessions"}`)}),h(I,J)}),l(le);var U=v(le,2);{var V=I=>{var P=_a(),J=c(P);Te(J,{classes:"btn-secondary",onclick:Se,text:"Load More"}),l(P),h(I,P)};D(U,I=>{r(g)&&I(V)})}h(A,N)};D(G,A=>{r(o)&&r(a).length===0?A(L):r(ne)?A(Ae,1):r(a).length>0&&A(ie,2)})}h(i,m)};D(oe,i=>{r(o)&&r(a).length===0&&r(x).length===0?i(ke):r(y)?.apiKey?i(u,-1):i(d,1)})}l(te),h(t,te),je()}export{Ma as component};
13
+ Short phrase only, no quotes.`}chooseTone(e){return e.status==="error"||e.errorCount>0||e.recentEvents.some(n=>Gt.has(n.type))?"conversational":"status-report"}fallbackText(e){const s=e.recentEvents.flatMap(a=>a.tool?[a.tool]:[]),n=[...new Set(s)];return n.length>0?`Running: ${n.join(", ")} (${e.toolCallCount} tools)`:`Status: ${e.status} — ${e.toolCallCount} tool calls`}}async function Vt(){if(ge)return ge;Dt();const e=(await Wt()).NeuroLink;if(!e)return null;const s=window.__aiProviders,n=window.process?.env?.NEUROLINK_PROVIDER,a=Ot(s,n);if(!a)return console.warn("[SessionSummarizer] No AI provider configured"),null;const o=window.process;return o?.env&&s&&(s["google-ai"]&&!o.env.GOOGLE_AI_API_KEY&&(o.env.GOOGLE_AI_API_KEY="proxy-via-server"),s.anthropic&&!o.env.ANTHROPIC_API_KEY&&(o.env.ANTHROPIC_API_KEY="proxy-via-server"),s.openai&&!o.env.OPENAI_API_KEY&&(o.env.OPENAI_API_KEY="proxy-via-server"),s.mistral&&!o.env.MISTRAL_API_KEY&&(o.env.MISTRAL_API_KEY="proxy-via-server")),ge=new e({provider:a.provider}),he=a,console.log(`[SessionSummarizer] Using provider: ${a.provider}/${a.model}`),ge}function Wt(){return fe||(fe=import(Tt).catch(t=>{throw console.warn("[SessionSummarizer] Failed to load NeuroLink SDK:",t),fe=null,t})),fe}function Ht(t){return typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):""}function Me(){return new Date(Date.now()).toISOString()}const Jt=100,Xt=15e3,Zt=3e4,at=2e3,Qt=3e4;let j=q(et([])),ce=q(!1),R=null,Z=null,Q=null,pe=at,$t=0,K="";const ve=new Le,Y=new Le,_e=new Pt;async function ea(t){K=t||ra(),K&&(await Qe(K),await rt(K),Z&&clearInterval(Z),Z=setInterval(()=>{Qe(K)},Xt))}function ta(){R&&(R.onclose=null,R.close(),R=null),Z&&(clearInterval(Z),Z=null),Q&&(clearTimeout(Q),Q=null);for(const[,t]of Y)t.onclose=null,t.close();Y.clear(),_e.clear(),ve.clear(),_(ce,!1),K=""}function aa(){const t=Date.now();return qe(r(j)).map(e=>{const s=Date.parse(e.createdAt),n=e.events.length>0?Date.parse(e.events[e.events.length-1].timestamp):0;return{...e,duration:t-s,goal:e.goal,isActive:n>0&&t-n<Zt,isSummarizing:e.isSummarizing,summary:e.summary}})}function Xe(t,e){const s=r(j).find(n=>n.terminalId===t);s&&(s.goal=e)}function sa(t,e){const s=r(j).find(n=>n.terminalId===t);s&&(s.summary=e,s.summaryUpdatedAt=Me(),s.isSummarizing=!1)}function X(t,e,s){const n={data:s,id:`evt-${++$t}`,summarized:!1,terminalId:t.terminalId,timestamp:s.timestamp??Me(),type:e},a=t.events.length>=Jt?[...t.events.slice(1),n]:[...t.events,n];t.events=a,t.eventCount+=1}function st(t){return t.split("/").filter(Boolean).pop()??t}function ue(t){const e=Y.get(t);e&&(e.onclose=null,e.close(),Y.delete(t))}async function rt(t){if(!(R&&R.readyState<=1))try{const e=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${t}`},method:"POST"});if(!e.ok){Oe(t);return}const{ticket:s}=await e.json(),n=window.location.origin.replace(/^http/,"ws");R=new WebSocket(`${n}/ws/events?ticket=${s}`),R.onopen=()=>{_(ce,!0),pe=at},R.onmessage=a=>{try{const o=JSON.parse(a.data);o&&typeof o=="object"&&oa(o)}catch{}},R.onclose=()=>{_(ce,!1),R=null,Oe(t)},R.onerror=()=>{_(ce,!1)}}catch{_(ce,!1),Oe(t)}}function Ze(t){let e="";return typeof t=="string"?e=t:Array.isArray(t)&&(e=t.find(n=>n.type==="text")?.content??""),e.slice(0,200).trim()}async function Qe(t){if(t)try{const e=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${t}`}});if(!e.ok)return;const n=(await e.json()).terminals??[];_(j,qe(ia(r(j),n)),!0)}catch{}}function ra(){try{const t=localStorage.getItem("shooter_config");if(!t)return"";const e=JSON.parse(t);if(e&&typeof e=="object"){const s=e;if(typeof s.apiKey=="string")return s.apiKey}}catch{}return""}function oa(t){const e=t.type;if(!e||e==="welcome")return;const s=t.terminalId??null;if(!s)return;const n=r(j).findIndex(S=>S.terminalId===s);if(n===-1)return;const a=r(j)[n];switch(e){case"agent-idle":case"agent-question":{a.status="idle",X(a,e,t);break}case"terminal-exited":{a.status="exited",a.exitedAt=t.exitedAt??Me(),X(a,e,t),ue(s),ve.delete(s);break}case"tool-completed":{X(a,e,t);break}case"tool-failed":{a.errorCount+=1,X(a,e,t);break}case"tool-started":{a.toolCallCount+=1,a.status="running",X(a,e,t);break}default:{X(a,e,t);break}}(e==="tool-failed"||e==="agent-question"||a.errorCount>=3||a.eventCount>0&&a.eventCount%20===0)&&!a.isSummarizing&&la(a),_(j,qe(r(j)),!0)}function na(t){return{command:t.command,createdAt:t.createdAt,cwd:t.cwd,errorCount:0,eventCount:0,events:[],exitedAt:t.exitedAt,goal:"",isSummarizing:!1,projectName:st(t.cwd),projectPath:t.cwd,status:ot(t.status),summary:"",summaryUpdatedAt:"",terminalId:t.id,toolCallCount:0}}function ot(t){return t==="running"?"running":t==="idle"?"idle":t==="exited"?"exited":"error"}function ia(t,e){const s=new Set(e.map(a=>a.id));for(const a of t)s.has(a.terminalId)||(ue(a.terminalId),ve.delete(a.terminalId));const n=new Le;for(const a of t)s.has(a.terminalId)&&n.set(a.terminalId,a);for(const a of e){const o=n.get(a.id);o?(o.command=a.command,o.cwd=a.cwd,o.projectName=st(a.cwd),o.projectPath=a.cwd,o.exitedAt=a.exitedAt,o.status!=="error"&&(o.status=ot(a.status)),o.goal||$e(a.id)):(n.set(a.id,na(a)),$e(a.id))}return Array.from(n.values())}async function $e(t){if(K&&!(Y.has(t)||_e.has(t))){_e.add(t),console.log(`[DashboardStore] Opening session socket for ${t}`);try{const e=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${K}`},method:"POST"});if(!e.ok){console.warn(`[DashboardStore] Failed to get WS ticket for ${t}:`,e.status);return}const{ticket:s}=await e.json(),a=`${window.location.origin.replace(/^http/,"ws")}/ws/session/${t}?ticket=${s}`;console.log(`[DashboardStore] Connecting session socket for ${t}`);const o=new WebSocket(a);Y.set(t,o),o.onopen=()=>{console.log(`[DashboardStore] Session socket opened for ${t}`)},o.onmessage=S=>{try{const y=JSON.parse(S.data);if(!y||typeof y!="object")return;const E=y,b=r(j).find(f=>f.terminalId===t),g=b?.goal&&b.goal.length>0;if(E.type==="history"){console.log(`[DashboardStore] Received history for ${t}, extracting goal...`);const f=E.messages;if(!Array.isArray(f)){console.warn(`[DashboardStore] No messages array in history for ${t}`);return}console.log(`[DashboardStore] Found ${f.length} messages, looking for first user message...`);for(const x of f)if(x.role==="user"){const k=Ze(x.content);console.log(`[DashboardStore] Extracted goal for ${t}: "${k.substring(0,50)}..."`),k&&Xe(t,k),ue(t);return}console.log(`[DashboardStore] No user message found in history for ${t}`);return}if(E.type==="message"&&E.role==="user"&&!g){const f=Ze(E.content);f&&(console.log(`[DashboardStore] Extracted goal from message for ${t}: "${f.substring(0,50)}..."`),Xe(t,f),ue(t));return}if(!g)return;ue(t)}catch(y){console.warn("[DashboardStore] Error processing session message:",y)}},o.onclose=()=>{console.log(`[DashboardStore] Session socket closed for ${t}`),Y.delete(t)},o.onerror=S=>{console.warn(`[DashboardStore] Session socket error for ${t}:`,S),Y.delete(t)}}catch(e){console.warn("[DashboardStore] Failed to open session socket:",e)}finally{_e.delete(t)}}}function Oe(t){Q||(Q=setTimeout(()=>{Q=null,rt(t)},pe),pe=Math.min(pe*2,Qt))}function qe(t){return[...t].sort((e,s)=>{const n={error:2,exited:3,idle:1,running:0},a=n[e.status],o=n[s.status];if(a!==o)return a-o;if(e.status!=="exited"&&s.status!=="exited")return s.createdAt.localeCompare(e.createdAt);const S=e.exitedAt??e.createdAt;return(s.exitedAt??s.createdAt).localeCompare(S)})}function la(t){t.isSummarizing=!0;let e=ve.get(t.terminalId);e||(e=new Ut,ve.set(t.terminalId,e));const s=t.events.slice(-10).map(a=>({command:typeof a.data.command=="string"?a.data.command:null,error:typeof a.data.error=="string"?a.data.error:null,tool:typeof a.data.tool=="string"?a.data.tool:null,type:a.type})),n={conversationExcerpt:t.goal??"",errorCount:t.errorCount,goal:t.goal,recentEvents:s,status:t.status,toolCallCount:t.toolCallCount};(async()=>{try{const a=await e.summarize(n);sa(t.terminalId,a.text)}catch(a){console.error(`[dashboard] Summarization failed for ${t.terminalId}:`,a)}finally{t.isSummarizing=!1}})()}var ca=p('<meta name="description" content="Active terminals and Claude Code sessions"/>'),da=p("<!> Refresh",1),ua=p('<div class="stat-chip stat-chip-active svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag">active</span></div>'),va=p('<div class="stats-bar svelte-1uha8ag"><div class="stat-chip svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag"> </span></div> <div class="stat-chip svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag"> </span></div> <!></div>'),fa=p('<div class="loading-container"></div>'),ga=p('<div class="dashboard-section svelte-1uha8ag"><!></div>'),ma=p('<div class="loading-container"></div>'),ha=p('<h3 class="section-label svelte-1uha8ag">Sessions</h3>'),pa=p('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <div class="session-card-subtitle"> </div></div> <!></div> <div class="session-stats"><span><strong> </strong> </span></div></a>'),_a=p('<div style="text-align: center; padding: 1rem;"><!></div>'),Sa=p('<!> <div class="projects-container svelte-1uha8ag"></div> <!>',1),ya=p("<!> <!>",1),ba=p('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Dashboard</h1> <p class="page-description">Active terminals and Claude Code sessions</p></div> <div class="page-actions"><!></div></div> <!></div> <!> <!></main>');function Ma(t,e){ze(e,!0);const s=1e4,n=20;let a=q(et([])),o=q(!1),S=!1,y=q(null),E=null,b=q(null),g=q(!1),f=q(0);const x=M(aa);ft(()=>{k();const i=Et("shooter_projects");i&&(_(a,i,!0),_(o,!1)),D(),E=setInterval(()=>{r(y)?.apiKey&&r(f)<=n&&D()},s)}),gt(()=>{E&&(clearInterval(E),E=null),ta()});function k(){try{const i=localStorage.getItem("shooter_config");if(i){const m=JSON.parse(i);Nt(m)?(_(y,m,!0),ea(r(y).apiKey)):(localStorage.removeItem("shooter_config"),_(y,null))}}catch{}}async function D(i=!1,m=!1){if(!r(y)?.apiKey||S)return;S=!0,r(a).length===0&&_(o,!0);const w=i?r(f):0;try{const G=await fetch(`${m?"/api/sessions?refresh=true&":"/api/sessions?"}limit=${n}&offset=${w}`,{headers:{Authorization:`Bearer ${r(y).apiKey}`}});if(!G.ok){_(b,`Failed to load projects (HTTP ${G.status})`);return}_(b,null);const L=await G.json();i?_(a,[...r(a),...L.projects],!0):_(a,L.projects,!0),_(f,r(a).length,!0),_(g,L.total!==void 0?r(a).length<L.total:!1,!0),At("shooter_projects",r(a))}catch(O){_(b,"Failed to load projects"),console.error("Failed to fetch sessions:",O)}finally{_(o,!1),S=!1}}async function Se(){await D(!0)}async function $(){_(o,!0),kt("shooter_projects"),await D(!1,!0)}function ye(){Ve("/config")}function be(i){Ve(`/terminals/${i}`)}function ee(){return r(a).reduce((i,m)=>i+m.sessionCount,0)}var te=ba();bt("1uha8ag",i=>{var m=ca();mt(()=>{ht.title="Dashboard - Shooter"}),h(i,m)});var W=c(te),F=c(W),ae=v(c(F),2),we=c(ae);De(we,{classes:"btn-secondary",onclick:$,get disabled(){return r(o)},children:(i,m)=>{var w=da(),O=me(w);Te(O,{get svg(){return Ct},classes:"icon-14"}),Ge(),h(i,w)},$$slots:{default:!0}}),l(ae),l(F);var se=v(F,2);{var Ce=i=>{var m=va(),w=c(m),O=c(w),G=c(O,!0);l(O);var L=v(O,2),Ae=c(L,!0);l(L),l(w);var ne=v(w,2),ie=c(ne),A=c(ie,!0);l(ie);var N=v(ie,2),z=c(N,!0);l(N),l(ne);var H=v(ne,2);{var le=U=>{var V=ua(),I=c(V),P=c(I,!0);l(I),Ge(2),l(V),B(()=>C(P,r(x).length)),h(U,V)};T(H,U=>{r(x).length>0&&U(le)})}l(m),B((U,V)=>{C(G,r(a).length),C(Ae,r(a).length===1?"project":"projects"),C(A,U),C(z,V)},[()=>ee(),()=>ee()===1?"session":"sessions"]),h(i,m)};T(se,i=>{r(a).length>0&&i(Ce)})}l(W);var re=v(W,2);{var xe=i=>{yt(i,{get text(){return r(b)},classes:"banner-error"})};T(re,i=>{r(b)&&i(xe)})}var oe=v(re,2);{var ke=i=>{var m=fa();de(m,20,()=>Array(3),Ue,(w,O)=>{We(w,{classes:"shimmer-card"})}),l(m),h(i,m)},d=i=>{He(i,{title:"Configuration Required",description:"Set up your API credentials to start tracking sessions",icon:w=>{Te(w,{get svg(){return xt},classes:"icon-24"})},children:(w,O)=>{De(w,{classes:"btn-primary",onclick:ye,text:"Configure Settings"})}})},u=i=>{var m=ya(),w=me(m);{var O=A=>{var N=ga(),z=c(N);Ft(z,{get cards(){return r(x)},onCardClick:H=>{be(H.terminalId)}}),l(N),h(A,N)};T(w,A=>{r(x).length>0&&A(O)})}var G=v(w,2);{var L=A=>{var N=ma();de(N,20,()=>Array(3),Ue,(z,H)=>{We(z,{classes:"shimmer-card"})}),l(N),h(A,N)},Ae=A=>{He(A,{title:"No sessions yet",description:"Claude Code sessions will appear here once JSONL files are found",icon:z=>{Te(z,{get svg(){return wt},classes:"icon-24"})}})},ne=M(()=>ee()===0&&r(x).length===0),ie=A=>{var N=Sa(),z=me(N);{var H=I=>{var P=ha();h(I,P)};T(z,I=>{r(x).length>0&&I(H)})}var le=v(z,2);de(le,21,()=>r(a),I=>I.id,(I,P)=>{var J=pa(),Ee=c(J),Ne=c(Ee),Ie=c(Ne),nt=c(Ie,!0);l(Ie);var Be=v(Ie,2),it=c(Be,!0);l(Be),l(Ne);var lt=v(Ne,2);{let ut=M(()=>It(r(P).lastModified));tt(lt,{get text(){return`Last updated ${r(ut)??""}`},classes:"pill-session-time"})}l(Ee);var Ke=v(Ee,2),Ye=c(Ke),Pe=c(Ye),ct=c(Pe,!0);l(Pe);var dt=v(Pe);l(Ye),l(Ke),l(J),B(()=>{Re(J,"href",`/project?id=${r(P).id??""}`),C(nt,r(P).name),C(it,r(P).fullPath),C(ct,r(P).sessionCount),C(dt,` ${r(P).sessionCount===1?"session":"sessions"}`)}),h(I,J)}),l(le);var U=v(le,2);{var V=I=>{var P=_a(),J=c(P);De(J,{classes:"btn-secondary",onclick:Se,text:"Load More"}),l(P),h(I,P)};T(U,I=>{r(g)&&I(V)})}h(A,N)};T(G,A=>{r(o)&&r(a).length===0?A(L):r(ne)?A(Ae,1):r(a).length>0&&A(ie,2)})}h(i,m)};T(oe,i=>{r(o)&&r(a).length===0&&r(x).length===0?i(ke):r(y)?.apiKey?i(u,-1):i(d,1)})}l(te),h(t,te),je()}export{Ma as component};
@@ -1,9 +1,9 @@
1
- import{i as P,s as h,a as g,t as Be,f as A}from"../chunks/Cg3dlX05.js";import{s as b,q as ke,b as _,g as n,p as Ee,v as Pe,y as Ge,c as u,d as p,r as d,t as E,B as He,w as Ne,x as N,N as Ve,$ as We}from"../chunks/DYuMZGL5.js";import{h as Je}from"../chunks/DZQMsHM5.js";import{g as ce}from"../chunks/nWG9RHyB.js";import{j as ue,e as le,B as qe,s as Ae,b as Xe}from"../chunks/DZvnhU_8.js";import{g as je,i as Ze}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as we}from"../chunks/BLszSzTT.js";import{S as Qe}from"../chunks/C_9BZILB.js";import{i as et,N as tt}from"../chunks/CRkG7oE4.js";import{d as ot}from"../chunks/pRcLbE0d.js";const rt=6e4,Se=3;let Q=null,Y=null,L=0,$e=0;async function st(e,t){if(e.length===0)return{error:null,text:""};let i;try{i=await it()}catch{const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"AI SDK failed to load",text:`${e.length} events: ${l.join(", ")}`}}if(!i){const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"No AI provider configured",text:`${e.length} events: ${l.join(", ")}`}}const s=at(e),a=`You are a coding activity summarizer. Given these events from active Claude Code sessions, write a 1-2 sentence summary (max 150 chars) of what's happening. Be specific — mention tool names, file names, and what's being accomplished.
1
+ import{i as P,s as h,a as g,t as Be,f as A}from"../chunks/BPDiEZo0.js";import{s as b,q as ke,b as _,g as n,p as Ee,v as Pe,y as Ge,c as u,d as p,r as d,t as E,B as He,w as Ne,x as N,D as Ve,$ as We}from"../chunks/DWmC0QM7.js";import{h as Je}from"../chunks/2rBV5OkJ.js";import{g as ce}from"../chunks/BcqA7eKM.js";import{j as ue,e as le,B as qe,s as Ae,b as Xe}from"../chunks/ZS5XYDx_.js";import{g as je,i as Ze}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as we}from"../chunks/BLszSzTT.js";import{S as Qe}from"../chunks/BcpydfqI.js";import{i as et,N as tt}from"../chunks/CRkG7oE4.js";import{d as ot}from"../chunks/pRcLbE0d.js";const rt=6e4,Se=3;let Q=null,Y=null,L=0,$e=0;async function st(e,t){if(e.length===0)return{error:null,text:""};let i;try{i=await it()}catch{const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"AI SDK failed to load",text:`${e.length} events: ${l.join(", ")}`}}if(!i){const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"No AI provider configured",text:`${e.length} events: ${l.join(", ")}`}}const s=at(e),a=`You are a coding activity summarizer. Given these events from active Claude Code sessions, write a 1-2 sentence summary (max 150 chars) of what's happening. Be specific — mention tool names, file names, and what's being accomplished.
2
2
 
3
3
  ${t?`Project: ${t}
4
4
  `:""}Events:
5
5
  ${s}
6
6
 
7
7
  Summary:`;try{const o=await i.generate({input:{text:a},maxTokens:300,...me?{model:me}:{},...de?{provider:de}:{}});return{error:null,text:w(o.content??o.text).trim()||`${e.length} events processed`}}catch(o){return{error:o instanceof Error?o.message:String(o),text:`${e.length} events (summary unavailable)`}}}function nt(e){const t=e.data,i=e.projectName?`[${e.projectName}] `:"",s=w(t.tool)||w(t.name)||"",r=w(t.filePath),a=w(t.command),o=w(t.pattern);switch(e.type){case"agent-idle":case"agent-question":return`${i}${e.type}: ${w(t.message).slice(0,80)}`;case"error":return`${i}Error: ${w(t.error||t.message).slice(0,100)}`;case"session_end":return`${i}Session ended`;case"tool-completed":return`${i}[${s}] completed`;case"tool-failed":return`${i}[${s}] FAILED: ${w(t.error).slice(0,80)}`;case"tool-started":return`${i}[${s}] started${r?`: ${r}`:""}`;case"tool_result":{const l=t.is_error?"FAILED":"done";return`${i}${s?`[${s}] → `:""}${l}`}case"tool_use":{const l=r||a||o||"";return s?`${i}[${s}] ${l}`.trim():`${i}[tool] ${l}`.trim()}case"user_message":return`${i}User: ${w(t.text).slice(0,80)}`;default:return`${i}${e.type}`}}function at(e){return e.map(nt).join(`
8
- `)}let me="",de="";async function it(){if(Q)return Q;if(Y)return Y;if(L>=Se){if(Date.now()<$e)return null;L=0}return L++,Y=(async()=>{try{et();const e=await import(tt),t=window.__aiProviders,i=window.process?.env?.NEUROLINK_PROVIDER,s=ot(t,i);if(!s)return console.warn("[ActivityFeed] No AI provider configured"),null;const r=window.process;return r?.env&&t&&(t["google-ai"]&&!r.env.GOOGLE_AI_API_KEY&&(r.env.GOOGLE_AI_API_KEY="proxy-via-server"),t.anthropic&&!r.env.ANTHROPIC_API_KEY&&(r.env.ANTHROPIC_API_KEY="proxy-via-server"),t.openai&&!r.env.OPENAI_API_KEY&&(r.env.OPENAI_API_KEY="proxy-via-server"),t.mistral&&!r.env.MISTRAL_API_KEY&&(r.env.MISTRAL_API_KEY="proxy-via-server")),Q=new e.NeuroLink({provider:s.provider}),me=s.model,de=s.provider,L=0,console.log(`[ActivityFeed] NeuroLink SDK loaded: ${s.provider}/${s.model}`),Q}catch(e){return console.warn("[ActivityFeed] NeuroLink SDK load failed (attempt",L,"):",e instanceof Error?e.message:String(e)),L>=Se&&($e=Date.now()+rt),null}finally{Y=null}})(),Y}function w(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):JSON.stringify(e)}const ct=50,Oe=5,lt=15e3,mt=15e3,dt=5;let S=b(ke([])),te=b(ke([])),ve=b(!0),M=b(!1),B=b(!1),G=null,ee=null,fe=0;const I=new ue;let H="",oe=null;async function ut(e){if(!G){if(H=je(),!H){console.warn("[ActivityStore] No API key available");return}oe=e,await Ie(),G=setInterval(()=>{Ie()},mt),ee=setInterval(()=>{T()},lt)}}function vt(){G&&(clearInterval(G),G=null),ee&&(clearInterval(ee),ee=null);for(const[e,t]of I)t.onclose=null,t.close(),console.log(`[ActivityStore] Closed session socket for ${e}`);I.clear(),_(S,[],!0),_(te,[],!0),fe=0,_(ve,!0),_(B,!1),_(M,!1),H="",oe=null}function ft(){return n(S)}function pt(){return n(te)}function _t(){return n(ve)}function gt(){return n(M)}function yt(){return n(B)}function R(e,t,i,s){const r={data:i,id:`evt-${++fe}`,projectName:e.projectName,sessionId:e.id,summarized:!1,timestamp:s||new Date().toISOString(),type:t};_(S,[...n(S),r].slice(-200),!0),n(S).filter(o=>!o.summarized).length>=Oe&&T()}async function ht(e){if(oe)try{const t=await oe(),s=`${window.location.origin.replace(/^http/,"ws")}/ws/session/${e.id}?ticket=${t}`;console.log(`[ActivityStore] Connecting to session ${e.id}`);const r=new WebSocket(s);I.set(e.id,r),r.onopen=()=>{console.log(`[ActivityStore] Session socket opened: ${e.id}`),_(M,!0)},r.onmessage=a=>{try{const o=JSON.parse(a.data);if(!o||typeof o!="object")return;const l=o;At(e,l),l.type==="history"&&T()}catch{}},r.onclose=()=>{console.log(`[ActivityStore] Session socket closed: ${e.id}`),I.delete(e.id),_(M,I.size>0)},r.onerror=a=>{console.warn(`[ActivityStore] Session socket error for ${e.id}:`,a),I.delete(e.id),_(M,I.size>0)}}catch(t){console.warn(`[ActivityStore] Failed to connect session ${e.id}:`,t)}}async function Ie(){if(H)try{const e=await fetch("/api/sessions?limit=50",{headers:{Authorization:`Bearer ${H}`}});if(!e.ok){console.warn("[ActivityStore] Failed to fetch sessions:",e.status);return}const i=(await e.json()).projects??[],s=Date.now()-dt*60*1e3,r=[];for(const o of i)for(const l of o.sessions)Date.parse(l.modified)>s&&r.push({createdAt:l.created,id:l.id,modifiedAt:l.modified,projectName:o.name,projectPath:o.fullPath});const a=new Set(r.map(o=>o.id));for(const[o,l]of I)a.has(o)||(l.onclose=null,l.close(),I.delete(o),console.log(`[ActivityStore] Session ${o} went stale, closed socket`));for(const o of r)I.has(o.id)||ht(o);_(M,I.size>0)}catch(e){console.warn("[ActivityStore] Error discovering sessions:",e)}}function At(e,t){const i=t.type;if(i==="history"&&Array.isArray(t.messages)){const r=t.messages.slice(-20);for(const a of r)xe(e,a)}else if(i==="message")xe(e,{content:t.content||"",role:t.role||"assistant",timestamp:t.timestamp});else if(i==="tool-use"){const s=t.name||"unknown",r=typeof t.input=="object"&&t.input!==null?t.input:{},a=r.file_path||r.path||"",o=r.command||"",l=r.pattern||"";R(e,"tool_use",{command:o.slice(0,120),filePath:a.slice(0,200),name:s,pattern:l.slice(0,100),tool:s})}else if(i==="tool-result"){const s=t.isError===!0,r=(t.output||"").slice(0,200);let a=t.name||"";if(!a){for(let o=n(S).length-1;o>=0;o--)if(n(S)[o].type==="tool_use"&&n(S)[o].data.name){a=n(S)[o].data.name;break}}R(e,"tool_result",{is_error:s,output:r,status:s?"error":"done",tool:a}),s&&T()}else i==="thinking"||(i==="error"?(R(e,"error",{message:t.message||"Unknown error"}),T()):i==="session-end"&&(R(e,"session_end",{}),T()))}function xe(e,t){const i=t.timestamp||new Date().toISOString();let s="";if(typeof t.content=="string"?s=t.content:Array.isArray(t.content)&&(s=t.content.filter(a=>a.type==="text").map(a=>a.text||a.content||"").join("")),t.role==="user")R(e,"user_message",{text:s.slice(0,150)},i);else if(t.role==="assistant"&&Array.isArray(t.content)){const r=t.content.filter(a=>a.type==="tool_use");for(const a of r){const o=a,l=typeof o.input=="object"&&o.input!==null?o.input:{};R(e,"tool_use",{command:(l.command||"").slice(0,120),filePath:(l.file_path||l.path||"").slice(0,200),name:a.name||"unknown",tool:a.name||"unknown"},i)}}}async function T(){if(n(B))return;const e=n(S).filter(s=>!s.summarized);if(e.length===0)return;const t=new ue;for(const s of e){const r=s.projectName||"Unknown";t.has(r)||t.set(r,[]);const a=t.get(r);a&&a.push(s)}const i=Array.from(t.entries()).filter(([,s])=>s.length>=Oe);if(i.length!==0){_(B,!0);try{const s=await Promise.allSettled(i.slice(0,3).map(async([r,a])=>{const o=await st(a,r);return{projectEvents:a,projectName:r,result:o}}));for(const r of s){if(r.status!=="fulfilled"||!r.value.result.text)continue;const{projectEvents:a,projectName:o,result:l}=r.value;l.error?.includes("No AI provider")&&_(ve,!1);const x={eventIds:a.map(k=>k.id),id:`sum-${++fe}`,projectName:o,text:l.text,timestamp:new Date().toISOString()};_(te,[...n(te),x].slice(-ct),!0);const V=new Set(a.map(k=>k.id));_(S,n(S).map(k=>V.has(k.id)?{...k,summarized:!0}:k),!0)}}catch(s){console.warn("[ActivityStore] Summarization failed:",s)}finally{_(B,!1)}}}var wt=A('<span class="summarizing svelte-tc58m">Summarizing...</span>'),St=A(`<p class="empty svelte-tc58m">No recent activity. Summaries will appear here when Claude Code sessions are active on this
9
- machine.</p>`),$t=A('<div class="summary-card svelte-tc58m"><time class="svelte-tc58m"> </time> <p class="svelte-tc58m"> </p> <span class="event-count svelte-tc58m"> </span></div>'),It=A('<div class="project-group svelte-tc58m"><h3 class="project-name svelte-tc58m"> </h3> <!></div>'),xt=A('<div class="pending svelte-tc58m"><span> </span></div>'),kt=A('<span class="tool svelte-tc58m"> </span>'),Et=A('<code class="file-path svelte-tc58m"> </code>'),Pt=A('<code class="svelte-tc58m"> </code>'),Nt=A('<div><time class="svelte-tc58m"> </time> <span class="project svelte-tc58m"> </span> <span class="type svelte-tc58m"> </span> <!> <!> <!></div>'),jt=A('<div class="raw-events svelte-tc58m"></div>'),Ot=A('<div class="feed svelte-tc58m"><header class="svelte-tc58m"><h2 class="svelte-tc58m">Activity</h2> <span> </span> <!></header> <!> <div class="entries svelte-tc58m"><!> <!> <!></div> <!> <!></div>');function bt(e,t){Ee(t,!0);let i=b(!1);async function s(){const c=je();if(!c)throw new Error("No API key configured");const m=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${c}`},method:"POST"});if(!m.ok)throw new Error("Failed to get WS ticket");return(await m.json()).ticket}Pe(()=>{ut(s)}),Ge(()=>{vt()});const r=N(pt),a=N(ft),o=N(gt),l=N(_t),x=N(yt),V=N(()=>n(a).filter(c=>!c.summarized).length),k=N(()=>{const c=new Qe;for(const m of n(a))m.sessionId&&c.add(m.sessionId);return c.size}),be=N(()=>{const c=new ue;for(const m of[...n(r)].reverse()){const v=m.projectName||"Unknown";c.has(v)||c.set(v,{name:v,summaries:[]});const f=c.get(v);f&&f.summaries.push(m)}return Array.from(c.values())});var re=Ot(),se=u(re),W=p(u(se),2);let pe;var ze=u(W,!0);d(W);var Le=p(W,2);{var Re=c=>{var m=wt();g(c,m)};P(Le,c=>{n(x)&&c(Re)})}d(se);var _e=p(se,2);{var Me=c=>{Xe(c,{text:"AI summaries unavailable — configure a provider to enable",classes:"banner-warning"})};P(_e,c=>{n(l)||c(Me)})}var ne=p(_e,2),ge=u(ne);{var Te=c=>{var m=St();g(c,m)};P(ge,c=>{n(r).length===0&&n(a).length===0&&c(Te)})}var ye=p(ge,2);le(ye,17,()=>n(be),c=>c.name,(c,m)=>{var v=It(),f=u(v),z=u(f,!0);d(f);var J=p(f,2);le(J,17,()=>n(m).summaries,j=>j.id,(j,D)=>{var O=$t(),C=u(O),K=u(C,!0);d(C);var F=p(C,2),q=u(F,!0);d(F);var X=p(F,2),Z=u(X);d(X),d(O),E(ae=>{h(K,ae),h(q,n(D).text),h(Z,`${n(D).eventIds.length??""} events`)},[()=>we(n(D).timestamp)]),g(j,O)}),d(v),E(()=>h(z,n(m).name)),g(c,v)});var De=p(ye,2);{var Ce=c=>{var m=xt(),v=u(m),f=u(v);d(v),d(m),E(()=>h(f,`${n(V)??""} events pending summary...`)),g(c,m)};P(De,c=>{n(V)>0&&c(Ce)})}d(ne);var he=p(ne,2);qe(he,{classes:"btn-ghost raw-toggle",onclick:()=>{_(i,!n(i))},children:(c,m)=>{He();var v=Be();E(()=>h(v,`${n(i)?"▾":"▸"} Raw events (${n(a).length??""})`)),g(c,v)},$$slots:{default:!0}});var Ke=p(he,2);{var Fe=c=>{var m=jt();le(m,21,()=>[...n(a)].reverse().slice(0,50),v=>v.id,(v,f)=>{var z=Nt();let J;var j=u(z),D=u(j,!0);d(j);var O=p(j,2),C=u(O,!0);d(O);var K=p(O,2),F=u(K,!0);d(K);var q=p(K,2);{var X=y=>{var $=kt(),U=u($,!0);d($),E(()=>h(U,n(f).data.tool)),g(y,$)};P(q,y=>{n(f).data.tool&&y(X)})}var Z=p(q,2);{var ae=y=>{var $=Et(),U=u($,!0);d($),E(ie=>h(U,ie),[()=>n(f).data.filePath.slice(0,80)]),g(y,$)};P(Z,y=>{n(f).data.filePath&&y(ae)})}var Ue=p(Z,2);{var Ye=y=>{var $=Pt(),U=u($,!0);d($),E(ie=>h(U,ie),[()=>n(f).data.command.slice(0,60)]),g(y,$)};P(Ue,y=>{n(f).data.command&&y(Ye)})}d(z),E(y=>{J=Ae(z,1,"raw-event svelte-tc58m",null,J,{summarized:n(f).summarized}),h(D,y),h(C,n(f).projectName||"Unknown"),h(F,n(f).type)},[()=>we(n(f).timestamp)]),g(v,z)}),d(m),g(c,m)};P(Ke,c=>{n(i)&&c(Fe)})}d(re),E(()=>{pe=Ae(W,1,"status svelte-tc58m",null,pe,{live:n(o)}),h(ze,n(o)?`● Watching ${n(k)} sessions`:"○ No active sessions")}),g(e,re),Ne()}var zt=A('<meta name="description" content="Real-time activity feed"/>'),Lt=A('<main class="main"><h1 class="page-title svelte-13r34ge">Activity Feed</h1> <!></main>');function Ht(e,t){Ee(t,!0);let i=b(!1);Pe(()=>{try{const o=localStorage.getItem("shooter_config");if(!o){ce("/config");return}const l=JSON.parse(o);if(!Ze(l)){localStorage.removeItem("shooter_config"),ce("/config");return}_(i,!0)}catch{localStorage.removeItem("shooter_config"),ce("/config")}});var s=Lt();Je("13r34ge",o=>{var l=zt();Ve(()=>{We.title="Activity Feed - Shooter"}),g(o,l)});var r=p(u(s),2);{var a=o=>{bt(o,{})};P(r,o=>{n(i)&&o(a)})}d(s),g(e,s),Ne()}export{Ht as component};
8
+ `)}let me="",de="";async function it(){if(Q)return Q;if(Y)return Y;if(L>=Se){if(Date.now()<$e)return null;L=0}return L++,Y=(async()=>{try{et();const e=await import(tt),t=window.__aiProviders,i=window.process?.env?.NEUROLINK_PROVIDER,s=ot(t,i);if(!s)return console.warn("[ActivityFeed] No AI provider configured"),null;const r=window.process;return r?.env&&t&&(t["google-ai"]&&!r.env.GOOGLE_AI_API_KEY&&(r.env.GOOGLE_AI_API_KEY="proxy-via-server"),t.anthropic&&!r.env.ANTHROPIC_API_KEY&&(r.env.ANTHROPIC_API_KEY="proxy-via-server"),t.openai&&!r.env.OPENAI_API_KEY&&(r.env.OPENAI_API_KEY="proxy-via-server"),t.mistral&&!r.env.MISTRAL_API_KEY&&(r.env.MISTRAL_API_KEY="proxy-via-server")),Q=new e.NeuroLink({provider:s.provider}),me=s.model,de=s.provider,L=0,console.log(`[ActivityFeed] NeuroLink SDK loaded: ${s.provider}/${s.model}`),Q}catch(e){return console.warn("[ActivityFeed] NeuroLink SDK load failed (attempt",L,"):",e instanceof Error?e.message:String(e)),L>=Se&&($e=Date.now()+rt),null}finally{Y=null}})(),Y}function w(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):JSON.stringify(e)}const ct=50,Oe=5,lt=15e3,mt=15e3,dt=5;let S=b(ke([])),te=b(ke([])),ve=b(!0),D=b(!1),B=b(!1),G=null,ee=null,fe=0;const I=new ue;let H="",oe=null;async function ut(e){if(!G){if(H=je(),!H){console.warn("[ActivityStore] No API key available");return}oe=e,await Ie(),G=setInterval(()=>{Ie()},mt),ee=setInterval(()=>{M()},lt)}}function vt(){G&&(clearInterval(G),G=null),ee&&(clearInterval(ee),ee=null);for(const[e,t]of I)t.onclose=null,t.close(),console.log(`[ActivityStore] Closed session socket for ${e}`);I.clear(),_(S,[],!0),_(te,[],!0),fe=0,_(ve,!0),_(B,!1),_(D,!1),H="",oe=null}function ft(){return n(S)}function pt(){return n(te)}function _t(){return n(ve)}function gt(){return n(D)}function yt(){return n(B)}function R(e,t,i,s){const r={data:i,id:`evt-${++fe}`,projectName:e.projectName,sessionId:e.id,summarized:!1,timestamp:s||new Date().toISOString(),type:t};_(S,[...n(S),r].slice(-200),!0),n(S).filter(o=>!o.summarized).length>=Oe&&M()}async function ht(e){if(oe)try{const t=await oe(),s=`${window.location.origin.replace(/^http/,"ws")}/ws/session/${e.id}?ticket=${t}`;console.log(`[ActivityStore] Connecting to session ${e.id}`);const r=new WebSocket(s);I.set(e.id,r),r.onopen=()=>{console.log(`[ActivityStore] Session socket opened: ${e.id}`),_(D,!0)},r.onmessage=a=>{try{const o=JSON.parse(a.data);if(!o||typeof o!="object")return;const l=o;At(e,l),l.type==="history"&&M()}catch{}},r.onclose=()=>{console.log(`[ActivityStore] Session socket closed: ${e.id}`),I.delete(e.id),_(D,I.size>0)},r.onerror=a=>{console.warn(`[ActivityStore] Session socket error for ${e.id}:`,a),I.delete(e.id),_(D,I.size>0)}}catch(t){console.warn(`[ActivityStore] Failed to connect session ${e.id}:`,t)}}async function Ie(){if(H)try{const e=await fetch("/api/sessions?limit=50",{headers:{Authorization:`Bearer ${H}`}});if(!e.ok){console.warn("[ActivityStore] Failed to fetch sessions:",e.status);return}const i=(await e.json()).projects??[],s=Date.now()-dt*60*1e3,r=[];for(const o of i)for(const l of o.sessions)Date.parse(l.modified)>s&&r.push({createdAt:l.created,id:l.id,modifiedAt:l.modified,projectName:o.name,projectPath:o.fullPath});const a=new Set(r.map(o=>o.id));for(const[o,l]of I)a.has(o)||(l.onclose=null,l.close(),I.delete(o),console.log(`[ActivityStore] Session ${o} went stale, closed socket`));for(const o of r)I.has(o.id)||ht(o);_(D,I.size>0)}catch(e){console.warn("[ActivityStore] Error discovering sessions:",e)}}function At(e,t){const i=t.type;if(i==="history"&&Array.isArray(t.messages)){const r=t.messages.slice(-20);for(const a of r)xe(e,a)}else if(i==="message")xe(e,{content:t.content||"",role:t.role||"assistant",timestamp:t.timestamp});else if(i==="tool-use"){const s=t.name||"unknown",r=typeof t.input=="object"&&t.input!==null?t.input:{},a=r.file_path||r.path||"",o=r.command||"",l=r.pattern||"";R(e,"tool_use",{command:o.slice(0,120),filePath:a.slice(0,200),name:s,pattern:l.slice(0,100),tool:s})}else if(i==="tool-result"){const s=t.isError===!0,r=(t.output||"").slice(0,200);let a=t.name||"";if(!a){for(let o=n(S).length-1;o>=0;o--)if(n(S)[o].type==="tool_use"&&n(S)[o].data.name){a=n(S)[o].data.name;break}}R(e,"tool_result",{is_error:s,output:r,status:s?"error":"done",tool:a}),s&&M()}else i==="thinking"||(i==="error"?(R(e,"error",{message:t.message||"Unknown error"}),M()):i==="session-end"&&(R(e,"session_end",{}),M()))}function xe(e,t){const i=t.timestamp||new Date().toISOString();let s="";if(typeof t.content=="string"?s=t.content:Array.isArray(t.content)&&(s=t.content.filter(a=>a.type==="text").map(a=>a.text||a.content||"").join("")),t.role==="user")R(e,"user_message",{text:s.slice(0,150)},i);else if(t.role==="assistant"&&Array.isArray(t.content)){const r=t.content.filter(a=>a.type==="tool_use");for(const a of r){const o=a,l=typeof o.input=="object"&&o.input!==null?o.input:{};R(e,"tool_use",{command:(l.command||"").slice(0,120),filePath:(l.file_path||l.path||"").slice(0,200),name:a.name||"unknown",tool:a.name||"unknown"},i)}}}async function M(){if(n(B))return;const e=n(S).filter(s=>!s.summarized);if(e.length===0)return;const t=new ue;for(const s of e){const r=s.projectName||"Unknown";t.has(r)||t.set(r,[]);const a=t.get(r);a&&a.push(s)}const i=Array.from(t.entries()).filter(([,s])=>s.length>=Oe);if(i.length!==0){_(B,!0);try{const s=await Promise.allSettled(i.slice(0,3).map(async([r,a])=>{const o=await st(a,r);return{projectEvents:a,projectName:r,result:o}}));for(const r of s){if(r.status!=="fulfilled"||!r.value.result.text)continue;const{projectEvents:a,projectName:o,result:l}=r.value;l.error?.includes("No AI provider")&&_(ve,!1);const x={eventIds:a.map(k=>k.id),id:`sum-${++fe}`,projectName:o,text:l.text,timestamp:new Date().toISOString()};_(te,[...n(te),x].slice(-ct),!0);const V=new Set(a.map(k=>k.id));_(S,n(S).map(k=>V.has(k.id)?{...k,summarized:!0}:k),!0)}}catch(s){console.warn("[ActivityStore] Summarization failed:",s)}finally{_(B,!1)}}}var wt=A('<span class="summarizing svelte-tc58m">Summarizing...</span>'),St=A(`<p class="empty svelte-tc58m">No recent activity. Summaries will appear here when Claude Code sessions are active on this
9
+ machine.</p>`),$t=A('<div class="summary-card svelte-tc58m"><time class="svelte-tc58m"> </time> <p class="svelte-tc58m"> </p> <span class="event-count svelte-tc58m"> </span></div>'),It=A('<div class="project-group svelte-tc58m"><h3 class="project-name svelte-tc58m"> </h3> <!></div>'),xt=A('<div class="pending svelte-tc58m"><span> </span></div>'),kt=A('<span class="tool svelte-tc58m"> </span>'),Et=A('<code class="file-path svelte-tc58m"> </code>'),Pt=A('<code class="svelte-tc58m"> </code>'),Nt=A('<div><time class="svelte-tc58m"> </time> <span class="project svelte-tc58m"> </span> <span class="type svelte-tc58m"> </span> <!> <!> <!></div>'),jt=A('<div class="raw-events svelte-tc58m"></div>'),Ot=A('<div class="feed svelte-tc58m"><header class="svelte-tc58m"><h2 class="svelte-tc58m">Activity</h2> <span> </span> <!></header> <!> <div class="entries svelte-tc58m"><!> <!> <!></div> <!> <!></div>');function bt(e,t){Ee(t,!0);let i=b(!1);async function s(){const c=je();if(!c)throw new Error("No API key configured");const m=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${c}`},method:"POST"});if(!m.ok)throw new Error("Failed to get WS ticket");return(await m.json()).ticket}Pe(()=>{ut(s)}),Ge(()=>{vt()});const r=N(pt),a=N(ft),o=N(gt),l=N(_t),x=N(yt),V=N(()=>n(a).filter(c=>!c.summarized).length),k=N(()=>{const c=new Qe;for(const m of n(a))m.sessionId&&c.add(m.sessionId);return c.size}),be=N(()=>{const c=new ue;for(const m of[...n(r)].reverse()){const v=m.projectName||"Unknown";c.has(v)||c.set(v,{name:v,summaries:[]});const f=c.get(v);f&&f.summaries.push(m)}return Array.from(c.values())});var re=Ot(),se=u(re),W=p(u(se),2);let pe;var ze=u(W,!0);d(W);var Le=p(W,2);{var Re=c=>{var m=wt();g(c,m)};P(Le,c=>{n(x)&&c(Re)})}d(se);var _e=p(se,2);{var De=c=>{Xe(c,{text:"AI summaries unavailable — configure a provider to enable",classes:"banner-warning"})};P(_e,c=>{n(l)||c(De)})}var ne=p(_e,2),ge=u(ne);{var Me=c=>{var m=St();g(c,m)};P(ge,c=>{n(r).length===0&&n(a).length===0&&c(Me)})}var ye=p(ge,2);le(ye,17,()=>n(be),c=>c.name,(c,m)=>{var v=It(),f=u(v),z=u(f,!0);d(f);var J=p(f,2);le(J,17,()=>n(m).summaries,j=>j.id,(j,T)=>{var O=$t(),C=u(O),K=u(C,!0);d(C);var F=p(C,2),q=u(F,!0);d(F);var X=p(F,2),Z=u(X);d(X),d(O),E(ae=>{h(K,ae),h(q,n(T).text),h(Z,`${n(T).eventIds.length??""} events`)},[()=>we(n(T).timestamp)]),g(j,O)}),d(v),E(()=>h(z,n(m).name)),g(c,v)});var Te=p(ye,2);{var Ce=c=>{var m=xt(),v=u(m),f=u(v);d(v),d(m),E(()=>h(f,`${n(V)??""} events pending summary...`)),g(c,m)};P(Te,c=>{n(V)>0&&c(Ce)})}d(ne);var he=p(ne,2);qe(he,{classes:"btn-ghost raw-toggle",onclick:()=>{_(i,!n(i))},children:(c,m)=>{He();var v=Be();E(()=>h(v,`${n(i)?"▾":"▸"} Raw events (${n(a).length??""})`)),g(c,v)},$$slots:{default:!0}});var Ke=p(he,2);{var Fe=c=>{var m=jt();le(m,21,()=>[...n(a)].reverse().slice(0,50),v=>v.id,(v,f)=>{var z=Nt();let J;var j=u(z),T=u(j,!0);d(j);var O=p(j,2),C=u(O,!0);d(O);var K=p(O,2),F=u(K,!0);d(K);var q=p(K,2);{var X=y=>{var $=kt(),U=u($,!0);d($),E(()=>h(U,n(f).data.tool)),g(y,$)};P(q,y=>{n(f).data.tool&&y(X)})}var Z=p(q,2);{var ae=y=>{var $=Et(),U=u($,!0);d($),E(ie=>h(U,ie),[()=>n(f).data.filePath.slice(0,80)]),g(y,$)};P(Z,y=>{n(f).data.filePath&&y(ae)})}var Ue=p(Z,2);{var Ye=y=>{var $=Pt(),U=u($,!0);d($),E(ie=>h(U,ie),[()=>n(f).data.command.slice(0,60)]),g(y,$)};P(Ue,y=>{n(f).data.command&&y(Ye)})}d(z),E(y=>{J=Ae(z,1,"raw-event svelte-tc58m",null,J,{summarized:n(f).summarized}),h(T,y),h(C,n(f).projectName||"Unknown"),h(F,n(f).type)},[()=>we(n(f).timestamp)]),g(v,z)}),d(m),g(c,m)};P(Ke,c=>{n(i)&&c(Fe)})}d(re),E(()=>{pe=Ae(W,1,"status svelte-tc58m",null,pe,{live:n(o)}),h(ze,n(o)?`● Watching ${n(k)} sessions`:"○ No active sessions")}),g(e,re),Ne()}var zt=A('<meta name="description" content="Real-time activity feed"/>'),Lt=A('<main class="main"><h1 class="page-title svelte-13r34ge">Activity Feed</h1> <!></main>');function Ht(e,t){Ee(t,!0);let i=b(!1);Pe(()=>{try{const o=localStorage.getItem("shooter_config");if(!o){ce("/config");return}const l=JSON.parse(o);if(!Ze(l)){localStorage.removeItem("shooter_config"),ce("/config");return}_(i,!0)}catch{localStorage.removeItem("shooter_config"),ce("/config")}});var s=Lt();Je("13r34ge",o=>{var l=zt();Ve(()=>{We.title="Activity Feed - Shooter"}),g(o,l)});var r=p(u(s),2);{var a=o=>{bt(o,{})};P(r,o=>{n(i)&&o(a)})}d(s),g(e,s),Ne()}export{Ht as component};
@@ -1,4 +1,4 @@
1
- import{a as d,f as u,i as Q,s as D}from"../chunks/Cg3dlX05.js";import{c as v,g as e,r as c,t as U,p as ke,w as Ce,d as g,v as Oe,N as De,A as J,b as t,x,s as k,$ as Le,B as we}from"../chunks/DYuMZGL5.js";import{e as xe,l as je,s as W,i as $e,a as Je,B as F,I as ie,c as se,b as Me,d as Ee}from"../chunks/DZvnhU_8.js";import{h as Fe}from"../chunks/DZQMsHM5.js";import{A as Ge}from"../chunks/DzuS5Nbr.js";import{i as ze}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{P as Ve}from"../chunks/pRcLbE0d.js";var He=u("<div><!></div>"),We=u("<div></div>");function Xe(h,o){var f=We();xe(f,21,()=>o.steps,$e,(s,w,l)=>{var S=He();let i;var I=v(S);je(I,{get onclick(){return o.onhandleStepClick},get label(){return e(w).label},get icon(){return e(w).icon},stepIndex:l+1}),c(S),U(()=>i=W(S,1,"step-container svelte-dvxh34",null,i,{"active-step":o.currentStepIndex===l,"completed-step":o.currentStepIndex>l})),d(s,S)}),c(f),U(()=>W(f,1,`container ${o.classes??""??""}`,"svelte-dvxh34")),d(h,f)}var Ye=u('<div class="card-description svelte-15b0v7e"> </div>'),Ze=u('<div class="card-header svelte-15b0v7e"><div class="card-title svelte-15b0v7e"> </div> <!></div>'),et=u('<div><!> <div class="card-content svelte-15b0v7e"><!></div></div>');function G(h,o){ke(o,!0);var f=et(),s=v(f);{var w=i=>{var I=Ze(),T=v(I),L=v(T,!0);c(T);var j=g(T,2);{var q=A=>{var M=Ye(),z=v(M,!0);c(M),U(()=>D(z,o.description)),d(A,M)};Q(j,A=>{typeof o.description=="string"&&o.description.length>0&&A(q)})}c(I),U(()=>D(L,o.title)),d(i,I)};Q(s,i=>{typeof o.title=="string"&&o.title.length>0&&i(w)})}var l=g(s,2),S=v(l);Je(S,()=>o.children),c(l),c(f),U(()=>W(f,1,`card ${o.classes??""??""}`,"svelte-15b0v7e")),d(h,f),Ce()}function H(h){return h instanceof Error?h.message:typeof h=="string"?h:String(h)}function tt(){return Pe()!==null}async function rt(){const h=Pe();if(!h)throw new Error("Scanner not available");return h()}function Pe(){if(typeof window>"u")return null;const h=window.ShooterBridge?.scanner;if(h&&typeof h.scan=="function")return()=>h.scan();const o=window.ShooterNativeBridge?.scanner;return o&&typeof o.scan=="function"?()=>o.scan():null}const Se=`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1
+ import{a as d,f as u,i as K,s as O}from"../chunks/BPDiEZo0.js";import{c as v,g as e,r as c,t as U,p as ke,w as Ce,d as g,v as De,D as Oe,A as J,b as t,x,s as k,$ as Le,B as we}from"../chunks/DWmC0QM7.js";import{e as xe,l as je,s as W,i as $e,a as Je,B as F,I as ie,c as se,b as Me,d as Ee}from"../chunks/ZS5XYDx_.js";import{h as Fe}from"../chunks/2rBV5OkJ.js";import{A as Ge}from"../chunks/DzuS5Nbr.js";import{i as ze}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{P as Ve}from"../chunks/pRcLbE0d.js";var He=u("<div><!></div>"),We=u("<div></div>");function Xe(h,o){var f=We();xe(f,21,()=>o.steps,$e,(s,w,l)=>{var S=He();let i;var I=v(S);je(I,{get onclick(){return o.onhandleStepClick},get label(){return e(w).label},get icon(){return e(w).icon},stepIndex:l+1}),c(S),U(()=>i=W(S,1,"step-container svelte-dvxh34",null,i,{"active-step":o.currentStepIndex===l,"completed-step":o.currentStepIndex>l})),d(s,S)}),c(f),U(()=>W(f,1,`container ${o.classes??""??""}`,"svelte-dvxh34")),d(h,f)}var Ye=u('<div class="card-description svelte-15b0v7e"> </div>'),Ze=u('<div class="card-header svelte-15b0v7e"><div class="card-title svelte-15b0v7e"> </div> <!></div>'),et=u('<div><!> <div class="card-content svelte-15b0v7e"><!></div></div>');function G(h,o){ke(o,!0);var f=et(),s=v(f);{var w=i=>{var I=Ze(),T=v(I),L=v(T,!0);c(T);var j=g(T,2);{var q=A=>{var M=Ye(),z=v(M,!0);c(M),U(()=>O(z,o.description)),d(A,M)};K(j,A=>{typeof o.description=="string"&&o.description.length>0&&A(q)})}c(I),U(()=>O(L,o.title)),d(i,I)};K(s,i=>{typeof o.title=="string"&&o.title.length>0&&i(w)})}var l=g(s,2),S=v(l);Je(S,()=>o.children),c(l),c(f),U(()=>W(f,1,`card ${o.classes??""??""}`,"svelte-15b0v7e")),d(h,f),Ce()}function H(h){return h instanceof Error?h.message:typeof h=="string"?h:String(h)}function tt(){return Pe()!==null}async function rt(){const h=Pe();if(!h)throw new Error("Scanner not available");return h()}function Pe(){if(typeof window>"u")return null;const h=window.ShooterBridge?.scanner;if(h&&typeof h.scan=="function")return()=>h.scan();const o=window.ShooterNativeBridge?.scanner;return o&&typeof o.scan=="function"?()=>o.scan():null}const Se=`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2
2
  <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
3
3
  <polyline points="22 4 12 14.01 9 11.01"/>
4
4
  </svg>
@@ -13,4 +13,4 @@ import{a as d,f as u,i as Q,s as D}from"../chunks/Cg3dlX05.js";import{c as v,g a
13
13
  `;var at=u('<meta name="description" content="Configure notification system settings"/>'),ot=u(`<!> <!> <p class="input-help svelte-1gp6n77">Find this in your <code class="svelte-1gp6n77">~/.shooter/.env</code> file. Run <code class="svelte-1gp6n77">shooter setup</code> to generate
14
14
  one.</p> <!> <p class="input-help svelte-1gp6n77">Optional — only needed for iOS/Android push notifications.</p>`,1),it=u("<!> Test Connection",1),st=u(`<p class="qr-description svelte-1gp6n77">Scan the QR code shown on your server's settings page to auto-configure the
15
15
  connection.</p> <!>`,1),ct=u('<p class="qr-server-url svelte-1gp6n77">Server: <code class="svelte-1gp6n77"> </code></p>'),lt=u('<div class="qr-container svelte-1gp6n77"><img alt="QR code for mobile app pairing" class="qr-image svelte-1gp6n77"/></div> <p class="qr-hint svelte-1gp6n77">Scan this QR code with the Shooter iOS or Android app to connect.</p> <!>',1),dt=u('<div class="qr-placeholder svelte-1gp6n77"><p class="qr-loading-text svelte-1gp6n77">Generating QR code...</p></div>'),vt=u('<p class="qr-error svelte-1gp6n77"> </p>'),ut=u(`<p class="qr-description svelte-1gp6n77">Generate a QR code containing your server URL and API key. Your mobile app can
16
- scan it to auto-configure the connection.</p>`),gt=u("<!> <!>",1),ft=u('<div class="qr-section svelte-1gp6n77"><!></div>'),pt=u('<div class="provider-row svelte-1gp6n77"><!> <span class="provider-label svelte-1gp6n77"> </span> <span> </span></div>'),ht=u('<div class="active-provider svelte-1gp6n77">Active: <strong> </strong></div>'),mt=u('<div class="active-provider svelte-1gp6n77">Auto-detected from configured keys</div>'),yt=u('<p class="ai-help svelte-1gp6n77">Run <code class="svelte-1gp6n77">shooter setup</code> to configure AI providers for summaries.</p>'),_t=u('<div class="ai-providers svelte-1gp6n77"><!> <!></div>'),wt=u('<p class="danger-description svelte-1gp6n77">Clear all saved configuration data from this device.</p> <!>',1),St=u('<main class="main"><div class="settings-container svelte-1gp6n77"><div style="margin-bottom: var(--space-4);"><a href="/" class="back-link">← Back to Projects</a></div> <div class="page-header"><h1 class="page-title">Settings</h1> <p class="page-description">Configure your API credentials and notification preferences</p></div> <div class="settings-grid svelte-1gp6n77"><section class="settings-section svelte-1gp6n77"><!> <!> <div class="button-group svelte-1gp6n77"><!> <!></div></section> <aside class="settings-sidebar svelte-1gp6n77"><!> <!> <!> <!></aside></div></div></main>');function Tt(h,o){ke(o,!0);let f=k(""),s=k(""),w=k(""),l=k(""),S=k(!1),i=k(""),I=k(!1),T=k(""),L=k(""),j=k(!1),q=k(""),A=k(!1),M=k(!1),z=!1,V=k(!1);async function Re(){if(!e(s).trim()){t(q,"Save an API key first to generate a QR code");return}t(j,!0),t(q,""),t(T,""),t(L,"");try{const r=await fetch("/api/qr-config",{headers:{Authorization:`Bearer ${e(s).trim()}`}});if(!r.ok){const a=await r.json();t(q,a.error||"Failed to generate QR code",!0);return}const n=await r.json();t(T,n.dataUrl,!0),t(L,n.serverUrl,!0)}catch(r){t(q,`Network error: ${H(r)}`)}finally{t(j,!1)}}async function Ue(){t(V,!0),t(l,""),t(i,"");try{const r=await rt();try{const n=JSON.parse(r);typeof n.serverUrl=="string"&&n.serverUrl&&t(f,n.serverUrl,!0),typeof n.apiKey=="string"&&n.apiKey&&t(s,n.apiKey,!0),await Z();const a=e(i);a!=="error"&&a!=="warning"&&(t(l,"Configuration updated from QR code"),t(i,"success"))}catch{t(l,"Invalid QR code data"),t(i,"error")}}catch(r){const n=H(r);n!=="cancelled"&&(t(l,`Scanner error: ${n}`),t(i,"error"))}finally{t(V,!1)}}function X(){return typeof window>"u"?null:window.ShooterBridge?window.ShooterBridge:window.ShooterNativeBridge?window.ShooterNativeBridge:null}function Y(){return window.location.origin}function ce(){const r=X();if(r&&!z){t(I,!0);try{const n=JSON.parse(r.getConfig?.()??"{}");n.serverUrl&&t(f,n.serverUrl,!0),n.apiKey&&t(s,n.apiKey,!0);const a=r.getFcmToken?.();a&&t(w,a,!0),z=!0}catch{}}t(A,tt(),!0)}Oe(()=>{{const r=window.location.hash.slice(1);if(r){const n=new URLSearchParams(r),a=n.get("key"),p=n.get("url");a&&(t(s,a,!0),p&&t(f,p,!0),Z(),window.history.replaceState({},"",window.location.pathname))}if(!e(s))try{const n=localStorage.getItem("shooter_config");if(n){const a=JSON.parse(n);ze(a)?(a.apiKey&&t(s,a.apiKey,!0),a.deviceToken&&t(w,a.deviceToken,!0),a.serverUrl&&t(f,a.serverUrl,!0)):localStorage.removeItem("shooter_config")}}catch{}if(ce(),e(f)||t(f,Y(),!0),t(M,!0),!e(A)){const n=setInterval(()=>{ce(),e(A)&&clearInterval(n)},200);setTimeout(()=>{clearInterval(n)},3e3)}}});async function Z(){t(S,!0),t(l,""),t(i,"");try{const r=e(f).trim().replace(/\/+$/,"");localStorage.setItem("shooter_config",JSON.stringify({apiKey:e(s).trim(),deviceToken:e(w).trim(),lastUpdated:Date.now(),serverUrl:r||Y()}));const n=X();n&&n.saveConfig?.(JSON.stringify({apiKey:e(s).trim(),serverUrl:r||Y()})),(await fetch("/api/health")).ok?(t(l,"Configuration saved successfully"),t(i,"success")):(t(l,"Configuration saved but system health check failed"),t(i,"warning"))}catch(r){t(l,`Configuration failed: ${H(r)}`),t(i,"error")}t(S,!1)}async function Ie(){if(!e(s).trim()){t(l,"API key is required for testing"),t(i,"error");return}t(S,!0),t(l,""),t(i,"");try{const r={data:{source:"config-test",timestamp:Date.now()},message:`Configuration test at ${new Date().toLocaleTimeString()}`,title:"Configuration Test"};e(w).trim()&&(r.deviceToken=e(w).trim());const n=await fetch("/api/notify",{body:JSON.stringify(r),headers:{Authorization:`Bearer ${e(s)}`,"Content-Type":"application/json"},method:"POST"}),a=await n.json();n.ok?(t(l,"Test notification sent successfully"),t(i,"success")):(t(l,`Test failed: ${typeof a.error=="string"?a.error:"Unknown error"}`),t(i,"error"))}catch(r){t(l,`Network error: ${H(r)}`),t(i,"error")}t(S,!1)}function Te(){{localStorage.removeItem("shooter_config"),t(f,typeof window<"u"?window.location.origin:"",!0),t(s,""),t(w,""),t(l,"Configuration cleared"),t(i,"success");const r=X();r&&r.saveConfig?.(JSON.stringify({apiKey:"",serverUrl:""}))}}var ee=St();Fe("1gp6n77",r=>{var n=at();De(()=>{Le.title="Settings - Shooter"}),d(r,n)});var le=v(ee),de=g(v(le),4),te=v(de),ve=v(te);G(ve,{title:"Server Configuration",description:"Configure server connection and credentials",children:(r,n)=>{var a=ot(),p=J(a);ie(p,{name:"serverUrl",label:"Server URL",dataType:"text",placeholder:"https://shooter.breezehq.dev",infoMessage:"Base URL of your Shooter server. Apps will reload with this URL on next launch.",get value(){return e(f)},set value(C){t(f,C,!0)}});var P=g(p,2);ie(P,{name:"apiKey",label:"API Key",dataType:"password",placeholder:"Enter your API key",infoMessage:"Required for sending notifications",get value(){return e(s)},set value(C){t(s,C,!0)}});var K=g(P,4);{let C=x(()=>e(I)?"Waiting for token...":"64-character hex string"),R=x(()=>e(I)&&e(w)?"Auto-detected from app":"Device token from app registration");ie(K,{name:"deviceToken",label:"Device Token",dataType:"text",get placeholder(){return e(C)},get infoMessage(){return e(R)},classes:"input-mono",get value(){return e(w)},set value(B){t(w,B,!0)}})}we(2),d(r,a)},$$slots:{default:!0}});var ue=g(ve,2);{var Ae=r=>{const n=x(()=>e(i)==="success"?Se:e(i)==="error"?be:Ge);{const a=P=>{se(P,{get svg(){return e(n)},classes:"icon-16"})};let p=x(()=>e(i)||"info");Me(r,{get text(){return e(l)},get classes(){return`banner-${e(p)??""}`},icon:a,$$slots:{icon:!0}})}};Q(ue,r=>{e(l)&&r(Ae)})}var ge=g(ue,2),fe=v(ge);{let r=x(()=>e(S)||!e(s).trim());F(fe,{classes:"btn-secondary",onclick:Ie,get disabled(){return e(r)},children:(n,a)=>{var p=it(),P=J(p);{var K=C=>{se(C,{get svg(){return nt},classes:"icon-14"})};Q(P,C=>{e(S)||C(K)})}we(),d(n,p)},$$slots:{default:!0}})}var Be=g(fe,2);{let r=x(()=>e(S)||!e(s).trim());F(Be,{classes:"btn-primary",onclick:Z,get disabled(){return e(r)},get showLoader(){return e(S)},text:"Save Changes"})}c(ge),c(te);var pe=g(te,2),he=v(pe);G(he,{title:"Setup Guide",children:(r,n)=>{{let a=x(()=>e(s).trim()&&e(w).trim()?2:e(s).trim()?1:0);Xe(r,{steps:[{label:"Get API Key"},{label:"Find Device Token"},{label:"Test Connection"}],get currentStepIndex(){return e(a)},classes:"setup-stepper"})}},$$slots:{default:!0}});var me=g(he,2);{let r=x(()=>e(A)?"Scan a QR code to connect":"Scan to connect your mobile app");G(me,{title:"Mobile App Setup",get description(){return e(r)},children:(n,a)=>{var p=ft(),P=v(p);{var K=R=>{var B=st(),m=g(J(B),2);{let _=x(()=>e(V)?"Scanning...":"Scan QR Code");F(m,{classes:"btn-secondary btn-sm",onclick:Ue,get disabled(){return e(V)},get text(){return e(_)}})}d(R,B)},C=R=>{var B=gt(),m=J(B);{var _=y=>{var b=lt(),O=J(b),ne=v(O);c(O);var Ne=g(O,4);{var Qe=ae=>{var oe=ct(),_e=g(v(oe)),Ke=v(_e,!0);c(_e),c(oe),U(()=>D(Ke,e(L))),d(ae,oe)};Q(Ne,ae=>{e(L)&&ae(Qe)})}U(()=>Ee(ne,"src",e(T))),d(y,b)},N=y=>{var b=dt();d(y,b)},$=y=>{var b=vt(),O=v(b,!0);c(b),U(()=>D(O,e(q))),d(y,b)},E=y=>{var b=ut();d(y,b)};Q(m,y=>{e(T)?y(_):e(j)?y(N,1):e(q)?y($,2):y(E,-1)})}var re=g(m,2);{let y=x(()=>e(j)||!e(s).trim()),b=x(()=>e(T)?"Regenerate QR Code":"Generate QR Code");F(re,{classes:"btn-secondary btn-sm",onclick:Re,get disabled(){return e(y)},get text(){return e(b)}})}d(R,B)};Q(P,R=>{e(A)?R(K):R(C,-1)})}c(p),d(n,p)},$$slots:{default:!0}})}var ye=g(me,2);G(ye,{title:"AI Providers",description:"NeuroLink-powered summaries and AI features",children:(r,n)=>{var a=_t(),p=v(a);xe(p,17,()=>Ve,m=>m.id,(m,_)=>{var N=pt(),$=v(N);{let ne=x(()=>o.data.aiProviders[e(_).id]?Se:be);se($,{get svg(){return e(ne)},classes:"icon-14"})}var E=g($,2),re=v(E,!0);c(E);var y=g(E,2);let b;var O=v(y,!0);c(y),c(N),U(()=>{D(re,e(_).label),b=W(y,1,"provider-status svelte-1gp6n77",null,b,{configured:o.data.aiProviders[e(_).id]}),D(O,o.data.aiProviders[e(_).id]?"configured":"not configured")}),d(m,N)});var P=g(p,2);{var K=m=>{var _=ht(),N=g(v(_)),$=v(N,!0);c(N),c(_),U(()=>D($,o.data.activeProvider)),d(m,_)},C=m=>{var _=mt();d(m,_)},R=x(()=>Object.values(o.data.aiProviders).some(Boolean)),B=m=>{var _=yt();d(m,_)};Q(P,m=>{o.data.activeProvider?m(K):e(R)?m(C,1):m(B,-1)})}c(a),d(r,a)},$$slots:{default:!0}});var qe=g(ye,2);G(qe,{title:"Danger Zone",children:(r,n)=>{var a=wt(),p=g(J(a),2);F(p,{classes:"btn-danger btn-sm",onclick:Te,text:"Clear Configuration"}),d(r,a)},$$slots:{default:!0}}),c(pe),c(de),c(le),c(ee),d(h,ee),Ce()}export{Tt as component};
16
+ scan it to auto-configure the connection.</p>`),gt=u("<!> <!>",1),ft=u('<div class="qr-section svelte-1gp6n77"><!></div>'),pt=u('<div class="provider-row svelte-1gp6n77"><!> <span class="provider-label svelte-1gp6n77"> </span> <span> </span></div>'),ht=u('<div class="active-provider svelte-1gp6n77">Active: <strong> </strong></div>'),mt=u('<div class="active-provider svelte-1gp6n77">Auto-detected from configured keys</div>'),yt=u('<p class="ai-help svelte-1gp6n77">Run <code class="svelte-1gp6n77">shooter setup</code> to configure AI providers for summaries.</p>'),_t=u('<div class="ai-providers svelte-1gp6n77"><!> <!></div>'),wt=u('<p class="danger-description svelte-1gp6n77">Clear all saved configuration data from this device.</p> <!>',1),St=u('<main class="main"><div class="settings-container svelte-1gp6n77"><div style="margin-bottom: var(--space-4);"><a href="/" class="back-link">← Back to Projects</a></div> <div class="page-header"><h1 class="page-title">Settings</h1> <p class="page-description">Configure your API credentials and notification preferences</p></div> <div class="settings-grid svelte-1gp6n77"><section class="settings-section svelte-1gp6n77"><!> <!> <div class="button-group svelte-1gp6n77"><!> <!></div></section> <aside class="settings-sidebar svelte-1gp6n77"><!> <!> <!> <!></aside></div></div></main>');function Tt(h,o){ke(o,!0);let f=k(""),s=k(""),w=k(""),l=k(""),S=k(!1),i=k(""),I=k(!1),T=k(""),L=k(""),j=k(!1),q=k(""),A=k(!1),M=k(!1),z=!1,V=k(!1);async function Re(){if(!e(s).trim()){t(q,"Save an API key first to generate a QR code");return}t(j,!0),t(q,""),t(T,""),t(L,"");try{const r=await fetch("/api/qr-config",{headers:{Authorization:`Bearer ${e(s).trim()}`}});if(!r.ok){const a=await r.json();t(q,a.error||"Failed to generate QR code",!0);return}const n=await r.json();t(T,n.dataUrl,!0),t(L,n.serverUrl,!0)}catch(r){t(q,`Network error: ${H(r)}`)}finally{t(j,!1)}}async function Ue(){t(V,!0),t(l,""),t(i,"");try{const r=await rt();try{const n=JSON.parse(r);typeof n.serverUrl=="string"&&n.serverUrl&&t(f,n.serverUrl,!0),typeof n.apiKey=="string"&&n.apiKey&&t(s,n.apiKey,!0),await Z();const a=e(i);a!=="error"&&a!=="warning"&&(t(l,"Configuration updated from QR code"),t(i,"success"))}catch{t(l,"Invalid QR code data"),t(i,"error")}}catch(r){const n=H(r);n!=="cancelled"&&(t(l,`Scanner error: ${n}`),t(i,"error"))}finally{t(V,!1)}}function X(){return typeof window>"u"?null:window.ShooterBridge?window.ShooterBridge:window.ShooterNativeBridge?window.ShooterNativeBridge:null}function Y(){return window.location.origin}function ce(){const r=X();if(r&&!z){t(I,!0);try{const n=JSON.parse(r.getConfig?.()??"{}");n.serverUrl&&t(f,n.serverUrl,!0),n.apiKey&&t(s,n.apiKey,!0);const a=r.getFcmToken?.();a&&t(w,a,!0),z=!0}catch{}}t(A,tt(),!0)}De(()=>{{const r=window.location.hash.slice(1);if(r){const n=new URLSearchParams(r),a=n.get("key"),p=n.get("url");a&&(t(s,a,!0),p&&t(f,p,!0),Z(),window.history.replaceState({},"",window.location.pathname))}if(!e(s))try{const n=localStorage.getItem("shooter_config");if(n){const a=JSON.parse(n);ze(a)?(a.apiKey&&t(s,a.apiKey,!0),a.deviceToken&&t(w,a.deviceToken,!0),a.serverUrl&&t(f,a.serverUrl,!0)):localStorage.removeItem("shooter_config")}}catch{}if(ce(),e(f)||t(f,Y(),!0),t(M,!0),!e(A)){const n=setInterval(()=>{ce(),e(A)&&clearInterval(n)},200);setTimeout(()=>{clearInterval(n)},3e3)}}});async function Z(){t(S,!0),t(l,""),t(i,"");try{const r=e(f).trim().replace(/\/+$/,"");localStorage.setItem("shooter_config",JSON.stringify({apiKey:e(s).trim(),deviceToken:e(w).trim(),lastUpdated:Date.now(),serverUrl:r||Y()}));const n=X();n&&n.saveConfig?.(JSON.stringify({apiKey:e(s).trim(),serverUrl:r||Y()})),(await fetch("/api/health")).ok?(t(l,"Configuration saved successfully"),t(i,"success")):(t(l,"Configuration saved but system health check failed"),t(i,"warning"))}catch(r){t(l,`Configuration failed: ${H(r)}`),t(i,"error")}t(S,!1)}async function Ie(){if(!e(s).trim()){t(l,"API key is required for testing"),t(i,"error");return}t(S,!0),t(l,""),t(i,"");try{const r={data:{source:"config-test",timestamp:Date.now()},message:`Configuration test at ${new Date().toLocaleTimeString()}`,title:"Configuration Test"};e(w).trim()&&(r.deviceToken=e(w).trim());const n=await fetch("/api/notify",{body:JSON.stringify(r),headers:{Authorization:`Bearer ${e(s)}`,"Content-Type":"application/json"},method:"POST"}),a=await n.json();n.ok?(t(l,"Test notification sent successfully"),t(i,"success")):(t(l,`Test failed: ${typeof a.error=="string"?a.error:"Unknown error"}`),t(i,"error"))}catch(r){t(l,`Network error: ${H(r)}`),t(i,"error")}t(S,!1)}function Te(){{localStorage.removeItem("shooter_config"),t(f,typeof window<"u"?window.location.origin:"",!0),t(s,""),t(w,""),t(l,"Configuration cleared"),t(i,"success");const r=X();r&&r.saveConfig?.(JSON.stringify({apiKey:"",serverUrl:""}))}}var ee=St();Fe("1gp6n77",r=>{var n=at();Oe(()=>{Le.title="Settings - Shooter"}),d(r,n)});var le=v(ee),de=g(v(le),4),te=v(de),ve=v(te);G(ve,{title:"Server Configuration",description:"Configure server connection and credentials",children:(r,n)=>{var a=ot(),p=J(a);ie(p,{name:"serverUrl",label:"Server URL",dataType:"text",placeholder:"https://shooter.breezehq.dev",infoMessage:"Base URL of your Shooter server. Apps will reload with this URL on next launch.",get value(){return e(f)},set value(C){t(f,C,!0)}});var P=g(p,2);ie(P,{name:"apiKey",label:"API Key",dataType:"password",placeholder:"Enter your API key",infoMessage:"Required for sending notifications",get value(){return e(s)},set value(C){t(s,C,!0)}});var N=g(P,4);{let C=x(()=>e(I)?"Waiting for token...":"64-character hex string"),R=x(()=>e(I)&&e(w)?"Auto-detected from app":"Device token from app registration");ie(N,{name:"deviceToken",label:"Device Token",dataType:"text",get placeholder(){return e(C)},get infoMessage(){return e(R)},classes:"input-mono",get value(){return e(w)},set value(B){t(w,B,!0)}})}we(2),d(r,a)},$$slots:{default:!0}});var ue=g(ve,2);{var Ae=r=>{const n=x(()=>e(i)==="success"?Se:e(i)==="error"?be:Ge);{const a=P=>{se(P,{get svg(){return e(n)},classes:"icon-16"})};let p=x(()=>e(i)||"info");Me(r,{get text(){return e(l)},get classes(){return`banner-${e(p)??""}`},icon:a,$$slots:{icon:!0}})}};K(ue,r=>{e(l)&&r(Ae)})}var ge=g(ue,2),fe=v(ge);{let r=x(()=>e(S)||!e(s).trim());F(fe,{classes:"btn-secondary",onclick:Ie,get disabled(){return e(r)},children:(n,a)=>{var p=it(),P=J(p);{var N=C=>{se(C,{get svg(){return nt},classes:"icon-14"})};K(P,C=>{e(S)||C(N)})}we(),d(n,p)},$$slots:{default:!0}})}var Be=g(fe,2);{let r=x(()=>e(S)||!e(s).trim());F(Be,{classes:"btn-primary",onclick:Z,get disabled(){return e(r)},get showLoader(){return e(S)},text:"Save Changes"})}c(ge),c(te);var pe=g(te,2),he=v(pe);G(he,{title:"Setup Guide",children:(r,n)=>{{let a=x(()=>e(s).trim()&&e(w).trim()?2:e(s).trim()?1:0);Xe(r,{steps:[{label:"Get API Key"},{label:"Find Device Token"},{label:"Test Connection"}],get currentStepIndex(){return e(a)},classes:"setup-stepper"})}},$$slots:{default:!0}});var me=g(he,2);{let r=x(()=>e(A)?"Scan a QR code to connect":"Scan to connect your mobile app");G(me,{title:"Mobile App Setup",get description(){return e(r)},children:(n,a)=>{var p=ft(),P=v(p);{var N=R=>{var B=st(),m=g(J(B),2);{let _=x(()=>e(V)?"Scanning...":"Scan QR Code");F(m,{classes:"btn-secondary btn-sm",onclick:Ue,get disabled(){return e(V)},get text(){return e(_)}})}d(R,B)},C=R=>{var B=gt(),m=J(B);{var _=y=>{var b=lt(),D=J(b),ne=v(D);c(D);var Qe=g(D,4);{var Ke=ae=>{var oe=ct(),_e=g(v(oe)),Ne=v(_e,!0);c(_e),c(oe),U(()=>O(Ne,e(L))),d(ae,oe)};K(Qe,ae=>{e(L)&&ae(Ke)})}U(()=>Ee(ne,"src",e(T))),d(y,b)},Q=y=>{var b=dt();d(y,b)},$=y=>{var b=vt(),D=v(b,!0);c(b),U(()=>O(D,e(q))),d(y,b)},E=y=>{var b=ut();d(y,b)};K(m,y=>{e(T)?y(_):e(j)?y(Q,1):e(q)?y($,2):y(E,-1)})}var re=g(m,2);{let y=x(()=>e(j)||!e(s).trim()),b=x(()=>e(T)?"Regenerate QR Code":"Generate QR Code");F(re,{classes:"btn-secondary btn-sm",onclick:Re,get disabled(){return e(y)},get text(){return e(b)}})}d(R,B)};K(P,R=>{e(A)?R(N):R(C,-1)})}c(p),d(n,p)},$$slots:{default:!0}})}var ye=g(me,2);G(ye,{title:"AI Providers",description:"NeuroLink-powered summaries and AI features",children:(r,n)=>{var a=_t(),p=v(a);xe(p,17,()=>Ve,m=>m.id,(m,_)=>{var Q=pt(),$=v(Q);{let ne=x(()=>o.data.aiProviders[e(_).id]?Se:be);se($,{get svg(){return e(ne)},classes:"icon-14"})}var E=g($,2),re=v(E,!0);c(E);var y=g(E,2);let b;var D=v(y,!0);c(y),c(Q),U(()=>{O(re,e(_).label),b=W(y,1,"provider-status svelte-1gp6n77",null,b,{configured:o.data.aiProviders[e(_).id]}),O(D,o.data.aiProviders[e(_).id]?"configured":"not configured")}),d(m,Q)});var P=g(p,2);{var N=m=>{var _=ht(),Q=g(v(_)),$=v(Q,!0);c(Q),c(_),U(()=>O($,o.data.activeProvider)),d(m,_)},C=m=>{var _=mt();d(m,_)},R=x(()=>Object.values(o.data.aiProviders).some(Boolean)),B=m=>{var _=yt();d(m,_)};K(P,m=>{o.data.activeProvider?m(N):e(R)?m(C,1):m(B,-1)})}c(a),d(r,a)},$$slots:{default:!0}});var qe=g(ye,2);G(qe,{title:"Danger Zone",children:(r,n)=>{var a=wt(),p=g(J(a),2);F(p,{classes:"btn-danger btn-sm",onclick:Te,text:"Clear Configuration"}),d(r,a)},$$slots:{default:!0}}),c(pe),c(de),c(le),c(ee),d(h,ee),Ce()}export{Tt as component};
@@ -1 +1 @@
1
- import{d as q,i as T,b as H,a as k,f as N,s as V}from"../chunks/Cg3dlX05.js";import{p as z,s as n,q as J,v as Q,w as W,g as t,b as r,x as _,d as g,c as b,r as c,t as X}from"../chunks/DYuMZGL5.js";import{e as K,I as Z,B as ee,s as te,i as ae,P as I}from"../chunks/DZvnhU_8.js";import{i as se,N as S}from"../chunks/CRkG7oE4.js";import{P as O}from"../chunks/pRcLbE0d.js";var re=N('<div class="provider-bar svelte-sjabew"></div>'),ie=N("<div> </div>"),oe=N('<div class="page svelte-sjabew"><header class="svelte-sjabew"><h1 class="svelte-sjabew">NeuroLink</h1> <span class="version svelte-sjabew">new NeuroLink()</span> <!></header> <!> <div class="log svelte-sjabew" id="log"></div> <div class="input-bar svelte-sjabew"><!> <!></div></div>');function pe(M,p){z(p,!0);let u=n(null),m=n(null),h=n(J([])),d=n(""),v=n(!1),f=n(!1),o=n("litellm");function i(e,a="info"){r(h,[...t(h),{text:e,type:a}],!0)}function R(){const e=globalThis.process;if(!e?.env)return;const a=e.env;p.data.litellmBaseUrl&&(a.LITELLM_BASE_URL=p.data.litellmBaseUrl),p.data.litellmModel&&(a.LITELLM_MODEL=p.data.litellmModel);const s=window.__aiProviders;s?.["google-ai"]&&(a.GOOGLE_AI_API_KEY="proxy-via-server"),s?.anthropic&&(a.ANTHROPIC_API_KEY="proxy-via-server"),s?.openai&&(a.OPENAI_API_KEY="proxy-via-server"),s?.mistral&&(a.MISTRAL_API_KEY="proxy-via-server")}Q(async()=>{$(),se(),R(),i("Loading NeuroLink from CDN..."),i(S,"dim");try{r(u,await import(S),!0),i(`Loaded! ${Object.keys(t(u)??{}).length} exports`,"pass"),r(m,new(t(u)).NeuroLink({provider:t(o)}),!0),i(`NeuroLink ready · provider: ${t(o)}`,"pass"),r(f,!0)}catch(e){i(`Failed to load: ${e instanceof Error?e.message:String(e)}`,"fail")}});function D(e){!t(u)||e===t(o)||(r(o,e,!0),r(m,new(t(u)).NeuroLink({provider:e}),!0),i(`Switched to provider: ${e}`,"dim"))}function $(){typeof globalThis.process>"u"&&(globalThis.process={cwd:()=>"/",env:{},platform:"browser",version:"v24.0.0"}),typeof globalThis.global>"u"&&(globalThis.global=globalThis)}async function P(){if(!t(d).trim()||!t(m)||t(v))return;const e=t(d).trim();r(d,""),r(v,!0),i(`> ${e}`,"user");const a=O.find(s=>s.id===t(o));if(!a){r(v,!1);return}try{const s=await t(m).generate({input:{text:e},model:a.model,provider:a.id}),l=typeof s.content=="string"?s.content:"(empty response)",E=s.usage;i(l,"ai"),i(`${a.id}/${a.model} | ${E?.total??"?"} tokens`,"dim")}catch(s){i(`Error: ${s instanceof Error?s.message:String(s)}`,"fail")}r(v,!1)}function B(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),P())}var y=oe(),w=b(y),U=g(b(w),4);{var C=e=>{I(e,{text:"Connected",classes:"pill-connected"})},Y=e=>{I(e,{text:"Loading...",classes:"pill-loading"})};T(U,e=>{t(f)?e(C):e(Y,-1)})}c(w);var j=g(w,2);{var F=e=>{var a=re();K(a,21,()=>O,s=>s.id,(s,l)=>{{let E=_(()=>t(o)===t(l).id?"prov-pill--active":"");I(s,{get text(){return t(l).label},get classes(){return`prov-pill ${t(E)??""}`},onclick:()=>{D(t(l).id)}})}}),c(a),k(e,a)};T(j,e=>{t(f)&&e(F)})}var L=g(j,2);K(L,21,()=>t(h),ae,(e,a)=>{var s=ie(),l=b(s,!0);c(s),X(()=>{te(s,1,`log-entry ${t(a).type??""}`,"svelte-sjabew"),V(l,t(a).text)}),k(e,s)}),c(L);var x=g(L,2),A=b(x);{let e=_(()=>t(f)?`Ask anything... [${t(o)}]`:"Loading SDK...");Z(A,{name:"prompt",get placeholder(){return t(e)},classes:"input-prompt",get value(){return t(d)},set value(a){r(d,a,!0)}})}var G=g(A,2);{let e=_(()=>!t(f)||t(v)||!t(d).trim()),a=_(()=>t(v)?"...":"Send");ee(G,{classes:"btn-primary",onclick:P,get disabled(){return t(e)},get text(){return t(a)}})}c(x),c(y),H("keydown",x,B),k(M,y),W()}q(["keydown"]);export{pe as component};
1
+ import{d as q,i as T,b as H,a as k,f as N,s as V}from"../chunks/BPDiEZo0.js";import{p as z,s as n,q as J,v as Q,w as W,g as t,b as r,x as _,d as g,c as b,r as c,t as X}from"../chunks/DWmC0QM7.js";import{e as K,I as Z,B as ee,s as te,i as ae,P as I}from"../chunks/ZS5XYDx_.js";import{i as se,N as S}from"../chunks/CRkG7oE4.js";import{P as O}from"../chunks/pRcLbE0d.js";var re=N('<div class="provider-bar svelte-sjabew"></div>'),ie=N("<div> </div>"),oe=N('<div class="page svelte-sjabew"><header class="svelte-sjabew"><h1 class="svelte-sjabew">NeuroLink</h1> <span class="version svelte-sjabew">new NeuroLink()</span> <!></header> <!> <div class="log svelte-sjabew" id="log"></div> <div class="input-bar svelte-sjabew"><!> <!></div></div>');function pe(M,p){z(p,!0);let u=n(null),m=n(null),h=n(J([])),d=n(""),v=n(!1),f=n(!1),o=n("litellm");function i(e,a="info"){r(h,[...t(h),{text:e,type:a}],!0)}function R(){const e=globalThis.process;if(!e?.env)return;const a=e.env;p.data.litellmBaseUrl&&(a.LITELLM_BASE_URL=p.data.litellmBaseUrl),p.data.litellmModel&&(a.LITELLM_MODEL=p.data.litellmModel);const s=window.__aiProviders;s?.["google-ai"]&&(a.GOOGLE_AI_API_KEY="proxy-via-server"),s?.anthropic&&(a.ANTHROPIC_API_KEY="proxy-via-server"),s?.openai&&(a.OPENAI_API_KEY="proxy-via-server"),s?.mistral&&(a.MISTRAL_API_KEY="proxy-via-server")}Q(async()=>{$(),se(),R(),i("Loading NeuroLink from CDN..."),i(S,"dim");try{r(u,await import(S),!0),i(`Loaded! ${Object.keys(t(u)??{}).length} exports`,"pass"),r(m,new(t(u)).NeuroLink({provider:t(o)}),!0),i(`NeuroLink ready · provider: ${t(o)}`,"pass"),r(f,!0)}catch(e){i(`Failed to load: ${e instanceof Error?e.message:String(e)}`,"fail")}});function D(e){!t(u)||e===t(o)||(r(o,e,!0),r(m,new(t(u)).NeuroLink({provider:e}),!0),i(`Switched to provider: ${e}`,"dim"))}function $(){typeof globalThis.process>"u"&&(globalThis.process={cwd:()=>"/",env:{},platform:"browser",version:"v24.0.0"}),typeof globalThis.global>"u"&&(globalThis.global=globalThis)}async function P(){if(!t(d).trim()||!t(m)||t(v))return;const e=t(d).trim();r(d,""),r(v,!0),i(`> ${e}`,"user");const a=O.find(s=>s.id===t(o));if(!a){r(v,!1);return}try{const s=await t(m).generate({input:{text:e},model:a.model,provider:a.id}),l=typeof s.content=="string"?s.content:"(empty response)",E=s.usage;i(l,"ai"),i(`${a.id}/${a.model} | ${E?.total??"?"} tokens`,"dim")}catch(s){i(`Error: ${s instanceof Error?s.message:String(s)}`,"fail")}r(v,!1)}function B(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),P())}var y=oe(),w=b(y),U=g(b(w),4);{var C=e=>{I(e,{text:"Connected",classes:"pill-connected"})},Y=e=>{I(e,{text:"Loading...",classes:"pill-loading"})};T(U,e=>{t(f)?e(C):e(Y,-1)})}c(w);var j=g(w,2);{var F=e=>{var a=re();K(a,21,()=>O,s=>s.id,(s,l)=>{{let E=_(()=>t(o)===t(l).id?"prov-pill--active":"");I(s,{get text(){return t(l).label},get classes(){return`prov-pill ${t(E)??""}`},onclick:()=>{D(t(l).id)}})}}),c(a),k(e,a)};T(j,e=>{t(f)&&e(F)})}var L=g(j,2);K(L,21,()=>t(h),ae,(e,a)=>{var s=ie(),l=b(s,!0);c(s),X(()=>{te(s,1,`log-entry ${t(a).type??""}`,"svelte-sjabew"),V(l,t(a).text)}),k(e,s)}),c(L);var x=g(L,2),A=b(x);{let e=_(()=>t(f)?`Ask anything... [${t(o)}]`:"Loading SDK...");Z(A,{name:"prompt",get placeholder(){return t(e)},classes:"input-prompt",get value(){return t(d)},set value(a){r(d,a,!0)}})}var G=g(A,2);{let e=_(()=>!t(f)||t(v)||!t(d).trim()),a=_(()=>t(v)?"...":"Send");ee(G,{classes:"btn-primary",onclick:P,get disabled(){return t(e)},get text(){return t(a)}})}c(x),c(y),H("keydown",x,B),k(M,y),W()}q(["keydown"]);export{pe as component};