@juspay/shooter 1.0.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 (488) 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.BhZOCxO4.css} +1 -1
  6. package/build/client/_app/immutable/assets/0.BhZOCxO4.css.br +0 -0
  7. package/build/client/_app/immutable/assets/0.BhZOCxO4.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/1.BYutk3aU.css +1 -0
  9. package/build/client/_app/immutable/assets/1.BYutk3aU.css.br +0 -0
  10. package/build/client/_app/immutable/assets/1.BYutk3aU.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
  12. package/build/client/_app/immutable/assets/3.DGDHCVnW.css +1 -0
  13. package/build/client/_app/immutable/assets/3.DGDHCVnW.css.br +0 -0
  14. package/build/client/_app/immutable/assets/3.DGDHCVnW.css.gz +0 -0
  15. package/build/client/_app/immutable/assets/4.BFUut--w.css +1 -0
  16. package/build/client/_app/immutable/assets/4.BFUut--w.css.br +0 -0
  17. package/build/client/_app/immutable/assets/4.BFUut--w.css.gz +0 -0
  18. package/build/client/_app/immutable/assets/5.BTOx7yt7.css +1 -0
  19. package/build/client/_app/immutable/assets/5.BTOx7yt7.css.br +0 -0
  20. package/build/client/_app/immutable/assets/5.BTOx7yt7.css.gz +0 -0
  21. package/build/client/_app/immutable/assets/6.eZGZN-BF.css +1 -0
  22. package/build/client/_app/immutable/assets/6.eZGZN-BF.css.br +0 -0
  23. package/build/client/_app/immutable/assets/6.eZGZN-BF.css.gz +0 -0
  24. package/build/client/_app/immutable/assets/7.DwS5ZHBh.css +1 -0
  25. package/build/client/_app/immutable/assets/7.DwS5ZHBh.css.br +0 -0
  26. package/build/client/_app/immutable/assets/7.DwS5ZHBh.css.gz +0 -0
  27. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css +1 -0
  28. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.br +0 -0
  29. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.gz +0 -0
  30. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css +1 -0
  31. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.br +0 -0
  32. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.gz +0 -0
  33. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css +1 -0
  34. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.br +0 -0
  35. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.gz +0 -0
  36. package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
  37. package/build/client/_app/immutable/chunks/B-K5Sh65.js +1 -0
  38. package/build/client/_app/immutable/chunks/B-K5Sh65.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/B-K5Sh65.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/B5NAKyil.js +20 -0
  41. package/build/client/_app/immutable/chunks/B5NAKyil.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/B5NAKyil.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/B8XegpSE.js +1 -0
  44. package/build/client/_app/immutable/chunks/B8XegpSE.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/B8XegpSE.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/B8zoBsv3.js +6 -0
  47. package/build/client/_app/immutable/chunks/B8zoBsv3.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/B8zoBsv3.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/BLszSzTT.js +1 -0
  50. package/build/client/_app/immutable/chunks/BLszSzTT.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/BLszSzTT.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/BOYo8yTr.js +1 -0
  53. package/build/client/_app/immutable/chunks/BOYo8yTr.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/BOYo8yTr.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BYqGCrTe.js +1 -0
  57. package/build/client/_app/immutable/chunks/BYqGCrTe.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BYqGCrTe.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
  60. package/build/client/_app/immutable/chunks/Bu1aqm5j.js +1 -0
  61. package/build/client/_app/immutable/chunks/Bu1aqm5j.js.br +0 -0
  62. package/build/client/_app/immutable/chunks/Bu1aqm5j.js.gz +0 -0
  63. package/build/client/_app/immutable/chunks/C4mLaWWx.js +1 -0
  64. package/build/client/_app/immutable/chunks/C4mLaWWx.js.br +0 -0
  65. package/build/client/_app/immutable/chunks/C4mLaWWx.js.gz +0 -0
  66. package/build/client/_app/immutable/chunks/CQjSATpv.js +61 -0
  67. package/build/client/_app/immutable/chunks/CQjSATpv.js.br +0 -0
  68. package/build/client/_app/immutable/chunks/CQjSATpv.js.gz +0 -0
  69. package/build/client/_app/immutable/chunks/CSoRdFvv.js +1 -0
  70. package/build/client/_app/immutable/chunks/CSoRdFvv.js.br +0 -0
  71. package/build/client/_app/immutable/chunks/CSoRdFvv.js.gz +0 -0
  72. package/build/client/_app/immutable/chunks/CZHsSL_X.js +1 -0
  73. package/build/client/_app/immutable/chunks/CZHsSL_X.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/CZHsSL_X.js.gz +0 -0
  75. package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
  76. package/build/client/_app/immutable/chunks/DSU1n5N_.js +1 -0
  77. package/build/client/_app/immutable/chunks/DSU1n5N_.js.br +0 -0
  78. package/build/client/_app/immutable/chunks/DSU1n5N_.js.gz +0 -0
  79. package/build/client/_app/immutable/chunks/DVkn4r72.js +1 -0
  80. package/build/client/_app/immutable/chunks/DVkn4r72.js.br +0 -0
  81. package/build/client/_app/immutable/chunks/DVkn4r72.js.gz +0 -0
  82. package/build/client/_app/immutable/chunks/DjsDGxCa.js +41 -0
  83. package/build/client/_app/immutable/chunks/DjsDGxCa.js.br +0 -0
  84. package/build/client/_app/immutable/chunks/DjsDGxCa.js.gz +0 -0
  85. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/UJOiqIYE.js +1 -0
  87. package/build/client/_app/immutable/chunks/UJOiqIYE.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/UJOiqIYE.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/r0JawsZc.js +2 -0
  90. package/build/client/_app/immutable/chunks/r0JawsZc.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/r0JawsZc.js.gz +0 -0
  92. package/build/client/_app/immutable/entry/app.Z3zMnuSx.js +2 -0
  93. package/build/client/_app/immutable/entry/app.Z3zMnuSx.js.br +0 -0
  94. package/build/client/_app/immutable/entry/app.Z3zMnuSx.js.gz +0 -0
  95. package/build/client/_app/immutable/entry/start.Dd-gIP4y.js +1 -0
  96. package/build/client/_app/immutable/entry/start.Dd-gIP4y.js.br +2 -0
  97. package/build/client/_app/immutable/entry/start.Dd-gIP4y.js.gz +0 -0
  98. package/build/client/_app/immutable/nodes/0.D2YR8tTD.js +1 -0
  99. package/build/client/_app/immutable/nodes/0.D2YR8tTD.js.br +0 -0
  100. package/build/client/_app/immutable/nodes/0.D2YR8tTD.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/1.B3m6rO4C.js +1 -0
  102. package/build/client/_app/immutable/nodes/1.B3m6rO4C.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/1.B3m6rO4C.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/2.CyRB2euU.js +1 -0
  105. package/build/client/_app/immutable/nodes/2.CyRB2euU.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/2.CyRB2euU.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/3.3yohCM25.js +3 -0
  108. package/build/client/_app/immutable/nodes/3.3yohCM25.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/3.3yohCM25.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/4.DEAcwl7l.js +1 -0
  111. package/build/client/_app/immutable/nodes/4.DEAcwl7l.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/4.DEAcwl7l.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/5.C6bLGWQR.js +4 -0
  114. package/build/client/_app/immutable/nodes/5.C6bLGWQR.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/5.C6bLGWQR.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/6.ByTzlA2D.js +2 -0
  117. package/build/client/_app/immutable/nodes/6.ByTzlA2D.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/6.ByTzlA2D.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/7.BPMfwzd2.js +2 -0
  120. package/build/client/_app/immutable/nodes/7.BPMfwzd2.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/7.BPMfwzd2.js.gz +0 -0
  122. package/build/client/_app/version.json +1 -1
  123. package/build/client/_app/version.json.br +0 -0
  124. package/build/client/_app/version.json.gz +0 -0
  125. package/build/client/favicon.svg.gz +0 -0
  126. package/build/client/manifest.json +13 -0
  127. package/build/client/manifest.json.br +0 -0
  128. package/build/client/manifest.json.gz +0 -0
  129. package/build/pty-holder.cjs +37 -8
  130. package/build/server/chunks/0-Vk38tI2J.js +9 -0
  131. package/build/server/chunks/0-Vk38tI2J.js.map +1 -0
  132. package/build/server/chunks/1-BvYQX5MR.js +9 -0
  133. package/build/server/chunks/1-BvYQX5MR.js.map +1 -0
  134. package/build/server/chunks/2-Cl7R4Qk2.js +9 -0
  135. package/build/server/chunks/2-Cl7R4Qk2.js.map +1 -0
  136. package/build/server/chunks/3-Ck7ewhOX.js +9 -0
  137. package/build/server/chunks/3-Ck7ewhOX.js.map +1 -0
  138. package/build/server/chunks/4-CnDeRm2Z.js +9 -0
  139. package/build/server/chunks/4-CnDeRm2Z.js.map +1 -0
  140. package/build/server/chunks/5-IxitzEvN.js +9 -0
  141. package/build/server/chunks/5-IxitzEvN.js.map +1 -0
  142. package/build/server/chunks/6-CyZ3r1iS.js +9 -0
  143. package/build/server/chunks/6-CyZ3r1iS.js.map +1 -0
  144. package/build/server/chunks/7-BmI7du46.js +9 -0
  145. package/build/server/chunks/7-BmI7du46.js.map +1 -0
  146. package/build/server/chunks/Button-Cs1aE6ka.js +80 -0
  147. package/build/server/chunks/Button-Cs1aE6ka.js.map +1 -0
  148. package/build/server/chunks/EmptyState-DDFH1K8g.js +26 -0
  149. package/build/server/chunks/EmptyState-DDFH1K8g.js.map +1 -0
  150. package/build/server/chunks/Icon-CEUrotA6.js +36 -0
  151. package/build/server/chunks/Icon-CEUrotA6.js.map +1 -0
  152. package/build/server/chunks/Shimmer-DB8W1zt6.js +10 -0
  153. package/build/server/chunks/Shimmer-DB8W1zt6.js.map +1 -0
  154. package/build/server/chunks/_error.svelte-uCOJNxvr.js +39 -0
  155. package/build/server/chunks/_error.svelte-uCOJNxvr.js.map +1 -0
  156. package/build/server/chunks/_layout.svelte-CtWmEJwe.js +56 -0
  157. package/build/server/chunks/_layout.svelte-CtWmEJwe.js.map +1 -0
  158. package/build/server/chunks/_page.svelte-BcZaKdX9.js +45 -0
  159. package/build/server/chunks/_page.svelte-BcZaKdX9.js.map +1 -0
  160. package/build/server/chunks/_page.svelte-BdYynOck.js +85 -0
  161. package/build/server/chunks/_page.svelte-BdYynOck.js.map +1 -0
  162. package/build/server/chunks/_page.svelte-BgevQjq1.js +101 -0
  163. package/build/server/chunks/_page.svelte-BgevQjq1.js.map +1 -0
  164. package/build/server/chunks/_page.svelte-CVq6tRb3.js +550 -0
  165. package/build/server/chunks/_page.svelte-CVq6tRb3.js.map +1 -0
  166. package/build/server/chunks/_page.svelte-CxWcQ0Am.js +651 -0
  167. package/build/server/chunks/_page.svelte-CxWcQ0Am.js.map +1 -0
  168. package/build/server/chunks/_page.svelte-DO4oa_LY.js +44 -0
  169. package/build/server/chunks/_page.svelte-DO4oa_LY.js.map +1 -0
  170. package/build/server/chunks/{_server.ts-CbDRDIoP.js → _server.ts-BStnNIcq.js} +9 -11
  171. package/build/server/chunks/_server.ts-BStnNIcq.js.map +1 -0
  172. package/build/server/chunks/{_server.ts-DRVbgm6k.js → _server.ts-CAxsWKvS.js} +22 -25
  173. package/build/server/chunks/_server.ts-CAxsWKvS.js.map +1 -0
  174. package/build/server/chunks/{_server.ts-CPa6DgIt.js → _server.ts-COu0vNpd.js} +6 -6
  175. package/build/server/chunks/_server.ts-COu0vNpd.js.map +1 -0
  176. package/build/server/chunks/{_server.ts-C29xzfaw.js → _server.ts-CTpcLUH8.js} +10 -10
  177. package/build/server/chunks/_server.ts-CTpcLUH8.js.map +1 -0
  178. package/build/server/chunks/{_server.ts-D4MNi4cD.js → _server.ts-Cf84YIaW.js} +3 -3
  179. package/build/server/chunks/{_server.ts-D4MNi4cD.js.map → _server.ts-Cf84YIaW.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-BL2FGb5Z.js → _server.ts-Ch-6iOHp.js} +99 -53
  181. package/build/server/chunks/_server.ts-Ch-6iOHp.js.map +1 -0
  182. package/build/server/chunks/_server.ts-CtH0dhUp.js +71 -0
  183. package/build/server/chunks/_server.ts-CtH0dhUp.js.map +1 -0
  184. package/build/server/chunks/_server.ts-DB_Kg97c.js +73 -0
  185. package/build/server/chunks/_server.ts-DB_Kg97c.js.map +1 -0
  186. package/build/server/chunks/{_server.ts-DfajWaqh.js → _server.ts-DV8zTCF9.js} +7 -9
  187. package/build/server/chunks/_server.ts-DV8zTCF9.js.map +1 -0
  188. package/build/server/chunks/_server.ts-DYpJImqd.js +99 -0
  189. package/build/server/chunks/_server.ts-DYpJImqd.js.map +1 -0
  190. package/build/server/chunks/{_server.ts-ColfDHW8.js → _server.ts-DYvb9ijZ.js} +21 -10
  191. package/build/server/chunks/_server.ts-DYvb9ijZ.js.map +1 -0
  192. package/build/server/chunks/{_server.ts-Cv_OrRuL.js → _server.ts-Deok2y88.js} +209 -34
  193. package/build/server/chunks/_server.ts-Deok2y88.js.map +1 -0
  194. package/build/server/chunks/{_server.ts-y9-WYDMa.js → _server.ts-WhTJBEJy.js} +5 -4
  195. package/build/server/chunks/{_server.ts-y9-WYDMa.js.map → _server.ts-WhTJBEJy.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-BjOJsoy4.js → _server.ts-XzT2UHM1.js} +6 -5
  197. package/build/server/chunks/_server.ts-XzT2UHM1.js.map +1 -0
  198. package/build/server/chunks/{_server.ts-BgdjBZco.js → _server.ts-tSpgyl1D.js} +7 -5
  199. package/build/server/chunks/_server.ts-tSpgyl1D.js.map +1 -0
  200. package/build/server/chunks/{_server.ts-BihKSdj_.js → _server.ts-vekTmWAx.js} +8 -8
  201. package/build/server/chunks/_server.ts-vekTmWAx.js.map +1 -0
  202. package/build/server/chunks/{auth-CEgFis71.js → auth-DeCdZ83n.js} +2 -2
  203. package/build/server/chunks/{auth-CEgFis71.js.map → auth-DeCdZ83n.js.map} +1 -1
  204. package/build/server/chunks/client-BdGHe_hY.js +25 -0
  205. package/build/server/chunks/client-BdGHe_hY.js.map +1 -0
  206. package/build/server/chunks/client2-CCBGA-2V.js +7 -0
  207. package/build/server/chunks/client2-CCBGA-2V.js.map +1 -0
  208. package/build/server/chunks/error-DDXB3duW.js +12 -0
  209. package/build/server/chunks/error-DDXB3duW.js.map +1 -0
  210. package/build/server/chunks/{exports-CJ0Q5XmL.js → index-DwaY1cAm.js} +1111 -1634
  211. package/build/server/chunks/index-DwaY1cAm.js.map +1 -0
  212. package/build/server/chunks/index-server-CrDaL06Y.js +9 -0
  213. package/build/server/chunks/index-server-CrDaL06Y.js.map +1 -0
  214. package/build/server/chunks/index2-CgclKpUj.js +58 -0
  215. package/build/server/chunks/index2-CgclKpUj.js.map +1 -0
  216. package/build/server/chunks/{library-apns-BHxLmuIx.js → library-apns-BqJbvSKh.js} +4 -4
  217. package/build/server/chunks/library-apns-BqJbvSKh.js.map +1 -0
  218. package/build/server/chunks/markdown-W_mTBct0.js +8 -0
  219. package/build/server/chunks/markdown-W_mTBct0.js.map +1 -0
  220. package/build/server/chunks/opencode-db-path-DcfhJtJy.js +15 -0
  221. package/build/server/chunks/opencode-db-path-DcfhJtJy.js.map +1 -0
  222. package/build/server/chunks/{pty-manager-C0FhBiVq.js → pty-manager-BQVB7IVj.js} +155 -326
  223. package/build/server/chunks/pty-manager-BQVB7IVj.js.map +1 -0
  224. package/build/server/chunks/root-DDSnEAZv.js +1171 -0
  225. package/build/server/chunks/root-DDSnEAZv.js.map +1 -0
  226. package/build/server/chunks/{shared-server-BDY8jh20.js → shared-server-sSGG17Df.js} +2 -3
  227. package/build/server/chunks/{shared-server-BDY8jh20.js.map → shared-server-sSGG17Df.js.map} +1 -1
  228. package/build/server/chunks/state.svelte-hBbXlUak.js +11 -0
  229. package/build/server/chunks/state.svelte-hBbXlUak.js.map +1 -0
  230. package/build/server/chunks/stores-DHNzYNpX.js +28 -0
  231. package/build/server/chunks/stores-DHNzYNpX.js.map +1 -0
  232. package/build/server/index.js +1085 -2242
  233. package/build/server/index.js.map +1 -1
  234. package/build/server/manifest.js +39 -25
  235. package/build/server/manifest.js.map +1 -1
  236. package/package.json +32 -9
  237. package/scripts/fix-generated-types.sh +37 -0
  238. package/scripts/homebrew/shooter.rb +51 -0
  239. package/scripts/install.sh +348 -186
  240. package/scripts/setup.cjs +215 -45
  241. package/server.ts +114 -71
  242. package/src/app.css +12 -3
  243. package/src/app.d.ts +13 -20
  244. package/src/app.html +3 -2
  245. package/src/generated/types/API.ts +280 -0
  246. package/src/generated/types/APN.ts +186 -203
  247. package/src/generated/types/CLI.ts +18 -25
  248. package/src/generated/types/Client.ts +589 -0
  249. package/src/generated/types/Config.ts +53 -0
  250. package/src/generated/types/Holder.ts +638 -0
  251. package/src/generated/types/JWT.ts +39 -50
  252. package/src/generated/types/Notification.ts +426 -0
  253. package/src/generated/types/OpenCode.ts +356 -0
  254. package/src/generated/types/Sessions.ts +570 -0
  255. package/src/generated/types/Terminal.ts +2184 -2071
  256. package/src/generated/types/WsProtocol.ts +2004 -0
  257. package/src/generated/types/index.ts +9 -3
  258. package/src/lib/env.ts +29 -0
  259. package/src/lib/modules/client/common/cache.ts +10 -2
  260. package/src/lib/modules/client/common/config-guard.ts +37 -5
  261. package/src/lib/modules/client/common/error.ts +10 -0
  262. package/src/lib/modules/client/common/index.ts +6 -5
  263. package/src/lib/modules/client/common/markdown.ts +22 -1
  264. package/src/lib/modules/client/common/native-bridge.ts +28 -20
  265. package/src/lib/modules/client/common/time.ts +13 -11
  266. package/src/lib/modules/client/terminal/ChatView.svelte +354 -74
  267. package/src/lib/modules/client/terminal/CommandPalette.svelte +3 -2
  268. package/src/lib/modules/client/terminal/ConnectionStatus.svelte +7 -1
  269. package/src/lib/modules/client/terminal/LaunchSheet.svelte +147 -84
  270. package/src/lib/modules/client/terminal/QuickKeys.svelte +3 -1
  271. package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +2 -5
  272. package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +27 -24
  273. package/src/lib/modules/client/terminal/xterm-wrapper.ts +74 -45
  274. package/src/lib/modules/server/apn/library-apns.ts +3 -2
  275. package/src/lib/modules/server/apn/notification-history.ts +2 -13
  276. package/src/lib/modules/server/apn/notification-sessions.ts +3 -13
  277. package/src/lib/modules/server/apn/pending-requests.ts +3 -8
  278. package/src/lib/modules/server/apn/types.ts +5 -4
  279. package/src/lib/modules/server/cli/index.ts +3 -2
  280. package/src/lib/modules/server/fcm/fcm-service.ts +8 -6
  281. package/src/lib/modules/server/sessions/jsonl-parser.ts +3 -3
  282. package/src/lib/modules/server/sessions/jsonl-reader.ts +86 -26
  283. package/src/lib/modules/server/sessions/opencode-db-path.ts +26 -0
  284. package/src/lib/modules/server/sessions/opencode-reader.ts +13 -15
  285. package/src/lib/modules/server/sessions/process-detector.ts +103 -0
  286. package/src/lib/modules/server/sessions/types.ts +11 -22
  287. package/src/lib/modules/server/terminal/holder-client.ts +272 -248
  288. package/src/lib/modules/server/terminal/opencode-watcher.ts +547 -556
  289. package/src/lib/modules/server/terminal/pty-holder.cjs +37 -8
  290. package/src/lib/modules/server/terminal/pty-manager.ts +157 -115
  291. package/src/lib/modules/server/terminal/session-watcher.ts +6 -4
  292. package/src/lib/modules/server/terminal/terminal-store.ts +131 -128
  293. package/src/lib/modules/server/utils/error.ts +9 -0
  294. package/src/lib/modules/server/ws/events-handler.ts +12 -6
  295. package/src/lib/modules/server/ws/keepalive.ts +86 -69
  296. package/src/lib/modules/server/ws/server.ts +43 -37
  297. package/src/lib/modules/server/ws/session-handler.ts +332 -147
  298. package/src/lib/modules/server/ws/terminal-handler.ts +29 -17
  299. package/src/lib/modules/server/ws/ticket-store.ts +29 -26
  300. package/src/lib/theme.css +30 -0
  301. package/src/lib/types/config.ts +1 -6
  302. package/src/routes/+error.svelte +94 -0
  303. package/src/routes/+layout.svelte +66 -31
  304. package/src/routes/+page.svelte +25 -22
  305. package/src/routes/api/debug/+server.ts +3 -1
  306. package/src/routes/api/device-token/+server.ts +60 -60
  307. package/src/routes/api/health/+server.ts +81 -73
  308. package/src/routes/api/notify/+server.ts +115 -68
  309. package/src/routes/api/qr-config/+server.ts +30 -32
  310. package/src/routes/api/response/+server.ts +9 -4
  311. package/src/routes/api/sessions/+server.ts +15 -5
  312. package/src/routes/api/sessions/connect/+server.ts +125 -0
  313. package/src/routes/api/sessions/detect/+server.ts +27 -0
  314. package/src/routes/api/terminals/+server.ts +26 -24
  315. package/src/routes/api/terminals/[id]/+server.ts +13 -7
  316. package/src/routes/api/terminals/[id]/paste-image/+server.ts +54 -52
  317. package/src/routes/api/terminals/[id]/resize/+server.ts +6 -3
  318. package/src/routes/api/webhook/+server.ts +8 -10
  319. package/src/routes/api/ws-status/+server.ts +7 -5
  320. package/src/routes/api/ws-ticket/+server.ts +42 -41
  321. package/src/routes/config/+page.svelte +149 -75
  322. package/src/routes/project/+page.svelte +165 -35
  323. package/src/routes/session/[id]/+page.svelte +479 -283
  324. package/src/routes/terminals/+page.svelte +58 -45
  325. package/src/routes/terminals/[id]/+page.svelte +223 -91
  326. package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
  327. package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.gz +0 -0
  328. package/build/client/_app/immutable/assets/3.C0uFg0IS.css +0 -1
  329. package/build/client/_app/immutable/assets/3.C0uFg0IS.css.br +0 -0
  330. package/build/client/_app/immutable/assets/3.C0uFg0IS.css.gz +0 -0
  331. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css +0 -1
  332. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.br +0 -0
  333. package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
  334. package/build/client/_app/immutable/assets/5.DRjApZQW.css +0 -1
  335. package/build/client/_app/immutable/assets/5.DRjApZQW.css.br +0 -0
  336. package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
  337. package/build/client/_app/immutable/assets/6.AraZrY8I.css +0 -1
  338. package/build/client/_app/immutable/assets/6.AraZrY8I.css.br +0 -0
  339. package/build/client/_app/immutable/assets/6.AraZrY8I.css.gz +0 -0
  340. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css +0 -1
  341. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.br +0 -0
  342. package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.gz +0 -0
  343. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css +0 -1
  344. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.br +0 -0
  345. package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
  346. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +0 -1
  347. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.br +0 -0
  348. package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.gz +0 -0
  349. package/build/client/_app/immutable/chunks/BNJphC1q.js +0 -56
  350. package/build/client/_app/immutable/chunks/BNJphC1q.js.br +0 -0
  351. package/build/client/_app/immutable/chunks/BNJphC1q.js.gz +0 -0
  352. package/build/client/_app/immutable/chunks/Bvk7mfPM.js +0 -1
  353. package/build/client/_app/immutable/chunks/Bvk7mfPM.js.br +0 -0
  354. package/build/client/_app/immutable/chunks/Bvk7mfPM.js.gz +0 -0
  355. package/build/client/_app/immutable/chunks/CAokzuPQ.js +0 -1
  356. package/build/client/_app/immutable/chunks/CAokzuPQ.js.br +0 -0
  357. package/build/client/_app/immutable/chunks/CAokzuPQ.js.gz +0 -0
  358. package/build/client/_app/immutable/chunks/CGLrx-H5.js +0 -1
  359. package/build/client/_app/immutable/chunks/CGLrx-H5.js.br +0 -0
  360. package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
  361. package/build/client/_app/immutable/chunks/CgCpWzEA.js +0 -1
  362. package/build/client/_app/immutable/chunks/CgCpWzEA.js.br +0 -0
  363. package/build/client/_app/immutable/chunks/CgCpWzEA.js.gz +0 -0
  364. package/build/client/_app/immutable/chunks/Cjwk_cGO.js +0 -6
  365. package/build/client/_app/immutable/chunks/Cjwk_cGO.js.br +0 -0
  366. package/build/client/_app/immutable/chunks/Cjwk_cGO.js.gz +0 -0
  367. package/build/client/_app/immutable/chunks/CtQ8EED1.js +0 -11
  368. package/build/client/_app/immutable/chunks/CtQ8EED1.js.br +0 -0
  369. package/build/client/_app/immutable/chunks/CtQ8EED1.js.gz +0 -0
  370. package/build/client/_app/immutable/chunks/DERQCisl.js +0 -1
  371. package/build/client/_app/immutable/chunks/DERQCisl.js.br +0 -0
  372. package/build/client/_app/immutable/chunks/DERQCisl.js.gz +0 -0
  373. package/build/client/_app/immutable/chunks/DKrg8TQs.js +0 -1
  374. package/build/client/_app/immutable/chunks/DKrg8TQs.js.br +0 -0
  375. package/build/client/_app/immutable/chunks/DKrg8TQs.js.gz +0 -0
  376. package/build/client/_app/immutable/chunks/Dkkpz_4D.js +0 -126
  377. package/build/client/_app/immutable/chunks/Dkkpz_4D.js.br +0 -0
  378. package/build/client/_app/immutable/chunks/Dkkpz_4D.js.gz +0 -0
  379. package/build/client/_app/immutable/chunks/DoczjQhA.js +0 -1
  380. package/build/client/_app/immutable/chunks/DoczjQhA.js.br +0 -0
  381. package/build/client/_app/immutable/chunks/DoczjQhA.js.gz +0 -0
  382. package/build/client/_app/immutable/chunks/RpcNruLP.js +0 -2
  383. package/build/client/_app/immutable/chunks/RpcNruLP.js.br +0 -0
  384. package/build/client/_app/immutable/chunks/RpcNruLP.js.gz +0 -0
  385. package/build/client/_app/immutable/chunks/a-St0Zwo.js +0 -1
  386. package/build/client/_app/immutable/chunks/a-St0Zwo.js.br +0 -0
  387. package/build/client/_app/immutable/chunks/a-St0Zwo.js.gz +0 -0
  388. package/build/client/_app/immutable/chunks/bo70OQUZ.js +0 -1
  389. package/build/client/_app/immutable/chunks/bo70OQUZ.js.br +0 -0
  390. package/build/client/_app/immutable/chunks/bo70OQUZ.js.gz +0 -0
  391. package/build/client/_app/immutable/entry/app.QvGgdvTI.js +0 -2
  392. package/build/client/_app/immutable/entry/app.QvGgdvTI.js.br +0 -0
  393. package/build/client/_app/immutable/entry/app.QvGgdvTI.js.gz +0 -0
  394. package/build/client/_app/immutable/entry/start.BntDNRMC.js +0 -1
  395. package/build/client/_app/immutable/entry/start.BntDNRMC.js.br +0 -0
  396. package/build/client/_app/immutable/entry/start.BntDNRMC.js.gz +0 -0
  397. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js +0 -1
  398. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.br +0 -0
  399. package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.gz +0 -0
  400. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js +0 -1
  401. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.br +0 -0
  402. package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.gz +0 -0
  403. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js +0 -1
  404. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.br +0 -0
  405. package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.gz +0 -0
  406. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js +0 -3
  407. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.br +0 -0
  408. package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.gz +0 -0
  409. package/build/client/_app/immutable/nodes/4.D-cIe70D.js +0 -1
  410. package/build/client/_app/immutable/nodes/4.D-cIe70D.js.br +0 -0
  411. package/build/client/_app/immutable/nodes/4.D-cIe70D.js.gz +0 -0
  412. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js +0 -1
  413. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.br +0 -0
  414. package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.gz +0 -0
  415. package/build/client/_app/immutable/nodes/6.BB7QE48r.js +0 -2
  416. package/build/client/_app/immutable/nodes/6.BB7QE48r.js.br +0 -0
  417. package/build/client/_app/immutable/nodes/6.BB7QE48r.js.gz +0 -0
  418. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js +0 -2
  419. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.br +0 -0
  420. package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.gz +0 -0
  421. package/build/client/manifest.webmanifest +0 -1
  422. package/build/client/registerSW.js +0 -1
  423. package/build/client/registerSW.js.br +0 -0
  424. package/build/client/registerSW.js.gz +0 -0
  425. package/build/client/sw.js +0 -222
  426. package/build/client/sw.js.br +0 -0
  427. package/build/client/sw.js.gz +0 -0
  428. package/build/client/workbox-5119daf5.js +0 -3395
  429. package/build/client/workbox-5119daf5.js.br +0 -0
  430. package/build/client/workbox-5119daf5.js.gz +0 -0
  431. package/build/server/chunks/0-q2IUp76Y.js +0 -9
  432. package/build/server/chunks/0-q2IUp76Y.js.map +0 -1
  433. package/build/server/chunks/1-CU50G5wZ.js +0 -9
  434. package/build/server/chunks/1-CU50G5wZ.js.map +0 -1
  435. package/build/server/chunks/2-D01t9s8T.js +0 -9
  436. package/build/server/chunks/2-D01t9s8T.js.map +0 -1
  437. package/build/server/chunks/3-5PUQ04wC.js +0 -9
  438. package/build/server/chunks/3-5PUQ04wC.js.map +0 -1
  439. package/build/server/chunks/4-e7gywnSG.js +0 -9
  440. package/build/server/chunks/4-e7gywnSG.js.map +0 -1
  441. package/build/server/chunks/5-CA1SA6KZ.js +0 -9
  442. package/build/server/chunks/5-CA1SA6KZ.js.map +0 -1
  443. package/build/server/chunks/6-71H221sV.js +0 -9
  444. package/build/server/chunks/6-71H221sV.js.map +0 -1
  445. package/build/server/chunks/7-Bo-vmdyz.js +0 -9
  446. package/build/server/chunks/7-Bo-vmdyz.js.map +0 -1
  447. package/build/server/chunks/_layout.svelte-SFHOxs74.js +0 -132
  448. package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +0 -1
  449. package/build/server/chunks/_page.svelte-B4w-2wD-.js +0 -120
  450. package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +0 -1
  451. package/build/server/chunks/_page.svelte-B_qAXjkh.js +0 -213
  452. package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +0 -1
  453. package/build/server/chunks/_page.svelte-CsF1_TRG.js +0 -50
  454. package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +0 -1
  455. package/build/server/chunks/_page.svelte-DJC6U-P0.js +0 -68
  456. package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +0 -1
  457. package/build/server/chunks/_page.svelte-DQ6HBtsz.js +0 -407
  458. package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +0 -1
  459. package/build/server/chunks/_page.svelte-LbhhjP21.js +0 -148
  460. package/build/server/chunks/_page.svelte-LbhhjP21.js.map +0 -1
  461. package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +0 -1
  462. package/build/server/chunks/_server.ts-BgdjBZco.js.map +0 -1
  463. package/build/server/chunks/_server.ts-BihKSdj_.js.map +0 -1
  464. package/build/server/chunks/_server.ts-BjOJsoy4.js.map +0 -1
  465. package/build/server/chunks/_server.ts-C29xzfaw.js.map +0 -1
  466. package/build/server/chunks/_server.ts-CPa6DgIt.js.map +0 -1
  467. package/build/server/chunks/_server.ts-CbDRDIoP.js.map +0 -1
  468. package/build/server/chunks/_server.ts-Cl1OEWL4.js +0 -54
  469. package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +0 -1
  470. package/build/server/chunks/_server.ts-ColfDHW8.js.map +0 -1
  471. package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +0 -1
  472. package/build/server/chunks/_server.ts-DRVbgm6k.js.map +0 -1
  473. package/build/server/chunks/_server.ts-DfajWaqh.js.map +0 -1
  474. package/build/server/chunks/client-CxCatAKr.js +0 -255
  475. package/build/server/chunks/client-CxCatAKr.js.map +0 -1
  476. package/build/server/chunks/error.svelte-BqdwMWdK.js +0 -26
  477. package/build/server/chunks/error.svelte-BqdwMWdK.js.map +0 -1
  478. package/build/server/chunks/exports-CJ0Q5XmL.js.map +0 -1
  479. package/build/server/chunks/index2-DAxIoAO-.js +0 -36
  480. package/build/server/chunks/index2-DAxIoAO-.js.map +0 -1
  481. package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +0 -137
  482. package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +0 -1
  483. package/build/server/chunks/library-apns-BHxLmuIx.js.map +0 -1
  484. package/build/server/chunks/markdown-Bxrl3cCF.js +0 -1241
  485. package/build/server/chunks/markdown-Bxrl3cCF.js.map +0 -1
  486. package/build/server/chunks/pty-manager-C0FhBiVq.js.map +0 -1
  487. package/build/server/chunks/stores-D0HorpgL.js +0 -36
  488. package/build/server/chunks/stores-D0HorpgL.js.map +0 -1
@@ -0,0 +1,638 @@
1
+ import {
2
+ isJSON,
3
+ decodeNumber,
4
+ _decodeNumber,
5
+ decodeBoolean,
6
+ _decodeBoolean,
7
+ decodeString,
8
+ _decodeString,
9
+ } from 'type-decoder';
10
+
11
+ /**
12
+ * @type { ConnectResult }
13
+ * @description Result returned after successfully connecting to a PTY holder process and completing the info+scrollback handshake
14
+ */
15
+ export type ConnectResult = {
16
+ /**
17
+ * @description OS process ID of the PTY child process
18
+ * @type { number }
19
+ * @memberof ConnectResult
20
+ */
21
+ pid: number;
22
+ /**
23
+ * @description Whether the PTY process has already exited
24
+ * @type { boolean }
25
+ * @memberof ConnectResult
26
+ */
27
+ exited: boolean;
28
+ /**
29
+ * @description Process exit code if exited, or null if still running
30
+ * @type { number }
31
+ * @memberof ConnectResult
32
+ */
33
+ exitCode: number | null;
34
+ /**
35
+ * @description Scrollback buffer content replayed on connect
36
+ * @type { string }
37
+ * @memberof ConnectResult
38
+ */
39
+ scrollback: string;
40
+ };
41
+
42
+ export function decodeConnectResult(rawInput: unknown): ConnectResult | null {
43
+ if (isJSON(rawInput)) {
44
+ const decodedPid = decodeNumber(rawInput['pid']);
45
+ const decodedExited = decodeBoolean(rawInput['exited']);
46
+ const decodedExitCode = decodeNumber(rawInput['exitCode']);
47
+ const decodedScrollback = decodeString(rawInput['scrollback']);
48
+
49
+ if (decodedPid === null || decodedExited === null || decodedScrollback === null) {
50
+ return null;
51
+ }
52
+
53
+ return {
54
+ pid: decodedPid,
55
+ exited: decodedExited,
56
+ exitCode: decodedExitCode,
57
+ scrollback: decodedScrollback,
58
+ };
59
+ }
60
+ return null;
61
+ }
62
+
63
+ /**
64
+ * @type { IncomingActivityMessage }
65
+ * @description Terminal activity state change (active/idle)
66
+ */
67
+ export type IncomingActivityMessage = {
68
+ /**
69
+ * @type { string }
70
+ * @memberof IncomingActivityMessage
71
+ */
72
+ type: string;
73
+ /**
74
+ * @description Whether the terminal is currently producing output
75
+ * @type { boolean }
76
+ * @memberof IncomingActivityMessage
77
+ */
78
+ active: boolean;
79
+ };
80
+
81
+ export function decodeIncomingActivityMessage(rawInput: unknown): IncomingActivityMessage | null {
82
+ if (isJSON(rawInput)) {
83
+ const decodedType = decodeString(rawInput['type']);
84
+ const decodedActive = decodeBoolean(rawInput['active']);
85
+
86
+ if (decodedType === null || decodedActive === null) {
87
+ return null;
88
+ }
89
+
90
+ return {
91
+ type: decodedType,
92
+ active: decodedActive,
93
+ };
94
+ }
95
+ return null;
96
+ }
97
+
98
+ /**
99
+ * @type { IncomingExitMessage }
100
+ * @description PTY process has exited
101
+ */
102
+ export type IncomingExitMessage = {
103
+ /**
104
+ * @type { string }
105
+ * @memberof IncomingExitMessage
106
+ */
107
+ type: string;
108
+ /**
109
+ * @description Process exit code
110
+ * @type { number }
111
+ * @memberof IncomingExitMessage
112
+ */
113
+ code: number;
114
+ /**
115
+ * @description Signal that caused the exit
116
+ * @type { string }
117
+ * @memberof IncomingExitMessage
118
+ */
119
+ signal: string;
120
+ };
121
+
122
+ export function decodeIncomingExitMessage(rawInput: unknown): IncomingExitMessage | null {
123
+ if (isJSON(rawInput)) {
124
+ const decodedType = decodeString(rawInput['type']);
125
+ const decodedCode = decodeNumber(rawInput['code']);
126
+ const decodedSignal = decodeString(rawInput['signal']);
127
+
128
+ if (decodedType === null || decodedCode === null || decodedSignal === null) {
129
+ return null;
130
+ }
131
+
132
+ return {
133
+ type: decodedType,
134
+ code: decodedCode,
135
+ signal: decodedSignal,
136
+ };
137
+ }
138
+ return null;
139
+ }
140
+
141
+ /**
142
+ * @type { IncomingOutputMessage }
143
+ * @description PTY output chunk during normal operation
144
+ */
145
+ export type IncomingOutputMessage = {
146
+ /**
147
+ * @type { string }
148
+ * @memberof IncomingOutputMessage
149
+ */
150
+ type: string;
151
+ /**
152
+ * @description Raw PTY output data
153
+ * @type { string }
154
+ * @memberof IncomingOutputMessage
155
+ */
156
+ data: string;
157
+ };
158
+
159
+ export function decodeIncomingOutputMessage(rawInput: unknown): IncomingOutputMessage | null {
160
+ if (isJSON(rawInput)) {
161
+ const decodedType = decodeString(rawInput['type']);
162
+ const decodedData = decodeString(rawInput['data']);
163
+
164
+ if (decodedType === null || decodedData === null) {
165
+ return null;
166
+ }
167
+
168
+ return {
169
+ type: decodedType,
170
+ data: decodedData,
171
+ };
172
+ }
173
+ return null;
174
+ }
175
+
176
+ /**
177
+ * @type { IncomingScrollbackMessage }
178
+ * @description Full scrollback replay sent on connection
179
+ */
180
+ export type IncomingScrollbackMessage = {
181
+ /**
182
+ * @type { string }
183
+ * @memberof IncomingScrollbackMessage
184
+ */
185
+ type: string;
186
+ /**
187
+ * @description Full scrollback buffer content
188
+ * @type { string }
189
+ * @memberof IncomingScrollbackMessage
190
+ */
191
+ data: string;
192
+ };
193
+
194
+ export function decodeIncomingScrollbackMessage(
195
+ rawInput: unknown
196
+ ): IncomingScrollbackMessage | null {
197
+ if (isJSON(rawInput)) {
198
+ const decodedType = decodeString(rawInput['type']);
199
+ const decodedData = decodeString(rawInput['data']);
200
+
201
+ if (decodedType === null || decodedData === null) {
202
+ return null;
203
+ }
204
+
205
+ return {
206
+ type: decodedType,
207
+ data: decodedData,
208
+ };
209
+ }
210
+ return null;
211
+ }
212
+
213
+ /**
214
+ * @type { IncomingInfoMessage }
215
+ * @description Current holder state sent on connection
216
+ */
217
+ export type IncomingInfoMessage = {
218
+ /**
219
+ * @type { string }
220
+ * @memberof IncomingInfoMessage
221
+ */
222
+ type: string;
223
+ /**
224
+ * @description PTY child process ID
225
+ * @type { number }
226
+ * @memberof IncomingInfoMessage
227
+ */
228
+ pid: number;
229
+ /**
230
+ * @description Whether the PTY process has exited
231
+ * @type { boolean }
232
+ * @memberof IncomingInfoMessage
233
+ */
234
+ exited: boolean;
235
+ /**
236
+ * @description Exit code if process has exited
237
+ * @type { number }
238
+ * @memberof IncomingInfoMessage
239
+ */
240
+ exitCode: number;
241
+ };
242
+
243
+ export function decodeIncomingInfoMessage(rawInput: unknown): IncomingInfoMessage | null {
244
+ if (isJSON(rawInput)) {
245
+ const decodedType = decodeString(rawInput['type']);
246
+ const decodedPid = decodeNumber(rawInput['pid']);
247
+ const decodedExited = decodeBoolean(rawInput['exited']);
248
+ const decodedExitCode = decodeNumber(rawInput['exitCode']);
249
+
250
+ if (
251
+ decodedType === null ||
252
+ decodedPid === null ||
253
+ decodedExited === null ||
254
+ decodedExitCode === null
255
+ ) {
256
+ return null;
257
+ }
258
+
259
+ return {
260
+ type: decodedType,
261
+ pid: decodedPid,
262
+ exited: decodedExited,
263
+ exitCode: decodedExitCode,
264
+ };
265
+ }
266
+ return null;
267
+ }
268
+
269
+ /**
270
+ * @type { IncomingCwdMessage }
271
+ * @description Current working directory change detected via OSC 7
272
+ */
273
+ export type IncomingCwdMessage = {
274
+ /**
275
+ * @type { string }
276
+ * @memberof IncomingCwdMessage
277
+ */
278
+ type: string;
279
+ /**
280
+ * @description Absolute path of the new working directory
281
+ * @type { string }
282
+ * @memberof IncomingCwdMessage
283
+ */
284
+ path: string;
285
+ };
286
+
287
+ export function decodeIncomingCwdMessage(rawInput: unknown): IncomingCwdMessage | null {
288
+ if (isJSON(rawInput)) {
289
+ const decodedType = decodeString(rawInput['type']);
290
+ const decodedPath = decodeString(rawInput['path']);
291
+
292
+ if (decodedType === null || decodedPath === null) {
293
+ return null;
294
+ }
295
+
296
+ return {
297
+ type: decodedType,
298
+ path: decodedPath,
299
+ };
300
+ }
301
+ return null;
302
+ }
303
+
304
+ export type IncomingMessage =
305
+ | CIncomingMessageIncomingActivityMessage
306
+ | CIncomingMessageIncomingExitMessage
307
+ | CIncomingMessageIncomingOutputMessage
308
+ | CIncomingMessageIncomingScrollbackMessage
309
+ | CIncomingMessageIncomingInfoMessage
310
+ | CIncomingMessageIncomingCwdMessage;
311
+
312
+ export function decodeIncomingMessage(rawInput: unknown): IncomingMessage | null {
313
+ const result: IncomingMessage | null =
314
+ decodeCIncomingMessageIncomingActivityMessage(rawInput) ??
315
+ decodeCIncomingMessageIncomingExitMessage(rawInput) ??
316
+ decodeCIncomingMessageIncomingOutputMessage(rawInput) ??
317
+ decodeCIncomingMessageIncomingScrollbackMessage(rawInput) ??
318
+ decodeCIncomingMessageIncomingInfoMessage(rawInput) ??
319
+ decodeCIncomingMessageIncomingCwdMessage(rawInput);
320
+
321
+ return result;
322
+ }
323
+
324
+ export class CIncomingMessageIncomingActivityMessage {
325
+ data: IncomingActivityMessage;
326
+ constructor(data: IncomingActivityMessage) {
327
+ this.data = data;
328
+ }
329
+ }
330
+
331
+ export function decodeCIncomingMessageIncomingActivityMessage(
332
+ rawInput: unknown
333
+ ): CIncomingMessageIncomingActivityMessage | null {
334
+ const result = decodeIncomingActivityMessage(rawInput);
335
+ if (result === null) {
336
+ return null;
337
+ }
338
+ return new CIncomingMessageIncomingActivityMessage(result);
339
+ }
340
+
341
+ export class CIncomingMessageIncomingExitMessage {
342
+ data: IncomingExitMessage;
343
+ constructor(data: IncomingExitMessage) {
344
+ this.data = data;
345
+ }
346
+ }
347
+
348
+ export function decodeCIncomingMessageIncomingExitMessage(
349
+ rawInput: unknown
350
+ ): CIncomingMessageIncomingExitMessage | null {
351
+ const result = decodeIncomingExitMessage(rawInput);
352
+ if (result === null) {
353
+ return null;
354
+ }
355
+ return new CIncomingMessageIncomingExitMessage(result);
356
+ }
357
+
358
+ export class CIncomingMessageIncomingOutputMessage {
359
+ data: IncomingOutputMessage;
360
+ constructor(data: IncomingOutputMessage) {
361
+ this.data = data;
362
+ }
363
+ }
364
+
365
+ export function decodeCIncomingMessageIncomingOutputMessage(
366
+ rawInput: unknown
367
+ ): CIncomingMessageIncomingOutputMessage | null {
368
+ const result = decodeIncomingOutputMessage(rawInput);
369
+ if (result === null) {
370
+ return null;
371
+ }
372
+ return new CIncomingMessageIncomingOutputMessage(result);
373
+ }
374
+
375
+ export class CIncomingMessageIncomingScrollbackMessage {
376
+ data: IncomingScrollbackMessage;
377
+ constructor(data: IncomingScrollbackMessage) {
378
+ this.data = data;
379
+ }
380
+ }
381
+
382
+ export function decodeCIncomingMessageIncomingScrollbackMessage(
383
+ rawInput: unknown
384
+ ): CIncomingMessageIncomingScrollbackMessage | null {
385
+ const result = decodeIncomingScrollbackMessage(rawInput);
386
+ if (result === null) {
387
+ return null;
388
+ }
389
+ return new CIncomingMessageIncomingScrollbackMessage(result);
390
+ }
391
+
392
+ export class CIncomingMessageIncomingInfoMessage {
393
+ data: IncomingInfoMessage;
394
+ constructor(data: IncomingInfoMessage) {
395
+ this.data = data;
396
+ }
397
+ }
398
+
399
+ export function decodeCIncomingMessageIncomingInfoMessage(
400
+ rawInput: unknown
401
+ ): CIncomingMessageIncomingInfoMessage | null {
402
+ const result = decodeIncomingInfoMessage(rawInput);
403
+ if (result === null) {
404
+ return null;
405
+ }
406
+ return new CIncomingMessageIncomingInfoMessage(result);
407
+ }
408
+
409
+ export class CIncomingMessageIncomingCwdMessage {
410
+ data: IncomingCwdMessage;
411
+ constructor(data: IncomingCwdMessage) {
412
+ this.data = data;
413
+ }
414
+ }
415
+
416
+ export function decodeCIncomingMessageIncomingCwdMessage(
417
+ rawInput: unknown
418
+ ): CIncomingMessageIncomingCwdMessage | null {
419
+ const result = decodeIncomingCwdMessage(rawInput);
420
+ if (result === null) {
421
+ return null;
422
+ }
423
+ return new CIncomingMessageIncomingCwdMessage(result);
424
+ }
425
+
426
+ /**
427
+ * @type { OutgoingResizeMessage }
428
+ * @description Resize the PTY dimensions
429
+ */
430
+ export type OutgoingResizeMessage = {
431
+ /**
432
+ * @type { string }
433
+ * @memberof OutgoingResizeMessage
434
+ */
435
+ type: string;
436
+ /**
437
+ * @description New width in columns
438
+ * @type { number }
439
+ * @memberof OutgoingResizeMessage
440
+ */
441
+ cols: number;
442
+ /**
443
+ * @description New height in rows
444
+ * @type { number }
445
+ * @memberof OutgoingResizeMessage
446
+ */
447
+ rows: number;
448
+ };
449
+
450
+ export function decodeOutgoingResizeMessage(rawInput: unknown): OutgoingResizeMessage | null {
451
+ if (isJSON(rawInput)) {
452
+ const decodedType = decodeString(rawInput['type']);
453
+ const decodedCols = decodeNumber(rawInput['cols']);
454
+ const decodedRows = decodeNumber(rawInput['rows']);
455
+
456
+ if (decodedType === null || decodedCols === null || decodedRows === null) {
457
+ return null;
458
+ }
459
+
460
+ return {
461
+ type: decodedType,
462
+ cols: decodedCols,
463
+ rows: decodedRows,
464
+ };
465
+ }
466
+ return null;
467
+ }
468
+
469
+ /**
470
+ * @type { OutgoingInputMessage }
471
+ * @description Write data to PTY stdin
472
+ */
473
+ export type OutgoingInputMessage = {
474
+ /**
475
+ * @type { string }
476
+ * @memberof OutgoingInputMessage
477
+ */
478
+ type: string;
479
+ /**
480
+ * @description Raw input data to write to PTY
481
+ * @type { string }
482
+ * @memberof OutgoingInputMessage
483
+ */
484
+ data: string;
485
+ };
486
+
487
+ export function decodeOutgoingInputMessage(rawInput: unknown): OutgoingInputMessage | null {
488
+ if (isJSON(rawInput)) {
489
+ const decodedType = decodeString(rawInput['type']);
490
+ const decodedData = decodeString(rawInput['data']);
491
+
492
+ if (decodedType === null || decodedData === null) {
493
+ return null;
494
+ }
495
+
496
+ return {
497
+ type: decodedType,
498
+ data: decodedData,
499
+ };
500
+ }
501
+ return null;
502
+ }
503
+
504
+ /**
505
+ * @type { OutgoingKillMessage }
506
+ * @description Send a signal to the PTY process
507
+ */
508
+ export type OutgoingKillMessage = {
509
+ /**
510
+ * @type { string }
511
+ * @memberof OutgoingKillMessage
512
+ */
513
+ type: string;
514
+ /**
515
+ * @description Signal name to send (default SIGTERM)
516
+ * @type { string }
517
+ * @memberof OutgoingKillMessage
518
+ */
519
+ signal: string | null;
520
+ };
521
+
522
+ export function decodeOutgoingKillMessage(rawInput: unknown): OutgoingKillMessage | null {
523
+ if (isJSON(rawInput)) {
524
+ const decodedType = decodeString(rawInput['type']);
525
+ const decodedSignal = decodeString(rawInput['signal']);
526
+
527
+ if (decodedType === null) {
528
+ return null;
529
+ }
530
+
531
+ return {
532
+ type: decodedType,
533
+ signal: decodedSignal,
534
+ };
535
+ }
536
+ return null;
537
+ }
538
+
539
+ export type OutgoingMessage =
540
+ | COutgoingMessageOutgoingResizeMessage
541
+ | COutgoingMessageOutgoingInputMessage
542
+ | COutgoingMessageOutgoingKillMessage;
543
+
544
+ export function decodeOutgoingMessage(rawInput: unknown): OutgoingMessage | null {
545
+ const result: OutgoingMessage | null =
546
+ decodeCOutgoingMessageOutgoingResizeMessage(rawInput) ??
547
+ decodeCOutgoingMessageOutgoingInputMessage(rawInput) ??
548
+ decodeCOutgoingMessageOutgoingKillMessage(rawInput);
549
+
550
+ return result;
551
+ }
552
+
553
+ export class COutgoingMessageOutgoingResizeMessage {
554
+ data: OutgoingResizeMessage;
555
+ constructor(data: OutgoingResizeMessage) {
556
+ this.data = data;
557
+ }
558
+ }
559
+
560
+ export function decodeCOutgoingMessageOutgoingResizeMessage(
561
+ rawInput: unknown
562
+ ): COutgoingMessageOutgoingResizeMessage | null {
563
+ const result = decodeOutgoingResizeMessage(rawInput);
564
+ if (result === null) {
565
+ return null;
566
+ }
567
+ return new COutgoingMessageOutgoingResizeMessage(result);
568
+ }
569
+
570
+ export class COutgoingMessageOutgoingInputMessage {
571
+ data: OutgoingInputMessage;
572
+ constructor(data: OutgoingInputMessage) {
573
+ this.data = data;
574
+ }
575
+ }
576
+
577
+ export function decodeCOutgoingMessageOutgoingInputMessage(
578
+ rawInput: unknown
579
+ ): COutgoingMessageOutgoingInputMessage | null {
580
+ const result = decodeOutgoingInputMessage(rawInput);
581
+ if (result === null) {
582
+ return null;
583
+ }
584
+ return new COutgoingMessageOutgoingInputMessage(result);
585
+ }
586
+
587
+ export class COutgoingMessageOutgoingKillMessage {
588
+ data: OutgoingKillMessage;
589
+ constructor(data: OutgoingKillMessage) {
590
+ this.data = data;
591
+ }
592
+ }
593
+
594
+ export function decodeCOutgoingMessageOutgoingKillMessage(
595
+ rawInput: unknown
596
+ ): COutgoingMessageOutgoingKillMessage | null {
597
+ const result = decodeOutgoingKillMessage(rawInput);
598
+ if (result === null) {
599
+ return null;
600
+ }
601
+ return new COutgoingMessageOutgoingKillMessage(result);
602
+ }
603
+
604
+ /**
605
+ * @type { WatchedFile }
606
+ * @description Tracking state for a JSONL session file being watched by the SessionWatcher
607
+ */
608
+ export type WatchedFile = {
609
+ /**
610
+ * @description Absolute path to the JSONL session file being watched
611
+ * @type { string }
612
+ * @memberof WatchedFile
613
+ */
614
+ filePath: string;
615
+ /**
616
+ * @description Byte offset of the last read position in the file
617
+ * @type { number }
618
+ * @memberof WatchedFile
619
+ */
620
+ offset: number;
621
+ };
622
+
623
+ export function decodeWatchedFile(rawInput: unknown): WatchedFile | null {
624
+ if (isJSON(rawInput)) {
625
+ const decodedFilePath = decodeString(rawInput['filePath']);
626
+ const decodedOffset = decodeNumber(rawInput['offset']);
627
+
628
+ if (decodedFilePath === null || decodedOffset === null) {
629
+ return null;
630
+ }
631
+
632
+ return {
633
+ filePath: decodedFilePath,
634
+ offset: decodedOffset,
635
+ };
636
+ }
637
+ return null;
638
+ }