@juspay/shooter 1.0.0 → 1.1.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 (433) hide show
  1. package/.claude/hooks/notifier.cjs +117 -33
  2. package/.claude/settings.json +14 -14
  3. package/README.md +116 -84
  4. package/bin/shooter.cjs +471 -102
  5. package/build/client/_app/immutable/assets/{0.CM9Hl6d-.css → 0.DC5pAwP3.css} +1 -1
  6. package/build/client/_app/immutable/assets/0.DC5pAwP3.css.br +0 -0
  7. package/build/client/_app/immutable/assets/{0.CM9Hl6d-.css.gz → 0.DC5pAwP3.css.gz} +0 -0
  8. package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
  9. package/build/client/_app/immutable/assets/3.BoXp0JoS.css +1 -0
  10. package/build/client/_app/immutable/assets/3.BoXp0JoS.css.br +0 -0
  11. package/build/client/_app/immutable/assets/3.BoXp0JoS.css.gz +0 -0
  12. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/6.eZGZN-BF.css +1 -0
  15. package/build/client/_app/immutable/assets/6.eZGZN-BF.css.br +0 -0
  16. package/build/client/_app/immutable/assets/6.eZGZN-BF.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/{7.BCJ1IuMx.css → 7.PyEFVv_s.css} +1 -1
  18. package/build/client/_app/immutable/assets/7.PyEFVv_s.css.br +0 -0
  19. package/build/client/_app/immutable/assets/7.PyEFVv_s.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
  21. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css +1 -0
  22. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.br +0 -0
  23. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.gz +0 -0
  24. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css +1 -0
  25. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.br +0 -0
  26. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.gz +0 -0
  27. package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
  28. package/build/client/_app/immutable/chunks/{Cjwk_cGO.js → 50RPd5u3.js} +1 -1
  29. package/build/client/_app/immutable/chunks/50RPd5u3.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/50RPd5u3.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/BDC7XD4o.js +1 -0
  32. package/build/client/_app/immutable/chunks/BDC7XD4o.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/BDC7XD4o.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/BeONA6_G.js +2 -0
  36. package/build/client/_app/immutable/chunks/BeONA6_G.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/BeONA6_G.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/BygiiMA0.js +1 -0
  40. package/build/client/_app/immutable/chunks/BygiiMA0.js.br +0 -0
  41. package/build/client/_app/immutable/chunks/BygiiMA0.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/CHvUpVYv.js +1 -0
  44. package/build/client/_app/immutable/chunks/CHvUpVYv.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/CHvUpVYv.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/CbqC9BW7.js +1 -0
  47. package/build/client/_app/immutable/chunks/CbqC9BW7.js.br +2 -0
  48. package/build/client/_app/immutable/chunks/CbqC9BW7.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/CdL99jkG.js +1 -0
  50. package/build/client/_app/immutable/chunks/CdL99jkG.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/CdL99jkG.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/ClK4wZbC.js +61 -0
  53. package/build/client/_app/immutable/chunks/ClK4wZbC.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/ClK4wZbC.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/CojFyTPp.js +1 -0
  56. package/build/client/_app/immutable/chunks/CojFyTPp.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/CojFyTPp.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/DREFAyhX.js +60 -0
  60. package/build/client/_app/immutable/chunks/DREFAyhX.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/DREFAyhX.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/DSU1n5N_.js +1 -0
  63. package/build/client/_app/immutable/chunks/DSU1n5N_.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/DSU1n5N_.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/K_aHH2KN.js +1 -0
  66. package/build/client/_app/immutable/chunks/K_aHH2KN.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/K_aHH2KN.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/Ona8oofC.js +1 -0
  69. package/build/client/_app/immutable/chunks/Ona8oofC.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/Ona8oofC.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
  72. package/build/client/_app/immutable/chunks/tjbnEgXP.js +1 -0
  73. package/build/client/_app/immutable/chunks/tjbnEgXP.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/tjbnEgXP.js.gz +0 -0
  75. package/build/client/_app/immutable/entry/app.anqwe7ZL.js +2 -0
  76. package/build/client/_app/immutable/entry/app.anqwe7ZL.js.br +0 -0
  77. package/build/client/_app/immutable/entry/app.anqwe7ZL.js.gz +0 -0
  78. package/build/client/_app/immutable/entry/start.BV2VRv6h.js +1 -0
  79. package/build/client/_app/immutable/entry/start.BV2VRv6h.js.br +2 -0
  80. package/build/client/_app/immutable/entry/start.BV2VRv6h.js.gz +0 -0
  81. package/build/client/_app/immutable/nodes/0.D0i5MqcI.js +1 -0
  82. package/build/client/_app/immutable/nodes/0.D0i5MqcI.js.br +0 -0
  83. package/build/client/_app/immutable/nodes/0.D0i5MqcI.js.gz +0 -0
  84. package/build/client/_app/immutable/nodes/1.DN5n5c6F.js +1 -0
  85. package/build/client/_app/immutable/nodes/1.DN5n5c6F.js.br +0 -0
  86. package/build/client/_app/immutable/nodes/1.DN5n5c6F.js.gz +0 -0
  87. package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js +1 -0
  88. package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js.br +0 -0
  89. package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js.gz +0 -0
  90. package/build/client/_app/immutable/nodes/3.CEkigHDv.js +3 -0
  91. package/build/client/_app/immutable/nodes/3.CEkigHDv.js.br +0 -0
  92. package/build/client/_app/immutable/nodes/3.CEkigHDv.js.gz +0 -0
  93. package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js +1 -0
  94. package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js.br +0 -0
  95. package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js.gz +0 -0
  96. package/build/client/_app/immutable/nodes/5.shitbtHc.js +1 -0
  97. package/build/client/_app/immutable/nodes/5.shitbtHc.js.br +0 -0
  98. package/build/client/_app/immutable/nodes/5.shitbtHc.js.gz +0 -0
  99. package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js +2 -0
  100. package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js.br +0 -0
  101. package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js.gz +0 -0
  102. package/build/client/_app/immutable/nodes/7.D0CrR6pl.js +2 -0
  103. package/build/client/_app/immutable/nodes/7.D0CrR6pl.js.br +0 -0
  104. package/build/client/_app/immutable/nodes/7.D0CrR6pl.js.gz +0 -0
  105. package/build/client/_app/version.json +1 -1
  106. package/build/client/_app/version.json.br +0 -0
  107. package/build/client/_app/version.json.gz +0 -0
  108. package/build/client/favicon.svg.gz +0 -0
  109. package/build/pty-holder.cjs +37 -8
  110. package/build/server/chunks/0-Cs1dzfRz.js +9 -0
  111. package/build/server/chunks/{0-q2IUp76Y.js.map → 0-Cs1dzfRz.js.map} +1 -1
  112. package/build/server/chunks/1-BCSX7oED.js +9 -0
  113. package/build/server/chunks/{1-CU50G5wZ.js.map → 1-BCSX7oED.js.map} +1 -1
  114. package/build/server/chunks/2-6gkeO8b4.js +9 -0
  115. package/build/server/chunks/2-6gkeO8b4.js.map +1 -0
  116. package/build/server/chunks/3-DH9J9Vsc.js +9 -0
  117. package/build/server/chunks/3-DH9J9Vsc.js.map +1 -0
  118. package/build/server/chunks/4-Rzy5TYjl.js +9 -0
  119. package/build/server/chunks/4-Rzy5TYjl.js.map +1 -0
  120. package/build/server/chunks/5-D0wB7nfE.js +9 -0
  121. package/build/server/chunks/5-D0wB7nfE.js.map +1 -0
  122. package/build/server/chunks/6-DR2ABDPq.js +9 -0
  123. package/build/server/chunks/6-DR2ABDPq.js.map +1 -0
  124. package/build/server/chunks/7-D-oQJsia.js +9 -0
  125. package/build/server/chunks/7-D-oQJsia.js.map +1 -0
  126. package/build/server/chunks/Button-C7D5W6wV.js +80 -0
  127. package/build/server/chunks/Button-C7D5W6wV.js.map +1 -0
  128. package/build/server/chunks/EmptyState-Ci4pSpmY.js +20 -0
  129. package/build/server/chunks/EmptyState-Ci4pSpmY.js.map +1 -0
  130. package/build/server/chunks/Icon-DyrkHVnV.js +36 -0
  131. package/build/server/chunks/Icon-DyrkHVnV.js.map +1 -0
  132. package/build/server/chunks/Shimmer-BITK6wrm.js +10 -0
  133. package/build/server/chunks/Shimmer-BITK6wrm.js.map +1 -0
  134. package/build/server/chunks/_layout.svelte-CO4f8UD7.js +76 -0
  135. package/build/server/chunks/_layout.svelte-CO4f8UD7.js.map +1 -0
  136. package/build/server/chunks/_page.svelte-3Cc3NMAP.js +81 -0
  137. package/build/server/chunks/_page.svelte-3Cc3NMAP.js.map +1 -0
  138. package/build/server/chunks/_page.svelte-C0p3HsIW.js +46 -0
  139. package/build/server/chunks/_page.svelte-C0p3HsIW.js.map +1 -0
  140. package/build/server/chunks/_page.svelte-C6bns9aQ.js +41 -0
  141. package/build/server/chunks/_page.svelte-C6bns9aQ.js.map +1 -0
  142. package/build/server/chunks/_page.svelte-CFCONiDK.js +97 -0
  143. package/build/server/chunks/_page.svelte-CFCONiDK.js.map +1 -0
  144. package/build/server/chunks/_page.svelte-DskND_G9.js +550 -0
  145. package/build/server/chunks/_page.svelte-DskND_G9.js.map +1 -0
  146. package/build/server/chunks/_page.svelte-rTrWmhOp.js +651 -0
  147. package/build/server/chunks/_page.svelte-rTrWmhOp.js.map +1 -0
  148. package/build/server/chunks/{_server.ts-CbDRDIoP.js → _server.ts-BStnNIcq.js} +9 -11
  149. package/build/server/chunks/_server.ts-BStnNIcq.js.map +1 -0
  150. package/build/server/chunks/{_server.ts-C29xzfaw.js → _server.ts-C8slOHB0.js} +9 -10
  151. package/build/server/chunks/_server.ts-C8slOHB0.js.map +1 -0
  152. package/build/server/chunks/{_server.ts-CPa6DgIt.js → _server.ts-COu0vNpd.js} +6 -6
  153. package/build/server/chunks/_server.ts-COu0vNpd.js.map +1 -0
  154. package/build/server/chunks/{_server.ts-DRVbgm6k.js → _server.ts-CS5H5klP.js} +10 -17
  155. package/build/server/chunks/_server.ts-CS5H5klP.js.map +1 -0
  156. package/build/server/chunks/{_server.ts-D4MNi4cD.js → _server.ts-Cf84YIaW.js} +3 -3
  157. package/build/server/chunks/{_server.ts-D4MNi4cD.js.map → _server.ts-Cf84YIaW.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-BL2FGb5Z.js → _server.ts-Ch-6iOHp.js} +99 -53
  159. package/build/server/chunks/_server.ts-Ch-6iOHp.js.map +1 -0
  160. package/build/server/chunks/{_server.ts-DfajWaqh.js → _server.ts-DV8zTCF9.js} +7 -9
  161. package/build/server/chunks/_server.ts-DV8zTCF9.js.map +1 -0
  162. package/build/server/chunks/{_server.ts-ColfDHW8.js → _server.ts-DYvb9ijZ.js} +21 -10
  163. package/build/server/chunks/_server.ts-DYvb9ijZ.js.map +1 -0
  164. package/build/server/chunks/_server.ts-DhTrdlWH.js +62 -0
  165. package/build/server/chunks/_server.ts-DhTrdlWH.js.map +1 -0
  166. package/build/server/chunks/{_server.ts-Cv_OrRuL.js → _server.ts-DpEVfp8W.js} +165 -8
  167. package/build/server/chunks/_server.ts-DpEVfp8W.js.map +1 -0
  168. package/build/server/chunks/{_server.ts-y9-WYDMa.js → _server.ts-WhTJBEJy.js} +5 -4
  169. package/build/server/chunks/{_server.ts-y9-WYDMa.js.map → _server.ts-WhTJBEJy.js.map} +1 -1
  170. package/build/server/chunks/{_server.ts-BjOJsoy4.js → _server.ts-XzT2UHM1.js} +6 -5
  171. package/build/server/chunks/_server.ts-XzT2UHM1.js.map +1 -0
  172. package/build/server/chunks/{_server.ts-BgdjBZco.js → _server.ts-tSpgyl1D.js} +7 -5
  173. package/build/server/chunks/_server.ts-tSpgyl1D.js.map +1 -0
  174. package/build/server/chunks/{_server.ts-BihKSdj_.js → _server.ts-uHUi-4cd.js} +7 -8
  175. package/build/server/chunks/_server.ts-uHUi-4cd.js.map +1 -0
  176. package/build/server/chunks/{auth-CEgFis71.js → auth-DeCdZ83n.js} +2 -2
  177. package/build/server/chunks/{auth-CEgFis71.js.map → auth-DeCdZ83n.js.map} +1 -1
  178. package/build/server/chunks/client-BYT9c0ig.js +7 -0
  179. package/build/server/chunks/client-BYT9c0ig.js.map +1 -0
  180. package/build/server/chunks/client2-BjxIYuno.js +25 -0
  181. package/build/server/chunks/client2-BjxIYuno.js.map +1 -0
  182. package/build/server/chunks/error-DDXB3duW.js +12 -0
  183. package/build/server/chunks/error-DDXB3duW.js.map +1 -0
  184. package/build/server/chunks/error.svelte-BG_yE-Wt.js +27 -0
  185. package/build/server/chunks/error.svelte-BG_yE-Wt.js.map +1 -0
  186. package/build/server/chunks/{exports-CJ0Q5XmL.js → index-Cnl871UW.js} +1111 -1634
  187. package/build/server/chunks/index-Cnl871UW.js.map +1 -0
  188. package/build/server/chunks/index-server-CUC9Jt7r.js +9 -0
  189. package/build/server/chunks/index-server-CUC9Jt7r.js.map +1 -0
  190. package/build/server/chunks/index2-HA3VTH7y.js +58 -0
  191. package/build/server/chunks/index2-HA3VTH7y.js.map +1 -0
  192. package/build/server/chunks/{library-apns-BHxLmuIx.js → library-apns-BqJbvSKh.js} +4 -4
  193. package/build/server/chunks/library-apns-BqJbvSKh.js.map +1 -0
  194. package/build/server/chunks/markdown-W_mTBct0.js +8 -0
  195. package/build/server/chunks/markdown-W_mTBct0.js.map +1 -0
  196. package/build/server/chunks/{pty-manager-C0FhBiVq.js → pty-manager-DR0Wt2Ac.js} +146 -319
  197. package/build/server/chunks/pty-manager-DR0Wt2Ac.js.map +1 -0
  198. package/build/server/chunks/root-DhswcH6o.js +1171 -0
  199. package/build/server/chunks/root-DhswcH6o.js.map +1 -0
  200. package/build/server/chunks/{shared-server-BDY8jh20.js → shared-server-sSGG17Df.js} +2 -3
  201. package/build/server/chunks/{shared-server-BDY8jh20.js.map → shared-server-sSGG17Df.js.map} +1 -1
  202. package/build/server/chunks/state.svelte-2Lellg7t.js +11 -0
  203. package/build/server/chunks/state.svelte-2Lellg7t.js.map +1 -0
  204. package/build/server/index.js +1085 -2242
  205. package/build/server/index.js.map +1 -1
  206. package/build/server/manifest.js +23 -23
  207. package/build/server/manifest.js.map +1 -1
  208. package/package.json +32 -9
  209. package/scripts/fix-generated-types.sh +37 -0
  210. package/scripts/homebrew/shooter.rb +51 -0
  211. package/scripts/install.sh +348 -186
  212. package/scripts/setup.cjs +139 -43
  213. package/server.ts +111 -71
  214. package/src/app.css +12 -3
  215. package/src/app.d.ts +13 -20
  216. package/src/app.html +0 -2
  217. package/src/generated/types/API.ts +280 -0
  218. package/src/generated/types/APN.ts +186 -203
  219. package/src/generated/types/CLI.ts +18 -25
  220. package/src/generated/types/Client.ts +589 -0
  221. package/src/generated/types/Config.ts +53 -0
  222. package/src/generated/types/Holder.ts +638 -0
  223. package/src/generated/types/JWT.ts +39 -50
  224. package/src/generated/types/Notification.ts +426 -0
  225. package/src/generated/types/OpenCode.ts +356 -0
  226. package/src/generated/types/Sessions.ts +570 -0
  227. package/src/generated/types/Terminal.ts +2184 -2071
  228. package/src/generated/types/WsProtocol.ts +2004 -0
  229. package/src/generated/types/index.ts +9 -3
  230. package/src/lib/env.ts +29 -0
  231. package/src/lib/modules/client/common/config-guard.ts +37 -5
  232. package/src/lib/modules/client/common/error.ts +10 -0
  233. package/src/lib/modules/client/common/index.ts +6 -5
  234. package/src/lib/modules/client/common/native-bridge.ts +28 -20
  235. package/src/lib/modules/client/terminal/ChatView.svelte +46 -23
  236. package/src/lib/modules/client/terminal/CommandPalette.svelte +3 -2
  237. package/src/lib/modules/client/terminal/ConnectionStatus.svelte +6 -1
  238. package/src/lib/modules/client/terminal/LaunchSheet.svelte +147 -84
  239. package/src/lib/modules/client/terminal/QuickKeys.svelte +3 -1
  240. package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +2 -5
  241. package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +27 -24
  242. package/src/lib/modules/client/terminal/xterm-wrapper.ts +70 -44
  243. package/src/lib/modules/server/apn/library-apns.ts +3 -2
  244. package/src/lib/modules/server/apn/notification-history.ts +2 -13
  245. package/src/lib/modules/server/apn/notification-sessions.ts +3 -13
  246. package/src/lib/modules/server/apn/pending-requests.ts +3 -8
  247. package/src/lib/modules/server/apn/types.ts +5 -4
  248. package/src/lib/modules/server/cli/index.ts +3 -2
  249. package/src/lib/modules/server/fcm/fcm-service.ts +8 -6
  250. package/src/lib/modules/server/sessions/jsonl-parser.ts +3 -3
  251. package/src/lib/modules/server/sessions/jsonl-reader.ts +60 -15
  252. package/src/lib/modules/server/sessions/types.ts +11 -22
  253. package/src/lib/modules/server/terminal/holder-client.ts +272 -248
  254. package/src/lib/modules/server/terminal/opencode-watcher.ts +555 -553
  255. package/src/lib/modules/server/terminal/pty-holder.cjs +37 -8
  256. package/src/lib/modules/server/terminal/pty-manager.ts +141 -111
  257. package/src/lib/modules/server/terminal/session-watcher.ts +6 -4
  258. package/src/lib/modules/server/terminal/terminal-store.ts +131 -128
  259. package/src/lib/modules/server/utils/error.ts +9 -0
  260. package/src/lib/modules/server/ws/events-handler.ts +12 -6
  261. package/src/lib/modules/server/ws/keepalive.ts +86 -69
  262. package/src/lib/modules/server/ws/server.ts +43 -37
  263. package/src/lib/modules/server/ws/session-handler.ts +52 -45
  264. package/src/lib/modules/server/ws/terminal-handler.ts +29 -17
  265. package/src/lib/modules/server/ws/ticket-store.ts +29 -26
  266. package/src/lib/types/config.ts +1 -6
  267. package/src/routes/+layout.svelte +66 -31
  268. package/src/routes/+page.svelte +8 -15
  269. package/src/routes/api/debug/+server.ts +3 -1
  270. package/src/routes/api/device-token/+server.ts +60 -60
  271. package/src/routes/api/health/+server.ts +69 -73
  272. package/src/routes/api/notify/+server.ts +115 -68
  273. package/src/routes/api/qr-config/+server.ts +30 -32
  274. package/src/routes/api/response/+server.ts +9 -4
  275. package/src/routes/api/sessions/+server.ts +3 -1
  276. package/src/routes/api/terminals/+server.ts +14 -15
  277. package/src/routes/api/terminals/[id]/+server.ts +13 -7
  278. package/src/routes/api/terminals/[id]/paste-image/+server.ts +54 -52
  279. package/src/routes/api/terminals/[id]/resize/+server.ts +6 -3
  280. package/src/routes/api/webhook/+server.ts +8 -10
  281. package/src/routes/api/ws-status/+server.ts +7 -5
  282. package/src/routes/api/ws-ticket/+server.ts +42 -41
  283. package/src/routes/config/+page.svelte +129 -76
  284. package/src/routes/project/+page.svelte +7 -28
  285. package/src/routes/session/[id]/+page.svelte +70 -52
  286. package/src/routes/terminals/+page.svelte +45 -43
  287. package/src/routes/terminals/[id]/+page.svelte +198 -91
  288. package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
  289. package/build/client/_app/immutable/assets/3.C0uFg0IS.css +0 -1
  290. package/build/client/_app/immutable/assets/3.C0uFg0IS.css.br +0 -0
  291. package/build/client/_app/immutable/assets/3.C0uFg0IS.css.gz +0 -0
  292. package/build/client/_app/immutable/assets/6.AraZrY8I.css +0 -1
  293. package/build/client/_app/immutable/assets/6.AraZrY8I.css.br +0 -0
  294. package/build/client/_app/immutable/assets/6.AraZrY8I.css.gz +0 -0
  295. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.br +0 -0
  296. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.gz +0 -0
  297. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +0 -1
  298. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.br +0 -0
  299. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.gz +0 -0
  300. package/build/client/_app/immutable/chunks/BNJphC1q.js +0 -56
  301. package/build/client/_app/immutable/chunks/BNJphC1q.js.br +0 -0
  302. package/build/client/_app/immutable/chunks/BNJphC1q.js.gz +0 -0
  303. package/build/client/_app/immutable/chunks/Bvk7mfPM.js +0 -1
  304. package/build/client/_app/immutable/chunks/Bvk7mfPM.js.br +0 -0
  305. package/build/client/_app/immutable/chunks/Bvk7mfPM.js.gz +0 -0
  306. package/build/client/_app/immutable/chunks/CAokzuPQ.js +0 -1
  307. package/build/client/_app/immutable/chunks/CAokzuPQ.js.br +0 -0
  308. package/build/client/_app/immutable/chunks/CAokzuPQ.js.gz +0 -0
  309. package/build/client/_app/immutable/chunks/CgCpWzEA.js +0 -1
  310. package/build/client/_app/immutable/chunks/CgCpWzEA.js.br +0 -0
  311. package/build/client/_app/immutable/chunks/CgCpWzEA.js.gz +0 -0
  312. package/build/client/_app/immutable/chunks/Cjwk_cGO.js.br +0 -0
  313. package/build/client/_app/immutable/chunks/Cjwk_cGO.js.gz +0 -0
  314. package/build/client/_app/immutable/chunks/CtQ8EED1.js +0 -11
  315. package/build/client/_app/immutable/chunks/CtQ8EED1.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/CtQ8EED1.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/DERQCisl.js +0 -1
  318. package/build/client/_app/immutable/chunks/DERQCisl.js.br +0 -0
  319. package/build/client/_app/immutable/chunks/DERQCisl.js.gz +0 -0
  320. package/build/client/_app/immutable/chunks/DKrg8TQs.js +0 -1
  321. package/build/client/_app/immutable/chunks/DKrg8TQs.js.br +0 -0
  322. package/build/client/_app/immutable/chunks/DKrg8TQs.js.gz +0 -0
  323. package/build/client/_app/immutable/chunks/Dkkpz_4D.js +0 -126
  324. package/build/client/_app/immutable/chunks/Dkkpz_4D.js.br +0 -0
  325. package/build/client/_app/immutable/chunks/Dkkpz_4D.js.gz +0 -0
  326. package/build/client/_app/immutable/chunks/DoczjQhA.js +0 -1
  327. package/build/client/_app/immutable/chunks/DoczjQhA.js.br +0 -0
  328. package/build/client/_app/immutable/chunks/DoczjQhA.js.gz +0 -0
  329. package/build/client/_app/immutable/chunks/RpcNruLP.js +0 -2
  330. package/build/client/_app/immutable/chunks/RpcNruLP.js.br +0 -0
  331. package/build/client/_app/immutable/chunks/RpcNruLP.js.gz +0 -0
  332. package/build/client/_app/immutable/chunks/a-St0Zwo.js +0 -1
  333. package/build/client/_app/immutable/chunks/a-St0Zwo.js.br +0 -0
  334. package/build/client/_app/immutable/chunks/a-St0Zwo.js.gz +0 -0
  335. package/build/client/_app/immutable/chunks/bo70OQUZ.js +0 -1
  336. package/build/client/_app/immutable/chunks/bo70OQUZ.js.br +0 -0
  337. package/build/client/_app/immutable/chunks/bo70OQUZ.js.gz +0 -0
  338. package/build/client/_app/immutable/entry/app.QvGgdvTI.js +0 -2
  339. package/build/client/_app/immutable/entry/app.QvGgdvTI.js.br +0 -0
  340. package/build/client/_app/immutable/entry/app.QvGgdvTI.js.gz +0 -0
  341. package/build/client/_app/immutable/entry/start.BntDNRMC.js +0 -1
  342. package/build/client/_app/immutable/entry/start.BntDNRMC.js.br +0 -0
  343. package/build/client/_app/immutable/entry/start.BntDNRMC.js.gz +0 -0
  344. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js +0 -1
  345. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.br +0 -0
  346. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.gz +0 -0
  347. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js +0 -1
  348. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.br +0 -0
  349. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.gz +0 -0
  350. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js +0 -1
  351. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.br +0 -0
  352. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.gz +0 -0
  353. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js +0 -3
  354. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.br +0 -0
  355. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.gz +0 -0
  356. package/build/client/_app/immutable/nodes/4.D-cIe70D.js +0 -1
  357. package/build/client/_app/immutable/nodes/4.D-cIe70D.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/4.D-cIe70D.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js +0 -1
  360. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.br +0 -0
  361. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.gz +0 -0
  362. package/build/client/_app/immutable/nodes/6.BB7QE48r.js +0 -2
  363. package/build/client/_app/immutable/nodes/6.BB7QE48r.js.br +0 -0
  364. package/build/client/_app/immutable/nodes/6.BB7QE48r.js.gz +0 -0
  365. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js +0 -2
  366. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.br +0 -0
  367. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.gz +0 -0
  368. package/build/client/manifest.webmanifest +0 -1
  369. package/build/client/registerSW.js +0 -1
  370. package/build/client/registerSW.js.br +0 -0
  371. package/build/client/registerSW.js.gz +0 -0
  372. package/build/client/sw.js +0 -222
  373. package/build/client/sw.js.br +0 -0
  374. package/build/client/sw.js.gz +0 -0
  375. package/build/client/workbox-5119daf5.js +0 -3395
  376. package/build/client/workbox-5119daf5.js.br +0 -0
  377. package/build/client/workbox-5119daf5.js.gz +0 -0
  378. package/build/server/chunks/0-q2IUp76Y.js +0 -9
  379. package/build/server/chunks/1-CU50G5wZ.js +0 -9
  380. package/build/server/chunks/2-D01t9s8T.js +0 -9
  381. package/build/server/chunks/2-D01t9s8T.js.map +0 -1
  382. package/build/server/chunks/3-5PUQ04wC.js +0 -9
  383. package/build/server/chunks/3-5PUQ04wC.js.map +0 -1
  384. package/build/server/chunks/4-e7gywnSG.js +0 -9
  385. package/build/server/chunks/4-e7gywnSG.js.map +0 -1
  386. package/build/server/chunks/5-CA1SA6KZ.js +0 -9
  387. package/build/server/chunks/5-CA1SA6KZ.js.map +0 -1
  388. package/build/server/chunks/6-71H221sV.js +0 -9
  389. package/build/server/chunks/6-71H221sV.js.map +0 -1
  390. package/build/server/chunks/7-Bo-vmdyz.js +0 -9
  391. package/build/server/chunks/7-Bo-vmdyz.js.map +0 -1
  392. package/build/server/chunks/_layout.svelte-SFHOxs74.js +0 -132
  393. package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +0 -1
  394. package/build/server/chunks/_page.svelte-B4w-2wD-.js +0 -120
  395. package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +0 -1
  396. package/build/server/chunks/_page.svelte-B_qAXjkh.js +0 -213
  397. package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +0 -1
  398. package/build/server/chunks/_page.svelte-CsF1_TRG.js +0 -50
  399. package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +0 -1
  400. package/build/server/chunks/_page.svelte-DJC6U-P0.js +0 -68
  401. package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +0 -1
  402. package/build/server/chunks/_page.svelte-DQ6HBtsz.js +0 -407
  403. package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +0 -1
  404. package/build/server/chunks/_page.svelte-LbhhjP21.js +0 -148
  405. package/build/server/chunks/_page.svelte-LbhhjP21.js.map +0 -1
  406. package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +0 -1
  407. package/build/server/chunks/_server.ts-BgdjBZco.js.map +0 -1
  408. package/build/server/chunks/_server.ts-BihKSdj_.js.map +0 -1
  409. package/build/server/chunks/_server.ts-BjOJsoy4.js.map +0 -1
  410. package/build/server/chunks/_server.ts-C29xzfaw.js.map +0 -1
  411. package/build/server/chunks/_server.ts-CPa6DgIt.js.map +0 -1
  412. package/build/server/chunks/_server.ts-CbDRDIoP.js.map +0 -1
  413. package/build/server/chunks/_server.ts-Cl1OEWL4.js +0 -54
  414. package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +0 -1
  415. package/build/server/chunks/_server.ts-ColfDHW8.js.map +0 -1
  416. package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +0 -1
  417. package/build/server/chunks/_server.ts-DRVbgm6k.js.map +0 -1
  418. package/build/server/chunks/_server.ts-DfajWaqh.js.map +0 -1
  419. package/build/server/chunks/client-CxCatAKr.js +0 -255
  420. package/build/server/chunks/client-CxCatAKr.js.map +0 -1
  421. package/build/server/chunks/error.svelte-BqdwMWdK.js +0 -26
  422. package/build/server/chunks/error.svelte-BqdwMWdK.js.map +0 -1
  423. package/build/server/chunks/exports-CJ0Q5XmL.js.map +0 -1
  424. package/build/server/chunks/index2-DAxIoAO-.js +0 -36
  425. package/build/server/chunks/index2-DAxIoAO-.js.map +0 -1
  426. package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +0 -137
  427. package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +0 -1
  428. package/build/server/chunks/library-apns-BHxLmuIx.js.map +0 -1
  429. package/build/server/chunks/markdown-Bxrl3cCF.js +0 -1241
  430. package/build/server/chunks/markdown-Bxrl3cCF.js.map +0 -1
  431. package/build/server/chunks/pty-manager-C0FhBiVq.js.map +0 -1
  432. package/build/server/chunks/stores-D0HorpgL.js +0 -36
  433. package/build/server/chunks/stores-D0HorpgL.js.map +0 -1
@@ -1,8 +1,7 @@
1
1
  <script lang="ts">
2
- import type { ShooterConfig } from '$lib/types/config';
2
+ import type { ShooterConfig, TerminalListItem } from '$generated/types';
3
3
 
4
4
  import { goto } from '$app/navigation';
5
- import { Button, Pill, Shimmer, Tooltip } from '@juspay/svelte-ui-components';
6
5
  import {
7
6
  EmptyState,
8
7
  formatRelativeTime,
@@ -12,29 +11,15 @@
12
11
  setCache,
13
12
  } from '$lib/modules/client/common';
14
13
  import LaunchSheet from '$lib/modules/client/terminal/LaunchSheet.svelte';
14
+ import { Button, Pill, Shimmer, Tooltip } from '@juspay/svelte-ui-components';
15
15
  import { onDestroy, onMount } from 'svelte';
16
16
 
17
- interface Terminal {
18
- args: string[];
19
- command: string;
20
- createdAt: string;
21
- currentCwd?: null | string;
22
- cwd: string;
23
- exitCode: null | number;
24
- exitedAt: null | string;
25
- id: string;
26
- isActive?: boolean;
27
- lastOutput: null | string;
28
- pid: number;
29
- status: 'exited' | 'running';
30
- }
31
-
32
17
  const POLL_INTERVAL_MS = 10_000;
33
18
  const CACHE_KEY = 'shooter_terminals';
34
19
  const AI_COMMANDS = ['claude', 'opencode'];
35
20
  const SHELL_COMMANDS = ['zsh', 'bash', 'sh', 'fish'];
36
21
 
37
- let terminals = $state<Terminal[]>([]);
22
+ let terminals = $state<TerminalListItem[]>([]);
38
23
  let loading = $state(false);
39
24
  let fetching = false;
40
25
  let config = $state<null | ShooterConfig>(null);
@@ -48,7 +33,7 @@
48
33
  loadConfiguration();
49
34
 
50
35
  // Show cached data immediately (10s TTL matches poll interval)
51
- const cached = getCached(CACHE_KEY, 10_000) as null | Terminal[];
36
+ const cached = getCached(CACHE_KEY, 10_000) as null | TerminalListItem[];
52
37
  if (cached) {
53
38
  terminals = cached;
54
39
  loading = false;
@@ -110,8 +95,11 @@
110
95
  return;
111
96
  }
112
97
 
113
- const result = (await response.json()) as { terminals: Terminal[] };
114
- terminals = result.terminals;
98
+ const result = (await response.json()) as { terminals: TerminalListItem[] };
99
+ terminals = result.terminals.map((t) => ({
100
+ ...t,
101
+ lastOutput: t.lastOutput ?? null,
102
+ }));
115
103
  setCache(CACHE_KEY, terminals);
116
104
  } catch (error) {
117
105
  console.error('Failed to fetch terminals:', error);
@@ -157,7 +145,7 @@
157
145
  return 'shell';
158
146
  }
159
147
 
160
- function getBadgeInfo(terminal: Terminal): { class: string; label: string } {
148
+ function getBadgeInfo(terminal: TerminalListItem): { class: string; label: string } {
161
149
  if (terminal.status === 'exited') {
162
150
  return { class: 'pill-badge-ended', label: 'ENDED' };
163
151
  }
@@ -180,17 +168,25 @@
180
168
  return `${parts[0]}/.../${parts.slice(-2).join('/')}`;
181
169
  }
182
170
 
171
+ /* eslint-disable no-control-regex, no-useless-escape */
183
172
  function stripAnsi(str: string): string {
184
- return str.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g, '').replace(/[\x00-\x1f]/g, '').trim();
173
+ return str
174
+ .replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g, '')
175
+ .replace(/[\x00-\x1f]/g, '')
176
+ .trim();
185
177
  }
178
+ /* eslint-enable no-control-regex, no-useless-escape */
186
179
 
187
180
  function truncateOutput(output: null | string, maxLen = 80): string {
188
181
  if (!output) {
189
182
  return '';
190
183
  }
191
- // Strip ANSI escape codes first, then take the last non-empty line
192
- const cleaned = stripAnsi(output);
193
- const lines = cleaned.trim().split('\n').filter(l => l.trim());
184
+ // Split on newlines BEFORE stripping ANSI so that \n characters survive
185
+ // the control-character removal pass, then strip each line individually.
186
+ const lines = output
187
+ .split('\n')
188
+ .map((l) => stripAnsi(l))
189
+ .filter((l) => l.trim());
194
190
  const lastLine = lines[lines.length - 1] || '';
195
191
  if (lastLine.length <= maxLen) {
196
192
  return lastLine;
@@ -206,14 +202,16 @@
206
202
  event.preventDefault();
207
203
  event.stopPropagation();
208
204
 
209
- if (!config?.apiKey) return;
205
+ if (!config?.apiKey) {
206
+ return;
207
+ }
210
208
 
211
209
  try {
212
210
  const response = await fetch(`/api/terminals/${id}`, {
213
- method: 'DELETE',
214
211
  headers: {
215
212
  Authorization: `Bearer ${config.apiKey}`,
216
213
  },
214
+ method: 'DELETE',
217
215
  });
218
216
 
219
217
  if (response.ok) {
@@ -240,16 +238,12 @@
240
238
  </div>
241
239
  <div class="page-actions">
242
240
  <Button classes="btn-secondary" onclick={forceRefresh} disabled={loading}>
243
- {#snippet children()}
244
- <Icon name="refresh" size={14} />
245
- Refresh
246
- {/snippet}
241
+ <Icon name="refresh" size={14} />
242
+ Refresh
247
243
  </Button>
248
244
  <Button classes="btn-primary" onclick={handleNewTerminal}>
249
- {#snippet children()}
250
- <span class="plus-icon">+</span>
251
- New Terminal
252
- {/snippet}
245
+ <span class="plus-icon">+</span>
246
+ New Terminal
253
247
  </Button>
254
248
  </div>
255
249
  </div>
@@ -276,10 +270,8 @@
276
270
  description="Launch a new terminal session to get started. Terminal sessions will appear here once created."
277
271
  >
278
272
  <Button classes="btn-primary" onclick={handleNewTerminal}>
279
- {#snippet children()}
280
- <span class="plus-icon">+</span>
281
- New Terminal
282
- {/snippet}
273
+ <span class="plus-icon">+</span>
274
+ New Terminal
283
275
  </Button>
284
276
  </EmptyState>
285
277
  {:else}
@@ -326,7 +318,10 @@
326
318
  <span class="terminal-command">{getCommandName(terminal.command)}</span>
327
319
  <Pill text={badge.label} classes={badge.class} />
328
320
  {#if terminal.exitCode !== null}
329
- <Pill text="exit {terminal.exitCode}" classes={terminal.exitCode !== 0 ? 'pill-exit-error' : 'pill-exit-ok'} />
321
+ <Pill
322
+ text="exit {terminal.exitCode}"
323
+ classes={terminal.exitCode !== 0 ? 'pill-exit-error' : 'pill-exit-ok'}
324
+ />
330
325
  {/if}
331
326
  </div>
332
327
  <div class="terminal-card-right">
@@ -496,8 +491,15 @@
496
491
  }
497
492
 
498
493
  @keyframes activity-pulse {
499
- 0%, 100% { transform: scale(1); opacity: 1; }
500
- 50% { transform: scale(1.5); opacity: 0.7; }
494
+ 0%,
495
+ 100% {
496
+ transform: scale(1);
497
+ opacity: 1;
498
+ }
499
+ 50% {
500
+ transform: scale(1.5);
501
+ opacity: 0.7;
502
+ }
501
503
  }
502
504
 
503
505
  /* Command name */