@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,18 +1,8 @@
1
+ import type { NotificationSession } from '$generated/types';
2
+
1
3
  import { getNotifications, type NotificationRecord } from './notification-history';
2
4
 
3
- export interface Session {
4
- duration: number; // seconds
5
- endTime: string;
6
- eventCount: number;
7
- events: NotificationRecord[];
8
- filesModified: string[];
9
- id: string;
10
- project: string;
11
- runtime: string;
12
- startTime: string;
13
- status: 'active' | 'complete';
14
- toolsUsed: string[];
15
- }
5
+ export type Session = NotificationSession;
16
6
 
17
7
  const SESSION_GAP_MS = 30 * 60 * 1000; // 30 min gap = new session
18
8
  const ACTIVE_THRESHOLD_MS = 5 * 60 * 1000; // active if last event < 5 min ago
@@ -1,14 +1,9 @@
1
1
  // Shared in-memory store for pending permission requests.
2
2
  // Used by /api/notify (creates entries) and /api/response (reads/updates).
3
3
 
4
- export interface PendingRequest {
5
- createdAt: number;
6
- decidedAt: null | number;
7
- decision: 'allow' | 'deny' | null;
8
- sessionId: string;
9
- toolInput: Record<string, unknown>;
10
- toolName: string;
11
- }
4
+ import type { PendingRequest } from '$generated/types';
5
+
6
+ export type { PendingRequest };
12
7
 
13
8
  const MAX_AGE_MS = 5 * 60 * 1000; // 5 minutes
14
9
 
@@ -7,12 +7,13 @@ import type {
7
7
  SentDetail,
8
8
  } from '$generated/types';
9
9
 
10
- // Types not yet generated by type-crafter (contain $ref/arrays/oneOf)
11
- // TODO: Remove these once type-crafter generates them
10
+ // Composite types built from generated primitives. These use arrays and
11
+ // union constructs that type-crafter does not emit, so they stay as local
12
+ // definitions.
12
13
 
13
14
  export interface LibraryResult {
14
- failed: LibraryFailedItem[] | null;
15
- sent: LibrarySentItem[] | null;
15
+ failed: LibraryFailedItem[];
16
+ sent: LibrarySentItem[];
16
17
  }
17
18
 
18
19
  export interface NotificationPayload {
@@ -6,8 +6,9 @@ export type { ExitCallback, OutputCallback } from './runner';
6
6
  // Types generated by type-crafter
7
7
  export type { CLIOptions };
8
8
 
9
- // Types not yet generated by type-crafter (contain $ref/arrays)
10
- // TODO: Remove these once type-crafter generates them
9
+ // Types defined in YAML spec (cli.yaml) but not generated by type-crafter
10
+ // because they contain $ref or array constructs.
11
+ // TODO: Remove once type-crafter supports these constructs.
11
12
  export interface CLICommand {
12
13
  args: string[];
13
14
  name: string;
@@ -30,15 +30,17 @@ export async function sendFCMNotification(
30
30
  },
31
31
  data: {
32
32
  body: payload.body || payload.message || '',
33
- category: payload.category ? String(payload.category) : (payload.data?.category ? String(payload.data.category) : ''),
34
- project: payload.data?.project ? String(payload.data.project) : '',
35
- requestId: payload.data?.requestId ? String(payload.data.requestId) : '',
36
- source: payload.data?.source ? String(payload.data.source) : '',
33
+ category:
34
+ payload.category ??
35
+ (typeof payload.data?.category === 'string' ? payload.data.category : ''),
36
+ project: typeof payload.data?.project === 'string' ? payload.data.project : '',
37
+ requestId: typeof payload.data?.requestId === 'string' ? payload.data.requestId : '',
38
+ source: typeof payload.data?.source === 'string' ? payload.data.source : '',
37
39
  timestamp: new Date().toISOString(),
38
40
  title: payload.title,
39
41
  toolInput: payload.data?.toolInput ? JSON.stringify(payload.data.toolInput) : '',
40
- toolName: payload.data?.toolName ? String(payload.data.toolName) : '',
41
- type: payload.data?.type ? String(payload.data.type) : '',
42
+ toolName: typeof payload.data?.toolName === 'string' ? payload.data.toolName : '',
43
+ type: typeof payload.data?.type === 'string' ? payload.data.type : '',
42
44
  },
43
45
  token: deviceToken,
44
46
  };
@@ -14,12 +14,12 @@ import type { ConversationMessage, MessagePart } from './types';
14
14
  * These are control/metadata entries that don't represent conversation content.
15
15
  */
16
16
  export const SKIP_EVENT_TYPES = new Set([
17
- 'system',
18
17
  'config',
19
- 'summary',
20
- 'result',
21
18
  'heartbeat',
22
19
  'metadata',
20
+ 'result',
21
+ 'summary',
22
+ 'system',
23
23
  ]);
24
24
 
25
25
  /**
@@ -74,8 +74,6 @@ export function listProjectsWithSessions(): ProjectGroup[] {
74
74
 
75
75
  for (const dir of projectDirs) {
76
76
  const projectDir = path.join(CLAUDE_PROJECTS_DIR, dir);
77
- // Decode project path (fallback, prefer session's projectPath)
78
- const decodedPath = dir.startsWith('-') ? dir.replace(/-/g, '/') : `/${dir.replace(/-/g, '/')}`;
79
77
 
80
78
  // Get sessions for this project
81
79
  const sessions = listSessionsForProject(projectDir);
@@ -86,10 +84,12 @@ export function listProjectsWithSessions(): ProjectGroup[] {
86
84
  // Sort sessions by modified desc
87
85
  sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());
88
86
 
89
- // Get real project path from session data instead of decoding directory name
87
+ // Prefer projectPath from session index, then cwd from JSONL, then decoded dir name
90
88
  const realPath =
91
89
  sessions.find((s) => s.projectPath && !s.projectPath.includes('.claude/projects'))
92
- ?.projectPath || decodedPath;
90
+ ?.projectPath ||
91
+ readCwdFromProjectDir(projectDir, sessions) ||
92
+ (dir.startsWith('-') ? dir.replace(/-/g, '/') : `/${dir.replace(/-/g, '/')}`);
93
93
  const pathSegments = realPath.split('/').filter(Boolean);
94
94
  const projectName = pathSegments.slice(-2).join('/');
95
95
 
@@ -122,7 +122,8 @@ function cleanTitle(prompt: string): string {
122
122
  .replace(/<command-args>.*?<\/command-args>/gs, '')
123
123
  .replace(/<local-command-caveat>.*?<\/local-command-caveat>/gs, '')
124
124
  .replace(/<local-command-stdout>.*?<\/local-command-stdout>/gs, '')
125
- .replace(/<system-reminder>.*?<\/system-reminder>/gs, '');
125
+ .replace(/<system-reminder>.*?<\/system-reminder>/gs, '')
126
+ .replace(/<task-notification>.*?<\/task-notification>/gs, '');
126
127
 
127
128
  // Iteratively strip tags until none remain (prevents reconstructed tags like "<scr" + "ipt>")
128
129
  let prev = '';
@@ -220,7 +221,9 @@ function listSessionsForProject(projectDir: string): SessionInfo[] {
220
221
  // Count user + assistant messages for the message count
221
222
  const lines = content.split('\n');
222
223
  for (const line of lines) {
223
- if (!line.trim()) { continue; }
224
+ if (!line.trim()) {
225
+ continue;
226
+ }
224
227
  try {
225
228
  const entry = JSON.parse(line);
226
229
  if (entry.type === 'user' || entry.type === 'assistant') {
@@ -232,12 +235,18 @@ function listSessionsForProject(projectDir: string): SessionInfo[] {
232
235
  }
233
236
  // Find the first real user message (skip system caveats, commands, tool results)
234
237
  for (const line of lines) {
235
- if (!line.trim()) { continue; }
238
+ if (!line.trim()) {
239
+ continue;
240
+ }
236
241
  try {
237
242
  const entry = JSON.parse(line);
238
- if (entry.type !== 'user') { continue; }
243
+ if (entry.type !== 'user') {
244
+ continue;
245
+ }
239
246
  const msg = entry.message;
240
- if (!msg?.content) { continue; }
247
+ if (!msg?.content) {
248
+ continue;
249
+ }
241
250
 
242
251
  // Extract text from content (can be string or array of blocks)
243
252
  let text = '';
@@ -256,14 +265,22 @@ function listSessionsForProject(projectDir: string): SessionInfo[] {
256
265
  }
257
266
  }
258
267
 
259
- if (!text) { continue; }
268
+ if (!text) {
269
+ continue;
270
+ }
260
271
 
261
272
  // Skip system-injected caveats and command outputs
262
- if (text.startsWith('<local-command') ||
263
- text.startsWith('<command-name>') ||
264
- text.startsWith('<local-command-stdout>') ||
265
- text.startsWith('<system-reminder>') ||
266
- text.startsWith('<task-notification>')) {
273
+ // Keep aligned with cleanTitle() tag stripping
274
+ if (
275
+ text.startsWith('<local-command') ||
276
+ text.startsWith('<command-name>') ||
277
+ text.startsWith('<command-message>') ||
278
+ text.startsWith('<command-args>') ||
279
+ text.startsWith('<local-command-stdout>') ||
280
+ text.startsWith('<local-command-caveat>') ||
281
+ text.startsWith('<system-reminder>') ||
282
+ text.startsWith('<task-notification>')
283
+ ) {
267
284
  continue;
268
285
  }
269
286
 
@@ -299,3 +316,31 @@ function listSessionsForProject(projectDir: string): SessionInfo[] {
299
316
  return [];
300
317
  }
301
318
  }
319
+
320
+ function readCwdFromProjectDir(projectDir: string, sessions: SessionInfo[]): string {
321
+ for (const session of sessions) {
322
+ try {
323
+ const jsonlPath = path.join(projectDir, `${session.id}.jsonl`);
324
+ if (!fs.existsSync(jsonlPath)) {
325
+ continue;
326
+ }
327
+ const content = fs.readFileSync(jsonlPath, 'utf-8');
328
+ for (const line of content.split('\n')) {
329
+ if (!line.trim()) {
330
+ continue;
331
+ }
332
+ try {
333
+ const entry = JSON.parse(line) as Record<string, unknown>;
334
+ if (typeof entry.cwd === 'string' && entry.cwd) {
335
+ return entry.cwd;
336
+ }
337
+ } catch {
338
+ // skip malformed lines
339
+ }
340
+ }
341
+ } catch {
342
+ // skip unreadable files
343
+ }
344
+ }
345
+ return '';
346
+ }
@@ -1,33 +1,22 @@
1
+ // Re-export generated types that match 1:1
2
+ export type { MessageRole, ProjectGroup, SessionInfo } from '$generated/types';
3
+ import type { MessageRole } from '$generated/types';
4
+
5
+ // ── Local interfaces ─────────────────────────────────────────────────
6
+ // These remain local because the generated versions differ structurally:
7
+ // generated MessagePart uses wrapper classes (CMessagePartTextPart, etc.)
8
+ // and part types use `type: string` instead of string literals needed
9
+ // for discriminated unions. Declared as interfaces per ESLint rules.
10
+
1
11
  export interface ConversationMessage {
2
12
  id: string;
3
13
  parts: MessagePart[];
4
- role: 'assistant' | 'system' | 'user';
14
+ role: MessageRole;
5
15
  timestamp: string;
6
16
  }
7
17
 
8
18
  export type MessagePart = TextPart | ThinkingPart | ToolResultPart | ToolUsePart;
9
19
 
10
- export interface ProjectGroup {
11
- fullPath: string;
12
- id: string;
13
- lastModified: string;
14
- name: string;
15
- sessionCount: number;
16
- sessions: SessionInfo[];
17
- }
18
-
19
- export interface SessionInfo {
20
- created: string;
21
- gitBranch: string;
22
- id: string;
23
- messageCount: number;
24
- modified: string;
25
- projectPath: string;
26
- source: 'claude-code' | 'opencode';
27
- summary: string;
28
- title: string;
29
- }
30
-
31
20
  export interface TextPart {
32
21
  content: string;
33
22
  type: 'text';