@juspay/shooter 1.1.0 → 1.2.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 (330) hide show
  1. package/build/client/_app/immutable/assets/{0.DC5pAwP3.css → 0.BhZOCxO4.css} +1 -1
  2. package/build/client/_app/immutable/assets/0.BhZOCxO4.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.BhZOCxO4.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/1.BYutk3aU.css +1 -0
  5. package/build/client/_app/immutable/assets/1.BYutk3aU.css.br +0 -0
  6. package/build/client/_app/immutable/assets/1.BYutk3aU.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/{3.BoXp0JoS.css → 3.DGDHCVnW.css} +1 -1
  8. package/build/client/_app/immutable/assets/3.DGDHCVnW.css.br +0 -0
  9. package/build/client/_app/immutable/assets/3.DGDHCVnW.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/4.BFUut--w.css +1 -0
  11. package/build/client/_app/immutable/assets/4.BFUut--w.css.br +0 -0
  12. package/build/client/_app/immutable/assets/4.BFUut--w.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/5.BTOx7yt7.css +1 -0
  14. package/build/client/_app/immutable/assets/5.BTOx7yt7.css.br +0 -0
  15. package/build/client/_app/immutable/assets/5.BTOx7yt7.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/{7.PyEFVv_s.css → 7.DwS5ZHBh.css} +1 -1
  17. package/build/client/_app/immutable/assets/7.DwS5ZHBh.css.br +0 -0
  18. package/build/client/_app/immutable/assets/7.DwS5ZHBh.css.gz +0 -0
  19. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css +1 -0
  20. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.br +0 -0
  21. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.gz +0 -0
  22. package/build/client/_app/immutable/chunks/B-K5Sh65.js +1 -0
  23. package/build/client/_app/immutable/chunks/B-K5Sh65.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/B-K5Sh65.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/B5NAKyil.js +20 -0
  26. package/build/client/_app/immutable/chunks/B5NAKyil.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/B5NAKyil.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/B8XegpSE.js +1 -0
  29. package/build/client/_app/immutable/chunks/B8XegpSE.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/B8XegpSE.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/{50RPd5u3.js → B8zoBsv3.js} +1 -1
  32. package/build/client/_app/immutable/chunks/B8zoBsv3.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/B8zoBsv3.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/BLszSzTT.js +1 -0
  35. package/build/client/_app/immutable/chunks/BLszSzTT.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/BLszSzTT.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/BOYo8yTr.js +1 -0
  38. package/build/client/_app/immutable/chunks/BOYo8yTr.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/BOYo8yTr.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/{CdL99jkG.js → BYqGCrTe.js} +1 -1
  41. package/build/client/_app/immutable/chunks/BYqGCrTe.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/BYqGCrTe.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/Bu1aqm5j.js +1 -0
  44. package/build/client/_app/immutable/chunks/Bu1aqm5j.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/Bu1aqm5j.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/C4mLaWWx.js +1 -0
  47. package/build/client/_app/immutable/chunks/C4mLaWWx.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/C4mLaWWx.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/{ClK4wZbC.js → CQjSATpv.js} +16 -16
  50. package/build/client/_app/immutable/chunks/CQjSATpv.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/CQjSATpv.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/{CojFyTPp.js → CSoRdFvv.js} +1 -1
  53. package/build/client/_app/immutable/chunks/CSoRdFvv.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/CSoRdFvv.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/{tjbnEgXP.js → CZHsSL_X.js} +1 -1
  56. package/build/client/_app/immutable/chunks/CZHsSL_X.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/CZHsSL_X.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/DVkn4r72.js +1 -0
  59. package/build/client/_app/immutable/chunks/DVkn4r72.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/DVkn4r72.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/DjsDGxCa.js +41 -0
  62. package/build/client/_app/immutable/chunks/DjsDGxCa.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/DjsDGxCa.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/UJOiqIYE.js +1 -0
  65. package/build/client/_app/immutable/chunks/UJOiqIYE.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/UJOiqIYE.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/r0JawsZc.js +2 -0
  68. package/build/client/_app/immutable/chunks/r0JawsZc.js.br +0 -0
  69. package/build/client/_app/immutable/chunks/r0JawsZc.js.gz +0 -0
  70. package/build/client/_app/immutable/entry/app.Z3zMnuSx.js +2 -0
  71. package/build/client/_app/immutable/entry/app.Z3zMnuSx.js.br +0 -0
  72. package/build/client/_app/immutable/entry/app.Z3zMnuSx.js.gz +0 -0
  73. package/build/client/_app/immutable/entry/start.Dd-gIP4y.js +1 -0
  74. package/build/client/_app/immutable/entry/start.Dd-gIP4y.js.br +2 -0
  75. package/build/client/_app/immutable/entry/start.Dd-gIP4y.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/0.D2YR8tTD.js +1 -0
  77. package/build/client/_app/immutable/nodes/0.D2YR8tTD.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/0.D2YR8tTD.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/1.B3m6rO4C.js +1 -0
  80. package/build/client/_app/immutable/nodes/1.B3m6rO4C.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/1.B3m6rO4C.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/2.CyRB2euU.js +1 -0
  83. package/build/client/_app/immutable/nodes/2.CyRB2euU.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/2.CyRB2euU.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/3.3yohCM25.js +3 -0
  86. package/build/client/_app/immutable/nodes/3.3yohCM25.js.br +0 -0
  87. package/build/client/_app/immutable/nodes/3.3yohCM25.js.gz +0 -0
  88. package/build/client/_app/immutable/nodes/4.DEAcwl7l.js +1 -0
  89. package/build/client/_app/immutable/nodes/4.DEAcwl7l.js.br +0 -0
  90. package/build/client/_app/immutable/nodes/4.DEAcwl7l.js.gz +0 -0
  91. package/build/client/_app/immutable/nodes/5.C6bLGWQR.js +4 -0
  92. package/build/client/_app/immutable/nodes/5.C6bLGWQR.js.br +0 -0
  93. package/build/client/_app/immutable/nodes/5.C6bLGWQR.js.gz +0 -0
  94. package/build/client/_app/immutable/nodes/6.ByTzlA2D.js +2 -0
  95. package/build/client/_app/immutable/nodes/6.ByTzlA2D.js.br +0 -0
  96. package/build/client/_app/immutable/nodes/6.ByTzlA2D.js.gz +0 -0
  97. package/build/client/_app/immutable/nodes/7.BPMfwzd2.js +2 -0
  98. package/build/client/_app/immutable/nodes/7.BPMfwzd2.js.br +0 -0
  99. package/build/client/_app/immutable/nodes/7.BPMfwzd2.js.gz +0 -0
  100. package/build/client/_app/version.json +1 -1
  101. package/build/client/_app/version.json.br +0 -0
  102. package/build/client/_app/version.json.gz +0 -0
  103. package/build/client/manifest.json +13 -0
  104. package/build/client/manifest.json.br +0 -0
  105. package/build/client/manifest.json.gz +0 -0
  106. package/build/server/chunks/0-Vk38tI2J.js +9 -0
  107. package/build/server/chunks/0-Vk38tI2J.js.map +1 -0
  108. package/build/server/chunks/1-BvYQX5MR.js +9 -0
  109. package/build/server/chunks/1-BvYQX5MR.js.map +1 -0
  110. package/build/server/chunks/2-Cl7R4Qk2.js +9 -0
  111. package/build/server/chunks/2-Cl7R4Qk2.js.map +1 -0
  112. package/build/server/chunks/3-Ck7ewhOX.js +9 -0
  113. package/build/server/chunks/3-Ck7ewhOX.js.map +1 -0
  114. package/build/server/chunks/4-CnDeRm2Z.js +9 -0
  115. package/build/server/chunks/4-CnDeRm2Z.js.map +1 -0
  116. package/build/server/chunks/5-IxitzEvN.js +9 -0
  117. package/build/server/chunks/{5-D0wB7nfE.js.map → 5-IxitzEvN.js.map} +1 -1
  118. package/build/server/chunks/6-CyZ3r1iS.js +9 -0
  119. package/build/server/chunks/6-CyZ3r1iS.js.map +1 -0
  120. package/build/server/chunks/7-BmI7du46.js +9 -0
  121. package/build/server/chunks/7-BmI7du46.js.map +1 -0
  122. package/build/server/chunks/{Button-C7D5W6wV.js → Button-Cs1aE6ka.js} +2 -2
  123. package/build/server/chunks/{Button-C7D5W6wV.js.map → Button-Cs1aE6ka.js.map} +1 -1
  124. package/build/server/chunks/{EmptyState-Ci4pSpmY.js → EmptyState-DDFH1K8g.js} +10 -4
  125. package/build/server/chunks/EmptyState-DDFH1K8g.js.map +1 -0
  126. package/build/server/chunks/{Icon-DyrkHVnV.js → Icon-CEUrotA6.js} +3 -3
  127. package/build/server/chunks/{Icon-DyrkHVnV.js.map → Icon-CEUrotA6.js.map} +1 -1
  128. package/build/server/chunks/{Shimmer-BITK6wrm.js → Shimmer-DB8W1zt6.js} +2 -2
  129. package/build/server/chunks/{Shimmer-BITK6wrm.js.map → Shimmer-DB8W1zt6.js.map} +1 -1
  130. package/build/server/chunks/_error.svelte-uCOJNxvr.js +39 -0
  131. package/build/server/chunks/_error.svelte-uCOJNxvr.js.map +1 -0
  132. package/build/server/chunks/{_layout.svelte-CO4f8UD7.js → _layout.svelte-CtWmEJwe.js} +5 -25
  133. package/build/server/chunks/_layout.svelte-CtWmEJwe.js.map +1 -0
  134. package/build/server/chunks/{_page.svelte-C6bns9aQ.js → _page.svelte-BcZaKdX9.js} +13 -9
  135. package/build/server/chunks/_page.svelte-BcZaKdX9.js.map +1 -0
  136. package/build/server/chunks/{_page.svelte-3Cc3NMAP.js → _page.svelte-BdYynOck.js} +18 -14
  137. package/build/server/chunks/_page.svelte-BdYynOck.js.map +1 -0
  138. package/build/server/chunks/{_page.svelte-CFCONiDK.js → _page.svelte-BgevQjq1.js} +16 -12
  139. package/build/server/chunks/_page.svelte-BgevQjq1.js.map +1 -0
  140. package/build/server/chunks/{_page.svelte-DskND_G9.js → _page.svelte-CVq6tRb3.js} +8 -8
  141. package/build/server/chunks/_page.svelte-CVq6tRb3.js.map +1 -0
  142. package/build/server/chunks/{_page.svelte-rTrWmhOp.js → _page.svelte-CxWcQ0Am.js} +8 -8
  143. package/build/server/chunks/_page.svelte-CxWcQ0Am.js.map +1 -0
  144. package/build/server/chunks/{_page.svelte-C0p3HsIW.js → _page.svelte-DO4oa_LY.js} +11 -13
  145. package/build/server/chunks/_page.svelte-DO4oa_LY.js.map +1 -0
  146. package/build/server/chunks/{_server.ts-CS5H5klP.js → _server.ts-CAxsWKvS.js} +14 -10
  147. package/build/server/chunks/_server.ts-CAxsWKvS.js.map +1 -0
  148. package/build/server/chunks/{_server.ts-C8slOHB0.js → _server.ts-CTpcLUH8.js} +3 -2
  149. package/build/server/chunks/_server.ts-CTpcLUH8.js.map +1 -0
  150. package/build/server/chunks/_server.ts-CtH0dhUp.js +71 -0
  151. package/build/server/chunks/_server.ts-CtH0dhUp.js.map +1 -0
  152. package/build/server/chunks/{_server.ts-DhTrdlWH.js → _server.ts-DB_Kg97c.js} +14 -3
  153. package/build/server/chunks/_server.ts-DB_Kg97c.js.map +1 -0
  154. package/build/server/chunks/_server.ts-DYpJImqd.js +99 -0
  155. package/build/server/chunks/_server.ts-DYpJImqd.js.map +1 -0
  156. package/build/server/chunks/{_server.ts-DpEVfp8W.js → _server.ts-Deok2y88.js} +58 -40
  157. package/build/server/chunks/_server.ts-Deok2y88.js.map +1 -0
  158. package/build/server/chunks/{_server.ts-uHUi-4cd.js → _server.ts-vekTmWAx.js} +3 -2
  159. package/build/server/chunks/_server.ts-vekTmWAx.js.map +1 -0
  160. package/build/server/chunks/{client2-BjxIYuno.js → client-BdGHe_hY.js} +4 -4
  161. package/build/server/chunks/client-BdGHe_hY.js.map +1 -0
  162. package/build/server/chunks/client2-CCBGA-2V.js +7 -0
  163. package/build/server/chunks/client2-CCBGA-2V.js.map +1 -0
  164. package/build/server/chunks/{index-Cnl871UW.js → index-DwaY1cAm.js} +2 -2
  165. package/build/server/chunks/{index-Cnl871UW.js.map → index-DwaY1cAm.js.map} +1 -1
  166. package/build/server/chunks/{index-server-CUC9Jt7r.js → index-server-CrDaL06Y.js} +2 -2
  167. package/build/server/chunks/{index-server-CUC9Jt7r.js.map → index-server-CrDaL06Y.js.map} +1 -1
  168. package/build/server/chunks/{index2-HA3VTH7y.js → index2-CgclKpUj.js} +2 -2
  169. package/build/server/chunks/{index2-HA3VTH7y.js.map → index2-CgclKpUj.js.map} +1 -1
  170. package/build/server/chunks/opencode-db-path-DcfhJtJy.js +15 -0
  171. package/build/server/chunks/opencode-db-path-DcfhJtJy.js.map +1 -0
  172. package/build/server/chunks/{pty-manager-DR0Wt2Ac.js → pty-manager-BQVB7IVj.js} +17 -15
  173. package/build/server/chunks/pty-manager-BQVB7IVj.js.map +1 -0
  174. package/build/server/chunks/{root-DhswcH6o.js → root-DDSnEAZv.js} +2 -2
  175. package/build/server/chunks/{root-DhswcH6o.js.map → root-DDSnEAZv.js.map} +1 -1
  176. package/build/server/chunks/{state.svelte-2Lellg7t.js → state.svelte-hBbXlUak.js} +3 -3
  177. package/build/server/chunks/{state.svelte-2Lellg7t.js.map → state.svelte-hBbXlUak.js.map} +1 -1
  178. package/build/server/chunks/stores-DHNzYNpX.js +28 -0
  179. package/build/server/chunks/stores-DHNzYNpX.js.map +1 -0
  180. package/build/server/index.js +5 -5
  181. package/build/server/index.js.map +1 -1
  182. package/build/server/manifest.js +30 -16
  183. package/build/server/manifest.js.map +1 -1
  184. package/package.json +1 -1
  185. package/scripts/setup.cjs +87 -13
  186. package/server.ts +3 -0
  187. package/src/app.html +3 -0
  188. package/src/lib/modules/client/common/cache.ts +10 -2
  189. package/src/lib/modules/client/common/index.ts +1 -1
  190. package/src/lib/modules/client/common/markdown.ts +22 -1
  191. package/src/lib/modules/client/common/time.ts +13 -11
  192. package/src/lib/modules/client/terminal/ChatView.svelte +324 -67
  193. package/src/lib/modules/client/terminal/ConnectionStatus.svelte +1 -0
  194. package/src/lib/modules/client/terminal/xterm-wrapper.ts +4 -1
  195. package/src/lib/modules/server/sessions/jsonl-reader.ts +43 -28
  196. package/src/lib/modules/server/sessions/opencode-db-path.ts +26 -0
  197. package/src/lib/modules/server/sessions/opencode-reader.ts +13 -15
  198. package/src/lib/modules/server/sessions/process-detector.ts +103 -0
  199. package/src/lib/modules/server/terminal/opencode-watcher.ts +3 -14
  200. package/src/lib/modules/server/terminal/pty-manager.ts +20 -8
  201. package/src/lib/modules/server/ws/session-handler.ts +282 -104
  202. package/src/lib/theme.css +30 -0
  203. package/src/routes/+error.svelte +94 -0
  204. package/src/routes/+page.svelte +18 -8
  205. package/src/routes/api/health/+server.ts +14 -2
  206. package/src/routes/api/sessions/+server.ts +12 -4
  207. package/src/routes/api/sessions/connect/+server.ts +125 -0
  208. package/src/routes/api/sessions/detect/+server.ts +27 -0
  209. package/src/routes/api/terminals/+server.ts +12 -9
  210. package/src/routes/config/+page.svelte +22 -1
  211. package/src/routes/project/+page.svelte +159 -8
  212. package/src/routes/session/[id]/+page.svelte +477 -299
  213. package/src/routes/terminals/+page.svelte +14 -3
  214. package/src/routes/terminals/[id]/+page.svelte +25 -0
  215. package/build/client/_app/immutable/assets/0.DC5pAwP3.css.br +0 -0
  216. package/build/client/_app/immutable/assets/0.DC5pAwP3.css.gz +0 -0
  217. package/build/client/_app/immutable/assets/3.BoXp0JoS.css.br +0 -0
  218. package/build/client/_app/immutable/assets/3.BoXp0JoS.css.gz +0 -0
  219. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css +0 -1
  220. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.br +0 -0
  221. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
  222. package/build/client/_app/immutable/assets/5.DRjApZQW.css +0 -1
  223. package/build/client/_app/immutable/assets/5.DRjApZQW.css.br +0 -0
  224. package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
  225. package/build/client/_app/immutable/assets/7.PyEFVv_s.css.br +0 -0
  226. package/build/client/_app/immutable/assets/7.PyEFVv_s.css.gz +0 -0
  227. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css +0 -1
  228. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.br +0 -0
  229. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
  230. package/build/client/_app/immutable/chunks/50RPd5u3.js.br +0 -0
  231. package/build/client/_app/immutable/chunks/50RPd5u3.js.gz +0 -0
  232. package/build/client/_app/immutable/chunks/BDC7XD4o.js +0 -1
  233. package/build/client/_app/immutable/chunks/BDC7XD4o.js.br +0 -0
  234. package/build/client/_app/immutable/chunks/BDC7XD4o.js.gz +0 -0
  235. package/build/client/_app/immutable/chunks/BeONA6_G.js +0 -2
  236. package/build/client/_app/immutable/chunks/BeONA6_G.js.br +0 -0
  237. package/build/client/_app/immutable/chunks/BeONA6_G.js.gz +0 -0
  238. package/build/client/_app/immutable/chunks/BygiiMA0.js +0 -1
  239. package/build/client/_app/immutable/chunks/BygiiMA0.js.br +0 -0
  240. package/build/client/_app/immutable/chunks/BygiiMA0.js.gz +0 -0
  241. package/build/client/_app/immutable/chunks/CGLrx-H5.js +0 -1
  242. package/build/client/_app/immutable/chunks/CGLrx-H5.js.br +0 -0
  243. package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
  244. package/build/client/_app/immutable/chunks/CHvUpVYv.js +0 -1
  245. package/build/client/_app/immutable/chunks/CHvUpVYv.js.br +0 -0
  246. package/build/client/_app/immutable/chunks/CHvUpVYv.js.gz +0 -0
  247. package/build/client/_app/immutable/chunks/CbqC9BW7.js +0 -1
  248. package/build/client/_app/immutable/chunks/CbqC9BW7.js.br +0 -2
  249. package/build/client/_app/immutable/chunks/CbqC9BW7.js.gz +0 -0
  250. package/build/client/_app/immutable/chunks/CdL99jkG.js.br +0 -0
  251. package/build/client/_app/immutable/chunks/CdL99jkG.js.gz +0 -0
  252. package/build/client/_app/immutable/chunks/ClK4wZbC.js.br +0 -0
  253. package/build/client/_app/immutable/chunks/ClK4wZbC.js.gz +0 -0
  254. package/build/client/_app/immutable/chunks/CojFyTPp.js.br +0 -0
  255. package/build/client/_app/immutable/chunks/CojFyTPp.js.gz +0 -0
  256. package/build/client/_app/immutable/chunks/DREFAyhX.js +0 -60
  257. package/build/client/_app/immutable/chunks/DREFAyhX.js.br +0 -0
  258. package/build/client/_app/immutable/chunks/DREFAyhX.js.gz +0 -0
  259. package/build/client/_app/immutable/chunks/K_aHH2KN.js +0 -1
  260. package/build/client/_app/immutable/chunks/K_aHH2KN.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/K_aHH2KN.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/Ona8oofC.js +0 -1
  263. package/build/client/_app/immutable/chunks/Ona8oofC.js.br +0 -0
  264. package/build/client/_app/immutable/chunks/Ona8oofC.js.gz +0 -0
  265. package/build/client/_app/immutable/chunks/tjbnEgXP.js.br +0 -0
  266. package/build/client/_app/immutable/chunks/tjbnEgXP.js.gz +0 -0
  267. package/build/client/_app/immutable/entry/app.anqwe7ZL.js +0 -2
  268. package/build/client/_app/immutable/entry/app.anqwe7ZL.js.br +0 -0
  269. package/build/client/_app/immutable/entry/app.anqwe7ZL.js.gz +0 -0
  270. package/build/client/_app/immutable/entry/start.BV2VRv6h.js +0 -1
  271. package/build/client/_app/immutable/entry/start.BV2VRv6h.js.br +0 -2
  272. package/build/client/_app/immutable/entry/start.BV2VRv6h.js.gz +0 -0
  273. package/build/client/_app/immutable/nodes/0.D0i5MqcI.js +0 -1
  274. package/build/client/_app/immutable/nodes/0.D0i5MqcI.js.br +0 -0
  275. package/build/client/_app/immutable/nodes/0.D0i5MqcI.js.gz +0 -0
  276. package/build/client/_app/immutable/nodes/1.DN5n5c6F.js +0 -1
  277. package/build/client/_app/immutable/nodes/1.DN5n5c6F.js.br +0 -0
  278. package/build/client/_app/immutable/nodes/1.DN5n5c6F.js.gz +0 -0
  279. package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js +0 -1
  280. package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js.br +0 -0
  281. package/build/client/_app/immutable/nodes/2.BTjkNKZJ.js.gz +0 -0
  282. package/build/client/_app/immutable/nodes/3.CEkigHDv.js +0 -3
  283. package/build/client/_app/immutable/nodes/3.CEkigHDv.js.br +0 -0
  284. package/build/client/_app/immutable/nodes/3.CEkigHDv.js.gz +0 -0
  285. package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js +0 -1
  286. package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js.br +0 -0
  287. package/build/client/_app/immutable/nodes/4.B-8Zsc9k.js.gz +0 -0
  288. package/build/client/_app/immutable/nodes/5.shitbtHc.js +0 -1
  289. package/build/client/_app/immutable/nodes/5.shitbtHc.js.br +0 -0
  290. package/build/client/_app/immutable/nodes/5.shitbtHc.js.gz +0 -0
  291. package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js +0 -2
  292. package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js.br +0 -0
  293. package/build/client/_app/immutable/nodes/6.CB8Q6eH8.js.gz +0 -0
  294. package/build/client/_app/immutable/nodes/7.D0CrR6pl.js +0 -2
  295. package/build/client/_app/immutable/nodes/7.D0CrR6pl.js.br +0 -0
  296. package/build/client/_app/immutable/nodes/7.D0CrR6pl.js.gz +0 -0
  297. package/build/server/chunks/0-Cs1dzfRz.js +0 -9
  298. package/build/server/chunks/0-Cs1dzfRz.js.map +0 -1
  299. package/build/server/chunks/1-BCSX7oED.js +0 -9
  300. package/build/server/chunks/1-BCSX7oED.js.map +0 -1
  301. package/build/server/chunks/2-6gkeO8b4.js +0 -9
  302. package/build/server/chunks/2-6gkeO8b4.js.map +0 -1
  303. package/build/server/chunks/3-DH9J9Vsc.js +0 -9
  304. package/build/server/chunks/3-DH9J9Vsc.js.map +0 -1
  305. package/build/server/chunks/4-Rzy5TYjl.js +0 -9
  306. package/build/server/chunks/4-Rzy5TYjl.js.map +0 -1
  307. package/build/server/chunks/5-D0wB7nfE.js +0 -9
  308. package/build/server/chunks/6-DR2ABDPq.js +0 -9
  309. package/build/server/chunks/6-DR2ABDPq.js.map +0 -1
  310. package/build/server/chunks/7-D-oQJsia.js +0 -9
  311. package/build/server/chunks/7-D-oQJsia.js.map +0 -1
  312. package/build/server/chunks/EmptyState-Ci4pSpmY.js.map +0 -1
  313. package/build/server/chunks/_layout.svelte-CO4f8UD7.js.map +0 -1
  314. package/build/server/chunks/_page.svelte-3Cc3NMAP.js.map +0 -1
  315. package/build/server/chunks/_page.svelte-C0p3HsIW.js.map +0 -1
  316. package/build/server/chunks/_page.svelte-C6bns9aQ.js.map +0 -1
  317. package/build/server/chunks/_page.svelte-CFCONiDK.js.map +0 -1
  318. package/build/server/chunks/_page.svelte-DskND_G9.js.map +0 -1
  319. package/build/server/chunks/_page.svelte-rTrWmhOp.js.map +0 -1
  320. package/build/server/chunks/_server.ts-C8slOHB0.js.map +0 -1
  321. package/build/server/chunks/_server.ts-CS5H5klP.js.map +0 -1
  322. package/build/server/chunks/_server.ts-DhTrdlWH.js.map +0 -1
  323. package/build/server/chunks/_server.ts-DpEVfp8W.js.map +0 -1
  324. package/build/server/chunks/_server.ts-uHUi-4cd.js.map +0 -1
  325. package/build/server/chunks/client-BYT9c0ig.js +0 -7
  326. package/build/server/chunks/client-BYT9c0ig.js.map +0 -1
  327. package/build/server/chunks/client2-BjxIYuno.js.map +0 -1
  328. package/build/server/chunks/error.svelte-BG_yE-Wt.js +0 -27
  329. package/build/server/chunks/error.svelte-BG_yE-Wt.js.map +0 -1
  330. package/build/server/chunks/pty-manager-DR0Wt2Ac.js.map +0 -1
@@ -1,8 +1,11 @@
1
1
  <script lang="ts">
2
2
  import type { ProjectGroup, ShooterConfig } from '$generated/types';
3
+ import type { DetectedProcess } from '$lib/modules/server/sessions/process-detector';
3
4
 
5
+ import { goto } from '$app/navigation';
4
6
  import { page } from '$app/state';
5
7
  import {
8
+ clearCache,
6
9
  EmptyState,
7
10
  formatRelativeTime,
8
11
  getCached,
@@ -10,7 +13,7 @@
10
13
  isShooterConfig,
11
14
  setCache,
12
15
  } from '$lib/modules/client/common';
13
- import { Button, Pill, Shimmer } from '@juspay/svelte-ui-components';
16
+ import { Banner, Button, Pill, Shimmer } from '@juspay/svelte-ui-components';
14
17
  import { onDestroy, onMount } from 'svelte';
15
18
 
16
19
  const POLL_INTERVAL_MS = 15_000;
@@ -19,14 +22,22 @@
19
22
  let project = $state<null | ProjectGroup>(null);
20
23
  let loading = $state(true);
21
24
  let config = $state<null | ShooterConfig>(null);
25
+ let fetchError = $state<null | string>(null);
22
26
  let pollTimer: null | ReturnType<typeof setInterval> = null;
23
27
  let visibleCount = $state(PAGE_SIZE);
28
+ let detectedProcesses = $state<DetectedProcess[]>([]);
29
+ let connectingSessionId = $state<null | string>(null);
24
30
 
25
31
  const projectId = $derived(page.url.searchParams.get('id') || '');
26
32
 
27
33
  const visibleSessions = $derived(project ? project.sessions.slice(0, visibleCount) : []);
28
34
  const hasMore = $derived(project ? visibleCount < project.sessions.length : false);
29
35
 
36
+ // Build a set of session IDs that have running processes
37
+ const runningSessionIds = $derived(
38
+ new Set(detectedProcesses.filter((p) => p.sessionId).map((p) => p.sessionId))
39
+ );
40
+
30
41
  onMount(() => {
31
42
  loadConfiguration();
32
43
 
@@ -40,11 +51,13 @@
40
51
  // Delay initial fetch to ensure config and projectId are resolved
41
52
  setTimeout(() => {
42
53
  void fetchProject();
54
+ void detectRunningProcesses();
43
55
  }, 50);
44
56
 
45
57
  pollTimer = setInterval(() => {
46
58
  if (config?.apiKey && projectId) {
47
59
  void fetchProject();
60
+ void detectRunningProcesses();
48
61
  }
49
62
  }, POLL_INTERVAL_MS);
50
63
  });
@@ -73,7 +86,7 @@
73
86
  }
74
87
  }
75
88
 
76
- async function fetchProject(): Promise<void> {
89
+ async function fetchProject(bustCache = false): Promise<void> {
77
90
  if (!config?.apiKey || !projectId) {
78
91
  loading = false;
79
92
  return;
@@ -85,17 +98,20 @@
85
98
  }
86
99
 
87
100
  try {
88
- const response = await fetch('/api/sessions', {
101
+ const url = bustCache ? '/api/sessions?refresh=true' : '/api/sessions';
102
+ const response = await fetch(url, {
89
103
  headers: {
90
104
  Authorization: `Bearer ${config.apiKey}`,
91
105
  },
92
106
  });
93
107
 
94
108
  if (!response.ok) {
109
+ fetchError = `Failed to load project (HTTP ${response.status})`;
95
110
  loading = false;
96
111
  return;
97
112
  }
98
113
 
114
+ fetchError = null;
99
115
  const result: { projects: ProjectGroup[] } = await response.json();
100
116
  const foundProject = result.projects.find((p) => p.id === projectId) || null;
101
117
  project = foundProject;
@@ -109,11 +125,71 @@
109
125
  }
110
126
  }
111
127
 
128
+ async function detectRunningProcesses(): Promise<void> {
129
+ if (!config?.apiKey) {
130
+ return;
131
+ }
132
+
133
+ try {
134
+ const response = await fetch('/api/sessions/detect', {
135
+ headers: { Authorization: `Bearer ${config.apiKey}` },
136
+ });
137
+ if (response.ok) {
138
+ const data: { processes: DetectedProcess[] } = await response.json();
139
+ detectedProcesses = data.processes;
140
+ }
141
+ } catch {
142
+ // Best effort — don't break the page
143
+ }
144
+ }
145
+
146
+ async function connectToSession(
147
+ event: MouseEvent,
148
+ sessionId: string,
149
+ command: string
150
+ ): Promise<void> {
151
+ // Prevent the click from navigating to the session page
152
+ event.preventDefault();
153
+ event.stopPropagation();
154
+
155
+ if (!config?.apiKey || !project || connectingSessionId) {
156
+ return;
157
+ }
158
+
159
+ connectingSessionId = sessionId;
160
+
161
+ try {
162
+ const response = await fetch('/api/sessions/connect', {
163
+ body: JSON.stringify({
164
+ command,
165
+ cwd: project.fullPath,
166
+ sessionId,
167
+ }),
168
+ headers: {
169
+ Authorization: `Bearer ${config.apiKey}`,
170
+ 'Content-Type': 'application/json',
171
+ },
172
+ method: 'POST',
173
+ });
174
+
175
+ if (response.ok) {
176
+ const result: { terminalId: string } = await response.json();
177
+ void goto(`/terminals/${result.terminalId}`);
178
+ }
179
+ } catch (error) {
180
+ console.error('Failed to connect to session:', error);
181
+ } finally {
182
+ connectingSessionId = null;
183
+ }
184
+ }
185
+
112
186
  async function forceRefresh(): Promise<void> {
113
187
  loading = true;
114
- sessionStorage.removeItem(`shooter_project_${projectId}`);
188
+ project = null;
115
189
  visibleCount = PAGE_SIZE;
116
- await fetchProject();
190
+ clearCache(`shooter_project_${projectId}`);
191
+ await fetchProject(true);
192
+ await detectRunningProcesses();
117
193
  }
118
194
 
119
195
  function loadMore(): void {
@@ -121,7 +197,10 @@
121
197
  }
122
198
 
123
199
  function formatDate(ts: string): string {
124
- return new Date(ts).toLocaleDateString('en-US', {
200
+ if (!ts) {return '';}
201
+ const d = new Date(ts);
202
+ if (isNaN(d.getTime())) {return '';}
203
+ return d.toLocaleDateString('en-US', {
125
204
  day: 'numeric',
126
205
  hour: '2-digit',
127
206
  minute: '2-digit',
@@ -143,6 +222,10 @@
143
222
  </svelte:head>
144
223
 
145
224
  <main class="main">
225
+ {#if fetchError}
226
+ <Banner text={fetchError} classes="banner-error" />
227
+ {/if}
228
+
146
229
  {#if loading && !project}
147
230
  <div class="loading-container">
148
231
  <Shimmer classes="shimmer-header" />
@@ -195,7 +278,38 @@
195
278
  <div class="session-card-subtitle">{truncate(session.summary, 80)}</div>
196
279
  {/if}
197
280
  </div>
198
- <Pill text={formatRelativeTime(session.modified)} classes="pill-session-time" />
281
+ <div class="session-card-actions">
282
+ <Pill text={formatRelativeTime(session.modified)} classes="pill-session-time" />
283
+ {#if runningSessionIds.has(session.id)}
284
+ <Button
285
+ classes="btn-connect btn-xs"
286
+ onclick={(e: MouseEvent) =>
287
+ connectToSession(
288
+ e,
289
+ session.id,
290
+ session.source === 'opencode' ? 'opencode' : 'claude'
291
+ )}
292
+ disabled={connectingSessionId === session.id}
293
+ showLoader={connectingSessionId === session.id}
294
+ >
295
+ <span class="connect-dot"></span>
296
+ Connect
297
+ </Button>
298
+ {:else}
299
+ <Button
300
+ classes="btn-resume btn-xs"
301
+ onclick={(e: MouseEvent) =>
302
+ connectToSession(
303
+ e,
304
+ session.id,
305
+ session.source === 'opencode' ? 'opencode' : 'claude'
306
+ )}
307
+ disabled={connectingSessionId === session.id}
308
+ showLoader={connectingSessionId === session.id}
309
+ text="Resume"
310
+ />
311
+ {/if}
312
+ </div>
199
313
  </div>
200
314
  <div class="session-stats">
201
315
  <span><strong>{session.messageCount}</strong> messages</span>
@@ -208,7 +322,10 @@
208
322
  <Pill text="Claude Code" classes="pill-source-claude" />
209
323
  {/if}
210
324
  </div>
211
- <div class="session-duration">Created {formatDate(session.created)}</div>
325
+ <div class="session-meta-row">
326
+ <span class="session-modified">Last updated {formatDate(session.modified)}</span>
327
+ <span class="session-duration">Created {formatDate(session.created)}</span>
328
+ </div>
212
329
  </a>
213
330
  {/each}
214
331
  </div>
@@ -243,11 +360,45 @@
243
360
  gap: var(--space-3);
244
361
  }
245
362
 
363
+ .session-card-actions {
364
+ display: flex;
365
+ align-items: center;
366
+ gap: var(--space-2);
367
+ flex-shrink: 0;
368
+ }
369
+
370
+ .connect-dot {
371
+ display: inline-block;
372
+ width: 6px;
373
+ height: 6px;
374
+ border-radius: 50%;
375
+ background: #4ade80;
376
+ margin-right: 2px;
377
+ flex-shrink: 0;
378
+ }
379
+
380
+ .session-meta-row {
381
+ display: flex;
382
+ justify-content: space-between;
383
+ align-items: center;
384
+ gap: var(--space-2);
385
+ }
386
+
387
+ .session-duration,
388
+ .session-modified {
389
+ font-size: 0.75rem;
390
+ color: var(--color-text-tertiary, #888);
391
+ }
392
+
246
393
  @media (max-width: 480px) {
247
394
  .chat-session-header-top {
248
395
  flex-direction: column;
249
396
  align-items: flex-start;
250
397
  gap: var(--space-2);
251
398
  }
399
+
400
+ .session-card-actions {
401
+ flex-wrap: wrap;
402
+ }
252
403
  }
253
404
  </style>